From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 7436042831 for ; Mon, 4 Apr 2022 12:29:35 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B966F68B2C1; Mon, 4 Apr 2022 15:29:31 +0300 (EEST) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BA5DA68B0D6 for ; Mon, 4 Apr 2022 15:29:25 +0300 (EEST) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20220404122923euoutp01b32ec1fe0af633ae1f369863929cfd5b~isU43EfSX2385323853euoutp01c for ; Mon, 4 Apr 2022 12:29:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20220404122923euoutp01b32ec1fe0af633ae1f369863929cfd5b~isU43EfSX2385323853euoutp01c DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1649075363; bh=xnhVhZXq4/qndi+l5sMuyVuRcIJyER/qAa+/kWWhYWM=; h=From:To:Subject:Date:References:From; b=r2xokZ6lVUBGmZQpCnhSR7oolqoEt4UawLcC07AiC54IClxRa+EpTQ5Enzhly7UZa +kqID8/JrlWJotY2YjFGW5ZcoFfs1wmbwPj1zQrNYBvmCQCVZv1O3TQHWmrPl1Oi2W QGUOCCUTvf6sCIqQTOHGaQC1VkBWxsNSwey7etxQ= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20220404122922eucas1p199aeb12166fd9b3355df2b39b39964b5~isU4vCYiX0998509985eucas1p1L for ; Mon, 4 Apr 2022 12:29:22 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id C4.3C.10009.2A4EA426; Mon, 4 Apr 2022 13:29:22 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20220404122922eucas1p1013831b43a516e8460cfe56737a38884~isU4O6rbP2495424954eucas1p1B for ; Mon, 4 Apr 2022 12:29:22 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20220404122922eusmtrp24272c9245e43ca19b4ac8ed46e1ca1c0~isU4OTlmD1978219782eusmtrp2B for ; Mon, 4 Apr 2022 12:29:22 +0000 (GMT) X-AuditID: cbfec7f2-e7fff70000002719-73-624ae4a20e67 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 1C.92.09522.2A4EA426; Mon, 4 Apr 2022 13:29:22 +0100 (BST) Received: from AMDN3260 (unknown [106.210.132.171]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220404122921eusmtip291a7628ae998a0cb3082d41e72be2604~isU3wKoqz1209912099eusmtip2n for ; Mon, 4 Apr 2022 12:29:21 +0000 (GMT) From: "Dawid Kozinski" To: Date: Mon, 4 Apr 2022 14:29:21 +0200 Message-ID: <006701d8481f$9ccdf900$d669eb00$@samsung.com> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AdhIEWHOQ70js/GYTfqMumPOb5ERpg== Content-Language: pl X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrJIsWRmVeSWpSXmKPExsWy7djPc7qLnnglGTydamjx7dMZZgdGjz+L NrMEMEZx2aSk5mSWpRbp2yVwZdydfZ+tYFUjV8WvY7OZGxgfd3N2MXJwSAiYSLzdlNrFyMUh JLCCUeLKjj/MEM4kJok167tYIJyJTBIzNu9j6mLkBOvoWdIJVbWcUeLU1B5WCKeNSeLt3cvs IFVsAvoSMxd9YgOxRQRkJVb/m8IGsk9YIFBiyll3kDCLgIrEsr8rGUFsXgFLifbWOWwQtqDE yZlPWEBsZgFtiWULXzNDLFaQ+Pl0GSvESD2JBfuPMUHUiEjceNTCCHKDhMBPdol1l06xQjS4 SHz8NJ8FwhaWeHV8CzuELSPxf+d8Joj/iyUO9TtAmDUSh36kQ1RYS7xtPM4IEmYW0JRYv0sf Iuwo8eD5IUaIaj6JG28FIQ7gk5i0bTozRJhXoqNNCMJUkejrFINolJJ4umwO1BseEr9Oz2Od wKg4C8m3s5B8OwvJV7MQTljAyLKKUTy1tDg3PbXYMC+1XK84Mbe4NC9dLzk/dxMjMDWc/nf8 0w7Gua8+6h1iZOJgPMQowcGsJMKbE+SZJMSbklhZlVqUH19UmpNafIhRmoNFSZw3OXNDopBA emJJanZqakFqEUyWiYNTqoGpnE1KclGM227ts3oO9Q8solfdvftSJ4mN9//CWTIczFbVBw8J H2NLkYxYphHztf5S9HZl9777tQUMIeppUqnPd12Y9PvOnhPGvvyLnigZ72b6aH92+Z3p754+ nWRjFykyM3Rpu4OD68vpj08frLpTIPOMkZnftGkyR59IMN+/w182ntje2O9eq6BTXD8ly/7e NieHBuX2zR16chPW+gholVTnf8oLzPSzqNH4Xz/fQ3vubYltV+1efKsStK5gVE27WKNkmPiP 9RrPhfD5BlOnLjygJnpcdqIki6V7yEqHifWeEZOLRT4mPTg8+0bgZu3Z3x9JVV2Xq/jDzCa2 5rfm/WJGZ8X5q1lkrnxkmaTEUpyRaKjFXFScCACL+L0yfAMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrJLMWRmVeSWpSXmKPExsVy+t/xe7qLnnglGTzZzmfx7dMZZgdGjz+L NrMEMEbp2RTll5akKmTkF5fYKkUbWhjpGVpa6BmZWOoZGpvHWhmZKunb2aSk5mSWpRbp2yXo Zbx638JSMG8ae8Xa3ctZGhiXLGLtYuTkkBAwkehZ0sncxcjFISSwlFHi6uNlLBAJKYmlSxcx QtjCEn+udbFBFLUwSWx++IUZJMEmoC8xc9EnNhBbREBWYvW/KWC2sIC/RN/GrewgNouAisSy vyvBBvEKWEq0t85hg7AFJU7OfAK2jFlAW+Lpzadw9rKFr5khFitI/Hy6jBVivp7Egv3HmCBq RCRuPGphnMAoMAvJqFlIRs1CMmoWkpYFjCyrGEVSS4tz03OLDfWKE3OLS/PS9ZLzczcxAsN8 27Gfm3cwznv1Ue8QIxMH4yFGCQ5mJRHenCDPJCHelMTKqtSi/Pii0pzU4kOMpkC/TWSWEk3O B0ZaXkm8oZmBqaGJmaWBqaWZsZI4r2dBR6KQQHpiSWp2ampBahFMHxMHp1QDk0T4kbfTpvic COEJlLRx5JTIkJhn+3TqbdkLNwWuWbpxvOTQ+cd7jc2qnPe6/fRLL0wduqc7VV5K2PBx7ebw 45LMj3y0Hv3RO5wUm73x6eHyLwnFv9U4Eo7ejQ2//3rK4xWelUIXwr6I5X3lPPB9R4P5ao6o eR//nZVRr2yY7zDL+LPE8uy9czZMYvjnLl+qUfjrVaf9Oi4uscKZV1dsv3fMS2rB91/tbIdX q306eU7idfYXt3mJu+4v1Ho242T6S1l38ai7YvfEhFUMzrrp3T658+PeN5vnfnQSWPkjyOXx 9BWLk+89zCq4HNt24v8hG08jJsZWvs8ijDLv/2QbbD67ZcKf622sSfWvDi99dfOuEktxRqKh FnNRcSIABzvM6vwCAAA= X-CMS-MailID: 20220404122922eucas1p1013831b43a516e8460cfe56737a38884 X-Msg-Generator: CA X-RootMTR: 20220404122922eucas1p1013831b43a516e8460cfe56737a38884 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20220404122922eucas1p1013831b43a516e8460cfe56737a38884 References: Subject: [FFmpeg-devel] [PATCH] Provided support for MPEG-5 EVC (Essential Video Coding) codec X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCjEuIEdlbmFyYWwgaW5mbwoj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKClRoZSBwYXRjaCBwcm92aWRl ZCBiZWxvdyBjb250YWlucyBpbnRlZ3JhdGlvbiBsYXllciBiZXR3ZWVuIGZmbXBlZyBmcmFtZXdv cmsgYW5kIEVWQyBjb2RlYyBpbXBsZW1lbnRhdGlvbi4KSW4gbnV0c2hlbGwgaXQgZW5hYmxlIHVz aW5nIEVWQyBjb2RlYyAoZW5jb2RpbmcsIGRlY29kaW5nKSAgYnkgdGhlIG1lYW5zIG9mIGZmbXBl ZyBBUEkuIApJJ2QgbGlrZSB0byBlbXBoYXNpemUgb25lIG1vcmUgdGltZSwgdGhhdCAoYXMgbWVu dGlvbmVkIGJlZm9yZSkgdGhhdCBpdCBpc24ndCBjb2RlYyBpbXBsZW1lbnRhdGlvbi4gVGhlIHBy b3ZpZGVkIGltcGxlbWVudGF0aW9uIHNlcnZlcyBhcyBpbnRlZ3JhdGlvbiBsYXllciBiZXR3ZWVu IGZmbXBlZyBmcmFtZXdvcmsgYW5kIEVWQyBjb2RlYy4KCkVWQyBjb2RlYyBoYXMgYmVlbiBwdWJs aXNoZWQgYXMgdHdvIHNlcGFyYXRlIGxpYnJhcmllcy4gClRoZSBmaXJzdCBvbmUgY2FsbGVkIFhF VkUgKGVYdHJhLWZhc3QgRXNzZW50aWFsIFZpZGVvIEVuY29kZXIpIGlzIGFuIG9wZW5zb3VyY2Ug TVBFRy01IEVWQyBlbmNvZGVyLgpUaGUgc2Vjb25kIG9uZSBjYWxsZWQgWEVWRCAoZVh0cmEtZmFz dCBFc3NlbnRpYWwgVmlkZW8gRGVjb2RlciApIGlzIGFuIG9wZW5zb3VyY2UgTVBFRy01IEVWQyBk ZWNvZGVyLgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBib3RoIGxpYnJhcmllcyBwbGVhc2UgZm9s bG93IHRoZSBsaW5rcyBiZWxvdzoKKiBodHRwczovL2dpdGh1Yi5jb20vbXBlZzUveGV2ZSAKKiBo dHRwczovL2dpdGh1Yi5jb20vbXBlZzUveGV2ZCAKClRoZSBwYXRjaCBwcm92aWRlZCBiZWxvdyBz aG91bGQgYmUgYXBwbHkgdG8gRkZtcGVnIDUuMCByZWxlYXNlIChjb21taXQgOTExZDdmMTY3YzMw ZjI3YTA0MmI4NTU4ZGZjZjAxMmIzYzIwZTg1OCByZWxlYXNlLzUuMCkKCiMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoyLiBCdWlsZGluZwojIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKCjMuMS4gRG93bmxvYWQsIGJ1aWxkIGFuZCBpbnN0YWxsIGRl cGVuZGVuY2llcwoKRGVwZW5kZW5jaWVzOgoqIGVYdHJhLWZhc3QgRXNzZW50aWFsIFZpZGVvIEVu Y29kZXIgKFhFVkUpIChodHRwczovL2dpdGh1Yi5jb20vbXBlZzUveGV2ZSkKKiBlWHRyYS1mYXN0 IEVzc2VudGlhbCBWaWRlbyBEZWNvZGVyIChYRVZEKSAoaHR0cHM6Ly9naXRodWIuY29tL21wZWc1 L3hldmQpCgotLS0tLS0tLS0tLS0tLS0tLS0tCjIuMS4xLiBYRVZFCi0tLS0tLS0tLS0tLS0tLS0t LS0KZ2l0IGNsb25lIGdpdEBnaXRodWIuY29tOm1wZWc1L3hldmUuZ2l0IApjZCB4ZXZlCgotLS0t LS0tLS0tLS0tLS0tLS0tCmJhc2UgcHJvZmlsZQotLS0tLS0tLS0tLS0tLS0tLS0tCm1rZGlyIGJ1 aWxkX2Jhc2UKY2QgYnVpZF9iYXNlCmNtYWtlIC4uIC1EU0VUX1BST0Y9QkFTRQptYWtlCm1ha2Ug aW5zdGFsbAoKLS0tLS0tLS0tLS0tLS0tLS0tLQptYWluIHByb2ZpbGUKLS0tLS0tLS0tLS0tLS0t LS0tLQpta2RpciBidWlsZF9tYWluCmNkIGJ1aWRfYmFzZQpjbWFrZSAuLiAtRFNFVF9QUk9GPU1B SU4KbWFrZQptYWtlIGluc3RhbGwKCi0tLS0tLS0tLS0tLS0tLS0tLS0KMi4xLjIuIFhFVkQKLS0t LS0tLS0tLS0tLS0tLS0tLQpnaXQgY2xvbmUgZ2l0QGdpdGh1Yi5jb206bXBlZzUveGV2ZS5naXQK Y2QgeGV2ZQoKLS0tLS0tLS0tLS0tLS0tLS0tLQpiYXNlIHByb2ZpbGUKLS0tLS0tLS0tLS0tLS0t LS0tLQpta2RpciBidWlsZF9iYXNlCmNkIGJ1aWRfYmFzZQpjbWFrZSAuLiAtRFNFVF9QUk9GPUJB U0UKbWFrZQptYWtlIGluc3RhbGwKCi0tLS0tLS0tLS0tLS0tLS0tLS0KbWFpbiBwcm9maWxlCi0t LS0tLS0tLS0tLS0tLS0tLS0KCm1rZGlyIGJ1aWxkX21haW4KY2QgYnVpZF9iYXNlCmNtYWtlIC4u IC1EU0VUX1BST0Y9TUFJTgptYWtlCm1ha2UgaW5zdGFsbAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCjIuMi4gQnVpbGQgZmZtcGVnIHdpdGggbGlieGV2ZSBhbmQgbGli eGV2ZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSXQgaXMgcmVxdWly ZWQgZmZtcGVnIHRvIGJlIGNvbmZpZ2Z1cmVkIHdpdGggLS1lbmFibGUtbGlieGV2ZSBhbmQgLS1l bmFibGUtbGlieGV2ZAoKUGxlYXNlIGZpbmQgYmVsb3cgZXhhcGxlIGNvbmZpZ3VyYXRpb24uCgpQ QVRIPSIkSE9NRS9iaW46JFBBVEgiIFBLR19DT05GSUdfUEFUSD0iJEhPTUUvZmZtcGVnX2J1aWxk L2xpYi9wa2djb25maWciIC4vY29uZmlndXJlIFwKLS1wcmVmaXg9IiRIT01FL2ZmbXBlZ19idWls ZCIgXAotLXBrZy1jb25maWctZmxhZ3M9Ii0tc3RhdGljIiBcCi0tZXh0cmEtY2ZsYWdzPSItSSRI T01FL2ZmbXBlZ19idWlsZC9pbmNsdWRlIiBcCi0tZXh0cmEtbGRmbGFncz0iLUwkSE9NRS9mZm1w ZWdfYnVpbGQvbGliIiBcCi0tZXh0cmEtbGlicz0iLWxwdGhyZWFkIC1sbSIgXAotLWJpbmRpcj0i JEhPTUUvYmluIiBcCi0tZW5hYmxlLWdwbCBcCi0tZW5hYmxlLWdudXRscyBcCi0tZW5hYmxlLWxp YmFvbSBcCi0tZW5hYmxlLWxpYmFzcyBcCi0tZW5hYmxlLWxpYmZkay1hYWMgXAotLWVuYWJsZS1s aWJmcmVldHlwZSBcCi0tZW5hYmxlLWxpYm1wM2xhbWUgXAotLWVuYWJsZS1saWJvcHVzIFwKLS1l bmFibGUtbGliZGF2MWQgXAotLWVuYWJsZS1saWJ2b3JiaXMgXAotLWVuYWJsZS1saWJ2cHggXAot LWVuYWJsZS1saWJ4MjY0IFwKLS1lbmFibGUtbGlieDI2NSBcCi0tZW5hYmxlLWxpYnhldmUgXAot LWVuYWJsZS1saWJ4ZXZkIFwKLS1lbmFibGUtbm9uZnJlZSAmJiBcClBBVEg9IiRIT01FL2Jpbjok UEFUSCIgbWFrZSAtaiAkKG5wcm9jKQoKbWFrZSBpbnN0YWxsCgojIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKMy4gRXhhbXBsZXMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCgpQbGVhc2UgZmluZCBiZWxvdyBleGFtcGxlcyBvbiBob3cgdG8gdXNl IEVWQyBjb2RlZCB3aXRoIGZmbXBlZyBjb21tYW5kbGluZSB0b29sLgoKKEFsbCBzYW1wbGVzIGFy ZSBhdmFpbGFibGUgaW4gaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2RyaXZlL2ZvbGRlcnMvMVl0 Q0xsU3VUQWpwTHppVEtJX1FCdVFySU9tMnNzOUxCP3VzcD1zaGFyaW5nICkKCiMhL2Jpbi9iYXNo CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyhZVVY0MjBQKSAtPiAo RVZDKQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmZmbXBlZyAtZiBy YXd2aWRlbyAtcGl4X2ZtdCB5dXY0MjBwIC1zOnYgMzUyeDI4OCAtciAzMCAtaSBUZXN0X1ZpZGVv X2NpZi55dXYgLWM6diBsaWJ4ZXZlIC1mIHJhd3ZpZGVvIFRlc3RfVmlkZW9fY2lmLnl1di5ldmMK ZmZwbGF5IC1hdXRvZXhpdCBUZXN0X1ZpZGVvX2NpZi55dXYuZXZjCgojPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CiMoWVVWNDIwUDEwTEUpIC0+IChFVkMpCiM9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZmZtcGVnIC1mIHJhd3ZpZGVvIC1waXhf Zm10IHl1djQyMHAxMGxlIC1zOnYgMzUyeDI4OCAtciAzMCAtaSBUZXN0X1ZpZGVvX2NpZl8xMGxl Lnl1diAtYzp2IGxpYnhldmUgLWYgcmF3dmlkZW8gVGVzdF9WaWRlb19jaWZfMTBsZS55dXYuZXZj CmZmcGxheSAtYXV0b2V4aXQgVGVzdF9WaWRlb19jaWZfMTBsZS55dXYuZXZjCgojPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMoRVZDKSAtPiAoWVVWNDIwUCkKIz09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpmZm1wZWcgLWkgVGVzdF9WaWRlb19j aWYueXV2LmV2YyAtcGl4X2ZtdCB5dXY0MjBwIFRlc3RfVmlkZW9fY2lmLmV2Yy55dXYKZmZwbGF5 IC1hdXRvZXhpdCAtZiByYXd2aWRlbyAtcGl4ZWxfZm9ybWF0IHl1djQyMHAgLXZpZGVvX3NpemUg MzUyeDI4OCAgVGVzdF9WaWRlb19jaWYuZXZjLnl1dgoKIz09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQojKEVWQykgLT4gKFlVVjQyMFBpMTBMRSkKIz09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpmZm1wZWcgLWkgVGVzdF9WaWRlb19jaWZfMTBsZS55 dXYuZXZjIC1waXhfZm10IHl1djQyMHAxMGxlIFRlc3RfVmlkZW9fY2lmXzEwbGUuZXZjLnl1dgpm ZnBsYXkgLWF1dG9leGl0IC1mIHJhd3ZpZGVvIC1waXhlbF9mb3JtYXQgeXV2NDIwcDEwbGUgLXZp ZGVvX3NpemUgMzUyeDI4OCAgVGVzdF9WaWRlb19jaWZfMTBsZS5ldmMueXV2CgojPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMoWVVWNDIwUCkgLT4gKE1QNCkKIz09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpmZm1wZWcgLWYgcmF3dmlkZW8gLXBp eF9mbXQgeXV2NDIwcCAtczp2IDM1MngyODggLXIgMzAgLWkgVGVzdF9WaWRlb19jaWYueXV2IC1j OnYgbGlieGV2ZSAtZiByYXd2aWRlbyBUZXN0X1ZpZGVvX2NpZi55dXYubXA0CmZmcGxheSAtYXV0 b2V4aXQgVGVzdF9WaWRlb19jaWYueXV2Lm1wNAoKIz09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQojKFlVVjQyMFAxMExFKSAtPiAoTVA0KQojPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CmZmbXBlZyAtZiByYXd2aWRlbyAtcGl4X2ZtdCB5dXY0MjBw MTBsZSAtczp2IDM1MngyODggLXIgMzAgLWkgVGVzdF9WaWRlb19jaWZfMTBsZS55dXYgLWM6diBs aWJ4ZXZlIC1mIHJhd3ZpZGVvIFRlc3RfVmlkZW9fY2lmXzEwbGUueXV2Lm1wNApmZnBsYXkgLWF1 dG9leGl0IFRlc3RfVmlkZW9fY2lmXzEwbGUueXV2Lm1wNAoKIz09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQojKE1QNCkgLT4gKFlVVjQyMFApCiM9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KZmZtcGVnIC1pIFRlc3RfVmlkZW9fY2lmLnl1di5tcDQg LWYgcmF3dmlkZW8gLXBpeF9mbXQgeXV2NDIwcCBUZXN0X1ZpZGVvX2NpZi5tcDQueXV2CmZmcGxh eSAtYXV0b2V4aXQgLWYgcmF3dmlkZW8gLXBpeGVsX2Zvcm1hdCB5dXY0MjBwIC12aWRlb19zaXpl IDM1MngyODggVGVzdF9WaWRlb19jaWYubXA0Lnl1dgoKIz09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQojKE1QNCkgLT4gIChZVVY0MjBQMTBMRSkKIz09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpmZm1wZWcgLWkgVGVzdF9WaWRlb19jaWZfMTBsZS55 dXYubXA0IC1mIHJhd3ZpZGVvIC1waXhfZm10IHl1djQyMHAxMGxlIFRlc3RfVmlkZW9fY2lmXzEw bGUubXA0Lnl1dgpmZnBsYXkgLWF1dG9leGl0IC1mIHJhd3ZpZGVvIC1waXhlbF9mb3JtYXQgeXV2 NDIwcDEwbGUgLXZpZGVvX3NpemUgMzUyeDI4OCBUZXN0X1ZpZGVvX2NpZl8xMGxlLm1wNC55dXYK CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyhFVkMpIC0+ICAoTVA0 KQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmZmbXBlZyAtaSBUZXN0 X1ZpZGVvX2NpZi55dXYuZXZjIC1jOnYgY29weSBUZXN0X1ZpZGVvX2NpZi5ldmMubXA0CmZmcGxh eSAtYXV0b2V4aXQgVGVzdF9WaWRlb19jaWYuZXZjLm1wNAoKIz09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQojKE1QNCkgLT4gIChFVkMpCiM9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KZmZtcGVnIC1pIFRlc3RfVmlkZW9fY2lmLmV2Yy5tcDQgLXZj b2RlYyBjb3B5IC1hbiAtZiByYXd2aWRlbyBUZXN0X1ZpZGVvX2NpZi5ldmMubXA0LmV2YwpmZnBs YXkgLWF1dG9leGl0IFRlc3RfVmlkZW9fY2lmLmV2Yy5tcDQuZXZjCgojPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CiMoTVA0IFtoMjY0LGFhY10pIC0+ICAoTVA0IFtldmMs YWFjXSkKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpmZm1wZWcgLWkg VGVzdF9WaWRlb19jaWYubXA0IC1jOnYgbGlieGV2ZSBUZXN0X1ZpZGVvX2NpZl9ldmMubXA0CmZm cGxheSAtYXV0b2V4aXQgVGVzdF9WaWRlb19jaWZfZXZjLm1wNAoKU2lnbmVkLW9mZi1ieTogRGF3 aWQgS296aW5za2kgPGQua296aW5za2lAc2Ftc3VuZy5jb20+Ci0tLQogQ2hhbmdlbG9nICAgICAg ICAgICAgICAgIHwgICAgMyArLQogY29uZmlndXJlICAgICAgICAgICAgICAgIHwgICAxMCArCiBs aWJhdmNvZGVjL01ha2VmaWxlICAgICAgfCAgICA0ICsKIGxpYmF2Y29kZWMvYWxsY29kZWNzLmMg ICB8ICAgIDIgKwogbGliYXZjb2RlYy9hdmNvZGVjLmggICAgIHwgICAgMyArCiBsaWJhdmNvZGVj L2NvZGVjX2Rlc2MuYyAgfCAgICA4ICsKIGxpYmF2Y29kZWMvY29kZWNfaWQuaCAgICB8ICAgIDEg KwogbGliYXZjb2RlYy9ldmNfcGFyc2VyLmMgIHwgIDQ1MiArKysrKysrKysrKysrKysKIGxpYmF2 Y29kZWMvbGlieGV2ZC5jICAgICB8ICA3MjQgKysrKysrKysrKysrKysrKysrKysrKysKIGxpYmF2 Y29kZWMvbGlieGV2ZS5jICAgICB8IDExODUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGxpYmF2Y29kZWMvcGFyc2Vycy5jICAgICB8ICAgIDEgKwogbGliYXZjb2RlYy9w cm9maWxlcy5jICAgIHwgICAgNiArCiBsaWJhdmNvZGVjL3Byb2ZpbGVzLmggICAgfCAgICAxICsK IGxpYmF2Y29kZWMvdmVyc2lvbi5oICAgICB8ICAgIDIgKy0KIGxpYmF2Zm9ybWF0L01ha2VmaWxl ICAgICB8ICAgIDIgKwogbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIHwgICAgMiArCiBsaWJhdmZv cm1hdC9ldmNkZWMuYyAgICAgfCAgMTM2ICsrKysrCiBsaWJhdmZvcm1hdC9pc29tX3RhZ3MuYyAg fCAgICAyICsKIGxpYmF2Zm9ybWF0L21vdi5jICAgICAgICB8ICAgIDIgKy0KIGxpYmF2Zm9ybWF0 L21vdmVuYy5jICAgICB8ICAgMzAgKwogbGliYXZmb3JtYXQvcmF3ZW5jLmMgICAgIHwgICAxNCAr CiAyMSBmaWxlcyBjaGFuZ2VkLCAyNTg3IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9ldmNfcGFyc2VyLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWJhdmNvZGVjL2xpYnhldmQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMv bGlieGV2ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvZXZjZGVjLmMKCmRpZmYg LS1naXQgYS9DaGFuZ2Vsb2cgYi9DaGFuZ2Vsb2cKaW5kZXggNWEzMmNmMGQ1Yy4uMjFlYmMxMWZm NCAxMDA2NDQKLS0tIGEvQ2hhbmdlbG9nCisrKyBiL0NoYW5nZWxvZwpAQCAtMTA2LDcgKzEwNiw4 IEBAIHZlcnNpb24gNS4wOgogLSBWaWRlb1Rvb2xib3ggUHJvUmVzIGVuY29kZXIKIC0gYW5sbWYg YXVkaW8gZmlsdGVyCiAtIElNRiBkZW11eGVyIChleHBlcmltZW50YWwpCi0KKy0gZVh0cmEtZmFz dCBFc3NlbnRpYWwgVmlkZW8gRW5jb2RlciAoWEVWRSkKKy0gZVh0cmEtZmFzdCBFc3NlbnRpYWwg VmlkZW8gRGVjb2RlciAoWEVWRCkKIAogdmVyc2lvbiA0LjQ6CiAtIEF1ZGlvVG9vbGJveCBvdXRw dXQgZGV2aWNlCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggN2E2MmYw YzI0OC4uNzQ5MWQzYWY2YiAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpA QCAtMjg5LDYgKzI4OSw4IEBAIEV4dGVybmFsIGxpYnJhcnkgc3VwcG9ydDoKICAgLS1lbmFibGUt bGlid2VicCAgICAgICAgIGVuYWJsZSBXZWJQIGVuY29kaW5nIHZpYSBsaWJ3ZWJwIFtub10KICAg LS1lbmFibGUtbGlieDI2NCAgICAgICAgIGVuYWJsZSBILjI2NCBlbmNvZGluZyB2aWEgeDI2NCBb bm9dCiAgIC0tZW5hYmxlLWxpYngyNjUgICAgICAgICBlbmFibGUgSEVWQyBlbmNvZGluZyB2aWEg eDI2NSBbbm9dCisgIC0tZW5hYmxlLWxpYnhldmUgICAgICAgICBlbmFibGUgWEVWRSBlbmNvZGlu ZyB2aWEgeGV2ZSBbbm9dCisgIC0tZW5hYmxlLWxpYnhldmQgICAgICAgICBlbmFibGUgWEVWRCBk ZWNvZGluZyB2aWEgeGV2ZCBbbm9dCiAgIC0tZW5hYmxlLWxpYnhhdnMgICAgICAgICBlbmFibGUg QVZTIGVuY29kaW5nIHZpYSB4YXZzIFtub10KICAgLS1lbmFibGUtbGlieGF2czIgICAgICAgIGVu YWJsZSBBVlMyIGVuY29kaW5nIHZpYSB4YXZzMiBbbm9dCiAgIC0tZW5hYmxlLWxpYnhjYiAgICAg ICAgICBlbmFibGUgWDExIGdyYWJiaW5nIHVzaW5nIFhDQiBbYXV0b2RldGVjdF0KQEAgLTE4ODAs NiArMTg4Miw4IEBAIEVYVEVSTkFMX0xJQlJBUllfTElTVD0iCiAgICAgb3BlbnNzbAogICAgIHBv Y2tldHNwaGlueAogICAgIHZhcG91cnN5bnRoCisgICAgbGlieGV2ZQorICAgIGxpYnhldmQKICIK IAogSFdBQ0NFTF9BVVRPREVURUNUX0xJQlJBUllfTElTVD0iCkBAIC0yNDUzLDYgKzI0NTcsNyBA QCBDT05GSUdfRVhUUkE9IgogICAgIGgyNjRwcmVkCiAgICAgaDI2NHFwZWwKICAgICBoZXZjcGFy c2UKKyAgICBldmNwYXJzZQogICAgIGhwZWxkc3AKICAgICBodWZmbWFuCiAgICAgaHVmZnl1dmRz cApAQCAtMzI1Miw2ICszMjU3LDcgQEAgbXBlZ2F1ZGlvX3BhcnNlcl9zZWxlY3Q9Im1wZWdhdWRp b2hlYWRlciIKIG1wZWd2aWRlb19wYXJzZXJfc2VsZWN0PSJtcGVndmlkZW8iCiBtcGVnNHZpZGVv X3BhcnNlcl9zZWxlY3Q9ImgyNjNkc3AgbXBlZ3ZpZGVvIHFwZWxkc3AiCiB2YzFfcGFyc2VyX3Nl bGVjdD0idmMxZHNwIgorZXZjX3BhcnNlcl9zZWxlY3Q9ImV2Y3BhcnNlIgogCiAjIGJpdHN0cmVh bV9maWx0ZXJzCiBhYWNfYWR0c3RvYXNjX2JzZl9zZWxlY3Q9ImFkdHNfaGVhZGVyIG1wZWc0YXVk aW8iCkBAIC0zMzc3LDYgKzMzODMsOCBAQCBsaWJ4MjY0X2VuY29kZXJfc2VsZWN0PSJhdHNjX2E1 MyIKIGxpYngyNjRyZ2JfZW5jb2Rlcl9kZXBzPSJsaWJ4MjY0IgogbGlieDI2NHJnYl9lbmNvZGVy X3NlbGVjdD0ibGlieDI2NF9lbmNvZGVyIgogbGlieDI2NV9lbmNvZGVyX2RlcHM9ImxpYngyNjUi CitsaWJ4ZXZlX2VuY29kZXJfZGVwcz0ibGlieGV2ZSIKK2xpYnhldmRfZGVjb2Rlcl9kZXBzPSJs aWJ4ZXZkIgogbGlieGF2c19lbmNvZGVyX2RlcHM9ImxpYnhhdnMiCiBsaWJ4YXZzMl9lbmNvZGVy X2RlcHM9ImxpYnhhdnMyIgogbGlieHZpZF9lbmNvZGVyX2RlcHM9ImxpYnh2aWQiCkBAIC02NjU5 LDYgKzY2NjcsOCBAQCBlbmFibGVkIGxpYngyNjQgICAgICAgICAgICYmIHsgY2hlY2tfcGtnX2Nv bmZpZyBsaWJ4MjY0IHgyNjQgInN0ZGludC5oIHgyNjQuaCIgeAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGVja19jcHBfY29uZGl0aW9uIGxpYngyNjIgeDI2NC5oICJYMjY0X01QRUcy IgogZW5hYmxlZCBsaWJ4MjY1ICAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGlieDI2 NSB4MjY1IHgyNjUuaCB4MjY1X2FwaV9nZXQgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVxdWlyZV9jcHBfY29uZGl0aW9uIGxpYngyNjUgeDI2NS5oICJYMjY1X0JVSUxEID49IDcw IgorZW5hYmxlZCBsaWJ4ZXZlICAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGlieGV2 ZSAieGV2ZSA+PSAxLjAuMCIgInhldmUuaCIgeGV2ZV9lbmNvZGUKK2VuYWJsZWQgbGlieGV2ZCAg ICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYnhldmQgInhldmQgPj0gMS4wLjAiICJ4 ZXZkLmgiIHhldmRfZGVjb2RlCiBlbmFibGVkIGxpYnhhdnMgICAgICAgICAgICYmIHJlcXVpcmUg bGlieGF2cyAic3RkaW50LmggeGF2cy5oIiB4YXZzX2VuY29kZXJfZW5jb2RlICItbHhhdnMgJHB0 aHJlYWRzX2V4dHJhbGlicyAkbGlibV9leHRyYWxpYnMiCiBlbmFibGVkIGxpYnhhdnMyICAgICAg ICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4YXZzMiAieGF2czIgPj0gMS4zLjAiICJzdGRp bnQuaCB4YXZzMi5oIiB4YXZzMl9hcGlfZ2V0CiBlbmFibGVkIGxpYnh2aWQgICAgICAgICAgICYm IHJlcXVpcmUgbGlieHZpZCB4dmlkLmggeHZpZF9nbG9iYWwgLWx4dmlkY29yZQpkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKaW5kZXggM2FkZjE1 MzZkOC4uYWIzOGIwMTI3ZiAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9NYWtlZmlsZQorKysgYi9s aWJhdmNvZGVjL01ha2VmaWxlCkBAIC0xMDg3LDYgKzEwODcsOCBAQCBPQkpTLSQoQ09ORklHX0xJ QldFQlBfQU5JTV9FTkNPREVSKSAgICAgICArPSBsaWJ3ZWJwZW5jX2NvbW1vbi5vIGxpYndlYnBl bmNfYW5pbQogT0JKUy0kKENPTkZJR19MSUJYMjYyX0VOQ09ERVIpICAgICAgICAgICAgKz0gbGli eDI2NC5vCiBPQkpTLSQoQ09ORklHX0xJQlgyNjRfRU5DT0RFUikgICAgICAgICAgICArPSBsaWJ4 MjY0Lm8KIE9CSlMtJChDT05GSUdfTElCWDI2NV9FTkNPREVSKSAgICAgICAgICAgICs9IGxpYngy NjUubworT0JKUy0kKENPTkZJR19MSUJYRVZFX0VOQ09ERVIpICAgICAgICAgICAgKz0gbGlieGV2 ZS5vCitPQkpTLSQoQ09ORklHX0xJQlhFVkRfREVDT0RFUikgICAgICAgICAgICArPSBsaWJ4ZXZk Lm8KIE9CSlMtJChDT05GSUdfTElCWEFWU19FTkNPREVSKSAgICAgICAgICAgICs9IGxpYnhhdnMu bwogT0JKUy0kKENPTkZJR19MSUJYQVZTMl9FTkNPREVSKSAgICAgICAgICAgKz0gbGlieGF2czIu bwogT0JKUy0kKENPTkZJR19MSUJYVklEX0VOQ09ERVIpICAgICAgICAgICAgKz0gbGlieHZpZC5v CkBAIC0xMTUyLDYgKzExNTQsOCBAQCBPQkpTLSQoQ09ORklHX1ZQOV9QQVJTRVIpICAgICAgICAg ICAgICArPSB2cDlfcGFyc2VyLm8KIE9CSlMtJChDT05GSUdfV0VCUF9QQVJTRVIpICAgICAgICAg ICAgICs9IHdlYnBfcGFyc2VyLm8KIE9CSlMtJChDT05GSUdfWEJNX1BBUlNFUikgICAgICAgICAg ICAgICs9IHhibV9wYXJzZXIubwogT0JKUy0kKENPTkZJR19YTUFfUEFSU0VSKSAgICAgICAgICAg ICAgKz0geG1hX3BhcnNlci5vCitPQkpTLSQoQ09ORklHX0VWQ19QQVJTRVIpICAgICAgICAgICAg ICArPSBldmNfcGFyc2VyLm8KKwogCiAjIGJpdHN0cmVhbSBmaWx0ZXJzCiBPQkpTLSQoQ09ORklH X0FBQ19BRFRTVE9BU0NfQlNGKSAgICAgICAgICArPSBhYWNfYWR0c3RvYXNjX2JzZi5vCmRpZmYg LS1naXQgYS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwpp bmRleCBkMWUxMDE5N2RlLi4xMmU2YzkyZjY1IDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL2FsbGNv ZGVjcy5jCisrKyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKQEAgLTc4Myw2ICs3ODMsOCBAQCBl eHRlcm4gTElCWDI2NF9DT05TVCBBVkNvZGVjIGZmX2xpYngyNjRfZW5jb2RlcjsKICNlbmRpZgog ZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfbGlieDI2NHJnYl9lbmNvZGVyOwogZXh0ZXJuIEFWQ29k ZWMgZmZfbGlieDI2NV9lbmNvZGVyOworZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfbGlieGV2ZV9l bmNvZGVyOworZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfbGlieGV2ZF9kZWNvZGVyOwogZXh0ZXJu IGNvbnN0IEFWQ29kZWMgZmZfbGlieGF2c19lbmNvZGVyOwogZXh0ZXJuIGNvbnN0IEFWQ29kZWMg ZmZfbGlieGF2czJfZW5jb2RlcjsKIGV4dGVybiBjb25zdCBBVkNvZGVjIGZmX2xpYnh2aWRfZW5j b2RlcjsKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYXZjb2RlYy5oIGIvbGliYXZjb2RlYy9hdmNv ZGVjLmgKaW5kZXggN2VlOGJjMmI3Yy4uYTA3MGUwZjFkNyAxMDA2NDQKLS0tIGEvbGliYXZjb2Rl Yy9hdmNvZGVjLmgKKysrIGIvbGliYXZjb2RlYy9hdmNvZGVjLmgKQEAgLTE2NDMsNiArMTY0Myw5 IEBAIHR5cGVkZWYgc3RydWN0IEFWQ29kZWNDb250ZXh0IHsKICNkZWZpbmUgRkZfUFJPRklMRV9L TFZBX1NZTkMgMAogI2RlZmluZSBGRl9QUk9GSUxFX0tMVkFfQVNZTkMgMQogCisjZGVmaW5lIEZG X1BST0ZJTEVfRVZDX0JBU0VMSU5FICAgICAgICAgICAgIDAKKyNkZWZpbmUgRkZfUFJPRklMRV9F VkNfTUFJTiAgICAgICAgICAgICAgICAgMQorCiAgICAgLyoqCiAgICAgICogbGV2ZWwKICAgICAg KiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvY29kZWNf ZGVzYy5jIGIvbGliYXZjb2RlYy9jb2RlY19kZXNjLmMKaW5kZXggMDk3NGVlMDNkZS4uMDU4ZjI4 YmQ2NyAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9jb2RlY19kZXNjLmMKKysrIGIvbGliYXZjb2Rl Yy9jb2RlY19kZXNjLmMKQEAgLTEyNjksNiArMTI2OSwxNCBAQCBzdGF0aWMgY29uc3QgQVZDb2Rl Y0Rlc2NyaXB0b3IgY29kZWNfZGVzY3JpcHRvcnNbXSA9IHsKICAgICAgICAgLnByb3BzICAgICA9 IEFWX0NPREVDX1BST1BfTE9TU1kgfCBBVl9DT0RFQ19QUk9QX1JFT1JERVIsCiAgICAgICAgIC5w cm9maWxlcyAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTChmZl9oZXZjX3Byb2ZpbGVzKSwKICAgICB9 LAorICAgIHsKKyAgICAgICAgLmlkICAgICAgICA9IEFWX0NPREVDX0lEX0VWQywKKyAgICAgICAg LnR5cGUgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAgICAgLm5hbWUgICAgICA9ICJl dmMiLAorICAgICAgICAubG9uZ19uYW1lID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIk1QRUctNSBF VkMgKEVzc2VudGlhbCBWaWRlbyBDb2RpbmcpIiksCisgICAgICAgIC5wcm9wcyAgICAgPSBBVl9D T0RFQ19QUk9QX0xPU1NZIHwgQVZfQ09ERUNfUFJPUF9SRU9SREVSLAorICAgICAgICAucHJvZmls ZXMgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoZmZfZXZjX3Byb2ZpbGVzKSwKKyAgICB9LAogICAg IHsKICAgICAgICAgLmlkICAgICAgICA9IEFWX0NPREVDX0lEX0ZJQywKICAgICAgICAgLnR5cGUg ICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvY29kZWNf aWQuaCBiL2xpYmF2Y29kZWMvY29kZWNfaWQuaAppbmRleCBhYjI2NWVjNTg0Li41OTdhMmJjNGEw IDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL2NvZGVjX2lkLmgKKysrIGIvbGliYXZjb2RlYy9jb2Rl Y19pZC5oCkBAIC0yMjIsNiArMjIyLDcgQEAgZW51bSBBVkNvZGVjSUQgewogICAgIEFWX0NPREVD X0lEX1dFQlAsCiAgICAgQVZfQ09ERUNfSURfSE5NNF9WSURFTywKICAgICBBVl9DT0RFQ19JRF9I RVZDLAorICAgIEFWX0NPREVDX0lEX0VWQywKICNkZWZpbmUgQVZfQ09ERUNfSURfSDI2NSBBVl9D T0RFQ19JRF9IRVZDCiAgICAgQVZfQ09ERUNfSURfRklDLAogICAgIEFWX0NPREVDX0lEX0FMSUFT X1BJWCwKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvZXZjX3BhcnNlci5jIGIvbGliYXZjb2RlYy9l dmNfcGFyc2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZjY4YzRj YzNhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvZXZjX3BhcnNlci5jCkBAIC0wLDAg KzEsNDUyIEBACisvKgorICogRVZDIEFWQyBmb3JtYXQgcGFyc2VyCisgKgorICogQ29weXJpZ2h0 IChDKSAyMDIxIERhd2lkIEtvemluc2tpIDxkLmtvemluc2tpQHNhbXN1bmcuY29tPgorICoKKyAq IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAibGliYXZ1dGlsL2Nv bW1vbi5oIgorCisjaW5jbHVkZSAiZ29sb21iLmgiCisjaW5jbHVkZSAicGFyc2VyLmgiCisjaW5j bHVkZSAieGV2ZC5oIgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZGVmaW5lIEVWQ19OQUxfSEVB REVSX1NJWkUgICAyIC8qIGJ5dGUgKi8KKyNkZWZpbmUgTUFYX1NQU19DTlQgIDE2IC8qIGRlZmlu ZWQgdmFsdWUgaW4gRVZDIHN0YW5kYXJkICovCisKK3R5cGVkZWYgc3RydWN0IF9FVkNQYXJzZXJT UFMgeworICAgIGludCBzcHNfaWQ7CisgICAgaW50IHByb2ZpbGVfaWRjOworICAgIGludCBsZXZl bF9pZGM7CisgICAgaW50IGNocm9tYV9mb3JtYXRfaWRjOworICAgIGludCBwaWNfd2lkdGhfaW5f bHVtYV9zYW1wbGVzOworICAgIGludCBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlczsKKyAgICBp bnQgYml0X2RlcHRoX2x1bWE7CisgICAgaW50IGJpdF9kZXB0aF9jaHJvbWE7CisKKyAgICBpbnQg cGljdHVyZV9jcm9wcGluZ19mbGFnOworICAgIGludCBwaWN0dXJlX2Nyb3BfbGVmdF9vZmZzZXQ7 CisgICAgaW50IHBpY3R1cmVfY3JvcF9yaWdodF9vZmZzZXQ7CisgICAgaW50IHBpY3R1cmVfY3Jv cF90b3Bfb2Zmc2V0OworICAgIGludCBwaWN0dXJlX2Nyb3BfYm90dG9tX29mZnNldDsKK30gRVZD UGFyc2VyU1BTOworCit0eXBlZGVmIHN0cnVjdCBFVkNQYXJzZXJDb250ZXh0IHsKKyAgICBQYXJz ZUNvbnRleHQgcGM7CisgICAgRVZDUGFyc2VyU1BTIHNwc1tNQVhfU1BTX0NOVF07CisgICAgaW50 IGlzX2F2YzsKKyAgICBpbnQgbmFsX2xlbmd0aF9zaXplOworICAgIGludCB0b19yZWFkOworICAg IGludCBpbmNvbXBsZXRlX25hbHVfcHJlZml4X3JlYWQ7IC8vIFRoZSBmbGFnIGlzIHNldCB0byAx IHdoZW4gaW5jb21wbGV0ZSBOQUwgdW5pdCBwcmVmaXggaGFzIGJlZW4gcmVhZAorCisgICAgaW50 IHBhcnNlZF9leHRyYWRhdGE7CisKKyAgICBpbnQgcG9jOworICAgIGludCBwb2NUaWQwOworCisg ICAgaW50IGdvdF9zcHM7CisgICAgaW50IGdvdF9wcHM7CisgICAgaW50IGdvdF9zZWk7CisgICAg aW50IGdvdF9zbGljZTsKK30gRVZDUGFyc2VyQ29udGV4dDsKKworc3RhdGljIGludCBnZXRfbmFs dV90eXBlKGNvbnN0IHVpbnQ4X3QgKmJzLCBpbnQgYnNfc2l6ZSkKK3sKKyAgICBHZXRCaXRDb250 ZXh0IGdiOworICAgIGludCBmemIsIG51dDsKKyAgICBpbml0X2dldF9iaXRzKCZnYiwgYnMsIGJz X3NpemUgKiA4KTsKKyAgICBmemIgPSBnZXRfYml0czEoJmdiKTsKKyAgICBpZihmemIgIT0gMCkg eworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiZm9yYmlkZGVuX3plcm9fYml0 IGlzIG5vdCBjbGVhclxuIik7CisgICAgfQorICAgIG51dCA9IGdldF9iaXRzKCZnYiwgNik7IC8q IG5hbF91bml0X3R5cGVfcGx1czEgKi8KKyAgICByZXR1cm4gbnV0IC0gMTsKK30KKworc3RhdGlj IGludCBnZXRfbmFsdV90eXBlMihjb25zdCB1aW50OF90ICpicywgaW50IGJzX3NpemUpCit7Cisg ICAgaW50IG5hbHVfdHlwZSA9IDA7CisgICAgWEVWRF9JTkZPIGluZm87CisgICAgaW50IHJldDsK KworICAgIGlmKGJzX3NpemU+PUVWQ19OQUxfSEVBREVSX1NJWkUpIHsKKyAgICAgICAgcmV0ID0g eGV2ZF9pbmZvKCh2b2lkKilicywgRVZDX05BTF9IRUFERVJfU0laRSwgMSwgJmluZm8pOworICAg ICAgICBpZiAoWEVWRF9GQUlMRUQocmV0KSkgeworICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19FUlJPUiwgIkNhbm5vdCBnZXQgYml0c3RyZWFtIGluZm9ybWF0aW9uXG4iKTsKKyAgICAg ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIG5hbHVfdHlwZSA9IGluZm8ubmFs dV90eXBlOworCisgICAgfQorICAgIHJldHVybiBuYWx1X3R5cGUtMTsKK30KKworc3RhdGljIEVW Q1BhcnNlclNQUyAqIHBhcnNlX3Nwcyhjb25zdCB1aW50OF90ICpicywgaW50IGJzX3NpemUsIEVW Q1BhcnNlckNvbnRleHQgKmV2KQoreworICAgIEdldEJpdENvbnRleHQgZ2I7CisgICAgRVZDUGFy c2VyU1BTICpzcHM7CisgICAgaW50IHNwc19pZDsKKworICAgIGluaXRfZ2V0X2JpdHMoJmdiLCBi cywgYnNfc2l6ZSo4KTsKKworICAgIHNwc19pZCA9IGdldF91ZV9nb2xvbWIoJmdiKTsKKyAgICBp ZihzcHNfaWQgPj0gTUFYX1NQU19DTlQpIGdvdG8gRVJSOworICAgIHNwcyA9ICZldi0+c3BzW3Nw c19pZF07CisgICAgc3BzLT5zcHNfaWQgPSBzcHNfaWQ7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19ERUJVRywgIltFVkMgUGFyc2VyXSBzcHNfaWQ9JWRcbiIsIHNwcy0+c3BzX2lkKTsKKworICAg IHNwcy0+cHJvZmlsZV9pZGMgPSBnZXRfYml0cygmZ2IsIDgpOworICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfREVCVUcsICJbRVZDIFBhcnNlcl0gcHJvZmlsZT0lZFxuIiwgc3BzLT5wcm9maWxlX2lk Yyk7CisgICAgc3BzLT5sZXZlbF9pZGMgPSBnZXRfYml0cygmZ2IsIDgpOworCisgICAgc2tpcF9i aXRzX2xvbmcoJmdiLCAzMik7IC8qIHNraXAgdG9vbHNldF9pZGNfaCAqLworICAgIHNraXBfYml0 c19sb25nKCZnYiwgMzIpOyAvKiBza2lwIHRvb2xzZXRfaWRjX2wgKi8KKworICAgIHNwcy0+Y2hy b21hX2Zvcm1hdF9pZGMgPSBnZXRfdWVfZ29sb21iKCZnYik7CisgICAgc3BzLT5waWNfd2lkdGhf aW5fbHVtYV9zYW1wbGVzID0gZ2V0X3VlX2dvbG9tYigmZ2IpOworICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfREVCVUcsICJbRVZDIFBhcnNlcl0gd2lkdGg9JWRcbiIsIHNwcy0+cGljX3dpZHRoX2lu X2x1bWFfc2FtcGxlcyk7CisgICAgc3BzLT5waWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlcyA9IGdl dF91ZV9nb2xvbWIoJmdiKTsKKworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJbRVZD IFBhcnNlcl0gaGVpZ2h0PSVkXG4iLCBzcHMtPnBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzKTsK KyAgICBzcHMtPmJpdF9kZXB0aF9sdW1hID0gZ2V0X3VlX2dvbG9tYigmZ2IpOworICAgIHNwcy0+ Yml0X2RlcHRoX2Nocm9tYSA9IGdldF91ZV9nb2xvbWIoJmdiKTsKKworICAgIC8vIEB0b2RvIHdl IG5lZWQgdG8gcGFyc2UgY3JvcCBhbmQgdnVpIGluZm9ybWF0aW9uIGhlcmUKKworICAgIHJldHVy biBzcHM7CisKK0VSUjoKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBSZWFkIE5BTCB1 bml0IGxlbmd0aAorICogQHBhcmFtIGJzIGlucHV0IGRhdGEgKGJpdHN0cmVhbSkKKyAqIEByZXR1 cm4gdGhlIGxlbmdodGggb2YgTkFMIHVuaXQgb24gc3VjY2VzcywgMCB2YWx1ZSBvbiBmYWlsdXJl CisgKi8KK3N0YXRpYyB1aW50MzJfdCByZWFkX25hbF91bml0X2xlbmd0aChjb25zdCB1aW50OF90 ICpicywgaW50IGJzX3NpemUpCit7CisgICAgdWludDMyX3QgbGVuID0gMDsKKyAgICBYRVZEX0lO Rk8gaW5mbzsKKyAgICBpbnQgcmV0OworCisgICAgaWYoYnNfc2l6ZT49WEVWRF9OQUxfVU5JVF9M RU5HVEhfQllURSkgeworICAgICAgICByZXQgPSB4ZXZkX2luZm8oKHZvaWQqKWJzLCBYRVZEX05B TF9VTklUX0xFTkdUSF9CWVRFLCAxLCAmaW5mbyk7CisgICAgICAgIGlmIChYRVZEX0ZBSUxFRChy ZXQpKSB7CisgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiQ2Fubm90IGdl dCBiaXRzdHJlYW0gaW5mb3JtYXRpb25cbiIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg ICAgIH0KKyAgICAgICAgbGVuID0gaW5mby5uYWx1X2xlbjsKKyAgICAgICAgaWYobGVuID09IDAp CisgICAgICAgIHsKKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZh bGlkIGJpdHN0cmVhbSBzaXplISAxIFslZF0gWyVkXVxuIiwgbGVuLCBic19zaXplKTsKKyAgICAg ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBsZW47Cit9CisK K3N0YXRpYyBpbnQgcGFyc2VfbmFsX3VuaXRzKEFWQ29kZWNQYXJzZXJDb250ZXh0ICpzLCBjb25z dCB1aW50OF90ICpicywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBic19zaXplLCBB VkNvZGVjQ29udGV4dCAqY3R4KQoreworICAgIEVWQ1BhcnNlckNvbnRleHQgKmV2ID0gcy0+cHJp dl9kYXRhOworICAgIGludCBuYWx1X3R5cGUsIG5hbHVfc2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFy ICogYml0cyA9ICh1bnNpZ25lZCBjaGFyICopYnM7CisgICAgaW50IGJpdHNfc2l6ZSA9IGJzX3Np emU7CisKKyAgICBjdHgtPmNvZGVjX2lkID0gQVZfQ09ERUNfSURfRVZDOworCisgICAgbmFsdV9z aXplID0gcmVhZF9uYWxfdW5pdF9sZW5ndGgoYml0cywgYml0c19zaXplKTsKKyAgICBpZihuYWx1 X3NpemU9PTApIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBO QUwgdW5pdCBzaXplOiAoJWQpXG4iLCBuYWx1X3NpemUpOworICAgICAgICByZXR1cm4gLTE7Cisg ICAgfQorCisgICAgYml0cyArPSBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFOworICAgIGJpdHNf c2l6ZSAtPSBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFOworCisgICAgbmFsdV90eXBlID0gZ2V0 X25hbHVfdHlwZTIoYml0cywgYml0c19zaXplKTsKKworICAgIGJpdHMgKz0gRVZDX05BTF9IRUFE RVJfU0laRTsKKyAgICBiaXRzX3NpemUgLT0gRVZDX05BTF9IRUFERVJfU0laRTsKKworCisgICAg aWYgKG5hbHVfdHlwZSA9PSBYRVZEX05VVF9TUFMpIHsKKyAgICAgICAgRVZDUGFyc2VyU1BTICog c3BzOworCisgICAgICAgIHNwcyA9IHBhcnNlX3NwcyhiaXRzLCBiaXRzX3NpemUsIGV2KTsKKwor ICAgICAgICBjdHgtPmNvZGVkX3dpZHRoICAgICAgICAgPSBzcHMtPnBpY193aWR0aF9pbl9sdW1h X3NhbXBsZXM7CisgICAgICAgIGN0eC0+Y29kZWRfaGVpZ2h0ICAgICAgICA9IHNwcy0+cGljX2hl aWdodF9pbl9sdW1hX3NhbXBsZXM7CisgICAgICAgIGN0eC0+d2lkdGggICAgICAgICAgICAgICA9 IHNwcy0+cGljX3dpZHRoX2luX2x1bWFfc2FtcGxlczsKKyAgICAgICAgY3R4LT5oZWlnaHQgICAg ICAgICAgICAgID0gc3BzLT5waWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlczsKKworICAgICAgICBp ZihzcHMtPnByb2ZpbGVfaWRjID09IDApIGN0eC0+cHJvZmlsZSA9IEZGX1BST0ZJTEVfRVZDX0JB U0VMSU5FOworICAgICAgICBlbHNlIGlmIChzcHMtPnByb2ZpbGVfaWRjID09IDEpIGN0eC0+cHJv ZmlsZSA9IEZGX1BST0ZJTEVfRVZDX01BSU47CisgICAgICAgIGVsc2V7CisgICAgICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJub3Qgc3VwcG9ydGVkIHByb2ZpbGUgKCVkKVxuIiwg c3BzLT5wcm9maWxlX2lkYyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKwor ICAgICAgICBzd2l0Y2goc3BzLT5jaHJvbWFfZm9ybWF0X2lkYykKKyAgICAgICAgeworICAgICAg ICBjYXNlIDA6IC8qIFlDQkNSNDAwXzEwTEUgKi8KKyAgICAgICAgICAgIC8qIEB0b2RvIHN1cHBv cnQgdGhpcyAqLworICAgICAgICAgICAgY3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9HUkFZMTBM RTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj YXNlIDE6IC8qIFlDQkNSNDIwXzEwTEUgKi8KKyAgICAgICAgICAgIGN0eC0+cGl4X2ZtdCA9IEFW X1BJWF9GTVRfWVVWNDIwUDEwTEU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAy OiAvKiBZQ0JDUjQyMl8xMExFICovCisgICAgICAgICAgICAvKiBAdG9kbyBzdXBwb3J0IHRoaXMg Ki8KKyAgICAgICAgICAgIGN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIyUDEwTEU7Cisg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAz OiAvKiBZQ0JDUjQ0NF8xMExFICovCisgICAgICAgICAgICAvKiBAdG9kbyBzdXBwb3J0IHRoaXMg Ki8KKyAgICAgICAgICAgIGN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDQ0UDEwTEU7Cisg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs dDoKKyAgICAgICAgICAgIGN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfTk9ORTsKKyAgICAgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJ1bmtub3duIGNvbG9yIHNwYWNlXG4iKTsK KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIC8vYXZjdHgtPmhh c19iX2ZyYW1lcyA9IDE7IC8vIEB0b2RvIEZJWC1NRQorCisgICAgICAgIGV2LT5nb3Rfc3BzID0g MTsKKworICAgIH0KKyAgICBlbHNlIGlmIChuYWx1X3R5cGUgPT0gWEVWRF9OVVRfUFBTKSB7Cisg ICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9QUFMgXG4iKTsKKyAg ICAgICAgZXYtPmdvdF9wcHMgPSAxOworICAgIH0KKyAgICBlbHNlIGlmKG5hbHVfdHlwZSA9PSBY RVZEX05VVF9TRUkpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlhFVkRf TlVUX1NFSSBcbiIpOworICAgICAgICBldi0+Z290X3NlaSA9IDE7CisgICAgfQorICAgIGVsc2Ug aWYgKG5hbHVfdHlwZSA9PSBYRVZEX05VVF9JRFIgfHwgbmFsdV90eXBlID09IFhFVkRfTlVUX05P TklEUikgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9OT05J RFJcbiIpOworICAgICAgICBldi0+Z290X3NsaWNlKys7CisgICAgfSBlbHNlIHsKKyAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBOQUwgdW5pdCB0eXBlOiAlZFxuIiwg bmFsdV90eXBlKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30K KworCisvKioKKyAqIEZpbmQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBmcmFtZSBpbiB0aGUgYml0 c3RyZWFtLgorICogQHJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGJ5dGUgb2YgdGhl IG5leHQgZnJhbWUsIG9yIEVORF9OT1RfRk9VTkQKKyAqLworc3RhdGljIGludCBldmNfZmluZF9m cmFtZV9lbmQoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmX3NpemUpCit7CisgICAgRVZDUGFy c2VyQ29udGV4dCAqZXYgPSBzLT5wcml2X2RhdGE7CisKKyAgICBpZighZXYtPnRvX3JlYWQpCisg ICAgeworICAgICAgICBpbnQgbmFsX3VuaXRfc2l6ZSA9IDA7CisgICAgICAgIGludCBuZXh0ID0g RU5EX05PVF9GT1VORDsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hl biBidWZmZXIgc2l6ZSBpcyBub3QgZW5vdWdoIGZvciBidWZmZXIgdG8gc3RvcmUgTkFMIHVuaXQg bGVuZ3RoCisgICAgICAgIGlmKGJ1Zl9zaXplIDwgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSkg eyAKKyAgICAgICAgICAgIGV2LT50b19yZWFkID0gWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsK KyAgICAgICAgICAgIGV2LT5uYWxfbGVuZ3RoX3NpemUgPSBidWZfc2l6ZTsKKyAgICAgICAgICAg IGV2LT5pbmNvbXBsZXRlX25hbHVfcHJlZml4X3JlYWQgID0gMTsKKworICAgICAgICAgICAgcmV0 dXJuIEVORF9OT1RfRk9VTkQ7CisgICAgICAgIH0KKworICAgICAgICBuYWxfdW5pdF9zaXplID0g cmVhZF9uYWxfdW5pdF9sZW5ndGgoYnVmLCBidWZfc2l6ZSk7CisgICAgICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfREVCVUcsICJuYWxfdW5pdF9zaXplOiAlZCB8IGJ1Zl9zaXplOiAlZCBcbiIsIG5h bF91bml0X3NpemUsIGJ1Zl9zaXplKTsKKyAgICAgICAgZXYtPm5hbF9sZW5ndGhfc2l6ZSA9IFhF VkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7CisKKyAgICAgICAgbmV4dCA9IG5hbF91bml0X3NpemUg KyBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFOworICAgICAgICBldi0+dG9fcmVhZCA9IG5leHQ7 CisgICAgICAgIGlmKG5leHQ8YnVmX3NpemUpCisgICAgICAgICAgICByZXR1cm4gbmV4dDsKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEVORF9OT1RfRk9VTkQ7CisgICAgfSBlbHNl IGlmKGV2LT50b19yZWFkID4gYnVmX3NpemUpIHsKKyAgICAgICAgLy8vIEB0b2RvIENvbnNpZGVy IGhhbmRsaW5nIHRoZSBmb2xsb3dpbmcgY2FzZQorICAgICAgICAvLyBpZihldi0+aW5jb21wbGV0 ZV9uYWx1X3ByZWZpeF9yZWFkICA9PSAxKSB7CisgICAgICAgIC8vIH0KKyAgICAgICAgcmV0dXJu IEVORF9OT1RfRk9VTkQ7CisgICAgfSBlbHNlICB7CisgICAgICAgIGlmKGV2LT5pbmNvbXBsZXRl X25hbHVfcHJlZml4X3JlYWQgID09IDEpIHsKKyAgICAgICAgICAgIEVWQ1BhcnNlckNvbnRleHQg KmV2ID0gcy0+cHJpdl9kYXRhOworICAgICAgICAgICAgUGFyc2VDb250ZXh0ICpwYyA9ICZldi0+ cGM7CisgICAgICAgICAgICB1aW50OF90IG5hbHVfbGVuW1hFVkRfTkFMX1VOSVRfTEVOR1RIX0JZ VEVdID0gezB9OworICAgICAgICAgICAgaW50IG5hbF91bml0X3NpemUgPSAwOworCisgICAgICAg ICAgICAvLyAxLiBwYy0+YnVmZmVyIGNvbnRhaW5zIHByZXZpb3VzbHkgcmVhZCBieXRlcyBvZiBO QUxVIHByZWZpeAorICAgICAgICAgICAgLy8gMi4gYnVmIGNvbnRhaW5zIHRoZSByZXN0IG9mIE5B TCB1bml0IHByZWZpeCBieXRlcworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIH5+fn5+ fn4KKyAgICAgICAgICAgIC8vIEVYQU1QTEUKKyAgICAgICAgICAgIC8vIH5+fn5+fn4KKyAgICAg ICAgICAgIC8vIAorICAgICAgICAgICAgLy8gSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlIHdlIGFz c3VtZWQgdGhhdCB0aGUgbnVtYmVyIG9mIGFscmVhZHkgcmVhZCBOQUwgVW5pdCBwcmVmaXggYnl0 ZXMgaXMgZXF1YWwgMQorICAgICAgICAgICAgLy8gCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0t CisgICAgICAgICAgICAvLyBwYy0+YnVmZmVyIC0+IGNvbmF0aW5zIGFscmVhZHkgcmVhZCBieXRl cworICAgICAgICAgICAgLy8gLS0tLS0tLS0tLQorICAgICAgICAgICAgLy8gICAgICAgICAgICAg IF9fIHBjLT5pbmRleCA9PSAxCisgICAgICAgICAgICAvLyAgICAgICAgICAgICB8CisgICAgICAg ICAgICAvLyAgICAgICAgICAgICBWCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLyB8ICAg MCAgIHwgICAxICAgfCAgIDIgICB8ICAgMyAgIHwgICA0ICAgfCAuLi4gfCAgIE4gICB8CisgICAg ICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgICAgICAgICAgICAvLyB8ICAweDAwIHwgIDB4WFggfCAgMHhYWCB8ICAweFhY IHwgIDB4WFggfCAuLi4gfCAgMHhYWCB8CisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLwor ICAgICAgICAgICAgLy8gLS0tLS0tLS0tLQorICAgICAgICAgICAgLy8gYnVmIC0+IGNvbnRhaW5z IG5ld2x5IHJlYWQgYnl0ZXMKKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0KKyAgICAgICAgICAg IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAgICAgICAgICAgIC8vIHwgICAwICAgfCAgIDEgICB8ICAgMiAgIHwgICAzICAgfCAgIDQg ICB8IC4uLiB8ICAgTiAgIHwKKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIC8vIHwgIDB4MDAg fCAgMHgwMCB8ICAweDNDIHwgIDB4WFggfCAgMHhYWCB8IC4uLiB8ICAweFhYIHwKKyAgICAgICAg ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBmb3IoaW50IGk9MDtpPFhFVkRfTkFM X1VOSVRfTEVOR1RIX0JZVEU7aSsrKSB7CisgICAgICAgICAgICAgICAgaWYoaTxwYy0+aW5kZXgp IHsKKyAgICAgICAgICAgICAgICAgICAgbmFsdV9sZW5baV0gPSBwYy0+YnVmZmVyW2ldOworICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5hbHVfbGVuW2ldID0g YnVmW2ktcGMtPmluZGV4XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIC8vIC0tLS0tLS0tLS0KKyAgICAgICAgICAgIC8vIG5hbHVfbGVuCisgICAgICAg ICAgICAvLyAtLS0tLS0tLS0tCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgIC8vIHwgICAwICAgfCAgIDEgICB8ICAgMiAgIHwgICAz ICAgfAorICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg ICAgICAgICAgICAvLyB8ICAweDAwIHwgIDB4MDAgfCAgMHgwMCB8ICAweDNDIHwKKyAgICAgICAg ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgLy8g fCBOQUxVIExFTkdUSCAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAvLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIC8vIE5BTCBVbml0IGxlbmdo dCA9ICA2MCAoMHgwMDAwMDAzQykKKworICAgICAgICAgICAgbmFsX3VuaXRfc2l6ZSA9IHJlYWRf bmFsX3VuaXRfbGVuZ3RoKG5hbHVfbGVuLCBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFKTsKKyAg ICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJuYWxfdW5pdF9zaXplOiAlZCB8 IGJ1Zl9zaXplOiAlZCBcbiIsIG5hbF91bml0X3NpemUsIGJ1Zl9zaXplKTsKKworICAgICAgICAg ICAgZXYtPnRvX3JlYWQgPSBuYWxfdW5pdF9zaXplICsgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllU RSAtIHBjLT5pbmRleDsgCisKKyAgICAgICAgICAgIGV2LT5pbmNvbXBsZXRlX25hbHVfcHJlZml4 X3JlYWQgPSAwOworCisgICAgICAgICAgICBpZihldi0+dG9fcmVhZCA+IGJ1Zl9zaXplKSB7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIEVORF9OT1RfRk9VTkQ7CisgICAgICAgICAgICB9IGVsc2Ug IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXYtPnRvX3JlYWQ7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGV2LT50b19yZWFkOworICAgIH0KKyAgICByZXR1cm4g RU5EX05PVF9GT1VORDsKK30KKworc3RhdGljIGludCBldmNfcGFyc2VyX2luaXQoQVZDb2RlY1Bh cnNlckNvbnRleHQgKnMpIHsKKworICAgIEVWQ1BhcnNlckNvbnRleHQgKmV2ID0gcy0+cHJpdl9k YXRhOworCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImVYdHJhLWZhc3QgRXNzZW50 aWFsIFZpZGVvIFBhcnNlclxuIik7CisKKyAgICBldi0+Z290X3NwcyA9IDA7CisgICAgZXYtPmdv dF9wcHMgPSAwOworICAgIGV2LT5nb3Rfc2VpID0gMDsKKyAgICBldi0+Z290X3NsaWNlID0gMDsK KyAgICBldi0+bmFsX2xlbmd0aF9zaXplID0gWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsKKyAg ICBldi0+aW5jb21wbGV0ZV9uYWx1X3ByZWZpeF9yZWFkID0gMDsKKyAgICAKKyAgICByZXR1cm4g MDsKK30KKworc3RhdGljIGludCBldmNfcGFyc2UoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMsIEFW Q29kZWNDb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICoq cG91dGJ1ZiwgaW50ICpwb3V0YnVmX3NpemUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 aW50OF90ICpidWYsIGludCBidWZfc2l6ZSkKK3sKKyAgICBpbnQgbmV4dDsKKyAgICBFVkNQYXJz ZXJDb250ZXh0ICpldiA9IHMtPnByaXZfZGF0YTsKKyAgICBQYXJzZUNvbnRleHQgKnBjID0gJmV2 LT5wYzsKKyAgICBpbnQgaXNfZHVtbXlfYnVmID0gIWJ1Zl9zaXplOworICAgIGNvbnN0IHVpbnQ4 X3QgKmR1bW15X2J1ZiA9IGJ1ZjsKKworICAgIGlmIChjdHgtPmV4dHJhZGF0YSAmJiAhZXYtPnBh cnNlZF9leHRyYWRhdGEpIHsKKyAgICAgICAgLy8gQHRvZG8gY29uc2lkZXIgaGFuZGxpbmcgZXh0 cmFkYXRhCisgICAgICAgIC8vCisgICAgICAgIC8vIGZmX2V2Y19kZWNvZGVfZXh0cmFkYXRhKGF2 Y3R4LT5leHRyYWRhdGEsIGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSwgJmN0eC0+cHMsICZjdHgtPnNl aSwKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+aXNfYXZjLCAmY3R4 LT5uYWxfbGVuZ3RoX3NpemUsIGF2Y3R4LT5lcnJfcmVjb2duaXRpb24sCisgICAgICAgIC8vICAg ICAgICAgICAgICAgICAgICAgICAgIDEsIGF2Y3R4KTsKKyAgICAgICAgZXYtPnBhcnNlZF9leHRy YWRhdGEgPSAxOworICAgIH0KKworICAgIGlmIChzLT5mbGFncyAmIFBBUlNFUl9GTEFHX0NPTVBM RVRFX0ZSQU1FUykgeworICAgICAgICBuZXh0ID0gYnVmX3NpemU7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgbmV4dCA9IGV2Y19maW5kX2ZyYW1lX2VuZChzLCBidWYsIGJ1Zl9zaXplKTsKKyAgICAg ICAgaWYgKGZmX2NvbWJpbmVfZnJhbWUocGMsIG5leHQsICZidWYsICZidWZfc2l6ZSkgPCAwKSB7 CisgICAgICAgICAgICAqcG91dGJ1ZiAgICAgID0gTlVMTDsKKyAgICAgICAgICAgICpwb3V0YnVm X3NpemUgPSAwOworICAgICAgICAgICAgZXYtPnRvX3JlYWQgLT0gYnVmX3NpemU7CisgICAgICAg ICAgICByZXR1cm4gYnVmX3NpemU7CisgICAgICAgIH0KKyAgICB9CisjaWYgMQorICAgIGlzX2R1 bW15X2J1ZiAmPSAoZHVtbXlfYnVmID09IGJ1Zik7CisKKyAgICBpZiAoIWlzX2R1bW15X2J1Zikg eworICAgICAgICBwYXJzZV9uYWxfdW5pdHMocywgYnVmLCBidWZfc2l6ZSwgY3R4KTsKKyAgICB9 CisjZWxzZQorICAgIGlmKG5leHQgIT0gRU5EX05PVF9GT1VORCkgeworICAgICAgICBwYXJzZV9u YWxfdW5pdHMocywgYnVmLCBidWZfc2l6ZSwgYXZjdHgpOworICAgIH0KKyNlbmRpZgorCisgICAg KnBvdXRidWYgICAgICA9IGJ1ZjsKKyAgICAqcG91dGJ1Zl9zaXplID0gYnVmX3NpemU7CisgICAg ZXYtPnRvX3JlYWQgLT0gbmV4dDsKKyAgICByZXR1cm4gbmV4dDsKK30KKworLy8gU3BsaXQgYWZ0 ZXIgdGhlIHBhcmFtZXRlciBzZXRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbSBpZiB0 aGV5IGV4aXN0Lgorc3RhdGljIGludCBldmNfc3BsaXQoQVZDb2RlY0NvbnRleHQgKmN0eCwgY29u c3QgdWludDhfdCAqYnMsIGludCBic19zaXplKQoreworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgYXZfY29sZCB2b2lkIGV2Y19wYXJzZXJfY2xvc2UoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMp Cit7CisgICAgLyogRVZDUGFyc2VyQ29udGV4dCAqY3R4ID0gcy0+cHJpdl9kYXRhOyAqLworfQor CitBVkNvZGVjUGFyc2VyIGZmX2V2Y19wYXJzZXIgPSB7CisgICAgLmNvZGVjX2lkcyAgICAgID0g eyBBVl9DT0RFQ19JRF9FVkMgfSwKKyAgICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoRVZDUGFy c2VyQ29udGV4dCksCisgICAgLnBhcnNlcl9pbml0ICAgID0gZXZjX3BhcnNlcl9pbml0LAorICAg IC5wYXJzZXJfcGFyc2UgICA9IGV2Y19wYXJzZSwKKyAgICAucGFyc2VyX2Nsb3NlICAgPSBldmNf cGFyc2VyX2Nsb3NlLAorICAgIC5zcGxpdCAgICAgICAgICA9IGV2Y19zcGxpdCwKK307CmRpZmYg LS1naXQgYS9saWJhdmNvZGVjL2xpYnhldmQuYyBiL2xpYmF2Y29kZWMvbGlieGV2ZC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmZmOWVlNWMxNmYKLS0tIC9kZXYvbnVs bAorKysgYi9saWJhdmNvZGVjL2xpYnhldmQuYwpAQCAtMCwwICsxLDcyNCBAQAorLyoKKyAqIGxp YnhldmQgZGVjb2RlcgorICogRVZDIChNUEVHLTUgRXNzZW50aWFsIFZpZGVvIENvZGluZykgZGVj b2RpbmcgdXNpbmcgWEVWRCBNUEVHLTUgRVZDIGRlY29kZXIgbGlicmFyeQorICoKKyAqIENvcHly aWdodCAoQykgMjAyMSBEYXdpZCBLb3ppbnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4KKyAq CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg KiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs b29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmIGRlZmluZWQoX01TQ19W RVIpCisjZGVmaW5lIFhFVkRfQVBJX0lNUE9SVFMgMQorI2VuZGlmCisKKyNpbmNsdWRlIDx4ZXZk Lmg+CisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVk ZSAibGliYXZ1dGlsL2ludGVybmFsLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIgor I2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5o IgorI2luY2x1ZGUgImxpYmF2dXRpbC9waXhmbXQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaW1n dXRpbHMuaCIKKworLy8gI2RlZmluZSBVU0VfRVhQX0dPTE9NQl9TVFVGRgorI2lmZGVmIFVTRV9F WFBfR09MT01CX1NUVUZGIAorI2luY2x1ZGUgImdvbG9tYi5oIgorI2VuZGlmCisKKyNpbmNsdWRl ICJhdmNvZGVjLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJwYWNrZXRfaW50 ZXJuYWwuaCIKKworI2RlZmluZSBVTlVTRUQoeCkgKHZvaWQpKHgpCisKKyNkZWZpbmUgWEVWRF9Q QVJBTV9CQURfTkFNRSAtMQorI2RlZmluZSBYRVZEX1BBUkFNX0JBRF9WQUxVRSAtMgorCisvKioK KyAqIFRoZSBzdHJ1Y3R1cmUgc3RvcmVzIGFsbCB0aGUgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRo ZSBpbnN0YW5jZSBvZiBYZXZlIE1QRUctNSBFVkMgZGVjb2RlcgorICogVGhlIGZpcnN0IGZpZWxk IGlzIGEgcG9pbnRlciB0byBhbiBBVkNsYXNzIHN0cnVjdCAoQHNlZSBodHRwczovL2ZmbXBlZy5v cmcvZG94eWdlbi90cnVuay9zdHJ1Y3RBVkNsYXNzLmh0bWwjZGV0YWlscykuCisgKi8KK3R5cGVk ZWYgc3RydWN0IFhldmRDb250ZXh0IHsKKyAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKKworICAg IFhFVkQgaWQ7ICAgICAgICAvLyBYRVZEIGluc3RhbmNlIGlkZW50aWZpZXIgQHNlZSB4ZXZkLmgK KyAgICBYRVZEX0NEU0MgY2RzYzsgLy8gZGVjb2RpbmcgcGFyYW1ldGVycyBAc2VlIHhldmQuaAor CisgICAgaW50IGRlY29kX2ZyYW1lczsgLy8gbnVtYmVyIG9mIGRlY29kZWQgZnJhbWVzCisgICAg aW50IHBhY2tldF9jb3VudDsgLy8gbnVtYmVyIG9mIHBhY2tldHMgY3JlYXRlZCBieSBkZWNvZGVy CisKKyAgICAvLyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKyAgICBBVkRpY3Rpb25hcnkgKnhl dmRfb3B0czsgLy8geGV2ZCBjb25maWd1cmF0aW9uIHJlYWQgZnJvbSBhIDotc2VwYXJhdGVkIGxp c3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMKKworfSBYZXZkQ29udGV4dDsKKworc3RhdGljIGlu dCAgb3BfdGhyZWFkcyA9IDE7IC8vIERlZmF1bHQgdmFsdWUKKworI2lmZGVmIFVTRV9FWFBfR09M T01CX1NUVUZGIAorc3RhdGljIGludCBnZXRfbmFsdV90eXBlKGNvbnN0IHVpbnQ4X3QgKmJzLCBp bnQgYnNfc2l6ZSkKK3sKKyAgICBHZXRCaXRDb250ZXh0IGdiOworICAgIGludCBmemIsIG51dDsK KyAgICBpbml0X2dldF9iaXRzKCZnYiwgYnMsIGJzX3NpemUgKiA4KTsKKyAgICBmemIgPSBnZXRf Yml0czEoJmdiKTsKKyAgICBpZihmemIgIT0gMCkgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0RFQlVHLCAiZm9yYmlkZGVuX3plcm9fYml0IGlzIG5vdCBjbGVhclxuIik7CisgICAgfQor ICAgIG51dCA9IGdldF9iaXRzKCZnYiwgNik7IC8qIG5hbF91bml0X3R5cGVfcGx1czEgKi8KKyAg ICByZXR1cm4gbnV0IC0gMTsKK30KKyNlbmRpZgorCisjaWZkZWYgUFJJTlRfTkFMVV9JTkZPCitz dGF0aWMgdm9pZCBwcmludF9uYWx1X2luZm8oWEVWRF9TVEFUICogc3RhdCkKK3sKKyAgICBpZihz dGF0LT5uYWx1X3R5cGUgPCBYRVZEX05VVF9TUFMpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19ERUJVRywgIlhFVkRfTlVUX1NQUyBcbiIpOworCisgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfREVCVUcsICIlYy1zbGljZVxuIiwgc3RhdC0+c3R5cGUgPT0gWEVWRF9TVF9JID8gJ0kn IDogc3RhdC0+c3R5cGUgPT0gWEVWRF9TVF9QID8gJ1AnIDogJ0InKTsKKworICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiICVkIGJ5dGVzXG4iLCBzdGF0LT5yZWFkKTsKKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIiwgcG9jPSVkLCB0aWQ9JWQsICIsIChpbnQp c3RhdC0+cG9jLCAoaW50KXN0YXQtPnRpZCk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCAyOyBpKyspIHsKKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJbTCVk ICIsIGkpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdGF0LT5yZWZwaWNfbnVt W2ldOyBqKyspIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsIiVkICIsIHN0YXQtPnJlZnBpY1tp XVtqXSk7CisgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCJdIFxuIik7Cisg ICAgICAgIH0KKyAgICB9IGVsc2UgaWYoc3RhdC0+bmFsdV90eXBlID09IFhFVkRfTlVUX1NQUykg eworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiWEVWRF9OVVRfU1BTIFxuIik7 CisgICAgfSBlbHNlIGlmIChzdGF0LT5uYWx1X3R5cGUgPT0gWEVWRF9OVVRfUFBTKSB7CisgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9QUFMgXG4iKTsKKyAgICB9 IGVsc2UgaWYgKHN0YXQtPm5hbHVfdHlwZSA9PSBYRVZEX05VVF9TRUkpIHsKKyAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlhFVkRfTlVUX1NFSSBcbiIpOworICAgIH0gZWxzZSB7 CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJVbmtub3duIGJpdHN0cmVhbSAh ISEhIFxuIik7CisgICAgfQorfQorI2VuZGlmCisKKy8vIEB0b2RvIGNvbnNpZGVyIG1vdmluZyBm b2xsb3dpbmcgZnVuY3Rpb24gdG8gc2VwYXJhdGUgZmlsZSBjb250YWluaW5nIGhlbHBlciBmdW5j dGlvbnMgZm9yIEVWQyBkZWNvZGVyCisjaWZkZWYgUFJJTlRfRlJBTUVfSU5GTworc3RhdGljIHZv aWQgcHJpbnRfZnJhbWVfaW5mbyhjb25zdCBBVkZyYW1lKiBmKQoreworICAgIGludCBsZXZlbCA9 IEFWX0xPR19ERUJVRzsKKyAgICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+d2lkdGg6ICVk XG4iLCBmLT53aWR0aCk7CisgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAiZnJhbWUtPmhlaWdodDog JWRcbiIsIGYtPmhlaWdodCk7CisKKyAgICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+bGlu ZXNpemVbMF06ICVkXG4iLCBmLT5saW5lc2l6ZVswXSk7CisgICAgYXZfbG9nKE5VTEwsIGxldmVs LCAiZnJhbWUtPmxpbmVzaXplWzFdOiAlZFxuIiwgZi0+bGluZXNpemVbMV0pOworICAgIGF2X2xv ZyhOVUxMLCBsZXZlbCwgImZyYW1lLT5saW5lc2l6ZVsyXTogJWRcbiIsIGYtPmxpbmVzaXplWzJd KTsKKyAgICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+YnVmWzBdOiAlcFxuIiwgZi0+YnVm WzBdKTsKKyAgICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+YnVmWzFdOiAlcFxuIiwgZi0+ YnVmWzFdKTsKKyAgICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+YnVmWzJdOiAlcFxuIiwg Zi0+YnVmWzJdKTsKKyAgICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+ZGF0YVswXTogJXBc biIsIGYtPmRhdGFbMF0pOworICAgIGF2X2xvZyhOVUxMLCBsZXZlbCwgImZyYW1lLT5kYXRhWzFd OiAlcFxuIiwgZi0+ZGF0YVsxXSk7CisgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAiZnJhbWUtPmRh dGFbMl06ICVwXG4iLCBmLT5kYXRhWzJdKTsKK30KKyNlbmRpZgorCisvLyBAdG9kbyBjb25zaWRl ciBtb3ZpbmcgZm9sbG93aW5nIGZ1bmN0aW9uIHRvIHNlcGFyYXRlIGZpbGUgY29udGFpbmluZyBo ZWxwZXIgZnVuY3Rpb25zIGZvciBFVkMgZGVjb2RlcgorI2lmZGVmIFBSSU5UX1hFVkRfSU1HQl9J TkZPCitzdGF0aWMgdm9pZCBwcmludF94ZXZkX2ltZ2JfaW5mbyhjb25zdCBYRVZEX0lNR0IqIGlt Z2IpCit7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImltZ2ItPm5wOiAlZFxuIiwg aW1nYi0+bnApOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJpbWdiLT5ic2l6ZVsw XTogJWRcbiIsIGltZ2ItPmJzaXplWzBdKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVH LCAiaW1nYi0+YnNpemVbMV06ICVkXG4iLCBpbWdiLT5ic2l6ZVsxXSk7CisgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19ERUJVRywgImltZ2ItPmJzaXplWzJdOiAlZFxuIiwgaW1nYi0+YnNpemVbMl0p OworfQorI2VuZGlmCisKKy8vIEB0b2RvIGNvbnNpZGVyIG1vdmluZyBmb2xsb3dpbmcgZnVuY3Rp b24gdG8gc2VwYXJhdGUgZmlsZSBjb250YWluaW5nIGhlbHBlciBmdW5jdGlvbnMgZm9yIEVWQyBk ZWNvZGVyCisjaWZkZWYgUFJJTlRfQVZDVFgKK3N0YXRpYyB2b2lkIHByaW50X2F2Y3R4KGNvbnN0 IEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBpZiggQVZNRURJQV9UWVBFX1VOS05PV04g PT0gYXZjdHgtPmNvZGVjX3R5cGUpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJV RywgImF2Y3R4LT5jb2RlY190eXBlOiBBVk1FRElBX1RZUEVfVU5LTk9XTlxuIik7CisgICAgfSBl bHNlIGlmKEFWTUVESUFfVFlQRV9WSURFTyAgPT0gYXZjdHgtPmNvZGVjX3R5cGUpCisgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJhdmN0eC0+Y29kZWNfdHlwZTogQVZNRURJQV9U WVBFX1ZJREVPIFxuIik7CisgICAgZWxzZSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df REVCVUcsICJhdmN0eC0+Y29kZWNfdHlwZTogQVZNRURJQV9UWVBFX1VOS05PV05cbiIpOworICAg IH0KKworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJhdmN0eC0+Y29kZWNfaWQ6ICVz XG4iLGF2Y29kZWNfZ2V0X25hbWUoYXZjdHgtPmNvZGVjX2lkKSk7CisgICAgYXZfbG9nKE5VTEws IEFWX0xPR19ERUJVRywgImF2Y3R4LT53aWR0aDogJWRcbiIsIGF2Y3R4LT53aWR0aCk7CisgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImF2Y3R4LT5oZWlnaHQ6ICVkXG4iLCBhdmN0eC0+ aGVpZ2h0KTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiYXZjdHgtPnBpeF9mbXQ6 ICVkXG4iLCBhdmN0eC0+cGl4X2ZtdCk7Cit9CisjZW5kaWYKKworLyoqCisgKiBSZWFkIG9wdGlv bnMKKyAqCisgKiBAcGFyYW0gYXZjdHggY29kZWMgY29udGV4dAorICogQHJldHVybiAwIG9uIHN1 Y2Nlc3MKKyAqLworc3RhdGljIGludCByZWFkX29wdGlvbnMoY29uc3QgQVZDb2RlY0NvbnRleHQq IGF2Y3R4KQoreworCisgICAgb3BfdGhyZWFkcyA9IChhdmN0eC0+dGhyZWFkX2NvdW50PjApP2F2 Y3R4LT50aHJlYWRfY291bnQ6MTsKKworICAgIHJldHVybiAwOworfQorCisvKioKKyAqIFBhcnNl IDotc2VwYXJhdGVkIGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMKKyAqCisgKiBAcGFyYW0g a2V5CisgKiBAcGFyYW0gdmFsdWUKKyAqCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRp dmUgdmFsdWUgb24gZmFpbHVyZQorICoKKyAqIEB0b2RvIENvbnNpZGVyIHJlbW92aW5nIHRoZSBm dW5jdGlvbgorICovCitzdGF0aWMgaW50IHhldmRfcGFyYW1zX3BhcnNlKGNvbnN0IGNoYXIqIGtl eSwgY29uc3QgY2hhciogdmFsdWUpCit7CisgICAgaWYoIWtleSkgeworICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0VSUk9SLCAiSXZhbGlkIGFyZ3VtZW50OiBrZXkgc3RyaW5nIGlzIE5VTExc biIpOworICAgICAgICByZXR1cm4gWEVWRF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAgICB9Cisg ICAgaWYoIXZhbHVlKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJdmFs aWQgYXJndW1lbnQ6IHZhbHVlIHN0cmluZyBpcyBOVUxMXG4iKTsKKyAgICAgICAgcmV0dXJuIFhF VkRfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgICAgfQorCisgICAgZWxzZSB7CisgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJVbmtub3duIHhldmQgY29kZWMgb3B0aW9uOiAlc1xu Iiwga2V5KTsKKyAgICAgICAgcmV0dXJuIFhFVkRfUEFSQU1fQkFEX05BTUU7CisgICAgfQorICAg IHJldHVybiAwOworfQorCisvKioKKyAqICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIg dG8gdmFyaWFibGUgb2YgdHlwZSBYRVZEX0NEU0MuCisgKiBYRVZEX0NEU0MgY29udGFpbnMgYWxs IGRlY29kZXIgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXRz IHVzZS4KKyAqCisgKiBUaGUgZmllbGQgdmFsdWVzIG9mIHRoZSBYRVZEX0NEU0Mgc3RydWN0dXJl IGFyZSBwb3B1bGF0ZWQgYmFzZWQgb246CisgKiAtIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIHZh bHVlcyBvZiB0aGUgQXZDb2RlY0NvbmV0eHQgc3RydWN0dXJlLAorICogLSB0aGUgeGV2ZCBkZWNv ZGVyIHNwZWNpZmljIG9wdGlvbiB2YWx1ZXMsCisgKiAgICh0aGUgZnVsbCBsaXN0IG9mIG9wdGlv bnMgYXZhaWxhYmxlIGZvciB4ZXZkIGVuY29kZXIgaXMgZGlzcGxheWVkIGFmdGVyIGV4ZWN1dGlu ZyB0aGUgY29tbWFuZCAuL2ZmbXBlZyAtLWhlbHAgZGVjb2RlciA9IGxpYnhldmQpCisgKiAtIGFu ZCB0aGUgeGV2ZCBlbmNvZGVyIG9wdGlvbnMgc3BlY2lmaWVkIGFzIGEgbGlzdCBvZiBrZXkgdmFs dWUgcGFpcnMgZm9sbG93aW5nIHhldmQtcGFyYW1zIG9wdGlvbgorICoKKyAqIE9yZGVyIG9mIGlu cHV0IHByb2Nlc3NpbmcgYW5kIHBvcHVsYXRpbmcgdGhlIFhFVkRfQ0RTQyBzdHJ1Y3R1cmUKKyAq IDEuIGZpcnN0LCB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgb2YgdGhlIEFWQ29kZWNDb250ZXh0 IHN0cnVjdHVyZSBhcmUgcHJvY2Vzc2VkLCAoaS5lIC10aHJlYWRzIDQpCisgKiAyLiB0aGVuIHhl dmQtc3BlY2lmaWMgb3B0aW9ucyBhZGRlZCBhcyBBVk9wdGlvbiB0byB0aGUgeGV2ZCBBVkNvZGVj IGltcGxlbWVudGF0aW9uIChpLmUgLXRocmVhZHMgMykKKyAqIDMuIGZpbmFsbHksIHRoZSBvcHRp b25zIHNwZWNpZmllZCBhZnRlciB0aGUgeGV2ZC1wYXJhbXMgb3B0aW9uIGFzIHRoZSBwYXJhbWV0 ZXIgbGlzdCBvZiB0eXBlIGtleSB2YWx1ZSBhcmUgcHJvY2Vzc2VkIChpLmUgLXhldmQtcGFyYW1z ICJtPTIiKQorICoKKyAqIFRoZXJlIGFyZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCBpbiBkaWZm ZXJlbnQgd2F5cy4gSW4gdGhpcyBjYXNlLCBwbGVhc2UgZm9sbG93IHRoZSBhYm92ZS1tZW50aW9u ZWQgb3JkZXIgb2YgcHJvY2Vzc2luZy4KKyAqIFRoZSBtb3N0IHJlY2VudCBhc3NpZ25tZW50cyBv dmVyd3JpdGUgdGhlIHByZXZpb3VzIHZhbHVlcy4KKyAqCisgKiBAcGFyYW0gYXZjdHggY29kZWMg Y29udGV4dAorICogQHBhcmFtIGNkc2MgY29udGFpbnMgYWxsIGVuY29kZXIgcGFyYW1ldGVycyB0 aGF0IHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXRzIHVzZS4KKyAqCisgKiBAcmV0dXJu IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKi8KK3N0YXRp YyBpbnQgZ2V0X2NvbmYoY29uc3QgQVZDb2RlY0NvbnRleHQqIGF2Y3R4LCBYRVZEX0NEU0MqIGNk c2MpCit7CisgICAgaW50IGNwdV9jb3VudCA9IGF2X2NwdV9jb3VudCgpOworCisgICAgLyogcmVh ZCBvcHRpb25zIGZyb20gQVZDb2RlY0NvbnRleHQgJiBmcm9tIFhFVkRfQ0RTQyAqLworICAgIHJl YWRfb3B0aW9ucyhhdmN0eCk7CisKKyAgICAvKiBwYXJzZSA6LXNlcGFyYXRlZCBsaXN0IG9mIGtl eT12YWx1ZSBwYXJhbWV0ZXJzIGFuZCBzZXQgdmFsdWVzIGZvciBjcmVhdGVkIGRlc2NyaXB0b3Ig KFhFVkRfQ0RTQykgKi8KKyAgICB7CisgICAgICAgIFhldmRDb250ZXh0ICpjdHggPSBhdmN0eC0+ cHJpdl9kYXRhOworICAgICAgICBBVkRpY3Rpb25hcnlFbnRyeSAqZW4gPSBOVUxMOworICAgICAg ICB3aGlsZSAoKGVuID0gYXZfZGljdF9nZXQoY3R4LT54ZXZkX29wdHMsICIiLCBlbiwgQVZfRElD VF9JR05PUkVfU1VGRklYKSkpIHsKKyAgICAgICAgICAgIGludCBwYXJzZV9yZXQgPSB4ZXZkX3Bh cmFtc19wYXJzZShlbi0+a2V5LCBlbi0+dmFsdWUpOworCisgICAgICAgICAgICBzd2l0Y2ggKHBh cnNlX3JldCkgeworICAgICAgICAgICAgY2FzZSBYRVZEX1BBUkFNX0JBRF9OQU1FOgorICAgICAg ICAgICAgICAgIGF2X2xvZygoQVZDb2RlY0NvbnRleHQqKWF2Y3R4LCBBVl9MT0dfV0FSTklORywK KyAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24gb3B0aW9uOiAlcy5cbiIsIGVuLT5rZXkp OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBYRVZEX1BBUkFNX0JB RF9WQUxVRToKKyAgICAgICAgICAgICAgICBhdl9sb2coKEFWQ29kZWNDb250ZXh0KilhdmN0eCwg QVZfTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHZhbHVlIGZv ciAlczogJXMuXG4iLCBlbi0+a2V5LCBlbi0+dmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGNsZWFyIFhFVlNfQ0RTQyBzdHJ1Y3R1 cmUgKi8KKyAgICBtZW1zZXQoY2RzYywgMCwgc2l6ZW9mKFhFVkRfQ0RTQykpOworCisgICAgLyog aW5pdCBYRVZEX0NEU0MgKi8KKyAgICBpZihhdmN0eC0+dGhyZWFkX2NvdW50IDw9IDApIHsKKyAg ICAgICAgY2RzYy0+dGhyZWFkcyA9IChjcHVfY291bnQ8WEVWRF9NQVhfVEFTS19DTlQpP2NwdV9j b3VudDpYRVZEX01BWF9UQVNLX0NOVDsKKyAgICB9IGVsc2UgaWYoYXZjdHgtPnRocmVhZF9jb3Vu dCA+IFhFVkRfTUFYX1RBU0tfQ05UKSB7CisgICAgICAgIGNkc2MtPnRocmVhZHMgPSBYRVZEX01B WF9UQVNLX0NOVDsKKyAgICB9IGVsc2UgeworICAgICAgICBjZHNjLT50aHJlYWRzID0gYXZjdHgt PnRocmVhZF9jb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gWEVWRF9PSzsKK30KKworLyoqCisg KiBSZWFkIE5BTCB1bml0IGxlbmd0aAorICogQHBhcmFtIGJzIGlucHV0IGRhdGEgKGJpdHN0cmVh bSkKKyAqIEByZXR1cm4gdGhlIGxlbmdodGggb2YgTkFMIHVuaXQgb24gc3VjY2VzcywgMCB2YWx1 ZSBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyB1aW50MzJfdCByZWFkX25hbF91bml0X2xlbmd0aChj b25zdCB1aW50OF90ICpicywgaW50IGJzX3NpemUpCit7CisgICAgdWludDMyX3QgbGVuID0gMDsK KyAgICBYRVZEX0lORk8gaW5mbzsKKyAgICBpbnQgcmV0OworCisgICAgaWYoYnNfc2l6ZT09WEVW RF9OQUxfVU5JVF9MRU5HVEhfQllURSkgeworICAgICAgICByZXQgPSB4ZXZkX2luZm8oKHZvaWQq KWJzLCBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFLCAxLCAmaW5mbyk7CisgICAgICAgIGlmIChY RVZEX0ZBSUxFRChyZXQpKSB7CisgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiQ2Fubm90IGdldCBiaXRzdHJlYW0gaW5mb3JtYXRpb25cbiIpOworICAgICAgICAgICAgcmV0 dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgbGVuID0gaW5mby5uYWx1X2xlbjsKKyAgICAgICAg aWYobGVuID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df RVJST1IsICJJbnZhbGlkIGJpdHN0cmVhbSBzaXplISBbJWRdXG4iLCBic19zaXplKTsKKyAgICAg ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBsZW47Cit9CisK Ky8qKgorICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQKKyAqIEBwYXJhbSBjdHggdGhlIHN0 cnVjdHVyZSB0aGF0IHN0b3JlcyBhbGwgdGhlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5z dGFuY2Ugb2YgWGV2ZSBNUEVHLTUgRVZDIGRlY29kZXIKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNz LCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgZXhwb3J0X3N0cmVh bV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdCBYZXZkQ29udGV4dCAqY3R4KQor eworICAgIC8vIHVuc2lnbmVkIGludCBudW0gPSAwLCBkZW4gPSAwOworICAgIC8vIEB0b2RvIHN1 cHBvcnQgb3RoZXIgZm9ybWF0cworCisgICAgaW50IHJldDsKKyAgICBpbnQgc2l6ZTsKKyAgICBp bnQgY29sb3Jfc3BhY2U7CisKKyAgICBhdmN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIw UDEwOworCisgICAgLy8gQHRvZG8gVGhlIEFWQ29kZWNDb250ZXh0IHNob3VsZCBiZSBpbml0aWFs aXplZCBoZXJlIHVzaW5nIGRhdGEgZnJvbSB0aGUgb2JqZWN0IG9mIFhFVkRfU1BTIHR5cGUuCisg ICAgLy8KKyAgICAvLyBJdCBzZWVtcyB0byBiZSBpbXBvc3NpYmxlIHJpZ2h0IG5vdyBzaW5jZSBY RVZEIEFQSSBsaW1pdGF0aW9uLgorICAgIC8vIFRoZSBleHRlbnNpb24gZm9yIHRoZSBYRVZEIEFQ SSBpcyBuZWVkZWQuCisgICAgLy8gVG8gYmUgbW9yZSBwcmVjaXNlLCB3aGF0IHdlIG5lZWQgaXMg YWNjZXNzIHRvIHRoZSBvYmplY3Qgb2YgWEVWRF9TUFMgdHlwZSBiZWluZyBhIHBhcnQgb2YgWEVW RF9DVFggb2JqZWN0LgorICAgIC8vIFRoZSBvYmplY3Qgb2YgWEVWRF9DVFggdHlwZSBpcyBjcmVh dGVkIHdoaWxlIHRoZSBmdW5jdGlvbiB4ZXZkX2NyZWF0ZSgpIGJlaW5nIGEgcGFydCBvZiBwdWJs aWMgQVBJIGlzIGNhbGxlZC4KKyAgICAvLworICAgIC8vIEB0b2RvIHJlbW92ZSB0aGUgZm9sbG93 aW5nIGhhcmRvY2VkIGhhc19iX2ZyYW1lczsgY29uc2lkZXIgdXNpbmcgc3BzLT5udW1fcmVvcmRl cl9waWNzIHZhbHVlIGluc3RlYWQKKyAgICAvLworICAgIC8vIGF2Y3R4LT5oYXNfYl9mcmFtZXMg ICAgICAgID0gMTsgLy8gKHNwcy0+bnVtX3Jlb3JkZXJfcGljcyk/MTowOworICAgIHNpemUgPSA0 OworICAgIHJldCA9IHhldmRfY29uZmlnKGN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9DT0RFRF9XSURU SCwgJmF2Y3R4LT5jb2RlZF93aWR0aCwgJnNpemUpOworICAgIGlmIChYRVZEX0ZBSUxFRChyZXQp KSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJmYWlsZWQgdG8gZ2V0IGNv ZGVkX3dpZHRoXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldCA9IHhl dmRfY29uZmlnKGN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9DT0RFRF9IRUlHSFQsICZhdmN0eC0+Y29k ZWRfaGVpZ2h0LCAmc2l6ZSk7CisgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsKKyAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImZhaWxlZCB0byBnZXQgY29kZWRfaGVpZ2h0XG4i KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldCA9IHhldmRfY29uZmlnKGN0 eC0+aWQsIFhFVkRfQ0ZHX0dFVF9XSURUSCwgJmF2Y3R4LT53aWR0aCwgJnNpemUpOworICAgIGlm IChYRVZEX0ZBSUxFRChyZXQpKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1Is ICJmYWlsZWQgdG8gZ2V0IHdpZHRoXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKwor ICAgIHJldCA9IHhldmRfY29uZmlnKGN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9IRUlHSFQsICZhdmN0 eC0+aGVpZ2h0LCAmc2l6ZSk7CisgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsKKyAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImZhaWxlZCB0byBnZXQgaGVpZ2h0XG4iKTsKKyAg ICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldCA9IHhldmRfY29uZmlnKGN0eC0+aWQs IFhFVkRfQ0ZHX0dFVF9DT0xPUl9TUEFDRSwgJmNvbG9yX3NwYWNlLCAmc2l6ZSk7CisgICAgaWYg KFhFVkRfRkFJTEVEKHJldCkpIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwg ImZhaWxlZCB0byBnZXQgY29sb3Jfc3BhY2VcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAg fQorICAgIHN3aXRjaChjb2xvcl9zcGFjZSkgeworICAgIGNhc2UgWEVWRF9DU19ZQ0JDUjQwMF8x MExFOgorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiY29sb3Jfc3BhY2UgPSBY RVZEX0NTX1lDQkNSNDAwXzEwTEVcbiIpOworICAgICAgICBhdmN0eC0+cGl4X2ZtdCA9IEFWX1BJ WF9GTVRfR1JBWTEwTEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWEVWRF9DU19ZQ0JDUjQy MF8xMExFOgorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiY29sb3Jfc3BhY2Ug PSBYRVZEX0NTX1lDQkNSNDIwXzEwTEVcbiIpOworICAgICAgICBhdmN0eC0+cGl4X2ZtdCA9IEFW X1BJWF9GTVRfWVVWNDIwUDEwTEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWEVWRF9DU19Z Q0JDUjQyMl8xMExFOgorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiY29sb3Jf c3BhY2UgPSBYRVZEX0NTX1lDQkNSNDIyXzEwTEVcbiIpOworICAgICAgICBhdmN0eC0+cGl4X2Zt dCA9IEFWX1BJWF9GTVRfWVVWNDIyUDEwTEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWEVW RF9DU19ZQ0JDUjQ0NF8xMExFOgorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAi Y29sb3Jfc3BhY2UgPSBYRVZEX0NTX1lDQkNSNDQ0XzEwTEVcbiIpOworICAgICAgICBhdmN0eC0+ cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDQ0UDEwTEU7CisgICAgICAgIGJyZWFrOworICAgIGRl ZmF1bHQ6CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJ1bmtub3duIGNvbG9y IHNwYWNlXG4iKTsKKyAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX05PTkU7Cisg ICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKy8vIEB0b2RvIFVzZSBfWEVWRF9TUFMgZmllbGRz IHRvIGluaXRpYWxpemUgQVZDb2RlY0NvbnRleHQgd2hlbiBpdCBpcyBwb3NzaWJsZQorI2lmZGVm IFVTRV9YRVZEX1NQU19GSUVMRFMKKyAgICBhdmN0eC0+cHJvZmlsZSA9IHNwcy0+cHJvZmlsZV9p ZGM7CisgICAgYXZjdHgtPmxldmVsID0gc3BzLT5sZXZlbF9pZGM7CisKKyAgICBmZl9zZXRfc2Fy KGF2Y3R4LCBzcHMtPnZ1aV9wYXJhbWV0ZXJzLnNhcik7CisKKyAgICBpZiAoc3BzLT52dWlfcGFy YW1ldGVyc3Z1aS52aWRlb19zaWduYWxfdHlwZV9wcmVzZW50X2ZsYWcpCisgICAgICAgIGF2Y3R4 LT5jb2xvcl9yYW5nZSA9IHNwcy0+dnVpX3BhcmFtZXRlcnMudmlkZW9fZnVsbF9yYW5nZV9mbGFn ID8gQVZDT0xfUkFOR0VfSlBFRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFWQ09M X1JBTkdFX01QRUc7CisgICAgZWxzZQorICAgICAgICBhdmN0eC0+Y29sb3JfcmFuZ2UgPSBBVkNP TF9SQU5HRV9NUEVHOworCisgICAgaWYgKHNwcy0+dnVpX3BhcmFtZXRlcnMuY29sb3VyX2Rlc2Ny aXB0aW9uX3ByZXNlbnRfZmxhZykgeworICAgICAgICBhdmN0eC0+Y29sb3JfcHJpbWFyaWVzID0g c3BzLT52dWlfcGFyYW1ldGVycy5jb2xvdXJfcHJpbWFyaWVzOworICAgICAgICBhdmN0eC0+Y29s b3JfdHJjICAgICAgID0gc3BzLT52dWlfcGFyYW1ldGVycy50cmFuc2Zlcl9jaGFyYWN0ZXJpc3Rp YzsKKyAgICAgICAgYXZjdHgtPmNvbG9yc3BhY2UgICAgICA9IHNwcy0+dnVpX3BhcmFtZXRlcnMu bWF0cml4X2NvZWZmczsKKyAgICB9IGVsc2UgeworICAgICAgICBhdmN0eC0+Y29sb3JfcHJpbWFy aWVzID0gQVZDT0xfUFJJX1VOU1BFQ0lGSUVEOworICAgICAgICBhdmN0eC0+Y29sb3JfdHJjICAg ICAgID0gQVZDT0xfVFJDX1VOU1BFQ0lGSUVEOworICAgICAgICBhdmN0eC0+Y29sb3JzcGFjZSAg ICAgID0gQVZDT0xfU1BDX1VOU1BFQ0lGSUVEOworICAgIH0KKworICAgIGlmIChzcHMtPnZ1aV9w YXJhbWV0ZXJzLnRpbWluZ19pbmZvX3ByZXNlbnRfZmxhZykgeworICAgICAgICBudW0gPSBzcHMt PnZ1aV9wYXJhbWV0ZXJzLm51bV91bml0c19pbl90aWNrOworICAgICAgICBkZW4gPSBzcHMtPnZ1 aV9wYXJhbWV0ZXJzLnRpbWVfc2NhbGU7CisgICAgfQorCisgICAgaWYgKHMtPnNlaS5hbHRlcm5h dGl2ZV90cmFuc2Zlci5wcmVzZW50ICYmCisgICAgICAgICAgICBhdl9jb2xvcl90cmFuc2Zlcl9u YW1lKHMtPnNlaS5hbHRlcm5hdGl2ZV90cmFuc2Zlci5wcmVmZXJyZWRfdHJhbnNmZXJfY2hhcmFj dGVyaXN0aWNzKSAmJgorICAgICAgICAgICAgcy0+c2VpLmFsdGVybmF0aXZlX3RyYW5zZmVyLnBy ZWZlcnJlZF90cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MgIT0gQVZDT0xfVFJDX1VOU1BFQ0lGSUVE KSB7CisgICAgICAgIGF2Y3R4LT5jb2xvcl90cmMgPSBzLT5zZWkuYWx0ZXJuYXRpdmVfdHJhbnNm ZXIucHJlZmVycmVkX3RyYW5zZmVyX2NoYXJhY3RlcmlzdGljczsKKyAgICB9CisjZWxzZQorICAg IGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMgPSBBVkNPTF9QUklfVU5TUEVDSUZJRUQ7CisgICAgYXZj dHgtPmNvbG9yX3RyYyAgICAgICA9IEFWQ09MX1RSQ19VTlNQRUNJRklFRDsKKyAgICBhdmN0eC0+ Y29sb3JzcGFjZSAgICAgID0gQVZDT0xfU1BDX1VOU1BFQ0lGSUVEOworCisjZW5kaWYKKyAgICBy ZXR1cm4gMDsKK30KKworLyoqCisgKiBJbml0aWFsaXplIGRlY29kZXIgc3RhdGljIGRhdGEKKyAq CisgKiBAdG9kbyBDb25zaWRlciByZW1vdmluZyB1bnVzZWQgZnVuY3Rpb24KKyAqLworc3RhdGlj IGF2X2NvbGQgdm9pZCBsaWJ4ZXZkX2luaXRfc3RhdGljX2RhdGEoQVZDb2RlYyAqY29kZWMpCit7 CisgICAgVU5VU0VEKGNvZGVjKTsKK30KKworLyoqCisgKiBJbml0aWFsaXplIGRlY29kZXIKKyAq IENyZWF0ZSBkZWNvZGVyIGluc3RhbmNlIGFuZCBhbGxvY2F0ZSBhbGwgdGhlIG5lZWRlZCByZXNv dXJjZXMKKyAqCisgKiBAcGFyYW0gYXZjdHggY29kZWMgY29udGV4dAorICogQHJldHVybiAwIG9u IHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQorICovCitzdGF0aWMgYXZf Y29sZCBpbnQgbGlieGV2ZF9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBYZXZk Q29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBpbnQgdmFsID0gMDsKKyAgICBY RVZEX0NEU0MgKmNkc2MgPSAmKGN0eC0+Y2RzYyk7CisKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0RFQlVHLCAiZVh0cmEtZmFzdCBFc3NlbnRpYWwgVmlkZW8gRGVjb2RlclxuIik7CisjaWZkZWYg UFJJTlRfQVZDVFgKKyAgICBwcmludF9hdmN0eChhdmN0eCk7CisjZW5kaWYKKworICAgIC8qIHJl YWQgY29uZmlndXJhdGlvbnMgYW5kIHNldCB2YWx1ZXMgZm9yIGNyZWF0ZWQgZGVzY3JpcHRvciAo WEVWRF9DRFNDKSAqLworICAgIHZhbCA9IGdldF9jb25mKGF2Y3R4LCBjZHNjKTsKKyAgICBpZiAo dmFsICE9IFhFVkRfT0spIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwiQ2Fu bm90IGdldCBjb25maWd1cmF0aW9uXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKwor ICAgIC8qIGNyZWF0ZSBkZWNvZGVyICovCisgICAgY3R4LT5pZCA9IHhldmRfY3JlYXRlKCYoY3R4 LT5jZHNjKSwgTlVMTCk7CisgICAgaWYoY3R4LT5pZCA9PSBOVUxMKSB7CisgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJjYW5ub3QgY3JlYXRlIFhFVkQgZW5jb2RlclxuIik7Cisg ICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBjdHgtPnBhY2tldF9jb3VudCA9IDA7Cisg ICAgY3R4LT5kZWNvZF9mcmFtZXMgPSAwOworICAgIHJldHVybiAwOworfQorCisvKioKKyAgKiBE bmNvZGUgcGljdHVyZQorICAqCisgICogQHBhcmFtICAgICAgYXZjdHggICAgICAgICAgY29kZWMg Y29udGV4dAorICAqIEBwYXJhbSAgICAgIGRhdGEgICAgICAgICAgIGNvZGVjIHR5cGUgZGVwZW5k ZW50IG91dHB1dCBzdHJ1Y3QKKyAgKiBAcGFyYW1bb3V0XSBnb3RfZnJhbWUgICAgICBkZWNvZGVy IHNldHMgdG8gMCBvciAxIHRvIGluZGljYXRlIHRoYXQgYQorICAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5vbi1lbXB0eSBmcmFtZSBvciBzdWJ0aXRsZSB3YXMgcmV0dXJuZWQgaW4KKyAg KiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhLgorICAqIEBwYXJhbVtpbl0gIHBr dCAgICAgICAgICAgIEFWUGFja2V0IGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gYmUgZGVjb2RlZAor ICAqIEByZXR1cm4gYW1vdW50IG9mIGJ5dGVzIHJlYWQgZnJvbSB0aGUgcGFja2V0IG9uIHN1Y2Nl c3MsIG5lZ2F0aXZlIGVycm9yCisgICogICAgICAgICBjb2RlIG9uIGZhaWx1cmUKKyAgKi8KK3N0 YXRpYyBpbnQgbGlieGV2ZF9kZWNvZGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCB2b2lkICpkYXRh LCBpbnQgKmdvdF9mcmFtZSwgQVZQYWNrZXQgKnBrdCkKK3sKKyAgICBBVkZyYW1lICpmcmFtZSA9 IGRhdGE7CisgICAgWGV2ZENvbnRleHQgKmN0eCA9IE5VTEw7CisgICAgWEVWRF9JTUdCICogaW1n YiA9IE5VTEw7CisgICAgWEVWRF9TVEFUIHN0YXQ7CisgICAgWEVWRF9CSVRCIGJpdGI7CisgICAg aW50IHJldCwgbmFsdV9zaXplLCBic19yZWFkX3BvczsKKworICAgIGlmKGF2Y3R4ID09IE5VTEwp IHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgaW5wdXQgcGFy YW1ldGVyOiBBVkNvZGVjQ29udGV4dFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cisg ICAgY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBpZihjdHggPT0gTlVMTCkgeworICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgWEVWRCBjb250ZXh0XG4iKTsK KyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmKHBrdC0+c2l6ZSA+IDApIHsKKyAg ICAgICAgYnNfcmVhZF9wb3MgPSAwOworICAgICAgICBpbWdiID0gTlVMTDsKKyAgICAgICAgd2hp bGUocGt0LT5zaXplID4gKGJzX3JlYWRfcG9zICsgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSkp IHsKKyAgICAgICAgICAgIGludCBuYWxfdHlwZSA9IDA7CisgICAgICAgICAgICAKKyAgICAgICAg ICAgIG1lbXNldCgmc3RhdCwgMCwgc2l6ZW9mKFhFVkRfU1RBVCkpOworICAgICAgICAgICAgbWVt c2V0KCZiaXRiLCAwLCBzaXplb2YoWEVWRF9CSVRCKSk7CisKKyAgICAgICAgICAgIG5hbHVfc2l6 ZSA9IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKHBrdC0+ZGF0YSArIGJzX3JlYWRfcG9zLCBYRVZEX05B TF9VTklUX0xFTkdUSF9CWVRFKTsKKyAgICAgICAgICAgIGlmKG5hbHVfc2l6ZSA9PSAwKSB7Cisg ICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGJpdHN0 cmVhbVxuIik7CisgICAgICAgICAgICAgICAgZ290byBFUlI7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBic19yZWFkX3BvcyArPSBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFOworCisgICAg ICAgICAgICBiaXRiLmFkZHIgPSBwa3QtPmRhdGEgKyBic19yZWFkX3BvczsKKyAgICAgICAgICAg IGJpdGIuc3NpemUgPSBuYWx1X3NpemU7CisKKyAgICAgICAgICAgIC8vIFJlYWQgTkFMIFVuaXQg VHlwZSBmcm9tICBOQUwgVW5pdCBIZWFkZXIKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv LyBUaGUgc3RydWN0dXJlIG9mIE5BTCBVbml0IEhlYWRlciBsb29rcyBsaWtlIGZvbGxvd3MKKyAg ICAgICAgICAgIC8vCisgICAgICAgICAgICAvL8OCICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tKw0KKyAgICAgICAgICAgIC8vw4IgfDB8MXwyfDN8NHw1fDZ8N3wwfDF8MnwzfDR8NXw2 fDd8DQorICAgICAgICAgICAgLy/DgiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsN CisgICAgICAgICAgICAvL8OCIHxGfCAgIFR5cGUgICAgfCBUSUQgfCBSZXNlcnZlIHxFfA0KKyAg ICAgICAgICAgIC8vw4IgKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rDQorICAgICAg ICAgICAgLy8NCisgICAgICAgICAgICAvLyBGOiAgICAgICAxIGJpdCAgIC0gZm9yYmlkZGVuX3pl cm9fYml0LiAgUmVxdWlyZWQgdG8gYmUgemVybyBpbiBbRVZDXS4NCisgICAgICAgICAgICAvLyBU eXBlOiAgICA2IGJpdHMgIC0gbmFsX3VuaXRfdHlwZV9wbHVzMSAoVGhpcyBmaWVsZCBzcGVjaWZp ZXMgdGhlIE5BTCB1bml0IHR5cGUgYXMgZGVmaW5lZCBpbiBUYWJsZSA0IG9mIFtFVkNdKQ0KKyAg ICAgICAgICAgIC8vIFRJRDogICAgIDMgYml0cyAgLSBudWhfdGVtcG9yYWxfaWQuICBUaGlzIGZp ZWxkIHNwZWNpZmllcyB0aGUgdGVtcG9yYWwgaWRlbnRpZmllciBvZiB0aGUgTkFMIHVuaXQuDQor ICAgICAgICAgICAgLy8gUmVzZXJ2ZTogNSBiaXRzICAtIG51aF9yZXNlcnZlZF96ZXJvXzViaXRz LiAgVGhpcyBmaWVsZCBzaGFsbCBiZSBlcXVhbCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgW0VWQ10g c3BlY2lmaWNhdGlvbi4NCisgICAgICAgICAgICAvLyBFOiAgICAgICAxIGJpdCAgIC0gbnVoX2V4 dGVuc2lvbl9mbGFnLiAgVGhpcyBmaWVsZCBzaGFsbCBiZSBlcXVhbCB0aGUgdmVyc2lvbiBvZiB0 aGUgW0VWQ10gc3BlY2lmaWNhdGlvbi4NCisgICAgICAgICAgICAvLw0KKyAgICAgICAgICAgIC8v IEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWF2 dGNvcmUtcnRwLWV2Yy0wMSNzZWN0aW9uLTEuMS40DQorICAgICAgICAgICAgDQorI2lmZGVmIFVT RV9FWFBfR09MT01CX1NUVUZGIA0KKyAgICAgICAgICAgIG5hbF90eXBlID0gZ2V0X25hbHVfdHlw ZShiaXRiLmFkZHIsIDEpOw0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVH LCAiTkFMVSBUeXBlOiAlZFxuIiwgbmFsX3R5cGUpOw0KKyNlbHNlDQorICAgICAgICAgICAgbWVt Y3B5KCZuYWxfdHlwZSxiaXRiLmFkZHIsMSk7DQorICAgICAgICAgICAgbmFsX3R5cGUgPSBuYWxf dHlwZSAmIDB4N0U7DQorICAgICAgICAgICAgbmFsX3R5cGUgPSBuYWxfdHlwZSA+PiAxOw0KKyAg ICAgICAgICAgIG5hbF90eXBlIC09IDE7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfREVCVUcsICJOQUxVIFR5cGU6ICVkXG4iLCBuYWxfdHlwZSk7DQorI2VuZGlmDQorDQorICAg ICAgICAgICAgLyogbWFpbiBkZWNvZGluZyBibG9jayAqLw0KKyAgICAgICAgICAgIHJldCA9IHhl dmRfZGVjb2RlKGN0eC0+aWQsICZiaXRiLCAmc3RhdCk7DQorICAgICAgICAgICAgaWYoWEVWRF9G QUlMRUQocmV0KSkgew0KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgImZhaWxlZCB0byBkZWNvZGUgYml0c3RyZWFtXG4iKTsNCisgICAgICAgICAgICAgICAgZ290 byBFUlI7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGJzX3JlYWRfcG9zICs9IG5h bHVfc2l6ZTsNCisNCisjaWZkZWYgUFJJTlRfTkFMVV9JTkZPDQorICAgICAgICAgICAgcHJpbnRf bmFsdV9pbmZvKGN0eCk7DQorI2VuZGlmDQorDQorICAgICAgICAgICAgaWYoc3RhdC5uYWx1X3R5 cGUgPT0gWEVWRF9OVVRfU1BTKSB7DQorICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0RFQlVHLCAiRVZDIHN0cmVhbSBwYXJhbWV0ZXJzIGNoYW5nZWRcbiIpOw0KKw0KKyAgICAg ICAgICAgICAgICBpZihleHBvcnRfc3RyZWFtX3BhcmFtcyhhdmN0eCwgY3R4KSE9MCkgew0KKyAg ICAgICAgICAgICAgICAgICAgZ290byBFUlI7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJ3aWR0aDogJWRcbiIsYXZjdHgt PndpZHRoKTsNCisgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJo ZWlnaHQ6ICVkXG4iLGF2Y3R4LT5oZWlnaHQpOw0KKw0KKyAgICAgICAgICAgIH0NCisNCisgICAg ICAgICAgICBpZihzdGF0LnJlYWQgIT0gbmFsdV9zaXplKSB7DQorICAgICAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0lORk8sICJkaWZmZXJlbnQgcmVhZGluZyBvZiBiaXRzdHJlYW0g KGluOiVkLCByZWFkOiVkKVxuLCIsIG5hbHVfc2l6ZSwgc3RhdC5yZWFkKTsNCisgICAgICAgICAg ICB9DQorICAgICAgICAgICAgaWYoc3RhdC5mbnVtID49IDApIHsNCisgICAgICAgICAgICAgICAg aWYgKGltZ2IpIHsgLyogYWxyZWFkeSBoYXMgYSBkZWNvZGVkIGltYWdlICovDQorICAgICAgICAg ICAgICAgICAgICBpbWdiLT5yZWxlYXNlKGltZ2IpOw0KKyAgICAgICAgICAgICAgICAgICAgaW1n YiA9IE5VTEw7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgcmV0ID0geGV2 ZF9wdWxsKGN0eC0+aWQsICZpbWdiKTsNCisgICAgICAgICAgICAgICAgaWYoWEVWRF9GQUlMRUQo cmV0KSkgew0KKyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1Is ICJmYWlsZWQgdG8gcHVsbCB0aGUgZGVjb2RlZCBpbWFnZSAoZXJyOiVkLCBmcmFtZSM9JWQpXG4i LCByZXQsIHN0YXQuZm51bSk7DQorICAgICAgICAgICAgICAgICAgICBnb3RvIEVSUjsNCisgICAg ICAgICAgICAgICAgfSBlbHNlIGlmIChyZXQgPT0gWEVWRF9PS19GUk1fREVMQVlFRCkgew0KKyAg ICAgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJkZWxheWVkIGZy YW1lXG4iKTsNCisgICAgICAgICAgICAgICAgICAgIGlmKGltZ2IpIHsNCisgICAgICAgICAgICAg ICAgICAgICAgICBpbWdiLT5yZWxlYXNlKGltZ2IpOw0KKyAgICAgICAgICAgICAgICAgICAgICAg IGltZ2IgPSBOVUxMOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9 DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImJ1bXBpbmcgLi4uXG4iKTsNCisgICAgICAgIHJldCA9 IHhldmRfcHVsbChjdHgtPmlkLCAmKGltZ2IpKTsNCisgICAgICAgIGlmKHJldCA9PSBYRVZEX0VS Ul9VTkVYUEVDVEVEKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcs ICJCdW1waW5nIHByb2Nlc3MgY29tcGxldGVkXG4iKTsNCisgICAgICAgICAgICAqZ290X2ZyYW1l ID0gMDsNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0gZWxzZSBpZihYRVZEX0ZB SUxFRChyZXQpKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJm YWlsZWQgdG8gcHVsbCB0aGUgZGVjb2RlZCBpbWFnZSAoZXJyOiVkKVxuIiwgcmV0KTsNCisgICAg ICAgICAgICBnb3RvIEVSUjsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfREVCVUcsICJidW1waW5nIHN1Y2Nlc3NcbiIpOw0KKyAgICAgICAgfQ0K KyAgICB9DQorDQorICAgIGlmKGltZ2IpIHsNCisgICAgICAgIC8qIEB0b2RvIHN1cHBvcnRzIG90 aGVyIGNvbG9yIHNwYWNlIGFuZCBiaXQgZGVwdGggKi8NCisgICAgICAgIGlmKGltZ2ItPmNzICE9 IFhFVkRfQ1NfWUNCQ1I0MjBfMTBMRSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiTm90IHN1cHBvcnRlZCBwaXhlbCBmb3JtYXQ6ICVzXG4iLCBhdl9nZXRfcGl4 X2ZtdF9uYW1lKGF2Y3R4LT5waXhfZm10KSk7DQorICAgICAgICAgICAgZ290byBFUlI7DQorICAg ICAgICB9DQorDQorICAgICAgICBpZiAoaW1nYi0+d1swXSAhPSBhdmN0eC0+d2lkdGggfHwgaW1n Yi0+aFswXSAhPSBhdmN0eC0+aGVpZ2h0KSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfREVCVUcsICJyZXNvbHV0aW9uIGNoYW5nZWQgJWR4JWQgLT4gJWR4JWRcbiIsDQorICAg ICAgICAgICAgICAgICAgIGF2Y3R4LT53aWR0aCwgYXZjdHgtPmhlaWdodCwgaW1nYi0+d1swXSwg aW1nYi0+aFswXSk7DQorICAgICAgICAgICAgaWYoZmZfc2V0X2RpbWVuc2lvbnMoYXZjdHgsIGlt Z2ItPndbMF0sIGltZ2ItPmhbMF0pIDwgMCkgew0KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgImNhbm5vdCBzZXQgbmV3IGRpbWVuc2lvblxuIik7DQorICAgICAg ICAgICAgICAgIGdvdG8gRVJSOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAg ICAgIGZyYW1lLT5jb2RlZF9waWN0dXJlX251bWJlcisrOw0KKyAgICAgICAgZnJhbWUtPmRpc3Bs YXlfcGljdHVyZV9udW1iZXIrKzsNCisgICAgICAgIGZyYW1lLT5mb3JtYXQgPSBBVl9QSVhfRk1U X1lVVjQyMFAxMExFOw0KKw0KKyNpZmRlZiBQUklOVF9YRVZEX0lNR0JfSU5GTw0KKyAgICAgICAg cHJpbnRfeGV2ZF9pbWdiX2luZm8oaW1nYik7DQorI2VuZGlmDQorDQorICAgICAgICBpZiAoZmZf Z2V0X2J1ZmZlcihhdmN0eCwgZnJhbWUsIDApIDwgMCkgew0KKyAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IGdldCBBViBidWZmZXJcbiIpOw0KKyAgICAgICAg ICAgIGdvdG8gRVJSOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZnJhbWUtPnB0cyA9IHBrdC0+ cHRzOw0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJmcmFtZS0+cHRzID0g JWxkXG4iLCBmcmFtZS0+cHRzKTsNCisNCisgICAgICAgIGF2X2ltYWdlX2NvcHkoZnJhbWUtPmRh dGEsIGZyYW1lLT5saW5lc2l6ZSwgKGNvbnN0IHVpbnQ4X3QgKiopaW1nYi0+YSwNCisgICAgICAg ICAgICAgICAgICAgICAgaW1nYi0+cywgYXZjdHgtPnBpeF9mbXQsDQorICAgICAgICAgICAgICAg ICAgICAgIGltZ2ItPndbMF0sIGltZ2ItPmhbMF0pOw0KKw0KKyAgICAgICAgY3R4LT5kZWNvZF9m cmFtZXMrKzsNCisgICAgICAgICpnb3RfZnJhbWUgPSAxOw0KKw0KKyNpZmRlZiBQUklOVF9GUkFN RV9JTkZPDQorICAgICAgICBwcmludF9mcmFtZV9pbmZvKGZyYW1lKTsNCisjZW5kaWYNCisgICAg ICAgIGltZ2ItPnJlbGVhc2UoaW1nYik7DQorICAgICAgICBpbWdiID0gTlVMTDsNCisgICAgfSBl bHNlIHsNCisgICAgICAgICpnb3RfZnJhbWUgPSAwOw0KKyAgICB9DQorIA0KKyAgICBjdHgtPnBh Y2tldF9jb3VudCsrOw0KKyAgICByZXR1cm4gcGt0LT5zaXplOw0KKw0KK0VSUjoNCisgICAgaWYo aW1nYikgew0KKyAgICAgICAgaW1nYi0+cmVsZWFzZShpbWdiKTsNCisgICAgICAgIGltZ2IgPSBO VUxMOw0KKyAgICB9DQorICAgICpnb3RfZnJhbWUgPSAwOw0KKyAgICByZXR1cm4gLTE7DQorfQ0K Kw0KKy8qKg0KKyAqIERlc3Ryb3kgZGVjb2Rlcg0KKyAqDQorICogQHBhcmFtIGF2Y3R4IGNvZGVj IGNvbnRleHQNCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcw0KKyAqLw0KK3N0YXRpYyBhdl9jb2xk IGludCBsaWJ4ZXZkX2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkNCit7DQorICAgIFhldmRD b250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KKyAgICBpZihjdHgtPmlkKSB7DQorICAg ICAgICB4ZXZkX2RlbGV0ZShjdHgtPmlkKTsNCisgICAgICAgIGN0eC0+aWQgPSBOVUxMOw0KKyAg ICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRv ZihYZXZkQ29udGV4dCwgeCkNCisjZGVmaW5lIFZEIEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNIHwg QVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0NCisNCisvLyBAdG9kbyBjb25zaWRlciB1c2luZyBm b2xsb3dpbmcgb3B0aW9ucyAoLi9mZm1wZWcgLS1oZWxwIGRlY29kZXI9bGlieGV2ZCkNCisvLw0K K3N0YXRpYyBjb25zdCBBVk9wdGlvbiBvcHRpb25zW10gPSB7DQorICAgIHsgInhldmQtcGFyYW1z IiwgICAgICAgICAgICAgICAgIm92ZXJyaWRlIHRoZSB4ZXZkIGNvbmZpZ3VyYXRpb24gdXNpbmcg YSA6LXNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0ZXJzIiwgT0ZGU0VUKHhldmRf b3B0cyksIEFWX09QVF9UWVBFX0RJQ1QsICAgeyAwIH0sIDAsIDAsIFZEIH0sDQorICAgIHsgTlVM TCB9DQorfTsNCisNCitzdGF0aWMgY29uc3QgQVZDbGFzcyB4ZXZkX2NsYXNzID0gew0KKyAgICAu Y2xhc3NfbmFtZSA9ICJsaWJ4ZXZkIiwNCisgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0 ZW1fbmFtZSwNCisgICAgLm9wdGlvbiAgICAgPSBvcHRpb25zLA0KKyAgICAudmVyc2lvbiAgICA9 IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwNCit9Ow0KKw0KKy8vLyBAdG9kbyBwcm92aWRlIGltcGxl bWVudGF0aW9uDQorc3RhdGljIGNvbnN0IEFWQ29kZWNEZWZhdWx0IHhldmRfZGVmYXVsdHNbXSA9 IHsNCisgICAgeyAiYiIsICIwIiB9LA0KKyAgICB7IE5VTEwgfSwNCit9Ow0KKw0KK0FWQ29kZWMg ZmZfbGlieGV2ZF9kZWNvZGVyID0gew0KKyAgICAubmFtZSAgICAgICAgICAgICA9ICJldmMiLA0K KyAgICAubG9uZ19uYW1lICAgICAgICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJFVkMgLyBNUEVH LTUgRXNzZW50aWFsIFZpZGVvIENvZGluZyAoRVZDKSIpLA0KKyAgICAudHlwZSAgICAgICAgICAg ICA9IEFWTUVESUFfVFlQRV9WSURFTywNCisgICAgLmlkICAgICAgICAgICAgICAgPSBBVl9DT0RF Q19JRF9FVkMsDQorICAgIC5pbml0ICAgICAgICAgICAgID0gbGlieGV2ZF9pbml0LA0KKyAgICAu aW5pdF9zdGF0aWNfZGF0YSA9IGxpYnhldmRfaW5pdF9zdGF0aWNfZGF0YSwNCisgICAgLmRlY29k ZSAgICAgICAgICAgPSBsaWJ4ZXZkX2RlY29kZSwNCisgICAgLmNsb3NlICAgICAgICAgICAgPSBs aWJ4ZXZkX2Nsb3NlLA0KKyAgICAucHJpdl9kYXRhX3NpemUgICA9IHNpemVvZihYZXZkQ29udGV4 dCksDQorICAgIC5wcml2X2NsYXNzICAgICAgID0gJnhldmRfY2xhc3MsDQorICAgIC5kZWZhdWx0 cyAgICAgICAgID0geGV2ZF9kZWZhdWx0cywNCisgICAgLmNhcGFiaWxpdGllcyAgICAgPSBBVl9D T0RFQ19DQVBfREVMQVkgfCBBVl9DT0RFQ19DQVBfQVVUT19USFJFQURTIHwgQVZfQ09ERUNfQ0FQ X0FWT0lEX1BST0JJTkcsDQorICAgIC53cmFwcGVyX25hbWUgICAgID0gImxpYnhldmQiLA0KK307 DQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9saWJ4ZXZlLmMgYi9saWJhdmNvZGVjL2xpYnhldmUu Yw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmYzNGExZDZlZmQNCi0t LSAvZGV2L251bGwNCisrKyBiL2xpYmF2Y29kZWMvbGlieGV2ZS5jDQpAQCAtMCwwICsxLDExODUg QEANCisvKg0KKyAqIGxpYnhldmUgZW5jb2Rlcg0KKyAqIEVWQyAoTVBFRy01IEVzc2VudGlhbCBW aWRlbyBDb2RpbmcpIGVuY29kaW5nIHVzaW5nIFhFVkUgTVBFRy01IEVWQyBlbmNvZGVyIGxpYnJh cnkNCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAyMSBEYXdpZCBLb3ppbnNraSA8ZC5rb3ppbnNr aUBzYW1zdW5nLmNvbT4NCisgKg0KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4NCisg Kg0KKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3INCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljDQorICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKiBGRm1wZWcgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VDQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4NCisgKg0KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorICogRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxIFVTQQ0KKyAqLw0KKw0KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQ0KKyNkZWZpbmUgWEVWRV9B UElfSU1QT1JUUyAxDQorI2VuZGlmDQorDQorI2luY2x1ZGUgPHhldmUuaD4NCisNCisjaW5jbHVk ZSA8ZmxvYXQuaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorDQorI2luY2x1ZGUgImxpYmF2dXRp bC9pbnRlcm5hbC5oIg0KKyNpbmNsdWRlICJsaWJhdnV0aWwvY29tbW9uLmgiDQorI2luY2x1ZGUg ImxpYmF2dXRpbC9vcHQuaCINCisjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCINCisjaW5j bHVkZSAibGliYXZ1dGlsL3BpeGZtdC5oIg0KKyNpbmNsdWRlICJsaWJhdnV0aWwvdGltZS5oIg0K Kw0KKyNpbmNsdWRlICJhdmNvZGVjLmgiDQorI2luY2x1ZGUgImludGVybmFsLmgiDQorI2luY2x1 ZGUgInBhY2tldF9pbnRlcm5hbC5oIg0KKw0KKyNkZWZpbmUgTUFYX0JTX0JVRiAoMTYqMTAyNCox MDI0KQ0KKw0KKy8qKg0KKyAqIEVycm9yIGNvZGVzDQorICovDQorI2RlZmluZSBYRVZFX1BBUkFN X0JBRF9OQU1FIC0xMDANCisjZGVmaW5lIFhFVkVfUEFSQU1fQkFEX1ZBTFVFIC0yMDANCisNCisv KioNCisgKiBNYWNybyBmb3IgZWxpbWluYXRpbmcgdGhlIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5n DQorICovDQorI2RlZmluZSBVTlVTRUQoeCkgKHZvaWQpKHgpDQorDQorLyoqDQorICogRW5jb2Rl ciBzdGF0ZXMNCisgKg0KKyAqIFNUQVRFX0VOQ09ESU5HIC0gdGhlIGVuY29kZXIgcmVjZWl2ZXMg YW5kIHByb2Nlc3NlcyBpbnB1dCBmcmFtZXMNCisgKiBTVEFURV9CVU1QSU5HICAtIHRoZXJlIGFy ZSBubyBtb3JlIGlucHV0IGZyYW1lcywgaG93ZXZlciB0aGUgZW5jb2RlciBzdGlsbCBwcm9jZXNz ZXMgcHJldmlvdXNseSByZWNlaXZlZCBkYXRhDQorICogU1RBVEVfU0tJUFBJTkcgLSBza2lwcGlu ZyBpbnB1dCBmcmFtZXMNCisgKi8NCit0eXBlZGVmIGVudW0gU3RhdGUgew0KKyAgICBTVEFURV9F TkNPRElORywNCisgICAgU1RBVEVfQlVNUElORywNCisgICAgU1RBVEVfU0tJUFBJTkcNCit9IFN0 YXRlOw0KKw0KKy8qKg0KKyAqIFRoZSBzdHJ1Y3R1cmUgc3RvcmVzIGFsbCB0aGUgc3RhdGUgYXNz b2NpYXRlZCB3aXRoIHRoZSBpbnN0YW5jZSBvZiBYZXZlIE1QRUctNSBFVkMgZW5jb2Rlcg0KKyAq IFRoZSBmaXJzdCBmaWVsZCBpcyBhIHBvaW50ZXIgdG8gYW4gQVZDbGFzcyBzdHJ1Y3QgKEBzZWUg aHR0cHM6Ly9mZm1wZWcub3JnL2RveHlnZW4vdHJ1bmsvc3RydWN0QVZDbGFzcy5odG1sI2RldGFp bHMpLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0IFhldmVDb250ZXh0IHsNCisgICAgY29uc3QgQVZD bGFzcyAqY2xhc3M7DQorDQorICAgIFhFVkUgaWQ7ICAgICAgICAvLyBYRVZFIGluc3RhbmNlIGlk ZW50aWZpZXINCisgICAgWEVWRV9DRFNDIGNkc2M7IC8vIGNvZGluZyBwYXJhbWV0ZXJzIGkuZSBw cm9maWxlLCB3aWR0aCAmIGhlaWdodCBvZiBpbnB1dCBmcmFtZSwgbnVtIG9mIHRoZXJhZHMsIGZy YW1lIHJhdGUgLi4uDQorICAgIFhFVkVfQklUQiBiaXRiOyAvLyBiaXRzdHJlYW0gYnVmZmVyIChv dXRwdXQpDQorICAgIFhFVkVfU1RBVCBzdGF0OyAvLyBlbmNvZGluZyBzdGF0dXMgKG91dHB1dCkN CisgICAgWEVWRV9JTUdCIGltZ2I7IC8vIGltYWdlIGJ1ZmZlciAoaW5wdXQpDQorDQorICAgIFN0 YXRlIHN0YXRlOyAvLyBlbmNvZGVyIHN0YXRlIChza2lwcGluZywgZW5jb2RpbmcsIGJ1bXBpbmcp DQorDQorICAgIGludCBlbmNvZF9mcmFtZXM7ICAgLy8gbnVtIG9mIGVuY29kZWQgZnJhbWVzDQor ICAgIGRvdWJsZSBieXRlc190b3RhbDsgLy8gZW5jb2RlZCBiaXRzdHJlYW0gYnl0ZSBzaXplDQor ICAgIGRvdWJsZSBiaXRyYXRlOyAgICAgLy8gYml0cyBwZXIgc2Vjb25kDQorICAgIGludCBwYWNr ZXRfY291bnQ7ICAgLy8gbnVtIG9mIHBhY2tldHMgY3JlYXRlZCBieSBlbmNvZGVyDQorDQorICAg IC8vIENocm9tYSBzdWJzYW1wbGluZw0KKyAgICBpbnQgd2lkdGhfbHVtYTsNCisgICAgaW50IGhl aWdodF9sdW1hOw0KKyAgICBpbnQgd2lkdGhfY2hyb21hOw0KKyAgICBpbnQgaGVpZ2h0X2Nocm9t YTsNCisNCisgICAgaW50IHByb2ZpbGVfaWQ7ICAvLyBlbmNvZGVyIHByb2ZpbGUgKG1haW4sIGJh c2VsaW5lKQ0KKyAgICBpbnQgcHJlc2V0X2lkOyAgIC8vIHByZXNldCBvZiB4ZXZlICggZmFzdCwg bWVkaXVtLCBzbG93LCBwbGFjZWJvKQ0KKyAgICBpbnQgdHVuZV9pZDsgICAgIC8vIHR1bmUgb2Yg eGV2ZSAocHNuciwgemVyb2xhdGVuY3kpDQorICAgIGludCBpbnB1dF9kZXB0aDsgLy8gaW5wdXQg Yml0LWRlcHRoOiA4Yml0LCAxMGJpdA0KKyAgICBpbnQgaGFzaDsNCisNCisgICAgLyogdmFyaWFi bGVzIGZvciBpbnB1dCBwYXJhbWV0ZXIgKi8NCisgICAgY2hhciAqIG9wX3ByZXNldDsNCisgICAg Y2hhciAqIG9wX3R1bmU7DQorICAgIGludCAgICBvcF9xcDsNCisgICAgaW50ICAgIG9wX2NyZjsN CisNCisgICAgLy8gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzDQorICAgIC8vIHhldmUgY29uZmln dXJhdGlvbiByZWFkIGZyb20gYSA6LXNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0 ZXJzDQorICAgIEFWRGljdGlvbmFyeSAqeGV2ZV9wYXJhbXM7DQorfSBYZXZlQ29udGV4dDsNCisN CisvKioNCisgKiBHZXRzIFhldmUgZW5jb2RlciBwcmUtZGVmaW5lZCBwcm9maWxlDQorICoNCisg KiBAcGFyYW0gcHJvZmlsZSBzdHJpbmcgZGVzY3JpYmluZyBYZXZlIGVuY29kZXIgcHJvZmlsZSAo YmFzZWxpbmUsIG1haW4pDQorICogQHJldHVybiBYRVZFIHByZS1kZWZpbmVkIHByb2ZpbGUgb24g c3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgZ2V0 X3Byb2ZpbGVfaWQoY29uc3QgY2hhciAqIHByb2ZpbGUpDQorew0KKyAgICBpZiAoIXN0cmNtcChw cm9maWxlLCAiYmFzZWxpbmUiKSkgew0KKyAgICAgICAgcmV0dXJuIFhFVkVfUFJPRklMRV9CQVNF TElORTsNCisgICAgfSBlbHNlIGlmICghc3RyY21wKHByb2ZpbGUsICJtYWluIikpIHsNCisgICAg ICAgIHJldHVybiBYRVZFX1BST0ZJTEVfTUFJTjsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIHJl dHVybiAtMTsNCisgICAgfQ0KK30NCisNCisvKioNCisgKiBHZXRzIFhldmUgcHJlLWRlZmluZWQg cHJlc2V0DQorICoNCisgKiBAcGFyYW0gcHJlc2V0IHN0cmluZyBkZXNjcmliaW5nIFhldmUgZW5j b2RlciBwcmVzZXQgKGZhc3QsIG1lZGl1bSwgc2xvdywgcGxhY2VibyApDQorICogQHJldHVybiBY RVZFIHByZS1kZWZpbmVkIHByb2ZpbGUgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFp bHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgZ2V0X3ByZXNldF9pZChjb25zdCBjaGFyICogcHJlc2V0 KQ0KK3sNCisgICAgaWYoKCFzdHJjbXAocHJlc2V0LCAiZmFzdCIpKSkgew0KKyAgICAgICAgcmV0 dXJuIFhFVkVfUFJFU0VUX0ZBU1Q7DQorICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwcmVzZXQsICJt ZWRpdW0iKSkgew0KKyAgICAgICAgcmV0dXJuIFhFVkVfUFJFU0VUX01FRElVTTsNCisgICAgfSBl bHNlIGlmICghc3RyY21wKHByZXNldCwgInNsb3ciKSkgew0KKyAgICAgICAgcmV0dXJuIFhFVkVf UFJFU0VUX1NMT1c7DQorICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwcmVzZXQsICJwbGFjZWJvIikp IHsNCisgICAgICAgIHJldHVybiBYRVZFX1BSRVNFVF9QTEFDRUJPOw0KKyAgICB9IGVsc2Ugew0K KyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorfQ0KKw0KKy8qKg0KKyAqIEdldHMgWGV2ZSBw cmUtZGVmaW5lZCB0dW5lIGlkDQorICoNCisgKiBAcGFyYW0gcHJlc2V0IHN0cmluZyBkZXNjcmli aW5nIFhldmUgZW5jb2RlciBwcmVzZXQgKGZhc3QsIG1lZGl1bSwgc2xvdywgcGxhY2VibyApDQor ICogQHJldHVybiBYRVZFIHByZS1kZWZpbmVkIHByb2ZpbGUgb24gc3VjY2VzcywgbmVnYXRpdmUg dmFsdWUgb24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgZ2V0X3R1bmVfaWQoY29uc3QgY2hh ciAqIHR1bmUpDQorew0KKyAgICBpZigoIXN0cmNtcCh0dW5lLCAicHNuciIpKSkgew0KKyAgICAg ICAgcmV0dXJuIFhFVkVfVFVORV9QU05SOw0KKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAodHVuZSwg Inplcm9sYXRlbmN5IikpIHsNCisgICAgICAgIHJldHVybiBYRVZFX1RVTkVfWkVST0xBVEVOQ1k7 DQorICAgIH0gZWxzZSB7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCit9DQorDQorc3Rh dGljIGludCBrYnBzX3N0cl90b19pbnQoY2hhciAqc3RyKQ0KK3sNCisgICAgaW50IGticHMgPSAw Ow0KKyAgICBpZiAoc3RyY2hyKHN0ciwgJ0snKSB8fCBzdHJjaHIoc3RyLCAnaycpKSB7DQorICAg ICAgICBjaGFyICp0bXAgPSBzdHJ0b2soc3RyLCAiS2sgIik7DQorICAgICAgICBrYnBzID0gKGlu dCkoYXRvZih0bXApKTsNCisgICAgfSBlbHNlIGlmIChzdHJjaHIoc3RyLCAnTScpIHx8IHN0cmNo cihzdHIsICdtJykpIHsNCisgICAgICAgIGNoYXIgKnRtcCA9IHN0cnRvayhzdHIsICJNbSAiKTsN CisgICAgICAgIGticHMgPSAoaW50KShhdG9mKHRtcCkgKiAxMDAwKTsNCisgICAgfSBlbHNlIHsN CisgICAgICAgIGticHMgPSBhdG9pKHN0cik7DQorICAgIH0NCisgICAgcmV0dXJuIGticHM7DQor fQ0KKw0KKy8qKg0KKyAqIFBhcnNlIDotc2VwYXJhdGVkIGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFt ZXRlcnMNCisgKg0KKyAqIEBwYXJhbSBrZXkNCisgKiBAcGFyYW0gdmFsdWUNCisgKiBAcGFyYW0g eGUgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHRoYXQgc3RvcmVzIGFsbCB0aGUgc3RhdGUgYXNz b2NpYXRlZCB3aXRoDQorICogICAgICAgICAgIHRoZSBpbnN0YW5jZSBvZiBYZXZlIE1QRUctNSBF VkMgZW5jb2Rlcg0KKyAqIEBwYXJhbSBwYXJhbSBjb2RpbmcgcGFyYW1ldGVycw0KKyAqDQorICog QHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUNCisgKi8NCitz dGF0aWMgaW50IHBhcnNlX3hldmVfcGFyYW1zKGNvbnN0IGNoYXIqIGtleSwgY29uc3QgY2hhciog dmFsdWUsIFhldmVDb250ZXh0KiB4ZSwgWEVWRV9QQVJBTSogcGFyYW0pDQorew0KKyAgICBpZigh a2V5KSB7DQorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSXZhbGlkIGFyZ3Vt ZW50OiBrZXkgc3RyaW5nIGlzIE5VTExcbiIpOw0KKyAgICAgICAgcmV0dXJuIFhFVkVfUEFSQU1f QkFEX1ZBTFVFOw0KKyAgICB9DQorICAgIGlmKCF2YWx1ZSkgew0KKyAgICAgICAgaWYgKHN0cmNt cChrZXksICJoYXNoIikgPT0gMCkgew0KKyAgICAgICAgICAgIHhlLT5oYXNoID0gMTsNCisgICAg ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJlbWJlZGRpbmcgc2lnbmF0dXJlIGlz IGVuYWJsZWRcbiIpOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBhdl9sb2coTlVM TCwgQVZfTE9HX0VSUk9SLCAiSXZhbGlkIGFyZ3VtZW50OiB2YWx1ZSBzdHJpbmcgaXMgTlVMTFxu Iik7DQorICAgICAgICAgICAgcmV0dXJuIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOw0KKyAgICAgICAg fQ0KKyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJ2YnYtYnVmc2l6ZSIpID09IDAgKSB7DQor ICAgICAgICBwYXJhbS0+dmJ2X2J1ZnNpemUgPSBrYnBzX3N0cl90b19pbnQoKGNoYXIqKXZhbHVl KTsNCisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIlZCViBidWZmZXIgc2l6ZTog JWRrYml0c1xuIiwgcGFyYW0tPnZidl9idWZzaXplKTsNCisgICAgfSBlbHNlIGlmIChzdHJjbXAo a2V5LCAicmMtdHlwZSIpID09IDAgKSB7DQorICAgICAgICBpbnQgcmNfdHlwZSA9IGF0b2kodmFs dWUpOw0KKyAgICAgICAgaWYocmNfdHlwZSA8IDAgfHwgcmNfdHlwZSA+IDIpIHsNCisgICAgICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiUmF0ZSBjb250cm9sIHR5cGUgWyAwKHJj X29mZikgLyAxKENCUikgXSBiYWQgdmFsdWU6ICVkXG4iLCByY190eXBlKTsNCisgICAgICAgICAg ICByZXR1cm4gWEVWRV9QQVJBTV9CQURfVkFMVUU7DQorICAgICAgICB9DQorICAgICAgICBwYXJh bS0+cmNfdHlwZSA9IHJjX3R5cGU7DQorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8s ICJSYXRlIGNvbnRyb2wgdHlwZSBbIDAocmNfb2ZmKSAvIDEoQ0JSKSBdIDogJWRcbiIsIHJjX3R5 cGUpOw0KKyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJiZnJhbWVzIikgPT0gMCApIHsNCisg ICAgICAgIGludCBiZnJhbWVzID0gYXRvaSh2YWx1ZSk7DQorICAgICAgICBpZihiZnJhbWVzIDwg MCkgew0KKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJiZnJhbWVzOiBi YWQgdmFsdWU6ICVkXG4iLCBiZnJhbWVzKTsNCisgICAgICAgICAgICByZXR1cm4gWEVWRV9QQVJB TV9CQURfVkFMVUU7DQorICAgICAgICB9DQorICAgICAgICBwYXJhbS0+YmZyYW1lcyA9IGJmcmFt ZXM7DQorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJiZnJhbWVzIDogJWRcbiIs IGJmcmFtZXMpOw0KKyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJwcm9maWxlIikgPT0gMCAp IHsNCisgICAgICAgIGNvbnN0IGNoYXIqIHByb2ZpbGUgPSB2YWx1ZTsNCisgICAgICAgIGludCBw cm9maWxlX2lkOw0KKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAicHJvZmlsZSAo YmFzZWxpbmUsIG1haW4pOiAlc1xuIiwgcHJvZmlsZSk7DQorICAgICAgICBwcm9maWxlX2lkID0g Z2V0X3Byb2ZpbGVfaWQocHJvZmlsZSk7DQorICAgICAgICBpZiAocHJvZmlsZV9pZCA8IDApIHsN CisgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCB4ZXZlIHBh cmFtOiBwcm9maWxlKCVzKVxuIiwgcHJvZmlsZSk7DQorICAgICAgICAgICAgcmV0dXJuIFhFVkVf UEFSQU1fQkFEX1ZBTFVFOw0KKyAgICAgICAgfQ0KKyAgICAgICAgeGUtPnByb2ZpbGVfaWQgPSBw cm9maWxlX2lkOw0KKyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJwcmVzZXQiKSA9PSAwICkg ew0KKyAgICAgICAgY29uc3QgY2hhciogcHJlc2V0ID0gdmFsdWU7DQorICAgICAgICBpbnQgcHJl c2V0X2lkOw0KKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiUHJlc2V0IG9mIHhl dmUgKGZhc3QsIG1lZGl1bSwgc2xvdywgcGxhY2Vibyk6ICVzXG4iLCBwcmVzZXQpOw0KKyAgICAg ICAgcHJlc2V0X2lkID0gZ2V0X3ByZXNldF9pZChwcmVzZXQpOw0KKyAgICAgICAgaWYoIHByZXNl dF9pZCA8IDApIHsNCisgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52 YWxpZCB4ZXZlIHBhcmFtOiBwcmVzZXQoJXMpXG4iLCBwcmVzZXQpOw0KKyAgICAgICAgICAgIHJl dHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsNCisgICAgICAgIH0NCisgICAgICAgIHhlLT5wcmVz ZXRfaWQgPSBwcmVzZXRfaWQ7DQorICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwgInR1bmUiKSA9 PSAwICkgew0KKyAgICAgICAgY29uc3QgY2hhciogdHVuZSA9IHZhbHVlOw0KKyAgICAgICAgaW50 IHR1bmVfaWQ7DQorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJUdW5lIG9mIHhl dmUgKHBzbnIsIHplcm9sYXRlbmN5KTogJXNcbiIsIHR1bmUpOw0KKyAgICAgICAgdHVuZV9pZD0g Z2V0X3R1bmVfaWQodHVuZSk7DQorICAgICAgICBpZiggdHVuZV9pZCA8IDApIHsNCisgICAgICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCB4ZXZlIHBhcmFtOiB0dW5l KCVzKVxuIiwgdHVuZSk7DQorICAgICAgICAgICAgcmV0dXJuIFhFVkVfUEFSQU1fQkFEX1ZBTFVF Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgeGUtPnR1bmVfaWQgPSB0dW5lX2lkOw0KKyAgICB9IGVs c2UgaWYgKHN0cmNtcChrZXksICJiaXRyYXRlIikgPT0gMCApIHsNCisgICAgICAgIHBhcmFtLT5i aXRyYXRlID0ga2Jwc19zdHJfdG9faW50KChjaGFyICopdmFsdWUpOw0KKyAgICAgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19JTkZPLCAiQml0cmF0ZSA9ICVka2Jwc1xuIiwgcGFyYW0tPmJpdHJhdGUp Ow0KKyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJxIikgPT0gMCB8fCBzdHJjbXAoa2V5LCAi cXAiKSA9PSAwKSB7DQorICAgICAgICBpbnQgcXAgPSBhdG9pKHZhbHVlKTsNCisgICAgICAgIGlm KHFwIDwgMCB8fCBxcCA+IDUxKSB7DQorICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19F UlJPUiwgIkludmFsaWQgUVAgdmFsdWUgKDB+NTEpIDolZFxuIiwgcXApOw0KKyAgICAgICAgICAg IHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsNCisgICAgICAgIH0NCisgICAgICAgIHBhcmFt LT5xcCA9IHFwOw0KKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiUVAgdmFsdWUg KDB+NTEpOiAlZFxuIiwgcGFyYW0tPnFwKTsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJVbmtub3duIHhldmUgY29kZWMgb3B0aW9uOiAlc1xuIiwg a2V5KTsNCisgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9OQU1FOw0KKyAgICB9DQorICAg IHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBDb252ZXJ0IGZmbXBlZyBwaXhlbCBmb3JtYXQg KEFWUGl4ZWxGb3JtYXQpIHRvIFhFVkUgcHJlLWRlZmluZWQgY29sb3IgZm9ybWF0DQorICoNCisg KiBAcGFyYW1baW5dICBweF9mbXQgcGl4ZWwgZm9ybWF0IChAc2VlIGh0dHBzOi8vZmZtcGVnLm9y Zy9kb3h5Z2VuL3RydW5rL3BpeGZtdF84aC5odG1sI2E5YThlMzM1Y2YzYmU0NzIwNDJiYzlmMGNm ODBjZDRjNSkNCisgKiBAcGFyYW1bb3V0XSBjb2xvcl9mb3JtYXQgWEVWRSBwcmUtZGVmaW5lZCBj b2xvciBmb3JtYXQgKEBzZWUgeGV2ZS5oKQ0KKyAqIEBwYXJhbVtvdXRdIGJpdF9kZXB0aCBiaXQg ZGVwdGgNCisgKg0KKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBm YWlsdXJlDQorICovDQorc3RhdGljIGludCBnZXRfcGl4X2ZtdChlbnVtIEFWUGl4ZWxGb3JtYXQg cGl4X2ZtdCwgaW50ICpjb2xvcl9mb3JtYXQsIGludCAqYml0X2RlcHRoKQ0KK3sNCisgICAgc3dp dGNoIChwaXhfZm10KSB7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQOg0KKyAgICAgICAg KmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0MjA7DQorICAgICAgICAqYml0X2RlcHRoID0g ODsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDoNCisgICAg ICAgICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NGX1lDQkNSNDIyOw0KKyAgICAgICAgKmJpdF9kZXB0 aCA9IDg7DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFA6DQor ICAgICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9ZQ0JDUjQ0NDsNCisgICAgICAgICpiaXRf ZGVwdGggPSA4Ow0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQ MTA6DQorICAgICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9ZQ0JDUjQyMDsNCisgICAgICAg ICpiaXRfZGVwdGggPSAxMDsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRf WVVWNDIyUDEwOg0KKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0MjI7DQor ICAgICAgICAqYml0X2RlcHRoID0gMTA7DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9Q SVhfRk1UX1lVVjQ0NFAxMDoNCisgICAgICAgICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NGX1lDQkNS NDQ0Ow0KKyAgICAgICAgKmJpdF9kZXB0aCA9IDEwOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGRl ZmF1bHQ6DQorICAgICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9VTktOT1dOOw0KKyAgICAg ICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBU aGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdmFyaWFibGUgb2YgdHlwZSBYRVZFX0NE U0MuDQorICogWEVWRV9DRFNDIGNvbnRhaW5zIGFsbCBlbmNvZGVyIHBhcmFtZXRlcnMgdGhhdCBz aG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0cyB1c2UuDQorICoNCisgKiBUaGUgZmllbGQg dmFsdWVzIG9mIHRoZSBYRVZFX0NEU0Mgc3RydWN0dXJlIGFyZSBwb3B1bGF0ZWQgYmFzZWQgb246 DQorICogLSB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCB2YWx1ZXMgb2YgdGhlIEF2Q29kZWNDb25l dHh0IHN0cnVjdHVyZSwNCisgKiAtIHRoZSB4ZXZlIGVuY29kZXIgc3BlY2lmaWMgb3B0aW9uIHZh bHVlcywNCisgKiAgICh0aGUgZnVsbCBsaXN0IG9mIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB4ZXZl IGVuY29kZXIgaXMgZGlzcGxheWVkIGFmdGVyIGV4ZWN1dGluZyB0aGUgY29tbWFuZCAuL2ZmbXBl ZyAtLWhlbHAgZW5jb2RlciA9IGxpYnhldmUpDQorICogLSBhbmQgdGhlIHhldmUgZW5jb2RlciBv cHRpb25zIHNwZWNpZmllZCBhcyBhIGxpc3Qgb2Yga2V5IHZhbHVlIHBhaXJzIGZvbGxvd2luZyB4 ZXZlLXBhcmFtcyBvcHRpb24NCisgKg0KKyAqIE9yZGVyIG9mIGlucHV0IHByb2Nlc3NpbmcgYW5k IHBvcHVsYXRpbmcgdGhlIFhFVkVfQ0RTQyBzdHJ1Y3R1cmUNCisgKiAxLiBmaXJzdCwgdGhlIGNv cnJlc3BvbmRpbmcgZmllbGRzIG9mIHRoZSBBVkNvZGVjQ29udGV4dCBzdHJ1Y3R1cmUgYXJlIHBy b2Nlc3NlZCwgKGkuZSAtcGl4X2ZtdCB5dXY0MjBwIC1zOnYgMTkyMHgxMDgwIC1yIDMwIC1wcm9m aWxlOnYgMCkNCisgKiAyLiB0aGVuIHhldmUtc3BlY2lmaWMgb3B0aW9ucyBhZGRlZCBhcyBBVk9w dGlvbiB0byB0aGUgeGV2ZSBBVkNvZGVjIGltcGxlbWVudGF0aW9uIChpLmUgLXRocmVhZHNfY250 IDMgLXByZXNldCAwKQ0KKyAqIDMuIGZpbmFsbHksIHRoZSBvcHRpb25zIHNwZWNpZmllZCBhZnRl ciB0aGUgeGV2ZS1wYXJhbXMgb3B0aW9uIGFzIHRoZSBwYXJhbWV0ZXIgbGlzdCBvZiB0eXBlIGtl eSB2YWx1ZSBhcmUgcHJvY2Vzc2VkIChpLmUgLXhldmUtcGFyYW1zICJtPTI6cT0xNyIpDQorICoN CisgKiBUaGVyZSBhcmUgb3B0aW9ucyB0aGF0IGNhbiBiZSBzZXQgaW4gZGlmZmVyZW50IHdheXMu IEluIHRoaXMgY2FzZSwgcGxlYXNlIGZvbGxvdyB0aGUgYWJvdmUtbWVudGlvbmVkIG9yZGVyIG9m IHByb2Nlc3NpbmcuDQorICogVGhlIG1vc3QgcmVjZW50IGFzc2lnbm1lbnRzIG92ZXJ3cml0ZSB0 aGUgcHJldmlvdXMgdmFsdWVzLg0KKyAqDQorICogQHBhcmFtIGN0eCBjb2RlYyBjb250ZXh0DQor ICogQHBhcmFtIGNkc2MgY29udGFpbnMgYWxsIGVuY29kZXIgcGFyYW1ldGVycyB0aGF0IHNob3Vs ZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXRzIHVzZS4NCisgKg0KKyAqIEByZXR1cm4gMCBvbiBz dWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUNCisgKi8NCitzdGF0aWMgaW50 IGdldF9jb25mKGNvbnN0IEFWQ29kZWNDb250ZXh0ICpjdHgsIFhFVkVfQ0RTQyAqY2RzYykNCit7 DQorICAgIFhFVkVfUEFSQU0gKiBwYXJhbSA9IE5VTEw7DQorICAgIFhldmVDb250ZXh0ICp4ZSA9 IE5VTEw7DQorICAgIGludCBjb2xvcl9mb3JtYXQ7DQorICAgIGludCBjcHVfY291bnQgPSBhdl9j cHVfY291bnQoKTsNCisgICAgaW50IHJldDsNCisNCisgICAgeGUgPSBjdHgtPnByaXZfZGF0YTsN CisgICAgcGFyYW0gPSAmY2RzYy0+cGFyYW07DQorDQorICAgIC8qIHNldCBkZWZ1YWx0IHZhbHVl IGluIHByaXZfZGF0YSAqLw0KKyAgICBtZW1zZXQoY2RzYywgMCwgc2l6ZW9mKFhFVkVfQ0RTQykp Ow0KKyAgICB4ZS0+aGFzaCA9IDA7DQorDQorICAgIC8qIHNldCBkZWZhdWx0IHBhcmFtZXRlcnMg Ki8NCisgICAgcmV0ID0geGV2ZV9wYXJhbV9kZWZhdWx0KHBhcmFtKTsNCisgICAgaWYgKFhFVkVf RkFJTEVEKHJldCkpIHsNCisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJjYW5u b3Qgc2V0X2RlZmF1bHQgcGFyYW1ldGVyXG4iKTsNCisgICAgICAgIGdvdG8gRVJSOw0KKyAgICB9 DQorDQorICAgIC8qIHJlYWQgb3B0aW9ucyBmcm9tIEFWQ29kZWNDb250ZXh0ICAqLw0KKyAgICBp ZihjdHgtPndpZHRoID4gMCkgew0KKyAgICAgICAgcGFyYW0tPncgPSBjdHgtPndpZHRoOw0KKyAg ICAgICAgeGUtPndpZHRoX2x1bWEgPSBjdHgtPndpZHRoOw0KKyAgICB9DQorDQorICAgIGlmKGN0 eC0+aGVpZ2h0ID4gMCkgew0KKyAgICAgICAgcGFyYW0tPmggPSBjdHgtPmhlaWdodDsNCisgICAg ICAgIHhlLT5oZWlnaHRfbHVtYSA9IGN0eC0+aGVpZ2h0Ow0KKyAgICB9DQorDQorICAgIGlmKGN0 eC0+ZnJhbWVyYXRlLm51bSA+IDApIHsNCisgICAgICAgIC8qIEB0b2RvOiBmcHMgY2FuIGJlIGZs b2F0IG51bWJlciwgYnV0IHhldmUgQVBJIGRvZXNuJ3Qgc3VwcG9ydCBpdCAqLw0KKyAgICAgICAg cGFyYW0tPmZwcyA9IChpbnQpKCgoZmxvYXQpY3R4LT5mcmFtZXJhdGUubnVtIC8gY3R4LT5mcmFt ZXJhdGUuZGVuKSArIDAuNSk7DQorICAgIH0NCisNCisgICAgaWYoY3R4LT5nb3Bfc2l6ZSA+PSAw KSB7IC8qIGtleS1mcmFtZSBpbnRlcnZhbCAqLw0KKyAgICAgICAgcGFyYW0tPmtleWludCA9IGN0 eC0+Z29wX3NpemU7IC8vIDA6IG9ubHkgb25lIEktZnJhbWUgYXQgdGhlIGZpcnN0IHRpbWU7IDE6 IGV2ZXJ5IGZyYW1lIGlzIGNvZGVkIGluIEktZnJhbWUNCisgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfSU5GTywgIkdPUCBzaXplIChrZXktZnJhbWUgaW50ZXJ2YWwpOiAlZFxuIiwgY3R4LT5n b3Bfc2l6ZSk7DQorICAgIH0NCisgICAgaWYgKGN0eC0+bWF4X2JfZnJhbWVzID09IDAgfHwgY3R4 LT5tYXhfYl9mcmFtZXMgPT0gMSB8fCBjdHgtPm1heF9iX2ZyYW1lcyA9PSAzIHx8DQorICAgICAg ICAgICAgY3R4LT5tYXhfYl9mcmFtZXMgPT0gNyB8fCBjdHgtPm1heF9iX2ZyYW1lcyA9PSAxNSkg eyAvKiBudW1iZXIgb2YgYi1mcmFtZSAqLw0KKyAgICAgICAgcGFyYW0tPmJmcmFtZXMgPSBjdHgt Pm1heF9iX2ZyYW1lczsNCisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIk51bWJl ciBvZiBtYXggYi1mcmFtZXM6ICVkXG4iLCBjdHgtPm1heF9iX2ZyYW1lcyk7DQorICAgIH0gZWxz ZSB7DQorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW5jb3JyZWN0IHZhbHVl IGZvciBtYXhpbXVtIG51bWJlciBvZiBCIGZyYW1lczogKCVkKSBcbiINCisgICAgICAgICAgICAg ICAiQWNjZXB0YWJsZSB2YWx1ZXMgZm9yIGJmIG9wdGlvbiAobWF4aW11bSBudW1iZXIgb2YgQiBm cmFtZXMpIGFyZSAwLDEsMyw3IG9yIDE1XG4iLCBjdHgtPm1heF9iX2ZyYW1lcyk7DQorICAgICAg ICBnb3RvIEVSUjsNCisgICAgfQ0KKw0KKyAgICBpZiAoY3R4LT5sZXZlbCA+PSAwKSB7DQorICAg ICAgICBwYXJhbS0+bGV2ZWxfaWRjID0gY3R4LT5sZXZlbDsNCisgICAgfQ0KKyAgICByZXQgPSBn ZXRfcGl4X2ZtdChjdHgtPnBpeF9mbXQsICZjb2xvcl9mb3JtYXQsICZ4ZS0+aW5wdXRfZGVwdGgp Ow0KKyAgICBpZiAocmV0IT0wKSB7DQorICAgICAgICBhdl9sb2coKEFWQ29kZWNDb250ZXh0Kilj dHgsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC5cbiIpOw0KKyAgICAg ICAgZ290byBFUlI7DQorICAgIH0NCisgICAgcGFyYW0tPmNzID0gWEVWRV9DU19TRVQoY29sb3Jf Zm9ybWF0LCB4ZS0+aW5wdXRfZGVwdGgsIDApOw0KKw0KKyAgICBpZiAoY3R4LT5yY19idWZmZXJf c2l6ZSA+IDApIHsNCisgICAgICAgIHBhcmFtLT52YnZfYnVmc2l6ZSA9IChpbnQpKGN0eC0+cmNf YnVmZmVyX3NpemUvIDEwMDApOw0KKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAi VkJWIGJ1ZiBzaXplOiAlZFxuIiwgY3R4LT5yY19idWZmZXJfc2l6ZSk7DQorICAgIH0NCisgICAg aWYgKGN0eC0+Yml0X3JhdGUgPiAwKSB7DQorICAgICAgICBpZiAoY3R4LT5iaXRfcmF0ZSAvIDEw MDAgPiBJTlRfTUFYIHx8IGN0eC0+cmNfbWF4X3JhdGUgLyAxMDAwID4gSU5UX01BWCkgew0KKyAg ICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJub3Qgc3VwcG9ydGVkIGJpdHJh dGUgYml0X3JhdGUgYW5kIHJjX21heF9yYXRlID4gJWQwMDBcbiIsIElOVF9NQVgpOw0KKyAgICAg ICAgICAgIGdvdG8gRVJSOw0KKyAgICAgICAgfQ0KKyAgICAgICAgcGFyYW0tPmJpdHJhdGUgPSAo aW50KShjdHgtPmJpdF9yYXRlIC8gMTAwMCk7DQorICAgICAgICBwYXJhbS0+cmNfdHlwZSA9IFhF VkVfUkNfQUJSOw0KKyAgICB9DQorICAgIGlmICh4ZS0+b3BfY3JmID49IDApIHsNCisgICAgICAg IHBhcmFtLT5jcmYgPSB4ZS0+b3BfY3JmOw0KKyAgICAgICAgcGFyYW0tPnJjX3R5cGUgPSBYRVZF X1JDX0NSRjsNCisgICAgfQ0KKw0KKyAgICBpZihjdHgtPnRocmVhZF9jb3VudCA8PSAwKSB7DQor ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiY3B1X2NvdW50OiAlZFxuIiwgY3B1 X2NvdW50KTsNCisgICAgICAgIHBhcmFtLT50aHJlYWRzID0gKGNwdV9jb3VudCA8IFhFVkVfTUFY X1RIUkVBRFMpPyBjcHVfY291bnQ6IFhFVkVfTUFYX1RIUkVBRFM7DQorICAgIH0gZWxzZSBpZihj dHgtPnRocmVhZF9jb3VudCA+IFhFVkVfTUFYX1RIUkVBRFMpIHsNCisgICAgICAgIHBhcmFtLT50 aHJlYWRzID0gWEVWRV9NQVhfVEhSRUFEUzsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIHBhcmFt LT50aHJlYWRzID0gY3R4LT50aHJlYWRfY291bnQ7DQorICAgIH0NCisgICAgYXZfbG9nKE5VTEws IEFWX0xPR19JTkZPLCAicGFyYW0tPnRocmVhZHM6ICVkXG4iLCBwYXJhbS0+dGhyZWFkcyk7DQor DQorICAgIGNkc2MtPnBhcmFtLmNzID0gWEVWRV9DU19TRVQoY29sb3JfZm9ybWF0LCBwYXJhbS0+ Y29kZWNfYml0X2RlcHRoLCAwKTsNCisgICAgY2RzYy0+bWF4X2JzX2J1Zl9zaXplID0gTUFYX0JT X0JVRjsNCisNCisgICAgaWYoY3R4LT5wcm9maWxlID09IEZGX1BST0ZJTEVfRVZDX0JBU0VMSU5F KSB7DQorICAgICAgICB4ZS0+cHJvZmlsZV9pZCA9IFhFVkVfUFJPRklMRV9CQVNFTElORTsNCisg ICAgfSBlbHNlIGlmKGN0eC0+cHJvZmlsZSA9PSBGRl9QUk9GSUxFX0VWQ19NQUlOKSB7DQorICAg ICAgICB4ZS0+cHJvZmlsZV9pZCA9IFhFVkVfUFJPRklMRV9NQUlOOw0KKyAgICB9IGVsc2Ugew0K KyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlVua25vd24gZW5jb2RlciBwcm9m aWxlICglZClcbiINCisgICAgICAgICAgICAgICAiQWNjZXB0YWJsZSB2YWx1ZXMgZm9yIHByb2Zp bGUgb3B0aW9uIGFyZSAwIGFuZCAxICgwOiBiYXNlbGluZSBwcm9maWxlOyAxOiBtYWluIHByb2Zp bGUpXG4iLCBjdHgtPnByb2ZpbGUpOw0KKyAgICAgICAgZ290byBFUlI7DQorICAgIH0NCisgICAg aWYgKHhlLT5vcF9wcmVzZXQpIHsNCisgICAgICAgIHhlLT5wcmVzZXRfaWQgPSBnZXRfcHJlc2V0 X2lkKHhlLT5vcF9wcmVzZXQpOw0KKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAi UHJlc2V0ICA6ICVzXG4iLCB4ZS0+b3BfcHJlc2V0KTsNCisgICAgfQ0KKyAgICBpZiAoeGUtPm9w X3R1bmUpIHsNCisgICAgICAgIHhlLT50dW5lX2lkID0gZ2V0X3R1bmVfaWQoeGUtPm9wX3R1bmUp Ow0KKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiVHVuZSAgICA6ICVzXG4iLCB4 ZS0+b3BfdHVuZSk7DQorICAgIH0NCisgICAgDQorICAgIHJldCA9IHhldmVfcGFyYW1fcHB0KHBh cmFtLCB4ZS0+cHJvZmlsZV9pZCwgeGUtPnByZXNldF9pZCwgeGUtPnR1bmVfaWQpOw0KKyAgICBp ZiAoWEVWRV9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJP UiwgImNhbm5vdCBzZXQgcHJvZmlsZSglZCksIHByZXNldCglZCksIHR1bmUoJWQpXG4iLCB4ZS0+ cHJvZmlsZV9pZCwgeGUtPnByZXNldF9pZCwgeGUtPnR1bmVfaWQpOw0KKyAgICAgICAgZ290byBF UlI7DQorICAgIH0NCisNCisgICAgLyogcGFyc2UgOi1zZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFs dWUgcGFyYW1ldGVycyBhbmQgc2V0IHZhbHVlcyBmb3IgY3JlYXRlZCBkZXNjcmlwdG9yIChYRVZF X0NEU0MpICovDQorICAgIHsNCisgICAgICAgIEFWRGljdGlvbmFyeUVudHJ5ICplbiA9IE5VTEw7 DQorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICIjIyMgU3RhcnQgdG8gcGFyc2Ug eGV2ZV9wYXJhbXMgIyMjXG4iKTsNCisgICAgICAgIHdoaWxlICgoZW4gPSBhdl9kaWN0X2dldCh4 ZS0+eGV2ZV9wYXJhbXMsICIiLCBlbiwgQVZfRElDVF9JR05PUkVfU1VGRklYKSkpIHsNCisgICAg ICAgICAgICBpbnQgcGFyc2VfcmV0ID0gcGFyc2VfeGV2ZV9wYXJhbXMoZW4tPmtleSwgZW4tPnZh bHVlLCB4ZSwgcGFyYW0pOw0KKw0KKyAgICAgICAgICAgIHN3aXRjaCAocGFyc2VfcmV0KSB7DQor ICAgICAgICAgICAgY2FzZSBYRVZFX1BBUkFNX0JBRF9OQU1FOg0KKyAgICAgICAgICAgICAgICBh dl9sb2coKEFWQ29kZWNDb250ZXh0KiljdHgsIEFWX0xPR19XQVJOSU5HLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgIlVua25vd24gb3B0aW9uOiAlcy5cbiIsIGVuLT5rZXkpOw0KKyAgICAgICAg ICAgICAgICBicmVhazsNCisgICAgICAgICAgICBjYXNlIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOg0K KyAgICAgICAgICAgICAgICBhdl9sb2coKEFWQ29kZWNDb250ZXh0KiljdHgsIEFWX0xPR19XQVJO SU5HLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcy5c biIsIGVuLT5rZXksIGVuLT52YWx1ZSk7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg ICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIH0N CisgICAgICAgIH0NCisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIiMjIyBFbmQg b2YgcGFyc2luZyB4ZXZlX3BhcmFtcyAjIyNcbiIpOw0KKyAgICB9DQorDQorICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfSU5GTywgIlJhdGUgY29udHJvbCB0eXBlIFsgMChDUVApIC8gMShBQlIpIC8g MihDUkYpIF0gOiAlZFxuIiwgcGFyYW0tPnJjX3R5cGUpOw0KKyAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0lORk8sICJjcmY9JWQsIGJpdHJhdGU9JWQsIHZidl9idWZzaXplPSVkLCBmcHM9JWRcbiIs IHBhcmFtLT5jcmYsIHBhcmFtLT5iaXRyYXRlLCBwYXJhbS0+dmJ2X2J1ZnNpemUsIHBhcmFtLT5m cHMpOw0KKw0KKyAgICByZXR1cm4gMDsNCisNCitFUlI6DQorICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7DQorfQ0KKw0KKy8qKg0KKyAqIENoZWNrIGNvZGVjIGNvbmZpZ3VyYXRpb24NCisgKg0K KyAqIEBwYXJhbSBjdHggY29kZWMgY29udGV4dA0KKyAqIEBwYXJhbSBjZHNjIGNvbnRhaW5zIGFs bCBlbmNvZGVyIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0 cyB1c2UuDQorICoNCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29k ZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGludCBjaGVja19jb25mKEFWQ29kZWNDb250ZXh0 ICpjdHgsICBYRVZFX0NEU0MgKmNkc2MpDQorew0KKyAgICBpbnQgcmV0ID0gMDsNCisgICAgaW50 IG1pbl9ibG9ja19zaXplID0gNDsNCisgICAgaW50IHBpY19tOw0KKw0KKyAgICBpZihjZHNjLT5w YXJhbS5wcm9maWxlID09IFhFVkVfUFJPRklMRV9CQVNFTElORSkgew0KKyAgICAgICAgaWYgKGNk c2MtPnBhcmFtLnRvb2xfYW12ciAgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGN0eCwg QVZfTE9HX0VSUk9SLCAiQU1WUiBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCisg ICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJh bS50b29sX21tdmQgICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgIk1NVkQgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAg ICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9h ZmZpbmUgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJB ZmZpbmUgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0 ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9kbXZyICAg ID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJETVZSIGNh bm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0K KyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRtdnAgICA9PSAxKSB7 DQorICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQURNVlAgY2Fubm90IGJl IG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAg ICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9obXZwICAgID09IDEpIHsNCisgICAg ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJITVZQIGNhbm5vdCBiZSBvbiBpbiBi YXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAg ICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRkYiAgICA9PSAxKSB7DQorICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQUREQiBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9m aWxlXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlm IChjZHNjLT5wYXJhbS50b29sX2FsZiAgICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwgIkFMRiBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsN CisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5w YXJhbS50b29sX2h0ZGYgICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwgIkhUREYgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAg ICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0uYnR0 ICAgICAgICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJCVFQgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0 ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0uc3VjbyAgICAgICAg ID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJTVUNPIGNh bm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0K KyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfZWlwZCAgICA9PSAxKSB7 DQorICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRUlQRCBjYW5ub3QgYmUg b24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAg IH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2lxdCAgICAgPT0gMSkgew0KKyAgICAg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIklRVCBjYW5ub3QgYmUgb24gaW4gYmFz ZSBwcm9maWxlXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAg ICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2NtX2luaXQgPT0gMSkgew0KKyAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkNNX0lOSVQgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJv ZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBp ZiAoY2RzYy0+cGFyYW0udG9vbF9hZGNjICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJBRENDIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIp Ow0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2Mt PnBhcmFtLnRvb2xfYXRzICAgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0VSUk9SLCAiQVRTX0lOVFJBIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0K KyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBh cmFtLmliY19mbGFnICAgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLCAiSUJDIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAg ICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xf cnBsICAgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi UlBMIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9 IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfcG9jcyAgICA9 PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiUE9DUyBjYW5u b3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisg ICAgICAgIH0NCisgICAgfSBlbHNlIHsNCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2Fk bXZwICAgPT0gMCAmJiBjZHNjLT5wYXJhbS50b29sX2FmZmluZSA9PSAxKSB7DQorICAgICAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQUZGSU5FIGNhbm5vdCBiZSBvbiB3aGVuIEFE TVZQIGlzIG9mZlxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAg ICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hZG12cCAgID09IDAgJiYgY2RzYy0+cGFyYW0udG9v bF9hbXZyICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IkFNVlIgY2Fubm90IGJlIG9uIHdoZW4gQURNVlAgaXMgb2ZmXG4iKTsNCisgICAgICAgICAgICBy ZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2FkbXZw ICAgPT0gMCAmJiBjZHNjLT5wYXJhbS50b29sX2RtdnIgICA9PSAxKSB7DQorICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRE1WUiBjYW5ub3QgYmUgb24gd2hlbiBBRE1WUCBp cyBvZmZcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAg aWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRtdnAgICA9PSAwICYmIGNkc2MtPnBhcmFtLnRvb2xfbW12 ZCAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJNTVZE IGNhbm5vdCBiZSBvbiB3aGVuIEFETVZQIGlzIG9mZlxuIik7DQorICAgICAgICAgICAgcmV0ID0g LTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9laXBkICAgID09 IDAgJiYgY2RzYy0+cGFyYW0uaWJjX2ZsYWcgICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIklCQyBjYW5ub3QgYmUgb24gd2hlbiBFSVBEIGlzIG9mZlxu Iik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2Rz Yy0+cGFyYW0udG9vbF9pcXQgICAgID09IDAgJiYgY2RzYy0+cGFyYW0udG9vbF9hdHMgICAgPT0g MSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFUUyBjYW5ub3Qg YmUgb24gd2hlbiBJUVQgaXMgb2ZmXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAg ICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2NtX2luaXQgPT0gMCAmJiBjZHNj LT5wYXJhbS50b29sX2FkY2MgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0VSUk9SLCAiQURDQyBjYW5ub3QgYmUgb24gd2hlbiBDTV9JTklUIGlzIG9mZlxuIik7DQor ICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKGNk c2MtPnBhcmFtLmJ0dCA9PSAxKSB7DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3Jr X2NiX21heCAmJiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4IDwgNSkgew0KKyAgICAgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIENvZGluZyBCbG9jayBzaXpl IGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gNVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQor ICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCA+IDcp IHsNCisgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiTWF4aW11biBDb2Rp bmcgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDdcbiIpOw0KKyAgICAgICAgICAg IHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29y a19jYl9taW4gJiYgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbiA8IDIpIHsNCisgICAgICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiTWluaW11bSBDb2RpbmcgQmxvY2sgc2l6 ZSBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDJcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0K KyAgICAgICAgfQ0KKyAgICAgICAgaWYgKChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4IHx8 IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4pICYmDQorICAgICAgICAgICAgICAgIGNkc2Mt PnBhcmFtLmZyYW1ld29ya19jYl9taW4gPiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4KSB7 DQorICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIk1pbmltdW0gQ29kaW5n IEJsb2NrIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXhpbXVtIGNvZGluZyBCbG9jayBz aXplXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlm IChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY3UxNF9tYXggPiA2KSB7DQorICAgICAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIk1heGltdW4gMTo0IENvZGluZyBCbG9jayBzaXplIGNh bm5vdCBiZSBncmVhdGVyIHRoYW4gNlxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAg ICAgICB9DQorICAgICAgICBpZiAoKGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXggfHwgY2Rz Yy0+cGFyYW0uZnJhbWV3b3JrX2N1MTRfbWF4KSAmJg0KKyAgICAgICAgICAgICAgICBjZHNjLT5w YXJhbS5mcmFtZXdvcmtfY3UxNF9tYXggPiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4KSB7 DQorICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIk1heGltdW4gMTo0IENv ZGluZyBCbG9jayBzaXplIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4aW11bSBjb2RpbmcgQmxv Y2sgc2l6ZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAg ICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3RyaXNfbWF4ID4gNikgew0KKyAgICAgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIFRyaS1zcGxpdCBCbG9jayBzaXpl IGJlIGdyZWF0ZXIgdGhhbiA2XG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAg IH0NCisgICAgICAgIGlmICgoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3RyaXNfbWF4IHx8IGNkc2Mt PnBhcmFtLmZyYW1ld29ya19jYl9tYXgpICYmDQorICAgICAgICAgICAgICAgIGNkc2MtPnBhcmFt LmZyYW1ld29ya190cmlzX21heCA+IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXgpIHsNCisg ICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiTWF4aW11biBUcmktc3BsaXQg QmxvY2sgc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heGltdW0gY29kaW5nIEJsb2NrIHNp emVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYg KChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfdHJpc19taW4gfHwgY2RzYy0+cGFyYW0uZnJhbWV3b3Jr X2NiX21pbikgJiYNCisgICAgICAgICAgICAgICAgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3RyaXNf bWluIDwgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbiArIDIpIHsNCisgICAgICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiTWF4aW11biBUcmktc3BsaXQgQmxvY2sgc2l6ZSBj YW5ub3QgYmUgc21hbGxlciB0aGFuIE1pbmltdW0gQ29kaW5nIEJsb2NrIHNpemUgcGx1cyB0d29c biIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYoY2Rz Yy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbikgbWluX2Jsb2NrX3NpemUgPSAxIDw8IGNkc2MtPnBh cmFtLmZyYW1ld29ya19jYl9taW47DQorICAgICAgICBlbHNlIG1pbl9ibG9ja19zaXplID0gODsN CisgICAgfQ0KKw0KKyAgICBpZiAoY2RzYy0+cGFyYW0uc3VjbyA9PSAxKSB7DQorICAgICAgICBp ZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWF4ID4gNikgew0KKyAgICAgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIFNVQ08gc2l6ZSBjYW5ub3QgYmUgZ3Jl YXRlciB0aGFuIDZcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAg ICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXggJiYgY2RzYy0+cGFyYW0uZnJh bWV3b3JrX3N1Y29fbWF4ID4gY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCkgew0KKyAgICAg ICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsIk1heGltdW4gU1VDTyBzaXplIGNhbm5v dCBiZSBncmVhdGVyIHRoYW4gTWF4aW11bSBjb2RpbmcgQmxvY2sgc2l6ZVxuIik7DQorICAgICAg ICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJh bWV3b3JrX3N1Y29fbWluIDwgNCkgew0KKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df RVJST1IsICJNaW5pbXVuIFNVQ08gc2l6ZSBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDRcbiIpOw0K KyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBh cmFtLmZyYW1ld29ya19jYl9taW4gJiYgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWluIDwg Y2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbikgew0KKyAgICAgICAgICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfRVJST1IsIk1pbmltdW4gU1VDTyBzaXplIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4g TWluaW11bSBjb2RpbmcgQmxvY2sgc2l6ZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQor ICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWluID4g Y2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWF4KSB7DQorICAgICAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19FUlJPUiwgIk1pbmltdW0gU1VDTyBzaXplIGNhbm5vdCBiZSBncmVhdGVyIHRo YW4gTWF4aW11bSBTVUNPIHNpemVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAg ICAgfQ0KKyAgICB9DQorDQorICAgIHBpY19tID0gKDggPiBtaW5fYmxvY2tfc2l6ZSkgPyBtaW5f YmxvY2tfc2l6ZSA6IDg7DQorICAgIGlmICgoY2RzYy0+cGFyYW0udyAmIChwaWNfbSAtIDEpKSAh PSAwKSB7DQorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiQ3VycmVudCBlbmNv ZGVyIGRvZXMgbm90IHN1cHBvcnQgcGljdHVyZSB3aWR0aCwgbm90IG11bHRpcGxlIG9mIG1heCg4 LCBtaW5pbXVtIENVIHNpemUpXG4iKTsNCisgICAgICAgIHJldCA9IC0xOw0KKyAgICB9DQorICAg IGlmICgoY2RzYy0+cGFyYW0uaCAmIChwaWNfbSAtIDEpKSAhPSAwKSB7DQorICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiQ3VycmVudCBlbmNvZGVyIGRvZXMgbm90IHN1cHBvcnQg cGljdHVyZSBoZWlnaHQsIG5vdCBtdWx0aXBsZSBvZiBtYXgoOCwgbWluaW11bSBDVSBzaXplKVxu Iik7DQorICAgICAgICByZXQgPSAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gcmV0Ow0KK30N CisNCisvKioNCisgKiBTZXQgWEVWRV9DRkdfU0VUX1VTRV9QSUNfU0lHTkFUVVJFIGZvciBlbmNv ZGVyDQorICoNCisgKiBAcGFyYW0gaWQgWEVWRSBpbnN0YW5jZSBpZGVudGlmaWVyDQorICogQHBh cmFtIGN0eCB0aGUgc3RydWN0dXJlIHN0b3JlcyBhbGwgdGhlIHN0YXRlIGFzc29jaWF0ZWQgd2l0 aCB0aGUgaW5zdGFuY2Ugb2YgWGV2ZSBNUEVHLTUgRVZDIGVuY29kZXINCisgKiBAcmV0dXJuIFhF VkUgcHJlLWRlZmluZWQgY29sb3Igc3BhY2UgKEBzZWUgeGV2ZS5oKSBvbiBzdWNjZXNzLCBYRVZF X0NGX1VOS05PV04gb24gZmFpbHVyZQ0KKyAqDQorICogQHRvZG8gY29uc2lkZXIgcmVtb3Zpbmcg dGhlIGZ1bmN0aW9uDQorICovDQorc3RhdGljIGludCBzZXRfZXh0cmFfY29uZmlnKFhFVkUgaWQs IFhldmVDb250ZXh0ICpjdHgpDQorew0KKyAgICBpbnQgcmV0LCBzaXplLCB2YWx1ZTsNCisNCisg ICAgaWYoY3R4LT5oYXNoKSB7DQorICAgICAgICB2YWx1ZSA9IDE7DQorICAgICAgICBzaXplID0g NDsNCisgICAgICAgIHJldCA9IHhldmVfY29uZmlnKGlkLCBYRVZFX0NGR19TRVRfVVNFX1BJQ19T SUdOQVRVUkUsICZ2YWx1ZSwgJnNpemUpOw0KKyAgICAgICAgaWYoWEVWRV9GQUlMRUQocmV0KSkg ew0KKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJmYWlsZWQgdG8gc2V0 IGNvbmZpZyBmb3IgcGljdHVyZSBzaWduYXR1cmVcbiIpOw0KKyAgICAgICAgICAgIHJldHVybiAt MTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQor ICogQ29udmVydCBmZm1wZWcgcGl4ZWwgZm9ybWF0IChBVlBpeGVsRm9ybWF0KSBpbnRvIFhFVkUg cHJlLWRlZmluZWQgY29sb3Igc3BhY2UNCisgKg0KKyAqIEBwYXJhbSBweF9mbXQgcGl4ZWwgZm9y bWF0IChAc2VlIGh0dHBzOi8vZmZtcGVnLm9yZy9kb3h5Z2VuL3RydW5rL3BpeGZtdF84aC5odG1s I2E5YThlMzM1Y2YzYmU0NzIwNDJiYzlmMGNmODBjZDRjNSkNCisgKiBAcmV0dXJuIFhFVkUgcHJl LWRlZmluZWQgY29sb3Igc3BhY2UgKEBzZWUgeGV2ZS5oKSBvbiBzdWNjZXNzLCBYRVZFX0NGX1VO S05PV04gb24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgeGV2ZV9jb2xvcl9zcGFjZShlbnVt IEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCkNCit7DQorICAgIC8qIGNvbG9yIHNwYWNlIG9mIGlucHV0 IGltYWdlICovDQorICAgIGludCBjcyA9IFhFVkVfQ0ZfVU5LTk9XTjsNCisNCisgICAgc3dpdGNo IChwaXhfZm10KSB7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQOg0KKyAgICAgICAgY3Mg PSBYRVZFX0NTX1lDQkNSNDIwOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZN VF9ZVVY0MjBQMTA6DQorI2lmIEFWX0hBVkVfQklHRU5ESUFODQorICAgICAgICBjcyA9IFhFVkVf Q1NfU0VUKFhFVkVfQ0ZfWUNCQ1I0MjAsIDEwLCAxKTsNCisjZWxzZQ0KKyAgICAgICAgY3MgPSBY RVZFX0NTX1lDQkNSNDIwXzEwTEU7DQorI2VuZGlmDQorDQorICAgICAgICBicmVhazsNCisgICAg Y2FzZSBBVl9QSVhfRk1UX1lVVjQyMFAxMjoNCisjaWYgQVZfSEFWRV9CSUdFTkRJQU4NCisgICAg ICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQyMCwgMTIsIDEpOw0KKyNlbHNlDQor ICAgICAgICBjcyA9IFhFVkVfQ1NfWUNCQ1I0MjBfMTJMRTsNCisjZW5kaWYNCisNCisgICAgICAg IGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDoNCisgICAgICAgIGNzID0gWEVW RV9DU19ZQ0JDUjQyMjsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVW NDIyUDEwOg0KKyNpZiBBVl9IQVZFX0JJR0VORElBTg0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1NF VChYRVZFX0NGX1lDQkNSNDIyLCAxMCwgMSk7DQorI2Vsc2UNCisgICAgICAgIGNzID0gWEVWRV9D U19ZQ0JDUjQyMl8xMExFOw0KKyNlbmRpZg0KKw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2Ug QVZfUElYX0ZNVF9ZVVY0MjJQMTI6DQorI2lmIEFWX0hBVkVfQklHRU5ESUFODQorICAgICAgICBj cyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNCQ1I0MjIsIDEyLCAxKTsNCisjZWxzZQ0KKyAgICAg ICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDIyLCAxMiwgMCk7DQorI2VuZGlmDQor DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX0dCUlA6DQorICAgIGNhc2Ug QVZfUElYX0ZNVF9HQlJQMTA6DQorICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJQMTI6DQorICAgICAg ICBjcyA9IFhFVkVfQ0ZfVU5LTk9XTjsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJ WF9GTVRfWVVWNDQ0UDoNCisgICAgICAgIGNzID0gWEVWRV9DRl9ZQ0JDUjQ0NDsNCisgICAgICAg IGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDEwOg0KKyNpZiBBVl9IQVZFX0JJ R0VORElBTg0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDQ0LCAxMCwg MSk7DQorI2Vsc2UNCisgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQ0NF8xMExFOw0KKyNlbmRp Zg0KKw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQMTI6DQor I2lmIEFWX0hBVkVfQklHRU5ESUFODQorICAgICAgICBjcyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0Zf WUNCQ1I0NDQsIDEyLCAxKTsNCisjZWxzZQ0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZF X0NGX1lDQkNSNDQ0LCAxMiwgMCk7DQorI2VuZGlmDQorDQorICAgICAgICBicmVhazsNCisgICAg Y2FzZSBBVl9QSVhfRk1UX0dSQVk4Og0KKyAgICAgICAgY3MgPSBYRVZFX0NGX1lDQkNSNDAwOw0K KyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9HUkFZMTA6DQorI2lmIEFWX0hB VkVfQklHRU5ESUFODQorICAgICAgICBjcyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNCQ1I0MDAs IDEwLCAxKTsNCisjZWxzZQ0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1lDQkNSNDAwXzEwTEU7DQor I2VuZGlmDQorDQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX0dSQVkxMjoN CisjaWYgQVZfSEFWRV9CSUdFTkRJQU4NCisgICAgICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9D Rl9ZQ0JDUjQwMCwgMTIsIDEpOw0KKyNlbHNlDQorICAgICAgICBjcyA9IFhFVkVfQ1NfWUNCQ1I0 MDBfMTJMRTsNCisjZW5kaWYNCisNCisgICAgICAgIGJyZWFrOw0KKyAgICBkZWZhdWx0Og0KKyAg ICAgICAgY3MgPSBYRVZFX0NGX1VOS05PV047DQorICAgICAgICBicmVhazsNCisgICAgfQ0KKyAg ICByZXR1cm4gY3M7DQorfQ0KKw0KK3N0YXRpYyBpbnQgc2V0dXBfYnVtcGluZyhYRVZFIGlkKQ0K K3sNCisgICAgaW50IHZhbCwgc2l6ZTsNCisgICAgdmFsICA9IDE7DQorICAgIHNpemUgPSBzaXpl b2YoaW50KTsNCisgICAgaWYoWEVWRV9GQUlMRUQoeGV2ZV9jb25maWcoaWQsIFhFVkVfQ0ZHX1NF VF9GT1JDRV9PVVQsICh2b2lkICopKCZ2YWwpLCAmc2l6ZSkpKSB7DQorICAgICAgICByZXR1cm4g LTE7DQorICAgIH0NCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBjaGFyKiBz bGljZV90eXBlKGVudW0gQVZQaWN0dXJlVHlwZSBhdl9waWNfdHlwZSkNCit7DQorICAgIGlmKGF2 X3BpY190eXBlID09IEFWX1BJQ1RVUkVfVFlQRV9JKSB7DQorICAgICAgICByZXR1cm4gIlNsaWNl IFR5cGUgSSI7DQorICAgIH0gZWxzZSBpZihhdl9waWNfdHlwZSA9PSBBVl9QSUNUVVJFX1RZUEVf UCkgew0KKyAgICAgICAgcmV0dXJuICJTbGljZSBUeXBlIFAiOw0KKyAgICB9IGVsc2UgaWYoYXZf cGljX3R5cGUgPT0gQVZfUElDVFVSRV9UWVBFX0IpIHsNCisgICAgICAgIHJldHVybiAiU2xpY2Ug VHlwZSBCIjsNCisgICAgfSANCisgICAgcmV0dXJuICJTbGljZSBUeXBlIFVOREVGSU5FRCI7DQor fQ0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemUgY29kZWMgc3RhdGljIGRhdGENCisgKg0KKyAqIEB0 b2RvIGNvbnNpZGVyIHJlbW92aW5nIHVudXNlZCBmdW5jdGlvbg0KKyAqLw0KK3N0YXRpYyBhdl9j b2xkIHZvaWQgbGlieGV2ZV9pbml0X3N0YXRpY19kYXRhKEFWQ29kZWMgKmNvZGVjKQ0KK3sNCisg ICAgVU5VU0VEKGNvZGVjKTsNCit9DQorDQorLyoqDQorICogSW5pdGlhbGl6ZSBjb2RlYw0KKyAq IENyZWF0ZSBlbmNvZGVyIGluc3RhbmNlIGFuZCBhbGxvY2F0ZSBhbGwgdGhlIG5lZWRlZCByZXNv dXJjZXMNCisgKg0KKyAqIEBwYXJhbSBjdHggY29kZWMgY29udGV4dA0KKyAqIEByZXR1cm4gMCBv biBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUNCisgKi8NCitzdGF0aWMg YXZfY29sZCBpbnQgbGlieGV2ZV9pbml0KEFWQ29kZWNDb250ZXh0ICpjdHgpDQorew0KKyAgICBY ZXZlQ29udGV4dCAqeGUgPSBjdHgtPnByaXZfZGF0YTsNCisgICAgdW5zaWduZWQgY2hhciAqYnNf YnVmID0gTlVMTDsNCisgICAgaW50IGksIHZhbCA9IDA7DQorICAgIGludCBzaGlmdF9oID0gMDsN CisgICAgaW50IHNoaWZ0X3YgPSAwOw0KKyAgICBYRVZFX0lNR0IgKiBpbWdiID0gTlVMTDsNCisN CisgICAgWEVWRV9DRFNDICpjZHNjID0gJih4ZS0+Y2RzYyk7DQorICAgIA0KKyAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0RFQlVHLCAiZVh0cmEtZmFzdCBFc3NlbnRpYWwgVmlkZW8gRW5jb2Rlclxu Iik7DQorDQorICAgIGlmKGN0eC0+cGl4X2ZtdCAhPSBBVl9QSVhfRk1UX1lVVjQyMFAgJiYgY3R4 LT5waXhfZm10ICE9IEFWX1BJWF9GTVRfWVVWNDIwUDEwKSB7DQorICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHBpeGVsIGZvcm1hdDogJXNcbiIsIGF2X2dldF9waXhf Zm10X25hbWUoY3R4LT5waXhfZm10KSk7DQorICAgICAgICBnb3RvIEVSUjsNCisgICAgfQ0KKw0K KyAgICAvKiBhbGxvY2F0ZSBiaXRzdHJlYW0gYnVmZmVyICovDQorICAgIGJzX2J1ZiA9ICh1bnNp Z25lZCBjaGFyKiltYWxsb2MoTUFYX0JTX0JVRik7DQorICAgIGlmKGJzX2J1ZiA9PSBOVUxMKSB7 DQorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IGFsbG9jYXRlIGJp dHN0cmVhbSBidWZmZXIsIHNpemU9JWQiLCBNQVhfQlNfQlVGKTsNCisgICAgICAgIGdvdG8gRVJS Ow0KKyAgICB9DQorDQorICAgIC8qIHJlYWQgY29uZmlndXJhdGlvbnMgYW5kIHNldCB2YWx1ZXMg Zm9yIGNyZWF0ZWQgZGVzY3JpcHRvciAoWEVWRV9DRFNDKSAqLw0KKyAgICB2YWwgPSBnZXRfY29u ZihjdHgsIGNkc2MpOw0KKyAgICBpZiAodmFsICE9IFhFVkVfT0spIHsNCisgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsImNhbm5vdCBnZXQgY29uZmlndXJhdGlvblxuIik7DQorICAg ICAgICBnb3RvIEVSUjsNCisgICAgfQ0KKw0KKyAgICBpZiAoY2hlY2tfY29uZihjdHgsIGNkc2Mp ICE9IDApIHsNCisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsImludmFsaWQgY29u ZmlndXJhdGlvblxuIik7DQorICAgICAgICBnb3RvIEVSUjsNCisgICAgfQ0KKw0KKyAgICAvKiBj cmVhdGUgZW5jb2RlciAqLw0KKyAgICB4ZS0+aWQgPSB4ZXZlX2NyZWF0ZShjZHNjLCBOVUxMKTsN CisgICAgaWYoeGUtPmlkID09IE5VTEwpIHsNCisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df RVJST1IsICJjYW5ub3QgY3JlYXRlIFhFVkUgZW5jb2RlclxuIik7DQorICAgICAgICBnb3RvIEVS UjsNCisgICAgfQ0KKw0KKyAgICBpZihzZXRfZXh0cmFfY29uZmlnKHhlLT5pZCwgeGUpKSB7DQor ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IHNldCBleHRyYSBjb25m aWd1cmF0aW9uc1xuIik7DQorICAgICAgICBnb3RvIEVSUjsNCisgICAgfQ0KKw0KKyAgICB4ZS0+ Yml0Yi5hZGRyID0gYnNfYnVmOw0KKyAgICB4ZS0+Yml0Yi5ic2l6ZSA9IE1BWF9CU19CVUY7DQor DQorICAgIGlmKGF2X3BpeF9mbXRfZ2V0X2Nocm9tYV9zdWJfc2FtcGxlKGN0eC0+cGl4X2ZtdCwg JnNoaWZ0X2gsICZzaGlmdF92KSkgew0KKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiZmFpbGVkIHRvIGdldCAgY2hyb21hIHNoaWZ0XG4iKTsNCisgICAgICAgIGdvdG8gRVJSOw0K KyAgICB9DQorICAgIC8vIFlVViBmb3JtYXQgZXhwbGFuYXRpb24NCisgICAgLy8gc2hpZnRfaCA9 PSAxICYmIHNoaWZ0X3YgPT0gMSA6IFlVVjQyMA0KKyAgICAvLyBzaGlmdF9oID09IDEgJiYgc2hp ZnRfdiA9PSAwIDogWVVWNDIyDQorICAgIC8vIHNoaWZ0X2ggPT0gMCAmJiBzaGlmdF92ID09IDAg OiBZVVY0NDQNCisgICAgLy8NCisgICAgeGUtPndpZHRoX2Nocm9tYSA9IEFWX0NFSUxfUlNISUZU KGN0eC0+d2lkdGgsIHNoaWZ0X2gpOw0KKyAgICB4ZS0+aGVpZ2h0X2Nocm9tYSA9IEFWX0NFSUxf UlNISUZUKGN0eC0+aGVpZ2h0LCBzaGlmdF92KTsNCisNCisgICAgLyogc2V0IGRlZmF1bHQgdmFs dWVzIGZvciBpbnB1dCBpbWFnZSBidWZmZXIgKi8NCisgICAgaW1nYiA9ICZ4ZS0+aW1nYjsNCisg ICAgaW1nYi0+Y3MgPSB4ZXZlX2NvbG9yX3NwYWNlKGN0eC0+cGl4X2ZtdCk7DQorICAgIGltZ2It Pm5wID0gMzsgLyogb25seSBmb3IgeXV2NDIwcCwgeXV2NDIwcGxlICovDQorICAgIGZvciAoaT0w OyBpPGltZ2ItPm5wOyBpKyspIHsNCisgICAgICAgIGltZ2ItPnhbaV0gPSBpbWdiLT55W2ldID0g MDsNCisgICAgfQ0KKyAgICBpbWdiLT53WzBdID0gaW1nYi0+YXdbMF0gPSB4ZS0+d2lkdGhfbHVt YTsNCisgICAgaW1nYi0+d1sxXSA9IGltZ2ItPndbMl0gPSBpbWdiLT5hd1sxXT0gaW1nYi0+YXdb Ml0gPSB4ZS0+d2lkdGhfY2hyb21hOw0KKyAgICBpbWdiLT5oWzBdID0gaW1nYi0+YWhbMF0gPSB4 ZS0+aGVpZ2h0X2x1bWE7DQorICAgIGltZ2ItPmhbMV0gPSBpbWdiLT5oWzJdID0gaW1nYi0+YWhb MV0gPSBpbWdiLT5haFsyXSA9IHhlLT5oZWlnaHRfY2hyb21hOw0KKw0KKyAgICB4ZS0+ZW5jb2Rf ZnJhbWVzID0gMDsNCisgICAgeGUtPmJ5dGVzX3RvdGFsID0gMDsNCisgICAgeGUtPnN0YXRlID0g U1RBVEVfRU5DT0RJTkc7DQorICAgIHhlLT5wYWNrZXRfY291bnQgPSAwOw0KKyAgICB4ZS0+Yml0 cmF0ZSA9IDA7DQorICAgIHJldHVybiAwOw0KKw0KK0VSUjoNCisgICAgaWYoYnNfYnVmKSBmcmVl KGJzX2J1Zik7DQorICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqDQorICAqIEVuY29kZSBkYXRh IHRvIGFuIEFWUGFja2V0Lg0KKyAgKg0KKyAgKiBAcGFyYW0gICAgICBjdHggICAgICAgICAgICBj b2RlYyBjb250ZXh0DQorICAqIEBwYXJhbSAgICAgIHBrdCAgICAgICAgICAgIG91dHB1dCBBVlBh Y2tldA0KKyAgKiBAcGFyYW1baW5dICBmcmFtZSAgICAgICAgICBBVkZyYW1lIGNvbnRhaW5pbmcg dGhlIHJhdyBkYXRhIHRvIGJlIGVuY29kZWQNCisgICogQHBhcmFtW291dF0gZ290X3BhY2tldCAg ICAgZW5jb2RlciBzZXRzIHRvIDAgb3IgMSB0byBpbmRpY2F0ZSB0aGF0IGENCisgICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgbm9uLWVtcHR5IHBhY2tldCB3YXMgcmV0dXJuZWQgaW4gYXZw a3QuDQorICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZh aWx1cmUNCisgICovDQorc3RhdGljIGludCBsaWJ4ZXZlX2VuY29kZShBVkNvZGVjQ29udGV4dCAq Y3R4LCBBVlBhY2tldCAqcGt0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZG cmFtZSAqZnJhbWUsIGludCAqZ290X3BhY2tldCkNCit7DQorICAgIFhldmVDb250ZXh0ICp4ZSA9 IE5VTEw7DQorICAgIGludCAgcmV0ID0gLTE7DQorICAgIGludCB4ZXZlX2NzOw0KKyAgICBpZihj dHggPT0gTlVMTCB8fCBwa3QgPT0gTlVMTCB8fCBnb3RfcGFja2V0PT1OVUxMKSB7DQorICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGFyZ3VtZW50c1xuIik7DQorICAg ICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgeGUgPSBjdHgtPnByaXZfZGF0YTsNCisgICAg aWYoeGUgPT0gTlVMTCkgew0KKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52 YWxpZCBYRVZFIGNvbnRleHRcbiIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAg IGlmKHhlLT5zdGF0ZSA9PSBTVEFURV9TS0lQUElORyAmJiBmcmFtZSApIHsNCisgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIkVtcHR5IGZyYW1lIC0+IEVudGVyaW5nIGVuY29kaW5n IHByb2Nlc3MuLi5cbiIpOw0KKyAgICAgICAgeGUtPnN0YXRlID0gU1RBVEVfRU5DT0RJTkc7DQor ICAgIH0gZWxzZSBpZih4ZS0+c3RhdGUgPT0gU1RBVEVfRU5DT0RJTkcgJiYgZnJhbWUgPT0gTlVM TCkgew0KKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiRW1wdHkgZnJhbWUgLT4g RW50ZXJpbmcgYnVtcGluZyBwcm9jZXNzLi4uXG4iKTsNCisgICAgICAgIGlmIChzZXR1cF9idW1w aW5nKHhlLT5pZCkgPT0gMCkgew0KKyAgICAgICAgICAgIHhlLT5zdGF0ZSA9IFNUQVRFX0JVTVBJ Tkc7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwiRmFpbGVkIHRvIHNldHVwIGJ1bXBpbmdcbiIpOw0KKyAgICAgICAgICAgIHhlLT5zdGF0 ZSA9IFNUQVRFX1NLSVBQSU5HOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmKHhlLT5z dGF0ZSA9PSBTVEFURV9FTkNPRElORykgew0KKyAgICAgICAgY29uc3QgQVZQaXhGbXREZXNjcmlw dG9yICpwaXhlbF9mbXRfZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQgKGZyYW1lLT5mb3JtYXQp Ow0KKyAgICAgICAgaWYoIXBpeGVsX2ZtdF9kZXNjKSB7DQorICAgICAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgcGl4ZWwgZm9ybWF0IGRlc2NyaXB0b3IgZm9yIHBp eGVsIGZvcm1hdDogJXNcbiIsIGF2X2dldF9waXhfZm10X25hbWUoY3R4LT5waXhfZm10KSk7DQor ICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgeGV2ZV9jcyA9 IHhldmVfY29sb3Jfc3BhY2UoY3R4LT5waXhfZm10KTsNCisgICAgICAgIGlmKHhldmVfY3MgIT0g WEVWRV9DU19ZQ0JDUjQyMCAmJiB4ZXZlX2NzICE9IFhFVkVfQ1NfWUNCQ1I0MjBfMTBMRSkgew0K KyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgcGl4ZWwgZm9y bWF0OiAlc1xuIiwgYXZfZ2V0X3BpeF9mbXRfbmFtZShjdHgtPnBpeF9mbXQpKTsNCisgICAgICAg ICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQorDQorICAgICAgICB7DQorICAgICAgICAgICAg aW50IGk7DQorICAgICAgICAgICAgWEVWRV9JTUdCICogaW1nYiA9IE5VTEw7DQorICAgICAgICAg ICAgaW50IHhldmVfYnl0ZV9kZXB0aCA9IDA7DQorDQorICAgICAgICAgICAgaW1nYiA9ICZ4ZS0+ aW1nYjsNCisNCisgICAgICAgICAgICB4ZXZlX2J5dGVfZGVwdGggPSBYRVZFX0NTX0dFVF9CWVRF X0RFUFRIKHhldmVfY3MpOw0KKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywg ImJ5dGUgZGVwdGg6ICVkXG4iLHhldmVfYnl0ZV9kZXB0aCk7DQorDQorICAgICAgICAgICAgZm9y IChpPTA7IGk8aW1nYi0+bnA7IGkrKykgew0KKyAgICAgICAgICAgICAgICBpbWdiLT5hW2ldID0g ZnJhbWUtPmRhdGFbaV07DQorICAgICAgICAgICAgICAgIGltZ2ItPnNbaV0gPSBmcmFtZS0+bGlu ZXNpemVbaV07DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmKHhlLT5pZCA9PSBO VUxMKSB7DQorICAgICAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkludmFs aWQgWEVWRSBlbmNvZGVyXG4iKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAg ICAgICAgIH0NCisNCisgICAgICAgICAgICBpbWdiLT50c1swXSA9IGZyYW1lLT5wdHM7DQorICAg ICAgICAgICAgaW1nYi0+dHNbMV0gPSAwOw0KKyAgICAgICAgICAgIGltZ2ItPnRzWzJdID0gMDsN CisgICAgICAgICAgICBpbWdiLT50c1szXSA9IDA7DQorDQorICAgICAgICAgICAgLyogcHVzaCBp bWFnZSB0byBlbmNvZGVyICovDQorICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVH LCAiSU5QVVQgfCBSQVcgZnJhbWUgfCB0aW1lc3RhbXBzIHwgJWxsZCB8ICVsbGQgfCAlbGxkIHwg JWxsZCB8XG4iLCBpbWdiLT50c1swXSwgaW1nYi0+dHNbMV0sIGltZ2ItPnRzWzJdLCBpbWdiLT50 c1szXSk7DQorDQorICAgICAgICAgICAgcmV0ID0geGV2ZV9wdXNoKHhlLT5pZCwgaW1nYik7DQor ICAgICAgICAgICAgaWYoWEVWRV9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJ4ZXZlX3B1c2goKSBmYWlsZWRcbiIpOw0KKyAgICAgICAg ICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9IA0K KyAgICBpZih4ZS0+c3RhdGUgPT0gU1RBVEVfRU5DT0RJTkcgfHwgeGUtPnN0YXRlID09IFNUQVRF X0JVTVBJTkcpIHsNCisgICAgICAgIA0KKyAgICAgICAgLyogZW5jb2RpbmcgKi8NCisgICAgICAg IHJldCA9IHhldmVfZW5jb2RlKHhlLT5pZCwgJih4ZS0+Yml0YiksICYoeGUtPnN0YXQpKTsNCisg ICAgICAgIGlmKFhFVkVfRkFJTEVEKHJldCkpIHsNCisgICAgICAgICAgICBhdl9sb2coY3R4LCBB Vl9MT0dfRVJST1IsICJ4ZXZlX2VuY29kZSgpIGZhaWxlZFxuIik7DQorICAgICAgICAgICAgcmV0 dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgeGUtPmVuY29kX2ZyYW1lcysrOw0KKw0K KyAgICAgICAgLyogc3RvcmUgYml0c3RyZWFtICovDQorICAgICAgICBpZiAocmV0ID09IFhFVkVf T0tfT1VUX05PVF9BVkFJTEFCTEUpIHsNCisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df REVCVUcsICJSRVRVUk4gT0sgQlVUIFBJQ1RVUkUgSVMgTk9UIEFWQUlMQUJMRSBZRVQgKCVkKSBm cmFtZTogJWRcbiIsIHJldCwgeGUtPmVuY29kX2ZyYW1lcyk7DQorICAgICAgICAgICAgKmdvdF9w YWNrZXQgPSAwOw0KKyAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgfSBlbHNlIGlmKHJl dCA9PSBYRVZFX09LKSB7DQorICAgICAgICAgICAgaW50IGF2X3BpY190eXBlOw0KKw0KKyAgICAg ICAgICAgIGlmKHhlLT5zdGF0LndyaXRlID4gMCkgew0KKyAgICAgICAgICAgICAgICB4ZS0+Ynl0 ZXNfdG90YWwrPXhlLT5zdGF0LndyaXRlOw0KKyAgICAgICAgICAgICAgICAvLyBhdl9sb2coY3R4 LCBBVl9MT0dfREVCVUcsICJmcmFtZTogJWQgfCBCeXRlcyB3cml0dGVuOiAgJWQgfCBieXRlcyB0 b3RhbDogJWYgfCBmbnVtICVkIHwgJWxsZCB8ICVsbGQgfCAlbGxkIHwgJWxsZCB8XG4iLCB4ZS0+ ZW5jb2RfZnJhbWVzLCB4ZS0+c3RhdC53cml0ZSwgeGUtPmJ5dGVzX3RvdGFsLCB4ZS0+c3RhdC5m bnVtLCB4ZS0+Yml0Yi50c1swXSx4ZS0+Yml0Yi50c1sxXSx4ZS0+Yml0Yi50c1syXSx4ZS0+Yml0 Yi50c1szXSk7DQorDQorICAgICAgICAgICAgICAgIHJldCA9IGF2X2dyb3dfcGFja2V0KHBrdCwg eGUtPnN0YXQud3JpdGUpOw0KKyAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgew0KKyAgICAg ICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQ2FuJ3QgYWxsb2NhdGUg bWVtb3J5IGZvciBBVlBhY2tldCBkYXRhXG4iKTsNCisgICAgICAgICAgICAgICAgICAgIHJldHVy biByZXQ7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbWVtY3B5KHBr dC0+ZGF0YSwgeGUtPmJpdGIuYWRkciwgeGUtPnN0YXQud3JpdGUpOw0KKw0KKyAgICAgICAgICAg ICAgICBwa3QtPnB0cyA9IHhlLT5iaXRiLnRzWzBdOw0KKyAgICAgICAgICAgICAgICBwa3QtPmR0 cyA9IHhlLT5iaXRiLnRzWzFdOw0KKyAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlBUUzogJWxkIHwgRFRTOiAlbGRcbiIsIHBrdC0+ cHRzLCBwa3QtPmR0cyk7DQorDQorICAgICAgICAgICAgICAgIHhlLT5iaXRyYXRlICs9ICh4ZS0+ c3RhdC53cml0ZSAtIHhlLT5zdGF0LnNlaV9zaXplKTsNCisNCisgICAgICAgICAgICAgICAgc3dp dGNoKHhlLT5zdGF0LnN0eXBlKSB7DQorICAgICAgICAgICAgICAgIGNhc2UgWEVWRV9TVF9JOg0K KyAgICAgICAgICAgICAgICAgICAgYXZfcGljX3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfSTsNCisg ICAgICAgICAgICAgICAgICAgIHBrdC0+ZmxhZ3MgfD0gQVZfUEtUX0ZMQUdfS0VZOw0KKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIGNhc2UgWEVWRV9TVF9QOg0K KyAgICAgICAgICAgICAgICAgICAgYXZfcGljX3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfUDsNCisg ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICBjYXNlIFhFVkVfU1Rf QjoNCisgICAgICAgICAgICAgICAgICAgIGF2X3BpY190eXBlID0gQVZfUElDVFVSRV9UWVBFX0I7 DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSBYRVZF X1NUX1VOS05PV046DQorICAgICAgICAgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VS Uk9SLCAidW5rbm93biBzbGljZSB0eXBlXG4iKTsNCisgICAgICAgICAgICAgICAgICAgIHJldHVy biAtMTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfREVCVUcsICJPVVRQVVQgfCBFbmNvZGVkIHwgc2xpY2UgdHlwZTogJXMgfCBmbnVt OiAlbGQgfCBwb2M6ICVkIHwgQnl0ZXMgd3JpdHRlbjogICVkIHwgYnl0ZXMgdG90YWw6ICVmIHwg dGltZXN0YW1wcyB8ICVsbGQgfCAlbGxkIHwgJWxsZCB8ICVsbGQgfFxuIiwgDQorICAgICAgICAg ICAgICAgICAgICBzbGljZV90eXBlKGF2X3BpY190eXBlKSwNCisgICAgICAgICAgICAgICAgICAg IHhlLT5zdGF0LmZudW0sDQorICAgICAgICAgICAgICAgICAgICB4ZS0+c3RhdC5wb2MsDQorICAg ICAgICAgICAgICAgICAgICB4ZS0+c3RhdC53cml0ZSwNCisgICAgICAgICAgICAgICAgICAgIHhl LT5ieXRlc190b3RhbCwNCisgICAgICAgICAgICAgICAgICAgIHhlLT5iaXRiLnRzWzBdLA0KKyAg ICAgICAgICAgICAgICAgICAgeGUtPmJpdGIudHNbMV0sDQorICAgICAgICAgICAgICAgICAgICB4 ZS0+Yml0Yi50c1syXSwNCisgICAgICAgICAgICAgICAgICAgIHhlLT5iaXRiLnRzWzNdKTsNCisg ICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICBmZl9zaWRlX2RhdGFfc2V0X2Vu Y29kZXJfc3RhdHMocGt0LCB4ZS0+c3RhdC5xcCpGRl9RUDJMQU1CREEsIE5VTEwsIDAsIGF2X3Bp Y190eXBlKTsNCisgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgIHhlLT5iaXRyYXRl ICs9ICh4ZS0+c3RhdC53cml0ZSAtIHhlLT5zdGF0LnNlaV9zaXplKTsNCisNCisgICAgICAgICAg ICAgICAgKmdvdF9wYWNrZXQgPSAxOw0KKyAgICAgICAgICAgICAgICB4ZS0+cGFja2V0X2NvdW50 Kys7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfSBlbHNlIGlmIChyZXQgPT0gWEVWRV9PS19O T19NT1JFX0ZSTSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiUmV0 dXJuIE9LIGJ1dCBubyBtb3JlIGZyYW1lcyAoJWQpXG4iLCByZXQpOw0KKyAgICAgICAgICAgIHJl dHVybiAwOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfREVCVUcsICJJbnZhbGlkIHJldHVybiB2YWx1ZSAoJWQpXG4iLCByZXQpOw0KKyAgICAgICAg ICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisgICAgfSBlbHNlIHsNCisgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJVZGVmaW5lZCBzdGF0ZTogJWRcbiIsIHhlLT5zdGF0ZSk7 DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8q Kg0KKyAqIERlc3Ryb3kgZW5jb2RlciBhbmQgcmVsZWFzZSBhbGwgdGhlIGFsbG9jYXRlZCByZXNv dXJjZXMNCisgKg0KKyAqIEBwYXJhbSBjdHggY29kZWMgY29udGV4dA0KKyAqIEByZXR1cm4gMCBv biBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUNCisgKi8NCitzdGF0aWMg YXZfY29sZCBpbnQgbGlieGV2ZV9jbG9zZShBVkNvZGVjQ29udGV4dCAqY3R4KQ0KK3sNCisgICAg WGV2ZUNvbnRleHQgKnhlID0gY3R4LT5wcml2X2RhdGE7DQorDQorICAgIHhldmVfZGVsZXRlKHhl LT5pZCk7DQorDQorICAgIGlmKHhlLT5iaXRiLmFkZHIpIGZyZWUoeGUtPmJpdGIuYWRkcik7IC8q IHJlbGVhc2UgYml0c3RyZWFtIGJ1ZmZlciAqLw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQor I2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoWGV2ZUNvbnRleHQsIHgpDQorI2RlZmluZSBWRSBB Vl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNDQorDQor Ly8gRXhhbXBsZSBvZiB1c2luZzogLi9mZm1wZWcgLXhldmUtcGFyYW1zICJtPTI6cT0xNyINCisv LyBDb25zaWRlciB1c2luZyBmb2xsb3dpbmcgb3B0aW9ucyAoLi9mZm1wZWcgLS1oZWxwIGVuY29k ZXI9bGlieGV2ZSkNCisvLw0KK3N0YXRpYyBjb25zdCBBVk9wdGlvbiB4ZXZlX29wdGlvbnNbXSA9 IHsNCisgICAgeyAicHJlc2V0IiwgIkVuY29kaW5nIHByZXNldCBmb3Igc2V0dGluZyBlbmNvZGlu ZyBzcGVlZCBbZmFzdCwgbWVkaXVtLCBzbG93LCBwbGFjZWJvXSIsIE9GRlNFVChvcF9wcmVzZXQp LCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsgLnN0ciA9ICJtZWRpdW0iIH0sIDAsIDAsIFZFIH0sDQor ICAgIHsgInR1bmUiLCAiVHVuZWluZyBwYXJhbWV0ZXIgZm9yIHNwZWNpYWwgcHVycG9zZSBvcGVy YXRpb24gW3BzbnIsIHplcm9sYXRlbmN5XSIsIE9GRlNFVChvcF90dW5lKSwgQVZfT1BUX1RZUEVf U1RSSU5HLCB7IDAgfSwgMCwgMCwgVkV9LA0KKyAgICB7ICJxcCIsICJxdWFudGl6YXRpb24gcGFy YW1ldGVyIHFwIDwwLi41MT4gW2RlZmF1bHQ6IDMyXSIsIE9GRlNFVChvcF9xcCksIEFWX09QVF9U WVBFX0lOVCwgeyAuaTY0ID0gMzIgfSwgMCwgNTEsIFZFIH0sDQorICAgIHsgImNyZiIsICJjb25z dGFudCByYXRlIGZhY3RvciA8LTEuLjUxPiBbZGVmYXVsdDogMzJdIiwgT0ZGU0VUKG9wX2NyZiks IEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gLTEgfSwgLTEsIDUxLCBWRSB9LA0KKyAgICB7ICJ4 ZXZlLXBhcmFtcyIsICJvdmVycmlkZSB0aGUgeGV2ZSBjb25maWd1cmF0aW9uIHVzaW5nIGEgOi1z ZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycyIsIE9GRlNFVCh4ZXZlX3BhcmFt cyksIEFWX09QVF9UWVBFX0RJQ1QsICAgeyAwIH0sIDAsIDAsIFZFIH0sDQorICAgIHsgTlVMTCB9 DQorfTsNCisNCitzdGF0aWMgY29uc3QgQVZDbGFzcyB4ZXZlX2NsYXNzID0gew0KKyAgICAuY2xh c3NfbmFtZSA9ICJsaWJ4ZXZlIiwNCisgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1f bmFtZSwNCisgICAgLm9wdGlvbiAgICAgPSB4ZXZlX29wdGlvbnMsDQorICAgIC52ZXJzaW9uICAg ID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULA0KK307DQorDQorLyoqDQorICogIGxpYmF2Y29kZWMg Z2VuZXJpYyBnbG9iYWwgb3B0aW9ucywgd2hpY2ggY2FuIGJlIHNldCBvbiBhbGwgdGhlIGVuY29k ZXJzIGFuZCBkZWNvZGVycw0KKyAqICBAc2VlIGh0dHBzOi8vd3d3LmZmbXBlZy5vcmcvZmZtcGVn LWNvZGVjcy5odG1sI0NvZGVjLU9wdGlvbnMNCisgKi8NCitzdGF0aWMgY29uc3QgQVZDb2RlY0Rl ZmF1bHQgeGV2ZV9kZWZhdWx0c1tdID0gew0KKyAgICB7ICJiIiwgIjAiIH0sICAgICAgIC8vIGJp dHJhdGUNCisgICAgeyAiZyIsICIwIiB9LCAgICAgICAvLyBnb3Bfc2l6ZSAoa2V5LWZyYW1lIGlu dGVydmFsIDA6IG9ubHkgb25lIEktZnJhbWUgYXQgdGhlIGZpcnN0IHRpbWU7IDE6IGV2ZXJ5IGZy YW1lIGlzIGNvZGVkIGluIEktZnJhbWUpDQorICAgIHsgImJmIiwgIjE1In0sICAgICAgLy8gYmZy YW1lcyAoMDogbm8gQi1mcmFtZXMpDQorICAgIHsgInByb2ZpbGUiLCAiMCJ9LCAgLy8gZW5jb2Rl ciBjb2RlYyBwcm9maWxlICgwOiBiYXNlbGllOyAxOiBtYWluKQ0KKyAgICB7ICJ0aHJlYWRzIiwg IjAifSwgIC8vIG51bWJlciBvZiB0aHJlYWRzIHRvIGJlIHVzZWQgKDA6IGF1dG9tYXRpY2FsbHkg c2VsZWN0IHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byBzZXQpDQorICAgIHsgTlVMTCB9LA0KK307 DQorDQorQVZDb2RlYyBmZl9saWJ4ZXZlX2VuY29kZXIgPSB7DQorICAgIC5uYW1lICAgICAgICAg ICAgID0gImxpYnhldmUiLA0KKyAgICAubG9uZ19uYW1lICAgICAgICA9IE5VTExfSUZfQ09ORklH X1NNQUxMKCJsaWJ4ZXZlIE1QRUctNSBFVkMiKSwNCisgICAgLnR5cGUgICAgICAgICAgICAgPSBB Vk1FRElBX1RZUEVfVklERU8sDQorICAgIC5pZCAgICAgICAgICAgICAgID0gQVZfQ09ERUNfSURf RVZDLA0KKyAgICAuaW5pdCAgICAgICAgICAgICA9IGxpYnhldmVfaW5pdCwNCisgICAgLmluaXRf c3RhdGljX2RhdGEgPSBsaWJ4ZXZlX2luaXRfc3RhdGljX2RhdGEsDQorICAgIC5lbmNvZGUyICAg ICAgICAgID0gbGlieGV2ZV9lbmNvZGUsDQorICAgIC5jbG9zZSAgICAgICAgICAgID0gbGlieGV2 ZV9jbG9zZSwNCisgICAgLnByaXZfZGF0YV9zaXplICAgPSBzaXplb2YoWGV2ZUNvbnRleHQpLA0K KyAgICAucHJpdl9jbGFzcyAgICAgICA9ICZ4ZXZlX2NsYXNzLA0KKyAgICAuZGVmYXVsdHMgICAg ICAgICA9IHhldmVfZGVmYXVsdHMsDQorICAgIC5jYXBhYmlsaXRpZXMgICAgID0gQVZfQ09ERUNf Q0FQX0RFTEFZIHwgQVZfQ09ERUNfQ0FQX0FVVE9fVEhSRUFEUyB8DQorICAgIEFWX0NPREVDX0NB UF9FTkNPREVSX1JFT1JERVJFRF9PUEFRVUUsDQorICAgIC53cmFwcGVyX25hbWUgICAgID0gImxp YnhldmUiLA0KK307DQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9wYXJzZXJzLmMgYi9saWJhdmNv ZGVjL3BhcnNlcnMuYw0KaW5kZXggNmI0MGMxOGQ4MC4uMjk1ZmEzM2Y1MiAxMDA2NDQNCi0tLSBh L2xpYmF2Y29kZWMvcGFyc2Vycy5jDQorKysgYi9saWJhdmNvZGVjL3BhcnNlcnMuYw0KQEAgLTcz LDYgKzczLDcgQEAgZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfdnA5X3BhcnNlcjsNCiBl eHRlcm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl93ZWJwX3BhcnNlcjsNCiBleHRlcm4gY29uc3Qg QVZDb2RlY1BhcnNlciBmZl94Ym1fcGFyc2VyOw0KIGV4dGVybiBjb25zdCBBVkNvZGVjUGFyc2Vy IGZmX3htYV9wYXJzZXI7DQorZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfZXZjX3BhcnNl cjsNCiANCiAjaW5jbHVkZSAibGliYXZjb2RlYy9wYXJzZXJfbGlzdC5jIg0KIA0KZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvcHJvZmlsZXMuYyBiL2xpYmF2Y29kZWMvcHJvZmlsZXMuYw0KaW5kZXgg N2FmN2ZiZWIxMy4uYTMxMjQ0ZTBkYiAxMDA2NDQNCi0tLSBhL2xpYmF2Y29kZWMvcHJvZmlsZXMu Yw0KKysrIGIvbGliYXZjb2RlYy9wcm9maWxlcy5jDQpAQCAtMTgxLDQgKzE4MSwxMCBAQCBjb25z dCBBVlByb2ZpbGUgZmZfYXJpYl9jYXB0aW9uX3Byb2ZpbGVzW10gPSB7DQogICAgIHsgRkZfUFJP RklMRV9VTktOT1dOIH0NCiB9Ow0KIA0KK2NvbnN0IEFWUHJvZmlsZSBmZl9ldmNfcHJvZmlsZXNb XSA9IHsNCisgICAgeyBGRl9QUk9GSUxFX0VWQ19CQVNFTElORSwgICAgICAgICAgICAgIkJhc2Vs aW5lIiAgICAgICAgICAgICAgfSwNCisgICAgeyBGRl9QUk9GSUxFX0VWQ19NQUlOLCAgICAgICAg ICAgICAgICAgIk1haW4iICAgICAgICAgICAgICAgICAgfSwNCisgICAgeyBGRl9QUk9GSUxFX1VO S05PV04gfSwNCit9Ow0KKw0KICNlbmRpZiAvKiAhQ09ORklHX1NNQUxMICovDQpkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy9wcm9maWxlcy5oIGIvbGliYXZjb2RlYy9wcm9maWxlcy5oDQppbmRleCA0 MWExOWFhOWFkLi5jZjkyYjVmMTI2IDEwMDY0NA0KLS0tIGEvbGliYXZjb2RlYy9wcm9maWxlcy5o DQorKysgYi9saWJhdmNvZGVjL3Byb2ZpbGVzLmgNCkBAIC03Miw1ICs3Miw2IEBAIGV4dGVybiBj b25zdCBBVlByb2ZpbGUgZmZfc2JjX3Byb2ZpbGVzW107DQogZXh0ZXJuIGNvbnN0IEFWUHJvZmls ZSBmZl9wcm9yZXNfcHJvZmlsZXNbXTsNCiBleHRlcm4gY29uc3QgQVZQcm9maWxlIGZmX21qcGVn X3Byb2ZpbGVzW107DQogZXh0ZXJuIGNvbnN0IEFWUHJvZmlsZSBmZl9hcmliX2NhcHRpb25fcHJv ZmlsZXNbXTsNCitleHRlcm4gY29uc3QgQVZQcm9maWxlIGZmX2V2Y19wcm9maWxlc1tdOw0KIA0K ICNlbmRpZiAvKiBBVkNPREVDX1BST0ZJTEVTX0ggKi8NCmRpZmYgLS1naXQgYS9saWJhdmNvZGVj L3ZlcnNpb24uaCBiL2xpYmF2Y29kZWMvdmVyc2lvbi5oDQppbmRleCA0ZDc3NDMxODQyLi5mYjFh MGZlZWM2IDEwMDY0NA0KLS0tIGEvbGliYXZjb2RlYy92ZXJzaW9uLmgNCisrKyBiL2xpYmF2Y29k ZWMvdmVyc2lvbi5oDQpAQCAtMjgsNyArMjgsNyBAQA0KICNpbmNsdWRlICJsaWJhdnV0aWwvdmVy c2lvbi5oIg0KIA0KICNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX01BSk9SICA1OQ0KLSNkZWZp bmUgTElCQVZDT0RFQ19WRVJTSU9OX01JTk9SICAxOA0KKyNkZWZpbmUgTElCQVZDT0RFQ19WRVJT SU9OX01JTk9SICAxOQ0KICNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX01JQ1JPIDEwMA0KIA0K ICNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX0lOVCAgQVZfVkVSU0lPTl9JTlQoTElCQVZDT0RF Q19WRVJTSU9OX01BSk9SLCBcDQpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZpbGUgYi9s aWJhdmZvcm1hdC9NYWtlZmlsZQ0KaW5kZXggODRlNzNlM2M2My4uZGI0NjFlNzliNyAxMDA2NDQN Ci0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlDQorKysgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQ0K QEAgLTI0MSw2ICsyNDEsOCBAQCBPQkpTLSQoQ09ORklHX0hDT01fREVNVVhFUikgICAgICAgICAg ICAgICs9IGhjb20ubyBwY20ubw0KIE9CSlMtJChDT05GSUdfSERTX01VWEVSKSAgICAgICAgICAg ICAgICAgKz0gaGRzZW5jLm8NCiBPQkpTLSQoQ09ORklHX0hFVkNfREVNVVhFUikgICAgICAgICAg ICAgICs9IGhldmNkZWMubyByYXdkZWMubw0KIE9CSlMtJChDT05GSUdfSEVWQ19NVVhFUikgICAg ICAgICAgICAgICAgKz0gcmF3ZW5jLm8NCitPQkpTLSQoQ09ORklHX0VWQ19ERU1VWEVSKSAgICAg ICAgICAgICAgICs9IGV2Y2RlYy5vIHJhd2RlYy5vDQorT0JKUy0kKENPTkZJR19FVkNfTVVYRVIp ICAgICAgICAgICAgICAgICArPSByYXdlbmMubw0KIE9CSlMtJChDT05GSUdfSExTX0RFTVVYRVIp ICAgICAgICAgICAgICAgKz0gaGxzLm8gaGxzX3NhbXBsZV9lbmNyeXB0aW9uLm8NCiBPQkpTLSQo Q09ORklHX0hMU19NVVhFUikgICAgICAgICAgICAgICAgICs9IGhsc2VuYy5vIGhsc3BsYXlsaXN0 Lm8gYXZjLm8NCiBPQkpTLSQoQ09ORklHX0hOTV9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IGhu bS5vDQpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIGIvbGliYXZmb3JtYXQv YWxsZm9ybWF0cy5jDQppbmRleCBkMDY2YTc3NDViLi4xMTQ4MDI0ZTcxIDEwMDY0NA0KLS0tIGEv bGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jDQorKysgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMN CkBAIC0xNDUsNiArMTQ1LDggQEAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2VhX2Nk YXRhX2RlbXV4ZXI7DQogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2VhYzNfZGVtdXhl cjsNCiBleHRlcm4gY29uc3QgQVZPdXRwdXRGb3JtYXQgZmZfZWFjM19tdXhlcjsNCiBleHRlcm4g Y29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZXBhZl9kZW11eGVyOw0KK2V4dGVybiBjb25zdCBBVklu cHV0Rm9ybWF0ICBmZl9ldmNfZGVtdXhlcjsNCitleHRlcm4gY29uc3QgQVZPdXRwdXRGb3JtYXQg ZmZfZXZjX211eGVyOw0KIGV4dGVybiBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl9mNHZfbXV4ZXI7 DQogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2ZmbWV0YWRhdGFfZGVtdXhlcjsNCiBl eHRlcm4gY29uc3QgQVZPdXRwdXRGb3JtYXQgZmZfZmZtZXRhZGF0YV9tdXhlcjsNCmRpZmYgLS1n aXQgYS9saWJhdmZvcm1hdC9ldmNkZWMuYyBiL2xpYmF2Zm9ybWF0L2V2Y2RlYy5jDQpuZXcgZmls ZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uZGQ5MTAyY2RkNA0KLS0tIC9kZXYvbnVs bA0KKysrIGIvbGliYXZmb3JtYXQvZXZjZGVjLmMNCkBAIC0wLDAgKzEsMTM2IEBADQorLyoNCisg KiBSQVcgRVZDIHZpZGVvIGRlbXV4ZXINCisgKg0KKyAqIENvcHlyaWdodCAoYykgMjAyMSBEYXdp ZCBLb3ppbnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4NCisgKg0KKyAqIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEZGbXBlZy4NCisgKg0KKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQorICogTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICogdmVyc2lvbiAy LjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u DQorICoNCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwNCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCisgKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlDQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KKyAqLw0KKw0KKyNpbmNsdWRlICJsaWJhdmNv ZGVjL2dldF9iaXRzLmgiDQorI2luY2x1ZGUgImxpYmF2Y29kZWMvZ29sb21iLmgiDQorI2luY2x1 ZGUgImF2Zm9ybWF0LmgiDQorI2luY2x1ZGUgInJhd2RlYy5oIg0KKyNpbmNsdWRlICJsaWJhdmNv ZGVjL2ludGVybmFsLmgiDQorI2luY2x1ZGUgInhldmQuaCINCisNCit0eXBlZGVmIHN0cnVjdCBF VkNQYXJzZXJDb250ZXh0IHsNCisgICAgaW50IGdvdF9zcHM7DQorICAgIGludCBnb3RfcHBzOw0K KyAgICBpbnQgZ290X2lkcjsNCisgICAgaW50IGdvdF9ub25pZHI7DQorfSBFVkNQYXJzZXJDb250 ZXh0Ow0KKw0KK3N0YXRpYyBpbnQgZ2V0X25hbHVfdHlwZShjb25zdCB1aW50OF90ICpicywgaW50 IGJzX3NpemUpDQorew0KKyAgICBHZXRCaXRDb250ZXh0IGdiOw0KKyAgICBpbnQgZnpiLCBudXQ7 DQorICAgIGluaXRfZ2V0X2JpdHMoJmdiLCBicywgYnNfc2l6ZSAqIDgpOw0KKyAgICBmemIgPSBn ZXRfYml0czEoJmdiKTsNCisgICAgaWYoZnpiICE9IDApIHsNCisgICAgICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfREVCVUcsICJmb3JiaWRkZW5femVyb19iaXQgaXMgbm90IGNsZWFyXG4iKTsNCisg ICAgfQ0KKyAgICBudXQgPSBnZXRfYml0cygmZ2IsIDYpOyAvKiBuYWxfdW5pdF90eXBlX3BsdXMx ICovDQorICAgIHJldHVybiBudXQgLSAxOw0KK30NCisNCisvKioNCisgKiBSZWFkIE5BTCB1bml0 IGxlbmd0aA0KKyAqIEBwYXJhbSBicyBpbnB1dCBkYXRhIChiaXRzdHJlYW0pDQorICogQHJldHVy biB0aGUgbGVuZ2h0aCBvZiBOQUwgdW5pdCBvbiBzdWNjZXNzLCAwIHZhbHVlIG9uIGZhaWx1cmUN CisgKi8NCitzdGF0aWMgdWludDMyX3QgcmVhZF9uYWxfdW5pdF9sZW5ndGgoY29uc3QgdWludDhf dCAqYnMsIGludCBic19zaXplKQ0KK3sNCisgICAgdWludDMyX3QgbGVuID0gMDsNCisgICAgWEVW RF9JTkZPIGluZm87DQorICAgIGludCByZXQ7DQorDQorICAgIGlmKGJzX3NpemU+PVhFVkRfTkFM X1VOSVRfTEVOR1RIX0JZVEUpIHsNCisgICAgICAgIHJldCA9IHhldmRfaW5mbygodm9pZCopYnMs IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUsIDEsICZpbmZvKTsNCisgICAgICAgIGlmIChYRVZE X0ZBSUxFRChyZXQpKSB7DQorICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwg IkNhbm5vdCBnZXQgYml0c3RyZWFtIGluZm9ybWF0aW9uXG4iKTsNCisgICAgICAgICAgICByZXR1 cm4gMDsNCisgICAgICAgIH0NCisgICAgICAgIGxlbiA9IGluZm8ubmFsdV9sZW47DQorICAgICAg ICBpZihsZW4gPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0VSUk9SLCAiSW52YWxpZCBiaXRzdHJlYW0gc2l6ZSEgWyVkXVxuIiwgYnNfc2l6ZSk7DQor ICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICB9DQorICAgIH0NCisgICAgcmV0dXJuIGxl bjsNCit9DQorDQorc3RhdGljIGludCBwYXJzZV9uYWxfdW5pdHMoY29uc3QgQVZQcm9iZURhdGEg KnAsIEVWQ1BhcnNlckNvbnRleHQgKmV2KQ0KK3sNCisgICAgaW50IG5hbHVfdHlwZTsNCisgICAg c2l6ZV90IG5hbHVfc2l6ZTsNCisgICAgdW5zaWduZWQgY2hhciogYml0cyA9ICh1bnNpZ25lZCBj aGFyICopcC0+YnVmOw0KKyAgICBpbnQgYnl0ZXNfdG9fcmVhZCA9IHAtPmJ1Zl9zaXplOw0KKyAg ICANCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImJ5dGVzX3RvX3JlYWQ6ICVkIFxu IiwgYnl0ZXNfdG9fcmVhZCk7DQorDQorICAgIHdoaWxlKGJ5dGVzX3RvX3JlYWQgPiBYRVZEX05B TF9VTklUX0xFTkdUSF9CWVRFKSB7DQorICAgIA0KKyAgICAgICAgbmFsdV9zaXplID0gcmVhZF9u YWxfdW5pdF9sZW5ndGgoYml0cywgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSk7DQorICAgICAg ICBpZihuYWx1X3NpemUgPT0gMCkgYnJlYWs7DQorDQorICAgICAgICBiaXRzICs9IFhFVkRfTkFM X1VOSVRfTEVOR1RIX0JZVEU7DQorICAgICAgICBieXRlc190b19yZWFkIC09IFhFVkRfTkFMX1VO SVRfTEVOR1RIX0JZVEU7DQorDQorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAi bmFsdV9zaXplOiAlbGQgXG4iLCBuYWx1X3NpemUpOw0KKw0KKyAgICAgICAgaWYoYnl0ZXNfdG9f cmVhZCA8IG5hbHVfc2l6ZSkgYnJlYWs7DQorDQorICAgICAgICBuYWx1X3R5cGUgPSBnZXRfbmFs dV90eXBlKGJpdHMsIGJ5dGVzX3RvX3JlYWQpOw0KKw0KKyAgICAgICAgYml0cyArPSBuYWx1X3Np emU7DQorICAgICAgICBieXRlc190b19yZWFkIC09IG5hbHVfc2l6ZTsNCisNCisgICAgICAgIGlm IChuYWx1X3R5cGUgPT0gWEVWRF9OVVRfU1BTKSB7DQorICAgICAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19ERUJVRywgIlhFVkRfTlVUX1NQUyBcbiIpOw0KKyAgICAgICAgICAgIGV2LT5nb3Rf c3BzKys7DQorICAgICAgICB9DQorICAgICAgICBlbHNlIGlmIChuYWx1X3R5cGUgPT0gWEVWRF9O VVRfUFBTKSB7DQorICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlhFVkRf TlVUX1BQUyBcbiIpOw0KKyAgICAgICAgICAgIGV2LT5nb3RfcHBzKys7DQorICAgICAgICB9DQor ICAgICAgICBlbHNlIGlmIChuYWx1X3R5cGUgPT0gWEVWRF9OVVRfSURSICkgew0KKyAgICAgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9JRFJcbiIpOw0KKyAgICAg ICAgICAgIGV2LT5nb3RfaWRyKys7DQorICAgICAgICB9DQorICAgICAgICBlbHNlIGlmIChuYWx1 X3R5cGUgPT0gWEVWRF9OVVRfTk9OSURSKSB7DQorICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19ERUJVRywgIlhFVkRfTlVUX05PTklEUlxuIik7DQorICAgICAgICAgICAgZXYtPmdvdF9u b25pZHIrKzsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICByZXR1cm4gMDsNCit9DQorDQorc3Rh dGljIGludCBldmNfcHJvYmUoY29uc3QgQVZQcm9iZURhdGEgKnApDQorew0KKyAgICBFVkNQYXJz ZXJDb250ZXh0IGV2ID0ge307DQorICAgIGludCByZXQgPSBwYXJzZV9uYWxfdW5pdHMocCwgJmV2 KTsNCisNCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgInNwczolZCBwcHM6JWQgaWRy OiVkIHNsaTolZFxuIiwgZXYuZ290X3NwcywgZXYuZ290X3BwcywgZXYuZ290X2lkciwgZXYuZ290 X25vbmlkcik7DQorICAgIA0KKyAgICBpZiAocmV0ID09IDAgJiYgZXYuZ290X3NwcyAmJiBldi5n b3RfcHBzICYmIChldi5nb3RfaWRyIHx8IGV2LmdvdF9ub25pZHIgPiAzKSkgDQorICAgICAgICBy ZXR1cm4gQVZQUk9CRV9TQ09SRV9FWFRFTlNJT04gKyAxOyAgLy8gMSBtb3JlIHRoYW4gLm1wZw0K Kw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorRkZfREVGX1JBV1ZJREVPX0RFTVVYRVIoZXZjLCAi cmF3IEVWQyB2aWRlbyIsIGV2Y19wcm9iZSwgImV2YyIsIEFWX0NPREVDX0lEX0VWQykNCmRpZmYg LS1naXQgYS9saWJhdmZvcm1hdC9pc29tX3RhZ3MuYyBiL2xpYmF2Zm9ybWF0L2lzb21fdGFncy5j DQppbmRleCA2MmU2MDQ3MGE4Li4wMjQ1Y2ZiOTk5IDEwMDY0NA0KLS0tIGEvbGliYXZmb3JtYXQv aXNvbV90YWdzLmMNCisrKyBiL2xpYmF2Zm9ybWF0L2lzb21fdGFncy5jDQpAQCAtMTQ1LDYgKzE0 NSw4IEBAIGNvbnN0IEFWQ29kZWNUYWcgZmZfY29kZWNfbW92dmlkZW9fdGFnc1tdID0gew0KICAg ICB7IEFWX0NPREVDX0lEX0gyNjQsIE1LVEFHKCdkJywgJ3YnLCAnYScsICcxJykgfSwgLyogQVZD LWJhc2VkIERvbGJ5IFZpc2lvbiBkZXJpdmVkIGZyb20gYXZjMSAqLw0KICAgICB7IEFWX0NPREVD X0lEX0gyNjQsIE1LVEFHKCdkJywgJ3YnLCAnYScsICd2JykgfSwgLyogQVZDLWJhc2VkIERvbGJ5 IFZpc2lvbiBkZXJpdmVkIGZyb20gYXZjMyAqLw0KIA0KKyAgICB7IEFWX0NPREVDX0lEX0VWQywg IE1LVEFHKCdlJywgJ3YnLCAnYycsICcxJykgfSwgLyogRVZDL01QRUctNSAqLw0KKw0KICAgICB7 IEFWX0NPREVDX0lEX1ZQOCwgIE1LVEFHKCd2JywgJ3AnLCAnMCcsICc4JykgfSwgLyogVlA4ICov DQogICAgIHsgQVZfQ09ERUNfSURfVlA5LCAgTUtUQUcoJ3YnLCAncCcsICcwJywgJzknKSB9LCAv KiBWUDkgKi8NCiAgICAgeyBBVl9DT0RFQ19JRF9BVjEsICBNS1RBRygnYScsICd2JywgJzAnLCAn MScpIH0sIC8qIEFWMSAqLw0KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L21vdi5jIGIvbGliYXZm b3JtYXQvbW92LmMNCmluZGV4IDZmYjA5ZGY3ZTEuLmU4Mzg3MmZiZTIgMTAwNjQ0DQotLS0gYS9s aWJhdmZvcm1hdC9tb3YuYw0KKysrIGIvbGliYXZmb3JtYXQvbW92LmMNCkBAIC04NTY4LDcgKzg1 NjgsNyBAQCBjb25zdCBBVklucHV0Rm9ybWF0IGZmX21vdl9kZW11eGVyID0gew0KICAgICAubG9u Z19uYW1lICAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiUXVpY2tUaW1lIC8gTU9WIiksDQog ICAgIC5wcml2X2NsYXNzICAgICA9ICZtb3ZfY2xhc3MsDQogICAgIC5wcml2X2RhdGFfc2l6ZSA9 IHNpemVvZihNT1ZDb250ZXh0KSwNCi0gICAgLmV4dGVuc2lvbnMgICAgID0gIm1vdixtcDQsbTRh LDNncCwzZzIsbWoyLHBzcCxtNGIsaXNtLGlzbXYsaXNtYSxmNHYiLA0KKyAgICAuZXh0ZW5zaW9u cyAgICAgPSAibW92LG1wNCxtNGEsM2dwLDNnMixtajIscHNwLG00Yixpc20saXNtdixpc21hLGY0 dixldmMiLA0KICAgICAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9GTVRfSU5JVF9DTEVBTlVQLA0KICAg ICAucmVhZF9wcm9iZSAgICAgPSBtb3ZfcHJvYmUsDQogICAgIC5yZWFkX2hlYWRlciAgICA9IG1v dl9yZWFkX2hlYWRlciwNCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9tb3ZlbmMuYyBiL2xpYmF2 Zm9ybWF0L21vdmVuYy5jDQppbmRleCA0Yzg2ODkxOWFlLi4zMGU1MDM3ZjA2IDEwMDY0NA0KLS0t IGEvbGliYXZmb3JtYXQvbW92ZW5jLmMNCisrKyBiL2xpYmF2Zm9ybWF0L21vdmVuYy5jDQpAQCAt MTM0Miw2ICsxMzQyLDE2IEBAIHN0YXRpYyBpbnQgbW92X3dyaXRlX2h2Y2NfdGFnKEFWSU9Db250 ZXh0ICpwYiwgTU9WVHJhY2sgKnRyYWNrKQ0KICAgICByZXR1cm4gdXBkYXRlX3NpemUocGIsIHBv cyk7DQogfQ0KIA0KK3N0YXRpYyBpbnQgbW92X3dyaXRlX2V2Y2NfdGFnKEFWSU9Db250ZXh0ICpw YiwgTU9WVHJhY2sgKnRyYWNrKQ0KK3sNCisgICAgaW50NjRfdCBwb3MgPSBhdmlvX3RlbGwocGIp Ow0KKw0KKyAgICBhdmlvX3diMzIocGIsIDApOw0KKyAgICBmZmlvX3dmb3VyY2MocGIsICJldmND Iik7DQorICAgIGZmX2lzb21fd3JpdGVfYXZjYyhwYiwgdHJhY2stPnZvc19kYXRhLCB0cmFjay0+ dm9zX2xlbik7DQorICAgIHJldHVybiB1cGRhdGVfc2l6ZShwYiwgcG9zKTsNCit9DQorDQogLyog YWxzbyB1c2VkIGJ5IGFsbCBhdmlkIGNvZGVjcyAoZHYsIGlteCwgbWVyaWRpZW4pIGFuZCB0aGVp ciB2YXJpYW50cyAqLw0KIHN0YXRpYyBpbnQgbW92X3dyaXRlX2F2aWRfdGFnKEFWSU9Db250ZXh0 ICpwYiwgTU9WVHJhY2sgKnRyYWNrKQ0KIHsNCkBAIC0xNTkxLDYgKzE2MDEsMTkgQEAgc3RhdGlj IGludCBtb3ZfZ2V0X2gyNjRfY29kZWNfdGFnKEFWRm9ybWF0Q29udGV4dCAqcywgTU9WVHJhY2sg KnRyYWNrKQ0KICAgICByZXR1cm4gdGFnOw0KIH0NCiANCitzdGF0aWMgaW50IG1vdl9nZXRfZXZj X2NvZGVjX3RhZyhBVkZvcm1hdENvbnRleHQgKnMsIE1PVlRyYWNrICp0cmFjaykNCit7DQorICAg IGludCB0YWcgPSB0cmFjay0+cGFyLT5jb2RlY190YWc7DQorICAgIGludCBpbnRlcmxhY2VkID0g dHJhY2stPnBhci0+ZmllbGRfb3JkZXIgPiBBVl9GSUVMRF9QUk9HUkVTU0lWRTsNCisgICAgQVZT dHJlYW0gKnN0ID0gdHJhY2stPnN0Ow0KKyAgICBpbnQgcmF0ZSA9IGRlZmluZWRfZnJhbWVfcmF0 ZShzLCBzdCk7DQorDQorICAgIGlmICghdGFnKQ0KKyAgICAgICAgdGFnID0gTUtUQUcoJ2UnLCAn dicsICdjJywgJ2knKTsgLy9mYWxsYmFjayB0YWcNCisNCisgICAgcmV0dXJuIHRhZzsNCit9DQor DQogc3RhdGljIGNvbnN0IHN0cnVjdCB7DQogICAgIGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10 Ow0KICAgICB1aW50MzJfdCB0YWc7DQpAQCAtMTY3Miw2ICsxNjk1LDggQEAgc3RhdGljIHVuc2ln bmVkIGludCBtb3ZfZ2V0X2NvZGVjX3RhZyhBVkZvcm1hdENvbnRleHQgKnMsIE1PVlRyYWNrICp0 cmFjaykNCiAgICAgICAgICAgICB0YWcgPSBtb3ZfZ2V0X21wZWcyX3hkY2FtX2NvZGVjX3RhZyhz LCB0cmFjayk7DQogICAgICAgICBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9D T0RFQ19JRF9IMjY0KQ0KICAgICAgICAgICAgIHRhZyA9IG1vdl9nZXRfaDI2NF9jb2RlY190YWco cywgdHJhY2spOw0KKyAgICAgICAgZWxzZSBpZiAodHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZf Q09ERUNfSURfRVZDKQ0KKyAgICAgICAgICAgIHRhZyA9IG1vdl9nZXRfZXZjX2NvZGVjX3RhZyhz LCB0cmFjayk7ICAgIA0KICAgICAgICAgZWxzZSBpZiAodHJhY2stPnBhci0+Y29kZWNfaWQgPT0g QVZfQ09ERUNfSURfRE5YSEQpDQogICAgICAgICAgICAgdGFnID0gbW92X2dldF9kbnhoZF9jb2Rl Y190YWcocywgdHJhY2spOw0KICAgICAgICAgZWxzZSBpZiAodHJhY2stPnBhci0+Y29kZWNfdHlw ZSA9PSBBVk1FRElBX1RZUEVfVklERU8pIHsNCkBAIC0yMjA4LDYgKzIyMzMsOSBAQCBzdGF0aWMg aW50IG1vdl93cml0ZV92aWRlb190YWcoQVZGb3JtYXRDb250ZXh0ICpzLCBBVklPQ29udGV4dCAq cGIsIE1PVk11eENvbnRleA0KICAgICAgICAgbW92X3dyaXRlX2F2Y2NfdGFnKHBiLCB0cmFjayk7 DQogICAgICAgICBpZiAodHJhY2stPm1vZGUgPT0gTU9ERV9JUE9EKQ0KICAgICAgICAgICAgIG1v dl93cml0ZV91dWlkX3RhZ19pcG9kKHBiKTsNCisgICAgfQ0KKyAgICBlbHNlIGlmICh0cmFjay0+ cGFyLT5jb2RlY19pZCA9PUFWX0NPREVDX0lEX0VWQykgew0KKyAgICAgICAgbW92X3dyaXRlX2V2 Y2NfdGFnKHBiLCB0cmFjayk7ICAgICAgICANCiAgICAgfSBlbHNlIGlmICh0cmFjay0+cGFyLT5j b2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WUDkpIHsNCiAgICAgICAgIG1vdl93cml0ZV92cGNjX3Rh Zyhtb3YtPmZjLCBwYiwgdHJhY2spOw0KICAgICB9IGVsc2UgaWYgKHRyYWNrLT5wYXItPmNvZGVj X2lkID09IEFWX0NPREVDX0lEX0FWMSkgew0KQEAgLTU3MzcsNiArNTc2NSw3IEBAIGludCBmZl9t b3Zfd3JpdGVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkNCiAgICAg aWYgKChwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0ROWEhEIHx8DQogICAgICAgICAgcGFy LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IMjY0IHx8DQogICAgICAgICAgcGFyLT5jb2RlY19p ZCA9PSBBVl9DT0RFQ19JRF9IRVZDIHx8DQorICAgICAgICAgcGFyLT5jb2RlY19pZCA9PSBBVl9D T0RFQ19JRF9FVkMgfHwNCiAgICAgICAgICBwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX1RS VUVIRCB8fA0KICAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQUMzKSAmJiAh dHJrLT52b3NfbGVuICYmDQogICAgICAgICAgIVRBR19JU19BVkNJKHRyay0+dGFnKSkgew0KQEAg LTczMTEsNiArNzM0MCw3IEBAIHN0YXRpYyBjb25zdCBBVkNvZGVjVGFnIGNvZGVjX21wNF90YWdz W10gPSB7DQogICAgIHsgQVZfQ09ERUNfSURfSDI2NCwgICAgICAgICAgICBNS1RBRygnYScsICd2 JywgJ2MnLCAnMycpIH0sDQogICAgIHsgQVZfQ09ERUNfSURfSEVWQywgICAgICAgICAgICBNS1RB RygnaCcsICdlJywgJ3YnLCAnMScpIH0sDQogICAgIHsgQVZfQ09ERUNfSURfSEVWQywgICAgICAg ICAgICBNS1RBRygnaCcsICd2JywgJ2MnLCAnMScpIH0sDQorICAgIHsgQVZfQ09ERUNfSURfRVZD LCAgICAgICAgICAgICBNS1RBRygnZScsICd2JywgJ2MnLCAnMScpIH0sDQogICAgIHsgQVZfQ09E RUNfSURfTVBFRzJWSURFTywgICAgICBNS1RBRygnbScsICdwJywgJzQnLCAndicpIH0sDQogICAg IHsgQVZfQ09ERUNfSURfTVBFRzFWSURFTywgICAgICBNS1RBRygnbScsICdwJywgJzQnLCAndicp IH0sDQogICAgIHsgQVZfQ09ERUNfSURfTUpQRUcsICAgICAgICAgICBNS1RBRygnbScsICdwJywg JzQnLCAndicpIH0sDQpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvcmF3ZW5jLmMgYi9saWJhdmZv cm1hdC9yYXdlbmMuYw0KaW5kZXggNGJiYWU3NzE3Yi4uMzIyYWI1ODNhYiAxMDA2NDQNCi0tLSBh L2xpYmF2Zm9ybWF0L3Jhd2VuYy5jDQorKysgYi9saWJhdmZvcm1hdC9yYXdlbmMuYw0KQEAgLTM4 Niw2ICszODYsMjAgQEAgY29uc3QgQVZPdXRwdXRGb3JtYXQgZmZfaGV2Y19tdXhlciA9IHsNCiB9 Ow0KICNlbmRpZg0KIA0KKyNpZiBDT05GSUdfRVZDX01VWEVSDQorQVZPdXRwdXRGb3JtYXQgZmZf ZXZjX211eGVyID0gew0KKyAgICAubmFtZSAgICAgICAgICAgICAgPSAiZXZjIiwNCisgICAgLmxv bmdfbmFtZSAgICAgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoInJhdyBFVkMgdmlkZW8iKSwN CisgICAgLmV4dGVuc2lvbnMgICAgICAgID0gImV2YyIsDQorICAgIC5hdWRpb19jb2RlYyAgICAg ICA9IEFWX0NPREVDX0lEX05PTkUsDQorICAgIC52aWRlb19jb2RlYyAgICAgICA9IEFWX0NPREVD X0lEX0VWQywNCisgICAgLndyaXRlX2hlYWRlciAgICAgID0gZm9yY2Vfb25lX3N0cmVhbSwNCisg ICAgLndyaXRlX3BhY2tldCAgICAgID0gZmZfcmF3X3dyaXRlX3BhY2tldCwNCisgICAgLmZsYWdz ICAgICAgICAgICAgID0gQVZGTVRfTk9USU1FU1RBTVBTLA0KK307DQorI2VuZGlmDQorDQorDQog I2lmIENPTkZJR19NNFZfTVVYRVINCiBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl9tNHZfbXV4ZXIg PSB7DQogICAgIC5uYW1lICAgICAgICAgICAgICA9ICJtNHYiLA0KLS0gDQoyLjE3LjENCg0KDQoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRl dmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5v cmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBs aW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGgg c3ViamVjdCAidW5zdWJzY3JpYmUiLgo=