Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uSe4R-00B7AU-4e for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Jun 2025 15:54:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uSe4P-002gKb-15 for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Jun 2025 15:54:25 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uSe4O-002gI5-AB for pgsql-hackers@lists.postgresql.org; Fri, 20 Jun 2025 15:54:25 +0000 Received: from mail-ej1-x62e.google.com ([2a00:1450:4864:20::62e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uSe4M-00356f-0H for pgsql-hackers@postgresql.org; Fri, 20 Jun 2025 15:54:24 +0000 Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-ad89333d603so370177366b.2 for ; Fri, 20 Jun 2025 08:54:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750434859; x=1751039659; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=+hOJURwUqm6CtoebBIi8H8p5SXBYaOl5snxLOuf/wfo=; b=T/AT5fpvgGyWvBfPMW+JXKAmiKmo9TipVBsxXDiP4TbbyjRmu0sGYIWnCpnUyp9F/m pthX3N8w0VoBhPuqB9cSOMWxGYRF6AjPJSSsumnglqy1RmJLb2ehI5PyJwMB7zZaTKlf hNLV+5JoDdjxjtFEritq69GAYmXdyTHfQNWgaCUR0PI8j+w5kKgsaXsT8BX2KhvziXqX QIlY32ggr/c8BqQ4klhUT+fPnKbtNSTE0iVapNcqBJgp8GdZAJSFsgwwMICA08vU2Cc9 la9hDtZI+hw9dKSFBY5lKp5JpblUsscs4x6SdiL9ZDwGkWBKbYRU3g8Xmd2hzx5I2b1U Samg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750434859; x=1751039659; h=cc: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=+hOJURwUqm6CtoebBIi8H8p5SXBYaOl5snxLOuf/wfo=; b=F/ZJ4iOq1aqYRA0hOd/qWNcWiVbJVhUzSFaBnRtEUoxZ0iblJdnTGCeYfSRBfhlnYL VEA8LElHPWBgT0Azscq7cG5LCbhQMUXH7v1HrLMIUPJ8GiqBvkBmQUK3e+VvQ1oiPVhm +aU7rkyq9QF48zpg3oy+CE9pTDLZ1LY8UYfYv/YEsAN0OgUw9ico5dbn5TZTMegttaCz tdD/Yc9NKFHpOpExldjQmtO6m/HYKYAOWJWePXQoioTscyMhdB21wWd/nRp0DNZotcAl Qaa6Naot2kKIlRiCH6x4EgpnnCokFowL97yTgfKM6eBz8G/6TSRGujcjj80pUx5N2kCF ZA+Q== X-Forwarded-Encrypted: i=1; AJvYcCVgPTNqQqxuc0K9Vln4q7KDJse8pdwgIZ7aeYgV6Or2gXZK1H5Cr252PU6K3552P6I+tCW4JcXu5jXdjflu@postgresql.org X-Gm-Message-State: AOJu0YypaERRjbspUrxPttKQpKC9+N8s4YSKyOedeacyzy5McLGI7acR Vf1hAf1RYvJqCWI+85c6gfLQKydWqPQDEfTJlxMp1i39kZZD1x2GCcGix8iYo9yJYBxrCFTwnse dlaIkqx1QfpDclGc1iOFZRvgeUOKMP64= X-Gm-Gg: ASbGncuSKvIgEIJE3vrLWmNiD1BZaSgZpiXhDSkOCn5xDU3Eu7SzM7UPBVsBBdVklSr Olz1LWV3uZw/rdZID4ifP2D+kASxKZTQbKFfJbTjNj/Idy2tvwgFpcOhaU1jQH0yHQb1hXk1qjL kT3z5fTiP1Y2qnkOPuvnhuv5YHJmpHdZ0MZciElSh77WAFofPp1t0VZP0+vXsX6qUWShI61zfx X-Google-Smtp-Source: AGHT+IF+EJCAgWtxI0YJOqaDZWda7l2ZaZMroZr8mw2Wu26O6fr3+yCUhrqVIxmVVDuBZLDAQpgPMiM5a2Nn37+JZOU= X-Received: by 2002:a17:907:3f8d:b0:add:fa4e:8a61 with SMTP id a640c23a62f3a-ae057b929d9mr349293266b.38.1750434858998; Fri, 20 Jun 2025 08:54:18 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: shihao zhong Date: Fri, 20 Jun 2025 11:54:07 -0400 X-Gm-Features: AX0GCFsCAjjqno73E9c8iQsgrcN_d5gOMB2Kl05hv_bCfZ9hmSQM5GYCOqCS-tk Message-ID: Subject: Re: Fixes inconsistent behavior in vacuum when it processes multiple relations To: Junwang Zhao Cc: Michael Paquier , Nathan Bossart , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000f955a8063802dfe9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f955a8063802dfe9 Content-Type: text/plain; charset="UTF-8" >> It's a bit odd that we have both `VacuumParams *params` and >> `struct VacuumParams *params`. Thanks for pointing that out, the attached new version fixed that. >> I'd suggest just marking the VacuumParams *params with const... I initially considered that approach. However, the current code path for vacuum_rel handles table option re-consolidation, rather than the ExecVacuum caller. This would require moving all parameter checks into ExecVacuum, which I'm not sure is ideal. For this patch, let's focus on resolving the inconsistent behavior. We can discuss parameter re-consolidation further in this thread: https://postgr.es/m/aFRxC1W_kZU9OjJ9%40nathan --000000000000f955a8063802dfe9 Content-Type: application/octet-stream; name="vacuum_tables_options_5.patch" Content-Disposition: attachment; filename="vacuum_tables_options_5.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mc4zpi150 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdzdGF0dHVwbGUvZXhwZWN0ZWQvcGdzdGF0dHVwbGUub3V0 IGIvY29udHJpYi9wZ3N0YXR0dXBsZS9leHBlY3RlZC9wZ3N0YXR0dXBsZS5vdXQKaW5kZXggOTE3 NmRjOThiNmEuLjY0NmM4YzExZTZlIDEwMDY0NAotLS0gYS9jb250cmliL3Bnc3RhdHR1cGxlL2V4 cGVjdGVkL3Bnc3RhdHR1cGxlLm91dAorKysgYi9jb250cmliL3Bnc3RhdHR1cGxlL2V4cGVjdGVk L3Bnc3RhdHR1cGxlLm91dApAQCAtMzAzLDMgKzMwMywxOSBAQCBkcm9wIHZpZXcgdGVzdF92aWV3 OwogZHJvcCBmb3JlaWduIHRhYmxlIHRlc3RfZm9yZWlnbl90YWJsZTsKIGRyb3Agc2VydmVyIGR1 bW15X3NlcnZlcjsKIGRyb3AgZm9yZWlnbiBkYXRhIHdyYXBwZXIgZHVtbXk7CistLSBJTkRFWF9D TEVBTlVQIG9wdGlvbiB3aXRoIHZhY3V1bSBtb3JlIHRoYW4gMSByZWxhdGlvbgorQ1JFQVRFIFRB QkxFIHZhY19pbmRleF9jbGVhbnVwX29uKGkgSU5UIFBSSU1BUlkgS0VZKSBXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQ9ZmFsc2UsIHZhY3V1bV9pbmRleF9jbGVhbnVwPXRydWUpOworSU5TRVJUIElO VE8gdmFjX2luZGV4X2NsZWFudXBfb24gU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKTsK K0NSRUFURSBUQUJMRSB2YWNfaW5kZXhfY2xlYW51cF9vZmYoaSBJTlQgUFJJTUFSWSBLRVkpIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZD1mYWxzZSwgdmFjdXVtX2luZGV4X2NsZWFudXA9ZmFsc2Up OworSU5TRVJUIElOVE8gdmFjX2luZGV4X2NsZWFudXBfb2ZmIFNFTEVDVCBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTAwMCk7CitERUxFVEUgRlJPTSB2YWNfaW5kZXhfY2xlYW51cF9vbjsKK0RFTEVURSBG Uk9NIHZhY19pbmRleF9jbGVhbnVwX29mZjsKK1ZBQ1VVTSAoQU5BTFlaRSkgdmFjX2luZGV4X2Ns ZWFudXBfb24sIHZhY19pbmRleF9jbGVhbnVwX29mZjsKK1NFTEVDVCBkZWxldGVkX3BhZ2VzID0g MCBGUk9NIHBnc3RhdGluZGV4KCd2YWNfaW5kZXhfY2xlYW51cF9vZmZfcGtleScpOworID9jb2x1 bW4/IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB2YWNfaW5kZXhfY2xl YW51cF9vbjsKK0RST1AgVEFCTEUgdmFjX2luZGV4X2NsZWFudXBfb2ZmOwpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ3N0YXR0dXBsZS9zcWwvcGdzdGF0dHVwbGUuc3FsIGIvY29udHJpYi9wZ3N0YXR0 dXBsZS9zcWwvcGdzdGF0dHVwbGUuc3FsCmluZGV4IDdlNzJjNTY3YTA2Li42NjAyODBlZTI0NyAx MDA2NDQKLS0tIGEvY29udHJpYi9wZ3N0YXR0dXBsZS9zcWwvcGdzdGF0dHVwbGUuc3FsCisrKyBi L2NvbnRyaWIvcGdzdGF0dHVwbGUvc3FsL3Bnc3RhdHR1cGxlLnNxbApAQCAtMTM2LDMgKzEzNiwx NSBAQCBkcm9wIHZpZXcgdGVzdF92aWV3OwogZHJvcCBmb3JlaWduIHRhYmxlIHRlc3RfZm9yZWln bl90YWJsZTsKIGRyb3Agc2VydmVyIGR1bW15X3NlcnZlcjsKIGRyb3AgZm9yZWlnbiBkYXRhIHdy YXBwZXIgZHVtbXk7CisKKy0tIElOREVYX0NMRUFOVVAgb3B0aW9uIHdpdGggdmFjdXVtIG1vcmUg dGhhbiAxIHJlbGF0aW9uCitDUkVBVEUgVEFCTEUgdmFjX2luZGV4X2NsZWFudXBfb24oaSBJTlQg UFJJTUFSWSBLRVkpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZD1mYWxzZSwgdmFjdXVtX2luZGV4 X2NsZWFudXA9dHJ1ZSk7CitJTlNFUlQgSU5UTyB2YWNfaW5kZXhfY2xlYW51cF9vbiBTRUxFQ1Qg Z2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApOworQ1JFQVRFIFRBQkxFIHZhY19pbmRleF9jbGVhbnVw X29mZihpIElOVCBQUklNQVJZIEtFWSkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkPWZhbHNlLCB2 YWN1dW1faW5kZXhfY2xlYW51cD1mYWxzZSk7CitJTlNFUlQgSU5UTyB2YWNfaW5kZXhfY2xlYW51 cF9vZmYgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKTsKK0RFTEVURSBGUk9NIHZhY19p bmRleF9jbGVhbnVwX29uOworREVMRVRFIEZST00gdmFjX2luZGV4X2NsZWFudXBfb2ZmOworVkFD VVVNIChBTkFMWVpFKSB2YWNfaW5kZXhfY2xlYW51cF9vbiwgdmFjX2luZGV4X2NsZWFudXBfb2Zm OworU0VMRUNUIGRlbGV0ZWRfcGFnZXMgPSAwIEZST00gcGdzdGF0aW5kZXgoJ3ZhY19pbmRleF9j bGVhbnVwX29mZl9wa2V5Jyk7CitEUk9QIFRBQkxFIHZhY19pbmRleF9jbGVhbnVwX29uOworRFJP UCBUQUJMRSB2YWNfaW5kZXhfY2xlYW51cF9vZmY7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1s YXp5LmMKaW5kZXggMDk0MTY0NTBhZjkuLjk5YWQ4NzAwZGE4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvdmFjdXVtbGF6eS5jCkBAIC00MjMsNyArNDIzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgTFZTYXZl ZEVyckluZm8KIC8qIG5vbi1leHBvcnQgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwogc3RhdGljIHZv aWQgbGF6eV9zY2FuX2hlYXAoTFZSZWxTdGF0ZSAqdmFjcmVsKTsKIHN0YXRpYyB2b2lkIGhlYXBf dmFjdXVtX2VhZ2VyX3NjYW5fc2V0dXAoTFZSZWxTdGF0ZSAqdmFjcmVsLAotCQkJCQkJCQkJCSBW YWN1dW1QYXJhbXMgKnBhcmFtcyk7CisJCQkJCQkJCQkJIFZhY3V1bVBhcmFtcyBwYXJhbXMpOwog c3RhdGljIEJsb2NrTnVtYmVyIGhlYXBfdmFjX3NjYW5fbmV4dF9ibG9jayhSZWFkU3RyZWFtICpz dHJlYW0sCiAJCQkJCQkJCQkJCXZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKIAkJCQkJCQkJ CQkJdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKTsKQEAgLTQ4NSw3ICs0ODUsNyBAQCBzdGF0aWMgdm9p ZCByZXN0b3JlX3ZhY3V1bV9lcnJvcl9pbmZvKExWUmVsU3RhdGUgKnZhY3JlbCwKICAqIHZhY3V1 bSBvcHRpb25zIG9yIGZvciByZWxmcm96ZW54aWQvcmVsbWlubXhpZCBhZHZhbmNlbWVudC4KICAq Lwogc3RhdGljIHZvaWQKLWhlYXBfdmFjdXVtX2VhZ2VyX3NjYW5fc2V0dXAoTFZSZWxTdGF0ZSAq dmFjcmVsLCBWYWN1dW1QYXJhbXMgKnBhcmFtcykKK2hlYXBfdmFjdXVtX2VhZ2VyX3NjYW5fc2V0 dXAoTFZSZWxTdGF0ZSAqdmFjcmVsLCBWYWN1dW1QYXJhbXMgcGFyYW1zKQogewogCXVpbnQzMgkJ cmFuZHNlZWQ7CiAJQmxvY2tOdW1iZXIgYWxsdmlzaWJsZTsKQEAgLTUwNCw3ICs1MDQsNyBAQCBo ZWFwX3ZhY3V1bV9lYWdlcl9zY2FuX3NldHVwKExWUmVsU3RhdGUgKnZhY3JlbCwgVmFjdXVtUGFy YW1zICpwYXJhbXMpCiAJdmFjcmVsLT5lYWdlcl9zY2FuX3JlbWFpbmluZ19zdWNjZXNzZXMgPSAw OwogCiAJLyogSWYgZWFnZXIgc2Nhbm5pbmcgaXMgZXhwbGljaXRseSBkaXNhYmxlZCwganVzdCBy ZXR1cm4uICovCi0JaWYgKHBhcmFtcy0+bWF4X2VhZ2VyX2ZyZWV6ZV9mYWlsdXJlX3JhdGUgPT0g MCkKKwlpZiAocGFyYW1zLm1heF9lYWdlcl9mcmVlemVfZmFpbHVyZV9yYXRlID09IDApCiAJCXJl dHVybjsKIAogCS8qCkBAIC01ODEsMTEgKzU4MSwxMSBAQCBoZWFwX3ZhY3V1bV9lYWdlcl9zY2Fu X3NldHVwKExWUmVsU3RhdGUgKnZhY3JlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMpCiAKIAl2YWNy ZWwtPm5leHRfZWFnZXJfc2Nhbl9yZWdpb25fc3RhcnQgPSByYW5kc2VlZCAlIEVBR0VSX1NDQU5f UkVHSU9OX1NJWkU7CiAKLQlBc3NlcnQocGFyYW1zLT5tYXhfZWFnZXJfZnJlZXplX2ZhaWx1cmVf cmF0ZSA+IDAgJiYKLQkJICAgcGFyYW1zLT5tYXhfZWFnZXJfZnJlZXplX2ZhaWx1cmVfcmF0ZSA8 PSAxKTsKKwlBc3NlcnQocGFyYW1zLm1heF9lYWdlcl9mcmVlemVfZmFpbHVyZV9yYXRlID4gMCAm JgorCQkgICBwYXJhbXMubWF4X2VhZ2VyX2ZyZWV6ZV9mYWlsdXJlX3JhdGUgPD0gMSk7CiAKIAl2 YWNyZWwtPmVhZ2VyX3NjYW5fbWF4X2ZhaWxzX3Blcl9yZWdpb24gPQotCQlwYXJhbXMtPm1heF9l YWdlcl9mcmVlemVfZmFpbHVyZV9yYXRlICoKKwkJcGFyYW1zLm1heF9lYWdlcl9mcmVlemVfZmFp bHVyZV9yYXRlICoKIAkJRUFHRVJfU0NBTl9SRUdJT05fU0laRTsKIAogCS8qCkBAIC02MTIsNyAr NjEyLDcgQEAgaGVhcF92YWN1dW1fZWFnZXJfc2Nhbl9zZXR1cChMVlJlbFN0YXRlICp2YWNyZWws IFZhY3V1bVBhcmFtcyAqcGFyYW1zKQogICoJCWFuZCBsb2NrZWQgdGhlIHJlbGF0aW9uLgogICov CiB2b2lkCi1oZWFwX3ZhY3V1bV9yZWwoUmVsYXRpb24gcmVsLCBWYWN1dW1QYXJhbXMgKnBhcmFt cywKK2hlYXBfdmFjdXVtX3JlbChSZWxhdGlvbiByZWwsIFZhY3V1bVBhcmFtcyBwYXJhbXMsCiAJ CQkJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KQogewogCUxWUmVsU3RhdGUgKnZhY3Jl bDsKQEAgLTYzNCw5ICs2MzQsOSBAQCBoZWFwX3ZhY3V1bV9yZWwoUmVsYXRpb24gcmVsLCBWYWN1 dW1QYXJhbXMgKnBhcmFtcywKIAlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKIAlj aGFyCSAgKippbmRuYW1lcyA9IE5VTEw7CiAKLQl2ZXJib3NlID0gKHBhcmFtcy0+b3B0aW9ucyAm IFZBQ09QVF9WRVJCT1NFKSAhPSAwOworCXZlcmJvc2UgPSAocGFyYW1zLm9wdGlvbnMgJiBWQUNP UFRfVkVSQk9TRSkgIT0gMDsKIAlpbnN0cnVtZW50ID0gKHZlcmJvc2UgfHwgKEFtQXV0b1ZhY3V1 bVdvcmtlclByb2Nlc3MoKSAmJgotCQkJCQkJCSAgcGFyYW1zLT5sb2dfbWluX2R1cmF0aW9uID49 IDApKTsKKwkJCQkJCQkgIHBhcmFtcy5sb2dfbWluX2R1cmF0aW9uID49IDApKTsKIAlpZiAoaW5z dHJ1bWVudCkKIAl7CiAJCXBnX3J1c2FnZV9pbml0KCZydTApOwpAQCAtNjk5LDkgKzY5OSw5IEBA IGhlYXBfdmFjdXVtX3JlbChSZWxhdGlvbiByZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCSAq IFRoZSB0cnVuY2F0ZSBwYXJhbSBhbGxvd3MgdXNlciB0byBhdm9pZCBhdHRlbXB0aW5nIHJlbGF0 aW9uIHRydW5jYXRpb24sCiAJICogdGhvdWdoIGl0IGNhbid0IGZvcmNlIHRydW5jYXRpb24gdG8g aGFwcGVuLgogCSAqLwotCUFzc2VydChwYXJhbXMtPmluZGV4X2NsZWFudXAgIT0gVkFDT1BUVkFM VUVfVU5TUEVDSUZJRUQpOwotCUFzc2VydChwYXJhbXMtPnRydW5jYXRlICE9IFZBQ09QVFZBTFVF X1VOU1BFQ0lGSUVEICYmCi0JCSAgIHBhcmFtcy0+dHJ1bmNhdGUgIT0gVkFDT1BUVkFMVUVfQVVU Tyk7CisJQXNzZXJ0KHBhcmFtcy5pbmRleF9jbGVhbnVwICE9IFZBQ09QVFZBTFVFX1VOU1BFQ0lG SUVEKTsKKwlBc3NlcnQocGFyYW1zLnRydW5jYXRlICE9IFZBQ09QVFZBTFVFX1VOU1BFQ0lGSUVE ICYmCisJCSAgIHBhcmFtcy50cnVuY2F0ZSAhPSBWQUNPUFRWQUxVRV9BVVRPKTsKIAogCS8qCiAJ ICogV2hpbGUgVmFjdXVtRmFpbFNhZmVBY3RpdmUgaXMgcmVzZXQgdG8gZmFsc2UgYmVmb3JlIGNh bGxpbmcgdGhpcywgd2UKQEAgLTcxMSwxNCArNzExLDE0IEBAIGhlYXBfdmFjdXVtX3JlbChSZWxh dGlvbiByZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCXZhY3JlbC0+Y29uc2lkZXJfYnlwYXNz X29wdGltaXphdGlvbiA9IHRydWU7CiAJdmFjcmVsLT5kb19pbmRleF92YWN1dW1pbmcgPSB0cnVl OwogCXZhY3JlbC0+ZG9faW5kZXhfY2xlYW51cCA9IHRydWU7Ci0JdmFjcmVsLT5kb19yZWxfdHJ1 bmNhdGUgPSAocGFyYW1zLT50cnVuY2F0ZSAhPSBWQUNPUFRWQUxVRV9ESVNBQkxFRCk7Ci0JaWYg KHBhcmFtcy0+aW5kZXhfY2xlYW51cCA9PSBWQUNPUFRWQUxVRV9ESVNBQkxFRCkKKwl2YWNyZWwt PmRvX3JlbF90cnVuY2F0ZSA9IChwYXJhbXMudHJ1bmNhdGUgIT0gVkFDT1BUVkFMVUVfRElTQUJM RUQpOworCWlmIChwYXJhbXMuaW5kZXhfY2xlYW51cCA9PSBWQUNPUFRWQUxVRV9ESVNBQkxFRCkK IAl7CiAJCS8qIEZvcmNlIGRpc2FibGUgaW5kZXggdmFjdXVtaW5nIHVwLWZyb250ICovCiAJCXZh Y3JlbC0+ZG9faW5kZXhfdmFjdXVtaW5nID0gZmFsc2U7CiAJCXZhY3JlbC0+ZG9faW5kZXhfY2xl YW51cCA9IGZhbHNlOwogCX0KLQllbHNlIGlmIChwYXJhbXMtPmluZGV4X2NsZWFudXAgPT0gVkFD T1BUVkFMVUVfRU5BQkxFRCkKKwllbHNlIGlmIChwYXJhbXMuaW5kZXhfY2xlYW51cCA9PSBWQUNP UFRWQUxVRV9FTkFCTEVEKQogCXsKIAkJLyogRm9yY2UgaW5kZXggdmFjdXVtaW5nLiAgTm90ZSB0 aGF0IGZhaWxzYWZlIGNhbiBzdGlsbCBieXBhc3MuICovCiAJCXZhY3JlbC0+Y29uc2lkZXJfYnlw YXNzX29wdGltaXphdGlvbiA9IGZhbHNlOwpAQCAtNzI2LDcgKzcyNiw3IEBAIGhlYXBfdmFjdXVt X3JlbChSZWxhdGlvbiByZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCWVsc2UKIAl7CiAJCS8q IERlZmF1bHQvYXV0bywgbWFrZSBhbGwgZGVjaXNpb25zIGR5bmFtaWNhbGx5ICovCi0JCUFzc2Vy dChwYXJhbXMtPmluZGV4X2NsZWFudXAgPT0gVkFDT1BUVkFMVUVfQVVUTyk7CisJCUFzc2VydChw YXJhbXMuaW5kZXhfY2xlYW51cCA9PSBWQUNPUFRWQUxVRV9BVVRPKTsKIAl9CiAKIAkvKiBJbml0 aWFsaXplIHBhZ2UgY291bnRlcnMgZXhwbGljaXRseSAoYmUgdGlkeSkgKi8KQEAgLTc4OSw3ICs3 ODksNyBAQCBoZWFwX3ZhY3V1bV9yZWwoUmVsYXRpb24gcmVsLCBWYWN1dW1QYXJhbXMgKnBhcmFt cywKIAkgKi8KIAl2YWNyZWwtPnNraXBwZWRhbGx2aXMgPSBmYWxzZTsKIAlza2lwd2l0aHZtID0g dHJ1ZTsKLQlpZiAocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX0RJU0FCTEVfUEFHRV9TS0lQUElO RykKKwlpZiAocGFyYW1zLm9wdGlvbnMgJiBWQUNPUFRfRElTQUJMRV9QQUdFX1NLSVBQSU5HKQog CXsKIAkJLyoKIAkJICogRm9yY2UgYWdncmVzc2l2ZSBtb2RlLCBhbmQgZGlzYWJsZSBza2lwcGlu ZyBibG9ja3MgdXNpbmcgdGhlCkBAIC04MzAsNyArODMwLDcgQEAgaGVhcF92YWN1dW1fcmVsKFJl bGF0aW9uIHJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJICogaXMgYWxyZWFkeSBkYW5nZXJv dXNseSBvbGQuKQogCSAqLwogCWxhenlfY2hlY2tfd3JhcGFyb3VuZF9mYWlsc2FmZSh2YWNyZWwp OwotCWRlYWRfaXRlbXNfYWxsb2ModmFjcmVsLCBwYXJhbXMtPm53b3JrZXJzKTsKKwlkZWFkX2l0 ZW1zX2FsbG9jKHZhY3JlbCwgcGFyYW1zLm53b3JrZXJzKTsKIAogCS8qCiAJICogQ2FsbCBsYXp5 X3NjYW5faGVhcCB0byBwZXJmb3JtIGFsbCByZXF1aXJlZCBoZWFwIHBydW5pbmcsIGluZGV4CkBA IC05NDcsOSArOTQ3LDkgQEAgaGVhcF92YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwgVmFjdXVtUGFy YW1zICpwYXJhbXMsCiAJewogCQlUaW1lc3RhbXBUeiBlbmR0aW1lID0gR2V0Q3VycmVudFRpbWVz dGFtcCgpOwogCi0JCWlmICh2ZXJib3NlIHx8IHBhcmFtcy0+bG9nX21pbl9kdXJhdGlvbiA9PSAw IHx8CisJCWlmICh2ZXJib3NlIHx8IHBhcmFtcy5sb2dfbWluX2R1cmF0aW9uID09IDAgfHwKIAkJ CVRpbWVzdGFtcERpZmZlcmVuY2VFeGNlZWRzKHN0YXJ0dGltZSwgZW5kdGltZSwKLQkJCQkJCQkJ CSAgIHBhcmFtcy0+bG9nX21pbl9kdXJhdGlvbikpCisJCQkJCQkJCQkgICBwYXJhbXMubG9nX21p bl9kdXJhdGlvbikpCiAJCXsKIAkJCWxvbmcJCXNlY3NfZHVyOwogCQkJaW50CQkJdXNlY3NfZHVy OwpAQCAtOTg0LDEwICs5ODQsMTAgQEAgaGVhcF92YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwgVmFj dXVtUGFyYW1zICpwYXJhbXMsCiAJCQkJICogQWdncmVzc2l2ZW5lc3MgYWxyZWFkeSByZXBvcnRl ZCBlYXJsaWVyLCBpbiBkZWRpY2F0ZWQKIAkJCQkgKiBWQUNVVU0gVkVSQk9TRSBlcmVwb3J0CiAJ CQkJICovCi0JCQkJQXNzZXJ0KCFwYXJhbXMtPmlzX3dyYXBhcm91bmQpOworCQkJCUFzc2VydCgh cGFyYW1zLmlzX3dyYXBhcm91bmQpOwogCQkJCW1zZ2ZtdCA9IF8oImZpbmlzaGVkIHZhY3V1bWlu ZyBcIiVzLiVzLiVzXCI6IGluZGV4IHNjYW5zOiAlZFxuIik7CiAJCQl9Ci0JCQllbHNlIGlmIChw YXJhbXMtPmlzX3dyYXBhcm91bmQpCisJCQllbHNlIGlmIChwYXJhbXMuaXNfd3JhcGFyb3VuZCkK IAkJCXsKIAkJCQkvKgogCQkJCSAqIFdoaWxlIGl0J3MgcG9zc2libGUgZm9yIGEgVkFDVVVNIHRv IGJlIGJvdGggaXNfd3JhcGFyb3VuZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv YW5hbHl6ZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCmluZGV4IDRmZmZiNzZl NTU3Li42NzZjOTgxYWZmNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6 ZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYwpAQCAtNzYsNyArNzYsNyBA QCBzdGF0aWMgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgdmFjX3N0cmF0ZWd5OwogCiAKIHN0YXRpYyB2 b2lkIGRvX2FuYWx5emVfcmVsKFJlbGF0aW9uIG9uZXJlbCwKLQkJCQkJCSAgIFZhY3V1bVBhcmFt cyAqcGFyYW1zLCBMaXN0ICp2YV9jb2xzLAorCQkJCQkJICAgVmFjdXVtUGFyYW1zIHBhcmFtcywg TGlzdCAqdmFfY29scywKIAkJCQkJCSAgIEFjcXVpcmVTYW1wbGVSb3dzRnVuYyBhY3F1aXJlZnVu YywgQmxvY2tOdW1iZXIgcmVscGFnZXMsCiAJCQkJCQkgICBib29sIGluaCwgYm9vbCBpbl9vdXRl cl94YWN0LCBpbnQgZWxldmVsKTsKIHN0YXRpYyB2b2lkIGNvbXB1dGVfaW5kZXhfc3RhdHMoUmVs YXRpb24gb25lcmVsLCBkb3VibGUgdG90YWxyb3dzLApAQCAtMTA3LDcgKzEwNyw3IEBAIHN0YXRp YyBEYXR1bSBpbmRfZmV0Y2hfZnVuYyhWYWNBdHRyU3RhdHNQIHN0YXRzLCBpbnQgcm93bnVtLCBi b29sICppc051bGwpOwogICovCiB2b2lkCiBhbmFseXplX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFy ICpyZWxhdGlvbiwKLQkJCVZhY3V1bVBhcmFtcyAqcGFyYW1zLCBMaXN0ICp2YV9jb2xzLCBib29s IGluX291dGVyX3hhY3QsCisJCQlWYWN1dW1QYXJhbXMgcGFyYW1zLCBMaXN0ICp2YV9jb2xzLCBi b29sIGluX291dGVyX3hhY3QsCiAJCQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpCiB7 CiAJUmVsYXRpb24Jb25lcmVsOwpAQCAtMTE2LDcgKzExNiw3IEBAIGFuYWx5emVfcmVsKE9pZCBy ZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLAogCUJsb2NrTnVtYmVyIHJlbHBhZ2VzID0gMDsKIAog CS8qIFNlbGVjdCBsb2dnaW5nIGxldmVsICovCi0JaWYgKHBhcmFtcy0+b3B0aW9ucyAmIFZBQ09Q VF9WRVJCT1NFKQorCWlmIChwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9WRVJCT1NFKQogCQllbGV2 ZWwgPSBJTkZPOwogCWVsc2UKIAkJZWxldmVsID0gREVCVUcyOwpAQCAtMTM4LDggKzEzOCw4IEBA IGFuYWx5emVfcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLAogCSAqCiAJICogTWFr ZSBzdXJlIHRvIGdlbmVyYXRlIG9ubHkgbG9ncyBmb3IgQU5BTFlaRSBpbiB0aGlzIGNhc2UuCiAJ ICovCi0Jb25lcmVsID0gdmFjdXVtX29wZW5fcmVsYXRpb24ocmVsaWQsIHJlbGF0aW9uLCBwYXJh bXMtPm9wdGlvbnMgJiB+KFZBQ09QVF9WQUNVVU0pLAotCQkJCQkJCQkgIHBhcmFtcy0+bG9nX21p bl9kdXJhdGlvbiA+PSAwLAorCW9uZXJlbCA9IHZhY3V1bV9vcGVuX3JlbGF0aW9uKHJlbGlkLCBy ZWxhdGlvbiwgcGFyYW1zLm9wdGlvbnMgJiB+KFZBQ09QVF9WQUNVVU0pLAorCQkJCQkJCQkgIHBh cmFtcy5sb2dfbWluX2R1cmF0aW9uID49IDAsCiAJCQkJCQkJCSAgU2hhcmVVcGRhdGVFeGNsdXNp dmVMb2NrKTsKIAogCS8qIGxlYXZlIGlmIHJlbGF0aW9uIGNvdWxkIG5vdCBiZSBvcGVuZWQgb3Ig bG9ja2VkICovCkBAIC0xNTUsNyArMTU1LDcgQEAgYW5hbHl6ZV9yZWwoT2lkIHJlbGlkLCBSYW5n ZVZhciAqcmVsYXRpb24sCiAJICovCiAJaWYgKCF2YWN1dW1faXNfcGVybWl0dGVkX2Zvcl9yZWxh dGlvbihSZWxhdGlvbkdldFJlbGlkKG9uZXJlbCksCiAJCQkJCQkJCQkJICBvbmVyZWwtPnJkX3Jl bCwKLQkJCQkJCQkJCQkgIHBhcmFtcy0+b3B0aW9ucyAmIH5WQUNPUFRfVkFDVVVNKSkKKwkJCQkJ CQkJCQkgIHBhcmFtcy5vcHRpb25zICYgflZBQ09QVF9WQUNVVU0pKQogCXsKIAkJcmVsYXRpb25f Y2xvc2Uob25lcmVsLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwogCQlyZXR1cm47CkBAIC0y MjcsNyArMjI3LDcgQEAgYW5hbHl6ZV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24s CiAJZWxzZQogCXsKIAkJLyogTm8gbmVlZCBmb3IgYSBXQVJOSU5HIGlmIHdlIGFscmVhZHkgY29t cGxhaW5lZCBkdXJpbmcgVkFDVVVNICovCi0JCWlmICghKHBhcmFtcy0+b3B0aW9ucyAmIFZBQ09Q VF9WQUNVVU0pKQorCQlpZiAoIShwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9WQUNVVU0pKQogCQkJ ZXJlcG9ydChXQVJOSU5HLAogCQkJCQkoZXJybXNnKCJza2lwcGluZyBcIiVzXCIgLS0tIGNhbm5v dCBhbmFseXplIG5vbi10YWJsZXMgb3Igc3BlY2lhbCBzeXN0ZW0gdGFibGVzIiwKIAkJCQkJCQlS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShvbmVyZWwpKSkpOwpAQCAtMjc1LDcgKzI3NSw3IEBAIGFu YWx5emVfcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLAogICogYXBwcm9wcmlhdGUg YWNxdWlyZWZ1bmMgZm9yIGVhY2ggY2hpbGQgdGFibGUuCiAgKi8KIHN0YXRpYyB2b2lkCi1kb19h bmFseXplX3JlbChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAorZG9fYW5h bHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1QYXJhbXMgcGFyYW1zLAogCQkJICAgTGlz dCAqdmFfY29scywgQWNxdWlyZVNhbXBsZVJvd3NGdW5jIGFjcXVpcmVmdW5jLAogCQkJICAgQmxv Y2tOdW1iZXIgcmVscGFnZXMsIGJvb2wgaW5oLCBib29sIGluX291dGVyX3hhY3QsCiAJCQkgICBp bnQgZWxldmVsKQpAQCAtMzA5LDkgKzMwOSw5IEBAIGRvX2FuYWx5emVfcmVsKFJlbGF0aW9uIG9u ZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJUGdTdGF0X0NvdW50ZXIgc3RhcnRyZWFkdGlt ZSA9IDA7CiAJUGdTdGF0X0NvdW50ZXIgc3RhcnR3cml0ZXRpbWUgPSAwOwogCi0JdmVyYm9zZSA9 IChwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfVkVSQk9TRSkgIT0gMDsKKwl2ZXJib3NlID0gKHBh cmFtcy5vcHRpb25zICYgVkFDT1BUX1ZFUkJPU0UpICE9IDA7CiAJaW5zdHJ1bWVudCA9ICh2ZXJi b3NlIHx8IChBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkgJiYKLQkJCQkJCQkgIHBhcmFtcy0+ bG9nX21pbl9kdXJhdGlvbiA+PSAwKSk7CisJCQkJCQkJICBwYXJhbXMubG9nX21pbl9kdXJhdGlv biA+PSAwKSk7CiAJaWYgKGluaCkKIAkJZXJlcG9ydChlbGV2ZWwsCiAJCQkJKGVycm1zZygiYW5h bHl6aW5nIFwiJXMuJXNcIiBpbmhlcml0YW5jZSB0cmVlIiwKQEAgLTcwNiw3ICs3MDYsNyBAQCBk b19hbmFseXplX3JlbChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCSAq IGFtdmFjdXVtY2xlYW51cCgpIHdoZW4gY2FsbGVkIGluIEFOQUxZWkUtb25seSBtb2RlLiAgVGhl IG9ubHkgZXhjZXB0aW9uCiAJICogYW1vbmcgY29yZSBpbmRleCBBTXMgaXMgR0lOL2dpbnZhY3V1 bWNsZWFudXAoKS4KIAkgKi8KLQlpZiAoIShwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfVkFDVVVN KSkKKwlpZiAoIShwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9WQUNVVU0pKQogCXsKIAkJZm9yIChp bmQgPSAwOyBpbmQgPCBuaW5kZXhlczsgaW5kKyspCiAJCXsKQEAgLTczNiw5ICs3MzYsOSBAQCBk b19hbmFseXplX3JlbChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCXsK IAkJVGltZXN0YW1wVHogZW5kdGltZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKIAotCQlpZiAo dmVyYm9zZSB8fCBwYXJhbXMtPmxvZ19taW5fZHVyYXRpb24gPT0gMCB8fAorCQlpZiAodmVyYm9z ZSB8fCBwYXJhbXMubG9nX21pbl9kdXJhdGlvbiA9PSAwIHx8CiAJCQlUaW1lc3RhbXBEaWZmZXJl bmNlRXhjZWVkcyhzdGFydHRpbWUsIGVuZHRpbWUsCi0JCQkJCQkJCQkgICBwYXJhbXMtPmxvZ19t aW5fZHVyYXRpb24pKQorCQkJCQkJCQkJICAgcGFyYW1zLmxvZ19taW5fZHVyYXRpb24pKQogCQl7 CiAJCQlsb25nCQlkZWxheV9pbl9tczsKIAkJCVdhbFVzYWdlCXdhbHVzYWdlOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1c3Rlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y2x1c3Rlci5jCmluZGV4IDU0YTA4ZTQxMDJlLi5iNTUyMjFkNDRjZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY2x1c3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ns dXN0ZXIuYwpAQCAtOTE3LDcgKzkxNyw3IEBAIGNvcHlfdGFibGVfZGF0YShSZWxhdGlvbiBOZXdI ZWFwLCBSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBPbGRJbmRleCwgYm9vbCB2ZXJiCiAJICog bm90IHRvIGJlIGFnZ3Jlc3NpdmUgYWJvdXQgdGhpcy4KIAkgKi8KIAltZW1zZXQoJnBhcmFtcywg MCwgc2l6ZW9mKFZhY3V1bVBhcmFtcykpOwotCXZhY3V1bV9nZXRfY3V0b2ZmcyhPbGRIZWFwLCAm cGFyYW1zLCAmY3V0b2Zmcyk7CisJdmFjdXVtX2dldF9jdXRvZmZzKE9sZEhlYXAsIHBhcmFtcywg JmN1dG9mZnMpOwogCiAJLyoKIAkgKiBGcmVlemVYaWQgd2lsbCBiZWNvbWUgdGhlIHRhYmxlJ3Mg bmV3IHJlbGZyb3plbnhpZCwgYW5kIHRoYXQgbXVzdG4ndCBnbwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwpp bmRleCAzM2EzM2JmNmIxYy4uNWI4MGYyMWVhMjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC0x MjMsNyArMTIzLDcgQEAgc3RhdGljIHZvaWQgdmFjX3RydW5jYXRlX2Nsb2coVHJhbnNhY3Rpb25J ZCBmcm96ZW5YSUQsCiAJCQkJCQkJICBNdWx0aVhhY3RJZCBtaW5NdWx0aSwKIAkJCQkJCQkgIFRy YW5zYWN0aW9uSWQgbGFzdFNhbmVGcm96ZW5YaWQsCiAJCQkJCQkJICBNdWx0aVhhY3RJZCBsYXN0 U2FuZU1pbk11bHRpKTsKLXN0YXRpYyBib29sIHZhY3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZh ciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAorc3RhdGljIGJvb2wgdmFjdXVtX3Jl bChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAkJ CQkJICAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KTsKIHN0YXRpYyBkb3VibGUgY29t cHV0ZV9wYXJhbGxlbF9kZWxheSh2b2lkKTsKIHN0YXRpYyBWYWNPcHRWYWx1ZSBnZXRfdmFjb3B0 dmFsX2Zyb21fYm9vbGVhbihEZWZFbGVtICpkZWYpOwpAQCAtNDY0LDcgKzQ2NCw3IEBAIEV4ZWNW YWN1dW0oUGFyc2VTdGF0ZSAqcHN0YXRlLCBWYWN1dW1TdG10ICp2YWNzdG10LCBib29sIGlzVG9w TGV2ZWwpCiAJfQogCiAJLyogTm93IGdvIHRocm91Z2ggdGhlIGNvbW1vbiByb3V0aW5lICovCi0J dmFjdXVtKHZhY3N0bXQtPnJlbHMsICZwYXJhbXMsIGJzdHJhdGVneSwgdmFjX2NvbnRleHQsIGlz VG9wTGV2ZWwpOworCXZhY3V1bSh2YWNzdG10LT5yZWxzLCBwYXJhbXMsIGJzdHJhdGVneSwgdmFj X2NvbnRleHQsIGlzVG9wTGV2ZWwpOwogCiAJLyogRmluYWxseSwgY2xlYW4gdXAgdGhlIHZhY3V1 bSBtZW1vcnkgY29udGV4dCAqLwogCU1lbW9yeUNvbnRleHREZWxldGUodmFjX2NvbnRleHQpOwpA QCAtNDkzLDcgKzQ5Myw3IEBAIEV4ZWNWYWN1dW0oUGFyc2VTdGF0ZSAqcHN0YXRlLCBWYWN1dW1T dG10ICp2YWNzdG10LCBib29sIGlzVG9wTGV2ZWwpCiAgKiBtZW1vcnkgY29udGV4dCB0aGF0IHdp bGwgbm90IGRpc2FwcGVhciBhdCB0cmFuc2FjdGlvbiBjb21taXQuCiAgKi8KIHZvaWQKLXZhY3V1 bShMaXN0ICpyZWxhdGlvbnMsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLCBCdWZmZXJBY2Nlc3NTdHJh dGVneSBic3RyYXRlZ3ksCit2YWN1dW0oTGlzdCAqcmVsYXRpb25zLCBWYWN1dW1QYXJhbXMgcGFy YW1zLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3ksCiAJICAgTWVtb3J5Q29udGV4dCB2 YWNfY29udGV4dCwgYm9vbCBpc1RvcExldmVsKQogewogCXN0YXRpYyBib29sIGluX3ZhY3V1bSA9 IGZhbHNlOwpAQCAtNTAyLDkgKzUwMiw3IEBAIHZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIFZhY3V1 bVBhcmFtcyAqcGFyYW1zLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3ksCiAJdm9sYXRp bGUgYm9vbCBpbl9vdXRlcl94YWN0LAogCQkJCXVzZV9vd25feGFjdHM7CiAKLQlBc3NlcnQocGFy YW1zICE9IE5VTEwpOwotCi0Jc3RtdHR5cGUgPSAocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX1ZB Q1VVTSkgPyAiVkFDVVVNIiA6ICJBTkFMWVpFIjsKKwlzdG10dHlwZSA9IChwYXJhbXMub3B0aW9u cyAmIFZBQ09QVF9WQUNVVU0pID8gIlZBQ1VVTSIgOiAiQU5BTFlaRSI7CiAKIAkvKgogCSAqIFdl IGNhbm5vdCBydW4gVkFDVVVNIGluc2lkZSBhIHVzZXIgdHJhbnNhY3Rpb24gYmxvY2s7IGlmIHdl IHdlcmUgaW5zaWRlCkBAIC01MTQsNyArNTEyLDcgQEAgdmFjdXVtKExpc3QgKnJlbGF0aW9ucywg VmFjdXVtUGFyYW1zICpwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwKIAkg KgogCSAqIEFOQUxZWkUgKHdpdGhvdXQgVkFDVVVNKSBjYW4gcnVuIGVpdGhlciB3YXkuCiAJICov Ci0JaWYgKHBhcmFtcy0+b3B0aW9ucyAmIFZBQ09QVF9WQUNVVU0pCisJaWYgKHBhcmFtcy5vcHRp b25zICYgVkFDT1BUX1ZBQ1VVTSkKIAl7CiAJCVByZXZlbnRJblRyYW5zYWN0aW9uQmxvY2soaXNU b3BMZXZlbCwgc3RtdHR5cGUpOwogCQlpbl9vdXRlcl94YWN0ID0gZmFsc2U7CkBAIC01MzcsNyAr NTM1LDcgQEAgdmFjdXVtKExpc3QgKnJlbGF0aW9ucywgVmFjdXVtUGFyYW1zICpwYXJhbXMsIEJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwKIAkgKiBCdWlsZCBsaXN0IG9mIHJlbGF0aW9u KHMpIHRvIHByb2Nlc3MsIHB1dHRpbmcgYW55IG5ldyBkYXRhIGluCiAJICogdmFjX2NvbnRleHQg Zm9yIHNhZmVrZWVwaW5nLgogCSAqLwotCWlmIChwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfT05M WV9EQVRBQkFTRV9TVEFUUykKKwlpZiAocGFyYW1zLm9wdGlvbnMgJiBWQUNPUFRfT05MWV9EQVRB QkFTRV9TVEFUUykKIAl7CiAJCS8qIFdlIGRvbid0IHByb2Nlc3MgYW55IHRhYmxlcyBpbiB0aGlz IGNhc2UgKi8KIAkJQXNzZXJ0KHJlbGF0aW9ucyA9PSBOSUwpOwpAQCAtNTUzLDcgKzU1MSw3IEBA IHZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLCBCdWZmZXJBY2Nl c3NTdHJhdGVneSBic3RyYXRlZ3ksCiAJCQlMaXN0CSAgICpzdWJsaXN0OwogCQkJTWVtb3J5Q29u dGV4dCBvbGRfY29udGV4dDsKIAotCQkJc3VibGlzdCA9IGV4cGFuZF92YWN1dW1fcmVsKHZyZWws IHZhY19jb250ZXh0LCBwYXJhbXMtPm9wdGlvbnMpOworCQkJc3VibGlzdCA9IGV4cGFuZF92YWN1 dW1fcmVsKHZyZWwsIHZhY19jb250ZXh0LCBwYXJhbXMub3B0aW9ucyk7CiAJCQlvbGRfY29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh2YWNfY29udGV4dCk7CiAJCQluZXdyZWxzID0gbGlz dF9jb25jYXQobmV3cmVscywgc3VibGlzdCk7CiAJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk X2NvbnRleHQpOwpAQCAtNTYxLDcgKzU1OSw3IEBAIHZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIFZh Y3V1bVBhcmFtcyAqcGFyYW1zLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3ksCiAJCXJl bGF0aW9ucyA9IG5ld3JlbHM7CiAJfQogCWVsc2UKLQkJcmVsYXRpb25zID0gZ2V0X2FsbF92YWN1 dW1fcmVscyh2YWNfY29udGV4dCwgcGFyYW1zLT5vcHRpb25zKTsKKwkJcmVsYXRpb25zID0gZ2V0 X2FsbF92YWN1dW1fcmVscyh2YWNfY29udGV4dCwgcGFyYW1zLm9wdGlvbnMpOwogCiAJLyoKIAkg KiBEZWNpZGUgd2hldGhlciB3ZSBuZWVkIHRvIHN0YXJ0L2NvbW1pdCBvdXIgb3duIHRyYW5zYWN0 aW9ucy4KQEAgLTU3NywxMSArNTc1LDExIEBAIHZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIFZhY3V1 bVBhcmFtcyAqcGFyYW1zLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3ksCiAJICogdHJh bnNhY3Rpb24gYmxvY2ssIGFuZCBhbHNvIGluIGFuIGF1dG92YWN1dW0gd29ya2VyLCB1c2Ugb3du CiAJICogdHJhbnNhY3Rpb25zIHNvIHdlIGNhbiByZWxlYXNlIGxvY2tzIHNvb25lci4KIAkgKi8K LQlpZiAocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX1ZBQ1VVTSkKKwlpZiAocGFyYW1zLm9wdGlv bnMgJiBWQUNPUFRfVkFDVVVNKQogCQl1c2Vfb3duX3hhY3RzID0gdHJ1ZTsKIAllbHNlCiAJewot CQlBc3NlcnQocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX0FOQUxZWkUpOworCQlBc3NlcnQocGFy YW1zLm9wdGlvbnMgJiBWQUNPUFRfQU5BTFlaRSk7CiAJCWlmIChBbUF1dG9WYWN1dW1Xb3JrZXJQ cm9jZXNzKCkpCiAJCQl1c2Vfb3duX3hhY3RzID0gdHJ1ZTsKIAkJZWxzZSBpZiAoaW5fb3V0ZXJf eGFjdCkKQEAgLTYzMiwxMyArNjMwLDEzIEBAIHZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIFZhY3V1 bVBhcmFtcyAqcGFyYW1zLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3ksCiAJCXsKIAkJ CVZhY3V1bVJlbGF0aW9uICp2cmVsID0gbGZpcnN0X25vZGUoVmFjdXVtUmVsYXRpb24sIGN1cik7 CiAKLQkJCWlmIChwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfVkFDVVVNKQorCQkJaWYgKHBhcmFt cy5vcHRpb25zICYgVkFDT1BUX1ZBQ1VVTSkKIAkJCXsKIAkJCQlpZiAoIXZhY3V1bV9yZWwodnJl bC0+b2lkLCB2cmVsLT5yZWxhdGlvbiwgcGFyYW1zLCBic3RyYXRlZ3kpKQogCQkJCQljb250aW51 ZTsKIAkJCX0KIAotCQkJaWYgKHBhcmFtcy0+b3B0aW9ucyAmIFZBQ09QVF9BTkFMWVpFKQorCQkJ aWYgKHBhcmFtcy5vcHRpb25zICYgVkFDT1BUX0FOQUxZWkUpCiAJCQl7CiAJCQkJLyoKIAkJCQkg KiBJZiB1c2luZyBzZXBhcmF0ZSB4YWN0cywgc3RhcnQgb25lIGZvciBhbmFseXplLiBPdGhlcndp c2UsCkBAIC03MDIsOCArNzAwLDggQEAgdmFjdXVtKExpc3QgKnJlbGF0aW9ucywgVmFjdXVtUGFy YW1zICpwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwKIAkJU3RhcnRUcmFu c2FjdGlvbkNvbW1hbmQoKTsKIAl9CiAKLQlpZiAoKHBhcmFtcy0+b3B0aW9ucyAmIFZBQ09QVF9W QUNVVU0pICYmCi0JCSEocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX1NLSVBfREFUQUJBU0VfU1RB VFMpKQorCWlmICgocGFyYW1zLm9wdGlvbnMgJiBWQUNPUFRfVkFDVVVNKSAmJgorCQkhKHBhcmFt cy5vcHRpb25zICYgVkFDT1BUX1NLSVBfREFUQUJBU0VfU1RBVFMpKQogCXsKIAkJLyoKIAkJICog VXBkYXRlIHBnX2RhdGFiYXNlLmRhdGZyb3plbnhpZCwgYW5kIHRydW5jYXRlIHBnX3hhY3QgaWYg cG9zc2libGUuCkBAIC0xMTAxLDcgKzEwOTksNyBAQCBnZXRfYWxsX3ZhY3V1bV9yZWxzKE1lbW9y eUNvbnRleHQgdmFjX2NvbnRleHQsIGludCBvcHRpb25zKQogICogbWluaW11bSkuCiAgKi8KIGJv b2wKLXZhY3V1bV9nZXRfY3V0b2ZmcyhSZWxhdGlvbiByZWwsIGNvbnN0IFZhY3V1bVBhcmFtcyAq cGFyYW1zLAordmFjdXVtX2dldF9jdXRvZmZzKFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFy YW1zIHBhcmFtcywKIAkJCQkgICBzdHJ1Y3QgVmFjdXVtQ3V0b2ZmcyAqY3V0b2ZmcykKIHsKIAlp bnQJCQlmcmVlemVfbWluX2FnZSwKQEAgLTExMTcsMTAgKzExMTUsMTAgQEAgdmFjdXVtX2dldF9j dXRvZmZzKFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJCQkJYWdn cmVzc2l2ZU1YSURDdXRvZmY7CiAKIAkvKiBVc2UgbXV0YWJsZSBjb3BpZXMgb2YgZnJlZXplIGFn ZSBwYXJhbWV0ZXJzICovCi0JZnJlZXplX21pbl9hZ2UgPSBwYXJhbXMtPmZyZWV6ZV9taW5fYWdl OwotCW11bHRpeGFjdF9mcmVlemVfbWluX2FnZSA9IHBhcmFtcy0+bXVsdGl4YWN0X2ZyZWV6ZV9t aW5fYWdlOwotCWZyZWV6ZV90YWJsZV9hZ2UgPSBwYXJhbXMtPmZyZWV6ZV90YWJsZV9hZ2U7Ci0J bXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2UgPSBwYXJhbXMtPm11bHRpeGFjdF9mcmVlemVfdGFi bGVfYWdlOworCWZyZWV6ZV9taW5fYWdlID0gcGFyYW1zLmZyZWV6ZV9taW5fYWdlOworCW11bHRp eGFjdF9mcmVlemVfbWluX2FnZSA9IHBhcmFtcy5tdWx0aXhhY3RfZnJlZXplX21pbl9hZ2U7CisJ ZnJlZXplX3RhYmxlX2FnZSA9IHBhcmFtcy5mcmVlemVfdGFibGVfYWdlOworCW11bHRpeGFjdF9m cmVlemVfdGFibGVfYWdlID0gcGFyYW1zLm11bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlOwogCiAJ LyogU2V0IHBnX2NsYXNzIGZpZWxkcyBpbiBjdXRvZmZzICovCiAJY3V0b2Zmcy0+cmVsZnJvemVu eGlkID0gcmVsLT5yZF9yZWwtPnJlbGZyb3plbnhpZDsKQEAgLTE5OTcsNyArMTk5NSw3IEBAIHZh Y190cnVuY2F0ZV9jbG9nKFRyYW5zYWN0aW9uSWQgZnJvemVuWElELAogICoJCUF0IGVudHJ5IGFu ZCBleGl0LCB3ZSBhcmUgbm90IGluc2lkZSBhIHRyYW5zYWN0aW9uLgogICovCiBzdGF0aWMgYm9v bAotdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1z ICpwYXJhbXMsCit2YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1 dW1QYXJhbXMgcGFyYW1zLAogCQkgICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpCiB7 CiAJTE9DS01PREUJbG1vZGU7CkBAIC0yMDA5LDEyICsyMDA3LDEwIEBAIHZhY3V1bV9yZWwoT2lk IHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCWludAkJ CXNhdmVfc2VjX2NvbnRleHQ7CiAJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7CiAKLQlBc3NlcnQocGFy YW1zICE9IE5VTEwpOwotCiAJLyogQmVnaW4gYSB0cmFuc2FjdGlvbiBmb3IgdmFjdXVtaW5nIHRo aXMgcmVsYXRpb24gKi8KIAlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCi0JaWYgKCEocGFy YW1zLT5vcHRpb25zICYgVkFDT1BUX0ZVTEwpKQorCWlmICghKHBhcmFtcy5vcHRpb25zICYgVkFD T1BUX0ZVTEwpKQogCXsKIAkJLyoKIAkJICogSW4gbGF6eSB2YWN1dW0sIHdlIGNhbiBzZXQgdGhl IFBST0NfSU5fVkFDVVVNIGZsYWcsIHdoaWNoIGxldHMKQEAgLTIwNDAsNyArMjAzNiw3IEBAIHZh Y3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAqcGFy YW1zLAogCQkgKi8KIAkJTFdMb2NrQWNxdWlyZShQcm9jQXJyYXlMb2NrLCBMV19FWENMVVNJVkUp OwogCQlNeVByb2MtPnN0YXR1c0ZsYWdzIHw9IFBST0NfSU5fVkFDVVVNOwotCQlpZiAocGFyYW1z LT5pc193cmFwYXJvdW5kKQorCQlpZiAocGFyYW1zLmlzX3dyYXBhcm91bmQpCiAJCQlNeVByb2Mt PnN0YXR1c0ZsYWdzIHw9IFBST0NfVkFDVVVNX0ZPUl9XUkFQQVJPVU5EOwogCQlQcm9jR2xvYmFs LT5zdGF0dXNGbGFnc1tNeVByb2MtPnBneGFjdG9mZl0gPSBNeVByb2MtPnN0YXR1c0ZsYWdzOwog CQlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOwpAQCAtMjA2NCwxMiArMjA2MCwxMiBAQCB2 YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgKnBh cmFtcywKIAkgKiB2YWN1dW0sIGJ1dCBqdXN0IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayBmb3Ig Y29uY3VycmVudCB2YWN1dW0uIEVpdGhlcgogCSAqIHdheSwgd2UgY2FuIGJlIHN1cmUgdGhhdCBu byBvdGhlciBiYWNrZW5kIGlzIHZhY3V1bWluZyB0aGUgc2FtZSB0YWJsZS4KIAkgKi8KLQlsbW9k ZSA9IChwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfRlVMTCkgPworCWxtb2RlID0gKHBhcmFtcy5v cHRpb25zICYgVkFDT1BUX0ZVTEwpID8KIAkJQWNjZXNzRXhjbHVzaXZlTG9jayA6IFNoYXJlVXBk YXRlRXhjbHVzaXZlTG9jazsKIAogCS8qIG9wZW4gdGhlIHJlbGF0aW9uIGFuZCBnZXQgdGhlIGFw cHJvcHJpYXRlIGxvY2sgb24gaXQgKi8KLQlyZWwgPSB2YWN1dW1fb3Blbl9yZWxhdGlvbihyZWxp ZCwgcmVsYXRpb24sIHBhcmFtcy0+b3B0aW9ucywKLQkJCQkJCQkgICBwYXJhbXMtPmxvZ19taW5f ZHVyYXRpb24gPj0gMCwgbG1vZGUpOworCXJlbCA9IHZhY3V1bV9vcGVuX3JlbGF0aW9uKHJlbGlk LCByZWxhdGlvbiwgcGFyYW1zLm9wdGlvbnMsCisJCQkJCQkJICAgcGFyYW1zLmxvZ19taW5fZHVy YXRpb24gPj0gMCwgbG1vZGUpOwogCiAJLyogbGVhdmUgaWYgcmVsYXRpb24gY291bGQgbm90IGJl IG9wZW5lZCBvciBsb2NrZWQgKi8KIAlpZiAoIXJlbCkKQEAgLTIwODQsOCArMjA4MCw4IEBAIHZh Y3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAqcGFy YW1zLAogCSAqIFRoaXMgaXMgb25seSBzYWZlIHRvIGRvIGJlY2F1c2Ugd2UgaG9sZCBhIHNlc3Np b24gbG9jayBvbiB0aGUgbWFpbgogCSAqIHJlbGF0aW9uIHRoYXQgcHJldmVudHMgY29uY3VycmVu dCBkZWxldGlvbi4KIAkgKi8KLQlpZiAoT2lkSXNWYWxpZChwYXJhbXMtPnRvYXN0X3BhcmVudCkp Ci0JCXByaXZfcmVsaWQgPSBwYXJhbXMtPnRvYXN0X3BhcmVudDsKKwlpZiAoT2lkSXNWYWxpZChw YXJhbXMudG9hc3RfcGFyZW50KSkKKwkJcHJpdl9yZWxpZCA9IHBhcmFtcy50b2FzdF9wYXJlbnQ7 CiAJZWxzZQogCQlwcml2X3JlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOwogCkBAIC0yMDk4 LDcgKzIwOTQsNyBAQCB2YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBW YWN1dW1QYXJhbXMgKnBhcmFtcywKIAkgKi8KIAlpZiAoIXZhY3V1bV9pc19wZXJtaXR0ZWRfZm9y X3JlbGF0aW9uKHByaXZfcmVsaWQsCiAJCQkJCQkJCQkJICByZWwtPnJkX3JlbCwKLQkJCQkJCQkJ CQkgIHBhcmFtcy0+b3B0aW9ucyAmIH5WQUNPUFRfQU5BTFlaRSkpCisJCQkJCQkJCQkJICBwYXJh bXMub3B0aW9ucyAmIH5WQUNPUFRfQU5BTFlaRSkpCiAJewogCQlyZWxhdGlvbl9jbG9zZShyZWws IGxtb2RlKTsKIAkJUG9wQWN0aXZlU25hcHNob3QoKTsKQEAgLTIxNjksNyArMjE2NSw3IEBAIHZh Y3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAqcGFy YW1zLAogCSAqIFNldCBpbmRleF9jbGVhbnVwIG9wdGlvbiBiYXNlZCBvbiBpbmRleF9jbGVhbnVw IHJlbG9wdGlvbiBpZiBpdCB3YXNuJ3QKIAkgKiBzcGVjaWZpZWQgaW4gVkFDVVVNIGNvbW1hbmQs IG9yIHdoZW4gcnVubmluZyBpbiBhbiBhdXRvdmFjdXVtIHdvcmtlcgogCSAqLwotCWlmIChwYXJh bXMtPmluZGV4X2NsZWFudXAgPT0gVkFDT1BUVkFMVUVfVU5TUEVDSUZJRUQpCisJaWYgKHBhcmFt cy5pbmRleF9jbGVhbnVwID09IFZBQ09QVFZBTFVFX1VOU1BFQ0lGSUVEKQogCXsKIAkJU3RkUmRP cHRJbmRleENsZWFudXAgdmFjdXVtX2luZGV4X2NsZWFudXA7CiAKQEAgLTIxODAsMTQgKzIxNzYs MTQgQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFy YW1zICpwYXJhbXMsCiAJCQkJKChTdGRSZE9wdGlvbnMgKikgcmVsLT5yZF9vcHRpb25zKS0+dmFj dXVtX2luZGV4X2NsZWFudXA7CiAKIAkJaWYgKHZhY3V1bV9pbmRleF9jbGVhbnVwID09IFNURFJE X09QVElPTl9WQUNVVU1fSU5ERVhfQ0xFQU5VUF9BVVRPKQotCQkJcGFyYW1zLT5pbmRleF9jbGVh bnVwID0gVkFDT1BUVkFMVUVfQVVUTzsKKwkJCXBhcmFtcy5pbmRleF9jbGVhbnVwID0gVkFDT1BU VkFMVUVfQVVUTzsKIAkJZWxzZSBpZiAodmFjdXVtX2luZGV4X2NsZWFudXAgPT0gU1REUkRfT1BU SU9OX1ZBQ1VVTV9JTkRFWF9DTEVBTlVQX09OKQotCQkJcGFyYW1zLT5pbmRleF9jbGVhbnVwID0g VkFDT1BUVkFMVUVfRU5BQkxFRDsKKwkJCXBhcmFtcy5pbmRleF9jbGVhbnVwID0gVkFDT1BUVkFM VUVfRU5BQkxFRDsKIAkJZWxzZQogCQl7CiAJCQlBc3NlcnQodmFjdXVtX2luZGV4X2NsZWFudXAg PT0KIAkJCQkgICBTVERSRF9PUFRJT05fVkFDVVVNX0lOREVYX0NMRUFOVVBfT0ZGKTsKLQkJCXBh cmFtcy0+aW5kZXhfY2xlYW51cCA9IFZBQ09QVFZBTFVFX0RJU0FCTEVEOworCQkJcGFyYW1zLmlu ZGV4X2NsZWFudXAgPSBWQUNPUFRWQUxVRV9ESVNBQkxFRDsKIAkJfQogCX0KIApAQCAtMjE5Nywy OCArMjE5MywyOCBAQCB2YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBW YWN1dW1QYXJhbXMgKnBhcmFtcywKIAkgKi8KIAlpZiAocmVsLT5yZF9vcHRpb25zICE9IE5VTEwg JiYKIAkJKChTdGRSZE9wdGlvbnMgKikgcmVsLT5yZF9vcHRpb25zKS0+dmFjdXVtX21heF9lYWdl cl9mcmVlemVfZmFpbHVyZV9yYXRlID49IDApCi0JCXBhcmFtcy0+bWF4X2VhZ2VyX2ZyZWV6ZV9m YWlsdXJlX3JhdGUgPQorCQlwYXJhbXMubWF4X2VhZ2VyX2ZyZWV6ZV9mYWlsdXJlX3JhdGUgPQog CQkJKChTdGRSZE9wdGlvbnMgKikgcmVsLT5yZF9vcHRpb25zKS0+dmFjdXVtX21heF9lYWdlcl9m cmVlemVfZmFpbHVyZV9yYXRlOwogCiAJLyoKIAkgKiBTZXQgdHJ1bmNhdGUgb3B0aW9uIGJhc2Vk IG9uIHRydW5jYXRlIHJlbG9wdGlvbiBvciBHVUMgaWYgaXQgd2Fzbid0CiAJICogc3BlY2lmaWVk IGluIFZBQ1VVTSBjb21tYW5kLCBvciB3aGVuIHJ1bm5pbmcgaW4gYW4gYXV0b3ZhY3V1bSB3b3Jr ZXIKIAkgKi8KLQlpZiAocGFyYW1zLT50cnVuY2F0ZSA9PSBWQUNPUFRWQUxVRV9VTlNQRUNJRklF RCkKKwlpZiAocGFyYW1zLnRydW5jYXRlID09IFZBQ09QVFZBTFVFX1VOU1BFQ0lGSUVEKQogCXsK IAkJU3RkUmRPcHRpb25zICpvcHRzID0gKFN0ZFJkT3B0aW9ucyAqKSByZWwtPnJkX29wdGlvbnM7 CiAKIAkJaWYgKG9wdHMgJiYgb3B0cy0+dmFjdXVtX3RydW5jYXRlX3NldCkKIAkJewogCQkJaWYg KG9wdHMtPnZhY3V1bV90cnVuY2F0ZSkKLQkJCQlwYXJhbXMtPnRydW5jYXRlID0gVkFDT1BUVkFM VUVfRU5BQkxFRDsKKwkJCQlwYXJhbXMudHJ1bmNhdGUgPSBWQUNPUFRWQUxVRV9FTkFCTEVEOwog CQkJZWxzZQotCQkJCXBhcmFtcy0+dHJ1bmNhdGUgPSBWQUNPUFRWQUxVRV9ESVNBQkxFRDsKKwkJ CQlwYXJhbXMudHJ1bmNhdGUgPSBWQUNPUFRWQUxVRV9ESVNBQkxFRDsKIAkJfQogCQllbHNlIGlm ICh2YWN1dW1fdHJ1bmNhdGUpCi0JCQlwYXJhbXMtPnRydW5jYXRlID0gVkFDT1BUVkFMVUVfRU5B QkxFRDsKKwkJCXBhcmFtcy50cnVuY2F0ZSA9IFZBQ09QVFZBTFVFX0VOQUJMRUQ7CiAJCWVsc2UK LQkJCXBhcmFtcy0+dHJ1bmNhdGUgPSBWQUNPUFRWQUxVRV9ESVNBQkxFRDsKKwkJCXBhcmFtcy50 cnVuY2F0ZSA9IFZBQ09QVFZBTFVFX0RJU0FCTEVEOwogCX0KIAogCS8qCkBAIC0yMjI3LDkgKzIy MjMsOSBAQCB2YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1Q YXJhbXMgKnBhcmFtcywKIAkgKiBhdXRvbWF0aWNhbGx5IHJlYnVpbHQgYnkgY2x1c3Rlcl9yZWwg c28gd2Ugc2hvdWxkbid0IHJlY3Vyc2UgdG8gaXQsCiAJICogdW5sZXNzIFBST0NFU1NfTUFJTiBp cyBkaXNhYmxlZC4KIAkgKi8KLQlpZiAoKHBhcmFtcy0+b3B0aW9ucyAmIFZBQ09QVF9QUk9DRVNT X1RPQVNUKSAhPSAwICYmCi0JCSgocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX0ZVTEwpID09IDAg fHwKLQkJIChwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfUFJPQ0VTU19NQUlOKSA9PSAwKSkKKwlp ZiAoKHBhcmFtcy5vcHRpb25zICYgVkFDT1BUX1BST0NFU1NfVE9BU1QpICE9IDAgJiYKKwkJKChw YXJhbXMub3B0aW9ucyAmIFZBQ09QVF9GVUxMKSA9PSAwIHx8CisJCSAocGFyYW1zLm9wdGlvbnMg JiBWQUNPUFRfUFJPQ0VTU19NQUlOKSA9PSAwKSkKIAkJdG9hc3RfcmVsaWQgPSByZWwtPnJkX3Jl bC0+cmVsdG9hc3RyZWxpZDsKIAllbHNlCiAJCXRvYXN0X3JlbGlkID0gSW52YWxpZE9pZDsKQEAg LTIyNTIsMTYgKzIyNDgsMTYgQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxh dGlvbiwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJICogdGFibGUgaXMgcmVxdWlyZWQgKGUuZy4s IFBST0NFU1NfVE9BU1QgaXMgc2V0KSwgd2UgZm9yY2UgUFJPQ0VTU19NQUlOCiAJICogdG8gYmUg c2V0IHdoZW4gd2UgcmVjdXJzZSB0byB0aGUgVE9BU1QgdGFibGUuCiAJICovCi0JaWYgKHBhcmFt cy0+b3B0aW9ucyAmIFZBQ09QVF9QUk9DRVNTX01BSU4pCisJaWYgKHBhcmFtcy5vcHRpb25zICYg VkFDT1BUX1BST0NFU1NfTUFJTikKIAl7CiAJCS8qCiAJCSAqIERvIHRoZSBhY3R1YWwgd29yayAt LS0gZWl0aGVyIEZVTEwgb3IgImxhenkiIHZhY3V1bQogCQkgKi8KLQkJaWYgKHBhcmFtcy0+b3B0 aW9ucyAmIFZBQ09QVF9GVUxMKQorCQlpZiAocGFyYW1zLm9wdGlvbnMgJiBWQUNPUFRfRlVMTCkK IAkJewogCQkJQ2x1c3RlclBhcmFtcyBjbHVzdGVyX3BhcmFtcyA9IHswfTsKIAotCQkJaWYgKChw YXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfVkVSQk9TRSkgIT0gMCkKKwkJCWlmICgocGFyYW1zLm9w dGlvbnMgJiBWQUNPUFRfVkVSQk9TRSkgIT0gMCkKIAkJCQljbHVzdGVyX3BhcmFtcy5vcHRpb25z IHw9IENMVU9QVF9WRVJCT1NFOwogCiAJCQkvKiBWQUNVVU0gRlVMTCBpcyBub3cgYSB2YXJpYW50 IG9mIENMVVNURVI7IHNlZSBjbHVzdGVyLmMgKi8KQEAgLTIzMDcsMTEgKzIzMDMsMTEgQEAgdmFj dXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zICpwYXJh bXMsCiAJCSAqIHJlbGF0aW9uLiAgTkI6IFRoaXMgaXMgb25seSBzYWZlIHRvIGRvIGJlY2F1c2Ug d2UgaG9sZCBhIHNlc3Npb24KIAkJICogbG9jayBvbiB0aGUgbWFpbiByZWxhdGlvbiB0aGF0IHBy ZXZlbnRzIGNvbmN1cnJlbnQgZGVsZXRpb24uCiAJCSAqLwotCQltZW1jcHkoJnRvYXN0X3ZhY3V1 bV9wYXJhbXMsIHBhcmFtcywgc2l6ZW9mKFZhY3V1bVBhcmFtcykpOworCQltZW1jcHkoJnRvYXN0 X3ZhY3V1bV9wYXJhbXMsICZwYXJhbXMsIHNpemVvZihWYWN1dW1QYXJhbXMpKTsKIAkJdG9hc3Rf dmFjdXVtX3BhcmFtcy5vcHRpb25zIHw9IFZBQ09QVF9QUk9DRVNTX01BSU47CiAJCXRvYXN0X3Zh Y3V1bV9wYXJhbXMudG9hc3RfcGFyZW50ID0gcmVsaWQ7CiAKLQkJdmFjdXVtX3JlbCh0b2FzdF9y ZWxpZCwgTlVMTCwgJnRvYXN0X3ZhY3V1bV9wYXJhbXMsIGJzdHJhdGVneSk7CisJCXZhY3V1bV9y ZWwodG9hc3RfcmVsaWQsIE5VTEwsIHRvYXN0X3ZhY3V1bV9wYXJhbXMsIGJzdHJhdGVneSk7CiAJ fQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5j IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKaW5kZXggNDUxZmI5MGE2MTAu Ljk0NzQwOTVmMjcxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1 dW0uYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwpAQCAtMzE5MCw3 ICszMTkwLDcgQEAgYXV0b3ZhY3V1bV9kb192YWNfYW5hbHl6ZShhdXRvdmFjX3RhYmxlICp0YWIs IEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSkKIAlyZWxfbGlzdCA9IGxpc3RfbWFrZTEo cmVsKTsKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkX2NvbnRleHQpOwogCi0JdmFjdXVtKHJl bF9saXN0LCAmdGFiLT5hdF9wYXJhbXMsIGJzdHJhdGVneSwgdmFjX2NvbnRleHQsIHRydWUpOwor CXZhY3V1bShyZWxfbGlzdCwgdGFiLT5hdF9wYXJhbXMsIGJzdHJhdGVneSwgdmFjX2NvbnRleHQs IHRydWUpOwogCiAJTWVtb3J5Q29udGV4dERlbGV0ZSh2YWNfY29udGV4dCk7CiB9CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmgKaW5kZXggM2E5NDI0YzE5YzkuLjYwMzFiNzFkMGMxIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBA IC0zOTgsNyArMzk4LDcgQEAgZXh0ZXJuIHZvaWQgbG9nX2hlYXBfcHJ1bmVfYW5kX2ZyZWV6ZShS ZWxhdGlvbiByZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwKIC8qIGluIGhlYXAvdmFjdXVtbGF6eS5j ICovCiBzdHJ1Y3QgVmFjdXVtUGFyYW1zOwogZXh0ZXJuIHZvaWQgaGVhcF92YWN1dW1fcmVsKFJl bGF0aW9uIHJlbCwKLQkJCQkJCQlzdHJ1Y3QgVmFjdXVtUGFyYW1zICpwYXJhbXMsIEJ1ZmZlckFj Y2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7CisJCQkJCQkJc3RydWN0IFZhY3V1bVBhcmFtcyBwYXJh bXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7CiAKIC8qIGluIGhlYXAvaGVhcGFt X3Zpc2liaWxpdHkuYyAqLwogZXh0ZXJuIGJvb2wgSGVhcFR1cGxlU2F0aXNmaWVzVmlzaWJpbGl0 eShIZWFwVHVwbGUgaHR1cCwgU25hcHNob3Qgc25hcHNob3QsCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRl eCA4NzEzZTEyY2JmYi4uYjAzY2Y3MDk3ZjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vz cy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtMjAsNiAr MjAsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Nk aXIuaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1 bS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9y ZWFkX3N0cmVhbS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgpAQCAtNjQ1LDcgKzY0Niw3IEBA IHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICogaW50ZWdyYXRlIHdpdGggYXV0b3Zh Y3V1bSdzIHNjaGVkdWxpbmcuCiAJICovCiAJdm9pZAkJKCpyZWxhdGlvbl92YWN1dW0pIChSZWxh dGlvbiByZWwsCi0JCQkJCQkJCQlzdHJ1Y3QgVmFjdXVtUGFyYW1zICpwYXJhbXMsCisJCQkJCQkJ CQlzdHJ1Y3QgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAkJCQkJCQkJCUJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IGJzdHJhdGVneSk7CiAKIAkvKgpAQCAtMTY2NCw3ICsxNjY1LDcgQEAgdGFibGVfcmVsYXRp b25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRUYWJsZSwgUmVsYXRpb24gTmV3VGFibGUs CiAgKiByb3V0aW5lLCBldmVuIGlmIChmb3IgQU5BTFlaRSkgaXQgaXMgcGFydCBvZiB0aGUgc2Ft ZSBWQUNVVU0gY29tbWFuZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi10YWJsZV9yZWxhdGlv bl92YWN1dW0oUmVsYXRpb24gcmVsLCBzdHJ1Y3QgVmFjdXVtUGFyYW1zICpwYXJhbXMsCit0YWJs ZV9yZWxhdGlvbl92YWN1dW0oUmVsYXRpb24gcmVsLCBWYWN1dW1QYXJhbXMgcGFyYW1zLAogCQkJ CQkgIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSkKIHsKIAlyZWwtPnJkX3RhYmxlYW0t PnJlbGF0aW9uX3ZhY3V1bShyZWwsIHBhcmFtcywgYnN0cmF0ZWd5KTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVt LmgKaW5kZXggYmMzN2E4MGRjNzQuLjlhOGM2MzM1MmRhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jb21tYW5kcy92YWN1dW0uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaApA QCAtMzM2LDcgKzMzNiw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQ2NCBwYXJhbGxlbF92YWN1 dW1fd29ya2VyX2RlbGF5X25zOwogCiAvKiBpbiBjb21tYW5kcy92YWN1dW0uYyAqLwogZXh0ZXJu IHZvaWQgRXhlY1ZhY3V1bShQYXJzZVN0YXRlICpwc3RhdGUsIFZhY3V1bVN0bXQgKnZhY3N0bXQs IGJvb2wgaXNUb3BMZXZlbCk7Ci1leHRlcm4gdm9pZCB2YWN1dW0oTGlzdCAqcmVsYXRpb25zLCBW YWN1dW1QYXJhbXMgKnBhcmFtcywKK2V4dGVybiB2b2lkIHZhY3V1bShMaXN0ICpyZWxhdGlvbnMs IFZhY3V1bVBhcmFtcyBwYXJhbXMsCiAJCQkJICAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0 ZWd5LCBNZW1vcnlDb250ZXh0IHZhY19jb250ZXh0LAogCQkJCSAgIGJvb2wgaXNUb3BMZXZlbCk7 CiBleHRlcm4gdm9pZCB2YWNfb3Blbl9pbmRleGVzKFJlbGF0aW9uIHJlbGF0aW9uLCBMT0NLTU9E RSBsb2NrbW9kZSwKQEAgLTM1Nyw3ICszNTcsNyBAQCBleHRlcm4gdm9pZCB2YWNfdXBkYXRlX3Jl bHN0YXRzKFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQlib29sICpmcm96ZW54aWRfdXBkYXRl ZCwKIAkJCQkJCQkJYm9vbCAqbWlubXVsdGlfdXBkYXRlZCwKIAkJCQkJCQkJYm9vbCBpbl9vdXRl cl94YWN0KTsKLWV4dGVybiBib29sIHZhY3V1bV9nZXRfY3V0b2ZmcyhSZWxhdGlvbiByZWwsIGNv bnN0IFZhY3V1bVBhcmFtcyAqcGFyYW1zLAorZXh0ZXJuIGJvb2wgdmFjdXVtX2dldF9jdXRvZmZz KFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAkJCQkJCQkgICBzdHJ1 Y3QgVmFjdXVtQ3V0b2ZmcyAqY3V0b2Zmcyk7CiBleHRlcm4gYm9vbCB2YWN1dW1feGlkX2ZhaWxz YWZlX2NoZWNrKGNvbnN0IHN0cnVjdCBWYWN1dW1DdXRvZmZzICpjdXRvZmZzKTsKIGV4dGVybiB2 b2lkIHZhY191cGRhdGVfZGF0ZnJvemVueGlkKHZvaWQpOwpAQCAtMzk4LDcgKzM5OCw3IEBAIGV4 dGVybiB2b2lkIHBhcmFsbGVsX3ZhY3V1bV9tYWluKGRzbV9zZWdtZW50ICpzZWcsIHNobV90b2Mg KnRvYyk7CiAKIC8qIGluIGNvbW1hbmRzL2FuYWx5emUuYyAqLwogZXh0ZXJuIHZvaWQgYW5hbHl6 ZV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24sCi0JCQkJCQlWYWN1dW1QYXJhbXMg KnBhcmFtcywgTGlzdCAqdmFfY29scywgYm9vbCBpbl9vdXRlcl94YWN0LAorCQkJCQkJVmFjdXVt UGFyYW1zIHBhcmFtcywgTGlzdCAqdmFfY29scywgYm9vbCBpbl9vdXRlcl94YWN0LAogCQkJCQkJ QnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KTsKIGV4dGVybiBib29sIHN0ZF90eXBhbmFs eXplKFZhY0F0dHJTdGF0cyAqc3RhdHMpOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3ZhY3V1bS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ZhY3V1bS5v dXQKaW5kZXggMGFiY2M5OTk4OWUuLjI4NGI1MzkxYjQ4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3ZhY3V1bS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC92YWN1dW0ub3V0CkBAIC02ODYsMyArNjg2LDMxIEBAIFJFU0VUIFJPTEU7CiBEUk9QIFRBQkxF IHZhY293bmVkOwogRFJPUCBUQUJMRSB2YWNvd25lZF9wYXJ0ZWQ7CiBEUk9QIFJPTEUgcmVncmVz c192YWN1dW07CistLSBUUlVOQ0FURSBvcHRpb24gd2l0aCB2YWN1dW0gbW9yZSB0aGFuIDEgcmVs YXRpb24KK0NSRUFURSBUQUJMRSB2YWNfdHJ1bmNhdGVfb24oaSBJTlQpIFdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZD1mYWxzZSwgdmFjdXVtX3RydW5jYXRlPXRydWUpOworSU5TRVJUIElOVE8gdmFj X3RydW5jYXRlX29uIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCk7CitDUkVBVEUgVEFC TEUgdmFjX3RydW5jYXRlX29mZihpIElOVCkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkPWZhbHNl LCB2YWN1dW1fdHJ1bmNhdGU9ZmFsc2UpOworSU5TRVJUIElOVE8gdmFjX3RydW5jYXRlX29mZiBT RUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApOworU0VMRUNUIHBnX3JlbGF0aW9uX3NpemUo J3ZhY190cnVuY2F0ZV9vbicpID4gMDsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB0CisoMSBy b3cpCisKK1NFTEVDVCBwZ19yZWxhdGlvbl9zaXplKCd2YWNfdHJ1bmNhdGVfb2ZmJykgPiAwOwor ID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworREVMRVRFIEZST00gdmFjX3Ry dW5jYXRlX29uOworREVMRVRFIEZST00gdmFjX3RydW5jYXRlX29mZjsKK1ZBQ1VVTSAoQU5BTFla RSkgdmFjX3RydW5jYXRlX29uLCB2YWNfdHJ1bmNhdGVfb2ZmOworU0VMRUNUIHBnX3JlbGF0aW9u X3NpemUoJ3ZhY190cnVuY2F0ZV9vZmYnKSA+IDA7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisg dAorKDEgcm93KQorCitEUk9QIFRBQkxFIHZhY190cnVuY2F0ZV9vbjsKK0RST1AgVEFCTEUgdmFj X3RydW5jYXRlX29mZjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3ZhY3V1bS5z cWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC92YWN1dW0uc3FsCmluZGV4IGE3MmJkYjViNjE5Li45 NTMzMGE1ZDQ0YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdmFjdXVtLnNxbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC92YWN1dW0uc3FsCkBAIC00OTUsMyArNDk1LDE3IEBA IFJFU0VUIFJPTEU7CiBEUk9QIFRBQkxFIHZhY293bmVkOwogRFJPUCBUQUJMRSB2YWNvd25lZF9w YXJ0ZWQ7CiBEUk9QIFJPTEUgcmVncmVzc192YWN1dW07CisKKy0tIFRSVU5DQVRFIG9wdGlvbiB3 aXRoIHZhY3V1bSBtb3JlIHRoYW4gMSByZWxhdGlvbgorQ1JFQVRFIFRBQkxFIHZhY190cnVuY2F0 ZV9vbihpIElOVCkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkPWZhbHNlLCB2YWN1dW1fdHJ1bmNh dGU9dHJ1ZSk7CitJTlNFUlQgSU5UTyB2YWNfdHJ1bmNhdGVfb24gU0VMRUNUIGdlbmVyYXRlX3Nl cmllcygxLCAxMDAwKTsKK0NSRUFURSBUQUJMRSB2YWNfdHJ1bmNhdGVfb2ZmKGkgSU5UKSBXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQ9ZmFsc2UsIHZhY3V1bV90cnVuY2F0ZT1mYWxzZSk7CitJTlNF UlQgSU5UTyB2YWNfdHJ1bmNhdGVfb2ZmIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCk7 CitTRUxFQ1QgcGdfcmVsYXRpb25fc2l6ZSgndmFjX3RydW5jYXRlX29uJykgPiAwOworU0VMRUNU IHBnX3JlbGF0aW9uX3NpemUoJ3ZhY190cnVuY2F0ZV9vZmYnKSA+IDA7CitERUxFVEUgRlJPTSB2 YWNfdHJ1bmNhdGVfb247CitERUxFVEUgRlJPTSB2YWNfdHJ1bmNhdGVfb2ZmOworVkFDVVVNIChB TkFMWVpFKSB2YWNfdHJ1bmNhdGVfb24sIHZhY190cnVuY2F0ZV9vZmY7CitTRUxFQ1QgcGdfcmVs YXRpb25fc2l6ZSgndmFjX3RydW5jYXRlX29mZicpID4gMDsKK0RST1AgVEFCTEUgdmFjX3RydW5j YXRlX29uOworRFJPUCBUQUJMRSB2YWNfdHJ1bmNhdGVfb2ZmOwo= --000000000000f955a8063802dfe9--