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 ED67A47A1D for ; Tue, 28 Nov 2023 16:42:58 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F349368CF9C; Tue, 28 Nov 2023 18:42:55 +0200 (EET) Received: from mail-vs1-f50.google.com (mail-vs1-f50.google.com [209.85.217.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9D687680105 for ; Tue, 28 Nov 2023 18:42:49 +0200 (EET) Received: by mail-vs1-f50.google.com with SMTP id ada2fe7eead31-462ea07a17dso514961137.2 for ; Tue, 28 Nov 2023 08:42:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701189768; x=1701794568; darn=ffmpeg.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=ELTKCq6mz0xdfL+5tkE7nAlltlSF9suxVOnqcKK8cAs=; b=cgwbTuHsPWvvkHKVJv5zIVaF+c7bUERif0GgXghFPnWsP9lE4RzjTF/1efreSuOl0R x3E+SY8a/D6xFMs5GGybgAy7HxcLkjyz9ts0FNy1FZ+nw0dKNjfSPfOM4bSQDUMNq9KW 6/8RboKl7uNeFfqw709eWVSlnQjQ1AtoW0nu+NPKDRAx0oqHcvckYudPKSZ3s+uTP5FZ 5c01GK7OiVDiVVVUaZQHUsiSCT7pOpgVDLxVX3wKgTXMojeNcFbYriEiKCYbyoM7IK+t c7RxuAfuPP3SeXNnUem7z1o8ktEK6D/va3xJjaHQOiJfaWXnUd/J2CohJS85kDnwEa37 4ryw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701189768; x=1701794568; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ELTKCq6mz0xdfL+5tkE7nAlltlSF9suxVOnqcKK8cAs=; b=qdOf8EYcrrRbI0dG3RprSGkMDjqZr30xLi4XWpckCpX32DiVHuP4fr8Qy4JQ1r5v19 ly4y2iptTwN/effpvknT9nLOyDHR+jVnpam50FJM7wt9KehqGHo8kLK0Yb+mHeCJYXjQ wwEuzfHdi9kxmFhLbZBP37BXvdt5djaakt09D4qvH2oNGUe3EEArDfBLQgNF9m1G1/9g B3/J1TTt4KNhWH314ddBcK3fN7ZeAlFMU68CAc9E2IIYyQRw0kx7Qs/kNRpTFH+Sa970 cOflhmWnDOwwPSld5knCSTrHABKvi2ToMkFIZnnGtX0LZsrPkcx2mhdr4oZsHkbYBHHc CUTw== X-Gm-Message-State: AOJu0YygD6jihMUpR/AE4aRewDwih+q7Z0SWyCvoATieGx3C3ewW7+a+ JHd7h0sETuFWHt7X2GKBIk8M+8iVJwdJWl6m9h5Mh/6h X-Google-Smtp-Source: AGHT+IGGJzzntpHMNUqtl7nafcMeOZ77qhDD2UvLTigE3mCghUOjzagHYqknKi5yOIqZWiGB2OoYOeABeIzNDMTcbX0= X-Received: by 2002:a67:ebc5:0:b0:464:4307:ed57 with SMTP id y5-20020a67ebc5000000b004644307ed57mr1095895vso.19.1701189768151; Tue, 28 Nov 2023 08:42:48 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Paul B Mahol Date: Tue, 28 Nov 2023 17:51:14 +0100 Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="000000000000d3a0e2060b391bca" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH] avfilter: merge loudnorm filter functionality into f_ebur128.c 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --000000000000d3a0e2060b391bca Content-Type: text/plain; charset="UTF-8" Major change: loudnorm no longer returns oversampled audio at 192000 Hz when doing dynamic processing. Oversampled audio is only used for true peak finding now. This was trivial improvement as possible with ebur128 code. Minor changes: numerous stability fixes --000000000000d3a0e2060b391bca Content-Type: text/x-patch; charset="UTF-8"; name="0001-avfilter-merge-loudnorm-filter-functionality-into-f_.patch" Content-Disposition: attachment; filename="0001-avfilter-merge-loudnorm-filter-functionality-into-f_.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lpikn95c0 RnJvbSAwMDg3NzM3MzBlNGY5NTE4NmUxYTAxZjIwMzliYmQ4YTJhNzk2NTZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEIgTWFob2wgPG9uZW1kYUBnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjkgU2VwIDIwMjMgMjA6NTM6NTEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBhdmZpbHRl cjogbWVyZ2UgbG91ZG5vcm0gZmlsdGVyIGZ1bmN0aW9uYWxpdHkgaW50bwogZl9lYnVyMTI4LmMK ClNpZ25lZC1vZmYtYnk6IFBhdWwgQiBNYWhvbCA8b25lbWRhQGdtYWlsLmNvbT4KLS0tCiBsaWJh dmZpbHRlci9NYWtlZmlsZSAgICAgIHwgICAxIC0KIGxpYmF2ZmlsdGVyL2FmX2xvdWRub3JtLmMg fCA5NDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpYmF2ZmlsdGVy L2VidXIxMjguYyAgICAgfCA3MjUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpYmF2 ZmlsdGVyL2VidXIxMjguaCAgICAgfCAyMjkgLS0tLS0tLS0tLQogbGliYXZmaWx0ZXIvZl9lYnVy MTI4LmMgICB8IDkxNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIDUgZmls ZXMgY2hhbmdlZCwgNzQ0IGluc2VydGlvbnMoKyksIDIwNjYgZGVsZXRpb25zKC0pCiBkZWxldGUg bW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvYWZfbG91ZG5vcm0uYwogZGVsZXRlIG1vZGUgMTAwNjQ0 IGxpYmF2ZmlsdGVyL2VidXIxMjguYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL2Vi dXIxMjguaAoKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlIGIvbGliYXZmaWx0ZXIv TWFrZWZpbGUKaW5kZXggNjM3MjVmOTFiNC4uNzQ3YmMyNGU1OCAxMDA2NDQKLS0tIGEvbGliYXZm aWx0ZXIvTWFrZWZpbGUKKysrIGIvbGliYXZmaWx0ZXIvTWFrZWZpbGUKQEAgLTE1MCw3ICsxNTAs NiBAQCBPQkpTLSQoQ09ORklHX0hJR0hQQVNTX0ZJTFRFUikgICAgICAgICAgICAgICArPSBhZl9i aXF1YWRzLm8KIE9CSlMtJChDT05GSUdfSElHSFNIRUxGX0ZJTFRFUikgICAgICAgICAgICAgICs9 IGFmX2JpcXVhZHMubwogT0JKUy0kKENPTkZJR19KT0lOX0ZJTFRFUikgICAgICAgICAgICAgICAg ICAgKz0gYWZfam9pbi5vCiBPQkpTLSQoQ09ORklHX0xBRFNQQV9GSUxURVIpICAgICAgICAgICAg ICAgICArPSBhZl9sYWRzcGEubwotT0JKUy0kKENPTkZJR19MT1VETk9STV9GSUxURVIpICAgICAg ICAgICAgICAgKz0gYWZfbG91ZG5vcm0ubyBlYnVyMTI4Lm8KIE9CSlMtJChDT05GSUdfTE9XUEFT U19GSUxURVIpICAgICAgICAgICAgICAgICs9IGFmX2JpcXVhZHMubwogT0JKUy0kKENPTkZJR19M T1dTSEVMRl9GSUxURVIpICAgICAgICAgICAgICAgKz0gYWZfYmlxdWFkcy5vCiBPQkpTLSQoQ09O RklHX0xWMl9GSUxURVIpICAgICAgICAgICAgICAgICAgICArPSBhZl9sdjIubwpkaWZmIC0tZ2l0 IGEvbGliYXZmaWx0ZXIvYWZfbG91ZG5vcm0uYyBiL2xpYmF2ZmlsdGVyL2FmX2xvdWRub3JtLmMK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MzM5OGFlMmEuLjAwMDAwMDAwMDAKLS0t IGEvbGliYXZmaWx0ZXIvYWZfbG91ZG5vcm0uYworKysgL2Rldi9udWxsCkBAIC0xLDk0MSArMCww IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2IEt5bGUgU3dhbnNvbiA8a0B5bG8ucGg+Lgot ICoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK LSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK LSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0vKiBodHRwOi8vay55bG8u cGgvMjAxNi8wNC8wNC9sb3Vkbm9ybS5odG1sICovCi0KLSNpbmNsdWRlICJsaWJhdnV0aWwvb3B0 LmgiCi0jaW5jbHVkZSAiYXZmaWx0ZXIuaCIKLSNpbmNsdWRlICJmaWx0ZXJzLmgiCi0jaW5jbHVk ZSAiZm9ybWF0cy5oIgotI2luY2x1ZGUgImludGVybmFsLmgiCi0jaW5jbHVkZSAiYXVkaW8uaCIK LSNpbmNsdWRlICJlYnVyMTI4LmgiCi0KLWVudW0gRnJhbWVUeXBlIHsKLSAgICBGSVJTVF9GUkFN RSwKLSAgICBJTk5FUl9GUkFNRSwKLSAgICBGSU5BTF9GUkFNRSwKLSAgICBMSU5FQVJfTU9ERSwK LSAgICBGUkFNRV9OQgotfTsKLQotZW51bSBMaW1pdGVyU3RhdGUgewotICAgIE9VVCwKLSAgICBB VFRBQ0ssCi0gICAgU1VTVEFJTiwKLSAgICBSRUxFQVNFLAotICAgIFNUQVRFX05CCi19OwotCi1l bnVtIFByaW50Rm9ybWF0IHsKLSAgICBOT05FLAotICAgIEpTT04sCi0gICAgU1VNTUFSWSwKLSAg ICBQRl9OQgotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgTG91ZE5vcm1Db250ZXh0IHsKLSAgICBjb25z dCBBVkNsYXNzICpjbGFzczsKLSAgICBkb3VibGUgdGFyZ2V0X2k7Ci0gICAgZG91YmxlIHRhcmdl dF9scmE7Ci0gICAgZG91YmxlIHRhcmdldF90cDsKLSAgICBkb3VibGUgbWVhc3VyZWRfaTsKLSAg ICBkb3VibGUgbWVhc3VyZWRfbHJhOwotICAgIGRvdWJsZSBtZWFzdXJlZF90cDsKLSAgICBkb3Vi bGUgbWVhc3VyZWRfdGhyZXNoOwotICAgIGRvdWJsZSBvZmZzZXQ7Ci0gICAgaW50IGxpbmVhcjsK LSAgICBpbnQgZHVhbF9tb25vOwotICAgIGVudW0gUHJpbnRGb3JtYXQgcHJpbnRfZm9ybWF0Owot Ci0gICAgZG91YmxlICpidWY7Ci0gICAgaW50IGJ1Zl9zaXplOwotICAgIGludCBidWZfaW5kZXg7 Ci0gICAgaW50IHByZXZfYnVmX2luZGV4OwotCi0gICAgZG91YmxlIGRlbHRhWzMwXTsKLSAgICBk b3VibGUgd2VpZ2h0c1syMV07Ci0gICAgZG91YmxlIHByZXZfZGVsdGE7Ci0gICAgaW50IGluZGV4 OwotCi0gICAgZG91YmxlIGdhaW5fcmVkdWN0aW9uWzJdOwotICAgIGRvdWJsZSAqbGltaXRlcl9i dWY7Ci0gICAgZG91YmxlICpwcmV2X3NtcDsKLSAgICBpbnQgbGltaXRlcl9idWZfaW5kZXg7Ci0g ICAgaW50IGxpbWl0ZXJfYnVmX3NpemU7Ci0gICAgZW51bSBMaW1pdGVyU3RhdGUgbGltaXRlcl9z dGF0ZTsKLSAgICBpbnQgcGVha19pbmRleDsKLSAgICBpbnQgZW52X2luZGV4OwotICAgIGludCBl bnZfY250OwotICAgIGludCBhdHRhY2tfbGVuZ3RoOwotICAgIGludCByZWxlYXNlX2xlbmd0aDsK LQotICAgIGludDY0X3QgcHRzWzMwXTsKLSAgICBlbnVtIEZyYW1lVHlwZSBmcmFtZV90eXBlOwot ICAgIGludCBhYm92ZV90aHJlc2hvbGQ7Ci0gICAgaW50IHByZXZfbmJfc2FtcGxlczsKLSAgICBp bnQgY2hhbm5lbHM7Ci0KLSAgICBGRkVCVVIxMjhTdGF0ZSAqcjEyOF9pbjsKLSAgICBGRkVCVVIx MjhTdGF0ZSAqcjEyOF9vdXQ7Ci19IExvdWROb3JtQ29udGV4dDsKLQotI2RlZmluZSBPRkZTRVQo eCkgb2Zmc2V0b2YoTG91ZE5vcm1Db250ZXh0LCB4KQotI2RlZmluZSBGTEFHUyBBVl9PUFRfRkxB R19BVURJT19QQVJBTXxBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0KLQotc3RhdGljIGNvbnN0 IEFWT3B0aW9uIGxvdWRub3JtX29wdGlvbnNbXSA9IHsKLSAgICB7ICJJIiwgICAgICAgICAgICAg ICAgInNldCBpbnRlZ3JhdGVkIGxvdWRuZXNzIHRhcmdldCIsICAgIE9GRlNFVCh0YXJnZXRfaSks ICAgICAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAtMjQufSwgICAtNzAuLCAgICAg ICAtNS4sICBGTEFHUyB9LAotICAgIHsgImkiLCAgICAgICAgICAgICAgICAic2V0IGludGVncmF0 ZWQgbG91ZG5lc3MgdGFyZ2V0IiwgICAgT0ZGU0VUKHRhcmdldF9pKSwgICAgICAgICBBVl9PUFRf VFlQRV9ET1VCTEUsICB7LmRibCA9IC0yNC59LCAgIC03MC4sICAgICAgIC01LiwgIEZMQUdTIH0s Ci0gICAgeyAiTFJBIiwgICAgICAgICAgICAgICJzZXQgbG91ZG5lc3MgcmFuZ2UgdGFyZ2V0Iiwg ICAgICAgICBPRkZTRVQodGFyZ2V0X2xyYSksICAgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsu ZGJsID0gIDcufSwgICAgIDEuLCAgICAgICAgNTAuLCAgRkxBR1MgfSwKLSAgICB7ICJscmEiLCAg ICAgICAgICAgICAgInNldCBsb3VkbmVzcyByYW5nZSB0YXJnZXQiLCAgICAgICAgIE9GRlNFVCh0 YXJnZXRfbHJhKSwgICAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAgNy59LCAgICAg MS4sICAgICAgICA1MC4sICBGTEFHUyB9LAotICAgIHsgIlRQIiwgICAgICAgICAgICAgICAic2V0 IG1heGltdW0gdHJ1ZSBwZWFrIiwgICAgICAgICAgICAgT0ZGU0VUKHRhcmdldF90cCksICAgICAg ICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9IC0yLn0sICAgIC05LiwgICAgICAgICAwLiwg IEZMQUdTIH0sCi0gICAgeyAidHAiLCAgICAgICAgICAgICAgICJzZXQgbWF4aW11bSB0cnVlIHBl YWsiLCAgICAgICAgICAgICBPRkZTRVQodGFyZ2V0X3RwKSwgICAgICAgIEFWX09QVF9UWVBFX0RP VUJMRSwgIHsuZGJsID0gLTIufSwgICAgLTkuLCAgICAgICAgIDAuLCAgRkxBR1MgfSwKLSAgICB7 ICJtZWFzdXJlZF9JIiwgICAgICAgIm1lYXN1cmVkIElMIG9mIGlucHV0IGZpbGUiLCAgICAgICAg IE9GRlNFVChtZWFzdXJlZF9pKSwgICAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAg MC59LCAgICAtOTkuLCAgICAgICAgMC4sICBGTEFHUyB9LAotICAgIHsgIm1lYXN1cmVkX2kiLCAg ICAgICAibWVhc3VyZWQgSUwgb2YgaW5wdXQgZmlsZSIsICAgICAgICAgT0ZGU0VUKG1lYXN1cmVk X2kpLCAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9ICAwLn0sICAgIC05OS4sICAg ICAgICAwLiwgIEZMQUdTIH0sCi0gICAgeyAibWVhc3VyZWRfTFJBIiwgICAgICJtZWFzdXJlZCBM UkEgb2YgaW5wdXQgZmlsZSIsICAgICAgICBPRkZTRVQobWVhc3VyZWRfbHJhKSwgICAgIEFWX09Q VF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gIDAufSwgICAgIDAuLCAgICAgICAgOTkuLCAgRkxBR1Mg fSwKLSAgICB7ICJtZWFzdXJlZF9scmEiLCAgICAgIm1lYXN1cmVkIExSQSBvZiBpbnB1dCBmaWxl IiwgICAgICAgIE9GRlNFVChtZWFzdXJlZF9scmEpLCAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAg ey5kYmwgPSAgMC59LCAgICAgMC4sICAgICAgICA5OS4sICBGTEFHUyB9LAotICAgIHsgIm1lYXN1 cmVkX1RQIiwgICAgICAibWVhc3VyZWQgdHJ1ZSBwZWFrIG9mIGlucHV0IGZpbGUiLCAgT0ZGU0VU KG1lYXN1cmVkX3RwKSwgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9ICA5OS59LCAg IC05OS4sICAgICAgIDk5LiwgIEZMQUdTIH0sCi0gICAgeyAibWVhc3VyZWRfdHAiLCAgICAgICJt ZWFzdXJlZCB0cnVlIHBlYWsgb2YgaW5wdXQgZmlsZSIsICBPRkZTRVQobWVhc3VyZWRfdHApLCAg ICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gIDk5Ln0sICAgLTk5LiwgICAgICAgOTku LCAgRkxBR1MgfSwKLSAgICB7ICJtZWFzdXJlZF90aHJlc2giLCAgIm1lYXN1cmVkIHRocmVzaG9s ZCBvZiBpbnB1dCBmaWxlIiwgIE9GRlNFVChtZWFzdXJlZF90aHJlc2gpLCAgQVZfT1BUX1RZUEVf RE9VQkxFLCAgey5kYmwgPSAtNzAufSwgICAtOTkuLCAgICAgICAgMC4sICBGTEFHUyB9LAotICAg IHsgIm9mZnNldCIsICAgICAgICAgICAic2V0IG9mZnNldCBnYWluIiwgICAgICAgICAgICAgICAg ICAgT0ZGU0VUKG9mZnNldCksICAgICAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9 ICAwLn0sICAgIC05OS4sICAgICAgIDk5LiwgIEZMQUdTIH0sCi0gICAgeyAibGluZWFyIiwgICAg ICAgICAgICJub3JtYWxpemUgbGluZWFybHkgaWYgcG9zc2libGUiLCAgICBPRkZTRVQobGluZWFy KSwgICAgICAgICAgIEFWX09QVF9UWVBFX0JPT0wsICAgIHsuaTY0ID0gIDF9LCAgICAgICAgMCwg ICAgICAgICAxLCAgRkxBR1MgfSwKLSAgICB7ICJkdWFsX21vbm8iLCAgICAgICAgInRyZWF0IG1v bm8gaW5wdXQgYXMgZHVhbC1tb25vIiwgICAgIE9GRlNFVChkdWFsX21vbm8pLCAgICAgICAgQVZf T1BUX1RZUEVfQk9PTCwgICAgey5pNjQgPSAgMH0sICAgICAgICAwLCAgICAgICAgIDEsICBGTEFH UyB9LAotICAgIHsgInByaW50X2Zvcm1hdCIsICAgICAic2V0IHByaW50IGZvcm1hdCBmb3Igc3Rh dHMiLCAgICAgICAgT0ZGU0VUKHByaW50X2Zvcm1hdCksICAgICBBVl9PUFRfVFlQRV9JTlQsICAg ICB7Lmk2NCA9ICBOT05FfSwgIE5PTkUsICBQRl9OQiAtMSwgIEZMQUdTLCAicHJpbnRfZm9ybWF0 IiB9LAotICAgIHsgICAgICJub25lIiwgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwg ICB7Lmk2NCA9ICBOT05FfSwgICAgIDAsICAgICAgICAgMCwgIEZMQUdTLCAicHJpbnRfZm9ybWF0 IiB9LAotICAgIHsgICAgICJqc29uIiwgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwg ICB7Lmk2NCA9ICBKU09OfSwgICAgIDAsICAgICAgICAgMCwgIEZMQUdTLCAicHJpbnRfZm9ybWF0 IiB9LAotICAgIHsgICAgICJzdW1tYXJ5IiwgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwg ICB7Lmk2NCA9ICBTVU1NQVJZfSwgIDAsICAgICAgICAgMCwgIEZMQUdTLCAicHJpbnRfZm9ybWF0 IiB9LAotICAgIHsgTlVMTCB9Ci19OwotCi1BVkZJTFRFUl9ERUZJTkVfQ0xBU1MobG91ZG5vcm0p OwotCi1zdGF0aWMgaW5saW5lIGludCBmcmFtZV9zaXplKGludCBzYW1wbGVfcmF0ZSwgaW50IGZy YW1lX2xlbl9tc2VjKQotewotICAgIGNvbnN0IGludCBmcmFtZV9zaXplID0gcm91bmQoKGRvdWJs ZSlzYW1wbGVfcmF0ZSAqIChmcmFtZV9sZW5fbXNlYyAvIDEwMDAuMCkpOwotICAgIHJldHVybiBm cmFtZV9zaXplICsgKGZyYW1lX3NpemUgJSAyKTsKLX0KLQotc3RhdGljIHZvaWQgaW5pdF9nYXVz c2lhbl9maWx0ZXIoTG91ZE5vcm1Db250ZXh0ICpzKQotewotICAgIGRvdWJsZSB0b3RhbF93ZWln aHQgPSAwLjA7Ci0gICAgY29uc3QgZG91YmxlIHNpZ21hID0gMy41OwotICAgIGRvdWJsZSBhZGp1 c3Q7Ci0gICAgaW50IGk7Ci0KLSAgICBjb25zdCBpbnQgb2Zmc2V0ID0gMjEgLyAyOwotICAgIGNv bnN0IGRvdWJsZSBjMSA9IDEuMCAvIChzaWdtYSAqIHNxcnQoMi4wICogTV9QSSkpOwotICAgIGNv bnN0IGRvdWJsZSBjMiA9IDIuMCAqIHBvdyhzaWdtYSwgMi4wKTsKLQotICAgIGZvciAoaSA9IDA7 IGkgPCAyMTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IGludCB4ID0gaSAtIG9mZnNldDsKLSAgICAg ICAgcy0+d2VpZ2h0c1tpXSA9IGMxICogZXhwKC0ocG93KHgsIDIuMCkgLyBjMikpOwotICAgICAg ICB0b3RhbF93ZWlnaHQgKz0gcy0+d2VpZ2h0c1tpXTsKLSAgICB9Ci0KLSAgICBhZGp1c3QgPSAx LjAgLyB0b3RhbF93ZWlnaHQ7Ci0gICAgZm9yIChpID0gMDsgaSA8IDIxOyBpKyspCi0gICAgICAg IHMtPndlaWdodHNbaV0gKj0gYWRqdXN0OwotfQotCi1zdGF0aWMgZG91YmxlIGdhdXNzaWFuX2Zp bHRlcihMb3VkTm9ybUNvbnRleHQgKnMsIGludCBpbmRleCkKLXsKLSAgICBkb3VibGUgcmVzdWx0 ID0gMC47Ci0gICAgaW50IGk7Ci0KLSAgICBpbmRleCA9IGluZGV4IC0gMTAgPiAwID8gaW5kZXgg LSAxMCA6IGluZGV4ICsgMjA7Ci0gICAgZm9yIChpID0gMDsgaSA8IDIxOyBpKyspCi0gICAgICAg IHJlc3VsdCArPSBzLT5kZWx0YVsoKGluZGV4ICsgaSkgPCAzMCkgPyAoaW5kZXggKyBpKSA6IChp bmRleCArIGkgLSAzMCldICogcy0+d2VpZ2h0c1tpXTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19 Ci0KLXN0YXRpYyB2b2lkIGRldGVjdF9wZWFrKExvdWROb3JtQ29udGV4dCAqcywgaW50IG9mZnNl dCwgaW50IG5iX3NhbXBsZXMsIGludCBjaGFubmVscywgaW50ICpwZWFrX2RlbHRhLCBkb3VibGUg KnBlYWtfdmFsdWUpCi17Ci0gICAgaW50IG4sIGMsIGksIGluZGV4OwotICAgIGRvdWJsZSBjZWls aW5nOwotICAgIGRvdWJsZSAqYnVmOwotCi0gICAgKnBlYWtfZGVsdGEgPSAtMTsKLSAgICBidWYg PSBzLT5saW1pdGVyX2J1ZjsKLSAgICBjZWlsaW5nID0gcy0+dGFyZ2V0X3RwOwotCi0gICAgaW5k ZXggPSBzLT5saW1pdGVyX2J1Zl9pbmRleCArIChvZmZzZXQgKiBjaGFubmVscykgKyAoMTkyMCAq IGNoYW5uZWxzKTsKLSAgICBpZiAoaW5kZXggPj0gcy0+bGltaXRlcl9idWZfc2l6ZSkKLSAgICAg ICAgaW5kZXggLT0gcy0+bGltaXRlcl9idWZfc2l6ZTsKLQotICAgIGlmIChzLT5mcmFtZV90eXBl ID09IEZJUlNUX0ZSQU1FKSB7Ci0gICAgICAgIGZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysr KQotICAgICAgICAgICAgcy0+cHJldl9zbXBbY10gPSBmYWJzKGJ1ZltpbmRleCArIGMgLSBjaGFu bmVsc10pOwotICAgIH0KLQotICAgIGZvciAobiA9IDA7IG4gPCBuYl9zYW1wbGVzOyBuKyspIHsK LSAgICAgICAgZm9yIChjID0gMDsgYyA8IGNoYW5uZWxzOyBjKyspIHsKLSAgICAgICAgICAgIGRv dWJsZSB0aGlzLCBuZXh0LCBtYXhfcGVhazsKLQotICAgICAgICAgICAgdGhpcyA9IGZhYnMoYnVm WyhpbmRleCArIGMpIDwgcy0+bGltaXRlcl9idWZfc2l6ZSA/IChpbmRleCArIGMpIDogKGluZGV4 ICsgYyAtIHMtPmxpbWl0ZXJfYnVmX3NpemUpXSk7Ci0gICAgICAgICAgICBuZXh0ID0gZmFicyhi dWZbKGluZGV4ICsgYyArIGNoYW5uZWxzKSA8IHMtPmxpbWl0ZXJfYnVmX3NpemUgPyAoaW5kZXgg KyBjICsgY2hhbm5lbHMpIDogKGluZGV4ICsgYyArIGNoYW5uZWxzIC0gcy0+bGltaXRlcl9idWZf c2l6ZSldKTsKLQotICAgICAgICAgICAgaWYgKChzLT5wcmV2X3NtcFtjXSA8PSB0aGlzKSAmJiAo bmV4dCA8PSB0aGlzKSAmJiAodGhpcyA+IGNlaWxpbmcpICYmIChuID4gMCkpIHsKLSAgICAgICAg ICAgICAgICBpbnQgZGV0ZWN0ZWQ7Ci0KLSAgICAgICAgICAgICAgICBkZXRlY3RlZCA9IDE7Ci0g ICAgICAgICAgICAgICAgZm9yIChpID0gMjsgaSA8IDEyOyBpKyspIHsKLSAgICAgICAgICAgICAg ICAgICAgbmV4dCA9IGZhYnMoYnVmWyhpbmRleCArIGMgKyAoaSAqIGNoYW5uZWxzKSkgPCBzLT5s aW1pdGVyX2J1Zl9zaXplID8gKGluZGV4ICsgYyArIChpICogY2hhbm5lbHMpKSA6IChpbmRleCAr IGMgKyAoaSAqIGNoYW5uZWxzKSAtIHMtPmxpbWl0ZXJfYnVmX3NpemUpXSk7Ci0gICAgICAgICAg ICAgICAgICAgIGlmIChuZXh0ID4gdGhpcykgewotICAgICAgICAgICAgICAgICAgICAgICAgZGV0 ZWN0ZWQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWRldGVj dGVkKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIGZv ciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj ID09IDAgfHwgZmFicyhidWZbaW5kZXggKyBjXSkgPiBtYXhfcGVhaykKLSAgICAgICAgICAgICAg ICAgICAgICAgIG1heF9wZWFrID0gZmFicyhidWZbaW5kZXggKyBjXSk7Ci0KLSAgICAgICAgICAg ICAgICAgICAgcy0+cHJldl9zbXBbY10gPSBmYWJzKGJ1ZlsoaW5kZXggKyBjKSA8IHMtPmxpbWl0 ZXJfYnVmX3NpemUgPyAoaW5kZXggKyBjKSA6IChpbmRleCArIGMgLSBzLT5saW1pdGVyX2J1Zl9z aXplKV0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICpwZWFrX2RlbHRh ID0gbjsKLSAgICAgICAgICAgICAgICBzLT5wZWFrX2luZGV4ID0gaW5kZXg7Ci0gICAgICAgICAg ICAgICAgKnBlYWtfdmFsdWUgPSBtYXhfcGVhazsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHMtPnByZXZfc21wW2NdID0gdGhpczsKLSAgICAg ICAgfQotCi0gICAgICAgIGluZGV4ICs9IGNoYW5uZWxzOwotICAgICAgICBpZiAoaW5kZXggPj0g cy0+bGltaXRlcl9idWZfc2l6ZSkKLSAgICAgICAgICAgIGluZGV4IC09IHMtPmxpbWl0ZXJfYnVm X3NpemU7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB0cnVlX3BlYWtfbGltaXRlcihMb3VkTm9y bUNvbnRleHQgKnMsIGRvdWJsZSAqb3V0LCBpbnQgbmJfc2FtcGxlcywgaW50IGNoYW5uZWxzKQot ewotICAgIGludCBuLCBjLCBpbmRleCwgcGVha19kZWx0YSwgc21wX2NudDsKLSAgICBkb3VibGUg Y2VpbGluZywgcGVha192YWx1ZTsKLSAgICBkb3VibGUgKmJ1ZjsKLQotICAgIGJ1ZiA9IHMtPmxp bWl0ZXJfYnVmOwotICAgIGNlaWxpbmcgPSBzLT50YXJnZXRfdHA7Ci0gICAgaW5kZXggPSBzLT5s aW1pdGVyX2J1Zl9pbmRleDsKLSAgICBzbXBfY250ID0gMDsKLQotICAgIGlmIChzLT5mcmFtZV90 eXBlID09IEZJUlNUX0ZSQU1FKSB7Ci0gICAgICAgIGRvdWJsZSBtYXg7Ci0KLSAgICAgICAgbWF4 ID0gMC47Ci0gICAgICAgIGZvciAobiA9IDA7IG4gPCAxOTIwOyBuKyspIHsKLSAgICAgICAgICAg IGZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAgICAgIG1heCA9IGZh YnMoYnVmW2NdKSA+IG1heCA/IGZhYnMoYnVmW2NdKSA6IG1heDsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGJ1ZiArPSBjaGFubmVsczsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXgg PiBjZWlsaW5nKSB7Ci0gICAgICAgICAgICBzLT5nYWluX3JlZHVjdGlvblsxXSA9IGNlaWxpbmcg LyBtYXg7Ci0gICAgICAgICAgICBzLT5saW1pdGVyX3N0YXRlID0gU1VTVEFJTjsKLSAgICAgICAg ICAgIGJ1ZiA9IHMtPmxpbWl0ZXJfYnVmOwotCi0gICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwg MTkyMDsgbisrKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IGNoYW5uZWxzOyBj KyspIHsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVudjsKLSAgICAgICAgICAgICAgICAg ICAgZW52ID0gcy0+Z2Fpbl9yZWR1Y3Rpb25bMV07Ci0gICAgICAgICAgICAgICAgICAgIGJ1Zltj XSAqPSBlbnY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJ1ZiArPSBjaGFu bmVsczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGJ1ZiA9IHMtPmxpbWl0 ZXJfYnVmOwotICAgIH0KLQotICAgIGRvIHsKLQotICAgICAgICBzd2l0Y2gocy0+bGltaXRlcl9z dGF0ZSkgewotICAgICAgICBjYXNlIE9VVDoKLSAgICAgICAgICAgIGRldGVjdF9wZWFrKHMsIHNt cF9jbnQsIG5iX3NhbXBsZXMgLSBzbXBfY250LCBjaGFubmVscywgJnBlYWtfZGVsdGEsICZwZWFr X3ZhbHVlKTsKLSAgICAgICAgICAgIGlmIChwZWFrX2RlbHRhICE9IC0xKSB7Ci0gICAgICAgICAg ICAgICAgcy0+ZW52X2NudCA9IDA7Ci0gICAgICAgICAgICAgICAgc21wX2NudCArPSAocGVha19k ZWx0YSAtIHMtPmF0dGFja19sZW5ndGgpOwotICAgICAgICAgICAgICAgIHMtPmdhaW5fcmVkdWN0 aW9uWzBdID0gMS47Ci0gICAgICAgICAgICAgICAgcy0+Z2Fpbl9yZWR1Y3Rpb25bMV0gPSBjZWls aW5nIC8gcGVha192YWx1ZTsKLSAgICAgICAgICAgICAgICBzLT5saW1pdGVyX3N0YXRlID0gQVRU QUNLOwotCi0gICAgICAgICAgICAgICAgcy0+ZW52X2luZGV4ID0gcy0+cGVha19pbmRleCAtIChz LT5hdHRhY2tfbGVuZ3RoICogY2hhbm5lbHMpOwotICAgICAgICAgICAgICAgIGlmIChzLT5lbnZf aW5kZXggPCAwKQotICAgICAgICAgICAgICAgICAgICBzLT5lbnZfaW5kZXggKz0gcy0+bGltaXRl cl9idWZfc2l6ZTsKLQotICAgICAgICAgICAgICAgIHMtPmVudl9pbmRleCArPSAocy0+ZW52X2Nu dCAqIGNoYW5uZWxzKTsKLSAgICAgICAgICAgICAgICBpZiAocy0+ZW52X2luZGV4ID4gcy0+bGlt aXRlcl9idWZfc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcy0+ZW52X2luZGV4IC09IHMtPmxp bWl0ZXJfYnVmX3NpemU7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg c21wX2NudCA9IG5iX3NhbXBsZXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK LQotICAgICAgICBjYXNlIEFUVEFDSzoKLSAgICAgICAgICAgIGZvciAoOyBzLT5lbnZfY250IDwg cy0+YXR0YWNrX2xlbmd0aDsgcy0+ZW52X2NudCsrKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChj ID0gMDsgYyA8IGNoYW5uZWxzOyBjKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVu djsKLSAgICAgICAgICAgICAgICAgICAgZW52ID0gcy0+Z2Fpbl9yZWR1Y3Rpb25bMF0gLSAoKGRv dWJsZSkgcy0+ZW52X2NudCAvIChzLT5hdHRhY2tfbGVuZ3RoIC0gMSkgKiAocy0+Z2Fpbl9yZWR1 Y3Rpb25bMF0gLSBzLT5nYWluX3JlZHVjdGlvblsxXSkpOwotICAgICAgICAgICAgICAgICAgICBi dWZbcy0+ZW52X2luZGV4ICsgY10gKj0gZW52OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg ICAgICAgICAgIHMtPmVudl9pbmRleCArPSBjaGFubmVsczsKLSAgICAgICAgICAgICAgICBpZiAo cy0+ZW52X2luZGV4ID49IHMtPmxpbWl0ZXJfYnVmX3NpemUpCi0gICAgICAgICAgICAgICAgICAg IHMtPmVudl9pbmRleCAtPSBzLT5saW1pdGVyX2J1Zl9zaXplOwotCi0gICAgICAgICAgICAgICAg c21wX2NudCsrOwotICAgICAgICAgICAgICAgIGlmIChzbXBfY250ID49IG5iX3NhbXBsZXMpIHsK LSAgICAgICAgICAgICAgICAgICAgcy0+ZW52X2NudCsrOwotICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm IChzbXBfY250IDwgbmJfc2FtcGxlcykgewotICAgICAgICAgICAgICAgIHMtPmVudl9jbnQgPSAw OwotICAgICAgICAgICAgICAgIHMtPmF0dGFja19sZW5ndGggPSAxOTIwOwotICAgICAgICAgICAg ICAgIHMtPmxpbWl0ZXJfc3RhdGUgPSBTVVNUQUlOOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTVVNUQUlOOgotICAgICAgICAgICAgZGV0ZWN0X3Bl YWsocywgc21wX2NudCwgbmJfc2FtcGxlcywgY2hhbm5lbHMsICZwZWFrX2RlbHRhLCAmcGVha192 YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocGVha19kZWx0YSA9PSAtMSkgewotICAgICAgICAgICAg ICAgIHMtPmxpbWl0ZXJfc3RhdGUgPSBSRUxFQVNFOwotICAgICAgICAgICAgICAgIHMtPmdhaW5f cmVkdWN0aW9uWzBdID0gcy0+Z2Fpbl9yZWR1Y3Rpb25bMV07Ci0gICAgICAgICAgICAgICAgcy0+ Z2Fpbl9yZWR1Y3Rpb25bMV0gPSAxLjsKLSAgICAgICAgICAgICAgICBzLT5lbnZfY250ID0gMDsK LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgZG91YmxlIGdhaW5fcmVkdWN0aW9uOwotICAgICAgICAgICAgICAgIGdhaW5fcmVkdWN0 aW9uID0gY2VpbGluZyAvIHBlYWtfdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ2Fpbl9y ZWR1Y3Rpb24gPCBzLT5nYWluX3JlZHVjdGlvblsxXSkgewotICAgICAgICAgICAgICAgICAgICBz LT5saW1pdGVyX3N0YXRlID0gQVRUQUNLOwotCi0gICAgICAgICAgICAgICAgICAgIHMtPmF0dGFj a19sZW5ndGggPSBwZWFrX2RlbHRhOwotICAgICAgICAgICAgICAgICAgICBpZiAocy0+YXR0YWNr X2xlbmd0aCA8PSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgcy0+YXR0YWNrX2xlbmd0aCA9 ICAyOwotCi0gICAgICAgICAgICAgICAgICAgIHMtPmdhaW5fcmVkdWN0aW9uWzBdID0gcy0+Z2Fp bl9yZWR1Y3Rpb25bMV07Ci0gICAgICAgICAgICAgICAgICAgIHMtPmdhaW5fcmVkdWN0aW9uWzFd ID0gZ2Fpbl9yZWR1Y3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIHMtPmVudl9jbnQgPSAwOwot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg ICAgICAgICBmb3IgKHMtPmVudl9jbnQgPSAwOyBzLT5lbnZfY250IDwgcGVha19kZWx0YTsgcy0+ ZW52X2NudCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCBjaGFubmVs czsgYysrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZW52OwotICAgICAgICAg ICAgICAgICAgICAgICAgZW52ID0gcy0+Z2Fpbl9yZWR1Y3Rpb25bMV07Ci0gICAgICAgICAgICAg ICAgICAgICAgICBidWZbcy0+ZW52X2luZGV4ICsgY10gKj0gZW52OwotICAgICAgICAgICAgICAg ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcy0+ZW52X2luZGV4ICs9IGNoYW5uZWxzOwot ICAgICAgICAgICAgICAgICAgICBpZiAocy0+ZW52X2luZGV4ID49IHMtPmxpbWl0ZXJfYnVmX3Np emUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzLT5lbnZfaW5kZXggLT0gcy0+bGltaXRlcl9i dWZfc2l6ZTsKLQotICAgICAgICAgICAgICAgICAgICBzbXBfY250Kys7Ci0gICAgICAgICAgICAg ICAgICAgIGlmIChzbXBfY250ID49IG5iX3NhbXBsZXMpIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHMtPmVudl9jbnQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBSRUxFQVNFOgotICAgICAgICAgICAgZm9yICg7 IHMtPmVudl9jbnQgPCBzLT5yZWxlYXNlX2xlbmd0aDsgcy0+ZW52X2NudCsrKSB7Ci0gICAgICAg ICAgICAgICAgZm9yIChjID0gMDsgYyA8IGNoYW5uZWxzOyBjKyspIHsKLSAgICAgICAgICAgICAg ICAgICAgZG91YmxlIGVudjsKLSAgICAgICAgICAgICAgICAgICAgZW52ID0gcy0+Z2Fpbl9yZWR1 Y3Rpb25bMF0gKyAoKChkb3VibGUpIHMtPmVudl9jbnQgLyAocy0+cmVsZWFzZV9sZW5ndGggLSAx KSkgKiAocy0+Z2Fpbl9yZWR1Y3Rpb25bMV0gLSBzLT5nYWluX3JlZHVjdGlvblswXSkpOwotICAg ICAgICAgICAgICAgICAgICBidWZbcy0+ZW52X2luZGV4ICsgY10gKj0gZW52OwotICAgICAgICAg ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHMtPmVudl9pbmRleCArPSBjaGFubmVsczsKLSAg ICAgICAgICAgICAgICBpZiAocy0+ZW52X2luZGV4ID49IHMtPmxpbWl0ZXJfYnVmX3NpemUpCi0g ICAgICAgICAgICAgICAgICAgIHMtPmVudl9pbmRleCAtPSBzLT5saW1pdGVyX2J1Zl9zaXplOwot Ci0gICAgICAgICAgICAgICAgc21wX2NudCsrOwotICAgICAgICAgICAgICAgIGlmIChzbXBfY250 ID49IG5iX3NhbXBsZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgcy0+ZW52X2NudCsrOwotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9 Ci0KLSAgICAgICAgICAgIGlmIChzbXBfY250IDwgbmJfc2FtcGxlcykgewotICAgICAgICAgICAg ICAgIHMtPmVudl9jbnQgPSAwOwotICAgICAgICAgICAgICAgIHMtPmxpbWl0ZXJfc3RhdGUgPSBP VVQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg ICB9IHdoaWxlIChzbXBfY250IDwgbmJfc2FtcGxlcyk7Ci0KLSAgICBmb3IgKG4gPSAwOyBuIDwg bmJfc2FtcGxlczsgbisrKSB7Ci0gICAgICAgIGZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysr KSB7Ci0gICAgICAgICAgICBvdXRbY10gPSBidWZbaW5kZXggKyBjXTsKLSAgICAgICAgICAgIGlm IChmYWJzKG91dFtjXSkgPiBjZWlsaW5nKSB7Ci0gICAgICAgICAgICAgICAgb3V0W2NdID0gY2Vp bGluZyAqIChvdXRbY10gPCAwID8gLTEgOiAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgICAgICBvdXQgKz0gY2hhbm5lbHM7Ci0gICAgICAgIGluZGV4ICs9IGNoYW5uZWxzOwotICAg ICAgICBpZiAoaW5kZXggPj0gcy0+bGltaXRlcl9idWZfc2l6ZSkKLSAgICAgICAgICAgIGluZGV4 IC09IHMtPmxpbWl0ZXJfYnVmX3NpemU7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IGZpbHRlcl9m cmFtZShBVkZpbHRlckxpbmsgKmlubGluaywgQVZGcmFtZSAqaW4pCi17Ci0gICAgQVZGaWx0ZXJD b250ZXh0ICpjdHggPSBpbmxpbmstPmRzdDsKLSAgICBMb3VkTm9ybUNvbnRleHQgKnMgPSBjdHgt PnByaXY7Ci0gICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOwotICAg IEFWRnJhbWUgKm91dDsKLSAgICBjb25zdCBkb3VibGUgKnNyYzsKLSAgICBkb3VibGUgKmRzdDsK LSAgICBkb3VibGUgKmJ1ZjsKLSAgICBkb3VibGUgKmxpbWl0ZXJfYnVmOwotICAgIGludCBpLCBu LCBjLCBzdWJmcmFtZV9sZW5ndGgsIHNyY19pbmRleDsKLSAgICBkb3VibGUgZ2FpbiwgZ2Fpbl9u ZXh0LCBlbnZfZ2xvYmFsLCBlbnZfc2hvcnR0ZXJtLAotICAgIGdsb2JhbCwgc2hvcnR0ZXJtLCBs cmEsIHJlbGF0aXZlX3RocmVzaG9sZDsKLQotICAgIGlmIChhdl9mcmFtZV9pc193cml0YWJsZShp bikpIHsKLSAgICAgICAgb3V0ID0gaW47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgb3V0ID0gZmZf Z2V0X2F1ZGlvX2J1ZmZlcihvdXRsaW5rLCBpbi0+bmJfc2FtcGxlcyk7Ci0gICAgICAgIGlmICgh b3V0KSB7Ci0gICAgICAgICAgICBhdl9mcmFtZV9mcmVlKCZpbik7Ci0gICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICB9Ci0gICAgICAgIGF2X2ZyYW1lX2NvcHlfcHJv cHMob3V0LCBpbik7Ci0gICAgfQotCi0gICAgb3V0LT5wdHMgPSBzLT5wdHNbMF07Ci0gICAgbWVt bW92ZShzLT5wdHMsICZzLT5wdHNbMV0sIChGRl9BUlJBWV9FTEVNUyhzLT5wdHMpIC0gMSkgKiBz aXplb2Yocy0+cHRzWzBdKSk7Ci0KLSAgICBzcmMgPSAoY29uc3QgZG91YmxlICopaW4tPmRhdGFb MF07Ci0gICAgZHN0ID0gKGRvdWJsZSAqKW91dC0+ZGF0YVswXTsKLSAgICBidWYgPSBzLT5idWY7 Ci0gICAgbGltaXRlcl9idWYgPSBzLT5saW1pdGVyX2J1ZjsKLQotICAgIGZmX2VidXIxMjhfYWRk X2ZyYW1lc19kb3VibGUocy0+cjEyOF9pbiwgc3JjLCBpbi0+bmJfc2FtcGxlcyk7Ci0KLSAgICBp ZiAocy0+ZnJhbWVfdHlwZSA9PSBGSVJTVF9GUkFNRSAmJiBpbi0+bmJfc2FtcGxlcyA8IGZyYW1l X3NpemUoaW5saW5rLT5zYW1wbGVfcmF0ZSwgMzAwMCkpIHsKLSAgICAgICAgZG91YmxlIG9mZnNl dCwgb2Zmc2V0X3RwLCB0cnVlX3BlYWs7Ci0KLSAgICAgICAgZmZfZWJ1cjEyOF9sb3VkbmVzc19n bG9iYWwocy0+cjEyOF9pbiwgJmdsb2JhbCk7Ci0gICAgICAgIGZvciAoYyA9IDA7IGMgPCBpbmxp bmstPmNoX2xheW91dC5uYl9jaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAgICBkb3VibGUgdG1w OwotICAgICAgICAgICAgZmZfZWJ1cjEyOF9zYW1wbGVfcGVhayhzLT5yMTI4X2luLCBjLCAmdG1w KTsKLSAgICAgICAgICAgIGlmIChjID09IDAgfHwgdG1wID4gdHJ1ZV9wZWFrKQotICAgICAgICAg ICAgICAgIHRydWVfcGVhayA9IHRtcDsKLSAgICAgICAgfQotCi0gICAgICAgIG9mZnNldCAgICA9 IHBvdygxMC4sIChzLT50YXJnZXRfaSAtIGdsb2JhbCkgLyAyMC4pOwotICAgICAgICBvZmZzZXRf dHAgPSB0cnVlX3BlYWsgKiBvZmZzZXQ7Ci0gICAgICAgIHMtPm9mZnNldCA9IG9mZnNldF90cCA8 IHMtPnRhcmdldF90cCA/IG9mZnNldCA6IHMtPnRhcmdldF90cCAvIHRydWVfcGVhazsKLSAgICAg ICAgcy0+ZnJhbWVfdHlwZSA9IExJTkVBUl9NT0RFOwotICAgIH0KLQotICAgIHN3aXRjaCAocy0+ ZnJhbWVfdHlwZSkgewotICAgIGNhc2UgRklSU1RfRlJBTUU6Ci0gICAgICAgIGZvciAobiA9IDA7 IG4gPCBpbi0+bmJfc2FtcGxlczsgbisrKSB7Ci0gICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwg aW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7IGMrKykgewotICAgICAgICAgICAgICAgIGJ1 ZltzLT5idWZfaW5kZXggKyBjXSA9IHNyY1tjXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IHNyYyArPSBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgICAgIHMtPmJ1 Zl9pbmRleCArPSBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgfQotCi0g ICAgICAgIGZmX2VidXIxMjhfbG91ZG5lc3Nfc2hvcnR0ZXJtKHMtPnIxMjhfaW4sICZzaG9ydHRl cm0pOwotCi0gICAgICAgIGlmIChzaG9ydHRlcm0gPCBzLT5tZWFzdXJlZF90aHJlc2gpIHsKLSAg ICAgICAgICAgIHMtPmFib3ZlX3RocmVzaG9sZCA9IDA7Ci0gICAgICAgICAgICBlbnZfc2hvcnR0 ZXJtID0gc2hvcnR0ZXJtIDw9IC03MC4gPyAwLiA6IHMtPnRhcmdldF9pIC0gcy0+bWVhc3VyZWRf aTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHMtPmFib3ZlX3RocmVzaG9sZCA9IDE7 Ci0gICAgICAgICAgICBlbnZfc2hvcnR0ZXJtID0gc2hvcnR0ZXJtIDw9IC03MC4gPyAwLiA6IHMt PnRhcmdldF9pIC0gc2hvcnR0ZXJtOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChuID0gMDsg biA8IDMwOyBuKyspCi0gICAgICAgICAgICBzLT5kZWx0YVtuXSA9IHBvdygxMC4sIGVudl9zaG9y dHRlcm0gLyAyMC4pOwotICAgICAgICBzLT5wcmV2X2RlbHRhID0gcy0+ZGVsdGFbcy0+aW5kZXhd OwotCi0gICAgICAgIHMtPmJ1Zl9pbmRleCA9Ci0gICAgICAgIHMtPmxpbWl0ZXJfYnVmX2luZGV4 ID0gMDsKLQotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgKHMtPmxpbWl0ZXJfYnVmX3NpemUgLyBp bmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVscyk7IG4rKykgewotICAgICAgICAgICAgZm9yIChj ID0gMDsgYyA8IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOyBjKyspIHsKLSAgICAgICAg ICAgICAgICBsaW1pdGVyX2J1ZltzLT5saW1pdGVyX2J1Zl9pbmRleCArIGNdID0gYnVmW3MtPmJ1 Zl9pbmRleCArIGNdICogcy0+ZGVsdGFbcy0+aW5kZXhdICogcy0+b2Zmc2V0OwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgcy0+bGltaXRlcl9idWZfaW5kZXggKz0gaW5saW5rLT5jaF9sYXlv dXQubmJfY2hhbm5lbHM7Ci0gICAgICAgICAgICBpZiAocy0+bGltaXRlcl9idWZfaW5kZXggPj0g cy0+bGltaXRlcl9idWZfc2l6ZSkKLSAgICAgICAgICAgICAgICBzLT5saW1pdGVyX2J1Zl9pbmRl eCAtPSBzLT5saW1pdGVyX2J1Zl9zaXplOwotCi0gICAgICAgICAgICBzLT5idWZfaW5kZXggKz0g aW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7Ci0gICAgICAgIH0KLQotICAgICAgICBzdWJm cmFtZV9sZW5ndGggPSBmcmFtZV9zaXplKGlubGluay0+c2FtcGxlX3JhdGUsIDEwMCk7Ci0gICAg ICAgIHRydWVfcGVha19saW1pdGVyKHMsIGRzdCwgc3ViZnJhbWVfbGVuZ3RoLCBpbmxpbmstPmNo X2xheW91dC5uYl9jaGFubmVscyk7Ci0gICAgICAgIGZmX2VidXIxMjhfYWRkX2ZyYW1lc19kb3Vi bGUocy0+cjEyOF9vdXQsIGRzdCwgc3ViZnJhbWVfbGVuZ3RoKTsKLQotICAgICAgICBvdXQtPm5i X3NhbXBsZXMgPSBzdWJmcmFtZV9sZW5ndGg7Ci0KLSAgICAgICAgcy0+ZnJhbWVfdHlwZSA9IElO TkVSX0ZSQU1FOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSU5ORVJfRlJBTUU6Ci0gICAg ICAgIGdhaW4gICAgICA9IGdhdXNzaWFuX2ZpbHRlcihzLCBzLT5pbmRleCArIDEwIDwgMzAgPyBz LT5pbmRleCArIDEwIDogcy0+aW5kZXggKyAxMCAtIDMwKTsKLSAgICAgICAgZ2Fpbl9uZXh0ID0g Z2F1c3NpYW5fZmlsdGVyKHMsIHMtPmluZGV4ICsgMTEgPCAzMCA/IHMtPmluZGV4ICsgMTEgOiBz LT5pbmRleCArIDExIC0gMzApOwotCi0gICAgICAgIGZvciAobiA9IDA7IG4gPCBpbi0+bmJfc2Ft cGxlczsgbisrKSB7Ci0gICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgaW5saW5rLT5jaF9sYXlv dXQubmJfY2hhbm5lbHM7IGMrKykgewotICAgICAgICAgICAgICAgIGJ1ZltzLT5wcmV2X2J1Zl9p bmRleCArIGNdID0gc3JjW2NdOwotICAgICAgICAgICAgICAgIGxpbWl0ZXJfYnVmW3MtPmxpbWl0 ZXJfYnVmX2luZGV4ICsgY10gPSBidWZbcy0+YnVmX2luZGV4ICsgY10gKiAoZ2FpbiArICgoKGRv dWJsZSkgbiAvIGluLT5uYl9zYW1wbGVzKSAqIChnYWluX25leHQgLSBnYWluKSkpICogcy0+b2Zm c2V0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3JjICs9IGlubGluay0+Y2hfbGF5b3V0 Lm5iX2NoYW5uZWxzOwotCi0gICAgICAgICAgICBzLT5saW1pdGVyX2J1Zl9pbmRleCArPSBpbmxp bmstPmNoX2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgICAgIGlmIChzLT5saW1pdGVyX2J1 Zl9pbmRleCA+PSBzLT5saW1pdGVyX2J1Zl9zaXplKQotICAgICAgICAgICAgICAgIHMtPmxpbWl0 ZXJfYnVmX2luZGV4IC09IHMtPmxpbWl0ZXJfYnVmX3NpemU7Ci0KLSAgICAgICAgICAgIHMtPnBy ZXZfYnVmX2luZGV4ICs9IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwotICAgICAgICAg ICAgaWYgKHMtPnByZXZfYnVmX2luZGV4ID49IHMtPmJ1Zl9zaXplKQotICAgICAgICAgICAgICAg IHMtPnByZXZfYnVmX2luZGV4IC09IHMtPmJ1Zl9zaXplOwotCi0gICAgICAgICAgICBzLT5idWZf aW5kZXggKz0gaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7Ci0gICAgICAgICAgICBpZiAo cy0+YnVmX2luZGV4ID49IHMtPmJ1Zl9zaXplKQotICAgICAgICAgICAgICAgIHMtPmJ1Zl9pbmRl eCAtPSBzLT5idWZfc2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHN1YmZyYW1lX2xlbmd0aCA9 IChmcmFtZV9zaXplKGlubGluay0+c2FtcGxlX3JhdGUsIDEwMCkgLSBpbi0+bmJfc2FtcGxlcykg KiBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgcy0+bGltaXRlcl9idWZf aW5kZXggPSBzLT5saW1pdGVyX2J1Zl9pbmRleCArIHN1YmZyYW1lX2xlbmd0aCA8IHMtPmxpbWl0 ZXJfYnVmX3NpemUgPyBzLT5saW1pdGVyX2J1Zl9pbmRleCArIHN1YmZyYW1lX2xlbmd0aCA6IHMt PmxpbWl0ZXJfYnVmX2luZGV4ICsgc3ViZnJhbWVfbGVuZ3RoIC0gcy0+bGltaXRlcl9idWZfc2l6 ZTsKLQotICAgICAgICB0cnVlX3BlYWtfbGltaXRlcihzLCBkc3QsIGluLT5uYl9zYW1wbGVzLCBp bmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVscyk7Ci0gICAgICAgIGZmX2VidXIxMjhfYWRkX2Zy YW1lc19kb3VibGUocy0+cjEyOF9vdXQsIGRzdCwgaW4tPm5iX3NhbXBsZXMpOwotCi0gICAgICAg IGZmX2VidXIxMjhfbG91ZG5lc3NfcmFuZ2Uocy0+cjEyOF9pbiwgJmxyYSk7Ci0gICAgICAgIGZm X2VidXIxMjhfbG91ZG5lc3NfZ2xvYmFsKHMtPnIxMjhfaW4sICZnbG9iYWwpOwotICAgICAgICBm Zl9lYnVyMTI4X2xvdWRuZXNzX3Nob3J0dGVybShzLT5yMTI4X2luLCAmc2hvcnR0ZXJtKTsKLSAg ICAgICAgZmZfZWJ1cjEyOF9yZWxhdGl2ZV90aHJlc2hvbGQocy0+cjEyOF9pbiwgJnJlbGF0aXZl X3RocmVzaG9sZCk7Ci0KLSAgICAgICAgaWYgKHMtPmFib3ZlX3RocmVzaG9sZCA9PSAwKSB7Ci0g ICAgICAgICAgICBkb3VibGUgc2hvcnR0ZXJtX291dDsKLQotICAgICAgICAgICAgaWYgKHNob3J0 dGVybSA+IHMtPm1lYXN1cmVkX3RocmVzaCkKLSAgICAgICAgICAgICAgICBzLT5wcmV2X2RlbHRh ICo9IDEuMDA1ODsKLQotICAgICAgICAgICAgZmZfZWJ1cjEyOF9sb3VkbmVzc19zaG9ydHRlcm0o cy0+cjEyOF9vdXQsICZzaG9ydHRlcm1fb3V0KTsKLSAgICAgICAgICAgIGlmIChzaG9ydHRlcm1f b3V0ID49IHMtPnRhcmdldF9pKQotICAgICAgICAgICAgICAgIHMtPmFib3ZlX3RocmVzaG9sZCA9 IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2hvcnR0ZXJtIDwgcmVsYXRpdmVfdGhyZXNo b2xkIHx8IHNob3J0dGVybSA8PSAtNzAuIHx8IHMtPmFib3ZlX3RocmVzaG9sZCA9PSAwKSB7Ci0g ICAgICAgICAgICBzLT5kZWx0YVtzLT5pbmRleF0gPSBzLT5wcmV2X2RlbHRhOwotICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgZW52X2dsb2JhbCA9IGZhYnMoc2hvcnR0ZXJtIC0gZ2xvYmFs KSA8IChzLT50YXJnZXRfbHJhIC8gMi4pID8gc2hvcnR0ZXJtIC0gZ2xvYmFsIDogKHMtPnRhcmdl dF9scmEgLyAyLikgKiAoKHNob3J0dGVybSAtIGdsb2JhbCkgPCAwID8gLTEgOiAxKTsKLSAgICAg ICAgICAgIGVudl9zaG9ydHRlcm0gPSBzLT50YXJnZXRfaSAtIHNob3J0dGVybTsKLSAgICAgICAg ICAgIHMtPmRlbHRhW3MtPmluZGV4XSA9IHBvdygxMC4sIChlbnZfZ2xvYmFsICsgZW52X3Nob3J0 dGVybSkgLyAyMC4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcy0+cHJldl9kZWx0YSA9IHMtPmRl bHRhW3MtPmluZGV4XTsKLSAgICAgICAgcy0+aW5kZXgrKzsKLSAgICAgICAgaWYgKHMtPmluZGV4 ID49IDMwKQotICAgICAgICAgICAgcy0+aW5kZXggLT0gMzA7Ci0gICAgICAgIHMtPnByZXZfbmJf c2FtcGxlcyA9IGluLT5uYl9zYW1wbGVzOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRklO QUxfRlJBTUU6Ci0gICAgICAgIGdhaW4gPSBnYXVzc2lhbl9maWx0ZXIocywgcy0+aW5kZXggKyAx MCA8IDMwID8gcy0+aW5kZXggKyAxMCA6IHMtPmluZGV4ICsgMTAgLSAzMCk7Ci0gICAgICAgIHMt PmxpbWl0ZXJfYnVmX2luZGV4ID0gMDsKLSAgICAgICAgc3JjX2luZGV4ID0gMDsKLQotICAgICAg ICBmb3IgKG4gPSAwOyBuIDwgcy0+bGltaXRlcl9idWZfc2l6ZSAvIGlubGluay0+Y2hfbGF5b3V0 Lm5iX2NoYW5uZWxzOyBuKyspIHsKLSAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCBpbmxpbmst PmNoX2xheW91dC5uYl9jaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAgICAgICAgcy0+bGltaXRl cl9idWZbcy0+bGltaXRlcl9idWZfaW5kZXggKyBjXSA9IHNyY1tzcmNfaW5kZXggKyBjXSAqIGdh aW4gKiBzLT5vZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzcmNfaW5kZXggKz0g aW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7Ci0KLSAgICAgICAgICAgIHMtPmxpbWl0ZXJf YnVmX2luZGV4ICs9IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwotICAgICAgICAgICAg aWYgKHMtPmxpbWl0ZXJfYnVmX2luZGV4ID49IHMtPmxpbWl0ZXJfYnVmX3NpemUpCi0gICAgICAg ICAgICAgICAgcy0+bGltaXRlcl9idWZfaW5kZXggLT0gcy0+bGltaXRlcl9idWZfc2l6ZTsKLSAg ICAgICAgfQotCi0gICAgICAgIHN1YmZyYW1lX2xlbmd0aCA9IGZyYW1lX3NpemUoaW5saW5rLT5z YW1wbGVfcmF0ZSwgMTAwKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGluLT5uYl9zYW1wbGVz IC8gc3ViZnJhbWVfbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHRydWVfcGVha19saW1pdGVy KHMsIGRzdCwgc3ViZnJhbWVfbGVuZ3RoLCBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVscyk7 Ci0KLSAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBzdWJmcmFtZV9sZW5ndGg7IG4rKykgewot ICAgICAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFu bmVsczsgYysrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzcmNfaW5kZXggPCAoaW4tPm5i X3NhbXBsZXMgKiBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVscykpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGxpbWl0ZXJfYnVmW3MtPmxpbWl0ZXJfYnVmX2luZGV4ICsgY10gPSBzcmNb c3JjX2luZGV4ICsgY10gKiBnYWluICogcy0+b2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRlcl9idWZbcy0+bGltaXRlcl9i dWZfaW5kZXggKyBjXSA9IDAuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHNyY19pbmRleCA8IChpbi0+bmJfc2FtcGxlcyAq IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzKSkKLSAgICAgICAgICAgICAgICAgICAgc3Jj X2luZGV4ICs9IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwotCi0gICAgICAgICAgICAg ICAgcy0+bGltaXRlcl9idWZfaW5kZXggKz0gaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7 Ci0gICAgICAgICAgICAgICAgaWYgKHMtPmxpbWl0ZXJfYnVmX2luZGV4ID49IHMtPmxpbWl0ZXJf YnVmX3NpemUpCi0gICAgICAgICAgICAgICAgICAgIHMtPmxpbWl0ZXJfYnVmX2luZGV4IC09IHMt PmxpbWl0ZXJfYnVmX3NpemU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRzdCArPSAo c3ViZnJhbWVfbGVuZ3RoICogaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMpOwotICAgICAg ICB9Ci0KLSAgICAgICAgZHN0ID0gKGRvdWJsZSAqKW91dC0+ZGF0YVswXTsKLSAgICAgICAgZmZf ZWJ1cjEyOF9hZGRfZnJhbWVzX2RvdWJsZShzLT5yMTI4X291dCwgZHN0LCBpbi0+bmJfc2FtcGxl cyk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBMSU5FQVJfTU9ERToKLSAgICAgICAgZm9y IChuID0gMDsgbiA8IGluLT5uYl9zYW1wbGVzOyBuKyspIHsKLSAgICAgICAgICAgIGZvciAoYyA9 IDA7IGMgPCBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAg ICAgICAgZHN0W2NdID0gc3JjW2NdICogcy0+b2Zmc2V0OwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgc3JjICs9IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwotICAgICAgICAgICAg ZHN0ICs9IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwotICAgICAgICB9Ci0KLSAgICAg ICAgZHN0ID0gKGRvdWJsZSAqKW91dC0+ZGF0YVswXTsKLSAgICAgICAgZmZfZWJ1cjEyOF9hZGRf ZnJhbWVzX2RvdWJsZShzLT5yMTI4X291dCwgZHN0LCBpbi0+bmJfc2FtcGxlcyk7Ci0gICAgICAg IGJyZWFrOwotICAgIH0KLQotICAgIGlmIChpbiAhPSBvdXQpCi0gICAgICAgIGF2X2ZyYW1lX2Zy ZWUoJmluKTsKLSAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIG91dCk7Ci19Ci0K LXN0YXRpYyBpbnQgZmx1c2hfZnJhbWUoQVZGaWx0ZXJMaW5rICpvdXRsaW5rKQotewotICAgIEFW RmlsdGVyQ29udGV4dCAqY3R4ID0gb3V0bGluay0+c3JjOwotICAgIEFWRmlsdGVyTGluayAqaW5s aW5rID0gY3R4LT5pbnB1dHNbMF07Ci0gICAgTG91ZE5vcm1Db250ZXh0ICpzID0gY3R4LT5wcml2 OwotICAgIGludCByZXQgPSAwOwotCi0gICAgaWYgKHMtPmZyYW1lX3R5cGUgPT0gSU5ORVJfRlJB TUUpIHsKLSAgICAgICAgZG91YmxlICpzcmM7Ci0gICAgICAgIGRvdWJsZSAqYnVmOwotICAgICAg ICBpbnQgbmJfc2FtcGxlcywgbiwgYywgb2Zmc2V0OwotICAgICAgICBBVkZyYW1lICpmcmFtZTsK LQotICAgICAgICBuYl9zYW1wbGVzICA9IChzLT5idWZfc2l6ZSAvIGlubGluay0+Y2hfbGF5b3V0 Lm5iX2NoYW5uZWxzKSAtIHMtPnByZXZfbmJfc2FtcGxlczsKLSAgICAgICAgbmJfc2FtcGxlcyAt PSAoZnJhbWVfc2l6ZShpbmxpbmstPnNhbXBsZV9yYXRlLCAxMDApIC0gcy0+cHJldl9uYl9zYW1w bGVzKTsKLQotICAgICAgICBmcmFtZSA9IGZmX2dldF9hdWRpb19idWZmZXIob3V0bGluaywgbmJf c2FtcGxlcyk7Ci0gICAgICAgIGlmICghZnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwotICAgICAgICBmcmFtZS0+bmJfc2FtcGxlcyA9IG5iX3NhbXBsZXM7Ci0KLSAg ICAgICAgYnVmID0gcy0+YnVmOwotICAgICAgICBzcmMgPSAoZG91YmxlICopZnJhbWUtPmRhdGFb MF07Ci0KLSAgICAgICAgb2Zmc2V0ICA9ICgocy0+bGltaXRlcl9idWZfc2l6ZSAvIGlubGluay0+ Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzKSAtIHMtPnByZXZfbmJfc2FtcGxlcykgKiBpbmxpbmstPmNo X2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgb2Zmc2V0IC09IChmcmFtZV9zaXplKGlubGlu ay0+c2FtcGxlX3JhdGUsIDEwMCkgLSBzLT5wcmV2X25iX3NhbXBsZXMpICogaW5saW5rLT5jaF9s YXlvdXQubmJfY2hhbm5lbHM7Ci0gICAgICAgIHMtPmJ1Zl9pbmRleCA9IHMtPmJ1Zl9pbmRleCAt IG9mZnNldCA8IDAgPyBzLT5idWZfaW5kZXggLSBvZmZzZXQgKyBzLT5idWZfc2l6ZSA6IHMtPmJ1 Zl9pbmRleCAtIG9mZnNldDsKLQotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbmJfc2FtcGxlczsg bisrKSB7Ci0gICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgaW5saW5rLT5jaF9sYXlvdXQubmJf Y2hhbm5lbHM7IGMrKykgewotICAgICAgICAgICAgICAgIHNyY1tjXSA9IGJ1ZltzLT5idWZfaW5k ZXggKyBjXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNyYyArPSBpbmxpbmstPmNoX2xh eW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgICAgIHMtPmJ1Zl9pbmRleCArPSBpbmxpbmstPmNo X2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgICAgIGlmIChzLT5idWZfaW5kZXggPj0gcy0+ YnVmX3NpemUpCi0gICAgICAgICAgICAgICAgcy0+YnVmX2luZGV4IC09IHMtPmJ1Zl9zaXplOwot ICAgICAgICB9Ci0KLSAgICAgICAgcy0+ZnJhbWVfdHlwZSA9IEZJTkFMX0ZSQU1FOwotICAgICAg ICByZXQgPSBmaWx0ZXJfZnJhbWUoaW5saW5rLCBmcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBy ZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYWN0aXZhdGUoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCi17Ci0g ICAgQVZGaWx0ZXJMaW5rICppbmxpbmsgPSBjdHgtPmlucHV0c1swXTsKLSAgICBBVkZpbHRlckxp bmsgKm91dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07Ci0gICAgTG91ZE5vcm1Db250ZXh0ICpzID0g Y3R4LT5wcml2OwotICAgIEFWRnJhbWUgKmluID0gTlVMTDsKLSAgICBpbnQgcmV0ID0gMCwgc3Rh dHVzOwotICAgIGludDY0X3QgcHRzOwotCi0gICAgRkZfRklMVEVSX0ZPUldBUkRfU1RBVFVTX0JB Q0sob3V0bGluaywgaW5saW5rKTsKLQotICAgIGlmIChzLT5mcmFtZV90eXBlICE9IExJTkVBUl9N T0RFKSB7Ci0gICAgICAgIGludCBuYl9zYW1wbGVzOwotCi0gICAgICAgIGlmIChzLT5mcmFtZV90 eXBlID09IEZJUlNUX0ZSQU1FKSB7Ci0gICAgICAgICAgICBuYl9zYW1wbGVzID0gZnJhbWVfc2l6 ZShpbmxpbmstPnNhbXBsZV9yYXRlLCAzMDAwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIG5iX3NhbXBsZXMgPSBmcmFtZV9zaXplKGlubGluay0+c2FtcGxlX3JhdGUsIDEwMCk7Ci0g ICAgICAgIH0KLQotICAgICAgICByZXQgPSBmZl9pbmxpbmtfY29uc3VtZV9zYW1wbGVzKGlubGlu aywgbmJfc2FtcGxlcywgbmJfc2FtcGxlcywgJmluKTsKLSAgICB9IGVsc2UgewotICAgICAgICBy ZXQgPSBmZl9pbmxpbmtfY29uc3VtZV9mcmFtZShpbmxpbmssICZpbik7Ci0gICAgfQotCi0gICAg aWYgKHJldCA8IDApCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgaWYgKHJldCA+IDApIHsKLSAg ICAgICAgaWYgKHMtPmZyYW1lX3R5cGUgPT0gRklSU1RfRlJBTUUpIHsKLSAgICAgICAgICAgIGNv bnN0IGludCBuYl9zYW1wbGVzID0gZnJhbWVfc2l6ZShpbmxpbmstPnNhbXBsZV9yYXRlLCAxMDAp OwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHMtPnB0 cyk7IGkrKykKLSAgICAgICAgICAgICAgICBzLT5wdHNbaV0gPSBpbi0+cHRzICsgaSAqIG5iX3Nh bXBsZXM7Ci0gICAgICAgIH0gZWxzZSBpZiAocy0+ZnJhbWVfdHlwZSA9PSBMSU5FQVJfTU9ERSkg ewotICAgICAgICAgICAgcy0+cHRzWzBdID0gaW4tPnB0czsKLSAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgIHMtPnB0c1tGRl9BUlJBWV9FTEVNUyhzLT5wdHMpIC0gMV0gPSBpbi0+cHRzOwot ICAgICAgICB9Ci0gICAgICAgIHJldCA9IGZpbHRlcl9mcmFtZShpbmxpbmssIGluKTsKLSAgICB9 Ci0gICAgaWYgKHJldCA8IDApCi0gICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICBpZiAoZmZfaW5s aW5rX2Fja25vd2xlZGdlX3N0YXR1cyhpbmxpbmssICZzdGF0dXMsICZwdHMpKSB7Ci0gICAgICAg IGZmX291dGxpbmtfc2V0X3N0YXR1cyhvdXRsaW5rLCBzdGF0dXMsIHB0cyk7Ci0gICAgICAgIHJl dHVybiBmbHVzaF9mcmFtZShvdXRsaW5rKTsKLSAgICB9Ci0KLSAgICBGRl9GSUxURVJfRk9SV0FS RF9XQU5URUQob3V0bGluaywgaW5saW5rKTsKLQotICAgIHJldHVybiBGRkVSUk9SX05PVF9SRUFE WTsKLX0KLQotc3RhdGljIGludCBxdWVyeV9mb3JtYXRzKEFWRmlsdGVyQ29udGV4dCAqY3R4KQot ewotICAgIExvdWROb3JtQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBzdGF0aWMgY29uc3Qg aW50IGlucHV0X3NyYXRlW10gPSB7MTkyMDAwLCAtMX07Ci0gICAgc3RhdGljIGNvbnN0IGVudW0g QVZTYW1wbGVGb3JtYXQgc2FtcGxlX2ZtdHNbXSA9IHsKLSAgICAgICAgICAgIEFWX1NBTVBMRV9G TVRfREJMLAotICAgICAgICAgICAgQVZfU0FNUExFX0ZNVF9OT05FCi0gICAgfTsKLSAgICBpbnQg cmV0ID0gZmZfc2V0X2NvbW1vbl9hbGxfY2hhbm5lbF9jb3VudHMoY3R4KTsKLSAgICBpZiAocmV0 IDwgMCkKLSAgICAgICAgcmV0dXJuIHJldDsKLQotICAgIHJldCA9IGZmX3NldF9jb21tb25fZm9y bWF0c19mcm9tX2xpc3QoY3R4LCBzYW1wbGVfZm10cyk7Ci0gICAgaWYgKHJldCA8IDApCi0gICAg ICAgIHJldHVybiByZXQ7Ci0KLSAgICBpZiAocy0+ZnJhbWVfdHlwZSA9PSBMSU5FQVJfTU9ERSkg ewotICAgICAgICByZXR1cm4gZmZfc2V0X2NvbW1vbl9hbGxfc2FtcGxlcmF0ZXMoY3R4KTsKLSAg ICB9IGVsc2UgewotICAgICAgICByZXR1cm4gZmZfc2V0X2NvbW1vbl9zYW1wbGVyYXRlc19mcm9t X2xpc3QoY3R4LCBpbnB1dF9zcmF0ZSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IGNvbmZpZ19p bnB1dChBVkZpbHRlckxpbmsgKmlubGluaykKLXsKLSAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9 IGlubGluay0+ZHN0OwotICAgIExvdWROb3JtQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLQotICAg IHMtPnIxMjhfaW4gPSBmZl9lYnVyMTI4X2luaXQoaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5l bHMsIGlubGluay0+c2FtcGxlX3JhdGUsIDAsIEZGX0VCVVIxMjhfTU9ERV9JIHwgRkZfRUJVUjEy OF9NT0RFX1MgfCBGRl9FQlVSMTI4X01PREVfTFJBIHwgRkZfRUJVUjEyOF9NT0RFX1NBTVBMRV9Q RUFLKTsKLSAgICBpZiAoIXMtPnIxMjhfaW4pCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7Ci0KLSAgICBzLT5yMTI4X291dCA9IGZmX2VidXIxMjhfaW5pdChpbmxpbmstPmNoX2xheW91 dC5uYl9jaGFubmVscywgaW5saW5rLT5zYW1wbGVfcmF0ZSwgMCwgRkZfRUJVUjEyOF9NT0RFX0kg fCBGRl9FQlVSMTI4X01PREVfUyB8IEZGX0VCVVIxMjhfTU9ERV9MUkEgfCBGRl9FQlVSMTI4X01P REVfU0FNUExFX1BFQUspOwotICAgIGlmICghcy0+cjEyOF9vdXQpCi0gICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7Ci0KLSAgICBpZiAoaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMg PT0gMSAmJiBzLT5kdWFsX21vbm8pIHsKLSAgICAgICAgZmZfZWJ1cjEyOF9zZXRfY2hhbm5lbChz LT5yMTI4X2luLCAgMCwgRkZfRUJVUjEyOF9EVUFMX01PTk8pOwotICAgICAgICBmZl9lYnVyMTI4 X3NldF9jaGFubmVsKHMtPnIxMjhfb3V0LCAwLCBGRl9FQlVSMTI4X0RVQUxfTU9OTyk7Ci0gICAg fQotCi0gICAgcy0+YnVmX3NpemUgPSBmcmFtZV9zaXplKGlubGluay0+c2FtcGxlX3JhdGUsIDMw MDApICogaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7Ci0gICAgcy0+YnVmID0gYXZfbWFs bG9jX2FycmF5KHMtPmJ1Zl9zaXplLCBzaXplb2YoKnMtPmJ1ZikpOwotICAgIGlmICghcy0+YnVm KQotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgcy0+bGltaXRlcl9idWZf c2l6ZSA9IGZyYW1lX3NpemUoaW5saW5rLT5zYW1wbGVfcmF0ZSwgMjEwKSAqIGlubGluay0+Y2hf bGF5b3V0Lm5iX2NoYW5uZWxzOwotICAgIHMtPmxpbWl0ZXJfYnVmID0gYXZfbWFsbG9jX2FycmF5 KHMtPmJ1Zl9zaXplLCBzaXplb2YoKnMtPmxpbWl0ZXJfYnVmKSk7Ci0gICAgaWYgKCFzLT5saW1p dGVyX2J1ZikKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgIHMtPnByZXZf c21wID0gYXZfbWFsbG9jX2FycmF5KGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzLCBzaXpl b2YoKnMtPnByZXZfc21wKSk7Ci0gICAgaWYgKCFzLT5wcmV2X3NtcCkKLSAgICAgICAgcmV0dXJu IEFWRVJST1IoRU5PTUVNKTsKLQotICAgIGluaXRfZ2F1c3NpYW5fZmlsdGVyKHMpOwotCi0gICAg cy0+YnVmX2luZGV4ID0KLSAgICBzLT5wcmV2X2J1Zl9pbmRleCA9Ci0gICAgcy0+bGltaXRlcl9i dWZfaW5kZXggPSAwOwotICAgIHMtPmNoYW5uZWxzID0gaW5saW5rLT5jaF9sYXlvdXQubmJfY2hh bm5lbHM7Ci0gICAgcy0+aW5kZXggPSAxOwotICAgIHMtPmxpbWl0ZXJfc3RhdGUgPSBPVVQ7Ci0g ICAgcy0+b2Zmc2V0ID0gcG93KDEwLiwgcy0+b2Zmc2V0IC8gMjAuKTsKLSAgICBzLT50YXJnZXRf dHAgPSBwb3coMTAuLCBzLT50YXJnZXRfdHAgLyAyMC4pOwotICAgIHMtPmF0dGFja19sZW5ndGgg PSBmcmFtZV9zaXplKGlubGluay0+c2FtcGxlX3JhdGUsIDEwKTsKLSAgICBzLT5yZWxlYXNlX2xl bmd0aCA9IGZyYW1lX3NpemUoaW5saW5rLT5zYW1wbGVfcmF0ZSwgMTAwKTsKLQotICAgIHJldHVy biAwOwotfQotCi1zdGF0aWMgYXZfY29sZCBpbnQgaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkK LXsKLSAgICBMb3VkTm9ybUNvbnRleHQgKnMgPSBjdHgtPnByaXY7Ci0gICAgcy0+ZnJhbWVfdHlw ZSA9IEZJUlNUX0ZSQU1FOwotCi0gICAgaWYgKHMtPmxpbmVhcikgewotICAgICAgICBkb3VibGUg b2Zmc2V0LCBvZmZzZXRfdHA7Ci0gICAgICAgIG9mZnNldCAgICA9IHMtPnRhcmdldF9pIC0gcy0+ bWVhc3VyZWRfaTsKLSAgICAgICAgb2Zmc2V0X3RwID0gcy0+bWVhc3VyZWRfdHAgKyBvZmZzZXQ7 Ci0KLSAgICAgICAgaWYgKHMtPm1lYXN1cmVkX3RwICE9IDk5ICYmIHMtPm1lYXN1cmVkX3RocmVz aCAhPSAtNzAgJiYgcy0+bWVhc3VyZWRfbHJhICE9IDAgJiYgcy0+bWVhc3VyZWRfaSAhPSAwKSB7 Ci0gICAgICAgICAgICBpZiAoKG9mZnNldF90cCA8PSBzLT50YXJnZXRfdHApICYmIChzLT5tZWFz dXJlZF9scmEgPD0gcy0+dGFyZ2V0X2xyYSkpIHsKLSAgICAgICAgICAgICAgICBzLT5mcmFtZV90 eXBlID0gTElORUFSX01PREU7Ci0gICAgICAgICAgICAgICAgcy0+b2Zmc2V0ID0gb2Zmc2V0Owot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBhdl9jb2xkIHZvaWQgdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQotewotICAgIExv dWROb3JtQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBkb3VibGUgaV9pbiwgaV9vdXQsIGxy YV9pbiwgbHJhX291dCwgdGhyZXNoX2luLCB0aHJlc2hfb3V0LCB0cF9pbiwgdHBfb3V0OwotICAg IGludCBjOwotCi0gICAgaWYgKCFzLT5yMTI4X2luIHx8ICFzLT5yMTI4X291dCkKLSAgICAgICAg Z290byBlbmQ7Ci0KLSAgICBmZl9lYnVyMTI4X2xvdWRuZXNzX3JhbmdlKHMtPnIxMjhfaW4sICZs cmFfaW4pOwotICAgIGZmX2VidXIxMjhfbG91ZG5lc3NfZ2xvYmFsKHMtPnIxMjhfaW4sICZpX2lu KTsKLSAgICBmZl9lYnVyMTI4X3JlbGF0aXZlX3RocmVzaG9sZChzLT5yMTI4X2luLCAmdGhyZXNo X2luKTsKLSAgICBmb3IgKGMgPSAwOyBjIDwgcy0+Y2hhbm5lbHM7IGMrKykgewotICAgICAgICBk b3VibGUgdG1wOwotICAgICAgICBmZl9lYnVyMTI4X3NhbXBsZV9wZWFrKHMtPnIxMjhfaW4sIGMs ICZ0bXApOwotICAgICAgICBpZiAoKGMgPT0gMCkgfHwgKHRtcCA+IHRwX2luKSkKLSAgICAgICAg ICAgIHRwX2luID0gdG1wOwotICAgIH0KLQotICAgIGZmX2VidXIxMjhfbG91ZG5lc3NfcmFuZ2Uo cy0+cjEyOF9vdXQsICZscmFfb3V0KTsKLSAgICBmZl9lYnVyMTI4X2xvdWRuZXNzX2dsb2JhbChz LT5yMTI4X291dCwgJmlfb3V0KTsKLSAgICBmZl9lYnVyMTI4X3JlbGF0aXZlX3RocmVzaG9sZChz LT5yMTI4X291dCwgJnRocmVzaF9vdXQpOwotICAgIGZvciAoYyA9IDA7IGMgPCBzLT5jaGFubmVs czsgYysrKSB7Ci0gICAgICAgIGRvdWJsZSB0bXA7Ci0gICAgICAgIGZmX2VidXIxMjhfc2FtcGxl X3BlYWsocy0+cjEyOF9vdXQsIGMsICZ0bXApOwotICAgICAgICBpZiAoKGMgPT0gMCkgfHwgKHRt cCA+IHRwX291dCkpCi0gICAgICAgICAgICB0cF9vdXQgPSB0bXA7Ci0gICAgfQotCi0gICAgc3dp dGNoKHMtPnByaW50X2Zvcm1hdCkgewotICAgIGNhc2UgTk9ORToKLSAgICAgICAgYnJlYWs7Ci0K LSAgICBjYXNlIEpTT046Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLAotICAgICAg ICAgICAgIlxue1xuIgotICAgICAgICAgICAgIlx0XCJpbnB1dF9pXCIgOiBcIiUuMmZcIixcbiIK LSAgICAgICAgICAgICJcdFwiaW5wdXRfdHBcIiA6IFwiJS4yZlwiLFxuIgotICAgICAgICAgICAg Ilx0XCJpbnB1dF9scmFcIiA6IFwiJS4yZlwiLFxuIgotICAgICAgICAgICAgIlx0XCJpbnB1dF90 aHJlc2hcIiA6IFwiJS4yZlwiLFxuIgotICAgICAgICAgICAgIlx0XCJvdXRwdXRfaVwiIDogXCIl LjJmXCIsXG4iCi0gICAgICAgICAgICAiXHRcIm91dHB1dF90cFwiIDogXCIlKy4yZlwiLFxuIgot ICAgICAgICAgICAgIlx0XCJvdXRwdXRfbHJhXCIgOiBcIiUuMmZcIixcbiIKLSAgICAgICAgICAg ICJcdFwib3V0cHV0X3RocmVzaFwiIDogXCIlLjJmXCIsXG4iCi0gICAgICAgICAgICAiXHRcIm5v cm1hbGl6YXRpb25fdHlwZVwiIDogXCIlc1wiLFxuIgotICAgICAgICAgICAgIlx0XCJ0YXJnZXRf b2Zmc2V0XCIgOiBcIiUuMmZcIlxuIgotICAgICAgICAgICAgIn1cbiIsCi0gICAgICAgICAgICBp X2luLAotICAgICAgICAgICAgMjAuICogbG9nMTAodHBfaW4pLAotICAgICAgICAgICAgbHJhX2lu LAotICAgICAgICAgICAgdGhyZXNoX2luLAotICAgICAgICAgICAgaV9vdXQsCi0gICAgICAgICAg ICAyMC4gKiBsb2cxMCh0cF9vdXQpLAotICAgICAgICAgICAgbHJhX291dCwKLSAgICAgICAgICAg IHRocmVzaF9vdXQsCi0gICAgICAgICAgICBzLT5mcmFtZV90eXBlID09IExJTkVBUl9NT0RFID8g ImxpbmVhciIgOiAiZHluYW1pYyIsCi0gICAgICAgICAgICBzLT50YXJnZXRfaSAtIGlfb3V0Ci0g ICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTVU1NQVJZOgotICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfSU5GTywKLSAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICJJ bnB1dCBJbnRlZ3JhdGVkOiAgICUrNi4xZiBMVUZTXG4iCi0gICAgICAgICAgICAiSW5wdXQgVHJ1 ZSBQZWFrOiAgICAlKzYuMWYgZEJUUFxuIgotICAgICAgICAgICAgIklucHV0IExSQTogICAgICAg ICAgJTYuMWYgTFVcbiIKLSAgICAgICAgICAgICJJbnB1dCBUaHJlc2hvbGQ6ICAgICUrNi4xZiBM VUZTXG4iCi0gICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAiT3V0cHV0IEludGVncmF0ZWQ6 ICAlKzYuMWYgTFVGU1xuIgotICAgICAgICAgICAgIk91dHB1dCBUcnVlIFBlYWs6ICAgJSs2LjFm IGRCVFBcbiIKLSAgICAgICAgICAgICJPdXRwdXQgTFJBOiAgICAgICAgICU2LjFmIExVXG4iCi0g ICAgICAgICAgICAiT3V0cHV0IFRocmVzaG9sZDogICAlKzYuMWYgTFVGU1xuIgotICAgICAgICAg ICAgIlxuIgotICAgICAgICAgICAgIk5vcm1hbGl6YXRpb24gVHlwZTogICAlc1xuIgotICAgICAg ICAgICAgIlRhcmdldCBPZmZzZXQ6ICAgICAgJSs2LjFmIExVXG4iLAotICAgICAgICAgICAgaV9p biwKLSAgICAgICAgICAgIDIwLiAqIGxvZzEwKHRwX2luKSwKLSAgICAgICAgICAgIGxyYV9pbiwK LSAgICAgICAgICAgIHRocmVzaF9pbiwKLSAgICAgICAgICAgIGlfb3V0LAotICAgICAgICAgICAg MjAuICogbG9nMTAodHBfb3V0KSwKLSAgICAgICAgICAgIGxyYV9vdXQsCi0gICAgICAgICAgICB0 aHJlc2hfb3V0LAotICAgICAgICAgICAgcy0+ZnJhbWVfdHlwZSA9PSBMSU5FQVJfTU9ERSA/ICJM aW5lYXIiIDogIkR5bmFtaWMiLAotICAgICAgICAgICAgcy0+dGFyZ2V0X2kgLSBpX291dAotICAg ICAgICApOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLWVuZDoKLSAgICBpZiAocy0+cjEyOF9p bikKLSAgICAgICAgZmZfZWJ1cjEyOF9kZXN0cm95KCZzLT5yMTI4X2luKTsKLSAgICBpZiAocy0+ cjEyOF9vdXQpCi0gICAgICAgIGZmX2VidXIxMjhfZGVzdHJveSgmcy0+cjEyOF9vdXQpOwotICAg IGF2X2ZyZWVwKCZzLT5saW1pdGVyX2J1Zik7Ci0gICAgYXZfZnJlZXAoJnMtPnByZXZfc21wKTsK LSAgICBhdl9mcmVlcCgmcy0+YnVmKTsKLX0KLQotc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIGF2 ZmlsdGVyX2FmX2xvdWRub3JtX2lucHV0c1tdID0gewotICAgIHsKLSAgICAgICAgLm5hbWUgICAg ICAgICA9ICJkZWZhdWx0IiwKLSAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9B VURJTywKLSAgICAgICAgLmNvbmZpZ19wcm9wcyA9IGNvbmZpZ19pbnB1dCwKLSAgICB9LAotfTsK LQotY29uc3QgQVZGaWx0ZXIgZmZfYWZfbG91ZG5vcm0gPSB7Ci0gICAgLm5hbWUgICAgICAgICAg PSAibG91ZG5vcm0iLAotICAgIC5kZXNjcmlwdGlvbiAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwo IkVCVSBSMTI4IGxvdWRuZXNzIG5vcm1hbGl6YXRpb24iKSwKLSAgICAucHJpdl9zaXplICAgICA9 IHNpemVvZihMb3VkTm9ybUNvbnRleHQpLAotICAgIC5wcml2X2NsYXNzICAgID0gJmxvdWRub3Jt X2NsYXNzLAotICAgIC5pbml0ICAgICAgICAgID0gaW5pdCwKLSAgICAuYWN0aXZhdGUgICAgICA9 IGFjdGl2YXRlLAotICAgIC51bmluaXQgICAgICAgID0gdW5pbml0LAotICAgIEZJTFRFUl9JTlBV VFMoYXZmaWx0ZXJfYWZfbG91ZG5vcm1faW5wdXRzKSwKLSAgICBGSUxURVJfT1VUUFVUUyhmZl9h dWRpb19kZWZhdWx0X2ZpbHRlcnBhZCksCi0gICAgRklMVEVSX1FVRVJZX0ZVTkMocXVlcnlfZm9y bWF0cyksCi19OwpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvZWJ1cjEyOC5jIGIvbGliYXZmaWx0 ZXIvZWJ1cjEyOC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjIwOTllMjA2Li4w MDAwMDAwMDAwCi0tLSBhL2xpYmF2ZmlsdGVyL2VidXIxMjguYworKysgL2Rldi9udWxsCkBAIC0x LDcyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDExIEphbiBLb2tlbcO8bGxlcgot ICoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK LSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK LSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqCi0gKiBUaGlzIGZpbGUgaXMgYmFz ZWQgb24gbGliZWJ1cjEyOCB3aGljaCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHBzOi8vZ2l0aHVi LmNvbS9qaWl4eWovbGliZWJ1cjEyOC8KLSAqCi0gKiBMaWJlYnVyMTI4IGhhcyB0aGUgZm9sbG93 aW5nIGNvcHlyaWdodDoKLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwgdG8gZGVhbAotICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwotICogdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAot ICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUK LSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTIElOCi0gKiBUSEUgU09GVFdBUkUuCi0qLwotCi0jaW5jbHVkZSAiZWJ1cjEyOC5oIgotCi0j aW5jbHVkZSA8ZmxvYXQuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxtYXRoLmg+ ICAgICAgICAgICAgICAgLyogWW91IG1heSBoYXZlIHRvIGRlZmluZSBfVVNFX01BVEhfREVGSU5F UyBpZiB5b3UgdXNlIE1TVkMgKi8KLQotI2luY2x1ZGUgImxpYmF2dXRpbC9lcnJvci5oIgotI2lu Y2x1ZGUgImxpYmF2dXRpbC9tYWNyb3MuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCi0j aW5jbHVkZSAibGliYXZ1dGlsL21lbV9pbnRlcm5hbC5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC90 aHJlYWQuaCIKLQotI2RlZmluZSBDSEVDS19FUlJPUihjb25kaXRpb24sIGVycm9yY29kZSwgZ290 b19wb2ludCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGNvbmRpdGlvbikp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgICAgIGVycmNvZGUgPSAoZXJyb3Jjb2RlKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIGdvdG9fcG9pbnQ7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICB9Ci0KLSNkZWZpbmUgQUxNT1NUX1pFUk8gMC4wMDAwMDEKLQotI2RlZmluZSBSRUxBVElWRV9H QVRFICAgICAgICAgKC0xMC4wKQotI2RlZmluZSBSRUxBVElWRV9HQVRFX0ZBQ1RPUiAgcG93KDEw LjAsIFJFTEFUSVZFX0dBVEUgLyAxMC4wKQotI2RlZmluZSBNSU5VU18yMERCICAgICAgICAgICAg cG93KDEwLjAsIC0yMC4wIC8gMTAuMCkKLQotc3RydWN0IEZGRUJVUjEyOFN0YXRlSW50ZXJuYWwg ewotICAgIC8qKiBGaWx0ZXJlZCBhdWRpbyBkYXRhICh1c2VkIGFzIHJpbmcgYnVmZmVyKS4gKi8K LSAgICBkb3VibGUgKmF1ZGlvX2RhdGE7Ci0gICAgLyoqIFNpemUgb2YgYXVkaW9fZGF0YSBhcnJh eS4gKi8KLSAgICBzaXplX3QgYXVkaW9fZGF0YV9mcmFtZXM7Ci0gICAgLyoqIEN1cnJlbnQgaW5k ZXggZm9yIGF1ZGlvX2RhdGEuICovCi0gICAgc2l6ZV90IGF1ZGlvX2RhdGFfaW5kZXg7Ci0gICAg LyoqIEhvdyBtYW55IGZyYW1lcyBhcmUgbmVlZGVkIGZvciBhIGdhdGluZyBibG9jay4gV2lsbCBj b3JyZXNwb25kIHRvIDQwMG1zCi0gICAgICogIG9mIGF1ZGlvIGF0IGluaXRpYWxpemF0aW9uLCBh bmQgMTAwbXMgYWZ0ZXIgdGhlIGZpcnN0IGJsb2NrICg3NSUgb3ZlcmxhcAotICAgICAqICBhcyBz cGVjaWZpZWQgaW4gdGhlIDIwMTEgcmV2aXNpb24gb2YgQlMxNzcwKS4gKi8KLSAgICB1bnNpZ25l ZCBsb25nIG5lZWRlZF9mcmFtZXM7Ci0gICAgLyoqIFRoZSBjaGFubmVsIG1hcC4gSGFzIGFzIG1h bnkgZWxlbWVudHMgYXMgdGhlcmUgYXJlIGNoYW5uZWxzLiAqLwotICAgIGludCAqY2hhbm5lbF9t YXA7Ci0gICAgLyoqIEhvdyBtYW55IHNhbXBsZXMgZml0IGluIDEwMG1zIChyb3VuZGVkKS4gKi8K LSAgICB1bnNpZ25lZCBsb25nIHNhbXBsZXNfaW5fMTAwbXM7Ci0gICAgLyoqIEJTLjE3NzAgZmls dGVyIGNvZWZmaWNpZW50cyAobm9taW5hdG9yKS4gKi8KLSAgICBkb3VibGUgYls1XTsKLSAgICAv KiogQlMuMTc3MCBmaWx0ZXIgY29lZmZpY2llbnRzIChkZW5vbWluYXRvcikuICovCi0gICAgZG91 YmxlIGFbNV07Ci0gICAgLyoqIEJTLjE3NzAgZmlsdGVyIHN0YXRlLiAqLwotICAgIGRvdWJsZSB2 WzVdWzVdOwotICAgIC8qKiBIaXN0b2dyYW1zLCB1c2VkIHRvIGNhbGN1bGF0ZSBMUkEuICovCi0g ICAgdW5zaWduZWQgbG9uZyAqYmxvY2tfZW5lcmd5X2hpc3RvZ3JhbTsKLSAgICB1bnNpZ25lZCBs b25nICpzaG9ydF90ZXJtX2Jsb2NrX2VuZXJneV9oaXN0b2dyYW07Ci0gICAgLyoqIEtlZXBzIHRy YWNrIG9mIHdoZW4gYSBuZXcgc2hvcnQgdGVybSBibG9jayBpcyBuZWVkZWQuICovCi0gICAgc2l6 ZV90IHNob3J0X3Rlcm1fZnJhbWVfY291bnRlcjsKLSAgICAvKiogTWF4aW11bSBzYW1wbGUgcGVh aywgb25lIHBlciBjaGFubmVsICovCi0gICAgZG91YmxlICpzYW1wbGVfcGVhazsKLSAgICAvKiog VGhlIG1heGltdW0gd2luZG93IGR1cmF0aW9uIGluIG1zLiAqLwotICAgIHVuc2lnbmVkIGxvbmcg d2luZG93OwotICAgIC8qKiBEYXRhIHBvaW50ZXIgYXJyYXkgZm9yIGludGVybGVhdmVkIGRhdGEg Ki8KLSAgICB2b2lkICoqZGF0YV9wdHJzOwotfTsKLQotc3RhdGljIEFWT25jZSBoaXN0b2dyYW1f aW5pdCA9IEFWX09OQ0VfSU5JVDsKLXN0YXRpYyBERUNMQVJFX0FMSUdORUQoMzIsIGRvdWJsZSwg aGlzdG9ncmFtX2VuZXJnaWVzKVsxMDAwXTsKLXN0YXRpYyBERUNMQVJFX0FMSUdORUQoMzIsIGRv dWJsZSwgaGlzdG9ncmFtX2VuZXJneV9ib3VuZGFyaWVzKVsxMDAxXTsKLQotc3RhdGljIHZvaWQg ZWJ1cjEyOF9pbml0X2ZpbHRlcihGRkVCVVIxMjhTdGF0ZSAqIHN0KQotewotICAgIGludCBpLCBq OwotCi0gICAgZG91YmxlIGYwID0gMTY4MS45NzQ0NTA5NTU1MzM7Ci0gICAgZG91YmxlIEcgPSAz Ljk5OTg0Mzg1Mzk3MzM0NzsKLSAgICBkb3VibGUgUSA9IDAuNzA3MTc1MjM2OTU1NDE5NjsKLQot ICAgIGRvdWJsZSBLID0gdGFuKE1fUEkgKiBmMCAvIChkb3VibGUpIHN0LT5zYW1wbGVyYXRlKTsK LSAgICBkb3VibGUgVmggPSBwb3coMTAuMCwgRyAvIDIwLjApOwotICAgIGRvdWJsZSBWYiA9IHBv dyhWaCwgMC40OTk2NjY3NzQxNTQ1NDE2KTsKLQotICAgIGRvdWJsZSBwYlszXSA9IHsgMC4wLCAw LjAsIDAuMCB9OwotICAgIGRvdWJsZSBwYVszXSA9IHsgMS4wLCAwLjAsIDAuMCB9OwotICAgIGRv dWJsZSByYlszXSA9IHsgMS4wLCAtMi4wLCAxLjAgfTsKLSAgICBkb3VibGUgcmFbM10gPSB7IDEu MCwgMC4wLCAwLjAgfTsKLQotICAgIGRvdWJsZSBhMCA9IDEuMCArIEsgLyBRICsgSyAqIEs7Ci0g ICAgcGJbMF0gPSAoVmggKyBWYiAqIEsgLyBRICsgSyAqIEspIC8gYTA7Ci0gICAgcGJbMV0gPSAy LjAgKiAoSyAqIEsgLSBWaCkgLyBhMDsKLSAgICBwYlsyXSA9IChWaCAtIFZiICogSyAvIFEgKyBL ICogSykgLyBhMDsKLSAgICBwYVsxXSA9IDIuMCAqIChLICogSyAtIDEuMCkgLyBhMDsKLSAgICBw YVsyXSA9ICgxLjAgLSBLIC8gUSArIEsgKiBLKSAvIGEwOwotCi0gICAgZjAgPSAzOC4xMzU0NzA4 NzYwMjQ0NDsKLSAgICBRID0gMC41MDAzMjcwMzczMjM4NzczOwotICAgIEsgPSB0YW4oTV9QSSAq IGYwIC8gKGRvdWJsZSkgc3QtPnNhbXBsZXJhdGUpOwotCi0gICAgcmFbMV0gPSAyLjAgKiAoSyAq IEsgLSAxLjApIC8gKDEuMCArIEsgLyBRICsgSyAqIEspOwotICAgIHJhWzJdID0gKDEuMCAtIEsg LyBRICsgSyAqIEspIC8gKDEuMCArIEsgLyBRICsgSyAqIEspOwotCi0gICAgc3QtPmQtPmJbMF0g PSBwYlswXSAqIHJiWzBdOwotICAgIHN0LT5kLT5iWzFdID0gcGJbMF0gKiByYlsxXSArIHBiWzFd ICogcmJbMF07Ci0gICAgc3QtPmQtPmJbMl0gPSBwYlswXSAqIHJiWzJdICsgcGJbMV0gKiByYlsx XSArIHBiWzJdICogcmJbMF07Ci0gICAgc3QtPmQtPmJbM10gPSBwYlsxXSAqIHJiWzJdICsgcGJb Ml0gKiByYlsxXTsKLSAgICBzdC0+ZC0+Yls0XSA9IHBiWzJdICogcmJbMl07Ci0KLSAgICBzdC0+ ZC0+YVswXSA9IHBhWzBdICogcmFbMF07Ci0gICAgc3QtPmQtPmFbMV0gPSBwYVswXSAqIHJhWzFd ICsgcGFbMV0gKiByYVswXTsKLSAgICBzdC0+ZC0+YVsyXSA9IHBhWzBdICogcmFbMl0gKyBwYVsx XSAqIHJhWzFdICsgcGFbMl0gKiByYVswXTsKLSAgICBzdC0+ZC0+YVszXSA9IHBhWzFdICogcmFb Ml0gKyBwYVsyXSAqIHJhWzFdOwotICAgIHN0LT5kLT5hWzRdID0gcGFbMl0gKiByYVsyXTsKLQot ICAgIGZvciAoaSA9IDA7IGkgPCA1OyArK2kpIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IDU7 ICsraikgewotICAgICAgICAgICAgc3QtPmQtPnZbaV1bal0gPSAwLjA7Ci0gICAgICAgIH0KLSAg ICB9Ci19Ci0KLXN0YXRpYyBpbnQgZWJ1cjEyOF9pbml0X2NoYW5uZWxfbWFwKEZGRUJVUjEyOFN0 YXRlICogc3QpCi17Ci0gICAgc2l6ZV90IGk7Ci0gICAgc3QtPmQtPmNoYW5uZWxfbWFwID0KLSAg ICAgICAgKGludCAqKSBhdl9tYWxsb2NfYXJyYXkoc3QtPmNoYW5uZWxzLCBzaXplb2YoKnN0LT5k LT5jaGFubmVsX21hcCkpOwotICAgIGlmICghc3QtPmQtPmNoYW5uZWxfbWFwKQotICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotICAgIGlmIChzdC0+Y2hhbm5lbHMgPT0gNCkgewotICAg ICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBbMF0gPSBGRl9FQlVSMTI4X0xFRlQ7Ci0gICAgICAgIHN0 LT5kLT5jaGFubmVsX21hcFsxXSA9IEZGX0VCVVIxMjhfUklHSFQ7Ci0gICAgICAgIHN0LT5kLT5j aGFubmVsX21hcFsyXSA9IEZGX0VCVVIxMjhfTEVGVF9TVVJST1VORDsKLSAgICAgICAgc3QtPmQt PmNoYW5uZWxfbWFwWzNdID0gRkZfRUJVUjEyOF9SSUdIVF9TVVJST1VORDsKLSAgICB9IGVsc2Ug aWYgKHN0LT5jaGFubmVscyA9PSA1KSB7Ci0gICAgICAgIHN0LT5kLT5jaGFubmVsX21hcFswXSA9 IEZGX0VCVVIxMjhfTEVGVDsKLSAgICAgICAgc3QtPmQtPmNoYW5uZWxfbWFwWzFdID0gRkZfRUJV UjEyOF9SSUdIVDsKLSAgICAgICAgc3QtPmQtPmNoYW5uZWxfbWFwWzJdID0gRkZfRUJVUjEyOF9D RU5URVI7Ci0gICAgICAgIHN0LT5kLT5jaGFubmVsX21hcFszXSA9IEZGX0VCVVIxMjhfTEVGVF9T VVJST1VORDsKLSAgICAgICAgc3QtPmQtPmNoYW5uZWxfbWFwWzRdID0gRkZfRUJVUjEyOF9SSUdI VF9TVVJST1VORDsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3QtPmNo YW5uZWxzOyArK2kpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoaSkgewotICAgICAgICAgICAgY2Fz ZSAwOgotICAgICAgICAgICAgICAgIHN0LT5kLT5jaGFubmVsX21hcFtpXSA9IEZGX0VCVVIxMjhf TEVGVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAg ICAgICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBbaV0gPSBGRl9FQlVSMTI4X1JJR0hUOwotICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAg IHN0LT5kLT5jaGFubmVsX21hcFtpXSA9IEZGX0VCVVIxMjhfQ0VOVEVSOwotICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIHN0LT5kLT5j aGFubmVsX21hcFtpXSA9IEZGX0VCVVIxMjhfVU5VU0VEOwotICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgIHN0LT5kLT5jaGFubmVsX21h cFtpXSA9IEZGX0VCVVIxMjhfTEVGVF9TVVJST1VORDsKLSAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBb aV0gPSBGRl9FQlVSMTI4X1JJR0hUX1NVUlJPVU5EOwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBb aV0gPSBGRl9FQlVSMTI4X1VOVVNFRDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGlu ZSB2b2lkIGluaXRfaGlzdG9ncmFtKHZvaWQpCi17Ci0gICAgaW50IGk7Ci0gICAgLyogaW5pdGlh bGl6ZSBzdGF0aWMgY29uc3RhbnRzICovCi0gICAgaGlzdG9ncmFtX2VuZXJneV9ib3VuZGFyaWVz WzBdID0gcG93KDEwLjAsICgtNzAuMCArIDAuNjkxKSAvIDEwLjApOwotICAgIGZvciAoaSA9IDA7 IGkgPCAxMDAwOyArK2kpIHsKLSAgICAgICAgaGlzdG9ncmFtX2VuZXJnaWVzW2ldID0KLSAgICAg ICAgICAgIHBvdygxMC4wLCAoKGRvdWJsZSkgaSAvIDEwLjAgLSA2OS45NSArIDAuNjkxKSAvIDEw LjApOwotICAgIH0KLSAgICBmb3IgKGkgPSAxOyBpIDwgMTAwMTsgKytpKSB7Ci0gICAgICAgIGhp c3RvZ3JhbV9lbmVyZ3lfYm91bmRhcmllc1tpXSA9Ci0gICAgICAgICAgICBwb3coMTAuMCwgKChk b3VibGUpIGkgLyAxMC4wIC0gNzAuMCArIDAuNjkxKSAvIDEwLjApOwotICAgIH0KLX0KLQotRkZF QlVSMTI4U3RhdGUgKmZmX2VidXIxMjhfaW5pdCh1bnNpZ25lZCBpbnQgY2hhbm5lbHMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2FtcGxlcmF0ZSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB3aW5kb3csIGludCBt b2RlKQotewotICAgIGludCBlcnJjb2RlOwotICAgIEZGRUJVUjEyOFN0YXRlICpzdDsKLQotICAg IHN0ID0gKEZGRUJVUjEyOFN0YXRlICopIGF2X21hbGxvYyhzaXplb2YoKnN0KSk7Ci0gICAgQ0hF Q0tfRVJST1IoIXN0LCAwLCBleGl0KQotICAgIHN0LT5kID0gKHN0cnVjdCBGRkVCVVIxMjhTdGF0 ZUludGVybmFsICopCi0gICAgICAgIGF2X21hbGxvYyhzaXplb2YoKnN0LT5kKSk7Ci0gICAgQ0hF Q0tfRVJST1IoIXN0LT5kLCAwLCBmcmVlX3N0YXRlKQotICAgIHN0LT5jaGFubmVscyA9IGNoYW5u ZWxzOwotICAgIGVycmNvZGUgPSBlYnVyMTI4X2luaXRfY2hhbm5lbF9tYXAoc3QpOwotICAgIENI RUNLX0VSUk9SKGVycmNvZGUsIDAsIGZyZWVfaW50ZXJuYWwpCi0KLSAgICBzdC0+ZC0+c2FtcGxl X3BlYWsgPQotICAgICAgICAoZG91YmxlICopIGF2X2NhbGxvYyhjaGFubmVscywgc2l6ZW9mKCpz dC0+ZC0+c2FtcGxlX3BlYWspKTsKLSAgICBDSEVDS19FUlJPUighc3QtPmQtPnNhbXBsZV9wZWFr LCAwLCBmcmVlX2NoYW5uZWxfbWFwKQotCi0gICAgc3QtPnNhbXBsZXJhdGUgPSBzYW1wbGVyYXRl OwotICAgIHN0LT5kLT5zYW1wbGVzX2luXzEwMG1zID0gKHN0LT5zYW1wbGVyYXRlICsgNSkgLyAx MDsKLSAgICBzdC0+bW9kZSA9IG1vZGU7Ci0gICAgaWYgKChtb2RlICYgRkZfRUJVUjEyOF9NT0RF X1MpID09IEZGX0VCVVIxMjhfTU9ERV9TKSB7Ci0gICAgICAgIHN0LT5kLT53aW5kb3cgPSBGRk1B WCh3aW5kb3csIDMwMDApOwotICAgIH0gZWxzZSBpZiAoKG1vZGUgJiBGRl9FQlVSMTI4X01PREVf TSkgPT0gRkZfRUJVUjEyOF9NT0RFX00pIHsKLSAgICAgICAgc3QtPmQtPndpbmRvdyA9IEZGTUFY KHdpbmRvdywgNDAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBnb3RvIGZyZWVfc2FtcGxlX3Bl YWs7Ci0gICAgfQotICAgIHN0LT5kLT5hdWRpb19kYXRhX2ZyYW1lcyA9IHN0LT5zYW1wbGVyYXRl ICogc3QtPmQtPndpbmRvdyAvIDEwMDA7Ci0gICAgaWYgKHN0LT5kLT5hdWRpb19kYXRhX2ZyYW1l cyAlIHN0LT5kLT5zYW1wbGVzX2luXzEwMG1zKSB7Ci0gICAgICAgIC8qIHJvdW5kIHVwIHRvIG11 bHRpcGxlIG9mIHNhbXBsZXNfaW5fMTAwbXMgKi8KLSAgICAgICAgc3QtPmQtPmF1ZGlvX2RhdGFf ZnJhbWVzID0gc3QtPmQtPmF1ZGlvX2RhdGFfZnJhbWVzCi0gICAgICAgICAgICArIHN0LT5kLT5z YW1wbGVzX2luXzEwMG1zCi0gICAgICAgICAgICAtIChzdC0+ZC0+YXVkaW9fZGF0YV9mcmFtZXMg JSBzdC0+ZC0+c2FtcGxlc19pbl8xMDBtcyk7Ci0gICAgfQotICAgIHN0LT5kLT5hdWRpb19kYXRh ID0KLSAgICAgICAgKGRvdWJsZSAqKSBhdl9jYWxsb2Moc3QtPmQtPmF1ZGlvX2RhdGFfZnJhbWVz LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+Y2hhbm5lbHMgKiBzaXplb2YoKnN0 LT5kLT5hdWRpb19kYXRhKSk7Ci0gICAgQ0hFQ0tfRVJST1IoIXN0LT5kLT5hdWRpb19kYXRhLCAw LCBmcmVlX3NhbXBsZV9wZWFrKQotCi0gICAgZWJ1cjEyOF9pbml0X2ZpbHRlcihzdCk7Ci0KLSAg ICBzdC0+ZC0+YmxvY2tfZW5lcmd5X2hpc3RvZ3JhbSA9Ci0gICAgICAgIGF2X21hbGxvY3ooMTAw MCAqIHNpemVvZigqc3QtPmQtPmJsb2NrX2VuZXJneV9oaXN0b2dyYW0pKTsKLSAgICBDSEVDS19F UlJPUighc3QtPmQtPmJsb2NrX2VuZXJneV9oaXN0b2dyYW0sIDAsIGZyZWVfYXVkaW9fZGF0YSkK LSAgICBzdC0+ZC0+c2hvcnRfdGVybV9ibG9ja19lbmVyZ3lfaGlzdG9ncmFtID0KLSAgICAgICAg YXZfbWFsbG9jeigxMDAwICogc2l6ZW9mKCpzdC0+ZC0+c2hvcnRfdGVybV9ibG9ja19lbmVyZ3lf aGlzdG9ncmFtKSk7Ci0gICAgQ0hFQ0tfRVJST1IoIXN0LT5kLT5zaG9ydF90ZXJtX2Jsb2NrX2Vu ZXJneV9oaXN0b2dyYW0sIDAsCi0gICAgICAgICAgICAgICAgZnJlZV9ibG9ja19lbmVyZ3lfaGlz dG9ncmFtKQotICAgIHN0LT5kLT5zaG9ydF90ZXJtX2ZyYW1lX2NvdW50ZXIgPSAwOwotCi0gICAg LyogdGhlIGZpcnN0IGJsb2NrIG5lZWRzIDQwMG1zIG9mIGF1ZGlvIGRhdGEgKi8KLSAgICBzdC0+ ZC0+bmVlZGVkX2ZyYW1lcyA9IHN0LT5kLT5zYW1wbGVzX2luXzEwMG1zICogNDsKLSAgICAvKiBz dGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KLSAgICBzdC0+ZC0+YXVkaW9f ZGF0YV9pbmRleCA9IDA7Ci0KLSAgICBpZiAoZmZfdGhyZWFkX29uY2UoJmhpc3RvZ3JhbV9pbml0 LCAmaW5pdF9oaXN0b2dyYW0pICE9IDApCi0gICAgICAgIGdvdG8gZnJlZV9zaG9ydF90ZXJtX2Js b2NrX2VuZXJneV9oaXN0b2dyYW07Ci0KLSAgICBzdC0+ZC0+ZGF0YV9wdHJzID0gYXZfbWFsbG9j X2FycmF5KGNoYW5uZWxzLCBzaXplb2YoKnN0LT5kLT5kYXRhX3B0cnMpKTsKLSAgICBDSEVDS19F UlJPUighc3QtPmQtPmRhdGFfcHRycywgMCwKLSAgICAgICAgICAgICAgICBmcmVlX3Nob3J0X3Rl cm1fYmxvY2tfZW5lcmd5X2hpc3RvZ3JhbSk7Ci0KLSAgICByZXR1cm4gc3Q7Ci0KLWZyZWVfc2hv cnRfdGVybV9ibG9ja19lbmVyZ3lfaGlzdG9ncmFtOgotICAgIGF2X2ZyZWUoc3QtPmQtPnNob3J0 X3Rlcm1fYmxvY2tfZW5lcmd5X2hpc3RvZ3JhbSk7Ci1mcmVlX2Jsb2NrX2VuZXJneV9oaXN0b2dy YW06Ci0gICAgYXZfZnJlZShzdC0+ZC0+YmxvY2tfZW5lcmd5X2hpc3RvZ3JhbSk7Ci1mcmVlX2F1 ZGlvX2RhdGE6Ci0gICAgYXZfZnJlZShzdC0+ZC0+YXVkaW9fZGF0YSk7Ci1mcmVlX3NhbXBsZV9w ZWFrOgotICAgIGF2X2ZyZWUoc3QtPmQtPnNhbXBsZV9wZWFrKTsKLWZyZWVfY2hhbm5lbF9tYXA6 Ci0gICAgYXZfZnJlZShzdC0+ZC0+Y2hhbm5lbF9tYXApOwotZnJlZV9pbnRlcm5hbDoKLSAgICBh dl9mcmVlKHN0LT5kKTsKLWZyZWVfc3RhdGU6Ci0gICAgYXZfZnJlZShzdCk7Ci1leGl0OgotICAg IHJldHVybiBOVUxMOwotfQotCi12b2lkIGZmX2VidXIxMjhfZGVzdHJveShGRkVCVVIxMjhTdGF0 ZSAqKiBzdCkKLXsKLSAgICBhdl9mcmVlKCgqc3QpLT5kLT5ibG9ja19lbmVyZ3lfaGlzdG9ncmFt KTsKLSAgICBhdl9mcmVlKCgqc3QpLT5kLT5zaG9ydF90ZXJtX2Jsb2NrX2VuZXJneV9oaXN0b2dy YW0pOwotICAgIGF2X2ZyZWUoKCpzdCktPmQtPmF1ZGlvX2RhdGEpOwotICAgIGF2X2ZyZWUoKCpz dCktPmQtPmNoYW5uZWxfbWFwKTsKLSAgICBhdl9mcmVlKCgqc3QpLT5kLT5zYW1wbGVfcGVhayk7 Ci0gICAgYXZfZnJlZSgoKnN0KS0+ZC0+ZGF0YV9wdHJzKTsKLSAgICBhdl9mcmVlKCgqc3QpLT5k KTsKLSAgICBhdl9mcmVlKCpzdCk7Ci0gICAgKnN0ID0gTlVMTDsKLX0KLQotI2RlZmluZSBFQlVS MTI4X0ZJTFRFUih0eXBlLCBzY2FsaW5nX2ZhY3RvcikgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi1zdGF0aWMgdm9pZCBlYnVyMTI4X2ZpbHRlcl8jI3R5cGUoRkZFQlVS MTI4U3RhdGUqIHN0LCBjb25zdCB0eXBlKiogc3JjcywgICAgICAgICAgIFwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3JjX2luZGV4LCBzaXplX3QgZnJhbWVzLCAg ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBz dHJpZGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG91Ymxl KiBhdWRpb19kYXRhID0gc3QtPmQtPmF1ZGlvX2RhdGEgKyBzdC0+ZC0+YXVkaW9fZGF0YV9pbmRl eDsgICAgICAgICAgICAgIFwKLSAgICBzaXplX3QgaSwgYzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChzdC0+bW9kZSAmIEZGX0VCVVIxMjhfTU9ERV9T QU1QTEVfUEVBSykgPT0gRkZfRUJVUjEyOF9NT0RFX1NBTVBMRV9QRUFLKSB7IFwKLSAgICAgICAg Zm9yIChjID0gMDsgYyA8IHN0LT5jaGFubmVsczsgKytjKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZG91YmxlIG1heCA9IDAuMDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0eXBlIHYgPSBzcmNzW2NdW3Ny Y19pbmRleCArIGkgKiBzdHJpZGVdOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICAgICAgICAgIGlmICh2ID4gbWF4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIG1heCA9ICAgICAgICB2 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKC12ID4gbWF4KSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBtYXggPSAtMS4wICog djsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg ICAgICAgICAgbWF4IC89IHNjYWxpbmdfZmFjdG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAobWF4ID4gc3QtPmQtPnNh bXBsZV9wZWFrW2NdKSBzdC0+ZC0+c2FtcGxlX3BlYWtbY10gPSBtYXg7ICAgICAgICAgIFwKLSAg ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgZm9yIChjID0gMDsgYyA8IHN0LT5jaGFubmVsczsgKytjKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaW50IGNpID0gc3QtPmQtPmNoYW5u ZWxfbWFwW2NdIC0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgICBpZiAoY2kgPCAwKSBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVsc2UgaWYgKGNpID09IEZGX0VC VVIxMjhfRFVBTF9NT05PIC0gMSkgY2kgPSAwOyAvKmR1YWwgbW9ubyAqLyAgICAgICAgICAgIFwK LSAgICAgICAgZm9yIChpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgc3QtPmQtPnZbY2ldWzBd ID0gKGRvdWJsZSkgKHNyY3NbY11bc3JjX2luZGV4ICsgaSAqIHN0cmlkZV0gLyBzY2FsaW5nX2Zh Y3RvcikgXAotICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3QtPmQtPmFbMV0gKiBzdC0+ZC0+ dltjaV1bMV0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAg ICAgICAgLSBzdC0+ZC0+YVsyXSAqIHN0LT5kLT52W2NpXVsyXSAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0LT5kLT5hWzNdICogc3QtPmQt PnZbY2ldWzNdICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAg ICAgICAgIC0gc3QtPmQtPmFbNF0gKiBzdC0+ZC0+dltjaV1bNF07ICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgICAgICAgICBhdWRpb19kYXRhW2kgKiBzdC0+Y2hhbm5lbHMgKyBjXSA9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0LT5kLT5iWzBdICogc3QtPmQtPnZbY2ldWzBdICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICsgc3QtPmQtPmJbMV0gKiBzdC0+ ZC0+dltjaV1bMV0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg ICAgICAgICAgKyBzdC0+ZC0+YlsyXSAqIHN0LT5kLT52W2NpXVsyXSAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICArIHN0LT5kLT5iWzNdICogc3Qt PmQtPnZbY2ldWzNdICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg ICAgICAgICAgICsgc3QtPmQtPmJbNF0gKiBzdC0+ZC0+dltjaV1bNF07ICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgICAgICAgICBzdC0+ZC0+dltjaV1bNF0gPSBzdC0+ZC0+dltjaV1b M107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHN0 LT5kLT52W2NpXVszXSA9IHN0LT5kLT52W2NpXVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICAgICAgc3QtPmQtPnZbY2ldWzJdID0gc3QtPmQtPnZbY2ld WzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBz dC0+ZC0+dltjaV1bMV0gPSBzdC0+ZC0+dltjaV1bMF07ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBzdC0+ ZC0+dltjaV1bNF0gPSBmYWJzKHN0LT5kLT52W2NpXVs0XSkgPCBEQkxfTUlOID8gMC4wIDogc3Qt PmQtPnZbY2ldWzRdOyBcCi0gICAgICAgIHN0LT5kLT52W2NpXVszXSA9IGZhYnMoc3QtPmQtPnZb Y2ldWzNdKSA8IERCTF9NSU4gPyAwLjAgOiBzdC0+ZC0+dltjaV1bM107IFwKLSAgICAgICAgc3Qt PmQtPnZbY2ldWzJdID0gZmFicyhzdC0+ZC0+dltjaV1bMl0pIDwgREJMX01JTiA/IDAuMCA6IHN0 LT5kLT52W2NpXVsyXTsgXAotICAgICAgICBzdC0+ZC0+dltjaV1bMV0gPSBmYWJzKHN0LT5kLT52 W2NpXVsxXSkgPCBEQkxfTUlOID8gMC4wIDogc3QtPmQtPnZbY2ldWzFdOyBcCi0gICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLX0KLUVCVVIxMjhfRklMVEVSKGRvdWJsZSwgMS4wKQotCi1zdGF0 aWMgZG91YmxlIGVidXIxMjhfZW5lcmd5X3RvX2xvdWRuZXNzKGRvdWJsZSBlbmVyZ3kpCi17Ci0g ICAgcmV0dXJuIDEwICogbG9nMTAoZW5lcmd5KSAtIDAuNjkxOwotfQotCi1zdGF0aWMgc2l6ZV90 IGZpbmRfaGlzdG9ncmFtX2luZGV4KGRvdWJsZSBlbmVyZ3kpCi17Ci0gICAgc2l6ZV90IGluZGV4 X21pbiA9IDA7Ci0gICAgc2l6ZV90IGluZGV4X21heCA9IDEwMDA7Ci0gICAgc2l6ZV90IGluZGV4 X21pZDsKLQotICAgIGRvIHsKLSAgICAgICAgaW5kZXhfbWlkID0gKGluZGV4X21pbiArIGluZGV4 X21heCkgLyAyOwotICAgICAgICBpZiAoZW5lcmd5ID49IGhpc3RvZ3JhbV9lbmVyZ3lfYm91bmRh cmllc1tpbmRleF9taWRdKSB7Ci0gICAgICAgICAgICBpbmRleF9taW4gPSBpbmRleF9taWQ7Ci0g ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbmRleF9tYXggPSBpbmRleF9taWQ7Ci0gICAg ICAgIH0KLSAgICB9IHdoaWxlIChpbmRleF9tYXggLSBpbmRleF9taW4gIT0gMSk7Ci0KLSAgICBy ZXR1cm4gaW5kZXhfbWluOwotfQotCi1zdGF0aWMgdm9pZCBlYnVyMTI4X2NhbGNfZ2F0aW5nX2Js b2NrKEZGRUJVUjEyOFN0YXRlICogc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBmcmFtZXNfcGVyX2Jsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkb3VibGUgKm9wdGlvbmFsX291dHB1dCkKLXsKLSAgICBzaXplX3QgaSwg YzsKLSAgICBkb3VibGUgc3VtID0gMC4wOwotICAgIGRvdWJsZSBjaGFubmVsX3N1bTsKLSAgICBm b3IgKGMgPSAwOyBjIDwgc3QtPmNoYW5uZWxzOyArK2MpIHsKLSAgICAgICAgaWYgKHN0LT5kLT5j aGFubmVsX21hcFtjXSA9PSBGRl9FQlVSMTI4X1VOVVNFRCkKLSAgICAgICAgICAgIGNvbnRpbnVl OwotICAgICAgICBjaGFubmVsX3N1bSA9IDAuMDsKLSAgICAgICAgaWYgKHN0LT5kLT5hdWRpb19k YXRhX2luZGV4IDwgZnJhbWVzX3Blcl9ibG9jayAqIHN0LT5jaGFubmVscykgewotICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IHN0LT5kLT5hdWRpb19kYXRhX2luZGV4IC8gc3QtPmNoYW5uZWxz OyArK2kpIHsKLSAgICAgICAgICAgICAgICBjaGFubmVsX3N1bSArPSBzdC0+ZC0+YXVkaW9fZGF0 YVtpICogc3QtPmNoYW5uZWxzICsgY10gKgotICAgICAgICAgICAgICAgICAgICBzdC0+ZC0+YXVk aW9fZGF0YVtpICogc3QtPmNoYW5uZWxzICsgY107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBmb3IgKGkgPSBzdC0+ZC0+YXVkaW9fZGF0YV9mcmFtZXMgLQotICAgICAgICAgICAgICAgICAo ZnJhbWVzX3Blcl9ibG9jayAtCi0gICAgICAgICAgICAgICAgICBzdC0+ZC0+YXVkaW9fZGF0YV9p bmRleCAvIHN0LT5jaGFubmVscyk7Ci0gICAgICAgICAgICAgICAgIGkgPCBzdC0+ZC0+YXVkaW9f ZGF0YV9mcmFtZXM7ICsraSkgewotICAgICAgICAgICAgICAgIGNoYW5uZWxfc3VtICs9IHN0LT5k LT5hdWRpb19kYXRhW2kgKiBzdC0+Y2hhbm5lbHMgKyBjXSAqCi0gICAgICAgICAgICAgICAgICAg IHN0LT5kLT5hdWRpb19kYXRhW2kgKiBzdC0+Y2hhbm5lbHMgKyBjXTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaSA9Ci0gICAgICAgICAgICAgICAg IHN0LT5kLT5hdWRpb19kYXRhX2luZGV4IC8gc3QtPmNoYW5uZWxzIC0gZnJhbWVzX3Blcl9ibG9j azsKLSAgICAgICAgICAgICAgICAgaSA8IHN0LT5kLT5hdWRpb19kYXRhX2luZGV4IC8gc3QtPmNo YW5uZWxzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBjaGFubmVsX3N1bSArPQotICAgICAgICAg ICAgICAgICAgICBzdC0+ZC0+YXVkaW9fZGF0YVtpICogc3QtPmNoYW5uZWxzICsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY10gKiBzdC0+ZC0+YXVkaW9fZGF0YVtpICoK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdC0+Y2hhbm5lbHMgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgICAgIGlmIChzdC0+ZC0+Y2hhbm5lbF9tYXBbY10gPT0gRkZfRUJVUjEyOF9NcDExMCB8fAot ICAgICAgICAgICAgc3QtPmQtPmNoYW5uZWxfbWFwW2NdID09IEZGX0VCVVIxMjhfTW0xMTAgfHwK LSAgICAgICAgICAgIHN0LT5kLT5jaGFubmVsX21hcFtjXSA9PSBGRl9FQlVSMTI4X01wMDYwIHx8 Ci0gICAgICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBbY10gPT0gRkZfRUJVUjEyOF9NbTA2MCB8 fAotICAgICAgICAgICAgc3QtPmQtPmNoYW5uZWxfbWFwW2NdID09IEZGX0VCVVIxMjhfTXAwOTAg fHwKLSAgICAgICAgICAgIHN0LT5kLT5jaGFubmVsX21hcFtjXSA9PSBGRl9FQlVSMTI4X01tMDkw KSB7Ci0gICAgICAgICAgICBjaGFubmVsX3N1bSAqPSAxLjQxOwotICAgICAgICB9IGVsc2UgaWYg KHN0LT5kLT5jaGFubmVsX21hcFtjXSA9PSBGRl9FQlVSMTI4X0RVQUxfTU9OTykgewotICAgICAg ICAgICAgY2hhbm5lbF9zdW0gKj0gMi4wOwotICAgICAgICB9Ci0gICAgICAgIHN1bSArPSBjaGFu bmVsX3N1bTsKLSAgICB9Ci0gICAgc3VtIC89IChkb3VibGUpIGZyYW1lc19wZXJfYmxvY2s7Ci0g ICAgaWYgKG9wdGlvbmFsX291dHB1dCkgewotICAgICAgICAqb3B0aW9uYWxfb3V0cHV0ID0gc3Vt OwotICAgIH0gZWxzZSBpZiAoc3VtID49IGhpc3RvZ3JhbV9lbmVyZ3lfYm91bmRhcmllc1swXSkg ewotICAgICAgICArK3N0LT5kLT5ibG9ja19lbmVyZ3lfaGlzdG9ncmFtW2ZpbmRfaGlzdG9ncmFt X2luZGV4KHN1bSldOwotICAgIH0KLX0KLQotaW50IGZmX2VidXIxMjhfc2V0X2NoYW5uZWwoRkZF QlVSMTI4U3RhdGUgKiBzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBjaGFubmVsX251bWJlciwgaW50IHZhbHVlKQotewotICAgIGlmIChjaGFubmVsX251bWJlciA+ PSBzdC0+Y2hhbm5lbHMpIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIGlmICh2YWx1 ZSA9PSBGRl9FQlVSMTI4X0RVQUxfTU9OTyAmJgotICAgICAgICAoc3QtPmNoYW5uZWxzICE9IDEg fHwgY2hhbm5lbF9udW1iZXIgIT0gMCkpIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAg IHN0LT5kLT5jaGFubmVsX21hcFtjaGFubmVsX251bWJlcl0gPSB2YWx1ZTsKLSAgICByZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBlYnVyMTI4X2VuZXJneV9zaG9ydHRlcm0oRkZFQlVSMTI4U3Rh dGUgKiBzdCwgZG91YmxlICpvdXQpOwotI2RlZmluZSBFQlVSMTI4X0FERF9GUkFNRVNfUExBTkFS KHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot c3RhdGljIHZvaWQgZWJ1cjEyOF9hZGRfZnJhbWVzX3BsYW5hcl8jI3R5cGUoRkZFQlVSMTI4U3Rh dGUqIHN0LCBjb25zdCB0eXBlKiogc3JjcywgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IGZyYW1lcywgaW50IHN0cmlkZSkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIHNpemVfdCBzcmNfaW5kZXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChmcmFt ZXMgPiAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoZnJhbWVzID49IHN0LT5kLT5uZWVkZWRfZnJh bWVzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICAgICAgZWJ1cjEyOF9maWx0ZXJfIyN0eXBlKHN0LCBzcmNzLCBzcmNfaW5kZXgsIHN0LT5kLT5u ZWVkZWRfZnJhbWVzLCBzdHJpZGUpOyAgXAotICAgICAgICAgICAgc3JjX2luZGV4ICs9IHN0LT5k LT5uZWVkZWRfZnJhbWVzICogc3RyaWRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotICAgICAgICAgICAgZnJhbWVzIC09IHN0LT5kLT5uZWVkZWRfZnJhbWVzOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgc3QtPmQtPmF1 ZGlvX2RhdGFfaW5kZXggKz0gc3QtPmQtPm5lZWRlZF9mcmFtZXMgKiBzdC0+Y2hhbm5lbHM7ICAg ICAgICAgICAgXAotICAgICAgICAgICAgLyogY2FsY3VsYXRlIHRoZSBuZXcgZ2F0aW5nIGJsb2Nr ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg aWYgKChzdC0+bW9kZSAmIEZGX0VCVVIxMjhfTU9ERV9JKSA9PSBGRl9FQlVSMTI4X01PREVfSSkg eyAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGVidXIxMjhfY2FsY19nYXRpbmdf YmxvY2soc3QsIHN0LT5kLT5zYW1wbGVzX2luXzEwMG1zICogNCwgTlVMTCk7ICAgICAgXAotICAg ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKChzdC0+bW9kZSAm IEZGX0VCVVIxMjhfTU9ERV9MUkEpID09IEZGX0VCVVIxMjhfTU9ERV9MUkEpIHsgICAgICAgICAg ICAgXAotICAgICAgICAgICAgICAgIHN0LT5kLT5zaG9ydF90ZXJtX2ZyYW1lX2NvdW50ZXIgKz0g c3QtPmQtPm5lZWRlZF9mcmFtZXM7ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlm IChzdC0+ZC0+c2hvcnRfdGVybV9mcmFtZV9jb3VudGVyID09IHN0LT5kLT5zYW1wbGVzX2luXzEw MG1zICogMzApIHsgXAotICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3RfZW5lcmd5OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg ICAgICAgICAgICBlYnVyMTI4X2VuZXJneV9zaG9ydHRlcm0oc3QsICZzdF9lbmVyZ3kpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBpZiAoc3RfZW5lcmd5 ID49IGhpc3RvZ3JhbV9lbmVyZ3lfYm91bmRhcmllc1swXSkgeyAgICAgICAgICAgICAgICAgXAot ICAgICAgICAgICAgICAgICAgICAgICAgKytzdC0+ZC0+c2hvcnRfdGVybV9ibG9ja19lbmVyZ3lf aGlzdG9ncmFtWyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRfaGlzdG9ncmFtX2luZGV4KHN0X2VuZXJn eSldOyAgXAotICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg ICAgICBzdC0+ZC0+c2hvcnRfdGVybV9mcmFtZV9jb3VudGVyID0gc3QtPmQtPnNhbXBsZXNfaW5f MTAwbXMgKiAyMDsgICAgXAotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgLyogMTAwbXMgYXJlIG5lZWRl ZCBmb3IgYWxsIGJsb2NrcyBiZXNpZGVzIHRoZSBmaXJzdCBvbmUgKi8gICAgICAgICAgICAgICAg XAotICAgICAgICAgICAgc3QtPmQtPm5lZWRlZF9mcmFtZXMgPSBzdC0+ZC0+c2FtcGxlc19pbl8x MDBtczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgLyogcmVzZXQg YXVkaW9fZGF0YV9pbmRleCB3aGVuIGJ1ZmZlciBmdWxsICovICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICAgICAgaWYgKHN0LT5kLT5hdWRpb19kYXRhX2luZGV4ID09IHN0 LT5kLT5hdWRpb19kYXRhX2ZyYW1lcyAqIHN0LT5jaGFubmVscykgeyAgXAotICAgICAgICAgICAg ICAgIHN0LT5kLT5hdWRpb19kYXRhX2luZGV4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZWJ1cjEyOF9maWx0ZXJf IyN0eXBlKHN0LCBzcmNzLCBzcmNfaW5kZXgsIGZyYW1lcywgc3RyaWRlKTsgICAgICAgICAgICAg ICAgXAotICAgICAgICAgICAgc3QtPmQtPmF1ZGlvX2RhdGFfaW5kZXggKz0gZnJhbWVzICogc3Qt PmNoYW5uZWxzOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKChz dC0+bW9kZSAmIEZGX0VCVVIxMjhfTU9ERV9MUkEpID09IEZGX0VCVVIxMjhfTU9ERV9MUkEpIHsg ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHN0LT5kLT5zaG9ydF90ZXJtX2ZyYW1lX2Nv dW50ZXIgKz0gZnJhbWVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgc3QtPmQtPm5lZWRlZF9mcmFtZXMg LT0gZnJhbWVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgICAgICAgZnJhbWVzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotRUJVUjEyOF9BRERf RlJBTUVTX1BMQU5BUihkb3VibGUpCi0jZGVmaW5lIEZGX0VCVVIxMjhfQUREX0ZSQU1FUyh0eXBl KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotdm9pZCBmZl9l YnVyMTI4X2FkZF9mcmFtZXNfIyN0eXBlKEZGRUJVUjEyOFN0YXRlKiBzdCwgY29uc3QgdHlwZSog c3JjLCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBmcmFtZXMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGludCBpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICBjb25zdCB0eXBlICoqYnVmID0gKGNvbnN0IHR5cGUqKilzdC0+ZC0+ZGF0YV9w dHJzOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZm9yIChpID0gMDsgaSA8IHN0LT5j aGFubmVsczsgaSsrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0gICAgYnVmW2ldID0gc3JjICsgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBlYnVyMTI4X2FkZF9mcmFtZXNfcGxhbmFyXyMj dHlwZShzdCwgYnVmLCBmcmFtZXMsIHN0LT5jaGFubmVscyk7ICAgICAgICAgICAgIFwKLX0KLUZG X0VCVVIxMjhfQUREX0ZSQU1FUyhkb3VibGUpCi0KLXN0YXRpYyBpbnQgZWJ1cjEyOF9jYWxjX3Jl bGF0aXZlX3RocmVzaG9sZChGRkVCVVIxMjhTdGF0ZSAqKnN0cywgc2l6ZV90IHNpemUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpyZWxhdGl2ZV90 aHJlc2hvbGQpCi17Ci0gICAgc2l6ZV90IGksIGo7Ci0gICAgaW50IGFib3ZlX3RocmVzaF9jb3Vu dGVyID0gMDsKLSAgICAqcmVsYXRpdmVfdGhyZXNob2xkID0gMC4wOwotCi0gICAgZm9yIChpID0g MDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICB1bnNpZ25lZCBsb25nICpibG9ja19lbmVyZ3lf aGlzdG9ncmFtID0gc3RzW2ldLT5kLT5ibG9ja19lbmVyZ3lfaGlzdG9ncmFtOwotICAgICAgICBm b3IgKGogPSAwOyBqIDwgMTAwMDsgKytqKSB7Ci0gICAgICAgICAgICAqcmVsYXRpdmVfdGhyZXNo b2xkICs9IGJsb2NrX2VuZXJneV9oaXN0b2dyYW1bal0gKiBoaXN0b2dyYW1fZW5lcmdpZXNbal07 Ci0gICAgICAgICAgICBhYm92ZV90aHJlc2hfY291bnRlciArPSBibG9ja19lbmVyZ3lfaGlzdG9n cmFtW2pdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFib3ZlX3RocmVzaF9jb3VudGVy ICE9IDApIHsKLSAgICAgICAgKnJlbGF0aXZlX3RocmVzaG9sZCAvPSAoZG91YmxlKWFib3ZlX3Ro cmVzaF9jb3VudGVyOwotICAgICAgICAqcmVsYXRpdmVfdGhyZXNob2xkICo9IFJFTEFUSVZFX0dB VEVfRkFDVE9SOwotICAgIH0KLQotICAgIHJldHVybiBhYm92ZV90aHJlc2hfY291bnRlcjsKLX0K LQotc3RhdGljIGludCBlYnVyMTI4X2dhdGVkX2xvdWRuZXNzKEZGRUJVUjEyOFN0YXRlICoqIHN0 cywgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl ICpvdXQpCi17Ci0gICAgZG91YmxlIGdhdGVkX2xvdWRuZXNzID0gMC4wOwotICAgIGRvdWJsZSBy ZWxhdGl2ZV90aHJlc2hvbGQ7Ci0gICAgc2l6ZV90IGFib3ZlX3RocmVzaF9jb3VudGVyOwotICAg IHNpemVfdCBpLCBqLCBzdGFydF9pbmRleDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBp KyspCi0gICAgICAgIGlmICgoc3RzW2ldLT5tb2RlICYgRkZfRUJVUjEyOF9NT0RFX0kpICE9IEZG X0VCVVIxMjhfTU9ERV9JKQotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLQot ICAgIGlmICghZWJ1cjEyOF9jYWxjX3JlbGF0aXZlX3RocmVzaG9sZChzdHMsIHNpemUsICZyZWxh dGl2ZV90aHJlc2hvbGQpKSB7Ci0gICAgICAgICpvdXQgPSAtSFVHRV9WQUw7Ci0gICAgICAgIHJl dHVybiAwOwotICAgIH0KLQotICAgIGFib3ZlX3RocmVzaF9jb3VudGVyID0gMDsKLSAgICBpZiAo cmVsYXRpdmVfdGhyZXNob2xkIDwgaGlzdG9ncmFtX2VuZXJneV9ib3VuZGFyaWVzWzBdKSB7Ci0g ICAgICAgIHN0YXJ0X2luZGV4ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGFydF9pbmRl eCA9IGZpbmRfaGlzdG9ncmFtX2luZGV4KHJlbGF0aXZlX3RocmVzaG9sZCk7Ci0gICAgICAgIGlm IChyZWxhdGl2ZV90aHJlc2hvbGQgPiBoaXN0b2dyYW1fZW5lcmdpZXNbc3RhcnRfaW5kZXhdKSB7 Ci0gICAgICAgICAgICArK3N0YXJ0X2luZGV4OwotICAgICAgICB9Ci0gICAgfQotICAgIGZvciAo aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgZm9yIChqID0gc3RhcnRfaW5kZXg7IGog PCAxMDAwOyArK2opIHsKLSAgICAgICAgICAgIGdhdGVkX2xvdWRuZXNzICs9IHN0c1tpXS0+ZC0+ YmxvY2tfZW5lcmd5X2hpc3RvZ3JhbVtqXSAqCi0gICAgICAgICAgICAgICAgaGlzdG9ncmFtX2Vu ZXJnaWVzW2pdOwotICAgICAgICAgICAgYWJvdmVfdGhyZXNoX2NvdW50ZXIgKz0gc3RzW2ldLT5k LT5ibG9ja19lbmVyZ3lfaGlzdG9ncmFtW2pdOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgh YWJvdmVfdGhyZXNoX2NvdW50ZXIpIHsKLSAgICAgICAgKm91dCA9IC1IVUdFX1ZBTDsKLSAgICAg ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGdhdGVkX2xvdWRuZXNzIC89IChkb3VibGUpIGFib3Zl X3RocmVzaF9jb3VudGVyOwotICAgICpvdXQgPSBlYnVyMTI4X2VuZXJneV90b19sb3VkbmVzcyhn YXRlZF9sb3VkbmVzcyk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBmZl9lYnVyMTI4X3JlbGF0 aXZlX3RocmVzaG9sZChGRkVCVVIxMjhTdGF0ZSAqIHN0LCBkb3VibGUgKm91dCkKLXsKLSAgICBk b3VibGUgcmVsYXRpdmVfdGhyZXNob2xkOwotCi0gICAgaWYgKChzdC0+bW9kZSAmIEZGX0VCVVIx MjhfTU9ERV9JKSAhPSBGRl9FQlVSMTI4X01PREVfSSkKLSAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKLQotICAgIGlmICghZWJ1cjEyOF9jYWxjX3JlbGF0aXZlX3RocmVzaG9sZCgmc3Qs IDEsICZyZWxhdGl2ZV90aHJlc2hvbGQpKSB7Ci0gICAgICAgICpvdXQgPSAtNzAuMDsKLSAgICAg ICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgKm91dCA9IGVidXIxMjhfZW5lcmd5X3RvX2xvdWRu ZXNzKHJlbGF0aXZlX3RocmVzaG9sZCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBmZl9lYnVy MTI4X2xvdWRuZXNzX2dsb2JhbChGRkVCVVIxMjhTdGF0ZSAqIHN0LCBkb3VibGUgKm91dCkKLXsK LSAgICByZXR1cm4gZWJ1cjEyOF9nYXRlZF9sb3VkbmVzcygmc3QsIDEsIG91dCk7Ci19Ci0KLXN0 YXRpYyBpbnQgZWJ1cjEyOF9lbmVyZ3lfaW5faW50ZXJ2YWwoRkZFQlVSMTI4U3RhdGUgKiBzdCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGludGVydmFsX2Zy YW1lcywgZG91YmxlICpvdXQpCi17Ci0gICAgaWYgKGludGVydmFsX2ZyYW1lcyA+IHN0LT5kLT5h dWRpb19kYXRhX2ZyYW1lcykgewotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAg IH0KLSAgICBlYnVyMTI4X2NhbGNfZ2F0aW5nX2Jsb2NrKHN0LCBpbnRlcnZhbF9mcmFtZXMsIG91 dCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZWJ1cjEyOF9lbmVyZ3lfc2hvcnR0 ZXJtKEZGRUJVUjEyOFN0YXRlICogc3QsIGRvdWJsZSAqb3V0KQotewotICAgIHJldHVybiBlYnVy MTI4X2VuZXJneV9pbl9pbnRlcnZhbChzdCwgc3QtPmQtPnNhbXBsZXNfaW5fMTAwbXMgKiAzMCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0KTsKLX0KLQotaW50IGZm X2VidXIxMjhfbG91ZG5lc3Nfc2hvcnR0ZXJtKEZGRUJVUjEyOFN0YXRlICogc3QsIGRvdWJsZSAq b3V0KQotewotICAgIGRvdWJsZSBlbmVyZ3k7Ci0gICAgaW50IGVycm9yID0gZWJ1cjEyOF9lbmVy Z3lfc2hvcnR0ZXJtKHN0LCAmZW5lcmd5KTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgcmV0 dXJuIGVycm9yOwotICAgIH0gZWxzZSBpZiAoZW5lcmd5IDw9IDAuMCkgewotICAgICAgICAqb3V0 ID0gLUhVR0VfVkFMOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgKm91dCA9IGVidXIx MjhfZW5lcmd5X3RvX2xvdWRuZXNzKGVuZXJneSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIEVC VSAtIFRFQ0ggMzM0MiAqLwotaW50IGZmX2VidXIxMjhfbG91ZG5lc3NfcmFuZ2VfbXVsdGlwbGUo RkZFQlVSMTI4U3RhdGUgKiogc3RzLCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqb3V0KQotewotICAgIHNpemVfdCBpLCBqOwotICAg IHNpemVfdCBzdGxfc2l6ZTsKLSAgICBkb3VibGUgc3RsX3Bvd2VyLCBzdGxfaW50ZWdyYXRlZDsK LSAgICAvKiBIaWdoIGFuZCBsb3cgcGVyY2VudGlsZSBlbmVyZ3kgKi8KLSAgICBkb3VibGUgaF9l biwgbF9lbjsKLSAgICB1bnNpZ25lZCBsb25nIGhpc3RbMTAwMF0gPSB7IDAgfTsKLSAgICBzaXpl X3QgcGVyY2VudGlsZV9sb3csIHBlcmNlbnRpbGVfaGlnaDsKLSAgICBzaXplX3QgaW5kZXg7Ci0K LSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChzdHNbaV0pIHsK LSAgICAgICAgICAgIGlmICgoc3RzW2ldLT5tb2RlICYgRkZfRUJVUjEyOF9NT0RFX0xSQSkgIT0K LSAgICAgICAgICAgICAgICBGRl9FQlVSMTI4X01PREVfTFJBKSB7Ci0gICAgICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K LQotICAgIHN0bF9zaXplID0gMDsKLSAgICBzdGxfcG93ZXIgPSAwLjA7Ci0gICAgZm9yIChpID0g MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoIXN0c1tpXSkKLSAgICAgICAgICAgIGNv bnRpbnVlOwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgMTAwMDsgKytqKSB7Ci0gICAgICAgICAg ICBoaXN0W2pdICs9IHN0c1tpXS0+ZC0+c2hvcnRfdGVybV9ibG9ja19lbmVyZ3lfaGlzdG9ncmFt W2pdOwotICAgICAgICAgICAgc3RsX3NpemUgKz0gc3RzW2ldLT5kLT5zaG9ydF90ZXJtX2Jsb2Nr X2VuZXJneV9oaXN0b2dyYW1bal07Ci0gICAgICAgICAgICBzdGxfcG93ZXIgKz0gc3RzW2ldLT5k LT5zaG9ydF90ZXJtX2Jsb2NrX2VuZXJneV9oaXN0b2dyYW1bal0KLSAgICAgICAgICAgICAgICAq IGhpc3RvZ3JhbV9lbmVyZ2llc1tqXTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIXN0bF9z aXplKSB7Ci0gICAgICAgICpvdXQgPSAwLjA7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot ICAgIHN0bF9wb3dlciAvPSBzdGxfc2l6ZTsKLSAgICBzdGxfaW50ZWdyYXRlZCA9IE1JTlVTXzIw REIgKiBzdGxfcG93ZXI7Ci0KLSAgICBpZiAoc3RsX2ludGVncmF0ZWQgPCBoaXN0b2dyYW1fZW5l cmd5X2JvdW5kYXJpZXNbMF0pIHsKLSAgICAgICAgaW5kZXggPSAwOwotICAgIH0gZWxzZSB7Ci0g ICAgICAgIGluZGV4ID0gZmluZF9oaXN0b2dyYW1faW5kZXgoc3RsX2ludGVncmF0ZWQpOwotICAg ICAgICBpZiAoc3RsX2ludGVncmF0ZWQgPiBoaXN0b2dyYW1fZW5lcmdpZXNbaW5kZXhdKSB7Ci0g ICAgICAgICAgICArK2luZGV4OwotICAgICAgICB9Ci0gICAgfQotICAgIHN0bF9zaXplID0gMDsK LSAgICBmb3IgKGogPSBpbmRleDsgaiA8IDEwMDA7ICsraikgewotICAgICAgICBzdGxfc2l6ZSAr PSBoaXN0W2pdOwotICAgIH0KLSAgICBpZiAoIXN0bF9zaXplKSB7Ci0gICAgICAgICpvdXQgPSAw LjA7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHBlcmNlbnRpbGVfbG93ID0gKHNp emVfdCkgKChzdGxfc2l6ZSAtIDEpICogMC4xICsgMC41KTsKLSAgICBwZXJjZW50aWxlX2hpZ2gg PSAoc2l6ZV90KSAoKHN0bF9zaXplIC0gMSkgKiAwLjk1ICsgMC41KTsKLQotICAgIHN0bF9zaXpl ID0gMDsKLSAgICBqID0gaW5kZXg7Ci0gICAgd2hpbGUgKHN0bF9zaXplIDw9IHBlcmNlbnRpbGVf bG93KSB7Ci0gICAgICAgIHN0bF9zaXplICs9IGhpc3RbaisrXTsKLSAgICB9Ci0gICAgbF9lbiA9 IGhpc3RvZ3JhbV9lbmVyZ2llc1tqIC0gMV07Ci0gICAgd2hpbGUgKHN0bF9zaXplIDw9IHBlcmNl bnRpbGVfaGlnaCkgewotICAgICAgICBzdGxfc2l6ZSArPSBoaXN0W2orK107Ci0gICAgfQotICAg IGhfZW4gPSBoaXN0b2dyYW1fZW5lcmdpZXNbaiAtIDFdOwotICAgICpvdXQgPQotICAgICAgICBl YnVyMTI4X2VuZXJneV90b19sb3VkbmVzcyhoX2VuKSAtCi0gICAgICAgIGVidXIxMjhfZW5lcmd5 X3RvX2xvdWRuZXNzKGxfZW4pOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgZmZfZWJ1cjEyOF9s b3VkbmVzc19yYW5nZShGRkVCVVIxMjhTdGF0ZSAqIHN0LCBkb3VibGUgKm91dCkKLXsKLSAgICBy ZXR1cm4gZmZfZWJ1cjEyOF9sb3VkbmVzc19yYW5nZV9tdWx0aXBsZSgmc3QsIDEsIG91dCk7Ci19 Ci0KLWludCBmZl9lYnVyMTI4X3NhbXBsZV9wZWFrKEZGRUJVUjEyOFN0YXRlICogc3QsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbF9udW1iZXIsIGRvdWJs ZSAqb3V0KQotewotICAgIGlmICgoc3QtPm1vZGUgJiBGRl9FQlVSMTI4X01PREVfU0FNUExFX1BF QUspICE9Ci0gICAgICAgIEZGX0VCVVIxMjhfTU9ERV9TQU1QTEVfUEVBSykgewotICAgICAgICBy ZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgIH0gZWxzZSBpZiAoY2hhbm5lbF9udW1iZXIgPj0g c3QtPmNoYW5uZWxzKSB7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgfQot ICAgICpvdXQgPSBzdC0+ZC0+c2FtcGxlX3BlYWtbY2hhbm5lbF9udW1iZXJdOwotICAgIHJldHVy biAwOwotfQpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvZWJ1cjEyOC5oIGIvbGliYXZmaWx0ZXIv ZWJ1cjEyOC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTczODVlMDQ0Li4wMDAw MDAwMDAwCi0tLSBhL2xpYmF2ZmlsdGVyL2VidXIxMjguaAorKysgL2Rldi9udWxsCkBAIC0xLDIy OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDExIEphbiBLb2tlbcO8bGxlcgotICoK LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq IExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqCi0gKiBUaGlzIGZpbGUgaXMgYmFzZWQg b24gbGliZWJ1cjEyOCB3aGljaCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHBzOi8vZ2l0aHViLmNv bS9qaWl4eWovbGliZWJ1cjEyOC8KLSAqCi0qLwotCi0jaWZuZGVmIEFWRklMVEVSX0VCVVIxMjhf SAotI2RlZmluZSBBVkZJTFRFUl9FQlVSMTI4X0gKLQotLyoqIFxmaWxlIGVidXIxMjguaAotICog IFxicmllZiBsaWJlYnVyMTI4IC0gYSBsaWJyYXJ5IGZvciBsb3VkbmVzcyBtZWFzdXJlbWVudCBh Y2NvcmRpbmcgdG8KLSAqICAgICAgICAgdGhlIEVCVSBSMTI4IHN0YW5kYXJkLgotICovCi0KLSNp bmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAgICAgLyogZm9yIHNpemVfdCAqLwotCi0vKiogXGVu dW0gY2hhbm5lbAotICogIFVzZSB0aGVzZSB2YWx1ZXMgd2hlbiBzZXR0aW5nIHRoZSBjaGFubmVs IG1hcCB3aXRoIGVidXIxMjhfc2V0X2NoYW5uZWwoKS4KLSAqICBTZWUgZGVmaW5pdGlvbnMgaW4g SVRVIFItUkVDLUJTIDE3NzAtNAotICovCi1lbnVtIGNoYW5uZWwgewotICAgIEZGX0VCVVIxMjhf VU5VU0VEID0gMCwgICAvKio8IHVudXNlZCBjaGFubmVsIChmb3IgZXhhbXBsZSBMRkUgY2hhbm5l bCkgKi8KLSAgICBGRl9FQlVSMTI4X0xFRlQsCi0gICAgRkZfRUJVUjEyOF9NcDAzMCA9IDEsICAg IC8qKjwgaXR1IE0rMDMwICovCi0gICAgRkZfRUJVUjEyOF9SSUdIVCwKLSAgICBGRl9FQlVSMTI4 X01tMDMwID0gMiwgICAgLyoqPCBpdHUgTS0wMzAgKi8KLSAgICBGRl9FQlVSMTI4X0NFTlRFUiwK LSAgICBGRl9FQlVSMTI4X01wMDAwID0gMywgICAgLyoqPCBpdHUgTSswMDAgKi8KLSAgICBGRl9F QlVSMTI4X0xFRlRfU1VSUk9VTkQsCi0gICAgRkZfRUJVUjEyOF9NcDExMCA9IDQsICAgIC8qKjwg aXR1IE0rMTEwICovCi0gICAgRkZfRUJVUjEyOF9SSUdIVF9TVVJST1VORCwKLSAgICBGRl9FQlVS MTI4X01tMTEwID0gNSwgICAgLyoqPCBpdHUgTS0xMTAgKi8KLSAgICBGRl9FQlVSMTI4X0RVQUxf TU9OTywgICAgLyoqPCBhIGNoYW5uZWwgdGhhdCBpcyBjb3VudGVkIHR3aWNlICovCi0gICAgRkZf RUJVUjEyOF9NcFNDLCAgICAgICAgIC8qKjwgaXR1IE0rU0MgKi8KLSAgICBGRl9FQlVSMTI4X01t U0MsICAgICAgICAgLyoqPCBpdHUgTS1TQyAqLwotICAgIEZGX0VCVVIxMjhfTXAwNjAsICAgICAg ICAvKio8IGl0dSBNKzA2MCAqLwotICAgIEZGX0VCVVIxMjhfTW0wNjAsICAgICAgICAvKio8IGl0 dSBNLTA2MCAqLwotICAgIEZGX0VCVVIxMjhfTXAwOTAsICAgICAgICAvKio8IGl0dSBNKzA5MCAq LwotICAgIEZGX0VCVVIxMjhfTW0wOTAsICAgICAgICAvKio8IGl0dSBNLTA5MCAqLwotICAgIEZG X0VCVVIxMjhfTXAxMzUsICAgICAgICAvKio8IGl0dSBNKzEzNSAqLwotICAgIEZGX0VCVVIxMjhf TW0xMzUsICAgICAgICAvKio8IGl0dSBNLTEzNSAqLwotICAgIEZGX0VCVVIxMjhfTXAxODAsICAg ICAgICAvKio8IGl0dSBNKzE4MCAqLwotICAgIEZGX0VCVVIxMjhfVXAwMDAsICAgICAgICAvKio8 IGl0dSBVKzAwMCAqLwotICAgIEZGX0VCVVIxMjhfVXAwMzAsICAgICAgICAvKio8IGl0dSBVKzAz MCAqLwotICAgIEZGX0VCVVIxMjhfVW0wMzAsICAgICAgICAvKio8IGl0dSBVLTAzMCAqLwotICAg IEZGX0VCVVIxMjhfVXAwNDUsICAgICAgICAvKio8IGl0dSBVKzA0NSAqLwotICAgIEZGX0VCVVIx MjhfVW0wNDUsICAgICAgICAvKio8IGl0dSBVLTAzMCAqLwotICAgIEZGX0VCVVIxMjhfVXAwOTAs ICAgICAgICAvKio8IGl0dSBVKzA5MCAqLwotICAgIEZGX0VCVVIxMjhfVW0wOTAsICAgICAgICAv Kio8IGl0dSBVLTA5MCAqLwotICAgIEZGX0VCVVIxMjhfVXAxMTAsICAgICAgICAvKio8IGl0dSBV KzExMCAqLwotICAgIEZGX0VCVVIxMjhfVW0xMTAsICAgICAgICAvKio8IGl0dSBVLTExMCAqLwot ICAgIEZGX0VCVVIxMjhfVXAxMzUsICAgICAgICAvKio8IGl0dSBVKzEzNSAqLwotICAgIEZGX0VC VVIxMjhfVW0xMzUsICAgICAgICAvKio8IGl0dSBVLTEzNSAqLwotICAgIEZGX0VCVVIxMjhfVXAx ODAsICAgICAgICAvKio8IGl0dSBVKzE4MCAqLwotICAgIEZGX0VCVVIxMjhfVHAwMDAsICAgICAg ICAvKio8IGl0dSBUKzAwMCAqLwotICAgIEZGX0VCVVIxMjhfQnAwMDAsICAgICAgICAvKio8IGl0 dSBCKzAwMCAqLwotICAgIEZGX0VCVVIxMjhfQnAwNDUsICAgICAgICAvKio8IGl0dSBCKzA0NSAq LwotICAgIEZGX0VCVVIxMjhfQm0wNDUgICAgICAgICAvKio8IGl0dSBCLTA0NSAqLwotfTsKLQot LyoqIFxlbnVtIG1vZGUKLSAqICBVc2UgdGhlc2UgdmFsdWVzIGluIGVidXIxMjhfaW5pdCAob3In ZWQpLiBUcnkgdG8gdXNlIHRoZSBsb3dlc3QgcG9zc2libGUKLSAqICBtb2RlcyB0aGF0IHN1aXQg eW91ciBuZWVkcywgYXMgcGVyZm9ybWFuY2Ugd2lsbCBiZSBiZXR0ZXIuCi0gKi8KLWVudW0gbW9k ZSB7Ci0gIC8qKiBjYW4gcmVzdXJycmVjdCBhbmQgY2FsbCBmZl9lYnVyMTI4X2xvdWRuZXNzX21v bWVudGFyeSAqLwotICAgIEZGX0VCVVIxMjhfTU9ERV9NID0gKDEgPDwgMCksCi0gIC8qKiBjYW4g Y2FsbCBmZl9lYnVyMTI4X2xvdWRuZXNzX3Nob3J0dGVybSAqLwotICAgIEZGX0VCVVIxMjhfTU9E RV9TID0gKDEgPDwgMSkgfCBGRl9FQlVSMTI4X01PREVfTSwKLSAgLyoqIGNhbiBjYWxsIGZmX2Vi dXIxMjhfbG91ZG5lc3NfZ2xvYmFsXyogYW5kIGZmX2VidXIxMjhfcmVsYXRpdmVfdGhyZXNob2xk ICovCi0gICAgRkZfRUJVUjEyOF9NT0RFX0kgPSAoMSA8PCAyKSB8IEZGX0VCVVIxMjhfTU9ERV9N LAotICAvKiogY2FuIGNhbGwgZmZfZWJ1cjEyOF9sb3VkbmVzc19yYW5nZSAqLwotICAgIEZGX0VC VVIxMjhfTU9ERV9MUkEgPSAoMSA8PCAzKSB8IEZGX0VCVVIxMjhfTU9ERV9TLAotICAvKiogY2Fu IGNhbGwgZmZfZWJ1cjEyOF9zYW1wbGVfcGVhayAqLwotICAgIEZGX0VCVVIxMjhfTU9ERV9TQU1Q TEVfUEVBSyA9ICgxIDw8IDQpIHwgRkZfRUJVUjEyOF9NT0RFX00sCi19OwotCi0vKiogZm9yd2Fy ZCBkZWNsYXJhdGlvbiBvZiBGRkVCVVIxMjhTdGF0ZUludGVybmFsICovCi1zdHJ1Y3QgRkZFQlVS MTI4U3RhdGVJbnRlcm5hbDsKLQotLyoqIFxicmllZiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91 dCB0aGUgc3RhdGUgb2YgYSBsb3VkbmVzcyBtZWFzdXJlbWVudC4KLSAqCi0gKiAgWW91IHNob3Vs ZCBub3QgbmVlZCB0byBtb2RpZnkgdGhpcyBzdHJ1Y3QgZGlyZWN0bHkuCi0gKi8KLXR5cGVkZWYg c3RydWN0IEZGRUJVUjEyOFN0YXRlIHsKLSAgICBpbnQgbW9kZTsgICAgICAgICAgICAgICAgICAg ICAgICAgLyoqPCBUaGUgY3VycmVudCBtb2RlLiAqLwotICAgIHVuc2lnbmVkIGludCBjaGFubmVs czsgICAgICAgICAgICAvKio8IFRoZSBudW1iZXIgb2YgY2hhbm5lbHMuICovCi0gICAgdW5zaWdu ZWQgbG9uZyBzYW1wbGVyYXRlOyAgICAgICAgIC8qKjwgVGhlIHNhbXBsZSByYXRlLiAqLwotICAg IHN0cnVjdCBGRkVCVVIxMjhTdGF0ZUludGVybmFsICpkOyAvKio8IEludGVybmFsIHN0YXRlLiAq LwotfSBGRkVCVVIxMjhTdGF0ZTsKLQotLyoqIFxicmllZiBJbml0aWFsaXplIGxpYnJhcnkgc3Rh dGUuCi0gKgotICogIEBwYXJhbSBjaGFubmVscyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLgotICog IEBwYXJhbSBzYW1wbGVyYXRlIHRoZSBzYW1wbGUgcmF0ZS4KLSAqICBAcGFyYW0gd2luZG93IHNl dCB0aGUgbWF4aW11bSB3aW5kb3cgc2l6ZSBpbiBtcywgc2V0IHRvIDAgZm9yIGF1dG8uCi0gKiAg QHBhcmFtIG1vZGUgc2VlIHRoZSBtb2RlIGVudW0gZm9yIHBvc3NpYmxlIHZhbHVlcy4KLSAqICBA cmV0dXJuIGFuIGluaXRpYWxpemVkIGxpYnJhcnkgc3RhdGUuCi0gKi8KLUZGRUJVUjEyOFN0YXRl ICpmZl9lYnVyMTI4X2luaXQodW5zaWduZWQgaW50IGNoYW5uZWxzLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNhbXBsZXJhdGUsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgd2luZG93LCBpbnQgbW9kZSk7Ci0KLS8q KiBcYnJpZWYgRGVzdHJveSBsaWJyYXJ5IHN0YXRlLgotICoKLSAqICBAcGFyYW0gc3QgcG9pbnRl ciB0byBhIGxpYnJhcnkgc3RhdGUuCi0gKi8KLXZvaWQgZmZfZWJ1cjEyOF9kZXN0cm95KEZGRUJV UjEyOFN0YXRlICoqIHN0KTsKLQotLyoqIFxicmllZiBTZXQgY2hhbm5lbCB0eXBlLgotICoKLSAq ICBUaGUgZGVmYXVsdCBpczoKLSAqICAtIDAgLT4gRkZfRUJVUjEyOF9MRUZUCi0gKiAgLSAxIC0+ IEZGX0VCVVIxMjhfUklHSFQKLSAqICAtIDIgLT4gRkZfRUJVUjEyOF9DRU5URVIKLSAqICAtIDMg LT4gRkZfRUJVUjEyOF9VTlVTRUQKLSAqICAtIDQgLT4gRkZfRUJVUjEyOF9MRUZUX1NVUlJPVU5E Ci0gKiAgLSA1IC0+IEZGX0VCVVIxMjhfUklHSFRfU1VSUk9VTkQKLSAqCi0gKiAgQHBhcmFtIHN0 IGxpYnJhcnkgc3RhdGUuCi0gKiAgQHBhcmFtIGNoYW5uZWxfbnVtYmVyIHplcm8gYmFzZWQgY2hh bm5lbCBpbmRleC4KLSAqICBAcGFyYW0gdmFsdWUgY2hhbm5lbCB0eXBlIGZyb20gdGhlICJjaGFu bmVsIiBlbnVtLgotICogIEByZXR1cm4KLSAqICAgIC0gMCBvbiBzdWNjZXNzLgotICogICAgLSBB VkVSUk9SKEVJTlZBTCkgaWYgaW52YWxpZCBjaGFubmVsIGluZGV4LgotICovCi1pbnQgZmZfZWJ1 cjEyOF9zZXRfY2hhbm5lbChGRkVCVVIxMjhTdGF0ZSAqIHN0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IGNoYW5uZWxfbnVtYmVyLCBpbnQgdmFsdWUpOwotCi0vKiog XGJyaWVmIEFkZCBmcmFtZXMgdG8gYmUgcHJvY2Vzc2VkLgotICoKLSAqICBAcGFyYW0gc3QgbGli cmFyeSBzdGF0ZS4KLSAqICBAcGFyYW0gc3JjIGFycmF5IG9mIHNvdXJjZSBmcmFtZXMuIENoYW5u ZWxzIG11c3QgYmUgaW50ZXJsZWF2ZWQuCi0gKiAgQHBhcmFtIGZyYW1lcyBudW1iZXIgb2YgZnJh bWVzLiBOb3QgbnVtYmVyIG9mIHNhbXBsZXMhCi0gKi8KLXZvaWQgZmZfZWJ1cjEyOF9hZGRfZnJh bWVzX2RvdWJsZShGRkVCVVIxMjhTdGF0ZSAqIHN0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGRvdWJsZSAqc3JjLCBzaXplX3QgZnJhbWVzKTsKLQotLyoqIFxicmll ZiBHZXQgZ2xvYmFsIGludGVncmF0ZWQgbG91ZG5lc3MgaW4gTFVGUy4KLSAqCi0gKiAgQHBhcmFt IHN0IGxpYnJhcnkgc3RhdGUuCi0gKiAgQHBhcmFtIG91dCBpbnRlZ3JhdGVkIGxvdWRuZXNzIGlu IExVRlMuIC1IVUdFX1ZBTCBpZiByZXN1bHQgaXMgbmVnYXRpdmUKLSAqICAgICAgICAgICAgIGlu ZmluaXR5LgotICogIEByZXR1cm4KLSAqICAgIC0gMCBvbiBzdWNjZXNzLgotICogICAgLSBBVkVS Uk9SKEVJTlZBTCkgaWYgbW9kZSAiRkZfRUJVUjEyOF9NT0RFX0kiIGhhcyBub3QgYmVlbiBzZXQu Ci0gKi8KLWludCBmZl9lYnVyMTI4X2xvdWRuZXNzX2dsb2JhbChGRkVCVVIxMjhTdGF0ZSAqIHN0 LCBkb3VibGUgKm91dCk7Ci0KLS8qKiBcYnJpZWYgR2V0IHNob3J0LXRlcm0gbG91ZG5lc3MgKGxh c3QgM3MpIGluIExVRlMuCi0gKgotICogIEBwYXJhbSBzdCBsaWJyYXJ5IHN0YXRlLgotICogIEBw YXJhbSBvdXQgc2hvcnQtdGVybSBsb3VkbmVzcyBpbiBMVUZTLiAtSFVHRV9WQUwgaWYgcmVzdWx0 IGlzIG5lZ2F0aXZlCi0gKiAgICAgICAgICAgICBpbmZpbml0eS4KLSAqICBAcmV0dXJuCi0gKiAg ICAtIDAgb24gc3VjY2Vzcy4KLSAqICAgIC0gQVZFUlJPUihFSU5WQUwpIGlmIG1vZGUgIkZGX0VC VVIxMjhfTU9ERV9TIiBoYXMgbm90IGJlZW4gc2V0LgotICovCi1pbnQgZmZfZWJ1cjEyOF9sb3Vk bmVzc19zaG9ydHRlcm0oRkZFQlVSMTI4U3RhdGUgKiBzdCwgZG91YmxlICpvdXQpOwotCi0vKiog XGJyaWVmIEdldCBsb3VkbmVzcyByYW5nZSAoTFJBKSBvZiBwcm9ncmFtbWUgaW4gTFUuCi0gKgot ICogIENhbGN1bGF0ZXMgbG91ZG5lc3MgcmFuZ2UgYWNjb3JkaW5nIHRvIEVCVSAzMzQyLgotICoK LSAqICBAcGFyYW0gc3QgbGlicmFyeSBzdGF0ZS4KLSAqICBAcGFyYW0gb3V0IGxvdWRuZXNzIHJh bmdlIChMUkEpIGluIExVLiBXaWxsIG5vdCBiZSBjaGFuZ2VkIGluIGNhc2Ugb2YKLSAqICAgICAg ICAgICAgIGVycm9yLiBBVkVSUk9SKEVJTlZBTCkgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGlzIGNh c2UuCi0gKiAgQHJldHVybgotICogICAgLSAwIG9uIHN1Y2Nlc3MuCi0gKiAgICAtIEFWRVJST1Io RUlOVkFMKSBpZiBtb2RlICJGRl9FQlVSMTI4X01PREVfTFJBIiBoYXMgbm90IGJlZW4gc2V0Lgot ICovCi1pbnQgZmZfZWJ1cjEyOF9sb3VkbmVzc19yYW5nZShGRkVCVVIxMjhTdGF0ZSAqIHN0LCBk b3VibGUgKm91dCk7Ci0vKiogXGJyaWVmIEdldCBsb3VkbmVzcyByYW5nZSAoTFJBKSBpbiBMVSBh Y3Jvc3MgbXVsdGlwbGUgaW5zdGFuY2VzLgotICoKLSAqICBDYWxjdWxhdGVzIGxvdWRuZXNzIHJh bmdlIGFjY29yZGluZyB0byBFQlUgMzM0Mi4KLSAqCi0gKiAgQHBhcmFtIHN0cyBhcnJheSBvZiBs aWJyYXJ5IHN0YXRlcy4KLSAqICBAcGFyYW0gc2l6ZSBsZW5ndGggb2Ygc3RzCi0gKiAgQHBhcmFt IG91dCBsb3VkbmVzcyByYW5nZSAoTFJBKSBpbiBMVS4gV2lsbCBub3QgYmUgY2hhbmdlZCBpbiBj YXNlIG9mCi0gKiAgICAgICAgICAgICBlcnJvci4gQVZFUlJPUihFSU5WQUwpIHdpbGwgYmUgcmV0 dXJuZWQgaW4gdGhpcyBjYXNlLgotICogIEByZXR1cm4KLSAqICAgIC0gMCBvbiBzdWNjZXNzLgot ICogICAgLSBBVkVSUk9SKEVJTlZBTCkgaWYgbW9kZSAiRkZfRUJVUjEyOF9NT0RFX0xSQSIgaGFz IG5vdCBiZWVuIHNldC4KLSAqLwotaW50IGZmX2VidXIxMjhfbG91ZG5lc3NfcmFuZ2VfbXVsdGlw bGUoRkZFQlVSMTI4U3RhdGUgKiogc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IHNpemUsIGRvdWJsZSAqb3V0KTsKLQotLyoqIFxicmllZiBHZXQgbWF4 aW11bSBzYW1wbGUgcGVhayBvZiBzZWxlY3RlZCBjaGFubmVsIGluIGZsb2F0IGZvcm1hdC4KLSAq Ci0gKiAgQHBhcmFtIHN0IGxpYnJhcnkgc3RhdGUKLSAqICBAcGFyYW0gY2hhbm5lbF9udW1iZXIg Y2hhbm5lbCB0byBhbmFseXNlCi0gKiAgQHBhcmFtIG91dCBtYXhpbXVtIHNhbXBsZSBwZWFrIGlu IGZsb2F0IGZvcm1hdCAoMS4wIGlzIDAgZEJGUykKLSAqICBAcmV0dXJuCi0gKiAgICAtIDAgb24g c3VjY2Vzcy4KLSAqICAgIC0gQVZFUlJPUihFSU5WQUwpIGlmIG1vZGUgIkZGX0VCVVIxMjhfTU9E RV9TQU1QTEVfUEVBSyIgaGFzIG5vdCBiZWVuIHNldC4KLSAqICAgIC0gQVZFUlJPUihFSU5WQUwp IGlmIGludmFsaWQgY2hhbm5lbCBpbmRleC4KLSAqLwotaW50IGZmX2VidXIxMjhfc2FtcGxlX3Bl YWsoRkZFQlVSMTI4U3RhdGUgKiBzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBjaGFubmVsX251bWJlciwgZG91YmxlICpvdXQpOwotCi0vKiogXGJyaWVmIEdldCBy ZWxhdGl2ZSB0aHJlc2hvbGQgaW4gTFVGUy4KLSAqCi0gKiAgQHBhcmFtIHN0IGxpYnJhcnkgc3Rh dGUKLSAqICBAcGFyYW0gb3V0IHJlbGF0aXZlIHRocmVzaG9sZCBpbiBMVUZTLgotICogIEByZXR1 cm4KLSAqICAgIC0gMCBvbiBzdWNjZXNzLgotICogICAgLSBBVkVSUk9SKEVJTlZBTCkgaWYgbW9k ZSAiRkZfRUJVUjEyOF9NT0RFX0kiIGhhcyBub3QgYmVlbiBzZXQuCi0gKi8KLWludCBmZl9lYnVy MTI4X3JlbGF0aXZlX3RocmVzaG9sZChGRkVCVVIxMjhTdGF0ZSAqIHN0LCBkb3VibGUgKm91dCk7 Ci0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQVZGSUxURVJfRUJVUjEyOF9I ICovCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9mX2VidXIxMjguYyBiL2xpYmF2ZmlsdGVyL2Zf ZWJ1cjEyOC5jCmluZGV4IGE5MjE2MDJiNDQuLmQ4NWRmMzQxNDkgMTAwNjQ0Ci0tLSBhL2xpYmF2 ZmlsdGVyL2ZfZWJ1cjEyOC5jCisrKyBiL2xpYmF2ZmlsdGVyL2ZfZWJ1cjEyOC5jCkBAIC03NSw2 ICs3NSwxMyBAQCBzdHJ1Y3QgaW50ZWdyYXRvciB7CiAgICAgc3RydWN0IGhpc3RfZW50cnkgKmhp c3RvZ3JhbTsgICAvLy88IGhpc3RvZ3JhbSBvZiB0aGUgcG93ZXJzLCB1c2VkIHRvIGNvbXB1dGUg TFJBIGFuZCBJCiB9OwogCitlbnVtIFByaW50Rm9ybWF0IHsKKyAgICBOT05FLAorICAgIEpTT04s CisgICAgU1VNTUFSWSwKKyAgICBQRl9OQgorfTsKKwogc3RydWN0IHJlY3QgeyBpbnQgeCwgeSwg dywgaDsgfTsKIAogdHlwZWRlZiBzdHJ1Y3QgRUJVUjEyOENvbnRleHQgewpAQCAtODUsOCArOTIs MTAgQEAgdHlwZWRlZiBzdHJ1Y3QgRUJVUjEyOENvbnRleHQgewogICAgIGRvdWJsZSB0cnVlX3Bl YWs7ICAgICAgICAgICAgICAgLy8vPCBnbG9iYWwgdHJ1ZSBwZWFrCiAgICAgZG91YmxlICp0cnVl X3BlYWtzOyAgICAgICAgICAgICAvLy88IHRydWUgcGVha3MgcGVyIGNoYW5uZWwKICAgICBkb3Vi bGUgc2FtcGxlX3BlYWs7ICAgICAgICAgICAgIC8vLzwgZ2xvYmFsIHNhbXBsZSBwZWFrCisgICAg ZG91YmxlIGZyYW1lX3NhbXBsZV9wZWFrOyAgICAgICAvLy88IGZyYW1lIHNhbXBsZSBwZWFrCiAg ICAgZG91YmxlICpzYW1wbGVfcGVha3M7ICAgICAgICAgICAvLy88IHNhbXBsZSBwZWFrcyBwZXIg Y2hhbm5lbAogICAgIGRvdWJsZSAqdHJ1ZV9wZWFrc19wZXJfZnJhbWU7ICAgLy8vPCB0cnVlIHBl YWtzIGluIGEgZnJhbWUgcGVyIGNoYW5uZWwKKyAgICBkb3VibGUgKnNhbXBsZV9wZWFrc19wZXJf ZnJhbWU7IC8vLzwgc2FtcGxlIHBlYWtzIGluIGEgZnJhbWUgcGVyIGNoYW5uZWwKICNpZiBDT05G SUdfU1dSRVNBTVBMRQogICAgIFN3ckNvbnRleHQgKnN3cl9jdHg7ICAgICAgICAgICAgLy8vPCBv dmVyLXNhbXBsaW5nIGNvbnRleHQgZm9yIHRydWUgcGVhayBtZXRlcmluZwogICAgIGRvdWJsZSAq c3dyX2J1ZjsgICAgICAgICAgICAgICAgLy8vPCByZXNhbXBsZWQgYXVkaW8gZGF0YSBmb3IgdHJ1 ZSBwZWFrIG1ldGVyaW5nCkBAIC0zODksMTEgKzM5OCw4IEBAIHN0YXRpYyBpbnQgY29uZmlnX3Zp ZGVvX291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0 YXRpYyBpbnQgY29uZmlnX2F1ZGlvX2lucHV0KEFWRmlsdGVyTGluayAqaW5saW5rKQorc3RhdGlj IGludCBjb25maWdfYXVkaW9faW4oQVZGaWx0ZXJMaW5rICppbmxpbmssIEVCVVIxMjhDb250ZXh0 ICplYnVyMTI4KQogewotICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gaW5saW5rLT5kc3Q7Ci0g ICAgRUJVUjEyOENvbnRleHQgKmVidXIxMjggPSBjdHgtPnByaXY7Ci0KICAgICAvKiBVbm9mZmlj aWFsIHJldmVyc2VkIHBhcmFtZXRyaXphdGlvbiBvZiBQUkUKICAgICAgKiBhbmQgUkxCIGZyb20g NDhrSHogKi8KIApAQCAtNDM0LDExICs0NDAsMTYgQEAgc3RhdGljIGludCBjb25maWdfYXVkaW9f aW5wdXQoQVZGaWx0ZXJMaW5rICppbmxpbmspCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBp bnQgY29uZmlnX2F1ZGlvX291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCitzdGF0aWMgaW50 IGNvbmZpZ19hdWRpb19pbnB1dChBVkZpbHRlckxpbmsgKmlubGluaykKIHsKLSAgICBpbnQgaTsK LSAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IG91dGxpbmstPnNyYzsKKyAgICBBVkZpbHRlckNv bnRleHQgKmN0eCA9IGlubGluay0+ZHN0OwogICAgIEVCVVIxMjhDb250ZXh0ICplYnVyMTI4ID0g Y3R4LT5wcml2OworICAgIHJldHVybiBjb25maWdfYXVkaW9faW4oaW5saW5rLCBlYnVyMTI4KTsK K30KKworc3RhdGljIGludCBjb25maWdfYXVkaW9fb3V0KEFWRmlsdGVyTGluayAqb3V0bGluaywg RUJVUjEyOENvbnRleHQgKmVidXIxMjgpCit7CisgICAgaW50IGk7CiAgICAgY29uc3QgaW50IG5i X2NoYW5uZWxzID0gb3V0bGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwogCiAjZGVmaW5lIEJB Q0tfTUFTSyAoQVZfQ0hfQkFDS19MRUZUICAgIHxBVl9DSF9CQUNLX0NFTlRFUiAgICB8QVZfQ0hf QkFDS19SSUdIVHwgXApAQCAtNTE1LDE0ICs1MjYsMjIgQEAgc3RhdGljIGludCBjb25maWdfYXVk aW9fb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGluaykKICNlbmRpZgogCiAgICAgaWYgKGVidXIx MjgtPnBlYWtfbW9kZSAmIFBFQUtfTU9ERV9TQU1QTEVTX1BFQUtTKSB7CisgICAgICAgIGVidXIx MjgtPnNhbXBsZV9wZWFrc19wZXJfZnJhbWUgPSBhdl9jYWxsb2MobmJfY2hhbm5lbHMsIHNpemVv ZigqZWJ1cjEyOC0+c2FtcGxlX3BlYWtzX3Blcl9mcmFtZSkpOwogICAgICAgICBlYnVyMTI4LT5z YW1wbGVfcGVha3MgPSBhdl9jYWxsb2MobmJfY2hhbm5lbHMsIHNpemVvZigqZWJ1cjEyOC0+c2Ft cGxlX3BlYWtzKSk7Ci0gICAgICAgIGlmICghZWJ1cjEyOC0+c2FtcGxlX3BlYWtzKQorICAgICAg ICBpZiAoIWVidXIxMjgtPnNhbXBsZV9wZWFrcyB8fCAhZWJ1cjEyOC0+c2FtcGxlX3BlYWtzX3Bl cl9mcmFtZSkKICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CiAgICAgfQogCiAg ICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY29uZmlnX2F1ZGlvX291dHB1dChBVkZpbHRl ckxpbmsgKm91dGxpbmspCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBvdXRsaW5rLT5z cmM7CisgICAgRUJVUjEyOENvbnRleHQgKmVidXIxMjggPSBjdHgtPnByaXY7CisgICAgcmV0dXJu IGNvbmZpZ19hdWRpb19vdXQob3V0bGluaywgZWJ1cjEyOCk7Cit9CisKICNkZWZpbmUgRU5FUkdZ KGxvdWRuZXNzKSAoZmZfZXhwMTAoKChsb3VkbmVzcykgKyAwLjY5MSkgLyAxMC4pKQogI2RlZmlu ZSBMT1VETkVTUyhlbmVyZ3kpICgtMC42OTEgKyAxMCAqIGxvZzEwKGVuZXJneSkpCiAjZGVmaW5l IERCRlMoZW5lcmd5KSAoMjAgKiBsb2cxMChlbmVyZ3kpKQpAQCAtNTQxLDkgKzU2MCw4IEBAIHN0 YXRpYyBzdHJ1Y3QgaGlzdF9lbnRyeSAqZ2V0X2hpc3RvZ3JhbSh2b2lkKQogICAgIHJldHVybiBo OwogfQogCi1zdGF0aWMgYXZfY29sZCBpbnQgaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKK3N0 YXRpYyBhdl9jb2xkIGludCBpbml0X2VidXIxMjgoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEVCVVIx MjhDb250ZXh0ICplYnVyMTI4KQogewotICAgIEVCVVIxMjhDb250ZXh0ICplYnVyMTI4ID0gY3R4 LT5wcml2OwogICAgIEFWRmlsdGVyUGFkIHBhZDsKICAgICBpbnQgcmV0OwogCkBAIC01NzQsNiAr NTkyLDkgQEAgc3RhdGljIGF2X2NvbGQgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiAg ICAgZWJ1cjEyOC0+aW50ZWdyYXRlZF9sb3VkbmVzcyA9IEFCU19USFJFUzsKICAgICBlYnVyMTI4 LT5sb3VkbmVzc19yYW5nZSA9IDA7CiAKKyAgICBpZiAoc3RyY21wKGN0eC0+ZmlsdGVyLT5uYW1l LCAiZWJ1cjEyOCIpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIC8qIGluc2VydCBvdXRwdXQg cGFkcyAqLwogICAgIGlmIChlYnVyMTI4LT5kb192aWRlbykgewogICAgICAgICBwYWQgPSAoQVZG aWx0ZXJQYWQpewpAQCAtNjAwLDYgKzYyMSwxMiBAQCBzdGF0aWMgYXZfY29sZCBpbnQgaW5pdChB VkZpbHRlckNvbnRleHQgKmN0eCkKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGF2X2NvbGQg aW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgRUJVUjEyOENvbnRleHQgKmVi dXIxMjggPSBjdHgtPnByaXY7CisgICAgcmV0dXJuIGluaXRfZWJ1cjEyOChjdHgsIGVidXIxMjgp OworfQorCiAjZGVmaW5lIEhJU1RfUE9TKHBvd2VyKSAoaW50KSgoKHBvd2VyKSAtIEFCU19USFJF UykgKiBISVNUX0dSQUlOKQogCiAvKiBsb3VkbmVzcyBhbmQgcG93ZXIgc2hvdWxkIGJlIHNldCBz dWNoIGFzIGxvdWRuZXNzID0gLTAuNjkxICsKQEAgLTYyNywzOSArNjU0LDQ0IEBAIHN0YXRpYyBp bnQgZ2F0ZV91cGRhdGUoc3RydWN0IGludGVncmF0b3IgKmludGVnLCBkb3VibGUgcG93ZXIsCiAg ICAgcmV0dXJuIGdhdGVfaGlzdF9wb3M7CiB9CiAKLXN0YXRpYyBpbnQgZmlsdGVyX2ZyYW1lKEFW RmlsdGVyTGluayAqaW5saW5rLCBBVkZyYW1lICppbnNhbXBsZXMpCitzdGF0aWMgaW50IHRydWVf cGVha3NfZWJ1cjEyOChFQlVSMTI4Q29udGV4dCAqZWJ1cjEyOCwgY29uc3QgdWludDhfdCAqKnNh bXBsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJfc2FtcGxlcykKIHsK LSAgICBpbnQgaSwgY2gsIGlkeF9pbnNhbXBsZSwgcmV0OwotICAgIEFWRmlsdGVyQ29udGV4dCAq Y3R4ID0gaW5saW5rLT5kc3Q7Ci0gICAgRUJVUjEyOENvbnRleHQgKmVidXIxMjggPSBjdHgtPnBy aXY7Ci0gICAgY29uc3QgaW50IG5iX2NoYW5uZWxzID0gZWJ1cjEyOC0+bmJfY2hhbm5lbHM7Ci0g ICAgY29uc3QgaW50IG5iX3NhbXBsZXMgID0gaW5zYW1wbGVzLT5uYl9zYW1wbGVzOwotICAgIGNv bnN0IGRvdWJsZSAqc2FtcGxlcyA9IChkb3VibGUgKilpbnNhbXBsZXMtPmRhdGFbMF07Ci0gICAg QVZGcmFtZSAqcGljOwotCiAjaWYgQ09ORklHX1NXUkVTQU1QTEUKICAgICBpZiAoZWJ1cjEyOC0+ cGVha19tb2RlICYgUEVBS19NT0RFX1RSVUVfUEVBS1MgJiYgZWJ1cjEyOC0+aWR4X2luc2FtcGxl ID09IDApIHsKICAgICAgICAgY29uc3QgZG91YmxlICpzd3Jfc2FtcGxlcyA9IGVidXIxMjgtPnN3 cl9idWY7Ci0gICAgICAgIGludCByZXQgPSBzd3JfY29udmVydChlYnVyMTI4LT5zd3JfY3R4LCAo dWludDhfdCoqKSZlYnVyMTI4LT5zd3JfYnVmLCAxOTIwMCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdCB1aW50OF90ICoqKWluc2FtcGxlcy0+ZGF0YSwgbmJfc2FtcGxlcyk7 Ci0gICAgICAgIGlmIChyZXQgPCAwKQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAg Zm9yIChjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspCi0gICAgICAgICAgICBlYnVyMTI4 LT50cnVlX3BlYWtzX3Blcl9mcmFtZVtjaF0gPSAwLjA7Ci0gICAgICAgIGZvciAoaWR4X2luc2Ft cGxlID0gMDsgaWR4X2luc2FtcGxlIDwgcmV0OyBpZHhfaW5zYW1wbGUrKykgewotICAgICAgICAg ICAgZm9yIChjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKLSAgICAgICAgICAgICAg ICBlYnVyMTI4LT50cnVlX3BlYWtzW2NoXSA9IEZGTUFYKGVidXIxMjgtPnRydWVfcGVha3NbY2hd LCBmYWJzKCpzd3Jfc2FtcGxlcykpOwotICAgICAgICAgICAgICAgIGVidXIxMjgtPnRydWVfcGVh a3NfcGVyX2ZyYW1lW2NoXSA9IEZGTUFYKGVidXIxMjgtPnRydWVfcGVha3NfcGVyX2ZyYW1lW2No XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmYWJzKCpzd3Jfc2FtcGxlcykpOwotICAgICAgICAgICAgICAgIHN3cl9zYW1wbGVzKys7 CisgICAgICAgIGNvbnN0IGludCBuYl9jaGFubmVscyA9IGVidXIxMjgtPm5iX2NoYW5uZWxzOwor ICAgICAgICBpbnQgbmJfb3V0X3NhbXBsZXMgPSBzd3JfZ2V0X291dF9zYW1wbGVzKGVidXIxMjgt PnN3cl9jdHgsIG5iX3NhbXBsZXMpOworCisgICAgICAgIHdoaWxlIChuYl9vdXRfc2FtcGxlcyA+ IDApIHsKKyAgICAgICAgICAgIGludCByZXQgPSBzd3JfY29udmVydChlYnVyMTI4LT5zd3JfY3R4 LCAodWludDhfdCoqKSZlYnVyMTI4LT5zd3JfYnVmLCAxOTIwMCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzYW1wbGVzLCBuYl9zYW1wbGVzKTsKKyAgICAgICAgICAgIGlmIChy ZXQgPD0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgZm9yIChp bnQgY2ggPSAwOyBjaCA8IG5iX2NoYW5uZWxzOyBjaCsrKQorICAgICAgICAgICAgICAgIGVidXIx MjgtPnRydWVfcGVha3NfcGVyX2ZyYW1lW2NoXSA9IDAuMDsKKyAgICAgICAgICAgIGZvciAoaW50 IGlkeF9pbnNhbXBsZSA9IDA7IGlkeF9pbnNhbXBsZSA8IHJldDsgaWR4X2luc2FtcGxlKyspIHsK KyAgICAgICAgICAgICAgICBmb3IgKGludCBjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKysp IHsKKyAgICAgICAgICAgICAgICAgICAgZWJ1cjEyOC0+dHJ1ZV9wZWFrc1tjaF0gPSBGRk1BWChl YnVyMTI4LT50cnVlX3BlYWtzW2NoXSwgZmFicygqc3dyX3NhbXBsZXMpKTsKKyAgICAgICAgICAg ICAgICAgICAgZWJ1cjEyOC0+dHJ1ZV9wZWFrc19wZXJfZnJhbWVbY2hdID0gRkZNQVgoZWJ1cjEy OC0+dHJ1ZV9wZWFrc19wZXJfZnJhbWVbY2hdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWJzKCpzd3Jfc2FtcGxlcykpOwor ICAgICAgICAgICAgICAgICAgICBzd3Jfc2FtcGxlcysrOworICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgbmJfb3V0X3NhbXBsZXMgLT0gcmV0OworICAgICAg ICAgICAgbmJfc2FtcGxlcyA9IDA7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKKyAgICByZXR1 cm4gMDsKK30KIAotICAgIGZvciAoaWR4X2luc2FtcGxlID0gZWJ1cjEyOC0+aWR4X2luc2FtcGxl OyBpZHhfaW5zYW1wbGUgPCBuYl9zYW1wbGVzOyBpZHhfaW5zYW1wbGUrKykgewotICAgICAgICBj b25zdCBpbnQgYmluX2lkXzQwMCAgPSBlYnVyMTI4LT5pNDAwLmNhY2hlX3BvczsKLSAgICAgICAg Y29uc3QgaW50IGJpbl9pZF8zMDAwID0gZWJ1cjEyOC0+aTMwMDAuY2FjaGVfcG9zOworc3RhdGlj IHZvaWQgcHJvY2Vzc19lYnVyMTI4KEVCVVIxMjhDb250ZXh0ICplYnVyMTI4LCBjb25zdCBkb3Vi bGUgKnNhbXBsZXMpCit7CisgICAgY29uc3QgaW50IG5iX2NoYW5uZWxzID0gZWJ1cjEyOC0+bmJf Y2hhbm5lbHM7CisgICAgY29uc3QgaW50IGJpbl9pZF80MDAgID0gZWJ1cjEyOC0+aTQwMC5jYWNo ZV9wb3M7CisgICAgY29uc3QgaW50IGJpbl9pZF8zMDAwID0gZWJ1cjEyOC0+aTMwMDAuY2FjaGVf cG9zOwogCiAjZGVmaW5lIE1PVkVfVE9fTkVYVF9DQUNIRURfRU5UUlkodGltZSkgZG8geyAgICAg ICAgICAgICAgICBcCiAgICAgZWJ1cjEyOC0+aSMjdGltZS5jYWNoZV9wb3MrKzsgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCkBAIC02NzAsNDcgKzcwMiw0OSBAQCBzdGF0aWMgaW50IGZpbHRl cl9mcmFtZShBVkZpbHRlckxpbmsgKmlubGluaywgQVZGcmFtZSAqaW5zYW1wbGVzKQogICAgIH0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog fSB3aGlsZSAoMCkKIAotICAgICAgICBNT1ZFX1RPX05FWFRfQ0FDSEVEX0VOVFJZKDQwMCk7Ci0g ICAgICAgIE1PVkVfVE9fTkVYVF9DQUNIRURfRU5UUlkoMzAwMCk7CisgICAgTU9WRV9UT19ORVhU X0NBQ0hFRF9FTlRSWSg0MDApOworICAgIE1PVkVfVE9fTkVYVF9DQUNIRURfRU5UUlkoMzAwMCk7 CiAKLSAgICAgICAgZm9yIChjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKLSAgICAg ICAgICAgIGRvdWJsZSBiaW47CisgICAgZm9yIChpbnQgY2ggPSAwOyBjaCA8IG5iX2NoYW5uZWxz OyBjaCsrKSB7CisgICAgICAgIGRvdWJsZSBiaW47CiAKLSAgICAgICAgICAgIGlmIChlYnVyMTI4 LT5wZWFrX21vZGUgJiBQRUFLX01PREVfU0FNUExFU19QRUFLUykKLSAgICAgICAgICAgICAgICBl YnVyMTI4LT5zYW1wbGVfcGVha3NbY2hdID0gRkZNQVgoZWJ1cjEyOC0+c2FtcGxlX3BlYWtzW2No XSwgZmFicyhzYW1wbGVzW2lkeF9pbnNhbXBsZSAqIG5iX2NoYW5uZWxzICsgY2hdKSk7CisgICAg ICAgIGlmIChlYnVyMTI4LT5wZWFrX21vZGUgJiBQRUFLX01PREVfU0FNUExFU19QRUFLUykgewor ICAgICAgICAgICAgZWJ1cjEyOC0+c2FtcGxlX3BlYWtzW2NoXSA9IEZGTUFYKGVidXIxMjgtPnNh bXBsZV9wZWFrc1tjaF0sIGZhYnMoc2FtcGxlc1tjaF0pKTsKKyAgICAgICAgICAgIGVidXIxMjgt PnNhbXBsZV9wZWFrc19wZXJfZnJhbWVbY2hdID0gRkZNQVgoZWJ1cjEyOC0+c2FtcGxlX3BlYWtz X3Blcl9mcmFtZVtjaF0sIGZhYnMoc2FtcGxlc1tjaF0pKTsKKyAgICAgICAgfQogCi0gICAgICAg ICAgICBlYnVyMTI4LT54W2NoICogM10gPSBzYW1wbGVzW2lkeF9pbnNhbXBsZSAqIG5iX2NoYW5u ZWxzICsgY2hdOyAvLyBzZXQgWFtpXQorICAgICAgICBlYnVyMTI4LT54W2NoICogM10gPSBzYW1w bGVzW2NoXTsgLy8gc2V0IFhbaV0KIAotICAgICAgICAgICAgaWYgKCFlYnVyMTI4LT5jaF93ZWln aHRpbmdbY2hdKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWVidXIx MjgtPmNoX3dlaWdodGluZ1tjaF0pCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAg ICAgLyogWVtpXSA9IFhbaV0qYjAgKyBYW2ktMV0qYjEgKyBYW2ktMl0qYjIgLSBZW2ktMV0qYTEg LSBZW2ktMl0qYTIgKi8KLSNkZWZpbmUgRklMVEVSKFksIFgsIE5VTSwgREVOKSBkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZG91 YmxlICpkc3QgPSBlYnVyMTI4LT5ZICsgY2gqMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgICAgICAgICBkb3VibGUgKnNyYyA9IGVidXIxMjgtPlggKyBjaCozOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGRzdFsyXSA9 IGRzdFsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgICAgICAgICAgZHN0WzFdID0gZHN0WzBdOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBkc3RbMF0gPSBzcmNb MF0qTlVNWzBdICsgc3JjWzFdKk5VTVsxXSArIHNyY1syXSpOVU1bMl0gICAgICAgICAgICAgIFwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBkc3RbMV0qREVOWzFdIC0gZHN0 WzJdKkRFTlsyXTsgICAgICAgICAgICAgXAorICAgICAgICAvKiBZW2ldID0gWFtpXSpiMCArIFhb aS0xXSpiMSArIFhbaS0yXSpiMiAtIFlbaS0xXSphMSAtIFlbaS0yXSphMiAqLworI2RlZmluZSBG SUxURVIoWSwgWCwgTlVNLCBERU4pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgZG91YmxlICpkc3QgPSBlYnVyMTI4LT5ZICsgY2gqMzsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvdWJsZSAqc3JjID0g ZWJ1cjEyOC0+WCArIGNoKjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICBkc3RbMl0gPSBkc3RbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZHN0WzFdID0gZHN0WzBdOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRzdFsw XSA9IHNyY1swXSpOVU1bMF0gKyBzcmNbMV0qTlVNWzFdICsgc3JjWzJdKk5VTVsyXSAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gZHN0WzFdKkRFTlsxXSAt IGRzdFsyXSpERU5bMl07ICAgICAgICAgICAgIFwKIH0gd2hpbGUgKDApCiAKLSAgICAgICAgICAg IC8vIFRPRE86IG1lcmdlIGJvdGggZmlsdGVycyBpbiBvbmU/Ci0gICAgICAgICAgICBGSUxURVIo eSwgeCwgZWJ1cjEyOC0+cHJlX2IsIGVidXIxMjgtPnByZV9hKTsgIC8vIGFwcGx5IHByZS1maWx0 ZXIKLSAgICAgICAgICAgIGVidXIxMjgtPnhbY2ggKiAzICsgMl0gPSBlYnVyMTI4LT54W2NoICog MyArIDFdOwotICAgICAgICAgICAgZWJ1cjEyOC0+eFtjaCAqIDMgKyAxXSA9IGVidXIxMjgtPnhb Y2ggKiAzICAgIF07Ci0gICAgICAgICAgICBGSUxURVIoeiwgeSwgZWJ1cjEyOC0+cmxiX2IsIGVi dXIxMjgtPnJsYl9hKTsgIC8vIGFwcGx5IFJMQi1maWx0ZXIKKyAgICAgICAgLy8gVE9ETzogbWVy Z2UgYm90aCBmaWx0ZXJzIGluIG9uZT8KKyAgICAgICAgRklMVEVSKHksIHgsIGVidXIxMjgtPnBy ZV9iLCBlYnVyMTI4LT5wcmVfYSk7ICAvLyBhcHBseSBwcmUtZmlsdGVyCisgICAgICAgIGVidXIx MjgtPnhbY2ggKiAzICsgMl0gPSBlYnVyMTI4LT54W2NoICogMyArIDFdOworICAgICAgICBlYnVy MTI4LT54W2NoICogMyArIDFdID0gZWJ1cjEyOC0+eFtjaCAqIDMgICAgXTsKKyAgICAgICAgRklM VEVSKHosIHksIGVidXIxMjgtPnJsYl9iLCBlYnVyMTI4LT5ybGJfYSk7ICAvLyBhcHBseSBSTEIt ZmlsdGVyCiAKLSAgICAgICAgICAgIGJpbiA9IGVidXIxMjgtPnpbY2ggKiAzXSAqIGVidXIxMjgt PnpbY2ggKiAzXTsKKyAgICAgICAgYmluID0gZWJ1cjEyOC0+eltjaCAqIDNdICogZWJ1cjEyOC0+ eltjaCAqIDNdOwogCi0gICAgICAgICAgICAvKiBhZGQgdGhlIG5ldyB2YWx1ZSwgYW5kIGxpbWl0 IHRoZSBzdW0gdG8gdGhlIGNhY2hlIHNpemUgKDQwMG1zIG9yIDNzKQotICAgICAgICAgICAgICog YnkgcmVtb3ZpbmcgdGhlIG9sZGVzdCBvbmUgKi8KLSAgICAgICAgICAgIGVidXIxMjgtPmk0MDAu c3VtIFtjaF0gPSBlYnVyMTI4LT5pNDAwLnN1bSBbY2hdICsgYmluIC0gZWJ1cjEyOC0+aTQwMC5j YWNoZSBbY2hdW2Jpbl9pZF80MDBdOwotICAgICAgICAgICAgZWJ1cjEyOC0+aTMwMDAuc3VtW2No XSA9IGVidXIxMjgtPmkzMDAwLnN1bVtjaF0gKyBiaW4gLSBlYnVyMTI4LT5pMzAwMC5jYWNoZVtj aF1bYmluX2lkXzMwMDBdOworICAgICAgICAvKiBhZGQgdGhlIG5ldyB2YWx1ZSwgYW5kIGxpbWl0 IHRoZSBzdW0gdG8gdGhlIGNhY2hlIHNpemUgKDQwMG1zIG9yIDNzKQorICAgICAgICAgKiBieSBy ZW1vdmluZyB0aGUgb2xkZXN0IG9uZSAqLworICAgICAgICBlYnVyMTI4LT5pNDAwLnN1bSBbY2hd ID0gZWJ1cjEyOC0+aTQwMC5zdW0gW2NoXSArIGJpbiAtIGVidXIxMjgtPmk0MDAuY2FjaGUgW2No XVtiaW5faWRfNDAwXTsKKyAgICAgICAgZWJ1cjEyOC0+aTMwMDAuc3VtW2NoXSA9IGVidXIxMjgt PmkzMDAwLnN1bVtjaF0gKyBiaW4gLSBlYnVyMTI4LT5pMzAwMC5jYWNoZVtjaF1bYmluX2lkXzMw MDBdOwogCi0gICAgICAgICAgICAvKiBvdmVycmlkZSBvbGQgY2FjaGUgZW50cnkgd2l0aCB0aGUg bmV3IHZhbHVlICovCi0gICAgICAgICAgICBlYnVyMTI4LT5pNDAwLmNhY2hlIFtjaF1bYmluX2lk XzQwMCBdID0gYmluOwotICAgICAgICAgICAgZWJ1cjEyOC0+aTMwMDAuY2FjaGVbY2hdW2Jpbl9p ZF8zMDAwXSA9IGJpbjsKLSAgICAgICAgfQorICAgICAgICAvKiBvdmVycmlkZSBvbGQgY2FjaGUg ZW50cnkgd2l0aCB0aGUgbmV3IHZhbHVlICovCisgICAgICAgIGVidXIxMjgtPmk0MDAuY2FjaGUg W2NoXVtiaW5faWRfNDAwIF0gPSBiaW47CisgICAgICAgIGVidXIxMjgtPmkzMDAwLmNhY2hlW2No XVtiaW5faWRfMzAwMF0gPSBiaW47CisgICAgfQogCiAjZGVmaW5lIEZJTkRfUEVBSyhnbG9iYWws IHNwLCBwdHlwZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpbnQgY2g7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAt NzIzLDExMCArNzU3LDE0OSBAQCBzdGF0aWMgaW50IGZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsg KmlubGluaywgQVZGcmFtZSAqaW5zYW1wbGVzKQogICAgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogCi0g ICAgICAgIEZJTkRfUEVBSyhlYnVyMTI4LT5zYW1wbGVfcGVhaywgZWJ1cjEyOC0+c2FtcGxlX3Bl YWtzLCBTQU1QTEVTKTsKLSAgICAgICAgRklORF9QRUFLKGVidXIxMjgtPnRydWVfcGVhaywgICBl YnVyMTI4LT50cnVlX3BlYWtzLCAgIFRSVUUpOworICAgIEZJTkRfUEVBSyhlYnVyMTI4LT5mcmFt ZV9zYW1wbGVfcGVhaywgZWJ1cjEyOC0+c2FtcGxlX3BlYWtzX3Blcl9mcmFtZSwgU0FNUExFUyk7 CisgICAgRklORF9QRUFLKGVidXIxMjgtPnNhbXBsZV9wZWFrLCBlYnVyMTI4LT5zYW1wbGVfcGVh a3MsIFNBTVBMRVMpOworICAgIEZJTkRfUEVBSyhlYnVyMTI4LT50cnVlX3BlYWssICAgZWJ1cjEy OC0+dHJ1ZV9wZWFrcywgICBUUlVFKTsKK30KIAotICAgICAgICAvKiBGb3IgaW50ZWdyYXRlZCBs b3VkbmVzcywgZ2F0aW5nIGJsb2NrcyBhcmUgNDAwbXMgbG9uZyB3aXRoIDc1JQotICAgICAgICAg KiBvdmVybGFwIChzZWUgQlMuMTc3MC0yIHA1KSwgc28gYSByZS1jb21wdXRhdGlvbiBpcyBuZWVk ZWQgZWFjaCAxMDBtcwotICAgICAgICAgKiAoNDgwMCBzYW1wbGVzIGF0IDQ4a0h6KS4gKi8KLSAg ICAgICAgaWYgKCsrZWJ1cjEyOC0+c2FtcGxlX2NvdW50ID09IGlubGluay0+c2FtcGxlX3JhdGUg LyAxMCkgewotICAgICAgICAgICAgZG91YmxlIGxvdWRuZXNzXzQwMCwgbG91ZG5lc3NfMzAwMDsK LSAgICAgICAgICAgIGRvdWJsZSBwb3dlcl80MDAgPSAxZS0xMiwgcG93ZXJfMzAwMCA9IDFlLTEy OwotICAgICAgICAgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOwot ICAgICAgICAgICAgY29uc3QgaW50NjRfdCBwdHMgPSBpbnNhbXBsZXMtPnB0cyArCi0gICAgICAg ICAgICAgICAgYXZfcmVzY2FsZV9xKGlkeF9pbnNhbXBsZSwgKEFWUmF0aW9uYWwpeyAxLCBpbmxp bmstPnNhbXBsZV9yYXRlIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+b3V0 cHV0c1tlYnVyMTI4LT5kb192aWRlb10tPnRpbWVfYmFzZSk7CitzdGF0aWMgdm9pZCBlYnVyMTI4 X2xvdWRuZXNzKEFWRmlsdGVyTGluayAqaW5saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBFQlVSMTI4Q29udGV4dCAqZWJ1cjEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZG91YmxlICpsNDAwLCBkb3VibGUgKmwzMDAwLCBkb3VibGUgKmludGVncmF0ZWQsIGRvdWJs ZSAqcGVhaykKK3sKKyAgICBjb25zdCBpbnQgbmJfY2hhbm5lbHMgPSBlYnVyMTI4LT5uYl9jaGFu bmVsczsKKyAgICBkb3VibGUgcG93ZXJfNDAwID0gMWUtMTIsIHBvd2VyXzMwMDAgPSAxZS0xMjsK KyAgICBkb3VibGUgbG91ZG5lc3NfNDAwLCBsb3VkbmVzc18zMDAwOwogCi0gICAgICAgICAgICBl YnVyMTI4LT5zYW1wbGVfY291bnQgPSAwOworICAgIGVidXIxMjgtPnNhbXBsZV9jb3VudCA9IDA7 CiAKICNkZWZpbmUgQ09NUFVURV9MT1VETkVTUyhtLCB0aW1lKSBkbyB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoZWJ1cjEyOC0+aSMjdGlt ZS5maWxsZWQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKICAgICAgICAgLyogd2VpZ2h0aW5nIHN1bSBvZiB0aGUgbGFzdCA8dGltZT4gbXMgKi8g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZm9yIChjaCA9IDA7 IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgZm9yIChpbnQgY2ggPSAwOyBjaCA8IG5iX2NoYW5uZWxzOyBjaCsr KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHBvd2Vy XyMjdGltZSArPSBlYnVyMTI4LT5jaF93ZWlnaHRpbmdbY2hdICogZWJ1cjEyOC0+aSMjdGltZS5z dW1bY2hdOyAgIFwKICAgICAgICAgcG93ZXJfIyN0aW1lIC89IEkjI3RpbWUjI19CSU5TKGlubGlu ay0+c2FtcGxlX3JhdGUpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKICAgICBsb3VkbmVzc18jI3RpbWUgPSBMT1VETkVTUyhwb3dlcl8jI3Rp bWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUgKDAp CiAKLSAgICAgICAgICAgIENPTVBVVEVfTE9VRE5FU1MoTSwgIDQwMCk7Ci0gICAgICAgICAgICBD T01QVVRFX0xPVURORVNTKFMsIDMwMDApOworICAgIENPTVBVVEVfTE9VRE5FU1MoTSwgIDQwMCk7 CisgICAgQ09NUFVURV9MT1VETkVTUyhTLCAzMDAwKTsKIAotICAgICAgICAgICAgLyogSW50ZWdy YXRlZCBsb3VkbmVzcyAqLworICAgIC8qIEludGVncmF0ZWQgbG91ZG5lc3MgKi8KICNkZWZpbmUg SV9HQVRFX1RIUkVTIC0xMCAgLy8gaW5pdGlhbGx5IGRlZmluZWQgdG8gLTggTFUgaW4gdGhlIGZp cnN0IEVCVSBzdGFuZGFyZAogCi0gICAgICAgICAgICBpZiAobG91ZG5lc3NfNDAwID49IEFCU19U SFJFUykgewotICAgICAgICAgICAgICAgIGRvdWJsZSBpbnRlZ3JhdGVkX3N1bSA9IDAuMDsKLSAg ICAgICAgICAgICAgICB1aW50NjRfdCBuYl9pbnRlZ3JhdGVkID0gMDsKLSAgICAgICAgICAgICAg ICBpbnQgZ2F0ZV9oaXN0X3BvcyA9IGdhdGVfdXBkYXRlKCZlYnVyMTI4LT5pNDAwLCBwb3dlcl80 MDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3Vk bmVzc180MDAsIElfR0FURV9USFJFUyk7Ci0KLSAgICAgICAgICAgICAgICAvKiBjb21wdXRlIGlu dGVncmF0ZWQgbG91ZG5lc3MgYnkgc3VtbWluZyB0aGUgaGlzdG9ncmFtIHZhbHVlcwotICAgICAg ICAgICAgICAgICAqIGFib3ZlIHRoZSByZWxhdGl2ZSB0aHJlc2hvbGQgKi8KLSAgICAgICAgICAg ICAgICBmb3IgKGkgPSBnYXRlX2hpc3RfcG9zOyBpIDwgSElTVF9TSVpFOyBpKyspIHsKLSAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbmJfdiA9IGVidXIxMjgtPmk0MDAuaGlzdG9n cmFtW2ldLmNvdW50OwotICAgICAgICAgICAgICAgICAgICBuYl9pbnRlZ3JhdGVkICArPSBuYl92 OwotICAgICAgICAgICAgICAgICAgICBpbnRlZ3JhdGVkX3N1bSArPSBuYl92ICogZWJ1cjEyOC0+ aTQwMC5oaXN0b2dyYW1baV0uZW5lcmd5OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBpZiAobmJfaW50ZWdyYXRlZCkgewotICAgICAgICAgICAgICAgICAgICBlYnVyMTI4LT5p bnRlZ3JhdGVkX2xvdWRuZXNzID0gTE9VRE5FU1MoaW50ZWdyYXRlZF9zdW0gLyBuYl9pbnRlZ3Jh dGVkKTsKLSAgICAgICAgICAgICAgICAgICAgLyogZHVhbC1tb25vIGNvcnJlY3Rpb24gKi8KLSAg ICAgICAgICAgICAgICAgICAgaWYgKG5iX2NoYW5uZWxzID09IDEgJiYgZWJ1cjEyOC0+ZHVhbF9t b25vKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlYnVyMTI4LT5pbnRlZ3JhdGVkX2xvdWRu ZXNzIC09IGVidXIxMjgtPnBhbl9sYXc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICB9CisgICAgaWYgKGxvdWRuZXNzXzQwMCA+PSBBQlNfVEhSRVMpIHsKKyAgICAgICAg ZG91YmxlIGludGVncmF0ZWRfc3VtID0gMC4wOworICAgICAgICB1aW50NjRfdCBuYl9pbnRlZ3Jh dGVkID0gMDsKKyAgICAgICAgaW50IGdhdGVfaGlzdF9wb3MgPSBnYXRlX3VwZGF0ZSgmZWJ1cjEy OC0+aTQwMCwgcG93ZXJfNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxvdWRuZXNzXzQwMCwgSV9HQVRFX1RIUkVTKTsKKworICAgICAgICAvKiBjb21wdXRlIGlu dGVncmF0ZWQgbG91ZG5lc3MgYnkgc3VtbWluZyB0aGUgaGlzdG9ncmFtIHZhbHVlcworICAgICAg ICAgKiBhYm92ZSB0aGUgcmVsYXRpdmUgdGhyZXNob2xkICovCisgICAgICAgIGZvciAoaW50IGkg PSBnYXRlX2hpc3RfcG9zOyBpIDwgSElTVF9TSVpFOyBpKyspIHsKKyAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIG5iX3YgPSBlYnVyMTI4LT5pNDAwLmhpc3RvZ3JhbVtpXS5jb3VudDsKKyAgICAg ICAgICAgIG5iX2ludGVncmF0ZWQgICs9IG5iX3Y7CisgICAgICAgICAgICBpbnRlZ3JhdGVkX3N1 bSArPSBuYl92ICogZWJ1cjEyOC0+aTQwMC5oaXN0b2dyYW1baV0uZW5lcmd5OworICAgICAgICB9 CisgICAgICAgIGlmIChuYl9pbnRlZ3JhdGVkKSB7CisgICAgICAgICAgICBlYnVyMTI4LT5pbnRl Z3JhdGVkX2xvdWRuZXNzID0gTE9VRE5FU1MoaW50ZWdyYXRlZF9zdW0gLyBuYl9pbnRlZ3JhdGVk KTsKKyAgICAgICAgICAgIC8qIGR1YWwtbW9ubyBjb3JyZWN0aW9uICovCisgICAgICAgICAgICBp ZiAobmJfY2hhbm5lbHMgPT0gMSAmJiBlYnVyMTI4LT5kdWFsX21vbm8pIHsKKyAgICAgICAgICAg ICAgICBlYnVyMTI4LT5pbnRlZ3JhdGVkX2xvdWRuZXNzIC09IGVidXIxMjgtPnBhbl9sYXc7CiAg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIC8qIExSQSAqLwor ICAgIC8qIExSQSAqLwogI2RlZmluZSBMUkFfR0FURV9USFJFUyAtMjAKICNkZWZpbmUgTFJBX0xP V0VSX1BSQyAgIDEwCiAjZGVmaW5lIExSQV9ISUdIRVJfUFJDICA5NQogCi0gICAgICAgICAgICAv KiBYWFg6IGV4YW1wbGUgY29kZSBpbiBFQlUgMzM0MiBpcyAiPj0iIGJ1dCBmb3JtdWxhIGluIEJT LjE3NzAKLSAgICAgICAgICAgICAqIHNwZWNzIGlzICI+IiAqLwotICAgICAgICAgICAgaWYgKGxv dWRuZXNzXzMwMDAgPj0gQUJTX1RIUkVTKSB7Ci0gICAgICAgICAgICAgICAgdWludDY0X3QgbmJf cG93ZXJzID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgZ2F0ZV9oaXN0X3BvcyA9IGdhdGVfdXBk YXRlKCZlYnVyMTI4LT5pMzAwMCwgcG93ZXJfMzAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxvdWRuZXNzXzMwMDAsIExSQV9HQVRFX1RIUkVTKTsK LQotICAgICAgICAgICAgICAgIGZvciAoaSA9IGdhdGVfaGlzdF9wb3M7IGkgPCBISVNUX1NJWkU7 IGkrKykKLSAgICAgICAgICAgICAgICAgICAgbmJfcG93ZXJzICs9IGVidXIxMjgtPmkzMDAwLmhp c3RvZ3JhbVtpXS5jb3VudDsKLSAgICAgICAgICAgICAgICBpZiAobmJfcG93ZXJzKSB7Ci0gICAg ICAgICAgICAgICAgICAgIHVpbnQ2NF90IG4sIG5iX3BvdzsKLQotICAgICAgICAgICAgICAgICAg ICAvKiBnZXQgbG93ZXIgbG91ZG5lc3MgdG8gY29uc2lkZXIgKi8KLSAgICAgICAgICAgICAgICAg ICAgbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIG5iX3BvdyA9IExSQV9MT1dFUl9QUkMgKiBu Yl9wb3dlcnMgKiAwLjAxICsgMC41OwotICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBnYXRl X2hpc3RfcG9zOyBpIDwgSElTVF9TSVpFOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IG4gKz0gZWJ1cjEyOC0+aTMwMDAuaGlzdG9ncmFtW2ldLmNvdW50OwotICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKG4gPj0gbmJfcG93KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ZWJ1cjEyOC0+bHJhX2xvdyA9IGVidXIxMjgtPmkzMDAwLmhpc3RvZ3JhbVtpXS5sb3VkbmVzczsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8qIGdl dCBoaWdoZXIgbG91ZG5lc3MgdG8gY29uc2lkZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgbiA9 IG5iX3Bvd2VyczsKLSAgICAgICAgICAgICAgICAgICAgbmJfcG93ID0gTFJBX0hJR0hFUl9QUkMg KiBuYl9wb3dlcnMgKiAwLjAxICsgMC41OwotICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBI SVNUX1NJWkUgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbiAt PSBGRk1JTihuLCBlYnVyMTI4LT5pMzAwMC5oaXN0b2dyYW1baV0uY291bnQpOwotICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKG4gPCBuYl9wb3cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlYnVyMTI4LT5scmFfaGlnaCA9IGVidXIxMjgtPmkzMDAwLmhpc3RvZ3JhbVtpXS5sb3Vk bmVzczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg IC8vIFhYWDogc2hvdyBsb3cgJiBoaWdoIG9uIHRoZSBncmFwaD8KLSAgICAgICAgICAgICAgICAg ICAgZWJ1cjEyOC0+bG91ZG5lc3NfcmFuZ2UgPSBlYnVyMTI4LT5scmFfaGlnaCAtIGVidXIxMjgt PmxyYV9sb3c7CisgICAgLyogWFhYOiBleGFtcGxlIGNvZGUgaW4gRUJVIDMzNDIgaXMgIj49IiBi dXQgZm9ybXVsYSBpbiBCUy4xNzcwCisgICAgICogc3BlY3MgaXMgIj4iICovCisgICAgaWYgKGxv dWRuZXNzXzMwMDAgPj0gQUJTX1RIUkVTKSB7CisgICAgICAgIHVpbnQ2NF90IG5iX3Bvd2VycyA9 IDA7CisgICAgICAgIGludCBnYXRlX2hpc3RfcG9zID0gZ2F0ZV91cGRhdGUoJmVidXIxMjgtPmkz MDAwLCBwb3dlcl8zMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxvdWRuZXNzXzMwMDAsIExSQV9HQVRFX1RIUkVTKTsKKworICAgICAgICBmb3IgKGludCBpID0g Z2F0ZV9oaXN0X3BvczsgaSA8IEhJU1RfU0laRTsgaSsrKQorICAgICAgICAgICAgbmJfcG93ZXJz ICs9IGVidXIxMjgtPmkzMDAwLmhpc3RvZ3JhbVtpXS5jb3VudDsKKyAgICAgICAgaWYgKG5iX3Bv d2VycykgeworICAgICAgICAgICAgdWludDY0X3QgbiwgbmJfcG93OworCisgICAgICAgICAgICAv KiBnZXQgbG93ZXIgbG91ZG5lc3MgdG8gY29uc2lkZXIgKi8KKyAgICAgICAgICAgIG4gPSAwOwor ICAgICAgICAgICAgbmJfcG93ID0gTFJBX0xPV0VSX1BSQyAqIG5iX3Bvd2VycyAqIDAuMDEgKyAw LjU7CisgICAgICAgICAgICBmb3IgKGludCBpID0gZ2F0ZV9oaXN0X3BvczsgaSA8IEhJU1RfU0la RTsgaSsrKSB7CisgICAgICAgICAgICAgICAgbiArPSBlYnVyMTI4LT5pMzAwMC5oaXN0b2dyYW1b aV0uY291bnQ7CisgICAgICAgICAgICAgICAgaWYgKG4gPj0gbmJfcG93KSB7CisgICAgICAgICAg ICAgICAgICAgIGVidXIxMjgtPmxyYV9sb3cgPSBlYnVyMTI4LT5pMzAwMC5oaXN0b2dyYW1baV0u bG91ZG5lc3M7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLyogZHVhbC1tb25vIGNvcnJlY3Rpb24gKi8K LSAgICAgICAgICAgIGlmIChuYl9jaGFubmVscyA9PSAxICYmIGVidXIxMjgtPmR1YWxfbW9ubykg ewotICAgICAgICAgICAgICAgIGxvdWRuZXNzXzQwMCAtPSBlYnVyMTI4LT5wYW5fbGF3OwotICAg ICAgICAgICAgICAgIGxvdWRuZXNzXzMwMDAgLT0gZWJ1cjEyOC0+cGFuX2xhdzsKKyAgICAgICAg ICAgIC8qIGdldCBoaWdoZXIgbG91ZG5lc3MgdG8gY29uc2lkZXIgKi8KKyAgICAgICAgICAgIG4g PSBuYl9wb3dlcnM7CisgICAgICAgICAgICBuYl9wb3cgPSBMUkFfSElHSEVSX1BSQyAqIG5iX3Bv d2VycyAqIDAuMDEgKyAwLjU7CisgICAgICAgICAgICBmb3IgKGludCBpID0gSElTVF9TSVpFIC0g MTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICBuIC09IEZGTUlOKG4sIGVidXIxMjgt PmkzMDAwLmhpc3RvZ3JhbVtpXS5jb3VudCk7CisgICAgICAgICAgICAgICAgaWYgKG4gPCBuYl9w b3cpIHsKKyAgICAgICAgICAgICAgICAgICAgZWJ1cjEyOC0+bHJhX2hpZ2ggPSBlYnVyMTI4LT5p MzAwMC5oaXN0b2dyYW1baV0ubG91ZG5lc3M7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgLy8gWFhYOiBz aG93IGxvdyAmIGhpZ2ggb24gdGhlIGdyYXBoPworICAgICAgICAgICAgZWJ1cjEyOC0+bG91ZG5l c3NfcmFuZ2UgPSBlYnVyMTI4LT5scmFfaGlnaCAtIGVidXIxMjgtPmxyYV9sb3c7CisgICAgICAg IH0KKyAgICB9CisKKyAgICAvKiBkdWFsLW1vbm8gY29ycmVjdGlvbiAqLworICAgIGlmIChuYl9j aGFubmVscyA9PSAxICYmIGVidXIxMjgtPmR1YWxfbW9ubykgeworICAgICAgICBsb3VkbmVzc180 MDAgLT0gZWJ1cjEyOC0+cGFuX2xhdzsKKyAgICAgICAgbG91ZG5lc3NfMzAwMCAtPSBlYnVyMTI4 LT5wYW5fbGF3OworICAgIH0KKworICAgIGlmIChlYnVyMTI4LT5wZWFrX21vZGUgJiBQRUFLX01P REVfU0FNUExFU19QRUFLUykgeworICAgICAgICBmb3IgKGludCBjaCA9IDA7IGNoIDwgbmJfY2hh bm5lbHM7IGNoKyspCisgICAgICAgICAgICBlYnVyMTI4LT5zYW1wbGVfcGVha3NfcGVyX2ZyYW1l W2NoXSA9IDAuMDsKKyAgICB9CisKKyAgICAqbDQwMCAgPSBsb3VkbmVzc180MDA7CisgICAgKmwz MDAwID0gbG91ZG5lc3NfMzAwMDsKKyAgICAqaW50ZWdyYXRlZCA9IGVidXIxMjgtPmludGVncmF0 ZWRfbG91ZG5lc3M7CisgICAgKnBlYWsgPSBlYnVyMTI4LT5mcmFtZV9zYW1wbGVfcGVhazsKK30K Kworc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICppbmxpbmssIEFWRnJhbWUg Kmluc2FtcGxlcykKK3sKKyAgICBpbnQgaWR4X2luc2FtcGxlLCByZXQ7CisgICAgQVZGaWx0ZXJD b250ZXh0ICpjdHggPSBpbmxpbmstPmRzdDsKKyAgICBFQlVSMTI4Q29udGV4dCAqZWJ1cjEyOCA9 IGN0eC0+cHJpdjsKKyAgICBjb25zdCBpbnQgbmJfY2hhbm5lbHMgPSBlYnVyMTI4LT5uYl9jaGFu bmVsczsKKyAgICBjb25zdCBpbnQgbmJfc2FtcGxlcyAgPSBpbnNhbXBsZXMtPm5iX3NhbXBsZXM7 CisgICAgY29uc3QgZG91YmxlICpzYW1wbGVzID0gKGNvbnN0IGRvdWJsZSAqKWluc2FtcGxlcy0+ ZGF0YVswXTsKKyAgICBBVkZyYW1lICpwaWM7CisKKyAgICByZXQgPSB0cnVlX3BlYWtzX2VidXIx MjgoZWJ1cjEyOCwgKGNvbnN0IHVpbnQ4X3QgKiopaW5zYW1wbGVzLT5kYXRhLCBuYl9zYW1wbGVz KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGZvciAoaWR4 X2luc2FtcGxlID0gZWJ1cjEyOC0+aWR4X2luc2FtcGxlOyBpZHhfaW5zYW1wbGUgPCBuYl9zYW1w bGVzOyBpZHhfaW5zYW1wbGUrKykgeworICAgICAgICBwcm9jZXNzX2VidXIxMjgoZWJ1cjEyOCwg c2FtcGxlcyArIGlkeF9pbnNhbXBsZSAqIG5iX2NoYW5uZWxzKTsKKworICAgICAgICAvKiBGb3Ig aW50ZWdyYXRlZCBsb3VkbmVzcywgZ2F0aW5nIGJsb2NrcyBhcmUgNDAwbXMgbG9uZyB3aXRoIDc1 JQorICAgICAgICAgKiBvdmVybGFwIChzZWUgQlMuMTc3MC0yIHA1KSwgc28gYSByZS1jb21wdXRh dGlvbiBpcyBuZWVkZWQgZWFjaCAxMDBtcworICAgICAgICAgKiAoNDgwMCBzYW1wbGVzIGF0IDQ4 a0h6KS4gKi8KKyAgICAgICAgaWYgKCsrZWJ1cjEyOC0+c2FtcGxlX2NvdW50ID09IGlubGluay0+ c2FtcGxlX3JhdGUgLyAxMCkgeworICAgICAgICAgICAgZG91YmxlIGxvdWRuZXNzXzQwMCwgbG91 ZG5lc3NfMzAwMCwgbG91ZG5lc3NfaW50ZWdyYXRlZCwgcGVhazsKKyAgICAgICAgICAgIEFWRmls dGVyTGluayAqb3V0bGluayA9IGN0eC0+b3V0cHV0c1swXTsKKyAgICAgICAgICAgIGNvbnN0IGlu dDY0X3QgcHRzID0gaW5zYW1wbGVzLT5wdHMgKworICAgICAgICAgICAgICAgIGF2X3Jlc2NhbGVf cShpZHhfaW5zYW1wbGUsIChBVlJhdGlvbmFsKXsgMSwgaW5saW5rLT5zYW1wbGVfcmF0ZSB9LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm91dHB1dHNbZWJ1cjEyOC0+ZG9fdmlk ZW9dLT50aW1lX2Jhc2UpOworCisgICAgICAgICAgICBlYnVyMTI4X2xvdWRuZXNzKGlubGluaywg ZWJ1cjEyOCwgJmxvdWRuZXNzXzQwMCwgJmxvdWRuZXNzXzMwMDAsICZsb3VkbmVzc19pbnRlZ3Jh dGVkLCAmcGVhayk7CisKICNkZWZpbmUgTE9HX0ZNVCAiVEFSR0VUOiVkIExVRlMgICAgTTolNi4x ZiBTOiU2LjFmICAgICBJOiU2LjFmICVzICAgICAgIExSQTolNi4xZiBMVSIKIAogICAgICAgICAg ICAgLyogcHVzaCBvbmUgdmlkZW8gZnJhbWUgKi8KQEAgLTkxMCw3ICs5ODMsNyBAQCBzdGF0aWMg aW50IGZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmlubGluaywgQVZGcmFtZSAqaW5zYW1wbGVz KQogICAgIGlmIChlYnVyMTI4LT5wZWFrX21vZGUgJiBQRUFLX01PREVfICMjIHB0eXBlICMjIF9Q RUFLUykgeyAgICAgICAgICAgICAgIFwKICAgICAgICAgZG91YmxlIG1heF9wZWFrID0gMC4wOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNo YXIga2V5WzY0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICBmb3IgKGNoID0gMDsgY2ggPCBuYl9jaGFubmVsczsgY2grKykg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZm9yIChpbnQgY2ggPSAw OyBjaCA8IG5iX2NoYW5uZWxzOyBjaCsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg ICAgICAgICAgICBzbnByaW50ZihrZXksIHNpemVvZihrZXkpLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgTUVUQV9QUkVGSVggQVZf U1RSSU5HSUZZKG5hbWUpICJfcGVha3NfY2glZCIsIGNoKTsgICAgIFwKICAgICAgICAgICAgIG1h eF9wZWFrID0gZm1heChtYXhfcGVhaywgZWJ1cjEyOC0+bmFtZSMjX3BlYWtzW2NoXSk7ICAgICAg ICAgICBcCkBAIC05NDksNyArMTAyMiw3IEBAIHN0YXRpYyBpbnQgZmlsdGVyX2ZyYW1lKEFWRmls dGVyTGluayAqaW5saW5rLCBBVkZyYW1lICppbnNhbXBsZXMpCiAjZGVmaW5lIFBSSU5UX1BFQUtT KHN0ciwgc3AsIHB0eXBlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBp ZiAoZWJ1cjEyOC0+cGVha19tb2RlICYgUEVBS19NT0RFXyAjIyBwdHlwZSAjIyBfUEVBS1MpIHsg ICAgICAgXAogICAgICAgICBhdl9sb2coY3R4LCBlYnVyMTI4LT5sb2dsZXZlbCwgIiAgIiBzdHIg IjoiKTsgICAgICAgICAgICAgICBcCi0gICAgICAgIGZvciAoY2ggPSAwOyBjaCA8IG5iX2NoYW5u ZWxzOyBjaCsrKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZm9yIChpbnQgY2gg PSAwOyBjaCA8IG5iX2NoYW5uZWxzOyBjaCsrKSAgICAgICAgICAgICAgICAgICAgXAogICAgICAg ICAgICAgYXZfbG9nKGN0eCwgZWJ1cjEyOC0+bG9nbGV2ZWwsICIgJTUuMWYiLCBEQkZTKHNwW2No XSkpOyBcCiAgICAgICAgIGF2X2xvZyhjdHgsIGVidXIxMjgtPmxvZ2xldmVsLCAiIGRCRlMiKTsg ICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTA0Nyw2ICsxMTIwLDM2IEBA IHN0YXRpYyBpbnQgcXVlcnlfZm9ybWF0cyhBVkZpbHRlckNvbnRleHQgKmN0eCkKICAgICByZXR1 cm4gMDsKIH0KIAorc3RhdGljIGF2X2NvbGQgdm9pZCB1bmluaXRfZWJ1cjEyOChBVkZpbHRlckNv bnRleHQgKmN0eCwgRUJVUjEyOENvbnRleHQgKmVidXIxMjgpCit7CisgICAgYXZfZnJlZXAoJmVi dXIxMjgtPnlfbGluZV9yZWYpOworICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT54KTsKKyAgICBhdl9m cmVlcCgmZWJ1cjEyOC0+eSk7CisgICAgYXZfZnJlZXAoJmVidXIxMjgtPnopOworICAgIGF2X2Zy ZWVwKCZlYnVyMTI4LT5jaF93ZWlnaHRpbmcpOworICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT50cnVl X3BlYWtzKTsKKyAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+c2FtcGxlX3BlYWtzKTsKKyAgICBhdl9m cmVlcCgmZWJ1cjEyOC0+dHJ1ZV9wZWFrc19wZXJfZnJhbWUpOworICAgIGF2X2ZyZWVwKCZlYnVy MTI4LT5zYW1wbGVfcGVha3NfcGVyX2ZyYW1lKTsKKyAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+aTQw MC5zdW0pOworICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT5pMzAwMC5zdW0pOworICAgIGF2X2ZyZWVw KCZlYnVyMTI4LT5pNDAwLmhpc3RvZ3JhbSk7CisgICAgYXZfZnJlZXAoJmVidXIxMjgtPmkzMDAw Lmhpc3RvZ3JhbSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlYnVyMTI4LT5uYl9jaGFubmVs czsgaSsrKSB7CisgICAgICAgIGlmIChlYnVyMTI4LT5pNDAwLmNhY2hlKQorICAgICAgICAgICAg YXZfZnJlZXAoJmVidXIxMjgtPmk0MDAuY2FjaGVbaV0pOworICAgICAgICBpZiAoZWJ1cjEyOC0+ aTMwMDAuY2FjaGUpCisgICAgICAgICAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+aTMwMDAuY2FjaGVb aV0pOworICAgIH0KKyAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+aTQwMC5jYWNoZSk7CisgICAgYXZf ZnJlZXAoJmVidXIxMjgtPmkzMDAwLmNhY2hlKTsKKyAgICBhdl9mcmFtZV9mcmVlKCZlYnVyMTI4 LT5vdXRwaWNyZWYpOworI2lmIENPTkZJR19TV1JFU0FNUExFCisgICAgYXZfZnJlZXAoJmVidXIx MjgtPnN3cl9idWYpOworICAgIHN3cl9mcmVlKCZlYnVyMTI4LT5zd3JfY3R4KTsKKyNlbmRpZgor fQorCiBzdGF0aWMgYXZfY29sZCB2b2lkIHVuaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKIHsK ICAgICBFQlVSMTI4Q29udGV4dCAqZWJ1cjEyOCA9IGN0eC0+cHJpdjsKQEAgLTEwODUsMzEgKzEx ODgsNyBAQCBzdGF0aWMgYXZfY29sZCB2b2lkIHVuaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkK ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIlxuIik7CiAgICAgfQogCi0gICAgYXZfZnJl ZXAoJmVidXIxMjgtPnlfbGluZV9yZWYpOwotICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT54KTsKLSAg ICBhdl9mcmVlcCgmZWJ1cjEyOC0+eSk7Ci0gICAgYXZfZnJlZXAoJmVidXIxMjgtPnopOwotICAg IGF2X2ZyZWVwKCZlYnVyMTI4LT5jaF93ZWlnaHRpbmcpOwotICAgIGF2X2ZyZWVwKCZlYnVyMTI4 LT50cnVlX3BlYWtzKTsKLSAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+c2FtcGxlX3BlYWtzKTsKLSAg ICBhdl9mcmVlcCgmZWJ1cjEyOC0+dHJ1ZV9wZWFrc19wZXJfZnJhbWUpOwotICAgIGF2X2ZyZWVw KCZlYnVyMTI4LT5pNDAwLnN1bSk7Ci0gICAgYXZfZnJlZXAoJmVidXIxMjgtPmkzMDAwLnN1bSk7 Ci0gICAgYXZfZnJlZXAoJmVidXIxMjgtPmk0MDAuaGlzdG9ncmFtKTsKLSAgICBhdl9mcmVlcCgm ZWJ1cjEyOC0+aTMwMDAuaGlzdG9ncmFtKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGVidXIx MjgtPm5iX2NoYW5uZWxzOyBpKyspIHsKLSAgICAgICAgaWYgKGVidXIxMjgtPmk0MDAuY2FjaGUp Ci0gICAgICAgICAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+aTQwMC5jYWNoZVtpXSk7Ci0gICAgICAg IGlmIChlYnVyMTI4LT5pMzAwMC5jYWNoZSkKLSAgICAgICAgICAgIGF2X2ZyZWVwKCZlYnVyMTI4 LT5pMzAwMC5jYWNoZVtpXSk7Ci0gICAgfQotICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT5pNDAwLmNh Y2hlKTsKLSAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+aTMwMDAuY2FjaGUpOwotICAgIGF2X2ZyYW1l X2ZyZWUoJmVidXIxMjgtPm91dHBpY3JlZik7Ci0jaWYgQ09ORklHX1NXUkVTQU1QTEUKLSAgICBh dl9mcmVlcCgmZWJ1cjEyOC0+c3dyX2J1Zik7Ci0gICAgc3dyX2ZyZWUoJmVidXIxMjgtPnN3cl9j dHgpOwotI2VuZGlmCisgICAgdW5pbml0X2VidXIxMjgoY3R4LCBlYnVyMTI4KTsKIH0KIAogc3Rh dGljIGNvbnN0IEFWRmlsdGVyUGFkIGVidXIxMjhfaW5wdXRzW10gPSB7CkBAIC0xMTMzLDMgKzEy MTIsNDk4IEBAIGNvbnN0IEFWRmlsdGVyIGZmX2FmX2VidXIxMjggPSB7CiAgICAgLnByaXZfY2xh c3MgICAgPSAmZWJ1cjEyOF9jbGFzcywKICAgICAuZmxhZ3MgICAgICAgICA9IEFWRklMVEVSX0ZM QUdfRFlOQU1JQ19PVVRQVVRTLAogfTsKKworI2RlZmluZSBGSUZPX1NJWkUgMzAKKworZW51bSBE eW5hbWljTW9kZSB7CisgICAgRE1fTU9NRU5UQVJZICA9IDEgPDwgMCwKKyAgICBETV9TSE9SVFRF Uk0gID0gMSA8PCAxLAorICAgIERNX0lOVEVHUkFURUQgPSAxIDw8IDIsCit9OworCitlbnVtIE1l YW5Nb2RlIHsKKyAgICBNTV9BUklUSE1FVElDLAorICAgIE1NX0hBUk1PTklDLAorICAgIE1NX0dF T01FVFJJQywKKyAgICBNTV9NQVhJTVVNLAorICAgIE1NX01PREVTCit9OworCit0eXBlZGVmIHN0 cnVjdCBMb3VkTm9ybUNvbnRleHQgeworICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOworICAgIGRv dWJsZSB0YXJnZXRfaTsKKyAgICBkb3VibGUgdGFyZ2V0X2xyYTsKKyAgICBkb3VibGUgdGFyZ2V0 X3RwOworICAgIGRvdWJsZSBtZWFzdXJlZF9pOworICAgIGRvdWJsZSBtZWFzdXJlZF9scmE7Cisg ICAgZG91YmxlIG1lYXN1cmVkX3RwOworICAgIGRvdWJsZSBtZWFzdXJlZF90aHJlc2g7CisgICAg ZG91YmxlIG9mZnNldDsKKyAgICBpbnQgbGluZWFyX21vZGU7CisgICAgaW50IGR1YWxfbW9ubzsK KyAgICBlbnVtIFByaW50Rm9ybWF0IHByaW50X2Zvcm1hdDsKKyAgICBpbnQgZHluYW1pY19tb2Rl OworICAgIGludCBtZWFuX21vZGU7CisgICAgZG91YmxlIHJhbmdldXA7CisgICAgZG91YmxlIHJh bmdlZG93bjsKKyAgICBkb3VibGUgYXR0YWNrOworICAgIGRvdWJsZSByZWxlYXNlOworICAgIGRv dWJsZSBhdHRhY2tfY29lZmY7CisgICAgZG91YmxlIHJlbGVhc2VfY29lZmY7CisKKyAgICBpbnQg ZW9mOworICAgIGludDY0X3QgZW9mX3B0czsKKyAgICBpbnQgbmJfY2hhbm5lbHM7CisgICAgaW50 IG5iX3NhbXBsZXM7CisKKyAgICBBVkZyYW1lICppbnNhbXBsZXM7CisgICAgQVZGcmFtZSAqZnJh bWVzW0ZJRk9fU0laRV07CisgICAgZG91YmxlIGk0MDA7CisgICAgZG91YmxlIGkzMDAwOworICAg IGRvdWJsZSBpbnRlZ3JhdGVkOworICAgIGRvdWJsZSBwZWFrc1tGSUZPX1NJWkVdOworICAgIGRv dWJsZSBwcmV2X29mZnNldDsKKworICAgIEVCVVIxMjhDb250ZXh0IHIxMjhfaW47CisgICAgRUJV UjEyOENvbnRleHQgcjEyOF9vdXQ7Cit9IExvdWROb3JtQ29udGV4dDsKKworc3RhdGljIGF2X2Nv bGQgaW50IGxvdWRub3JtX2luaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgTG91ZE5v cm1Db250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBpbml0 X2VidXIxMjgoY3R4LCAmcy0+cjEyOF9pbik7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJl dHVybiByZXQ7CisgICAgcmV0ID0gaW5pdF9lYnVyMTI4KGN0eCwgJnMtPnIxMjhfb3V0KTsKKyAg ICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHMtPnIxMjhfaW4uZHVh bF9tb25vID0gcy0+ZHVhbF9tb25vOworICAgIHMtPnIxMjhfb3V0LmR1YWxfbW9ubyA9IHMtPmR1 YWxfbW9ubzsKKworICAgIGlmIChzLT5saW5lYXJfbW9kZSkgeworICAgICAgICBkb3VibGUgb2Zm c2V0LCBvZmZzZXRfdHA7CisgICAgICAgIG9mZnNldCAgICA9IHMtPnRhcmdldF9pIC0gcy0+bWVh c3VyZWRfaTsKKyAgICAgICAgb2Zmc2V0X3RwID0gcy0+bWVhc3VyZWRfdHAgKyBvZmZzZXQ7CisK KyAgICAgICAgaWYgKHMtPm1lYXN1cmVkX3RwICE9IDk5ICYmIHMtPm1lYXN1cmVkX3RocmVzaCAh PSAtNzAgJiYgcy0+bWVhc3VyZWRfbHJhICE9IDAgJiYgcy0+bWVhc3VyZWRfaSAhPSAwICYmCisg ICAgICAgICAgICBvZmZzZXRfdHAgPD0gcy0+dGFyZ2V0X3RwICYmIHMtPm1lYXN1cmVkX2xyYSA8 PSBzLT50YXJnZXRfbHJhKSB7CisgICAgICAgICAgICBzLT5vZmZzZXQgPSBwb3coMTAuLCBvZmZz ZXQgLyAyMC4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcy0+bGluZWFyX21vZGUg PSAwOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBhdl9j b2xkIHZvaWQgbG91ZG5vcm1fdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIExv dWROb3JtQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBFQlVSMTI4Q29udGV4dCAqcjEyOF9v dXQgPSAmcy0+cjEyOF9vdXQ7CisgICAgRUJVUjEyOENvbnRleHQgKnIxMjhfaW4gPSAmcy0+cjEy OF9pbjsKKworICAgIGlmIChzLT5uYl9jaGFubmVscyA+IDApIHsKKyAgICBzd2l0Y2ggKHMtPnBy aW50X2Zvcm1hdCkgeworICAgIGNhc2UgTk9ORToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl IEpTT046CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLAorICAgICAgICAgICAgIlxu e1xuIgorICAgICAgICAgICAgIlx0XCJpbnB1dF9pXCIgOiBcIiUuMmZcIixcbiIKKyAgICAgICAg ICAgICJcdFwiaW5wdXRfdHBcIiA6IFwiJS4yZlwiLFxuIgorICAgICAgICAgICAgIlx0XCJpbnB1 dF9scmFcIiA6IFwiJS4yZlwiLFxuIgorICAgICAgICAgICAgIlx0XCJpbnB1dF90aHJlc2hcIiA6 IFwiJS4yZlwiLFxuIgorICAgICAgICAgICAgIlx0XCJvdXRwdXRfaVwiIDogXCIlLjJmXCIsXG4i CisgICAgICAgICAgICAiXHRcIm91dHB1dF90cFwiIDogXCIlKy4yZlwiLFxuIgorICAgICAgICAg ICAgIlx0XCJvdXRwdXRfbHJhXCIgOiBcIiUuMmZcIixcbiIKKyAgICAgICAgICAgICJcdFwib3V0 cHV0X3RocmVzaFwiIDogXCIlLjJmXCIsXG4iCisgICAgICAgICAgICAiXHRcIm5vcm1hbGl6YXRp b25fdHlwZVwiIDogXCIlc1wiLFxuIgorICAgICAgICAgICAgIlx0XCJ0YXJnZXRfb2Zmc2V0XCIg OiBcIiUuMmZcIlxuIgorICAgICAgICAgICAgIn1cbiIsCisgICAgICAgICAgICByMTI4X2luLT5p bnRlZ3JhdGVkX2xvdWRuZXNzLAorICAgICAgICAgICAgcjEyOF9pbi0+dHJ1ZV9wZWFrLAorICAg ICAgICAgICAgcjEyOF9pbi0+bG91ZG5lc3NfcmFuZ2UsCisgICAgICAgICAgICByMTI4X2luLT5p MzAwMC5yZWxfdGhyZXNob2xkLAorICAgICAgICAgICAgcjEyOF9vdXQtPmludGVncmF0ZWRfbG91 ZG5lc3MsCisgICAgICAgICAgICByMTI4X291dC0+dHJ1ZV9wZWFrLAorICAgICAgICAgICAgcjEy OF9vdXQtPmxvdWRuZXNzX3JhbmdlLAorICAgICAgICAgICAgcjEyOF9vdXQtPmkzMDAwLnJlbF90 aHJlc2hvbGQsCisgICAgICAgICAgICBzLT5saW5lYXJfbW9kZSA/ICJsaW5lYXIiIDogImR5bmFt aWMiLAorICAgICAgICAgICAgcy0+dGFyZ2V0X2kgLSByMTI4X291dC0+aW50ZWdyYXRlZF9sb3Vk bmVzcworICAgICAgICApOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1VNTUFSWToKKyAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sCisgICAgICAgICAgICAiXG4iCisgICAgICAg ICAgICAiSW5wdXQgSW50ZWdyYXRlZDogICAlKzYuMWYgTFVGU1xuIgorICAgICAgICAgICAgIklu cHV0IFRydWUgUGVhazogICAgJSs2LjFmIGRCVFBcbiIKKyAgICAgICAgICAgICJJbnB1dCBMUkE6 ICAgICAgICAgICU2LjFmIExVXG4iCisgICAgICAgICAgICAiSW5wdXQgVGhyZXNob2xkOiAgICAl KzYuMWYgTFVGU1xuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIk91dHB1dCBJbnRl Z3JhdGVkOiAgJSs2LjFmIExVRlNcbiIKKyAgICAgICAgICAgICJPdXRwdXQgVHJ1ZSBQZWFrOiAg ICUrNi4xZiBkQlRQXG4iCisgICAgICAgICAgICAiT3V0cHV0IExSQTogICAgICAgICAlNi4xZiBM VVxuIgorICAgICAgICAgICAgIk91dHB1dCBUaHJlc2hvbGQ6ICAgJSs2LjFmIExVRlNcbiIKKyAg ICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJOb3JtYWxpemF0aW9uIFR5cGU6ICAgJXNcbiIK KyAgICAgICAgICAgICJUYXJnZXQgT2Zmc2V0OiAgICAgICUrNi4xZiBMVVxuIiwKKyAgICAgICAg ICAgIHIxMjhfaW4tPmludGVncmF0ZWRfbG91ZG5lc3MsCisgICAgICAgICAgICByMTI4X2luLT50 cnVlX3BlYWssCisgICAgICAgICAgICByMTI4X2luLT5sb3VkbmVzc19yYW5nZSwKKyAgICAgICAg ICAgIHIxMjhfaW4tPmkzMDAwLnJlbF90aHJlc2hvbGQsCisgICAgICAgICAgICByMTI4X291dC0+ aW50ZWdyYXRlZF9sb3VkbmVzcywKKyAgICAgICAgICAgIHIxMjhfb3V0LT50cnVlX3BlYWssCisg ICAgICAgICAgICByMTI4X291dC0+bG91ZG5lc3NfcmFuZ2UsCisgICAgICAgICAgICByMTI4X291 dC0+aTMwMDAucmVsX3RocmVzaG9sZCwKKyAgICAgICAgICAgIHMtPmxpbmVhcl9tb2RlID8gIkxp bmVhciIgOiAiRHluYW1pYyIsCisgICAgICAgICAgICBzLT50YXJnZXRfaSAtIHIxMjhfb3V0LT5p bnRlZ3JhdGVkX2xvdWRuZXNzCisgICAgICAgICk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg ICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZJRk9fU0laRTsgaSsrKQorICAgICAgICBh dl9mcmFtZV9mcmVlKCZzLT5mcmFtZXNbaV0pOworCisgICAgdW5pbml0X2VidXIxMjgoY3R4LCAm cy0+cjEyOF9pbik7CisgICAgdW5pbml0X2VidXIxMjgoY3R4LCAmcy0+cjEyOF9vdXQpOworfQor CitzdGF0aWMgaW50IGxvdWRub3JtX2NvbmZpZ19pbnB1dChBVkZpbHRlckxpbmsgKmlubGluaykK K3sKKyAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IGlubGluay0+ZHN0OworICAgIExvdWROb3Jt Q29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBpbnQgcmV0OworCisgICAgcy0+bmJfc2FtcGxl cyA9IEZGTUFYKGlubGluay0+c2FtcGxlX3JhdGUgLyAxMCwgMSk7CisKKyAgICByZXQgPSBjb25m aWdfYXVkaW9faW4oaW5saW5rLCAmcy0+cjEyOF9pbik7CisgICAgaWYgKHJldCA8IDApCisgICAg ICAgIHJldHVybiByZXQ7CisKKyAgICByZXQgPSBjb25maWdfYXVkaW9faW4oaW5saW5rLCAmcy0+ cjEyOF9vdXQpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBkb3VibGUgZ2V0X2NvZWZmKGRvdWJsZSB4LCBkb3VibGUg c3IpCit7CisgICAgcmV0dXJuIDEuMCAtIGV4cCgtMS4wIC8gKDAuMDAxICogeCAqIHNyKSk7Cit9 CisKK3N0YXRpYyBpbnQgbG91ZG5vcm1fY29uZmlnX291dHB1dChBVkZpbHRlckxpbmsgKm91dGxp bmspCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBvdXRsaW5rLT5zcmM7CisgICAgTG91 ZE5vcm1Db250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIGludCByZXQ7CisKKyAgICBzLT5hdHRh Y2tfY29lZmYgPSBnZXRfY29lZmYocy0+YXR0YWNrLCBvdXRsaW5rLT5zYW1wbGVfcmF0ZSk7Cisg ICAgcy0+cmVsZWFzZV9jb2VmZiA9IGdldF9jb2VmZihzLT5yZWxlYXNlLCBvdXRsaW5rLT5zYW1w bGVfcmF0ZSk7CisgICAgcy0+cHJldl9vZmZzZXQgPSAxLjA7CisKKyAgICBzLT5uYl9jaGFubmVs cyA9IG91dGxpbmstPmNoX2xheW91dC5uYl9jaGFubmVsczsKKyAgICBzLT5yMTI4X291dC5wZWFr X21vZGUgPSBQRUFLX01PREVfVFJVRV9QRUFLU3xQRUFLX01PREVfU0FNUExFU19QRUFLUzsKKyAg ICBzLT5yMTI4X2luLnBlYWtfbW9kZSA9IFBFQUtfTU9ERV9UUlVFX1BFQUtTfFBFQUtfTU9ERV9T QU1QTEVTX1BFQUtTOworCisgICAgcmV0ID0gY29uZmlnX2F1ZGlvX291dChvdXRsaW5rLCAmcy0+ cjEyOF9pbik7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBy ZXQgPSBjb25maWdfYXVkaW9fb3V0KG91dGxpbmssICZzLT5yMTI4X291dCk7CisgICAgaWYgKHJl dCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGRvdWJsZSBhZGRfaXRlbShpbnQgbW9kZSwgZG91YmxlIG9mZnNldCwgZG91YmxlIGl0ZW0pCit7 CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBNTV9NQVhJTVVNOgorICAgICAgICBvZmZz ZXQgPSBmbWF4KG9mZnNldCwgaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1fR0VP TUVUUklDOgorICAgICAgICBvZmZzZXQgKj0gaXRlbTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBNTV9IQVJNT05JQzoKKyAgICAgICAgb2Zmc2V0ICs9IDEuMCAvIGl0ZW07CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgTU1fQVJJVEhNRVRJQzoKKyAgICAgICAgb2Zmc2V0ICs9IGl0ZW07Cisg ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK3N0YXRpYyBk b3VibGUgZ2V0X2xvdWRuZXNzKExvdWROb3JtQ29udGV4dCAqcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBkeW5hbWljX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgbWVhbl9tb2RlKQoreworICAgIGRvdWJsZSBvZmZzZXQsIHAgPSAwLjA7CisKKyAgICBpZiAo bWVhbl9tb2RlID09IE1NX0dFT01FVFJJQykKKyAgICAgICAgb2Zmc2V0ID0gMS4wOworICAgIGVs c2UgaWYgKG1lYW5fbW9kZSA9PSBNTV9NQVhJTVVNKQorICAgICAgICBvZmZzZXQgPSAtNzAuMDsK KyAgICBlbHNlCisgICAgICAgIG9mZnNldCA9IDAuMDsKKworICAgIGlmIChkeW5hbWljX21vZGUg JiBETV9JTlRFR1JBVEVEKSB7CisgICAgICAgIG9mZnNldCA9IGFkZF9pdGVtKG1lYW5fbW9kZSwg b2Zmc2V0LCBzLT5pbnRlZ3JhdGVkKTsKKyAgICAgICAgcCArPSAxLjA7CisgICAgfQorCisgICAg aWYgKGR5bmFtaWNfbW9kZSAmIERNX1NIT1JUVEVSTSkgeworICAgICAgICBvZmZzZXQgPSBhZGRf aXRlbShtZWFuX21vZGUsIG9mZnNldCwgcy0+aTMwMDApOworICAgICAgICBwICs9IDEuMDsKKyAg ICB9CisKKyAgICBpZiAocy0+ZHluYW1pY19tb2RlICYgRE1fTU9NRU5UQVJZKSB7CisgICAgICAg IG9mZnNldCA9IGFkZF9pdGVtKG1lYW5fbW9kZSwgb2Zmc2V0LCBzLT5pNDAwKTsKKyAgICAgICAg cCArPSAxLjA7CisgICAgfQorCisgICAgc3dpdGNoIChzLT5tZWFuX21vZGUpIHsKKyAgICBjYXNl IE1NX01BWElNVU06CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1fR0VPTUVUUklDOgorICAg ICAgICBvZmZzZXQgPSAtcG93KGZhYnMob2Zmc2V0KSwgMS4wIC8gcCk7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgTU1fSEFSTU9OSUM6CisgICAgICAgIG9mZnNldCA9IHAgLyBvZmZzZXQ7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgTU1fQVJJVEhNRVRJQzoKKyAgICAgICAgb2Zmc2V0IC89 IHA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK3N0 YXRpYyBpbnQgbG91ZG5vcm1fZmlsdGVyX2ZyYW1lKEFWRmlsdGVyTGluayAqaW5saW5rLCBBVkZy YW1lICppbikKK3sKKyAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IGlubGluay0+ZHN0OworICAg IEFWRmlsdGVyTGluayAqb3V0bGluayA9IGN0eC0+b3V0cHV0c1swXTsKKyAgICBMb3VkTm9ybUNv bnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgRUJVUjEyOENvbnRleHQgKnIxMjhfb3V0ID0gJnMt PnIxMjhfb3V0OworICAgIEVCVVIxMjhDb250ZXh0ICpyMTI4X2luID0gJnMtPnIxMjhfaW47Cisg ICAgY29uc3QgaW50IG5iX2NoYW5uZWxzID0gcy0+bmJfY2hhbm5lbHM7CisgICAgaW50IG5iX3Nh bXBsZXMgPSBpbiA/IGluLT5uYl9zYW1wbGVzIDogMDsKKyAgICBjb25zdCBkb3VibGUgKnNhbXBs ZXMgPSBpbiA/IChjb25zdCBkb3VibGUgKilpbi0+ZGF0YVswXSA6IE5VTEw7CisgICAgQVZGcmFt ZSAqb3V0OworICAgIGludCByZXQ7CisKKyAgICBpZiAoaW4pIHsKKyAgICAgICAgcmV0ID0gdHJ1 ZV9wZWFrc19lYnVyMTI4KHIxMjhfaW4sIChjb25zdCB1aW50OF90ICoqKWluLT5kYXRhLCBuYl9z YW1wbGVzKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0Owor ICAgIH0KKworICAgIGZvciAoaW50IGlkeF9pbnNhbXBsZSA9IHIxMjhfaW4tPmlkeF9pbnNhbXBs ZTsgaWR4X2luc2FtcGxlIDwgbmJfc2FtcGxlczsgaWR4X2luc2FtcGxlKyspIHsKKyAgICAgICAg cHJvY2Vzc19lYnVyMTI4KHIxMjhfaW4sIHNhbXBsZXMgKyBpZHhfaW5zYW1wbGUgKiBuYl9jaGFu bmVscyk7CisgICAgICAgIGlmICgrK3IxMjhfaW4tPnNhbXBsZV9jb3VudCA9PSBpbmxpbmstPnNh bXBsZV9yYXRlIC8gMTApIHsKKyAgICAgICAgICAgIGRvdWJsZSBwZWFrOworCisgICAgICAgICAg ICBlYnVyMTI4X2xvdWRuZXNzKGlubGluaywgcjEyOF9pbiwgJnMtPmk0MDAsICZzLT5pMzAwMCwg JnMtPmludGVncmF0ZWQsICZwZWFrKTsKKyAgICAgICAgICAgIG1lbW1vdmUoJnMtPnBlYWtzWzBd LCAmcy0+cGVha3NbMV0sIHNpemVvZihzLT5wZWFrcykgLSBzaXplb2Yocy0+cGVha3NbMF0pKTsK KyAgICAgICAgICAgIHMtPnBlYWtzW0ZJRk9fU0laRS0xXSA9IHBlYWs7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICByMTI4X2luLT5pZHhfaW5zYW1wbGUgPSAwOworICAgIHMtPmluc2FtcGxlcyA9 IE5VTEw7CisKKyAgICBpZiAocy0+bGluZWFyX21vZGUpIHsKKyAgICAgICAgb3V0ID0gZmZfZ2V0 X2F1ZGlvX2J1ZmZlcihvdXRsaW5rLCBuYl9zYW1wbGVzKTsKKyAgICAgICAgaWYgKCFvdXQpIHsK KyAgICAgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25zdCBkb3VibGUg KnNyYyA9IChjb25zdCBkb3VibGUgKilpbi0+ZGF0YVswXTsKKyAgICAgICAgICAgIGRvdWJsZSAq ZHN0ID0gKGRvdWJsZSAqKW91dC0+ZGF0YVswXTsKKyAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBv ZmZzZXQgPSBzLT5vZmZzZXQ7CisKKyAgICAgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgbmJf c2FtcGxlcyAqIG5iX2NoYW5uZWxzOyBuKyspCisgICAgICAgICAgICAgICAgZHN0W25dID0gc3Jj W25dICogb2Zmc2V0OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXZfZnJhbWVf ZnJlZSgmcy0+ZnJhbWVzWzBdKTsKKyAgICAgICAgbWVtbW92ZSgmcy0+ZnJhbWVzWzBdLCAmcy0+ ZnJhbWVzWzFdLCBzaXplb2Yocy0+ZnJhbWVzKSAtIHNpemVvZihzLT5mcmFtZXNbMF0pKTsKKyAg ICAgICAgcy0+ZnJhbWVzW0ZJRk9fU0laRS0xXSA9IGluOworICAgICAgICBpbiA9IHMtPmZyYW1l c1swXTsKKyAgICAgICAgaWYgKGluKSB7CisgICAgICAgICAgICBuYl9zYW1wbGVzID0gaW4tPm5i X3NhbXBsZXM7CisgICAgICAgICAgICBvdXQgPSBmZl9nZXRfYXVkaW9fYnVmZmVyKG91dGxpbmss IG5iX3NhbXBsZXMpOworICAgICAgICAgICAgaWYgKCFvdXQpIHsKKyAgICAgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBjb25zdCBkb3VibGUgcmVsZWFzZSA9IHMtPnJlbGVhc2VfY29lZmY7CisgICAgICAgICAg ICAgICAgY29uc3QgZG91YmxlIGF0dGFjayA9IHMtPmF0dGFja19jb2VmZjsKKyAgICAgICAgICAg ICAgICBjb25zdCBkb3VibGUgKnNyYyA9IChjb25zdCBkb3VibGUgKilpbi0+ZGF0YVswXTsKKyAg ICAgICAgICAgICAgICBkb3VibGUgKmRzdCA9IChkb3VibGUgKilvdXQtPmRhdGFbMF07CisgICAg ICAgICAgICAgICAgY29uc3QgZG91YmxlIG1lYXN1cmVkID0gZ2V0X2xvdWRuZXNzKHMsIHMtPmR5 bmFtaWNfbW9kZSwgcy0+bWVhbl9tb2RlKTsKKyAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUg bGltaXQgPSBzLT50YXJnZXRfdHAgLSBmbWF4KHMtPnBlYWtzWzBdLCBzLT5wZWFrc1sxXSk7Cisg ICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHJhbmdlbWluID0gLXMtPnJhbmdlZG93bjsKKyAg ICAgICAgICAgICAgICBjb25zdCBkb3VibGUgcmFuZ2VtYXggPSBmbWluKHMtPnJhbmdldXAsIGxp bWl0KTsKKyAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgdGFyZ2V0ID0gYXZfY2xpcGQocy0+ dGFyZ2V0X2kgLSBtZWFzdXJlZCwgcmFuZ2VtaW4sIHJhbmdlbWF4KTsKKyAgICAgICAgICAgICAg ICBjb25zdCBkb3VibGUgbmV3X29mZnNldCA9IHBvdygxMC4sIHRhcmdldCAvIDIwLik7CisgICAg ICAgICAgICAgICAgZG91YmxlIHByZXZfb2Zmc2V0ID0gcy0+cHJldl9vZmZzZXQ7CisKKyAgICAg ICAgICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IG5iX3NhbXBsZXMgKiBuYl9jaGFubmVsczsg biArPSBuYl9jaGFubmVscykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgZiA9 IChuZXdfb2Zmc2V0ID4gcHJldl9vZmZzZXQpICogYXR0YWNrICsgKG5ld19vZmZzZXQgPD0gcHJl dl9vZmZzZXQpICogcmVsZWFzZTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIG9m ZnNldCA9IGYgKiBuZXdfb2Zmc2V0ICsgKDEuMCAtIGYpICogcHJldl9vZmZzZXQ7CisgICAgICAg ICAgICAgICAgICAgIGZvciAoaW50IGMgPSBuOyBjIDwgbiArIG5iX2NoYW5uZWxzOyBjKyspCisg ICAgICAgICAgICAgICAgICAgICAgICBkc3RbY10gPSBzcmNbY10gKiBvZmZzZXQ7CisgICAgICAg ICAgICAgICAgICAgIHByZXZfb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgICAgIHMtPnByZXZfb2Zmc2V0ID0gcHJldl9vZmZzZXQ7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBhdl9mcmFtZV9jb3B5X3Byb3BzKG91dCwgaW4pOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgZmZfZmlsdGVyX3NldF9yZWFkeShjdHgsIDEwMCk7CisgICAg ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IHRydWVfcGVh a3NfZWJ1cjEyOChyMTI4X291dCwgKGNvbnN0IHVpbnQ4X3QgKiopb3V0LT5kYXRhLCBvdXQtPm5i X3NhbXBsZXMpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAg c2FtcGxlcyA9IChjb25zdCBkb3VibGUgKilvdXQtPmRhdGFbMF07CisgICAgZm9yIChpbnQgaWR4 X2luc2FtcGxlID0gcjEyOF9vdXQtPmlkeF9pbnNhbXBsZTsgaWR4X2luc2FtcGxlIDwgb3V0LT5u Yl9zYW1wbGVzOyBpZHhfaW5zYW1wbGUrKykgeworICAgICAgICBwcm9jZXNzX2VidXIxMjgocjEy OF9vdXQsIHNhbXBsZXMgKyBpZHhfaW5zYW1wbGUgKiBuYl9jaGFubmVscyk7CisgICAgICAgIGlm ICgrK3IxMjhfb3V0LT5zYW1wbGVfY291bnQgPT0gaW5saW5rLT5zYW1wbGVfcmF0ZSAvIDEwKSB7 CisgICAgICAgICAgICBkb3VibGUgbG91ZG5lc3NfNDAwLCBsb3VkbmVzc18zMDAwLCBsb3VkbmVz c19pbnRlZ3JhdGVkLCBwZWFrOworICAgICAgICAgICAgZWJ1cjEyOF9sb3VkbmVzcyhpbmxpbmss IHIxMjhfb3V0LCAmbG91ZG5lc3NfNDAwLCAmbG91ZG5lc3NfMzAwMCwgJmxvdWRuZXNzX2ludGVn cmF0ZWQsICZwZWFrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHIxMjhfb3V0LT5pZHhfaW5z YW1wbGUgPSAwOworICAgIGlmIChzLT5saW5lYXJfbW9kZSkgeworICAgICAgICBhdl9mcmFtZV9j b3B5X3Byb3BzKG91dCwgaW4pOworICAgICAgICBhdl9mcmFtZV9mcmVlKCZpbik7CisgICAgfQor CisgICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBvdXQpOworfQorCitzdGF0aWMg aW50IGxvdWRub3JtX2FjdGl2YXRlKEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIEFWRmls dGVyTGluayAqb3V0bGluayA9IGN0eC0+b3V0cHV0c1swXTsKKyAgICBBVkZpbHRlckxpbmsgKmlu bGluayA9IGN0eC0+aW5wdXRzWzBdOworICAgIExvdWROb3JtQ29udGV4dCAqcyA9IGN0eC0+cHJp djsKKyAgICBpbnQgcmV0LCBzdGF0dXM7CisKKyAgICBGRl9GSUxURVJfRk9SV0FSRF9TVEFUVVNf QkFDSyhvdXRsaW5rLCBpbmxpbmspOworCisgICAgaWYgKCFzLT5pbnNhbXBsZXMgJiYgIXMtPmVv ZikgeworICAgICAgICBBVkZyYW1lICppbjsKKworICAgICAgICByZXQgPSBmZl9pbmxpbmtfY29u c3VtZV9zYW1wbGVzKGlubGluaywgcy0+bmJfc2FtcGxlcywgcy0+bmJfc2FtcGxlcywgJmluKTsK KyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICBp ZiAocmV0ID4gMCkKKyAgICAgICAgICAgIHMtPmluc2FtcGxlcyA9IGluOworICAgIH0KKworICAg IGlmIChzLT5pbnNhbXBsZXMpCisgICAgICAgIHJldHVybiBsb3Vkbm9ybV9maWx0ZXJfZnJhbWUo aW5saW5rLCBzLT5pbnNhbXBsZXMpOworCisgICAgaWYgKCFzLT5lb2YgJiYgZmZfaW5saW5rX2Fj a25vd2xlZGdlX3N0YXR1cyhpbmxpbmssICZzdGF0dXMsICZzLT5lb2ZfcHRzKSkgeworICAgICAg ICBpZiAoc3RhdHVzID09IEFWRVJST1JfRU9GKQorICAgICAgICAgICAgcy0+ZW9mID0gMTsKKyAg ICB9CisKKyAgICBpZiAocy0+ZW9mICYmICFzLT5mcmFtZXNbMF0pCisgICAgICAgIGZmX291dGxp bmtfc2V0X3N0YXR1cyhvdXRsaW5rLCBBVkVSUk9SX0VPRiwgcy0+ZW9mX3B0cyk7CisKKyAgICBp ZiAocy0+ZW9mICYmICFzLT5saW5lYXJfbW9kZSkKKyAgICAgICAgcmV0dXJuIGxvdWRub3JtX2Zp bHRlcl9mcmFtZShpbmxpbmssIE5VTEwpOworCisgICAgRkZfRklMVEVSX0ZPUldBUkRfV0FOVEVE KG91dGxpbmssIGlubGluayk7CisKKyAgICByZXR1cm4gcmV0OworfQorCisjdW5kZWYgT0ZGU0VU CisjdW5kZWYgRkxBR1MKKworI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoTG91ZE5vcm1Db250 ZXh0LCB4KQorI2RlZmluZSBGTEFHUyBBVl9PUFRfRkxBR19BVURJT19QQVJBTXxBVl9PUFRfRkxB R19GSUxURVJJTkdfUEFSQU0KKworc3RhdGljIGNvbnN0IEFWT3B0aW9uIGxvdWRub3JtX29wdGlv bnNbXSA9IHsKKyAgICB7ICJJIiwgICAgICAgICAgICAgICAgInNldCBpbnRlZ3JhdGVkIGxvdWRu ZXNzIHRhcmdldCIsICAgIE9GRlNFVCh0YXJnZXRfaSksICAgICAgICAgQVZfT1BUX1RZUEVfRE9V QkxFLCAgey5kYmwgPSAtMjQufSwgICAtNzAuLCAgICAgICAtNS4sICBGTEFHUyB9LAorICAgIHsg ImkiLCAgICAgICAgICAgICAgICAic2V0IGludGVncmF0ZWQgbG91ZG5lc3MgdGFyZ2V0IiwgICAg T0ZGU0VUKHRhcmdldF9pKSwgICAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9IC0y NC59LCAgIC03MC4sICAgICAgIC01LiwgIEZMQUdTIH0sCisgICAgeyAiTFJBIiwgICAgICAgICAg ICAgICJzZXQgbG91ZG5lc3MgcmFuZ2UgdGFyZ2V0IiwgICAgICAgICBPRkZTRVQodGFyZ2V0X2xy YSksICAgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gIDcufSwgICAgIDEuLCAgICAg ICAgNTAuLCAgRkxBR1MgfSwKKyAgICB7ICJscmEiLCAgICAgICAgICAgICAgInNldCBsb3VkbmVz cyByYW5nZSB0YXJnZXQiLCAgICAgICAgIE9GRlNFVCh0YXJnZXRfbHJhKSwgICAgICAgQVZfT1BU X1RZUEVfRE9VQkxFLCAgey5kYmwgPSAgNy59LCAgICAgMS4sICAgICAgICA1MC4sICBGTEFHUyB9 LAorICAgIHsgIlRQIiwgICAgICAgICAgICAgICAic2V0IG1heGltdW0gdHJ1ZSBwZWFrIiwgICAg ICAgICAgICAgT0ZGU0VUKHRhcmdldF90cCksICAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7 LmRibCA9IC0yLn0sICAgIC05LiwgICAgICAgICAwLiwgIEZMQUdTIH0sCisgICAgeyAidHAiLCAg ICAgICAgICAgICAgICJzZXQgbWF4aW11bSB0cnVlIHBlYWsiLCAgICAgICAgICAgICBPRkZTRVQo dGFyZ2V0X3RwKSwgICAgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gLTIufSwgICAg LTkuLCAgICAgICAgIDAuLCAgRkxBR1MgfSwKKyAgICB7ICJtZWFzdXJlZF9JIiwgICAgICAgIm1l YXN1cmVkIElMIG9mIGlucHV0IGZpbGUiLCAgICAgICAgIE9GRlNFVChtZWFzdXJlZF9pKSwgICAg ICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAgMC59LCAgICAtOTkuLCAgICAgICAgMC4s ICBGTEFHUyB9LAorICAgIHsgIm1lYXN1cmVkX2kiLCAgICAgICAibWVhc3VyZWQgSUwgb2YgaW5w dXQgZmlsZSIsICAgICAgICAgT0ZGU0VUKG1lYXN1cmVkX2kpLCAgICAgICBBVl9PUFRfVFlQRV9E T1VCTEUsICB7LmRibCA9ICAwLn0sICAgIC05OS4sICAgICAgICAwLiwgIEZMQUdTIH0sCisgICAg eyAibWVhc3VyZWRfTFJBIiwgICAgICJtZWFzdXJlZCBMUkEgb2YgaW5wdXQgZmlsZSIsICAgICAg ICBPRkZTRVQobWVhc3VyZWRfbHJhKSwgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0g IDAufSwgICAgIDAuLCAgICAgICAgOTkuLCAgRkxBR1MgfSwKKyAgICB7ICJtZWFzdXJlZF9scmEi LCAgICAgIm1lYXN1cmVkIExSQSBvZiBpbnB1dCBmaWxlIiwgICAgICAgIE9GRlNFVChtZWFzdXJl ZF9scmEpLCAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAgMC59LCAgICAgMC4sICAg ICAgICA5OS4sICBGTEFHUyB9LAorICAgIHsgIm1lYXN1cmVkX1RQIiwgICAgICAibWVhc3VyZWQg dHJ1ZSBwZWFrIG9mIGlucHV0IGZpbGUiLCAgT0ZGU0VUKG1lYXN1cmVkX3RwKSwgICAgICBBVl9P UFRfVFlQRV9ET1VCTEUsICB7LmRibCA9ICA5OS59LCAgIC05OS4sICAgICAgIDk5LiwgIEZMQUdT IH0sCisgICAgeyAibWVhc3VyZWRfdHAiLCAgICAgICJtZWFzdXJlZCB0cnVlIHBlYWsgb2YgaW5w dXQgZmlsZSIsICBPRkZTRVQobWVhc3VyZWRfdHApLCAgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwg IHsuZGJsID0gIDk5Ln0sICAgLTk5LiwgICAgICAgOTkuLCAgRkxBR1MgfSwKKyAgICB7ICJtZWFz dXJlZF90aHJlc2giLCAgIm1lYXN1cmVkIHRocmVzaG9sZCBvZiBpbnB1dCBmaWxlIiwgIE9GRlNF VChtZWFzdXJlZF90aHJlc2gpLCAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAtNzAufSwg ICAtOTkuLCAgICAgICAgMC4sICBGTEFHUyB9LAorICAgIHsgIm9mZnNldCIsICAgICAgICAgICAi c2V0IG9mZnNldCBnYWluIiwgICAgICAgICAgICAgICAgICAgT0ZGU0VUKG9mZnNldCksICAgICAg ICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9ICAwLn0sICAgIC05OS4sICAgICAgIDk5 LiwgIEZMQUdTIH0sCisgICAgeyAibGluZWFyIiwgICAgICAgICAgICJub3JtYWxpemUgbGluZWFy bHkgaWYgcG9zc2libGUiLCAgICBPRkZTRVQobGluZWFyX21vZGUpLCAgICAgIEFWX09QVF9UWVBF X0JPT0wsICAgIHsuaTY0ID0gIDF9LCAgICAgICAgMCwgICAgICAgICAxLCAgRkxBR1MgfSwKKyAg ICB7ICJkdWFsX21vbm8iLCAgICAgICAgInRyZWF0IG1vbm8gaW5wdXQgYXMgZHVhbC1tb25vIiwg ICAgIE9GRlNFVChkdWFsX21vbm8pLCAgICAgICAgQVZfT1BUX1RZUEVfQk9PTCwgICAgey5pNjQg PSAgMH0sICAgICAgICAwLCAgICAgICAgIDEsICBGTEFHUyB9LAorICAgIHsgInByaW50X2Zvcm1h dCIsICAgICAic2V0IHByaW50IGZvcm1hdCBmb3Igc3RhdHMiLCAgICAgICAgT0ZGU0VUKHByaW50 X2Zvcm1hdCksICAgICBBVl9PUFRfVFlQRV9JTlQsICAgICB7Lmk2NCA9ICBOT05FfSwgIE5PTkUs ICBQRl9OQiAtMSwgIEZMQUdTLCAicHJpbnRfZm9ybWF0IiB9LAorICAgIHsgICAgICJub25lIiwg ICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAg ICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgICB7Lmk2NCA9ICBOT05FfSwgICAgIDAs ICAgICAgICAgMCwgIEZMQUdTLCAicHJpbnRfZm9ybWF0IiB9LAorICAgIHsgICAgICJqc29uIiwg ICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAg ICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgICB7Lmk2NCA9ICBKU09OfSwgICAgIDAs ICAgICAgICAgMCwgIEZMQUdTLCAicHJpbnRfZm9ybWF0IiB9LAorICAgIHsgICAgICJzdW1tYXJ5 IiwgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAg ICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgICB7Lmk2NCA9ICBTVU1NQVJZfSwgIDAs ICAgICAgICAgMCwgIEZMQUdTLCAicHJpbnRfZm9ybWF0IiB9LAorICAgIHsgImR5bmFtaWNfbW9k ZSIsICAgICAic2V0IGR5bmFtaWMgbW9kZSIsICAgICAgICAgICAgICAgICAgT0ZGU0VUKGR5bmFt aWNfbW9kZSksICAgICBBVl9PUFRfVFlQRV9GTEFHUywgICB7Lmk2NCA9ICBETV9JTlRFR1JBVEVE fERNX1NIT1JUVEVSTX0sMCxJTlQzMl9NQVgsRkxBR1MsImR5bmFtaWNfbW9kZSIgfSwKKyAgICB7 ICAiaSIsICAgICAgICAgICAgICAgImludGVncmF0ZWQiLCAgICAgICAgICAgICAgICAgICAgICAg IDAsICAgICAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICAgey5pNjQgPSAg RE1fSU5URUdSQVRFRH0sICAgIDAsIDAsICBGTEFHUywgImR5bmFtaWNfbW9kZSIgfSwKKyAgICB7 ICAibSIsICAgICAgICAgICAgICAgIm1vbWVudGFyeSIsICAgICAgICAgICAgICAgICAgICAgICAg IDAsICAgICAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICAgey5pNjQgPSAg RE1fTU9NRU5UQVJZfSwgICAgIDAsIDAsICBGTEFHUywgImR5bmFtaWNfbW9kZSIgfSwKKyAgICB7 ICAicyIsICAgICAgICAgICAgICAgInNob3J0dGVybSIsICAgICAgICAgICAgICAgICAgICAgICAg IDAsICAgICAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICAgey5pNjQgPSAg RE1fU0hPUlRURVJNfSwgICAgIDAsIDAsICBGTEFHUywgImR5bmFtaWNfbW9kZSIgfSwKKyAgICB7 ICJtZWFuX21vZGUiLCAgICAgICAgInNldCBtZWFuIG1vZGUiLCAgICAgICAgICAgICAgICAgICAg IE9GRlNFVChtZWFuX21vZGUpLCAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICAgey5pNjQgPSAg TU1fR0VPTUVUUklDfSwgICAgIDAsIE1NX01PREVTLTEsICBGTEFHUywibWVhbl9tb2RlIiB9LAor ICAgIHsgICJhIiwgICAgICAgICAgICAgICAiYXJpdGhtZXRpYyIsICAgICAgICAgICAgICAgICAg ICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgICB7Lmk2 NCA9ICBNTV9BUklUSE1FVElDfSwgICAgMCwgMCwgIEZMQUdTLCAibWVhbl9tb2RlIiB9LAorICAg IHsgICJoIiwgICAgICAgICAgICAgICAiaGFybW9uaWMiLCAgICAgICAgICAgICAgICAgICAgICAg ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgICB7Lmk2NCA9 ICBNTV9IQVJNT05JQ30sICAgICAgMCwgMCwgIEZMQUdTLCAibWVhbl9tb2RlIiB9LAorICAgIHsg ICJnIiwgICAgICAgICAgICAgICAiZ2VvbWV0cmljIiwgICAgICAgICAgICAgICAgICAgICAgICAg MCwgICAgICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgICB7Lmk2NCA9ICBN TV9HRU9NRVRSSUN9LCAgICAgMCwgMCwgIEZMQUdTLCAibWVhbl9tb2RlIiB9LAorICAgIHsgICJt IiwgICAgICAgICAgICAgICAibWF4aW11bSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg ICAgICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgICB7Lmk2NCA9ICBNTV9N QVhJTVVNfSwgICAgICAgMCwgMCwgIEZMQUdTLCAibWVhbl9tb2RlIiB9LAorICAgIHsgInJhbmdl dXAiLCAgICAgICAgICAic2V0IG1heCBleHBhbnNpb24iLCAgICAgICAgICAgICAgICAgT0ZGU0VU KHJhbmdldXApLCAgICAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9ICAwfSwgICAg ICAgIDAsICAgICAgNzAsICAgIEZMQUdTIH0sCisgICAgeyAicmFuZ2Vkb3duIiwgICAgICAgICJz ZXQgbWF4IGNvbXByZXNzaW9uIiwgICAgICAgICAgICAgICBPRkZTRVQocmFuZ2Vkb3duKSwgICAg ICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gIDcwfSwgICAgICAgMCwgICAgICA3MCwg ICAgRkxBR1MgfSwKKyAgICB7ICJhdHRhY2siLCAgICAgICAgICAgInNldCBhdHRhY2siLCAgICAg ICAgICAgICAgICAgICAgICAgIE9GRlNFVChhdHRhY2spLCAgICAgICAgICAgQVZfT1BUX1RZUEVf RE9VQkxFLCAgey5kYmwgPSAgMX0sICAgICAgICAxLCAgICAgIDIwMDAsICBGTEFHUyB9LAorICAg IHsgInJlbGVhc2UiLCAgICAgICAgICAic2V0IHJlbGVhc2UiLCAgICAgICAgICAgICAgICAgICAg ICAgT0ZGU0VUKHJlbGVhc2UpLCAgICAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9 ICAxfSwgICAgICAgIDEsICAgICAgMjAwMCwgIEZMQUdTIH0sCisgICAgeyBOVUxMIH0KK307CisK K0FWRklMVEVSX0RFRklORV9DTEFTUyhsb3Vkbm9ybSk7CisKK3N0YXRpYyBjb25zdCBBVkZpbHRl clBhZCBsb3Vkbm9ybV9pbnB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAgICAgICAg PSAiZGVmYXVsdCIsCisgICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfQVVESU8s CisgICAgICAgIC5jb25maWdfcHJvcHMgPSBsb3Vkbm9ybV9jb25maWdfaW5wdXQsCisgICAgfSwK K307CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBsb3Vkbm9ybV9vdXRwdXRzW10gPSB7Cisg ICAgeworICAgICAgICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSAg ICAgICAgID0gQVZNRURJQV9UWVBFX0FVRElPLAorICAgICAgICAuY29uZmlnX3Byb3BzID0gbG91 ZG5vcm1fY29uZmlnX291dHB1dCwKKyAgICB9LAorfTsKKworY29uc3QgQVZGaWx0ZXIgZmZfYWZf bG91ZG5vcm0gPSB7CisgICAgLm5hbWUgICAgICAgICAgPSAibG91ZG5vcm0iLAorICAgIC5kZXNj cmlwdGlvbiAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkVCVSBSMTI4IGxvdWRuZXNzIG5vcm1h bGl6YXRpb24iKSwKKyAgICAucHJpdl9zaXplICAgICA9IHNpemVvZihMb3VkTm9ybUNvbnRleHQp LAorICAgIC5wcml2X2NsYXNzICAgID0gJmxvdWRub3JtX2NsYXNzLAorICAgIC5pbml0ICAgICAg ICAgID0gbG91ZG5vcm1faW5pdCwKKyAgICAuYWN0aXZhdGUgICAgICA9IGxvdWRub3JtX2FjdGl2 YXRlLAorICAgIC51bmluaXQgICAgICAgID0gbG91ZG5vcm1fdW5pbml0LAorICAgIEZJTFRFUl9J TlBVVFMobG91ZG5vcm1faW5wdXRzKSwKKyAgICBGSUxURVJfT1VUUFVUUyhsb3Vkbm9ybV9vdXRw dXRzKSwKKyAgICBGSUxURVJfU0lOR0xFX1NBTVBMRUZNVChBVl9TQU1QTEVfRk1UX0RCTCksCit9 OwotLSAKMi40Mi4xCgo= --000000000000d3a0e2060b391bca Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --000000000000d3a0e2060b391bca--