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.96) (envelope-from ) id 1vVxiT-00A6p6-2P for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Dec 2025 20:01:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vVxiR-00GEZI-2h for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Dec 2025 20:01:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vVxiR-00GEZA-12 for pgsql-hackers@lists.postgresql.org; Wed, 17 Dec 2025 20:01:44 +0000 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vVxiN-001I1V-10 for pgsql-hackers@postgresql.org; Wed, 17 Dec 2025 20:01:43 +0000 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-7e2762ad850so6525311b3a.3 for ; Wed, 17 Dec 2025 12:01:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766001696; x=1766606496; darn=postgresql.org; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=pRXAsvfBnxM+8uJm3zYcqoQCSEqc2NGuPR2MiebQpeo=; b=OomxhE4/wYQWCC93hqyJQOa9021sI8XE43gRf/DfZR/Rtgo5QR/XyNspbE2ElW4Ib+ 5e4eUO2Y7cgyP1YIgJ8j/tj9EQ+TVyeXd1DyjQGul//EZhCq2cGUNc5BZThnAD1vXfC1 MYcmYyRBNu+CGauj+/ETnSGeg8NZ5WHQKYkluCmMQ8zpv65jxJw9Z+xiqe1DNK2VZAlS YHuupXtyTFX91e75a7eDC4GB9H0wlBcNVXUPITTUD2c46spHCXJnfDO2SRQEL8QY73Ns mPdzHFWEQ8w/SC2/r0LIFPeQKkR70gAG3czMIY5295UACXBd+kbrbgUj9nU21UqRTCsO eaOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766001696; x=1766606496; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=pRXAsvfBnxM+8uJm3zYcqoQCSEqc2NGuPR2MiebQpeo=; b=gVFCRyi9vyUpysC/GytCUfOOg5hodHhiB707gl40bX4RlM8CgqOZuUTNJBqN5ewEMZ ao24KMdcJ4ENGa2JObzvNDzRobtqniE5d8V8y4PTOc0br0O+NPHxJTmiyJ2WkdUyQvT7 7BvsX2MO6sp/o3Nm38EC5h2FEjWkH9Fr0C0QNSTbByNZb1diAI3QoQL2ZFLnl5YRWHOx bx6WAkUL+6EA74IzpKy53LWbm/NsPgSJbKGN+cokYjo85CiWipiwhB1pnE40vdkor/Mu bCeejXeyQ7E1ouSzvioU8Mu0p2n8EfbBck0XXxnJLVk1OElijwW918VQCZ4dC43vzEH0 BTLw== X-Forwarded-Encrypted: i=1; AJvYcCWMSWstXI+k19ZbE212HQMoLUAstUbfTFxRAAsCNCuXlcw7UvbdCRxEPdGiUln92YMR9iOkN/5XHqV3Itn7@postgresql.org X-Gm-Message-State: AOJu0YzHBpdKhqp1ymE+CNTZz7Rqa9IqUN1tkC9deEHQeGSnafoF0bG5 Ceq7Kn2lVxURoz34JZtswxz/RDNuxHQBpZYE8UuJwLd4XI/5oXCu48Q1 X-Gm-Gg: AY/fxX6SAu1eNgMBtq109UyEfBgxIrQW7Ctcduz7kJAsiaiwkTB83Gl9pALZgTEoOo9 RH6uj2xCb/e+HEhziFIjTYrJykjzil2PIbaLGke29MxSGWGAVT4JHIejGt+cB9s33qCh7FHoPDR utXkr3gqpv/w4Kbf43vEnLGSYtMNSaCzKJIccI/NGTnUBAsfgRkhbGTKmxugrpc51tOyC8urrUR TQ8Oo2zksM4DZj7Qrxuw17nfaETM89C8y39EEn8u98nD/4apStCDwMyJyrzVLLpF1m/Zc1hyprN COOB5CoCSZfEu6wESobAMA3s5VavFeN95O3N68o7ilQV0qjk66aMk61M2b8tGpx8boByqpLYjhJ 19uGRD13lotVv8Vyi2Hre3vgszT3gLkNBDHno4F1T6MQQhu6LUS/q6Vvt8rIZV+C+fN9fLYVKCS DOunsikW3G+2BekXcUhSGhWLnT6zrOBMVxbw== X-Google-Smtp-Source: AGHT+IHL+fUwCQ+CRzFx1szL+p4mohVwzVleMe37JtSGrSl1ziULkHJ5F0ITD5aQC3J8EeaVRZKJQw== X-Received: by 2002:a05:7022:b8a:b0:11b:d211:3a64 with SMTP id a92af1059eb24-11f34863cd1mr17150877c88.0.1766001695843; Wed, 17 Dec 2025 12:01:35 -0800 (PST) Received: from localhost ([2804:14d:328a:a59c:4955:71d7:a4aa:3da6]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12061fceec2sm653705c88.13.2025.12.17.12.01.33 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 17 Dec 2025 12:01:35 -0800 (PST) Content-Type: multipart/mixed; boundary=e86d2d6516f98232d4359f2f9ff492d00a238725075b520da406056955ee Mime-Version: 1.0 Date: Wed, 17 Dec 2025 17:01:31 -0300 Message-Id: Cc: "Alena Rybakina" , "Pgsql Hackers" Subject: Re: Asynchronous MergeAppend From: "Matheus Alcantara" To: "Alexander Pyhalov" , "Matheus Alcantara" X-Mailer: aerc 0.21.0 References: <59be194c5a409fb9fc9f2031581b8a44@postgrespro.ru> <764dd8b8-6374-4f5a-aac7-d8e3f6ebe5fd@postgrespro.ru> <159b591411bb2c81332018927acbd509@postgrespro.ru> <2fb1d9923b6995492e7b163e6cb95402@postgrespro.ru> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --e86d2d6516f98232d4359f2f9ff492d00a238725075b520da406056955ee Content-Type: multipart/alternative; boundary=f432832408ee45b99ae09f2641d8078e14b299ee24d3119067f750e6a147 --f432832408ee45b99ae09f2641d8078e14b299ee24d3119067f750e6a147 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 Thanks for the new version. I don't have other comments on the current state of the patch. It seems to working as expected and we have performance improvements that I think that it make it worthwhile. I have just a small comment on 0002: + noccurred =3D WaitEventSetWait(node->ms_eventset, -1 /* no timeout */ , o= ccurred_event, + nevents, WAIT_EVENT_APPEND_READY); Should we use the same WAIT_EVENT_APPEND_READY or create a new wait event for merge append? I've spent some time thinking about how we could remove some parts of the duplicated code that you've previously mention. I think that we could try to create something like we already have for relation scan operations, that we have execScan.c that is used for example by nodeSeqScan.c and nodeIndexScan.c. The attached patch 0003 is a draft that I attempt to implement this idea. The 0001 and 0002 remains the same as the previous version. The 0003 was build on top of these. I've created Appender and AppenderState types that are used by Append/MergeAppend and AppendState/MergeAppendState respectively (I should have think in a better name for these base type, ideas are welcome). The execAppend.c was created to have the functions that can be reused by Append and MergeAppend execution. I've tried to remove duplicated code blocks that was almost the same and that didn't require much refactoring. I think that there still more opportunities to remove similar code blocks that for example are on ExecMergeAppendAsyncGetNext and ExecAppendAsyncGetNext but it require refactoring. Thoughts? -- Matheus Alcantara EDB: http://www.enterprisedb.com --f432832408ee45b99ae09f2641d8078e14b299ee24d3119067f750e6a147-- --e86d2d6516f98232d4359f2f9ff492d00a238725075b520da406056955ee Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0001-mark_async_capable-subpath-should-match-subplan.patch Content-Type: text/plain; charset=utf-8; name=v9-0001-mark_async_capable-subpath-should-match-subplan.patch RnJvbSBlMDdhMWM4YTZjNmYwMmMwOGU2NTA3MGE1YzRmZjk2MmRkM2JjODYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDE1IE5vdiAyMDI1IDEwOjE2OjI1ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2OSAxLzNdIG1hcmtfYXN5bmNfY2FwYWJsZSgpOiBzdWJwYXRoIHNob3VsZCBtYXRjaCBz dWJwbGFuCgptYXJrX2FzeW5jX2NhcGFibGUoKSBiZWxpZXZlcyB0aGF0IHBhdGggY29ycmVzcG9u ZHMgdG8gcGxhbi4gVGhpcyBpcwpub3QgdHJ1ZSB3aGVuIGNyZWF0ZV9bbWVyZ2VfXWFwcGVuZF9w bGFuKCkgaW5zZXJ0cyBzb3J0IG5vZGUuIEluCnRoaXMgY2FzZSBtYXJrX2FzeW5jX2NhcGFibGUo KSBjYW4gdHJlYXQgU29ydCBwbGFuIG5vZGUgYXMgc29tZQpvdGhlciBhbmQgY3Jhc2guIEZpeCB0 aGlzIGJ5IGhhbmRsaW5nIHRoZSBTb3J0IG5vZGUgc2VwYXJhdGVseS4KClRoaXMgaXMgbmVlZGVk IHRvIG1ha2UgTWVyZ2VBcHBlbmQgbm9kZSBhc3luYy1jYXBhYmxlIHRoYXQgd2lsbApiZSBpbXBs ZW1lbnRlZCBpbiBhIG5leHQgY29tbWl0LgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYyB8IDE4ICsrKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEw IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jCmluZGV4IGJjNDE3ZjkzODQwLi44NGY2MGM0ODY1MyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTEzOSwxMCArMTEzOSwxMiBAQCBtYXJr X2FzeW5jX2NhcGFibGVfcGxhbihQbGFuICpwbGFuLCBQYXRoICpwYXRoKQogCQkJCVN1YnF1ZXJ5 U2NhbiAqc2Nhbl9wbGFuID0gKFN1YnF1ZXJ5U2NhbiAqKSBwbGFuOwogCiAJCQkJLyoKLQkJCQkg KiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBSZXN1bHQgbm9k ZSwKLQkJCQkgKiB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5LgorCQkJCSAqIENo ZWNrIHRoYXQgcGxhbiBpcyByZWFsbHkgYSBTdWJxdWVyeVNjYW4gYmVmb3JlIHVzaW5nIGl0Lgor CQkJCSAqIEl0IGNhbiBiZSBub3QgdHJ1ZSwgaWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5j bHVkZXMgYQorCQkJCSAqIGdhdGluZyBSZXN1bHQgbm9kZSBvciBhIFNvcnQgbm9kZS4gSW4gc3Vj aCBjYXNlIHdlIGNhbid0CisJCQkJICogZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNseS4KIAkJCQkg Ki8KLQkJCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCQkJaWYgKCFJc0EocGxhbiwgU3VicXVl cnlTY2FuKSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCiAJCQkJLyoKQEAgLTExNjAsMTAgKzExNjIs MTAgQEAgbWFya19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIAkJ CQlGZHdSb3V0aW5lICpmZHdyb3V0aW5lID0gcGF0aC0+cGFyZW50LT5mZHdyb3V0aW5lOwogCiAJ CQkJLyoKLQkJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGlu ZyBSZXN1bHQgbm9kZSwKLQkJCQkgKiB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5 LgorCQkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGluY2x1ZGVzIGEgZ2F0aW5nIFJl c3VsdCBub2RlIG9yCisJCQkJICogYSBTb3J0IG5vZGUsIHdlIGNhbid0IGV4ZWN1dGUgaXQgYXN5 bmNocm9ub3VzbHkuCiAJCQkJICovCi0JCQkJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQkJCWlm IChJc0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29ydCkpCiAJCQkJCXJldHVybiBmYWxz ZTsKIAogCQkJCUFzc2VydChmZHdyb3V0aW5lICE9IE5VTEwpOwpAQCAtMTE3Niw5ICsxMTc4LDkg QEAgbWFya19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIAogCQkJ LyoKIAkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGluY2x1ZGVzIGEgUmVzdWx0IG5v ZGUgZm9yIHRoZQotCQkJICogcHJvamVjdGlvbiwgd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hy b25vdXNseS4KKwkJCSAqIHByb2plY3Rpb24gb3IgYSBTb3J0IG5vZGUsIHdlIGNhbid0IGV4ZWN1 dGUgaXQgYXN5bmNocm9ub3VzbHkuCiAJCQkgKi8KLQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSkK KwkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29ydCkpCiAJCQkJcmV0dXJu IGZhbHNlOwogCiAJCQkvKgotLSAKMi41MS4yCgo= --e86d2d6516f98232d4359f2f9ff492d00a238725075b520da406056955ee Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0002-MergeAppend-should-support-Async-Foreign-Scan-sub.patch Content-Type: text/plain; charset=utf-8; name=v9-0002-MergeAppend-should-support-Async-Foreign-Scan-sub.patch RnJvbSA4NTA2NmRjY2RkOTIxNTY2M2Q5NjBjMDI4NGM5ZjVlMmIyMzIxNTliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDE1IE5vdiAyMDI1IDEwOjIzOjQ3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2OSAyLzNdIE1lcmdlQXBwZW5kIHNob3VsZCBzdXBwb3J0IEFzeW5jIEZvcmVpZ24gU2Nh biBzdWJwbGFucwoKLS0tCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5v dXQgICAgfCAyODggKysrKysrKysrKysKIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zk dy5jICAgICAgICAgICB8ICAxMCArLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVz X2Zkdy5zcWwgICAgIHwgIDg3ICsrKysKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAg ICAgICAgICAgICAgICB8ICAxNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYyAg ICAgICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jICAg ICAgICAgICAgIHwgIDI0ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQu YyAgICAgICAgfCA0NzEgKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9jb3N0c2l6ZS5jICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vY3JlYXRlcGxhbi5jICAgICAgIHwgICA5ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3BhcmFtZXRlcnMuZGF0ICAgICB8ICAgOCArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUgfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdl QXBwZW5kLmggICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAg ICAgICAgICAgICAgICB8ICA1OSArKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAg ICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdz Lm91dCAgICAgICAgfCAgIDMgKy0KIDE1IGZpbGVzIGNoYW5nZWQsIDk1MSBpbnNlcnRpb25zKCsp LCAzMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBl Y3RlZC9wb3N0Z3Jlc19mZHcub3V0IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9z dGdyZXNfZmR3Lm91dAppbmRleCA0OGUzMTg1YjIyNy4uZTIyNDBkMzRkMjEgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKKysrIGIvY29u dHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dApAQCAtMTE1NTYsNiAr MTE1NTYsNDYgQEAgU0VMRUNUICogRlJPTSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiAoMiByb3dz KQogCiBERUxFVEUgRlJPTSByZXN1bHRfdGJsOworLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExB SU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAl IDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVy Z2UgQXBwZW5kCisgICBTb3J0IEtleTogYXN5bmNfcHQuYiwgYXN5bmNfcHQuYQorICAgLT4gIEFz eW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDEgYXN5bmNfcHRfMQorICAgICAgICAg T3V0cHV0OiBhc3luY19wdF8xLmEsIGFzeW5jX3B0XzEuYiwgYXN5bmNfcHRfMS5jCisgICAgICAg ICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDEgV0hFUkUg KCgoYiAlIDEwMCkgPSAwKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMg TEFTVAorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNf cHRfMgorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNf cHRfMi5jCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5i YXNlX3RibDIgV0hFUkUgKCgoYiAlIDEwMCkgPSAwKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFT VCwgYSBBU0MgTlVMTFMgTEFTVAorKDggcm93cykKKworU0VMRUNUICogRlJPTSBhc3luY19wdCBX SEVSRSBiICUgMTAwID0gMCBPUkRFUiBCWSBiLCBhOworICBhICAgfCAgYiAgfCAgYyAgIAorLS0t LS0tKy0tLS0tKy0tLS0tLQorIDEwMDAgfCAgIDAgfCAwMDAwCisgMjAwMCB8ICAgMCB8IDAwMDAK KyAxMTAwIHwgMTAwIHwgMDEwMAorIDIxMDAgfCAxMDAgfCAwMTAwCisgMTIwMCB8IDIwMCB8IDAy MDAKKyAyMjAwIHwgMjAwIHwgMDIwMAorIDEzMDAgfCAzMDAgfCAwMzAwCisgMjMwMCB8IDMwMCB8 IDAzMDAKKyAxNDAwIHwgNDAwIHwgMDQwMAorIDI0MDAgfCA0MDAgfCAwNDAwCisgMTUwMCB8IDUw MCB8IDA1MDAKKyAyNTAwIHwgNTAwIHwgMDUwMAorIDE2MDAgfCA2MDAgfCAwNjAwCisgMjYwMCB8 IDYwMCB8IDA2MDAKKyAxNzAwIHwgNzAwIHwgMDcwMAorIDI3MDAgfCA3MDAgfCAwNzAwCisgMTgw MCB8IDgwMCB8IDA4MDAKKyAyODAwIHwgODAwIHwgMDgwMAorIDE5MDAgfCA5MDAgfCAwOTAwCisg MjkwMCB8IDkwMCB8IDA5MDAKKygyMCByb3dzKQorCiAtLSBUZXN0IGVycm9yIGhhbmRsaW5nLCBp ZiBhY2Nlc3Npbmcgb25lIG9mIHRoZSBmb3JlaWduIHBhcnRpdGlvbnMgZXJyb3JzIG91dAogQ1JF QVRFIEZPUkVJR04gVEFCTEUgYXN5bmNfcF9icm9rZW4gUEFSVElUSU9OIE9GIGFzeW5jX3B0IEZP UiBWQUxVRVMgRlJPTSAoMTAwMDApIFRPICgxMDAwMSkKICAgU0VSVkVSIGxvb3BiYWNrIE9QVElP TlMgKHRhYmxlX25hbWUgJ25vbl9leGlzdGVudF90YWJsZScpOwpAQCAtMTE2MDQsNiArMTE2NDQs NzYgQEAgQ09QWSBhc3luY19wdCBUTyBzdGRvdXQ7IC0tZXJyb3IKIEVSUk9SOiAgY2Fubm90IGNv cHkgZnJvbSBmb3JlaWduIHRhYmxlICJhc3luY19wMSIKIERFVEFJTDogIFBhcnRpdGlvbiAiYXN5 bmNfcDEiIGlzIGEgZm9yZWlnbiB0YWJsZSBpbiBwYXJ0aXRpb25lZCB0YWJsZSAiYXN5bmNfcHQi CiBISU5UOiAgVHJ5IHRoZSBDT1BZIChTRUxFQ1QgLi4uKSBUTyB2YXJpYW50LgorLS0gVGVzdCBN ZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00g YXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFwcGVuZAorICAgU29ydCBLZXk6IGFzeW5jX3B0 LmIsIGFzeW5jX3B0LmEKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5j X3AxIGFzeW5jX3B0XzEKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMS5hLCBhc3luY19wdF8x LmIsIGFzeW5jX3B0XzEuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRfMS5iID09PSA1MDUp CisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3Ri bDEgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAorICAgLT4gIEFz eW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRfMgorICAgICAgICAg T3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRfMi5jCisgICAgICAg ICBGaWx0ZXI6IChhc3luY19wdF8yLmIgPT09IDUwNSkKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNF TEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMiBPUkRFUiBCWSBiIEFTQyBOVUxMUyBM QVNULCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1Ymxp Yy5hc3luY19wMyBhc3luY19wdF8zCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzMuYSwgYXN5 bmNfcHRfMy5iLCBhc3luY19wdF8zLmMKKyAgICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzMuYiA9 PT0gNTA1KQorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMu YmFzZV90YmwzIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QsIGEgQVNDIE5VTExTIExBU1QKKygx NCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBC WSBiLCBhOworICBhICAgfCAgYiAgfCAgYyAgIAorLS0tLS0tKy0tLS0tKy0tLS0tLQorIDE1MDUg fCA1MDUgfCAwNTA1CisgMjUwNSB8IDUwNSB8IDA1MDUKKyAzNTA1IHwgNTA1IHwgMDUwNQorKDMg cm93cykKKworLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQgcmVzY2FuCitFWFBMQUlOIChWRVJC T1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QKKwlBUlJBWShTRUxFQ1QgZi5pIEZST00gKFNFTEVDVCBi ICsgZy5pIEZST00gYXN5bmNfcHQgV0hFUkUgYSA+IGcuaSBPUkRFUiBCWSBiKSBmKGkpIE9SREVS IEJZIGYuaSBMSU1JVCAxMCkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGcoaSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRh bG9nLmdlbmVyYXRlX3NlcmllcyBnCisgICBPdXRwdXQ6IEFSUkFZKFN1YlBsYW4gYXJyYXlfMSkK KyAgIEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCAzKQorICAgU3ViUGxhbiBhcnJh eV8xCisgICAgIC0+ICBMaW1pdAorICAgICAgICAgICBPdXRwdXQ6IGYuaQorICAgICAgICAgICAt PiAgU29ydAorICAgICAgICAgICAgICAgICBPdXRwdXQ6IGYuaQorICAgICAgICAgICAgICAgICBT b3J0IEtleTogZi5pCisgICAgICAgICAgICAgICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9uIGYKKyAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmLmkKKyAgICAgICAgICAgICAgICAgICAgICAg LT4gIE1lcmdlIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTog YXN5bmNfcHQuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgQXN5bmMgRm9yZWln biBTY2FuIG9uIHB1YmxpYy5hc3luY19wMSBhc3luY19wdF8xCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogKGFzeW5jX3B0XzEuYiArIGcuaSksIGFzeW5jX3B0XzEu YgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1Qg YiBGUk9NIHB1YmxpYy5iYXNlX3RibDEgV0hFUkUgKChhID4gJDE6OmludGVnZXIpKSBPUkRFUiBC WSBiIEFTQyBOVUxMUyBMQVNUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBBc3lu YyBGb3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AyIGFzeW5jX3B0XzIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiAoYXN5bmNfcHRfMi5iICsgZy5pKSwgYXN5 bmNfcHRfMi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6 IFNFTEVDVCBiIEZST00gcHVibGljLmJhc2VfdGJsMiBXSEVSRSAoKGEgPiAkMTo6aW50ZWdlcikp IE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDMgYXN5bmNfcHRfMworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IChhc3luY19wdF8zLmIgKyBn LmkpLCBhc3luY19wdF8zLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVt b3RlIFNRTDogU0VMRUNUIGIgRlJPTSBwdWJsaWMuYmFzZV90YmwzIFdIRVJFICgoYSA+ICQxOjpp bnRlZ2VyKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVAorKDIyIHJvd3MpCisKK1NFTEVDVAor CUFSUkFZKFNFTEVDVCBmLmkgRlJPTSAoU0VMRUNUIGIgKyBnLmkgRlJPTSBhc3luY19wdCBXSEVS RSBhID4gZy5pIE9SREVSIEJZIGIpIGYoaSkgT1JERVIgQlkgZi5pIExJTUlUIDEwKQorRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMykgZyhpKTsKKyAgICAgICAgICAgYXJyYXkgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgezEsMSwxLDYsNiw2LDExLDExLDExLDE2fQor IHsyLDIsMiw3LDcsNywxMiwxMiwxMiwxN30KKyB7MywzLDMsOCw4LDgsMTMsMTMsMTMsMTh9Ciso MyByb3dzKQorCiBEUk9QIEZPUkVJR04gVEFCTEUgYXN5bmNfcDM7CiBEUk9QIFRBQkxFIGJhc2Vf dGJsMzsKIC0tIENoZWNrIGNhc2Ugd2hlcmUgdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGhhcyBsb2Nh bC9yZW1vdGUgcGFydGl0aW9ucwpAQCAtMTE2MzksNiArMTE3NDksMzcgQEAgU0VMRUNUICogRlJP TSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiAoMyByb3dzKQogCiBERUxFVEUgRlJPTSByZXN1bHRf dGJsOworLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFwcGVuZAorICAgU29y dCBLZXk6IGFzeW5jX3B0LmIsIGFzeW5jX3B0LmEKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4g b24gcHVibGljLmFzeW5jX3AxIGFzeW5jX3B0XzEKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRf MS5hLCBhc3luY19wdF8xLmIsIGFzeW5jX3B0XzEuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNf cHRfMS5iID09PSA1MDUpCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9N IHB1YmxpYy5iYXNlX3RibDEgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMg TEFTVAorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNf cHRfMgorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNf cHRfMi5jCisgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8yLmIgPT09IDUwNSkKKyAgICAgICAg IFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMiBPUkRFUiBC WSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgU29ydAorICAgICAg ICAgT3V0cHV0OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwgYXN5bmNfcHRfMy5jCisgICAg ICAgICBTb3J0IEtleTogYXN5bmNfcHRfMy5iLCBhc3luY19wdF8zLmEKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDMgYXN5bmNfcHRfMworICAgICAgICAgICAgICAgT3V0 cHV0OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwgYXN5bmNfcHRfMy5jCisgICAgICAgICAg ICAgICBGaWx0ZXI6IChhc3luY19wdF8zLmIgPT09IDUwNSkKKygxNiByb3dzKQorCitTRUxFQ1Qg KiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworICBhICAgfCAg YiAgfCAgYyAgIAorLS0tLS0tKy0tLS0tKy0tLS0tLQorIDE1MDUgfCA1MDUgfCAwNTA1CisgMjUw NSB8IDUwNSB8IDA1MDUKKyAzNTA1IHwgNTA1IHwgMDUwNQorKDMgcm93cykKKwogLS0gcGFydGl0 aW9ud2lzZSBqb2lucwogU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gVE8gdHJ1ZTsKIENS RUFURSBUQUJMRSBqb2luX3RibCAoYTEgaW50LCBiMSBpbnQsIGMxIHRleHQsIGEyIGludCwgYjIg aW50LCBjMiB0ZXh0KTsKQEAgLTEyNDIxLDYgKzEyNTYyLDE1MyBAQCBTRUxFQ1QgYSBGUk9NIGJh c2VfdGJsIFdIRVJFIChhLCByYW5kb20oKSA+IDApIElOIChTRUxFQ1QgYSwgcmFuZG9tKCkgPiAw IEZST00gZgogRFJPUCBGT1JFSUdOIFRBQkxFIGZvcmVpZ25fdGJsIENBU0NBREU7CiBOT1RJQ0U6 ICBkcm9wIGNhc2NhZGVzIHRvIGZvcmVpZ24gdGFibGUgZm9yZWlnbl90YmwyCiBEUk9QIFRBQkxF IGJhc2VfdGJsOworLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQKK0NSRUFURSBUQUJMRSBkaXN0 cjEgKGkgaW50LCBqIGludCwgayB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUg VEFCTEUgYmFzZTEgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlMiAo aSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3AxIFBB UlRJVElPTiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAw KQorU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UxJyk7CitDUkVBVEUg Rk9SRUlHTiBUQUJMRSBkaXN0cjFfcDIgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJ VEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFi bGVfbmFtZSAnYmFzZTInKTsKK0NSRUFURSBUQUJMRSBkaXN0cjIgKGkgaW50LCBqIGludCwgayB0 ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUgYmFzZTMgKGkgaW50LCBq IGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlNCAoaSBpbnQsIGogaW50LCBrIHRleHQp OworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIyX3AxIFBBUlRJVElPTiBPRiBkaXN0cjIgRk9S IFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VSVkVSIGxvb3BiYWNrIE9Q VElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UzJyk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJf cDIgUEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlO REVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTQnKTsKK0lO U0VSVCBJTlRPIGRpc3RyMQorU0VMRUNUIGksIGkqMTAsICdkYXRhXycgfHwgaSBGUk9NIGdlbmVy YXRlX3NlcmllcygxLCAxMDAwKSBpOworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSwgaSox MCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0FOQUxZWkUg ZGlzdHIxX3AxOworQU5BTFlaRSBkaXN0cjFfcDI7CitBTkFMWVpFIGRpc3RyMl9wMTsKK0FOQUxZ WkUgZGlzdHIyX3AyOworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gVE8gT047CistLSBU ZXN0IGpvaW5zIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3Ry Mi5pIEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZ IGRpc3RyMi5pIExJTUlUIDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0Cisg ICBPdXRwdXQ6IGRpc3RyMS5pLCBkaXN0cjEuaiwgZGlzdHIxLmssIGRpc3RyMi5pLCBkaXN0cjIu aiwgZGlzdHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0 cjEuaQorICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbgorICAgICAgICAgICAgICAgT3V0 cHV0OiBkaXN0cjFfMS5pLCBkaXN0cjFfMS5qLCBkaXN0cjFfMS5rLCBkaXN0cjJfMS5pLCBkaXN0 cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAgICBSZWxhdGlvbnM6IChwdWJsaWMuZGlz dHIxX3AxIGRpc3RyMV8xKSBJTk5FUiBKT0lOIChwdWJsaWMuZGlzdHIyX3AxIGRpc3RyMl8xKQor ICAgICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHIzLmksIHIzLmosIHIzLmssIHI1Lmks IHI1LmosIHI1LmsgRlJPTSAocHVibGljLmJhc2UxIHIzIElOTkVSIEpPSU4gcHVibGljLmJhc2Uz IHI1IE9OICgoKHIzLmkgPSByNS5pKSkgQU5EICgocjUuaiA+IDkwKSkgQU5EICgocjUuayB+fiAn ZGF0YSUnKSkpKSBPUkRFUiBCWSByMy5pIEFTQyBOVUxMUyBMQVNUCisgICAgICAgICAtPiAgQXN5 bmMgRm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICBPdXRwdXQ6IGRpc3RyMV8yLmksIGRpc3Ry MV8yLmosIGRpc3RyMV8yLmssIGRpc3RyMl8yLmksIGRpc3RyMl8yLmosIGRpc3RyMl8yLmsKKyAg ICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFfcDIgZGlzdHIxXzIpIElOTkVS IEpPSU4gKHB1YmxpYy5kaXN0cjJfcDIgZGlzdHIyXzIpCisgICAgICAgICAgICAgICBSZW1vdGUg U1FMOiBTRUxFQ1QgcjQuaSwgcjQuaiwgcjQuaywgcjYuaSwgcjYuaiwgcjYuayBGUk9NIChwdWJs aWMuYmFzZTIgcjQgSU5ORVIgSk9JTiBwdWJsaWMuYmFzZTQgcjYgT04gKCgocjQuaSA9IHI2Lmkp KSBBTkQgKChyNi5qID4gOTApKSBBTkQgKChyNi5rIH5+ICdkYXRhJScpKSkpIE9SREVSIEJZIHI0 LmkgQVNDIE5VTExTIExBU1QKKygxMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlz dHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIu ayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOworIGkgIHwgIGogIHwg ICAgayAgICB8IGkgIHwgIGogIHwgICAgayAgICAKKy0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0r LS0tLS0rLS0tLS0tLS0tCisgMTAgfCAxMDAgfCBkYXRhXzEwIHwgMTAgfCAxMDAgfCBkYXRhXzEw CisgMTEgfCAxMTAgfCBkYXRhXzExIHwgMTEgfCAxMTAgfCBkYXRhXzExCisgMTIgfCAxMjAgfCBk YXRhXzEyIHwgMTIgfCAxMjAgfCBkYXRhXzEyCisgMTMgfCAxMzAgfCBkYXRhXzEzIHwgMTMgfCAx MzAgfCBkYXRhXzEzCisgMTQgfCAxNDAgfCBkYXRhXzE0IHwgMTQgfCAxNDAgfCBkYXRhXzE0Cisg MTUgfCAxNTAgfCBkYXRhXzE1IHwgMTUgfCAxNTAgfCBkYXRhXzE1CisgMTYgfCAxNjAgfCBkYXRh XzE2IHwgMTYgfCAxNjAgfCBkYXRhXzE2CisgMTcgfCAxNzAgfCBkYXRhXzE3IHwgMTcgfCAxNzAg fCBkYXRhXzE3CisgMTggfCAxODAgfCBkYXRhXzE4IHwgMTggfCAxODAgfCBkYXRhXzE4CisgMTkg fCAxOTAgfCBkYXRhXzE5IHwgMTkgfCAxOTAgfCBkYXRhXzE5CisoMTAgcm93cykKKworRVhQTEFJ TiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lOIGRp c3RyMiBPTiBkaXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJF ICBkaXN0cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0cjEuaSBMSU1JVCAyMDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMS5pLCBkaXN0cjEuaiwg ZGlzdHIxLmssIGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBl bmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjEuaQorICAgICAgICAgLT4gIEFzeW5jIEZvcmVp Z24gU2NhbgorICAgICAgICAgICAgICAgT3V0cHV0OiBkaXN0cjFfMS5pLCBkaXN0cjFfMS5qLCBk aXN0cjFfMS5rLCBkaXN0cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAg ICAgICBSZWxhdGlvbnM6IChwdWJsaWMuZGlzdHIxX3AxIGRpc3RyMV8xKSBMRUZUIEpPSU4gKHB1 YmxpYy5kaXN0cjJfcDEgZGlzdHIyXzEpCisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxF Q1QgcjQuaSwgcjQuaiwgcjQuaywgcjYuaSwgcjYuaiwgcjYuayBGUk9NIChwdWJsaWMuYmFzZTEg cjQgTEVGVCBKT0lOIHB1YmxpYy5iYXNlMyByNiBPTiAoKChyNC5pID0gcjYuaSkpIEFORCAoKHI2 Lmsgfn4gJ2RhdGElJykpKSkgV0hFUkUgKChyNC5pID4gOTApKSBPUkRFUiBCWSByNC5pIEFTQyBO VUxMUyBMQVNUCisgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuCisgICAgICAgICAgICAg ICBPdXRwdXQ6IGRpc3RyMV8yLmksIGRpc3RyMV8yLmosIGRpc3RyMV8yLmssIGRpc3RyMl8yLmks IGRpc3RyMl8yLmosIGRpc3RyMl8yLmsKKyAgICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1Ymxp Yy5kaXN0cjFfcDIgZGlzdHIxXzIpIExFRlQgSk9JTiAocHVibGljLmRpc3RyMl9wMiBkaXN0cjJf MikKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCByNS5pLCByNS5qLCByNS5rLCBy Ny5pLCByNy5qLCByNy5rIEZST00gKHB1YmxpYy5iYXNlMiByNSBMRUZUIEpPSU4gcHVibGljLmJh c2U0IHI3IE9OICgoKHI1LmkgPSByNy5pKSkgQU5EICgocjcuayB+fiAnZGF0YSUnKSkpKSBXSEVS RSAoKHI1LmkgPiA5MCkpIE9SREVSIEJZIHI1LmkgQVNDIE5VTExTIExBU1QKKygxMiByb3dzKQor CitTRUxFQ1QgKiBGUk9NIGRpc3RyMSBMRUZUIEpPSU4gZGlzdHIyIE9OICBkaXN0cjEuaT1kaXN0 cjIuaSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFIGRpc3RyMS5pID4gOTAKK09SREVS IEJZIGRpc3RyMS5pIExJTUlUIDIwOworICBpICB8ICBqICAgfCAgICBrICAgICB8ICBpICB8ICBq ICAgfCAgICBrICAgICAKKy0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0t LS0tLS0tCisgIDkxIHwgIDkxMCB8IGRhdGFfOTEgIHwgIDkxIHwgIDkxMCB8IGRhdGFfOTEKKyAg OTIgfCAgOTIwIHwgZGF0YV85MiAgfCAgOTIgfCAgOTIwIHwgZGF0YV85MgorICA5MyB8ICA5MzAg fCBkYXRhXzkzICB8ICA5MyB8ICA5MzAgfCBkYXRhXzkzCisgIDk0IHwgIDk0MCB8IGRhdGFfOTQg IHwgIDk0IHwgIDk0MCB8IGRhdGFfOTQKKyAgOTUgfCAgOTUwIHwgZGF0YV85NSAgfCAgOTUgfCAg OTUwIHwgZGF0YV85NQorICA5NiB8ICA5NjAgfCBkYXRhXzk2ICB8ICA5NiB8ICA5NjAgfCBkYXRh Xzk2CisgIDk3IHwgIDk3MCB8IGRhdGFfOTcgIHwgIDk3IHwgIDk3MCB8IGRhdGFfOTcKKyAgOTgg fCAgOTgwIHwgZGF0YV85OCAgfCAgOTggfCAgOTgwIHwgZGF0YV85OAorICA5OSB8ICA5OTAgfCBk YXRhXzk5ICB8ICA5OSB8ICA5OTAgfCBkYXRhXzk5CisgMTAwIHwgMTAwMCB8IGRhdGFfMTAwIHwg MTAwIHwgMTAwMCB8IGRhdGFfMTAwCisgMTAxIHwgMTAxMCB8IGRhdGFfMTAxIHwgICAgIHwgICAg ICB8IAorIDEwMiB8IDEwMjAgfCBkYXRhXzEwMiB8ICAgICB8ICAgICAgfCAKKyAxMDMgfCAxMDMw IHwgZGF0YV8xMDMgfCAgICAgfCAgICAgIHwgCisgMTA0IHwgMTA0MCB8IGRhdGFfMTA0IHwgICAg IHwgICAgICB8IAorIDEwNSB8IDEwNTAgfCBkYXRhXzEwNSB8ICAgICB8ICAgICAgfCAKKyAxMDYg fCAxMDYwIHwgZGF0YV8xMDYgfCAgICAgfCAgICAgIHwgCisgMTA3IHwgMTA3MCB8IGRhdGFfMTA3 IHwgICAgIHwgICAgICB8IAorIDEwOCB8IDEwODAgfCBkYXRhXzEwOCB8ICAgICB8ICAgICAgfCAK KyAxMDkgfCAxMDkwIHwgZGF0YV8xMDkgfCAgICAgfCAgICAgIHwgCisgMTEwIHwgMTEwMCB8IGRh dGFfMTEwIHwgICAgIHwgICAgICB8IAorKDIwIHJvd3MpCisKKy0tIFRlc3QgcHJ1bmluZyB3aXRo IGFzeW5jIE1lcmdlIEFwcGVuZAorREVMRVRFIEZST00gZGlzdHIyOworSU5TRVJUIElOVE8gZGlz dHIyCitTRUxFQ1QgaSUxMCwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsIDEwMDApIGk7CitERUFMTE9DQVRFIEFMTDsKK1NFVCBwbGFuX2NhY2hlX21vZGUgVE8gZm9y Y2VfZ2VuZXJpY19wbGFuOworUFJFUEFSRSBhc3luY19wdF9xdWVyeSAoaW50LCBpbnQpIEFTCisg IFNFTEVDVCAqIEZST00gZGlzdHIyIFdIRVJFIGkgPSBBTlkoQVJSQVlbJDEsICQyXSkKKyAgT1JE RVIgQlkgaSxqCisgIExJTUlUIDEwOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorCUVY RUNVVEUgYXN5bmNfcHRfcXVlcnkoMSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ ICBNZXJnZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjIuaSwgZGlzdHIyLmoKKyAg ICAgICAgIFN1YnBsYW5zIFJlbW92ZWQ6IDEKKyAgICAgICAgIC0+ICBBc3luYyBGb3JlaWduIFNj YW4gb24gcHVibGljLmRpc3RyMl9wMSBkaXN0cjJfMQorICAgICAgICAgICAgICAgT3V0cHV0OiBk aXN0cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAgICBSZW1vdGUg U1FMOiBTRUxFQ1QgaSwgaiwgayBGUk9NIHB1YmxpYy5iYXNlMyBXSEVSRSAoKGkgPSBBTlkgKEFS UkFZWyQxOjppbnRlZ2VyLCAkMjo6aW50ZWdlcl0pKSkgT1JERVIgQlkgaSBBU0MgTlVMTFMgTEFT VCwgaiBBU0MgTlVMTFMgTEFTVAorKDggcm93cykKKworRVhFQ1VURSBhc3luY19wdF9xdWVyeSgx LCAxKTsKKyBpIHwgIGogIHwgICAgayAgICAKKy0tLSstLS0tLSstLS0tLS0tLS0KKyAxIHwgIDEw IHwgZGF0YV8xCisgMSB8IDExMCB8IGRhdGFfMTEKKyAxIHwgMjEwIHwgZGF0YV8yMQorIDEgfCAz MTAgfCBkYXRhXzMxCisgMSB8IDQxMCB8IGRhdGFfNDEKKyAxIHwgNTEwIHwgZGF0YV81MQorIDEg fCA2MTAgfCBkYXRhXzYxCisgMSB8IDcxMCB8IGRhdGFfNzEKKyAxIHwgODEwIHwgZGF0YV84MQor IDEgfCA5MTAgfCBkYXRhXzkxCisoMTAgcm93cykKKworUkVTRVQgcGxhbl9jYWNoZV9tb2RlOwor UkVTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbjsKK0RST1AgVEFCTEUgZGlzdHIxLCBkaXN0 cjIsIGJhc2UxLCBiYXNlMiwgYmFzZTMsIGJhc2U0OwogQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9Q VElPTlMgKERST1AgYXN5bmNfY2FwYWJsZSk7CiBBTFRFUiBTRVJWRVIgbG9vcGJhY2syIE9QVElP TlMgKERST1AgYXN5bmNfY2FwYWJsZSk7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9jb250 cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bv c3RncmVzX2Zkdy5jCmluZGV4IDVlMTc4YzIxYjM5Li5iZDU1MWExZGI3MiAxMDA2NDQKLS0tIGEv Y29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jl c19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTcyMTMsMTIgKzcyMTMsMTYgQEAgcG9zdGdyZXNGb3Jl aWduQXN5bmNDb25maWd1cmVXYWl0KEFzeW5jUmVxdWVzdCAqYXJlcSkKIAlGb3JlaWduU2NhblN0 YXRlICpub2RlID0gKEZvcmVpZ25TY2FuU3RhdGUgKikgYXJlcS0+cmVxdWVzdGVlOwogCVBnRmR3 U2NhblN0YXRlICpmc3N0YXRlID0gKFBnRmR3U2NhblN0YXRlICopIG5vZGUtPmZkd19zdGF0ZTsK IAlBc3luY1JlcXVlc3QgKnBlbmRpbmdBcmVxID0gZnNzdGF0ZS0+Y29ubl9zdGF0ZS0+cGVuZGlu Z0FyZXE7Ci0JQXBwZW5kU3RhdGUgKnJlcXVlc3RvciA9IChBcHBlbmRTdGF0ZSAqKSBhcmVxLT5y ZXF1ZXN0b3I7Ci0JV2FpdEV2ZW50U2V0ICpzZXQgPSByZXF1ZXN0b3ItPmFzX2V2ZW50c2V0Owor CVBsYW5TdGF0ZSAgKnJlcXVlc3RvciA9IGFyZXEtPnJlcXVlc3RvcjsKKwlXYWl0RXZlbnRTZXQg KnNldDsKKwlCaXRtYXBzZXQgICpuZWVkcmVxdWVzdDsKIAogCS8qIFRoaXMgc2hvdWxkIG5vdCBi ZSBjYWxsZWQgdW5sZXNzIGNhbGxiYWNrX3BlbmRpbmcgKi8KIAlBc3NlcnQoYXJlcS0+Y2FsbGJh Y2tfcGVuZGluZyk7CiAKKwlzZXQgPSBHZXRBcHBlbmRFdmVudFNldChyZXF1ZXN0b3IpOworCW5l ZWRyZXF1ZXN0ID0gR2V0TmVlZFJlcXVlc3QocmVxdWVzdG9yKTsKKwogCS8qCiAJICogSWYgcHJv Y2Vzc19wZW5kaW5nX3JlcXVlc3QoKSBoYXMgYmVlbiBpbnZva2VkIG9uIHRoZSBnaXZlbiByZXF1 ZXN0CiAJICogYmVmb3JlIHdlIGdldCBoZXJlLCB3ZSBtaWdodCBoYXZlIHNvbWUgdHVwbGVzIGFs cmVhZHk7IGluIHdoaWNoIGNhc2UKQEAgLTcyNTYsNyArNzI2MCw3IEBAIHBvc3RncmVzRm9yZWln bkFzeW5jQ29uZmlndXJlV2FpdChBc3luY1JlcXVlc3QgKmFyZXEpCiAJCSAqIGJlbG93LCBiZWNh dXNlIHdlIG1pZ2h0IG90aGVyd2lzZSBlbmQgdXAgd2l0aCBubyBjb25maWd1cmVkIGV2ZW50cwog CQkgKiBvdGhlciB0aGFuIHRoZSBwb3N0bWFzdGVyIGRlYXRoIGV2ZW50LgogCQkgKi8KLQkJaWYg KCFibXNfaXNfZW1wdHkocmVxdWVzdG9yLT5hc19uZWVkcmVxdWVzdCkpCisJCWlmICghYm1zX2lz X2VtcHR5KG5lZWRyZXF1ZXN0KSkKIAkJCXJldHVybjsKIAkJaWYgKEdldE51bVJlZ2lzdGVyZWRX YWl0RXZlbnRzKHNldCkgPiAxKQogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0 Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwv cG9zdGdyZXNfZmR3LnNxbAppbmRleCA5YThmOWUyODEzNS4uYWEzODhjYjAyN2YgMTAwNjQ0Ci0t LSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCisrKyBiL2NvbnRy aWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCkBAIC0zOTIxLDYgKzM5MjEsMTEg QEAgSU5TRVJUIElOVE8gcmVzdWx0X3RibCBTRUxFQ1QgYSwgYiwgJ0FBQScgfHwgYyBGUk9NIGFz eW5jX3B0IFdIRVJFIGIgPT09IDUwNTsKIFNFTEVDVCAqIEZST00gcmVzdWx0X3RibCBPUkRFUiBC WSBhOwogREVMRVRFIEZST00gcmVzdWx0X3RibDsKIAorLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUg YiAlIDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUg YiAlIDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKKwogLS0gVGVzdCBlcnJvciBoYW5kbGluZywgaWYg YWNjZXNzaW5nIG9uZSBvZiB0aGUgZm9yZWlnbiBwYXJ0aXRpb25zIGVycm9ycyBvdXQKIENSRUFU RSBGT1JFSUdOIFRBQkxFIGFzeW5jX3BfYnJva2VuIFBBUlRJVElPTiBPRiBhc3luY19wdCBGT1Ig VkFMVUVTIEZST00gKDEwMDAwKSBUTyAoMTAwMDEpCiAgIFNFUlZFUiBsb29wYmFjayBPUFRJT05T ICh0YWJsZV9uYW1lICdub25fZXhpc3RlbnRfdGFibGUnKTsKQEAgLTM5NDQsNiArMzk0OSwyMCBA QCBERUxFVEUgRlJPTSByZXN1bHRfdGJsOwogLS0gVGVzdCBDT1BZIFRPIHdoZW4gZm9yZWlnbiB0 YWJsZSBpcyBwYXJ0aXRpb24KIENPUFkgYXN5bmNfcHQgVE8gc3Rkb3V0OyAtLWVycm9yCiAKKy0t IFRlc3QgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworU0VMRUNUICog RlJPTSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKKworLS0gVGVzdCBh c3luYyBNZXJnZSBBcHBlbmQgcmVzY2FuCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitT RUxFQ1QKKwlBUlJBWShTRUxFQ1QgZi5pIEZST00gKFNFTEVDVCBiICsgZy5pIEZST00gYXN5bmNf cHQgV0hFUkUgYSA+IGcuaSBPUkRFUiBCWSBiKSBmKGkpIE9SREVSIEJZIGYuaSBMSU1JVCAxMCkK K0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGcoaSk7CitTRUxFQ1QKKwlBUlJBWShTRUxFQ1Qg Zi5pIEZST00gKFNFTEVDVCBiICsgZy5pIEZST00gYXN5bmNfcHQgV0hFUkUgYSA+IGcuaSBPUkRF UiBCWSBiKSBmKGkpIE9SREVSIEJZIGYuaSBMSU1JVCAxMCkKK0ZST00gZ2VuZXJhdGVfc2VyaWVz KDEsIDMpIGcoaSk7CisKIERST1AgRk9SRUlHTiBUQUJMRSBhc3luY19wMzsKIERST1AgVEFCTEUg YmFzZV90YmwzOwogCkBAIC0zOTU5LDYgKzM5NzgsMTEgQEAgSU5TRVJUIElOVE8gcmVzdWx0X3Ri bCBTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNTsKIFNFTEVDVCAqIEZST00g cmVzdWx0X3RibCBPUkRFUiBCWSBhOwogREVMRVRFIEZST00gcmVzdWx0X3RibDsKIAorLS0gVGVz dCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZS T00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CitTRUxFQ1QgKiBGUk9N IGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworCiAtLSBwYXJ0aXRpb253 aXNlIGpvaW5zCiBTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOwogCkBAIC00 MTk3LDYgKzQyMjEsNjkgQEAgU0VMRUNUIGEgRlJPTSBiYXNlX3RibCBXSEVSRSAoYSwgcmFuZG9t KCkgPiAwKSBJTiAoU0VMRUNUIGEsIHJhbmRvbSgpID4gMCBGUk9NIGYKIERST1AgRk9SRUlHTiBU QUJMRSBmb3JlaWduX3RibCBDQVNDQURFOwogRFJPUCBUQUJMRSBiYXNlX3RibDsKIAorLS0gVGVz dCBhc3luYyBNZXJnZSBBcHBlbmQKK0NSRUFURSBUQUJMRSBkaXN0cjEgKGkgaW50LCBqIGludCwg ayB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUgYmFzZTEgKGkgaW50 LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlMiAoaSBpbnQsIGogaW50LCBrIHRl eHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3AxIFBBUlRJVElPTiBPRiBkaXN0cjEg Rk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VSVkVSIGxvb3BiYWNr IE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UxJyk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0 cjFfcDIgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVN QUlOREVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTInKTsK KworQ1JFQVRFIFRBQkxFIGRpc3RyMiAoaSBpbnQsIGogaW50LCBrIHRleHQpIFBBUlRJVElPTiBC WSBIQVNIIChpKTsKK0NSRUFURSBUQUJMRSBiYXNlMyAoaSBpbnQsIGogaW50LCBrIHRleHQpOwor Q1JFQVRFIFRBQkxFIGJhc2U0IChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUgRk9SRUlH TiBUQUJMRSBkaXN0cjJfcDEgUEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKE1P RFVMVVMgMiwgUkVNQUlOREVSIDApCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFt ZSAnYmFzZTMnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMl9wMiBQQVJUSVRJT04gT0Yg ZGlzdHIyIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKK1NFUlZFUiBs b29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlNCcpOworCitJTlNFUlQgSU5UTyBkaXN0 cjEKK1NFTEVDVCBpLCBpKjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwg MTAwMCkgaTsKKworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSwgaSoxMCwgJ2RhdGFfJyB8 fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKKworQU5BTFlaRSBkaXN0cjFfcDE7 CitBTkFMWVpFIGRpc3RyMV9wMjsKK0FOQUxZWkUgZGlzdHIyX3AxOworQU5BTFlaRSBkaXN0cjJf cDI7CisKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luIFRPIE9OOworCistLSBUZXN0IGpv aW5zIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFO RCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRpc3Ry Mi5pIExJTUlUIDEwOworU0VMRUNUICogRlJPTSBkaXN0cjEsIGRpc3RyMiBXSEVSRSBkaXN0cjEu aT1kaXN0cjIuaSBBTkQgZGlzdHIyLmogPiA5MCBhbmQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnCitP UkRFUiBCWSBkaXN0cjIuaSBMSU1JVCAxMDsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZG KQorU0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lOIGRpc3RyMiBPTiBkaXN0cjEuaT1kaXN0 cjIuaSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFICBkaXN0cjEuaSA+IDkwCitPUkRF UiBCWSBkaXN0cjEuaSBMSU1JVCAyMDsKK1NFTEVDVCAqIEZST00gZGlzdHIxIExFRlQgSk9JTiBk aXN0cjIgT04gIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScgV0hF UkUgZGlzdHIxLmkgPiA5MAorT1JERVIgQlkgZGlzdHIxLmkgTElNSVQgMjA7CisKKy0tIFRlc3Qg cHJ1bmluZyB3aXRoIGFzeW5jIE1lcmdlIEFwcGVuZAorREVMRVRFIEZST00gZGlzdHIyOworSU5T RVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSUxMCwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CisKK0RFQUxMT0NBVEUgQUxMOworU0VUIHBsYW5fY2Fj aGVfbW9kZSBUTyBmb3JjZV9nZW5lcmljX3BsYW47CitQUkVQQVJFIGFzeW5jX3B0X3F1ZXJ5IChp bnQsIGludCkgQVMKKyAgU0VMRUNUICogRlJPTSBkaXN0cjIgV0hFUkUgaSA9IEFOWShBUlJBWVsk MSwgJDJdKQorICBPUkRFUiBCWSBpLGoKKyAgTElNSVQgMTA7CitFWFBMQUlOIChWRVJCT1NFLCBD T1NUUyBPRkYpCisJRVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAxKTsKK0VYRUNVVEUgYXN5bmNf cHRfcXVlcnkoMSwgMSk7CitSRVNFVCBwbGFuX2NhY2hlX21vZGU7CisKK1JFU0VUIGVuYWJsZV9w YXJ0aXRpb253aXNlX2pvaW47CisKK0RST1AgVEFCTEUgZGlzdHIxLCBkaXN0cjIsIGJhc2UxLCBi YXNlMiwgYmFzZTMsIGJhc2U0OworCiBBTFRFUiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAoRFJP UCBhc3luY19jYXBhYmxlKTsKIEFMVEVSIFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAoRFJPUCBh c3luY19jYXBhYmxlKTsKIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIv ZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDQwNWM5Njg5YmQwLi4xNjVhNWE1OTYyZSAx MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9j b25maWcuc2dtbApAQCAtNTQ2MSw2ICs1NDYxLDIwIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0i CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlz dGVudHJ5IGlkPSJndWMtZW5hYmxlLWFzeW5jLW1lcmdlLWFwcGVuZCIgeHJlZmxhYmVsPSJlbmFi bGVfYXN5bmNfbWVyZ2VfYXBwZW5kIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9hc3lu Y19tZXJnZV9hcHBlbmQ8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxp bmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2FzeW5jX21lcmdlX2Fw cGVuZDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8 L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcXVlcnkgcGxhbm5lcidzIHVzZSBv ZiBhc3luYy1hd2FyZQorICAgICAgICBtZXJnZSBhcHBlbmQgcGxhbiB0eXBlcy4gVGhlIGRlZmF1 bHQgaXMgPGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlz dGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1 Yy1lbmFibGUtYml0bWFwc2NhbiIgeHJlZmxhYmVsPSJlbmFibGVfYml0bWFwc2NhbiI+CiAgICAg ICA8dGVybT48dmFybmFtZT5lbmFibGVfYml0bWFwc2NhbjwvdmFybmFtZT4gKDx0eXBlPmJvb2xl YW48L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNBc3luYy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FzeW5jLmMKaW5k ZXggNWQzY2FiZTczZTMuLjZkYzE5ZWJjMzc0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjQXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYwpA QCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBc3luYy5oIgogI2luY2x1 ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFwcGVuZC5o IgorI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL25vZGVGb3JlaWduc2Nhbi5oIgogCiAvKgpAQCAtMTIxLDYgKzEyMiw5IEBAIEV4ZWNBc3lu Y1Jlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIAkJY2FzZSBUX0FwcGVuZFN0YXRlOgogCQkJ RXhlY0FzeW5jQXBwZW5kUmVzcG9uc2UoYXJlcSk7CiAJCQlicmVhazsKKwkJY2FzZSBUX01lcmdl QXBwZW5kU3RhdGU6CisJCQlFeGVjQXN5bmNNZXJnZUFwcGVuZFJlc3BvbnNlKGFyZXEpOworCQkJ YnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBJZiB0aGUgbm9kZSBkb2Vzbid0IHN1cHBvcnQgYXN5 bmMsIGNhbGxlciBtZXNzZWQgdXAuICovCiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5v ZGUgdHlwZTogJWQiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVu ZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IDc3YzRkZDllNGIx Li5kZmJjN2I1MTBjNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVu ZC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwpAQCAtMTE4NywxMCAr MTE4Nyw3IEBAIEV4ZWNBc3luY0FwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIHN0 YXRpYyB2b2lkCiBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhBcHBlbmRTdGF0ZSAqbm9kZSkK IHsKLQlCaXRtYXBzZXQgICp2YWxpZF9hc3luY3BsYW5zOwotCiAJQXNzZXJ0KG5vZGUtPmFzX3Zh bGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOwotCUFzc2VydChub2RlLT5hc192YWxpZF9hc3luY3Bs YW5zID09IE5VTEwpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQg c3VicGxhbnMuICovCiAJaWYgKGJtc19pc19lbXB0eShub2RlLT5hc192YWxpZF9zdWJwbGFucykp CkBAIC0xMjAwLDIxICsxMTk3LDEwIEBAIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKEFwcGVu ZFN0YXRlICpub2RlKQogCQlyZXR1cm47CiAJfQogCi0JLyogTm90aGluZyB0byBkbyBpZiB0aGVy ZSBhcmUgbm8gdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCi0JaWYgKCFibXNfb3ZlcmxhcChub2Rl LT5hc192YWxpZF9zdWJwbGFucywgbm9kZS0+YXNfYXN5bmNwbGFucykpCi0JeworCS8qIE5vIHZh bGlkIGFzeW5jIHN1YnBsYW5zIGlkZW50aWZpZWQuICovCisJaWYgKCFjbGFzc2lmeV9tYXRjaGlu Z19zdWJwbGFuc19jb21tb24oCisJCQkJCQkJCQkJICAgJm5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5z LAorCQkJCQkJCQkJCSAgIG5vZGUtPmFzX2FzeW5jcGxhbnMsCisJCQkJCQkJCQkJICAgJm5vZGUt PmFzX3ZhbGlkX2FzeW5jcGxhbnMpKQogCQlub2RlLT5hc19uYXN5bmNyZW1haW4gPSAwOwotCQly ZXR1cm47Ci0JfQotCi0JLyogR2V0IHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwotCXZhbGlkX2Fz eW5jcGxhbnMgPSBibXNfaW50ZXJzZWN0KG5vZGUtPmFzX2FzeW5jcGxhbnMsCi0JCQkJCQkJCQkg bm9kZS0+YXNfdmFsaWRfc3VicGxhbnMpOwotCi0JLyogQWRqdXN0IHRoZSB2YWxpZCBzdWJwbGFu cyB0byBjb250YWluIHN5bmMgc3VicGxhbnMgb25seS4gKi8KLQlub2RlLT5hc192YWxpZF9zdWJw bGFucyA9IGJtc19kZWxfbWVtYmVycyhub2RlLT5hc192YWxpZF9zdWJwbGFucywKLQkJCQkJCQkJ CQkJICB2YWxpZF9hc3luY3BsYW5zKTsKLQotCS8qIFNhdmUgdmFsaWQgYXN5bmMgc3VicGxhbnMu ICovCi0Jbm9kZS0+YXNfdmFsaWRfYXN5bmNwbGFucyA9IHZhbGlkX2FzeW5jcGxhbnM7CiB9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCmluZGV4IDMwMGJjZDVjZjMzLi5mMWMy NjdlYjllYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5k LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKQEAgLTM5LDEw ICszOSwxNSBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJleGVjdXRvci9l eGVjdXRvci5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBc3luYy5oIgogI2luY2x1ZGUgImV4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlTWVyZ2VBcHBl bmQuaCIKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVhcC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgorI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50 LmgiCisKKyNkZWZpbmUgRVZFTlRfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAxNgog CiAvKgogICogV2UgaGF2ZSBvbmUgc2xvdCBmb3IgZWFjaCBpdGVtIGluIHRoZSBoZWFwIGFycmF5 LiAgV2UgdXNlIFNsb3ROdW1iZXIKQEAgLTU0LDYgKzU5LDEyIEBAIHR5cGVkZWYgaW50MzIgU2xv dE51bWJlcjsKIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAqRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0 ZSAqcHN0YXRlKTsKIHN0YXRpYyBpbnQJaGVhcF9jb21wYXJlX3Nsb3RzKERhdHVtIGEsIERhdHVt IGIsIHZvaWQgKmFyZyk7CiAKK3N0YXRpYyB2b2lkIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5z KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOworc3RhdGljIHZvaWQgRXhlY01lcmdlQXBwZW5kQXN5 bmNCZWdpbihNZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKK3N0YXRpYyB2b2lkIEV4ZWNNZXJnZUFw cGVuZEFzeW5jR2V0TmV4dChNZXJnZUFwcGVuZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pOworc3Rh dGljIGJvb2wgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5v ZGUsIGludCBtcGxhbik7CitzdGF0aWMgdm9pZCBFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50V2Fp dChNZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKKwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0luaXRN ZXJnZUFwcGVuZApAQCAtNzEsNiArODIsOCBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBw ZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpbnQJCQlucGxhbnM7CiAJ aW50CQkJaSwKIAkJCQlqOworCUJpdG1hcHNldCAgKmFzeW5jcGxhbnM7CisJaW50CQkJbmFzeW5j cGxhbnM7CiAKIAkvKiBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShl ZmxhZ3MgJiAoRVhFQ19GTEFHX0JBQ0tXQVJEIHwgRVhFQ19GTEFHX01BUkspKSk7CkBAIC0xMDYs NyArMTE5LDEwIEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkgKiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNo aW5nU3ViUGxhbnMuCiAJCSAqLwogCQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYg bnBsYW5zID4gMCkKKwkJewogCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSBibXNf YWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOworCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRf c3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCX0KIAl9CiAJZWxzZQogCXsKQEAgLTExOSw2 ICsxMzUsNyBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUg KmVzdGF0ZSwgaW50IGVmbGFncykKIAkJQXNzZXJ0KG5wbGFucyA+IDApOwogCQltZXJnZXN0YXRl LT5tc192YWxpZF9zdWJwbGFucyA9IHZhbGlkc3VicGxhbnMgPQogCQkJYm1zX2FkZF9yYW5nZShO VUxMLCAwLCBucGxhbnMgLSAxKTsKKwkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRl bnRpZmllZCA9IHRydWU7CiAJCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gTlVMTDsKIAl9 CiAKQEAgLTEzNSwxMSArMTUyLDI1IEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQg Km5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIHRoZSByZXN1bHRzIGludG8g dGhlIG1lcmdlcGxhbnN0YXRlcyBhcnJheS4KIAkgKi8KIAlqID0gMDsKKwlhc3luY3BsYW5zID0g TlVMTDsKKwluYXN5bmNwbGFucyA9IDA7CisKIAlpID0gLTE7CiAJd2hpbGUgKChpID0gYm1zX25l eHRfbWVtYmVyKHZhbGlkc3VicGxhbnMsIGkpKSA+PSAwKQogCXsKIAkJUGxhbgkgICAqaW5pdE5v ZGUgPSAoUGxhbiAqKSBsaXN0X250aChub2RlLT5tZXJnZXBsYW5zLCBpKTsKIAorCQkvKgorCQkg KiBSZWNvcmQgYXN5bmMgc3VicGxhbnMuICBXaGVuIGV4ZWN1dGluZyBFdmFsUGxhblF1YWwsIHdl IHRyZWF0IHRoZW0KKwkJICogYXMgc3luYyBvbmVzOyBkb24ndCBkbyB0aGlzIHdoZW4gaW5pdGlh bGl6aW5nIGFuIEV2YWxQbGFuUXVhbCBwbGFuCisJCSAqIHRyZWUuCisJCSAqLworCQlpZiAoaW5p dE5vZGUtPmFzeW5jX2NhcGFibGUgJiYgZXN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpCisJ CXsKKwkJCWFzeW5jcGxhbnMgPSBibXNfYWRkX21lbWJlcihhc3luY3BsYW5zLCBqKTsKKwkJCW5h c3luY3BsYW5zKys7CisJCX0KKwogCQltZXJnZXBsYW5zdGF0ZXNbaisrXSA9IEV4ZWNJbml0Tm9k ZShpbml0Tm9kZSwgZXN0YXRlLCBlZmxhZ3MpOwogCX0KIApAQCAtMTcwLDYgKzIwMSw0NSBAQCBF eGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50 IGVmbGFncykKIAkgKi8KIAltZXJnZXN0YXRlLT5wcy5wc19Qcm9qSW5mbyA9IE5VTEw7CiAKKwkv KiBJbml0aWFsaXplIGFzeW5jIHN0YXRlICovCisJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNwbGFucyA9 IGFzeW5jcGxhbnM7CisJbWVyZ2VzdGF0ZS0+bXNfbmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsK KwltZXJnZXN0YXRlLT5tc19hc3luY3JlcXVlc3RzID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19h c3luY3Jlc3VsdHMgPSBOVUxMOworCW1lcmdlc3RhdGUtPm1zX2hhc19hc3luY3Jlc3VsdHMgPSBO VUxMOworCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVtYWluID0gTlVMTDsKKwltZXJnZXN0YXRlLT5t c19uZWVkcmVxdWVzdCA9IE5VTEw7CisJbWVyZ2VzdGF0ZS0+bXNfZXZlbnRzZXQgPSBOVUxMOwor CW1lcmdlc3RhdGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOworCisJaWYgKG5hc3luY3Bs YW5zID4gMCkKKwl7CisJCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVxdWVzdHMgPSAoQXN5bmNSZXF1 ZXN0ICoqKQorCQkJcGFsbG9jMChucGxhbnMgKiBzaXplb2YoQXN5bmNSZXF1ZXN0ICopKTsKKwor CQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihhc3luY3BsYW5zLCBpKSkg Pj0gMCkKKwkJeworCQkJQXN5bmNSZXF1ZXN0ICphcmVxOworCisJCQlhcmVxID0gcGFsbG9jKHNp emVvZihBc3luY1JlcXVlc3QpKTsKKwkJCWFyZXEtPnJlcXVlc3RvciA9IChQbGFuU3RhdGUgKikg bWVyZ2VzdGF0ZTsKKwkJCWFyZXEtPnJlcXVlc3RlZSA9IG1lcmdlcGxhbnN0YXRlc1tpXTsKKwkJ CWFyZXEtPnJlcXVlc3RfaW5kZXggPSBpOworCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZh bHNlOworCQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOworCQkJYXJlcS0+cmVzdWx0 ID0gTlVMTDsKKworCQkJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7CisJ CX0KKworCQltZXJnZXN0YXRlLT5tc19hc3luY3Jlc3VsdHMgPSAoVHVwbGVUYWJsZVNsb3QgKiop CisJCQlwYWxsb2MwKG5wbGFucyAqIHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSk7CisKKwkJaWYg KG1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCQljbGFzc2lmeV9t YXRjaGluZ19zdWJwbGFucyhtZXJnZXN0YXRlKTsKKwl9CisKIAkvKgogCSAqIGluaXRpYWxpemUg c29ydC1rZXkgaW5mb3JtYXRpb24KIAkgKi8KQEAgLTIyNiwxNCArMjk2LDE4IEBAIEV4ZWNNZXJn ZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJaWYgKG5vZGUtPm1zX25wbGFucyA9PSAwKQog CQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CiAK LQkJLyoKLQkJICogSWYgd2UndmUgeWV0IHRvIGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMg dGhlbiBkbyBzbyBub3cuICBJZgotCQkgKiBydW4tdGltZSBwcnVuaW5nIGlzIGRpc2FibGVkIHRo ZW4gdGhlIHZhbGlkIHN1YnBsYW5zIHdpbGwgYWx3YXlzIGJlCi0JCSAqIHNldCB0byBhbGwgc3Vi cGxhbnMuCi0JCSAqLwotCQlpZiAobm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKKwkJ LyogSWYgd2UndmUgeWV0IHRvIGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhlbiBkbyBz byBub3cuICovCisJCWlmICghbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJ ewogCQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPQogCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQ bGFucyhub2RlLT5tc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOworCQkJbm9kZS0+bXNfdmFs aWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCQljbGFzc2lmeV9tYXRjaGluZ19zdWJw bGFucyhub2RlKTsKKwkJfQorCisJCS8qIElmIHRoZXJlIGFyZSBhbnkgYXN5bmMgc3VicGxhbnMs IGJlZ2luIGV4ZWN1dGluZyB0aGVtLiAqLworCQlpZiAobm9kZS0+bXNfbmFzeW5jcGxhbnMgPiAw KQorCQkJRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdpbihub2RlKTsKIAogCQkvKgogCQkgKiBGaXJz dCB0aW1lIHRocm91Z2g6IHB1bGwgdGhlIGZpcnN0IHR1cGxlIGZyb20gZWFjaCB2YWxpZCBzdWJw bGFuLApAQCAtMjQ2LDYgKzMyMCwxNiBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3Rh dGUpCiAJCQlpZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkpCiAJCQkJYmluYXJ5aGVh cF9hZGRfdW5vcmRlcmVkKG5vZGUtPm1zX2hlYXAsIEludDMyR2V0RGF0dW0oaSkpOwogCQl9CisK KwkJLyogTG9vayBhdCB2YWxpZCBhc3luYyBzdWJwbGFucyAqLworCQlpID0gLTE7CisJCXdoaWxl ICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc192YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0g MCkKKwkJeworCQkJRXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0KG5vZGUsIGkpOworCQkJaWYg KCFUdXBJc051bGwobm9kZS0+bXNfc2xvdHNbaV0pKQorCQkJCWJpbmFyeWhlYXBfYWRkX3Vub3Jk ZXJlZChub2RlLT5tc19oZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKKwkJfQorCiAJCWJpbmFyeWhl YXBfYnVpbGQobm9kZS0+bXNfaGVhcCk7CiAJCW5vZGUtPm1zX2luaXRpYWxpemVkID0gdHJ1ZTsK IAl9CkBAIC0yNjAsNyArMzQ0LDEzIEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0 ZSkKIAkJICogdG8gbm90IHB1bGwgdHVwbGVzIHVudGlsIG5lY2Vzc2FyeS4pCiAJCSAqLwogCQlp ID0gRGF0dW1HZXRJbnQzMihiaW5hcnloZWFwX2ZpcnN0KG5vZGUtPm1zX2hlYXApKTsKLQkJbm9k ZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUobm9kZS0+bWVyZ2VwbGFuc1tpXSk7CisJCWlm IChibXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zX2FzeW5jcGxhbnMpKQorCQkJRXhlY01lcmdlQXBw ZW5kQXN5bmNHZXROZXh0KG5vZGUsIGkpOworCQllbHNlCisJCXsKKwkJCUFzc2VydChibXNfaXNf bWVtYmVyKGksIG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zKSk7CisJCQlub2RlLT5tc19zbG90c1tp XSA9IEV4ZWNQcm9jTm9kZShub2RlLT5tZXJnZXBsYW5zW2ldKTsKKwkJfQogCQlpZiAoIVR1cElz TnVsbChub2RlLT5tc19zbG90c1tpXSkpCiAJCQliaW5hcnloZWFwX3JlcGxhY2VfZmlyc3Qobm9k ZS0+bXNfaGVhcCwgSW50MzJHZXREYXR1bShpKSk7CiAJCWVsc2UKQEAgLTI3Niw2ICszNjYsOCBA QCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJewogCQlpID0gRGF0dW1HZXRJ bnQzMihiaW5hcnloZWFwX2ZpcnN0KG5vZGUtPm1zX2hlYXApKTsKIAkJcmVzdWx0ID0gbm9kZS0+ bXNfc2xvdHNbaV07CisJCS8qIEZvciBhc3luYyBwbGFuIHJlY29yZCB0aGF0IHdlIGNhbiBnZXQg dGhlIG5leHQgdHVwbGUgKi8KKwkJbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IGJtc19kZWxf bWVtYmVyKG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMsIGkpOwogCX0KIAogCXJldHVybiByZXN1 bHQ7CkBAIC0zNTUsNiArNDQ3LDcgQEAgdm9pZAogRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdl QXBwZW5kU3RhdGUgKm5vZGUpCiB7CiAJaW50CQkJaTsKKwlpbnQJCQluYXN5bmNwbGFucyA9IG5v ZGUtPm1zX25hc3luY3BsYW5zOwogCiAJLyoKIAkgKiBJZiBhbnkgUEFSQU1fRVhFQyBQYXJhbXMg dXNlZCBpbiBwcnVuaW5nIGV4cHJlc3Npb25zIGhhdmUgY2hhbmdlZCwgdGhlbgpAQCAtMzY1LDgg KzQ1OCwxMSBAQCBFeGVjUmVTY2FuTWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkK IAkJYm1zX292ZXJsYXAobm9kZS0+cHMuY2hnUGFyYW0sCiAJCQkJCW5vZGUtPm1zX3BydW5lX3N0 YXRlLT5leGVjcGFyYW1pZHMpKQogCXsKKwkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRp ZmllZCA9IGZhbHNlOwogCQlibXNfZnJlZShub2RlLT5tc192YWxpZF9zdWJwbGFucyk7CiAJCW5v ZGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfdmFsaWRf YXN5bmNwbGFucyk7CisJCW5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwogCX0KIAog CWZvciAoaSA9IDA7IGkgPCBub2RlLT5tc19ucGxhbnM7IGkrKykKQEAgLTM4Nyw2ICs0ODMsMzY3 IEBAIEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogCQlpZiAo c3Vibm9kZS0+Y2hnUGFyYW0gPT0gTlVMTCkKIAkJCUV4ZWNSZVNjYW4oc3Vibm9kZSk7CiAJfQor CisJLyogUmVzZXQgYXN5bmMgc3RhdGUgKi8KKwlpZiAobmFzeW5jcGxhbnMgPiAwKQorCXsKKwkJ aSA9IC0xOworCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfYXN5bmNwbGFu cywgaSkpID49IDApCisJCXsKKwkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2FzeW5j cmVxdWVzdHNbaV07CisKKwkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKKwkJCWFy ZXEtPnJlcXVlc3RfY29tcGxldGUgPSBmYWxzZTsKKwkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7CisJ CX0KKworCQlibXNfZnJlZShub2RlLT5tc19hc3luY3JlbWFpbik7CisJCW5vZGUtPm1zX2FzeW5j cmVtYWluID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfbmVlZHJlcXVlc3QpOworCQlub2Rl LT5tc19uZWVkcmVxdWVzdCA9IE5VTEw7CisJCWJtc19mcmVlKG5vZGUtPm1zX2hhc19hc3luY3Jl c3VsdHMpOworCQlub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzID0gTlVMTDsKKwl9CiAJYmluYXJ5 aGVhcF9yZXNldChub2RlLT5tc19oZWFwKTsKIAlub2RlLT5tc19pbml0aWFsaXplZCA9IGZhbHNl OwogfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgY2xhc3NpZnlfbWF0Y2hpbmdfc3Vi cGxhbnMKKyAqCisgKiAgICAgICAgICAgICAgQ2xhc3NpZnkgdGhlIG5vZGUncyBtc192YWxpZF9z dWJwbGFucyBpbnRvIHN5bmMgb25lcyBhbmQKKyAqICAgICAgICAgICAgICBhc3luYyBvbmVzLCBh ZGp1c3QgaXQgdG8gY29udGFpbiBzeW5jIG9uZXMgb25seSwgYW5kIHNhdmUKKyAqICAgICAgICAg ICAgICBhc3luYyBvbmVzIGluIHRoZSBub2RlJ3MgbXNfdmFsaWRfYXN5bmNwbGFucy4KKyAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworc3RhdGljIHZvaWQKK2NsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1lcmdl QXBwZW5kU3RhdGUgKm5vZGUpCit7CisJQXNzZXJ0KG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lk ZW50aWZpZWQpOworCisJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgc3Vi cGxhbnMuICovCisJaWYgKGJtc19pc19lbXB0eShub2RlLT5tc192YWxpZF9zdWJwbGFucykpCisJ eworCQlub2RlLT5tc19hc3luY3JlbWFpbiA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKiBO byB2YWxpZCBhc3luYyBzdWJwbGFucyBpZGVudGlmaWVkLiAqLworCWlmICghY2xhc3NpZnlfbWF0 Y2hpbmdfc3VicGxhbnNfY29tbW9uKAorCQkJCQkJCQkJCSAgICZub2RlLT5tc192YWxpZF9zdWJw bGFucywKKwkJCQkJCQkJCQkgICBub2RlLT5tc19hc3luY3BsYW5zLAorCQkJCQkJCQkJCSAgICZu b2RlLT5tc192YWxpZF9hc3luY3BsYW5zKSkKKwkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxM OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgRXhlY01lcmdlQXBwZW5kQXN5bmNC ZWdpbgorICoKKyAqICAgICAgICAgICAgICBCZWdpbiBleGVjdXRpbmcgZGVzaWduZWQgYXN5bmMt Y2FwYWJsZSBzdWJwbGFucy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNNZXJn ZUFwcGVuZEFzeW5jQmVnaW4oTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKK3sKKwlpbnQJCQlpOwor CisJLyogQmFja3dhcmQgc2NhbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFzeW5jLWF3YXJlIE1lcmdl QXBwZW5kcy4gKi8KKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0 ZS0+ZXNfZGlyZWN0aW9uKSk7CisKKwkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4g dGhlcmUgYXJlIG5vIHN1YnBsYW5zICovCisJQXNzZXJ0KG5vZGUtPm1zX25wbGFucyA+IDApOwor CisJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBhc3luYyBz dWJwbGFucy4gKi8KKwlBc3NlcnQobm9kZS0+bXNfbmFzeW5jcGxhbnMgPiAwKTsKKworCS8qIEV4 ZWNNZXJnZUFwcGVuZCgpIGlkZW50aWZpZXMgdmFsaWQgc3VicGxhbnMgKi8KKwlBc3NlcnQobm9k ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CisKKwkvKiBJbml0aWFsaXplIHN0YXRl IHZhcmlhYmxlcy4gKi8KKwlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJtc19jb3B5KG5vZGUtPm1z X3ZhbGlkX2FzeW5jcGxhbnMpOworCisJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8g dmFsaWQgYXN5bmMgc3VicGxhbnMuICovCisJaWYgKGJtc19pc19lbXB0eShub2RlLT5tc19hc3lu Y3JlbWFpbikpCisJCXJldHVybjsKKworCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRo ZSB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25l eHRfbWVtYmVyKG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQorCXsKKwkJQXN5 bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXTsKKworCQlBc3NlcnQo YXJlcS0+cmVxdWVzdF9pbmRleCA9PSBpKTsKKwkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5k aW5nKTsKKworCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCisJCUV4ZWNBc3luY1JlcXVlc3Qo YXJlcSk7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgRXhlY01lcmdlQXBw ZW5kQXN5bmNHZXROZXh0CisgKgorICogICAgICAgICAgICAgIEdldCB0aGUgbmV4dCB0dXBsZSBm cm9tIHNwZWNpZmllZCBhc3luY2hyb25vdXMgc3VicGxhbi4KKyAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3Rh dGljIHZvaWQKK0V4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0TmV4dChNZXJnZUFwcGVuZFN0YXRlICpu b2RlLCBpbnQgbXBsYW4pCit7CisJbm9kZS0+bXNfc2xvdHNbbXBsYW5dID0gTlVMTDsKKworCS8q IFJlcXVlc3QgYSB0dXBsZSBhc3luY2hyb25vdXNseS4gKi8KKwlpZiAoRXhlY01lcmdlQXBwZW5k QXN5bmNSZXF1ZXN0KG5vZGUsIG1wbGFuKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBub2RlLT5t c19hc3luY3JlbWFpbiBjYW4gYmUgTlVMTCBpZiB3ZSBoYXZlIGZldGNoZWQgdHVwbGVzLCBidXQg aGF2ZW4ndAorCSAqIHJldHVybmVkIHRoZW0geWV0LiBJbiB0aGlzIGNhc2UgRXhlY01lcmdlQXBw ZW5kQXN5bmNSZXF1ZXN0KCkgYWJvdmUKKwkgKiBqdXN0IHJldHVybnMgdHVwbGVzIHdpdGhvdXQg cGVyZm9ybWluZyBhIHJlcXVlc3QuCisJICovCisJd2hpbGUgKGJtc19pc19tZW1iZXIobXBsYW4s IG5vZGUtPm1zX2FzeW5jcmVtYWluKSkKKwl7CisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisK KwkJLyogV2FpdCBvciBwb2xsIGZvciBhc3luYyBldmVudHMuICovCisJCUV4ZWNNZXJnZUFwcGVu ZEFzeW5jRXZlbnRXYWl0KG5vZGUpOworCisJCS8qIFJlcXVlc3QgYSB0dXBsZSBhc3luY2hyb25v dXNseS4gKi8KKwkJaWYgKEV4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChub2RlLCBtcGxhbikp CisJCQlyZXR1cm47CisKKwkJLyoKKwkJICogV2FpdGluZyB1bnRpbCB0aGVyZSdzIG5vIGFzeW5j IHJlcXVlc3RzIHBlbmRpbmcgb3Igd2UgZ290IHNvbWUKKwkJICogdHVwbGVzIGZyb20gb3VyIHJl cXVlc3QKKwkJICovCisJfQorCisJLyogTm8gdHVwbGVzICovCisJcmV0dXJuOworfQorCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKiAgICAgICAgICAgICAgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0CisgKgor ICogICAgICAgICAgICAgIFJlcXVlc3QgYSB0dXBsZSBhc3luY2hyb25vdXNseS4KKyAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworc3RhdGljIGJvb2wKK0V4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChNZXJnZUFw cGVuZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pCit7CisJQml0bWFwc2V0ICAqbmVlZHJlcXVlc3Q7 CisJaW50CQkJaTsKKworCS8qCisJICogSWYgd2UndmUgYWxyZWFkeSBmZXRjaGVkIG5lY2Vzc2Fy eSBkYXRhLCBqdXN0IHJldHVybiBpdAorCSAqLworCWlmIChibXNfaXNfbWVtYmVyKG1wbGFuLCBu b2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzKSkKKwl7CisJCW5vZGUtPm1zX3Nsb3RzW21wbGFuXSA9 IG5vZGUtPm1zX2FzeW5jcmVzdWx0c1ttcGxhbl07CisJCXJldHVybiB0cnVlOworCX0KKworCS8q CisJICogR2V0IGEgbGlzdCBvZiBtZW1iZXJzIHdoaWNoIGNhbiBwcm9jZXNzIHJlcXVlc3QgYW5k IGRvbid0IGhhdmUgZGF0YQorCSAqIHJlYWR5LgorCSAqLworCW5lZWRyZXF1ZXN0ID0gTlVMTDsK KwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zX25lZWRyZXF1 ZXN0LCBpKSkgPj0gMCkKKwl7CisJCWlmICghYm1zX2lzX21lbWJlcihpLCBub2RlLT5tc19oYXNf YXN5bmNyZXN1bHRzKSkKKwkJCW5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1iZXIobmVlZHJlcXVl c3QsIGkpOworCX0KKworCS8qCisJICogSWYgdGhlcmUncyBubyBtZW1iZXJzLCB3aGljaCBzdGls bCBuZWVkIHJlcXVlc3QsIG5vIG5lZWQgdG8gc2VuZCBpdC4KKwkgKi8KKwlpZiAoYm1zX2lzX2Vt cHR5KG5lZWRyZXF1ZXN0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2xlYXIgbXNfbmVlZHJl cXVlc3QgZmxhZywgYXMgd2UgYXJlIGdvaW5nIHRvIHNlbmQgcmVxdWVzdHMgbm93ICovCisJbm9k ZS0+bXNfbmVlZHJlcXVlc3QgPSBibXNfZGVsX21lbWJlcnMobm9kZS0+bXNfbmVlZHJlcXVlc3Qs IG5lZWRyZXF1ZXN0KTsKKworCS8qIE1ha2UgYSBuZXcgcmVxdWVzdCBmb3IgZWFjaCBvZiB0aGUg YXN5bmMgc3VicGxhbnMgdGhhdCBuZWVkIGl0LiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBi bXNfbmV4dF9tZW1iZXIobmVlZHJlcXVlc3QsIGkpKSA+PSAwKQorCXsKKwkJQXN5bmNSZXF1ZXN0 ICphcmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXTsKKworCQkvKgorCQkgKiBXZSd2ZSBq dXN0IGNoZWNrZWQgdGhhdCBzdWJwbGFuIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIHNvbWUgZmV0Y2hl ZAorCQkgKiBkYXRhCisJCSAqLworCQlBc3NlcnQoIWJtc19pc19tZW1iZXIoaSwgbm9kZS0+bXNf aGFzX2FzeW5jcmVzdWx0cykpOworCisJCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KKwkJRXhl Y0FzeW5jUmVxdWVzdChhcmVxKTsKKwl9CisJYm1zX2ZyZWUobmVlZHJlcXVlc3QpOworCisJLyog UmV0dXJuIG5lZWRlZCBhc3luY2hyb25vdXNseS1nZW5lcmF0ZWQgcmVzdWx0cyBpZiBhbnkuICov CisJaWYgKGJtc19pc19tZW1iZXIobXBsYW4sIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQor CXsKKwkJbm9kZS0+bXNfc2xvdHNbbXBsYW5dID0gbm9kZS0+bXNfYXN5bmNyZXN1bHRzW21wbGFu XTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKiAgICAgICAgICAgICAgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZQorICoKKyAqICAg ICAgICAgICAgICBSZWNlaXZlIGEgcmVzcG9uc2UgZnJvbSBhbiBhc3luY2hyb25vdXMgcmVxdWVz dCB3ZSBtYWRlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitFeGVjQXN5bmNNZXJnZUFwcGVuZFJl c3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKK3sKKwlNZXJnZUFwcGVuZFN0YXRlICpub2RlID0g KE1lcmdlQXBwZW5kU3RhdGUgKikgYXJlcS0+cmVxdWVzdG9yOworCVR1cGxlVGFibGVTbG90ICpz bG90ID0gYXJlcS0+cmVzdWx0OworCisJLyogVGhlIHJlc3VsdCBzaG91bGQgYmUgYSBUdXBsZVRh YmxlU2xvdCBvciBOVUxMLiAqLworCUFzc2VydChzbG90ID09IE5VTEwgfHwgSXNBKHNsb3QsIFR1 cGxlVGFibGVTbG90KSk7CisJLyogV2Ugc2hvdWxkIGhhbmRsZSBwcmV2aW91cyBhc3luYyByZXN1 bHQgcHJpb3IgdG8gZ2V0dGluZyBuZXcgb25lICovCisJQXNzZXJ0KCFibXNfaXNfbWVtYmVyKGFy ZXEtPnJlcXVlc3RfaW5kZXgsIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKTsKKworCW5vZGUt Pm1zX2FzeW5jcmVzdWx0c1thcmVxLT5yZXF1ZXN0X2luZGV4XSA9IE5VTEw7CisJLyogTm90aGlu ZyB0byBkbyBpZiB0aGUgcmVxdWVzdCBpcyBwZW5kaW5nLiAqLworCWlmICghYXJlcS0+cmVxdWVz dF9jb21wbGV0ZSkKKwl7CisJCS8qIFRoZSByZXF1ZXN0IHdvdWxkIGhhdmUgYmVlbiBwZW5kaW5n IGZvciBhIGNhbGxiYWNrLiAqLworCQlBc3NlcnQoYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyk7CisJ CXJldHVybjsKKwl9CisKKwkvKiBJZiB0aGUgcmVzdWx0IGlzIE5VTEwgb3IgYW4gZW1wdHkgc2xv dCwgdGhlcmUncyBub3RoaW5nIG1vcmUgdG8gZG8uICovCisJaWYgKFR1cElzTnVsbChzbG90KSkK Kwl7CisJCS8qIFRoZSBlbmRpbmcgc3VicGxhbiB3b3VsZG4ndCBoYXZlIGJlZW4gcGVuZGluZyBm b3IgYSBjYWxsYmFjay4gKi8KKwkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKKwkJ bm9kZS0+bXNfYXN5bmNyZW1haW4gPSBibXNfZGVsX21lbWJlcihub2RlLT5tc19hc3luY3JlbWFp biwKKwkJCQkJCQkJCQkJICBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKKwkJcmV0dXJuOworCX0KKwor CS8qIE1hcmsgdGhhdCB0aGUgYXN5bmMgcmVxdWVzdCBoYXMgYSByZXN1bHQgKi8KKwlub2RlLT5t c19oYXNfYXN5bmNyZXN1bHRzID0gYm1zX2FkZF9tZW1iZXIobm9kZS0+bXNfaGFzX2FzeW5jcmVz dWx0cywKKwkJCQkJCQkJCQkJICAgYXJlcS0+cmVxdWVzdF9pbmRleCk7CisJLyogU2F2ZSByZXN1 bHQgc28gd2UgY2FuIHJldHVybiBpdC4gKi8KKwlub2RlLT5tc19hc3luY3Jlc3VsdHNbYXJlcS0+ cmVxdWVzdF9pbmRleF0gPSBzbG90OworCisJLyoKKwkgKiBNYXJrIHRoZSBzdWJwbGFuIHRoYXQg cmV0dXJuZWQgYSByZXN1bHQgYXMgcmVhZHkgZm9yIGEgbmV3IHJlcXVlc3QuICBXZQorCSAqIGRv bid0IGxhdW5jaCBhbm90aGVyIG9uZSBoZXJlIGltbWVkaWF0ZWx5IGJlY2F1c2UgaXQgbWlnaHQg Y29tcGxldGUuCisJICovCisJbm9kZS0+bXNfbmVlZHJlcXVlc3QgPSBibXNfYWRkX21lbWJlcihu b2RlLT5tc19uZWVkcmVxdWVzdCwKKwkJCQkJCQkJCQkgIGFyZXEtPnJlcXVlc3RfaW5kZXgpOwor fQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgkJRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQKKyAqCisg KgkJV2FpdCBvciBwb2xsIGZvciBmaWxlIGRlc2NyaXB0b3IgZXZlbnRzIGFuZCBmaXJlIGNhbGxi YWNrcy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNNZXJnZUFwcGVuZEFzeW5j RXZlbnRXYWl0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCit7CisJaW50CQkJbmV2ZW50cyA9IG5v ZGUtPm1zX25hc3luY3BsYW5zICsgMjsgLyogb25lIGZvciBQTSBkZWF0aCBhbmQKKwkJCQkJCQkJ CQkJCQkgKiBvbmUgZm9yIGxhdGNoICovCisJV2FpdEV2ZW50CW9jY3VycmVkX2V2ZW50W0VWRU5U X0JVRkZFUl9TSVpFXTsKKwlpbnQJCQlub2NjdXJyZWQ7CisJaW50CQkJaTsKKworCS8qIFdlIHNo b3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMgc3VicGxh bnMuICovCisJQXNzZXJ0KGJtc19udW1fbWVtYmVycyhub2RlLT5tc19hc3luY3JlbWFpbikgPiAw KTsKKworCW5vZGUtPm1zX2V2ZW50c2V0ID0gQ3JlYXRlV2FpdEV2ZW50U2V0KEN1cnJlbnRSZXNv dXJjZU93bmVyLCBuZXZlbnRzKTsKKwlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5tc19ldmVudHNl dCwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJICBOVUxMLCBO VUxMKTsKKworCS8qIEdpdmUgZWFjaCB3YWl0aW5nIHN1YnBsYW4gYSBjaGFuY2UgdG8gYWRkIGFu IGV2ZW50LiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+ bXNfYXN5bmNwbGFucywgaSkpID49IDApCisJeworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2Rl LT5tc19hc3luY3JlcXVlc3RzW2ldOworCisJCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQor CQkJRXhlY0FzeW5jQ29uZmlndXJlV2FpdChhcmVxKTsKKwl9CisKKwkvKgorCSAqIE5vIG5lZWQg Zm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBpZiBub25lIG9mIHRoZSBzdWJwbGFucyBjb25maWd1cmVk IGFueQorCSAqIGV2ZW50cy4KKwkgKi8KKwlpZiAoR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMo bm9kZS0+bXNfZXZlbnRzZXQpID09IDEpCisJeworCQlGcmVlV2FpdEV2ZW50U2V0KG5vZGUtPm1z X2V2ZW50c2V0KTsKKwkJbm9kZS0+bXNfZXZlbnRzZXQgPSBOVUxMOworCQlyZXR1cm47CisJfQor CisJLyoKKwkgKiBBZGQgdGhlIHByb2Nlc3MgbGF0Y2ggdG8gdGhlIHNldCwgc28gdGhhdCB3ZSB3 YWtlIHVwIHRvIHByb2Nlc3MgdGhlCisJICogc3RhbmRhcmQgaW50ZXJydXB0cyB3aXRoIENIRUNL X0ZPUl9JTlRFUlJVUFRTKCkuCisJICoKKwkgKiBOT1RFOiBGb3IgaGlzdG9yaWNhbCByZWFzb25z LCBpdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgaXMgYWRkZWQgdG8gdGhlCisJICogV2FpdEV2ZW50 U2V0IGFmdGVyIHRoZSBFeGVjQXN5bmNDb25maWd1cmVXYWl0KCkgY2FsbHMuICBOYW1lbHksCisJ ICogcG9zdGdyZXNfZmR3IGNhbGxzICJHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhzZXQpID09 IDEiIHRvIGNoZWNrIGlmCisJICogYW55IG90aGVyIGV2ZW50cyBhcmUgaW4gdGhlIHNldC4gIFRo YXQncyBhIHBvb3IgZGVzaWduLCBpdCdzCisJICogcXVlc3Rpb25hYmxlIGZvciBwb3N0Z3Jlc19m ZHcgdG8gYmUgZG9pbmcgdGhhdCBpbiB0aGUgZmlyc3QgcGxhY2UsIGJ1dAorCSAqIHdlIGNhbm5v dCBjaGFuZ2UgaXQgbm93LiAgVGhlIHBhdHRlcm4gaGFzIHBvc3NpYmx5IGJlZW4gY29waWVkIHRv IG90aGVyCisJICogZXh0ZW5zaW9ucyB0b28uCisJICovCisJQWRkV2FpdEV2ZW50VG9TZXQobm9k ZS0+bXNfZXZlbnRzZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJICBN eUxhdGNoLCBOVUxMKTsKKworCS8qIFJldHVybiBhdCBtb3N0IEVWRU5UX0JVRkZFUl9TSVpFIGV2 ZW50cyBpbiBvbmUgY2FsbC4gKi8KKwlpZiAobmV2ZW50cyA+IEVWRU5UX0JVRkZFUl9TSVpFKQor CQluZXZlbnRzID0gRVZFTlRfQlVGRkVSX1NJWkU7CisKKwkvKgorCSAqIFdhaXQgdW50aWwgYXQg bGVhc3Qgb25lIGV2ZW50IG9jY3Vycy4KKwkgKi8KKwlub2NjdXJyZWQgPSBXYWl0RXZlbnRTZXRX YWl0KG5vZGUtPm1zX2V2ZW50c2V0LCAtMSAvKiBubyB0aW1lb3V0ICovICwgb2NjdXJyZWRfZXZl bnQsCisJCQkJCQkJCSBuZXZlbnRzLCBXQUlUX0VWRU5UX0FQUEVORF9SRUFEWSk7CisJRnJlZVdh aXRFdmVudFNldChub2RlLT5tc19ldmVudHNldCk7CisJbm9kZS0+bXNfZXZlbnRzZXQgPSBOVUxM OworCWlmIChub2NjdXJyZWQgPT0gMCkKKwkJcmV0dXJuOworCisJLyogRGVsaXZlciBub3RpZmlj YXRpb25zLiAqLworCWZvciAoaSA9IDA7IGkgPCBub2NjdXJyZWQ7IGkrKykKKwl7CisJCVdhaXRF dmVudCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07CisKKwkJLyoKKwkJICogRWFjaCB3YWl0aW5n IHN1YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJlZCBpdHMgd2FpdCBldmVudCB3aXRoCisJCSAq IHVzZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0cyBBc3luY1JlcXVlc3QuCisJCSAqLworCQlp ZiAoKHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFEQUJMRSkgIT0gMCkKKwkJeworCQkJQXN5bmNS ZXF1ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAqKSB3LT51c2VyX2RhdGE7CisKKwkJCWlmIChh cmVxLT5jYWxsYmFja19wZW5kaW5nKQorCQkJeworCQkJCS8qCisJCQkJICogTWFyayBpdCBhcyBu byBsb25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAgV2UgbXVzdCBkbyB0aGlzCisJCQkJICogYmVm b3JlIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBpbiBjYXNlIHRoZSBjYWxsYmFjayByZXNldHMK KwkJCQkgKiB0aGUgZmxhZy4KKwkJCQkgKi8KKwkJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0g ZmFsc2U7CisKKwkJCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCisJCQkJRXhlY0FzeW5jTm90 aWZ5KGFyZXEpOworCQkJfQorCQl9CisKKwkJLyogSGFuZGxlIHN0YW5kYXJkIGludGVycnVwdHMg Ki8KKwkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQpICE9IDApCisJCXsKKwkJCVJlc2V0 TGF0Y2goTXlMYXRjaCk7CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQl9CisJfQorfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggYTM5Y2M3OTNiNGQuLjAxN2U1 OTc3MzY5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE2Myw2ICsx NjMsNyBAQCBib29sCQllbmFibGVfcGFyYWxsZWxfaGFzaCA9IHRydWU7CiBib29sCQllbmFibGVf cGFydGl0aW9uX3BydW5pbmcgPSB0cnVlOwogYm9vbAkJZW5hYmxlX3ByZXNvcnRlZF9hZ2dyZWdh dGUgPSB0cnVlOwogYm9vbAkJZW5hYmxlX2FzeW5jX2FwcGVuZCA9IHRydWU7Citib29sCQllbmFi bGVfYXN5bmNfbWVyZ2VfYXBwZW5kID0gdHJ1ZTsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwppbmRleCA4NGY2MGM0ODY1My4uMjQzMjVk NDJmMGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4u YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTE0NjYs NiArMTQ2Niw3IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwg TWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJTGlzdAkgICAqc3VicGxhbnMgPSBOSUw7CiAJ TGlzdENlbGwgICAqc3VicGF0aHM7CiAJUmVsT3B0SW5mbyAqcmVsID0gYmVzdF9wYXRoLT5wYXRo LnBhcmVudDsKKwlib29sCQljb25zaWRlcl9hc3luYyA9IGZhbHNlOwogCiAJLyoKIAkgKiBXZSBk b24ndCBoYXZlIHRoZSBhY3R1YWwgY3JlYXRpb24gb2YgdGhlIE1lcmdlQXBwZW5kIG5vZGUgc3Bs aXQgb3V0CkBAIC0xNDgwLDYgKzE0ODEsMTAgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBs YW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAlwbGFuLT5yaWdo dHRyZWUgPSBOVUxMOwogCW5vZGUtPmFwcHJlbGlkcyA9IHJlbC0+cmVsaWRzOwogCisJY29uc2lk ZXJfYXN5bmMgPSAoZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCAmJgorCQkJCQkgICFiZXN0X3Bh dGgtPnBhdGgucGFyYWxsZWxfc2FmZSAmJgorCQkJCQkgIGxpc3RfbGVuZ3RoKGJlc3RfcGF0aC0+ c3VicGF0aHMpID4gMSk7CisKIAkvKgogCSAqIENvbXB1dGUgc29ydCBjb2x1bW4gaW5mbywgYW5k IGFkanVzdCBNZXJnZUFwcGVuZCdzIHRsaXN0IGFzIG5lZWRlZC4KIAkgKiBCZWNhdXNlIHdlIHBh c3MgYWRqdXN0X3RsaXN0X2luX3BsYWNlID0gdHJ1ZSwgd2UgbWF5IGlnbm9yZSB0aGUKQEAgLTE1 ODAsNiArMTU4NSwxMCBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJv b3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCQkJc3VicGxhbiA9IHNvcnRfcGxhbjsK IAkJfQogCisJCS8qIElmIG5lZWRlZCwgY2hlY2sgdG8gc2VlIGlmIHN1YnBsYW4gY2FuIGJlIGV4 ZWN1dGVkIGFzeW5jaHJvbm91c2x5ICovCisJCWlmIChjb25zaWRlcl9hc3luYykKKwkJCW1hcmtf YXN5bmNfY2FwYWJsZV9wbGFuKHN1YnBsYW4sIHN1YnBhdGgpOworCiAJCXN1YnBsYW5zID0gbGFw cGVuZChzdWJwbGFucywgc3VicGxhbik7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3BhcmFtZXRlcnMuZGF0CmluZGV4IDNiOWQ4MzQ5MDc4Li5iZGI4ZmMxYjNhZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKQEAgLTgxMiw2ICs4MTIsMTQgQEAK ICAgYm9vdF92YWwgPT4gJ3RydWUnLAogfSwKIAoreyBuYW1lID0+ICdlbmFibGVfYXN5bmNfbWVy Z2VfYXBwZW5kJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3Jv dXAgPT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAorICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHRo ZSBwbGFubmVyXCdzIHVzZSBvZiBhc3luYyBtZXJnZSBhcHBlbmQgcGxhbnMuJywKKyAgZmxhZ3Mg PT4gJ0dVQ19FWFBMQUlOJywKKyAgdmFyaWFibGUgPT4gJ2VuYWJsZV9hc3luY19tZXJnZV9hcHBl bmQnLAorICBib290X3ZhbCA9PiAndHJ1ZScsCit9LAorCisKIHsgbmFtZSA9PiAnZW5hYmxlX2Jp dG1hcHNjYW4nLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91 cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCiAgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhl IHBsYW5uZXJcJ3MgdXNlIG9mIGJpdG1hcC1zY2FuIHBsYW5zLicsCiAgIGZsYWdzID0+ICdHVUNf RVhQTEFJTicsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwu Y29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1w bGUKaW5kZXggZGM5ZTIyNTVmOGEuLmQ5NDlkMmFhZDA0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC00MDUsNiArNDA1LDcgQEAKICMgLSBQ bGFubmVyIE1ldGhvZCBDb25maWd1cmF0aW9uIC0KIAogI2VuYWJsZV9hc3luY19hcHBlbmQgPSBv bgorI2VuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQgPSBvbgogI2VuYWJsZV9iaXRtYXBzY2FuID0g b24KICNlbmFibGVfZ2F0aGVybWVyZ2UgPSBvbgogI2VuYWJsZV9oYXNoYWdnID0gb24KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgKaW5kZXggNGViMDVkYzMwZDYuLmUzZmRiMjZl Y2U2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaAor KysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaApAQCAtMTksNSArMTks NiBAQAogZXh0ZXJuIE1lcmdlQXBwZW5kU3RhdGUgKkV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VB cHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2b2lkIEV4 ZWNFbmRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKIGV4dGVybiB2b2lkIEV4 ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKK2V4dGVybiB2b2lk IEV4ZWNBc3luY01lcmdlQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKTsKIAogI2Vu ZGlmCQkJCQkJCS8qIE5PREVNRVJHRUFQUEVORF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4 IDM5Njg0MjlmOTkxLi41ODg3Y2JmNGYxNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE1NDUs MTAgKzE1NDUsNjkgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VBcHBlbmRTdGF0ZQogCVR1cGxlVGFi bGVTbG90ICoqbXNfc2xvdHM7CS8qIGFycmF5IG9mIGxlbmd0aCBtc19ucGxhbnMgKi8KIAlzdHJ1 Y3QgYmluYXJ5aGVhcCAqbXNfaGVhcDsgLyogYmluYXJ5IGhlYXAgb2Ygc2xvdCBpbmRpY2VzICov CiAJYm9vbAkJbXNfaW5pdGlhbGl6ZWQ7IC8qIGFyZSBzdWJwbGFucyBzdGFydGVkPyAqLworCUJp dG1hcHNldCAgKm1zX2FzeW5jcGxhbnM7CS8qIGFzeW5jaHJvbm91cyBwbGFucyBpbmRleGVzICov CisJaW50CQkJbXNfbmFzeW5jcGxhbnM7IC8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCisJ QXN5bmNSZXF1ZXN0ICoqbXNfYXN5bmNyZXF1ZXN0czsJLyogYXJyYXkgb2YgQXN5bmNSZXF1ZXN0 cyAqLworCVR1cGxlVGFibGVTbG90ICoqbXNfYXN5bmNyZXN1bHRzOwkvKiB1bnJldHVybmVkIHJl c3VsdHMgb2YgYXN5bmMgcGxhbnMgKi8KKwlCaXRtYXBzZXQgICptc19oYXNfYXN5bmNyZXN1bHRz OwkvKiBwbGFucyB3aGljaCBoYXZlIGFzeW5jIHJlc3VsdHMgKi8KKwlCaXRtYXBzZXQgICptc19h c3luY3JlbWFpbjsgLyogcmVtYWluaW5nIGFzeW5jaHJvbm91cyBwbGFucyAqLworCUJpdG1hcHNl dCAgKm1zX25lZWRyZXF1ZXN0OyAvKiBhc3luY2hyb25vdXMgcGxhbnMgbmVlZGluZyBhIG5ldyBy ZXF1ZXN0ICovCisJc3RydWN0IFdhaXRFdmVudFNldCAqbXNfZXZlbnRzZXQ7CS8qIFdhaXRFdmVu dFNldCB1c2VkIHRvIGNvbmZpZ3VyZSBmaWxlCisJCQkJCQkJCQkJICogZGVzY3JpcHRvciB3YWl0 IGV2ZW50cyAqLwogCXN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRlICptc19wcnVuZV9zdGF0ZTsK Kwlib29sCQltc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkOwkvKiBpcyBtc192YWxpZF9zdWJw bGFucyB2YWxpZD8gKi8KIAlCaXRtYXBzZXQgICptc192YWxpZF9zdWJwbGFuczsKKwlCaXRtYXBz ZXQgICptc192YWxpZF9hc3luY3BsYW5zOwkvKiB2YWxpZCBhc3luY2hyb25vdXMgcGxhbnMgaW5k ZXhlcyAqLwogfSBNZXJnZUFwcGVuZFN0YXRlOwogCisvKiBHZXR0ZXJzIGZvciBBcHBlbmRTdGF0 ZSBhbmQgTWVyZ2VBcHBlbmRTdGF0ZSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgV2FpdEV2ZW50 U2V0ICoKK0dldEFwcGVuZEV2ZW50U2V0KFBsYW5TdGF0ZSAqcHMpCit7CisJQXNzZXJ0KElzQShw cywgQXBwZW5kU3RhdGUpIHx8IElzQShwcywgTWVyZ2VBcHBlbmRTdGF0ZSkpOworCisJaWYgKElz QShwcywgQXBwZW5kU3RhdGUpKQorCQlyZXR1cm4gKChBcHBlbmRTdGF0ZSAqKSBwcyktPmFzX2V2 ZW50c2V0OworCWVsc2UKKwkJcmV0dXJuICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwcyktPm1zX2V2 ZW50c2V0OworfQorCitzdGF0aWMgaW5saW5lIEJpdG1hcHNldCAqCitHZXROZWVkUmVxdWVzdChQ bGFuU3RhdGUgKnBzKQoreworCUFzc2VydChJc0EocHMsIEFwcGVuZFN0YXRlKSB8fCBJc0EocHMs IE1lcmdlQXBwZW5kU3RhdGUpKTsKKworCWlmIChJc0EocHMsIEFwcGVuZFN0YXRlKSkKKwkJcmV0 dXJuICgoQXBwZW5kU3RhdGUgKikgcHMpLT5hc19uZWVkcmVxdWVzdDsKKwllbHNlCisJCXJldHVy biAoKE1lcmdlQXBwZW5kU3RhdGUgKikgcHMpLT5tc19uZWVkcmVxdWVzdDsKK30KKworLyogQ29t bW9uIHBhcnQgb2YgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoKSBmb3IgQXBwZW5kIGFuZCBN ZXJnZUFwcGVuZCAqLworc3RhdGljIGlubGluZSBib29sCitjbGFzc2lmeV9tYXRjaGluZ19zdWJw bGFuc19jb21tb24oQml0bWFwc2V0ICoqdmFsaWRfc3VicGxhbnMsCisJCQkJCQkJCSAgQml0bWFw c2V0ICphc3luY3BsYW5zLAorCQkJCQkJCQkgIEJpdG1hcHNldCAqKnZhbGlkX2FzeW5jcGxhbnMp Cit7CisJQXNzZXJ0KCp2YWxpZF9hc3luY3BsYW5zID09IE5VTEwpOworCisJLyogQ2hlY2tlZCBi eSBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucygpICovCisJQXNzZXJ0KCFibXNfaXNfZW1wdHko KnZhbGlkX3N1YnBsYW5zKSk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2 YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlpZiAoIWJtc19vdmVybGFwKCp2YWxpZF9zdWJwbGFu cywgYXN5bmNwbGFucykpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEdldCB2YWxpZCBhc3luYyBz dWJwbGFucy4gKi8KKwkqdmFsaWRfYXN5bmNwbGFucyA9IGJtc19pbnRlcnNlY3QoYXN5bmNwbGFu cywKKwkJCQkJCQkJCSAgKnZhbGlkX3N1YnBsYW5zKTsKKworCS8qIEFkanVzdCB0aGUgdmFsaWQg c3VicGxhbnMgdG8gY29udGFpbiBzeW5jIHN1YnBsYW5zIG9ubHkuICovCisJKnZhbGlkX3N1YnBs YW5zID0gYm1zX2RlbF9tZW1iZXJzKCp2YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJCSAgKnZhbGlk X2FzeW5jcGxhbnMpOworCXJldHVybiB0cnVlOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAg KgkgUmVjdXJzaXZlVW5pb25TdGF0ZSBpbmZvcm1hdGlvbgogICoKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCmlu ZGV4IGI1MjNiY2RhOGYzLi5mZWU0OTFiNzdhZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCkBAIC03MCw2 ICs3MCw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9wYXJhbGxlbF9oYXNoOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3BhcnRpdGlvbl9wcnVuaW5nOwogZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3ByZXNvcnRlZF9hZ2dyZWdhdGU7CiBleHRlcm4gUEdE TExJTVBPUlQgYm9vbCBlbmFibGVfYXN5bmNfYXBwZW5kOworZXh0ZXJuIFBHRExMSU1QT1JUIGJv b2wgZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZDsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgY29u c3RyYWludF9leGNsdXNpb247CiAKIGV4dGVybiBkb3VibGUgaW5kZXhfcGFnZXNfZmV0Y2hlZChk b3VibGUgdHVwbGVzX2ZldGNoZWQsIEJsb2NrTnVtYmVyIHBhZ2VzLApkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCAwNDExZGI4MzJmMS4uMTk0YjFmOTUyODkgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xNDksNiArMTQ5LDcgQEAgc2Vs ZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJs ZSUnOwogICAgICAgICAgICAgICBuYW1lICAgICAgICAgICAgICB8IHNldHRpbmcgCiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0KICBlbmFibGVfYXN5bmNfYXBwZW5k ICAgICAgICAgICAgfCBvbgorIGVuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQgICAgICB8IG9uCiAg ZW5hYmxlX2JpdG1hcHNjYW4gICAgICAgICAgICAgIHwgb24KICBlbmFibGVfZGlzdGluY3RfcmVv cmRlcmluZyAgICAgfCBvbgogIGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgICAgICAgICB8IG9uCkBA IC0xNzMsNyArMTc0LDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3 aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAg ICB8IG9uCiAgZW5hYmxlX3NvcnQgICAgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlk c2NhbiAgICAgICAgICAgICAgICAgfCBvbgotKDI1IHJvd3MpCisoMjYgcm93cykKIAogLS0gVGhl cmUgYXJlIGFsd2F5cyB3YWl0IGV2ZW50IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4g IEluamVjdGlvblBvaW50CiAtLSBtYXkgYmUgcHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBv biBoaXN0b3J5IHNpbmNlIGxhc3QgcG9zdG1hc3RlciBzdGFydC4KLS0gCjIuNTEuMgoK --e86d2d6516f98232d4359f2f9ff492d00a238725075b520da406056955ee Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0003-Create-execAppend.c-to-avoid-duplicated-code-on-M.patch Content-Type: text/plain; charset=utf-8; name=v9-0003-Create-execAppend.c-to-avoid-duplicated-code-on-M.patch RnJvbSAzYTZjY2IxOGE5N2JjZTUzMWIwYzE2ZWIwZGI0OGVmMTgyYmRjMGFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFR1ZSwgMTYgRGVjIDIwMjUgMTY6MzI6MTQgLTAzMDAKU3ViamVjdDogW1BBVENIIHY5IDMv M10gQ3JlYXRlIGV4ZWNBcHBlbmQuYyB0byBhdm9pZCBkdXBsaWNhdGVkIGNvZGUgb24KIFtNZXJn ZV1BcHBlbmQKCi0tLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jIHwg ICA0ICstCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyAgICAgfCAgIDggKy0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICB8ICAyNiArLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNBbWkuYyAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0FwcGVuZC5jICAgICAgIHwgNDA5ICsrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNDdXJyZW50LmMgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1Byb2Nub2RlLmMgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9tZXNv bi5idWlsZCAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5j ICAgICAgIHwgNDk4ICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZU1lcmdlQXBwZW5kLmMgIHwgNDE3ICsrKy0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFj a2VuZC9ub2Rlcy9ub2RlRnVuY3MuYyAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyB8ICAzNCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jICAgIHwgIDQ0ICstLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v c3Vic2VsZWN0LmMgIHwgICA0ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMg ICAgICAgfCAgIDggKy0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaCAgICAgICB8 ICAzMyArKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgIHwgIDgwICsr LS0KIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAgICAgICB8ICA0NSArLS0KIDE5 IGZpbGVzIGNoYW5nZWQsIDcyMSBpbnNlcnRpb25zKCspLCA5MTMgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FwcGVuZC5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0FwcGVuZC5oCgpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jIGIvY29udHJpYi9wZ19v dmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmluZGV4IGZjZGMxNzAxMmRhLi43ZjE4YzJhYjA2 YyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCisr KyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwpAQCAtMjI4LDEyICsy MjgsMTIgQEAgb3ZlcmV4cGxhaW5fcGVyX25vZGVfaG9vayhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwg TGlzdCAqYW5jZXN0b3JzLAogCQkJCWJyZWFrOwogCQkJY2FzZSBUX0FwcGVuZDoKIAkJCQlvdmVy ZXhwbGFpbl9iaXRtYXBzZXQoIkFwcGVuZCBSVElzIiwKLQkJCQkJCQkJCSAgKChBcHBlbmQgKikg cGxhbiktPmFwcHJlbGlkcywKKwkJCQkJCQkJCSAgKChBcHBlbmQgKikgcGxhbiktPmFwLmFwcHJl bGlkcywKIAkJCQkJCQkJCSAgZXMpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBUX01lcmdlQXBwZW5k OgogCQkJCW92ZXJleHBsYWluX2JpdG1hcHNldCgiQXBwZW5kIFJUSXMiLAotCQkJCQkJCQkJICAo KE1lcmdlQXBwZW5kICopIHBsYW4pLT5hcHByZWxpZHMsCisJCQkJCQkJCQkgICgoTWVyZ2VBcHBl bmQgKikgcGxhbiktPmFwLmFwcHJlbGlkcywKIAkJCQkJCQkJCSAgZXMpOwogCQkJCWJyZWFrOwog CQkJY2FzZSBUX1Jlc3VsdDoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3Rn cmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXggYmQ1 NTFhMWRiNzIuLmIwMWFkNDBhZDE3IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9w b3N0Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpA QCAtMjQxMiw4ICsyNDEyLDggQEAgZmluZF9tb2RpZnl0YWJsZV9zdWJwbGFuKFBsYW5uZXJJbmZv ICpyb290LAogCXsKIAkJQXBwZW5kCSAgICphcHBlbmRwbGFuID0gKEFwcGVuZCAqKSBzdWJwbGFu OwogCi0JCWlmIChzdWJwbGFuX2luZGV4IDwgbGlzdF9sZW5ndGgoYXBwZW5kcGxhbi0+YXBwZW5k cGxhbnMpKQotCQkJc3VicGxhbiA9IChQbGFuICopIGxpc3RfbnRoKGFwcGVuZHBsYW4tPmFwcGVu ZHBsYW5zLCBzdWJwbGFuX2luZGV4KTsKKwkJaWYgKHN1YnBsYW5faW5kZXggPCBsaXN0X2xlbmd0 aChhcHBlbmRwbGFuLT5hcC5zdWJwbGFucykpCisJCQlzdWJwbGFuID0gKFBsYW4gKikgbGlzdF9u dGgoYXBwZW5kcGxhbi0+YXAuc3VicGxhbnMsIHN1YnBsYW5faW5kZXgpOwogCX0KIAllbHNlIGlm IChJc0Eoc3VicGxhbiwgUmVzdWx0KSAmJgogCQkJIG91dGVyUGxhbihzdWJwbGFuKSAhPSBOVUxM ICYmCkBAIC0yNDIxLDggKzI0MjEsOCBAQCBmaW5kX21vZGlmeXRhYmxlX3N1YnBsYW4oUGxhbm5l ckluZm8gKnJvb3QsCiAJewogCQlBcHBlbmQJICAgKmFwcGVuZHBsYW4gPSAoQXBwZW5kICopIG91 dGVyUGxhbihzdWJwbGFuKTsKIAotCQlpZiAoc3VicGxhbl9pbmRleCA8IGxpc3RfbGVuZ3RoKGFw cGVuZHBsYW4tPmFwcGVuZHBsYW5zKSkKLQkJCXN1YnBsYW4gPSAoUGxhbiAqKSBsaXN0X250aChh cHBlbmRwbGFuLT5hcHBlbmRwbGFucywgc3VicGxhbl9pbmRleCk7CisJCWlmIChzdWJwbGFuX2lu ZGV4IDwgbGlzdF9sZW5ndGgoYXBwZW5kcGxhbi0+YXAuc3VicGxhbnMpKQorCQkJc3VicGxhbiA9 IChQbGFuICopIGxpc3RfbnRoKGFwcGVuZHBsYW4tPmFwLnN1YnBsYW5zLCBzdWJwbGFuX2luZGV4 KTsKIAl9CiAKIAkvKiBOb3csIGhhdmUgd2UgZ290IGEgRm9yZWlnblNjYW4gb24gdGhlIGRlc2ly ZWQgcmVsPyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IDVhNjM5MDYzMWViLi4zZWFhMWY3 NDU5ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMTIyNCwxMSArMTIyNCwxMSBAQCBFeHBs YWluUHJlU2Nhbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIEJpdG1hcHNldCAqKnJlbHNfdXNl ZCkKIAkJCWJyZWFrOwogCQljYXNlIFRfQXBwZW5kOgogCQkJKnJlbHNfdXNlZCA9IGJtc19hZGRf bWVtYmVycygqcmVsc191c2VkLAotCQkJCQkJCQkJCSAoKEFwcGVuZCAqKSBwbGFuKS0+YXBwcmVs aWRzKTsKKwkJCQkJCQkJCQkgKChBcHBlbmQgKikgcGxhbiktPmFwLmFwcHJlbGlkcyk7CiAJCQli cmVhazsKIAkJY2FzZSBUX01lcmdlQXBwZW5kOgogCQkJKnJlbHNfdXNlZCA9IGJtc19hZGRfbWVt YmVycygqcmVsc191c2VkLAotCQkJCQkJCQkJCSAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5hcHBy ZWxpZHMpOworCQkJCQkJCQkJCSAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5hcC5hcHByZWxpZHMp OwogCQkJYnJlYWs7CiAJCWNhc2UgVF9SZXN1bHQ6CiAJCQkqcmVsc191c2VkID0gYm1zX2FkZF9t ZW1iZXJzKCpyZWxzX3VzZWQsCkBAIC0xMjcyLDcgKzEyNzIsNyBAQCBwbGFuX2lzX2Rpc2FibGVk KFBsYW4gKnBsYW4pCiAJCSAqIGluY2x1ZGVzIGFueSBydW4tdGltZSBwcnVuZWQgY2hpbGRyZW4u ICBJZ25vcmluZyB0aG9zZSBjb3VsZCBnaXZlCiAJCSAqIHVzIHRoZSBpbmNvcnJlY3QgbnVtYmVy IG9mIGRpc2FibGVkIG5vZGVzLgogCQkgKi8KLQkJZm9yZWFjaChsYywgYXBsYW4tPmFwcGVuZHBs YW5zKQorCQlmb3JlYWNoKGxjLCBhcGxhbi0+YXAuc3VicGxhbnMpCiAJCXsKIAkJCVBsYW4JICAg KnN1YnBsYW4gPSBsZmlyc3QobGMpOwogCkBAIC0xMjg5LDcgKzEyODksNyBAQCBwbGFuX2lzX2Rp c2FibGVkKFBsYW4gKnBsYW4pCiAJCSAqIGluY2x1ZGVzIGFueSBydW4tdGltZSBwcnVuZWQgY2hp bGRyZW4uICBJZ25vcmluZyB0aG9zZSBjb3VsZCBnaXZlCiAJCSAqIHVzIHRoZSBpbmNvcnJlY3Qg bnVtYmVyIG9mIGRpc2FibGVkIG5vZGVzLgogCQkgKi8KLQkJZm9yZWFjaChsYywgbWFwbGFuLT5t ZXJnZXBsYW5zKQorCQlmb3JlYWNoKGxjLCBtYXBsYW4tPmFwLnN1YnBsYW5zKQogCQl7CiAJCQlQ bGFuCSAgICpzdWJwbGFuID0gbGZpcnN0KGxjKTsKIApAQCAtMjMzNiwxMyArMjMzNiwxMyBAQCBF eHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCXN3aXRj aCAobm9kZVRhZyhwbGFuKSkKIAl7CiAJCWNhc2UgVF9BcHBlbmQ6Ci0JCQlFeHBsYWluTWlzc2lu Z01lbWJlcnMoKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hc19ucGxhbnMsCi0JCQkJCQkJ CSAgbGlzdF9sZW5ndGgoKChBcHBlbmQgKikgcGxhbiktPmFwcGVuZHBsYW5zKSwKKwkJCUV4cGxh aW5NaXNzaW5nTWVtYmVycygoKEFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFzLm5wbGFucywK KwkJCQkJCQkJICBsaXN0X2xlbmd0aCgoKEFwcGVuZCAqKSBwbGFuKS0+YXAuc3VicGxhbnMpLAog CQkJCQkJCQkgIGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfTWVyZ2VBcHBlbmQ6Ci0JCQlFeHBs YWluTWlzc2luZ01lbWJlcnMoKChNZXJnZUFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPm1zX25w bGFucywKLQkJCQkJCQkJICBsaXN0X2xlbmd0aCgoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5tZXJn ZXBsYW5zKSwKKwkJCUV4cGxhaW5NaXNzaW5nTWVtYmVycygoKE1lcmdlQXBwZW5kU3RhdGUgKikg cGxhbnN0YXRlKS0+bXMubnBsYW5zLAorCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKCgoTWVyZ2VBcHBl bmQgKikgcGxhbiktPmFwLnN1YnBsYW5zKSwKIAkJCQkJCQkJICBlcyk7CiAJCQlicmVhazsKIAkJ ZGVmYXVsdDoKQEAgLTIzODYsMTMgKzIzODYsMTMgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpw bGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCiAJewog CQljYXNlIFRfQXBwZW5kOgotCQkJRXhwbGFpbk1lbWJlck5vZGVzKCgoQXBwZW5kU3RhdGUgKikg cGxhbnN0YXRlKS0+YXBwZW5kcGxhbnMsCi0JCQkJCQkJICAgKChBcHBlbmRTdGF0ZSAqKSBwbGFu c3RhdGUpLT5hc19ucGxhbnMsCisJCQlFeHBsYWluTWVtYmVyTm9kZXMoKChBcHBlbmRTdGF0ZSAq KSBwbGFuc3RhdGUpLT5hcy5wbGFucywKKwkJCQkJCQkgICAoKEFwcGVuZFN0YXRlICopIHBsYW5z dGF0ZSktPmFzLm5wbGFucywKIAkJCQkJCQkgICBhbmNlc3RvcnMsIGVzKTsKIAkJCWJyZWFrOwog CQljYXNlIFRfTWVyZ2VBcHBlbmQ6Ci0JCQlFeHBsYWluTWVtYmVyTm9kZXMoKChNZXJnZUFwcGVu ZFN0YXRlICopIHBsYW5zdGF0ZSktPm1lcmdlcGxhbnMsCi0JCQkJCQkJICAgKChNZXJnZUFwcGVu ZFN0YXRlICopIHBsYW5zdGF0ZSktPm1zX25wbGFucywKKwkJCUV4cGxhaW5NZW1iZXJOb2Rlcygo KE1lcmdlQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+bXMucGxhbnMsCisJCQkJCQkJICAgKChN ZXJnZUFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPm1zLm5wbGFucywKIAkJCQkJCQkgICBhbmNl c3RvcnMsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfQml0bWFwQW5kOgpAQCAtMjYwNiw3ICsy NjA2LDcgQEAgc3RhdGljIHZvaWQKIHNob3dfbWVyZ2VfYXBwZW5kX2tleXMoTWVyZ2VBcHBlbmRT dGF0ZSAqbXN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJCSAgIEV4cGxhaW5TdGF0ZSAqZXMp CiB7Ci0JTWVyZ2VBcHBlbmQgKnBsYW4gPSAoTWVyZ2VBcHBlbmQgKikgbXN0YXRlLT5wcy5wbGFu OworCU1lcmdlQXBwZW5kICpwbGFuID0gKE1lcmdlQXBwZW5kICopIG1zdGF0ZS0+bXMucHMucGxh bjsKIAogCXNob3dfc29ydF9ncm91cF9rZXlzKChQbGFuU3RhdGUgKikgbXN0YXRlLCAiU29ydCBL ZXkiLAogCQkJCQkJIHBsYW4tPm51bUNvbHMsIDAsIHBsYW4tPnNvcnRDb2xJZHgsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L01ha2VmaWxlCmluZGV4IDExMTE4ZDBjZTAyLi42NmI2MmZjYTkyMSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFr ZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2Vm aWxlLmdsb2JhbAogT0JKUyA9IFwKIAlleGVjQW1pLm8gXAogCWV4ZWNBc3luYy5vIFwKKwlleGVj QXBwZW5kLm8gXAogCWV4ZWNDdXJyZW50Lm8gXAogCWV4ZWNFeHByLm8gXAogCWV4ZWNFeHBySW50 ZXJwLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCmluZGV4IDFkMGU4YWQ1N2I0Li41Yzg5NzA0OGJh MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCisrKyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYwpAQCAtNTM3LDcgKzUzNyw3IEBAIEV4ZWNTdXBwb3J0 c0JhY2t3YXJkU2NhbihQbGFuICpub2RlKQogCQkJCWlmICgoKEFwcGVuZCAqKSBub2RlKS0+bmFz eW5jcGxhbnMgPiAwKQogCQkJCQlyZXR1cm4gZmFsc2U7CiAKLQkJCQlmb3JlYWNoKGwsICgoQXBw ZW5kICopIG5vZGUpLT5hcHBlbmRwbGFucykKKwkJCQlmb3JlYWNoKGwsICgoQXBwZW5kICopIG5v ZGUpLT5hcC5zdWJwbGFucykKIAkJCQl7CiAJCQkJCWlmICghRXhlY1N1cHBvcnRzQmFja3dhcmRT Y2FuKChQbGFuICopIGxmaXJzdChsKSkpCiAJCQkJCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjQXBwZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYy NGZiMjA3ODgyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0Fw cGVuZC5jCkBAIC0wLDAgKzEsNDA5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBleGVj QXBwZW5kLmMKKyAqCSAgVGhpcyBjb2RlIHByb3ZpZGVzIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBl eGVjdXRpbmcgTWVyZ2VBcHBlbmQgYW5kIEFwcGVuZAorICoJICBub2Rlcy4KKyAqCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkg IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjdXRv ci5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBcHBlbmQuaCIKKyNpbmNsdWRlICJleGVjdXRv ci9leGVjQXN5bmMuaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjUGFydGl0aW9uLmgiCisjaW5j bHVkZSAic3RvcmFnZS9sYXRjaC5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvd2FpdGV2ZW50c2V0Lmgi CisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisKKyNkZWZpbmUgRVZFTlRfQlVGRkVSX1NJWkUJCQkx NgorCit2b2lkCitFeGVjSW5pdEFwcGVuZGVyKEFwcGVuZGVyU3RhdGUgKiBzdGF0ZSwKKwkJCQkJ CQkgQXBwZW5kZXIgKiBub2RlLAorCQkJCQkJCSBFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkgaW50 IGVmbGFncywKKwkJCQkJCQkgaW50IGZpcnN0X3BhcnRpYWxfcGxhbiwKKwkJCQkJCQkgaW50ICpm aXJzdF92YWxpZF9wYXJ0aWFsX3BsYW4pCit7CisJUGxhblN0YXRlICoqYXBwZW5kcGxhbnN0YXRl czsKKwljb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqYXBwZW5kb3BzOworCUJpdG1hcHNldCAgKnZh bGlkc3VicGxhbnM7CisJQml0bWFwc2V0ICAqYXN5bmNwbGFuczsKKwlpbnQJCQlucGxhbnM7CisJ aW50CQkJbmFzeW5jcGxhbnM7CisJaW50CQkJZmlyc3R2YWxpZDsKKwlpbnQJCQlpLAorCQkJCWo7 CisKKwkvKiBJZiBydW4tdGltZSBwYXJ0aXRpb24gcHJ1bmluZyBpcyBlbmFibGVkLCB0aGVuIHNl dCB0aGF0IHVwIG5vdyAqLworCWlmIChub2RlLT5wYXJ0X3BydW5lX2luZGV4ID49IDApCisJewor CQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOworCisJCS8qCisJCSAqIFNldCB1cCBw cnVuaW5nIGRhdGEgc3RydWN0dXJlLiAgVGhpcyBhbHNvIGluaXRpYWxpemVzIHRoZSBzZXQgb2YK KwkJICogc3VicGxhbnMgdG8gaW5pdGlhbGl6ZSAodmFsaWRzdWJwbGFucykgYnkgdGFraW5nIGlu dG8gYWNjb3VudCB0aGUKKwkJICogcmVzdWx0IG9mIHBlcmZvcm1pbmcgaW5pdGlhbCBwcnVuaW5n IGlmIGFueS4KKwkJICovCisJCXBydW5lc3RhdGUgPSBFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVu aW5nKCZzdGF0ZS0+cHMsCisJCQkJCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5vZGUtPnN1YnBsYW5z KSwKKwkJCQkJCQkJCQkJCSAgbm9kZS0+cGFydF9wcnVuZV9pbmRleCwKKwkJCQkJCQkJCQkJCSAg bm9kZS0+YXBwcmVsaWRzLAorCQkJCQkJCQkJCQkJICAmdmFsaWRzdWJwbGFucyk7CisJCXN0YXRl LT5wcnVuZV9zdGF0ZSA9IHBydW5lc3RhdGU7CisJCW5wbGFucyA9IGJtc19udW1fbWVtYmVycyh2 YWxpZHN1YnBsYW5zKTsKKworCQkvKgorCQkgKiBXaGVuIG5vIHJ1bi10aW1lIHBydW5pbmcgaXMg cmVxdWlyZWQgYW5kIHRoZXJlJ3MgYXQgbGVhc3Qgb25lCisJCSAqIHN1YnBsYW4sIHdlIGNhbiBm aWxsIGFzX3ZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCisJCSAqIGxhdGVy IGNhbGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KKwkJICovCisJCWlmICghcHJ1bmVz dGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKQorCQl7CisJCQlzdGF0ZS0+dmFsaWRf c3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOworCQkJc3RhdGUt PnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQl9CisJfQorCWVsc2UKKwl7CisJ CW5wbGFucyA9IGxpc3RfbGVuZ3RoKG5vZGUtPnN1YnBsYW5zKTsKKworCQkvKgorCQkgKiBXaGVu IHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIG5vdCBlbmFibGVkIHdlIGNhbiBqdXN0IG1h cmsgYWxsCisJCSAqIHN1YnBsYW5zIGFzIHZhbGlkOyB0aGV5IG11c3QgYWxzbyBhbGwgYmUgaW5p dGlhbGl6ZWQuCisJCSAqLworCQlBc3NlcnQobnBsYW5zID4gMCk7CisJCXN0YXRlLT52YWxpZF9z dWJwbGFucyA9IHZhbGlkc3VicGxhbnMgPQorCQkJYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxh bnMgLSAxKTsKKwkJc3RhdGUtPnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQlz dGF0ZS0+cHJ1bmVfc3RhdGUgPSBOVUxMOworCX0KKworCWFwcGVuZHBsYW5zdGF0ZXMgPSAoUGxh blN0YXRlICoqKSBwYWxsb2MobnBsYW5zICogc2l6ZW9mKFBsYW5TdGF0ZSAqKSk7CisKKwkvKgor CSAqIGNhbGwgRXhlY0luaXROb2RlIG9uIGVhY2ggb2YgdGhlIHZhbGlkIHBsYW5zIHRvIGJlIGV4 ZWN1dGVkIGFuZCBzYXZlCisJICogdGhlIHJlc3VsdHMgaW50byB0aGUgYXBwZW5kcGxhbnN0YXRl cyBhcnJheS4KKwkgKgorCSAqIFdoaWxlIGF0IGl0LCBmaW5kIG91dCB0aGUgZmlyc3QgdmFsaWQg cGFydGlhbCBwbGFuLgorCSAqLworCWogPSAwOworCWFzeW5jcGxhbnMgPSBOVUxMOworCW5hc3lu Y3BsYW5zID0gMDsKKwlmaXJzdHZhbGlkID0gbnBsYW5zOworCWkgPSAtMTsKKwl3aGlsZSAoKGkg PSBibXNfbmV4dF9tZW1iZXIodmFsaWRzdWJwbGFucywgaSkpID49IDApCisJeworCQlQbGFuCSAg ICppbml0Tm9kZSA9IChQbGFuICopIGxpc3RfbnRoKG5vZGUtPnN1YnBsYW5zLCBpKTsKKworCQkv KgorCQkgKiBSZWNvcmQgYXN5bmMgc3VicGxhbnMuICBXaGVuIGV4ZWN1dGluZyBFdmFsUGxhblF1 YWwsIHdlIHRyZWF0IHRoZW0KKwkJICogYXMgc3luYyBvbmVzOyBkb24ndCBkbyB0aGlzIHdoZW4g aW5pdGlhbGl6aW5nIGFuIEV2YWxQbGFuUXVhbCBwbGFuCisJCSAqIHRyZWUuCisJCSAqLworCQlp ZiAoaW5pdE5vZGUtPmFzeW5jX2NhcGFibGUgJiYgZXN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5V TEwpCisJCXsKKwkJCWFzeW5jcGxhbnMgPSBibXNfYWRkX21lbWJlcihhc3luY3BsYW5zLCBqKTsK KwkJCW5hc3luY3BsYW5zKys7CisJCX0KKworCQkvKgorCQkgKiBSZWNvcmQgdGhlIGxvd2VzdCBh cHBlbmRwbGFucyBpbmRleCB3aGljaCBpcyBhIHZhbGlkIHBhcnRpYWwgcGxhbi4KKwkJICovCisJ CWlmIChmaXJzdF92YWxpZF9wYXJ0aWFsX3BsYW4gJiYgaSA+PSBmaXJzdF9wYXJ0aWFsX3BsYW4g JiYgaiA8IGZpcnN0dmFsaWQpCisJCQlmaXJzdHZhbGlkID0gajsKKworCQlhcHBlbmRwbGFuc3Rh dGVzW2orK10gPSBFeGVjSW5pdE5vZGUoaW5pdE5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsKKwl9CisK KwlpZiAoZmlyc3RfdmFsaWRfcGFydGlhbF9wbGFuKQorCQkqZmlyc3RfdmFsaWRfcGFydGlhbF9w bGFuID0gZmlyc3R2YWxpZDsKKworCXN0YXRlLT5wbGFucyA9IGFwcGVuZHBsYW5zdGF0ZXM7CisJ c3RhdGUtPm5wbGFucyA9IG5wbGFuczsKKworCS8qCisJICogSW5pdGlhbGl6ZSBBcHBlbmQncyBy ZXN1bHQgdHVwbGUgdHlwZSBhbmQgc2xvdC4gIElmIHRoZSBjaGlsZCBwbGFucyBhbGwKKwkgKiBw cm9kdWNlIHRoZSBzYW1lIGZpeGVkIHNsb3QgdHlwZSwgd2UgY2FuIHVzZSB0aGF0IHNsb3QgdHlw ZTsgb3RoZXJ3aXNlCisJICogbWFrZSBhIHZpcnR1YWwgc2xvdC4gIChOb3RlIHRoYXQgdGhlIHJl c3VsdCBzbG90IGl0c2VsZiBpcyB1c2VkIG9ubHkgdG8KKwkgKiByZXR1cm4gYSBudWxsIHR1cGxl IGF0IGVuZCBvZiBleGVjdXRpb247IHJlYWwgdHVwbGVzIGFyZSByZXR1cm5lZCB0bworCSAqIHRo ZSBjYWxsZXIgaW4gdGhlIGNoaWxkcmVuJ3Mgb3duIHJlc3VsdCBzbG90cy4gIFdoYXQgd2UgYXJl IGRvaW5nIGhlcmUKKwkgKiBpcyBhbGxvd2luZyB0aGUgcGFyZW50IHBsYW4gbm9kZSB0byBvcHRp bWl6ZSBpZiB0aGUgQXBwZW5kIHdpbGwgcmV0dXJuCisJICogb25seSBvbmUga2luZCBvZiBzbG90 LikKKwkgKi8KKwlhcHBlbmRvcHMgPSBFeGVjR2V0Q29tbW9uU2xvdE9wcyhhcHBlbmRwbGFuc3Rh dGVzLCBqKTsKKwlpZiAoYXBwZW5kb3BzICE9IE5VTEwpCisJeworCQlFeGVjSW5pdFJlc3VsdFR1 cGxlU2xvdFRMKCZzdGF0ZS0+cHMsIGFwcGVuZG9wcyk7CisJfQorCWVsc2UKKwl7CisJCUV4ZWNJ bml0UmVzdWx0VHVwbGVTbG90VEwoJnN0YXRlLT5wcywgJlRUU09wc1ZpcnR1YWwpOworCQkvKiBz aG93IHRoYXQgdGhlIG91dHB1dCBzbG90IHR5cGUgaXMgbm90IGZpeGVkICovCisJCXN0YXRlLT5w cy5yZXN1bHRvcHNzZXQgPSB0cnVlOworCQlzdGF0ZS0+cHMucmVzdWx0b3BzZml4ZWQgPSBmYWxz ZTsKKwl9CisKKwkvKiBJbml0aWFsaXplIGFzeW5jIHN0YXRlICovCisJc3RhdGUtPmFzeW5jcGxh bnMgPSBhc3luY3BsYW5zOworCXN0YXRlLT5uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5zOworCXN0 YXRlLT5hc3luY3JlcXVlc3RzID0gTlVMTDsKKwlzdGF0ZS0+YXN5bmNyZXN1bHRzID0gTlVMTDsK KwlzdGF0ZS0+bmVlZHJlcXVlc3QgPSBOVUxMOworCXN0YXRlLT5ldmVudHNldCA9IE5VTEw7CisJ c3RhdGUtPnZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOworCisJaWYgKG5hc3luY3BsYW5zID4gMCkK Kwl7CisJCXN0YXRlLT5hc3luY3JlcXVlc3RzID0gKEFzeW5jUmVxdWVzdCAqKikKKwkJCXBhbGxv YzAobnBsYW5zICogc2l6ZW9mKEFzeW5jUmVxdWVzdCAqKSk7CisKKwkJaSA9IC0xOworCQl3aGls ZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoYXN5bmNwbGFucywgaSkpID49IDApCisJCXsKKwkJCUFz eW5jUmVxdWVzdCAqYXJlcTsKKworCQkJYXJlcSA9IHBhbGxvY19vYmplY3QoQXN5bmNSZXF1ZXN0 KTsKKwkJCWFyZXEtPnJlcXVlc3RvciA9IChQbGFuU3RhdGUgKikgc3RhdGU7CisJCQlhcmVxLT5y ZXF1ZXN0ZWUgPSBhcHBlbmRwbGFuc3RhdGVzW2ldOworCQkJYXJlcS0+cmVxdWVzdF9pbmRleCA9 IGk7CisJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7CisJCQlhcmVxLT5yZXF1ZXN0 X2NvbXBsZXRlID0gZmFsc2U7CisJCQlhcmVxLT5yZXN1bHQgPSBOVUxMOworCisJCQlzdGF0ZS0+ YXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7CisJCX0KKworCQkvKgorCQkgKiBBcHBlbmRTdGF0ZSBh bmQgTWVyZ2VBcHBlbmRTdGF0ZSBoYXZlIHNsaWdodGx5IGRpZmZlcmVudCBhbGxvY2F0aW9uCisJ CSAqIHNpemVzIGZvciBhc3luY3Jlc3VsdHMgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIGJ1dCB3ZSB1 bmlmeSB0byB0aGUKKwkJICogbGFyZ2VyIHJlcXVpcmVtZW50IG9yIHNwZWNpZmljIG5wbGFucyBp ZiByZXF1aXJlZC4KKwkJICovCisJCXN0YXRlLT5hc3luY3Jlc3VsdHMgPSAoVHVwbGVUYWJsZVNs b3QgKiopCisJCQlwYWxsb2MwKG5wbGFucyAqIHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSk7CisJ fQorCisJLyoKKwkgKiBNaXNjZWxsYW5lb3VzIGluaXRpYWxpemF0aW9uCisJICovCisJc3RhdGUt PnBzLnBzX1Byb2pJbmZvID0gTlVMTDsKK30KKwordm9pZAorRXhlY1JlU2NhbkFwcGVuZGVyKEFw cGVuZGVyU3RhdGUgKm5vZGUpCit7CisJaW50CQkJaTsKKwlpbnQJCQluYXN5bmNwbGFucyA9IG5v ZGUtPm5hc3luY3BsYW5zOworCisJLyoKKwkgKiBJZiBhbnkgUEFSQU1fRVhFQyBQYXJhbXMgdXNl ZCBpbiBwcnVuaW5nIGV4cHJlc3Npb25zIGhhdmUgY2hhbmdlZCwgdGhlbgorCSAqIHdlJ2QgYmV0 dGVyIHVuc2V0IHRoZSB2YWxpZCBzdWJwbGFucyBzbyB0aGF0IHRoZXkgYXJlIHJlc2VsZWN0ZWQg Zm9yCisJICogdGhlIG5ldyBwYXJhbWV0ZXIgdmFsdWVzLgorCSAqLworCWlmIChub2RlLT5wcnVu ZV9zdGF0ZSAmJgorCQlibXNfb3ZlcmxhcChub2RlLT5wcy5jaGdQYXJhbSwKKwkJCQkJbm9kZS0+ cHJ1bmVfc3RhdGUtPmV4ZWNwYXJhbWlkcykpCisJeworCQlub2RlLT52YWxpZF9zdWJwbGFuc19p ZGVudGlmaWVkID0gZmFsc2U7CisJCWJtc19mcmVlKG5vZGUtPnZhbGlkX3N1YnBsYW5zKTsKKwkJ bm9kZS0+dmFsaWRfc3VicGxhbnMgPSBOVUxMOworCQlibXNfZnJlZShub2RlLT52YWxpZF9hc3lu Y3BsYW5zKTsKKwkJbm9kZS0+dmFsaWRfYXN5bmNwbGFucyA9IE5VTEw7CisJfQorCisJZm9yIChp ID0gMDsgaSA8IG5vZGUtPm5wbGFuczsgaSsrKQorCXsKKwkJUGxhblN0YXRlICAqc3Vibm9kZSA9 IG5vZGUtPnBsYW5zW2ldOworCisJCS8qCisJCSAqIEV4ZWNSZVNjYW4gZG9lc24ndCBrbm93IGFi b3V0IG15IHN1YnBsYW5zLCBzbyBJIGhhdmUgdG8gZG8KKwkJICogY2hhbmdlZC1wYXJhbWV0ZXIg c2lnbmFsaW5nIG15c2VsZi4KKwkJICovCisJCWlmIChub2RlLT5wcy5jaGdQYXJhbSAhPSBOVUxM KQorCQkJVXBkYXRlQ2hhbmdlZFBhcmFtU2V0KHN1Ym5vZGUsIG5vZGUtPnBzLmNoZ1BhcmFtKTsK KworCQkvKgorCQkgKiBJZiBjaGdQYXJhbSBvZiBzdWJub2RlIGlzIG5vdCBudWxsIHRoZW4gcGxh biB3aWxsIGJlIHJlLXNjYW5uZWQgYnkKKwkJICogZmlyc3QgRXhlY1Byb2NOb2RlLgorCQkgKi8K KwkJaWYgKHN1Ym5vZGUtPmNoZ1BhcmFtID09IE5VTEwpCisJCQlFeGVjUmVTY2FuKHN1Ym5vZGUp OworCX0KKworCS8qIFJlc2V0IGFzeW5jIHN0YXRlICovCisJaWYgKG5hc3luY3BsYW5zID4gMCkK Kwl7CisJCWkgPSAtMTsKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzeW5j cGxhbnMsIGkpKSA+PSAwKQorCQl7CisJCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hc3lu Y3JlcXVlc3RzW2ldOworCisJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7CisJCQlh cmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7CisJCQlhcmVxLT5yZXN1bHQgPSBOVUxMOwor CQl9CisKKwkJbm9kZS0+bmVlZHJlcXVlc3QgPSBOVUxMOworCX0KK30KKwordm9pZAorRXhlY0Fw cGVuZGVyQXN5bmNFdmVudFdhaXQoQXBwZW5kZXJTdGF0ZSAqIG5vZGUsIGludCB0aW1lb3V0LCB1 aW50MzIgd2FpdF9ldmVudF9pbmZvKQoreworCWludAkJCW5ldmVudHMgPSBub2RlLT5uYXN5bmNw bGFucyArIDI7IC8qIG9uZSBmb3IgUE0gZGVhdGggYW5kCisJCQkJCQkJCQkJCQkJICogb25lIGZv ciBsYXRjaCAqLworCWludAkJCW5vY2N1cnJlZDsKKwlpbnQgaTsKKwlXYWl0RXZlbnQJb2NjdXJy ZWRfZXZlbnRbRVZFTlRfQlVGRkVSX1NJWkVdOworCisJQXNzZXJ0KG5vZGUtPmV2ZW50c2V0ID09 IE5VTEwpOworCisJbm9kZS0+ZXZlbnRzZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVudFJl c291cmNlT3duZXIsIG5ldmVudHMpOworCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPmV2ZW50c2V0 LCBXTF9FWElUX09OX1BNX0RFQVRILCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIE5VTEwsIE5V TEwpOworCisJLyogR2l2ZSBlYWNoIHdhaXRpbmcgc3VicGxhbiBhIGNoYW5jZSB0byBhZGQgYW4g ZXZlbnQuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5h c3luY3BsYW5zLCBpKSkgPj0gMCkKKwl7CisJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPmFz eW5jcmVxdWVzdHNbaV07CisKKwkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpCisJCQlFeGVj QXN5bmNDb25maWd1cmVXYWl0KGFyZXEpOworCX0KKworCS8qCisJICogTm8gbmVlZCBmb3IgZnVy dGhlciBwcm9jZXNzaW5nIGlmIG5vbmUgb2YgdGhlIHN1YnBsYW5zIGNvbmZpZ3VyZWQgYW55CisJ ICogZXZlbnRzLgorCSAqLworCWlmIChHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhub2RlLT5l dmVudHNldCkgPT0gMSkKKwl7CisJCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+ZXZlbnRzZXQpOwor CQlub2RlLT5ldmVudHNldCA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEFkZCB0 aGUgcHJvY2VzcyBsYXRjaCB0byB0aGUgc2V0LCBzbyB0aGF0IHdlIHdha2UgdXAgdG8gcHJvY2Vz cyB0aGUKKwkgKiBzdGFuZGFyZCBpbnRlcnJ1cHRzIHdpdGggQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KS4KKwkgKgorCSAqIE5PVEU6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGl0J3MgaW1wb3J0YW50 IHRoYXQgdGhpcyBpcyBhZGRlZCB0byB0aGUKKwkgKiBXYWl0RXZlbnRTZXQgYWZ0ZXIgdGhlIEV4 ZWNBc3luY0NvbmZpZ3VyZVdhaXQoKSBjYWxscy4gIE5hbWVseSwKKwkgKiBwb3N0Z3Jlc19mZHcg Y2FsbHMgIkdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNldCkgPT0gMSIgdG8gY2hlY2sgaWYK KwkgKiBhbnkgb3RoZXIgZXZlbnRzIGFyZSBpbiB0aGUgc2V0LiAgVGhhdCdzIGEgcG9vciBkZXNp Z24sIGl0J3MKKwkgKiBxdWVzdGlvbmFibGUgZm9yIHBvc3RncmVzX2ZkdyB0byBiZSBkb2luZyB0 aGF0IGluIHRoZSBmaXJzdCBwbGFjZSwgYnV0CisJICogd2UgY2Fubm90IGNoYW5nZSBpdCBub3cu ICBUaGUgcGF0dGVybiBoYXMgcG9zc2libHkgYmVlbiBjb3BpZWQgdG8gb3RoZXIKKwkgKiBleHRl bnNpb25zIHRvby4KKwkgKi8KKwlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5ldmVudHNldCwgV0xf TEFUQ0hfU0VULCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIE15TGF0Y2gsIE5VTEwpOworCisJ LyogUmV0dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJWkUgZXZlbnRzIGluIG9uZSBjYWxsLiAq LworCWlmIChuZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJWkUpCisJCW5ldmVudHMgPSBFVkVOVF9C VUZGRVJfU0laRTsKKworCS8qCisJICogV2FpdCB1bnRpbCBhdCBsZWFzdCBvbmUgZXZlbnQgb2Nj dXJzLgorCSAqCisJICogWFhYOiBNYWtlIHRpbWVvdXQgYW5kIHdhaXQgZXZlbnQgY29uZmlndXJl ZAorCSAqLworCW5vY2N1cnJlZCA9IFdhaXRFdmVudFNldFdhaXQobm9kZS0+ZXZlbnRzZXQsIHRp bWVvdXQgLCBvY2N1cnJlZF9ldmVudCwKKwkJCQkJCQkJIG5ldmVudHMsIHdhaXRfZXZlbnRfaW5m byk7CisKKworCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+ZXZlbnRzZXQpOworCW5vZGUtPmV2ZW50 c2V0ID0gTlVMTDsKKwlpZiAobm9jY3VycmVkID09IDApCisJCXJldHVybjsKKworCisJLyogRGVs aXZlciBub3RpZmljYXRpb25zLiAqLworCWZvciAoaSA9IDA7IGkgPCBub2NjdXJyZWQ7IGkrKykK Kwl7CisJCVdhaXRFdmVudCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07CisKKwkJLyoKKwkJICog RWFjaCB3YWl0aW5nIHN1YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJlZCBpdHMgd2FpdCBldmVu dCB3aXRoCisJCSAqIHVzZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0cyBBc3luY1JlcXVlc3Qu CisJCSAqLworCQlpZiAoKHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFEQUJMRSkgIT0gMCkKKwkJ eworCQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAqKSB3LT51c2VyX2RhdGE7 CisKKwkJCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQorCQkJeworCQkJCS8qCisJCQkJICog TWFyayBpdCBhcyBubyBsb25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAgV2UgbXVzdCBkbyB0aGlz CisJCQkJICogYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBpbiBjYXNlIHRoZSBjYWxs YmFjayByZXNldHMKKwkJCQkgKiB0aGUgZmxhZy4KKwkJCQkgKi8KKwkJCQlhcmVxLT5jYWxsYmFj a19wZW5kaW5nID0gZmFsc2U7CisKKwkJCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCisJCQkJ RXhlY0FzeW5jTm90aWZ5KGFyZXEpOworCQkJfQorCQl9CisKKwkJLyogSGFuZGxlIHN0YW5kYXJk IGludGVycnVwdHMgKi8KKwkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQpICE9IDApCisJ CXsKKwkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwor CQl9CisJfQorfQorCit2b2lkCitFeGVjQXBwZW5kZXJBc3luY0JlZ2luKEFwcGVuZGVyU3RhdGUg KiBub2RlKQoreworCWludAkJCWk7CisKKwkvKiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0 ZWQgYnkgYXN5bmMtYXdhcmUgQXBwZW5kcy4gKi8KKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7CisKKwkvKiBXZSBzaG91bGQgbmV2 ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5zICovCisJQXNzZXJ0KG5vZGUt Pm5wbGFucyA+IDApOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJl IGFyZSBubyBhc3luYyBzdWJwbGFucy4gKi8KKwlBc3NlcnQobm9kZS0+bmFzeW5jcGxhbnMgPiAw KTsKKworCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSB2YWxpZCBhc3luYyBzdWJw bGFucy4gKi8KKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPnZh bGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQorCXsKKwkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9k ZS0+YXN5bmNyZXF1ZXN0c1tpXTsKKworCQlBc3NlcnQoYXJlcS0+cmVxdWVzdF9pbmRleCA9PSBp KTsKKwkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKKworCQkvKiBEbyB0aGUgYWN0 dWFsIHdvcmsuICovCisJCUV4ZWNBc3luY1JlcXVlc3QoYXJlcSk7CisJfQorfQorCit2b2lkCitF eGVjRW5kQXBwZW5kZXIoQXBwZW5kZXJTdGF0ZSAqbm9kZSkKK3sKKwlQbGFuU3RhdGUgKiptZXJn ZXBsYW5zOworCWludAkJCW5wbGFuczsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBnZXQgaW5mb3Jt YXRpb24gZnJvbSB0aGUgbm9kZQorCSAqLworCW1lcmdlcGxhbnMgPSBub2RlLT5wbGFuczsKKwlu cGxhbnMgPSBub2RlLT5ucGxhbnM7CisKKwkvKgorCSAqIHNodXQgZG93biBlYWNoIG9mIHRoZSBz dWJzY2FucworCSAqLworCWZvciAoaSA9IDA7IGkgPCBucGxhbnM7IGkrKykKKwkJRXhlY0VuZE5v ZGUobWVyZ2VwbGFuc1tpXSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjQ3VycmVudC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0N1cnJlbnQuYwppbmRleCAz YmZkYzAyMzBmZi4uZThjZjJlYWQ4YTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNDdXJyZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0N1cnJlbnQuYwpA QCAtMzc1LDkgKzM3NSw5IEBAIHNlYXJjaF9wbGFuX3RyZWUoUGxhblN0YXRlICpub2RlLCBPaWQg dGFibGVfb2lkLAogCQkJCUFwcGVuZFN0YXRlICphc3RhdGUgPSAoQXBwZW5kU3RhdGUgKikgbm9k ZTsKIAkJCQlpbnQJCQlpOwogCi0JCQkJZm9yIChpID0gMDsgaSA8IGFzdGF0ZS0+YXNfbnBsYW5z OyBpKyspCisJCQkJZm9yIChpID0gMDsgaSA8IGFzdGF0ZS0+YXMubnBsYW5zOyBpKyspCiAJCQkJ ewotCQkJCQlTY2FuU3RhdGUgICplbGVtID0gc2VhcmNoX3BsYW5fdHJlZShhc3RhdGUtPmFwcGVu ZHBsYW5zW2ldLAorCQkJCQlTY2FuU3RhdGUgICplbGVtID0gc2VhcmNoX3BsYW5fdHJlZShhc3Rh dGUtPmFzLnBsYW5zW2ldLAogCQkJCQkJCQkJCQkJCQl0YWJsZV9vaWQsCiAJCQkJCQkJCQkJCQkJ CXBlbmRpbmdfcmVzY2FuKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1Byb2Nub2RlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYwppbmRleCBm NWY5Y2ZiZWVhZC4uM2ViMWRlMWNkMzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNQcm9jbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5j CkBAIC05MTAsOCArOTEwLDggQEAgRXhlY1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRl ZCwgUGxhblN0YXRlICpjaGlsZF9ub2RlKQogCQlBcHBlbmRTdGF0ZSAqYVN0YXRlID0gKEFwcGVu ZFN0YXRlICopIGNoaWxkX25vZGU7CiAJCWludAkJCWk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGFT dGF0ZS0+YXNfbnBsYW5zOyBpKyspCi0JCQlFeGVjU2V0VHVwbGVCb3VuZCh0dXBsZXNfbmVlZGVk LCBhU3RhdGUtPmFwcGVuZHBsYW5zW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IGFTdGF0ZS0+YXMu bnBsYW5zOyBpKyspCisJCQlFeGVjU2V0VHVwbGVCb3VuZCh0dXBsZXNfbmVlZGVkLCBhU3RhdGUt PmFzLnBsYW5zW2ldKTsKIAl9CiAJZWxzZSBpZiAoSXNBKGNoaWxkX25vZGUsIE1lcmdlQXBwZW5k U3RhdGUpKQogCXsKQEAgLTkyMyw4ICs5MjMsOCBAQCBFeGVjU2V0VHVwbGVCb3VuZChpbnQ2NCB0 dXBsZXNfbmVlZGVkLCBQbGFuU3RhdGUgKmNoaWxkX25vZGUpCiAJCU1lcmdlQXBwZW5kU3RhdGUg Km1hU3RhdGUgPSAoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBjaGlsZF9ub2RlOwogCQlpbnQJCQlpOwog Ci0JCWZvciAoaSA9IDA7IGkgPCBtYVN0YXRlLT5tc19ucGxhbnM7IGkrKykKLQkJCUV4ZWNTZXRU dXBsZUJvdW5kKHR1cGxlc19uZWVkZWQsIG1hU3RhdGUtPm1lcmdlcGxhbnNbaV0pOworCQlmb3Ig KGkgPSAwOyBpIDwgbWFTdGF0ZS0+bXMubnBsYW5zOyBpKyspCisJCQlFeGVjU2V0VHVwbGVCb3Vu ZCh0dXBsZXNfbmVlZGVkLCBtYVN0YXRlLT5tcy5wbGFuc1tpXSk7CiAJfQogCWVsc2UgaWYgKElz QShjaGlsZF9ub2RlLCBSZXN1bHRTdGF0ZSkpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9leGVjdXRvci9tZXNvbi5idWlsZApp bmRleCAyY2VhNDFmODc3MS4uYjVjYjcxMGE1OWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21lc29uLmJ1aWxk CkBAIC0zLDYgKzMsNyBAQAogYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnZXhlY0FtaS5j JywKICAgJ2V4ZWNBc3luYy5jJywKKyAgJ2V4ZWNBcHBlbmQuYycsCiAgICdleGVjQ3VycmVudC5j JywKICAgJ2V4ZWNFeHByLmMnLAogICAnZXhlY0V4cHJJbnRlcnAuYycsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlQXBwZW5kLmMKaW5kZXggZGZiYzdiNTEwYzQuLjg3M2U0Y2I1NTllIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUFwcGVuZC5jCkBAIC01NywxMyArNTcsMTMgQEAKIAogI2luY2x1ZGUgInBvc3RncmVz LmgiCiAKKyNpbmNsdWRlICJleGVjdXRvci9leGVjQXBwZW5kLmgiCiAjaW5jbHVkZSAiZXhlY3V0 b3IvZXhlY0FzeW5jLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgogI2lu Y2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFwcGVu ZC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgotI2luY2x1 ZGUgInN0b3JhZ2UvbGF0Y2guaCIKIAogLyogU2hhcmVkIHN0YXRlIGZvciBwYXJhbGxlbC1hd2Fy ZSBBcHBlbmQuICovCiBzdHJ1Y3QgUGFyYWxsZWxBcHBlbmRTdGF0ZQpAQCAtMTA5LDE1ICsxMDks NiBAQCBBcHBlbmRTdGF0ZSAqCiBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5vZGUsIEVTdGF0ZSAq ZXN0YXRlLCBpbnQgZWZsYWdzKQogewogCUFwcGVuZFN0YXRlICphcHBlbmRzdGF0ZSA9IG1ha2VO b2RlKEFwcGVuZFN0YXRlKTsKLQlQbGFuU3RhdGUgKiphcHBlbmRwbGFuc3RhdGVzOwotCWNvbnN0 IFR1cGxlVGFibGVTbG90T3BzICphcHBlbmRvcHM7Ci0JQml0bWFwc2V0ICAqdmFsaWRzdWJwbGFu czsKLQlCaXRtYXBzZXQgICphc3luY3BsYW5zOwotCWludAkJCW5wbGFuczsKLQlpbnQJCQluYXN5 bmNwbGFuczsKLQlpbnQJCQlmaXJzdHZhbGlkOwotCWludAkJCWksCi0JCQkJajsKIAogCS8qIGNo ZWNrIGZvciB1bnN1cHBvcnRlZCBmbGFncyAqLwogCUFzc2VydCghKGVmbGFncyAmIEVYRUNfRkxB R19NQVJLKSk7CkBAIC0xMjUsMTY3ICsxMTYsMjcgQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpu b2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkvKgogCSAqIGNyZWF0ZSBuZXcgQXBw ZW5kU3RhdGUgZm9yIG91ciBhcHBlbmQgbm9kZQogCSAqLwotCWFwcGVuZHN0YXRlLT5wcy5wbGFu ID0gKFBsYW4gKikgbm9kZTsKLQlhcHBlbmRzdGF0ZS0+cHMuc3RhdGUgPSBlc3RhdGU7Ci0JYXBw ZW5kc3RhdGUtPnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNBcHBlbmQ7CisJYXBwZW5kc3RhdGUtPmFz LnBzLnBsYW4gPSAoUGxhbiAqKSBub2RlOworCWFwcGVuZHN0YXRlLT5hcy5wcy5zdGF0ZSA9IGVz dGF0ZTsKKwlhcHBlbmRzdGF0ZS0+YXMucHMuRXhlY1Byb2NOb2RlID0gRXhlY0FwcGVuZDsKIAog CS8qIExldCBjaG9vc2VfbmV4dF9zdWJwbGFuXyogZnVuY3Rpb24gaGFuZGxlIHNldHRpbmcgdGhl IGZpcnN0IHN1YnBsYW4gKi8KIAlhcHBlbmRzdGF0ZS0+YXNfd2hpY2hwbGFuID0gSU5WQUxJRF9T VUJQTEFOX0lOREVYOwogCWFwcGVuZHN0YXRlLT5hc19zeW5jZG9uZSA9IGZhbHNlOwogCWFwcGVu ZHN0YXRlLT5hc19iZWd1biA9IGZhbHNlOwogCi0JLyogSWYgcnVuLXRpbWUgcGFydGl0aW9uIHBy dW5pbmcgaXMgZW5hYmxlZCwgdGhlbiBzZXQgdGhhdCB1cCBub3cgKi8KLQlpZiAobm9kZS0+cGFy dF9wcnVuZV9pbmRleCA+PSAwKQotCXsKLQkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0 ZTsKLQotCQkvKgotCQkgKiBTZXQgdXAgcHJ1bmluZyBkYXRhIHN0cnVjdHVyZS4gIFRoaXMgYWxz byBpbml0aWFsaXplcyB0aGUgc2V0IG9mCi0JCSAqIHN1YnBsYW5zIHRvIGluaXRpYWxpemUgKHZh bGlkc3VicGxhbnMpIGJ5IHRha2luZyBpbnRvIGFjY291bnQgdGhlCi0JCSAqIHJlc3VsdCBvZiBw ZXJmb3JtaW5nIGluaXRpYWwgcHJ1bmluZyBpZiBhbnkuCi0JCSAqLwotCQlwcnVuZXN0YXRlID0g RXhlY0luaXRQYXJ0aXRpb25FeGVjUHJ1bmluZygmYXBwZW5kc3RhdGUtPnBzLAotCQkJCQkJCQkJ CQkJICBsaXN0X2xlbmd0aChub2RlLT5hcHBlbmRwbGFucyksCi0JCQkJCQkJCQkJCQkgIG5vZGUt PnBhcnRfcHJ1bmVfaW5kZXgsCi0JCQkJCQkJCQkJCQkgIG5vZGUtPmFwcHJlbGlkcywKLQkJCQkJ CQkJCQkJCSAgJnZhbGlkc3VicGxhbnMpOwotCQlhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUg PSBwcnVuZXN0YXRlOwotCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7 Ci0KLQkJLyoKLQkJICogV2hlbiBubyBydW4tdGltZSBwcnVuaW5nIGlzIHJlcXVpcmVkIGFuZCB0 aGVyZSdzIGF0IGxlYXN0IG9uZQotCQkgKiBzdWJwbGFuLCB3ZSBjYW4gZmlsbCBhc192YWxpZF9z dWJwbGFucyBpbW1lZGlhdGVseSwgcHJldmVudGluZwotCQkgKiBsYXRlciBjYWxscyB0byBFeGVj RmluZE1hdGNoaW5nU3ViUGxhbnMuCi0JCSAqLwotCQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNf cHJ1bmUgJiYgbnBsYW5zID4gMCkKLQkJewotCQkJYXBwZW5kc3RhdGUtPmFzX3ZhbGlkX3N1YnBs YW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKLQkJCWFwcGVuZHN0YXRl LT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKLQkJfQotCX0KLQllbHNlCi0J ewotCQlucGxhbnMgPSBsaXN0X2xlbmd0aChub2RlLT5hcHBlbmRwbGFucyk7Ci0KLQkJLyoKLQkJ ICogV2hlbiBydW4tdGltZSBwYXJ0aXRpb24gcHJ1bmluZyBpcyBub3QgZW5hYmxlZCB3ZSBjYW4g anVzdCBtYXJrIGFsbAotCQkgKiBzdWJwbGFucyBhcyB2YWxpZDsgdGhleSBtdXN0IGFsc28gYWxs IGJlIGluaXRpYWxpemVkLgotCQkgKi8KLQkJQXNzZXJ0KG5wbGFucyA+IDApOwotCQlhcHBlbmRz dGF0ZS0+YXNfdmFsaWRfc3VicGxhbnMgPSB2YWxpZHN1YnBsYW5zID0KLQkJCWJtc19hZGRfcmFu Z2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7Ci0JCWFwcGVuZHN0YXRlLT5hc192YWxpZF9zdWJwbGFu c19pZGVudGlmaWVkID0gdHJ1ZTsKLQkJYXBwZW5kc3RhdGUtPmFzX3BydW5lX3N0YXRlID0gTlVM TDsKLQl9Ci0KLQlhcHBlbmRwbGFuc3RhdGVzID0gKFBsYW5TdGF0ZSAqKikgcGFsbG9jKG5wbGFu cyAqCi0JCQkJCQkJCQkJCSBzaXplb2YoUGxhblN0YXRlICopKTsKLQotCS8qCi0JICogY2FsbCBF eGVjSW5pdE5vZGUgb24gZWFjaCBvZiB0aGUgdmFsaWQgcGxhbnMgdG8gYmUgZXhlY3V0ZWQgYW5k IHNhdmUKLQkgKiB0aGUgcmVzdWx0cyBpbnRvIHRoZSBhcHBlbmRwbGFuc3RhdGVzIGFycmF5Lgot CSAqCi0JICogV2hpbGUgYXQgaXQsIGZpbmQgb3V0IHRoZSBmaXJzdCB2YWxpZCBwYXJ0aWFsIHBs YW4uCi0JICovCi0JaiA9IDA7Ci0JYXN5bmNwbGFucyA9IE5VTEw7Ci0JbmFzeW5jcGxhbnMgPSAw OwotCWZpcnN0dmFsaWQgPSBucGxhbnM7Ci0JaSA9IC0xOwotCXdoaWxlICgoaSA9IGJtc19uZXh0 X21lbWJlcih2YWxpZHN1YnBsYW5zLCBpKSkgPj0gMCkKLQl7Ci0JCVBsYW4JICAgKmluaXROb2Rl ID0gKFBsYW4gKikgbGlzdF9udGgobm9kZS0+YXBwZW5kcGxhbnMsIGkpOwotCi0JCS8qCi0JCSAq IFJlY29yZCBhc3luYyBzdWJwbGFucy4gIFdoZW4gZXhlY3V0aW5nIEV2YWxQbGFuUXVhbCwgd2Ug dHJlYXQgdGhlbQotCQkgKiBhcyBzeW5jIG9uZXM7IGRvbid0IGRvIHRoaXMgd2hlbiBpbml0aWFs aXppbmcgYW4gRXZhbFBsYW5RdWFsIHBsYW4KLQkJICogdHJlZS4KLQkJICovCi0JCWlmIChpbml0 Tm9kZS0+YXN5bmNfY2FwYWJsZSAmJiBlc3RhdGUtPmVzX2VwcV9hY3RpdmUgPT0gTlVMTCkKLQkJ ewotCQkJYXN5bmNwbGFucyA9IGJtc19hZGRfbWVtYmVyKGFzeW5jcGxhbnMsIGopOwotCQkJbmFz eW5jcGxhbnMrKzsKLQkJfQotCi0JCS8qCi0JCSAqIFJlY29yZCB0aGUgbG93ZXN0IGFwcGVuZHBs YW5zIGluZGV4IHdoaWNoIGlzIGEgdmFsaWQgcGFydGlhbCBwbGFuLgotCQkgKi8KLQkJaWYgKGkg Pj0gbm9kZS0+Zmlyc3RfcGFydGlhbF9wbGFuICYmIGogPCBmaXJzdHZhbGlkKQotCQkJZmlyc3R2 YWxpZCA9IGo7Ci0KLQkJYXBwZW5kcGxhbnN0YXRlc1tqKytdID0gRXhlY0luaXROb2RlKGluaXRO b2RlLCBlc3RhdGUsIGVmbGFncyk7Ci0JfQotCi0JYXBwZW5kc3RhdGUtPmFzX2ZpcnN0X3BhcnRp YWxfcGxhbiA9IGZpcnN0dmFsaWQ7Ci0JYXBwZW5kc3RhdGUtPmFwcGVuZHBsYW5zID0gYXBwZW5k cGxhbnN0YXRlczsKLQlhcHBlbmRzdGF0ZS0+YXNfbnBsYW5zID0gbnBsYW5zOworCS8qIEluaXRp YWxpemUgY29tbW9uIGZpZWxkcyAqLworCUV4ZWNJbml0QXBwZW5kZXIoJmFwcGVuZHN0YXRlLT5h cywKKwkJCQkJICZub2RlLT5hcCwKKwkJCQkJIGVzdGF0ZSwKKwkJCQkJIGVmbGFncywKKwkJCQkJ IG5vZGUtPmZpcnN0X3BhcnRpYWxfcGxhbiwKKwkJCQkJICZhcHBlbmRzdGF0ZS0+YXNfZmlyc3Rf cGFydGlhbF9wbGFuKTsKIAotCS8qCi0JICogSW5pdGlhbGl6ZSBBcHBlbmQncyByZXN1bHQgdHVw bGUgdHlwZSBhbmQgc2xvdC4gIElmIHRoZSBjaGlsZCBwbGFucyBhbGwKLQkgKiBwcm9kdWNlIHRo ZSBzYW1lIGZpeGVkIHNsb3QgdHlwZSwgd2UgY2FuIHVzZSB0aGF0IHNsb3QgdHlwZTsgb3RoZXJ3 aXNlCi0JICogbWFrZSBhIHZpcnR1YWwgc2xvdC4gIChOb3RlIHRoYXQgdGhlIHJlc3VsdCBzbG90 IGl0c2VsZiBpcyB1c2VkIG9ubHkgdG8KLQkgKiByZXR1cm4gYSBudWxsIHR1cGxlIGF0IGVuZCBv ZiBleGVjdXRpb247IHJlYWwgdHVwbGVzIGFyZSByZXR1cm5lZCB0bwotCSAqIHRoZSBjYWxsZXIg aW4gdGhlIGNoaWxkcmVuJ3Mgb3duIHJlc3VsdCBzbG90cy4gIFdoYXQgd2UgYXJlIGRvaW5nIGhl cmUKLQkgKiBpcyBhbGxvd2luZyB0aGUgcGFyZW50IHBsYW4gbm9kZSB0byBvcHRpbWl6ZSBpZiB0 aGUgQXBwZW5kIHdpbGwgcmV0dXJuCi0JICogb25seSBvbmUga2luZCBvZiBzbG90LikKLQkgKi8K LQlhcHBlbmRvcHMgPSBFeGVjR2V0Q29tbW9uU2xvdE9wcyhhcHBlbmRwbGFuc3RhdGVzLCBqKTsK LQlpZiAoYXBwZW5kb3BzICE9IE5VTEwpCi0JewotCQlFeGVjSW5pdFJlc3VsdFR1cGxlU2xvdFRM KCZhcHBlbmRzdGF0ZS0+cHMsIGFwcGVuZG9wcyk7Ci0JfQotCWVsc2UKLQl7Ci0JCUV4ZWNJbml0 UmVzdWx0VHVwbGVTbG90VEwoJmFwcGVuZHN0YXRlLT5wcywgJlRUU09wc1ZpcnR1YWwpOwotCQkv KiBzaG93IHRoYXQgdGhlIG91dHB1dCBzbG90IHR5cGUgaXMgbm90IGZpeGVkICovCi0JCWFwcGVu ZHN0YXRlLT5wcy5yZXN1bHRvcHNzZXQgPSB0cnVlOwotCQlhcHBlbmRzdGF0ZS0+cHMucmVzdWx0 b3BzZml4ZWQgPSBmYWxzZTsKLQl9CisJaWYgKGFwcGVuZHN0YXRlLT5hcy5uYXN5bmNwbGFucyA+ IDAgJiYgYXBwZW5kc3RhdGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCWNsYXNz aWZ5X21hdGNoaW5nX3N1YnBsYW5zKGFwcGVuZHN0YXRlKTsKIAotCS8qIEluaXRpYWxpemUgYXN5 bmMgc3RhdGUgKi8KLQlhcHBlbmRzdGF0ZS0+YXNfYXN5bmNwbGFucyA9IGFzeW5jcGxhbnM7Ci0J YXBwZW5kc3RhdGUtPmFzX25hc3luY3BsYW5zID0gbmFzeW5jcGxhbnM7Ci0JYXBwZW5kc3RhdGUt PmFzX2FzeW5jcmVxdWVzdHMgPSBOVUxMOwotCWFwcGVuZHN0YXRlLT5hc19hc3luY3Jlc3VsdHMg PSBOVUxMOwotCWFwcGVuZHN0YXRlLT5hc19uYXN5bmNyZXN1bHRzID0gMDsKIAlhcHBlbmRzdGF0 ZS0+YXNfbmFzeW5jcmVtYWluID0gMDsKLQlhcHBlbmRzdGF0ZS0+YXNfbmVlZHJlcXVlc3QgPSBO VUxMOwotCWFwcGVuZHN0YXRlLT5hc19ldmVudHNldCA9IE5VTEw7Ci0JYXBwZW5kc3RhdGUtPmFz X3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwotCi0JaWYgKG5hc3luY3BsYW5zID4gMCkKLQl7Ci0J CWFwcGVuZHN0YXRlLT5hc19hc3luY3JlcXVlc3RzID0gKEFzeW5jUmVxdWVzdCAqKikKLQkJCXBh bGxvYzAobnBsYW5zICogc2l6ZW9mKEFzeW5jUmVxdWVzdCAqKSk7Ci0KLQkJaSA9IC0xOwotCQl3 aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoYXN5bmNwbGFucywgaSkpID49IDApCi0JCXsKLQkJ CUFzeW5jUmVxdWVzdCAqYXJlcTsKLQotCQkJYXJlcSA9IHBhbGxvY19vYmplY3QoQXN5bmNSZXF1 ZXN0KTsKLQkJCWFyZXEtPnJlcXVlc3RvciA9IChQbGFuU3RhdGUgKikgYXBwZW5kc3RhdGU7Ci0J CQlhcmVxLT5yZXF1ZXN0ZWUgPSBhcHBlbmRwbGFuc3RhdGVzW2ldOwotCQkJYXJlcS0+cmVxdWVz dF9pbmRleCA9IGk7Ci0JCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7Ci0JCQlhcmVx LT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7Ci0JCQlhcmVxLT5yZXN1bHQgPSBOVUxMOwotCi0J CQlhcHBlbmRzdGF0ZS0+YXNfYXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7Ci0JCX0KLQotCQlhcHBl bmRzdGF0ZS0+YXNfYXN5bmNyZXN1bHRzID0gKFR1cGxlVGFibGVTbG90ICoqKQotCQkJcGFsbG9j MChuYXN5bmNwbGFucyAqIHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSk7Ci0KLQkJaWYgKGFwcGVu ZHN0YXRlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQotCQkJY2xhc3NpZnlfbWF0Y2hp bmdfc3VicGxhbnMoYXBwZW5kc3RhdGUpOwotCX0KLQotCS8qCi0JICogTWlzY2VsbGFuZW91cyBp bml0aWFsaXphdGlvbgotCSAqLwotCi0JYXBwZW5kc3RhdGUtPnBzLnBzX1Byb2pJbmZvID0gTlVM TDsKIAogCS8qIEZvciBwYXJhbGxlbCBxdWVyeSwgdGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gbGF0 ZXIuICovCiAJYXBwZW5kc3RhdGUtPmNob29zZV9uZXh0X3N1YnBsYW4gPSBjaG9vc2VfbmV4dF9z dWJwbGFuX2xvY2FsbHk7CkBAIC0zMTUsMTEgKzE2NiwxMSBAQCBFeGVjQXBwZW5kKFBsYW5TdGF0 ZSAqcHN0YXRlKQogCQlBc3NlcnQoIW5vZGUtPmFzX3N5bmNkb25lKTsKIAogCQkvKiBOb3RoaW5n IHRvIGRvIGlmIHRoZXJlIGFyZSBubyBzdWJwbGFucyAqLwotCQlpZiAobm9kZS0+YXNfbnBsYW5z ID09IDApCi0JCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMucHNfUmVzdWx0VHVwbGVT bG90KTsKKwkJaWYgKG5vZGUtPmFzLm5wbGFucyA9PSAwKQorCQkJcmV0dXJuIEV4ZWNDbGVhclR1 cGxlKG5vZGUtPmFzLnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CiAKIAkJLyogSWYgdGhlcmUgYXJl IGFueSBhc3luYyBzdWJwbGFucywgYmVnaW4gZXhlY3V0aW5nIHRoZW0uICovCi0JCWlmIChub2Rl LT5hc19uYXN5bmNwbGFucyA+IDApCisJCWlmIChub2RlLT5hcy5uYXN5bmNwbGFucyA+IDApCiAJ CQlFeGVjQXBwZW5kQXN5bmNCZWdpbihub2RlKTsKIAogCQkvKgpAQCAtMzI3LDExICsxNzgsMTEg QEAgRXhlY0FwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICogcHJvY2VlZGluZy4KIAkJICov CiAJCWlmICghbm9kZS0+Y2hvb3NlX25leHRfc3VicGxhbihub2RlKSAmJiBub2RlLT5hc19uYXN5 bmNyZW1haW4gPT0gMCkKLQkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5wcy5wc19SZXN1 bHRUdXBsZVNsb3QpOworCQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPmFzLnBzLnBzX1Jl c3VsdFR1cGxlU2xvdCk7CiAKIAkJQXNzZXJ0KG5vZGUtPmFzX3N5bmNkb25lIHx8CiAJCQkgICAo bm9kZS0+YXNfd2hpY2hwbGFuID49IDAgJiYKLQkJCQlub2RlLT5hc193aGljaHBsYW4gPCBub2Rl LT5hc19ucGxhbnMpKTsKKwkJCQlub2RlLT5hc193aGljaHBsYW4gPCBub2RlLT5hcy5ucGxhbnMp KTsKIAogCQkvKiBBbmQgd2UncmUgaW5pdGlhbGl6ZWQuICovCiAJCW5vZGUtPmFzX2JlZ3VuID0g dHJ1ZTsKQEAgLTM0NiwxOSArMTk3LDE5IEBAIEV4ZWNBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUp CiAJCS8qCiAJCSAqIHRyeSB0byBnZXQgYSB0dXBsZSBmcm9tIGFuIGFzeW5jIHN1YnBsYW4gaWYg YW55CiAJCSAqLwotCQlpZiAobm9kZS0+YXNfc3luY2RvbmUgfHwgIWJtc19pc19lbXB0eShub2Rl LT5hc19uZWVkcmVxdWVzdCkpCisJCWlmIChub2RlLT5hc19zeW5jZG9uZSB8fCAhYm1zX2lzX2Vt cHR5KG5vZGUtPmFzLm5lZWRyZXF1ZXN0KSkKIAkJewogCQkJaWYgKEV4ZWNBcHBlbmRBc3luY0dl dE5leHQobm9kZSwgJnJlc3VsdCkpCiAJCQkJcmV0dXJuIHJlc3VsdDsKIAkJCUFzc2VydCghbm9k ZS0+YXNfc3luY2RvbmUpOwotCQkJQXNzZXJ0KGJtc19pc19lbXB0eShub2RlLT5hc19uZWVkcmVx dWVzdCkpOworCQkJQXNzZXJ0KGJtc19pc19lbXB0eShub2RlLT5hcy5uZWVkcmVxdWVzdCkpOwog CQl9CiAKIAkJLyoKIAkJICogZmlndXJlIG91dCB3aGljaCBzeW5jIHN1YnBsYW4gd2UgYXJlIGN1 cnJlbnRseSBwcm9jZXNzaW5nCiAJCSAqLwotCQlBc3NlcnQobm9kZS0+YXNfd2hpY2hwbGFuID49 IDAgJiYgbm9kZS0+YXNfd2hpY2hwbGFuIDwgbm9kZS0+YXNfbnBsYW5zKTsKLQkJc3Vibm9kZSA9 IG5vZGUtPmFwcGVuZHBsYW5zW25vZGUtPmFzX3doaWNocGxhbl07CisJCUFzc2VydChub2RlLT5h c193aGljaHBsYW4gPj0gMCAmJiBub2RlLT5hc193aGljaHBsYW4gPCBub2RlLT5hcy5ucGxhbnMp OworCQlzdWJub2RlID0gbm9kZS0+YXMucGxhbnNbbm9kZS0+YXNfd2hpY2hwbGFuXTsKIAogCQkv KgogCQkgKiBnZXQgYSB0dXBsZSBmcm9tIHRoZSBzdWJwbGFuCkBAIC0zODUsNyArMjM2LDcgQEAg RXhlY0FwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAogCQkvKiBjaG9vc2UgbmV3IHN5bmMgc3Vi cGxhbjsgaWYgbm8gc3luYy9hc3luYyBzdWJwbGFucywgd2UncmUgZG9uZSAqLwogCQlpZiAoIW5v ZGUtPmNob29zZV9uZXh0X3N1YnBsYW4obm9kZSkgJiYgbm9kZS0+YXNfbmFzeW5jcmVtYWluID09 IDApCi0JCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90 KTsKKwkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5hcy5wcy5wc19SZXN1bHRUdXBsZVNs b3QpOwogCX0KIH0KIApAQCAtNDAwLDgxICsyNTEsMjMgQEAgRXhlY0FwcGVuZChQbGFuU3RhdGUg KnBzdGF0ZSkKIHZvaWQKIEV4ZWNFbmRBcHBlbmQoQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JUGxh blN0YXRlICoqYXBwZW5kcGxhbnM7Ci0JaW50CQkJbnBsYW5zOwotCWludAkJCWk7Ci0KLQkvKgot CSAqIGdldCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBub2RlCi0JICovCi0JYXBwZW5kcGxhbnMgPSBu b2RlLT5hcHBlbmRwbGFuczsKLQlucGxhbnMgPSBub2RlLT5hc19ucGxhbnM7Ci0KLQkvKgotCSAq IHNodXQgZG93biBlYWNoIG9mIHRoZSBzdWJzY2FucwotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBu cGxhbnM7IGkrKykKLQkJRXhlY0VuZE5vZGUoYXBwZW5kcGxhbnNbaV0pOworCUV4ZWNFbmRBcHBl bmRlcigmbm9kZS0+YXMpOwogfQogCiB2b2lkCiBFeGVjUmVTY2FuQXBwZW5kKEFwcGVuZFN0YXRl ICpub2RlKQogewotCWludAkJCW5hc3luY3BsYW5zID0gbm9kZS0+YXNfbmFzeW5jcGxhbnM7Ci0J aW50CQkJaTsKLQotCS8qCi0JICogSWYgYW55IFBBUkFNX0VYRUMgUGFyYW1zIHVzZWQgaW4gcHJ1 bmluZyBleHByZXNzaW9ucyBoYXZlIGNoYW5nZWQsIHRoZW4KLQkgKiB3ZSdkIGJldHRlciB1bnNl dCB0aGUgdmFsaWQgc3VicGxhbnMgc28gdGhhdCB0aGV5IGFyZSByZXNlbGVjdGVkIGZvcgotCSAq IHRoZSBuZXcgcGFyYW1ldGVyIHZhbHVlcy4KLQkgKi8KLQlpZiAobm9kZS0+YXNfcHJ1bmVfc3Rh dGUgJiYKLQkJYm1zX292ZXJsYXAobm9kZS0+cHMuY2hnUGFyYW0sCi0JCQkJCW5vZGUtPmFzX3By dW5lX3N0YXRlLT5leGVjcGFyYW1pZHMpKQotCXsKLQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNf aWRlbnRpZmllZCA9IGZhbHNlOwotCQlibXNfZnJlZShub2RlLT5hc192YWxpZF9zdWJwbGFucyk7 Ci0JCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0gTlVMTDsKLQkJYm1zX2ZyZWUobm9kZS0+YXNf dmFsaWRfYXN5bmNwbGFucyk7Ci0JCW5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwot CX0KLQotCWZvciAoaSA9IDA7IGkgPCBub2RlLT5hc19ucGxhbnM7IGkrKykKLQl7Ci0JCVBsYW5T dGF0ZSAgKnN1Ym5vZGUgPSBub2RlLT5hcHBlbmRwbGFuc1tpXTsKIAotCQkvKgotCQkgKiBFeGVj UmVTY2FuIGRvZXNuJ3Qga25vdyBhYm91dCBteSBzdWJwbGFucywgc28gSSBoYXZlIHRvIGRvCi0J CSAqIGNoYW5nZWQtcGFyYW1ldGVyIHNpZ25hbGluZyBteXNlbGYuCi0JCSAqLwotCQlpZiAobm9k ZS0+cHMuY2hnUGFyYW0gIT0gTlVMTCkKLQkJCVVwZGF0ZUNoYW5nZWRQYXJhbVNldChzdWJub2Rl LCBub2RlLT5wcy5jaGdQYXJhbSk7CisJaW50CQkJbmFzeW5jcGxhbnMgPSBub2RlLT5hcy5uYXN5 bmNwbGFuczsKIAotCQkvKgotCQkgKiBJZiBjaGdQYXJhbSBvZiBzdWJub2RlIGlzIG5vdCBudWxs IHRoZW4gcGxhbiB3aWxsIGJlIHJlLXNjYW5uZWQgYnkKLQkJICogZmlyc3QgRXhlY1Byb2NOb2Rl IG9yIGJ5IGZpcnN0IEV4ZWNBc3luY1JlcXVlc3QuCi0JCSAqLwotCQlpZiAoc3Vibm9kZS0+Y2hn UGFyYW0gPT0gTlVMTCkKLQkJCUV4ZWNSZVNjYW4oc3Vibm9kZSk7Ci0JfQorCUV4ZWNSZVNjYW5B cHBlbmRlcigmbm9kZS0+YXMpOwogCi0JLyogUmVzZXQgYXN5bmMgc3RhdGUgKi8KKwkvKiBSZXNl dCBzcGVjaWZpYyBhcHBlbmQgYXN5bmMgc3RhdGUgKi8KIAlpZiAobmFzeW5jcGxhbnMgPiAwKQog CXsKLQkJaSA9IC0xOwotCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXNfYXN5 bmNwbGFucywgaSkpID49IDApCi0JCXsKLQkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPmFz X2FzeW5jcmVxdWVzdHNbaV07Ci0KLQkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsK LQkJCWFyZXEtPnJlcXVlc3RfY29tcGxldGUgPSBmYWxzZTsKLQkJCWFyZXEtPnJlc3VsdCA9IE5V TEw7Ci0JCX0KLQogCQlub2RlLT5hc19uYXN5bmNyZXN1bHRzID0gMDsKIAkJbm9kZS0+YXNfbmFz eW5jcmVtYWluID0gMDsKLQkJYm1zX2ZyZWUobm9kZS0+YXNfbmVlZHJlcXVlc3QpOwotCQlub2Rl LT5hc19uZWVkcmVxdWVzdCA9IE5VTEw7CisJCWJtc19mcmVlKG5vZGUtPmFzLm5lZWRyZXF1ZXN0 KTsKIAl9CiAKIAkvKiBMZXQgY2hvb3NlX25leHRfc3VicGxhbl8qIGZ1bmN0aW9uIGhhbmRsZSBz ZXR0aW5nIHRoZSBmaXJzdCBzdWJwbGFuICovCkBAIC01MDEsNyArMjk0LDcgQEAgRXhlY0FwcGVu ZEVzdGltYXRlKEFwcGVuZFN0YXRlICpub2RlLAogewogCW5vZGUtPnBzdGF0ZV9sZW4gPQogCQlh ZGRfc2l6ZShvZmZzZXRvZihQYXJhbGxlbEFwcGVuZFN0YXRlLCBwYV9maW5pc2hlZCksCi0JCQkJ IHNpemVvZihib29sKSAqIG5vZGUtPmFzX25wbGFucyk7CisJCQkJIHNpemVvZihib29sKSAqIG5v ZGUtPmFzLm5wbGFucyk7CiAKIAlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0 b3IsIG5vZGUtPnBzdGF0ZV9sZW4pOwogCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0 aW1hdG9yLCAxKTsKQEAgLTUyMyw3ICszMTYsNyBAQCBFeGVjQXBwZW5kSW5pdGlhbGl6ZURTTShB cHBlbmRTdGF0ZSAqbm9kZSwKIAlwc3RhdGUgPSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywg bm9kZS0+cHN0YXRlX2xlbik7CiAJbWVtc2V0KHBzdGF0ZSwgMCwgbm9kZS0+cHN0YXRlX2xlbik7 CiAJTFdMb2NrSW5pdGlhbGl6ZSgmcHN0YXRlLT5wYV9sb2NrLCBMV1RSQU5DSEVfUEFSQUxMRUxf QVBQRU5EKTsKLQlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIG5vZGUtPnBzLnBsYW4tPnBsYW5f bm9kZV9pZCwgcHN0YXRlKTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIG5vZGUtPmFzLnBz LnBsYW4tPnBsYW5fbm9kZV9pZCwgcHN0YXRlKTsKIAogCW5vZGUtPmFzX3BzdGF0ZSA9IHBzdGF0 ZTsKIAlub2RlLT5jaG9vc2VfbmV4dF9zdWJwbGFuID0gY2hvb3NlX25leHRfc3VicGxhbl9mb3Jf bGVhZGVyOwpAQCAtNTQxLDcgKzMzNCw3IEBAIEV4ZWNBcHBlbmRSZUluaXRpYWxpemVEU00oQXBw ZW5kU3RhdGUgKm5vZGUsIFBhcmFsbGVsQ29udGV4dCAqcGN4dCkKIAlQYXJhbGxlbEFwcGVuZFN0 YXRlICpwc3RhdGUgPSBub2RlLT5hc19wc3RhdGU7CiAKIAlwc3RhdGUtPnBhX25leHRfcGxhbiA9 IDA7Ci0JbWVtc2V0KHBzdGF0ZS0+cGFfZmluaXNoZWQsIDAsIHNpemVvZihib29sKSAqIG5vZGUt PmFzX25wbGFucyk7CisJbWVtc2V0KHBzdGF0ZS0+cGFfZmluaXNoZWQsIDAsIHNpemVvZihib29s KSAqIG5vZGUtPmFzLm5wbGFucyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU1NCw3ICszNDcsNyBA QCBFeGVjQXBwZW5kUmVJbml0aWFsaXplRFNNKEFwcGVuZFN0YXRlICpub2RlLCBQYXJhbGxlbENv bnRleHQgKnBjeHQpCiB2b2lkCiBFeGVjQXBwZW5kSW5pdGlhbGl6ZVdvcmtlcihBcHBlbmRTdGF0 ZSAqbm9kZSwgUGFyYWxsZWxXb3JrZXJDb250ZXh0ICpwd2N4dCkKIHsKLQlub2RlLT5hc19wc3Rh dGUgPSBzaG1fdG9jX2xvb2t1cChwd2N4dC0+dG9jLCBub2RlLT5wcy5wbGFuLT5wbGFuX25vZGVf aWQsIGZhbHNlKTsKKwlub2RlLT5hc19wc3RhdGUgPSBzaG1fdG9jX2xvb2t1cChwd2N4dC0+dG9j LCBub2RlLT5hcy5wcy5wbGFuLT5wbGFuX25vZGVfaWQsIGZhbHNlKTsKIAlub2RlLT5jaG9vc2Vf bmV4dF9zdWJwbGFuID0gY2hvb3NlX25leHRfc3VicGxhbl9mb3Jfd29ya2VyOwogfQogCkBAIC01 NzIsNyArMzY1LDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9sb2NhbGx5KEFwcGVuZFN0YXRlICpu b2RlKQogCWludAkJCW5leHRwbGFuOwogCiAJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3 aGVuIHRoZXJlIGFyZSBubyBzdWJwbGFucyAqLwotCUFzc2VydChub2RlLT5hc19ucGxhbnMgPiAw KTsKKwlBc3NlcnQobm9kZS0+YXMubnBsYW5zID4gMCk7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlm IHN5bmNkb25lICovCiAJaWYgKG5vZGUtPmFzX3N5bmNkb25lKQpAQCAtNTg3LDMzICszODAsMzMg QEAgY2hvb3NlX25leHRfc3VicGxhbl9sb2NhbGx5KEFwcGVuZFN0YXRlICpub2RlKQogCSAqLwog CWlmICh3aGljaHBsYW4gPT0gSU5WQUxJRF9TVUJQTEFOX0lOREVYKQogCXsKLQkJaWYgKG5vZGUt PmFzX25hc3luY3BsYW5zID4gMCkKKwkJaWYgKG5vZGUtPmFzLm5hc3luY3BsYW5zID4gMCkKIAkJ ewogCQkJLyogV2UnZCBoYXZlIGZpbGxlZCBhc192YWxpZF9zdWJwbGFucyBhbHJlYWR5ICovCi0J CQlBc3NlcnQobm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CisJCQlBc3NlcnQo bm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CiAJCX0KLQkJZWxzZSBpZiAoIW5v ZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCWVsc2UgaWYgKCFub2RlLT5hcy52 YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQogCQl7Ci0JCQlub2RlLT5hc192YWxpZF9zdWJwbGFu cyA9Ci0JCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBm YWxzZSwgTlVMTCk7Ci0JCQlub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1 ZTsKKwkJCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zID0KKwkJCQlFeGVjRmluZE1hdGNoaW5nU3Vi UGxhbnMobm9kZS0+YXMucHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKKwkJCW5vZGUtPmFzLnZh bGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwogCQl9CiAKIAkJd2hpY2hwbGFuID0gLTE7 CiAJfQogCiAJLyogRW5zdXJlIHdoaWNocGxhbiBpcyB3aXRoaW4gdGhlIGV4cGVjdGVkIHJhbmdl ICovCi0JQXNzZXJ0KHdoaWNocGxhbiA+PSAtMSAmJiB3aGljaHBsYW4gPD0gbm9kZS0+YXNfbnBs YW5zKTsKKwlBc3NlcnQod2hpY2hwbGFuID49IC0xICYmIHdoaWNocGxhbiA8PSBub2RlLT5hcy5u cGxhbnMpOwogCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+cHMuc3RhdGUtPmVz X2RpcmVjdGlvbikpCi0JCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zLCB3aGljaHBsYW4pOworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUt PmFzLnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKQorCQluZXh0cGxhbiA9IGJtc19uZXh0X21lbWJl cihub2RlLT5hcy52YWxpZF9zdWJwbGFucywgd2hpY2hwbGFuKTsKIAllbHNlCi0JCW5leHRwbGFu ID0gYm1zX3ByZXZfbWVtYmVyKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLCB3aGljaHBsYW4pOwor CQluZXh0cGxhbiA9IGJtc19wcmV2X21lbWJlcihub2RlLT5hcy52YWxpZF9zdWJwbGFucywgd2hp Y2hwbGFuKTsKIAogCWlmIChuZXh0cGxhbiA8IDApCiAJewogCQkvKiBTZXQgYXNfc3luY2RvbmUg aWYgaW4gYXN5bmMgbW9kZSAqLwotCQlpZiAobm9kZS0+YXNfbmFzeW5jcGxhbnMgPiAwKQorCQlp ZiAobm9kZS0+YXMubmFzeW5jcGxhbnMgPiAwKQogCQkJbm9kZS0+YXNfc3luY2RvbmUgPSB0cnVl OwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtNjM3LDEwICs0MzAsMTAgQEAgY2hvb3NlX25leHRf c3VicGxhbl9mb3JfbGVhZGVyKEFwcGVuZFN0YXRlICpub2RlKQogCVBhcmFsbGVsQXBwZW5kU3Rh dGUgKnBzdGF0ZSA9IG5vZGUtPmFzX3BzdGF0ZTsKIAogCS8qIEJhY2t3YXJkIHNjYW4gaXMgbm90 IHN1cHBvcnRlZCBieSBwYXJhbGxlbC1hd2FyZSBwbGFucyAqLwotCUFzc2VydChTY2FuRGlyZWN0 aW9uSXNGb3J3YXJkKG5vZGUtPnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKTsKKwlBc3NlcnQoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5hcy5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7CiAK IAkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5z ICovCi0JQXNzZXJ0KG5vZGUtPmFzX25wbGFucyA+IDApOworCUFzc2VydChub2RlLT5hcy5ucGxh bnMgPiAwKTsKIAogCUxXTG9ja0FjcXVpcmUoJnBzdGF0ZS0+cGFfbG9jaywgTFdfRVhDTFVTSVZF KTsKIApAQCAtNjUyLDE4ICs0NDUsMTggQEAgY2hvb3NlX25leHRfc3VicGxhbl9mb3JfbGVhZGVy KEFwcGVuZFN0YXRlICpub2RlKQogCWVsc2UKIAl7CiAJCS8qIFN0YXJ0IHdpdGggbGFzdCBzdWJw bGFuLiAqLwotCQlub2RlLT5hc193aGljaHBsYW4gPSBub2RlLT5hc19ucGxhbnMgLSAxOworCQlu b2RlLT5hc193aGljaHBsYW4gPSBub2RlLT5hcy5ucGxhbnMgLSAxOwogCiAJCS8qCiAJCSAqIElm IHdlJ3ZlIHlldCB0byBkZXRlcm1pbmUgdGhlIHZhbGlkIHN1YnBsYW5zIHRoZW4gZG8gc28gbm93 LiAgSWYKIAkJICogcnVuLXRpbWUgcHJ1bmluZyBpcyBkaXNhYmxlZCB0aGVuIHRoZSB2YWxpZCBz dWJwbGFucyB3aWxsIGFsd2F5cyBiZQogCQkgKiBzZXQgdG8gYWxsIHN1YnBsYW5zLgogCQkgKi8K LQkJaWYgKCFub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCQlpZiAoIW5vZGUt PmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJCXsKLQkJCW5vZGUtPmFzX3ZhbGlkX3N1 YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3Rh dGUsIGZhbHNlLCBOVUxMKTsKLQkJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQg PSB0cnVlOworCQkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnMgPQorCQkJCUV4ZWNGaW5kTWF0Y2hp bmdTdWJQbGFucyhub2RlLT5hcy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOworCQkJbm9kZS0+ YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CiAKIAkJCS8qCiAJCQkgKiBNYXJr IGVhY2ggaW52YWxpZCBwbGFuIGFzIGZpbmlzaGVkIHRvIGFsbG93IHRoZSBsb29wIGJlbG93IHRv CkBAIC03MTksMTAgKzUxMiwxMCBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIoQXBw ZW5kU3RhdGUgKm5vZGUpCiAJUGFyYWxsZWxBcHBlbmRTdGF0ZSAqcHN0YXRlID0gbm9kZS0+YXNf cHN0YXRlOwogCiAJLyogQmFja3dhcmQgc2NhbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHBhcmFsbGVs LWF3YXJlIHBsYW5zICovCi0JQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+cHMu c3RhdGUtPmVzX2RpcmVjdGlvbikpOworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5v ZGUtPmFzLnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKTsKIAogCS8qIFdlIHNob3VsZCBuZXZlciBi ZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KLQlBc3NlcnQobm9kZS0+YXNf bnBsYW5zID4gMCk7CisJQXNzZXJ0KG5vZGUtPmFzLm5wbGFucyA+IDApOwogCiAJTFdMb2NrQWNx dWlyZSgmcHN0YXRlLT5wYV9sb2NrLCBMV19FWENMVVNJVkUpOwogCkBAIC03MzUsMTEgKzUyOCwx MSBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJ ICogcnVuLXRpbWUgcHJ1bmluZyBpcyBkaXNhYmxlZCB0aGVuIHRoZSB2YWxpZCBzdWJwbGFucyB3 aWxsIGFsd2F5cyBiZSBzZXQKIAkgKiB0byBhbGwgc3VicGxhbnMuCiAJICovCi0JZWxzZSBpZiAo IW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJZWxzZSBpZiAoIW5vZGUtPmFz LnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJewotCQlub2RlLT5hc192YWxpZF9zdWJwbGFu cyA9Ci0JCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUsIGZh bHNlLCBOVUxMKTsKLQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7 CisJCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zID0KKwkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFu cyhub2RlLT5hcy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOworCQlub2RlLT5hcy52YWxpZF9z dWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKIAogCQltYXJrX2ludmFsaWRfc3VicGxhbnNfYXNf ZmluaXNoZWQobm9kZSk7CiAJfQpAQCAtNzU5LDcgKzU1Miw3IEBAIGNob29zZV9uZXh0X3N1YnBs YW5fZm9yX3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAl7CiAJCWludAkJCW5leHRwbGFuOwog Ci0JCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLAor CQluZXh0cGxhbiA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hcy52YWxpZF9zdWJwbGFucywKIAkJ CQkJCQkJICAgcHN0YXRlLT5wYV9uZXh0X3BsYW4pOwogCQlpZiAobmV4dHBsYW4gPj0gMCkKIAkJ ewpAQCAtNzcyLDcgKzU2NSw3IEBAIGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX3dvcmtlcihBcHBl bmRTdGF0ZSAqbm9kZSkKIAkJCSAqIFRyeSBsb29waW5nIGJhY2sgdG8gdGhlIGZpcnN0IHZhbGlk IHBhcnRpYWwgcGxhbiwgaWYgdGhlcmUgaXMKIAkJCSAqIG9uZS4gIElmIHRoZXJlIGlzbid0LCBh cnJhbmdlIHRvIGJhaWwgb3V0IGJlbG93LgogCQkJICovCi0JCQluZXh0cGxhbiA9IGJtc19uZXh0 X21lbWJlcihub2RlLT5hc192YWxpZF9zdWJwbGFucywKKwkJCW5leHRwbGFuID0gYm1zX25leHRf bWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLAogCQkJCQkJCQkJICAgbm9kZS0+YXNfZmly c3RfcGFydGlhbF9wbGFuIC0gMSk7CiAJCQlwc3RhdGUtPnBhX25leHRfcGxhbiA9CiAJCQkJbmV4 dHBsYW4gPCAwID8gbm9kZS0+YXNfd2hpY2hwbGFuIDogbmV4dHBsYW47CkBAIC03OTcsNyArNTkw LDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0YXRlICpub2RlKQog CiAJLyogUGljayB0aGUgcGxhbiB3ZSBmb3VuZCwgYW5kIGFkdmFuY2UgcGFfbmV4dF9wbGFuIG9u ZSBtb3JlIHRpbWUuICovCiAJbm9kZS0+YXNfd2hpY2hwbGFuID0gcHN0YXRlLT5wYV9uZXh0X3Bs YW47Ci0JcHN0YXRlLT5wYV9uZXh0X3BsYW4gPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXNfdmFs aWRfc3VicGxhbnMsCisJcHN0YXRlLT5wYV9uZXh0X3BsYW4gPSBibXNfbmV4dF9tZW1iZXIobm9k ZS0+YXMudmFsaWRfc3VicGxhbnMsCiAJCQkJCQkJCQkJICAgcHN0YXRlLT5wYV9uZXh0X3BsYW4p OwogCiAJLyoKQEAgLTgwNiw3ICs1OTksNyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3Jr ZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJICovCiAJaWYgKHBzdGF0ZS0+cGFfbmV4dF9wbGFuIDwg MCkKIAl7Ci0JCWludAkJCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zLAorCQlpbnQJCQluZXh0cGxhbiA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hcy52 YWxpZF9zdWJwbGFucywKIAkJCQkJCQkJCQkJICAgbm9kZS0+YXNfZmlyc3RfcGFydGlhbF9wbGFu IC0gMSk7CiAKIAkJaWYgKG5leHRwbGFuID49IDApCkBAIC04NDgsMTYgKzY0MSwxNiBAQCBtYXJr X2ludmFsaWRfc3VicGxhbnNfYXNfZmluaXNoZWQoQXBwZW5kU3RhdGUgKm5vZGUpCiAJQXNzZXJ0 KG5vZGUtPmFzX3BzdGF0ZSk7CiAKIAkvKiBTaG91bGRuJ3QgaGF2ZSBiZWVuIGNhbGxlZCB3aGVu IHJ1bi10aW1lIHBydW5pbmcgaXMgbm90IGVuYWJsZWQgKi8KLQlBc3NlcnQobm9kZS0+YXNfcHJ1 bmVfc3RhdGUpOworCUFzc2VydChub2RlLT5hcy5wcnVuZV9zdGF0ZSk7CiAKIAkvKiBOb3RoaW5n IHRvIGRvIGlmIGFsbCBwbGFucyBhcmUgdmFsaWQgKi8KLQlpZiAoYm1zX251bV9tZW1iZXJzKG5v ZGUtPmFzX3ZhbGlkX3N1YnBsYW5zKSA9PSBub2RlLT5hc19ucGxhbnMpCisJaWYgKGJtc19udW1f bWVtYmVycyhub2RlLT5hcy52YWxpZF9zdWJwbGFucykgPT0gbm9kZS0+YXMubnBsYW5zKQogCQly ZXR1cm47CiAKIAkvKiBNYXJrIGFsbCBub24tdmFsaWQgcGxhbnMgYXMgZmluaXNoZWQgKi8KLQlm b3IgKGkgPSAwOyBpIDwgbm9kZS0+YXNfbnBsYW5zOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG5v ZGUtPmFzLm5wbGFuczsgaSsrKQogCXsKLQkJaWYgKCFibXNfaXNfbWVtYmVyKGksIG5vZGUtPmFz X3ZhbGlkX3N1YnBsYW5zKSkKKwkJaWYgKCFibXNfaXNfbWVtYmVyKGksIG5vZGUtPmFzLnZhbGlk X3N1YnBsYW5zKSkKIAkJCW5vZGUtPmFzX3BzdGF0ZS0+cGFfZmluaXNoZWRbaV0gPSB0cnVlOwog CX0KIH0KQEAgLTg3Niw0NyArNjY5LDI1IEBAIG1hcmtfaW52YWxpZF9zdWJwbGFuc19hc19maW5p c2hlZChBcHBlbmRTdGF0ZSAqbm9kZSkKIHN0YXRpYyB2b2lkCiBFeGVjQXBwZW5kQXN5bmNCZWdp bihBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlpbnQJCQlpOwotCi0JLyogQmFja3dhcmQgc2NhbiBp cyBub3Qgc3VwcG9ydGVkIGJ5IGFzeW5jLWF3YXJlIEFwcGVuZHMuICovCi0JQXNzZXJ0KFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+cHMuc3RhdGUtPmVzX2RpcmVjdGlvbikpOwotCi0JLyog V2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBzdWJwbGFucyAqLwot CUFzc2VydChub2RlLT5hc19ucGxhbnMgPiAwKTsKLQotCS8qIFdlIHNob3VsZCBuZXZlciBiZSBj YWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gYXN5bmMgc3VicGxhbnMuICovCi0JQXNzZXJ0KG5vZGUt PmFzX25hc3luY3BsYW5zID4gMCk7Ci0KIAkvKiBJZiB3ZSd2ZSB5ZXQgdG8gZGV0ZXJtaW5lIHRo ZSB2YWxpZCBzdWJwbGFucyB0aGVuIGRvIHNvIG5vdy4gKi8KLQlpZiAoIW5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zX2lkZW50aWZpZWQpCisJaWYgKCFub2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVu dGlmaWVkKQogCXsKLQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPQotCQkJRXhlY0ZpbmRNYXRj aGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7Ci0JCW5vZGUt PmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQlub2RlLT5hcy52YWxpZF9z dWJwbGFucyA9CisJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXMucHJ1bmVfc3Rh dGUsIGZhbHNlLCBOVUxMKTsKKwkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9 IHRydWU7CiAKIAkJY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMobm9kZSk7CiAJfQogCiAJLyog SW5pdGlhbGl6ZSBzdGF0ZSB2YXJpYWJsZXMuICovCi0Jbm9kZS0+YXNfc3luY2RvbmUgPSBibXNf aXNfZW1wdHkobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMpOwotCW5vZGUtPmFzX25hc3luY3JlbWFp biA9IGJtc19udW1fbWVtYmVycyhub2RlLT5hc192YWxpZF9hc3luY3BsYW5zKTsKKwlub2RlLT5h c19zeW5jZG9uZSA9IGJtc19pc19lbXB0eShub2RlLT5hcy52YWxpZF9zdWJwbGFucyk7CisJbm9k ZS0+YXNfbmFzeW5jcmVtYWluID0gYm1zX251bV9tZW1iZXJzKG5vZGUtPmFzLnZhbGlkX2FzeW5j cGxhbnMpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMg c3VicGxhbnMuICovCiAJaWYgKG5vZGUtPmFzX25hc3luY3JlbWFpbiA9PSAwKQogCQlyZXR1cm47 CiAKLQkvKiBNYWtlIGEgcmVxdWVzdCBmb3IgZWFjaCBvZiB0aGUgdmFsaWQgYXN5bmMgc3VicGxh bnMuICovCi0JaSA9IC0xOwotCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hc192 YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkKLQl7Ci0JCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5v ZGUtPmFzX2FzeW5jcmVxdWVzdHNbaV07Ci0KLQkJQXNzZXJ0KGFyZXEtPnJlcXVlc3RfaW5kZXgg PT0gaSk7Ci0JCUFzc2VydCghYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyk7Ci0KLQkJLyogRG8gdGhl IGFjdHVhbCB3b3JrLiAqLwotCQlFeGVjQXN5bmNSZXF1ZXN0KGFyZXEpOwotCX0KKwlFeGVjQXBw ZW5kZXJBc3luY0JlZ2luKCZub2RlLT5hcyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk2MSw3ICs3 MzIsNyBAQCBFeGVjQXBwZW5kQXN5bmNHZXROZXh0KEFwcGVuZFN0YXRlICpub2RlLCBUdXBsZVRh YmxlU2xvdCAqKnJlc3VsdCkKIAlpZiAobm9kZS0+YXNfc3luY2RvbmUpCiAJewogCQlBc3NlcnQo bm9kZS0+YXNfbmFzeW5jcmVtYWluID09IDApOwotCQkqcmVzdWx0ID0gRXhlY0NsZWFyVHVwbGUo bm9kZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90KTsKKwkJKnJlc3VsdCA9IEV4ZWNDbGVhclR1cGxl KG5vZGUtPmFzLnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CiAJCXJldHVybiB0cnVlOwogCX0KIApA QCAtOTgxLDcgKzc1Miw3IEBAIEV4ZWNBcHBlbmRBc3luY1JlcXVlc3QoQXBwZW5kU3RhdGUgKm5v ZGUsIFR1cGxlVGFibGVTbG90ICoqcmVzdWx0KQogCWludAkJCWk7CiAKIAkvKiBOb3RoaW5nIHRv IGRvIGlmIHRoZXJlIGFyZSBubyBhc3luYyBzdWJwbGFucyBuZWVkaW5nIGEgbmV3IHJlcXVlc3Qu ICovCi0JaWYgKGJtc19pc19lbXB0eShub2RlLT5hc19uZWVkcmVxdWVzdCkpCisJaWYgKGJtc19p c19lbXB0eShub2RlLT5hcy5uZWVkcmVxdWVzdCkpCiAJewogCQlBc3NlcnQobm9kZS0+YXNfbmFz eW5jcmVzdWx0cyA9PSAwKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtOTk0LDE3ICs3NjUsMTcgQEAg RXhlY0FwcGVuZEFzeW5jUmVxdWVzdChBcHBlbmRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3Qg KipyZXN1bHQpCiAJaWYgKG5vZGUtPmFzX25hc3luY3Jlc3VsdHMgPiAwKQogCXsKIAkJLS1ub2Rl LT5hc19uYXN5bmNyZXN1bHRzOwotCQkqcmVzdWx0ID0gbm9kZS0+YXNfYXN5bmNyZXN1bHRzW25v ZGUtPmFzX25hc3luY3Jlc3VsdHNdOworCQkqcmVzdWx0ID0gbm9kZS0+YXMuYXN5bmNyZXN1bHRz W25vZGUtPmFzX25hc3luY3Jlc3VsdHNdOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKIAkvKiBNYWtl IGEgbmV3IHJlcXVlc3QgZm9yIGVhY2ggb2YgdGhlIGFzeW5jIHN1YnBsYW5zIHRoYXQgbmVlZCBp dC4gKi8KLQluZWVkcmVxdWVzdCA9IG5vZGUtPmFzX25lZWRyZXF1ZXN0OwotCW5vZGUtPmFzX25l ZWRyZXF1ZXN0ID0gTlVMTDsKKwluZWVkcmVxdWVzdCA9IG5vZGUtPmFzLm5lZWRyZXF1ZXN0Owor CW5vZGUtPmFzLm5lZWRyZXF1ZXN0ID0gTlVMTDsKIAlpID0gLTE7CiAJd2hpbGUgKChpID0gYm1z X25leHRfbWVtYmVyKG5lZWRyZXF1ZXN0LCBpKSkgPj0gMCkKIAl7Ci0JCUFzeW5jUmVxdWVzdCAq YXJlcSA9IG5vZGUtPmFzX2FzeW5jcmVxdWVzdHNbaV07CisJCUFzeW5jUmVxdWVzdCAqYXJlcSA9 IG5vZGUtPmFzLmFzeW5jcmVxdWVzdHNbaV07CiAKIAkJLyogRG8gdGhlIGFjdHVhbCB3b3JrLiAq LwogCQlFeGVjQXN5bmNSZXF1ZXN0KGFyZXEpOwpAQCAtMTAxNSw3ICs3ODYsNyBAQCBFeGVjQXBw ZW5kQXN5bmNSZXF1ZXN0KEFwcGVuZFN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqKnJlc3Vs dCkKIAlpZiAobm9kZS0+YXNfbmFzeW5jcmVzdWx0cyA+IDApCiAJewogCQktLW5vZGUtPmFzX25h c3luY3Jlc3VsdHM7Ci0JCSpyZXN1bHQgPSBub2RlLT5hc19hc3luY3Jlc3VsdHNbbm9kZS0+YXNf bmFzeW5jcmVzdWx0c107CisJCSpyZXN1bHQgPSBub2RlLT5hcy5hc3luY3Jlc3VsdHNbbm9kZS0+ YXNfbmFzeW5jcmVzdWx0c107CiAJCXJldHVybiB0cnVlOwogCX0KIApAQCAtMTAzMSwxMDUgKzgw MiwxMiBAQCBFeGVjQXBwZW5kQXN5bmNSZXF1ZXN0KEFwcGVuZFN0YXRlICpub2RlLCBUdXBsZVRh YmxlU2xvdCAqKnJlc3VsdCkKIHN0YXRpYyB2b2lkCiBFeGVjQXBwZW5kQXN5bmNFdmVudFdhaXQo QXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JaW50CQkJbmV2ZW50cyA9IG5vZGUtPmFzX25hc3luY3Bs YW5zICsgMjsKIAlsb25nCQl0aW1lb3V0ID0gbm9kZS0+YXNfc3luY2RvbmUgPyAtMSA6IDA7Ci0J V2FpdEV2ZW50CW9jY3VycmVkX2V2ZW50W0VWRU5UX0JVRkZFUl9TSVpFXTsKLQlpbnQJCQlub2Nj dXJyZWQ7Ci0JaW50CQkJaTsKIAogCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0 aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCiAJQXNzZXJ0KG5vZGUtPmFzX25h c3luY3JlbWFpbiA+IDApOwogCi0JQXNzZXJ0KG5vZGUtPmFzX2V2ZW50c2V0ID09IE5VTEwpOwot CW5vZGUtPmFzX2V2ZW50c2V0ID0gQ3JlYXRlV2FpdEV2ZW50U2V0KEN1cnJlbnRSZXNvdXJjZU93 bmVyLCBuZXZlbnRzKTsKLQlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5hc19ldmVudHNldCwgV0xf RVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJICBOVUxMLCBOVUxMKTsK LQotCS8qIEdpdmUgZWFjaCB3YWl0aW5nIHN1YnBsYW4gYSBjaGFuY2UgdG8gYWRkIGFuIGV2ZW50 LiAqLwotCWkgPSAtMTsKLQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXNfYXN5 bmNwbGFucywgaSkpID49IDApCi0JewotCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hc19h c3luY3JlcXVlc3RzW2ldOwotCi0JCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQotCQkJRXhl Y0FzeW5jQ29uZmlndXJlV2FpdChhcmVxKTsKLQl9Ci0KLQkvKgotCSAqIE5vIG5lZWQgZm9yIGZ1 cnRoZXIgcHJvY2Vzc2luZyBpZiBub25lIG9mIHRoZSBzdWJwbGFucyBjb25maWd1cmVkIGFueQot CSAqIGV2ZW50cy4KLQkgKi8KLQlpZiAoR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMobm9kZS0+ YXNfZXZlbnRzZXQpID09IDEpCi0JewotCQlGcmVlV2FpdEV2ZW50U2V0KG5vZGUtPmFzX2V2ZW50 c2V0KTsKLQkJbm9kZS0+YXNfZXZlbnRzZXQgPSBOVUxMOwotCQlyZXR1cm47Ci0JfQotCi0JLyoK LQkgKiBBZGQgdGhlIHByb2Nlc3MgbGF0Y2ggdG8gdGhlIHNldCwgc28gdGhhdCB3ZSB3YWtlIHVw IHRvIHByb2Nlc3MgdGhlCi0JICogc3RhbmRhcmQgaW50ZXJydXB0cyB3aXRoIENIRUNLX0ZPUl9J TlRFUlJVUFRTKCkuCi0JICoKLQkgKiBOT1RFOiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBpdCdz IGltcG9ydGFudCB0aGF0IHRoaXMgaXMgYWRkZWQgdG8gdGhlCi0JICogV2FpdEV2ZW50U2V0IGFm dGVyIHRoZSBFeGVjQXN5bmNDb25maWd1cmVXYWl0KCkgY2FsbHMuICBOYW1lbHksCi0JICogcG9z dGdyZXNfZmR3IGNhbGxzICJHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhzZXQpID09IDEiIHRv IGNoZWNrIGlmCi0JICogYW55IG90aGVyIGV2ZW50cyBhcmUgaW4gdGhlIHNldC4gIFRoYXQncyBh IHBvb3IgZGVzaWduLCBpdCdzCi0JICogcXVlc3Rpb25hYmxlIGZvciBwb3N0Z3Jlc19mZHcgdG8g YmUgZG9pbmcgdGhhdCBpbiB0aGUgZmlyc3QgcGxhY2UsIGJ1dAotCSAqIHdlIGNhbm5vdCBjaGFu Z2UgaXQgbm93LiAgVGhlIHBhdHRlcm4gaGFzIHBvc3NpYmx5IGJlZW4gY29waWVkIHRvIG90aGVy Ci0JICogZXh0ZW5zaW9ucyB0b28uCi0JICovCi0JQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+YXNf ZXZlbnRzZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJICBNeUxhdGNo LCBOVUxMKTsKLQotCS8qIFJldHVybiBhdCBtb3N0IEVWRU5UX0JVRkZFUl9TSVpFIGV2ZW50cyBp biBvbmUgY2FsbC4gKi8KLQlpZiAobmV2ZW50cyA+IEVWRU5UX0JVRkZFUl9TSVpFKQotCQluZXZl bnRzID0gRVZFTlRfQlVGRkVSX1NJWkU7Ci0KLQkvKgotCSAqIElmIHRoZSB0aW1lb3V0IGlzIC0x LCB3YWl0IHVudGlsIGF0IGxlYXN0IG9uZSBldmVudCBvY2N1cnMuICBJZiB0aGUKLQkgKiB0aW1l b3V0IGlzIDAsIHBvbGwgZm9yIGV2ZW50cywgYnV0IGRvIG5vdCB3YWl0IGF0IGFsbC4KLQkgKi8K LQlub2NjdXJyZWQgPSBXYWl0RXZlbnRTZXRXYWl0KG5vZGUtPmFzX2V2ZW50c2V0LCB0aW1lb3V0 LCBvY2N1cnJlZF9ldmVudCwKLQkJCQkJCQkJIG5ldmVudHMsIFdBSVRfRVZFTlRfQVBQRU5EX1JF QURZKTsKLQlGcmVlV2FpdEV2ZW50U2V0KG5vZGUtPmFzX2V2ZW50c2V0KTsKLQlub2RlLT5hc19l dmVudHNldCA9IE5VTEw7Ci0JaWYgKG5vY2N1cnJlZCA9PSAwKQotCQlyZXR1cm47Ci0KLQkvKiBE ZWxpdmVyIG5vdGlmaWNhdGlvbnMuICovCi0JZm9yIChpID0gMDsgaSA8IG5vY2N1cnJlZDsgaSsr KQotCXsKLQkJV2FpdEV2ZW50ICAqdyA9ICZvY2N1cnJlZF9ldmVudFtpXTsKLQotCQkvKgotCQkg KiBFYWNoIHdhaXRpbmcgc3VicGxhbiBzaG91bGQgaGF2ZSByZWdpc3RlcmVkIGl0cyB3YWl0IGV2 ZW50IHdpdGgKLQkJICogdXNlcl9kYXRhIHBvaW50aW5nIGJhY2sgdG8gaXRzIEFzeW5jUmVxdWVz dC4KLQkJICovCi0JCWlmICgody0+ZXZlbnRzICYgV0xfU09DS0VUX1JFQURBQkxFKSAhPSAwKQot CQl7Ci0JCQlBc3luY1JlcXVlc3QgKmFyZXEgPSAoQXN5bmNSZXF1ZXN0ICopIHctPnVzZXJfZGF0 YTsKLQotCQkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpCi0JCQl7Ci0JCQkJLyoKLQkJCQkg KiBNYXJrIGl0IGFzIG5vIGxvbmdlciBuZWVkaW5nIGEgY2FsbGJhY2suICBXZSBtdXN0IGRvIHRo aXMKLQkJCQkgKiBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGNhbGxiYWNrIGluIGNhc2UgdGhlIGNh bGxiYWNrIHJlc2V0cwotCQkJCSAqIHRoZSBmbGFnLgotCQkJCSAqLwotCQkJCWFyZXEtPmNhbGxi YWNrX3BlbmRpbmcgPSBmYWxzZTsKLQotCQkJCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KLQkJ CQlFeGVjQXN5bmNOb3RpZnkoYXJlcSk7Ci0JCQl9Ci0JCX0KLQotCQkvKiBIYW5kbGUgc3RhbmRh cmQgaW50ZXJydXB0cyAqLwotCQlpZiAoKHctPmV2ZW50cyAmIFdMX0xBVENIX1NFVCkgIT0gMCkK LQkJewotCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKLQkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7 Ci0JCX0KLQl9CisJRXhlY0FwcGVuZGVyQXN5bmNFdmVudFdhaXQoJm5vZGUtPmFzLCB0aW1lb3V0 LCBXQUlUX0VWRU5UX0FQUEVORF9SRUFEWSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExNjUsMTQg Kzg0MywxNCBAQCBFeGVjQXN5bmNBcHBlbmRSZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEpCiAJ fQogCiAJLyogU2F2ZSByZXN1bHQgc28gd2UgY2FuIHJldHVybiBpdC4gKi8KLQlBc3NlcnQobm9k ZS0+YXNfbmFzeW5jcmVzdWx0cyA8IG5vZGUtPmFzX25hc3luY3BsYW5zKTsKLQlub2RlLT5hc19h c3luY3Jlc3VsdHNbbm9kZS0+YXNfbmFzeW5jcmVzdWx0cysrXSA9IHNsb3Q7CisJQXNzZXJ0KG5v ZGUtPmFzX25hc3luY3Jlc3VsdHMgPCBub2RlLT5hcy5uYXN5bmNwbGFucyk7CisJbm9kZS0+YXMu YXN5bmNyZXN1bHRzW25vZGUtPmFzX25hc3luY3Jlc3VsdHMrK10gPSBzbG90OwogCiAJLyoKIAkg KiBNYXJrIHRoZSBzdWJwbGFuIHRoYXQgcmV0dXJuZWQgYSByZXN1bHQgYXMgcmVhZHkgZm9yIGEg bmV3IHJlcXVlc3QuICBXZQogCSAqIGRvbid0IGxhdW5jaCBhbm90aGVyIG9uZSBoZXJlIGltbWVk aWF0ZWx5IGJlY2F1c2UgaXQgbWlnaHQgY29tcGxldGUuCiAJICovCi0Jbm9kZS0+YXNfbmVlZHJl cXVlc3QgPSBibXNfYWRkX21lbWJlcihub2RlLT5hc19uZWVkcmVxdWVzdCwKKwlub2RlLT5hcy5u ZWVkcmVxdWVzdCA9IGJtc19hZGRfbWVtYmVyKG5vZGUtPmFzLm5lZWRyZXF1ZXN0LAogCQkJCQkJ CQkJCSAgYXJlcS0+cmVxdWVzdF9pbmRleCk7CiB9CiAKQEAgLTExODcsMTAgKzg2NSwxMCBAQCBF eGVjQXN5bmNBcHBlbmRSZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEpCiBzdGF0aWMgdm9pZAog Y2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JQXNzZXJ0 KG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOworCUFzc2VydChub2RlLT5hcy52 YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUg YXJlIG5vIHZhbGlkIHN1YnBsYW5zLiAqLwotCWlmIChibXNfaXNfZW1wdHkobm9kZS0+YXNfdmFs aWRfc3VicGxhbnMpKQorCWlmIChibXNfaXNfZW1wdHkobm9kZS0+YXMudmFsaWRfc3VicGxhbnMp KQogCXsKIAkJbm9kZS0+YXNfc3luY2RvbmUgPSB0cnVlOwogCQlub2RlLT5hc19uYXN5bmNyZW1h aW4gPSAwOwpAQCAtMTE5OSw4ICs4NzcsOCBAQCBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhB cHBlbmRTdGF0ZSAqbm9kZSkKIAogCS8qIE5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zIGlkZW50aWZp ZWQuICovCiAJaWYgKCFjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFuc19jb21tb24oCi0JCQkJCQkJ CQkJICAgJm5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLAotCQkJCQkJCQkJCSAgIG5vZGUtPmFzX2Fz eW5jcGxhbnMsCi0JCQkJCQkJCQkJICAgJm5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMpKQorCQkJ CQkJCQkJCSAgICZub2RlLT5hcy52YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJCQkgICBub2RlLT5h cy5hc3luY3BsYW5zLAorCQkJCQkJCQkJCSAgICZub2RlLT5hcy52YWxpZF9hc3luY3BsYW5zKSkK IAkJbm9kZS0+YXNfbmFzeW5jcmVtYWluID0gMDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1l cmdlQXBwZW5kLmMKaW5kZXggZjFjMjY3ZWI5ZWIuLjZlYjhjODBiYzRjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtMzgsNiArMzgsNyBAQAogCiAjaW5jbHVkZSAi cG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBcHBlbmQuaCIKICNpbmNsdWRl ICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBc3luYy5oIgog I2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKQEAgLTc2LDE0ICs3Nyw3IEBAIE1l cmdlQXBwZW5kU3RhdGUgKgogRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwg RVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiB7CiAJTWVyZ2VBcHBlbmRTdGF0ZSAqbWVyZ2Vz dGF0ZSA9IG1ha2VOb2RlKE1lcmdlQXBwZW5kU3RhdGUpOwotCVBsYW5TdGF0ZSAqKm1lcmdlcGxh bnN0YXRlczsKLQljb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqbWVyZ2VvcHM7Ci0JQml0bWFwc2V0 ICAqdmFsaWRzdWJwbGFuczsKLQlpbnQJCQlucGxhbnM7Ci0JaW50CQkJaSwKLQkJCQlqOwotCUJp dG1hcHNldCAgKmFzeW5jcGxhbnM7Ci0JaW50CQkJbmFzeW5jcGxhbnM7CisJaW50CQkJaTsKIAog CS8qIGNoZWNrIGZvciB1bnN1cHBvcnRlZCBmbGFncyAqLwogCUFzc2VydCghKGVmbGFncyAmIChF WEVDX0ZMQUdfQkFDS1dBUkQgfCBFWEVDX0ZMQUdfTUFSSykpKTsKQEAgLTkxLDE1NCArODUsMjcg QEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUs IGludCBlZmxhZ3MpCiAJLyoKIAkgKiBjcmVhdGUgbmV3IE1lcmdlQXBwZW5kU3RhdGUgZm9yIG91 ciBub2RlCiAJICovCi0JbWVyZ2VzdGF0ZS0+cHMucGxhbiA9IChQbGFuICopIG5vZGU7Ci0JbWVy Z2VzdGF0ZS0+cHMuc3RhdGUgPSBlc3RhdGU7Ci0JbWVyZ2VzdGF0ZS0+cHMuRXhlY1Byb2NOb2Rl ID0gRXhlY01lcmdlQXBwZW5kOwotCi0JLyogSWYgcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcg aXMgZW5hYmxlZCwgdGhlbiBzZXQgdGhhdCB1cCBub3cgKi8KLQlpZiAobm9kZS0+cGFydF9wcnVu ZV9pbmRleCA+PSAwKQotCXsKLQkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKLQot CQkvKgotCQkgKiBTZXQgdXAgcHJ1bmluZyBkYXRhIHN0cnVjdHVyZS4gIFRoaXMgYWxzbyBpbml0 aWFsaXplcyB0aGUgc2V0IG9mCi0JCSAqIHN1YnBsYW5zIHRvIGluaXRpYWxpemUgKHZhbGlkc3Vi cGxhbnMpIGJ5IHRha2luZyBpbnRvIGFjY291bnQgdGhlCi0JCSAqIHJlc3VsdCBvZiBwZXJmb3Jt aW5nIGluaXRpYWwgcHJ1bmluZyBpZiBhbnkuCi0JCSAqLwotCQlwcnVuZXN0YXRlID0gRXhlY0lu aXRQYXJ0aXRpb25FeGVjUHJ1bmluZygmbWVyZ2VzdGF0ZS0+cHMsCi0JCQkJCQkJCQkJCQkgIGxp c3RfbGVuZ3RoKG5vZGUtPm1lcmdlcGxhbnMpLAotCQkJCQkJCQkJCQkJICBub2RlLT5wYXJ0X3By dW5lX2luZGV4LAotCQkJCQkJCQkJCQkJICBub2RlLT5hcHByZWxpZHMsCi0JCQkJCQkJCQkJCQkg ICZ2YWxpZHN1YnBsYW5zKTsKLQkJbWVyZ2VzdGF0ZS0+bXNfcHJ1bmVfc3RhdGUgPSBwcnVuZXN0 YXRlOwotCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7Ci0KLQkJLyoK LQkJICogV2hlbiBubyBydW4tdGltZSBwcnVuaW5nIGlzIHJlcXVpcmVkIGFuZCB0aGVyZSdzIGF0 IGxlYXN0IG9uZQotCQkgKiBzdWJwbGFuLCB3ZSBjYW4gZmlsbCBtc192YWxpZF9zdWJwbGFucyBp bW1lZGlhdGVseSwgcHJldmVudGluZwotCQkgKiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNo aW5nU3ViUGxhbnMuCi0JCSAqLwotCQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYg bnBsYW5zID4gMCkKLQkJewotCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSBibXNf YWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwotCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRf c3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJbnBsYW5z ID0gbGlzdF9sZW5ndGgobm9kZS0+bWVyZ2VwbGFucyk7Ci0KLQkJLyoKLQkJICogV2hlbiBydW4t dGltZSBwYXJ0aXRpb24gcHJ1bmluZyBpcyBub3QgZW5hYmxlZCB3ZSBjYW4ganVzdCBtYXJrIGFs bAotCQkgKiBzdWJwbGFucyBhcyB2YWxpZDsgdGhleSBtdXN0IGFsc28gYWxsIGJlIGluaXRpYWxp emVkLgotCQkgKi8KLQkJQXNzZXJ0KG5wbGFucyA+IDApOwotCQltZXJnZXN0YXRlLT5tc192YWxp ZF9zdWJwbGFucyA9IHZhbGlkc3VicGxhbnMgPQotCQkJYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBu cGxhbnMgLSAxKTsKLQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9 IHRydWU7Ci0JCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gTlVMTDsKLQl9Ci0KLQltZXJn ZXBsYW5zdGF0ZXMgPSBwYWxsb2NfYXJyYXkoUGxhblN0YXRlICosIG5wbGFucyk7Ci0JbWVyZ2Vz dGF0ZS0+bWVyZ2VwbGFucyA9IG1lcmdlcGxhbnN0YXRlczsKLQltZXJnZXN0YXRlLT5tc19ucGxh bnMgPSBucGxhbnM7Ci0KLQltZXJnZXN0YXRlLT5tc19zbG90cyA9IHBhbGxvYzBfYXJyYXkoVHVw bGVUYWJsZVNsb3QgKiwgbnBsYW5zKTsKLQltZXJnZXN0YXRlLT5tc19oZWFwID0gYmluYXJ5aGVh cF9hbGxvY2F0ZShucGxhbnMsIGhlYXBfY29tcGFyZV9zbG90cywKKwltZXJnZXN0YXRlLT5tcy5w cy5wbGFuID0gKFBsYW4gKikgbm9kZTsKKwltZXJnZXN0YXRlLT5tcy5wcy5zdGF0ZSA9IGVzdGF0 ZTsKKwltZXJnZXN0YXRlLT5tcy5wcy5FeGVjUHJvY05vZGUgPSBFeGVjTWVyZ2VBcHBlbmQ7CisK KwkvKiBJbml0aWFsaXplIGNvbW1vbiBmaWVsZHMgKi8KKwlFeGVjSW5pdEFwcGVuZGVyKCZtZXJn ZXN0YXRlLT5tcywKKwkJCSZub2RlLT5hcCwKKwkJCWVzdGF0ZSwKKwkJCWVmbGFncywKKwkJCS0x LAorCQkJTlVMTCk7CisKKwlpZiAobWVyZ2VzdGF0ZS0+bXMubmFzeW5jcGxhbnMgPiAwICYmIG1l cmdlc3RhdGUtPm1zLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCWNsYXNzaWZ5X21hdGNo aW5nX3N1YnBsYW5zKG1lcmdlc3RhdGUpOworCisJbWVyZ2VzdGF0ZS0+bXNfc2xvdHMgPSBwYWxs b2MwX2FycmF5KFR1cGxlVGFibGVTbG90ICosIG1lcmdlc3RhdGUtPm1zLm5wbGFucyk7CisJbWVy Z2VzdGF0ZS0+bXNfaGVhcCA9IGJpbmFyeWhlYXBfYWxsb2NhdGUobWVyZ2VzdGF0ZS0+bXMubnBs YW5zLCBoZWFwX2NvbXBhcmVfc2xvdHMsCiAJCQkJCQkJCQkJCSAgbWVyZ2VzdGF0ZSk7CiAKLQkv KgotCSAqIGNhbGwgRXhlY0luaXROb2RlIG9uIGVhY2ggb2YgdGhlIHZhbGlkIHBsYW5zIHRvIGJl IGV4ZWN1dGVkIGFuZCBzYXZlCi0JICogdGhlIHJlc3VsdHMgaW50byB0aGUgbWVyZ2VwbGFuc3Rh dGVzIGFycmF5LgotCSAqLwotCWogPSAwOwotCWFzeW5jcGxhbnMgPSBOVUxMOwotCW5hc3luY3Bs YW5zID0gMDsKLQotCWkgPSAtMTsKLQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIodmFsaWRz dWJwbGFucywgaSkpID49IDApCi0JewotCQlQbGFuCSAgICppbml0Tm9kZSA9IChQbGFuICopIGxp c3RfbnRoKG5vZGUtPm1lcmdlcGxhbnMsIGkpOwotCi0JCS8qCi0JCSAqIFJlY29yZCBhc3luYyBz dWJwbGFucy4gIFdoZW4gZXhlY3V0aW5nIEV2YWxQbGFuUXVhbCwgd2UgdHJlYXQgdGhlbQotCQkg KiBhcyBzeW5jIG9uZXM7IGRvbid0IGRvIHRoaXMgd2hlbiBpbml0aWFsaXppbmcgYW4gRXZhbFBs YW5RdWFsIHBsYW4KLQkJICogdHJlZS4KLQkJICovCi0JCWlmIChpbml0Tm9kZS0+YXN5bmNfY2Fw YWJsZSAmJiBlc3RhdGUtPmVzX2VwcV9hY3RpdmUgPT0gTlVMTCkKLQkJewotCQkJYXN5bmNwbGFu cyA9IGJtc19hZGRfbWVtYmVyKGFzeW5jcGxhbnMsIGopOwotCQkJbmFzeW5jcGxhbnMrKzsKLQkJ fQotCi0JCW1lcmdlcGxhbnN0YXRlc1tqKytdID0gRXhlY0luaXROb2RlKGluaXROb2RlLCBlc3Rh dGUsIGVmbGFncyk7Ci0JfQotCi0JLyoKLQkgKiBJbml0aWFsaXplIE1lcmdlQXBwZW5kJ3MgcmVz dWx0IHR1cGxlIHR5cGUgYW5kIHNsb3QuICBJZiB0aGUgY2hpbGQKLQkgKiBwbGFucyBhbGwgcHJv ZHVjZSB0aGUgc2FtZSBmaXhlZCBzbG90IHR5cGUsIHdlIGNhbiB1c2UgdGhhdCBzbG90IHR5cGU7 Ci0JICogb3RoZXJ3aXNlIG1ha2UgYSB2aXJ0dWFsIHNsb3QuICAoTm90ZSB0aGF0IHRoZSByZXN1 bHQgc2xvdCBpdHNlbGYgaXMKLQkgKiB1c2VkIG9ubHkgdG8gcmV0dXJuIGEgbnVsbCB0dXBsZSBh dCBlbmQgb2YgZXhlY3V0aW9uOyByZWFsIHR1cGxlcyBhcmUKLQkgKiByZXR1cm5lZCB0byB0aGUg Y2FsbGVyIGluIHRoZSBjaGlsZHJlbidzIG93biByZXN1bHQgc2xvdHMuICBXaGF0IHdlIGFyZQot CSAqIGRvaW5nIGhlcmUgaXMgYWxsb3dpbmcgdGhlIHBhcmVudCBwbGFuIG5vZGUgdG8gb3B0aW1p emUgaWYgdGhlCi0JICogTWVyZ2VBcHBlbmQgd2lsbCByZXR1cm4gb25seSBvbmUga2luZCBvZiBz bG90LikKLQkgKi8KLQltZXJnZW9wcyA9IEV4ZWNHZXRDb21tb25TbG90T3BzKG1lcmdlcGxhbnN0 YXRlcywgaik7Ci0JaWYgKG1lcmdlb3BzICE9IE5VTEwpCi0JewotCQlFeGVjSW5pdFJlc3VsdFR1 cGxlU2xvdFRMKCZtZXJnZXN0YXRlLT5wcywgbWVyZ2VvcHMpOwotCX0KLQllbHNlCi0JewotCQlF eGVjSW5pdFJlc3VsdFR1cGxlU2xvdFRMKCZtZXJnZXN0YXRlLT5wcywgJlRUU09wc1ZpcnR1YWwp OwotCQkvKiBzaG93IHRoYXQgdGhlIG91dHB1dCBzbG90IHR5cGUgaXMgbm90IGZpeGVkICovCi0J CW1lcmdlc3RhdGUtPnBzLnJlc3VsdG9wc3NldCA9IHRydWU7Ci0JCW1lcmdlc3RhdGUtPnBzLnJl c3VsdG9wc2ZpeGVkID0gZmFsc2U7Ci0JfQotCi0JLyoKLQkgKiBNaXNjZWxsYW5lb3VzIGluaXRp YWxpemF0aW9uCi0JICovCi0JbWVyZ2VzdGF0ZS0+cHMucHNfUHJvakluZm8gPSBOVUxMOwotCi0J LyogSW5pdGlhbGl6ZSBhc3luYyBzdGF0ZSAqLwotCW1lcmdlc3RhdGUtPm1zX2FzeW5jcGxhbnMg PSBhc3luY3BsYW5zOwotCW1lcmdlc3RhdGUtPm1zX25hc3luY3BsYW5zID0gbmFzeW5jcGxhbnM7 Ci0JbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXF1ZXN0cyA9IE5VTEw7Ci0JbWVyZ2VzdGF0ZS0+bXNf YXN5bmNyZXN1bHRzID0gTlVMTDsKIAltZXJnZXN0YXRlLT5tc19oYXNfYXN5bmNyZXN1bHRzID0g TlVMTDsKIAltZXJnZXN0YXRlLT5tc19hc3luY3JlbWFpbiA9IE5VTEw7Ci0JbWVyZ2VzdGF0ZS0+ bXNfbmVlZHJlcXVlc3QgPSBOVUxMOwotCW1lcmdlc3RhdGUtPm1zX2V2ZW50c2V0ID0gTlVMTDsK LQltZXJnZXN0YXRlLT5tc192YWxpZF9hc3luY3BsYW5zID0gTlVMTDsKLQotCWlmIChuYXN5bmNw bGFucyA+IDApCi0JewotCQltZXJnZXN0YXRlLT5tc19hc3luY3JlcXVlc3RzID0gKEFzeW5jUmVx dWVzdCAqKikKLQkJCXBhbGxvYzAobnBsYW5zICogc2l6ZW9mKEFzeW5jUmVxdWVzdCAqKSk7Ci0K LQkJaSA9IC0xOwotCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoYXN5bmNwbGFucywgaSkp ID49IDApCi0JCXsKLQkJCUFzeW5jUmVxdWVzdCAqYXJlcTsKLQotCQkJYXJlcSA9IHBhbGxvYyhz aXplb2YoQXN5bmNSZXF1ZXN0KSk7Ci0JCQlhcmVxLT5yZXF1ZXN0b3IgPSAoUGxhblN0YXRlICop IG1lcmdlc3RhdGU7Ci0JCQlhcmVxLT5yZXF1ZXN0ZWUgPSBtZXJnZXBsYW5zdGF0ZXNbaV07Ci0J CQlhcmVxLT5yZXF1ZXN0X2luZGV4ID0gaTsKLQkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBm YWxzZTsKLQkJCWFyZXEtPnJlcXVlc3RfY29tcGxldGUgPSBmYWxzZTsKLQkJCWFyZXEtPnJlc3Vs dCA9IE5VTEw7Ci0KLQkJCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVxdWVzdHNbaV0gPSBhcmVxOwot CQl9Ci0KLQkJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXN1bHRzID0gKFR1cGxlVGFibGVTbG90ICoq KQotCQkJcGFsbG9jMChucGxhbnMgKiBzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikpOwotCi0JCWlm IChtZXJnZXN0YXRlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQotCQkJY2xhc3NpZnlf bWF0Y2hpbmdfc3VicGxhbnMobWVyZ2VzdGF0ZSk7Ci0JfQogCiAJLyoKIAkgKiBpbml0aWFsaXpl IHNvcnQta2V5IGluZm9ybWF0aW9uCkBAIC0yOTMsMjAgKzE2MCwyMCBAQCBFeGVjTWVyZ2VBcHBl bmQoUGxhblN0YXRlICpwc3RhdGUpCiAJaWYgKCFub2RlLT5tc19pbml0aWFsaXplZCkKIAl7CiAJ CS8qIE5vdGhpbmcgdG8gZG8gaWYgYWxsIHN1YnBsYW5zIHdlcmUgcHJ1bmVkICovCi0JCWlmIChu b2RlLT5tc19ucGxhbnMgPT0gMCkKLQkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5wcy5w c19SZXN1bHRUdXBsZVNsb3QpOworCQlpZiAobm9kZS0+bXMubnBsYW5zID09IDApCisJCQlyZXR1 cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+bXMucHMucHNfUmVzdWx0VHVwbGVTbG90KTsKIAogCQkv KiBJZiB3ZSd2ZSB5ZXQgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZCBzdWJwbGFucyB0aGVuIGRvIHNv IG5vdy4gKi8KLQkJaWYgKCFub2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCQlp ZiAoIW5vZGUtPm1zLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJCXsKLQkJCW5vZGUtPm1z X3ZhbGlkX3N1YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+bXNf cHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKLQkJCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lk ZW50aWZpZWQgPSB0cnVlOworCQkJbm9kZS0+bXMudmFsaWRfc3VicGxhbnMgPQorCQkJCUV4ZWNG aW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5tcy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwor CQkJbm9kZS0+bXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CiAJCQljbGFzc2lm eV9tYXRjaGluZ19zdWJwbGFucyhub2RlKTsKIAkJfQogCiAJCS8qIElmIHRoZXJlIGFyZSBhbnkg YXN5bmMgc3VicGxhbnMsIGJlZ2luIGV4ZWN1dGluZyB0aGVtLiAqLwotCQlpZiAobm9kZS0+bXNf bmFzeW5jcGxhbnMgPiAwKQorCQlpZiAobm9kZS0+bXMubmFzeW5jcGxhbnMgPiAwKQogCQkJRXhl Y01lcmdlQXBwZW5kQXN5bmNCZWdpbihub2RlKTsKIAogCQkvKgpAQCAtMzE0LDE2ICsxODEsMTYg QEAgRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkgKiBhbmQgc2V0IHVwIHRo ZSBoZWFwLgogCQkgKi8KIAkJaSA9IC0xOwotCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIo bm9kZS0+bXNfdmFsaWRfc3VicGxhbnMsIGkpKSA+PSAwKQorCQl3aGlsZSAoKGkgPSBibXNfbmV4 dF9tZW1iZXIobm9kZS0+bXMudmFsaWRfc3VicGxhbnMsIGkpKSA+PSAwKQogCQl7Ci0JCQlub2Rl LT5tc19zbG90c1tpXSA9IEV4ZWNQcm9jTm9kZShub2RlLT5tZXJnZXBsYW5zW2ldKTsKKwkJCW5v ZGUtPm1zX3Nsb3RzW2ldID0gRXhlY1Byb2NOb2RlKG5vZGUtPm1zLnBsYW5zW2ldKTsKIAkJCWlm ICghVHVwSXNOdWxsKG5vZGUtPm1zX3Nsb3RzW2ldKSkKIAkJCQliaW5hcnloZWFwX2FkZF91bm9y ZGVyZWQobm9kZS0+bXNfaGVhcCwgSW50MzJHZXREYXR1bShpKSk7CiAJCX0KIAogCQkvKiBMb29r IGF0IHZhbGlkIGFzeW5jIHN1YnBsYW5zICovCiAJCWkgPSAtMTsKLQkJd2hpbGUgKChpID0gYm1z X25leHRfbWVtYmVyKG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQorCQl3aGls ZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXMudmFsaWRfYXN5bmNwbGFucywgaSkpID49 IDApCiAJCXsKIAkJCUV4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0TmV4dChub2RlLCBpKTsKIAkJCWlm ICghVHVwSXNOdWxsKG5vZGUtPm1zX3Nsb3RzW2ldKSkKQEAgLTM0NCwxMiArMjExLDEyIEBAIEV4 ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICogdG8gbm90IHB1bGwgdHVwbGVz IHVudGlsIG5lY2Vzc2FyeS4pCiAJCSAqLwogCQlpID0gRGF0dW1HZXRJbnQzMihiaW5hcnloZWFw X2ZpcnN0KG5vZGUtPm1zX2hlYXApKTsKLQkJaWYgKGJtc19pc19tZW1iZXIoaSwgbm9kZS0+bXNf YXN5bmNwbGFucykpCisJCWlmIChibXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zLmFzeW5jcGxhbnMp KQogCQkJRXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0KG5vZGUsIGkpOwogCQllbHNlCiAJCXsK LQkJCUFzc2VydChibXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zKSk7Ci0J CQlub2RlLT5tc19zbG90c1tpXSA9IEV4ZWNQcm9jTm9kZShub2RlLT5tZXJnZXBsYW5zW2ldKTsK KwkJCUFzc2VydChibXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zLnZhbGlkX3N1YnBsYW5zKSk7CisJ CQlub2RlLT5tc19zbG90c1tpXSA9IEV4ZWNQcm9jTm9kZShub2RlLT5tcy5wbGFuc1tpXSk7CiAJ CX0KIAkJaWYgKCFUdXBJc051bGwobm9kZS0+bXNfc2xvdHNbaV0pKQogCQkJYmluYXJ5aGVhcF9y ZXBsYWNlX2ZpcnN0KG5vZGUtPm1zX2hlYXAsIEludDMyR2V0RGF0dW0oaSkpOwpAQCAtMzYwLDcg KzIyNyw3IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAlpZiAoYmluYXJ5 aGVhcF9lbXB0eShub2RlLT5tc19oZWFwKSkKIAl7CiAJCS8qIEFsbCB0aGUgc3VicGxhbnMgYXJl IGV4aGF1c3RlZCwgYW5kIHNvIGlzIHRoZSBoZWFwICovCi0JCXJlc3VsdCA9IEV4ZWNDbGVhclR1 cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CisJCXJlc3VsdCA9IEV4ZWNDbGVhclR1 cGxlKG5vZGUtPm1zLnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CiAJfQogCWVsc2UKIAl7CkBAIC00 MjYsODEgKzI5MywyMiBAQCBoZWFwX2NvbXBhcmVfc2xvdHMoRGF0dW0gYSwgRGF0dW0gYiwgdm9p ZCAqYXJnKQogdm9pZAogRXhlY0VuZE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUp CiB7Ci0JUGxhblN0YXRlICoqbWVyZ2VwbGFuczsKLQlpbnQJCQlucGxhbnM7Ci0JaW50CQkJaTsK LQotCS8qCi0JICogZ2V0IGluZm9ybWF0aW9uIGZyb20gdGhlIG5vZGUKLQkgKi8KLQltZXJnZXBs YW5zID0gbm9kZS0+bWVyZ2VwbGFuczsKLQlucGxhbnMgPSBub2RlLT5tc19ucGxhbnM7Ci0KLQkv KgotCSAqIHNodXQgZG93biBlYWNoIG9mIHRoZSBzdWJzY2FucwotCSAqLwotCWZvciAoaSA9IDA7 IGkgPCBucGxhbnM7IGkrKykKLQkJRXhlY0VuZE5vZGUobWVyZ2VwbGFuc1tpXSk7CisJRXhlY0Vu ZEFwcGVuZGVyKCZub2RlLT5tcyk7CiB9CiAKIHZvaWQKIEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChN ZXJnZUFwcGVuZFN0YXRlICpub2RlKQogewotCWludAkJCWk7Ci0JaW50CQkJbmFzeW5jcGxhbnMg PSBub2RlLT5tc19uYXN5bmNwbGFuczsKKwlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUtPm1zLm5h c3luY3BsYW5zOwogCi0JLyoKLQkgKiBJZiBhbnkgUEFSQU1fRVhFQyBQYXJhbXMgdXNlZCBpbiBw cnVuaW5nIGV4cHJlc3Npb25zIGhhdmUgY2hhbmdlZCwgdGhlbgotCSAqIHdlJ2QgYmV0dGVyIHVu c2V0IHRoZSB2YWxpZCBzdWJwbGFucyBzbyB0aGF0IHRoZXkgYXJlIHJlc2VsZWN0ZWQgZm9yCi0J ICogdGhlIG5ldyBwYXJhbWV0ZXIgdmFsdWVzLgotCSAqLwotCWlmIChub2RlLT5tc19wcnVuZV9z dGF0ZSAmJgotCQlibXNfb3ZlcmxhcChub2RlLT5wcy5jaGdQYXJhbSwKLQkJCQkJbm9kZS0+bXNf cHJ1bmVfc3RhdGUtPmV4ZWNwYXJhbWlkcykpCi0JewotCQlub2RlLT5tc192YWxpZF9zdWJwbGFu c19pZGVudGlmaWVkID0gZmFsc2U7Ci0JCWJtc19mcmVlKG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5z KTsKLQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPSBOVUxMOwotCQlibXNfZnJlZShub2RlLT5t c192YWxpZF9hc3luY3BsYW5zKTsKLQkJbm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucyA9IE5VTEw7 Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG5vZGUtPm1zX25wbGFuczsgaSsrKQotCXsKLQkJUGxh blN0YXRlICAqc3Vibm9kZSA9IG5vZGUtPm1lcmdlcGxhbnNbaV07Ci0KLQkJLyoKLQkJICogRXhl Y1JlU2NhbiBkb2Vzbid0IGtub3cgYWJvdXQgbXkgc3VicGxhbnMsIHNvIEkgaGF2ZSB0byBkbwot CQkgKiBjaGFuZ2VkLXBhcmFtZXRlciBzaWduYWxpbmcgbXlzZWxmLgotCQkgKi8KLQkJaWYgKG5v ZGUtPnBzLmNoZ1BhcmFtICE9IE5VTEwpCi0JCQlVcGRhdGVDaGFuZ2VkUGFyYW1TZXQoc3Vibm9k ZSwgbm9kZS0+cHMuY2hnUGFyYW0pOwotCi0JCS8qCi0JCSAqIElmIGNoZ1BhcmFtIG9mIHN1Ym5v ZGUgaXMgbm90IG51bGwgdGhlbiBwbGFuIHdpbGwgYmUgcmUtc2Nhbm5lZCBieQotCQkgKiBmaXJz dCBFeGVjUHJvY05vZGUuCi0JCSAqLwotCQlpZiAoc3Vibm9kZS0+Y2hnUGFyYW0gPT0gTlVMTCkK LQkJCUV4ZWNSZVNjYW4oc3Vibm9kZSk7Ci0JfQorCUV4ZWNSZVNjYW5BcHBlbmRlcigmbm9kZS0+ bXMpOwogCi0JLyogUmVzZXQgYXN5bmMgc3RhdGUgKi8KKwkvKiBSZXNldCBzcGVjaWZpYyBtZXJn ZSBhcHBlbmQgYXN5bmMgc3RhdGUgKi8KIAlpZiAobmFzeW5jcGxhbnMgPiAwKQogCXsKLQkJaSA9 IC0xOwotCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfYXN5bmNwbGFucywg aSkpID49IDApCi0JCXsKLQkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2FzeW5jcmVx dWVzdHNbaV07Ci0KLQkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKLQkJCWFyZXEt PnJlcXVlc3RfY29tcGxldGUgPSBmYWxzZTsKLQkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7Ci0JCX0K LQogCQlibXNfZnJlZShub2RlLT5tc19hc3luY3JlbWFpbik7CiAJCW5vZGUtPm1zX2FzeW5jcmVt YWluID0gTlVMTDsKLQkJYm1zX2ZyZWUobm9kZS0+bXNfbmVlZHJlcXVlc3QpOwotCQlub2RlLT5t c19uZWVkcmVxdWVzdCA9IE5VTEw7CisJCWJtc19mcmVlKG5vZGUtPm1zLm5lZWRyZXF1ZXN0KTsK IAkJYm1zX2ZyZWUobm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyk7CiAJCW5vZGUtPm1zX2hhc19h c3luY3Jlc3VsdHMgPSBOVUxMOwogCX0KQEAgLTUxOSwxMCArMzI3LDEwIEBAIEV4ZWNSZVNjYW5N ZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogc3RhdGljIHZvaWQKIGNsYXNzaWZ5 X21hdGNoaW5nX3N1YnBsYW5zKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JQXNzZXJ0KG5v ZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOworCUFzc2VydChub2RlLT5tcy52YWxp ZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJl IG5vIHZhbGlkIHN1YnBsYW5zLiAqLwotCWlmIChibXNfaXNfZW1wdHkobm9kZS0+bXNfdmFsaWRf c3VicGxhbnMpKQorCWlmIChibXNfaXNfZW1wdHkobm9kZS0+bXMudmFsaWRfc3VicGxhbnMpKQog CXsKIAkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOwogCQlyZXR1cm47CkBAIC01MzAsOSAr MzM4LDkgQEAgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9k ZSkKIAogCS8qIE5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zIGlkZW50aWZpZWQuICovCiAJaWYgKCFj bGFzc2lmeV9tYXRjaGluZ19zdWJwbGFuc19jb21tb24oCi0JCQkJCQkJCQkJICAgJm5vZGUtPm1z X3ZhbGlkX3N1YnBsYW5zLAotCQkJCQkJCQkJCSAgIG5vZGUtPm1zX2FzeW5jcGxhbnMsCi0JCQkJ CQkJCQkJICAgJm5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMpKQorCQkJCQkJCQkJCSAgICZub2Rl LT5tcy52YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJCQkgICBub2RlLT5tcy5hc3luY3BsYW5zLAor CQkJCQkJCQkJCSAgICZub2RlLT5tcy52YWxpZF9hc3luY3BsYW5zKSkKIAkJbm9kZS0+bXNfYXN5 bmNyZW1haW4gPSBOVUxMOwogfQogCkBAIC01NDUsMzkgKzM1MywxNyBAQCBjbGFzc2lmeV9tYXRj aGluZ19zdWJwbGFucyhNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogc3RhdGljIHZvaWQKIEV4ZWNN ZXJnZUFwcGVuZEFzeW5jQmVnaW4oTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlpbnQJCQlp OwotCi0JLyogQmFja3dhcmQgc2NhbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFzeW5jLWF3YXJlIE1l cmdlQXBwZW5kcy4gKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5z dGF0ZS0+ZXNfZGlyZWN0aW9uKSk7Ci0KLQkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdo ZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5zICovCi0JQXNzZXJ0KG5vZGUtPm1zX25wbGFucyA+IDAp OwotCi0JLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBhc3lu YyBzdWJwbGFucy4gKi8KLQlBc3NlcnQobm9kZS0+bXNfbmFzeW5jcGxhbnMgPiAwKTsKLQogCS8q IEV4ZWNNZXJnZUFwcGVuZCgpIGlkZW50aWZpZXMgdmFsaWQgc3VicGxhbnMgKi8KLQlBc3NlcnQo bm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CisJQXNzZXJ0KG5vZGUtPm1zLnZh bGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOwogCiAJLyogSW5pdGlhbGl6ZSBzdGF0ZSB2YXJpYWJs ZXMuICovCi0Jbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBibXNfY29weShub2RlLT5tc192YWxpZF9h c3luY3BsYW5zKTsKKwlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJtc19jb3B5KG5vZGUtPm1zLnZh bGlkX2FzeW5jcGxhbnMpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFs aWQgYXN5bmMgc3VicGxhbnMuICovCiAJaWYgKGJtc19pc19lbXB0eShub2RlLT5tc19hc3luY3Jl bWFpbikpCiAJCXJldHVybjsKIAotCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSB2 YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KLQlpID0gLTE7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRf bWVtYmVyKG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQotCXsKLQkJQXN5bmNS ZXF1ZXN0ICphcmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXTsKLQotCQlBc3NlcnQoYXJl cS0+cmVxdWVzdF9pbmRleCA9PSBpKTsKLQkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5n KTsKLQotCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCUV4ZWNBc3luY1JlcXVlc3QoYXJl cSk7Ci0JfQorCUV4ZWNBcHBlbmRlckFzeW5jQmVnaW4oJm5vZGUtPm1zKTsKIH0KIAogLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpAQCAtNjM4LDcgKzQyNCw3IEBAIEV4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChNZXJn ZUFwcGVuZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pCiAJICovCiAJaWYgKGJtc19pc19tZW1iZXIo bXBsYW4sIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQogCXsKLQkJbm9kZS0+bXNfc2xvdHNb bXBsYW5dID0gbm9kZS0+bXNfYXN5bmNyZXN1bHRzW21wbGFuXTsKKwkJbm9kZS0+bXNfc2xvdHNb bXBsYW5dID0gbm9kZS0+bXMuYXN5bmNyZXN1bHRzW21wbGFuXTsKIAkJcmV0dXJuIHRydWU7CiAJ fQogCkBAIC02NDgsNyArNDM0LDcgQEAgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdl QXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKIAkgKi8KIAluZWVkcmVxdWVzdCA9IE5VTEw7 CiAJaSA9IC0xOwotCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc19uZWVkcmVx dWVzdCwgaSkpID49IDApCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zLm5l ZWRyZXF1ZXN0LCBpKSkgPj0gMCkKIAl7CiAJCWlmICghYm1zX2lzX21lbWJlcihpLCBub2RlLT5t c19oYXNfYXN5bmNyZXN1bHRzKSkKIAkJCW5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1iZXIobmVl ZHJlcXVlc3QsIGkpOwpAQCAtNjYxLDEzICs0NDcsMTMgQEAgRXhlY01lcmdlQXBwZW5kQXN5bmNS ZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKIAkJcmV0dXJuIGZhbHNl OwogCiAJLyogQ2xlYXIgbXNfbmVlZHJlcXVlc3QgZmxhZywgYXMgd2UgYXJlIGdvaW5nIHRvIHNl bmQgcmVxdWVzdHMgbm93ICovCi0Jbm9kZS0+bXNfbmVlZHJlcXVlc3QgPSBibXNfZGVsX21lbWJl cnMobm9kZS0+bXNfbmVlZHJlcXVlc3QsIG5lZWRyZXF1ZXN0KTsKKwlub2RlLT5tcy5uZWVkcmVx dWVzdCA9IGJtc19kZWxfbWVtYmVycyhub2RlLT5tcy5uZWVkcmVxdWVzdCwgbmVlZHJlcXVlc3Qp OwogCiAJLyogTWFrZSBhIG5ldyByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSBhc3luYyBzdWJwbGFu cyB0aGF0IG5lZWQgaXQuICovCiAJaSA9IC0xOwogCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJl cihuZWVkcmVxdWVzdCwgaSkpID49IDApCiAJewotCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2Rl LT5tc19hc3luY3JlcXVlc3RzW2ldOworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tcy5h c3luY3JlcXVlc3RzW2ldOwogCiAJCS8qCiAJCSAqIFdlJ3ZlIGp1c3QgY2hlY2tlZCB0aGF0IHN1 YnBsYW4gZG9lc24ndCBhbHJlYWR5IGhhdmUgc29tZSBmZXRjaGVkCkBAIC02ODMsNyArNDY5LDcg QEAgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGlu dCBtcGxhbikKIAkvKiBSZXR1cm4gbmVlZGVkIGFzeW5jaHJvbm91c2x5LWdlbmVyYXRlZCByZXN1 bHRzIGlmIGFueS4gKi8KIAlpZiAoYm1zX2lzX21lbWJlcihtcGxhbiwgbm9kZS0+bXNfaGFzX2Fz eW5jcmVzdWx0cykpCiAJewotCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2RlLT5tc19hc3lu Y3Jlc3VsdHNbbXBsYW5dOworCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2RlLT5tcy5hc3lu Y3Jlc3VsdHNbbXBsYW5dOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKQEAgLTcwNyw3ICs0OTMsNyBA QCBFeGVjQXN5bmNNZXJnZUFwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIAkvKiBX ZSBzaG91bGQgaGFuZGxlIHByZXZpb3VzIGFzeW5jIHJlc3VsdCBwcmlvciB0byBnZXR0aW5nIG5l dyBvbmUgKi8KIAlBc3NlcnQoIWJtc19pc19tZW1iZXIoYXJlcS0+cmVxdWVzdF9pbmRleCwgbm9k ZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykpOwogCi0Jbm9kZS0+bXNfYXN5bmNyZXN1bHRzW2FyZXEt PnJlcXVlc3RfaW5kZXhdID0gTlVMTDsKKwlub2RlLT5tcy5hc3luY3Jlc3VsdHNbYXJlcS0+cmVx dWVzdF9pbmRleF0gPSBOVUxMOwogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHJlcXVlc3QgaXMg cGVuZGluZy4gKi8KIAlpZiAoIWFyZXEtPnJlcXVlc3RfY29tcGxldGUpCiAJewpAQCAtNzMwLDEz ICs1MTYsMTMgQEAgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZShBc3luY1JlcXVlc3QgKmFy ZXEpCiAJbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IGJtc19hZGRfbWVtYmVyKG5vZGUtPm1z X2hhc19hc3luY3Jlc3VsdHMsCiAJCQkJCQkJCQkJCSAgIGFyZXEtPnJlcXVlc3RfaW5kZXgpOwog CS8qIFNhdmUgcmVzdWx0IHNvIHdlIGNhbiByZXR1cm4gaXQuICovCi0Jbm9kZS0+bXNfYXN5bmNy ZXN1bHRzW2FyZXEtPnJlcXVlc3RfaW5kZXhdID0gc2xvdDsKKwlub2RlLT5tcy5hc3luY3Jlc3Vs dHNbYXJlcS0+cmVxdWVzdF9pbmRleF0gPSBzbG90OwogCiAJLyoKIAkgKiBNYXJrIHRoZSBzdWJw bGFuIHRoYXQgcmV0dXJuZWQgYSByZXN1bHQgYXMgcmVhZHkgZm9yIGEgbmV3IHJlcXVlc3QuICBX ZQogCSAqIGRvbid0IGxhdW5jaCBhbm90aGVyIG9uZSBoZXJlIGltbWVkaWF0ZWx5IGJlY2F1c2Ug aXQgbWlnaHQgY29tcGxldGUuCiAJICovCi0Jbm9kZS0+bXNfbmVlZHJlcXVlc3QgPSBibXNfYWRk X21lbWJlcihub2RlLT5tc19uZWVkcmVxdWVzdCwKKwlub2RlLT5tcy5uZWVkcmVxdWVzdCA9IGJt c19hZGRfbWVtYmVyKG5vZGUtPm1zLm5lZWRyZXF1ZXN0LAogCQkJCQkJCQkJCSAgYXJlcS0+cmVx dWVzdF9pbmRleCk7CiB9CiAKQEAgLTc0OSwxMDEgKzUzNSw4IEBAIEV4ZWNBc3luY01lcmdlQXBw ZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQogc3RhdGljIHZvaWQKIEV4ZWNNZXJnZUFw cGVuZEFzeW5jRXZlbnRXYWl0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JaW50CQkJbmV2 ZW50cyA9IG5vZGUtPm1zX25hc3luY3BsYW5zICsgMjsgLyogb25lIGZvciBQTSBkZWF0aCBhbmQK LQkJCQkJCQkJCQkJCQkgKiBvbmUgZm9yIGxhdGNoICovCi0JV2FpdEV2ZW50CW9jY3VycmVkX2V2 ZW50W0VWRU5UX0JVRkZFUl9TSVpFXTsKLQlpbnQJCQlub2NjdXJyZWQ7Ci0JaW50CQkJaTsKLQog CS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5 bmMgc3VicGxhbnMuICovCiAJQXNzZXJ0KGJtc19udW1fbWVtYmVycyhub2RlLT5tc19hc3luY3Jl bWFpbikgPiAwKTsKIAotCW5vZGUtPm1zX2V2ZW50c2V0ID0gQ3JlYXRlV2FpdEV2ZW50U2V0KEN1 cnJlbnRSZXNvdXJjZU93bmVyLCBuZXZlbnRzKTsKLQlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5t c19ldmVudHNldCwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJ ICBOVUxMLCBOVUxMKTsKLQotCS8qIEdpdmUgZWFjaCB3YWl0aW5nIHN1YnBsYW4gYSBjaGFuY2Ug dG8gYWRkIGFuIGV2ZW50LiAqLwotCWkgPSAtMTsKLQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1i ZXIobm9kZS0+bXNfYXN5bmNwbGFucywgaSkpID49IDApCi0JewotCQlBc3luY1JlcXVlc3QgKmFy ZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ldOwotCi0JCWlmIChhcmVxLT5jYWxsYmFja19w ZW5kaW5nKQotCQkJRXhlY0FzeW5jQ29uZmlndXJlV2FpdChhcmVxKTsKLQl9Ci0KLQkvKgotCSAq IE5vIG5lZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBpZiBub25lIG9mIHRoZSBzdWJwbGFucyBj b25maWd1cmVkIGFueQotCSAqIGV2ZW50cy4KLQkgKi8KLQlpZiAoR2V0TnVtUmVnaXN0ZXJlZFdh aXRFdmVudHMobm9kZS0+bXNfZXZlbnRzZXQpID09IDEpCi0JewotCQlGcmVlV2FpdEV2ZW50U2V0 KG5vZGUtPm1zX2V2ZW50c2V0KTsKLQkJbm9kZS0+bXNfZXZlbnRzZXQgPSBOVUxMOwotCQlyZXR1 cm47Ci0JfQotCi0JLyoKLQkgKiBBZGQgdGhlIHByb2Nlc3MgbGF0Y2ggdG8gdGhlIHNldCwgc28g dGhhdCB3ZSB3YWtlIHVwIHRvIHByb2Nlc3MgdGhlCi0JICogc3RhbmRhcmQgaW50ZXJydXB0cyB3 aXRoIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkuCi0JICoKLQkgKiBOT1RFOiBGb3IgaGlzdG9yaWNh bCByZWFzb25zLCBpdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgaXMgYWRkZWQgdG8gdGhlCi0JICog V2FpdEV2ZW50U2V0IGFmdGVyIHRoZSBFeGVjQXN5bmNDb25maWd1cmVXYWl0KCkgY2FsbHMuICBO YW1lbHksCi0JICogcG9zdGdyZXNfZmR3IGNhbGxzICJHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50 cyhzZXQpID09IDEiIHRvIGNoZWNrIGlmCi0JICogYW55IG90aGVyIGV2ZW50cyBhcmUgaW4gdGhl IHNldC4gIFRoYXQncyBhIHBvb3IgZGVzaWduLCBpdCdzCi0JICogcXVlc3Rpb25hYmxlIGZvciBw b3N0Z3Jlc19mZHcgdG8gYmUgZG9pbmcgdGhhdCBpbiB0aGUgZmlyc3QgcGxhY2UsIGJ1dAotCSAq IHdlIGNhbm5vdCBjaGFuZ2UgaXQgbm93LiAgVGhlIHBhdHRlcm4gaGFzIHBvc3NpYmx5IGJlZW4g Y29waWVkIHRvIG90aGVyCi0JICogZXh0ZW5zaW9ucyB0b28uCi0JICovCi0JQWRkV2FpdEV2ZW50 VG9TZXQobm9kZS0+bXNfZXZlbnRzZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwK LQkJCQkJICBNeUxhdGNoLCBOVUxMKTsKLQotCS8qIFJldHVybiBhdCBtb3N0IEVWRU5UX0JVRkZF Ul9TSVpFIGV2ZW50cyBpbiBvbmUgY2FsbC4gKi8KLQlpZiAobmV2ZW50cyA+IEVWRU5UX0JVRkZF Ul9TSVpFKQotCQluZXZlbnRzID0gRVZFTlRfQlVGRkVSX1NJWkU7Ci0KLQkvKgotCSAqIFdhaXQg dW50aWwgYXQgbGVhc3Qgb25lIGV2ZW50IG9jY3Vycy4KLQkgKi8KLQlub2NjdXJyZWQgPSBXYWl0 RXZlbnRTZXRXYWl0KG5vZGUtPm1zX2V2ZW50c2V0LCAtMSAvKiBubyB0aW1lb3V0ICovICwgb2Nj dXJyZWRfZXZlbnQsCi0JCQkJCQkJCSBuZXZlbnRzLCBXQUlUX0VWRU5UX0FQUEVORF9SRUFEWSk7 Ci0JRnJlZVdhaXRFdmVudFNldChub2RlLT5tc19ldmVudHNldCk7Ci0Jbm9kZS0+bXNfZXZlbnRz ZXQgPSBOVUxMOwotCWlmIChub2NjdXJyZWQgPT0gMCkKLQkJcmV0dXJuOwotCi0JLyogRGVsaXZl ciBub3RpZmljYXRpb25zLiAqLwotCWZvciAoaSA9IDA7IGkgPCBub2NjdXJyZWQ7IGkrKykKLQl7 Ci0JCVdhaXRFdmVudCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07Ci0KLQkJLyoKLQkJICogRWFj aCB3YWl0aW5nIHN1YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJlZCBpdHMgd2FpdCBldmVudCB3 aXRoCi0JCSAqIHVzZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0cyBBc3luY1JlcXVlc3QuCi0J CSAqLwotCQlpZiAoKHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFEQUJMRSkgIT0gMCkKLQkJewot CQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAqKSB3LT51c2VyX2RhdGE7Ci0K LQkJCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQotCQkJewotCQkJCS8qCi0JCQkJICogTWFy ayBpdCBhcyBubyBsb25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAgV2UgbXVzdCBkbyB0aGlzCi0J CQkJICogYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBpbiBjYXNlIHRoZSBjYWxsYmFj ayByZXNldHMKLQkJCQkgKiB0aGUgZmxhZy4KLQkJCQkgKi8KLQkJCQlhcmVxLT5jYWxsYmFja19w ZW5kaW5nID0gZmFsc2U7Ci0KLQkJCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCQkJRXhl Y0FzeW5jTm90aWZ5KGFyZXEpOwotCQkJfQotCQl9Ci0KLQkJLyogSGFuZGxlIHN0YW5kYXJkIGlu dGVycnVwdHMgKi8KLQkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQpICE9IDApCi0JCXsK LQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7Ci0JCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQl9 Ci0JfQorCUV4ZWNBcHBlbmRlckFzeW5jRXZlbnRXYWl0KCZub2RlLT5tcywgLTEgLyogbm8gdGlt ZW91dCAqLywgV0FJVF9FVkVOVF9BUFBFTkRfUkVBRFkpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpp bmRleCAwMjRhMmIyZmQ4NC4uMmY0ZTJhZTZkMzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25v ZGVzL25vZGVGdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCkBAIC00 NzUxLDE0ICs0NzUxLDE0IEBAIHBsYW5zdGF0ZV90cmVlX3dhbGtlcl9pbXBsKFBsYW5TdGF0ZSAq cGxhbnN0YXRlLAogCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKIAl7CiAJCWNhc2UgVF9BcHBlbmQ6 Ci0JCQlpZiAocGxhbnN0YXRlX3dhbGtfbWVtYmVycygoKEFwcGVuZFN0YXRlICopIHBsYW5zdGF0 ZSktPmFwcGVuZHBsYW5zLAotCQkJCQkJCQkJICAgKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUp LT5hc19ucGxhbnMsCisJCQlpZiAocGxhbnN0YXRlX3dhbGtfbWVtYmVycygoKEFwcGVuZFN0YXRl ICopIHBsYW5zdGF0ZSktPmFzLnBsYW5zLAorCQkJCQkJCQkJICAgKChBcHBlbmRTdGF0ZSAqKSBw bGFuc3RhdGUpLT5hcy5ucGxhbnMsCiAJCQkJCQkJCQkgICB3YWxrZXIsIGNvbnRleHQpKQogCQkJ CXJldHVybiB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9NZXJnZUFwcGVuZDoKLQkJCWlmIChw bGFuc3RhdGVfd2Fsa19tZW1iZXJzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5t ZXJnZXBsYW5zLAotCQkJCQkJCQkJICAgKChNZXJnZUFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSkt Pm1zX25wbGFucywKKwkJCWlmIChwbGFuc3RhdGVfd2Fsa19tZW1iZXJzKCgoTWVyZ2VBcHBlbmRT dGF0ZSAqKSBwbGFuc3RhdGUpLT5tcy5wbGFucywKKwkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmRT dGF0ZSAqKSBwbGFuc3RhdGUpLT5tcy5ucGxhbnMsCiAJCQkJCQkJCQkgICB3YWxrZXIsIGNvbnRl eHQpKQogCQkJCXJldHVybiB0cnVlOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMKaW5kZXggMjQzMjVkNDJmMGQuLmJiODQwNDBlOGY5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0xMjYyLDExICsxMjYyLDExIEBAIGNy ZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9wYXRo LCBpbnQgZmxhZ3MpCiAJICogY2hpbGQgcGxhbnMsIHRvIG1ha2UgY3Jvc3MtY2hlY2tpbmcgdGhl IHNvcnQgaW5mbyBlYXNpZXIuCiAJICovCiAJcGxhbiA9IG1ha2VOb2RlKEFwcGVuZCk7Ci0JcGxh bi0+cGxhbi50YXJnZXRsaXN0ID0gdGxpc3Q7Ci0JcGxhbi0+cGxhbi5xdWFsID0gTklMOwotCXBs YW4tPnBsYW4ubGVmdHRyZWUgPSBOVUxMOwotCXBsYW4tPnBsYW4ucmlnaHR0cmVlID0gTlVMTDsK LQlwbGFuLT5hcHByZWxpZHMgPSByZWwtPnJlbGlkczsKKwlwbGFuLT5hcC5wbGFuLnRhcmdldGxp c3QgPSB0bGlzdDsKKwlwbGFuLT5hcC5wbGFuLnF1YWwgPSBOSUw7CisJcGxhbi0+YXAucGxhbi5s ZWZ0dHJlZSA9IE5VTEw7CisJcGxhbi0+YXAucGxhbi5yaWdodHRyZWUgPSBOVUxMOworCXBsYW4t PmFwLmFwcHJlbGlkcyA9IHJlbC0+cmVsaWRzOwogCiAJaWYgKHBhdGhrZXlzICE9IE5JTCkKIAl7 CkBAIC0xMjg1LDcgKzEyODUsNyBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJv b3QsIEFwcGVuZFBhdGggKmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCQkJCQkJCQkJCSAgJm5vZGVT b3J0T3BlcmF0b3JzLAogCQkJCQkJCQkJCSAgJm5vZGVDb2xsYXRpb25zLAogCQkJCQkJCQkJCSAg Jm5vZGVOdWxsc0ZpcnN0KTsKLQkJdGxpc3Rfd2FzX2NoYW5nZWQgPSAob3JpZ190bGlzdF9sZW5n dGggIT0gbGlzdF9sZW5ndGgocGxhbi0+cGxhbi50YXJnZXRsaXN0KSk7CisJCXRsaXN0X3dhc19j aGFuZ2VkID0gKG9yaWdfdGxpc3RfbGVuZ3RoICE9IGxpc3RfbGVuZ3RoKHBsYW4tPmFwLnBsYW4u dGFyZ2V0bGlzdCkpOwogCX0KIAogCS8qIElmIGFwcHJvcHJpYXRlLCBjb25zaWRlciBhc3luYyBh cHBlbmQgKi8KQEAgLTEzOTUsNyArMTM5NSw3IEBAIGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVy SW5mbyAqcm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3MpCiAJfQogCiAJLyog U2V0IGJlbG93IGlmIHdlIGZpbmQgcXVhbHMgdGhhdCB3ZSBjYW4gdXNlIHRvIHJ1bi10aW1lIHBy dW5lICovCi0JcGxhbi0+cGFydF9wcnVuZV9pbmRleCA9IC0xOworCXBsYW4tPmFwLnBhcnRfcHJ1 bmVfaW5kZXggPSAtMTsKIAogCS8qCiAJICogSWYgYW55IHF1YWxzIGV4aXN0LCB0aGV5IG1heSBi ZSB1c2VmdWwgdG8gcGVyZm9ybSBmdXJ0aGVyIHBhcnRpdGlvbgpAQCAtMTQyMCwxNiArMTQyMCwx NiBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBhdGggKmJl c3RfcGF0aCwgaW50IGZsYWdzKQogCQl9CiAKIAkJaWYgKHBydW5lcXVhbCAhPSBOSUwpCi0JCQlw bGFuLT5wYXJ0X3BydW5lX2luZGV4ID0gbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKHJvb3QsIHJl bCwKKwkJCXBsYW4tPmFwLnBhcnRfcHJ1bmVfaW5kZXggPSBtYWtlX3BhcnRpdGlvbl9wcnVuZWlu Zm8ocm9vdCwgcmVsLAogCQkJCQkJCQkJCQkJCQkJICBiZXN0X3BhdGgtPnN1YnBhdGhzLAogCQkJ CQkJCQkJCQkJCQkJICBwcnVuZXF1YWwpOwogCX0KIAotCXBsYW4tPmFwcGVuZHBsYW5zID0gc3Vi cGxhbnM7CisJcGxhbi0+YXAuc3VicGxhbnMgPSBzdWJwbGFuczsKIAlwbGFuLT5uYXN5bmNwbGFu cyA9IG5hc3luY3BsYW5zOwogCXBsYW4tPmZpcnN0X3BhcnRpYWxfcGxhbiA9IGJlc3RfcGF0aC0+ Zmlyc3RfcGFydGlhbF9wYXRoOwogCi0JY29weV9nZW5lcmljX3BhdGhfaW5mbygmcGxhbi0+cGxh biwgKFBhdGggKikgYmVzdF9wYXRoKTsKKwljb3B5X2dlbmVyaWNfcGF0aF9pbmZvKCZwbGFuLT5h cC5wbGFuLCAoUGF0aCAqKSBiZXN0X3BhdGgpOwogCiAJLyoKIAkgKiBJZiBwcmVwYXJlX3NvcnRf ZnJvbV9wYXRoa2V5cyBhZGRlZCBzb3J0IGNvbHVtbnMsIGJ1dCB3ZSB3ZXJlIHRvbGQgdG8KQEAg LTE0MzgsOSArMTQzOCw5IEBAIGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwg QXBwZW5kUGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3MpCiAJICovCiAJaWYgKHRsaXN0X3dhc19j aGFuZ2VkICYmIChmbGFncyAmIChDUF9FWEFDVF9UTElTVCB8IENQX1NNQUxMX1RMSVNUKSkpCiAJ ewotCQl0bGlzdCA9IGxpc3RfY29weV9oZWFkKHBsYW4tPnBsYW4udGFyZ2V0bGlzdCwgb3JpZ190 bGlzdF9sZW5ndGgpOworCQl0bGlzdCA9IGxpc3RfY29weV9oZWFkKHBsYW4tPmFwLnBsYW4udGFy Z2V0bGlzdCwgb3JpZ190bGlzdF9sZW5ndGgpOwogCQlyZXR1cm4gaW5qZWN0X3Byb2plY3Rpb25f cGxhbigoUGxhbiAqKSBwbGFuLCB0bGlzdCwKLQkJCQkJCQkJCSAgcGxhbi0+cGxhbi5wYXJhbGxl bF9zYWZlKTsKKwkJCQkJCQkJCSAgcGxhbi0+YXAucGxhbi5wYXJhbGxlbF9zYWZlKTsKIAl9CiAJ ZWxzZQogCQlyZXR1cm4gKFBsYW4gKikgcGxhbjsKQEAgLTE0NTgsNyArMTQ1OCw3IEBAIGNyZWF0 ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpi ZXN0X3BhdGgsCiAJCQkJCQkgaW50IGZsYWdzKQogewogCU1lcmdlQXBwZW5kICpub2RlID0gbWFr ZU5vZGUoTWVyZ2VBcHBlbmQpOwotCVBsYW4JICAgKnBsYW4gPSAmbm9kZS0+cGxhbjsKKwlQbGFu CSAgICpwbGFuID0gJm5vZGUtPmFwLnBsYW47CiAJTGlzdAkgICAqdGxpc3QgPSBidWlsZF9wYXRo X3RsaXN0KHJvb3QsICZiZXN0X3BhdGgtPnBhdGgpOwogCWludAkJCW9yaWdfdGxpc3RfbGVuZ3Ro ID0gbGlzdF9sZW5ndGgodGxpc3QpOwogCWJvb2wJCXRsaXN0X3dhc19jaGFuZ2VkOwpAQCAtMTQ3 OSw3ICsxNDc5LDcgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290 LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAlwbGFuLT5xdWFsID0gTklMOwogCXBsYW4t PmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwotCW5vZGUtPmFwcHJl bGlkcyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmFwLmFwcHJlbGlkcyA9IHJlbC0+cmVsaWRzOwog CiAJY29uc2lkZXJfYXN5bmMgPSAoZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCAmJgogCQkJCQkg ICFiZXN0X3BhdGgtPnBhdGgucGFyYWxsZWxfc2FmZSAmJgpAQCAtMTU5Myw3ICsxNTkzLDcgQEAg Y3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBh dGggKmJlc3RfcGF0aCwKIAl9CiAKIAkvKiBTZXQgYmVsb3cgaWYgd2UgZmluZCBxdWFscyB0aGF0 IHdlIGNhbiB1c2UgdG8gcnVuLXRpbWUgcHJ1bmUgKi8KLQlub2RlLT5wYXJ0X3BydW5lX2luZGV4 ID0gLTE7CisJbm9kZS0+YXAucGFydF9wcnVuZV9pbmRleCA9IC0xOwogCiAJLyoKIAkgKiBJZiBh bnkgcXVhbHMgZXhpc3QsIHRoZXkgbWF5IGJlIHVzZWZ1bCB0byBwZXJmb3JtIGZ1cnRoZXIgcGFy dGl0aW9uCkBAIC0xNjEwLDEyICsxNjEwLDEyIEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQ bGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJCUFzc2VydChi ZXN0X3BhdGgtPnBhdGgucGFyYW1faW5mbyA9PSBOVUxMKTsKIAogCQlpZiAocHJ1bmVxdWFsICE9 IE5JTCkKLQkJCW5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPSBtYWtlX3BhcnRpdGlvbl9wcnVuZWlu Zm8ocm9vdCwgcmVsLAorCQkJbm9kZS0+YXAucGFydF9wcnVuZV9pbmRleCA9IG1ha2VfcGFydGl0 aW9uX3BydW5laW5mbyhyb290LCByZWwsCiAJCQkJCQkJCQkJCQkJCQkgIGJlc3RfcGF0aC0+c3Vi cGF0aHMsCiAJCQkJCQkJCQkJCQkJCQkgIHBydW5lcXVhbCk7CiAJfQogCi0Jbm9kZS0+bWVyZ2Vw bGFucyA9IHN1YnBsYW5zOworCW5vZGUtPmFwLnN1YnBsYW5zID0gc3VicGxhbnM7CiAKIAkvKgog CSAqIElmIHByZXBhcmVfc29ydF9mcm9tX3BhdGhrZXlzIGFkZGVkIHNvcnQgY29sdW1ucywgYnV0 IHdlIHdlcmUgdG9sZCB0bwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v c2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCmluZGV4IGNk N2VhMWU2YjU4Li5hNTk1ZjM0Yzg3YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMu YwpAQCAtMTg1MCwxMCArMTg1MCwxMCBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lcklu Zm8gKnJvb3QsCiAJICogY2hlY2sgcXVhbHMuICBJZiBpdCdzIGdvdCBleGFjdGx5IG9uZSBjaGls ZCBwbGFuLCB0aGVuIGl0J3Mgbm90IGRvaW5nCiAJICogYW55dGhpbmcgdXNlZnVsIGF0IGFsbCwg YW5kIHdlIGNhbiBzdHJpcCBpdCBvdXQuCiAJICovCi0JQXNzZXJ0KGFwbGFuLT5wbGFuLnF1YWwg PT0gTklMKTsKKwlBc3NlcnQoYXBsYW4tPmFwLnBsYW4ucXVhbCA9PSBOSUwpOwogCiAJLyogRmly c3QsIHdlIGdvdHRhIHJlY3Vyc2Ugb24gdGhlIGNoaWxkcmVuICovCi0JZm9yZWFjaChsLCBhcGxh bi0+YXBwZW5kcGxhbnMpCisJZm9yZWFjaChsLCBhcGxhbi0+YXAuc3VicGxhbnMpCiAJewogCQls Zmlyc3QobCkgPSBzZXRfcGxhbl9yZWZzKHJvb3QsIChQbGFuICopIGxmaXJzdChsKSwgcnRvZmZz ZXQpOwogCX0KQEAgLTE4NjYsMTEgKzE4NjYsMTEgQEAgc2V0X2FwcGVuZF9yZWZlcmVuY2VzKFBs YW5uZXJJbmZvICpyb290LAogCSAqIHBsYW4gbWF5IGV4ZWN1dGUgdGhlIG5vbi1wYXJhbGxlbCBh d2FyZSBjaGlsZCBtdWx0aXBsZSB0aW1lcy4gIChJZiB5b3UKIAkgKiBjaGFuZ2UgdGhlc2UgcnVs ZXMsIHVwZGF0ZSBjcmVhdGVfYXBwZW5kX3BhdGggdG8gbWF0Y2guKQogCSAqLwotCWlmIChsaXN0 X2xlbmd0aChhcGxhbi0+YXBwZW5kcGxhbnMpID09IDEpCisJaWYgKGxpc3RfbGVuZ3RoKGFwbGFu LT5hcC5zdWJwbGFucykgPT0gMSkKIAl7Ci0JCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlh bChhcGxhbi0+YXBwZW5kcGxhbnMpOworCQlQbGFuCSAgICpwID0gKFBsYW4gKikgbGluaXRpYWwo YXBsYW4tPmFwLnN1YnBsYW5zKTsKIAotCQlpZiAocC0+cGFyYWxsZWxfYXdhcmUgPT0gYXBsYW4t PnBsYW4ucGFyYWxsZWxfYXdhcmUpCisJCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+ YXAucGxhbi5wYXJhbGxlbF9hd2FyZSkKIAkJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5f bGV2ZWwoKFBsYW4gKikgYXBsYW4sIHApOwogCX0KIApAQCAtMTg4MSwxOSArMTg4MSwxOSBAQCBz ZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJc2V0X2R1bW15 X3RsaXN0X3JlZmVyZW5jZXMoKFBsYW4gKikgYXBsYW4sIHJ0b2Zmc2V0KTsKIAotCWFwbGFuLT5h cHByZWxpZHMgPSBvZmZzZXRfcmVsaWRfc2V0KGFwbGFuLT5hcHByZWxpZHMsIHJ0b2Zmc2V0KTsK KwlhcGxhbi0+YXAuYXBwcmVsaWRzID0gb2Zmc2V0X3JlbGlkX3NldChhcGxhbi0+YXAuYXBwcmVs aWRzLCBydG9mZnNldCk7CiAKIAkvKgogCSAqIEFkZCBQYXJ0aXRpb25QcnVuZUluZm8sIGlmIGFu eSwgdG8gUGxhbm5lckdsb2JhbCBhbmQgdXBkYXRlIHRoZSBpbmRleC4KIAkgKiBBbHNvIHVwZGF0 ZSB0aGUgUlQgaW5kZXhlcyBwcmVzZW50IGluIGl0IHRvIGFkZCB0aGUgb2Zmc2V0LgogCSAqLwot CWlmIChhcGxhbi0+cGFydF9wcnVuZV9pbmRleCA+PSAwKQotCQlhcGxhbi0+cGFydF9wcnVuZV9p bmRleCA9Ci0JCQlyZWdpc3Rlcl9wYXJ0cHJ1bmVpbmZvKHJvb3QsIGFwbGFuLT5wYXJ0X3BydW5l X2luZGV4LCBydG9mZnNldCk7CisJaWYgKGFwbGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4ID49IDAp CisJCWFwbGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4ID0KKwkJCXJlZ2lzdGVyX3BhcnRwcnVuZWlu Zm8ocm9vdCwgYXBsYW4tPmFwLnBhcnRfcHJ1bmVfaW5kZXgsIHJ0b2Zmc2V0KTsKIAogCS8qIFdl IGRvbid0IG5lZWQgdG8gcmVjdXJzZSB0byBsZWZ0dHJlZSBvciByaWdodHRyZWUgLi4uICovCi0J QXNzZXJ0KGFwbGFuLT5wbGFuLmxlZnR0cmVlID09IE5VTEwpOwotCUFzc2VydChhcGxhbi0+cGxh bi5yaWdodHRyZWUgPT0gTlVMTCk7CisJQXNzZXJ0KGFwbGFuLT5hcC5wbGFuLmxlZnR0cmVlID09 IE5VTEwpOworCUFzc2VydChhcGxhbi0+YXAucGxhbi5yaWdodHRyZWUgPT0gTlVMTCk7CiAKIAly ZXR1cm4gKFBsYW4gKikgYXBsYW47CiB9CkBAIC0xOTE3LDEwICsxOTE3LDEwIEBAIHNldF9tZXJn ZWFwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAqIG9yIGNoZWNrIHF1YWxz LiAgSWYgaXQncyBnb3QgZXhhY3RseSBvbmUgY2hpbGQgcGxhbiwgdGhlbiBpdCdzIG5vdAogCSAq IGRvaW5nIGFueXRoaW5nIHVzZWZ1bCBhdCBhbGwsIGFuZCB3ZSBjYW4gc3RyaXAgaXQgb3V0Lgog CSAqLwotCUFzc2VydChtcGxhbi0+cGxhbi5xdWFsID09IE5JTCk7CisJQXNzZXJ0KG1wbGFuLT5h cC5wbGFuLnF1YWwgPT0gTklMKTsKIAogCS8qIEZpcnN0LCB3ZSBnb3R0YSByZWN1cnNlIG9uIHRo ZSBjaGlsZHJlbiAqLwotCWZvcmVhY2gobCwgbXBsYW4tPm1lcmdlcGxhbnMpCisJZm9yZWFjaChs LCBtcGxhbi0+YXAuc3VicGxhbnMpCiAJewogCQlsZmlyc3QobCkgPSBzZXRfcGxhbl9yZWZzKHJv b3QsIChQbGFuICopIGxmaXJzdChsKSwgcnRvZmZzZXQpOwogCX0KQEAgLTE5MzQsMTEgKzE5MzQs MTEgQEAgc2V0X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJICog bXVsdGlwbGUgdGltZXMuICAoSWYgeW91IGNoYW5nZSB0aGVzZSBydWxlcywgdXBkYXRlCiAJICog Y3JlYXRlX21lcmdlX2FwcGVuZF9wYXRoIHRvIG1hdGNoLikKIAkgKi8KLQlpZiAobGlzdF9sZW5n dGgobXBsYW4tPm1lcmdlcGxhbnMpID09IDEpCisJaWYgKGxpc3RfbGVuZ3RoKG1wbGFuLT5hcC5z dWJwbGFucykgPT0gMSkKIAl7Ci0JCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChtcGxh bi0+bWVyZ2VwbGFucyk7CisJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChtcGxhbi0+ YXAuc3VicGxhbnMpOwogCi0JCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBtcGxhbi0+cGxhbi5w YXJhbGxlbF9hd2FyZSkKKwkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09IG1wbGFuLT5hcC5wbGFu LnBhcmFsbGVsX2F3YXJlKQogCQkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgo UGxhbiAqKSBtcGxhbiwgcCk7CiAJfQogCkBAIC0xOTQ5LDE5ICsxOTQ5LDE5IEBAIHNldF9tZXJn ZWFwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCXNldF9kdW1teV90 bGlzdF9yZWZlcmVuY2VzKChQbGFuICopIG1wbGFuLCBydG9mZnNldCk7CiAKLQltcGxhbi0+YXBw cmVsaWRzID0gb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCk7CisJ bXBsYW4tPmFwLmFwcHJlbGlkcyA9IG9mZnNldF9yZWxpZF9zZXQobXBsYW4tPmFwLmFwcHJlbGlk cywgcnRvZmZzZXQpOwogCiAJLyoKIAkgKiBBZGQgUGFydGl0aW9uUHJ1bmVJbmZvLCBpZiBhbnks IHRvIFBsYW5uZXJHbG9iYWwgYW5kIHVwZGF0ZSB0aGUgaW5kZXguCiAJICogQWxzbyB1cGRhdGUg dGhlIFJUIGluZGV4ZXMgcHJlc2VudCBpbiBpdCB0byBhZGQgdGhlIG9mZnNldC4KIAkgKi8KLQlp ZiAobXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKLQkJbXBsYW4tPnBhcnRfcHJ1bmVfaW5k ZXggPQotCQkJcmVnaXN0ZXJfcGFydHBydW5laW5mbyhyb290LCBtcGxhbi0+cGFydF9wcnVuZV9p bmRleCwgcnRvZmZzZXQpOworCWlmIChtcGxhbi0+YXAucGFydF9wcnVuZV9pbmRleCA+PSAwKQor CQltcGxhbi0+YXAucGFydF9wcnVuZV9pbmRleCA9CisJCQlyZWdpc3Rlcl9wYXJ0cHJ1bmVpbmZv KHJvb3QsIG1wbGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4LCBydG9mZnNldCk7CiAKIAkvKiBXZSBk b24ndCBuZWVkIHRvIHJlY3Vyc2UgdG8gbGVmdHRyZWUgb3IgcmlnaHR0cmVlIC4uLiAqLwotCUFz c2VydChtcGxhbi0+cGxhbi5sZWZ0dHJlZSA9PSBOVUxMKTsKLQlBc3NlcnQobXBsYW4tPnBsYW4u cmlnaHR0cmVlID09IE5VTEwpOworCUFzc2VydChtcGxhbi0+YXAucGxhbi5sZWZ0dHJlZSA9PSBO VUxMKTsKKwlBc3NlcnQobXBsYW4tPmFwLnBsYW4ucmlnaHR0cmVlID09IE5VTEwpOwogCiAJcmV0 dXJuIChQbGFuICopIG1wbGFuOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc3Vic2VsZWN0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3Qu YwppbmRleCBmZjYzZDIwZjhkNS4uZWI2MTZjOTc3YmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3N1YnNlbGVjdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3N1YnNlbGVjdC5jCkBAIC0yNzU5LDcgKzI3NTksNyBAQCBmaW5hbGl6ZV9wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBQbGFuICpwbGFuLAogCiAJCWNhc2UgVF9BcHBlbmQ6CiAJCQl7Ci0JCQkJ Zm9yZWFjaChsLCAoKEFwcGVuZCAqKSBwbGFuKS0+YXBwZW5kcGxhbnMpCisJCQkJZm9yZWFjaChs LCAoKEFwcGVuZCAqKSBwbGFuKS0+YXAuc3VicGxhbnMpCiAJCQkJewogCQkJCQljb250ZXh0LnBh cmFtaWRzID0KIAkJCQkJCWJtc19hZGRfbWVtYmVycyhjb250ZXh0LnBhcmFtaWRzLApAQCAtMjc3 NCw3ICsyNzc0LDcgQEAgZmluYWxpemVfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxh biwKIAogCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CiAJCQl7Ci0JCQkJZm9yZWFjaChsLCAoKE1lcmdl QXBwZW5kICopIHBsYW4pLT5tZXJnZXBsYW5zKQorCQkJCWZvcmVhY2gobCwgKChNZXJnZUFwcGVu ZCAqKSBwbGFuKS0+YXAuc3VicGxhbnMpCiAJCQkJewogCQkJCQljb250ZXh0LnBhcmFtaWRzID0K IAkJCQkJCWJtc19hZGRfbWVtYmVycyhjb250ZXh0LnBhcmFtaWRzLApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jCmluZGV4IDlmODVlYjg2ZGExLi5jZTU3ZjgwZTVlMyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYwpAQCAtNTE2Myw5ICs1MTYzLDkgQEAgc2V0X2RlcGFyc2VfcGxhbihkZXBh cnNlX25hbWVzcGFjZSAqZHBucywgUGxhbiAqcGxhbikKIAkgKiBuYXR1cmFsIGNob2ljZS4KIAkg Ki8KIAlpZiAoSXNBKHBsYW4sIEFwcGVuZCkpCi0JCWRwbnMtPm91dGVyX3BsYW4gPSBsaW5pdGlh bCgoKEFwcGVuZCAqKSBwbGFuKS0+YXBwZW5kcGxhbnMpOworCQlkcG5zLT5vdXRlcl9wbGFuID0g bGluaXRpYWwoKChBcHBlbmQgKikgcGxhbiktPmFwLnN1YnBsYW5zKTsKIAllbHNlIGlmIChJc0Eo cGxhbiwgTWVyZ2VBcHBlbmQpKQotCQlkcG5zLT5vdXRlcl9wbGFuID0gbGluaXRpYWwoKChNZXJn ZUFwcGVuZCAqKSBwbGFuKS0+bWVyZ2VwbGFucyk7CisJCWRwbnMtPm91dGVyX3BsYW4gPSBsaW5p dGlhbCgoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5hcC5zdWJwbGFucyk7CiAJZWxzZQogCQlkcG5z LT5vdXRlcl9wbGFuID0gb3V0ZXJQbGFuKHBsYW4pOwogCkBAIC03OTU1LDEwICs3OTU1LDEwIEBA IHJlc29sdmVfc3BlY2lhbF92YXJubyhOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRl eHQsCiAKIAkJaWYgKElzQShkcG5zLT5wbGFuLCBBcHBlbmQpKQogCQkJY29udGV4dC0+YXBwZW5k cGFyZW50cyA9IGJtc191bmlvbihjb250ZXh0LT5hcHBlbmRwYXJlbnRzLAotCQkJCQkJCQkJCQkg ICAoKEFwcGVuZCAqKSBkcG5zLT5wbGFuKS0+YXBwcmVsaWRzKTsKKwkJCQkJCQkJCQkJICAgKChB cHBlbmQgKikgZHBucy0+cGxhbiktPmFwLmFwcHJlbGlkcyk7CiAJCWVsc2UgaWYgKElzQShkcG5z LT5wbGFuLCBNZXJnZUFwcGVuZCkpCiAJCQljb250ZXh0LT5hcHBlbmRwYXJlbnRzID0gYm1zX3Vu aW9uKGNvbnRleHQtPmFwcGVuZHBhcmVudHMsCi0JCQkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmQg KikgZHBucy0+cGxhbiktPmFwcHJlbGlkcyk7CisJCQkJCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmQg KikgZHBucy0+cGxhbiktPmFwLmFwcHJlbGlkcyk7CiAKIAkJcHVzaF9jaGlsZF9wbGFuKGRwbnMs IGRwbnMtPm91dGVyX3BsYW4sICZzYXZlX2RwbnMpOwogCQlyZXNvbHZlX3NwZWNpYWxfdmFybm8o KE5vZGUgKikgdGxlLT5leHByLCBjb250ZXh0LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY0FwcGVuZC5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0FwcGVuZC5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMTAzMGRjNTI4MgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaApAQCAtMCwwICsx LDMzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGV4ZWNBcHBlbmQuaAorICoJCVN1cHBvcnQg ZnVuY3Rpb25zIGZvciBNZXJnZUFwcGVuZCBhbmQgQXBwZW5kIG5vZGVzLgorICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJCXNyYy9p bmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwor I2lmbmRlZiBFWEVDQVBQRU5EX0gKKyNkZWZpbmUgRVhFQ0FQUEVORF9ICisKKyNpbmNsdWRlICJu b2Rlcy9leGVjbm9kZXMuaCIKKwordm9pZAkJRXhlY0luaXRBcHBlbmRlcihBcHBlbmRlclN0YXRl ICogc3RhdGUsCisJCQkJCQkJIEFwcGVuZGVyICogbm9kZSwKKwkJCQkJCQkgRVN0YXRlICplc3Rh dGUsCisJCQkJCQkJIGludCBlZmxhZ3MsCisJCQkJCQkJIGludCBmaXJzdF9wYXJ0aWFsX3BsYW4s CisJCQkJCQkJIGludCAqZmlyc3RfdmFsaWRfcGFydGlhbF9wbGFuKTsKKwordm9pZAkJRXhlY0Vu ZEFwcGVuZGVyKEFwcGVuZGVyU3RhdGUgKiBub2RlKTsKKwordm9pZAkJRXhlY1JlU2NhbkFwcGVu ZGVyKEFwcGVuZGVyU3RhdGUgKiBub2RlKTsKKwordm9pZAkJRXhlY0FwcGVuZGVyQXN5bmNCZWdp bihBcHBlbmRlclN0YXRlICogbm9kZSk7CisKK3ZvaWQJCUV4ZWNBcHBlbmRlckFzeW5jRXZlbnRX YWl0KEFwcGVuZGVyU3RhdGUgKiBub2RlLCBpbnQgdGltZW91dCwgdWludDMyIHdhaXRfZXZlbnRf aW5mbyk7CisKKyNlbmRpZgkJCQkJCQkvKiBFWEVDQVBQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKaW5kZXggNTg4N2NiZjRmMTYuLjY5MTIzYTMxYmJkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApA QCAtMTQ3Miw2ICsxNDcyLDI3IEBAIHR5cGVkZWYgc3RydWN0IE1vZGlmeVRhYmxlU3RhdGUKIAlM aXN0CSAgICptdF9tZXJnZUpvaW5Db25kaXRpb25zOwogfSBNb2RpZnlUYWJsZVN0YXRlOwogCit0 eXBlZGVmIHN0cnVjdCBBcHBlbmRlclN0YXRlCit7CisJUGxhblN0YXRlCXBzOwkJCQkvKiBpdHMg Zmlyc3QgZmllbGQgaXMgTm9kZVRhZyAqLworCVBsYW5TdGF0ZSAqKnBsYW5zOwkJCS8qIGFycmF5 IG9mIFBsYW5TdGF0ZXMgZm9yIG15IGlucHV0cyAqLworCWludAkJCW5wbGFuczsKKworCS8qIEFz eW5jaHJvbm91cyBleGVjdXRpb24gc3RhdGUgKi8KKwlCaXRtYXBzZXQgICphc3luY3BsYW5zOwkJ LyogYXN5bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMgKi8KKwlpbnQJCQluYXN5bmNwbGFuczsJLyog IyBvZiBhc3luY2hyb25vdXMgcGxhbnMgKi8KKwlBc3luY1JlcXVlc3QgKiphc3luY3JlcXVlc3Rz OwkvKiBhcnJheSBvZiBBc3luY1JlcXVlc3RzICovCisJVHVwbGVUYWJsZVNsb3QgKiphc3luY3Jl c3VsdHM7CS8qIHVucmV0dXJuZWQgcmVzdWx0cyBvZiBhc3luYyBwbGFucyAqLworCUJpdG1hcHNl dCAgKm5lZWRyZXF1ZXN0OwkvKiBhc3luY2hyb25vdXMgcGxhbnMgbmVlZGluZyBhIG5ldyByZXF1 ZXN0ICovCisJc3RydWN0IFdhaXRFdmVudFNldCAqZXZlbnRzZXQ7CS8qIFdhaXRFdmVudFNldCBm b3IgZmlsZSBkZXNjcmlwdG9yIHdhaXRzICovCisKKwkvKiBQYXJ0aXRpb24gcHJ1bmluZyBzdGF0 ZSAqLworCXN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZV9zdGF0ZTsKKwlib29sCQl2 YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkOworCUJpdG1hcHNldCAgKnZhbGlkX3N1YnBsYW5zOwor CUJpdG1hcHNldCAgKnZhbGlkX2FzeW5jcGxhbnM7CS8qIHZhbGlkIGFzeW5jaHJvbm91cyBwbGFu cyBpbmRleGVzICovCit9CQkJQXBwZW5kZXJTdGF0ZTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLQog ICoJIEFwcGVuZFN0YXRlIGluZm9ybWF0aW9uCiAgKgpAQCAtMTQ5MywzMSArMTUxNCwyMCBAQCBz dHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0ZTsKIAogc3RydWN0IEFwcGVuZFN0YXRlCiB7Ci0JUGxh blN0YXRlCXBzOwkJCQkvKiBpdHMgZmlyc3QgZmllbGQgaXMgTm9kZVRhZyAqLwotCVBsYW5TdGF0 ZSAqKmFwcGVuZHBsYW5zOwkvKiBhcnJheSBvZiBQbGFuU3RhdGVzIGZvciBteSBpbnB1dHMgKi8K LQlpbnQJCQlhc19ucGxhbnM7CisJQXBwZW5kZXJTdGF0ZSBhczsKKwogCWludAkJCWFzX3doaWNo cGxhbjsKIAlib29sCQlhc19iZWd1bjsJCS8qIGZhbHNlIG1lYW5zIG5lZWQgdG8gaW5pdGlhbGl6 ZSAqLwotCUJpdG1hcHNldCAgKmFzX2FzeW5jcGxhbnM7CS8qIGFzeW5jaHJvbm91cyBwbGFucyBp bmRleGVzICovCi0JaW50CQkJYXNfbmFzeW5jcGxhbnM7IC8qICMgb2YgYXN5bmNocm9ub3VzIHBs YW5zICovCi0JQXN5bmNSZXF1ZXN0ICoqYXNfYXN5bmNyZXF1ZXN0czsJLyogYXJyYXkgb2YgQXN5 bmNSZXF1ZXN0cyAqLwotCVR1cGxlVGFibGVTbG90ICoqYXNfYXN5bmNyZXN1bHRzOwkvKiB1bnJl dHVybmVkIHJlc3VsdHMgb2YgYXN5bmMgcGxhbnMgKi8KLQlpbnQJCQlhc19uYXN5bmNyZXN1bHRz OwkvKiAjIG9mIHZhbGlkIGVudHJpZXMgaW4gYXNfYXN5bmNyZXN1bHRzICovCi0JYm9vbAkJYXNf c3luY2RvbmU7CS8qIHRydWUgaWYgYWxsIHN5bmNocm9ub3VzIHBsYW5zIGRvbmUgaW4KLQkJCQkJ CQkJICogYXN5bmNocm9ub3VzIG1vZGUsIGVsc2UgZmFsc2UgKi8KKwlpbnQJCQlhc19uYXN5bmNy ZXN1bHRzOwkvKiAjIG9mIHZhbGlkIGVudHJpZXMgaW4gYXN5bmNyZXN1bHRzICovCisJYm9vbAkJ YXNfc3luY2RvbmU7CS8qIGFsbCBzeW5jIHBsYW5zIGRvbmUgaW4gYXN5bmMgbW9kZT8gKi8KIAlp bnQJCQlhc19uYXN5bmNyZW1haW47CS8qICMgb2YgcmVtYWluaW5nIGFzeW5jaHJvbm91cyBwbGFu cyAqLwotCUJpdG1hcHNldCAgKmFzX25lZWRyZXF1ZXN0OyAvKiBhc3luY2hyb25vdXMgcGxhbnMg bmVlZGluZyBhIG5ldyByZXF1ZXN0ICovCi0Jc3RydWN0IFdhaXRFdmVudFNldCAqYXNfZXZlbnRz ZXQ7CS8qIFdhaXRFdmVudFNldCB1c2VkIHRvIGNvbmZpZ3VyZSBmaWxlCi0JCQkJCQkJCQkJICog ZGVzY3JpcHRvciB3YWl0IGV2ZW50cyAqLwotCWludAkJCWFzX2ZpcnN0X3BhcnRpYWxfcGxhbjsJ LyogSW5kZXggb2YgJ2FwcGVuZHBsYW5zJyBjb250YWluaW5nCi0JCQkJCQkJCQkJICogdGhlIGZp cnN0IHBhcnRpYWwgcGxhbiAqLwotCVBhcmFsbGVsQXBwZW5kU3RhdGUgKmFzX3BzdGF0ZTsgLyog cGFyYWxsZWwgY29vcmRpbmF0aW9uIGluZm8gKi8KLQlTaXplCQlwc3RhdGVfbGVuOwkJLyogc2l6 ZSBvZiBwYXJhbGxlbCBjb29yZGluYXRpb24gaW5mbyAqLwotCXN0cnVjdCBQYXJ0aXRpb25QcnVu ZVN0YXRlICphc19wcnVuZV9zdGF0ZTsKLQlib29sCQlhc192YWxpZF9zdWJwbGFuc19pZGVudGlm aWVkOwkvKiBpcyBhc192YWxpZF9zdWJwbGFucyB2YWxpZD8gKi8KLQlCaXRtYXBzZXQgICphc192 YWxpZF9zdWJwbGFuczsKLQlCaXRtYXBzZXQgICphc192YWxpZF9hc3luY3BsYW5zOwkvKiB2YWxp ZCBhc3luY2hyb25vdXMgcGxhbnMgaW5kZXhlcyAqLwotCWJvb2wJCSgqY2hvb3NlX25leHRfc3Vi cGxhbikgKEFwcGVuZFN0YXRlICopOworCWludAkJCWFzX2ZpcnN0X3BhcnRpYWxfcGxhbjsKKwor CS8qIFBhcmFsbGVsIGFwcGVuZCBzcGVjaWZpYyAqLworCVBhcmFsbGVsQXBwZW5kU3RhdGUgKmFz X3BzdGF0ZTsKKwlTaXplCQlwc3RhdGVfbGVuOworCisJYm9vbAkJKCpjaG9vc2VfbmV4dF9zdWJw bGFuKSAoc3RydWN0IEFwcGVuZFN0YXRlICopOwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpA QCAtMTUzNywyNyArMTU0NywxNyBAQCBzdHJ1Y3QgQXBwZW5kU3RhdGUKICAqLwogdHlwZWRlZiBz dHJ1Y3QgTWVyZ2VBcHBlbmRTdGF0ZQogewotCVBsYW5TdGF0ZQlwczsJCQkJLyogaXRzIGZpcnN0 IGZpZWxkIGlzIE5vZGVUYWcgKi8KLQlQbGFuU3RhdGUgKiptZXJnZXBsYW5zOwkJLyogYXJyYXkg b2YgUGxhblN0YXRlcyBmb3IgbXkgaW5wdXRzICovCi0JaW50CQkJbXNfbnBsYW5zOworCUFwcGVu ZGVyU3RhdGUgbXM7CisKIAlpbnQJCQltc19ua2V5czsKIAlTb3J0U3VwcG9ydCBtc19zb3J0a2V5 czsJLyogYXJyYXkgb2YgbGVuZ3RoIG1zX25rZXlzICovCiAJVHVwbGVUYWJsZVNsb3QgKiptc19z bG90czsJLyogYXJyYXkgb2YgbGVuZ3RoIG1zX25wbGFucyAqLwogCXN0cnVjdCBiaW5hcnloZWFw ICptc19oZWFwOyAvKiBiaW5hcnkgaGVhcCBvZiBzbG90IGluZGljZXMgKi8KIAlib29sCQltc19p bml0aWFsaXplZDsgLyogYXJlIHN1YnBsYW5zIHN0YXJ0ZWQ/ICovCi0JQml0bWFwc2V0ICAqbXNf YXN5bmNwbGFuczsJLyogYXN5bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMgKi8KLQlpbnQJCQltc19u YXN5bmNwbGFuczsgLyogIyBvZiBhc3luY2hyb25vdXMgcGxhbnMgKi8KLQlBc3luY1JlcXVlc3Qg Kiptc19hc3luY3JlcXVlc3RzOwkvKiBhcnJheSBvZiBBc3luY1JlcXVlc3RzICovCi0JVHVwbGVU YWJsZVNsb3QgKiptc19hc3luY3Jlc3VsdHM7CS8qIHVucmV0dXJuZWQgcmVzdWx0cyBvZiBhc3lu YyBwbGFucyAqLworCisJLyogTWVyZ2Utc3BlY2lmaWMgYXN5bmMgdHJhY2tpbmcgKi8KIAlCaXRt YXBzZXQgICptc19oYXNfYXN5bmNyZXN1bHRzOwkvKiBwbGFucyB3aGljaCBoYXZlIGFzeW5jIHJl c3VsdHMgKi8KIAlCaXRtYXBzZXQgICptc19hc3luY3JlbWFpbjsgLyogcmVtYWluaW5nIGFzeW5j aHJvbm91cyBwbGFucyAqLwotCUJpdG1hcHNldCAgKm1zX25lZWRyZXF1ZXN0OyAvKiBhc3luY2hy b25vdXMgcGxhbnMgbmVlZGluZyBhIG5ldyByZXF1ZXN0ICovCi0Jc3RydWN0IFdhaXRFdmVudFNl dCAqbXNfZXZlbnRzZXQ7CS8qIFdhaXRFdmVudFNldCB1c2VkIHRvIGNvbmZpZ3VyZSBmaWxlCi0J CQkJCQkJCQkJICogZGVzY3JpcHRvciB3YWl0IGV2ZW50cyAqLwotCXN0cnVjdCBQYXJ0aXRpb25Q cnVuZVN0YXRlICptc19wcnVuZV9zdGF0ZTsKLQlib29sCQltc192YWxpZF9zdWJwbGFuc19pZGVu dGlmaWVkOwkvKiBpcyBtc192YWxpZF9zdWJwbGFucyB2YWxpZD8gKi8KLQlCaXRtYXBzZXQgICpt c192YWxpZF9zdWJwbGFuczsKLQlCaXRtYXBzZXQgICptc192YWxpZF9hc3luY3BsYW5zOwkvKiB2 YWxpZCBhc3luY2hyb25vdXMgcGxhbnMgaW5kZXhlcyAqLwogfSBNZXJnZUFwcGVuZFN0YXRlOwog CiAvKiBHZXR0ZXJzIGZvciBBcHBlbmRTdGF0ZSBhbmQgTWVyZ2VBcHBlbmRTdGF0ZSAqLwpAQCAt MTU2Nyw5ICsxNTY3LDkgQEAgR2V0QXBwZW5kRXZlbnRTZXQoUGxhblN0YXRlICpwcykKIAlBc3Nl cnQoSXNBKHBzLCBBcHBlbmRTdGF0ZSkgfHwgSXNBKHBzLCBNZXJnZUFwcGVuZFN0YXRlKSk7CiAK IAlpZiAoSXNBKHBzLCBBcHBlbmRTdGF0ZSkpCi0JCXJldHVybiAoKEFwcGVuZFN0YXRlICopIHBz KS0+YXNfZXZlbnRzZXQ7CisJCXJldHVybiAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXMuZXZlbnRz ZXQ7CiAJZWxzZQotCQlyZXR1cm4gKChNZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bXNfZXZlbnRz ZXQ7CisJCXJldHVybiAoKE1lcmdlQXBwZW5kU3RhdGUgKikgcHMpLT5tcy5ldmVudHNldDsKIH0K IAogc3RhdGljIGlubGluZSBCaXRtYXBzZXQgKgpAQCAtMTU3OCw5ICsxNTc4LDkgQEAgR2V0TmVl ZFJlcXVlc3QoUGxhblN0YXRlICpwcykKIAlBc3NlcnQoSXNBKHBzLCBBcHBlbmRTdGF0ZSkgfHwg SXNBKHBzLCBNZXJnZUFwcGVuZFN0YXRlKSk7CiAKIAlpZiAoSXNBKHBzLCBBcHBlbmRTdGF0ZSkp Ci0JCXJldHVybiAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXNfbmVlZHJlcXVlc3Q7CisJCXJldHVy biAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXMubmVlZHJlcXVlc3Q7CiAJZWxzZQotCQlyZXR1cm4g KChNZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bXNfbmVlZHJlcXVlc3Q7CisJCXJldHVybiAoKE1l cmdlQXBwZW5kU3RhdGUgKikgcHMpLT5tcy5uZWVkcmVxdWVzdDsKIH0KIAogLyogQ29tbW9uIHBh cnQgb2YgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoKSBmb3IgQXBwZW5kIGFuZCBNZXJnZUFw cGVuZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMv aW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCBjNDM5M2E5NDMyMS4uMzBjMjBlODBiNDAg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNs dWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0zODAsNiArMzgwLDIwIEBAIHR5cGVkZWYgc3RydWN0 IE1vZGlmeVRhYmxlCiAKIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm87CQkvKiBmb3J3YXJkIHJl ZmVyZW5jZSB0byBzdHJ1Y3QgYmVsb3cgKi8KIAordHlwZWRlZiBzdHJ1Y3QgQXBwZW5kZXIKK3sK KwlQbGFuCQlwbGFuOwkJCS8qIGl0cyBmaXJzdCBmaWVsZCBpcyBOb2RlVGFnICovCisJQml0bWFw c2V0ICAqYXBwcmVsaWRzOwkJLyogUlRJcyBvZiBhcHBlbmRyZWwocykgZm9ybWVkIGJ5IHRoaXMg bm9kZSAqLworCUxpc3QJICAgKnN1YnBsYW5zOwkJLyogTGlzdCBvZiBQbGFucyAoZm9ybWVybHkK KwkJCQkJCQkJICogYXBwZW5kcGxhbnMvbWVyZ2VwbGFucykgKi8KKworCS8qCisJICogSW5kZXgg aW50byBQbGFubmVkU3RtdC5wYXJ0UHJ1bmVJbmZvcyBhbmQgcGFyYWxsZWwgbGlzdHMgaW4gRVN0 YXRlLiBTZXQKKwkgKiB0byAtMSBpZiBubyBydW4tdGltZSBwcnVuaW5nIGlzIHVzZWQuCisJICov CisJaW50CQkJcGFydF9wcnVuZV9pbmRleDsKK30JCQlBcHBlbmRlcjsKKwogLyogLS0tLS0tLS0t LS0tLS0tLQogICoJIEFwcGVuZCBub2RlIC0KICAqCQlHZW5lcmF0ZSB0aGUgY29uY2F0ZW5hdGlv biBvZiB0aGUgcmVzdWx0cyBvZiBzdWItcGxhbnMuCkBAIC0zODcsMjUgKzQwMSwxNiBAQCBzdHJ1 Y3QgUGFydGl0aW9uUHJ1bmVJbmZvOwkJLyogZm9yd2FyZCByZWZlcmVuY2UgdG8gc3RydWN0IGJl bG93ICovCiAgKi8KIHR5cGVkZWYgc3RydWN0IEFwcGVuZAogewotCVBsYW4JCXBsYW47Ci0JLyog UlRJcyBvZiBhcHBlbmRyZWwocykgZm9ybWVkIGJ5IHRoaXMgbm9kZSAqLwotCUJpdG1hcHNldCAg KmFwcHJlbGlkczsKLQlMaXN0CSAgICphcHBlbmRwbGFuczsKKwlBcHBlbmRlcglhcDsKKwogCS8q ICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCiAJaW50CQkJbmFzeW5jcGxhbnM7CiAKIAkvKgot CSAqIEFsbCAnYXBwZW5kcGxhbnMnIHByZWNlZGluZyB0aGlzIGluZGV4IGFyZSBub24tcGFydGlh bCBwbGFucy4gQWxsCi0JICogJ2FwcGVuZHBsYW5zJyBmcm9tIHRoaXMgaW5kZXggb253YXJkcyBh cmUgcGFydGlhbCBwbGFucy4KKwkgKiBBbGwgJ3N1YnBsYW5zJyBwcmVjZWRpbmcgdGhpcyBpbmRl eCBhcmUgbm9uLXBhcnRpYWwgcGxhbnMuIEFsbAorCSAqICdzdWJwbGFucycgZnJvbSB0aGlzIGlu ZGV4IG9ud2FyZHMgYXJlIHBhcnRpYWwgcGxhbnMuCiAJICovCiAJaW50CQkJZmlyc3RfcGFydGlh bF9wbGFuOwotCi0JLyoKLQkgKiBJbmRleCBpbnRvIFBsYW5uZWRTdG10LnBhcnRQcnVuZUluZm9z IGFuZCBwYXJhbGxlbCBsaXN0cyBpbiBFU3RhdGU6Ci0JICogZXNfcGFydF9wcnVuZV9zdGF0ZXMg YW5kIGVzX3BhcnRfcHJ1bmVfcmVzdWx0cy4gU2V0IHRvIC0xIGlmIG5vCi0JICogcnVuLXRpbWUg cHJ1bmluZyBpcyB1c2VkLgotCSAqLwotCWludAkJCXBhcnRfcHJ1bmVfaW5kZXg7CiB9IEFwcGVu ZDsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDE1LDEyICs0MjAsNyBAQCB0eXBlZGVmIHN0 cnVjdCBBcHBlbmQKICAqLwogdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VBcHBlbmQKIHsKLQlQbGFuCQlw bGFuOwotCi0JLyogUlRJcyBvZiBhcHBlbmRyZWwocykgZm9ybWVkIGJ5IHRoaXMgbm9kZSAqLwot CUJpdG1hcHNldCAgKmFwcHJlbGlkczsKLQotCUxpc3QJICAgKm1lcmdlcGxhbnM7CisJQXBwZW5k ZXIJYXA7CiAKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIGp1c3QgbGlrZSB0aGUgc29ydC1rZXkgaW5m byBpbiBzdHJ1Y3QgU29ydDogKi8KIApAQCAtNDM4LDEzICs0MzgsNiBAQCB0eXBlZGVmIHN0cnVj dCBNZXJnZUFwcGVuZAogCiAJLyogTlVMTFMgRklSU1QvTEFTVCBkaXJlY3Rpb25zICovCiAJYm9v bAkgICAqbnVsbHNGaXJzdCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7Ci0KLQkv KgotCSAqIEluZGV4IGludG8gUGxhbm5lZFN0bXQucGFydFBydW5lSW5mb3MgYW5kIHBhcmFsbGVs IGxpc3RzIGluIEVTdGF0ZToKLQkgKiBlc19wYXJ0X3BydW5lX3N0YXRlcyBhbmQgZXNfcGFydF9w cnVuZV9yZXN1bHRzLiBTZXQgdG8gLTEgaWYgbm8KLQkgKiBydW4tdGltZSBwcnVuaW5nIGlzIHVz ZWQuCi0JICovCi0JaW50CQkJcGFydF9wcnVuZV9pbmRleDsKIH0gTWVyZ2VBcHBlbmQ7CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KLS0gCjIuNTEuMgoK --e86d2d6516f98232d4359f2f9ff492d00a238725075b520da406056955ee--