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 1vnJeM-0051qT-0t for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Feb 2026 16:53:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vnJeK-006LRf-0l for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Feb 2026 16:53:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vnJeJ-006LRX-0t for pgsql-hackers@lists.postgresql.org; Tue, 03 Feb 2026 16:53:11 +0000 Received: from mail-yw1-x1135.google.com ([2607:f8b0:4864:20::1135]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vnJeG-00000000O7q-3vtJ for pgsql-hackers@lists.postgresql.org; Tue, 03 Feb 2026 16:53:10 +0000 Received: by mail-yw1-x1135.google.com with SMTP id 00721157ae682-79088484065so55019557b3.1 for ; Tue, 03 Feb 2026 08:53:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770137588; cv=none; d=google.com; s=arc-20240605; b=LZePzZp76GTE3T/CbDrvNVfnC3JiL5vUEBxJqWOTpy6xIMOHEBuGKAtaoY+PgcheKi 7jgVB8Vx9zo8znOeU0vhrbvcLp1aGX1pZn9Ylqt/5fUu3xhavpaEI+QRxYo6ksHiQmY2 +1IP9o9G9R3BXRZxawihUKBqVu/wv334IjU8zEjfaiwcyQOoGNOwvZgT6nVKSFg6Juwn 6ao6H20tp2/ZHdzfH+12cZUlFzPjXvhFf3fgglceyVsySO6RAWbQpWfqWj+xzlii62o7 MRjZCxHzworsEsEo/bAX5N2BD3SRxZ/wX2EOTu4OHzM222yHLIUdIBrBD2VFghWVdZCy GRVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=OmuYtF9zzdexm5fiG3G6+QDNVwfvH84+Xzk/3eRhK+A=; fh=UHnhtFqXi9z8c/rLLyIYuZIMfCiwjB1S4pIDn8OEts8=; b=DfcIoK1g87xRKIJkOdyMUXS+bwD/cz2U/GBg9pEeRET8wbghyejsrf1VyiI7lAuf6J hm91uZyOOEUI3JwTsFCH25YghVNLazcBVV5lijozLVuIrNCwUrHnKoIo/91o39R/gEEb 1EBxfJPvXew5LuMTCZx4J46sBvwTgvENbcWE7pbgcyWMUrrOVuq3JBvW5JMxt3g7duSA j1CmTjIp86zlnwSaMPZnbJPXDiH75vQljmNNqOtmJN91R/cfErIHSyhm2Dhg9Sck/0Cp zithBHLF5kZ+cAcKy1V6da5QlU28W908enfh7NFSwNQbXTF5Dw2y2JV040jihRwQvAet mEAQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770137588; x=1770742388; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=OmuYtF9zzdexm5fiG3G6+QDNVwfvH84+Xzk/3eRhK+A=; b=lqN+ULHgU3PIqg1pIWg+eUi8XBwHQ07WViUkmXroadk9xws8ezOEzE4Z+wQSx9NxjI qjk6743oSiQZENmhgymu4lT550DgF5P7qIWgsFUAXuSWAvZ7DKJ3OkIwvjiwEZiykBH+ GfGgHj5ZpdMvlEel09R1+l7JGEbNAMkbzZkaXXc98VDEJiPJbheojApH5RgsOKOwfOup 6btBv8o/MiEi4MVpVsRrg53AFK7oDQncbUwI1fpgxk3NpHWG8qiKdxJDNw+M0xSA78oy WZG2q+LSHfCfrwpC+dInnb6k1ESM1zaNAE2TgGrsBUOb+HLJRddCXNZzSQtv/Eh7/lX3 WUAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770137588; x=1770742388; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=OmuYtF9zzdexm5fiG3G6+QDNVwfvH84+Xzk/3eRhK+A=; b=JNa/Kg1Za3Gq4+H27pHOB7r0psF/3zHmbPsvoaPCbUceV/v8vVd9vClSn+MNAj8hmg atGVyE7HFWlhwNO1Age9kr1K65EM0wf7SxG4Q9BSZ+GvPAJceW3FB+/WXaGiirg1frd+ nRra099lqQq6SZd01HPbgGRks3EVzy58/Ak6HpqsayIrX1X1A2Ptgf9cEbo1tQ95tkaO pJEi1FiXjiZ9xyMV/IY9pMPsnzsLH0o7ZXj62McwrBGr3RK4lB4JdIkIZY0DgAr4JjsB vTfCQ0mIVtXRFn56UJbcKZ+fBZQZTj39MhM0dJ7bXL8imPN8Uxb3KiBWm5fKCg6UsiVd n1Sg== X-Forwarded-Encrypted: i=1; AJvYcCWv1eFxC09bIHf2Q+/wex2fx0q6yz982lr2YVj/YgYYYcBlYlUUmG+xJJIs99Ne3z6OacmHgpAKRT+RC6oj@lists.postgresql.org X-Gm-Message-State: AOJu0YxyktljqnCrP2vSWkFXTn54OYcB2tsX90cMnR8XdqTbxJl8gtGq odQ+CIcRVdCEzNZuW+cjMRaFz2bvxQh/60TBUv//K8v5N8ZTSR9cG27rUSdQzS7t6wjNVkZU0Sr laS+5Y62hdN5KZCb5Jun5SW8peXTUnzo= X-Gm-Gg: AZuq6aI7kPBcBJ+qg7XhpK8P2r7QGRxC5zUwJUEZM6XlKQj3AP2pnbs1W40ucHVYVcB T2Bx3yegKflZpEVMpg08OdzNWvVQ16GecH/z4j37TOAC02wzNvsI5vw5bApT1npMUvch2T7hjQk 9/24QgnKccHtSGOthFCgeHaHzd43apM9H4BTQW9ncPJnuNzhKJbM7BerFK/ChLxRG5d5cSjHclC mQzaBTLQsu9O5FOi0UQQx/zIkEi0tAY70zBylwe7YJNZYF3lf4wtXPDZ5snGxrDEQKJ6kGLjlNm xG8F+V5ylOOlHlo9V5sOhu9z19Qq X-Received: by 2002:a05:690c:82f:b0:794:d388:6145 with SMTP id 00721157ae682-794fe739b2fmr2303187b3.41.1770137587878; Tue, 03 Feb 2026 08:53:07 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: vignesh C Date: Tue, 3 Feb 2026 22:22:52 +0530 X-Gm-Features: AZwV_Qie9piZzm5PUOSMchScnh7LOziW6QRp4X2boC82AkLi3Q21_S1RWnWojmo Message-ID: Subject: Re: Skipping schema changes in publication To: Shlok Kyal Cc: shveta malik , Dilip Kumar , Amit Kapila , Peter Smith , "Zhijie Hou (Fujitsu)" , YeXiu <1518981153@qq.com>, Ian Lawrence Barwick , Bharath Rupireddy , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000021d4f10649ee4689" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000021d4f10649ee4689 Content-Type: text/plain; charset="UTF-8" On Mon, 2 Feb 2026 at 17:18, Shlok Kyal wrote: > > I reviewed v38-0002-handle-EXCEPT-TABLE-correctly-with-partitioned-approach-1.patch > patch. Here are my comments: > > 4. While testing, I noticed that the new query introduced in tablesync > can be invoked for "FOR TABLE". SHould we only call it for "ALL > TABLES" publications? > + if (server_version >= 190000 && !is_partition && > + lrel->relkind == RELKIND_PARTITIONED_TABLE) > + { > + resetStringInfo(&cmd); > + > + /* > + * This query recursively traverses the inheritance (partition) tree > + * starting from the given table OID and determines which leaf > + * relations should be included for replication. Exclusion propagates > + * from parent to child, and a relation is also treated as excluded if > + * it is explicitly marked with prexcept = true in pg_publication_rel > + * for the specified publications. The final result returns only > + * non excluded leaf relations. > + */ > Test: > Create publication for table sc1.t1 using (publish_via_partition_root > = true) and create subscription on it. In subscriber logs we can see > the logs for the new query. > sc1.t1 has the same structure as in comment 1. We will not know if it is a table publication or all tables publication from here. Also there can be a possibility of multiple publications. We will invoke it and handle it from the publisher to return appropriate tables. Thanks for the review and detailed comments. All remaining feedback has been addressed in the attached v39 patch. In addition, the SQL query previously used to compute the set of effective tables has been replaced with a C implementation. The SQL approach had become increasingly complex and difficult to reason about, especially as more publication combinations were added. Implementing this logic in C significantly improves readability and maintainability, and makes it easier to handle complex scenarios, such as: a) Multiple publications where one publication has no EXCEPT tables and another does. b) Multiple publications where one publication is an ALL TABLES publication with EXCEPT, while another is a table-specific publication. c) Multiple publications where none of the publications define any EXCEPT tables. Peter's comments from [1] and Shveta's comments form [2] will be addressed in the next version. [1] - https://www.postgresql.org/message-id/CAHut%2BPsiWwmNSuCXTWM0iPDm3yGskLts-fukELTB__rbBids-A%40mail.gmail.com [2] - https://www.postgresql.org/message-id/CAJpy0uAOvtMBP-oV9Tgoznt5-UsE2dzAjZW3eJmgKcU-X-vEzg%40mail.gmail.com Regards, Vignesh --00000000000021d4f10649ee4689 Content-Type: application/x-patch; name="v39-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Disposition: attachment; filename="v39-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml6u3tdi0 RnJvbSAzMmU0ZGU0Yzk5NTdlMjJlM2Y4ZDI2MThjOGRhNTlhNzhiOGE5Njc5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjggSmFuIDIwMjYgMTA6NDc6MDIgKzA1MzAKU3ViamVjdDogW1BBVENIIHYzOSAxLzJd IFNraXAgcHVibGlzaGluZyB0aGUgdGFibGVzIHNwZWNpZmllZCBpbiBFWENFUFQgVEFCTEUuCgpB IG5ldyAiRVhDRVBUIFRBQkxFIiBjbGF1c2UgZm9yIENSRUFURSBQVUJMSUNBVElPTiBhbGxvd3Mg b25lIG9yIG1vcmUKdGFibGVzIHRvIGJlIGV4Y2x1ZGVkLiBUaGUgcHVibGlzaGVyIHdpbGwgbm90 IHNlbmQgdGhlIGRhdGEgb2YgZXhjbHVkZWQKdGFibGVzIHRvIHRoZSBzdWJzY3JpYmVyLgoKVGhl IG5ldyBzeW50YXggYWxsb3dzIHNwZWNpZnlpbmcgZXhjbHVkZWQgcmVsYXRpb25zIHdoZW4gY3Jl YXRpbmcgYQpwdWJsaWNhdGlvbi4gRm9yIGV4YW1wbGU6CkNSRUFURSBQVUJMSUNBVElPTiBwdWIx IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodDEsdDIpOwoKQSBuZXcgY29sdW1uICJwcmV4 Y2VwdCIgaXMgYWRkZWQgdG8gdGFibGUgInBnX3B1YmxpY2F0aW9uX3JlbCIsIHRvIGZsYWcKdGhl IHJlbGF0aW9ucyB0aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgcHVibGlj YXRpb25zLgoKcGdfZHVtcCBpcyB1cGRhdGVkIHRvIGlkZW50aWZ5IGFuZCBkdW1wIHRoZSBleGNs dWRlZCB0YWJsZXMgb2YgdGhlIHB1YmxpY2F0aW9ucy4KClRoZSBwc3FsIFxkIGZhbWlseSBvZiBj b21tYW5kcyBjYW4gbm93IGRpc3BsYXkgZXhjbHVkZWQgdGFibGVzLgoKQnVtcCBjYXRhbG9nIHZl cnNpb24uCi0tLQogZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgICAgICAgICAgICAgICAgICAg IHwgIDEwICsKIGRvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgICAgICAgICB8 ICAgNiArLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbCAgICAgIHwg IDU2ICsrKystCiBkb2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwgICAgICAgICAgICAgICAg fCAgIDUgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyAgICAgICAgICB8 IDE0MyArKysrKysrKystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMg ICAgICAgIHwgMTA5ICsrKystLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAg ICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAg ICAgICAgICAgICB8ICA0MiArKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9w Z291dHB1dC5jICAgfCAgNDMgKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUu YyAgICAgICAgICAgIHwgIDIxICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAg ICAgICAgICAgICAgfCAgNzEgKysrKysrCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oICAgICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwg ICAgICAgICAgICAgIHwgIDMwICsrKwogc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgICAgICAgICAg ICAgICAgICAgICAgIHwgIDg3ICsrKysrKy0KIHNyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4u YyAgICAgICAgICAgICAgICB8ICAxMiArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5oICAgICAgICAgIHwgIDEzICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uX3JlbC5oICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAg ICAgICAgICAgICAgIHwgICAzICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRp b24ub3V0ICAgICB8ICA5MyArKysrKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlv bi5zcWwgICAgICAgICAgfCAgMzcgKystCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVp bGQgICAgICAgICAgICAgfCAgIDEgKwogLi4uL3QvMDM3X3JlcF9jaGFuZ2VzX2V4Y2VwdF90YWJs ZS5wbCAgICAgICAgIHwgMjM4ICsrKysrKysrKysrKysrKysrKwogMjIgZmlsZXMgY2hhbmdlZCwg ODk3IGluc2VydGlvbnMoKyksIDEyOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzdfcmVwX2NoYW5nZXNfZXhjZXB0X3RhYmxlLnBsCgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY2F0 YWxvZ3Muc2dtbAppbmRleCAzMzIxOTM1NjVlMi4uZDQwZTVjYzEwOTAgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21s CkBAIC02NTgxLDYgKzY1ODEsMTYgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0 ZXJhdGlvbiBjb3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKICAgICAgIGlm IHRoZXJlIGlzIG5vIHB1YmxpY2F0aW9uIHF1YWxpZnlpbmcgY29uZGl0aW9uLjwvcGFyYT48L2Vu dHJ5PgogICAgICA8L3Jvdz4KIAorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFs b2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgIDxz dHJ1Y3RmaWVsZD5wcmV4Y2VwdDwvc3RydWN0ZmllbGQ+IDx0eXBlPmJvb2w8L3R5cGU+CisgICAg ICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBUcnVlIGlmIHRoZSByZWxhdGlvbiBpcyBl eGNsdWRlZCBmcm9tIHRoZSBwdWJsaWNhdGlvbi4gU2VlCisgICAgICAgPGxpbmsgbGlua2VuZD0i c3FsLWNyZWF0ZXB1YmxpY2F0aW9uLXBhcmFtcy1mb3ItZXhjZXB0LXRhYmxlIj48bGl0ZXJhbD5F WENFUFQgVEFCTEU8L2xpdGVyYWw+PC9saW5rPi4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAg ICA8L3Jvdz4KKwogICAgICA8cm93PgogICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVf ZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KICAgICAgICA8c3RydWN0Zmll bGQ+cHJhdHRyczwvc3RydWN0ZmllbGQ+IDx0eXBlPmludDJ2ZWN0b3I8L3R5cGU+CmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21s L2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAppbmRleCA1MDI4ZmU5YWYwOS4uZjAxMjgxZmQ0Zjkg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbApAQCAtMTE2LDcgKzExNiwxMSBA QAogICAgPGxpdGVyYWw+Rk9SIFRBQkxFUyBJTiBTQ0hFTUE8L2xpdGVyYWw+LCA8bGl0ZXJhbD5G T1IgQUxMIFRBQkxFUzwvbGl0ZXJhbD4sCiAgICBvciA8bGl0ZXJhbD5GT1IgQUxMIFNFUVVFTkNF UzwvbGl0ZXJhbD4uIFVubGlrZSB0YWJsZXMsIHNlcXVlbmNlcyBjYW4gYmUKICAgIHN5bmNocm9u aXplZCBhdCBhbnkgdGltZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQotICAgPHhyZWYgbGlu a2VuZD0ibG9naWNhbC1yZXBsaWNhdGlvbi1zZXF1ZW5jZXMiLz4uCisgICA8eHJlZiBsaW5rZW5k PSJsb2dpY2FsLXJlcGxpY2F0aW9uLXNlcXVlbmNlcyIvPi4gV2hlbiBhIHB1YmxpY2F0aW9uIGlz CisgICBjcmVhdGVkIHdpdGggPGxpdGVyYWw+Rk9SIEFMTCBUQUJMRVM8L2xpdGVyYWw+LCB0YWJs ZXMgY2FuIGJlIGV4cGxpY2l0bHkKKyAgIGV4Y2x1ZGVkIGZyb20gcHVibGljYXRpb24gdXNpbmcg dGhlCisgICA8bGluayBsaW5rZW5kPSJzcWwtY3JlYXRlcHVibGljYXRpb24tcGFyYW1zLWZvci1l eGNlcHQtdGFibGUiPjxsaXRlcmFsPkVYQ0VQVCBUQUJMRTwvbGl0ZXJhbD48L2xpbms+CisgICBj bGF1c2UuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9y ZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJs aWNhdGlvbi5zZ21sCmluZGV4IDZlZmJiOTE1Y2VjLi4xZTA5MWJiM2M2ZCAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCkBAIC0zMiwxMiArMzIsMTYgQEAgQ1JFQVRF IFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNl YWJsZT4KIAogPHBocmFzZT5hbmQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnB1Ymxp Y2F0aW9uX2FsbF9vYmplY3Q8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CiAKLSAg ICBBTEwgVEFCTEVTCisgICAgQUxMIFRBQkxFUyBbIEVYQ0VQVCBbIFRBQkxFIF0gKCA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXhjZXB0X3RhYmxlX29iamVjdDwvcmVwbGFjZWFibGU+ IFssIC4uLiBdICkgXQogICAgIEFMTCBTRVFVRU5DRVMKIAogPHBocmFzZT5hbmQgPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX2FuZF9jb2x1bW5zPC9yZXBsYWNlYWJsZT4gaXM6 PC9waHJhc2U+CiAKICAgICBbIE9OTFkgXSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKiBdIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApIF0gWyBXSEVSRSAo IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4g KSBdCisKKzxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leGNlcHRf dGFibGVfb2JqZWN0PC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CisKKyAgICBbIE9OTFkgXSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsg KiBdCiA8L3N5bm9wc2lzPgogIDwvcmVmc3lub3BzaXNkaXY+CiAKQEAgLTE2NCw3ICsxNjgsOCBA QCBDUkVBVEUgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8 L3JlcGxhY2VhYmxlPgogICAgIDxsaXN0aXRlbT4KICAgICAgPHBhcmE+CiAgICAgICBNYXJrcyB0 aGUgcHVibGljYXRpb24gYXMgb25lIHRoYXQgcmVwbGljYXRlcyBjaGFuZ2VzIGZvciBhbGwgdGFi bGVzIGluCi0gICAgICB0aGUgZGF0YWJhc2UsIGluY2x1ZGluZyB0YWJsZXMgY3JlYXRlZCBpbiB0 aGUgZnV0dXJlLgorICAgICAgdGhlIGRhdGFiYXNlLCBpbmNsdWRpbmcgdGFibGVzIGNyZWF0ZWQg aW4gdGhlIGZ1dHVyZS4gVGFibGVzIGxpc3RlZCBpbgorICAgICAgRVhDRVBUIFRBQkxFIGFyZSBl eGNsdWRlZCBmcm9tIHRoZSBwdWJsaWNhdGlvbi4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0 ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTE4NCw2ICsxODksMzYgQEAgQ1JFQVRFIFBVQkxJ Q0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4K ICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnkg aWQ9InNxbC1jcmVhdGVwdWJsaWNhdGlvbi1wYXJhbXMtZm9yLWV4Y2VwdC10YWJsZSI+CisgICAg PHRlcm0+PGxpdGVyYWw+RVhDRVBUIFRBQkxFPC9saXRlcmFsPjwvdGVybT4KKyAgICA8bGlzdGl0 ZW0+CisgICAgIDxwYXJhPgorICAgICAgVGhpcyBjbGF1c2Ugc3BlY2lmaWVzIGEgbGlzdCBvZiB0 YWJsZXMgdG8gYmUgZXhjbHVkZWQgZnJvbSB0aGUKKyAgICAgIHB1YmxpY2F0aW9uLgorICAgICA8 L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgRm9yIGluaGVyaXRlZCB0YWJsZXMsIGlmIDxsaXRl cmFsPk9OTFk8L2xpdGVyYWw+IGlzIHNwZWNpZmllZCBiZWZvcmUgdGhlCisgICAgICB0YWJsZSBu YW1lLCBvbmx5IHRoYXQgdGFibGUgaXMgZXhjbHVkZWQgZnJvbSB0aGUgcHVibGljYXRpb24uIElm CisgICAgICA8bGl0ZXJhbD5PTkxZPC9saXRlcmFsPiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgdGFi bGUgYW5kIGFsbCBpdHMgZGVzY2VuZGFudAorICAgICAgdGFibGVzIChpZiBhbnkpIGFyZSBleGNs dWRlZC4gT3B0aW9uYWxseSwgPGxpdGVyYWw+KjwvbGl0ZXJhbD4gY2FuIGJlCisgICAgICBzcGVj aWZpZWQgYWZ0ZXIgdGhlIHRhYmxlIG5hbWUgdG8gZXhwbGljaXRseSBpbmRpY2F0ZSB0aGF0IGRl c2NlbmRhbnQKKyAgICAgIHRhYmxlcyBhcmUgZXhjbHVkZWQuCisgICAgIDwvcGFyYT4KKyAgICAg PHBhcmE+CisgICAgICBGb3IgcGFydGl0aW9uZWQgdGFibGVzLCB3aGVuIDxsaXRlcmFsPnB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290PC9saXRlcmFsPgorICAgICAgaXMgc2V0IHRvIDxsaXRlcmFs PnRydWU8L2xpdGVyYWw+LCBzcGVjaWZ5aW5nIGEgcm9vdCBwYXJ0aXRpb25lZCB0YWJsZSBpbgor ICAgICAgPGxpdGVyYWw+RVhDRVBUIFRBQkxFPC9saXRlcmFsPiBleGNsdWRlcyBpdCBhbmQgYWxs IGl0cyBwYXJ0aXRpb25zIGZyb20KKyAgICAgIHJlcGxpY2F0aW9uLiBTcGVjaWZ5aW5nIGEgbGVh ZiBwYXJ0aXRpb24gaGFzIG5vIGVmZmVjdCwgYXMgaXRzIGNoYW5nZXMgYXJlCisgICAgICBzdGls bCByZXBsaWNhdGVkIHZpYSB0aGUgcm9vdCBwYXJ0aXRpb25lZCB0YWJsZS4gV2hlbgorICAgICAg PGxpdGVyYWw+cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Q8L2xpdGVyYWw+IGlzIHNldCB0bwor ICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCBzcGVjaWZ5aW5nIGEgcm9vdCBwYXJ0aXRp b25lZCB0YWJsZSBoYXMgbm8KKyAgICAgIGVmZmVjdCwgYXMgY2hhbmdlcyBhcmUgcmVwbGljYXRl ZCB2aWEgdGhlIGxlYWYgcGFydGl0aW9ucy4gU3BlY2lmeWluZyBhCisgICAgICBsZWFmIHBhcnRp dGlvbiBleGNsdWRlcyBvbmx5IHRoYXQgcGFydGl0aW9uIGZyb20gcmVwbGljYXRpb24uIFRoZSBv cHRpb25hbAorICAgICAgPGxpdGVyYWw+KjwvbGl0ZXJhbD4gaGFzIG5vIG1lYW5pbmcgZm9yIHBh cnRpdGlvbmVkIHRhYmxlcy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zh cmxpc3RlbnRyeT4KKwogICAgPHZhcmxpc3RlbnRyeSBpZD0ic3FsLWNyZWF0ZXB1YmxpY2F0aW9u LXBhcmFtcy13aXRoIj4KICAgICA8dGVybT48bGl0ZXJhbD5XSVRIICggPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPnB1YmxpY2F0aW9uX3BhcmFtZXRlcjwvcmVwbGFjZWFibGU+IFs9IDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj52YWx1ZTwvcmVwbGFjZWFibGU+XSBbLCAuLi4g XSApPC9saXRlcmFsPjwvdGVybT4KICAgICA8bGlzdGl0ZW0+CkBAIC00ODksNiArNTI0LDIzIEBA IENSRUFURSBQVUJMSUNBVElPTiBhbGxfc2VxdWVuY2VzIEZPUiBBTEwgU0VRVUVOQ0VTOwogICAg YWxsIHNlcXVlbmNlcyBmb3Igc3luY2hyb25pemF0aW9uOgogPHByb2dyYW1saXN0aW5nPgogQ1JF QVRFIFBVQkxJQ0FUSU9OIGFsbF90YWJsZXNfc2VxdWVuY2VzIEZPUiBBTEwgVEFCTEVTLCBBTEwg U0VRVUVOQ0VTOworPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg Q3JlYXRlIGEgcHVibGljYXRpb24gdGhhdCBwdWJsaXNoZXMgYWxsIGNoYW5nZXMgaW4gYWxsIHRh YmxlcyBleGNlcHQKKyAgIDxzdHJ1Y3RuYW1lPnVzZXJzPC9zdHJ1Y3RuYW1lPiBhbmQgPHN0cnVj dG5hbWU+ZGVwYXJ0bWVudHM8L3N0cnVjdG5hbWU+OgorPHByb2dyYW1saXN0aW5nPgorQ1JFQVRF IFBVQkxJQ0FUSU9OIGFsbF90YWJsZXNfZXhjZXB0IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCAodXNl cnMsIGRlcGFydG1lbnRzKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIENyZWF0ZSBhIHB1YmxpY2F0aW9uIHRoYXQgcHVibGlzaGVzIGFsbCBzZXF1ZW5jZXMg Zm9yIHN5bmNocm9uaXphdGlvbiwgYW5kCisgICBhbGwgY2hhbmdlcyBpbiBhbGwgdGFibGVzIGV4 Y2VwdCA8c3RydWN0bmFtZT51c2Vyczwvc3RydWN0bmFtZT4gYW5kCisgICA8c3RydWN0bmFtZT5k ZXBhcnRtZW50czwvc3RydWN0bmFtZT46Cis8cHJvZ3JhbWxpc3Rpbmc+CitDUkVBVEUgUFVCTElD QVRJT04gYWxsX3NlcXVlbmNlc190YWJsZXNfZXhjZXB0IEZPUiBBTEwgU0VRVUVOQ0VTLCBBTEwg VEFCTEVTIEVYQ0VQVCAodXNlcnMsIGRlcGFydG1lbnRzKTsKIDwvcHJvZ3JhbWxpc3Rpbmc+CiAg IDwvcGFyYT4KICA8L3JlZnNlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wc3Fs LXJlZi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sCmluZGV4IGU0NjRlM2Ix M2RlLi5mNGMwMTgzYjkzYSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbApAQCAtMjEwMyw4ICsyMTAz LDkgQEAgU0VMRUNUICQxIFxwYXJzZSBzdG10MQogICAgICAgICBsaXN0ZWQuCiAgICAgICAgIElm IDxsaXRlcmFsPng8L2xpdGVyYWw+IGlzIGFwcGVuZGVkIHRvIHRoZSBjb21tYW5kIG5hbWUsIHRo ZSByZXN1bHRzCiAgICAgICAgIGFyZSBkaXNwbGF5ZWQgaW4gZXhwYW5kZWQgbW9kZS4KLSAgICAg ICAgSWYgPGxpdGVyYWw+KzwvbGl0ZXJhbD4gaXMgYXBwZW5kZWQgdG8gdGhlIGNvbW1hbmQgbmFt ZSwgdGhlIHRhYmxlcyBhbmQKLSAgICAgICAgc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBw dWJsaWNhdGlvbiBhcmUgc2hvd24gYXMgd2VsbC4KKyAgICAgICAgSWYgPGxpdGVyYWw+KzwvbGl0 ZXJhbD4gaXMgYXBwZW5kZWQgdG8gdGhlIGNvbW1hbmQgbmFtZSwgdGhlIHRhYmxlcywKKyAgICAg ICAgZXhjbHVkZWQgdGFibGVzLCBhbmQgc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBwdWJs aWNhdGlvbiBhcmUgc2hvd24KKyAgICAgICAgYXMgd2VsbC4KICAgICAgICAgPC9wYXJhPgogICAg ICAgICA8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmMKaW5kZXggOWE0NzkxYzU3M2UuLjA5YzY5MDA1MTIyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0zNjYsOSArMzY2LDExIEBAIEdldFRvcE1vc3RB bmNlc3RvckluUHVibGljYXRpb24oT2lkIHB1Ym9pZCwgTGlzdCAqYW5jZXN0b3JzLCBpbnQgKmFu Y2VzdG9yX2xldmVsCiAJZm9yZWFjaChsYywgYW5jZXN0b3JzKQogCXsKIAkJT2lkCQkJYW5jZXN0 b3IgPSBsZmlyc3Rfb2lkKGxjKTsKLQkJTGlzdAkgICAqYXB1YmlkcyA9IEdldFJlbGF0aW9uUHVi bGljYXRpb25zKGFuY2VzdG9yKTsKKwkJTGlzdAkgICAqYXB1YmlkcyA9IE5JTDsKIAkJTGlzdAkg ICAqYXNjaGVtYVB1YmlkcyA9IE5JTDsKIAorCQlHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhhbmNl c3RvciwgJmFwdWJpZHMsIE5VTEwpOworCiAJCWxldmVsKys7CiAKIAkJaWYgKGxpc3RfbWVtYmVy X29pZChhcHViaWRzLCBwdWJvaWQpKQpAQCAtNDY2LDYgKzQ2OCwyNiBAQCBwdWJsaWNhdGlvbl9h ZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaSwKIAkJCQkJCVJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHRhcmdldHJlbCksIHB1Yi0+bmFtZSkpKTsKIAl9CiAKKwkv KgorCSAqIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIHBhcnRpdGlvbiBpcyBleGNsdWRlZCBieSBF WENFUFQgVEFCTEUgd2hpbGUKKwkgKiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUu CisJICovCisJaWYgKHB1Yi0+YWxsdGFibGVzICYmIHB1Yi0+cHVidmlhcm9vdCAmJiBwcmktPmV4 Y2VwdCAmJgorCQl0YXJnZXRyZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24pCisJCWVyZXBvcnQo V0FSTklORywKKwkJCQkoZXJybXNnKCJwYXJ0aXRpb24gXCIlc1wiIG1pZ2h0IGJlIHJlcGxpY2F0 ZWQgYXMgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgXCIlc1wiIiwKKwkJCQkJCVJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHRhcmdldHJlbCksICJ0cnVlIikpKTsKKworCS8qCisJICogSGFu ZGxlIHRoZSBjYXNlIHdoZXJlIGEgcGFydGl0aW9uZWQgdGFibGUgaXMgZXhjbHVkZWQgYnkgRVhD RVBUIFRBQkxFCisJICogd2hpbGUgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZS4K KwkgKi8KKwlpZiAocHViLT5hbGx0YWJsZXMgJiYgIXB1Yi0+cHVidmlhcm9vdCAmJiBwcmktPmV4 Y2VwdCAmJgorCQl0YXJnZXRyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElP TkVEX1RBQkxFKQorCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycm1zZygicGFydGl0aW9uZWQg dGFibGUgXCIlc1wiIG1pZ2h0IGJlIHJlcGxpY2F0ZWQgYXMgcHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QgaXMgXCIlc1wiIiwKKwkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHRhcmdldHJl bCksICJmYWxzZSIpKSk7CisKIAljaGVja19wdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24odGFyZ2V0 cmVsKTsKIAogCS8qIFZhbGlkYXRlIGFuZCB0cmFuc2xhdGUgY29sdW1uIG5hbWVzIGludG8gYSBC aXRtYXBzZXQgb2YgYXR0bnVtcy4gKi8KQEAgLTQ4Miw2ICs1MDQsOCBAQCBwdWJsaWNhdGlvbl9h ZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaSwKIAkJT2JqZWN0 SWRHZXREYXR1bShwdWJpZCk7CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcmVsX3BycmVs aWQgLSAxXSA9CiAJCU9iamVjdElkR2V0RGF0dW0ocmVsaWQpOworCXZhbHVlc1tBbnVtX3BnX3B1 YmxpY2F0aW9uX3JlbF9wcmV4Y2VwdCAtIDFdID0KKwkJQm9vbEdldERhdHVtKHByaS0+ZXhjZXB0 KTsKIAogCS8qIEFkZCBxdWFsaWZpY2F0aW9ucywgaWYgYXZhaWxhYmxlICovCiAJaWYgKHByaS0+ d2hlcmVDbGF1c2UgIT0gTlVMTCkKQEAgLTc0OSwzOCArNzczLDU4IEBAIHB1YmxpY2F0aW9uX2Fk ZF9zY2hlbWEoT2lkIHB1YmlkLCBPaWQgc2NoZW1haWQsIGJvb2wgaWZfbm90X2V4aXN0cykKIAly ZXR1cm4gbXlzZWxmOwogfQogCi0vKiBHZXRzIGxpc3Qgb2YgcHVibGljYXRpb24gb2lkcyBmb3Ig YSByZWxhdGlvbiAqLwotTGlzdCAqCi1HZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhPaWQgcmVsaWQp CisvKgorICogR2V0IHRoZSBsaXN0IG9mIHB1YmxpY2F0aW9uIG9pZHMgYXNzb2NpYXRlZCB3aXRo IGEgc3BlY2lmaWVkIHJlbGF0aW9uLgorICoKKyAqIFBhcmFtZXRlciAncHViaWRzJyByZXR1cm5z IHRoZSBPaWRzIG9mIHRoZSBwdWJsaWNhdGlvbnMgdGhlIHJlbGF0aW9uIGlzIHBhcnQKKyAqIG9m LiBQYXJhbWV0ZXIgJ2V4Y2VwdF9wdWJpZHMnIHJldHVybnMgdGhlIE9pZHMgb2YgcHVibGljYXRp b25zIHRoZSByZWxhdGlvbgorICogaXMgZXhjbHVkZWQgZnJvbS4KKyAqCisgKiBUaGlzIGZ1bmN0 aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVsYXRpb24gaXMgcGFydCBvZiBhbnkgcHVibGljYXRp b24uCisgKi8KK2Jvb2wKK0dldFJlbGF0aW9uUHVibGljYXRpb25zKE9pZCByZWxpZCwgTGlzdCAq KnB1YmlkcywgTGlzdCAqKmV4Y2VwdF9wdWJpZHMpCiB7Ci0JTGlzdAkgICAqcmVzdWx0ID0gTklM OwogCUNhdENMaXN0ICAgKnB1YnJlbGxpc3Q7Ci0JaW50CQkJaTsKKwlib29sCQlmb3VuZCA9IGZh bHNlOwogCiAJLyogRmluZCBhbGwgcHVibGljYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVs YXRpb24uICovCiAJcHVicmVsbGlzdCA9IFNlYXJjaFN5c0NhY2hlTGlzdDEoUFVCTElDQVRJT05S RUxNQVAsCiAJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShyZWxpZCkpOwotCWZvciAoaSA9IDA7 IGkgPCBwdWJyZWxsaXN0LT5uX21lbWJlcnM7IGkrKykKKwlmb3IgKGludCBpID0gMDsgaSA8IHB1 YnJlbGxpc3QtPm5fbWVtYmVyczsgaSsrKQogCXsKIAkJSGVhcFR1cGxlCXR1cCA9ICZwdWJyZWxs aXN0LT5tZW1iZXJzW2ldLT50dXBsZTsKLQkJT2lkCQkJcHViaWQgPSAoKEZvcm1fcGdfcHVibGlj YXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKSktPnBycHViaWQ7CisJCUZvcm1fcGdfcHVibGljYXRp b25fcmVsIHB1YnJlbCA9IChGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCkgR0VUU1RSVUNUKHR1cCk7 CisJCU9pZAkJCXB1YmlkID0gcHVicmVsLT5wcnB1YmlkOwogCi0JCXJlc3VsdCA9IGxhcHBlbmRf b2lkKHJlc3VsdCwgcHViaWQpOworCQlpZiAocHVicmVsLT5wcmV4Y2VwdCkKKwkJeworCQkJaWYg KGV4Y2VwdF9wdWJpZHMpCisJCQkJKmV4Y2VwdF9wdWJpZHMgPSBsYXBwZW5kX29pZCgqZXhjZXB0 X3B1YmlkcywgcHViaWQpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKHB1YmlkcykKKwkJCQkq cHViaWRzID0gbGFwcGVuZF9vaWQoKnB1YmlkcywgcHViaWQpOworCQkJZm91bmQgPSB0cnVlOwor CQl9CiAJfQogCiAJUmVsZWFzZVN5c0NhY2hlTGlzdChwdWJyZWxsaXN0KTsKIAotCXJldHVybiBy ZXN1bHQ7CisJcmV0dXJuIGZvdW5kOwogfQogCiAvKgotICogR2V0cyBsaXN0IG9mIHJlbGF0aW9u IG9pZHMgZm9yIGEgcHVibGljYXRpb24uCisgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZXQgdGhl IGxpc3Qgb2YgcmVsYXRpb24gT2lkcyBmb3IgYSBwdWJsaWNhdGlvbi4KICAqCi0gKiBUaGlzIHNo b3VsZCBvbmx5IGJlIHVzZWQgRk9SIFRBQkxFIHB1YmxpY2F0aW9ucywgdGhlIEZPUiBBTEwgVEFC TEVTL1NFUVVFTkNFUwotICogc2hvdWxkIHVzZSBHZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9ucygp LgorICogSWYgZXhjZXB0X2ZsYWcgaXMgdHJ1ZSwgcmV0dXJucyB0aGUgbGlzdCBvZiByZWxhdGlv bnMgZXhjbHVkZWQgZnJvbSB0aGUKKyAqIHB1YmxpY2F0aW9uOyBvdGhlcndpc2UsIHJldHVybnMg dGhlIGxpc3Qgb2YgcmVsYXRpb25zIGluY2x1ZGVkIGluIHRoZQorICogcHVibGljYXRpb24uCiAg Ki8KLUxpc3QgKgotR2V0UHVibGljYXRpb25SZWxhdGlvbnMoT2lkIHB1YmlkLCBQdWJsaWNhdGlv blBhcnRPcHQgcHViX3BhcnRvcHQpCitzdGF0aWMgTGlzdCAqCitnZXRfcHVibGljYXRpb25fcmVs YXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0LAorCQkJCQkJ ICBib29sIGV4Y2VwdF9mbGFnKQogewogCUxpc3QJICAgKnJlc3VsdDsKIAlSZWxhdGlvbglwdWJy ZWxzcmVsOwpAQCAtODA1LDggKzg0OSwxMCBAQCBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhPaWQg cHViaWQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCkKIAkJRm9ybV9wZ19wdWJsaWNh dGlvbl9yZWwgcHVicmVsOwogCiAJCXB1YnJlbCA9IChGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCkg R0VUU1RSVUNUKHR1cCk7Ci0JCXJlc3VsdCA9IEdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9u cyhyZXN1bHQsIHB1Yl9wYXJ0b3B0LAotCQkJCQkJCQkJCQkJcHVicmVsLT5wcnJlbGlkKTsKKwor CQlpZiAoZXhjZXB0X2ZsYWcgPT0gcHVicmVsLT5wcmV4Y2VwdCkKKwkJCXJlc3VsdCA9IEdldFB1 YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhyZXN1bHQsIHB1Yl9wYXJ0b3B0LAorCQkJCQkJCQkJ CQkJCXB1YnJlbC0+cHJyZWxpZCk7CiAJfQogCiAJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKQEAg LTgxOSw2ICs4NjUsMzYgQEAgR2V0UHVibGljYXRpb25SZWxhdGlvbnMoT2lkIHB1YmlkLCBQdWJs aWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAq IFJldHVybiB0aGUgbGlzdCBvZiByZWxhdGlvbiBPaWRzIGZvciBhIHB1YmxpY2F0aW9uLgorICoK KyAqIEZvciBhIEZPUiBUQUJMRSBwdWJsaWNhdGlvbiwgdGhpcyByZXR1cm5zIHRoZSBsaXN0IG9m IHJlbGF0aW9ucyBleHBsaWNpdGx5CisgKiBpbmNsdWRlZCBpbiB0aGUgcHVibGljYXRpb24uCisg KgorICogUHVibGljYXRpb25zIGRlY2xhcmVkIHdpdGggRk9SIEFMTCBUQUJMRVMgc2hvdWxkIHVz ZQorICogR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoKSB0byBvYnRhaW4gdGhlIGNvbXBsZXRl IHNldCBvZiB0YWJsZXMgY292ZXJlZCBieQorICogdGhlIHB1YmxpY2F0aW9uLgorICovCitMaXN0 ICoKK0dldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMoT2lkIHB1YmlkLCBQdWJsaWNhdGlv blBhcnRPcHQgcHViX3BhcnRvcHQpCit7CisJQXNzZXJ0KCFHZXRQdWJsaWNhdGlvbihwdWJpZCkt PmFsbHRhYmxlcyk7CisKKwlyZXR1cm4gZ2V0X3B1YmxpY2F0aW9uX3JlbGF0aW9ucyhwdWJpZCwg cHViX3BhcnRvcHQsIGZhbHNlKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbGlzdCBvZiB0YWJs ZXMgT2lkcyBleGNsdWRlZCBmcm9tIGEgcHVibGljYXRpb24uCisgKiBUaGlzIGlzIG9ubHkgYXBw bGljYWJsZSBmb3IgRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb25zLgorICovCitMaXN0ICoKK0dl dEFsbFB1YmxpY2F0aW9uRXhjbHVkZWRUYWJsZXMoT2lkIHB1YmlkLCBQdWJsaWNhdGlvblBhcnRP cHQgcHViX3BhcnRvcHQpCit7CisJQXNzZXJ0KEdldFB1YmxpY2F0aW9uKHB1YmlkKS0+YWxsdGFi bGVzKTsKKworCXJldHVybiBnZXRfcHVibGljYXRpb25fcmVsYXRpb25zKHB1YmlkLCBwdWJfcGFy dG9wdCwgdHJ1ZSk7Cit9CisKIC8qCiAgKiBHZXRzIGxpc3Qgb2YgcHVibGljYXRpb24gb2lkcyBm b3IgcHVibGljYXRpb25zIG1hcmtlZCBhcyBGT1IgQUxMIFRBQkxFUy4KICAqLwpAQCAtODY0LDE4 ICs5NDAsMjkgQEAgR2V0QWxsVGFibGVzUHVibGljYXRpb25zKHZvaWQpCiAgKiBwYXJ0aXRpb25l ZCB0YWJsZXMsIHdlIG11c3QgZXhjbHVkZSBwYXJ0aXRpb25zIGluIGZhdm9yIG9mIGluY2x1ZGlu ZyB0aGUKICAqIHJvb3QgcGFydGl0aW9uZWQgdGFibGVzLiBUaGlzIGlzIG5vdCBhcHBsaWNhYmxl IHRvIEZPUiBBTEwgU0VRVUVOQ0VTCiAgKiBwdWJsaWNhdGlvbi4KKyAqCisgKiBGb3IgYSBGT1Ig QUxMIFRBQkxFUyBwdWJsaWNhdGlvbiwgdGhlIHJldHVybmVkIGxpc3QgZXhjbHVkZXMgdGFibGVz IG1lbnRpb25lZAorICogaW4gRVhDRVBUIFRBQkxFIGNsYXVzZS4KICAqLwogTGlzdCAqCi1HZXRB bGxQdWJsaWNhdGlvblJlbGF0aW9ucyhjaGFyIHJlbGtpbmQsIGJvb2wgcHVidmlhcm9vdCkKK0dl dEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKFB1YmxpY2F0aW9uICpwdWIsIGNoYXIgcmVsa2luZCkK IHsKIAlSZWxhdGlvbgljbGFzc1JlbDsKIAlTY2FuS2V5RGF0YSBrZXlbMV07CiAJVGFibGVTY2Fu RGVzYyBzY2FuOwogCUhlYXBUdXBsZQl0dXBsZTsKIAlMaXN0CSAgICpyZXN1bHQgPSBOSUw7CisJ TGlzdAkgICAqZXhjZXB0bGlzdCA9IE5JTDsKKwlib29sCQlwdWJ2aWFyb290ID0gcHViLT5wdWJ2 aWFyb290OworCU9pZAkJCXB1YmlkID0gcHViLT5vaWQ7CiAKIAlBc3NlcnQoIShyZWxraW5kID09 IFJFTEtJTkRfU0VRVUVOQ0UgJiYgcHVidmlhcm9vdCkpOwogCisJaWYgKHJlbGtpbmQgPT0gUkVM S0lORF9SRUxBVElPTikKKwkJZXhjZXB0bGlzdCA9IEdldEFsbFB1YmxpY2F0aW9uRXhjbHVkZWRU YWJsZXMocHViaWQsIHB1YnZpYXJvb3QgPworCQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJU X0FMTCA6CisJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CisKIAljbGFzc1Jl bCA9IHRhYmxlX29wZW4oUmVsYXRpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwogCiAJ U2NhbktleUluaXQoJmtleVswXSwKQEAgLTg5MSw3ICs5NzgsOCBAQCBHZXRBbGxQdWJsaWNhdGlv blJlbGF0aW9ucyhjaGFyIHJlbGtpbmQsIGJvb2wgcHVidmlhcm9vdCkKIAkJT2lkCQkJcmVsaWQg PSByZWxGb3JtLT5vaWQ7CiAKIAkJaWYgKGlzX3B1Ymxpc2hhYmxlX2NsYXNzKHJlbGlkLCByZWxG b3JtKSAmJgotCQkJIShyZWxGb3JtLT5yZWxpc3BhcnRpdGlvbiAmJiBwdWJ2aWFyb290KSkKKwkJ CSEocmVsRm9ybS0+cmVsaXNwYXJ0aXRpb24gJiYgcHVidmlhcm9vdCkgJiYKKwkJCSFsaXN0X21l bWJlcl9vaWQoZXhjZXB0bGlzdCwgcmVsaWQpKQogCQkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVz dWx0LCByZWxpZCk7CiAJfQogCkBAIC05MTIsNyArMTAwMCw4IEBAIEdldEFsbFB1YmxpY2F0aW9u UmVsYXRpb25zKGNoYXIgcmVsa2luZCwgYm9vbCBwdWJ2aWFyb290KQogCQkJT2lkCQkJcmVsaWQg PSByZWxGb3JtLT5vaWQ7CiAKIAkJCWlmIChpc19wdWJsaXNoYWJsZV9jbGFzcyhyZWxpZCwgcmVs Rm9ybSkgJiYKLQkJCQkhcmVsRm9ybS0+cmVsaXNwYXJ0aXRpb24pCisJCQkJIXJlbEZvcm0tPnJl bGlzcGFydGl0aW9uICYmCisJCQkJIWxpc3RfbWVtYmVyX29pZChleGNlcHRsaXN0LCByZWxpZCkp CiAJCQkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCByZWxpZCk7CiAJCX0KIApAQCAtMTE2 OCwxNyArMTI1NywxNyBAQCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FS R1MpCiAJCQkgKiB0aG9zZS4gT3RoZXJ3aXNlLCBnZXQgdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGl0 c2VsZi4KIAkJCSAqLwogCQkJaWYgKHB1Yl9lbGVtLT5hbGx0YWJsZXMpCi0JCQkJcHViX2VsZW1f dGFibGVzID0gR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoUkVMS0lORF9SRUxBVElPTiwKLQkJ CQkJCQkJCQkJCQkJCSBwdWJfZWxlbS0+cHVidmlhcm9vdCk7CisJCQkJcHViX2VsZW1fdGFibGVz ID0gR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMocHViX2VsZW0sCisJCQkJCQkJCQkJCQkJCQkg UkVMS0lORF9SRUxBVElPTik7CiAJCQllbHNlCiAJCQl7CiAJCQkJTGlzdAkgICAqcmVsaWRzLAog CQkJCQkJICAgKnNjaGVtYXJlbGlkczsKIAotCQkJCXJlbGlkcyA9IEdldFB1YmxpY2F0aW9uUmVs YXRpb25zKHB1Yl9lbGVtLT5vaWQsCi0JCQkJCQkJCQkJCQkgcHViX2VsZW0tPnB1YnZpYXJvb3Qg PwotCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCA6Ci0JCQkJCQkJCQkJCQkgUFVC TElDQVRJT05fUEFSVF9MRUFGKTsKKwkJCQlyZWxpZHMgPSBHZXRQdWJsaWNhdGlvbkluY2x1ZGVk UmVsYXRpb25zKHB1Yl9lbGVtLT5vaWQsCisJCQkJCQkJCQkJCQkJCSBwdWJfZWxlbS0+cHVidmlh cm9vdCA/CisJCQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX1JPT1QgOgorCQkJCQkJCQkJ CQkJCQkgUFVCTElDQVRJT05fUEFSVF9MRUFGKTsKIAkJCQlzY2hlbWFyZWxpZHMgPSBHZXRBbGxT Y2hlbWFQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJfZWxlbS0+b2lkLAogCQkJCQkJCQkJCQkJCQkJ CXB1Yl9lbGVtLT5wdWJ2aWFyb290ID8KIAkJCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJU X1JPT1QgOgpAQCAtMTM2Nyw3ICsxNDU2LDcgQEAgcGdfZ2V0X3B1YmxpY2F0aW9uX3NlcXVlbmNl cyhQR19GVU5DVElPTl9BUkdTKQogCQlwdWJsaWNhdGlvbiA9IEdldFB1YmxpY2F0aW9uQnlOYW1l KHB1Ym5hbWUsIGZhbHNlKTsKIAogCQlpZiAocHVibGljYXRpb24tPmFsbHNlcXVlbmNlcykKLQkJ CXNlcXVlbmNlcyA9IEdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKFJFTEtJTkRfU0VRVUVOQ0Us IGZhbHNlKTsKKwkJCXNlcXVlbmNlcyA9IEdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1Ymxp Y2F0aW9uLCBSRUxLSU5EX1NFUVVFTkNFKTsKIAogCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBzZXF1 ZW5jZXM7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21k cy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggZmMzYTRj MTllNjUuLjZiYjgxNmIyMTljIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJs aWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMu YwpAQCAtMTk4LDcgKzE5OCwxMiBAQCBPYmplY3RzSW5QdWJsaWNhdGlvblRvT2lkcyhMaXN0ICpw dWJvYmpzcGVjX2xpc3QsIFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAogCQlzd2l0Y2ggKHB1Ym9iai0+ cHVib2JqdHlwZSkKIAkJeworCQkJY2FzZSBQVUJMSUNBVElPTk9CSl9FWENFUFRfVEFCTEU6CisJ CQkJcHVib2JqLT5wdWJ0YWJsZS0+ZXhjZXB0ID0gdHJ1ZTsKKwkJCQkqcmVscyA9IGxhcHBlbmQo KnJlbHMsIHB1Ym9iai0+cHVidGFibGUpOworCQkJCWJyZWFrOwogCQkJY2FzZSBQVUJMSUNBVElP Tk9CSl9UQUJMRToKKwkJCQlwdWJvYmotPnB1YnRhYmxlLT5leGNlcHQgPSBmYWxzZTsKIAkJCQkq cmVscyA9IGxhcHBlbmQoKnJlbHMsIHB1Ym9iai0+cHVidGFibGUpOwogCQkJCWJyZWFrOwogCQkJ Y2FzZSBQVUJMSUNBVElPTk9CSl9UQUJMRVNfSU5fU0NIRU1BOgpAQCAtNTE5LDggKzUyNCw4IEBA IEludmFsaWRhdGVQdWJSZWxTeW5jQ2FjaGUoT2lkIHB1YmlkLCBib29sIHB1YmFsbHRhYmxlcykK IAkJICogYSB0YXJnZXQuIEhvd2V2ZXIsIFdBTCByZWNvcmRzIGZvciBUUlVOQ0FURSBzcGVjaWZ5 IGJvdGggYSByb290IGFuZAogCQkgKiBpdHMgbGVhdmVzLgogCQkgKi8KLQkJcmVsaWRzID0gR2V0 UHVibGljYXRpb25SZWxhdGlvbnMocHViaWQsCi0JCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRf QUxMKTsKKwkJcmVsaWRzID0gR2V0UHVibGljYXRpb25JbmNsdWRlZFJlbGF0aW9ucyhwdWJpZCwK KwkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0FMTCk7CiAJCXNjaGVtYXJlbGlkcyA9IEdl dEFsbFNjaGVtYVB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmlkLAogCQkJCQkJCQkJCQkJCQlQVUJM SUNBVElPTl9QQVJUX0FMTCk7CiAKQEAgLTkyOSw1NSArOTM0LDYxIEBAIENyZWF0ZVB1YmxpY2F0 aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCUNv bW1hbmRDb3VudGVySW5jcmVtZW50KCk7CiAKIAkvKiBBc3NvY2lhdGUgb2JqZWN0cyB3aXRoIHRo ZSBwdWJsaWNhdGlvbi4gKi8KLQlpZiAoc3RtdC0+Zm9yX2FsbF90YWJsZXMpCisJT2JqZWN0c0lu UHVibGljYXRpb25Ub09pZHMoc3RtdC0+cHVib2JqZWN0cywgcHN0YXRlLCAmcmVsYXRpb25zLAor CQkJCQkJCSAgICZzY2hlbWFpZGxpc3QpOworCisJLyogRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcmVx dWlyZXMgc3VwZXJ1c2VyICovCisJaWYgKHNjaGVtYWlkbGlzdCAhPSBOSUwgJiYgIXN1cGVydXNl cigpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRf UFJJVklMRUdFKSwKKwkJCQllcnJtc2coIm11c3QgYmUgc3VwZXJ1c2VyIHRvIGNyZWF0ZSBGT1Ig VEFCTEVTIElOIFNDSEVNQSBwdWJsaWNhdGlvbiIpKTsKKworCS8qIEFkZCByZWxhdGlvbnMgKHRh YmxlcykgdG8gdGhlIHB1YmxpY2F0aW9uLiAqLworCWlmIChyZWxhdGlvbnMgIT0gTklMKQogCXsK IAkJLyoKLQkJICogSW52YWxpZGF0ZSByZWxjYWNoZSBzbyB0aGF0IHB1YmxpY2F0aW9uIGluZm8g aXMgcmVidWlsdC4gU2VxdWVuY2VzCi0JCSAqIHB1YmxpY2F0aW9uIGRvZXNuJ3QgcmVxdWlyZSBp bnZhbGlkYXRpb24sIGFzIHJlcGxpY2EgaWRlbnRpdHkKLQkJICogY2hlY2tzIGRvbid0IGFwcGx5 IHRvIHRoZW0uCisJCSAqIFRoZSAncmVsYXRpb25zJyBsaXN0IGNhbiBiZSBub24tZW1wdHkgaW4g b25seSB0d28gY2FzZXM6CisJCSAqCisJCSAqIDEuIENSRUFURSBQVUJMSUNBVElPTiAuLi4gRk9S IFRBQkxFIEluIHRoaXMgY2FzZSwgJ3JlbGF0aW9ucycKKwkJICogY29udGFpbnMgdGhlIGxpc3Qg b2Ygc3BlY2lmaWVkIHRhYmxlcy4KKwkJICoKKwkJICogMi4gQ1JFQVRFIFBVQkxJQ0FUSU9OIC4u LiBGT1IgQUxMIFRBQkxFUyBJbiB0aGlzIGNhc2UsICdyZWxhdGlvbnMnCisJCSAqIGNvbnRhaW5z IHRoZSBsaXN0IG9mIHRhYmxlcyBzcGVjaWZpZWQgaW4gdGhlIEVYQ0VQVCBUQUJMRSBjbGF1c2Uu CisJCSAqIER1cmluZyBwYXJzaW5nLCB0aGUgJ2V4Y2VwdCcgZmxhZyBpcyBzZXQgZm9yIHRoZSBh c3NvY2lhdGVkCisJCSAqIFB1YmxpY2F0aW9uUmVsSW5mbyBvYmplY3RzLgogCQkgKi8KLQkJQ2Fj aGVJbnZhbGlkYXRlUmVsY2FjaGVBbGwoKTsKLQl9Ci0JZWxzZSBpZiAoIXN0bXQtPmZvcl9hbGxf c2VxdWVuY2VzKQotCXsKLQkJT2JqZWN0c0luUHVibGljYXRpb25Ub09pZHMoc3RtdC0+cHVib2Jq ZWN0cywgcHN0YXRlLCAmcmVsYXRpb25zLAotCQkJCQkJCQkgICAmc2NoZW1haWRsaXN0KTsKKwkJ TGlzdAkgICAqcmVsczsKIAotCQkvKiBGT1IgVEFCTEVTIElOIFNDSEVNQSByZXF1aXJlcyBzdXBl cnVzZXIgKi8KLQkJaWYgKHNjaGVtYWlkbGlzdCAhPSBOSUwgJiYgIXN1cGVydXNlcigpKQotCQkJ ZXJlcG9ydChFUlJPUiwKLQkJCQkJZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9QUklWSUxF R0UpLAotCQkJCQllcnJtc2coIm11c3QgYmUgc3VwZXJ1c2VyIHRvIGNyZWF0ZSBGT1IgVEFCTEVT IElOIFNDSEVNQSBwdWJsaWNhdGlvbiIpKTsKLQotCQlpZiAocmVsYXRpb25zICE9IE5JTCkKLQkJ ewotCQkJTGlzdAkgICAqcmVsczsKKwkJcmVscyA9IE9wZW5UYWJsZUxpc3QocmVsYXRpb25zKTsK KwkJVHJhbnNmb3JtUHViV2hlcmVDbGF1c2VzKHJlbHMsIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAor CQkJCQkJCQkgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwogCi0JCQlyZWxzID0gT3BlblRh YmxlTGlzdChyZWxhdGlvbnMpOwotCQkJVHJhbnNmb3JtUHViV2hlcmVDbGF1c2VzKHJlbHMsIHBz dGF0ZS0+cF9zb3VyY2V0ZXh0LAotCQkJCQkJCQkJIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 KTsKKwkJQ2hlY2tQdWJSZWxhdGlvbkNvbHVtbkxpc3Qoc3RtdC0+cHVibmFtZSwgcmVscywKKwkJ CQkJCQkJICAgc2NoZW1haWRsaXN0ICE9IE5JTCwKKwkJCQkJCQkJICAgcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QpOwogCi0JCQlDaGVja1B1YlJlbGF0aW9uQ29sdW1uTGlzdChzdG10LT5wdWJu YW1lLCByZWxzLAotCQkJCQkJCQkJICAgc2NoZW1haWRsaXN0ICE9IE5JTCwKLQkJCQkJCQkJCSAg IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKLQotCQkJUHVibGljYXRpb25BZGRUYWJsZXMo cHVib2lkLCByZWxzLCB0cnVlLCBOVUxMKTsKLQkJCUNsb3NlVGFibGVMaXN0KHJlbHMpOwotCQl9 CisJCVB1YmxpY2F0aW9uQWRkVGFibGVzKHB1Ym9pZCwgcmVscywgdHJ1ZSwgTlVMTCk7CisJCUNs b3NlVGFibGVMaXN0KHJlbHMpOworCX0KIAotCQlpZiAoc2NoZW1haWRsaXN0ICE9IE5JTCkKLQkJ ewotCQkJLyoKLQkJCSAqIFNjaGVtYSBsb2NrIGlzIGhlbGQgdW50aWwgdGhlIHB1YmxpY2F0aW9u IGlzIGNyZWF0ZWQgdG8gcHJldmVudAotCQkJICogY29uY3VycmVudCBzY2hlbWEgZGVsZXRpb24u Ci0JCQkgKi8KLQkJCUxvY2tTY2hlbWFMaXN0KHNjaGVtYWlkbGlzdCk7Ci0JCQlQdWJsaWNhdGlv bkFkZFNjaGVtYXMocHVib2lkLCBzY2hlbWFpZGxpc3QsIHRydWUsIE5VTEwpOwotCQl9CisJaWYg KHNjaGVtYWlkbGlzdCAhPSBOSUwpCisJeworCQkvKgorCQkgKiBTY2hlbWEgbG9jayBpcyBoZWxk IHVudGlsIHRoZSBwdWJsaWNhdGlvbiBpcyBjcmVhdGVkIHRvIHByZXZlbnQKKwkJICogY29uY3Vy cmVudCBzY2hlbWEgZGVsZXRpb24uCisJCSAqLworCQlMb2NrU2NoZW1hTGlzdChzY2hlbWFpZGxp c3QpOworCQlQdWJsaWNhdGlvbkFkZFNjaGVtYXMocHVib2lkLCBzY2hlbWFpZGxpc3QsIHRydWUs IE5VTEwpOwogCX0KIAogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKKwlp ZiAoc3RtdC0+Zm9yX2FsbF90YWJsZXMpCisJeworCQkvKiBJbnZhbGlkYXRlIHJlbGNhY2hlIHNv IHRoYXQgcHVibGljYXRpb24gaW5mbyBpcyByZWJ1aWx0LiAqLworCQlDYWNoZUludmFsaWRhdGVS ZWxjYWNoZUFsbCgpOworCX0KKwogCUludm9rZU9iamVjdFBvc3RDcmVhdGVIb29rKFB1YmxpY2F0 aW9uUmVsYXRpb25JZCwgcHVib2lkLCAwKTsKIAogCS8qCkBAIC0xMDUwLDggKzEwNjEsOCBAQCBB bHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRp b25TdG10ICpzdG10LAogCQlMb2NrRGF0YWJhc2VPYmplY3QoUHVibGljYXRpb25SZWxhdGlvbklk LCBwdWJmb3JtLT5vaWQsIDAsCiAJCQkJCQkgICBBY2Nlc3NTaGFyZUxvY2spOwogCi0JCXJvb3Rf cmVsaWRzID0gR2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViZm9ybS0+b2lkLAotCQkJCQkJCQkJ CQkgIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CisJCXJvb3RfcmVsaWRzID0gR2V0UHVibGljYXRp b25JbmNsdWRlZFJlbGF0aW9ucyhwdWJmb3JtLT5vaWQsCisJCQkJCQkJCQkJCQkJICBQVUJMSUNB VElPTl9QQVJUX1JPT1QpOwogCiAJCWZvcmVhY2gobGMsIHJvb3RfcmVsaWRzKQogCQl7CkBAIC0x MTcwLDggKzExODEsOCBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3Rh dGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCQkgKiB0cmVlcywgbm90IGp1c3QgdGhv c2UgZXhwbGljaXRseSBtZW50aW9uZWQgaW4gdGhlIHB1YmxpY2F0aW9uLgogCQkgKi8KIAkJaWYg KHJvb3RfcmVsaWRzID09IE5JTCkKLQkJCXJlbGlkcyA9IEdldFB1YmxpY2F0aW9uUmVsYXRpb25z KHB1YmZvcm0tPm9pZCwKLQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfQUxMKTsKKwkJCXJl bGlkcyA9IEdldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMocHViZm9ybS0+b2lkLAorCQkJ CQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0FMTCk7CiAJCWVsc2UKIAkJewogCQkJLyoKQEAg LTEyNTYsOCArMTI2Nyw4IEBAIEFsdGVyUHVibGljYXRpb25UYWJsZXMoQWx0ZXJQdWJsaWNhdGlv blN0bXQgKnN0bXQsIEhlYXBUdXBsZSB0dXAsCiAJCVB1YmxpY2F0aW9uRHJvcFRhYmxlcyhwdWJp ZCwgcmVscywgZmFsc2UpOwogCWVsc2UJCQkJCQkvKiBBUF9TZXRPYmplY3RzICovCiAJewotCQlM aXN0CSAgICpvbGRyZWxpZHMgPSBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJpZCwKLQkJCQkJ CQkJCQkJCQkJUFVCTElDQVRJT05fUEFSVF9ST09UKTsKKwkJTGlzdAkgICAqb2xkcmVsaWRzID0g R2V0UHVibGljYXRpb25JbmNsdWRlZFJlbGF0aW9ucyhwdWJpZCwKKwkJCQkJCQkJCQkJCQkJCQlQ VUJMSUNBVElPTl9QQVJUX1JPT1QpOwogCQlMaXN0CSAgICpkZWxyZWxzID0gTklMOwogCQlMaXN0 Q2VsbCAgICpvbGRsYzsKIApAQCAtMTM1OCw2ICsxMzY5LDcgQEAgQWx0ZXJQdWJsaWNhdGlvblRh YmxlcyhBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1cCwKIAkJCQlvbGRy ZWwgPSBwYWxsb2Nfb2JqZWN0KFB1YmxpY2F0aW9uUmVsSW5mbyk7CiAJCQkJb2xkcmVsLT53aGVy ZUNsYXVzZSA9IE5VTEw7CiAJCQkJb2xkcmVsLT5jb2x1bW5zID0gTklMOworCQkJCW9sZHJlbC0+ ZXhjZXB0ID0gZmFsc2U7CiAJCQkJb2xkcmVsLT5yZWxhdGlvbiA9IHRhYmxlX29wZW4ob2xkcmVs aWQsCiAJCQkJCQkJCQkJCSAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKIAkJCQlkZWxyZWxz ID0gbGFwcGVuZChkZWxyZWxzLCBvbGRyZWwpOwpAQCAtMTQwOCw3ICsxNDIwLDggQEAgQWx0ZXJQ dWJsaWNhdGlvblNjaGVtYXMoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJCUxpc3RDZWxs ICAgKmxjOwogCQlMaXN0CSAgICpyZWxvaWRzOwogCi0JCXJlbG9pZHMgPSBHZXRQdWJsaWNhdGlv blJlbGF0aW9ucyhwdWJmb3JtLT5vaWQsIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CisJCXJlbG9p ZHMgPSBHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRpb25zKHB1YmZvcm0tPm9pZCwKKwkJCQkJ CQkJCQkJCSAgUFVCTElDQVRJT05fUEFSVF9ST09UKTsKIAogCQlmb3JlYWNoKGxjLCByZWxvaWRz KQogCQl7CkBAIC0xNzcxLDYgKzE3ODQsNyBAQCBPcGVuVGFibGVMaXN0KExpc3QgKnRhYmxlcykK IAkJcHViX3JlbC0+cmVsYXRpb24gPSByZWw7CiAJCXB1Yl9yZWwtPndoZXJlQ2xhdXNlID0gdC0+ d2hlcmVDbGF1c2U7CiAJCXB1Yl9yZWwtPmNvbHVtbnMgPSB0LT5jb2x1bW5zOworCQlwdWJfcmVs LT5leGNlcHQgPSB0LT5leGNlcHQ7CiAJCXJlbHMgPSBsYXBwZW5kKHJlbHMsIHB1Yl9yZWwpOwog CQlyZWxpZHMgPSBsYXBwZW5kX29pZChyZWxpZHMsIG15cmVsaWQpOwogCkBAIC0xODQzLDYgKzE4 NTcsNyBAQCBPcGVuVGFibGVMaXN0KExpc3QgKnRhYmxlcykKIAogCQkJCS8qIGNoaWxkIGluaGVy aXRzIGNvbHVtbiBsaXN0IGZyb20gcGFyZW50ICovCiAJCQkJcHViX3JlbC0+Y29sdW1ucyA9IHQt PmNvbHVtbnM7CisJCQkJcHViX3JlbC0+ZXhjZXB0ID0gdC0+ZXhjZXB0OwogCQkJCXJlbHMgPSBs YXBwZW5kKHJlbHMsIHB1Yl9yZWwpOwogCQkJCXJlbGlkcyA9IGxhcHBlbmRfb2lkKHJlbGlkcywg Y2hpbGRyZWxpZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggZjk3NmMwZTVjN2Uu LmE1MzUxZmM1OWM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtODY4OCw3ICs4Njg4 LDcgQEAgQVRFeGVjU2V0RXhwcmVzc2lvbihBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9u IHJlbCwgY29uc3QgY2hhciAqY29sTmFtZSwKIAkgKiBleHByZXNzaW9ucy4KIAkgKi8KIAlpZiAo YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVBTCAmJgotCQlHZXRSZWxh dGlvblB1YmxpY2F0aW9ucyhSZWxhdGlvbkdldFJlbGlkKHJlbCkpICE9IE5JTCkKKwkJR2V0UmVs YXRpb25QdWJsaWNhdGlvbnMoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBOVUxMLCBOVUxMKSkKIAkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCiAJCQkJIGVycm1zZygiQUxURVIgVEFCTEUgLyBTRVQgRVhQUkVTU0lPTiBpcyBub3Qgc3Vw cG9ydGVkIGZvciB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGluIHRhYmxlcyB0aGF0IGFyZSBw YXJ0IG9mIGEgcHVibGljYXRpb24iKSwKQEAgLTE4ODg0LDcgKzE4ODg0LDcgQEAgQVRQcmVwQ2hh bmdlUGVyc2lzdGVuY2UoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsIGJvb2wg dG9Mb2dnZWQpCiAJICogVU5MT0dHRUQsIGFzIFVOTE9HR0VEIHRhYmxlcyBjYW4ndCBiZSBwdWJs aXNoZWQuCiAJICovCiAJaWYgKCF0b0xvZ2dlZCAmJgotCQlHZXRSZWxhdGlvblB1YmxpY2F0aW9u cyhSZWxhdGlvbkdldFJlbGlkKHJlbCkpICE9IE5JTCkKKwkJR2V0UmVsYXRpb25QdWJsaWNhdGlv bnMoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBOVUxMLCBOVUxMKSkKIAkJZXJlcG9ydChFUlJPUiwK IAkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwK IAkJCQkgZXJybXNnKCJjYW5ub3QgY2hhbmdlIHRhYmxlIFwiJXNcIiB0byB1bmxvZ2dlZCBiZWNh dXNlIGl0IGlzIHBhcnQgb2YgYSBwdWJsaWNhdGlvbiIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCA3MTNlZTVj MTBhMi4uZDNjM2U5ZjU5YzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkK KysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtMjAzLDYgKzIwMyw3IEBAIHN0YXRp YyB2b2lkIHByb2Nlc3NDQVNiaXRzKGludCBjYXNfYml0cywgaW50IGxvY2F0aW9uLCBjb25zdCBj aGFyICpjb25zdHJUeXBlLAogc3RhdGljIFBhcnRpdGlvblN0cmF0ZWd5IHBhcnNlUGFydGl0aW9u U3RyYXRlZ3koY2hhciAqc3RyYXRlZ3ksIGludCBsb2NhdGlvbiwKIAkJCQkJCQkJCQkJCWNvcmVf eXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyB2b2lkIHByZXByb2Nlc3NfcHViX2FsbF9vYmp0 eXBlX2xpc3QoTGlzdCAqYWxsX29iamVjdHNfbGlzdCwKKwkJCQkJCQkJCQkJTGlzdCAqKnB1Ym9i amVjdHMsCiAJCQkJCQkJCQkJCWJvb2wgKmFsbF90YWJsZXMsCiAJCQkJCQkJCQkJCWJvb2wgKmFs bF9zZXF1ZW5jZXMsCiAJCQkJCQkJCQkJCWNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKTsKQEAgLTQ1 NSw2ICs0NTYsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAq cmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCQkJCVRyaWdnZXJUcmFuc2l0 aW9ucyBUcmlnZ2VyUmVmZXJlbmNpbmcKIAkJCQl2YWN1dW1fcmVsYXRpb25fbGlzdCBvcHRfdmFj dXVtX3JlbGF0aW9uX2xpc3QKIAkJCQlkcm9wX29wdGlvbl9saXN0IHB1Yl9vYmpfbGlzdCBwdWJf YWxsX29ial90eXBlX2xpc3QKKwkJCQlwdWJfZXhjZXB0X29ial9saXN0IG9wdF9wdWJfZXhjZXB0 X2NsYXVzZQogCiAldHlwZSA8cmV0Y2xhdXNlPiByZXR1cm5pbmdfY2xhdXNlCiAldHlwZSA8bm9k ZT4JcmV0dXJuaW5nX29wdGlvbgpAQCAtNTkyLDYgKzU5NCw3IEBAIHN0YXRpYyBOb2RlICptYWtl UmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpx dWVyeSk7CiAldHlwZSA8bm9kZT4JdmFyX3ZhbHVlIHpvbmVfdmFsdWUKICV0eXBlIDxyb2xlc3Bl Yz4gYXV0aF9pZGVudCBSb2xlU3BlYyBvcHRfZ3JhbnRlZF9ieQogJXR5cGUgPHB1YmxpY2F0aW9u b2JqZWN0c3BlYz4gUHVibGljYXRpb25PYmpTcGVjCisldHlwZSA8cHVibGljYXRpb25vYmplY3Rz cGVjPiBQdWJsaWNhdGlvbkV4Y2VwdE9ialNwZWMKICV0eXBlIDxwdWJsaWNhdGlvbmFsbG9iamVj dHNwZWM+IFB1YmxpY2F0aW9uQWxsT2JqU3BlYwogCiAldHlwZSA8a2V5d29yZD4gdW5yZXNlcnZl ZF9rZXl3b3JkIHR5cGVfZnVuY19uYW1lX2tleXdvcmQKQEAgLTEwNzkyLDcgKzEwNzk1LDcgQEAg QWx0ZXJPd25lclN0bXQ6IEFMVEVSIEFHR1JFR0FURSBhZ2dyZWdhdGVfd2l0aF9hcmd0eXBlcyBP V05FUiBUTyBSb2xlU3BlYwogICoKICAqIHB1Yl9hbGxfb2JqX3R5cGUgaXMgb25lIG9mOgogICoK LSAqCQlUQUJMRVMKKyAqCQlUQUJMRVMgW0VYQ0VQVCBbVEFCTEVdICggdGFibGUgWywgLi4uXSAp XQogICoJCVNFUVVFTkNFUwogICoKICAqIENSRUFURSBQVUJMSUNBVElPTiBGT1IgcHViX29iaiBb LCAuLi5dIFtXSVRIIG9wdGlvbnNdCkBAIC0xMDgxOCw3ICsxMDgyMSw4IEBAIENyZWF0ZVB1Ymxp Y2F0aW9uU3RtdDoKIAkJCQkJQ3JlYXRlUHVibGljYXRpb25TdG10ICpuID0gbWFrZU5vZGUoQ3Jl YXRlUHVibGljYXRpb25TdG10KTsKIAogCQkJCQluLT5wdWJuYW1lID0gJDM7Ci0JCQkJCXByZXBy b2Nlc3NfcHViX2FsbF9vYmp0eXBlX2xpc3QoJDUsICZuLT5mb3JfYWxsX3RhYmxlcywKKwkJCQkJ cHJlcHJvY2Vzc19wdWJfYWxsX29ianR5cGVfbGlzdCgkNSwgJm4tPnB1Ym9iamVjdHMsCisJCQkJ CQkJCQkJCQkJJm4tPmZvcl9hbGxfdGFibGVzLAogCQkJCQkJCQkJCQkJCSZuLT5mb3JfYWxsX3Nl cXVlbmNlcywKIAkJCQkJCQkJCQkJCQl5eXNjYW5uZXIpOwogCQkJCQluLT5vcHRpb25zID0gJDY7 CkBAIC0xMDg1OCw2ICsxMDg2Miw3IEBAIFB1YmxpY2F0aW9uT2JqU3BlYzoKIAkJCQkJJCQtPnB1 YnRhYmxlLT5yZWxhdGlvbiA9ICQyOwogCQkJCQkkJC0+cHVidGFibGUtPmNvbHVtbnMgPSAkMzsK IAkJCQkJJCQtPnB1YnRhYmxlLT53aGVyZUNsYXVzZSA9ICQ0OworCQkJCQkkJC0+bG9jYXRpb24g PSBAMTsKIAkJCQl9CiAJCQl8IFRBQkxFUyBJTl9QIFNDSEVNQSBDb2xJZAogCQkJCXsKQEAgLTEw OTMzLDExICsxMDkzOCwxOSBAQCBwdWJfb2JqX2xpc3Q6CVB1YmxpY2F0aW9uT2JqU3BlYwogCQkJ CQl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9CiAJOwogCitvcHRfcHViX2V4Y2VwdF9jbGF1c2U6 CisJCQlFWENFUFQgb3B0X3RhYmxlICcoJyBwdWJfZXhjZXB0X29ial9saXN0ICcpJwl7ICQkID0g JDQ7IH0KKwkJCXwgLypFTVBUWSovCQkJCQkJCQkJCXsgJCQgPSBOSUw7IH0KKwkJOworCiBQdWJs aWNhdGlvbkFsbE9ialNwZWM6Ci0JCQkJQUxMIFRBQkxFUworCQkJCUFMTCBUQUJMRVMgb3B0X3B1 Yl9leGNlcHRfY2xhdXNlCiAJCQkJCXsKIAkJCQkJCSQkID0gbWFrZU5vZGUoUHVibGljYXRpb25B bGxPYmpTcGVjKTsKIAkJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05fQUxMX1RBQkxF UzsKKwkJCQkJCSQkLT5leGNlcHRfdGFibGVzID0gJDM7CisJCQkJCQlpZigkJC0+ZXhjZXB0X3Rh YmxlcyAhPSBOVUxMKQorCQkJCQkJCXByZXByb2Nlc3NfcHVib2JqX2xpc3QoJCQtPmV4Y2VwdF90 YWJsZXMsIHl5c2Nhbm5lcik7CiAJCQkJCQkkJC0+bG9jYXRpb24gPSBAMTsKIAkJCQkJfQogCQkJ CXwgQUxMIFNFUVVFTkNFUwpAQCAtMTA5NTQsNiArMTA5NjcsMjMgQEAgcHViX2FsbF9vYmpfdHlw ZV9saXN0OglQdWJsaWNhdGlvbkFsbE9ialNwZWMKIAkJCQkJeyAkJCA9IGxhcHBlbmQoJDEsICQz KTsgfQogCTsKIAorUHVibGljYXRpb25FeGNlcHRPYmpTcGVjOgorCQkJIHJlbGF0aW9uX2V4cHIK KwkJCQl7CisJCQkJCSQkID0gbWFrZU5vZGUoUHVibGljYXRpb25PYmpTcGVjKTsKKwkJCQkJJCQt PnB1Ym9ianR5cGUgPSBQVUJMSUNBVElPTk9CSl9FWENFUFRfVEFCTEU7CisJCQkJCSQkLT5wdWJ0 YWJsZSA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uVGFibGUpOworCQkJCQkkJC0+cHVidGFibGUtPmV4 Y2VwdCA9IHRydWU7CisJCQkJCSQkLT5wdWJ0YWJsZS0+cmVsYXRpb24gPSAkMTsKKwkJCQkJJCQt PmxvY2F0aW9uID0gQDE7CisJCQkJfQorCTsKKworcHViX2V4Y2VwdF9vYmpfbGlzdDogUHVibGlj YXRpb25FeGNlcHRPYmpTcGVjCisJCQkJCXsgJCQgPSBsaXN0X21ha2UxKCQxKTsgfQorCQkJfCBw dWJfZXhjZXB0X29ial9saXN0ICcsJyBQdWJsaWNhdGlvbkV4Y2VwdE9ialNwZWMKKwkJCQkJeyAk JCA9IGxhcHBlbmQoJDEsICQzKTsgfQorCTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpA QCAtMTk3OTQsOCArMTk4MjQsOSBAQCBwYXJzZVBhcnRpdGlvblN0cmF0ZWd5KGNoYXIgKnN0cmF0 ZWd5LCBpbnQgbG9jYXRpb24sIGNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKQogICogQWxzbywgY2hl Y2tzIGlmIHRoZSBwdWJfb2JqZWN0X3R5cGUgaGFzIGJlZW4gc3BlY2lmaWVkIG1vcmUgdGhhbiBv bmNlLgogICovCiBzdGF0aWMgdm9pZAotcHJlcHJvY2Vzc19wdWJfYWxsX29ianR5cGVfbGlzdChM aXN0ICphbGxfb2JqZWN0c19saXN0LCBib29sICphbGxfdGFibGVzLAotCQkJCQkJCQlib29sICph bGxfc2VxdWVuY2VzLCBjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcikKK3ByZXByb2Nlc3NfcHViX2Fs bF9vYmp0eXBlX2xpc3QoTGlzdCAqYWxsX29iamVjdHNfbGlzdCwgTGlzdCAqKnB1Ym9iamVjdHMs CisJCQkJCQkJCWJvb2wgKmFsbF90YWJsZXMsIGJvb2wgKmFsbF9zZXF1ZW5jZXMsCisJCQkJCQkJ CWNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKQogewogCWlmICghYWxsX29iamVjdHNfbGlzdCkKIAkJ cmV0dXJuOwpAQCAtMTk4MTUsNiArMTk4NDYsNyBAQCBwcmVwcm9jZXNzX3B1Yl9hbGxfb2JqdHlw ZV9saXN0KExpc3QgKmFsbF9vYmplY3RzX2xpc3QsIGJvb2wgKmFsbF90YWJsZXMsCiAJCQkJCQlw YXJzZXJfZXJycG9zaXRpb24ob2JqLT5sb2NhdGlvbikpOwogCiAJCQkqYWxsX3RhYmxlcyA9IHRy dWU7CisJCQkqcHVib2JqZWN0cyA9IGxpc3RfY29uY2F0KCpwdWJvYmplY3RzLCBvYmotPmV4Y2Vw dF90YWJsZXMpOwogCQl9CiAJCWVsc2UgaWYgKG9iai0+cHVib2JqdHlwZSA9PSBQVUJMSUNBVElP Tl9BTExfU0VRVUVOQ0VTKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9wZ291dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQv cGdvdXRwdXQuYwppbmRleCBlMDE2ZjY0ZTBiMy4uMDU4MDI0ODJjMTAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtMjA4OCw3ICsyMDg4LDcgQEAg Z2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24p CiAJaWYgKCFlbnRyeS0+cmVwbGljYXRlX3ZhbGlkKQogCXsKIAkJT2lkCQkJc2NoZW1hSWQgPSBn ZXRfcmVsX25hbWVzcGFjZShyZWxpZCk7Ci0JCUxpc3QJICAgKnB1YmlkcyA9IEdldFJlbGF0aW9u UHVibGljYXRpb25zKHJlbGlkKTsKKwkJTGlzdAkgICAqcHViaWRzID0gTklMOwogCiAJCS8qCiAJ CSAqIFdlIGRvbid0IGFjcXVpcmUgYSBsb2NrIG9uIHRoZSBuYW1lc3BhY2Ugc3lzdGVtIHRhYmxl IGFzIHdlIGJ1aWxkCkBAIC0yMTAzLDYgKzIxMDMsOCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdP dXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJY2hhcgkJcmVsa2luZCA9IGdl dF9yZWxfcmVsa2luZChyZWxpZCk7CiAJCUxpc3QJICAgKnJlbF9wdWJsaWNhdGlvbnMgPSBOSUw7 CiAKKwkJR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMocmVsaWQsICZwdWJpZHMsIE5VTEwpOworCiAJ CS8qIFJlbG9hZCBwdWJsaWNhdGlvbnMgaWYgbmVlZGVkIGJlZm9yZSB1c2UuICovCiAJCWlmICgh cHVibGljYXRpb25zX3ZhbGlkKQogCQl7CkBAIC0yMjAyLDEwICsyMjA0LDI2IEBAIGdldF9yZWxf c3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJLyoK IAkJCSAqIElmIHRoaXMgaXMgYSBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlvbiwgcGljayB0aGUg cGFydGl0aW9uCiAJCQkgKiByb290IGFuZCBzZXQgdGhlIGFuY2VzdG9yIGxldmVsIGFjY29yZGlu Z2x5LgorCQkJICoKKwkJCSAqIElmIHRoaXMgaXMgYSBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlv biBhbmQgaXQgaGFzIGFuIEVYQ0VQVAorCQkJICogVEFCTEUgbGlzdDoKKwkJCSAqCisJCQkgKiAx LiBJZiBwdWJ2aWFyb290IGlzIHNldCBhbmQgdGhlIHJlbGF0aW9uIGlzIGEgcGFydGl0aW9uLCBj aGVjaworCQkJICogd2hldGhlciB0aGUgcGFydGl0aW9uIHJvb3QgaXMgaW5jbHVkZWQgaW4gdGhl IEVYQ0VQVCBUQUJMRQorCQkJICogbGlzdC4gSWYgc28sIGRvIG5vdCBwdWJsaXNoIHRoZSBjaGFu Z2UuCisJCQkgKgorCQkJICogMi4gSWYgcHVidmlhcm9vdCBpcyBub3Qgc2V0LCBjaGVjayB3aGV0 aGVyIHRoZSByZWxhdGlvbiBpdHNlbGYKKwkJCSAqIGlzIGluY2x1ZGVkIGluIHRoZSBFWENFUFQg VEFCTEUgbGlzdC4gSWYgc28sIGRvIG5vdCBwdWJsaXNoIHRoZQorCQkJICogY2hhbmdlLgorCQkJ ICoKKwkJCSAqIFRoaXMgaXMgYWNoaWV2ZWQgYnkga2VlcGluZyB0aGUgdmFyaWFibGUgInB1Ymxp c2giIHNldCB0bworCQkJICogZmFsc2UuIEFuZCBldmVudHVhbGx5LCBlbnRyeS0+cHViYWN0aW9u cyB3aWxsIHJlbWFpbiBhbGwgZmFsc2UKKwkJCSAqIGZvciB0aGlzIHB1YmxpY2F0aW9uLgogCQkJ ICovCiAJCQlpZiAocHViLT5hbGx0YWJsZXMpCiAJCQl7Ci0JCQkJcHVibGlzaCA9IHRydWU7CisJ CQkJTGlzdAkgICAqZXhjZXB0cHViaWRzID0gTklMOworCiAJCQkJaWYgKHB1Yi0+cHVidmlhcm9v dCAmJiBhbV9wYXJ0aXRpb24pCiAJCQkJewogCQkJCQlMaXN0CSAgICphbmNlc3RvcnMgPSBnZXRf cGFydGl0aW9uX2FuY2VzdG9ycyhyZWxpZCk7CkBAIC0yMjEzLDkgKzIyMzEsMjMgQEAgZ2V0X3Jl bF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJ CXB1Yl9yZWxpZCA9IGxsYXN0X29pZChhbmNlc3RvcnMpOwogCQkJCQlhbmNlc3Rvcl9sZXZlbCA9 IGxpc3RfbGVuZ3RoKGFuY2VzdG9ycyk7CiAJCQkJfQotCQkJfQogCi0JCQlpZiAoIXB1Ymxpc2gp CisJCQkJR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMocHViX3JlbGlkLCBOVUxMLCAmZXhjZXB0cHVi aWRzKTsKKworCQkJCWlmICghbGlzdF9tZW1iZXJfb2lkKGV4Y2VwdHB1YmlkcywgcHViLT5vaWQp KQorCQkJCQlwdWJsaXNoID0gdHJ1ZTsKKwkJCQllbHNlCisJCQkJeworCQkJCQkvKiBTYW5pdHkg Y2hlY2sgKi8KKwkJCQkJQXNzZXJ0KGVudHJ5LT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9PSBmYWxz ZSAmJgorCQkJCQkJICAgZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID09IGZhbHNlICYmCisJ CQkJCQkgICBlbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPT0gZmFsc2UgJiYKKwkJCQkJCSAg IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID09IGZhbHNlKTsKKwkJCQl9CisKKwkJCQls aXN0X2ZyZWUoZXhjZXB0cHViaWRzKTsKKwkJCX0KKwkJCWVsc2UgaWYgKCFwdWJsaXNoKQogCQkJ ewogCQkJCWJvb2wJCWFuY2VzdG9yX3B1Ymxpc2hlZCA9IGZhbHNlOwogCkBAIC0yMjU5LDYgKzIy OTEsOSBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiBy ZWxhdGlvbikKIAkJCSAqIERvbid0IHB1Ymxpc2ggY2hhbmdlcyBmb3IgcGFydGl0aW9uZWQgdGFi bGVzLCBiZWNhdXNlCiAJCQkgKiBwdWJsaXNoaW5nIHRob3NlIG9mIGl0cyBwYXJ0aXRpb25zIHN1 ZmZpY2VzLCB1bmxlc3MgcGFydGl0aW9uCiAJCQkgKiBjaGFuZ2VzIHdvbid0IGJlIHB1Ymxpc2hl ZCBkdWUgdG8gcHVidmlhcm9vdCBiZWluZyBzZXQuCisJCQkgKgorCQkJICogSWYgdGhlIHJlbGF0 aW9uIGlzIHBhcnQgb2YgRVhDRVBUIFRBQkxFIGxpc3Qgb2YgYSBwdWJsaWNhdGlvbiwKKwkJCSAq IHRoZSAncHVibGlzaCcgdmFyaWFibGUgaXMgYWxyZWFkeSBzZXQgdG8gZmFsc2UuCiAJCQkgKi8K IAkJCWlmIChwdWJsaXNoICYmCiAJCQkJKHJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9U QUJMRSB8fCBwdWItPnB1YnZpYXJvb3QpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5k ZXggNmI2MzRjOWZmZjEuLmRjMDIxZGJiNmNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hl LmMKQEAgLTU3ODgsNyArNTc4OCw5IEBAIFJlbGF0aW9uR2V0RXhjbHVzaW9uSW5mbyhSZWxhdGlv biBpbmRleFJlbGF0aW9uLAogdm9pZAogUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxh dGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogewotCUxpc3QJICAgKnB1 Ym9pZHM7CisJTGlzdAkgICAqcHVib2lkcyA9IE5JTDsKKwlMaXN0CSAgICpleGNlcHRwdWJvaWRz ID0gTklMOworCUxpc3QJICAgKmFsbHRhYmxlc3B1Ym9pZHM7CiAJTGlzdENlbGwgICAqbGM7CiAJ TWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAJT2lkCQkJc2NoZW1haWQ7CkBAIC01ODI2LDcgKzU4Mjgs NyBAQCBSZWxhdGlvbkJ1aWxkUHVibGljYXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJs aWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJcHViZGVzYy0+Z2VuY29sc192YWxpZF9mb3JfZGVsZXRl ID0gdHJ1ZTsKIAogCS8qIEZldGNoIHRoZSBwdWJsaWNhdGlvbiBtZW1iZXJzaGlwIGluZm8uICov Ci0JcHVib2lkcyA9IEdldFJlbGF0aW9uUHVibGljYXRpb25zKHJlbGlkKTsKKwlHZXRSZWxhdGlv blB1YmxpY2F0aW9ucyhyZWxpZCwgJnB1Ym9pZHMsICZleGNlcHRwdWJvaWRzKTsKIAlzY2hlbWFp ZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKIAlwdWJvaWRzID0gbGlzdF9jb25j YXRfdW5pcXVlX29pZChwdWJvaWRzLCBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQpKTsK IApAQCAtNTgzOCwxNiArNTg0MCwyNSBAQCBSZWxhdGlvbkJ1aWxkUHVibGljYXRpb25EZXNjKFJl bGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJCWZvcmVhY2gobGMs IGFuY2VzdG9ycykKIAkJewogCQkJT2lkCQkJYW5jZXN0b3IgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJ CUxpc3QJICAgKmFuY2VzdG9yX3B1Ym9pZHMgPSBOSUw7CisJCQlMaXN0CSAgICphbmNlc3Rvcl9l eGNlcHRwdWJvaWRzID0gTklMOwogCi0JCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29p ZChwdWJvaWRzLAotCQkJCQkJCQkJCQkgR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoYW5jZXN0b3Ip KTsKKwkJCUdldFJlbGF0aW9uUHVibGljYXRpb25zKGFuY2VzdG9yLCAmYW5jZXN0b3JfcHVib2lk cywKKwkJCQkJCQkJCSZhbmNlc3Rvcl9leGNlcHRwdWJvaWRzKTsKKworCQkJcHVib2lkcyA9IGxp c3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywgYW5jZXN0b3JfcHVib2lkcyk7CiAJCQlzY2hl bWFpZCA9IGdldF9yZWxfbmFtZXNwYWNlKGFuY2VzdG9yKTsKIAkJCXB1Ym9pZHMgPSBsaXN0X2Nv bmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsCiAJCQkJCQkJCQkJCSBHZXRTY2hlbWFQdWJsaWNhdGlv bnMoc2NoZW1haWQpKTsKKwkJCWV4Y2VwdHB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lk KGV4Y2VwdHB1Ym9pZHMsCisJCQkJCQkJCQkJCQkgICBhbmNlc3Rvcl9leGNlcHRwdWJvaWRzKTsK IAkJfQogCX0KLQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLCBHZXRB bGxUYWJsZXNQdWJsaWNhdGlvbnMoKSk7CiAKKwlhbGx0YWJsZXNwdWJvaWRzID0gR2V0QWxsVGFi bGVzUHVibGljYXRpb25zKCk7CisJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVi b2lkcywKKwkJCQkJCQkJCSBsaXN0X2RpZmZlcmVuY2Vfb2lkKGFsbHRhYmxlc3B1Ym9pZHMsCisJ CQkJCQkJCQkJCQkJCSBleGNlcHRwdWJvaWRzKSk7CiAJZm9yZWFjaChsYywgcHVib2lkcykKIAl7 CiAJCU9pZAkJCXB1YmlkID0gbGZpcnN0X29pZChsYyk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCAyYmViZWZk MGJhMi4uODUxYTk3MzUyZjcgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtNDY0OCw5ICs0NjQ4LDU4IEBAIGdl dFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0KQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywg aSwgaV9wdWJ2aWFyb290KSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJnZW5jb2xzX3R5 cGUgPQogCQkJKihQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJnZW5jb2xzKSk7CisJCXB1YmluZm9b aV0uZXhjZXB0X3RhYmxlcyA9IChTaW1wbGVQdHJMaXN0KQorCQl7CisJCQlOVUxMLCBOVUxMCisJ CX07CiAKIAkJLyogRGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBkdW1wIGl0ICovCiAJCXNlbGVj dER1bXBhYmxlT2JqZWN0KCYocHViaW5mb1tpXS5kb2JqKSwgZm91dCk7CisKKwkJLyoKKwkJICog R2V0IHRoZSBsaXN0IG9mIHRhYmxlcyBmb3IgcHVibGljYXRpb25zIHNwZWNpZmllZCB3aXRoIHRo ZSBFWENFUFQKKwkJICogVEFCTEUgY2xhdXNlLiBUaGlzIGlzIGludHJvZHVjZWQgaW4gUG9zdGdy ZVNRTCAxOS4KKwkJICoKKwkJICogRVhDRVBUIFRBQkxFUyBpcyBwcm9jZXNzZWQgaGVyZSBhbmQg b3V0cHV0IGRpcmVjdGx5IGJ5CisJCSAqIGR1bXBQdWJsaWNhdGlvbigpLiBUaGlzIGRpZmZlcnMg ZnJvbSB0aGUgYXBwcm9hY2ggdXNlZCBpbgorCQkgKiBkdW1wUHVibGljYXRpb25UYWJsZSgpIGFu ZCBkdW1wUHVibGljYXRpb25OYW1lc3BhY2UoKSwgc2luY2UgdGhhdAorCQkgKiBhcHByb2FjaCB3 b3VsZCByZXF1aXJlIEVYQ0VQVCBUQUJMRSBzdXBwb3J0IGZvciBBTFRFUiBQVUJMSUNBVElPTiwK KwkJICogd2hpY2ggaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJCSAqLworCQlpZiAoZm91 dC0+cmVtb3RlVmVyc2lvbiA+PSAxOTAwMDApCisJCXsKKwkJCWludAkJCW50YmxzOworCQkJUEdy ZXN1bHQgICAqcmVzX3RibHM7CisKKwkJCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkpOworCQkJYXBw ZW5kUFFFeHBCdWZmZXIocXVlcnksCisJCQkJCQkJICAiU0VMRUNUIHBycmVsaWRcbiIKKwkJCQkJ CQkgICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25fcmVsXG4iCisJCQkJCQkJICAiV0hF UkUgcHJwdWJpZCA9ICV1IGFuZCBwcmV4Y2VwdCIsCisJCQkJCQkJICBwdWJpbmZvW2ldLmRvYmou Y2F0SWQub2lkKTsKKworCQkJcmVzX3RibHMgPSBFeGVjdXRlU3FsUXVlcnkoZm91dCwgcXVlcnkt PmRhdGEsIFBHUkVTX1RVUExFU19PSyk7CisKKwkJCW50YmxzID0gUFFudHVwbGVzKHJlc190Ymxz KTsKKwkJCWlmIChudGJscyA9PSAwKQorCQkJCWNvbnRpbnVlOworCisJCQlmb3IgKGludCBqID0g MDsgaiA8IG50YmxzOyBqKyspCisJCQl7CisJCQkJT2lkCQkJcHJyZWxpZDsKKwkJCQlUYWJsZUlu Zm8gICp0YmluZm87CisKKwkJCQlwcnJlbGlkID0gYXRvb2lkKFBRZ2V0dmFsdWUocmVzX3RibHMs IGosIDApKTsKKworCQkJCXRiaW5mbyA9IGZpbmRUYWJsZUJ5T2lkKHBycmVsaWQpOworCQkJCWlm ICh0YmluZm8gPT0gTlVMTCkKKwkJCQkJY29udGludWU7CisKKwkJCQlzaW1wbGVfcHRyX2xpc3Rf YXBwZW5kKCZwdWJpbmZvW2ldLmV4Y2VwdF90YWJsZXMsIHRiaW5mbyk7CisJCQl9CisKKwkJCVBR Y2xlYXIocmVzX3RibHMpOworCQl9CiAJfQogCiBjbGVhbnVwOgpAQCAtNDY5MCw3ICs0NzM5LDI1 IEBAIGR1bXBQdWJsaWNhdGlvbihBcmNoaXZlICpmb3V0LCBjb25zdCBQdWJsaWNhdGlvbkluZm8g KnB1YmluZm8pCiAJaWYgKHB1YmluZm8tPnB1YmFsbHRhYmxlcyAmJiBwdWJpbmZvLT5wdWJhbGxz ZXF1ZW5jZXMpCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiIEZPUiBBTEwgVEFCTEVT LCBBTEwgU0VRVUVOQ0VTIik7CiAJZWxzZSBpZiAocHViaW5mby0+cHViYWxsdGFibGVzKQorCXsK KwkJaW50CQkJbl9leGNsdWRlZCA9IDA7CisKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnks ICIgRk9SIEFMTCBUQUJMRVMiKTsKKworCQkvKiBJbmNsdWRlIEVYQ0VQVCBUQUJMRSBjbGF1c2Ug aWYgdGhlcmUgYXJlIGV4Y2VwdF90YWJsZXMuICovCisJCWZvciAoU2ltcGxlUHRyTGlzdENlbGwg KmNlbGwgPSBwdWJpbmZvLT5leGNlcHRfdGFibGVzLmhlYWQ7IGNlbGw7IGNlbGwgPSBjZWxsLT5u ZXh0KQorCQl7CisJCQlUYWJsZUluZm8gICp0YmluZm8gPSAoVGFibGVJbmZvICopIGNlbGwtPnB0 cjsKKworCQkJaWYgKCsrbl9leGNsdWRlZCA9PSAxKQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KHF1ZXJ5LCAiIEVYQ0VQVCBUQUJMRSAoIik7CisJCQllbHNlCisJCQkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIocXVlcnksICIsICIpOworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnksICJPTkxZICVz IiwgZm10UXVhbGlmaWVkRHVtcGFibGUodGJpbmZvKSk7CisJCX0KKwkJaWYgKG5fZXhjbHVkZWQg PiAwKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIpIik7CisJfQogCWVsc2UgaWYg KHB1YmluZm8tPnB1YmFsbHNlcXVlbmNlcykKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnks ICIgRk9SIEFMTCBTRVFVRU5DRVMiKTsKIApAQCAtNDg3MCw2ICs0OTM3LDcgQEAgZ2V0UHVibGlj YXRpb25UYWJsZXMoQXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvIHRibGluZm9bXSwgaW50IG51bVRh YmxlcykKIAogCS8qIENvbGxlY3QgYWxsIHB1YmxpY2F0aW9uIG1lbWJlcnNoaXAgaW5mby4gKi8K IAlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNTAwMDApCisJewogCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCB0YWJsZW9pZCwgb2lkLCBwcnB1YmlkLCBw cnJlbGlkLCAiCiAJCQkJCQkJICJwZ19jYXRhbG9nLnBnX2dldF9leHByKHBycXVhbCwgcHJyZWxp ZCkgQVMgcHJyZWxxdWFsLCAiCkBAIC00ODgyLDYgKzQ5NTAsOSBAQCBnZXRQdWJsaWNhdGlvblRh YmxlcyhBcmNoaXZlICpmb3V0LCBUYWJsZUluZm8gdGJsaW5mb1tdLCBpbnQgbnVtVGFibGVzKQog CQkJCQkJCSAiICAgICAgV0hFUkUgYXR0cmVsaWQgPSBwci5wcnJlbGlkIEFORCBhdHRudW0gPSBw cmF0dHJzW3NdKVxuIgogCQkJCQkJCSAiICBFTFNFIE5VTEwgRU5EKSBwcmF0dHJzICIKIAkJCQkJ CQkgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHIiKTsKKwkJaWYgKGZvdXQt PnJlbW90ZVZlcnNpb24gPj0gMTkwMDAwKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnks ICIgV0hFUkUgTk9UIHByLnByZXhjZXB0Iik7CisJfQogCWVsc2UKIAkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgdGFibGVvaWQsIG9pZCwgcHJwdWJpZCwgcHJy ZWxpZCwgIgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCBiL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggNGM0YjE0ZTVmYzcuLmQxNDFlYjY2ZDE3IDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmgKQEAgLTY3Niw2ICs2NzYsNyBAQCB0eXBlZGVmIHN0cnVjdCBfUHVibGljYXRpb25JbmZv CiAJYm9vbAkJcHVidHJ1bmNhdGU7CiAJYm9vbAkJcHVidmlhcm9vdDsKIAlQdWJsaXNoR2VuY29s c1R5cGUgcHViZ2VuY29sc190eXBlOworCVNpbXBsZVB0ckxpc3QgZXhjZXB0X3RhYmxlczsKIH0g UHVibGljYXRpb25JbmZvOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAy X3BnX2R1bXAucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbAppbmRleCBhOGRj YzJiNWM3NS4uNTRlYWU1NzdjOTEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9w Z19kdW1wLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC0zMTcw LDYgKzMxNzAsMzYgQEAgbXkgJXRlc3RzID0gKAogCQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2Vj dGlvbl9wb3N0X2RhdGEgPT4gMSwgfSwKIAl9LAogCisJJ0NSRUFURSBQVUJMSUNBVElPTiBwdWI4 JyA9PiB7CisJCWNyZWF0ZV9vcmRlciA9PiA1MCwKKwkJY3JlYXRlX3NxbCA9PgorCQkgICdDUkVB VEUgUFVCTElDQVRJT04gcHViOCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgKGR1bXBfdGVzdC50ZXN0 X3RhYmxlKTsnLAorCQlyZWdleHAgPT4gcXIvXgorCQkJXFFDUkVBVEUgUFVCTElDQVRJT04gcHVi OCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKE9OTFkgZHVtcF90ZXN0LnRlc3RfdGFibGUp IFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwgdHJ1bmNhdGUnKTtcRQor CQkJL3htLAorCQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwg fSwKKwl9LAorCisJJ0NSRUFURSBQVUJMSUNBVElPTiBwdWI5JyA9PiB7CisJCWNyZWF0ZV9vcmRl ciA9PiA1MCwKKwkJY3JlYXRlX3NxbCA9PgorCQkgICdDUkVBVEUgUFVCTElDQVRJT04gcHViOSBG T1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKGR1bXBfdGVzdC50ZXN0X3RhYmxlLCBkdW1wX3Rl c3QudGVzdF9zZWNvbmRfdGFibGUpOycsCisJCXJlZ2V4cCA9PiBxci9eCisJCQlcUUNSRUFURSBQ VUJMSUNBVElPTiBwdWI5IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoT05MWSBkdW1wX3Rl c3QudGVzdF90YWJsZSwgT05MWSBkdW1wX3Rlc3QudGVzdF9zZWNvbmRfdGFibGUpIFdJVEggKHB1 Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwgdHJ1bmNhdGUnKTtcRQorCQkJL3htLAor CQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwgfSwKKwl9LAor CisJJ0NSRUFURSBQVUJMSUNBVElPTiBwdWIxMCcgPT4geworCQljcmVhdGVfb3JkZXIgPT4gOTIs CisJCWNyZWF0ZV9zcWwgPT4KKwkJICAnQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEwIEZPUiBBTEwg VEFCTEVTIEVYQ0VQVCBUQUJMRSAoZHVtcF90ZXN0LnRlc3RfaW5oZXJpdGFuY2VfcGFyZW50KTsn LAorCQlyZWdleHAgPT4gcXIvXgorCQkJXFFDUkVBVEUgUFVCTElDQVRJT04gcHViMTAgRk9SIEFM TCBUQUJMRVMgRVhDRVBUIFRBQkxFIChPTkxZIGR1bXBfdGVzdC50ZXN0X2luaGVyaXRhbmNlX3Bh cmVudCwgT05MWSBkdW1wX3Rlc3QudGVzdF9pbmhlcml0YW5jZV9jaGlsZCkgV0lUSCAocHVibGlz aCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlLCB0cnVuY2F0ZScpO1xFCisJCQkveG0sCisJCWxp a2UgPT4geyAlZnVsbF9ydW5zLCBzZWN0aW9uX3Bvc3RfZGF0YSA9PiAxLCB9LAorCX0sCisKIAkn Q1JFQVRFIFNVQlNDUklQVElPTiBzdWIxJyA9PiB7CiAJCWNyZWF0ZV9vcmRlciA9PiA1MCwKIAkJ Y3JlYXRlX3NxbCA9PiAnQ1JFQVRFIFNVQlNDUklQVElPTiBzdWIxCmRpZmYgLS1naXQgYS9zcmMv YmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IDM1ODRj NGUxNDI4Li4xYmZlYzBiZDNlZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMK KysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTMwNzMsMTcgKzMwNzMsMzQgQEAgZGVz Y3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQkJCQkJICAi ICAgICAgICAgIFdIRVJFIGF0dHJlbGlkID0gcHIucHJyZWxpZCBBTkQgYXR0bnVtID0gcHJhdHRy c1tzXSlcbiIKIAkJCQkJCQkJICAiICAgICAgICBFTFNFIE5VTEwgRU5EKSAiCiAJCQkJCQkJCSAg IkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbiBwXG4iCi0JCQkJCQkJCSAgIiAgICAgSk9J TiBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCBwciBPTiBwLm9pZCA9IHByLnBycHViaWRc biIKLQkJCQkJCQkJICAiICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgYyBPTiBjLm9pZCA9 IHByLnBycmVsaWRcbiIKLQkJCQkJCQkJICAiV0hFUkUgcHIucHJyZWxpZCA9ICclcydcbiIKKwkJ CQkJCQkJICAiCQlKT0lOIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25fcmVsIHByIE9OIHAub2lk ID0gcHIucHJwdWJpZFxuIgorCQkJCQkJCQkgICIJCUpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBj IE9OIGMub2lkID0gcHIucHJyZWxpZFxuIgorCQkJCQkJCQkgICJXSEVSRSBwci5wcnJlbGlkID0g JyVzJ1xuIiwKKwkJCQkJCQkJICBvaWQsIG9pZCwgb2lkKTsKKworCQkJCWlmIChwc2V0LnN2ZXJz aW9uID49IDE5MDAwMCkKKwkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwgIiBBTkQgTk9U IHByLnByZXhjZXB0XG4iKTsKKworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJ CSAgIlVOSU9OXG4iCiAJCQkJCQkJCSAgIlNFTEVDVCBwdWJuYW1lXG4iCi0JCQkJCQkJCSAgIiAg ICAgLCBOVUxMXG4iCi0JCQkJCQkJCSAgIiAgICAgLCBOVUxMXG4iCisJCQkJCQkJCSAgIgkJLCBO VUxMXG4iCisJCQkJCQkJCSAgIgkJLCBOVUxMXG4iCiAJCQkJCQkJCSAgIkZST00gcGdfY2F0YWxv Zy5wZ19wdWJsaWNhdGlvbiBwXG4iCi0JCQkJCQkJCSAgIldIRVJFIHAucHViYWxsdGFibGVzIEFO RCBwZ19jYXRhbG9nLnBnX3JlbGF0aW9uX2lzX3B1Ymxpc2hhYmxlKCclcycpXG4iCi0JCQkJCQkJ CSAgIk9SREVSIEJZIDE7IiwKLQkJCQkJCQkJICBvaWQsIG9pZCwgb2lkLCBvaWQpOworCQkJCQkJ CQkgICJXSEVSRSBwLnB1YmFsbHRhYmxlcyBBTkQgcGdfY2F0YWxvZy5wZ19yZWxhdGlvbl9pc19w dWJsaXNoYWJsZSgnJXMnKVxuIiwKKwkJCQkJCQkJICBvaWQpOworCisJCQkJaWYgKHBzZXQuc3Zl cnNpb24gPj0gMTkwMDAwKQorCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJCQkJ ICAiICAgICBBTkQgTk9UIEVYSVNUUyAoXG4iCisJCQkJCQkJCQkgICIJCVNFTEVDVCAxXG4iCisJ CQkJCQkJCQkgICIJCUZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHJcbiIKKwkJ CQkJCQkJCSAgIgkJSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIHBjXG4iCisJCQkJCQkJCQkgICIJ CU9OIHByLnBycmVsaWQgPSBwYy5vaWRcbiIKKwkJCQkJCQkJCSAgIgkJV0hFUkUgcHIucHJyZWxp ZCA9ICclcycgQU5EIHByLnBycHViaWQgPSBwLm9pZClcbiIsCisJCQkJCQkJCQkgIG9pZCk7CisK KwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiT1JERVIgQlkgMTsiKTsKIAkJCX0KIAkJ CWVsc2UKIAkJCXsKQEAgLTMxMzQsNiArMzE1MSwzNSBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWls cyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJUFFjbGVhcihyZXN1bHQpOwogCQl9CiAKKwkJ LyogUHJpbnQgcHVibGljYXRpb25zIHRoYXQgdGhlIHRhYmxlIGlzIGV4cGxpY2l0bHkgZXhjbHVk ZWQgZnJvbSAqLworCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxOTAwMDApCisJCXsKKwkJCXByaW50 ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkJICAiU0VMRUNUIHB1Ym5hbWVcbiIKKwkJCQkJCQkg ICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24gcFxuIgorCQkJCQkJCSAgIkpPSU4gcGdf Y2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHIgT04gcC5vaWQgPSBwci5wcnB1YmlkXG4iCisJ CQkJCQkJICAiV0hFUkUgcHIucHJyZWxpZCA9ICclcydcbiBBTkQgcHIucHJleGNlcHRcbiIKKwkJ CQkJCQkgICJPUkRFUiBCWSAxOyIsIG9pZCk7CisKKwkJCXJlc3VsdCA9IFBTUUxleGVjKGJ1Zi5k YXRhKTsKKwkJCWlmICghcmVzdWx0KQorCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJZWxzZQor CQkJCXR1cGxlcyA9IFBRbnR1cGxlcyhyZXN1bHQpOworCisJCQlpZiAodHVwbGVzID4gMCkKKwkJ CQlwcmludFRhYmxlQWRkRm9vdGVyKCZjb250LCBfKCJFeGNlcHQgUHVibGljYXRpb25zOiIpKTsK KworCQkJLyogTWlnaHQgYmUgYW4gZW1wdHkgc2V0IC0gdGhhdCdzIG9rICovCisJCQlmb3IgKGkg PSAwOyBpIDwgdHVwbGVzOyBpKyspCisJCQl7CisJCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1Ziwg IiAgICBcIiVzXCIiLCBQUWdldHZhbHVlKHJlc3VsdCwgaSwgMCkpOworCisJCQkJcHJpbnRUYWJs ZUFkZEZvb3RlcigmY29udCwgYnVmLmRhdGEpOworCQkJfQorCQkJUFFjbGVhcihyZXN1bHQpOwor CQl9CisKIAkJLyoKIAkJICogSWYgdmVyYm9zZSwgcHJpbnQgTk9UIE5VTEwgY29uc3RyYWludHMu CiAJCSAqLwpAQCAtNjc1Myw4ICs2Nzk5LDEyIEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0 IGNoYXIgKnBhdHRlcm4pCiAJCQkJCQkJICAiICAgICBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9u X3JlbCBwclxuIgogCQkJCQkJCSAgIldIRVJFIGMucmVsbmFtZXNwYWNlID0gbi5vaWRcbiIKIAkJ CQkJCQkgICIgIEFORCBjLm9pZCA9IHByLnBycmVsaWRcbiIKLQkJCQkJCQkgICIgIEFORCBwci5w cnB1YmlkID0gJyVzJ1xuIgotCQkJCQkJCSAgIk9SREVSIEJZIDEsMiIsIHB1YmlkKTsKKwkJCQkJ CQkgICIgIEFORCBwci5wcnB1YmlkID0gJyVzJ1xuIiwgcHViaWQpOworCisJCQlpZiAocHNldC5z dmVyc2lvbiA+PSAxOTAwMDApCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIiAgQU5EIE5P VCBwci5wcmV4Y2VwdFxuIik7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICJPUkRFUiBC WSAxLDIiKTsKIAkJCWlmICghYWRkRm9vdGVyVG9QdWJsaWNhdGlvbkRlc2MoJmJ1ZiwgXygiVGFi bGVzOiIpLCBmYWxzZSwgJmNvbnQpKQogCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCkBAIC02Nzcy LDYgKzY4MjIsMjMgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikK IAkJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQl9CiAJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAo cHNldC5zdmVyc2lvbiA+PSAxOTAwMDApCisJCQl7CisJCQkJLyogR2V0IHRoZSBleGNsdWRlZCB0 YWJsZXMgZm9yIHRoZSBzcGVjaWZpZWQgcHVibGljYXRpb24gKi8KKwkJCQlwcmludGZQUUV4cEJ1 ZmZlcigmYnVmLAorCQkJCQkJCQkgICJTRUxFQ1QgY29uY2F0KGMucmVsbmFtZXNwYWNlOjpyZWdu YW1lc3BhY2UsICcuJywgYy5yZWxuYW1lKVxuIgorCQkJCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cu cGdfY2xhc3MgY1xuIgorCQkJCQkJCQkgICIgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19wdWJsaWNh dGlvbl9yZWwgcHIgT04gYy5vaWQgPSBwci5wcnJlbGlkXG4iCisJCQkJCQkJCSAgIldIRVJFIHBy LnBycHViaWQgPSAnJXMnXG4iCisJCQkJCQkJCSAgIiAgQU5EIHByLnByZXhjZXB0XG4iCisJCQkJ CQkJCSAgIk9SREVSIEJZIDEiLCBwdWJpZCk7CisJCQkJaWYgKCFhZGRGb290ZXJUb1B1YmxpY2F0 aW9uRGVzYygmYnVmLCBfKCJFeGNlcHQgdGFibGVzOiIpLAorCQkJCQkJCQkJCQkJdHJ1ZSwgJmNv bnQpKQorCQkJCQlnb3RvIGVycm9yX3JldHVybjsKKwkJCX0KKwkJfQogCiAJCXByaW50VGFibGUo JmNvbnQsIHBzZXQucXVlcnlGb3V0LCBmYWxzZSwgcHNldC5sb2dmaWxlKTsKIAkJcHJpbnRUYWJs ZUNsZWFudXAoJmNvbnQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5p bi5jIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCmluZGV4IDhiOTFiYzAwMDYyLi4z OTQwNGVhMGY2OSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCisr KyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYwpAQCAtMzY2OSw3ICszNjY5LDE3IEBA IG1hdGNoX3ByZXZpb3VzX3dvcmRzKGludCBwYXR0ZXJuX2lkLAogCWVsc2UgaWYgKE1hdGNoZXMo IkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiRk9SIiwgIkFMTCIpKQogCQlDT01Q TEVURV9XSVRIKCJUQUJMRVMiLCAiU0VRVUVOQ0VTIik7CiAJZWxzZSBpZiAoTWF0Y2hlcygiQ1JF QVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiQUxMIiwgIlRBQkxFUyIpKQot CQlDT01QTEVURV9XSVRIKCJXSVRIICgiKTsKKwkJQ09NUExFVEVfV0lUSCgiRVhDRVBUIFRBQkxF ICgiLCAiV0lUSCAoIik7CisJZWxzZSBpZiAoTWF0Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9O IiwgTWF0Y2hBbnksICJGT1IiLCAiQUxMIiwgIlRBQkxFUyIsICJFWENFUFQiKSkKKwkJQ09NUExF VEVfV0lUSCgiVEFCTEUgKCIpOworCWVsc2UgaWYgKE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNB VElPTiIsIE1hdGNoQW55LCAiRk9SIiwgIkFMTCIsICJUQUJMRVMiLCAiRVhDRVBUIiwgIlRBQkxF IikpCisJCUNPTVBMRVRFX1dJVEgoIigiKTsKKwllbHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAi UFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIsICJBTEwiLCAiVEFCTEVTIiwgIkVYQ0VQVCIs ICJUQUJMRSIsICIoIikpCisJCUNPTVBMRVRFX1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zvcl9s aXN0X29mX3RhYmxlcyk7CisJZWxzZSBpZiAoTWF0Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9O IiwgTWF0Y2hBbnksICJGT1IiLCAiQUxMIiwgIlRBQkxFUyIsICJFWENFUFQiLCAiVEFCTEUiLCAi KCIsIE1hdGNoQW55TikgJiYgZW5kc193aXRoKHByZXZfd2QsICcsJykpCisJCUNPTVBMRVRFX1dJ VEhfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zvcl9saXN0X29mX3RhYmxlcyk7CisJZWxzZSBpZiAoTWF0 Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiQUxMIiwgIlRB QkxFUyIsICJFWENFUFQiLCAiVEFCTEUiLCAiKCIsIE1hdGNoQW55TikgJiYgIWVuZHNfd2l0aChw cmV2X3dkLCAnLCcpKQorCQlDT01QTEVURV9XSVRIKCIpIik7CiAJZWxzZSBpZiAoTWF0Y2hlcygi Q1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiVEFCTEVTIikpCiAJCUNP TVBMRVRFX1dJVEgoIklOIFNDSEVNQSIpOwogCWVsc2UgaWYgKE1hdGNoZXMoIkNSRUFURSIsICJQ VUJMSUNBVElPTiIsIE1hdGNoQW55LCAiRk9SIiwgIlRBQkxFIiwgTWF0Y2hBbnkpICYmICFlbmRz X3dpdGgocHJldl93ZCwgJywnKSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHVibGljYXRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAppbmRl eCAzNjhiZWNjYTg5OS4uNTEyNmM5OTZmZjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHVibGljYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmgKQEAgLTE0NiwxNCArMTQ2LDE2IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uUmVs SW5mbwogCVJlbGF0aW9uCXJlbGF0aW9uOwogCU5vZGUJICAgKndoZXJlQ2xhdXNlOwogCUxpc3QJ ICAgKmNvbHVtbnM7CisJYm9vbAkJZXhjZXB0OwogfSBQdWJsaWNhdGlvblJlbEluZm87CiAKIGV4 dGVybiBQdWJsaWNhdGlvbiAqR2V0UHVibGljYXRpb24oT2lkIHB1YmlkKTsKIGV4dGVybiBQdWJs aWNhdGlvbiAqR2V0UHVibGljYXRpb25CeU5hbWUoY29uc3QgY2hhciAqcHVibmFtZSwgYm9vbCBt aXNzaW5nX29rKTsKLWV4dGVybiBMaXN0ICpHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhPaWQgcmVs aWQpOworZXh0ZXJuIGJvb2wgR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoT2lkIHJlbGlkLCBMaXN0 ICoqcHViaWRzLCBMaXN0ICoqZXhjZXB0X3B1Ymlkcyk7CiAKIC8qLS0tLS0tLS0tCi0gKiBFeHBl Y3RlZCB2YWx1ZXMgZm9yIHB1Yl9wYXJ0b3B0IHBhcmFtZXRlciBvZiBHZXRQdWJsaWNhdGlvblJl bGF0aW9ucygpLAorICogRXhwZWN0ZWQgdmFsdWVzIGZvciBwdWJfcGFydG9wdCBwYXJhbWV0ZXIg b2YKKyAqIEdldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMoKSwgYW5kIEdldEFsbFB1Ymxp Y2F0aW9uRXhjbHVkZWRUYWJsZXMoKSwKICAqIHdoaWNoIGFsbG93cyBjYWxsZXJzIHRvIHNwZWNp Znkgd2hpY2ggcGFydGl0aW9ucyBvZiBwYXJ0aXRpb25lZCB0YWJsZXMKICAqIG1lbnRpb25lZCBp biB0aGUgcHVibGljYXRpb24gdGhleSBleHBlY3QgdG8gc2VlLgogICoKQEAgLTE2OCw5ICsxNzAs MTIgQEAgdHlwZWRlZiBlbnVtIFB1YmxpY2F0aW9uUGFydE9wdAogCVBVQkxJQ0FUSU9OX1BBUlRf QUxMLAogfSBQdWJsaWNhdGlvblBhcnRPcHQ7CiAKLWV4dGVybiBMaXN0ICpHZXRQdWJsaWNhdGlv blJlbGF0aW9ucyhPaWQgcHViaWQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCk7Citl eHRlcm4gTGlzdCAqR2V0UHVibGljYXRpb25JbmNsdWRlZFJlbGF0aW9ucyhPaWQgcHViaWQsCisJ CQkJCQkJCQkJCSBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpOworZXh0ZXJuIExpc3Qg KkdldEFsbFB1YmxpY2F0aW9uRXhjbHVkZWRUYWJsZXMoT2lkIHB1YmlkLAorCQkJCQkJCQkJCQkg UHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KTsKIGV4dGVybiBMaXN0ICpHZXRBbGxUYWJs ZXNQdWJsaWNhdGlvbnModm9pZCk7Ci1leHRlcm4gTGlzdCAqR2V0QWxsUHVibGljYXRpb25SZWxh dGlvbnMoY2hhciByZWxraW5kLCBib29sIHB1YnZpYXJvb3QpOworZXh0ZXJuIExpc3QgKkdldEFs bFB1YmxpY2F0aW9uUmVsYXRpb25zKFB1YmxpY2F0aW9uICpwdWIsIGNoYXIgcmVsa2luZCk7CiBl eHRlcm4gTGlzdCAqR2V0UHVibGljYXRpb25TY2hlbWFzKE9pZCBwdWJpZCk7CiBleHRlcm4gTGlz dCAqR2V0U2NoZW1hUHVibGljYXRpb25zKE9pZCBzY2hlbWFpZCk7CiBleHRlcm4gTGlzdCAqR2V0 U2NoZW1hUHVibGljYXRpb25SZWxhdGlvbnMoT2lkIHNjaGVtYWlkLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHVibGljYXRpb25fcmVsLmgKaW5kZXggM2E4NzkwZTg0ODIuLmUzY2NiYTVlYzc5IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oCisrKyBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmgKQEAgLTMxLDYgKzMxLDcg QEAgQ0FUQUxPRyhwZ19wdWJsaWNhdGlvbl9yZWwsNjEwNixQdWJsaWNhdGlvblJlbFJlbGF0aW9u SWQpCiAJT2lkCQkJb2lkOwkJCS8qIG9pZCAqLwogCU9pZAkJCXBycHViaWQgQktJX0xPT0tVUChw Z19wdWJsaWNhdGlvbik7IC8qIE9pZCBvZiB0aGUgcHVibGljYXRpb24gKi8KIAlPaWQJCQlwcnJl bGlkIEJLSV9MT09LVVAocGdfY2xhc3MpOwkvKiBPaWQgb2YgdGhlIHJlbGF0aW9uICovCisJYm9v bAkJcHJleGNlcHQgQktJX0RFRkFVTFQoZik7CS8qIGV4Y2x1ZGUgdGhlIHJlbGF0aW9uICovCiAK ICNpZmRlZglDQVRBTE9HX1ZBUkxFTgkJCS8qIHZhcmlhYmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQg aGVyZSAqLwogCXBnX25vZGVfdHJlZSBwcnF1YWw7CQkvKiBxdWFsaWZpY2F0aW9ucyAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDY0NmQ2Y2VkNzYzLi41MjgyNDI1YjRkZCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L3BhcnNlbm9kZXMuaApAQCAtNDMwMCw2ICs0MzAwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVibGlj YXRpb25UYWJsZQogCVJhbmdlVmFyICAgKnJlbGF0aW9uOwkJLyogcmVsYXRpb24gdG8gYmUgcHVi bGlzaGVkICovCiAJTm9kZQkgICAqd2hlcmVDbGF1c2U7CS8qIHF1YWxpZmljYXRpb25zICovCiAJ TGlzdAkgICAqY29sdW1uczsJCS8qIExpc3Qgb2YgY29sdW1ucyBpbiBhIHB1YmxpY2F0aW9uIHRh YmxlICovCisJYm9vbAkJZXhjZXB0OwkJCS8qIGV4Y2x1ZGUgdGhlIHJlbGF0aW9uICovCiB9IFB1 YmxpY2F0aW9uVGFibGU7CiAKIC8qCkBAIC00MzA4LDYgKzQzMDksNyBAQCB0eXBlZGVmIHN0cnVj dCBQdWJsaWNhdGlvblRhYmxlCiB0eXBlZGVmIGVudW0gUHVibGljYXRpb25PYmpTcGVjVHlwZQog ewogCVBVQkxJQ0FUSU9OT0JKX1RBQkxFLAkJLyogQSB0YWJsZSAqLworCVBVQkxJQ0FUSU9OT0JK X0VYQ0VQVF9UQUJMRSwJLyogQSB0YWJsZSB0byBiZSBleGNsdWRlZCAqLwogCVBVQkxJQ0FUSU9O T0JKX1RBQkxFU19JTl9TQ0hFTUEsCS8qIEFsbCB0YWJsZXMgaW4gc2NoZW1hICovCiAJUFVCTElD QVRJT05PQkpfVEFCTEVTX0lOX0NVUl9TQ0hFTUEsCS8qIEFsbCB0YWJsZXMgaW4gZmlyc3QgZWxl bWVudCBvZgogCQkJCQkJCQkJCQkgKiBzZWFyY2hfcGF0aCAqLwpAQCAtNDMzNiw2ICs0MzM4LDcg QEAgdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25BbGxPYmpTcGVjCiB7CiAJTm9kZVRhZwkJdHlw ZTsKIAlQdWJsaWNhdGlvbkFsbE9ialR5cGUgcHVib2JqdHlwZTsJLyogdHlwZSBvZiB0aGlzIHB1 YmxpY2F0aW9uIG9iamVjdCAqLworCUxpc3QJICAgKmV4Y2VwdF90YWJsZXM7CS8qIExpc3Qgb2Yg dGFibGVzIHRvIGJlIGV4Y2x1ZGVkICovCiAJUGFyc2VMb2MJbG9jYXRpb247CQkvKiB0b2tlbiBs b2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLwogfSBQdWJsaWNhdGlvbkFsbE9ialNwZWM7CiAK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggN2ZiNDlhYWYy OWIuLmIyMTE1ZWRiM2MzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1 YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9u Lm91dApAQCAtMjEzLDMzICsyMTMsMTA0IEBAIE5vdC1udWxsIGNvbnN0cmFpbnRzOgogIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCBmICAgICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgbm9uZSAgICAgICAgICAgICAgfCBm CiAoMSByb3cpCiAKLURST1AgVEFCTEUgdGVzdHB1Yl90YmwyOwotRFJPUCBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcmFsbHRhYmxlcywgdGVzdHB1Yl9mb3J0YWJsZSwgdGVzdHB1Yl9mb3JzY2hlbWEs IHRlc3RwdWJfZm9yX3RibF9zY2hlbWE7Ci1DUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmwzIChhIGlu dCk7Ci1DUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmwzYSAoYiB0ZXh0KSBJTkhFUklUUyAodGVzdHB1 Yl90YmwzKTsKIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKLUNSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90YmwzOwotQ1JFQVRFIFBVQkxJQ0FU SU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsMzsKKy0tIEV4Y2x1ZGUgdGFi bGVzIHVzaW5nIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGFibGVsaXN0KQorQ1JFQVRF IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlIEZPUiBBTEwgVEFC TEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90YmwxLCB0ZXN0cHViX3RibDIpOworXGRScCsgdGVz dHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRh YmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBzZXF1ZW5j ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBHZW5lcmF0ZWQg Y29sdW1ucyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZgorRXhjZXB0IHRhYmxl czoKKyAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKKyAgICAicHVibGljLnRlc3RwdWJfdGJsMiIK KworLS0gRXhjbHVkZSB0YWJsZXMgdXNpbmcgRk9SIEFMTCBUQUJMRVMgRVhDRVBUICh0YWJsZWxp c3QpCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUx IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCAodGVzdHB1Yl90YmwxKTsKK1xkUnArIHRlc3RwdWJfZm9y YWxsdGFibGVzX2V4Y2VwdHRhYmxlMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTEKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBjb2x1bW5z IHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IHQgICAgICAgICAgfCBmICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgbm9uZSAgICAgICAgICAgICAgfCBmCitFeGNlcHQgdGFibGVzOgorICAg ICJwdWJsaWMudGVzdHB1Yl90YmwxIgorCistLSBDaGVjayB0aGF0IHRoZSB0YWJsZSBkZXNjcmlw dGlvbiBzaG93cyB0aGUgcHVibGljYXRpb24gbGlzdCB0aGUgdGFibGUgaXMKKy0tIGV4Y2x1ZGVk IGZyb20KK1xkIHRlc3RwdWJfdGJsMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxl ICJwdWJsaWMudGVzdHB1Yl90YmwxIgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBO dWxsYWJsZSB8ICAgICAgICAgICAgICAgICBEZWZhdWx0ICAgICAgICAgICAgICAgICAgCistLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBpZCAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwg bm90IG51bGwgfCBuZXh0dmFsKCd0ZXN0cHViX3RibDFfaWRfc2VxJzo6cmVnY2xhc3MpCisgZGF0 YSAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitJbmRleGVzOgorICAgICJ0 ZXN0cHViX3RibDFfcGtleSIgUFJJTUFSWSBLRVksIGJ0cmVlIChpZCkKK1B1YmxpY2F0aW9uczoK KyAgICAidGVzdHB1Yl9mb3JhbGx0YWJsZXMiCitFeGNlcHQgUHVibGljYXRpb25zOgorICAgICJ0 ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZSIKKyAgICAidGVzdHB1Yl9mb3JhbGx0YWJs ZXNfZXhjZXB0dGFibGUxIgorCiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworRFJPUCBUQUJM RSB0ZXN0cHViX3RibDI7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzLCB0 ZXN0cHViX2ZvcnRhYmxlLCB0ZXN0cHViX2ZvcnNjaGVtYSwgdGVzdHB1Yl9mb3JfdGJsX3NjaGVt YSwgdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUsIHRlc3RwdWJfZm9yYWxsdGFibGVz X2V4Y2VwdHRhYmxlMTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9wYXJlbnQgKGEgaW50KTsK K0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9jaGlsZCAoYiB0ZXh0KSBJTkhFUklUUyAodGVzdHB1 Yl90YmxfcGFyZW50KTsKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90YmxfcGFyZW50OwogXGRS cCsgdGVzdHB1YjMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCiAgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEFsbCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBHZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSByb290IAogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KICByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAg ICAgICAgICAgIHwgZgogVGFibGVzOgotICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgotICAgICJw dWJsaWMudGVzdHB1Yl90YmwzYSIKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX2NoaWxkIgorICAg ICJwdWJsaWMudGVzdHB1Yl90YmxfcGFyZW50IgogCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 YjQgRk9SIFRBQkxFIE9OTFkgdGVzdHB1Yl90YmxfcGFyZW50OwogXGRScCsgdGVzdHB1YjQKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWI0CiAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEFsbCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBHZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSByb290IAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KICByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZgog VGFibGVzOgotICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgorICAgICJwdWJsaWMudGVzdHB1Yl90 YmxfcGFyZW50IgogCi1EUk9QIFRBQkxFIHRlc3RwdWJfdGJsMywgdGVzdHB1Yl90YmwzYTsKLURS T1AgUFVCTElDQVRJT04gdGVzdHB1YjMsIHRlc3RwdWI0OworLS0gRXhjbHVkZSBwYXJlbnQgdGFi bGUsIG9taXR0aW5nIGJvdGggb2YgJ09OTFknIGFuZCAnKicKK0NSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViNSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHRlc3RwdWJfdGJsX3BhcmVudCk7 CitcZFJwKyB0ZXN0cHViNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBjb2x1bW5zIHwgVmlhIHJvb3QgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCBmICAg ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgbm9u ZSAgICAgICAgICAgICAgfCBmCitFeGNlcHQgdGFibGVzOgorICAgICJwdWJsaWMudGVzdHB1Yl90 YmxfY2hpbGQiCisgICAgInB1YmxpYy50ZXN0cHViX3RibF9wYXJlbnQiCisKKy0tIEVYQ0VQVCB3 aXRoICcqJzogZXhjbHVkZSB0YWJsZSBhbmQgYWxsIGRlc2NlbmRhbnRzCitDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1YjYgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0ZXN0cHViX3RibF9w YXJlbnQgKik7CitcZFJwKyB0ZXN0cHViNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjYKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBjb2x1bW5zIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAg ICAgfCBmICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgbm9uZSAgICAgICAgICAgICAgfCBmCitFeGNlcHQgdGFibGVzOgorICAgICJwdWJsaWMu dGVzdHB1Yl90YmxfY2hpbGQiCisgICAgInB1YmxpYy50ZXN0cHViX3RibF9wYXJlbnQiCisKKy0t IEVYQ0VQVCB3aXRoIE9OTFk6IGV4Y2x1ZGUgdGFibGUgYnV0IG5vdCBkZXNjZW5kYW50cworQ1JF QVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI3IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoT05M WSB0ZXN0cHViX3RibF9wYXJlbnQpOworXGRScCsgdGVzdHB1YjcKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI3 CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBzZXF1ZW5jZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBHZW5lcmF0ZWQgY29s dW1ucyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZgorRXhjZXB0IHRhYmxlczoK KyAgICAicHVibGljLnRlc3RwdWJfdGJsX3BhcmVudCIKKworUkVTRVQgY2xpZW50X21pbl9tZXNz YWdlczsKK0RST1AgVEFCTEUgdGVzdHB1Yl90YmxfcGFyZW50LCB0ZXN0cHViX3RibF9jaGlsZDsK K0RST1AgUFVCTElDQVRJT04gdGVzdHB1YjMsIHRlc3RwdWI0LCB0ZXN0cHViNSwgdGVzdHB1YjYs IHRlc3RwdWI3OwogLS0tIFRlc3RzIGZvciBwdWJsaWNhdGlvbnMgd2l0aCBTRVFVRU5DRVMKIENS RUFURSBTRVFVRU5DRSByZWdyZXNzX3B1Yl9zZXEwOwogQ1JFQVRFIFNFUVVFTkNFIHB1Yl90ZXN0 LnJlZ3Jlc3NfcHViX3NlcTE7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJs aWNhdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKaW5kZXgg ODViMDBiZDY3YzguLjUyMjRkYTkzZDc3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9wdWJsaWNhdGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24u c3FsCkBAIC0xMDUsMjAgKzEwNSw0MSBAQCBTRUxFQ1QgcHVibmFtZSwgcHViYWxsdGFibGVzIEZS T00gcGdfcHVibGljYXRpb24gV0hFUkUgcHVibmFtZSA9ICd0ZXN0cHViX2ZvcmFsbAogXGQrIHRl c3RwdWJfdGJsMgogXGRScCsgdGVzdHB1Yl9mb3JhbGx0YWJsZXMKIAorU0VUIGNsaWVudF9taW5f bWVzc2FnZXMgPSAnRVJST1InOworLS0gRXhjbHVkZSB0YWJsZXMgdXNpbmcgRk9SIEFMTCBUQUJM RVMgRVhDRVBUIFRBQkxFICh0YWJsZWxpc3QpCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9m b3JhbGx0YWJsZXNfZXhjZXB0dGFibGUgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0ZXN0 cHViX3RibDEsIHRlc3RwdWJfdGJsMik7CitcZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNl cHR0YWJsZQorLS0gRXhjbHVkZSB0YWJsZXMgdXNpbmcgRk9SIEFMTCBUQUJMRVMgRVhDRVBUICh0 YWJsZWxpc3QpCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0 dGFibGUxIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCAodGVzdHB1Yl90YmwxKTsKK1xkUnArIHRlc3Rw dWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlMQorLS0gQ2hlY2sgdGhhdCB0aGUgdGFibGUgZGVz Y3JpcHRpb24gc2hvd3MgdGhlIHB1YmxpY2F0aW9uIGxpc3QgdGhlIHRhYmxlIGlzCistLSBleGNs dWRlZCBmcm9tCitcZCB0ZXN0cHViX3RibDEKKworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsK IERST1AgVEFCTEUgdGVzdHB1Yl90YmwyOwotRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFs bHRhYmxlcywgdGVzdHB1Yl9mb3J0YWJsZSwgdGVzdHB1Yl9mb3JzY2hlbWEsIHRlc3RwdWJfZm9y X3RibF9zY2hlbWE7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzLCB0ZXN0 cHViX2ZvcnRhYmxlLCB0ZXN0cHViX2ZvcnNjaGVtYSwgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYSwg dGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUsIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4 Y2VwdHRhYmxlMTsKIAotQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsMyAoYSBpbnQpOwotQ1JFQVRF IFRBQkxFIHRlc3RwdWJfdGJsM2EgKGIgdGV4dCkgSU5IRVJJVFMgKHRlc3RwdWJfdGJsMyk7CitD UkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfcGFyZW50IChhIGludCk7CitDUkVBVEUgVEFCTEUgdGVz dHB1Yl90YmxfY2hpbGQgKGIgdGV4dCkgSU5IRVJJVFMgKHRlc3RwdWJfdGJsX3BhcmVudCk7CiBT RVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7Ci1DUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsKLUNSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHVi NCBGT1IgVEFCTEUgT05MWSB0ZXN0cHViX3RibDM7Ci1SRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzIEZPUiBUQUJMRSB0ZXN0cHViX3RibF9wYXJl bnQ7CiBcZFJwKyB0ZXN0cHViMworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJM RSBPTkxZIHRlc3RwdWJfdGJsX3BhcmVudDsKIFxkUnArIHRlc3RwdWI0CistLSBFeGNsdWRlIHBh cmVudCB0YWJsZSwgb21pdHRpbmcgYm90aCBvZiAnT05MWScgYW5kICcqJworQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWI1IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90Ymxf cGFyZW50KTsKK1xkUnArIHRlc3RwdWI1CistLSBFWENFUFQgd2l0aCAnKic6IGV4Y2x1ZGUgdGFi bGUgYW5kIGFsbCBkZXNjZW5kYW50cworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IEZPUiBB TEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90YmxfcGFyZW50ICopOworXGRScCsgdGVz dHB1YjYKKy0tIEVYQ0VQVCB3aXRoIE9OTFk6IGV4Y2x1ZGUgdGFibGUgYnV0IG5vdCBkZXNjZW5k YW50cworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI3IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBU QUJMRSAoT05MWSB0ZXN0cHViX3RibF9wYXJlbnQpOworXGRScCsgdGVzdHB1YjcKIAotRFJPUCBU QUJMRSB0ZXN0cHViX3RibDMsIHRlc3RwdWJfdGJsM2E7Ci1EUk9QIFBVQkxJQ0FUSU9OIHRlc3Rw dWIzLCB0ZXN0cHViNDsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitEUk9QIFRBQkxFIHRl c3RwdWJfdGJsX3BhcmVudCwgdGVzdHB1Yl90YmxfY2hpbGQ7CitEUk9QIFBVQkxJQ0FUSU9OIHRl c3RwdWIzLCB0ZXN0cHViNCwgdGVzdHB1YjUsIHRlc3RwdWI2LCB0ZXN0cHViNzsKIAogLS0tIFRl c3RzIGZvciBwdWJsaWNhdGlvbnMgd2l0aCBTRVFVRU5DRVMKIENSRUFURSBTRVFVRU5DRSByZWdy ZXNzX3B1Yl9zZXEwOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1 aWxkIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkCmluZGV4IGE0YzdkYmFmZjU5 Li4wNzI4MmFhM2MxOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1 aWxkCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZApAQCAtNDYsNiArNDYs NyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMzRfdGVtcG9yYWwucGwnLAogICAgICAgJ3QvMDM1 X2NvbmZsaWN0cy5wbCcsCiAgICAgICAndC8wMzZfc2VxdWVuY2VzLnBsJywKKyAgICAgICd0LzAz N19yZXBfY2hhbmdlc19leGNlcHRfdGFibGUucGwnLAogICAgICAgJ3QvMTAwX2J1Z3MucGwnLAog ICAgIF0sCiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzdfcmVw X2NoYW5nZXNfZXhjZXB0X3RhYmxlLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM3X3Jl cF9jaGFuZ2VzX2V4Y2VwdF90YWJsZS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uOTU5MDRkZGQwMDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3Jp cHRpb24vdC8wMzdfcmVwX2NoYW5nZXNfZXhjZXB0X3RhYmxlLnBsCkBAIC0wLDAgKzEsMjM4IEBA CisKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisKKyMgTG9naWNhbCByZXBsaWNhdGlvbiB0ZXN0cyBmb3IgRVhDRVBUIFRBQkxF IHB1YmxpY2F0aW9ucwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6 Ok1vcmU7CisKKyMgSW5pdGlhbGl6ZSBwdWJsaXNoZXIgbm9kZQorbXkgJG5vZGVfcHVibGlzaGVy ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1 Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJs aXNoZXItPnN0YXJ0OworCisjIEluaXRpYWxpemUgc3Vic2NyaWJlciBub2RlCitteSAkbm9kZV9z dWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7 Ciskbm9kZV9zdWJzY3JpYmVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsK KyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisjIEVYQ0VQVCBUQUJMRSB0ZXN0IGNhc2VzIGZvciBub3JtYWwg dGFibGVzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisj IENyZWF0ZSBzY2hlbWFzIGFuZCB0YWJsZXMgb24gcHVibGlzaGVyCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgU0NIRU1BIHNjaDE7CisJQ1JF QVRFIFRBQkxFIHNjaDEudGFiMSBBUyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsMTApIEFTIGE7 CispKTsKKworIyBDcmVhdGUgc2NoZW1hcyBhbmQgdGFibGVzIG9uIHN1YnNjcmliZXIKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgU0NIRU1B IHNjaDE7CisJQ1JFQVRFIFRBQkxFIHNjaDEudGFiMSAoYSBpbnQpOworKSk7CisKKyMgU2V0dXAg bG9naWNhbCByZXBsaWNhdGlvbgorbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5vZGVfcHVibGlz aGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfc2NoZW1hIEZP UiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoc2NoMS50YWIxKSIKKyk7CisjIENyZWF0ZSBhIGxv Z2ljYWwgcmVwbGljYXRpb24gc2xvdAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiU0VMRUNUIHBnX2NyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoJ3Rlc3Rf c2xvdCcsICdwZ291dHB1dCcpIik7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWJfc2NoZW1hIENPTk5FQ1RJT04g JyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGFwX3B1Yl9zY2hlbWEiCispOworCisj IFdhaXQgZm9yIGluaXRpYWwgdGFibGUgc3luYyB0byBmaW5pc2gKKyRub2RlX3N1YnNjcmliZXIt PndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1Ymxpc2hlciwKKwkndGFwX3N1Yl9z Y2hlbWEnKTsKKworIyBDaGVjayB0aGUgdGFibGUgZGF0YSBkb2VzIG5vdCBzeW5jIGZvciBleGNs dWRlZCB0YWJsZQorbXkgJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJTRUxFQ1QgY291bnQoKiksIG1pbihhKSwgbWF4KGEpIEZST00gc2NoMS50YWIx Iik7CitpcygkcmVzdWx0LCBxcSgwfHwpLAorCSdjaGVjayB0aGVyZSBpcyBubyBpbml0aWFsIGRh dGEgY29waWVkIGZvciB0aGUgZXhjbHVkZWQgdGFibGUnKTsKKworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gc2NoMS50YWIxIFZBTFVFUyhnZW5l cmF0ZV9zZXJpZXMoMTEsMjApKSIpOworCisjIFZlcmlmeSB0aGF0IGRhdGEgaW5zZXJ0ZWQgdG8g ZXhjbHVkZWQgdGFibGUgaXMgbm90IHB1Ymxpc2hlZC4KKyRyZXN1bHQgPSAkbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgY291bnQoKikgPSAwIEZST00gcGdf bG9naWNhbF9zbG90X2dldF9iaW5hcnlfY2hhbmdlcygndGVzdF9zbG90JywgTlVMTCwgTlVMTCwg J3Byb3RvX3ZlcnNpb24nLCAnMScsICdwdWJsaWNhdGlvbl9uYW1lcycsICd0YXBfc3ViX3NjaGVt YScpIgorKTsKK2lzKCRyZXN1bHQsIHFxKHQpLCAnY2hlY2sgbm8gY2hhbmdlcyBmb3IgZXhjbHVk ZWQgdGFibGUgaW4gcmVwbGljYXRpb24gc2xvdCcpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ3RhcF9zdWJfc2NoZW1hJyk7CisKKyMgVmVyaWZ5IHRoYXQgZGF0YSBpbnNl cnRlZCB0byB0aGUgZXhjbHVkZWQgdGFibGUgaXMgbm90IHJlcGxpY2F0ZWQuCiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBjb3VudCgq KSwgbWluKGEpLCBtYXgoYSkgRlJPTSBzY2gxLnRhYjEiKTsKK2lzKCRyZXN1bHQsIHFxKDB8fCks ICdjaGVjayByZXBsaWNhdGVkIGluc2VydHMgb24gc3Vic2NyaWJlcicpOworCisjIGNsZWFudXAK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FUSU9O IHRhcF9wdWJfc2NoZW1hIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgU1VCU0NSSVBUSU9OIHRhcF9zdWJfc2NoZW1hIik7CisKKyMgPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgRVhDRVBUIFRBQkxFIHRlc3QgY2Fz ZXMgZm9yIHBhcnRpdGlvbmVkIHRhYmxlcworIyBDaGVjayBiZWhhdmlvciBvZiBFWENFUFQgVEFC TEUgd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBvbiBhCisjIHBhcnRpdGlvbmVkIHRh YmxlIGFuZCBpdHMgcGFydGl0aW9ucy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKyMgU2V0dXAgcGFydGl0aW9uZWQgdGFibGUgYW5kIHBhcnRpdGlvbnMg b24gdGhlIHB1Ymxpc2hlciB0aGF0IG1hcCB0byBub3JtYWwKKyMgdGFibGVzIG9uIHRoZSBzdWJz Y3JpYmVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlD UkVBVEUgVEFCTEUgc2NoMS50MShhIGludCkgUEFSVElUSU9OIEJZIFJBTkdFKGEpOworCUNSRUFU RSBUQUJMRSBzY2gxLnBhcnQxIFBBUlRJVElPTiBPRiBzY2gxLnQxIEZPUiBWQUxVRVMgRlJPTSAo MCkgVE8gKDUpOworCUNSRUFURSBUQUJMRSBzY2gxLnBhcnQyIFBBUlRJVElPTiBPRiBzY2gxLnQx IEZPUiBWQUxVRVMgRlJPTSAoNikgVE8gKDEwKTsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHNjaDEudDEoYSBpbnQp OworCUNSRUFURSBUQUJMRSBzY2gxLnBhcnQxKGEgaW50KTsKKwlDUkVBVEUgVEFCTEUgc2NoMS5w YXJ0MihhIGludCk7CispKTsKKworIyBFWENFUFQgVEFCTEUgKHNjaDEucGFydDEpIHdpdGggcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZQorIyBFeGNsdWRpbmcgYSBwYXJ0aXRpb24g d2hpbGUgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBwcmV2ZW50cworIyByZXBs aWNhdGlvbiBvZiByb3dzIGluc2VydGVkIGludG8gdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGZvciB0 aGF0IHBhcnRpY3VsYXIKKyMgcGFydGl0aW9uLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo CisJJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydCBGT1Ig QUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjaDEucGFydDEpIFdJVEggKHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290ID0gZmFsc2UpOworCUlOU0VSVCBJTlRPIHNjaDEudDEgVkFMVUVTICgxKSwg KDYpOworKSk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JF QVRFIFNVQlNDUklQVElPTiB0YXBfc3ViX3BhcnQgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25u c3RyJyBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQiCispOworJG5vZGVfc3Vic2NyaWJlci0+d2Fp dF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcHVibGlzaGVyLCAndGFwX3N1Yl9wYXJ0Jyk7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyBz Y2gxLnQxIFZBTFVFUyAoMiksICg3KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgndGFwX3N1Yl9wYXJ0Jyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS50MSIpOworaXMoJHJlc3VsdCwg cXEoKSwgJ2NoZWNrIHJvd3Mgb24gcGFydGl0aW9uZWQgdGFibGUnKTsKKworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gx LnBhcnQxIik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiBleGNsdWRlZCBwYXJ0 aXRpb24nKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQyIik7CitpcyggJHJlc3VsdCwgcXEoNgorNyks ICdjaGVjayByb3dzIG9uIG90aGVyIHBhcnRpdGlvbicpOworCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgc2NoMS50MSIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9wYXJ0Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJMSUNBVElPTiB0 YXBfcHViX3BhcnQ7Iik7CisKKyMgRVhDRVBUIFRBQkxFIChzY2gxLnQxKSB3aXRoIHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UKKyMgRXhjbHVkaW5nIHRoZSBwYXJ0aXRpb25lZCB0 YWJsZSBzdGlsbCBhbGxvd3Mgcm93cyBpbnNlcnRlZCBpbnRvIHRoZQorIyBwYXJ0aXRpb25lZCB0 YWJsZSB0byBiZSByZXBsaWNhdGVkIHZpYSBpdHMgcGFydGl0aW9ucy4KKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBQVUJMSUNBVElPTiB0YXBf cHViX3BhcnQgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChzY2gxLnQxKSBXSVRIIChwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlKTsKKwlJTlNFUlQgSU5UTyBzY2gxLnQxIFZB TFVFUyAoMSksICg2KTsKKykpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9wYXJ0IENPTk5FQ1RJT04gJyRwdWJs aXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0IgorKTsKKyRub2RlX3N1YnNj cmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1Ymxpc2hlciwgJ3RhcF9z dWJfcGFydCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5T RVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDIpLCAoNyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ3RhcF9zdWJfcGFydCcpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEudDEiKTsKK2lz KCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHBhcnRpdGlvbmVkIHRhYmxlJyk7CisKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAq IEZST00gc2NoMS5wYXJ0MSIpOworaXMoICRyZXN1bHQsIHFxKDEKKzIpLCAnY2hlY2sgcm93cyBv biBmaXJzdCBwYXJ0aXRpb24nKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQyIik7CitpcyggJHJlc3Vs dCwgcXEoNgorNyksICdjaGVjayByb3dzIG9uIHNlY29uZCBwYXJ0aXRpb24nKTsKKworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlRSVU5DQVRFIHNjaDEudDEiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgndGFwX3N1Yl9wYXJ0Jyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgU1VCU0NSSVBUSU9OIHRhcF9z dWJfcGFydCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag UFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIHNsb3RfbmFtZSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3Rf YWR2YW5jZSgndGVzdF9zbG90JywgcGdfY3VycmVudF93YWxfbHNuKCkpOyIKKyk7CisKKyMgRVhD RVBUIFRBQkxFIChzY2gxLnQxKSB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1 ZQorIyBXaGVuIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBpcyBleGNsdWRlZCBhbmQgcHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QgaXMgdHJ1ZSwKKyMgbm8gcm93cyBmcm9tIHRoZSB0YWJsZSBvciBp dHMgcGFydGl0aW9ucyBhcmUgcmVwbGljYXRlZC4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KAorCSdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQgRk9S IEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChzY2gxLnQxKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCk7CisJSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDEpLCAoNik7CispKTsK KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NS SVBUSU9OIHRhcF9zdWJfcGFydCBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJ Q0FUSU9OIHRhcF9wdWJfcGFydCIKKyk7Ciskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJz Y3JpcHRpb25fc3luYygkbm9kZV9wdWJsaXNoZXIsICd0YXBfc3ViX3BhcnQnKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHNjaDEudDEgVkFM VUVTICgyKSwgKDcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBf c3ViX3BhcnQnKTsKKworIyBWZXJpZnkgdGhhdCBkYXRhIGluc2VydGVkIHRvIHRoZSBwYXJ0aXRp b25lZCB0YWJsZSBpcyBub3QgcHVibGlzaGVkIHdoZW4gaXQgaXMKKyMgZXhjbHVkZWQgd2l0aCBw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUuCiskcmVzdWx0ID0gJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGNvdW50KCopID0gMCBGUk9NIHBn X2xvZ2ljYWxfc2xvdF9nZXRfYmluYXJ5X2NoYW5nZXMoJ3Rlc3Rfc2xvdCcsIE5VTEwsIE5VTEws ICdwcm90b192ZXJzaW9uJywgJzEnLCAncHVibGljYXRpb25fbmFtZXMnLCAndGFwX3B1Yl9wYXJ0 JykiCispOworaXMoJHJlc3VsdCwgcXEodCksICdjaGVjayBubyBjaGFuZ2VzIGZvciBleGNsdWRl ZCB0YWJsZSBpbiByZXBsaWNhdGlvbiBzbG90Jyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS50MSIpOworaXMo JHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gcGFydGl0aW9uZWQgdGFibGUnKTsKKworJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICog RlJPTSBzY2gxLnBhcnQxIik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiBmaXJz dCBwYXJ0aXRpb24nKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQyIik7CitpcygkcmVzdWx0LCBxcSgp LCAnY2hlY2sgcm93cyBvbiBzZWNvbmQgcGFydGl0aW9uJyk7CisKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJUUlVOQ0FURSBzY2gxLnQxIik7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ3RhcF9zdWJfcGFydCcpOworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3BhcnQiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FUSU9O IHRhcF9wdWJfcGFydDsiKTsKKworIyBFWENFUFQgVEFCTEUgKHNjaDEucGFydDEpIHdpdGggcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlCisjIFdoZW4gYSBwYXJ0aXRpb24gaXMgZXhj bHVkZWQgYnV0IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzIHRydWUsCisjIHJvd3MgcHVi bGlzaGVkIHRocm91Z2ggdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGNhbiBzdGlsbCBiZSByZXBsaWNh dGVkLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXEoCisJQ1JF QVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUg KHNjaDEucGFydDEpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKwlJTlNFUlQg SU5UTyBzY2gxLnQxIFZBTFVFUyAoMSksICg2KQorKSk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViX3BhcnQgQ09O TkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQiCisp OworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcHVi bGlzaGVyLCAndGFwX3N1Yl9wYXJ0Jyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVFUyAoMiksICg3KTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgndGFwX3N1Yl9wYXJ0Jyk7CisKKyRyZXN1bHQg PQorICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZS T00gc2NoMS50MSBPUkRFUiBCWSBhIik7CitpcyggJHJlc3VsdCwgcXEoMQorMgorNgorNyksICdj aGVjayByb3dzIG9uIHBhcnRpdGlvbmVkIHRhYmxlJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS5wYXJ0MSIp OworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gZXhjbHVkZWQgcGFydGl0aW9uJyk7 CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCAqIEZST00gc2NoMS5wYXJ0MiIpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mg b24gb3RoZXIgcGFydGl0aW9uJyk7CisKKyRub2RlX3N1YnNjcmliZXItPnN0b3AoJ2Zhc3QnKTsK KyRub2RlX3B1Ymxpc2hlci0+c3RvcCgnZmFzdCcpOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIu NDMuMAoK --00000000000021d4f10649ee4689 Content-Type: application/x-patch; name="v39-0002-handle-EXCEPT-TABLE-correctly-with-partitioned-t.patch" Content-Disposition: attachment; filename="v39-0002-handle-EXCEPT-TABLE-correctly-with-partitioned-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml6u3te51 RnJvbSA5YmFlNWRjMjU4ZGM2YWMyNTEyZTNlM2ZlZjljMzAwOTgxN2NhMmQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFRodSwgMjkgSmFuIDIwMjYgMTg6NTY6MTMgKzA1MzAKU3ViamVjdDogW1BBVENIIHYzOSAyLzJd IGhhbmRsZSBFWENFUFQgVEFCTEUgY29ycmVjdGx5IHdpdGggcGFydGl0aW9uZWQgdGFibGVzCgpX aGVuIGEgcHVibGljYXRpb24gaXMgY3JlYXRlZCB3aXRoIEVYQ0VQVCBUQUJMRSwgYWRqdXN0IGxv Z2ljYWwgcmVwbGljYXRpb24Kc28gdGhhdCBkYXRhIHN5bmNocm9uaXphdGlvbiBhbmQgY2hhbmdl IHJlcGxpY2F0aW9uIGNvcnJlY3RseSByZXNwZWN0CmV4Y2x1c2lvbnMgZm9yIHBhcnRpdGlvbmVk IHRhYmxlcy4KCk9uIHRoZSBzdWJzY3JpYmVyIHNpZGUsIGV4dGVuZCBmZXRjaF9yZW1vdGVfdGFi bGVfaW5mbygpIHRvIGNvbXB1dGUgdGhlCmVmZmVjdGl2ZSBzZXQgb2YgcmVsYXRpb25zIHVzZWQg Zm9yIHRoZSBpbml0aWFsIENPUFkuIFdoZW4gZXhjbHVzaW9ucyBhcmUKcHJlc2VudCwgdGhlIHJv b3QgcGFydGl0aW9uZWQgdGFibGUgY2FuIG5vIGxvbmdlciBiZSB1c2VkIGRpcmVjdGx5OyBpbnN0 ZWFkLApkZXJpdmUgdGhlIGxpc3Qgb2Ygbm9uLWV4Y2x1ZGVkIGxlYWYgcGFydGl0aW9ucyBhbmQg Y29tYmluZSB0aGVtIHdpdGgKVU5JT04gQUxMLiBXaGVuIG5vIGV4Y2x1c2lvbnMgZXhpc3QsIHJl dGFpbiB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgYW5kIGNvcHkKZnJvbSB0aGUgcm9vdCByZWxhdGlv biBhcyBiZWZvcmUuCgpUaGlzIGlzIGJhc2VkIG9uIGFwcHJvYWNoIDEgZGlzY3Vzc2VkIGF0Ogpo dHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBSnB5MHVEODFIUnJNWXI3Uy02 QVY0VzJQdGJHS00tbmYyRDg5enNvTUhKOWpac3NVZ0BtYWlsLmdtYWlsLmNvbQoKVGhpcyBwYXRj aCBpcyBhIHRvcHVwIHBhdGNoIG9uIHRvcCBvZiAwMDAxIHBhdGNoLgotLS0KIGRvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwgICAgICB8ICAxNyArLQogc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICAgIHwgNDQ4ICsrKysrKysrKysrKysrKysr LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jICAgICAgIHwgICAyICsK IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgICB8IDE1MCArKysr Ky0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICB8ICAzMSAr LQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgIHwgICA3ICsK IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oICAgICB8ICAgNiArCiAu Li4vdC8wMzdfcmVwX2NoYW5nZXNfZXhjZXB0X3RhYmxlLnBsICAgICAgICAgfCAxNTYgKysrLS0t CiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwog OSBmaWxlcyBjaGFuZ2VkLCA2ODcgaW5zZXJ0aW9ucygrKSwgMTMxIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwgYi9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCmluZGV4IDFlMDkxYmIzYzZkLi43 MzBiOWM0YmNlZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRp b24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCkBA IC0yMDUsMTYgKzIwNSwxNSBAQCBDUkVBVEUgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgogICAgICAgdGFibGVzIGFyZSBleGNsdWRl ZC4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KLSAgICAgIEZvciBwYXJ0aXRpb25lZCB0YWJs ZXMsIHdoZW4gPGxpdGVyYWw+cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Q8L2xpdGVyYWw+Ci0g ICAgICBpcyBzZXQgdG8gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4sIHNwZWNpZnlpbmcgYSByb290 IHBhcnRpdGlvbmVkIHRhYmxlIGluCi0gICAgICA8bGl0ZXJhbD5FWENFUFQgVEFCTEU8L2xpdGVy YWw+IGV4Y2x1ZGVzIGl0IGFuZCBhbGwgaXRzIHBhcnRpdGlvbnMgZnJvbQotICAgICAgcmVwbGlj YXRpb24uIFNwZWNpZnlpbmcgYSBsZWFmIHBhcnRpdGlvbiBoYXMgbm8gZWZmZWN0LCBhcyBpdHMg Y2hhbmdlcyBhcmUKLSAgICAgIHN0aWxsIHJlcGxpY2F0ZWQgdmlhIHRoZSByb290IHBhcnRpdGlv bmVkIHRhYmxlLiBXaGVuCisgICAgICBGb3IgcGFydGl0aW9uZWQgdGFibGVzLCB3aGVuIGEgdGFi bGUgaXMgc3BlY2lmaWVkIGluIEVYQ0VQVCBUQUJMRSwgdGhlbgorICAgICAgY2hhbmdlcyB0byB0 aGF0IHRhYmxlIGFuZCBhbGwgb2YgaXRzIHBhcnRpdGlvbnMgKHRoYXQgaXMsIHRoZSBlbnRpcmUK KyAgICAgIHBhcnRpdGlvbiBzdWJ0cmVlIHJvb3RlZCBhdCB0aGF0IHRhYmxlKSBhcmUgbm90IHJl cGxpY2F0ZWQuIFRoaXMgYmVoYXZpb3IKKyAgICAgIGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Yg d2hldGhlcgogICAgICAgPGxpdGVyYWw+cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Q8L2xpdGVy YWw+IGlzIHNldCB0bwotICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCBzcGVjaWZ5aW5n IGEgcm9vdCBwYXJ0aXRpb25lZCB0YWJsZSBoYXMgbm8KLSAgICAgIGVmZmVjdCwgYXMgY2hhbmdl cyBhcmUgcmVwbGljYXRlZCB2aWEgdGhlIGxlYWYgcGFydGl0aW9ucy4gU3BlY2lmeWluZyBhCi0g ICAgICBsZWFmIHBhcnRpdGlvbiBleGNsdWRlcyBvbmx5IHRoYXQgcGFydGl0aW9uIGZyb20gcmVw bGljYXRpb24uIFRoZSBvcHRpb25hbAotICAgICAgPGxpdGVyYWw+KjwvbGl0ZXJhbD4gaGFzIG5v IG1lYW5pbmcgZm9yIHBhcnRpdGlvbmVkIHRhYmxlcy4KKyAgICAgIDxsaXRlcmFsPnRydWU8L2xp dGVyYWw+IG9yIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4gVGhlCisgICAgICA8bGl0ZXJhbD5w dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdDwvbGl0ZXJhbD4gc2V0dGluZyBvbmx5IGRldGVybWlu ZXMKKyAgICAgIHdoaWNoIHJlbGF0aW9uIGlzIHVzZWQgYXMgdGhlIHB1Ymxpc2hpbmcgcmVsYXRp b24gZm9yIHJlcGxpY2F0ZWQgY2hhbmdlcywKKyAgICAgIGFuZCBkb2VzIG5vdCBhZmZlY3QgZXhj bHVzaW9uIHNlbWFudGljcy4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zh cmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRp b24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCAwOWM2OTAw NTEyMi4uZGQ4ZGIyMTY1ZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVi bGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAg LTQ2OCwyNiArNDY4LDYgQEAgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVi bGljYXRpb25SZWxJbmZvICpwcmksCiAJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJn ZXRyZWwpLCBwdWItPm5hbWUpKSk7CiAJfQogCi0JLyoKLQkgKiBIYW5kbGUgdGhlIGNhc2Ugd2hl cmUgYSBwYXJ0aXRpb24gaXMgZXhjbHVkZWQgYnkgRVhDRVBUIFRBQkxFIHdoaWxlCi0JICogcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlLgotCSAqLwotCWlmIChwdWItPmFsbHRhYmxl cyAmJiBwdWItPnB1YnZpYXJvb3QgJiYgcHJpLT5leGNlcHQgJiYKLQkJdGFyZ2V0cmVsLT5yZF9y ZWwtPnJlbGlzcGFydGl0aW9uKQotCQllcmVwb3J0KFdBUk5JTkcsCi0JCQkJKGVycm1zZygicGFy dGl0aW9uIFwiJXNcIiBtaWdodCBiZSByZXBsaWNhdGVkIGFzIHB1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290IGlzIFwiJXNcIiIsCi0JCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRy ZWwpLCAidHJ1ZSIpKSk7Ci0KLQkvKgotCSAqIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIHBhcnRp dGlvbmVkIHRhYmxlIGlzIGV4Y2x1ZGVkIGJ5IEVYQ0VQVCBUQUJMRQotCSAqIHdoaWxlIHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UuCi0JICovCi0JaWYgKHB1Yi0+YWxsdGFibGVz ICYmICFwdWItPnB1YnZpYXJvb3QgJiYgcHJpLT5leGNlcHQgJiYKLQkJdGFyZ2V0cmVsLT5yZF9y ZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKLQkJZXJlcG9ydChXQVJO SU5HLAotCQkJCShlcnJtc2coInBhcnRpdGlvbmVkIHRhYmxlIFwiJXNcIiBtaWdodCBiZSByZXBs aWNhdGVkIGFzIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzIFwiJXNcIiIsCi0JCQkJCQlS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpLCAiZmFsc2UiKSkpOwotCiAJY2hlY2tf cHVibGljYXRpb25fYWRkX3JlbGF0aW9uKHRhcmdldHJlbCk7CiAKIAkvKiBWYWxpZGF0ZSBhbmQg dHJhbnNsYXRlIGNvbHVtbiBuYW1lcyBpbnRvIGEgQml0bWFwc2V0IG9mIGF0dG51bXMuICovCkBA IC05NjAsOCArOTQwLDggQEAgR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoUHVibGljYXRpb24g KnB1YiwgY2hhciByZWxraW5kKQogCiAJaWYgKHJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTikK IAkJZXhjZXB0bGlzdCA9IEdldEFsbFB1YmxpY2F0aW9uRXhjbHVkZWRUYWJsZXMocHViaWQsIHB1 YnZpYXJvb3QgPwotCQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0FMTCA6Ci0JCQkJCQkJ CQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CisJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9O X1BBUlRfUk9PVCA6CisJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfTEVBRik7CiAKIAlj bGFzc1JlbCA9IHRhYmxlX29wZW4oUmVsYXRpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OwogCkBAIC0xMjA1LDYgKzExODUsNDMwIEBAIEdldFB1YmxpY2F0aW9uQnlOYW1lKGNvbnN0IGNo YXIgKnB1Ym5hbWUsIGJvb2wgbWlzc2luZ19vaykKIAlyZXR1cm4gT2lkSXNWYWxpZChvaWQpID8g R2V0UHVibGljYXRpb24ob2lkKSA6IE5VTEw7CiB9CiAKKworLyogSGVscGVyOiBSZXNvbHZlIHRo ZSBpbW1lZGlhdGUgcGFyZW50IG9mIGEgcGFydGl0aW9uICovCitzdGF0aWMgT2lkCitnZXRfcGFy ZW50X29pZChPaWQgcmVsaWQpCit7CisJTGlzdAkgICAqYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlv bl9hbmNlc3RvcnMocmVsaWQpOworCisJaWYgKGFuY2VzdG9ycyA9PSBOSUwpCisJCXJldHVybiBJ bnZhbGlkT2lkOworCXJldHVybiBsaW5pdGlhbF9vaWQoYW5jZXN0b3JzKTsKK30KKworLyogSGVs cGVyOiBDaGVjayBzeXNjYWNoZSBmb3IgcHJleGNlcHQgZmxhZyAqLworc3RhdGljIGJvb2wKK2lz X3JlbGlkX3B1Ymxpc2hlZF9hc19leGNlcHQoT2lkIHJlbGlkLCBPaWQgcHViaWQpCit7CisJSGVh cFR1cGxlCXR1cDsKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKworCXR1cCA9IFNlYXJjaFN5c0Nh Y2hlMihQVUJMSUNBVElPTlJFTE1BUCwgT2JqZWN0SWRHZXREYXR1bShyZWxpZCksIE9iamVjdElk R2V0RGF0dW0ocHViaWQpKTsKKwlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCXsKKwkJRm9y bV9wZ19wdWJsaWNhdGlvbl9yZWwgcHJmb3JtID0gKEZvcm1fcGdfcHVibGljYXRpb25fcmVsKSBH RVRTVFJVQ1QodHVwKTsKKworCQlyZXN1bHQgPSBwcmZvcm0tPnByZXhjZXB0OworCQlSZWxlYXNl U3lzQ2FjaGUodHVwKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIHB1YmxpY2F0 aW9uX2hhc19hbnlfZXhjZXB0aW9uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBw dWJsaWNhdGlvbiBPSUQgaGFzIGF0IGxlYXN0IG9uZSBlbnRyeSBpbgorICogcGdfcHVibGljYXRp b25fcmVsIG1hcmtlZCBhcyBhbiBleGNlcHRpb24gKHByZXhjZXB0ID0gdHJ1ZSkuCisgKi8KK3N0 YXRpYyBib29sCitwdWJsaWNhdGlvbl9oYXNfYW55X2V4Y2VwdGlvbihPaWQgcHViaWQpCit7CisJ UmVsYXRpb24JcHViUmVsOworCVNjYW5LZXlEYXRhIHNrZXk7CisJU3lzU2NhbkRlc2Mgc2NhbjsK KwlIZWFwVHVwbGUJdHVwOworCWJvb2wJCWZvdW5kID0gZmFsc2U7CisKKwkvKiBPcGVuIHBnX3B1 YmxpY2F0aW9uX3JlbCB3aXRoIEFjY2Vzc1NoYXJlTG9jayAqLworCXB1YlJlbCA9IHRhYmxlX29w ZW4oUHVibGljYXRpb25SZWxSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkg KiAqIExvb2sgdXAgYnkgcHVibGljYXRpb24gT0lELiBVc2luZyB0aGUgaW5kZXggb24gKHBycHVi aWQpIGlzIGhpZ2hseQorCSAqIGVmZmljaWVudC4KKwkgKi8KKwlTY2FuS2V5SW5pdCgmc2tleSwK KwkJCQlBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcnB1YmlkLAorCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKHB1YmlkKSk7CisKKwlzY2Fu ID0gc3lzdGFibGVfYmVnaW5zY2FuKHB1YlJlbCwKKwkJCQkJCQkgIFB1YmxpY2F0aW9uUmVsUHJy ZWxpZFBycHViaWRJbmRleElkLAorCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJnNrZXkpOworCisJ LyogV2Ugb25seSBuZWVkIHRvIGZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgcHJleGNlcHQg PSB0cnVlICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwID0gc3lzdGFibGVfZ2V0bmV4 dChzY2FuKSkpCisJeworCQlGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCBwdWJyZWxmb3JtID0gKEZv cm1fcGdfcHVibGljYXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKTsKKworCQlpZiAocHVicmVsZm9y bS0+cHJleGNlcHQpCisJCXsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQor CisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShwdWJSZWwsIEFjY2Vzc1No YXJlTG9jayk7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qCisgKiBpc19yZWxpZF9wdWJsaXNo ZWRfZXhwbGljaXRseQorICoKKyAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gcmVsYXRpb24gT0lEIGlz IGV4cGxpY2l0bHkgcGFydCBvZiB0aGUgcHVibGljYXRpb24uCisgKiBUaGlzIGNvcnJlc3BvbmRz IHRvIHRoZSAnRk9SIFRBQkxFJyBzeW50YXguCisgKi8KK3N0YXRpYyBib29sCitpc19yZWxpZF9w dWJsaXNoZWRfZXhwbGljaXRseShPaWQgcmVsaWQsIE9pZCBwdWJpZCkKK3sKKwkvKgorCSAqIFNl YXJjaCB0aGUgc3lzY2FjaGUgZm9yIHBnX3B1YmxpY2F0aW9uX3JlbCB1c2luZyB0aGUgKHJlbGlk LCBwdWJpZCkKKwkgKiBpbmRleC4KKwkgKi8KKwlyZXR1cm4gU2VhcmNoU3lzQ2FjaGVFeGlzdHMy KFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShyZWxpZCksCisJ CQkJCQkJCSBPYmplY3RJZEdldERhdHVtKHB1YmlkKSk7Cit9CisKKy8qCisgKiBpc19zY2hlbWFf cHVibGlzaGVkCisgKgorICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBuYW1lc3BhY2UgT0lEIGlzIHBh cnQgb2YgdGhlIHB1YmxpY2F0aW9uJ3MKKyAqIHNjaGVtYSBsaXN0LiBUaGlzIGNvcnJlc3BvbmRz IHRvIHRoZSAnRk9SIFRBQkxFUyBJTiBTQ0hFTUEnIHN5bnRheC4KKyAqLworc3RhdGljIGJvb2wK K2lzX3NjaGVtYV9wdWJsaXNoZWQoT2lkIG5zcGlkLCBPaWQgcHViaWQpCit7CisJLyoKKwkgKiBT ZWFyY2ggdGhlIHN5c2NhY2hlIGZvciBwZ19wdWJsaWNhdGlvbl9uYW1lc3BhY2UgdXNpbmcgdGhl IChuc3BpZCwKKwkgKiBwdWJpZCkgaW5kZXguCisJICovCisJcmV0dXJuIFNlYXJjaFN5c0NhY2hl RXhpc3RzMihQVUJMSUNBVElPTk5BTUVTUEFDRU1BUCwKKwkJCQkJCQkJIE9iamVjdElkR2V0RGF0 dW0obnNwaWQpLAorCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShwdWJpZCkpOworfQorCisvKgor ICogcGdfZ2V0X3B1YmxpY2F0aW9uX2VmZmVjdGl2ZV90YWJsZXMKKyAqCisgKiBHaXZlbiBhIHJv b3QgcmVsYXRpb24gYW5kIGEgbGlzdCBvZiBwdWJsaWNhdGlvbnMsIGNhbGN1bGF0ZSB0aGUgc2V0 IG9mCisgKiByZWxhdGlvbnMgdGhhdCBhcmUgZWZmZWN0aXZlbHkgcHVibGlzaGVkLiBUaGlzIGlz IG5lY2Vzc2FyeSBmb3IKKyAqICJGT1IgQUxMIFRBQkxFUyIgcHVibGljYXRpb25zIHRoYXQgdXNl ICJFWENFUFQgVEFCTEUiIGZpbHRlcnMuCisgKgorICogVGhlIGZ1bmN0aW9uIHJlc29sdmVzIHRo ZSBzbWFsbGVzdCBwb3NzaWJsZSBzZXQgb2YgYW5jZXN0b3JzIHRoYXQgY292ZXIKKyAqIGFsbCBu b24tZXhjbHVkZWQgbGVhZiBwYXJ0aXRpb25zLgorICovCitEYXR1bQorcGdfZ2V0X3B1YmxpY2F0 aW9uX2VmZmVjdGl2ZV90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRl eHQgKmZ1bmNjdHg7CisJTGlzdAkgICAqcmVzdWx0czsKKworCWlmIChTUkZfSVNfRklSU1RDQUxM KCkpCisJeworCQlPaWQJCQlyb290X3JlbGlkID0gUEdfR0VUQVJHX09JRCgwKTsKKwkJQXJyYXlU eXBlICAqcHViX25hbWVzX2FycmF5ID0gUEdfR0VUQVJHX0FSUkFZVFlQRV9QKDEpOworCQlNZW1v cnlDb250ZXh0IG9sZGNvbnRleHQ7CisJCUxpc3QJICAgKnB1Yl9vaWRzID0gTklMOworCQlEYXR1 bQkgICAqcHViX2RhdHVtczsKKwkJYm9vbAkgICAqcHViX251bGxzOworCQlpbnQJCQlwdWJfY291 bnQ7CisJCVR1cGxlRGVzYwl0dXBkZXNjOworCQlMaXN0CSAgICpmaW5hbF9vdXRwdXQgPSBOSUw7 CisJCWJvb2wJCWhhc19jbGVhbl9hbGxfdGFibGVzX3B1YiA9IGZhbHNlOworCQlib29sCQloYXNf YW55X2V4Y2x1c2lvbiA9IGZhbHNlOworCQlMaXN0Q2VsbCAgICpsYzsKKworCQlmdW5jY3R4ID0g U1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisKKwkJZGVjb25zdHJ1Y3RfYXJyYXkocHViX25hbWVzX2Fy cmF5LCBURVhUT0lELCAtMSwgZmFsc2UsICdpJywKKwkJCQkJCSAgJnB1Yl9kYXR1bXMsICZwdWJf bnVsbHMsICZwdWJfY291bnQpOworCQlmb3IgKGludCBpID0gMDsgaSA8IHB1Yl9jb3VudDsgaSsr KQorCQl7CisJCQlpZiAoIXB1Yl9udWxsc1tpXSkKKwkJCXsKKwkJCQljaGFyCSAgICpwdWJuYW1l ID0gVGV4dERhdHVtR2V0Q1N0cmluZyhwdWJfZGF0dW1zW2ldKTsKKworCQkJCXB1Yl9vaWRzID0g bGFwcGVuZF9vaWQocHViX29pZHMsIGdldF9wdWJsaWNhdGlvbl9vaWQocHVibmFtZSwgZmFsc2Up KTsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIERldGVybWluZSBpZiB3ZSBjYW4gYXZvaWQgdGhl IGV4cGVuc2l2ZSBleHBhbnNpb24uIElmIGFueQorCQkgKiBwdWJsaWNhdGlvbiBpcyAnRk9SIEFM TCBUQUJMRVMnIHdpdGggbm8gZXhjZXB0aW9ucywgb3IgaWYKKwkJICogYWJzb2x1dGVseSBubyBl eGNlcHRpb25zIGV4aXN0IGFjcm9zcyBhbGwgcHVicywgdGhlIHJvb3QgaXMgdGhlCisJCSAqIHJl c3VsdC4KKwkJICovCisJCWZvcmVhY2gobGMsIHB1Yl9vaWRzKQorCQl7CisJCQlPaWQJCQlwdWJv aWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJCUhlYXBUdXBsZQlwdWJUdXA7CisJCQlGb3JtX3BnX3B1 YmxpY2F0aW9uIHB1YmZvcm07CisKKwkJCXB1YlR1cCA9IFNlYXJjaFN5c0NhY2hlMShQVUJMSUNB VElPTk9JRCwgT2JqZWN0SWRHZXREYXR1bShwdWJvaWQpKTsKKwkJCWlmICghSGVhcFR1cGxlSXNW YWxpZChwdWJUdXApKQorCQkJCWNvbnRpbnVlOworCisJCQlwdWJmb3JtID0gKEZvcm1fcGdfcHVi bGljYXRpb24pIEdFVFNUUlVDVChwdWJUdXApOworCisJCQkvKiBDaGVjayBmb3IgYW55IGV4Y2x1 c2lvbiBlbnRyaWVzIGluIHRoaXMgcHVibGljYXRpb24gKi8KKwkJCWlmIChwdWJsaWNhdGlvbl9o YXNfYW55X2V4Y2VwdGlvbihwdWJvaWQpKQorCQkJCWhhc19hbnlfZXhjbHVzaW9uID0gdHJ1ZTsK KwkJCWVsc2UgaWYgKHB1YmZvcm0tPnB1YmFsbHRhYmxlcykKKwkJCXsKKwkJCQkvKgorCQkJCSAq IEZvdW5kIGEgcHVibGljYXRpb24gdGhhdCBpbmNsdWRlcyBldmVyeXRoaW5nIHdpdGhvdXQKKwkJ CQkgKiBleGNlcHRpb24KKwkJCQkgKi8KKwkJCQloYXNfY2xlYW5fYWxsX3RhYmxlc19wdWIgPSB0 cnVlOworCQkJCVJlbGVhc2VTeXNDYWNoZShwdWJUdXApOworCQkJCWJyZWFrOworCQkJfQorCQkJ UmVsZWFzZVN5c0NhY2hlKHB1YlR1cCk7CisJCX0KKworCQkvKiBSZXR1cm4gcm9vdCBpbW1lZGlh dGVseSBpZiBubyBmaWx0ZXJpbmcgbG9naWMgaXMgbmVlZGVkICovCisJCWlmIChoYXNfY2xlYW5f YWxsX3RhYmxlc19wdWIgfHwgIWhhc19hbnlfZXhjbHVzaW9uKQorCQl7CisJCQlvbGRjb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5X2N0eCk7 CisJCQlmaW5hbF9vdXRwdXQgPSBsaXN0X21ha2UxX29pZChyb290X3JlbGlkKTsKKwkJCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxpc3QJ ICAgKmFsbF90YWJsZXM7CisJCQlMaXN0CSAgICphbGxfbGVhdmVzID0gTklMOworCQkJTGlzdAkg ICAqZXhjbHVkZWRfbGVhdmVzID0gTklMOworCQkJTGlzdAkgICAqYWxsb3dlZF9sZWF2ZXMgPSBO SUw7CisJCQlMaXN0CSAgICpjYW5kaWRhdGVfbGlzdCA9IE5JTDsKKworCQkJLyogR2V0IGFsbCB0 aGUgbGVhZiByZWxhdGlvbnMgKi8KKwkJCWFsbF9sZWF2ZXMgPSBHZXRQdWJQYXJ0aXRpb25PcHRp b25SZWxhdGlvbnMoYWxsX2xlYXZlcywKKwkJCQkJCQkJCQkJCQkJUFVCTElDQVRJT05fUEFSVF9M RUFGLAorCQkJCQkJCQkJCQkJCQlyb290X3JlbGlkKTsKKworCQkJLyoKKwkJCSAqIElkZW50aWZ5 IGNvbW1vbiBleGNsdWRlZCByZWxhdGlvbnMgKEluaGVyaXRhbmNlLWF3YXJlKS4gQSB0YWJsZQor CQkJICogaXMgZXhjbHVkZWQgb25seSBpZiBldmVyeSBwdWJsaWNhdGlvbiBleGNsdWRlcyBpdCwg ZWl0aGVyCisJCQkgKiBleHBsaWNpdGx5IG9yIGJ5IGV4Y2x1ZGluZyBvbmUgb2YgaXRzIGFuY2Vz dG9ycy4KKwkJCSAqLworCQkJZm9yZWFjaChsYywgYWxsX2xlYXZlcykKKwkJCXsKKwkJCQlPaWQJ CQljdXJyX3JlbGlkID0gbGZpcnN0X29pZChsYyk7CisJCQkJTGlzdENlbGwgICAqbHA7CisJCQkJ Ym9vbAkJaXNfY292ZXJlZF9ieV9hbnlfcHViID0gZmFsc2U7CisKKwkJCQkvKiBHZXQgdGhlIGlu aGVyaXRhbmNlIGNoYWluIGZvciB0aGUgY3VycmVudCB0YWJsZSBvbmNlICovCisJCQkJTGlzdAkg ICAqYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMoY3Vycl9yZWxpZCk7CisKKwkJ CQlmb3JlYWNoKGxwLCBwdWJfb2lkcykKKwkJCQl7CisJCQkJCU9pZAkJCXB1YmlkID0gbGZpcnN0 X29pZChscCk7CisJCQkJCUhlYXBUdXBsZSAgIHB1YlR1cDsKKwkJCQkJRm9ybV9wZ19wdWJsaWNh dGlvbiBwdWJmb3JtOworCQkJCQlib29sICAgICAgICBpc19hbGxfdGFibGVzOworCisJCQkJCXB1 YlR1cCA9IFNlYXJjaFN5c0NhY2hlMShQVUJMSUNBVElPTk9JRCwgT2JqZWN0SWRHZXREYXR1bShw dWJpZCkpOworCQkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHViVHVwKSkKKwkJCQkJCWNvbnRp bnVlOworCisJCQkJCXB1YmZvcm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbikgR0VUU1RSVUNUKHB1 YlR1cCk7CisJCQkJCWlzX2FsbF90YWJsZXMgPSBwdWJmb3JtLT5wdWJhbGx0YWJsZXM7CisJCQkJ CVJlbGVhc2VTeXNDYWNoZShwdWJUdXApOworCisJCQkJCWlmIChpc19hbGxfdGFibGVzKQorCQkJ CQl7CisJCQkJCQkvKiBGT1IgQUxMIFRBQkxFUzogQ2hlY2sgdGhhdCBpdCBpc24ndCBleGNsdWRl ZCAqLworCQkJCQkJYm9vbAkJaXNfZXhjbHVkZWQgPSBmYWxzZTsKKworCQkJCQkJaWYgKGlzX3Jl bGlkX3B1Ymxpc2hlZF9hc19leGNlcHQoY3Vycl9yZWxpZCwgcHViaWQpKQorCQkJCQkJCWlzX2V4 Y2x1ZGVkID0gdHJ1ZTsKKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlMaXN0Q2VsbCAgICps YTsKKworCQkJCQkJCWZvcmVhY2gobGEsIGFuY2VzdG9ycykKKwkJCQkJCQl7CisJCQkJCQkJCWlm IChpc19yZWxpZF9wdWJsaXNoZWRfYXNfZXhjZXB0KGxmaXJzdF9vaWQobGEpLCBwdWJpZCkpCisJ CQkJCQkJCXsKKwkJCQkJCQkJCWlzX2V4Y2x1ZGVkID0gdHJ1ZTsKKwkJCQkJCQkJCWJyZWFrOwor CQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQlpZiAoIWlzX2V4Y2x1ZGVkKQor CQkJCQkJeworCQkJCQkJCWlzX2NvdmVyZWRfYnlfYW55X3B1YiA9IHRydWU7CisJCQkJCQkJYnJl YWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJ ICogQ2hlY2sgaWYgdGhlIHRhYmxlIGl0c2VsZiBvciBpdHMgc2NoZW1hIGlzIGluCisJCQkJCQkg KiB0aGUgcHViLgorCQkJCQkJICovCisJCQkJCQlpZiAoaXNfcmVsaWRfcHVibGlzaGVkX2V4cGxp Y2l0bHkoY3Vycl9yZWxpZCwgcHViaWQpIHx8CisJCQkJCQkJaXNfc2NoZW1hX3B1Ymxpc2hlZChn ZXRfcmVsX25hbWVzcGFjZShjdXJyX3JlbGlkKSwgcHViaWQpKQorCQkJCQkJeworCQkJCQkJCWlz X2NvdmVyZWRfYnlfYW55X3B1YiA9IHRydWU7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7 CisJCQkJCQkJLyoKKwkJCQkJCQkgKiBDaGVjayBpZiBhbnkgYW5jZXN0b3Igb3IgYW4gYW5jZXN0 b3IncyBzY2hlbWEgaXMKKwkJCQkJCQkgKiBpbiB0aGUgcHViLgorCQkJCQkJCSAqLworCQkJCQkJ CUxpc3RDZWxsICAgKmxhOworCisJCQkJCQkJZm9yZWFjaChsYSwgYW5jZXN0b3JzKQorCQkJCQkJ CXsKKwkJCQkJCQkJT2lkCQkJYW5jX29pZCA9IGxmaXJzdF9vaWQobGEpOworCisJCQkJCQkJCWlm IChpc19yZWxpZF9wdWJsaXNoZWRfZXhwbGljaXRseShhbmNfb2lkLCBwdWJpZCkgfHwKKwkJCQkJ CQkJCWlzX3NjaGVtYV9wdWJsaXNoZWQoZ2V0X3JlbF9uYW1lc3BhY2UoYW5jX29pZCksIHB1Ymlk KSkKKwkJCQkJCQkJeworCQkJCQkJCQkJaXNfY292ZXJlZF9ieV9hbnlfcHViID0gdHJ1ZTsKKwkJ CQkJCQkJCWJyZWFrOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisKKwkJ CQkJLyoKKwkJCQkJICogSWYgYW55IHB1YmxpY2F0aW9uIGNvdmVycyB0aGlzIHRhYmxlLCB3ZSBj YW4gc3RvcAorCQkJCQkgKiBjaGVja2luZyBvdGhlcnMKKwkJCQkJICovCisJCQkJCWlmIChpc19j b3ZlcmVkX2J5X2FueV9wdWIpCisJCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAq IEluc3RlYWQgb2YgaWRlbnRpZnlpbmcgJ2V4Y2x1ZGVkJywgd2UgaWRlbnRpZnkgJ2FsbG93ZWQn LgorCQkJCSAqIElmIG5vIHB1YmxpY2F0aW9uIGNvdmVycyB0aGlzIHRhYmxlLCBpdCdzIGVmZmVj dGl2ZWx5CisJCQkJICogZXhjbHVkZWQuCisJCQkJICovCisJCQkJaWYgKCFpc19jb3ZlcmVkX2J5 X2FueV9wdWIpCisJCQkJCWV4Y2x1ZGVkX2xlYXZlcyA9IGxhcHBlbmRfb2lkKGV4Y2x1ZGVkX2xl YXZlcywgY3Vycl9yZWxpZCk7CisKKwkJCQlsaXN0X2ZyZWUoYW5jZXN0b3JzKTsKKwkJCX0KKwor CQkJLyogQ2FsY3VsYXRlIGFsbG93ZWQgbGVhdmVzIChUb3RhbCAtIEV4Y2x1ZGVkKSAqLworCQkJ Zm9yZWFjaChsYywgYWxsX2xlYXZlcykKKwkJCXsKKwkJCQlPaWQJCQljdXJyX3JlbGlkID0gbGZp cnN0X29pZChsYyk7CisKKwkJCQlpZiAoIWxpc3RfbWVtYmVyX29pZChleGNsdWRlZF9sZWF2ZXMs IGN1cnJfcmVsaWQpKQorCQkJCQlhbGxvd2VkX2xlYXZlcyA9IGxhcHBlbmRfb2lkKGFsbG93ZWRf bGVhdmVzLCBjdXJyX3JlbGlkKTsKKwkJCX0KKworCQkJLyogQm90dG9tLVVwIENvbGxhcHNlLiBD aGVjayBpZiBwYXJlbnRzIGNhbiByZXByZXNlbnQgY2hpbGRyZW4gKi8KKwkJCWFsbF90YWJsZXMg PSBmaW5kX2FsbF9pbmhlcml0b3JzKHJvb3RfcmVsaWQsIEFjY2Vzc1NoYXJlTG9jaywgTlVMTCk7 CisJCQljYW5kaWRhdGVfbGlzdCA9IGxpc3RfY29weShhbGxvd2VkX2xlYXZlcyk7CisJCQlmb3Jl YWNoKGxjLCBhbGxfdGFibGVzKQorCQkJeworCQkJCU9pZAkJCWN1cnJfcmVsaWQgPSBsZmlyc3Rf b2lkKGxjKTsKKworCQkJCWlmIChnZXRfcmVsX3JlbGtpbmQoY3Vycl9yZWxpZCkgPT0gUkVMS0lO RF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJCQl7CisJCQkJCUxpc3QJICAgKmJyYW5jaF90cmVlID0g ZmluZF9hbGxfaW5oZXJpdG9ycyhjdXJyX3JlbGlkLCBBY2Nlc3NTaGFyZUxvY2ssIE5VTEwpOwor CQkJCQlMaXN0CSAgICpicmFuY2hfbGVhdmVzID0gTklMOworCQkJCQlMaXN0Q2VsbCAgICpsY2I7 CisJCQkJCWJvb2wJCWFsbF9hbGxvd2VkID0gdHJ1ZTsKKworCQkJCQlmb3JlYWNoKGxjYiwgYnJh bmNoX3RyZWUpCisJCQkJCXsKKwkJCQkJCU9pZAkJCWJfb2lkID0gbGZpcnN0X29pZChsY2IpOwor CisJCQkJCQlpZiAoZ2V0X3JlbF9yZWxraW5kKGJfb2lkKSAhPSBSRUxLSU5EX1BBUlRJVElPTkVE X1RBQkxFKQorCQkJCQkJCWJyYW5jaF9sZWF2ZXMgPSBsYXBwZW5kX29pZChicmFuY2hfbGVhdmVz LCBiX29pZCk7CisJCQkJCX0KKworCQkJCQlpZiAobGlzdF9sZW5ndGgoYnJhbmNoX2xlYXZlcykg PT0gMCkKKwkJCQkJCWFsbF9hbGxvd2VkID0gZmFsc2U7CisJCQkJCWVsc2UKKwkJCQkJeworCQkJ CQkJZm9yZWFjaChsY2IsIGJyYW5jaF9sZWF2ZXMpCisJCQkJCQl7CisJCQkJCQkJaWYgKCFsaXN0 X21lbWJlcl9vaWQoYWxsb3dlZF9sZWF2ZXMsIGxmaXJzdF9vaWQobGNiKSkpCisJCQkJCQkJewor CQkJCQkJCQlhbGxfYWxsb3dlZCA9IGZhbHNlOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJ CQkJCQl9CisJCQkJCX0KKworCQkJCQlpZiAoYWxsX2FsbG93ZWQpCisJCQkJCQljYW5kaWRhdGVf bGlzdCA9IGxpc3RfYXBwZW5kX3VuaXF1ZV9vaWQoY2FuZGlkYXRlX2xpc3QsIGN1cnJfcmVsaWQp OworCQkJCX0KKwkJCX0KKworCQkJLyoKKwkJCSAqIERlZHVwbGljYXRlOiBPbmx5IGtlZXAgdGhl IGhpZ2hlc3QgbGV2ZWwgcmVwcmVzZW50YXRpdmUgb2YgYW55CisJCQkgKiBicmFuY2gKKwkJCSAq LworCQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9j YWxsX21lbW9yeV9jdHgpOworCQkJZm9yZWFjaChsYywgY2FuZGlkYXRlX2xpc3QpCisJCQl7CisJ CQkJT2lkCQkJY3Vycl9yZWxpZCA9IGxmaXJzdF9vaWQobGMpOworCQkJCU9pZAkJCXBhcmVudF9v aWQgPSBnZXRfcGFyZW50X29pZChjdXJyX3JlbGlkKTsKKworCQkJCWlmIChwYXJlbnRfb2lkID09 IEludmFsaWRPaWQgfHwgIWxpc3RfbWVtYmVyX29pZChjYW5kaWRhdGVfbGlzdCwgcGFyZW50X29p ZCkpCisJCQkJCWZpbmFsX291dHB1dCA9IGxhcHBlbmRfb2lkKGZpbmFsX291dHB1dCwgY3Vycl9y ZWxpZCk7CisJCQl9CisKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJ fQorCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlf Y2FsbF9tZW1vcnlfY3R4KTsKKwkJLyogQ29uc3RydWN0IGEgdHVwbGUgZGVzY3JpcHRvciBmb3Ig dGhlIHJlc3VsdCByb3dzLiAqLworCQl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2Mo Mik7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgInNjaGVt YW5hbWUiLAorCQkJCQkJICAgVEVYVE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50cnko dHVwZGVzYywgKEF0dHJOdW1iZXIpIDIsICJyZWxuYW1lIiwKKwkJCQkJCSAgIFRFWFRPSUQsIC0x LCAwKTsKKworCQlmdW5jY3R4LT50dXBsZV9kZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7 CisJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IGZpbmFsX291dHB1dDsKKworCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY29udGV4dCk7CisJfQorCisJLyogU1JGIFBlci1jYWxsIFJlc3VtZSAqLwor CWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCXJlc3VsdHMgPSAoTGlzdCAqKSBmdW5j Y3R4LT51c2VyX2ZjdHg7CisKKwlpZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwgbGlzdF9sZW5ndGgo cmVzdWx0cykpCisJeworCQlPaWQJCQljdXJyZW50X3JlbGlkID0gbGlzdF9udGhfb2lkKHJlc3Vs dHMsIChpbnQpIGZ1bmNjdHgtPmNhbGxfY250cik7CisJCUhlYXBUdXBsZQlyZXR0dXBsZTsKKwkJ RGF0dW0JCXZhbHVlc1syXTsKKwkJYm9vbAkJbnVsbHNbMl0gPSB7ZmFsc2UsIGZhbHNlfTsKKwor CQl2YWx1ZXNbMF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGdldF9uYW1lc3BhY2VfbmFtZShnZXRf cmVsX25hbWVzcGFjZShjdXJyZW50X3JlbGlkKSkpOworCQl2YWx1ZXNbMV0gPSBDU3RyaW5nR2V0 VGV4dERhdHVtKGdldF9yZWxfbmFtZShjdXJyZW50X3JlbGlkKSk7CisKKwkJcmV0dHVwbGUgPSBo ZWFwX2Zvcm1fdHVwbGUoZnVuY2N0eC0+dHVwbGVfZGVzYywgdmFsdWVzLCBudWxscyk7CisJCVNS Rl9SRVRVUk5fTkVYVChmdW5jY3R4LCBIZWFwVHVwbGVHZXREYXR1bShyZXR0dXBsZSkpOworCX0K KworCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKK30KKwogLyoKICAqIEdldCBpbmZvcm1hdGlv biBvZiB0aGUgdGFibGVzIGluIHRoZSBnaXZlbiBwdWJsaWNhdGlvbiBhcnJheS4KICAqCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKaW5kZXggMGIzYzg0OTliNDkuLjgwNGFl MmYzNDllIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRz LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC0yOTQw LDYgKzI5NDAsOCBAQCBmZXRjaF9yZWxhdGlvbl9saXN0KFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25u LCBMaXN0ICpwdWJsaWNhdGlvbnMpCiAJCQkJCQkgcHViX25hbWVzLmRhdGEpOwogCX0KIAorCWVs b2coTE9HLCAiZmV0Y2hfcmVsYXRpb25fbGlzdDogZXhlY3V0aW5nIHF1ZXJ5IHRvIGZldGNoIGVm ZmVjdGl2ZXJlbGF0aW9uczogXG4lcyIsCisJCSBjbWQuZGF0YSk7CiAJcGZyZWUocHViX25hbWVz LmRhdGEpOwogCiAJcmVzID0gd2FscmN2X2V4ZWMod3Jjb25uLCBjbWQuZGF0YSwgY29sdW1uX2Nv dW50LCB0YWJsZVJvdyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5 bmMuYwppbmRleCAxOWEzYzIxYTg2My4uYzQxZmU0MWVhN2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwpAQCAtNzE2LDIxICs3MTYsMjggQEAgY29weV9y ZWFkX2RhdGEodm9pZCAqb3V0YnVmLCBpbnQgbWlucmVhZCwgaW50IG1heHJlYWQpCiAgKiBtZXNz YWdlIHByb3ZpZGVzIGR1cmluZyByZXBsaWNhdGlvbi4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGFs c28gcmV0dXJucyAoYSkgdGhlIHJlbGF0aW9uIHF1YWxpZmljYXRpb25zIHRvIGJlIHVzZWQgaW4K LSAqIHRoZSBDT1BZIGNvbW1hbmQsIGFuZCAoYikgd2hldGhlciB0aGUgcmVtb3RlIHJlbGF0aW9u IGhhcyBwdWJsaXNoZWQgYW55Ci0gKiBnZW5lcmF0ZWQgY29sdW1uLgorICogdGhlIENPUFkgY29t bWFuZCwgKGIpIHdoZXRoZXIgdGhlIHJlbW90ZSByZWxhdGlvbiBoYXMgcHVibGlzaGVkIGFueQor ICogZ2VuZXJhdGVkIGNvbHVtbiwgYW5kIChjKSBjb21wdXRlcyB0aGUgZWZmZWN0aXZlIHNldCBv ZiByZWxhdGlvbnMgdG8gYmUgdXNlZAorICogYXMgQ09QWSBzb3VyY2VzIHdoZW4gZXhjbHVzaW9u cyBhcmUgcHJlc2VudC4gV2hlbiBubyBleGNsdXNpb25zIGV4aXN0LCB0aGUKKyAqIGxpc3QgcmVt YWlucyBlbXB0eSBhbmQgdGhlIHJvb3QgcmVsYXRpb24gaXMgdXNlZCBhcy1pcy4gV2hlbiBleGNs dXNpb25zCisgKiBleGlzdCwgdGhlIGxpc3QgY29udGFpbnMgbGVhZiByZWxhdGlvbnMgdGhhdCBh cmUgbm90IGV4Y2x1ZGVkIGFuZCBtdXN0IGJlCisgKiBjb21iaW5lZCB1c2luZyBVTklPTiBBTEwu CiAgKi8KIHN0YXRpYyB2b2lkCiBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1l LCBjaGFyICpyZWxuYW1lLCBMb2dpY2FsUmVwUmVsYXRpb24gKmxyZWwsCi0JCQkJCQlMaXN0ICoq cXVhbCwgYm9vbCAqZ2VuY29sX3B1Ymxpc2hlZCkKKwkJCQkJCUxpc3QgKipxdWFsLCBib29sICpn ZW5jb2xfcHVibGlzaGVkLAorCQkJCQkJTGlzdCAqKmVmZmVjdGl2ZV9yZWxhdGlvbnMpCiB7CiAJ V2FsUmN2RXhlY1Jlc3VsdCAqcmVzOwogCVN0cmluZ0luZm9EYXRhIGNtZDsKIAlUdXBsZVRhYmxl U2xvdCAqc2xvdDsKLQlPaWQJCQl0YWJsZVJvd1tdID0ge09JRE9JRCwgQ0hBUk9JRCwgQ0hBUk9J RH07CisJT2lkCQkJdGFibGVSb3dbXSA9IHtPSURPSUQsIENIQVJPSUQsIENIQVJPSUQsIEJPT0xP SUR9OwogCU9pZAkJCWF0dHJSb3dbXSA9IHtJTlQyT0lELCBURVhUT0lELCBPSURPSUQsIEJPT0xP SUQsIEJPT0xPSUR9OwogCU9pZAkJCXF1YWxSb3dbXSA9IHtURVhUT0lEfTsKKwlPaWQJCQlmaWx0 ZXJ0YWJsZVJvd1tdID0ge1RFWFRPSUQsIFRFWFRPSUR9OwogCWJvb2wJCWlzbnVsbDsKIAlpbnQJ CQluYXR0OworCWJvb2wJCWlzX3BhcnRpdGlvbjsKIAlTdHJpbmdJbmZvCXB1Yl9uYW1lcyA9IE5V TEw7CiAJQml0bWFwc2V0ICAqaW5jbHVkZWRfY29scyA9IE5VTEw7CiAJaW50CQkJc2VydmVyX3Zl cnNpb24gPSB3YWxyY3Zfc2VydmVyX3ZlcnNpb24oTG9nUmVwV29ya2VyV2FsUmN2Q29ubik7CkBA IC03NDAsNyArNzQ3LDcgQEAgZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8oY2hhciAqbnNwbmFtZSwg Y2hhciAqcmVsbmFtZSwgTG9naWNhbFJlcFJlbGF0aW9uICpscmVsLAogCiAJLyogRmlyc3QgZmV0 Y2ggT2lkIGFuZCByZXBsaWNhIGlkZW50aXR5LiAqLwogCWluaXRTdHJpbmdJbmZvKCZjbWQpOwot CWFwcGVuZFN0cmluZ0luZm8oJmNtZCwgIlNFTEVDVCBjLm9pZCwgYy5yZWxyZXBsaWRlbnQsIGMu cmVsa2luZCIKKwlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJTRUxFQ1QgYy5vaWQsIGMucmVscmVw bGlkZW50LCBjLnJlbGtpbmQsIGMucmVsaXNwYXJ0aXRpb24iCiAJCQkJCSAiICBGUk9NIHBnX2Nh dGFsb2cucGdfY2xhc3MgYyIKIAkJCQkJICIgIElOTkVSIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1l c3BhY2UgbiIKIAkJCQkJICIgICAgICAgIE9OIChjLnJlbG5hbWVzcGFjZSA9IG4ub2lkKSIKQEAg LTc3MCw2ICs3NzcsOCBAQCBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBj aGFyICpyZWxuYW1lLCBMb2dpY2FsUmVwUmVsYXRpb24gKmxyZWwsCiAJQXNzZXJ0KCFpc251bGwp OwogCWxyZWwtPnJlbGtpbmQgPSBEYXR1bUdldENoYXIoc2xvdF9nZXRhdHRyKHNsb3QsIDMsICZp c251bGwpKTsKIAlBc3NlcnQoIWlzbnVsbCk7CisJaXNfcGFydGl0aW9uID0gRGF0dW1HZXRCb29s KHNsb3RfZ2V0YXR0cihzbG90LCA0LCAmaXNudWxsKSk7CisJQXNzZXJ0KCFpc251bGwpOwogCiAJ RXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKIAl3YWxyY3ZfY2xlYXJfcmVzdWx0 KHJlcyk7CkBAIC05NTQsNiArOTYzLDc1IEBAIGZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGNoYXIg Km5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsIExvZ2ljYWxSZXBSZWxhdGlvbiAqbHJlbCwKIAogCXdh bHJjdl9jbGVhcl9yZXN1bHQocmVzKTsKIAorCWlmIChzZXJ2ZXJfdmVyc2lvbiA+PSAxOTAwMDAg JiYgIWlzX3BhcnRpdGlvbiAmJgorCQlscmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEUpCisJeworCQlyZXNldFN0cmluZ0luZm8oJmNtZCk7CisKKwkJLyoKKwkJICogVGhp cyBxdWVyeSByZWN1cnNpdmVseSB0cmF2ZXJzZXMgdGhlIGluaGVyaXRhbmNlIChwYXJ0aXRpb24p IHRyZWUKKwkJICogc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gdGFibGUgT0lEIGFuZCBkZXRlcm1p bmVzIHdoaWNoIGxlYWYKKwkJICogcmVsYXRpb25zIHNob3VsZCBiZSBpbmNsdWRlZCBmb3IgcmVw bGljYXRpb24uIEV4Y2x1c2lvbiBwcm9wYWdhdGVzCisJCSAqIGZyb20gcGFyZW50IHRvIGNoaWxk LCBhbmQgYSByZWxhdGlvbiBpcyBhbHNvIHRyZWF0ZWQgYXMgZXhjbHVkZWQgaWYKKwkJICogaXQg aXMgZXhwbGljaXRseSBtYXJrZWQgd2l0aCBwcmV4Y2VwdCA9IHRydWUgaW4gcGdfcHVibGljYXRp b25fcmVsCisJCSAqIGZvciB0aGUgc3BlY2lmaWVkIHB1YmxpY2F0aW9ucy4gVGhlIGZpbmFsIHJl c3VsdCByZXR1cm5zIG9ubHkKKwkJICogbm9uIGV4Y2x1ZGVkIGxlYWYgcmVsYXRpb25zLgorCQkg Ki8KKwkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiU0VMRUNUIHNjaGVtYW5hbWUsIHJlbG5hbWUg RlJPTSBwZ19nZXRfcHVibGljYXRpb25fZWZmZWN0aXZlX3RhYmxlcygldSwgQVJSQVlbJXNdKTsi LAorCQkJCQkJIGxyZWwtPnJlbW90ZWlkLAorCQkJCQkJIHB1Yl9uYW1lcy0+ZGF0YSk7CisKKwkJ ZWxvZyhMT0csICJFeGVjdXRpbmcgcXVlcnkgdG8gZ2V0IHRoZSB0YWJsZXM6XG4lcyIsIGNtZC5k YXRhKTsKKwkJcmVzID0gd2FscmN2X2V4ZWMoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwgY21kLmRh dGEsCisJCQkJCQkgIGxlbmd0aG9mKGZpbHRlcnRhYmxlUm93KSwgZmlsdGVydGFibGVSb3cpOwor CisJCWlmIChyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfVFVQTEVTKQorCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCisJCQkJCWVycm1z ZygiY291bGQgbm90IGdldCBub24gZXhjbHVkZWQgdGFibGUgbGlzdCBmb3IgdGFibGUgXCIlcy4l c1wiIGZyb20gcHVibGlzaGVyOiAlcyIsCisJCQkJCQkJbnNwbmFtZSwgcmVsbmFtZSwgcmVzLT5l cnIpKTsKKworCQkvKgorCQkgKiBTdG9yZSB0aGUgdGFibGVzIGFzIGEgbGlzdCBvZiBzY2hlbWFu YW1lIGFuZCB0YWJsZW5hbWUuCisJCSAqLworCQlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVT bG90KHJlcy0+dHVwbGVkZXNjLCAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKwkJd2hpbGUgKHR1cGxl c3RvcmVfZ2V0dHVwbGVzbG90KHJlcy0+dHVwbGVzdG9yZSwgdHJ1ZSwgZmFsc2UsIHNsb3QpKQor CQl7CisJCQlRdWFsaWZpZWRSZWxhdGlvbk5hbWUgKnJlbGluZm8gPSBwYWxsb2Nfb2JqZWN0KFF1 YWxpZmllZFJlbGF0aW9uTmFtZSk7CisKKwkJCXJlbGluZm8tPnNjaGVtYW5hbWUgPSBUZXh0RGF0 dW1HZXRDU3RyaW5nKHNsb3RfZ2V0YXR0cihzbG90LCAxLCAmaXNudWxsKSk7CisJCQlBc3NlcnQo IWlzbnVsbCk7CisJCQlyZWxpbmZvLT5yZWxuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhzbG90 X2dldGF0dHIoc2xvdCwgMiwgJmlzbnVsbCkpOworCQkJQXNzZXJ0KCFpc251bGwpOworCisJCQkq ZWZmZWN0aXZlX3JlbGF0aW9ucyA9IGxhcHBlbmQoKmVmZmVjdGl2ZV9yZWxhdGlvbnMsIHJlbGlu Zm8pOworCisJCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwkJfQorCisJCUV4ZWNEcm9wU2luZ2xl VHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisKKwkJLyoKKwkJICogSWYgdGhlcmUgaXMgZXhhY3RseSBv bmUgaXRlbSBpbiB0aGUgZWZmZWN0aXZlX3JlbGF0aW9ucyBsaXN0IGFuZCBpdAorCQkgKiBlcXVh bHMgdGhlIHRhYmxlIGJlaW5nIHByb2Nlc3NlZCwgdGhhdCBtZWFucyBubyBhY3R1YWwgZXhjbHVz aW9uCisJCSAqIG9jY3VycmVkLgorCQkgKi8KKwkJaWYgKGxpc3RfbGVuZ3RoKCplZmZlY3RpdmVf cmVsYXRpb25zKSA9PSAxKQorCQl7CisJCQlRdWFsaWZpZWRSZWxhdGlvbk5hbWUgKnJlbGluZm87 CisKKwkJCXJlbGluZm8gPSBsaW5pdGlhbCgqZWZmZWN0aXZlX3JlbGF0aW9ucyk7CisJCQlpZiAo c3RyY21wKG5zcG5hbWUsIHJlbGluZm8tPnNjaGVtYW5hbWUpID09IDAgJiYKKwkJCQlzdHJjbXAo cmVsbmFtZSwgcmVsaW5mby0+cmVsbmFtZSkgPT0gMCkKKwkJCXsKKwkJCQlwZnJlZShyZWxpbmZv LT5zY2hlbWFuYW1lKTsKKwkJCQlwZnJlZShyZWxpbmZvLT5yZWxuYW1lKTsKKwkJCQlsaXN0X2Zy ZWVfZGVlcCgqZWZmZWN0aXZlX3JlbGF0aW9ucyk7CisJCQkJKmVmZmVjdGl2ZV9yZWxhdGlvbnMg PSBOSUw7CisJCQl9CisJCX0KKwl9CisKIAkvKgogCSAqIEdldCByZWxhdGlvbidzIHJvdyBmaWx0 ZXIgZXhwcmVzc2lvbnMuIERJU1RJTkNUIGF2b2lkcyB0aGUgc2FtZQogCSAqIGV4cHJlc3Npb24g b2YgYSB0YWJsZSBpbiBtdWx0aXBsZSBwdWJsaWNhdGlvbnMgZnJvbSBiZWluZyBpbmNsdWRlZApA QCAtMTA0Myw2ICsxMTIxLDcgQEAgY29weV90YWJsZShSZWxhdGlvbiByZWwpCiAJTG9naWNhbFJl cFJlbE1hcEVudHJ5ICpyZWxtYXBlbnRyeTsKIAlMb2dpY2FsUmVwUmVsYXRpb24gbHJlbDsKIAlM aXN0CSAgICpxdWFsID0gTklMOworCUxpc3QJICAgKmVmZmVjdGl2ZV9yZWxhdGlvbnMgPSBOSUw7 CiAJV2FsUmN2RXhlY1Jlc3VsdCAqcmVzOwogCVN0cmluZ0luZm9EYXRhIGNtZDsKIAlDb3B5RnJv bVN0YXRlIGNzdGF0ZTsKQEAgLTEwNTQsNyArMTEzMyw3IEBAIGNvcHlfdGFibGUoUmVsYXRpb24g cmVsKQogCS8qIEdldCB0aGUgcHVibGlzaGVyIHJlbGF0aW9uIGluZm8uICovCiAJZmV0Y2hfcmVt b3RlX3RhYmxlX2luZm8oZ2V0X25hbWVzcGFjZV9uYW1lKFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJl bCkpLAogCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksICZscmVsLCAmcXVhbCwK LQkJCQkJCQkmZ2VuY29sX3B1Ymxpc2hlZCk7CisJCQkJCQkJJmdlbmNvbF9wdWJsaXNoZWQsICZl ZmZlY3RpdmVfcmVsYXRpb25zKTsKIAogCS8qIFB1dCB0aGUgcmVsYXRpb24gaW50byByZWxtYXAu ICovCiAJbG9naWNhbHJlcF9yZWxtYXBfdXBkYXRlKCZscmVsKTsKQEAgLTEwNjYsMTIgKzExNDUs NjQgQEAgY29weV90YWJsZShSZWxhdGlvbiByZWwpCiAJLyogU3RhcnQgY29weSBvbiB0aGUgcHVi bGlzaGVyLiAqLwogCWluaXRTdHJpbmdJbmZvKCZjbWQpOwogCisKKwlpZiAoZWZmZWN0aXZlX3Jl bGF0aW9ucyAmJiBsaXN0X2xlbmd0aChlZmZlY3RpdmVfcmVsYXRpb25zKSkKKwl7CisJCWJvb2wg Zmlyc3QgPSB0cnVlOworCisJCS8qCisJCSAqIEJ1aWxkIGEgc2luZ2xlIENPUFkgY29tbWFuZCB0 byBzeW5jaHJvbml6ZSBhbGwgcmVzb2x2ZWQgcmVsYXRpb25zCisJCSAqIGludG8gdGhlIHJvb3Qg dGFibGUuCisJCSAqCisJCSAqIFRoZSBhcnJheSAnZWZmZWN0aXZlX3JlbGF0aW9ucycgY29udGFp bnMgdGhlIGxlYWYgdGFibGVzIG9mCisJCSAqIHBhcnRpdGlvbiBoaWVyYXJjaGllcywgd2l0aCBl eGNsdWRlZCBzdWJ0cmVlcyByZW1vdmVkIGFjY29yZGluZyB0bworCQkgKiB0aGUgRVhDRVBUIGNs YXVzZXMuIFRoaXMgYXBwbGllcyBvbmx5IHdoZW4KKwkJICogJ3B1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290JyBpcyBlbmFibGVkLCBzaW5jZSB0aGUgaW5pdGlhbCBzeW5jIG11c3QKKwkJICogcm91 dGUgYWxsIGNoYW5nZXMgdG8gdGhlIHJvb3QgdGFibGUuCisJCSAqCisJCSAqIFdlIGNvbnN0cnVj dCBhIFVOSU9OIEFMTCBxdWVyeSB0aGF0IGNvbWJpbmVzIGRhdGEgZnJvbSBtdWx0aXBsZSBsZWFm CisJCSAqIHJlbGF0aW9ucyBpbnRvIG9uZSBzdWItQ09QWSBzdGF0ZW1lbnQsIGVuc3VyaW5nIGFs bCByb3dzIGFyZSBjb3BpZWQKKwkJICogY29uc2lzdGVudGx5IGludG8gdGhlIHJvb3QgdGFibGUu CisJCSAqLworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICJDT1BZIChcbiIpOworCQlm b3JlYWNoX3B0cihRdWFsaWZpZWRSZWxhdGlvbk5hbWUsIHJlbGluZm8sIGVmZmVjdGl2ZV9yZWxh dGlvbnMpCisJCXsKKwkJCWlmICghZmlyc3QpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm Y21kLCAiVU5JT04gQUxMXG4iKTsKKworCQkJZmlyc3QgPSBmYWxzZTsKKworCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmY21kLCAiU0VMRUNUICIpOworCisJCQkvKiBJZiB0aGUgdGFibGUgaGFz IGNvbHVtbnMsIHRoZW4gc3BlY2lmeSB0aGUgY29sdW1ucyAqLworCQkJaWYgKGxyZWwubmF0dHMp CisJCQl7CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBscmVsLm5hdHRzOyBpKyspCisJCQkJewor CQkJCQlpZiAoaSA+IDApCisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIsICIp OworCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgcXVvdGVfaWRlbnRpZmllcihs cmVsLmF0dG5hbWVzW2ldKSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmNtZCwgIiAqICIpOworCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICIg RlJPTSAgJXNcbiIsCisJCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKHJlbGluZm8t PnNjaGVtYW5hbWUsCisJCQkJCQkJCQkJCQkJCXJlbGluZm8tPnJlbG5hbWUpKTsKKwkJfQorCisJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIilcbiIpOworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZjbWQsICJUTyBTVERPVVQiKTsKKwl9CiAJLyogUmVndWxhciBvciBwYXJ0aXRpb25l ZCB0YWJsZSB3aXRoIG5vIHJvdyBmaWx0ZXIgb3IgZ2VuZXJhdGVkIGNvbHVtbnMgKi8KLQlpZiAo KGxyZWwucmVsa2luZCA9PSBSRUxLSU5EX1JFTEFUSU9OIHx8IGxyZWwucmVsa2luZCA9PSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKQotCQkmJiBxdWFsID09IE5JTCAmJiAhZ2VuY29sX3B1Ymxp c2hlZCkKKwllbHNlIGlmICgobHJlbC5yZWxraW5kID09IFJFTEtJTkRfUkVMQVRJT04gfHwKKwkJ CSAgbHJlbC5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpICYmCisJCQkgcXVh bCA9PSBOSUwgJiYgIWdlbmNvbF9wdWJsaXNoZWQpCiAJewogCQlhcHBlbmRTdHJpbmdJbmZvKCZj bWQsICJDT1BZICVzIiwKLQkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihscmVsLm5z cG5hbWUsIGxyZWwucmVsbmFtZSkpOworCQkJCQkJcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIo bHJlbC5uc3BuYW1lLCBscmVsLnJlbG5hbWUpKTsKIAogCQkvKiBJZiB0aGUgdGFibGUgaGFzIGNv bHVtbnMsIHRoZW4gc3BlY2lmeSB0aGUgY29sdW1ucyAqLwogCQlpZiAobHJlbC5uYXR0cykKQEAg LTExNTcsNiArMTI4OCw3IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVsKQogCX0KIAogCXJlcyA9 IHdhbHJjdl9leGVjKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sIGNtZC5kYXRhLCAwLCBOVUxMKTsK KwllbG9nKExPRywgIlRhYmxlc3luYyB3b3JrZXI6IEV4ZWN1dGluZyBxdWVyeSB0byBnZXQgdGhl IGluaXRpYWwgc3luYyBkYXRhOlxuJXMiLCBjbWQuZGF0YSk7CiAJcGZyZWUoY21kLmRhdGEpOwog CWlmIChyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfQ09QWV9PVVQpCiAJCWVyZXBvcnQoRVJST1Is CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwppbmRleCAwNTgw MjQ4MmMxMC4uZTAzYTY3OThlYzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRw dXQvcGdvdXRwdXQuYwpAQCAtMjIwOCwxMyArMjIwOCwxMCBAQCBnZXRfcmVsX3N5bmNfZW50cnko UEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCSAqIElmIHRoaXMgaXMg YSBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlvbiBhbmQgaXQgaGFzIGFuIEVYQ0VQVAogCQkJICog VEFCTEUgbGlzdDoKIAkJCSAqCi0JCQkgKiAxLiBJZiBwdWJ2aWFyb290IGlzIHNldCBhbmQgdGhl IHJlbGF0aW9uIGlzIGEgcGFydGl0aW9uLCBjaGVjawotCQkJICogd2hldGhlciB0aGUgcGFydGl0 aW9uIHJvb3QgaXMgaW5jbHVkZWQgaW4gdGhlIEVYQ0VQVCBUQUJMRQotCQkJICogbGlzdC4gSWYg c28sIGRvIG5vdCBwdWJsaXNoIHRoZSBjaGFuZ2UuCi0JCQkgKgotCQkJICogMi4gSWYgcHVidmlh cm9vdCBpcyBub3Qgc2V0LCBjaGVjayB3aGV0aGVyIHRoZSByZWxhdGlvbiBpdHNlbGYKLQkJCSAq IGlzIGluY2x1ZGVkIGluIHRoZSBFWENFUFQgVEFCTEUgbGlzdC4gSWYgc28sIGRvIG5vdCBwdWJs aXNoIHRoZQotCQkJICogY2hhbmdlLgorCQkJICogSWYgdGhlIHJlbGF0aW9uIGlzIGEgcGFydGl0 aW9uLCBjaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50CisJCQkgKiByZWxhdGlvbiBvciBhbnkgb2Yg dGhlIGFuY2VzdG9ycyBpcyBpbmNsdWRlZCBpbiB0aGUgRVhDRVBUIFRBQkxFCisJCQkgKiBsaXN0 LiBJZiBzbywgZG8gbm90IHB1Ymxpc2ggdGhlIGNoYW5nZS4gVGhpcyBpcyBkb25lIGlycmVzcGVj dGl2ZQorCQkJICogb2YgcHVidmlhcm9vdCBzZXR0aW5nLgogCQkJICoKIAkJCSAqIFRoaXMgaXMg YWNoaWV2ZWQgYnkga2VlcGluZyB0aGUgdmFyaWFibGUgInB1Ymxpc2giIHNldCB0bwogCQkJICog ZmFsc2UuIEFuZCBldmVudHVhbGx5LCBlbnRyeS0+cHViYWN0aW9ucyB3aWxsIHJlbWFpbiBhbGwg ZmFsc2UKQEAgLTIyMjQsMjYgKzIyMjEsMjQgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0 RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQl7CiAJCQkJTGlzdAkgICAqZXhjZXB0 cHViaWRzID0gTklMOwogCi0JCQkJaWYgKHB1Yi0+cHVidmlhcm9vdCAmJiBhbV9wYXJ0aXRpb24p CisJCQkJaWYgKGFtX3BhcnRpdGlvbikKIAkJCQl7CiAJCQkJCUxpc3QJICAgKmFuY2VzdG9ycyA9 IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbGlkKTsKIAotCQkJCQlwdWJfcmVsaWQgPSBsbGFz dF9vaWQoYW5jZXN0b3JzKTsKLQkJCQkJYW5jZXN0b3JfbGV2ZWwgPSBsaXN0X2xlbmd0aChhbmNl c3RvcnMpOworCQkJCQlmb3JlYWNoX29pZChhbmNlc3RvciwgYW5jZXN0b3JzKQorCQkJCQkJR2V0 UmVsYXRpb25QdWJsaWNhdGlvbnMoYW5jZXN0b3IsIE5VTEwsICZleGNlcHRwdWJpZHMpOworCisJ CQkJCWlmIChwdWItPnB1YnZpYXJvb3QpCisJCQkJCXsKKwkJCQkJCXB1Yl9yZWxpZCA9IGxsYXN0 X29pZChhbmNlc3RvcnMpOworCQkJCQkJYW5jZXN0b3JfbGV2ZWwgPSBsaXN0X2xlbmd0aChhbmNl c3RvcnMpOworCQkJCQl9CiAJCQkJfQogCiAJCQkJR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMocHVi X3JlbGlkLCBOVUxMLCAmZXhjZXB0cHViaWRzKTsKIAogCQkJCWlmICghbGlzdF9tZW1iZXJfb2lk KGV4Y2VwdHB1YmlkcywgcHViLT5vaWQpKQogCQkJCQlwdWJsaXNoID0gdHJ1ZTsKLQkJCQllbHNl Ci0JCQkJewotCQkJCQkvKiBTYW5pdHkgY2hlY2sgKi8KLQkJCQkJQXNzZXJ0KGVudHJ5LT5wdWJh Y3Rpb25zLnB1Ymluc2VydCA9PSBmYWxzZSAmJgotCQkJCQkJICAgZW50cnktPnB1YmFjdGlvbnMu cHVidXBkYXRlID09IGZhbHNlICYmCi0JCQkJCQkgICBlbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxl dGUgPT0gZmFsc2UgJiYKLQkJCQkJCSAgIGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID09 IGZhbHNlKTsKLQkJCQl9CiAKIAkJCQlsaXN0X2ZyZWUoZXhjZXB0cHViaWRzKTsKIAkJCX0KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDVlNWUzM2Y2NGZjLi42YjU0YzI5MGJkMyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMjMzNiw2ICsxMjMzNiwxMyBAQAogICBwcm9uYW1lID0+ ICdwZ19yZWxhdGlvbl9pc19wdWJsaXNoYWJsZScsIHByb3ZvbGF0aWxlID0+ICdzJywKICAgcHJv cmV0dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdyZWdjbGFzcycsCiAgIHByb3NyYyA9 PiAncGdfcmVsYXRpb25faXNfcHVibGlzaGFibGUnIH0sCit7IG9pZCA9PiAnOTAwMicsIGRlc2Ny ID0+ICdnZXQgZWZmZWN0aXZlIHRhYmxlcyBmb3IgcHVibGljYXRpb24nLAorICBwcm9uYW1lID0+ ICdwZ19nZXRfcHVibGljYXRpb25fZWZmZWN0aXZlX3RhYmxlcycsICBwcm9yb3dzID0+ICcxMDAw JywKKyAgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLAorICBwcm9yZXR0eXBl ID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAnb2lkIF90ZXh0JywKKyAgcHJvYWxsYXJndHlw ZXMgPT4gJ3tvaWQsX3RleHQsdGV4dCx0ZXh0fScsIHByb2FyZ21vZGVzID0+ICd7aSxpLG8sb30n LAorICBwcm9hcmduYW1lcyA9PiAne3Jvb3RfcmVsaWQscHViX25hbWVzLHNjaGVtYW5hbWUscmVs bmFtZX0nLAorICBwcm9zcmMgPT4gJ3BnX2dldF9wdWJsaWNhdGlvbl9lZmZlY3RpdmVfdGFibGVz JyB9LAogCiAjIHJscwogeyBvaWQgPT4gJzMyOTgnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 b3JrZXJfaW50ZXJuYWwuaAppbmRleCBjMTI4NWZkZDFiYy4uY2FiOTc1MzEyNzYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCisrKyBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCkBAIC0yMzQsNiArMjM0LDEyIEBA IHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvCiAJUGFyYWxsZWxBcHBseVdv cmtlclNoYXJlZCAqc2hhcmVkOwogfSBQYXJhbGxlbEFwcGx5V29ya2VySW5mbzsKIAordHlwZWRl ZiBzdHJ1Y3QgUXVhbGlmaWVkUmVsYXRpb25OYW1lCit7CisJY2hhcgkgICAqc2NoZW1hbmFtZTsK KwljaGFyCSAgICpyZWxuYW1lOworfSBRdWFsaWZpZWRSZWxhdGlvbk5hbWU7CisKIC8qIE1haW4g bWVtb3J5IGNvbnRleHQgZm9yIGFwcGx5IHdvcmtlci4gUGVybWFuZW50IGR1cmluZyB3b3JrZXIg bGlmZXRpbWUuICovCiBleHRlcm4gUEdETExJTVBPUlQgTWVtb3J5Q29udGV4dCBBcHBseUNvbnRl eHQ7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzN19yZXBfY2hhbmdl c19leGNlcHRfdGFibGUucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzdfcmVwX2NoYW5n ZXNfZXhjZXB0X3RhYmxlLnBsCmluZGV4IDk1OTA0ZGRkMDA1Li44MGI2YTcwZmNhOCAxMDA2NDQK LS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM3X3JlcF9jaGFuZ2VzX2V4Y2VwdF90YWJs ZS5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzdfcmVwX2NoYW5nZXNfZXhjZXB0 X3RhYmxlLnBsCkBAIC04OCw4ICs4OCwxMSBAQCAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgU1VCU0NSSVBUSU9OIHRhcF9zdWJfc2NoZW1hIik7CiAkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgKIAkncG9zdGdyZXMnLCBxcSgKIAlDUkVBVEUgVEFCTEUgc2No MS50MShhIGludCkgUEFSVElUSU9OIEJZIFJBTkdFKGEpOwotCUNSRUFURSBUQUJMRSBzY2gxLnBh cnQxIFBBUlRJVElPTiBPRiBzY2gxLnQxIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDUpOwotCUNS RUFURSBUQUJMRSBzY2gxLnBhcnQyIFBBUlRJVElPTiBPRiBzY2gxLnQxIEZPUiBWQUxVRVMgRlJP TSAoNikgVE8gKDEwKTsKKwlDUkVBVEUgVEFCTEUgc2NoMS5wYXJ0MSBQQVJUSVRJT04gT0Ygc2No MS50MSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworCUNSRUFURSBUQUJMRSBzY2gxLnBh cnQyKGEgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoYSk7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFy dDJfMSBQQVJUSVRJT04gT0Ygc2NoMS5wYXJ0MiBGT1IgVkFMVUVTIEZST00gKDEwMSkgVE8gKDE1 MCk7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFydDJfMiBQQVJUSVRJT04gT0Ygc2NoMS5wYXJ0MiBG T1IgVkFMVUVTIEZST00gKDE1MSkgVE8gKDIwMCk7CisJQUxURVIgVEFCTEUgc2NoMS50MSBBVFRB Q0ggUEFSVElUSU9OIHNjaDEucGFydDIgRk9SIFZBTFVFUyBGUk9NICgxMDEpIFRPICgyMDApOwog KSk7CiAKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKQEAgLTk3LDE0MiArMTAwLDE0OSBA QCAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCiAJQ1JFQVRFIFRBQkxFIHNjaDEudDEoYSBp bnQpOwogCUNSRUFURSBUQUJMRSBzY2gxLnBhcnQxKGEgaW50KTsKIAlDUkVBVEUgVEFCTEUgc2No MS5wYXJ0MihhIGludCk7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFydDJfMShhIGludCk7CisJQ1JF QVRFIFRBQkxFIHNjaDEucGFydDJfMihhIGludCk7CiApKTsKIAotIyBFWENFUFQgVEFCTEUgKHNj aDEucGFydDEpIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZQotIyBFeGNs dWRpbmcgYSBwYXJ0aXRpb24gd2hpbGUgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxz ZSBwcmV2ZW50cwotIyByZXBsaWNhdGlvbiBvZiByb3dzIGluc2VydGVkIGludG8gdGhlIHBhcnRp dGlvbmVkIHRhYmxlIGZvciB0aGF0IHBhcnRpY3VsYXIKLSMgcGFydGl0aW9uLgorIyBFeGNsdWRp bmcgdGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgZXhjbHVkZXMgYWxsIGl0cyBwYXJ0aXRpb25z IGFzIHdlbGwgd2hlbgorIyBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlLgogJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCiAJJ3Bvc3RncmVzJywgcXEoCi0JQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRhcF9wdWJfcGFydCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjaDEucGFy dDEpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UpOwotCUlOU0VSVCBJ TlRPIHNjaDEudDEgVkFMVUVTICgxKSwgKDYpOworCUNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHVi X3BhcnQgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChzY2gxLnQxKSBXSVRIIChwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlKTsKKwlJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVF UyAoMSksICgxMDEpLCAoMTUxKTsKICkpOwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCiAJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9wYXJ0IENPTk5FQ1RJT04g JyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0IgogKTsKICRub2Rl X3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1Ymxpc2hlciwg J3RhcF9zdWJfcGFydCcpOwogJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK LQkiSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDIpLCAoNyk7Iik7CisJIlNFTEVDVCBzbG90 X25hbWUgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UoJ3Rlc3Rfc2xvdCcsIHBnX2N1 cnJlbnRfd2FsX2xzbigpKTsiCispOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDIpLCAoMTAyKSwgKDE1MikiKTsK KworIyBWZXJpZnkgdGhhdCBkYXRhIGluc2VydGVkIHRvIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBp cyBub3QgcHVibGlzaGVkIHdoZW4gaXQgaXMKKyMgZXhjbHVkZWQgd2l0aCBwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCA9IHRydWUuCiskcmVzdWx0ID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGNvdW50KCopID0gMCBGUk9NIHBnX2xvZ2ljYWxfc2xv dF9nZXRfYmluYXJ5X2NoYW5nZXMoJ3Rlc3Rfc2xvdCcsIE5VTEwsIE5VTEwsICdwcm90b192ZXJz aW9uJywgJzEnLCAncHVibGljYXRpb25fbmFtZXMnLCAndGFwX3B1Yl9wYXJ0JykiCispOwogJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKIAorIyBDaGVj ayB0aGF0IG5vIHJvd3MgYXJlIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlcgogJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gx LnQxIik7Ci1pcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiBwYXJ0aXRpb25lZCB0YWJs ZScpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gcm9vdCB0YWJsZScpOwogCiAk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg KiBGUk9NIHNjaDEucGFydDEiKTsKLWlzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIGV4 Y2x1ZGVkIHBhcnRpdGlvbicpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gdGFi bGUgc2NoMS5wYXJ0MScpOwogCiAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDIiKTsKLWlzKCAkcmVzdWx0LCBx cSg2Ci03KSwgJ2NoZWNrIHJvd3Mgb24gb3RoZXIgcGFydGl0aW9uJyk7CitpcygkcmVzdWx0LCBx cSgpLCAnY2hlY2sgcm93cyBvbiB0YWJsZSBzY2gxLnBhcnQyJyk7CisKKyRyZXN1bHQgPQorICAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2No MS5wYXJ0Ml8xIik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0YWJsZSBzY2gx LnBhcnQyXzEnKTsKKworJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQyXzIiKTsKK2lzKCRyZXN1bHQsIHFx KCksICdjaGVjayByb3dzIG9uIHRhYmxlIHNjaDEucGFydDJfMicpOwogCi0kbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgc2NoMS50MSIpOwotJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9wYXJ0 Iik7CiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJMSUNB VElPTiB0YXBfcHViX3BhcnQ7Iik7CiAKLSMgRVhDRVBUIFRBQkxFIChzY2gxLnQxKSB3aXRoIHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UKLSMgRXhjbHVkaW5nIHRoZSBwYXJ0aXRp b25lZCB0YWJsZSBzdGlsbCBhbGxvd3Mgcm93cyBpbnNlcnRlZCBpbnRvIHRoZQotIyBwYXJ0aXRp b25lZCB0YWJsZSB0byBiZSByZXBsaWNhdGVkIHZpYSBpdHMgcGFydGl0aW9ucy4KKyMgRXhjbHVk aW5nIHRoZSByb290IHBhcnRpdGlvbmVkIHRhYmxlIGV4Y2x1ZGVzIGFsbCBpdHMgcGFydGl0aW9u cyBhcyB3ZWxsIHdoZW4KKyMgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlLgogJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCiAJJ3Bvc3RncmVzJywgcXEoCi0JQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRhcF9wdWJfcGFydCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjaDEudDEp IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UpOwotCUlOU0VSVCBJTlRP IHNjaDEudDEgVkFMVUVTICgxKSwgKDYpOworCUNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3Bh cnQgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChzY2gxLnQxKSBXSVRIIChwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOwogKSk7CiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViX3BhcnQgQ09OTkVD VElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQiCiApOwog JG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcHVibGlz aGVyLCAndGFwX3N1Yl9wYXJ0Jyk7CiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAotCSJJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVFUyAoMiksICg3KTsiKTsKKwkiU0VMRUNU IHNsb3RfbmFtZSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RfYWR2YW5jZSgndGVzdF9zbG90Jywg cGdfY3VycmVudF93YWxfbHNuKCkpOyIKKyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVFUyAoMyksICgxMDMpLCAoMTUz KTsiKTsKKworIyBWZXJpZnkgdGhhdCBkYXRhIGluc2VydGVkIHRvIHRoZSBwYXJ0aXRpb25lZCB0 YWJsZSBpcyBub3QgcHVibGlzaGVkIHdoZW4gaXQgaXMKKyMgZXhjbHVkZWQgd2l0aCBwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUuCiskcmVzdWx0ID0gJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGNvdW50KCopID0gMCBGUk9NIHBnX2xvZ2lj YWxfc2xvdF9nZXRfYmluYXJ5X2NoYW5nZXMoJ3Rlc3Rfc2xvdCcsIE5VTEwsIE5VTEwsICdwcm90 b192ZXJzaW9uJywgJzEnLCAncHVibGljYXRpb25fbmFtZXMnLCAndGFwX3B1Yl9wYXJ0JykiCisp OwogJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKIAor IyBDaGVjayB0aGF0IG5vIHJvd3MgYXJlIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlcgogJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJP TSBzY2gxLnQxIik7Ci1pcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiBwYXJ0aXRpb25l ZCB0YWJsZScpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gcm9vdCB0YWJsZScp OwogCiAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgKiBGUk9NIHNjaDEucGFydDEiKTsKLWlzKCAkcmVzdWx0LCBxcSgxCi0yKSwgJ2NoZWNr IHJvd3Mgb24gZmlyc3QgcGFydGl0aW9uJyk7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93 cyBvbiB0YWJsZSBzY2gxLnBhcnQxJyk7CiAKICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS5wYXJ0MiIpOwotaXMoICRy ZXN1bHQsIHFxKDYKLTcpLCAnY2hlY2sgcm93cyBvbiBzZWNvbmQgcGFydGl0aW9uJyk7Citpcygk cmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0YWJsZSBzY2gxLnBhcnQyJyk7CisKKyRyZXN1 bHQgPQorICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAq IEZST00gc2NoMS5wYXJ0Ml8xIik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0 YWJsZSBzY2gxLnBhcnQyXzEnKTsKKworJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQyXzIiKTsKK2lzKCRy ZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHRhYmxlIHNjaDEucGFydDJfMicpOwogCi0kbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVFJVTkNBVEUgc2NoMS50MSIpOwot JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBTVUJTQ1JJUFRJT04gdGFw X3N1Yl9wYXJ0Iik7CiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQ7Iik7CiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAogCSJTRUxFQ1Qgc2xvdF9uYW1lIEZST00gcGdfcmVwbGljYXRpb25fc2xv dF9hZHZhbmNlKCd0ZXN0X3Nsb3QnLCBwZ19jdXJyZW50X3dhbF9sc24oKSk7IgogKTsKIAotIyBF WENFUFQgVEFCTEUgKHNjaDEudDEpIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0 cnVlCi0jIFdoZW4gdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGlzIGV4Y2x1ZGVkIGFuZCBwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdCBpcyB0cnVlLAotIyBubyByb3dzIGZyb20gdGhlIHRhYmxlIG9y IGl0cyBwYXJ0aXRpb25zIGFyZSByZXBsaWNhdGVkLgorIyBFeGNsdWRpbmcgb25lIG9mIHRoZSBj aGlsZCBwYXJ0aXRpb24gdGFibGUgd2l0aAorIyBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9 IHRydWUgc2hvdWxkIHJlcGxpY2F0ZSB0aGUgb3RoZXIgcGFydGl0aW9ucy4KICRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKAogCSdwb3N0Z3JlcycsIHFxKAotCUNSRUFURSBQVUJMSUNBVElPTiB0 YXBfcHViX3BhcnQgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChzY2gxLnQxKSBXSVRIIChw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7Ci0JSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMg KDEpLCAoNik7CisJVFJVTkNBVEUgc2NoMS50MTsKKwlJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVF UyAoMyksICgxMDMpLCAoMTUzKTsKKwlDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0IEZP UiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoc2NoMS5wYXJ0MikgV0lUSCAocHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKKykpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KAorCSdwb3N0Z3JlcycsIHFxKAorCVRSVU5DQVRFIHNjaDEudDE7CisJQ1JFQVRFIFNVQlNDUklQ VElPTiB0YXBfc3ViX3BhcnQgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNB VElPTiB0YXBfcHViX3BhcnQ7CiApKTsKLSRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAotCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWJfcGFydCBDT05ORUNUSU9OICck cHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydCIKLSk7CiAkbm9kZV9z dWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9wdWJsaXNoZXIsICd0 YXBfc3ViX3BhcnQnKTsKICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0J IklOU0VSVCBJTlRPIHNjaDEudDEgVkFMVUVTICgyKSwgKDcpOyIpOwotJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKKwkiU0VMRUNUIHNsb3RfbmFtZSBG Uk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RfYWR2YW5jZSgndGVzdF9zbG90JywgcGdfY3VycmVudF93 YWxfbHNuKCkpOyIKKyk7CiAKICMgVmVyaWZ5IHRoYXQgZGF0YSBpbnNlcnRlZCB0byB0aGUgcGFy dGl0aW9uZWQgdGFibGUgaXMgbm90IHB1Ymxpc2hlZCB3aGVuIGl0IGlzCiAjIGV4Y2x1ZGVkIHdp dGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlLgogJHJlc3VsdCA9ICRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIlNFTEVDVCBjb3VudCgqKSA9IDAgRlJP TSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2JpbmFyeV9jaGFuZ2VzKCd0ZXN0X3Nsb3QnLCBOVUxMLCBO VUxMLCAncHJvdG9fdmVyc2lvbicsICcxJywgJ3B1YmxpY2F0aW9uX25hbWVzJywgJ3RhcF9wdWJf cGFydCcpIgogKTsKLWlzKCRyZXN1bHQsIHFxKHQpLCAnY2hlY2sgbm8gY2hhbmdlcyBmb3IgZXhj bHVkZWQgdGFibGUgaW4gcmVwbGljYXRpb24gc2xvdCcpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKIAorIyBDaGVjayB0aGF0IHRhYmxlIGRhdGEg MTAzIGFuZCAxNTMgd2hpY2ggaXMgcHJlc2VudCBpbiBzY2gxLnNjaDEucGFydDIgc2hvdWxkCisj IG5vdCBiZSByZXBsaWNhdGVkLgogJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnQxIik7Ci1pcygkcmVzdWx0LCBxcSgp LCAnY2hlY2sgcm93cyBvbiBwYXJ0aXRpb25lZCB0YWJsZScpOworaXMoJHJlc3VsdCwgcXEoMyks ICdjaGVjayByb3dzIG9uIHJvb3QgdGFibGUnKTsKIAogJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQxIik7Ci1p cygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiBmaXJzdCBwYXJ0aXRpb24nKTsKK2lzKCRy ZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHRhYmxlIHNjaDEucGFydDEnKTsKIAogJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJP TSBzY2gxLnBhcnQyIik7Ci1pcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiBzZWNvbmQg cGFydGl0aW9uJyk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJU UlVOQ0FURSBzY2gxLnQxIik7Ci0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3Rh cF9zdWJfcGFydCcpOwotJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3BhcnQiKTsKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydDsiKTsKLQotIyBF WENFUFQgVEFCTEUgKHNjaDEucGFydDEpIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qg PSB0cnVlCi0jIFdoZW4gYSBwYXJ0aXRpb24gaXMgZXhjbHVkZWQgYnV0IHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290IGlzIHRydWUsCi0jIHJvd3MgcHVibGlzaGVkIHRocm91Z2ggdGhlIHBhcnRp dGlvbmVkIHRhYmxlIGNhbiBzdGlsbCBiZSByZXBsaWNhdGVkLgotJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXEoCi0JQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJf cGFydCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjaDEucGFydDEpIFdJVEggKHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290KTsKLQlJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVFUyAoMSks ICg2KQotKSk7Ci0kbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ1JF QVRFIFNVQlNDUklQVElPTiB0YXBfc3ViX3BhcnQgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25u c3RyJyBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQiCi0pOwotJG5vZGVfc3Vic2NyaWJlci0+d2Fp dF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcHVibGlzaGVyLCAndGFwX3N1Yl9wYXJ0Jyk7 Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJJTlNFUlQgSU5UTyBz Y2gxLnQxIFZBTFVFUyAoMiksICg3KTsiKTsKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgndGFwX3N1Yl9wYXJ0Jyk7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0 YWJsZSBzY2gxLnBhcnQyJyk7CiAKICRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS50MSBPUkRFUiBCWSBhIik7Ci1p cyggJHJlc3VsdCwgcXEoMQotMgotNgotNyksICdjaGVjayByb3dzIG9uIHBhcnRpdGlvbmVkIHRh YmxlJyk7CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU ICogRlJPTSBzY2gxLnBhcnQyXzEiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9u IHRhYmxlIHNjaDEucGFydDJfMScpOwogCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDEiKTsKLWlzKCRyZXN1 bHQsIHFxKCksICdjaGVjayByb3dzIG9uIGV4Y2x1ZGVkIHBhcnRpdGlvbicpOworJHJlc3VsdCA9 CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJP TSBzY2gxLnBhcnQyXzIiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHRhYmxl IHNjaDEucGFydDJfMicpOwogCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDIiKTsKLWlzKCRyZXN1bHQsIHFx KCksICdjaGVjayByb3dzIG9uIG90aGVyIHBhcnRpdGlvbicpOworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3BhcnQiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FUSU9O IHRhcF9wdWJfcGFydDsiKTsKIAotJG5vZGVfc3Vic2NyaWJlci0+c3RvcCgnZmFzdCcpOwogJG5v ZGVfcHVibGlzaGVyLT5zdG9wKCdmYXN0Jyk7CiAKIGRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCA5ZjVlZThmZDQ4Mi4uYjU0ZmE4NGEwMjUgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC0yNDE4LDYgKzI0MTgsNyBAQCBRVE5vZGUKIFFVRVJZVFlQRQog UXVhbENvc3QKIFF1YWxJdGVtCitRdWFsaWZpZWRSZWxhdGlvbk5hbWUKIFF1ZXJ5CiBRdWVyeUNv bXBsZXRpb24KIFF1ZXJ5RGVzYwotLSAKMi40My4wCgo= --00000000000021d4f10649ee4689--