Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vETCV-00C1I9-PS for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Oct 2025 14:00:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vETCU-008jSb-MV for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Oct 2025 14:00:25 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vETCT-008jSS-SW for pgsql-hackers@lists.postgresql.org; Thu, 30 Oct 2025 14:00:25 +0000 Received: from mail-ej1-x62a.google.com ([2a00:1450:4864:20::62a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vETCP-0054vp-1H for pgsql-hackers@lists.postgresql.org; Thu, 30 Oct 2025 14:00:24 +0000 Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-b6d3340dc2aso301626866b.0 for ; Thu, 30 Oct 2025 07:00:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761832820; x=1762437620; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=oSrqvXk4lMzhRSeQW0pZkoWRhF18jWjy6VqJqgmqDyI=; b=kqF5hHAgZ7Wq3MhED3OD2AFZF85UmFRR6nmakeXPXe0zqfnIi+etrPRaSDUsgKmBaE als7tYcsqNstPP8/WUjiQbgkz9L38DUwT7ysK6xjb6OxBLpsp42smHoyEyNAuUYj3l9n AC24U+uLnVr1oGgCyzm0nUtHwf5NwxcYTpDNFJah7JgOU/mGu0SkFAyv50NKSeoFdxgO bDnUAy9FqSx2oaATO/ll4gnSWt26g+Arj1VQuP2B1+LORxr0eXVoTFpzso2J46cDFdJF QIqiVunKwf9W+tz4Li80LYFsHzW3Eanj5Pf2hV34bRYXL79PpE6hwy5ot3OyiHfj1AQA lefQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761832820; x=1762437620; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=oSrqvXk4lMzhRSeQW0pZkoWRhF18jWjy6VqJqgmqDyI=; b=RMKOp8PfIlDtu8Staz8T9/Gtx2CfIVJvnxT0r9Pdlv9A65lFKULXnlNwj7DEkBa3FU IbeMebWpC8OYdkFVV+xJMdGu0t3MTEUj0NhevCBk6PcOd6uQpZTLcTGkd1S525XsQrK1 CbBKAwpouJSV/QtW04IT9015zhPmbayJMQG/a0/R3pclyHpsFni8P5aAhrgM2rcXUhhy y/MCCLU6schRg5UX8PhtH7x9p7lz3cqjNHSonVW8qD2OrN2yFdP8h9lfh/C9POM0ZLQ+ e151Y5GGlsjVyaxk9azAvFWpZXVsCZm0LlikuCTb/MHYwpO0RZHS4VbB4aijzvLfYqjA 76NA== X-Gm-Message-State: AOJu0YwguZFpwxy7rI67R4V+uTPtJxea4xu6VZVi5Q31do5+0+BimuBz zz9JA2scoqLvAgAQ+WhugrMTmqMwalR4f95vzs4jakoQjbOtg6gAvh+sDZfV5+vetDYEBJNIAvY BI5F5QrbkkBnCC+tvEIr5bZDtXMT9HVP0D2dL X-Gm-Gg: ASbGncs27zkNzpFHDWnJHGJ62sIU/kEqSqa1X6pxsHzrvSMF0i3dXK36zqGUHWjaDjV MvGPKzFjVCkDzeOOAhKMfUlVRybocTYEPz3PVIr9jLkP0kxXQJ+3WkD9I7/bQyTRqmaJQ7umxtl dfbETI8UWzTZrfYu2o8hNcgu8NAg3q1yW1QygFND+apvOslVY/ftoTYHsNaN4WngEjEF462P+Du zO9tLksI9wgVI3H4n3fy8gsExDmdkJzp+ugZL3jot8SRcbOWAnsunD6b0trUiMa1+ldVBc= X-Google-Smtp-Source: AGHT+IEP+V3UQpXJUCz4WKKyJ+ni23OTo57XfE4nQE/suTLO3iVlVXNPCTg+lOiM9Fh8VQ1FN1JSmQWKH1jMKM+U8PI= X-Received: by 2002:a17:907:3f26:b0:b3f:331a:a982 with SMTP id a640c23a62f3a-b7051f630e8mr394682366b.6.1761832819657; Thu, 30 Oct 2025 07:00:19 -0700 (PDT) MIME-Version: 1.0 From: Robert Haas Date: Thu, 30 Oct 2025 10:00:05 -0400 X-Gm-Features: AWmQ_blNAxZulFee06Xlk99IgH5lr6EzS6WnYqjqdJIiFIiRbmQIU5z-F3VoRZE Message-ID: Subject: pg_plan_advice To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000005ed7fc064260aba8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005ed7fc064260aba8 Content-Type: text/plain; charset="UTF-8" As I have mentioned on previous threads, for the past while I have been working on planner extensibility. I've posted some extensibility patches previously, and got a few of them committed in Sepember/October with Tom's help, but I think the time has come a patch which actually makes use of that infrastructure as well as some further infrastructure that I'm also including in this posting.[1] The final patch in this series adds a new contrib module called pg_plan_advice. Very briefly, what pg_plan_advice knows how to do is process a plan and emits a (potentially long) long text string in a special-purpose mini-language that describes a bunch of key planning decisions, such as the join order, selected join methods, types of scans used to access individual tables, and where and how partitionwise join and parallelism were used. You can then set pg_plan_advice.advice to that string to get a future attempt to plan the same query to reproduce those decisions, or (maybe a better idea) you can trim that string down to constrain some decisions (e.g. the join order) but not others (e.g. the join methods), or (if you want to make your life more exciting) you can edit that advice string and thereby attempt to coerce the planner into planning the query the way you think best. There is a README that explains the design philosophy and thinking in a lot more detail, which is a good place to start if you're curious, and I implore you to read it if you're interested, and *especially* if you're thinking of flaming me. But that doesn't mean that you *shouldn't* flame me. There are a remarkable number of things that someone could legitimately be unhappy about in this patch set. First, any form of user control over the planner tends to be a lightning rod for criticism around here. I've come to believe that's the wrong way of thinking about it: we can want to improve the planner over the long term and *also* want to have tools available to work around problems with it in the short term. Further, we should not imagine that we're going to solve problems that have stumped other successful database projects any time in the foreseeable future; no product will ever get 100% of cases right, and you don't need to get to very obscure cases before other products throw up their hands just as we do. But, second, even if you're OK with the idea of some kind of user control over the planner, you could very well be of the opinion that what I've implemented here is utter crap. I've certainly had to make a ton of very opinionated decisions to get to this point, and you are entitled to hate them. Of course, I did have *reasons* for making the decisions, so if your operating theory as to why I did something is that I'm a stupid moron, perhaps consider an alternative explanation or two as well. Finally, even if you're OK with the concept and feel that I've made some basically reasonable design decisions, you might notice that the code is full of bugs, needs a lot of cleanup, is missing features, lacks documentation, and a bunch of other stuff. In that judgement, you would be absolutely correct. I'm not posting it here because I'm hoping to get it committed in November -- or at least, not THIS November. What I would like to do is getting some design feedback on the preliminary patches, which I think will be more possible if reviewers also have the main pg_plan_advice to look at as a way of understanding why the exist, and also some feedback on the pg_plan_advice patch itself. Now I do want to caveat the statement that I am looking for feedback just a little bit. I imagine that there will be some people reading this who are already imagining how great life will be when they put this into production, and begin complaining about either (1) features that it's missing or (2) things that they don't like about the design of the advice mini-language. What I'd ask you to keep in mind is that you will not be able to put this into production unless and until something gets committed, and getting this committed is probably going to be super-hard even if you don't creep the scope, so maybe don't do that, especially if you haven't read the README yet to understand what the scope is actually intended to be. The details of the advice mini-language are certainly open to negotiation; of everything, that would be one of the easier things to change. However, keep in mind that there are probably LOTS AND LOTS of people who all have their own opinions about what decisions I should have made when designing that mini-language, and an outcome where you personally get everything you want and everyone who disagrees is out of luck is unlikely. In other words, constructive suggestions for improvement are welcome, but please think twice before turning this into a bikeshedding nightmare. Now is the time to talk about whether I've got the overall design somewhat correct moreso than whether I've spelled everything the way you happen to prefer.[2] I want to mention that, beyond the fact that I'm sure some people will want to use something like this (with more feature and a lot fewer bugs) in production, it seems to be super-useful for testing. We have a lot of regression test cases that try to coerce the planner to do a particular thing by manipulating enable_* GUCs, and I've spent a lot of time trying to do similar things by hand, either for regression test coverage or just private testing. This facility, even with all of the bugs and limitations that it currently has, is exponentially more powerful than frobbing enable_* GUCs. Once you get the hang of the advice mini-language, you can very quickly experiment with all sorts of plan shapes in ways that are currently very hard to do, and thereby find out how expensive the planner thinks those things are and which ones it thinks are even legal. So I see this as not only something that people might find useful for in production deployments, but also something that can potentially be really useful to advance PostgreSQL development. Which brings me to the question of where this code ought to go if it goes anywhere at all. I decided to propose pg_plan_advice as a contrib module rather than a part of core because I had to make a WHOLE lot of opinionated design decisions just to get to the point of having something that I could post and hopefully get feedback on. I figured that all of those opinionated decisions would be a bit less unpalatable if they were mostly encapsulated in a contrib module, with the potential for some future patch author to write a different contrib module that adopted different solutions to all of those problems. But what I've also come to realize is that there's so much infrastructure here that leaving the next person to reinvent it may not be all that appealing. Query jumbling is a previous case where we initially thought that different people might want to do different things, but eventually realized that most people really just wanted some solution that they didn't have to think too hard about. Likewise, in this patch, the relation identifier system described in the README is the only thing of its kind, to my knowledge, and any system that wants to accomplish something similar to what pg_plan_advice does would need a system like that. pg_hint_plan doesn't have something like that, because pg_hint_plan is just trying to do hints. This is trying to do round-trip-safe plan stability, where the system will tell you how to refer unambiguously to a certain part of the query in a way that will work correctly on every single query regardless of how it's structured or how many times it refers to the same tables or to different tables using the same aliases. If we say that we're never going to put any of that infrastructure in core, then anyone who wants to write a module to control the planner is going to need to start by either (a) reinventing something similar, (b) cloning all the relevant code, or (c) just giving up on the idea of unambiguous references to parts of a query. None of those seem like great options, so now I'm less sure whether contrib is actually the right place for this code, but that's where I have put it for now. Feedback welcome, on this and everything else. Perhaps more than any other patch I've ever written, I know I'm playing with fire here just by putting this out on the list, but I'm nevertheless hopeful that something good can come of it, and I hope we can have a constructive discussion about what that thing should be. I think there is unquestionably is a lot of demand for the ability to influence the planner in some form, but there is a lot of room for debate about what exactly that should mean in practice. While I personally am pretty happy with the direction of the code I've written, modulo the large amount of not-yet-completed bug fixing and cleanup, there's certainly plenty of room for other people to feel differently, and finding out what other people think is, of course, the whole point of posting things publicly before committing them -- or in this case, before even finishing them.[3] If you're interested it contributing to the conversation, I urge you to start with the following things: (1) the README in the final patch; (2) the regression test examples in the final patch, which give a good sense of what it actually looks like to use this; and (3) the earlier patches, which show the minimum amount of core infrastructure that I think we need in order to make something like this workable (ideas on how to further reduce that footprint are very welcome). Thanks, -- Robert Haas EDB: http://www.enterprisedb.com [1] All of the earlier patches have been posted previously in some form, but the commit messages have been rewritten for clarity, and the "Allow for plugin control over path generation strategies" patch has been heavily rewritten since it was last posted; the earlier versions turned out to have substantial inadequacies. [2] This is not to say that proposal to modify or improve the syntax are unwelcome, but the bigger obstacle to getting something committed here is probably reaching some agreement on the internal details. Any changes to src/include/optimizer or src/backend/optimizer need careful scrutiny from a design perspective. Also, keep in mind that the syntax needs to fit what we can actually do: a proposal to change the syntax to something that implies semantics we can't implement is a dead letter. [3] Note, however, that a proposal to achieve the same or similar goals by different means is more welcome than a proposal that I should have done some other project entirely. I've already put a lot of work into these goals and hope to achieve them, at least to some degree, before I start working toward something else. --0000000000005ed7fc064260aba8 Content-Type: application/octet-stream; name="v1-0005-Allow-for-plugin-control-over-path-generation-str.patch" Content-Disposition: attachment; filename="v1-0005-Allow-for-plugin-control-over-path-generation-str.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhdgyw0v4 RnJvbSA0YTYxNWQwNGY1YzMzNGE1MTA1ZGM4NWM4ZDBlOWJiNmZmM2E3YWE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjQgT2N0IDIwMjUgMTU6MTE6NDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxIDUv Nl0gQWxsb3cgZm9yIHBsdWdpbiBjb250cm9sIG92ZXIgcGF0aCBnZW5lcmF0aW9uCiBzdHJhdGVn aWVzLgoKRWFjaCBSZWxPcHRJbmZvIG5vdyBoYXMgYSBwZ3NfbWFzayBtZW1iZXIgd2hpY2ggaXMg YSBtYXNrIG9mIGFjY2VwdGFibGUKc3RyYXRlZ2llcy4gRm9yIG1vc3QgcmVscywgdGhpcyBpcyBw b3B1bGF0ZWQgZnJvbSBQbGFubmVyR2xvYmFsJ3MKZGVmYXVsdF9wZ3NfbWFzaywgd2hpY2ggaXMg Y29tcHV0ZWQgZnJvbSB0aGUgdmFsdWVzIG9mIHRoZSBlbmFibGVfKgpHVUNzIGF0IHRoZSBzdGFy dCBvZiBwbGFubmluZy4KCkZvciBiYXNlcmVscywgZ2V0X3JlbGF0aW9uX2luZm9faG9vayBjYW4g YmUgdXNlZCB0byBhZGp1c3QgcGdzX21hc2sgZm9yCmVhY2ggbmV3IFJlbE9wdEluZm8sIGF0IGxl YXN0IGZvciByZWxzIG9mIHR5cGUgUlRFX1JFTEFUSU9OLiBBZGp1c3RpbmcKcGdzX21hc2sgaXMg bGVzcyB1c2VmdWwgZm9yIG90aGVyIHR5cGVzIG9mIHJlbHMsIGJ1dCBpZiBpdCBwcm92ZXMgdG8K YmUgbmVjZXNzYXJ5LCB3ZSBjYW4gcmV2aXNpdCB0aGUgd2F5IHRoaXMgaG9vayB3b3JrcyBvciBh ZGQgYSBuZXcgb25lLgoKRm9yIGpvaW5yZWxzLCB0d28gbmV3IGhvb2tzIGFyZSBhZGRlZC4gam9p bnJlbF9zZXR1cF9ob29rIGlzIGNhbGxlZCBlYWNoCnRpbWUgYSBqb2lucmVsIGlzIGNyZWF0ZWQs IGFuZCBvbmUgdGhpbmcgdGhhdCBjYW4gYmUgZG9uZSBmcm9tIHRoYXQgaG9vawppcyB0byBtYW5p cHVsYXRlIHBnc19tYXNrIGZvciB0aGUgbmV3IGpvaW5yZWwuIGpvaW5fcGF0aF9zZXR1cF9ob29r IGlzCmNhbGxlZCBlYWNoIHRpbWUgd2UncmUgYWJvdXQgdG8gYWRkIHBhdGhzIHRvIGEgam9pbnJl bCBieSBjb25zaWRlcmluZwpzb21lIHBhcnRpY3VsYXIgY29tYmluYXRpb24gb2YgYW4gb3V0ZXIg cmVsLCBhbiBpbm5lciByZWwsIGFuZCBhIGpvaW4KdHlwZS4gSXQgY2FuIG1vZGlmeSB0aGUgcGdz X21hc2sgcHJvcGFnYXRlZCBpbnRvIEpvaW5QYXRoRXh0cmFEYXRhIHRvCnJlc3RyaWN0IHN0cmF0 ZWd5IGNob2ljZSBmb3IgdGhhdCBwYXJpY3VsYXIgY29tYmluYXRpb24gb2YgcmVscy4KClRvIG1h a2Ugam9pbnJlbF9zZXR1cF9ob29rIHdvcmsgYXMgaW50ZW5kZWQsIHRoZSBleGlzdGluZyBjYWxs cyB0bwpidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvIGFyZSBtb3ZlZCBsYXRlciBpbiB0aGUg Y2FsbGluZyBmdW5jdGlvbnM7CnRoaXMgaXMgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGNoZWNrcyB3 aGV0aGVyIHRoZSByZWwncyBwZ3NfbWFzayBpbmNsdWRlcwpQR1NfQ09OU0lERVJfUEFSVElUSU9O V0lTRSwgc28gd2Ugd2FudCBpdCB0byBvbmx5IGJlIGNhbGxlZCBhZnRlcgpwbHVnaW5zIGhhdmUg aGFkIGEgY2hhbmNlIHRvIGFsdGVyIHBnc19tYXNrLgoKVXBwZXIgcmVscyBjdXJyZW50bHkgaW5o ZXJpdCBwZ3NfbWFzayBmcm9tIHRoZSBpbnB1dCByZWxhdGlvbi4gSXQncwp1bmNsZWFyIHRoYXQg dGhpcyBpcyB0aGUgbW9zdCB1c2VmdWwgYmVoYXZpb3IsIGJ1dCBhdCB0aGUgbW9tZW50IHRoZXJl CmFyZSBubyBob29rcyB0byBhbGxvdyB0aGUgbWFzayB0byBiZSBzZXQgaW4gYW55IG90aGVyIHdh eS4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgICB8IDIyMSArKysrKysrKysr KysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICB8 ICAgNCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyAgIHwgIDg4ICsr KysrKystLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBhdGguYyAgICB8ICAgNyAr LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIHwgICAxICsKIHNyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICB8ICA1NCArKysrKysKIHNyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgICB8ICAxOSArLQogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGxhbmNhdC5jICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3JlbG5vZGUuYyAgICB8ICA0MyArKysrLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggICAgICAgICAgIHwgIDgyICsrKysrKysrLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3Qu aCAgICAgICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAg ICAgICAgfCAgMTEgKy0KIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oICAgICAgICAgICB8 ICAgOSArLQogMTQgZmlsZXMgY2hhbmdlZCwgNDUxIGluc2VydGlvbnMoKyksIDk3IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IDM0OTg2M2ZiMTk0 Li4wNzQ4MDI4MjUxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxs cGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC05 NTQsNyArOTU0LDcgQEAgc2V0X3RhYmxlc2FtcGxlX3JlbF9wYXRobGlzdChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBSYW5nZVRibEVudHJ5ICoKIAkJIGJtc19tZW1iZXJzaGlw KHJvb3QtPmFsbF9xdWVyeV9yZWxzKSAhPSBCTVNfU0lOR0xFVE9OKSAmJgogCQkhKEdldFRzbVJv dXRpbmUocnRlLT50YWJsZXNhbXBsZS0+dHNtaGFuZGxlciktPnJlcGVhdGFibGVfYWNyb3NzX3Nj YW5zKSkKIAl7Ci0JCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWF0ZXJpYWxfcGF0aChyZWwsIHBh dGgpOworCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgocmVsLCBwYXRoLCB0 cnVlKTsKIAl9CiAKIAlhZGRfcGF0aChyZWwsIHBhdGgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2Nvc3RzaXplLmMKaW5kZXggOTQwNzdlNmEwMDYuLjA0YTE3MzY3ZTlhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTMwMSw2ICszMDEsNyBAQCBjb3N0X3NlcXNjYW4o UGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJZG91YmxlCQlzcGNfc2VxX3BhZ2VfY29z dDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2 NAkJZW5hYmxlX21hc2sgPSBQR1NfU0VRU0NBTjsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxp ZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAg LTM1Myw4ICszNTQsMTEgQEAgY29zdF9zZXFzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpy b290LAogCQkgKi8KIAkJcGF0aC0+cm93cyA9IGNsYW1wX3Jvd19lc3QocGF0aC0+cm93cyAvIHBh cmFsbGVsX2Rpdmlzb3IpOwogCX0KKwllbHNlCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBlbmFibGVfc2Vxc2NhbiA/ IDAgOiAxOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNrICYg ZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJcGF0aC0+c3RhcnR1cF9jb3N0 ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBjcHVf cnVuX2Nvc3QgKyBkaXNrX3J1bl9jb3N0OwogfQpAQCAtMzgwLDYgKzM4NCw3IEBAIGNvc3Rfc2Ft cGxlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQlzcGNfcGFnZV9jb3N0 OwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0 CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2Ug cmVsYXRpb25zIHdpdGggdGFibGVzYW1wbGUgY2xhdXNlcyAqLwogCUFzc2VydChiYXNlcmVsLT5y ZWxpZCA+IDApOwpAQCAtNDI3LDcgKzQzMiwxMSBAQCBjb3N0X3NhbXBsZXNjYW4oUGF0aCAqcGF0 aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQt PmNvc3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnBlcl90 dXBsZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBh dGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVS X05PTlBBUlRJQUw7CisKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3Nf bWFzayAmIGVuYWJsZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgtPnN0YXJ0 dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0 ICsgcnVuX2Nvc3Q7CiB9CkBAIC00NjYsNyArNDc1LDggQEAgY29zdF9nYXRoZXIoR2F0aGVyUGF0 aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhcmFsbGVsX3Nl dHVwX2Nvc3Q7CiAJcnVuX2Nvc3QgKz0gcGFyYWxsZWxfdHVwbGVfY29zdCAqIHBhdGgtPnBhdGgu cm93czsKIAotCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBwYXRoLT5zdWJwYXRoLT5kaXNh YmxlZF9ub2RlczsKKwlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ ZGlzYWJsZWRfbm9kZXMKKwkJKyAoKHJlbC0+cGdzX21hc2sgJiBQR1NfR0FUSEVSKSAhPSAwID8g MCA6IDEpOwogCXBhdGgtPnBhdGguc3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgt PnBhdGgudG90YWxfY29zdCA9IChzdGFydHVwX2Nvc3QgKyBydW5fY29zdCk7CiB9CkBAIC01MzIs OCArNTQyLDggQEAgY29zdF9nYXRoZXJfbWVyZ2UoR2F0aGVyTWVyZ2VQYXRoICpwYXRoLCBQbGFu bmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGFyYWxsZWxfc2V0dXBfY29zdDsKIAly dW5fY29zdCArPSBwYXJhbGxlbF90dXBsZV9jb3N0ICogcGF0aC0+cGF0aC5yb3dzICogMS4wNTsK IAotCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9kaXNhYmxlZF9ub2RlcwotCQkr IChlbmFibGVfZ2F0aGVybWVyZ2UgPyAwIDogMSk7CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2Rl cyA9IHBhdGgtPnN1YnBhdGgtPmRpc2FibGVkX25vZGVzCisJCSsgKChyZWwtPnBnc19tYXNrICYg UEdTX0dBVEhFUl9NRVJHRSkgIT0gMCA/IDAgOiAxKTsKIAlwYXRoLT5wYXRoLnN0YXJ0dXBfY29z dCA9IHN0YXJ0dXBfY29zdCArIGlucHV0X3N0YXJ0dXBfY29zdDsKIAlwYXRoLT5wYXRoLnRvdGFs X2Nvc3QgPSAoc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3QgKyBpbnB1dF90b3RhbF9jb3N0KTsKIH0K QEAgLTU4Myw2ICs1OTMsNyBAQCBjb3N0X2luZGV4KEluZGV4UGF0aCAqcGF0aCwgUGxhbm5lcklu Zm8gKnJvb3QsIGRvdWJsZSBsb29wX2NvdW50LAogCWRvdWJsZQkJcGFnZXNfZmV0Y2hlZDsKIAlk b3VibGUJCXJhbmRfaGVhcF9wYWdlczsKIAlkb3VibGUJCWluZGV4X3BhZ2VzOworCXVpbnQ2NAkJ ZW5hYmxlX21hc2s7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRp b25zICovCiAJQXNzZXJ0KElzQShiYXNlcmVsLCBSZWxPcHRJbmZvKSAmJgpAQCAtNjE0LDggKzYy NSwxMSBAQCBjb3N0X2luZGV4KEluZGV4UGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsIGRv dWJsZSBsb29wX2NvdW50LAogCQkJCQkJCQkJCQkgIHBhdGgtPmluZGV4Y2xhdXNlcyk7CiAJfQog Ci0JLyogd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBlbmFibGVfaW5kZXhvbmx5c2NhbjsgaW5keHBh dGguYyBkb2VzIHRoYXQgKi8KLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gZW5hYmxlX2lu ZGV4c2NhbiA/IDAgOiAxOworCS8qIGlzIHRoaXMgc2NhbiB0eXBlIGRpc2FibGVkPyAqLworCWVu YWJsZV9tYXNrID0gKGluZGV4b25seSA/IFBHU19JTkRFWE9OTFlTQ0FOIDogUEdTX0lOREVYU0NB TikKKwkJfCAocGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzID09IDAgPyBQR1NfQ09OU0lERVJf Tk9OUEFSVElBTCA6IDApOworCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJl bC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAogCS8q CiAJICogQ2FsbCBpbmRleC1hY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGNvZGUgdG8gZXN0aW1hdGUg dGhlIHByb2Nlc3NpbmcgY29zdApAQCAtMTAzNiw2ICsxMDUwLDcgQEAgY29zdF9iaXRtYXBfaGVh cF9zY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVs LAogCWRvdWJsZQkJc3BjX3NlcV9wYWdlX2Nvc3QsCiAJCQkJc3BjX3JhbmRvbV9wYWdlX2Nvc3Q7 CiAJZG91YmxlCQlUOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfQklUTUFQU0NBTjsKIAog CS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQo SXNBKGJhc2VyZWwsIFJlbE9wdEluZm8pKTsKQEAgLTExMDEsNiArMTExNiw4IEBAIGNvc3RfYml0 bWFwX2hlYXBfc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq YmFzZXJlbCwKIAogCQlwYXRoLT5yb3dzID0gY2xhbXBfcm93X2VzdChwYXRoLT5yb3dzIC8gcGFy YWxsZWxfZGl2aXNvcik7CiAJfQorCWVsc2UKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVS X05PTlBBUlRJQUw7CiAKIAogCXJ1bl9jb3N0ICs9IGNwdV9ydW5fY29zdDsKQEAgLTExMDksNyAr MTEyNiw4IEBAIGNvc3RfYml0bWFwX2hlYXBfc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJlbCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRh cmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3Qu cGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gZW5hYmxl X2JpdG1hcHNjYW4gPyAwIDogMTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVs LT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgt PnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1 cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xMjY2LDYgKzEyODQsNyBAQCBjb3N0X3RpZHNjYW4o UGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJZG91YmxlCQludHVwbGVzOwogCUxpc3RD ZWxsICAgKmw7CiAJZG91YmxlCQlzcGNfcmFuZG9tX3BhZ2VfY29zdDsKKwl1aW50NjQJCWVuYWJs ZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlv bnMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTEyODcsMTAgKzEzMDYsMTAg QEAgY29zdF90aWRzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCiAJCS8qCiAJ CSAqIFdlIG11c3QgdXNlIGEgVElEIHNjYW4gZm9yIEN1cnJlbnRPZkV4cHI7IGluIGFueSBvdGhl ciBjYXNlLCB3ZQotCQkgKiBzaG91bGQgYmUgZ2VuZXJhdGluZyBhIFRJRCBzY2FuIG9ubHkgaWYg ZW5hYmxlX3RpZHNjYW49dHJ1ZS4gQWxzbywKLQkJICogaWYgQ3VycmVudE9mRXhwciBpcyB0aGUg cXVhbCwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lLgorCQkgKiBzaG91bGQgYmUgZ2VuZXJhdGlu ZyBhIFRJRCBzY2FuIG9ubHkgaWYgVElEIHNjYW5zIGFyZSBhbGxvd2VkLgorCQkgKiBBbHNvLCBp ZiBDdXJyZW50T2ZFeHByIGlzIHRoZSBxdWFsLCB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUuCiAJ CSAqLwotCQlBc3NlcnQoZW5hYmxlX3RpZHNjYW4gfHwgSXNBKHF1YWwsIEN1cnJlbnRPZkV4cHIp KTsKKwkJQXNzZXJ0KChiYXNlcmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwIHx8IElz QShxdWFsLCBDdXJyZW50T2ZFeHByKSk7CiAJCUFzc2VydChsaXN0X2xlbmd0aCh0aWRxdWFscykg PT0gMSB8fCAhSXNBKHF1YWwsIEN1cnJlbnRPZkV4cHIpKTsKIAogCQlpZiAoSXNBKHF1YWwsIFNj YWxhckFycmF5T3BFeHByKSkKQEAgLTEzNDIsMTAgKzEzNjEsMTQgQEAgY29zdF90aWRzY2FuKFBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCiAJLyoKIAkgKiBUaGVyZSBhcmUgYXNzZXJ0 aW9ucyBhYm92ZSB2ZXJpZnlpbmcgdGhhdCB3ZSBvbmx5IHJlYWNoIHRoaXMgZnVuY3Rpb24KLQkg KiBlaXRoZXIgd2hlbiBlbmFibGVfdGlkc2Nhbj10cnVlIG9yIHdoZW4gdGhlIFRJRCBzY2FuIGlz IHRoZSBvbmx5IGxlZ2FsCi0JICogcGF0aCwgc28gaXQncyBzYWZlIHRvIHNldCBkaXNhYmxlZF9u b2RlcyB0byB6ZXJvIGhlcmUuCisJICogZWl0aGVyIHdoZW4gYmFzZXJlbC0+cGdzX21hc2sgaW5j bHVkZXMgUEdTX1RJRFNDQU4gb3Igd2hlbiB0aGUgVElEIHNjYW4KKwkgKiBpcyB0aGUgb25seSBs ZWdhbCBwYXRoLCBzbyB3ZSBvbmx5IG5lZWQgdG8gY29uc2lkZXIgdGhlIGVmZmVjdHMgb2YKKwkg KiBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCBoZXJlLgogCSAqLwotCXBhdGgtPmRpc2FibGVkX25v ZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFz ayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJ CShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAw OwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0 ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xMzc1LDYgKzEzOTgsNyBAQCBjb3N0 X3RpZHJhbmdlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlkb3VibGUJCW5z ZXFwYWdlczsKIAlkb3VibGUJCXNwY19yYW5kb21fcGFnZV9jb3N0OwogCWRvdWJsZQkJc3BjX3Nl cV9wYWdlX2Nvc3Q7CisJdWludDY0CQllbmFibGVfbWFzayA9IFBHU19USURTQ0FOOwogCiAJLyog U2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyAqLwogCUFzc2VydChiYXNl cmVsLT5yZWxpZCA+IDApOwpAQCAtMTQzOCw4ICsxNDYyLDE1IEBAIGNvc3RfdGlkcmFuZ2VzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5w YXRodGFyZ2V0LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+ Y29zdC5wZXJfdHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JLyogd2Ugc2hvdWxkIG5vdCBnZW5lcmF0 ZSB0aGlzIHBhdGggdHlwZSB3aGVuIGVuYWJsZV90aWRzY2FuPWZhbHNlICovCi0JQXNzZXJ0KGVu YWJsZV90aWRzY2FuKTsKKwkvKgorCSAqIFdlIHNob3VsZCBub3QgZ2VuZXJhdGUgdGhpcyBwYXRo IHR5cGUgd2hlbiBQR1NfVElEU0NBTiBpcyB1bnNldCwgYnV0IHdlCisJICogbWlnaHQgbmVlZCB0 byBkaXNhYmxlIHRoaXMgcGF0aCBkdWUgdG8gUEdTX0NPTlNJREVSX05PTlBBUlRJQUwuCisJICov CisJQXNzZXJ0KChiYXNlcmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwKTsKKwlpZiAo cGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3Nf bWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPmRpc2Fi bGVkX25vZGVzID0gMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0 aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwpAQCAtMTQ2Myw2ICsxNDk0 LDcgQEAgY29zdF9zdWJxdWVyeXNjYW4oU3VicXVlcnlTY2FuUGF0aCAqcGF0aCwgUGxhbm5lcklu Zm8gKnJvb3QsCiAJTGlzdAkgICAqcXBxdWFsczsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlD b3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hv dWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBzdWJxdWVyaWVz ICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xNDkzLDcgKzE1MjUsMTAgQEAg Y29zdF9zdWJxdWVyeXNjYW4oU3VicXVlcnlTY2FuUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJv b3QsCiAJICogU3VicXVlcnlTY2FuIG5vZGUsIHBsdXMgY3B1X3R1cGxlX2Nvc3QgdG8gYWNjb3Vu dCBmb3Igc2VsZWN0aW9uIGFuZAogCSAqIHByb2plY3Rpb24gb3ZlcmhlYWQuCiAJICovCi0JcGF0 aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgtPmRpc2FibGVkX25vZGVzOwor CWlmIChwYXRoLT5wYXRoLnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0g UEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBh dGgtPnN1YnBhdGgtPmRpc2FibGVkX25vZGVzCisJCSsgKCgoYmFzZXJlbC0+cGdzX21hc2sgJiBl bmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2spID8gMSA6IDApOwogCXBhdGgtPnBhdGguc3RhcnR1 cF9jb3N0ID0gcGF0aC0+c3VicGF0aC0+c3RhcnR1cF9jb3N0OwogCXBhdGgtPnBhdGgudG90YWxf Y29zdCA9IHBhdGgtPnN1YnBhdGgtPnRvdGFsX2Nvc3Q7CiAKQEAgLTE1NDQsNiArMTU3OSw3IEBA IGNvc3RfZnVuY3Rpb25zY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJ CWNwdV9wZXJfdHVwbGU7CiAJUmFuZ2VUYmxFbnRyeSAqcnRlOwogCVF1YWxDb3N0CWV4cHJjb3N0 OworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGll ZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBmdW5jdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJl bC0+cmVsaWQgPiAwKTsKQEAgLTE1ODQsNyArMTYyMCwxMCBAQCBjb3N0X2Z1bmN0aW9uc2NhbihQ YXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0 aHRhcmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNv c3QucGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsK KwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1Nf Q09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVs LT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgt PnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1 cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNjA2LDYgKzE2NDUsNyBAQCBjb3N0X3RhYmxlZnVu Y3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJQ29zdAkJY3B1X3Blcl90dXBs ZTsKIAlSYW5nZVRibEVudHJ5ICpydGU7CiAJUXVhbENvc3QJZXhwcmNvc3Q7CisJdWludDY0CQll bmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVs YXRpb25zIHRoYXQgYXJlIGZ1bmN0aW9ucyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDAp OwpAQCAtMTY0MSw3ICsxNjgxLDEwIEBAIGNvc3RfdGFibGVmdW5jc2NhbihQYXRoICpwYXRoLCBQ bGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29z dC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxl ICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+ cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9O UEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAm IGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29z dCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVu X2Nvc3Q7CiB9CkBAIC0xNjYxLDYgKzE3MDQsNyBAQCBjb3N0X3ZhbHVlc3NjYW4oUGF0aCAqcGF0 aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJQ29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFw cXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9 IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQg YXJlIHZhbHVlcyBsaXN0cyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTY4 OSw3ICsxNzMzLDEwIEBAIGNvc3RfdmFsdWVzc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwog CXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93 czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29y a2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlw YXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNr KSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBf Y29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBA IC0xNzEyLDYgKzE3NTksNyBAQCBjb3N0X2N0ZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJQ29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNv c3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91 bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIENURXMgKi8KIAlB c3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE3MzcsNyArMTc4NSwxMCBAQCBjb3N0X2N0 ZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBh dGgtPnBhdGh0YXJnZXQtPmNvc3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFy Z2V0LT5jb3N0LnBlcl90dXBsZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2Rl cyA9IDA7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sg fD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQko YmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsK IAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9 IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTc1NCw2ICsxODA1LDcgQEAgY29zdF9u YW1lZHR1cGxlc3RvcmVzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJ CXJ1bl9jb3N0ID0gMDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1 cGxlOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBw bGllZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBUdXBsZXN0b3JlcyAqLwogCUFzc2VydChi YXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTc3NSw3ICsxODI3LDEwIEBAIGNvc3RfbmFtZWR0dXBs ZXN0b3Jlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAljcHVfcGVyX3R1cGxl ICs9IGNwdV90dXBsZV9jb3N0ICsgcXBxdWFsX2Nvc3QucGVyX3R1cGxlOwogCXJ1bl9jb3N0ICs9 IGNwdV9wZXJfdHVwbGUgKiBiYXNlcmVsLT50dXBsZXM7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2Rl cyA9IDA7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sg fD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQko YmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsK IAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9 IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTc5Miw2ICsxODQ3LDcgQEAgY29zdF9y ZXN1bHRzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJCXJ1bl9jb3N0 ID0gMDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVp bnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBS VEVfUkVTVUxUIGJhc2UgcmVsYXRpb25zICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7 CkBAIC0xODEwLDcgKzE4NjYsMTAgQEAgY29zdF9yZXN1bHRzY2FuKFBhdGggKnBhdGgsIFBsYW5u ZXJJbmZvICpyb290LAogCWNwdV9wZXJfdHVwbGUgPSBjcHVfdHVwbGVfY29zdCArIHFwcXVhbF9j b3N0LnBlcl90dXBsZTsKIAlydW5fY29zdCArPSBjcHVfcGVyX3R1cGxlICogYmFzZXJlbC0+dHVw bGVzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChwYXRoLT5wYXJhbGxlbF93 b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOwor CXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxlX21h c2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1 cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0K QEAgLTE4MjgsNiArMTg4Nyw3IEBAIGNvc3RfcmVjdXJzaXZlX3VuaW9uKFBhdGggKnJ1bmlvbiwg UGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVybSkKIAlDb3N0CQlzdGFydHVwX2Nvc3Q7CiAJQ29zdAkJ dG90YWxfY29zdDsKIAlkb3VibGUJCXRvdGFsX3Jvd3M7CisJdWludDY0CQllbmFibGVfbWFzayA9 IDA7CiAKIAkvKiBXZSBwcm9iYWJseSBoYXZlIGRlY2VudCBlc3RpbWF0ZXMgZm9yIHRoZSBub24t cmVjdXJzaXZlIHRlcm0gKi8KIAlzdGFydHVwX2Nvc3QgPSBucnRlcm0tPnN0YXJ0dXBfY29zdDsK QEAgLTE4NTAsNyArMTkxMCwxMCBAQCBjb3N0X3JlY3Vyc2l2ZV91bmlvbihQYXRoICpydW5pb24s IFBhdGggKm5ydGVybSwgUGF0aCAqcnRlcm0pCiAJICovCiAJdG90YWxfY29zdCArPSBjcHVfdHVw bGVfY29zdCAqIHRvdGFsX3Jvd3M7CiAKLQlydW5pb24tPmRpc2FibGVkX25vZGVzID0gbnJ0ZXJt LT5kaXNhYmxlZF9ub2RlcyArIHJ0ZXJtLT5kaXNhYmxlZF9ub2RlczsKKwlpZiAocnVuaW9uLT5w YXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05Q QVJUSUFMOworCXJ1bmlvbi0+ZGlzYWJsZWRfbm9kZXMgPQorCQkocnVuaW9uLT5wYXJlbnQtPnBn c19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcnVuaW9uLT5z dGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcnVuaW9uLT50b3RhbF9jb3N0ID0gdG90YWxf Y29zdDsKIAlydW5pb24tPnJvd3MgPSB0b3RhbF9yb3dzOwpAQCAtMjEyMCw3ICsyMTgzLDExIEBA IGNvc3RfaW5jcmVtZW50YWxfc29ydChQYXRoICpwYXRoLAogCiAJcGF0aC0+cm93cyA9IGlucHV0 X3R1cGxlczsKIAotCS8qIHNob3VsZCBub3QgZ2VuZXJhdGUgdGhlc2UgcGF0aHMgd2hlbiBlbmFi bGVfaW5jcmVtZW50YWxfc29ydD1mYWxzZSAqLworCS8qCisJICogV2Ugc2hvdWxkIG5vdCBnZW5l cmF0ZSB0aGVzZSBwYXRocyB3aGVuIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0PWZhbHNlLgorCSAq IFdlIGNhbiBpZ25vcmUgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaGVyZSwgYmVjYXVzZSBpZiBp dCdzIHJlbGV2YW50LAorCSAqIGl0IHdpbGwgaGF2ZSBhbHJlYWR5IGFmZmVjdGVkIHRoZSBpbnB1 dCBwYXRoLgorCSAqLwogCUFzc2VydChlbmFibGVfaW5jcmVtZW50YWxfc29ydCk7CiAJcGF0aC0+ ZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9kaXNhYmxlZF9ub2RlczsKIApAQCAtMjE1OCw2ICsyMjI1 LDEwIEBAIGNvc3Rfc29ydChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCXN0YXJ0 dXBfY29zdCArPSBpbnB1dF9jb3N0OwogCisJLyoKKwkgKiBXZSBjYW4gaWdub3JlIFBHU19DT05T SURFUl9OT05QQVJUSUFMIGhlcmUsIGJlY2F1c2UgaWYgaXQncyByZWxldmFudCwKKwkgKiBpdCB3 aWxsIGhhdmUgYWxyZWFkeSBhZmZlY3RlZCB0aGUgaW5wdXQgcGF0aC4KKwkgKi8KIAlwYXRoLT5y b3dzID0gdHVwbGVzOwogCXBhdGgtPmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9k ZXMgKyAoZW5hYmxlX3NvcnQgPyAwIDogMSk7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1 cF9jb3N0OwpAQCAtMjI0OSw5ICsyMzIwLDE1IEBAIGFwcGVuZF9ub25wYXJ0aWFsX2Nvc3QoTGlz dCAqc3VicGF0aHMsIGludCBudW1wYXRocywgaW50IHBhcmFsbGVsX3dvcmtlcnMpCiB2b2lkCiBj b3N0X2FwcGVuZChBcHBlbmRQYXRoICphcGF0aCwgUGxhbm5lckluZm8gKnJvb3QpCiB7CisJUmVs T3B0SW5mbyAqcmVsID0gYXBhdGgtPnBhdGgucGFyZW50OwogCUxpc3RDZWxsICAgKmw7CisJdWlu dDY0CQllbmFibGVfbWFzayA9IFBHU19BUFBFTkQ7CisKKwlpZiAoYXBhdGgtPnBhdGgucGFyYWxs ZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElB TDsKIAotCWFwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gMDsKKwlhcGF0aC0+cGF0aC5kaXNh YmxlZF9ub2RlcyA9CisJCShyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9t YXNrID8gMCA6IDE7CiAJYXBhdGgtPnBhdGguc3RhcnR1cF9jb3N0ID0gMDsKIAlhcGF0aC0+cGF0 aC50b3RhbF9jb3N0ID0gMDsKIAlhcGF0aC0+cGF0aC5yb3dzID0gMDsKQEAgLTI0NjEsMTEgKzI1 MzgsMTYgQEAgY29zdF9tZXJnZV9hcHBlbmQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJICBDb3N0IGlucHV0X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAog CQkJCSAgZG91YmxlIHR1cGxlcykKIHsKKwlSZWxPcHRJbmZvICpyZWwgPSBwYXRoLT5wYXJlbnQ7 CiAJQ29zdAkJc3RhcnR1cF9jb3N0ID0gMDsKIAlDb3N0CQlydW5fY29zdCA9IDA7CiAJQ29zdAkJ Y29tcGFyaXNvbl9jb3N0OwogCWRvdWJsZQkJTjsKIAlkb3VibGUJCWxvZ047CisJdWludDY0CQll bmFibGVfbWFzayA9IFBHU19NRVJHRV9BUFBFTkQ7CisKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29y a2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKIAog CS8qCiAJICogQXZvaWQgbG9nKDApLi4uCkBAIC0yNDg4LDcgKzI1NzAsOSBAQCBjb3N0X21lcmdl X2FwcGVuZChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkgKi8KIAlydW5fY29zdCAr PSBjcHVfdHVwbGVfY29zdCAqIEFQUEVORF9DUFVfQ09TVF9NVUxUSVBMSUVSICogdHVwbGVzOwog Ci0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9kaXNhYmxlZF9ub2RlczsKKwlwYXRoLT5k aXNhYmxlZF9ub2RlcyA9CisJCShyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJs ZV9tYXNrID8gMCA6IDE7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgKz0gaW5wdXRfZGlzYWJsZWRf bm9kZXM7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgaW5wdXRfc3RhcnR1 cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdCArIGlu cHV0X3RvdGFsX2Nvc3Q7CiB9CkBAIC0yNTA3LDcgKzI1OTEsNyBAQCBjb3N0X21lcmdlX2FwcGVu ZChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKICAqLwogdm9pZAogY29zdF9tYXRlcmlh bChQYXRoICpwYXRoLAotCQkJICBpbnQgaW5wdXRfZGlzYWJsZWRfbm9kZXMsCisJCQkgIGJvb2wg ZW5hYmxlZCwgaW50IGlucHV0X2Rpc2FibGVkX25vZGVzLAogCQkJICBDb3N0IGlucHV0X3N0YXJ0 dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAogCQkJICBkb3VibGUgdHVwbGVzLCBpbnQg d2lkdGgpCiB7CkBAIC0yNTE2LDYgKzI2MDAsMTAgQEAgY29zdF9tYXRlcmlhbChQYXRoICpwYXRo LAogCWRvdWJsZQkJbmJ5dGVzID0gcmVsYXRpb25fYnl0ZV9zaXplKHR1cGxlcywgd2lkdGgpOwog CWRvdWJsZQkJd29ya19tZW1fYnl0ZXMgPSB3b3JrX21lbSAqIChTaXplKSAxMDI0OwogCisJaWYg KHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCAmJgorCQkocGF0aC0+cGFyZW50LT5wZ3NfbWFz ayAmIFBHU19DT05TSURFUl9OT05QQVJUSUFMKSA9PSAwKQorCQllbmFibGVkID0gZmFsc2U7CisK IAlwYXRoLT5yb3dzID0gdHVwbGVzOwogCiAJLyoKQEAgLTI1NDUsNyArMjYzMyw3IEBAIGNvc3Rf bWF0ZXJpYWwoUGF0aCAqcGF0aCwKIAkJcnVuX2Nvc3QgKz0gc2VxX3BhZ2VfY29zdCAqIG5wYWdl czsKIAl9CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25vZGVzICsg KGVuYWJsZV9tYXRlcmlhbCA/IDAgOiAxKTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0 X2Rpc2FibGVkX25vZGVzICsgKGVuYWJsZWQgPyAwIDogMSk7CiAJcGF0aC0+c3RhcnR1cF9jb3N0 ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5f Y29zdDsKIH0KQEAgLTMyOTcsNyArMzM4NSw3IEBAIGNvc3RfZ3JvdXAoUGF0aCAqcGF0aCwgUGxh bm5lckluZm8gKnJvb3QsCiAgKi8KIHZvaWQKIGluaXRpYWxfY29zdF9uZXN0bG9vcChQbGFubmVy SW5mbyAqcm9vdCwgSm9pbkNvc3RXb3Jrc3BhY2UgKndvcmtzcGFjZSwKLQkJCQkJICBKb2luVHlw ZSBqb2ludHlwZSwKKwkJCQkJICBKb2luVHlwZSBqb2ludHlwZSwgdWludDY0IGVuYWJsZV9tYXNr LAogCQkJCQkgIFBhdGggKm91dGVyX3BhdGgsIFBhdGggKmlubmVyX3BhdGgsCiAJCQkJCSAgSm9p blBhdGhFeHRyYURhdGEgKmV4dHJhKQogewpAQCAtMzMxMSw3ICszMzk5LDcgQEAgaW5pdGlhbF9j b3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3Nw YWNlLAogCUNvc3QJCWlubmVyX3Jlc2Nhbl9ydW5fY29zdDsKIAogCS8qIENvdW50IHVwIGRpc2Fi bGVkIG5vZGVzLiAqLwotCWRpc2FibGVkX25vZGVzID0gZW5hYmxlX25lc3Rsb29wID8gMCA6IDE7 CisJZGlzYWJsZWRfbm9kZXMgPSAoZXh0cmEtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVu YWJsZV9tYXNrID8gMCA6IDE7CiAJZGlzYWJsZWRfbm9kZXMgKz0gaW5uZXJfcGF0aC0+ZGlzYWJs ZWRfbm9kZXM7CiAJZGlzYWJsZWRfbm9kZXMgKz0gb3V0ZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7 CiAKQEAgLTM3MTEsNyArMzc5OSwxOSBAQCBpbml0aWFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJ bmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAogCUFzc2VydChvdXRlcnN0 YXJ0c2VsIDw9IG91dGVyZW5kc2VsKTsKIAlBc3NlcnQoaW5uZXJzdGFydHNlbCA8PSBpbm5lcmVu ZHNlbCk7CiAKLQlkaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9tZXJnZWpvaW4gPyAwIDogMTsKKwkv KgorCSAqIFdlIGRvbid0IGRlY2lkZSB3aGV0aGVyIHRvIG1hdGVyaWFsaXplIHRoZSBpbm5lciBw YXRoIHVudGlsIHdlIGdldCB0bworCSAqIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKCksIHNvIHdlIGRv bid0IGtub3cgd2hldGhlciB0byBjaGVjayB0aGUgcGdzX21hc2sKKwkgKiBhZ2FpbiBQR1NfTUVS R0VKT0lOX1BMQUlOIG9yIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUuIEluc3RlYWQsIHdlCisJ ICoganVzdCBhY2NvdW50IGZvciBhbnkgY2hpbGQgbm9kZXMgaGVyZSBhbmQgYXNzdW1lIHRoYXQg dGhpcyBub2RlIGlzIG5vdAorCSAqIGl0c2xlZiBkaXNhYmxlZDsgd2UgY2FuIHNvcnQgb3V0IHRo ZSBkZXRhaWxzIGluIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKCkuCisJICoKKwkgKiAoV2UgY291bGQg YmUgbW9yZSBwcmVjaXNlIGhlcmUgYnkgc2V0dGluZyBkaXNhYmxlZF9ub2RlcyB0byAxIGF0IHRo aXMKKwkgKiBzdGFnZSBpZiBib3RoIFBHU19NRVJHRUpPSU5fUExBSU4gYW5kIFBHU19NRVJHRUpP SU5fTUFURVJJQUxJWkUgYXJlCisJICogZGlzYWJsZWQsIGJ1dCB0aGF0IHNlZW1zIHRvIGFnYWlu c3QgdGhlIGlkZWEgb2YgbWFraW5nIHRoaXMgZnVuY3Rpb24KKwkgKiBwcm9kdWNlIGEgcXVpY2ss IG9wdGltaXN0aWMgYXBwcm94aW1hdGlvbiBvZiB0aGUgZmluYWwgY29zdC4pCisJICovCisJZGlz YWJsZWRfbm9kZXMgPSAwOwogCiAJLyogY29zdCBvZiBzb3VyY2UgZGF0YSAqLwogCkBAIC0zODkw LDkgKzM5OTAsNyBAQCBmaW5hbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwgTWVy Z2VQYXRoICpwYXRoLAogCWRvdWJsZQkJbWVyZ2Vqb2ludHVwbGVzLAogCQkJCXJlc2Nhbm5lZHR1 cGxlczsKIAlkb3VibGUJCXJlc2NhbnJhdGlvOwotCi0JLyogU2V0IHRoZSBudW1iZXIgb2YgZGlz YWJsZWQgbm9kZXMuICovCi0JcGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlcyA9IHdvcmtz cGFjZS0+ZGlzYWJsZWRfbm9kZXM7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBQ cm90ZWN0IHNvbWUgYXNzdW1wdGlvbnMgYmVsb3cgdGhhdCByb3djb3VudHMgYXJlbid0IHplcm8g Ki8KIAlpZiAoaW5uZXJfcGF0aF9yb3dzIDw9IDApCkBAIC00MDIyLDE2ICs0MTIwLDIwIEBAIGZp bmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgsCiAJ CXBhdGgtPm1hdGVyaWFsaXplX2lubmVyID0gZmFsc2U7CiAKIAkvKgotCSAqIFByZWZlciBtYXRl cmlhbGl6aW5nIGlmIGl0IGxvb2tzIGNoZWFwZXIsIHVubGVzcyB0aGUgdXNlciBoYXMgYXNrZWQg dG8KLQkgKiBzdXBwcmVzcyBtYXRlcmlhbGl6YXRpb24uCisJICogSWYgbWVyZ2Ugam9pbnMgd2l0 aCBtYXRlcmlhbGl6YXRpb24gYXJlIGVuYWJsZWQsIHRoZW4gY2hvb3NlCisJICogbWF0ZXJpYWxp emF0aW9uIGlmIGVpdGhlciAoYSkgaXQgbG9va3MgY2hlYXBlciBvciAoYikgbWVyZ2Ugam9pbnMK KwkgKiB3aXRob3V0IG1hdGVyaWFsaXphdGlvbiBhcmUgZGlzYWJsZWQuCiAJICovCi0JZWxzZSBp ZiAoZW5hYmxlX21hdGVyaWFsICYmIG1hdF9pbm5lcl9jb3N0IDwgYmFyZV9pbm5lcl9jb3N0KQor CWVsc2UgaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFKSAh PSAwICYmCisJCQkgKG1hdF9pbm5lcl9jb3N0IDwgYmFyZV9pbm5lcl9jb3N0IHx8CisJCQkgIChl eHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX1BMQUlOKSA9PSAwKSkKIAkJcGF0aC0+bWF0 ZXJpYWxpemVfaW5uZXIgPSB0cnVlOwogCiAJLyoKLQkgKiBFdmVuIGlmIG1hdGVyaWFsaXppbmcg ZG9lc24ndCBsb29rIGNoZWFwZXIsIHdlICptdXN0KiBkbyBpdCBpZiB0aGUKLQkgKiBpbm5lciBw YXRoIGlzIHRvIGJlIHVzZWQgZGlyZWN0bHkgKHdpdGhvdXQgc29ydGluZykgYW5kIGl0IGRvZXNu J3QKLQkgKiBzdXBwb3J0IG1hcmsvcmVzdG9yZS4KKwkgKiBSZWdhcmRsZXNzIG9mIHdoYXQgcGxh biBzaGFwZXMgYXJlIGVuYWJsZWQgYW5kIHdoYXQgdGhlIGNvc3RzIHNlZW0gdG8KKwkgKiBiZSwg d2UgKm11c3QqIG1hdGVyaWFsaXplIGl0IGlmIHRoZSBpbm5lciBwYXRoIGlzIHRvIGJlIHVzZWQg ZGlyZWN0bHkKKwkgKiAod2l0aG91dCBzb3J0aW5nKSBhbmQgaXQgZG9lc24ndCBzdXBwb3J0IG1h cmsvcmVzdG9yZS4gUGxhbm5lciBmYWlsdXJlCisJICogaXMgbm90IGFuIG9wdGlvbiEKIAkgKgog CSAqIFNpbmNlIHRoZSBpbm5lciBzaWRlIG11c3QgYmUgb3JkZXJlZCwgYW5kIG9ubHkgU29ydHMg YW5kIEluZGV4U2NhbnMgY2FuCiAJICogY3JlYXRlIG9yZGVyIHRvIGJlZ2luIHdpdGgsIGFuZCB0 aGV5IGJvdGggc3VwcG9ydCBtYXJrL3Jlc3RvcmUsIHlvdQpAQCAtNDAzOSwxMCArNDE0MSw2IEBA IGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgs CiAJICogbWVyZ2Ugam9pbnMgY2FuICpwcmVzZXJ2ZSogdGhlIG9yZGVyIG9mIHRoZWlyIGlucHV0 cywgc28gdGhleSBjYW4gYmUKIAkgKiBzZWxlY3RlZCBhcyB0aGUgaW5wdXQgb2YgYSBtZXJnZWpv aW4sIGFuZCB0aGV5IGRvbid0IHN1cHBvcnQKIAkgKiBtYXJrL3Jlc3RvcmUgYXQgcHJlc2VudC4K LQkgKgotCSAqIFdlIGRvbid0IHRlc3QgdGhlIHZhbHVlIG9mIGVuYWJsZV9tYXRlcmlhbCBoZXJl LCBiZWNhdXNlCi0JICogbWF0ZXJpYWxpemF0aW9uIGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVz cyBpbiB0aGlzIGNhc2UsIGFuZCB0dXJuaW5nCi0JICogaXQgb2ZmIGRvZXMgbm90IGVudGl0bGUg dXMgdG8gZGVsaXZlciBhbiBpbnZhbGlkIHBsYW4uCiAJICovCiAJZWxzZSBpZiAoaW5uZXJzb3J0 a2V5cyA9PSBOSUwgJiYKIAkJCSAhRXhlY1N1cHBvcnRzTWFya1Jlc3RvcmUoaW5uZXJfcGF0aCkp CkBAIC00MDU2LDEwICs0MTU0LDExIEBAIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZv ICpyb290LCBNZXJnZVBhdGggKnBhdGgsCiAJICogdGhvdWdoLgogCSAqCiAJICogU2luY2UgbWF0 ZXJpYWxpemF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGluIHRoaXMgY2FzZSwK LQkgKiByYXRoZXIgdGhhbiBuZWNlc3NhcnkgZm9yIGNvcnJlY3RuZXNzLCB3ZSBza2lwIGl0IGlm IGVuYWJsZV9tYXRlcmlhbCBpcwotCSAqIG9mZi4KKwkgKiByYXRoZXIgdGhhbiBuZWNlc3Nhcnkg Zm9yIGNvcnJlY3RuZXNzLCB3ZSBza2lwIGl0IGlmIG1hdGVyaWFsaXphdGlvbiBpcworCSAqIHN3 aXRjaGVkIG9mZi4KIAkgKi8KLQllbHNlIGlmIChlbmFibGVfbWF0ZXJpYWwgJiYgaW5uZXJzb3J0 a2V5cyAhPSBOSUwgJiYKKwllbHNlIGlmICgoZXh0cmEtPnBnc19tYXNrICYgUEdTX01FUkdFSk9J Tl9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJIGlubmVyc29ydGtleXMgIT0gTklMICYmCiAJCQkg cmVsYXRpb25fYnl0ZV9zaXplKGlubmVyX3BhdGhfcm93cywKIAkJCQkJCQkJaW5uZXJfcGF0aC0+ cGF0aHRhcmdldC0+d2lkdGgpID4KIAkJCSB3b3JrX21lbSAqIChTaXplKSAxMDI0KQpAQCAtNDA2 NywxMSArNDE2NiwyOSBAQCBmaW5hbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwg TWVyZ2VQYXRoICpwYXRoLAogCWVsc2UKIAkJcGF0aC0+bWF0ZXJpYWxpemVfaW5uZXIgPSBmYWxz ZTsKIAotCS8qIENoYXJnZSB0aGUgcmlnaHQgaW5jcmVtZW50YWwgY29zdCBmb3IgdGhlIGNob3Nl biBjYXNlICovCisJLyogR2V0IHRoZSBudW1iZXIgb2YgZGlzYWJsZWQgbm9kZXMsIG5vdCB5ZXQg aW5jbHVkaW5nIHRoaXMgb25lLiAqLworCXBhdGgtPmpwYXRoLnBhdGguZGlzYWJsZWRfbm9kZXMg PSB3b3Jrc3BhY2UtPmRpc2FibGVkX25vZGVzOworCisJLyoKKwkgKiBDaGFyZ2UgdGhlIHJpZ2h0 IGluY3JlbWVudGFsIGNvc3QgZm9yIHRoZSBjaG9zZW4gY2FzZSwgYW5kIHVwZGF0ZQorCSAqIGVu YWJsZV9tYXNrIGFzIGFwcHJvcHJpYXRlLgorCSAqLwogCWlmIChwYXRoLT5tYXRlcmlhbGl6ZV9p bm5lcikKKwl7CiAJCXJ1bl9jb3N0ICs9IG1hdF9pbm5lcl9jb3N0OworCQllbmFibGVfbWFzayB8 PSBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFOworCX0KIAllbHNlCisJewogCQlydW5fY29zdCAr PSBiYXJlX2lubmVyX2Nvc3Q7CisJCWVuYWJsZV9tYXNrIHw9IFBHU19NRVJHRUpPSU5fUExBSU47 CisJfQorCisJLyogSW5jcmVtZW50YWwgY291bnQgb2YgZGlzYWJsZWQgbm9kZXMgaWYgdGhpcyBu b2RlIGlzIGRpc2FibGVkLiAqLworCWlmIChwYXRoLT5qcGF0aC5wYXRoLnBhcmFsbGVsX3dvcmtl cnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJaWYg KChleHRyYS0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2spCisJCSsrcGF0 aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlczsKIAogCS8qIENQVSBjb3N0cyAqLwogCkBAIC00 MjA5LDkgKzQzMjYsMTMgQEAgaW5pdGlhbF9jb3N0X2hhc2hqb2luKFBsYW5uZXJJbmZvICpyb290 LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAogCWludAkJCW51bWJhdGNoZXM7CiAJaW50 CQkJbnVtX3NrZXdfbWN2czsKIAlzaXplX3QJCXNwYWNlX2FsbG93ZWQ7CS8qIHVudXNlZCAqLwor CXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfSEFTSEpPSU47CisKKwlpZiAob3V0ZXJfcGF0aC0+ cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9O UEFSVElBTDsKIAogCS8qIENvdW50IHVwIGRpc2FibGVkIG5vZGVzLiAqLwotCWRpc2FibGVkX25v ZGVzID0gZW5hYmxlX2hhc2hqb2luID8gMCA6IDE7CisJZGlzYWJsZWRfbm9kZXMgPSAoZXh0cmEt PnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJZGlzYWJs ZWRfbm9kZXMgKz0gaW5uZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAJZGlzYWJsZWRfbm9kZXMg Kz0gb3V0ZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9p bmR4cGF0aC5jCmluZGV4IGVkYzZkMmFjMWQzLi5hNzAxYzg0N2NiNSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC0yMjMzLDggKzIyMzMsOCBAQCBjaGVja19pbmRleF9v bmx5KFJlbE9wdEluZm8gKnJlbCwgSW5kZXhPcHRJbmZvICppbmRleCkKIAlMaXN0Q2VsbCAgICps YzsKIAlpbnQJCQlpOwogCi0JLyogSW5kZXgtb25seSBzY2FucyBtdXN0IGJlIGVuYWJsZWQgKi8K LQlpZiAoIWVuYWJsZV9pbmRleG9ubHlzY2FuKQorCS8qIElmIHdlJ3JlIG5vdCBhbGxvd2VkIHRv IGNvbnNpZGVyIGluZGV4LW9ubHkgc2NhbnMsIGdpdmUgdXAgbm93ICovCisJaWYgKChyZWwtPnBn c19tYXNrICYgUEdTX0NPTlNJREVSX0lOREVYT05MWSkgPT0gMCkKIAkJcmV0dXJuIGZhbHNlOwog CiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCmluZGV4IDNiOTQwN2ViMmVi Li40YmY3YWY1MWYyZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9p bnBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCkBAIC0y OSw4ICsyOSw5IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRp bHMvdHlwY2FjaGUuaCIKIAotLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBh ZGRfcGF0aHNfdG9fam9pbnJlbCgpICovCisvKiBIb29rcyBmb3IgcGx1Z2lucyB0byBnZXQgY29u dHJvbCBpbiBhZGRfcGF0aHNfdG9fam9pbnJlbCgpICovCiBzZXRfam9pbl9wYXRobGlzdF9ob29r X3R5cGUgc2V0X2pvaW5fcGF0aGxpc3RfaG9vayA9IE5VTEw7Citqb2luX3BhdGhfc2V0dXBfaG9v a190eXBlIGpvaW5fcGF0aF9zZXR1cF9ob29rID0gTlVMTDsKIAogLyoKICAqIFBhdGhzIHBhcmFt ZXRlcml6ZWQgYnkgYSBwYXJlbnQgcmVsIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIHBhcmFtZXRl cml6ZWQKQEAgLTE1MSw2ICsxNTIsNyBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFubmVySW5m byAqcm9vdCwKIAlleHRyYS5tZXJnZWNsYXVzZV9saXN0ID0gTklMOwogCWV4dHJhLnNqaW5mbyA9 IHNqaW5mbzsKIAlleHRyYS5wYXJhbV9zb3VyY2VfcmVscyA9IE5VTEw7CisJZXh0cmEucGdzX21h c2sgPSBqb2lucmVsLT5wZ3NfbWFzazsKIAogCS8qCiAJICogU2VlIGlmIHRoZSBpbm5lciByZWxh dGlvbiBpcyBwcm92YWJseSB1bmlxdWUgZm9yIHRoaXMgb3V0ZXIgcmVsLgpAQCAtMjA3LDEzICsy MDksMzggQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJaWYgKGpv aW50eXBlID09IEpPSU5fVU5JUVVFX09VVEVSIHx8IGpvaW50eXBlID09IEpPSU5fVU5JUVVFX0lO TkVSKQogCQlqb2ludHlwZSA9IEpPSU5fSU5ORVI7CiAKKwkvKgorCSAqIEdpdmUgZXh0ZW5zaW9u cyBhIGNoYW5jZSB0byB0YWtlIGNvbnRyb2wuIEluIHBhcnRpY3VsYXIsIGFuIGV4dGVuc2lvbgor CSAqIG1pZ2h0IHdhbnQgdG8gbW9kaWZ5IGV4dHJhLnBnc19tYXNrLiBJdCdzIHBvc3NpYmxlIHRv IG92ZXJyaWRlIHBnc19tYXNrCisJICogb24gYSBxdWVyeS13aWRlIGJhc2lzIHVzaW5nIGpvaW5f c2VhcmNoX2hvb2ssIG9yIGZvciBhIHBhcnRpY3VsYXIKKwkgKiByZWxhdGlvbiB1c2luZyBqb2lu cmVsX3NldHVwX2hvb2ssIGJ1dCBleHRlbnNpb25zIHRoYXQgd2FudCB0byBwcm92aWRlCisJICog ZGlmZmVyZW50IGFkdmljZSBmb3IgdGhlIHNhbWUgam9pbnJlbCBiYXNlZCBvbiB0aGUgY2hvaWNl IG9mIGlubmVycmVsCisJICogYW5kIG91dGVycmVsIHdpbGwgbmVlZCB0byB1c2UgdGhpcyBob29r LgorCSAqCisJICogQSB2ZXJ5IHNpbXBsZSB3YXkgZm9yIGFuIGV4dGVuc2lvbiB0byB1c2UgdGhp cyBob29rIGlzIHRvIHNldAorCSAqIGV4dHJhLnBnc19tYXNrID0gMCwgaWYgaXQgc2ltcGx5IGRv ZXNuJ3Qgd2FudCBhbnkgb2YgdGhlIHBhdGhzCisJICogZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbCB0 byBhZGRfcGF0aHNfdG9fam9pbnJlbCgpIHRvIGJlIHNlbGVjdGVkLiBBbgorCSAqIGV4dGVuc2lv biBjb3VsZCB1c2UgdGhpcyB0ZWNobmlxdWUgdG8gY29uc3RyYWluIHRoZSBqb2luIG9yZGVyLCBz aW5jZQorCSAqIGl0IGNvdWxkIHRoZXJlYnkgYXJyYW5nZSB0byByZWplY3QgYWxsIHBhdGhzIGZy b20gam9pbiBvcmRlcnMgdGhhdCBpdAorCSAqIGRvZXMgbm90IGxpa2UuIEFuIGV4dGVuc2lvbiBj YW4gYWxzbyBzZWxlY3RpdmVseSBjbGVhciBiaXRzIGZyb20KKwkgKiBleHRyYS5wZ3NfbWFzayB0 byBydWxlIG91dCBzcGVjaWZpYyB0ZWNobmlxdWVzIGZvciBzcGVjaWZpYyBqb2lucywgb3IKKwkg KiBldmVuIHJlcGxhY2UgdGhlIG1hc2sgZW50aXJlbHkuCisJICoKKwkgKiBOQjogQmVsb3cgdGhp cyBwb2ludCwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FyZWZ1bCB0byByZWZlcmVuY2UKKwkg KiBleHRyYS5wZ3NfbWFzayByYXRoZXIgdGhhbiByZWwtPnBnc19tYXNrIHRvIGF2b2lkIGRpc3Jl Z2FyZGluZyBhbnkKKwkgKiBjaGFuZ2VzIG1hZGUgYnkgdGhlIGhvb2sgd2UncmUgYWJvdXQgdG8g Y2FsbC4KKwkgKi8KKwlpZiAoam9pbl9wYXRoX3NldHVwX2hvb2spCisJCWpvaW5fcGF0aF9zZXR1 cF9ob29rKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkgam9pbnR5 cGUsICZleHRyYSk7CisKIAkvKgogCSAqIEZpbmQgcG90ZW50aWFsIG1lcmdlam9pbiBjbGF1c2Vz LiAgV2UgY2FuIHNraXAgdGhpcyBpZiB3ZSBhcmUgbm90CiAJICogaW50ZXJlc3RlZCBpbiBkb2lu ZyBhIG1lcmdlam9pbi4gIEhvd2V2ZXIsIG1lcmdlam9pbiBtYXkgYmUgb3VyIG9ubHkKLQkgKiB3 YXkgb2YgaW1wbGVtZW50aW5nIGEgZnVsbCBvdXRlciBqb2luLCBzbyBvdmVycmlkZSBlbmFibGVf bWVyZ2Vqb2luIGlmCi0JICogaXQncyBhIGZ1bGwgam9pbi4KKwkgKiB3YXkgb2YgaW1wbGVtZW50 aW5nIGEgZnVsbCBvdXRlciBqb2luLCBzbyBpbiB0aGF0IGNhc2Ugd2UgZG9uJ3QgY2FyZQorCSAq IHdoZXRoZXIgbWVyZ2Vqb2lucyBhcmUgZGlzYWJsZWQuCiAJICovCi0JaWYgKGVuYWJsZV9tZXJn ZWpvaW4gfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMKQorCWlmICgoZXh0cmEucGdzX21hc2sgJiBQ R1NfTUVSR0VKT0lOX0FOWSkgIT0gMCB8fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCiAJCWV4dHJh Lm1lcmdlY2xhdXNlX2xpc3QgPSBzZWxlY3RfbWVyZ2Vqb2luX2NsYXVzZXMocm9vdCwKIAkJCQkJ CQkJCQkJCQkJICBqb2lucmVsLAogCQkJCQkJCQkJCQkJCQkgIG91dGVycmVsLApAQCAtMzIxLDEw ICszNDgsMTAgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAKIAkv KgogCSAqIDQuIENvbnNpZGVyIHBhdGhzIHdoZXJlIGJvdGggb3V0ZXIgYW5kIGlubmVyIHJlbGF0 aW9ucyBtdXN0IGJlIGhhc2hlZAotCSAqIGJlZm9yZSBiZWluZyBqb2luZWQuICBBcyBhYm92ZSwg ZGlzcmVnYXJkIGVuYWJsZV9oYXNoam9pbiBmb3IgZnVsbAotCSAqIGpvaW5zLCBiZWNhdXNlIHRo ZXJlIG1heSBiZSBubyBvdGhlciBhbHRlcm5hdGl2ZS4KKwkgKiBiZWZvcmUgYmVpbmcgam9pbmVk LiAgQXMgYWJvdmUsIHdoZW4gaXQncyBhIGZ1bGwgam9pbiwgd2UgbXVzdCB0cnkgdGhpcworCSAq IGV2ZW4gd2hlbiB0aGUgcGF0aCB0eXBlIGlzIGRpc2FibGVkLCBiZWNhdXNlIGl0IG1heSBiZSBv dXIgb25seSBvcHRpb24uCiAJICovCi0JaWYgKGVuYWJsZV9oYXNoam9pbiB8fCBqb2ludHlwZSA9 PSBKT0lOX0ZVTEwpCisJaWYgKChleHRyYS5wZ3NfbWFzayAmIFBHU19IQVNISk9JTikgIT0gMCB8 fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCiAJCWhhc2hfaW5uZXJfYW5kX291dGVyKHJvb3QsIGpv aW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKIAkJCQkJCQkgam9pbnR5cGUsICZleHRyYSk7CiAK QEAgLTMzMyw3ICszNjAsNyBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFubmVySW5mbyAqcm9v dCwKIAkgKiB0byB0aGUgc2FtZSBzZXJ2ZXIgYW5kIGFzc2lnbmVkIHRvIHRoZSBzYW1lIHVzZXIg dG8gY2hlY2sgYWNjZXNzCiAJICogcGVybWlzc2lvbnMgYXMsIGdpdmUgdGhlIEZEVyBhIGNoYW5j ZSB0byBwdXNoIGRvd24gam9pbnMuCiAJICovCi0JaWYgKGpvaW5yZWwtPmZkd3JvdXRpbmUgJiYK KwlpZiAoKGV4dHJhLnBnc19tYXNrICYgUEdTX0ZPUkVJR05KT0lOKSAhPSAwICYmIGpvaW5yZWwt PmZkd3JvdXRpbmUgJiYKIAkJam9pbnJlbC0+ZmR3cm91dGluZS0+R2V0Rm9yZWlnbkpvaW5QYXRo cykKIAkJam9pbnJlbC0+ZmR3cm91dGluZS0+R2V0Rm9yZWlnbkpvaW5QYXRocyhyb290LCBqb2lu cmVsLAogCQkJCQkJCQkJCQkJIG91dGVycmVsLCBpbm5lcnJlbCwKQEAgLTM0Miw4ICszNjksMTMg QEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJLyoKIAkgKiA2LiBG aW5hbGx5LCBnaXZlIGV4dGVuc2lvbnMgYSBjaGFuY2UgdG8gbWFuaXB1bGF0ZSB0aGUgcGF0aCBs aXN0LiAgVGhleQogCSAqIGNvdWxkIGFkZCBuZXcgcGF0aHMgKHN1Y2ggYXMgQ3VzdG9tUGF0aHMp IGJ5IGNhbGxpbmcgYWRkX3BhdGgoKSwgb3IKLQkgKiBhZGRfcGFydGlhbF9wYXRoKCkgaWYgcGFy YWxsZWwgYXdhcmUuICBUaGV5IGNvdWxkIGFsc28gZGVsZXRlIG9yIG1vZGlmeQotCSAqIHBhdGhz IGFkZGVkIGJ5IHRoZSBjb3JlIGNvZGUuCisJICogYWRkX3BhcnRpYWxfcGF0aCgpIGlmIHBhcmFs bGVsIGF3YXJlLgorCSAqCisJICogSW4gdGhlb3J5LCBleHRlbnNpb25zIGNvdWxkIGFsc28gdXNl IHRoaXMgaG9vayB0byBkZWxldGUgb3IgbW9kaWZ5CisJICogcGF0aHMgYWRkZWQgYnkgdGhlIGNv cmUgY29kZSwgYnV0IGluIHByYWN0aWNlIHRoaXMgaXMgZGlmZmljdWx0IHRvIG1ha2UKKwkgKiB3 b3JrLCBzaW5jZSBpdCdzIHRvbyBsYXRlIHRvIGdldCBiYWNrIGFueSBwYXRocyB0aGF0IGhhdmUg YWxyZWFkeSBiZWVuCisJICogZGlzY2FyZGVkIGJ5IGFkZF9wYXRoKCkgb3IgYWRkX3BhcnRpYWxf cGF0aCgpLiBJZiB5b3UncmUgdHJ5aW5nIHRvCisJICogc3VwcHJlc3MgcGF0aHMsIGNvbnNpZGVy IHVzaW5nIGpvaW5fcGF0aF9zZXR1cF9ob29rIGluc3RlYWQuCiAJICovCiAJaWYgKHNldF9qb2lu X3BhdGhsaXN0X2hvb2spCiAJCXNldF9qb2luX3BhdGhsaXN0X2hvb2socm9vdCwgam9pbnJlbCwg b3V0ZXJyZWwsIGlubmVycmVsLApAQCAtNjkwLDcgKzcyMiw3IEBAIGdldF9tZW1vaXplX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlubmVycmVsLAogCUxpc3QJICAgKnBoX2xh dGVyYWxfdmFyczsKIAogCS8qIE9idmlvdXNseSBub3QgaWYgaXQncyBkaXNhYmxlZCAqLwotCWlm ICghZW5hYmxlX21lbW9pemUpCisJaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTkVTVExPT1Bf TUVNT0laRSkgPT0gMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgpAQCAtODQ1LDYgKzg3Nyw3IEBA IHRyeV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAgUGF0aCAqaW5uZXJf cGF0aCwKIAkJCQkgIExpc3QgKnBhdGhrZXlzLAogCQkJCSAgSm9pblR5cGUgam9pbnR5cGUsCisJ CQkJICB1aW50NjQgbmVzdGxvb3Bfc3VidHlwZSwKIAkJCQkgIEpvaW5QYXRoRXh0cmFEYXRhICpl eHRyYSkKIHsKIAlSZWxpZHMJCXJlcXVpcmVkX291dGVyOwpAQCAtOTI3LDYgKzk2MCw3IEBAIHRy eV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqIG1ldGhvZG9sb2d5IHdvcnRo d2hpbGUuCiAJICovCiAJaW5pdGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3b3Jrc3BhY2UsIGpv aW50eXBlLAorCQkJCQkJICBuZXN0bG9vcF9zdWJ0eXBlIHwgUEdTX0NPTlNJREVSX05PTlBBUlRJ QUwsCiAJCQkJCQkgIG91dGVyX3BhdGgsIGlubmVyX3BhdGgsIGV4dHJhKTsKIAogCWlmIChhZGRf cGF0aF9wcmVjaGVjayhqb2lucmVsLCB3b3Jrc3BhY2UuZGlzYWJsZWRfbm9kZXMsCkBAIC05NjQs NiArOTk4LDcgQEAgdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCSAgUGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkJCSAgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJICB1aW50NjQgbmVzdGxvb3Bfc3VidHlwZSwK IAkJCQkJCSAgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQogewogCUpvaW5Db3N0V29ya3NwYWNl IHdvcmtzcGFjZTsKQEAgLTEwMTEsNyArMTA0Niw3IEBAIHRyeV9wYXJ0aWFsX25lc3Rsb29wX3Bh dGgoUGxhbm5lckluZm8gKnJvb3QsCiAJICogQmVmb3JlIGNyZWF0aW5nIGEgcGF0aCwgZ2V0IGEg cXVpY2sgbG93ZXIgYm91bmQgb24gd2hhdCBpdCBpcyBsaWtlbHkgdG8KIAkgKiBjb3N0LiAgQmFp bCBvdXQgcmlnaHQgYXdheSBpZiBpdCBsb29rcyB0ZXJyaWJsZS4KIAkgKi8KLQlpbml0aWFsX2Nv c3RfbmVzdGxvb3Aocm9vdCwgJndvcmtzcGFjZSwgam9pbnR5cGUsCisJaW5pdGlhbF9jb3N0X25l c3Rsb29wKHJvb3QsICZ3b3Jrc3BhY2UsIGpvaW50eXBlLCBuZXN0bG9vcF9zdWJ0eXBlLAogCQkJ CQkJICBvdXRlcl9wYXRoLCBpbm5lcl9wYXRoLCBleHRyYSk7CiAJaWYgKCFhZGRfcGFydGlhbF9w YXRoX3ByZWNoZWNrKGpvaW5yZWwsIHdvcmtzcGFjZS5kaXNhYmxlZF9ub2RlcywKIAkJCQkJCQkJ ICAgd29ya3NwYWNlLnRvdGFsX2Nvc3QsIHBhdGhrZXlzKSkKQEAgLTE4NTksMTQgKzE4OTQsMTQg QEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJaWYgKG5lc3Rqb2lu T0spCiAJewogCQkvKgotCQkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRoZSBjaGVhcGVzdCBp bm5lciBwYXRoLCB1bmxlc3MKLQkJICogZW5hYmxlX21hdGVyaWFsIGlzIG9mZiBvciB0aGUgcGF0 aCBpbiBxdWVzdGlvbiBtYXRlcmlhbGl6ZXMgaXRzCi0JCSAqIG91dHB1dCBhbnl3YXkuCisJCSAq IENvbnNpZGVyIG1hdGVyaWFsaXppbmcgdGhlIGNoZWFwZXN0IGlubmVyIHBhdGgsIHVubGVzcyB0 aGF0IGlzCisJCSAqIGRpc2FibGVkIG9yIHRoZSBwYXRoIGluIHF1ZXN0aW9uIG1hdGVyaWFsaXpl cyBpdHMgb3V0cHV0IGFueXdheS4KIAkJICovCi0JCWlmIChlbmFibGVfbWF0ZXJpYWwgJiYgaW5u ZXJfY2hlYXBlc3RfdG90YWwgIT0gTlVMTCAmJgorCQlpZiAoKGV4dHJhLT5wZ3NfbWFzayAmIFBH U19ORVNUTE9PUF9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJaW5uZXJfY2hlYXBlc3RfdG90YWwg IT0gTlVMTCAmJgogCQkJIUV4ZWNNYXRlcmlhbGl6ZXNPdXRwdXQoaW5uZXJfY2hlYXBlc3RfdG90 YWwtPnBhdGh0eXBlKSkKIAkJCW1hdHBhdGggPSAoUGF0aCAqKQotCQkJCWNyZWF0ZV9tYXRlcmlh bF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVzdF90b3RhbCk7CisJCQkJY3JlYXRlX21hdGVy aWFsX3BhdGgoaW5uZXJyZWwsIGlubmVyX2NoZWFwZXN0X3RvdGFsLCB0cnVlKTsKIAl9CiAKIAlm b3JlYWNoKGxjMSwgb3V0ZXJyZWwtPnBhdGhsaXN0KQpAQCAtMTkwOSw2ICsxOTQ0LDcgQEAgbWF0 Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgaW5uZXJwYXRo LAogCQkJCQkJCQkgIG1lcmdlX3BhdGhrZXlzLAogCQkJCQkJCQkgIGpvaW50eXBlLAorCQkJCQkJ CQkgIFBHU19ORVNUTE9PUF9QTEFJTiwKIAkJCQkJCQkJICBleHRyYSk7CiAKIAkJCQkvKgpAQCAt MTkyNSw2ICsxOTYxLDcgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQkgIG1wYXRoLAogCQkJCQkJCQkJICBtZXJnZV9wYXRoa2V5cywKIAkJCQkJCQkJ CSAgam9pbnR5cGUsCisJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NRU1PSVpFLAogCQkJCQkJCQkJ ICBleHRyYSk7CiAJCQl9CiAKQEAgLTE5MzYsNiArMTk3Myw3IEBAIG1hdGNoX3Vuc29ydGVkX291 dGVyKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgIG1hdHBhdGgsCiAJCQkJCQkJCSAgbWVy Z2VfcGF0aGtleXMsCiAJCQkJCQkJCSAgam9pbnR5cGUsCisJCQkJCQkJCSAgUEdTX05FU1RMT09Q X01BVEVSSUFMSVpFLAogCQkJCQkJCQkgIGV4dHJhKTsKIAkJfQogCkBAIC0yMDUyLDE2ICsyMDkw LDE3IEBAIGNvbnNpZGVyX3BhcmFsbGVsX25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LAogCiAJ LyoKIAkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoLCB1 bmxlc3M6IDEpCi0JICogZW5hYmxlX21hdGVyaWFsIGlzIG9mZiwgMikgdGhlIGNoZWFwZXN0IGlu bmVyIHBhdGggaXMgbm90CisJICogbWF0ZXJpYWxpemF0aW9uIGlzIGRpc2FibGVkIGhlcmUsIDIp IHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIG5vdAogCSAqIHBhcmFsbGVsLXNhZmUsIDMpIHRo ZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIHBhcmFtZXRlcml6ZWQgYnkgdGhlIG91dGVyCiAJICog cmVsLCBvciA0KSB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCBtYXRlcmlhbGl6ZXMgaXRzIG91dHB1 dCBhbnl3YXkuCiAJICovCi0JaWYgKGVuYWJsZV9tYXRlcmlhbCAmJiBpbm5lcl9jaGVhcGVzdF90 b3RhbC0+cGFyYWxsZWxfc2FmZSAmJgorCWlmICgoZXh0cmEtPnBnc19tYXNrICYgUEdTX05FU1RM T09QX01BVEVSSUFMSVpFKSAhPSAwICYmCisJCWlubmVyX2NoZWFwZXN0X3RvdGFsLT5wYXJhbGxl bF9zYWZlICYmCiAJCSFQQVRIX1BBUkFNX0JZX1JFTChpbm5lcl9jaGVhcGVzdF90b3RhbCwgb3V0 ZXJyZWwpICYmCiAJCSFFeGVjTWF0ZXJpYWxpemVzT3V0cHV0KGlubmVyX2NoZWFwZXN0X3RvdGFs LT5wYXRodHlwZSkpCiAJewogCQltYXRwYXRoID0gKFBhdGggKikKLQkJCWNyZWF0ZV9tYXRlcmlh bF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVzdF90b3RhbCk7CisJCQljcmVhdGVfbWF0ZXJp YWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hlYXBlc3RfdG90YWwsIHRydWUpOwogCQlBc3NlcnQo bWF0cGF0aC0+cGFyYWxsZWxfc2FmZSk7CiAJfQogCkBAIC0yMDkxLDcgKzIxMzAsOCBAQCBjb25z aWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQljb250aW51ZTsK IAogCQkJdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChyb290LCBqb2lucmVsLCBvdXRlcnBhdGgs IGlubmVycGF0aCwKLQkJCQkJCQkJCSAgcGF0aGtleXMsIGpvaW50eXBlLCBleHRyYSk7CisJCQkJ CQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwKKwkJCQkJCQkJCSAgUEdTX05FU1RMT09QX1BMQUlO LCBleHRyYSk7CiAKIAkJCS8qCiAJCQkgKiBUcnkgZ2VuZXJhdGluZyBhIG1lbW9pemUgcGF0aCBh bmQgc2VlIGlmIHRoYXQgbWFrZXMgdGhlIG5lc3RlZApAQCAtMjEwMiwxMyArMjE0MiwxNSBAQCBj b25zaWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCSBl eHRyYSk7CiAJCQlpZiAobXBhdGggIT0gTlVMTCkKIAkJCQl0cnlfcGFydGlhbF9uZXN0bG9vcF9w YXRoKHJvb3QsIGpvaW5yZWwsIG91dGVycGF0aCwgbXBhdGgsCi0JCQkJCQkJCQkJICBwYXRoa2V5 cywgam9pbnR5cGUsIGV4dHJhKTsKKwkJCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwKKwkJ CQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NRU1PSVpFLCBleHRyYSk7CiAJCX0KIAogCQkvKiBBbHNv IGNvbnNpZGVyIG1hdGVyaWFsaXplZCBmb3JtIG9mIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoICov CiAJCWlmIChtYXRwYXRoICE9IE5VTEwpCiAJCQl0cnlfcGFydGlhbF9uZXN0bG9vcF9wYXRoKHJv b3QsIGpvaW5yZWwsIG91dGVycGF0aCwgbWF0cGF0aCwKLQkJCQkJCQkJCSAgcGF0aGtleXMsIGpv aW50eXBlLCBleHRyYSk7CisJCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwKKwkJCQkJCQkJ CSAgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFLCBleHRyYSk7CiAJfQogfQogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC90aWRwYXRoLmMKaW5kZXggMmJmYjMzOGI4MWMuLjYzOWEwZDNjYWRiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMKKysrIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvdGlkcGF0aC5jCkBAIC01MDAsMTggKzUwMCwxOSBAQCBjcmVh dGVfdGlkc2Nhbl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQogCUxp c3QJICAgKnRpZHF1YWxzOwogCUxpc3QJICAgKnRpZHJhbmdlcXVhbHM7CiAJYm9vbAkJaXNDdXJy ZW50T2Y7CisJYm9vbAkJZW5hYmxlZCA9IChyZWwtPnBnc19tYXNrICYgUEdTX1RJRFNDQU4pICE9 IDA7CiAKIAkvKgogCSAqIElmIGFueSBzdWl0YWJsZSBxdWFscyBleGlzdCBpbiB0aGUgcmVsJ3Mg YmFzZXJlc3RyaWN0IGxpc3QsIGdlbmVyYXRlIGEKIAkgKiBwbGFpbiAodW5wYXJhbWV0ZXJpemVk KSBUaWRQYXRoIHdpdGggdGhlbS4KIAkgKgotCSAqIFdlIHNraXAgdGhpcyB3aGVuIGVuYWJsZV90 aWRzY2FuID0gZmFsc2UsIGV4Y2VwdCB3aGVuIHRoZSBxdWFsIGlzCisJICogV2Ugc2tpcCB0aGlz IHdoZW4gVElEIHNjYW5zIGFyZSBkaXNhYmxlZCwgZXhjZXB0IHdoZW4gdGhlIHF1YWwgaXMKIAkg KiBDdXJyZW50T2ZFeHByLiBJbiB0aGF0IGNhc2UsIGEgVElEIHNjYW4gaXMgdGhlIG9ubHkgY29y cmVjdCBwYXRoLgogCSAqLwogCXRpZHF1YWxzID0gVGlkUXVhbEZyb21SZXN0cmljdEluZm9MaXN0 KHJvb3QsIHJlbC0+YmFzZXJlc3RyaWN0aW5mbywgcmVsLAogCQkJCQkJCQkJCSAgICZpc0N1cnJl bnRPZik7CiAKLQlpZiAodGlkcXVhbHMgIT0gTklMICYmIChlbmFibGVfdGlkc2NhbiB8fCBpc0N1 cnJlbnRPZikpCisJaWYgKHRpZHF1YWxzICE9IE5JTCAmJiAoZW5hYmxlZCB8fCBpc0N1cnJlbnRP ZikpCiAJewogCQkvKgogCQkgKiBUaGlzIHBhdGggdXNlcyBubyBqb2luIGNsYXVzZXMsIGJ1dCBp dCBjb3VsZCBzdGlsbCBoYXZlIHJlcXVpcmVkCkBAIC01MzMsNyArNTM0LDcgQEAgY3JlYXRlX3Rp ZHNjYW5fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKIAl9CiAKIAkv KiBTa2lwIHRoZSByZXN0IGlmIFRJRCBzY2FucyBhcmUgZGlzYWJsZWQuICovCi0JaWYgKCFlbmFi bGVfdGlkc2NhbikKKwlpZiAoIWVuYWJsZWQpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggNjU1YzEwOTc4MTIuLjdlYWQ2 ZGFkOTMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFu LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC02NTM0 LDYgKzY1MzQsNyBAQCBtYXRlcmlhbGl6ZV9maW5pc2hlZF9wbGFuKFBsYW4gKnN1YnBsYW4pCiAK IAkvKiBTZXQgY29zdCBkYXRhICovCiAJY29zdF9tYXRlcmlhbCgmbWF0cGF0aCwKKwkJCQkgIGVu YWJsZV9tYXRlcmlhbCwKIAkJCQkgIHN1YnBsYW4tPmRpc2FibGVkX25vZGVzLAogCQkJCSAgc3Vi cGxhbi0+c3RhcnR1cF9jb3N0LAogCQkJCSAgc3VicGxhbi0+dG90YWxfY29zdCwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCA4YjFhYjg0N2YzOS4uZTI2ODNiMjQ4MWYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTQ2Miw2ICs0NjIsNTMgQEAgc3Rh bmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50 IGN1cnNvck9wdGlvbnMsCiAJCXR1cGxlX2ZyYWN0aW9uID0gMC4wOwogCX0KIAorCS8qCisJICog Q29tcHV0ZSB0aGUgaW5pdGlhbCBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ3kgbWFzay4KKwkgKgor CSAqIFNvbWUgc3RyYXRlZ2llcywgc3VjaCBhcyBQR1NfRk9SRUlHTkpPSU4sIGhhdmUgbm8gY29y cmVzcG9uZGluZyBlbmFibGVfKgorCSAqIEdVQywgYW5kIHNvIHRoZSBjb3JyZXNwb25kaW5nIGJp dHMgYXJlIGFsd2F5cyBzZXQgaW4gdGhlIGRlZmF1bHQKKwkgKiBzdHJhdGVneSBtYXNrLgorCSAq CisJICogSXQgbWF5IHNlZW0gc3VycHJpc2luZyB0aGF0IGVuYWJsZV9pbmRleHNjYW4gc2V0cyBi b3RoIFBHU19JTkRFWFNDQU4KKwkgKiBhbmQgUEdTX0lOREVYT05MWVNDQU4uIEhvd2V2ZXIsIHRo ZSBoaXN0b3JpY2FsIGJlaGF2aW9yIG9mIHRoaXMgR1VDCisJICogY29ycmVzcG9uZHMgdG8gdGhp cyBleGFjdGx5OiBlbmFibGVfaW5kZXhzY2FuPW9mZiBkaXNhYmxlcyBib3RoCisJICogaW5kZXgt c2NhbiBhbmQgaW5kZXgtb25seSBzY2FuIHBhdGhzLCB3aGVyZWFzIGVuYWJsZV9pbmRleG9ubHlz Y2FuPW9mZgorCSAqIGNvbnZlcnRzIHRoZSBpbmRleC1vbmx5IHNjYW4gcGF0aHMgdGhhdCB3ZSB3 b3VsZCBoYXZlIGNvbnNpZGVyZWQgaW50bworCSAqIGluZGV4IHNjYW4gcGF0aHMuCisJICovCisJ Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayA9IFBHU19BUFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5EIHwg UEdTX0ZPUkVJR05KT0lOIHwKKwkJUEdTX0dBVEhFUiB8IFBHU19DT05TSURFUl9OT05QQVJUSUFM OworCWlmIChlbmFibGVfdGlkc2NhbikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1Nf VElEU0NBTjsKKwlpZiAoZW5hYmxlX3NlcXNjYW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sg fD0gUEdTX1NFUVNDQU47CisJaWYgKGVuYWJsZV9pbmRleHNjYW4pCisJCWdsb2ItPmRlZmF1bHRf cGdzX21hc2sgfD0gUEdTX0lOREVYU0NBTiB8IFBHU19JTkRFWE9OTFlTQ0FOOworCWlmIChlbmFi bGVfaW5kZXhvbmx5c2NhbikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfQ09OU0lE RVJfSU5ERVhPTkxZOworCWlmIChlbmFibGVfYml0bWFwc2NhbikKKwkJZ2xvYi0+ZGVmYXVsdF9w Z3NfbWFzayB8PSBQR1NfQklUTUFQU0NBTjsKKwlpZiAoZW5hYmxlX21lcmdlam9pbikKKwl7CisJ CWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX01FUkdFSk9JTl9QTEFJTjsKKwkJaWYgKGVu YWJsZV9tYXRlcmlhbCkKKwkJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX01FUkdFSk9J Tl9NQVRFUklBTElaRTsKKwl9CisJaWYgKGVuYWJsZV9uZXN0bG9vcCkKKwl7CisJCWdsb2ItPmRl ZmF1bHRfcGdzX21hc2sgfD0gUEdTX05FU1RMT09QX1BMQUlOOworCQlpZiAoZW5hYmxlX21hdGVy aWFsKQorCQkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfTkVTVExPT1BfTUFURVJJQUxJ WkU7CisJCWlmIChlbmFibGVfbWVtb2l6ZSkKKwkJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0g UEdTX05FU1RMT09QX01FTU9JWkU7CisJfQorCWlmIChlbmFibGVfaGFzaGpvaW4pCisJCWdsb2It PmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0hBU0hKT0lOOworCWlmIChlbmFibGVfZ2F0aGVybWVy Z2UpCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0dBVEhFUl9NRVJHRTsKKwlpZiAo ZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQ R1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRTsKKwogCS8qIEFsbG93IHBsdWdpbnMgdG8gdGFrZSBj b250cm9sIGFmdGVyIHdlJ3ZlIGluaXRpYWxpemVkICJnbG9iIiAqLwogCWlmIChwbGFubmVyX3Nl dHVwX2hvb2spCiAJCSgqcGxhbm5lcl9zZXR1cF9ob29rKSAoZ2xvYiwgcGFyc2UsIHF1ZXJ5X3N0 cmluZywgJnR1cGxlX2ZyYWN0aW9uLCBlcyk7CkBAIC0zOTU0LDYgKzQwMDEsOSBAQCBtYWtlX2dy b3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQlp c19wYXJhbGxlbF9zYWZlKHJvb3QsIChOb2RlICopIGhhdmluZ1F1YWwpKQogCQlncm91cGVkX3Jl bC0+Y29uc2lkZXJfcGFyYWxsZWwgPSB0cnVlOwogCisJLyogQXNzdW1lIHRoYXQgdGhlIHNhbWUg cGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWdpZXMgYXJlIGFsbG93ZWQgKi8KKwlncm91cGVkX3JlbC0+ cGdzX21hc2sgPSBpbnB1dF9yZWwtPnBnc19tYXNrOworCiAJLyoKIAkgKiBJZiB0aGUgaW5wdXQg cmVsIGJlbG9uZ3MgdG8gYSBzaW5nbGUgRkRXLCBzbyBkb2VzIHRoZSBncm91cGVkIHJlbC4KIAkg Ki8KQEAgLTUzNDgsNiArNTM5OCw5IEBAIGNyZWF0ZV9vcmRlcmVkX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LAogCWlmIChpbnB1dF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsICYmIHRhcmdldF9wYXJh bGxlbF9zYWZlKQogCQlvcmRlcmVkX3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSB0cnVlOwogCisJ LyogQXNzdW1lIHRoYXQgdGhlIHNhbWUgcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWdpZXMgYXJlIGFs bG93ZWQuICovCisJb3JkZXJlZF9yZWwtPnBnc19tYXNrID0gaW5wdXRfcmVsLT5wZ3NfbWFzazsK KwogCS8qCiAJICogSWYgdGhlIGlucHV0IHJlbCBiZWxvbmdzIHRvIGEgc2luZ2xlIEZEVywgc28g ZG9lcyB0aGUgb3JkZXJlZF9yZWwuCiAJICovCkBAIC03NDI4LDYgKzc0ODEsNyBAQCBjcmVhdGVf cGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJZ3Jv dXBlZF9yZWwtPnJlbGlkcyk7CiAJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5jb25zaWRlcl9wYXJh bGxlbCA9CiAJCWdyb3VwZWRfcmVsLT5jb25zaWRlcl9wYXJhbGxlbDsKKwlwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwtPnBnc19tYXNrID0gZ3JvdXBlZF9yZWwtPnBnc19tYXNrOwogCXBhcnRpYWxseV9n cm91cGVkX3JlbC0+cmVsb3B0a2luZCA9IGdyb3VwZWRfcmVsLT5yZWxvcHRraW5kOwogCXBhcnRp YWxseV9ncm91cGVkX3JlbC0+c2VydmVyaWQgPSBncm91cGVkX3JlbC0+c2VydmVyaWQ7CiAJcGFy dGlhbGx5X2dyb3VwZWRfcmVsLT51c2VyaWQgPSBncm91cGVkX3JlbC0+dXNlcmlkOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggMGMwMDk4NjkxYTIuLjMxNWZlM2UxZjBk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAgLTE2NTcsNyArMTY1Nyw3 IEBAIGNyZWF0ZV9ncm91cF9yZXN1bHRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLAogICoJICBwYXRobm9kZS4KICAqLwogTWF0ZXJpYWxQYXRoICoKLWNyZWF0ZV9tYXRl cmlhbF9wYXRoKFJlbE9wdEluZm8gKnJlbCwgUGF0aCAqc3VicGF0aCkKK2NyZWF0ZV9tYXRlcmlh bF9wYXRoKFJlbE9wdEluZm8gKnJlbCwgUGF0aCAqc3VicGF0aCwgYm9vbCBlbmFibGVkKQogewog CU1hdGVyaWFsUGF0aCAqcGF0aG5vZGUgPSBtYWtlTm9kZShNYXRlcmlhbFBhdGgpOwogCkBAIC0x Njc2LDYgKzE2NzYsNyBAQCBjcmVhdGVfbWF0ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpyZWwsIFBh dGggKnN1YnBhdGgpCiAJcGF0aG5vZGUtPnN1YnBhdGggPSBzdWJwYXRoOwogCiAJY29zdF9tYXRl cmlhbCgmcGF0aG5vZGUtPnBhdGgsCisJCQkJICBlbmFibGVkLAogCQkJCSAgc3VicGF0aC0+ZGlz YWJsZWRfbm9kZXMsCiAJCQkJICBzdWJwYXRoLT5zdGFydHVwX2Nvc3QsCiAJCQkJICBzdWJwYXRo LT50b3RhbF9jb3N0LApAQCAtMTcyOCw4ICsxNzI5LDE1IEBAIGNyZWF0ZV9tZW1vaXplX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgUGF0aCAqc3VicGF0aCwKIAlwYXRo bm9kZS0+ZXN0X3VuaXF1ZV9rZXlzID0gMC4wOwogCXBhdGhub2RlLT5lc3RfaGl0X3JhdGlvID0g MC4wOwogCi0JLyogd2Ugc2hvdWxkIG5vdCBnZW5lcmF0ZSB0aGlzIHBhdGggdHlwZSB3aGVuIGVu YWJsZV9tZW1vaXplPWZhbHNlICovCi0JQXNzZXJ0KGVuYWJsZV9tZW1vaXplKTsKKwkvKgorCSAq IFdlIHNob3VsZCBub3QgYmUgYXNrZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYXRoIHR5cGUgd2hlbiBt ZW1vaXphdGlvbiBpcworCSAqIGRpc2FibGVkLCBzbyBzZXQgb3VyIGNvdW50IG9mIGRpc2FibGVk IG5vZGVzIGVxdWFsIHRvIHRoZSBzdWJwYXRoJ3MKKwkgKiBjb3VudC4KKwkgKgorCSAqIEl0IHdv dWxkIGJlIG5pY2UgdG8gYWxzbyBBc3NlcnQgdGhhdCBtZW1vaXphdGlvbiBpcyBlbmFibGVkLCBi dXQgdGhlCisJICogdmFsdWUgb2YgZW5hYmxlX21lbW9pemUgaXMgbm90IGNvbnRyb2xsaW5nOiB3 aGF0IHdlIHdvdWxkIG5lZWQgdG8gY2hlY2sKKwkgKiBpcyB0aGF0IHRoZSBKb2luUGF0aEV4dHJh RGF0YSdzIHBnc19tYXNrIGluY2x1ZGVkIFBHU19ORVNUTE9PUF9NRU1PSVpFLgorCSAqLwogCXBh dGhub2RlLT5wYXRoLmRpc2FibGVkX25vZGVzID0gc3VicGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAK IAkvKgpAQCAtMzk2MiwxMyArMzk3MCwxNiBAQCByZXBhcmFtZXRlcml6ZV9wYXRoKFBsYW5uZXJJ bmZvICpyb290LCBQYXRoICpwYXRoLAogCQkJewogCQkJCU1hdGVyaWFsUGF0aCAqbXBhdGggPSAo TWF0ZXJpYWxQYXRoICopIHBhdGg7CiAJCQkJUGF0aAkgICAqc3BhdGggPSBtcGF0aC0+c3VicGF0 aDsKKwkJCQlib29sCQllbmFibGVkOwogCiAJCQkJc3BhdGggPSByZXBhcmFtZXRlcml6ZV9wYXRo KHJvb3QsIHNwYXRoLAogCQkJCQkJCQkJCQlyZXF1aXJlZF9vdXRlciwKIAkJCQkJCQkJCQkJbG9v cF9jb3VudCk7CisJCQkJZW5hYmxlZCA9CisJCQkJCShtcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2Rl cyA8PSBzcGF0aC0+ZGlzYWJsZWRfbm9kZXMpOwogCQkJCWlmIChzcGF0aCA9PSBOVUxMKQogCQkJ CQlyZXR1cm4gTlVMTDsKLQkJCQlyZXR1cm4gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgo cmVsLCBzcGF0aCk7CisJCQkJcmV0dXJuIChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJl bCwgc3BhdGgsIGVuYWJsZWQpOwogCQkJfQogCQljYXNlIFRfTWVtb2l6ZToKIAkJCXsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCBmNGI3MzQzZGFjZS4uNGFhY2RlMjgxNjUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTU1Nyw2ICs1NTcsOSBAQCBn ZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQs IGJvb2wgaW5ocGFyZW50LAogCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlhbGl6ZSBvbiB0 aGUgaW5mbyB3ZSBvYnRhaW5lZCBmcm9tIHRoZQogCSAqIGNhdGFsb2dzLiAgQWN0aW9ucyBtaWdo dCBpbmNsdWRlIGFsdGVyaW5nIHRoZSBhc3N1bWVkIHJlbGF0aW9uIHNpemUsCiAJICogcmVtb3Zp bmcgYW4gaW5kZXgsIG9yIGFkZGluZyBhIGh5cG90aGV0aWNhbCBpbmRleCB0byB0aGUgaW5kZXhs aXN0LgorCSAqCisJICogQW4gZXh0ZW5zaW9uIGNhbiBhbHNvIG1vZGlmeSByZWwtPnBnc19tYXNr IGhlcmUgdG8gY29udHJvbCBwYXRoCisJICogZ2VuZXJhdGlvbi4KIAkgKi8KIAlpZiAoZ2V0X3Jl bGF0aW9uX2luZm9faG9vaykKIAkJKCpnZXRfcmVsYXRpb25faW5mb19ob29rKSAocm9vdCwgcmVs YXRpb25PYmplY3RJZCwgaW5ocGFyZW50LCByZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVs bm9kZS5jCmluZGV4IDExNThiYzE5NGMzLi4wMzRkMGM5Yzg3YSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL3JlbG5vZGUuYwpAQCAtNDcsNiArNDcsOSBAQCB0eXBlZGVmIHN0cnVjdCBKb2luSGFz aEVudHJ5CiAJUmVsT3B0SW5mbyAqam9pbl9yZWw7CiB9IEpvaW5IYXNoRW50cnk7CiAKKy8qIEhv b2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgZHVyaW5nIGpvaW5yZWwgc2V0dXAgKi8KK2pv aW5yZWxfc2V0dXBfaG9va190eXBlIGpvaW5yZWxfc2V0dXBfaG9vayA9IE5VTEw7CisKIHN0YXRp YyB2b2lkIGJ1aWxkX2pvaW5yZWxfdGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KmpvaW5yZWwsCiAJCQkJCQkJCVJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkJU3BlY2lh bEpvaW5JbmZvICpzamluZm8sCkBAIC0yMjUsNiArMjI4LDcgQEAgYnVpbGRfc2ltcGxlX3JlbChQ bGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBSZWxPcHRJbmZvICpwYXJlbnQpCiAJcmVsLT5j b25zaWRlcl9zdGFydHVwID0gKHJvb3QtPnR1cGxlX2ZyYWN0aW9uID4gMCk7CiAJcmVsLT5jb25z aWRlcl9wYXJhbV9zdGFydHVwID0gZmFsc2U7CS8qIG1pZ2h0IGdldCBjaGFuZ2VkIGxhdGVyICov CiAJcmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IGZhbHNlOyAvKiBtaWdodCBnZXQgY2hhbmdlZCBs YXRlciAqLworCXJlbC0+cGdzX21hc2sgPSByb290LT5nbG9iLT5kZWZhdWx0X3Bnc19tYXNrOwog CXJlbC0+cmVsdGFyZ2V0ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJnZXQoKTsKIAlyZWwtPnBhdGhs aXN0ID0gTklMOwogCXJlbC0+cHBpbGlzdCA9IE5JTDsKQEAgLTgyMiw2ICs4MjYsNyBAQCBidWls ZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwKIAlqb2lucmVsLT5jb25zaWRlcl9zdGFydHVw ID0gKHJvb3QtPnR1cGxlX2ZyYWN0aW9uID4gMCk7CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFyYW1f c3RhcnR1cCA9IGZhbHNlOwogCWpvaW5yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0gZmFsc2U7CisJ am9pbnJlbC0+cGdzX21hc2sgPSByb290LT5nbG9iLT5kZWZhdWx0X3Bnc19tYXNrOwogCWpvaW5y ZWwtPnJlbHRhcmdldCA9IGNyZWF0ZV9lbXB0eV9wYXRodGFyZ2V0KCk7CiAJam9pbnJlbC0+cGF0 aGxpc3QgPSBOSUw7CiAJam9pbnJlbC0+cHBpbGlzdCA9IE5JTDsKQEAgLTkzNCwxMCArOTM5LDYg QEAgYnVpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJam9pbnJlbC0+aGFz X2VjbGFzc19qb2lucyA9IGhhc19yZWxldmFudF9lY2xhc3Nfam9pbmNsYXVzZShyb290LCBqb2lu cmVsKTsKIAotCS8qIFN0b3JlIHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24uICovCi0JYnVpbGRf am9pbnJlbF9wYXJ0aXRpb25faW5mbyhyb290LCBqb2lucmVsLCBvdXRlcl9yZWwsIGlubmVyX3Jl bCwgc2ppbmZvLAotCQkJCQkJCQkgcmVzdHJpY3RsaXN0KTsKLQogCS8qCiAJICogU2V0IGVzdGlt YXRlcyBvZiB0aGUgam9pbnJlbCdzIHNpemUuCiAJICovCkBAIC05NjMsNiArOTY0LDE4IEBAIGJ1 aWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LAogCQlpc19wYXJhbGxlbF9zYWZlKHJvb3Qs IChOb2RlICopIGpvaW5yZWwtPnJlbHRhcmdldC0+ZXhwcnMpKQogCQlqb2lucmVsLT5jb25zaWRl cl9wYXJhbGxlbCA9IHRydWU7CiAKKwkvKgorCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlh bGl6ZSBvbiB0aGUgbmV3IGpvaW5yZWwncyBwcm9wZXJ0aWVzLiBBY3Rpb25zCisJICogbWlnaHQg aW5jbHVkZSBhbHRlcmluZyB0aGUgc2l6ZSBlc3RpbWF0ZSBvciBjbGVhcmluZyBjb25zaWRlcl9w YXJhbGxlbC4KKwkgKi8KKwlpZiAoam9pbnJlbF9zZXR1cF9ob29rKQorCQkoKmpvaW5yZWxfc2V0 dXBfaG9vaykgKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLCBzamluZm8sCisJ CQkJCQkJICAgcmVzdHJpY3RsaXN0KTsKKworCS8qIFN0b3JlIHRoZSBwYXJ0aXRpb24gaW5mb3Jt YXRpb24uICovCisJYnVpbGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyhyb290LCBqb2lucmVsLCBv dXRlcl9yZWwsIGlubmVyX3JlbCwgc2ppbmZvLAorCQkJCQkJCQkgcmVzdHJpY3RsaXN0KTsKKwog CS8qIEFkZCB0aGUgam9pbnJlbCB0byB0aGUgUGxhbm5lckluZm8uICovCiAJYWRkX2pvaW5fcmVs KHJvb3QsIGpvaW5yZWwpOwogCkBAIC0xMDE5LDYgKzEwMzIsNyBAQCBidWlsZF9jaGlsZF9qb2lu X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCWpvaW5yZWwt PmNvbnNpZGVyX3N0YXJ0dXAgPSAocm9vdC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKIAlqb2lucmVs LT5jb25zaWRlcl9wYXJhbV9zdGFydHVwID0gZmFsc2U7CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFy YWxsZWwgPSBmYWxzZTsKKwlqb2lucmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1bHRf cGdzX21hc2s7CiAJam9pbnJlbC0+cmVsdGFyZ2V0ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJnZXQo KTsKIAlqb2lucmVsLT5wYXRobGlzdCA9IE5JTDsKIAlqb2lucmVsLT5wcGlsaXN0ID0gTklMOwpA QCAtMTEwMiwxMCArMTExNiw2IEBAIGJ1aWxkX2NoaWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCiAJICovCiAJam9pbnJlbC0+aGFzX2VjbGFzc19q b2lucyA9IHBhcmVudF9qb2lucmVsLT5oYXNfZWNsYXNzX2pvaW5zOwogCi0JLyogSXMgdGhlIGpv aW4gYmV0d2VlbiBwYXJ0aXRpb25zIGl0c2VsZiBwYXJ0aXRpb25lZD8gKi8KLQlidWlsZF9qb2lu cmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLCBz amluZm8sCi0JCQkJCQkJCSByZXN0cmljdGxpc3QpOwotCiAJLyogQ2hpbGQgam9pbnJlbCBpcyBw YXJhbGxlbCBzYWZlIGlmIHBhcmVudCBpcyBwYXJhbGxlbCBzYWZlLiAqLwogCWpvaW5yZWwtPmNv bnNpZGVyX3BhcmFsbGVsID0gcGFyZW50X2pvaW5yZWwtPmNvbnNpZGVyX3BhcmFsbGVsOwogCkBA IC0xMTEzLDYgKzExMjMsMjAgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIAlzZXRfam9pbnJlbF9zaXplX2VzdGltYXRlcyhy b290LCBqb2lucmVsLCBvdXRlcl9yZWwsIGlubmVyX3JlbCwKIAkJCQkJCQkgICBzamluZm8sIHJl c3RyaWN0bGlzdCk7CiAKKwkvKgorCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlhbGl6ZSBv biB0aGUgbmV3IGpvaW5yZWwncyBwcm9wZXJ0aWVzLiBBY3Rpb25zCisJICogbWlnaHQgaW5jbHVk ZSBhbHRlcmluZyB0aGUgc2l6ZSBlc3RpbWF0ZSBvciBjbGVhcmluZyBjb25zaWRlcl9wYXJhbGxl bCwKKwkgKiBhbHRob3VnaCB0aGUgbGF0dGVyIHdvdWxkIGJlIGJldHRlciBkb25lIGluIHRoZSBw YXJlbnQgam9pbnJlbCByYXRoZXIKKwkgKiB0aGFuIGhlcmUuCisJICovCisJaWYgKGpvaW5yZWxf c2V0dXBfaG9vaykKKwkJKCpqb2lucmVsX3NldHVwX2hvb2spIChyb290LCBqb2lucmVsLCBvdXRl cl9yZWwsIGlubmVyX3JlbCwgc2ppbmZvLAorCQkJCQkJCSAgIHJlc3RyaWN0bGlzdCk7CisKKwkv KiBJcyB0aGUgam9pbiBiZXR3ZWVuIHBhcnRpdGlvbnMgaXRzZWxmIHBhcnRpdGlvbmVkPyAqLwor CWJ1aWxkX2pvaW5yZWxfcGFydGl0aW9uX2luZm8ocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBp bm5lcl9yZWwsIHNqaW5mbywKKwkJCQkJCQkJIHJlc3RyaWN0bGlzdCk7CisKIAkvKiBXZSBidWls ZCB0aGUgam9pbiBvbmx5IG9uY2UuICovCiAJQXNzZXJ0KCFmaW5kX2pvaW5fcmVsKHJvb3QsIGpv aW5yZWwtPnJlbGlkcykpOwogCkBAIC0xNjAyLDYgKzE2MjYsNyBAQCBmZXRjaF91cHBlcl9yZWwo UGxhbm5lckluZm8gKnJvb3QsIFVwcGVyUmVsYXRpb25LaW5kIGtpbmQsIFJlbGlkcyByZWxpZHMp CiAJdXBwZXJyZWwgPSBtYWtlTm9kZShSZWxPcHRJbmZvKTsKIAl1cHBlcnJlbC0+cmVsb3B0a2lu ZCA9IFJFTE9QVF9VUFBFUl9SRUw7CiAJdXBwZXJyZWwtPnJlbGlkcyA9IGJtc19jb3B5KHJlbGlk cyk7CisJdXBwZXJyZWwtPnBnc19tYXNrID0gcm9vdC0+Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzazsK IAogCS8qIGNoZWFwIHN0YXJ0dXAgY29zdCBpcyBpbnRlcmVzdGluZyBpZmYgbm90IGFsbCB0dXBs ZXMgdG8gYmUgcmV0cmlldmVkICovCiAJdXBwZXJyZWwtPmNvbnNpZGVyX3N0YXJ0dXAgPSAocm9v dC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKQEAgLTIxMTgsNyArMjE0Myw3IEBAIGJ1aWxkX2pvaW5y ZWxfcGFydGl0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsCiAJUGFydGl0aW9uU2NoZW1lIHBh cnRfc2NoZW1lOwogCiAJLyogTm90aGluZyB0byBkbyBpZiBwYXJ0aXRpb253aXNlIGpvaW4gdGVj aG5pcXVlIGlzIGRpc2FibGVkLiAqLwotCWlmICghZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbikK KwlpZiAoKGpvaW5yZWwtPnBnc19tYXNrICYgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0UpID09 IDApCiAJewogCQlBc3NlcnQoIUlTX1BBUlRJVElPTkVEX1JFTChqb2lucmVsKSk7CiAJCXJldHVy bjsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNzVhNzA0ODllNWEuLjQ3NDZkM2M0M2M0IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaApAQCAtMjIsNiArMjIsNzkgQEAKICNpbmNsdWRlICJub2Rlcy9wYXJz ZW5vZGVzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5oIgogCisvKgorICogUGF0aCBnZW5l cmF0aW9uIHN0cmF0ZWdpZXMuCisgKgorICogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIHRvIHNw ZWNpZnkgdGhlIHNldCBvZiBzdHJhdGVnaWVzIHRoYXQgdGhlIHBsYW5uZXIKKyAqIHNob3VsZCB1 c2UsIGVpdGhlciBmb3IgdGhlIHF1ZXJ5IGFzIGEgd2hvbGUgb3IgZm9yIGEgc3BlY2lmaWMgYmFz ZXJlbCBvcgorICogam9pbnJlbC4gVGhlIHZhcmlvdXMgcGxhbm5lci1yZWxhdGVkIGVuYWJsZV8q IEdVQ3MgYXJlIHVzZWQgdG8gc2V0IHRoZQorICogUGxhbm5lckdsb2JhbCdzIGRlZmF1bHRfcGdz X21hc2ssIGFuZCB0aGF0IGluIHR1cm4gaXMgdXNlZCB0byBzZXQgZWFjaAorICogUmVsT3B0SW5m bydzIHBnc19tYXNrLiBJbiBib3RoIGNhc2VzLCBleHRlbnNpb25zIGNhbiB1c2UgaG9va3MgdG8g bW9kaWZ5IHRoZQorICogZGVmYXVsdCB2YWx1ZS4gIE5vdCBldmVyeSBzdHJhdGVneSBsaXN0ZWQg aGVyZSBoYXMgYSBjb3JyZXNwb25kaW5nIGVuYWJsZV8qCisgKiBHVUM7IHRob3NlIHRoYXQgZG9u J3QgYXJlIGFsd2F5cyBhbGxvd2VkIHVubGVzcyBkaXNhYmxlZCBieSBhbiBleHRlbnNpb24uCisg KiBOb3QgYWxsIHN0cmF0ZWdpZXMgYXJlIHJlbGV2YW50IGZvciBldmVyeSBSZWxPcHRJbmZvOyBl LmcuIFBHU19TRVFTQ0FOCisgKiBkb2Vzbid0IGFmZmVjdCBqb2lucmVscyBvbmUgd2F5IG9yIHRo ZSBvdGhlci4KKyAqCisgKiBJbiBtb3N0IGNhc2VzLCBkaXNhYmxpbmcgYSBwYXRoIGdlbmVyYXRp b24gc3RyYXRlZ3kgbWVyZWx5IG1lYW5zIHRoYXQgYW55CisgKiBwYXRocyBnZW5lcmF0ZWQgdXNp bmcgdGhhdCBzdHJhdGVneSBhcmUgbWFya2VkIGFzIGRpc2FibGVkLCBidXQgaW4gc29tZQorICog Y2FzZXMsIHBhdGggZ2VuZXJhdGlvbiBpcyBza2lwcGVkIGFsdG9nZXRoZXIuIFRoZSBsYXR0ZXIg c3RyYXRlZ3kgaXMgb25seQorICogcGVybWlzc2libGUgd2hlbiBpdCBjYW4ndCByZXN1bHQgaW4g cGxhbm5lciBmYWlsdXJlIC0tIGZvciBpbnN0YW5jZSwgd2UKKyAqIGNvdWxkbid0IGRvIHRoaXMg Zm9yIHNlcXVlbnRpYWwgc2NhbnMgb24gYSBwbGFpbiByZWwsIGJlY2F1c2UgdGhlcmUgbWlnaHQK KyAqIG5vdCBiZSBhbnkgb3RoZXIgcG9zc2libGUgcGF0aC4gTmV2ZXJ0aGVsZXNzLCB0aGUgYmVo YXZpb3JzIGluIGVhY2gKKyAqIGluZGl2aWR1YWwgY2FzZSBhcmUgdG8gc29tZSBleHRlbnQgdGhl IHJlc3VsdCBvZiBoaXN0b3JpY2FsIGFjY2lkZW50LAorICogY2hvc2VuIHRvIG1hdGNoIHRoZSBw cmVleGlzdGluZyBiZWhhdmlvcnMgb2YgdGhlIGVuYWJsZV8qIEdVQ3MuCisgKgorICogSW4gYSBm ZXcgY2FzZXMsIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBiaXQgZm9yIHRoZSBzYW1lIHN0cmF0ZWd5 LCBjb250cm9sbGluZworICogZGlmZmVyZW50IGFzcGVjdHMgb2YgdGhlIHBsYW5uZXIgYmVoYXZp b3IuIFdoZW4gUEdTX0NPTlNJREVSX0lOREVYT05MWSBpcworICogdW5zZXQsIHdlIGRvbid0IGV2 ZW4gY29uc2lkZXIgaW5kZXgtb25seSBzY2FucywgYW5kIGFueSBzdWNoIHNjYW5zIHRoYXQKKyAq IHdvdWxkIGhhdmUgYmVlbiBnZW5lcmF0ZWQgYmVjb21lIGluZGV4IHNjYW5zIGluc3RlYWQuIE9u IHRoZSBvdGhlciBoYW5kLAorICogdW5zZXR0aW5nIFBHU19JTkRFWFNDQU4gb3IgUEdTX0lOREVY T05MWVNDQU4gY2F1c2VzIGdlbmVyYXRlZCBwYXRocyBvZiB0aGUKKyAqIGNvcnJlc3BvbmRpbmcg dHlwZXMgdG8gYmUgbWFya2VkIGFzIGRpc2FibGVkLiBTaW1pbGFybHksIHVuc2V0dGluZworICog UEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0UgcHJldmVudHMgYW55IHNvcnQgb2YgdGhpbmtpbmcg YWJvdXQgcGFydGl0aW9ud2lzZQorICogam9pbnMgZm9yIHRoZSBjdXJyZW50IHJlbCwgd2hpY2gg aW5jaWRlbnRhbGx5IHdpbGwgcHJlY2x1ZGUgaGlnaGVyLWxldmVsCisgKiBqb2lucmVscyBmcm9t IGJ1aWxkaW5nIHBhcml0aXRvbndpc2UgcGF0aHMgdXNpbmcgcGF0aHMgdGFrZW4gZnJvbSB0aGUK KyAqIGN1cnJlbnQgcmVsJ3MgY2hpbGRyZW4uIE9uIHRoZSBvdGhlciBoYW5kLCB1bnNldHRpbmcg UEdTX0FQUEVORCBvcgorICogUEdTX01FUkdFX0FQUEVORCB3aWxsIG9ubHkgYXJyYW5nZSB0byBk aXNhYmxlIHBhdGhzIG9mIHRoZSBjb3JyZXNwb25kaW5nCisgKiB0eXBlcyBpZiB0aGV5IGFyZSBn ZW5lcmF0ZWQgYXQgdGhlIGxldmVsIG9mIHRoZSBjdXJyZW50IHJlbC4KKyAqCisgKiBGaW5hbGx5 LCB1bnNldHRpbmcgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgZGlzYWJsZXMgYWxsIG5vbi1wYXJ0 aWFsIHBhdGhzCisgKiBleGNlcHQgdGhvc2UgdGhhdCB1c2UgR2F0aGVyIG9yIEdhdGhlciBNZXJn ZS4gSW4gbW9zdCBvdGhlciBjYXNlcywgYQorICogcGx1Z2luIGNhbiBudWRnZSB0aGUgcGxhbm5l ciB0b3dhcmQgYSBwYXJ0aWN1bGFyIHN0cmF0ZWd5IGJ5IGRpc2FibGluZworICogYWxsIG9mIHRo ZSBvdGhlcnMsIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayBoZXJlOiB1bnNldHRpbmcgUEdTX1NFUVND QU4sCisgKiBmb3IgaW5zdGFuY2UsIHdvdWxkIGRpc2FibGUgYm90aCBwYXJ0aWFsIGFuZCBub24t cGFydGlhbCBzZXF1ZW50aWFsIHNjYW5zLgorICovCisjZGVmaW5lIFBHU19TRVFTQ0FOCQkJCQkw eDAwMDAwMDAxCisjZGVmaW5lIFBHU19JTkRFWFNDQU4JCQkJMHgwMDAwMDAwMgorI2RlZmluZSBQ R1NfSU5ERVhPTkxZU0NBTgkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgUEdTX0JJVE1BUFNDQU4JCQkJ MHgwMDAwMDAwOAorI2RlZmluZSBQR1NfVElEU0NBTgkJCQkJMHgwMDAwMDAxMAorI2RlZmluZSBQ R1NfRk9SRUlHTkpPSU4JCQkJMHgwMDAwMDAyMAorI2RlZmluZSBQR1NfTUVSR0VKT0lOX1BMQUlO CQkJMHgwMDAwMDA0MAorI2RlZmluZSBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFCTB4MDAwMDAw ODAKKyNkZWZpbmUgUEdTX05FU1RMT09QX1BMQUlOCQkJMHgwMDAwMDEwMAorI2RlZmluZSBQR1Nf TkVTVExPT1BfTUFURVJJQUxJWkUJMHgwMDAwMDIwMAorI2RlZmluZSBQR1NfTkVTVExPT1BfTUVN T0laRQkJMHgwMDAwMDQwMAorI2RlZmluZSBQR1NfSEFTSEpPSU4JCQkJMHgwMDAwMDgwMAorI2Rl ZmluZSBQR1NfQVBQRU5ECQkJCQkweDAwMDAxMDAwCisjZGVmaW5lIFBHU19NRVJHRV9BUFBFTkQJ CQkweDAwMDAyMDAwCisjZGVmaW5lIFBHU19HQVRIRVIJCQkJCTB4MDAwMDQwMDAKKyNkZWZpbmUg UEdTX0dBVEhFUl9NRVJHRQkJCTB4MDAwMDgwMDAKKyNkZWZpbmUgUEdTX0NPTlNJREVSX0lOREVY T05MWQkJMHgwMDAxMDAwMAorI2RlZmluZSBQR1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRQkweDAw MDIwMDAwCisjZGVmaW5lIFBHU19DT05TSURFUl9OT05QQVJUSUFMCQkweDAwMDQwMDAwCisKKy8q CisgKiBDb252ZW5pZW5jZSBtYWNyb3MgZm9yIHVzZWZ1bCBjb21iaW5hdGlvbiBvZiB0aGUgYml0 cyBkZWZpbmVkIGFib3ZlLgorICovCisjZGVmaW5lIFBHU19TQ0FOX0FOWQkJXAorCShQR1NfU0VR U0NBTiB8IFBHU19JTkRFWFNDQU4gfCBQR1NfSU5ERVhPTkxZU0NBTiB8IFBHU19CSVRNQVBTQ0FO IHwgXAorCSBQR1NfVElEU0NBTikKKyNkZWZpbmUgUEdTX01FUkdFSk9JTl9BTlkJXAorCShQR1Nf TUVSR0VKT0lOX1BMQUlOIHwgUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRSkKKyNkZWZpbmUgUEdT X05FU1RMT09QX0FOWQlcCisJKFBHU19ORVNUTE9PUF9QTEFJTiB8IFBHU19ORVNUTE9PUF9NQVRF UklBTElaRSB8IFBHU19ORVNUTE9PUF9NRU1PSVpFKQorI2RlZmluZSBQR1NfSk9JTl9BTlkJCVwK KwkoUEdTX0ZPUkVJR05KT0lOIHwgUEdTX01FUkdFSk9JTl9BTlkgfCBQR1NfTkVTVExPT1BfQU5Z IHwgUEdTX0hBU0hKT0lOKQogCiAvKgogICogUmVsaWRzCkBAIC0xODYsNiArMjU5LDkgQEAgdHlw ZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogCS8qIHdvcnN0IFBST1BBUkFMTEVMIGhhemFyZCBs ZXZlbCAqLwogCWNoYXIJCW1heFBhcmFsbGVsSGF6YXJkOwogCisJLyogbWFzayBvZiBhbGxvd2Vk IHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVnaWVzICovCisJdWludDY0CQlkZWZhdWx0X3Bnc19tYXNr OworCiAJLyogcGFydGl0aW9uIGRlc2NyaXB0b3JzICovCiAJUGFydGl0aW9uRGlyZWN0b3J5IHBh cnRpdGlvbl9kaXJlY3RvcnkgcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIApAQCAt OTM5LDcgKzEwMTUsNyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJQ2FyZGluYWxpdHkg cm93czsKIAogCS8qCi0JICogcGVyLXJlbGF0aW9uIHBsYW5uZXIgY29udHJvbCBmbGFncworCSAq IHBlci1yZWxhdGlvbiBwbGFubmVyIGNvbnRyb2wKIAkgKi8KIAkvKiBrZWVwIGNoZWFwLXN0YXJ0 dXAtY29zdCBwYXRocz8gKi8KIAlib29sCQljb25zaWRlcl9zdGFydHVwOwpAQCAtOTQ3LDYgKzEw MjMsOCBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJYm9vbAkJY29uc2lkZXJfcGFyYW1f c3RhcnR1cDsKIAkvKiBjb25zaWRlciBwYXJhbGxlbCBwYXRocz8gKi8KIAlib29sCQljb25zaWRl cl9wYXJhbGxlbDsKKwkvKiBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ3kgbWFzayAqLworCXVpbnQ2 NAkJcGdzX21hc2s7CiAKIAkvKgogCSAqIGRlZmF1bHQgcmVzdWx0IHRhcmdldGxpc3QgZm9yIFBh dGhzIHNjYW5uaW5nIHRoaXMgcmVsYXRpb247IGxpc3Qgb2YKQEAgLTM1MDUsNiArMzU4Myw3IEBA IHR5cGVkZWYgc3RydWN0IFNlbWlBbnRpSm9pbkZhY3RvcnMKICAqIHNqaW5mbyBpcyBleHRyYSBp bmZvIGFib3V0IHNwZWNpYWwgam9pbnMgZm9yIHNlbGVjdGl2aXR5IGVzdGltYXRpb24KICAqIHNl bWlmYWN0b3JzIGlzIGFzIHNob3duIGFib3ZlIChvbmx5IHZhbGlkIGZvciBTRU1JL0FOVEkvaW5u ZXJfdW5pcXVlIGpvaW5zKQogICogcGFyYW1fc291cmNlX3JlbHMgYXJlIE9LIHRhcmdldHMgZm9y IHBhcmFtZXRlcml6YXRpb24gb2YgcmVzdWx0IHBhdGhzCisgKiBwZ3NfbWFzayBpcyBhIGJpdG1h c2sgb2YgUEdTXyogY29uc3RhbnRzIHRvIGxpbWl0IHRoZSBqb2luIHN0cmF0ZWd5CiAgKi8KIHR5 cGVkZWYgc3RydWN0IEpvaW5QYXRoRXh0cmFEYXRhCiB7CkBAIC0zNTE0LDYgKzM1OTMsNyBAQCB0 eXBlZGVmIHN0cnVjdCBKb2luUGF0aEV4dHJhRGF0YQogCVNwZWNpYWxKb2luSW5mbyAqc2ppbmZv OwogCVNlbWlBbnRpSm9pbkZhY3RvcnMgc2VtaWZhY3RvcnM7CiAJUmVsaWRzCQlwYXJhbV9zb3Vy Y2VfcmVsczsKKwl1aW50NjQJCXBnc19tYXNrOwogfSBKb2luUGF0aEV4dHJhRGF0YTsKIAogLyoK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvY29zdC5oCmluZGV4IGI1MjNiY2RhOGYzLi4yZDgwNDYyYmVjZSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvY29zdC5oCkBAIC0xMjUsNyArMTI1LDcgQEAgZXh0ZXJuIHZvaWQgY29zdF9tZXJnZV9hcHBl bmQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJICBDb3N0IGlucHV0X3N0 YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAogCQkJCQkJCSAgZG91YmxlIHR1cGxl cyk7CiBleHRlcm4gdm9pZCBjb3N0X21hdGVyaWFsKFBhdGggKnBhdGgsCi0JCQkJCQkgIGludCBp bnB1dF9kaXNhYmxlZF9ub2RlcywKKwkJCQkJCSAgYm9vbCBlbmFibGVkLCBpbnQgaW5wdXRfZGlz YWJsZWRfbm9kZXMsCiAJCQkJCQkgIENvc3QgaW5wdXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0 X3RvdGFsX2Nvc3QsCiAJCQkJCQkgIGRvdWJsZSB0dXBsZXMsIGludCB3aWR0aCk7CiBleHRlcm4g dm9pZCBjb3N0X2FnZyhQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKQEAgLTE0OCw3ICsx NDgsNyBAQCBleHRlcm4gdm9pZCBjb3N0X2dyb3VwKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkgICBkb3VibGUgaW5wdXRfdHVwbGVzKTsKIGV4dGVybiB2b2lkIGluaXRpYWxf Y29zdF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJICBKb2luQ29zdFdvcmtz cGFjZSAqd29ya3NwYWNlLAotCQkJCQkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJCQkg IEpvaW5UeXBlIGpvaW50eXBlLCB1aW50NjQgZW5hYmxlX21hc2ssCiAJCQkJCQkJCSAgUGF0aCAq b3V0ZXJfcGF0aCwgUGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkJCQkJICBKb2luUGF0aEV4dHJhRGF0 YSAqZXh0cmEpOwogZXh0ZXJuIHZvaWQgZmluYWxfY29zdF9uZXN0bG9vcChQbGFubmVySW5mbyAq cm9vdCwgTmVzdFBhdGggKnBhdGgsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv cGF0aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IDQ0Mzcy NDhjYjY3Li4yNzRjZDQxYmFiMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Bh dGhub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKQEAgLTE3LDYg KzE3LDE0IEBACiAjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAibm9kZXMv cGF0aG5vZGVzLmgiCiAKKy8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgZHVyaW5n IGpvaW5yZWwgc2V0dXAgKi8KK3R5cGVkZWYgdm9pZCAoKmpvaW5yZWxfc2V0dXBfaG9va190eXBl KSAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJ CQkJCQkJCQkJIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKKwkJCQkJCQkJCQkgUmVsT3B0SW5mbyAq aW5uZXJfcmVsLAorCQkJCQkJCQkJCSBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKKwkJCQkJCQkJ CQkgTGlzdCAqcmVzdHJpY3RsaXN0KTsKK2V4dGVybiBQR0RMTElNUE9SVCBqb2lucmVsX3NldHVw X2hvb2tfdHlwZSBqb2lucmVsX3NldHVwX2hvb2s7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBw YXRobm9kZS5jCkBAIC04NCw3ICs5Miw4IEBAIGV4dGVybiBHcm91cFJlc3VsdFBhdGggKmNyZWF0 ZV9ncm91cF9yZXN1bHRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSBSZWxP cHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJCQkgUGF0aFRhcmdldCAqdGFyZ2V0LAogCQkJCQkJCQkJ CQkJIExpc3QgKmhhdmluZ3F1YWwpOwotZXh0ZXJuIE1hdGVyaWFsUGF0aCAqY3JlYXRlX21hdGVy aWFsX3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoKTsKK2V4dGVybiBNYXRlcmlh bFBhdGggKmNyZWF0ZV9tYXRlcmlhbF9wYXRoKFJlbE9wdEluZm8gKnJlbCwgUGF0aCAqc3VicGF0 aCwKKwkJCQkJCQkJCQkgIGJvb2wgZW5hYmxlZCk7CiBleHRlcm4gTWVtb2l6ZVBhdGggKmNyZWF0 ZV9tZW1vaXplX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJUmVsT3B0SW5mbyAq cmVsLAogCQkJCQkJCQkJCVBhdGggKnN1YnBhdGgsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvcGF0aHMuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCmluZGV4IGY2 YTYyZGYwYjQzLi42MWMxNjA3Zjg3MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhzLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKQEAgLTI4LDcgKzI4 LDE0IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6 ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWluX3BhcmFsbGVsX2luZGV4X3NjYW5fc2l6ZTsK IGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9ncm91cF9ieV9yZW9yZGVyaW5nOwogCi0v KiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIHNldF9yZWxfcGF0aGxpc3QoKSAq LworLyogSG9va3MgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gc2V0X3JlbF9wYXRobGlz dCgpICovCit0eXBlZGVmIHZvaWQgKCpqb2luX3BhdGhfc2V0dXBfaG9va190eXBlKSAoUGxhbm5l ckluZm8gKnJvb3QsCisJCQkJCQkJCQkJICAgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkJ CQkgICBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJCQkJCQkJCQkgICBSZWxPcHRJbmZvICppbm5l cnJlbCwKKwkJCQkJCQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJCQkgICBKb2lu UGF0aEV4dHJhRGF0YSAqZXh0cmEpOworZXh0ZXJuIFBHRExMSU1QT1JUIGpvaW5fcGF0aF9zZXR1 cF9ob29rX3R5cGUgam9pbl9wYXRoX3NldHVwX2hvb2s7CiB0eXBlZGVmIHZvaWQgKCpzZXRfcmVs X3BhdGhsaXN0X2hvb2tfdHlwZSkgKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQlSZWxP cHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJCUluZGV4IHJ0aSwKLS0gCjIuMzkuMyAoQXBwbGUgR2l0 LTE0NSkKCg== --0000000000005ed7fc064260aba8 Content-Type: application/octet-stream; name="v1-0003-Store-information-about-Append-node-consolidation.patch" Content-Disposition: attachment; filename="v1-0003-Store-information-about-Append-node-consolidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhdgyw0p2 RnJvbSA4ZTM3ZmI3NjJiOWRmMGJjZDMyNjJiNmY4ZDNlNzk4Y2IwNjdlZTViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6MDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxIDMv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgQXBwZW5kIG5vZGUgY29uc29saWRhdGlvbiBpbgog dGhlIGZpbmFsIHBsYW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2FudCB0 byByZWNvbnN0cnVjdCB0aGUgcGxhbm5lcidzCmRlY2lzaW9ucyBhYm91dCB3aGV0aGVyIGFuZCB3 aGVyZSB0byBwZXJmb3JtIHBhcnRpdGlvbndpc2Ugam9pbnMgZnJvbQp0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUgdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMKb2Yg cGFydGl0aW9uZWQgdGFibGVzIGFwcGVhcmluZyBpbiB0aGUgcGxhbi4gQnV0IHdoZW4gYW4gQXBw ZW5kUGF0aApvciBNZXJnZUFwcGVuZFBhdGggcHVsbHMgdXAgY2hpbGQgcGF0aHMgZnJvbSBhIHN1 Ym9yZGluYXRlIEFwcGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoLCB0aGUgUlRJcyBvZiB0aGUg c3Vib3JkaW5hdGUgcGF0aCBkbyBub3QgYXBwZWFyCmluIHRoZSBmaW5hbCBwbGFuLCBtYWtpbmcg dGhpcyBraW5kIG9mIHJlY29uc3RydWN0aW9uIGltcG9zc2libGUuCgpUbyBhdm9pZCB0aGlzLCBw cm9wYWdhdGUgdGhlIFJUSSBzZXRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXNlbnQKaW4gdGhl ICdhcHByZWxpZHMnIGZpZWxkIG9mIHRoZSBzdWJvcmRpbmF0ZSBBcHBlbmQgb3IgTWVyZ2VBcHBl bmQKbm9kZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbnRvIHRoZSBzdXJ2aXZpbmcg QXBwZW5kIG9yCk1lcmdlQXBwZW5kIG5vZGUsIHVzaW5nIGEgbmV3ICdjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cycgZmllbGQgZm9yCnRoYXQgcHVycG9zZS4gVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQg aXMgYSBsaXN0IG9mIEJpdG1hcHNldHMsCmJlY2F1c2UgZWFjaCByZWxhdGlvbiB3aG9zZSBhcHBl bmQtbGlzdCB3YXMgcHVsbGVkIHVwIGhhZCBpdHMgb3duCnNldCBvZiBSVElzOiBqdXN0IG9uZSwg aWYgaXQgd2FzIGEgcGFydGl0aW9ud2lzZSBzY2FuLCBvciBtb3JlIHRoYW4Kb25lLCBpZiBpdCB3 YXMgYSBwYXJ0aXRpb253aXNlIGpvaW4uIFNpbmNlIG91ciBnb2FsIGlzIHRvIHNlZSB3aGVyZQpw YXJ0aXRpb253aXNlIGpvaW5zIHdlcmUgZG9uZSwgaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lkIGxv c2luZyB0aGUKaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBSVElzIHdlcmUgZ3JvdXBlZCBpbiB0 aGUgcHVsbGVkLXVwCnJlbGF0aW9ucy4KClRoaXMgY29tbWl0IGFsc28gdXBkYXRlcyBwZ19vdmVy ZXhwbGFpbiBzbyB0aGF0IEVYUExBSU4gKFJBTkdFX1RBQkxFKQp3aWxsIGRpc3BsYXkgdGhlIHNh dmVkIFJUSSBzZXRzLgotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgICAgICAg ICAgICAgICB8ICA0ICstCiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg ICAgICAgfCA1NiArKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0 aHMuYyAgICAgICAgIHwgOTggKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvam9pbnJlbHMuYyAgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL2NyZWF0ZXBsYW4uYyAgICAgICB8ICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYyAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVw L3ByZXB1bmlvbi5jICAgICAgICB8IDExICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYyAgICAgICAgIHwgIDUgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTAgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAg ICAgICAgICAgICAgICB8IDExICsrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgg ICAgICAgICAgICAgIHwgIDIgKwogMTEgZmlsZXMgY2hhbmdlZCwgMTc1IGluc2VydGlvbnMoKyks IDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhw ZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3Rl ZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggY2E5YTIzZWE2MWYuLmEzNzdmYjI1NzFkIDEwMDY0 NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dApAQCAtMTA0LDYgKzEwNCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIFBhcmFsbGVsIFNhZmU6 IHRydWUKICAgICAgICAgICAgICAgIFBsYW4gTm9kZSBJRDogMgogICAgICAgICAgICAgICAgQXBw ZW5kIFJUSXM6IDEKKyAgICAgICAgICAgICAgIENoaWxkIEFwcGVuZCBSVElzOiBub25lCiAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYnJhc3NpY2EgdmVnZXRhYmxlc18xCiAgICAgICAg ICAgICAgICAgICAgICBEaXNhYmxlZCBOb2RlczogMAogICAgICAgICAgICAgICAgICAgICAgUGFy YWxsZWwgU2FmZTogdHJ1ZQpAQCAtMTQyLDcgKzE0Myw3IEBAICQkKTsKICAgIFJlbGF0aW9uIEtp bmQ6IHJlbGF0aW9uCiAgICBSZWxhdGlvbiBMb2NrIE1vZGU6IEFjY2Vzc1NoYXJlTG9jawogIFVu cHJ1bmFibGUgUlRJczogMSAzIDQKLSg1MyByb3dzKQorKDU0IHJvd3MpCiAKIC0tIFRlc3QgYSBk aWZmZXJlbnQgb3V0cHV0IGZvcm1hdC4KIFNFTEVDVCBleHBsYWluX2ZpbHRlcigkJApAQCAtMTk3 LDYgKzE5OCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIDxleHRQYXJhbT5ub25lPC9leHRQYXJh bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPGFsbFBhcmFt Pm5vbmU8L2FsbFBhcmFtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAg ICAgICA8QXBwZW5kLVJUSXM+MTwvQXBwZW5kLVJUSXM+ICAgICAgICAgICAgICAgICAgICAgICAg ICsKKyAgICAgICAgICAgICAgIDxDaGlsZC1BcHBlbmQtUlRJcz5ub25lPC9DaGlsZC1BcHBlbmQt UlRJcz4gICAgICAgICAgKwogICAgICAgICAgICAgICAgPFN1YnBsYW5zLVJlbW92ZWQ+MDwvU3Vi cGxhbnMtUmVtb3ZlZD4gICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICA8UGxhbnM+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAg ICAgICAgPFBsYW4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jIGIv Y29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmluZGV4IGZhOTA3ZmE0NzJl Li42NTM4ZmZjYWZiMCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVy ZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwpA QCAtNTQsNiArNTQsOCBAQCBzdGF0aWMgdm9pZCBvdmVyZXhwbGFpbl9hbGlhcyhjb25zdCBjaGFy ICpxbGFiZWwsIEFsaWFzICphbGlhcywKIAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3Rh dGljIHZvaWQgb3ZlcmV4cGxhaW5fYml0bWFwc2V0KGNvbnN0IGNoYXIgKnFsYWJlbCwgQml0bWFw c2V0ICpibXMsCiAJCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBvdmVy ZXhwbGFpbl9iaXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0 LAorCQkJCQkJCQkJICAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBvdmVyZXhwbGFp bl9pbnRsaXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqbGlzdCwKIAkJCQkJCQkJRXhwbGFp blN0YXRlICplcyk7CiAKQEAgLTIzMiwxMSArMjM0LDE3IEBAIG92ZXJleHBsYWluX3Blcl9ub2Rl X2hvb2soUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQlvdmVyZXhw bGFpbl9iaXRtYXBzZXQoIkFwcGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChBcHBlbmQgKikgcGxh biktPmFwcHJlbGlkcywKIAkJCQkJCQkJCSAgZXMpOworCQkJCW92ZXJleHBsYWluX2JpdG1hcHNl dF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJcyIsCisJCQkJCQkJCQkJICAgKChBcHBlbmQgKikgcGxh biktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAorCQkJCQkJCQkJCSAgIGVzKTsKIAkJCQlicmVh azsKIAkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKIAkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXQoIkFw cGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRz LAogCQkJCQkJCQkJICBlcyk7CisJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0X2xpc3QoIkNoaWxk IEFwcGVuZCBSVElzIiwKKwkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGls ZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQlj YXNlIFRfUmVzdWx0OgogCkBAIC04MTUsNiArODIzLDU0IEBAIG92ZXJleHBsYWluX2JpdG1hcHNl dChjb25zdCBjaGFyICpxbGFiZWwsIEJpdG1hcHNldCAqYm1zLCBFeHBsYWluU3RhdGUgKmVzKQog CXBmcmVlKGJ1Zi5kYXRhKTsKIH0KIAorLyoKKyAqIEVtaXQgYSB0ZXh0IHByb3BlcnR5IGRlc2Ny aWJpbmcgdGhlIGNvbnRlbnRzIG9mIGEgbGlzdCBvZiBiaXRtYXBzZXRzLgorICogSWYgYSBiaXRt YXBzZXQgY29udGFpbnMgZXhhY3RseSAxIG1lbWJlciwgd2UganVzdCBwcmludCBhbiBpbnRlZ2Vy OworICogb3RoZXJ3aXNlLCB3ZSBzdXJyb3VuZCB0aGUgbGlzdCBvZiBtZW1iZXJzIGJ5IHBhcmVu dGhlc2VzLgorICoKKyAqIElmIHRoZXJlIGFyZSBubyBiaXRtYXBzZXRzIGluIHRoZSBsaXN0LCB3 ZSBwcmludCB0aGUgd29yZCAibm9uZSIuCisgKi8KK3N0YXRpYyB2b2lkCitvdmVyZXhwbGFpbl9i aXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0LAorCQkJCQkJ ICAgRXhwbGFpblN0YXRlICplcykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3Ry aW5nSW5mbygmYnVmKTsKKworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIGJtcywgYm1zX2xpc3Qp CisJeworCQlpZiAoYm1zX21lbWJlcnNoaXAoYm1zKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAiICVkIiwgYm1zX3NpbmdsZXRvbl9tZW1iZXIoYm1zKSk7CisJ CWVsc2UKKwkJeworCQkJaW50CQkJeCA9IC0xOworCQkJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIgKCIpOworCQkJd2hpbGUgKCh4ID0gYm1z X25leHRfbWVtYmVyKGJtcywgeCkpID49IDApCisJCQl7CisJCQkJaWYgKGZpcnN0KQorCQkJCQlm aXJzdCA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1Ziwg JyAnKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlZCIsIHgpOworCQkJfQorCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyknKTsKKwkJfQorCX0KKworCWlmIChidWYubGVuID09 IDApCisJeworCQlFeHBsYWluUHJvcGVydHlUZXh0KHFsYWJlbCwgIm5vbmUiLCBlcyk7CisJCXJl dHVybjsKKwl9CisKKwlBc3NlcnQoYnVmLmRhdGFbMF0gPT0gJyAnKTsKKwlFeHBsYWluUHJvcGVy dHlUZXh0KHFsYWJlbCwgYnVmLmRhdGEgKyAxLCBlcyk7CisJcGZyZWUoYnVmLmRhdGEpOworfQor CiAvKgogICogRW1pdCBhIHRleHQgcHJvcGVydHkgZGVzY3JpYmluZyB0aGUgY29udGVudHMgb2Yg YSBsaXN0IG9mIGludGVnZXJzLCBPSURzLAogICogb3IgWElEcyAtLSBlaXRoZXIgYSBzcGFjZS1z ZXBhcmF0ZWQgbGlzdCBvZiBpbnRlZ2VyIG1lbWJlcnMsIG9yIHRoZSB3b3JkCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCA5YzY0MzZlYjcyZi4uMzQ5ODYzZmIxOTQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAtMTI4LDggKzEyOCwxMCBAQCBz dGF0aWMgUGF0aCAqZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSAgIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBzdGF0 aWMgdm9pZCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsCiAJCQkJCQkJCQkg IExpc3QgKipzdWJwYXRocywKLQkJCQkJCQkJCSAgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpOwot c3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCk7CisJ CQkJCQkJCQkgIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBMaXN0ICoqY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMpOworc3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5k X3N1YnBhdGgoUGF0aCAqcGF0aCwKKwkJCQkJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cyk7CiBzdGF0aWMgdm9pZCBzZXRfZHVtbXlfcmVsX3BhdGhsaXN0KFJlbE9wdEluZm8g KnJlbCk7CiBzdGF0aWMgdm9pZCBzZXRfc3VicXVlcnlfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJICBJbmRleCBydGksIFJhbmdlVGJsRW50cnkg KnJ0ZSk7CkBAIC0xNDA2LDExICsxNDA4LDE1IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiB7CiAJTGlzdAkgICAqc3VicGF0aHMg PSBOSUw7CiAJYm9vbAkJc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN1YnBhdGhf Y2FycyA9IE5JTDsKIAlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhzID0gTklMOwogCWJvb2wJCXN0 YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN0YXJ0dXBfc3VicGF0aF9j YXJzID0gTklMOwogCUxpc3QJICAgKnBhcnRpYWxfc3VicGF0aHMgPSBOSUw7CisJTGlzdAkgICAq cGFydGlhbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJTGlzdAkgICAqcGFfcGFydGlhbF9zdWJwYXRo cyA9IE5JTDsKIAlMaXN0CSAgICpwYV9ub25wYXJ0aWFsX3N1YnBhdGhzID0gTklMOworCUxpc3QJ ICAgKnBhX3N1YnBhdGhfY2FycyA9IE5JTDsKIAlib29sCQlwYXJ0aWFsX3N1YnBhdGhzX3ZhbGlk ID0gdHJ1ZTsKIAlib29sCQlwYV9zdWJwYXRoc192YWxpZDsKIAlMaXN0CSAgICphbGxfY2hpbGRf cGF0aGtleXMgPSBOSUw7CkBAIC0xNDQzLDcgKzE0NDksNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5k X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlpZiAoY2hpbGRyZWwt PnBhdGhsaXN0ICE9IE5JTCAmJgogCQkJY2hpbGRyZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGgtPnBh cmFtX2luZm8gPT0gTlVMTCkKIAkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hpbGRyZWwt PmNoZWFwZXN0X3RvdGFsX3BhdGgsCi0JCQkJCQkJCQkgICZzdWJwYXRocywgTlVMTCk7CisJCQkJ CQkJCQkgICZzdWJwYXRocywgTlVMTCwgJnN1YnBhdGhfY2Fycyk7CiAJCWVsc2UKIAkJCXN1YnBh dGhzX3ZhbGlkID0gZmFsc2U7CiAKQEAgLTE0NzIsNyArMTQ3OCw4IEBAIGFkZF9wYXRoc190b19h cHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlBc3NlcnQo Y2hlYXBlc3RfcGF0aC0+cGFyYW1faW5mbyA9PSBOVUxMKTsKIAkJCWFjY3VtdWxhdGVfYXBwZW5k X3N1YnBhdGgoY2hlYXBlc3RfcGF0aCwKIAkJCQkJCQkJCSAgJnN0YXJ0dXBfc3VicGF0aHMsCi0J CQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJICAmc3RhcnR1cF9z dWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXN0YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSBm YWxzZTsKQEAgLTE0ODMsNyArMTQ5MCw4IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCXsKIAkJCWNoZWFwZXN0X3BhcnRpYWxf cGF0aCA9IGxpbml0aWFsKGNoaWxkcmVsLT5wYXJ0aWFsX3BhdGhsaXN0KTsKIAkJCWFjY3VtdWxh dGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlhbF9wYXRoLAotCQkJCQkJCQkJICAmcGFy dGlhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkgICZwYXJ0aWFsX3N1YnBhdGhzLCBOVUxM LAorCQkJCQkJCQkJICAmcGFydGlhbF9zdWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXBh cnRpYWxfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKQEAgLTE1MTIsNyArMTUyMCw4IEBAIGFkZF9w YXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CQkJQXNzZXJ0KGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKTsKIAkJCQlhY2N1bXVsYXRl X2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCwKIAkJCQkJCQkJCQkgICZwYV9w YXJ0aWFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMpOwor CQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFfc3Vi cGF0aF9jYXJzKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTE1MzEsNyArMTU0MCw4IEBAIGFk ZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJCQkJICovCiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChucHBhdGgsCiAJCQkJCQkJ CQkJICAmcGFfbm9ucGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJ CQkJCSAgTlVMTCwKKwkJCQkJCQkJCQkgICZwYV9zdWJwYXRoX2NhcnMpOwogCQkJfQogCQl9CiAK QEAgLTE2MDYsMTQgKzE2MTYsMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkgKiBpZiB3ZSBoYXZlIHplcm8gb3Igb25lIGxp dmUgc3VicGF0aCBkdWUgdG8gY29uc3RyYWludCBleGNsdXNpb24uKQogCSAqLwogCWlmIChzdWJw YXRoc192YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo cm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN1YnBhdGhzLAorCQkJCQkJCQkJCQkJICBOSUwsIHN1 YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCSAgTklMLCBOVUxMLCAwLCBmYWxzZSwKIAkJCQkJCQkJ CQkJCSAgLTEpKTsKIAogCS8qIGJ1aWxkIGFuIEFwcGVuZFBhdGggZm9yIHRoZSBjaGVhcCBzdGFy dHVwIHBhdGhzLCBpZiB2YWxpZCAqLwogCWlmIChzdGFydHVwX3N1YnBhdGhzX3ZhbGlkKQogCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN0YXJ0 dXBfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkgIE5JTCwgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEp KTsKKwkJCQkJCQkJCQkJCSAgTklMLCBzdGFydHVwX3N1YnBhdGhfY2FycywKKwkJCQkJCQkJCQkJ CSAgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEpKTsKIAogCS8qCiAJICogQ29uc2lkZXIgYW4gYXBw ZW5kIG9mIHVub3JkZXJlZCwgdW5wYXJhbWV0ZXJpemVkIHBhcnRpYWwgcGF0aHMuICBNYWtlCkBA IC0xNjU0LDYgKzE2NjYsNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIEdlbmVyYXRlIGEgcGFydGlhbCBhcHBlbmQg cGF0aC4gKi8KIAkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5J TCwgcGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCQlwYXJ0aWFsX3N1YnBhdGhfY2FycywKIAkJ CQkJCQkJCQlOSUwsIE5VTEwsIHBhcmFsbGVsX3dvcmtlcnMsCiAJCQkJCQkJCQkJZW5hYmxlX3Bh cmFsbGVsX2FwcGVuZCwKIAkJCQkJCQkJCQktMSk7CkBAIC0xNzA0LDYgKzE3MTcsNyBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CiAJCWFwcGVuZHBhdGggPSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBwYV9ub25wYXJ0 aWFsX3N1YnBhdGhzLAogCQkJCQkJCQkJCXBhX3BhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJ cGFfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCU5JTCwgTlVMTCwgcGFyYWxsZWxfd29ya2Vycywg dHJ1ZSwKIAkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQlhZGRfcGFydGlhbF9wYXRoKHJlbCwg KFBhdGggKikgYXBwZW5kcGF0aCk7CkBAIC0xNzM3LDYgKzE3NTEsNyBAQCBhZGRfcGF0aHNfdG9f YXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIFNl bGVjdCB0aGUgY2hpbGQgcGF0aHMgZm9yIGFuIEFwcGVuZCB3aXRoIHRoaXMgcGFyYW1ldGVyaXph dGlvbiAqLwogCQlzdWJwYXRocyA9IE5JTDsKKwkJc3VicGF0aF9jYXJzID0gTklMOwogCQlzdWJw YXRoc192YWxpZCA9IHRydWU7CiAJCWZvcmVhY2gobGNyLCBsaXZlX2NoaWxkcmVscykKIAkJewpA QCAtMTc1OSwxMiArMTc3NCwxMyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCXN1YnBhdGhzX3ZhbGlkID0gZmFsc2U7CiAJ CQkJYnJlYWs7CiAJCQl9Ci0JCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCk7CisJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCSAgJnN1YnBhdGhfY2Fycyk7CiAJCX0KIAogCQlpZiAo c3VicGF0aHNfdmFsaWQpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICopCi0JCQkJCSBjcmVhdGVf YXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQkJCQkgY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlbCwgc3VicGF0aHMsIE5JTCwgc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJ CU5JTCwgcmVxdWlyZWRfb3V0ZXIsIDAsIGZhbHNlLAogCQkJCQkJCQkJCS0xKSk7CiAJfQpAQCAt MTc5MSw2ICsxODA3LDcgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQljb250aW51ZTsKIAogCQkJYXBwZW5kcGF0aCA9IGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgbGlzdF9tYWtlMShwYXRoKSwKKwkJCQkJ CQkJCQkJbGlzdF9tYWtlMShyZWwtPnJlbGlkcyksCiAJCQkJCQkJCQkJCU5JTCwgTlVMTCwKIAkJ CQkJCQkJCQkJcGF0aC0+cGFyYWxsZWxfd29ya2VycywgdHJ1ZSwKIAkJCQkJCQkJCQkJcGFydGlh bF9yb3dzKTsKQEAgLTE4NzIsOCArMTg4OSwxMSBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJewogCQlMaXN0CSAgICpw YXRoa2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwogCQlMaXN0CSAgICpzdGFydHVwX3N1YnBh dGhzID0gTklMOworCQlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhfY2FycyA9IE5JTDsKIAkJTGlz dAkgICAqdG90YWxfc3VicGF0aHMgPSBOSUw7CisJCUxpc3QJICAgKnRvdGFsX3N1YnBhdGhfY2Fy cyA9IE5JTDsKIAkJTGlzdAkgICAqZnJhY3Rpb25hbF9zdWJwYXRocyA9IE5JTDsKKwkJTGlzdAkg ICAqZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJCWJvb2wJCXN0YXJ0dXBfbmVxX3Rv dGFsID0gZmFsc2U7CiAJCWJvb2wJCW1hdGNoX3BhcnRpdGlvbl9vcmRlcjsKIAkJYm9vbAkJbWF0 Y2hfcGFydGl0aW9uX29yZGVyX2Rlc2M7CkBAIC0yMDI1LDE2ICsyMDQ1LDIzIEBAIGdlbmVyYXRl X29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAkJCQkgKiBqdXN0IGEgc2luZ2xlIHN1YnBhdGggKGFuZCBoZW5jZSBhcmVuJ3QgZG9pbmcgYW55 dGhpbmcKIAkJCQkgKiB1c2VmdWwpLgogCQkJCSAqLwotCQkJCWNoZWFwZXN0X3N0YXJ0dXAgPSBn ZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXApOwotCQkJCWNoZWFw ZXN0X3RvdGFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCk7 CisJCQkJY2hlYXBlc3Rfc3RhcnR1cCA9CisJCQkJCWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBh dGgoY2hlYXBlc3Rfc3RhcnR1cCwKKwkJCQkJCQkJCQkJCSAmc3RhcnR1cF9zdWJwYXRoX2NhcnMp OworCQkJCWNoZWFwZXN0X3RvdGFsID0KKwkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0 aChjaGVhcGVzdF90b3RhbCwKKwkJCQkJCQkJCQkJCSAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAog CQkJCXN0YXJ0dXBfc3VicGF0aHMgPSBsYXBwZW5kKHN0YXJ0dXBfc3VicGF0aHMsIGNoZWFwZXN0 X3N0YXJ0dXApOwogCQkJCXRvdGFsX3N1YnBhdGhzID0gbGFwcGVuZCh0b3RhbF9zdWJwYXRocywg Y2hlYXBlc3RfdG90YWwpOwogCiAJCQkJaWYgKGNoZWFwZXN0X2ZyYWN0aW9uYWwpCiAJCQkJewot CQkJCQljaGVhcGVzdF9mcmFjdGlvbmFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChj aGVhcGVzdF9mcmFjdGlvbmFsKTsKLQkJCQkJZnJhY3Rpb25hbF9zdWJwYXRocyA9IGxhcHBlbmQo ZnJhY3Rpb25hbF9zdWJwYXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CisJCQkJCWNoZWFwZXN0 X2ZyYWN0aW9uYWwgPQorCQkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVz dF9mcmFjdGlvbmFsLAorCQkJCQkJCQkJCQkJCSAmZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMpOwor CQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzID0KKwkJCQkJCWxhcHBlbmQoZnJhY3Rpb25hbF9zdWJw YXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CiAJCQkJfQogCQkJfQogCQkJZWxzZQpAQCAtMjA0 NCwxMyArMjA3MSwxNiBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICogY2hpbGQgcGF0aHMgZm9yIHRoZSBNZXJn ZUFwcGVuZC4KIAkJCQkgKi8KIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0 X3N0YXJ0dXAsCi0JCQkJCQkJCQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJ CQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCQkgICZzdGFydHVwX3N1YnBh dGhfY2Fycyk7CiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCwK LQkJCQkJCQkJCQkgICZ0b3RhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmdG90YWxf c3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkJICAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAogCQkJ CWlmIChjaGVhcGVzdF9mcmFjdGlvbmFsKQogCQkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRo KGNoZWFwZXN0X2ZyYWN0aW9uYWwsCi0JCQkJCQkJCQkJCSAgJmZyYWN0aW9uYWxfc3VicGF0aHMs IE5VTEwpOworCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhzLCBOVUxMLAorCQkJCQkJ CQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhfY2Fycyk7CiAJCQl9CiAJCX0KIApAQCAtMjA2Miw2 ICsyMDkyLDcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCSAg c3RhcnR1cF9zdWJwYXRocywKIAkJCQkJCQkJCQkJCQkgIE5JTCwKKwkJCQkJCQkJCQkJCQkgIHN0 YXJ0dXBfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCSAgcGF0aGtleXMsCiAJCQkJCQkJCQkJ CQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCSAgMCwKQEAgLTIwNzIsNiArMjEwMyw3IEBAIGdlbmVy YXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAkJCQkJCQkJCQkJCQkJICByZWwsCiAJCQkJCQkJCQkJCQkJCSAgdG90YWxfc3VicGF0aHMs CiAJCQkJCQkJCQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIHRvdGFsX3N1YnBhdGhfY2Fy cywKIAkJCQkJCQkJCQkJCQkJICBwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJ CQkJCQkJCQkJCQkgIDAsCkBAIC0yMDgzLDYgKzIxMTUsNyBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBw ZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJ CQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aHMsCiAJCQkJCQkJ CQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAog CQkJCQkJCQkJCQkJCQkgIHBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkgIE5VTEwsCiAJCQkJCQkJ CQkJCQkJCSAgMCwKQEAgLTIwOTUsMTIgKzIxMjgsMTQgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVu ZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJ CQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCXN0YXJ0dXBfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJ CQlzdGFydHVwX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCXBhdGhrZXlzLAogCQkJCQkJ CQkJCQkJCQkJTlVMTCkpOwogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRo KHJlbCwgKFBhdGggKikgY3JlYXRlX21lcmdlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJ CQkJCQkJcmVsLAogCQkJCQkJCQkJCQkJCQkJCXRvdGFsX3N1YnBhdGhzLAorCQkJCQkJCQkJCQkJ CQkJCXRvdGFsX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCQlwYXRoa2V5cywKIAkJCQkJ CQkJCQkJCQkJCQlOVUxMKSk7CiAKQEAgLTIxMDgsNiArMjE0Myw3IEBAIGdlbmVyYXRlX29yZGVy ZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJ CQkJCQkJCQkJCQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzLAor CQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCQkJ CXBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkJCU5VTEwpKTsKIAkJfQpAQCAtMjIxMCw3ICsyMjQ2 LDggQEAgZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogICogcGF0aHMpLgogICovCiBzdGF0aWMgdm9pZAotYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3Qg KipzcGVjaWFsX3N1YnBhdGhzKQorYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRo LCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJICBMaXN0 ICoqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpCiB7CiAJaWYgKElzQShwYXRoLCBBcHBlbmRQYXRo KSkKIAl7CkBAIC0yMjE5LDYgKzIyNTYsOCBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCWlm ICghYXBhdGgtPnBhdGgucGFyYWxsZWxfYXdhcmUgfHwgYXBhdGgtPmZpcnN0X3BhcnRpYWxfcGF0 aCA9PSAwKQogCQl7CiAJCQkqc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3VicGF0aHMsIGFwYXRo LT5zdWJwYXRocyk7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQo KmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1 cm47CiAJCX0KIAkJZWxzZSBpZiAoc3BlY2lhbF9zdWJwYXRocyAhPSBOVUxMKQpAQCAtMjIzMyw2 ICsyMjcyLDggQEAgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoq c3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzKQogCQkJCQkJCQkJCQkJICBhcGF0aC0+ Zmlyc3RfcGFydGlhbF9wYXRoKTsKIAkJCSpzcGVjaWFsX3N1YnBhdGhzID0gbGlzdF9jb25jYXQo KnNwZWNpYWxfc3VicGF0aHMsCiAJCQkJCQkJCQkJCW5ld19zcGVjaWFsX3N1YnBhdGhzKTsKKwkJ CSpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMsIHBhdGgtPnBhcmVudC0+cmVsaWRzKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAg LTIyNDEsNiArMjI4Miw4IEBAIGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwg TGlzdCAqKnN1YnBhdGhzLCBMaXN0ICoqc3BlY2lhbF9zdWJwYXRocykKIAkJTWVyZ2VBcHBlbmRQ YXRoICptcGF0aCA9IChNZXJnZUFwcGVuZFBhdGggKikgcGF0aDsKIAogCQkqc3VicGF0aHMgPSBs aXN0X2NvbmNhdCgqc3VicGF0aHMsIG1wYXRoLT5zdWJwYXRocyk7CisJCSpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cyA9CisJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0aC0+ cGFyZW50LT5yZWxpZHMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMjUyLDEwICsyMjk1LDE1IEBA IGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKnN1YnBhdGhzLCBM aXN0ICoqc3BlY2lhbF9zdWJwYXRocykKICAqCQlSZXR1cm5zIHRoZSBzaW5nbGUgc3VicGF0aCBv ZiBhbiBBcHBlbmQvTWVyZ2VBcHBlbmQsIG9yIGp1c3QKICAqCQlyZXR1cm4gJ3BhdGgnIGlmIGl0 J3Mgbm90IGEgc2luZ2xlIHN1Yi1wYXRoIEFwcGVuZC9NZXJnZUFwcGVuZC4KICAqCisgKiBBcyBh IHNpZGUgZWZmZWN0LCB3aGVuZXZlciB3ZSByZXR1cm4gYSBzaW5nbGUgc3VicGF0aCByYXRoZXIg dGhhbiB0aGUKKyAqIG9yaWdpbmFsIHBhdGgsIGFkZCB0aGUgcmVsaWQgc2V0IGZvciB0aGUgb3Jp Z2luYWwgcGF0aCB0bworICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHNvIHRoYXQgdGhvc2Ug cmVsaWRzIGRvbid0IGVudGlyZWx5IGRpc2FwcGVhcgorICogZnJvbSB0aGUgZmluYWwgcGxhbi4K KyAqCiAgKiBOb3RlOiAncGF0aCcgbXVzdCBub3QgYmUgYSBwYXJhbGxlbC1hd2FyZSBwYXRoLgog ICovCiBzdGF0aWMgUGF0aCAqCi1nZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBh dGgpCitnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipjaGls ZF9hcHBlbmRfcmVsaWRfc2V0cykKIHsKIAlBc3NlcnQoIXBhdGgtPnBhcmFsbGVsX2F3YXJlKTsK IApAQCAtMjI2NCwxNCArMjMxMiwyMiBAQCBnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgpCiAJCUFwcGVuZFBhdGggKmFwYXRoID0gKEFwcGVuZFBhdGggKikgcGF0aDsKIAog CQlpZiAobGlzdF9sZW5ndGgoYXBhdGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRf YXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz LCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwoYXBh dGgtPnN1YnBhdGhzKTsKKwkJfQogCX0KIAllbHNlIGlmIChJc0EocGF0aCwgTWVyZ2VBcHBlbmRQ YXRoKSkKIAl7CiAJCU1lcmdlQXBwZW5kUGF0aCAqbXBhdGggPSAoTWVyZ2VBcHBlbmRQYXRoICop IHBhdGg7CiAKIAkJaWYgKGxpc3RfbGVuZ3RoKG1wYXRoLT5zdWJwYXRocykgPT0gMSkKKwkJewor CQkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cywgcGF0aC0+cGFyZW50LT5yZWxpZHMpOwogCQkJcmV0dXJuIChQYXRoICopIGxp bml0aWFsKG1wYXRoLT5zdWJwYXRocyk7CisJCX0KIAl9CiAKIAlyZXR1cm4gcGF0aDsKQEAgLTIz MDAsNyArMjM1Niw3IEBAIHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQog CXJlbC0+cGFydGlhbF9wYXRobGlzdCA9IE5JTDsKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0 aCAqLwotCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJl bCwgTklMLCBOSUwsCisJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo TlVMTCwgcmVsLCBOSUwsIE5JTCwgTklMLAogCQkJCQkJCQkJCQkgIE5JTCwgcmVsLT5sYXRlcmFs X3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBmYWxzZSwgLTEpKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2pvaW5yZWxzLmMKaW5kZXggNWQxZmMzODk5ZGEuLmMxZWQwZDM4NzBmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTE1MzAsNyArMTUzMCw3IEBAIG1hcmtf ZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCkKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0aCAq LwogCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwg TklMLCBOSUwsCi0JCQkJCQkJCQkJCSAgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAorCQkJCQkJ CQkJCQkgIE5JTCwgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAogCQkJCQkJCQkJCQkgIDAsIGZh bHNlLCAtMSkpOwogCiAJLyogU2V0IG9yIHVwZGF0ZSBjaGVhcGVzdF90b3RhbF9wYXRoIGFuZCBy ZWxhdGVkIGZpZWxkcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmlu ZGV4IDYzZmU2NjM3MTU1Li42NTVjMTA5NzgxMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYwpAQCAtMTI2NSw2ICsxMjY1LDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBs YW5uZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFu LT5wbGFuLmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7CiAJ cGxhbi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhr ZXlzICE9IE5JTCkKIAl7CkBAIC0xNDc3LDYgKzE0NzgsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5k X3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBs YW4tPmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwogCW5vZGUtPmFw cHJlbGlkcyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g YmVzdF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBz b3J0IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVk LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDlkNTI2MjY1MWU3Li5lYjYy Nzk0YWVjZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDAyNyw2ICs0 MDI3LDcgQEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkgICBwYXRocywKIAkJCQkJCQkgICBO SUwsCiAJCQkJCQkJICAgTklMLAorCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkgICBOVUxMLAogCQkJ CQkJCSAgIDAsCiAJCQkJCQkJICAgZmFsc2UsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1 bmlvbi5jCmluZGV4IDU1NjY1ODI0MTc5Li5iN2M0YzA2ODZkMCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3ByZXAvcHJlcHVuaW9uLmMKQEAgLTgzOSw3ICs4MzksNyBAQCBnZW5lcmF0ZV91bmlvbl9w YXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJICogdW5pb24g Y2hpbGQuCiAJICovCiAJYXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwg cmVzdWx0X3JlbCwgY2hlYXBlc3RfcGF0aGxpc3QsCi0JCQkJCQkJCQkJTklMLCBOSUwsIE5VTEws IDAsIGZhbHNlLCAtMSk7CisJCQkJCQkJCQkJTklMLCBOSUwsIE5JTCwgTlVMTCwgMCwgZmFsc2Us IC0xKTsKIAogCS8qCiAJICogRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3Vwcy4gIEZvciBub3cgd2Ug anVzdCBhc3N1bWUgdGhlIG91dHB1dCBpcyB1bmlxdWUKQEAgLTg4NSw3ICs4ODUsNyBAQCBnZW5l cmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3Qs CiAKIAkJcGFwYXRoID0gKFBhdGggKikKIAkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1 bHRfcmVsLCBOSUwsIHBhcnRpYWxfcGF0aGxpc3QsCi0JCQkJCQkJICAgTklMLCBOVUxMLCBwYXJh bGxlbF93b3JrZXJzLAorCQkJCQkJCSAgIE5JTCwgTklMLCBOVUxMLCBwYXJhbGxlbF93b3JrZXJz LAogCQkJCQkJCSAgIGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQsIC0xKTsKIAkJZ3BhdGggPSAoUGF0 aCAqKQogCQkJY3JlYXRlX2dhdGhlcl9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIHBhcGF0aCwKQEAg LTEwMTEsNiArMTAxMSw3IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQg Km9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWVyZ2Vf YXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkgcmVzdWx0X3JlbCwKIAkJCQkJCQkJCQkJ CQkgb3JkZXJlZF9wYXRobGlzdCwKKwkJCQkJCQkJCQkJCQkgTklMLAogCQkJCQkJCQkJCQkJCSB1 bmlvbl9wYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkgTlVMTCk7CiAKQEAgLTEyMTcsOCArMTIxOCwx MCBAQCBnZW5lcmF0ZV9ub251bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJICogYmV0d2VlbiB0aGUgc2V0IG9wIHRhcmdldGxpc3QgYW5kIHRo ZSB0YXJnZXRsaXN0IG9mIHRoZQogCQkJCSAqIGxlZnQgaW5wdXQuICBUaGUgQXBwZW5kIHdpbGwg YmUgcmVtb3ZlZCBpbiBzZXRyZWZzLmMuCiAJCQkJICovCi0JCQkJYXBhdGggPSAoUGF0aCAqKSBj cmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwgbGlzdF9tYWtlMShscGF0aCksCi0J CQkJCQkJCQkJCQkJTklMLCBOSUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CisJCQkJYXBhdGggPSAo UGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwKKwkJCQkJCQkJCQkJ CQlsaXN0X21ha2UxKGxwYXRoKSwKKwkJCQkJCQkJCQkJCQlOSUwsIE5JTCwgTklMLCBOVUxMLCAw LAorCQkJCQkJCQkJCQkJCWZhbHNlLCAtMSk7CiAKIAkJCQlhZGRfcGF0aChyZXN1bHRfcmVsLCBh cGF0aCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2Rl LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IDQ0YWM1MzEy ZWRkLi4wYzAwOTg2OTFhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBA IC0xMjk5LDYgKzEyOTksNyBAQCBBcHBlbmRQYXRoICoKIGNyZWF0ZV9hcHBlbmRfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkgICBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICAgTGlzdCAqc3Vi cGF0aHMsIExpc3QgKnBhcnRpYWxfc3VicGF0aHMsCisJCQkJICAgTGlzdCAqY2hpbGRfYXBwZW5k X3JlbGlkX3NldHMsCiAJCQkJICAgTGlzdCAqcGF0aGtleXMsIFJlbGlkcyByZXF1aXJlZF9vdXRl ciwKIAkJCQkgICBpbnQgcGFyYWxsZWxfd29ya2VycywgYm9vbCBwYXJhbGxlbF9hd2FyZSwKIAkJ CQkgICBkb3VibGUgcm93cykKQEAgLTEzMDgsNiArMTMwOSw3IEBAIGNyZWF0ZV9hcHBlbmRfcGF0 aChQbGFubmVySW5mbyAqcm9vdCwKIAogCUFzc2VydCghcGFyYWxsZWxfYXdhcmUgfHwgcGFyYWxs ZWxfd29ya2VycyA+IDApOwogCisJcGF0aG5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX0Fw cGVuZDsKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJcGF0aG5vZGUtPnBhdGgucGF0 aHRhcmdldCA9IHJlbC0+cmVsdGFyZ2V0OwpAQCAtMTQ3MCw2ICsxNDcyLDcgQEAgTWVyZ2VBcHBl bmRQYXRoICoKIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJCQkJCQkgTGlz dCAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgUmVsaWRzIHJlcXVpcmVkX291dGVyKQogewpAQCAtMTQ4NSw2ICsxNDg4LDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCUFzc2VydChibXNf aXNfZW1wdHkocmVsLT5sYXRlcmFsX3JlbGlkcykgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291 dGVyKSk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBjaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfTWVyZ2VBcHBlbmQ7 CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJn ZXQgPSByZWwtPnJlbHRhcmdldDsKQEAgLTM5NDgsNiArMzk1Miw3IEBAIHJlcGFyYW1ldGVyaXpl X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJfQogCQkJCXJldHVybiAo UGF0aCAqKQogCQkJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBw YXJ0aWFscGF0aHMsCisJCQkJCQkJCQkgICBhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMs CiAJCQkJCQkJCQkgICBhcGF0aC0+cGF0aC5wYXRoa2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJ CQkJCQkgICBhcGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgt PnBhdGgucGFyYWxsZWxfYXdhcmUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IGNmM2ExNmI4YjBl Li43NWE3MDQ4OWU1YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIxNzEsNiArMjE3MSwxMiBA QCB0eXBlZGVmIHN0cnVjdCBDdXN0b21QYXRoCiAgKiBGb3IgcGFydGlhbCBBcHBlbmQsICdzdWJw YXRocycgY29udGFpbnMgbm9uLXBhcnRpYWwgc3VicGF0aHMgZm9sbG93ZWQgYnkKICAqIHBhcnRp YWwgc3VicGF0aHMuCiAgKgorICogV2hlbmV2ZXIgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aCgp IGFsbG93cyB1cyB0byBjb25zb2xpZGF0ZSBtdWx0aXBsZQorICogbGV2ZWxzIG9mIEFwcGVuZCBw YXRocyBhcmUgY29uc29saWRhdGVkIGRvd24gdG8gb25lLCB3ZSBzdG9yZSB0aGUgUlRJCisgKiBz ZXRzIGZvciB0aGUgb21pdHRlZCBwYXRocyBpbiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cy4gVGhp cyBpcyBub3QgbmVjZXNzYXJ5CisgKiBmb3IgcGxhbm5pbmcgb3IgZXhlY3V0aW9uOyB3ZSBkbyBp dCBmb3IgdGhlIGJlbmVmaXQgb2YgY29kZSB0aGF0IHdhbnRzCisgKiB0byBpbnNwZWN0IHRoZSBm aW5hbCBwbGFuIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBjYW1lIHRvIGJlLgorICoKICAqIE5vdGU6 IGl0IGlzIHBvc3NpYmxlIGZvciAic3VicGF0aHMiIHRvIGNvbnRhaW4gb25seSBvbmUsIG9yIGV2 ZW4gbm8sCiAgKiBlbGVtZW50cy4gIFRoZXNlIGNhc2VzIGFyZSBvcHRpbWl6ZWQgZHVyaW5nIGNy ZWF0ZV9hcHBlbmRfcGxhbi4KICAqIEluIHBhcnRpY3VsYXIsIGFuIEFwcGVuZFBhdGggd2l0aCBu byBzdWJwYXRocyBpcyBhICJkdW1teSIgcGF0aCB0aGF0CkBAIC0yMTg2LDYgKzIxOTIsNyBAQCB0 eXBlZGVmIHN0cnVjdCBBcHBlbmRQYXRoCiAJLyogSW5kZXggb2YgZmlyc3QgcGFydGlhbCBwYXRo IGluIHN1YnBhdGhzOyBsaXN0X2xlbmd0aChzdWJwYXRocykgaWYgbm9uZSAqLwogCWludAkJCWZp cnN0X3BhcnRpYWxfcGF0aDsKIAlDYXJkaW5hbGl0eSBsaW1pdF90dXBsZXM7CS8qIGhhcmQgbGlt aXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVs aWRfc2V0czsKIH0gQXBwZW5kUGF0aDsKIAogI2RlZmluZSBJU19EVU1NWV9BUFBFTkQocCkgXApA QCAtMjIwMiwxMiArMjIwOSwxNSBAQCBleHRlcm4gYm9vbCBpc19kdW1teV9yZWwoUmVsT3B0SW5m byAqcmVsKTsKIC8qCiAgKiBNZXJnZUFwcGVuZFBhdGggcmVwcmVzZW50cyBhIE1lcmdlQXBwZW5k IHBsYW4sIGllLCB0aGUgbWVyZ2luZyBvZiBzb3J0ZWQKICAqIHJlc3VsdHMgZnJvbSBzZXZlcmFs IG1lbWJlciBwbGFucyB0byBwcm9kdWNlIHNpbWlsYXJseS1zb3J0ZWQgb3V0cHV0LgorICoKKyAq IGNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGhlcmUgYXMgZm9y IEFwcGVuZFBhdGguCiAgKi8KIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kUGF0aAogewogCVBh dGgJCXBhdGg7CiAJTGlzdAkgICAqc3VicGF0aHM7CQkvKiBsaXN0IG9mIGNvbXBvbmVudCBQYXRo cyAqLwogCUNhcmRpbmFsaXR5IGxpbWl0X3R1cGxlczsJLyogaGFyZCBsaW1pdCBvbiBvdXRwdXQg dHVwbGVzLCBvciAtMSAqLworCUxpc3QJICAgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogfSBN ZXJnZUFwcGVuZFBhdGg7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFu bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IGM4ZDk3OTdmNzM4 Li43ZDA4NDZlYTc4OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTM5NCw5ICszOTQsMTYgQEAg c3RydWN0IFBhcnRpdGlvblBydW5lSW5mbzsJCS8qIGZvcndhcmQgcmVmZXJlbmNlIHRvIHN0cnVj dCBiZWxvdyAqLwogdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kCiB7CiAJUGxhbgkJcGxhbjsKKwogCS8q IFJUSXMgb2YgYXBwZW5kcmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KIAlCaXRtYXBzZXQg ICphcHByZWxpZHM7CisKKwkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0 ZWQgaW50byB0aGlzIG5vZGUgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsK KworCS8qIHBsYW5zIHRvIHJ1biAqLwogCUxpc3QJICAgKmFwcGVuZHBsYW5zOworCiAJLyogIyBv ZiBhc3luY2hyb25vdXMgcGxhbnMgKi8KIAlpbnQJCQluYXN5bmNwbGFuczsKIApAQCAtNDI2LDYg KzQzMywxMCBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZAogCS8qIFJUSXMgb2YgYXBwZW5k cmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KIAlCaXRtYXBzZXQgICphcHByZWxpZHM7CiAK KwkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0ZWQgaW50byB0aGlzIG5v ZGUgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKKworCS8qIHBsYW5zIHRv IHJ1biAqLwogCUxpc3QJICAgKm1lcmdlcGxhbnM7CiAKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIGp1 c3QgbGlrZSB0aGUgc29ydC1rZXkgaW5mbyBpbiBzdHJ1Y3QgU29ydDogKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhub2RlLmgKaW5kZXggOTU1ZTkwNTY4NTguLjQ0MzcyNDhjYjY3IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaApAQCAtNzAsMTIgKzcwLDE0IEBAIGV4dGVybiBUaWRSYW5nZVBhdGggKmNy ZWF0ZV90aWRyYW5nZXNjYW5fcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJICBS ZWxpZHMgcmVxdWlyZWRfb3V0ZXIpOwogZXh0ZXJuIEFwcGVuZFBhdGggKmNyZWF0ZV9hcHBlbmRf cGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJICBMaXN0 ICpzdWJwYXRocywgTGlzdCAqcGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCSAgTGlzdCAqY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJCQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMg cmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgIGludCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBh cmFsbGVsX2F3YXJlLAogCQkJCQkJCQkJICBkb3VibGUgcm93cyk7CiBleHRlcm4gTWVyZ2VBcHBl bmRQYXRoICpjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJ CQkJCQkJCQkgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJIExpc3QgKnN1YnBhdGhzLAor CQkJCQkJCQkJCQkJIExpc3QgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJ IExpc3QgKnBhdGhrZXlzLAogCQkJCQkJCQkJCQkJIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBl eHRlcm4gR3JvdXBSZXN1bHRQYXRoICpjcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsCi0tIAoyLjM5LjMgKEFwcGxlIEdpdC0xNDUpCgo= --0000000000005ed7fc064260aba8 Content-Type: application/octet-stream; name="v1-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Disposition: attachment; filename="v1-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhdgyw0l1 RnJvbSAyMmEzMjEzZWNhYzAwYjA4ODk0NmY2Zjk1MTJjMTNkNGU0YzBkMzZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6NDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxIDIv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgZWxpZGVkIG5vZGVzIGluIHRoZSBmaW5hbAogcGxh bi4KCkFuIGV4dGVuc2lvbiAob3IgY29yZSBjb2RlKSBtaWdodCB3YW50IHRvIHJlY29uc3RydWN0 IHRoZSBwbGFubmVyJ3MKY2hvaWNlIG9mIGpvaW4gb3JkZXIgZnJvbSB0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUKdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMgdGhh dCB3ZXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbSBpbiB0aGF0IHBsYW4uClRoZSBwcmV2aW91 cyBjb21taXQsIHRvZ2V0aGVyIHdpdGggdGhlIGVhcmxpZXIgd29yayBpbgo4YzQ5YTQ4NGU4ZWJi MDE5OWZiYTRiZDY4ZWFhZWRhZjQ5YjQ4ZWQwLCBpcyBlbm91Z2ggdG8gbGV0IHVzIG1hdGNoIHVw ClJUSXMgd2Ugc2VlIGluIHRoZSBmaW5hbCBwbGFuIHdpdGggUlRJcyB0aGF0IHdlIHNlZSBkdXJp bmcgdGhlIHBsYW5uaW5nCmN5Y2xlLCBidXQgd2Ugc3RpbGwgaGF2ZSBhIHByb2JsZW0gaWYgdGhl IHBsYW5uZXIgZGVjaWRlcyB0byBkcm9wIHNvbWUKUlRJcyBvdXQgb2YgdGhlIGZpbmFsIHBsYW4g YWx0b2dldGhlci4KClRvIGZpeCB0aGF0LCB3aGVuIHNldHJlZnMuYyByZW1vdmVzIGEgU3VicXVl cnlTY2FuLCBzaW5nbGUtY2hpbGQgQXBwZW5kLApvciBzaW5nbGUtY2hpbGQgTWVyZ2VBcHBlbmQg ZnJvbSB0aGUgZmluYWwgUGxhbiB0cmVlLCByZWNvcmQgdGhlIHR5cGUgb2YKdGhlIHJlbW92ZWQg bm9kZSBhbmQgdGhlIFJUSXMgdGhhdCB0aGUgcmVtb3ZlZCBub2RlIHdvdWxkIGhhdmUgc2Nhbm5l ZAppbiB0aGUgZmluYWwgcGxhbiB0cmVlLiBJdCB3b3VsZCBiZSBuYXR1cmFsIHRvIHJlY29yZCB0 aGlzIGluZm9ybWF0aW9uCm9uIHRoZSBjaGlsZCBvZiB0aGUgcmVtb3ZlZCBwbGFuIG5vZGUsIGJ1 dCB0aGF0IHdvdWxkIHJlcXVpcmUgYWRkaW5nCmFuIGFkZGl0aW9uYWwgcG9pbnRlciBmaWVsZCB0 byB0eXBlIFBsYW4sIHdoaWNoIHNlZW1zIHVuZGVzaXJhYmxlLgpTbywgaW5zdGVhZCwgc3RvcmUg dGhlIGluZm9ybWF0aW9uIGluIGEgc2VwYXJhdGUgbGlzdCB0aGF0IHRoZQpleGVjdXRvciBuZWVk IG5ldmVyIGNvbnN1bHQsIGFuZCB1c2UgdGhlIHBsYW5fbm9kZV9pZCB0byBpZGVudGlmeQp0aGUg cGxhbiBub2RlIHdpdGggd2hpY2ggdGhlIHJlbW92ZWQgbm9kZSBpcyBsb2dpY2FsbHkgYXNzb2Np YXRlZC4KCkFsc28sIHVwZGF0ZSBwZ19vdmVyZXhwbGFpbiB0byBkaXNwbGF5IHRoZXNlIGRldGFp bHMuCi0tLQogLi4uL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91dCAgICAgICAgICAgICAgIHwg IDQgKy0KIGNvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyAgICAgICB8IDM5 ICsrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAg ICAgfCA1MiArKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCAgICAgICAgICAgICAgICAgfCAgMyArKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTcgKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICAgICAgICAgICAgfCAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDExNCBpbnNlcnRpb25z KCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4v ZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBl Y3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggNTVkMzQ2NjZkODcuLmNhOWEyM2VhNjFmIDEw MDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dApAQCAtNDUyLDYgKzQ1Miw4IEBAIFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBn ZW51cyA9ICdkYXVjdXMnOwogIFNlcSBTY2FuIG9uIGRhdWN1cyB2ZWdldGFibGVzCiAgICBGaWx0 ZXI6IChnZW51cyA9ICdkYXVjdXMnOjp0ZXh0KQogICAgU2NhbiBSVEk6IDIKKyAgIEVsaWRlZCBO b2RlIFR5cGU6IEFwcGVuZAorICAgRWxpZGVkIE5vZGUgUlRJczogMQogIFJUSSAxIChyZWxhdGlv biwgaW5oZXJpdGVkLCBpbi1mcm9tLWNsYXVzZSk6CiAgICBFcmVmOiB2ZWdldGFibGVzIChpZCwg bmFtZSwgZ2VudXMpCiAgICBSZWxhdGlvbjogdmVnZXRhYmxlcwpAQCAtNDY1LDcgKzQ2Nyw3IEBA IFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBnZW51cyA9ICdkYXVjdXMnOwogICAgUmVs YXRpb24gS2luZDogcmVsYXRpb24KICAgIFJlbGF0aW9uIExvY2sgTW9kZTogQWNjZXNzU2hhcmVM b2NrCiAgVW5wcnVuYWJsZSBSVElzOiAxIDIKLSgxNiByb3dzKQorKDE4IHJvd3MpCiAKIC0tIEFs c28gdGVzdCBhIGNhc2UgdGhhdCBpbnZvbHZlcyBhIHdyaXRlLgogRVhQTEFJTiAoUkFOR0VfVEFC TEUsIENPU1RTIE9GRikKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3Zl cmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRl eCA1ZGM3MDdkNjllMy4uZmE5MDdmYTQ3MmUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4 cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYworKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKQEAgLTE5MSw2ICsxOTEsOCBAQCBvdmVyZXhwbGFpbl9wZXJfbm9kZV9ob29r KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJICovCiAJaWYgKG9wdGlv bnMtPnJhbmdlX3RhYmxlKQogCXsKKwkJYm9vbAkJb3BlbmVkX2VsaWRlZF9ub2RlcyA9IGZhbHNl OworCiAJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKIAkJewogCQkJY2FzZSBUX1NlcVNjYW46CkBA IC0yNTEsNiArMjUzLDQzIEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hvb2soUGxhblN0YXRlICpw bGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWRlZmF1bHQ6CiAJCQkJYnJlYWs7CiAJCX0K KworCQlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgZXMtPnBzdG10LT5lbGlkZWROb2RlcykK KwkJeworCQkJY2hhcgkgICAqZWxpZGVkbm9kZXRhZzsKKworCQkJaWYgKG4tPnBsYW5fbm9kZV9p ZCAhPSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQkJY29udGludWU7CisKKwkJCWlmICghb3BlbmVk X2VsaWRlZF9ub2RlcykKKwkJCXsKKwkJCQlFeHBsYWluT3Blbkdyb3VwKCJFbGlkZWQgTm9kZXMi LCAiRWxpZGVkIE5vZGVzIiwgZmFsc2UsIGVzKTsKKwkJCQlvcGVuZWRfZWxpZGVkX25vZGVzID0g dHJ1ZTsKKwkJCX0KKworCQkJc3dpdGNoIChuLT5lbGlkZWRfdHlwZSkKKwkJCXsKKwkJCQljYXNl IFRfQXBwZW5kOgorCQkJCQllbGlkZWRub2RldGFnID0gIkFwcGVuZCI7CisJCQkJCWJyZWFrOwor CQkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCQkJZWxpZGVkbm9kZXRhZyA9ICJNZXJnZUFwcGVu ZCI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQkJCWVsaWRlZG5v ZGV0YWcgPSAiU3VicXVlcnlTY2FuIjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJ ZWxpZGVkbm9kZXRhZyA9IHBzcHJpbnRmKCIlZCIsIG4tPmVsaWRlZF90eXBlKTsKKwkJCQkJYnJl YWs7CisJCQl9CisKKwkJCUV4cGxhaW5PcGVuR3JvdXAoIkVsaWRlZCBOb2RlIiwgTlVMTCwgdHJ1 ZSwgZXMpOworCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiRWxpZGVkIE5vZGUgVHlwZSIsIGVsaWRl ZG5vZGV0YWcsIGVzKTsKKwkJCW92ZXJleHBsYWluX2JpdG1hcHNldCgiRWxpZGVkIE5vZGUgUlRJ cyIsIG4tPnJlbGlkcywgZXMpOworCQkJRXhwbGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlIiwg TlVMTCwgdHJ1ZSwgZXMpOworCQl9CisJCWlmIChvcGVuZWRfZWxpZGVkX25vZGVzKQorCQkJRXhw bGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlcyIsICJFbGlkZWQgTm9kZXMiLCBmYWxzZSwgZXMp OwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDBlNmIzZjYw ZjMxLi45ZDUyNjI2NTFlNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAt NjE4LDYgKzYxOCw3IEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCXJlc3VsdC0+cGFyYW1FeGVjVHlw ZXMgPSBnbG9iLT5wYXJhbUV4ZWNUeXBlczsKIAkvKiB1dGlsaXR5U3RtdCBzaG91bGQgYmUgbnVs bCwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgY29weSBpdCAqLwogCXJlc3VsdC0+dXRpbGl0eVN0bXQg PSBwYXJzZS0+dXRpbGl0eVN0bXQ7CisJcmVzdWx0LT5lbGlkZWROb2RlcyA9IGdsb2ItPmVsaWRl ZE5vZGVzOwogCXJlc3VsdC0+c3RtdF9sb2NhdGlvbiA9IHBhcnNlLT5zdG10X2xvY2F0aW9uOwog CXJlc3VsdC0+c3RtdF9sZW4gPSBwYXJzZS0+c3RtdF9sZW47CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3NldHJlZnMuYwppbmRleCBhZGFiYWUwOWEyMy4uMjNhMDBkNDUyYjcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTIxMSw2ICsyMTEsOSBAQCBzdGF0aWMgTGlzdCAq c2V0X3dpbmRvd2FnZ19ydW5jb25kaXRpb25fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCQkJCSAgIExpc3QgKnJ1bmNvbmRpdGlvbiwKIAkJCQkJCQkJCQkJCSAgIFBsYW4g KnBsYW4pOwogCitzdGF0aWMgdm9pZCByZWNvcmRfZWxpZGVkX25vZGUoUGxhbm5lckdsb2JhbCAq Z2xvYiwgaW50IHBsYW5fbm9kZV9pZCwKKwkJCQkJCQkgICBOb2RlVGFnIGVsaWRlZF90eXBlLCBC aXRtYXBzZXQgKnJlbGlkcyk7CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTQ2 MCwxMCArMTQ2MywxNyBAQCBzZXRfc3VicXVlcnlzY2FuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8g KnJvb3QsCiAKIAlpZiAodHJpdmlhbF9zdWJxdWVyeXNjYW4ocGxhbikpCiAJeworCQlJbmRleAkJ c2NhbnJlbGlkOworCiAJCS8qCiAJCSAqIFdlIGNhbiBvbWl0IHRoZSBTdWJxdWVyeVNjYW4gbm9k ZSBhbmQganVzdCBwdWxsIHVwIHRoZSBzdWJwbGFuLgogCQkgKi8KIAkJcmVzdWx0ID0gY2xlYW5f dXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIHBsYW4sIHBsYW4tPnN1YnBsYW4pOworCisJ CS8qIFJlbWVtYmVyIHRoYXQgd2UgcmVtb3ZlZCBhIFN1YnF1ZXJ5U2NhbiAqLworCQlzY2FucmVs aWQgPSBwbGFuLT5zY2FuLnNjYW5yZWxpZCArIHJ0b2Zmc2V0OworCQlyZWNvcmRfZWxpZGVkX25v ZGUocm9vdC0+Z2xvYiwgcGxhbi0+c3VicGxhbi0+cGxhbl9ub2RlX2lkLAorCQkJCQkJICAgVF9T dWJxdWVyeVNjYW4sIGJtc19tYWtlX3NpbmdsZXRvbihzY2FucmVsaWQpKTsKIAl9CiAJZWxzZQog CXsKQEAgLTE4OTEsNyArMTkwMSwxNyBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChhcGxhbi0+YXBwZW5k cGxhbnMpOwogCiAJCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+cGxhbi5wYXJhbGxl bF9hd2FyZSkKLQkJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikg YXBsYW4sIHApOworCQl7CisJCQlQbGFuCSAgICpyZXN1bHQ7CisKKwkJCXJlc3VsdCA9IGNsZWFu X3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAqKSBhcGxhbiwgcCk7CisKKwkJCS8qIFJlbWVt YmVyIHRoYXQgd2UgcmVtb3ZlZCBhbiBBcHBlbmQgKi8KKwkJCXJlY29yZF9lbGlkZWRfbm9kZShy b290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfQXBwZW5kLAorCQkJCQkJCSAgIG9mZnNldF9y ZWxpZF9zZXQoYXBsYW4tPmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKKworCQkJcmV0dXJuIHJlc3Vs dDsKKwkJfQogCX0KIAogCS8qCkBAIC0xOTU5LDcgKzE5NzksMTcgQEAgc2V0X21lcmdlYXBwZW5k X3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBs aW5pdGlhbChtcGxhbi0+bWVyZ2VwbGFucyk7CiAKIAkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09 IG1wbGFuLT5wbGFuLnBhcmFsbGVsX2F3YXJlKQotCQkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRf cGxhbl9sZXZlbCgoUGxhbiAqKSBtcGxhbiwgcCk7CisJCXsKKwkJCVBsYW4JICAgKnJlc3VsdDsK KworCQkJcmVzdWx0ID0gY2xlYW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIG1wbGFu LCBwKTsKKworCQkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGEgTWVyZ2VBcHBlbmQgKi8K KwkJCXJlY29yZF9lbGlkZWRfbm9kZShyb290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfTWVy Z2VBcHBlbmQsCisJCQkJCQkJICAgb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXBwcmVsaWRzLCBy dG9mZnNldCkpOworCisJCQlyZXR1cm4gcmVzdWx0OworCQl9CiAJfQogCiAJLyoKQEAgLTM3NzQs MyArMzgwNCwyMSBAQCBleHRyYWN0X3F1ZXJ5X2RlcGVuZGVuY2llc193YWxrZXIoTm9kZSAqbm9k ZSwgUGxhbm5lckluZm8gKmNvbnRleHQpCiAJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIo bm9kZSwgZXh0cmFjdF9xdWVyeV9kZXBlbmRlbmNpZXNfd2Fsa2VyLAogCQkJCQkJCQkgIGNvbnRl eHQpOwogfQorCisvKgorICogUmVjb3JkIHNvbWUgZGV0YWlscyBhYm91dCBhIG5vZGUgcmVtb3Zl ZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzCisgKiBwcm9jZXNpbmcsIGZvciB0aGUgYmVu ZWZpdCBvZiBjb2RlIHRyeWluZyB0byByZWNvbnN0cnVjdCBwbGFubmVyIGRlY2lzaW9ucworICog ZnJvbSBleGFtaW5hdGlvbiBvZiB0aGUgZmluYWwgcGxhbiB0cmVlLgorICovCitzdGF0aWMgdm9p ZAorcmVjb3JkX2VsaWRlZF9ub2RlKFBsYW5uZXJHbG9iYWwgKmdsb2IsIGludCBwbGFuX25vZGVf aWQsCisJCQkJICAgTm9kZVRhZyBlbGlkZWRfdHlwZSwgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJ RWxpZGVkTm9kZSAqbiA9IG1ha2VOb2RlKEVsaWRlZE5vZGUpOworCisJbi0+cGxhbl9ub2RlX2lk ID0gcGxhbl9ub2RlX2lkOworCW4tPmVsaWRlZF90eXBlID0gZWxpZGVkX3R5cGU7CisJbi0+cmVs aWRzID0gcmVsaWRzOworCisJZ2xvYi0+ZWxpZGVkTm9kZXMgPSBsYXBwZW5kKGdsb2ItPmVsaWRl ZE5vZGVzLCBuKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggYTNhODAwODY5ZGYuLmNmM2Ex NmI4YjBlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTU5LDYgKzE1OSw5IEBAIHR5cGVkZWYg c3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiB0eXBlIE9JRHMgZm9yIFBBUkFNX0VYRUMgUGFyYW1z ICovCiAJTGlzdAkgICAqcGFyYW1FeGVjVHlwZXM7CiAKKwkvKiBpbmZvIGFib3V0IG5vZGVzIGVs aWRlZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzIHByb2Nlc3NpbmcgKi8KKwlMaXN0CSAg ICplbGlkZWROb2RlczsKKwogCS8qIGhpZ2hlc3QgUGxhY2VIb2xkZXJWYXIgSUQgYXNzaWduZWQg Ki8KIAlJbmRleAkJbGFzdFBISWQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggZDM3YTY5NzJi MzYuLmM4ZDk3OTdmNzM4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMTUyLDYgKzE1Miw5IEBA IHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10CiAJLyogbm9uLW51bGwgaWYgdGhpcyBpcyB1dGls aXR5IHN0bXQgKi8KIAlOb2RlCSAgICp1dGlsaXR5U3RtdDsKIAorCS8qIGluZm8gYWJvdXQgbm9k ZXMgZWxpZGVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2luZyAqLworCUxp c3QJICAgKmVsaWRlZE5vZGVzOworCiAJLyoKIAkgKiBEZWZFbGVtIG9iamVjdHMgYWRkZWQgYnkg ZXh0ZW5zaW9ucywgZS5nLiB1c2luZyBwbGFubmVyX3NodXRkb3duX2hvb2sKIAkgKgpAQCAtMTgz OCw0ICsxODQxLDE4IEBAIHR5cGVkZWYgc3RydWN0IFN1YlBsYW5SVEluZm8KIAlib29sCQlkdW1t eTsKIH0gU3ViUGxhblJUSW5mbzsKIAorLyoKKyAqIEVsaWRlZE5vZGUKKyAqCisgKiBJbmZvcm1h dGlvbiBhYm91dCBub2RlcyBlbGlkZWQgZnJvbSB0aGUgZmluYWwgcGxhbiB0cmVlOiB0cml2aWFs IHN1YnF1ZXJ5CisgKiBzY2FucywgYW5kIHNpbmdsZS1jaGlsZCBBcHBlbmQgYW5kIE1lcmdlQXBw ZW5kIG5vZGVzLgorICovCit0eXBlZGVmIHN0cnVjdCBFbGlkZWROb2RlCit7CisJTm9kZVRhZwkJ dHlwZTsKKwlpbnQJCQlwbGFuX25vZGVfaWQ7CisJTm9kZVRhZwkJZWxpZGVkX3R5cGU7CisJQml0 bWFwc2V0ICAqcmVsaWRzOworfSBFbGlkZWROb2RlOworCiAjZW5kaWYJCQkJCQkJLyogUExBTk5P REVTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggM2Q0YTRjYWMwZWEuLmY3Zjc5 ZmEwMWY0IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNjk3LDYgKzY5Nyw3IEBAIEVh Y2hTdGF0ZQogRWRnZQogRWRpdGFibGVPYmplY3RUeXBlCiBFbGVtZW50c1N0YXRlCitFbGlkZWRO b2RlCiBFbmFibGVUaW1lb3V0UGFyYW1zCiBFbmREYXRhUHRyVHlwZQogRW5kRGlyZWN0TW9kaWZ5 X2Z1bmN0aW9uCi0tIAoyLjM5LjMgKEFwcGxlIEdpdC0xNDUpCgo= --0000000000005ed7fc064260aba8 Content-Type: application/octet-stream; name="v1-0001-Store-information-about-range-table-flattening-in.patch" Content-Disposition: attachment; filename="v1-0001-Store-information-about-range-table-flattening-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhdgyw0c0 RnJvbSA5ZGE2NzE0MjFlZmRmMWQ3Mzk1ZjM5NjIyYzQ3NjE5M2RjZTFjZTY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTI6MDA6MTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYxIDEv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgcmFuZ2UtdGFibGUgZmxhdHRlbmluZyBpbiB0aGUK IGZpbmFsIHBsYW4uCgpTdXBwb3NlIHRoYXQgd2UncmUgY3VycmVudGx5IHBsYW5uaW5nIGEgcXVl cnkgYW5kLCB3aGVuIHRoYXQgc2FtZQpxdWVyeSB3YXMgcHJldmlvdXNseSBwbGFubmVkIGFuZCBl eGVjdXRlZCwgd2UgbGVhcm5lZCBzb21ldGhpbmcgYWJvdXQKaG93IGEgY2VydGFpbiB0YWJsZSB3 aXRoaW4gdGhhdCBxdWVyeSBzaG91bGQgYmUgcGxhbm5lZC4gV2Ugd2FudCB0bwp0YWtlIG5vdGUg d2hlbiB0aGF0IHNhbWUgdGFibGUgaXMgYmVpbmcgcGxhbm5lZCBkdXJpbmcgdGhlIGN1cnJlbnQK cGxhbm5pbmcgY3ljbGUsIGJ1dCB0aGlzIGlzIGRpZmZpY3VsdCB0byBkbywgYmVjYXVzZSB0aGUg UlRJIG9mIHRoZQp0YWJsZSBmcm9tIHRoZSBwcmV2aW91cyBwbGFuIHdvbid0IG5lY2Vzc2FyaWx5 IGJlIGVxdWFsIHRvIHRoZSBSVEkKdGhhdCB3ZSBzZWUgZHVyaW5nIHRoZSBjdXJyZW50IHBsYW5u aW5nIGN5Y2xlLiBUaGlzIGlzIGJlY2F1c2UgZWFjaApzdWJxdWVyeSBoYXMgYSBzZXBhcmF0ZSBy YW5nZSB0YWJsZSBkdXJpbmcgcGxhbm5pbmcsIGJ1dCB0aGVzZSBhcmUKZmxhdHRlbmVkIGludG8g b25lIHJhbmdlIHRhYmxlIHdoZW4gY29uc3RydWN0aW5nIHRoZSBmaW5hbCBwbGFuLApjaGFuZ2lu ZyBSVElzLgoKQ29tbWl0IDhjNDlhNDg0ZThlYmIwMTk5ZmJhNGJkNjhlYWFlZGFmNDliNDhlZDAg YWxsb3dzIHVzIHRvIG1hdGNoIHVwCnN1YnF1ZXJpZXMgc2VlbiBpbiB0aGUgcHJldmlvdXMgcGxh bm5pbmcgY3ljbGVzIHdpdGggdGhlIHN1YnF1ZXJpZXMKY3VycmVudGx5IGJlaW5nIHBsYW5uZWQg anVzdCBieSBjb21wYXJpbmcgdGV4dHVhbCBuYW1lcywgYnV0IHRoYXQncwpub3QgcXVpdGUgZW5v dWdoIHRvIGxldCB1cyBkZWR1Y2UgYW55dGhpbmcgYWJvdXQgaW5kaXZpZHVhbCB0YWJsZXMsCmJl Y2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSBlYWNoIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUgYXBw ZWFycyBpbgp0aGUgZmluYWwsIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4KClRvIGZpeCB0aGF0LCBz dG9yZSBhIGxpc3Qgb2YgU3ViUGxhblJUSW5mbyBvYmplY3RzIGluIHRoZSBmaW5hbApwbGFubmVk IHN0YXRlbWVudCwgZWFjaCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIHN1YnBsYW4sIHRoZSBv ZmZzZXQKYXQgd2hpY2ggaXQgYmVnaW5zIGluIHRoZSBmbGF0dGVuZWQgcmFuZ2UgdGFibGUsIGFu ZCB3aGV0aGVyIG9yIG5vdAppdCB3YXMgYSBkdW1teSBzdWJwbGFuIC0tIGlmIGl0IHdhcywgc29t ZSBSVElzIG1heSBoYXZlIGJlZW4gZHJvcHBlZApmcm9tIHRoZSBmaW5hbCByYW5nZSB0YWJsZSwg YnV0IGFsc28gdGhlcmUncyBubyBuZWVkIHRvIGNvbnRyb2wgaG93CmEgZHVtbXkgc3VicXVlcnkg Z2V0cyBwbGFubmVkLiBUaGUgdG9wbGV2ZWwgc3VicXVlcnkgaGFzIG5vIG5hbWUgYW5kCmFsd2F5 cyBiZWdpbnMgYXQgcnRvZmZzZXQgMCwgc28gd2UgbWFrZSBubyBlbnRyeSBmb3IgaXQuCgpUaGlz IGNvbW1pdCB0ZWFjaGVzIHBnX292ZXJleHBsYWluJ2UgUkFOR0VfVEFCTEUgb3B0aW9uIHRvIG1h a2UgdXNlCm9mIHRoaXMgbmV3IGRhdGEgdG8gZGlzcGxheSB0aGUgc3VicXVlcnkgbmFtZSBmb3Ig ZWFjaCByYW5nZSB0YWJsZQplbnRyeS4KCk5PVEUgVE8gUkVWSUVXRVJTOiBJZiB0aGVyZSdzIGEg Y2xlYW4gd2F5IHRvIG1ha2UgcGdfb3ZlcmV4cGxhaW4gZGlzcGxheQp0aGlzIGluZm9ybWF0aW9u IHdpdGhvdXQgdGhlIG5ldyBpbmZyYXN0cnVjdHVyZSBwcm92aWRlZCBieSB0aGlzIHBhdGNoLAp0 aGVuIHRoaXMgcGF0Y2ggaXMgdW5uZWNlc3NhcnkuIEkgdGhvdWdodCB0aGVyZSB3b3VsZCBiZSBh IHdheSB0byBkbwp0aGF0LCBidXQgSSBjb3VsZG4ndCBmaWd1cmUgYW55dGhpbmcgb3V0OiB0aGVy ZSBzZWVtcyB0byBiZSBub3RoaW5nIHRoYXQKcmVjb3JkcyBpbiB0aGUgZmluYWwgUGxhbm5lZFN0 bXQgd2hlcmUgc3VicXVlcnkncyByYW5nZSB0YWJsZSBlbmRzIGFuZAp0aGUgbmV4dCBvbmUgYmVn aW5zLiBJbiBwcmFjdGljZSwgb25lIGNvdWxkIHVzdWFsbHkgZmlndXJlIGl0IG91dCBieQptYXRj aGluZyB1cCB0YWJsZXMgYnkgcmVsYXRpb24gT0lELCBidXQgdGhhdCdzIG5laXRoZXIgY2xlYW4g bm9yCnRoZW9yZXRpY2FsbHkgc291bmQuCi0tLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jICAgIHwgMjAgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oICAgICAgICAgICB8ICAzICsrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggICAgICAgICAgIHwgMTcgKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg Yi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggYmQ3MGI2ZDlk NWUuLjVkYzcwN2Q2OWUzIDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5j CkBAIC0zOTUsNiArMzk1LDggQEAgc3RhdGljIHZvaWQKIG92ZXJleHBsYWluX3JhbmdlX3RhYmxl KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhwbGFpblN0YXRlICplcykKIHsKIAlJbmRleAkJ cnRpOworCUxpc3RDZWxsICAgKmxjX3N1YnJ0aW5mbyA9IGxpc3RfaGVhZChwbGFubmVkc3RtdC0+ c3VicnRpbmZvcyk7CisJU3ViUGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKIAogCS8qIE9wZW4g Z3JvdXAsIG9uZSBlbnRyeSBwZXIgUmFuZ2VUYmxFbnRyeSAqLwogCUV4cGxhaW5PcGVuR3JvdXAo IlJhbmdlIFRhYmxlIiwgIlJhbmdlIFRhYmxlIiwgZmFsc2UsIGVzKTsKQEAgLTQwNSw2ICs0MDcs MTggQEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBF eHBsYWluU3RhdGUgKmVzKQogCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBs YW5uZWRzdG10LT5ydGFibGUpOwogCQljaGFyCSAgICpraW5kID0gTlVMTDsKIAkJY2hhcgkgICAq cmVsa2luZDsKKwkJU3ViUGxhblJUSW5mbyAqbmV4dF9ydGluZm87CisKKwkJLyogQWR2YW5jZSB0 byBuZXh0IFN1YlJUSW5mbywgaWYgaXQncyB0aW1lLiAqLworCQlpZiAobGNfc3VicnRpbmZvICE9 IE5VTEwpCisJCXsKKwkJCW5leHRfcnRpbmZvID0gbGZpcnN0KGxjX3N1YnJ0aW5mbyk7CisJCQlp ZiAocnRpID4gbmV4dF9ydGluZm8tPnJ0b2Zmc2V0KQorCQkJeworCQkJCXJ0aW5mbyA9IG5leHRf cnRpbmZvOworCQkJCWxjX3N1YnJ0aW5mbyA9IGxuZXh0KHBsYW5uZWRzdG10LT5zdWJydGluZm9z LCBsY19zdWJydGluZm8pOworCQkJfQorCQl9CiAKIAkJLyogTlVMTCBlbnRyaWVzIGFyZSBwb3Nz aWJsZTsgc2tpcCB0aGVtICovCiAJCWlmIChydGUgPT0gTlVMTCkKQEAgLTQ2OSw2ICs0ODMsMjgg QEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBFeHBs YWluU3RhdGUgKmVzKQogCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgiSW4gRnJvbSBDbGF1c2UiLCBy dGUtPmluRnJvbUNsLCBlcyk7CiAJCX0KIAorCQkvKgorCQkgKiBJbmRpY2F0ZSB3aGljaCBzdWJw bGFuIGlzIHRoZSBvcmlnaW4gb2Ygd2hpY2ggUlRFLiBOb3RlIGR1bW15CisJCSAqIHN1YnBsYW5z LiBIZXJlIGFnYWluLCB3ZSBjcnVuY2ggbW9yZSBvbnRvIG9uZSBsaW5lIGluIHRleHQgZm9ybWF0 LgorCQkgKi8KKwkJaWYgKHJ0aW5mbyAhPSBOVUxMKQorCQl7CisJCQlpZiAoZXMtPmZvcm1hdCA9 PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQkJeworCQkJCWlmICghcnRpbmZvLT5kdW1teSkKKwkJ CQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3VicGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7 CisJCQkJZWxzZQorCQkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJTdWJwbGFuIiwKKwkJCQkJCQkJ CQlwc3ByaW50ZigiJXMgKGR1bW15KSIsCisJCQkJCQkJCQkJCQkgcnRpbmZvLT5wbGFuX25hbWUp LCBlcyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3Vi cGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgi U3VicGxhbiBJcyBEdW1teSIsIHJ0aW5mby0+ZHVtbXksIGVzKTsKKwkJCX0KKwkJfQorCiAJCS8q IHJ0ZS0+YWxpYXMgaXMgb3B0aW9uYWw7IHJ0ZS0+ZXJlZiBpcyByZXF1ZXN0ZWQgKi8KIAkJaWYg KHJ0ZS0+YWxpYXMgIT0gTlVMTCkKIAkJCW92ZXJleHBsYWluX2FsaWFzKCJBbGlhcyIsIHJ0ZS0+ YWxpYXMsIGVzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5u ZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBjNGZkNjQ2 Yjk5OS4uMGU2YjNmNjBmMzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTYwNyw2ICs2MDcsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnVucHJ1bmFibGVS ZWxpZHMgPSBibXNfZGlmZmVyZW5jZShnbG9iLT5hbGxSZWxpZHMsCiAJCQkJCQkJCQkJCSAgZ2xv Yi0+cHJ1bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVybUluZm9zID0gZ2xvYi0+ZmluYWxydGVw ZXJtaW5mb3M7CisJcmVzdWx0LT5zdWJydGluZm9zID0gZ2xvYi0+c3VicnRpbmZvczsKIAlyZXN1 bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsKIAlyZXN1bHQtPmFw cGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5z ID0gZ2xvYi0+c3VicGxhbnM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXgg Y2NkYzliYzI2NGEuLmFkYWJhZTA5YTIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jCkBAIC0zOTksNiArMzk5LDI2IEBAIGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJJ bmZvICpyb290LCBib29sIHJlY3Vyc2luZykKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmxj OwogCisJLyoKKwkgKiBSZWNvcmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIG1ha2UgaXQgcG9zc2li bGUgZm9yIGNvZGUgdGhhdCBsb29rcyBhdAorCSAqIHRoZSBmaW5hbCByYW5nZSB0YWJsZSB0byB1 bmRlcnN0YW5kIGhvdyBpdCB3YXMgY29uc3RydWN0ZWQuIChJZgorCSAqIGZpbmFscnRhYmxlIGlz IHN0aWxsIE5JTCwgdGhlbiB0aGlzIGlzIHRoZSB2ZXJ5IHRvcG1vc3QgUGxhbm5lckluZm8sCisJ ICogd2hpY2ggd2lsbCBhbHdheXMgaGF2ZSBwbGFuX25hbWUgPT0gTlVMTCBhbmQgcnRvZmZzZXQg PT0gMDsgd2Ugb21pdCB0aGUKKwkgKiBkZWdlbmVyYXRlIGxpc3QgZW50cnkuKQorCSAqLworCWlm IChyb290LT5nbG9iLT5maW5hbHJ0YWJsZSAhPSBOSUwpCisJeworCQlTdWJQbGFuUlRJbmZvICpy dGluZm8gPSBtYWtlTm9kZShTdWJQbGFuUlRJbmZvKTsKKworCQlydGluZm8tPnBsYW5fbmFtZSA9 IHJvb3QtPnBsYW5fbmFtZTsKKwkJcnRpbmZvLT5ydG9mZnNldCA9IGxpc3RfbGVuZ3RoKHJvb3Qt Pmdsb2ItPmZpbmFscnRhYmxlKTsKKworCQkvKiBXaGVuIHJlY3Vyc2luZyA9IHRydWUsIGl0J3Mg YW4gdW5wbGFubmVkIG9yIGR1bW15IHN1YnF1ZXJ5LiAqLworCQlydGluZm8tPmR1bW15ID0gcmVj dXJzaW5nOworCisJCXJvb3QtPmdsb2ItPnN1YnJ0aW5mb3MgPSBsYXBwZW5kKHJvb3QtPmdsb2It PnN1YnJ0aW5mb3MsIHJ0aW5mbyk7CisJfQorCiAJLyoKIAkgKiBBZGQgdGhlIHF1ZXJ5J3Mgb3du IFJURXMgdG8gdGhlIGZsYXR0ZW5lZCByYW5nZXRhYmxlLgogCSAqCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IDMwZDg4OWI1NGM1Li5hM2E4MDA4NjlkZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAg LTEzNSw2ICsxMzUsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogImZsYXQi IGxpc3Qgb2YgUlRFUGVybWlzc2lvbkluZm9zICovCiAJTGlzdAkgICAqZmluYWxydGVwZXJtaW5m b3M7CiAKKwkvKiBsaXN0IG9mIFN1YlBsYW5SVEluZm8gbm9kZXMgKi8KKwlMaXN0CSAgICpzdWJy dGluZm9zOworCiAJLyogImZsYXQiIGxpc3Qgb2YgUGxhblJvd01hcmtzICovCiAJTGlzdAkgICAq ZmluYWxyb3dtYXJrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCA3Y2RkMmI1MWM5NC4uZDM3 YTY5NzJiMzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0xMzEsNiArMTMxLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkgKi8KIAlMaXN0CSAgICpzdWJwbGFuczsKIAorCS8qIGEg bGlzdCBvZiBTdWJQbGFuUlRJbmZvIG9iamVjdHMgKi8KKwlMaXN0CSAgICpzdWJydGluZm9zOwor CiAJLyogaW5kaWNlcyBvZiBzdWJwbGFucyB0aGF0IHJlcXVpcmUgUkVXSU5EICovCiAJQml0bWFw c2V0ICAqcmV3aW5kUGxhbklEczsKIApAQCAtMTgyMSw0ICsxODI0LDE4IEBAIHR5cGVkZWYgZW51 bSBNb25vdG9uaWNGdW5jdGlvbgogCU1PTk9UT05JQ0ZVTkNfQk9USCA9IE1PTk9UT05JQ0ZVTkNf SU5DUkVBU0lORyB8IE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORywKIH0gTW9ub3RvbmljRnVuY3Rp b247CiAKKy8qCisgKiBTdWJQbGFuUlRJbmZvCisgKgorICogSW5mb3JtYXRpb24gYWJvdXQgd2hp Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBjYW1lIGZyb20gd2hpY2ggc3VicXVlcnkKKyAqIHBsYW5u aW5nIGN5Y2xlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3ViUGxhblJUSW5mbworeworCU5vZGVU YWcJCXR5cGU7CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworCUluZGV4CQlydG9mZnNldDsKKwli b29sCQlkdW1teTsKK30gU3ViUGxhblJUSW5mbzsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5OT0RF U19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGFjMmRhNGM5OGNmLi4zZDRhNGNh YzBlYSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI4ODYsNiArMjg4Niw3IEBAIFN1 YkxpbmsKIFN1YkxpbmtUeXBlCiBTdWJPcHRzCiBTdWJQbGFuCitTdWJQbGFuUlRJbmZvCiBTdWJQ bGFuU3RhdGUKIFN1YlJlbEluZm8KIFN1YlJlbW92ZVJlbHMKLS0gCjIuMzkuMyAoQXBwbGUgR2l0 LTE0NSkKCg== --0000000000005ed7fc064260aba8 Content-Type: application/octet-stream; name="v1-0004-Temporary-hack-to-unbreak-partitionwise-join-cont.patch" Content-Disposition: attachment; filename="v1-0004-Temporary-hack-to-unbreak-partitionwise-join-cont.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhdgyw0t3 RnJvbSA0YWNiMGU4ZmFkYmM3NGY2OTFhYTZiZWNlYTcyN2RjMTk3Y2NhMDY4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMjkgT2N0IDIwMjUgMTU6MTc6NDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxIDQv Nl0gVGVtcG9yYXJ5IGhhY2sgdG8gdW5icmVhayBwYXJ0aXRpb253aXNlIGpvaW4gY29udHJvbC4K ClJlc2V0dGluZyB0aGUgcGF0aGxpc3QgYW5kIHBhcnRpYWwgcGF0aGxpc3QgdG8gTklMIHdoZW4g dGhlCnRvcG1vc3Qgc2Nhbi9qb2luIHJlbCBpcyBhIHBhcnRpdGlvbmVkIGpvaW5yZWwgaXMgaW5j b3JyZWN0LiBUaGUgaXNzdWUKd2FzIG9yaWdpbmFsbHkgcmVwb3J0ZWQgYnkgQXNodXRvc2ggQmFw YXQgaGVyZToKCmh0dHA6Ly9wb3N0Z3IuZXMvbS9DQUV4SFc1dG96ZTU4K2pMLTQ1NEozdHkxMXNx SnlVMTNTejVySlBRWkRtQVN3WmdXaUFAbWFpbC5nbWFpbC5jb20KCkkgZmFpbGVkIHRvIHVuZGVy c3RhbmQgQXNodXRvc2gncyBleHBsYW5hdGlvbiB1bnRpbCBJIGhpdCB0aGUgcHJvYmxlbQpteXNl bGYsIHNvIGhlcmUncyBteSBhdHRlbXB0IHRvIHJlLWV4cGxhaW4gd2hhdCBoZSBoYWQgc2FpZCwg anVzdCBpbgpjYXNlIHlvdSBmaW5kIG15IGV4cGxhbmF0aW9uIGFueSBjbGVhcmVyOgoKaHR0cDov L3Bvc3Rnci5lcy9tL0NBJTJCVGdtb1p2QkQlMkI1dnlRcnVYQlZYVzc0Rk1nV3hFJTNETzRLNHJD ckN0RUVMV05qLU1MQSU0MG1haWwuZ21haWwuY29tCgpBcyBzdWJzZXF1ZW50IGRpc2N1c3Npb24g b24gdGhhdCB0aHJlYWQgaW5kaWNhdGVzLCBpdCBpcyB1bmNsZWFyCmV4YWN0bHkgd2hhdCB0aGUg cmlnaHQgZml4IGZvciB0aGlzIHByb2JsZW0gaXMsIGFuZCBhdCBsZWFzdCBhcyBvZgp0aGlzIHdy aXRpbmcsIGl0IGlzIGV2ZW4gbW9yZSB1bmNsZWFyIGhvdyB0byBhZGp1c3QgdGhlIHRlc3QgY2Fz ZXMKdGhhdCBicmVhay4gV2hhdCBJJ3ZlIGRvbmUgaGVyZSBpcyBqdXN0IGFjY2VwdCBhbGwgdGhl IGNoYW5nZXMgdG8gdGhlCnJlZ3Jlc3Npb24gdGVzdCBvdXRwdXRzLCB3aGljaCBpcyBhbG1vc3Qg Y2VydGFpbmx5IHRoZSB3cm9uZyBpZGVhLAplc3BlY2lhbGx5IHNpbmNlIEkndmUgYWxzbyBhZGRl ZCBubyBjb21tZW50cy4KClRoaXMgaXMganVzdCBhIHRlbXBvcmFyeSBoYWNrIHRvIG1ha2UgaXQg cG9zc2libGUgdG8gdGVzdCB0aGlzIHBhdGNoCnNldCwgYmVjYXVzZSB3aXRob3V0IHRoaXMsIFBB UlRJVElPTldJU0UoKSBhZHZpY2UgY2FuJ3QgYmUgdXNlZCB0bwpzdXBwcmVzcyBhIHBhcnRpdGlv bndpc2Ugam9pbiwgYmVjYXVzZSBhbGwgb2YgdGhlIGFsdGVybmF0aXZlcyBnZXQKZWxpbWluYXRl ZCByZWdhcmRsZXNzIG9mIGNvc3QuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jICAgICAgICAgfCAgIDQgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0 aW9uX2pvaW4ub3V0IHwgMTcyICsrKysrKysrLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dCAgICAgIHwgIDQxICsrLS0tCiAzIGZpbGVzIGNoYW5nZWQs IDkxIGluc2VydGlvbnMoKyksIDEyNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMKaW5kZXggZWI2Mjc5NGFlY2QuLjhiMWFiODQ3ZjM5IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC03OTI3LDcgKzc5MjcsNyBAQCBhcHBseV9zY2Fuam9p bl90YXJnZXRfdG9fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJICogZ2VuZXJhdGVfdXNlZnVs X2dhdGhlcl9wYXRocyB0byBhZGQgcGF0aChzKSB0byB0aGUgbWFpbiBsaXN0LCBhbmQKIAkgKiBm aW5hbGx5IHphcCB0aGUgcGFydGlhbCBwYXRobGlzdC4KIAkgKi8KLQlpZiAocmVsX2lzX3BhcnRp dGlvbmVkKQorCWlmIChyZWxfaXNfcGFydGl0aW9uZWQgJiYgSVNfU0lNUExFX1JFTChyZWwpKQog CQlyZWwtPnBhdGhsaXN0ID0gTklMOwogCiAJLyoKQEAgLTc5NTMsNyArNzk1Myw3IEBAIGFwcGx5 X3NjYW5qb2luX3RhcmdldF90b19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAl9CiAKIAkvKiBG aW5pc2ggZHJvcHBpbmcgb2xkIHBhdGhzIGZvciBhIHBhcnRpdGlvbmVkIHJlbCwgcGVyIGNvbW1l bnQgYWJvdmUgKi8KLQlpZiAocmVsX2lzX3BhcnRpdGlvbmVkKQorCWlmIChyZWxfaXNfcGFydGl0 aW9uZWQgJiYgSVNfU0lNUExFX1JFTChyZWwpKQogCQlyZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBO SUw7CiAKIAkvKiBFeHRyYWN0IFNSRi1mcmVlIHNjYW4vam9pbiB0YXJnZXQuICovCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4ub3V0CmluZGV4IDcxMzgyOGJlMzM1 Li4zZTM0ZjA1YmE2MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0 aXRpb25fam9pbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25f am9pbi5vdXQKQEAgLTY1LDMxICs2NSwyNCBAQCBTRUxFQ1QgdDEuYSwgdDEuYywgdDIuYiwgdDIu YyBGUk9NIHBydDEgdDEsIHBydDIgdDIgV0hFUkUgdDEuYSA9IHQyLmIgQU5EIHQxLmIgPQogLS0g aW5uZXIgam9pbiB3aXRoIHBhcnRpYWxseS1yZWR1bmRhbnQgam9pbiBjbGF1c2VzCiBFWFBMQUlO IChDT1NUUyBPRkYpCiBTRUxFQ1QgdDEuYSwgdDEuYywgdDIuYiwgdDIuYyBGUk9NIHBydDEgdDEs IHBydDIgdDIgV0hFUkUgdDEuYSA9IHQyLmEgQU5EIHQxLmEgPSB0Mi5iIE9SREVSIEJZIHQxLmEs IHQyLmI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFNvcnQKLSAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1l cmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6ICh0MS5hID0gdDIuYSkKICAgIC0+ICBBcHBlbmQKLSAg ICAgICAgIC0+ICBNZXJnZSBKb2luCi0gICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDFfMS5h ID0gdDJfMS5hKQotICAgICAgICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgaXBydDFfcDFf YSBvbiBwcnQxX3AxIHQxXzEKLSAgICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAg ICAgICAgICBTb3J0IEtleTogdDJfMS5iCi0gICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHJ0Ml9wMSB0Ml8xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChh ID0gYikKLSAgICAgICAgIC0+ICBIYXNoIEpvaW4KLSAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQxXzIuYSA9IHQyXzIuYSkKLSAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX3Ay IHQxXzIKLSAgICAgICAgICAgICAgIC0+ICBIYXNoCi0gICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHJ0Ml9wMiB0Ml8yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6IChhID0gYikKLSAgICAgICAgIC0+ICBIYXNoIEpvaW4KLSAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKHQxXzMuYSA9IHQyXzMuYSkKLSAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw cnQxX3AzIHQxXzMKLSAgICAgICAgICAgICAgIC0+ICBIYXNoCi0gICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHJ0Ml9wMyB0Ml8zCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6IChhID0gYikKLSgyMiByb3dzKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgaXBydDFfcDFfYSBvbiBwcnQxX3AxIHQxXzEKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIGlwcnQxX3AyX2Egb24gcHJ0MV9wMiB0MV8yCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBpcHJ0MV9wM19hIG9uIHBydDFfcDMgdDFfMworICAgLT4gIFNvcnQKKyAgICAgICAgIFNv cnQgS2V5OiB0Mi5iCisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHJ0Ml9wMSB0Ml8xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChhID0g YikKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQyX3AyIHQyXzIKKyAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKGEgPSBiKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBydDJfcDMgdDJfMworICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYSA9IGIpCiso MTUgcm93cykKIAogU0VMRUNUIHQxLmEsIHQxLmMsIHQyLmIsIHQyLmMgRlJPTSBwcnQxIHQxLCBw cnQyIHQyIFdIRVJFIHQxLmEgPSB0Mi5hIEFORCB0MS5hID0gdDIuYiBPUkRFUiBCWSB0MS5hLCB0 Mi5iOwogIGEgIHwgIGMgICB8IGIgIHwgIGMgICAKQEAgLTEyNDksNTYgKzEyNDIsNTAgQEAgU0VU IGVuYWJsZV9oYXNoam9pbiBUTyBvZmY7CiBTRVQgZW5hYmxlX25lc3Rsb29wIFRPIG9mZjsKIEVY UExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCB0MS4qIEZST00gcHJ0MSB0MSBXSEVSRSB0MS5hIElO IChTRUxFQ1QgdDEuYiBGUk9NIHBydDIgdDEgV0hFUkUgdDEuYiBJTiAoU0VMRUNUICh0MS5hICsg dDEuYikvMiBGUk9NIHBydDFfZSB0MSBXSEVSRSB0MS5jID0gMCkpIEFORCB0MS5iID0gMCBPUkRF UiBCWSB0MS5hOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBNZXJnZSBBcHBlbmQKLSAgIFNvcnQg S2V5OiB0MS5hCi0gICAtPiAgTWVyZ2UgU2VtaSBKb2luCi0gICAgICAgICBNZXJnZSBDb25kOiAo dDFfMy5hID0gdDFfNi5iKQotICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgIFNvcnQg S2V5OiB0MV8zLmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9p bgorICAgTWVyZ2UgQ29uZDogKHQxLmEgPSB0MV8xLmIpCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBBcHBlbmQKICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwcnQxX3AxIHQxXzMKICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGIg PSAwKQotICAgICAgICAgLT4gIE1lcmdlIFNlbWkgSm9pbgotICAgICAgICAgICAgICAgTWVyZ2Ug Q29uZDogKHQxXzYuYiA9ICgoKHQxXzkuYSArIHQxXzkuYikgLyAyKSkpCi0gICAgICAgICAgICAg ICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxXzYuYgotICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDJfcDEgdDFfNgotICAgICAgICAgICAg ICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKCh0MV85LmEgKyB0 MV85LmIpIC8gMikpCi0gICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9l X3AxIHQxXzkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgPSAwKQotICAg LT4gIE1lcmdlIFNlbWkgSm9pbgotICAgICAgICAgTWVyZ2UgQ29uZDogKHQxXzQuYSA9IHQxXzcu YikKLSAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICBTb3J0IEtleTogdDFfNC5hCiAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9wMiB0MV80CiAgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6IChiID0gMCkKLSAgICAgICAgIC0+ICBNZXJnZSBTZW1pIEpvaW4KLSAg ICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0MV83LmIgPSAoKCh0MV8xMC5hICsgdDFfMTAuYikg LyAyKSkpCi0gICAgICAgICAgICAgICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgU29y dCBLZXk6IHQxXzcuYgotICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDJf cDIgdDFfNwotICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAgICAgIFNv cnQgS2V5OiAoKCh0MV8xMC5hICsgdDFfMTAuYikgLyAyKSkKLSAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwcnQxX2VfcDIgdDFfMTAKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKGMgPSAwKQotICAgLT4gIE1lcmdlIFNlbWkgSm9pbgotICAgICAgICAgTWVy Z2UgQ29uZDogKHQxXzUuYSA9IHQxXzguYikKLSAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAg ICAgICBTb3J0IEtleTogdDFfNS5hCiAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0 MV9wMyB0MV81CiAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChiID0gMCkKLSAgICAgICAg IC0+ICBNZXJnZSBTZW1pIEpvaW4KLSAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0MV84LmIg PSAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAyKSkpCi0gICAgICAgICAgICAgICAtPiAgU29ydAot ICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxXzguYgotICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHBydDJfcDMgdDFfOAotICAgICAgICAgICAgICAgLT4gIFNvcnQK LSAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAy KSkKLSAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX2VfcDMgdDFfMTEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgPSAwKQotKDQ3IHJvd3MpCisg ICAtPiAgVW5pcXVlCisgICAgICAgICAtPiAgTWVyZ2UgQXBwZW5kCisgICAgICAgICAgICAgICBT b3J0IEtleTogdDFfMS5iCisgICAgICAgICAgICAgICAtPiAgTWVyZ2UgU2VtaSBKb2luCisgICAg ICAgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDFfNi5iID0gKCgodDFfOS5hICsgdDFfOS5i KSAvIDIpKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAg ICAgICAgICAgICBTb3J0IEtleTogdDFfNi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHJ0Ml9wMSB0MV82CisgICAgICAgICAgICAgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoKHQxXzkuYSArIHQxXzku YikgLyAyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQx X2VfcDEgdDFfOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYyA9 IDApCisgICAgICAgICAgICAgICAtPiAgTWVyZ2UgU2VtaSBKb2luCisgICAgICAgICAgICAgICAg ICAgICBNZXJnZSBDb25kOiAodDFfNy5iID0gKCgodDFfMTAuYSArIHQxXzEwLmIpIC8gMikpKQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IFNvcnQgS2V5OiB0MV83LmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwcnQyX3AyIHQxXzcKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAg ICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogKCgodDFfMTAuYSArIHQxXzEwLmIpIC8gMikp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9lX3AyIHQx XzEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChjID0gMCkKKyAg ICAgICAgICAgICAgIC0+ICBNZXJnZSBTZW1pIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE1l cmdlIENvbmQ6ICh0MV84LmIgPSAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAyKSkpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBL ZXk6IHQxXzguYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBy dDJfcDMgdDFfOAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNvcnQgS2V5OiAoKCh0MV8xMS5hICsgdDFfMTEuYikgLyAyKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX2VfcDMgdDFfMTEKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgPSAwKQorKDQxIHJvd3Mp CiAKIFNFTEVDVCB0MS4qIEZST00gcHJ0MSB0MSBXSEVSRSB0MS5hIElOIChTRUxFQ1QgdDEuYiBG Uk9NIHBydDIgdDEgV0hFUkUgdDEuYiBJTiAoU0VMRUNUICh0MS5hICsgdDEuYikvMiBGUk9NIHBy dDFfZSB0MSBXSEVSRSB0MS5jID0gMCkpIEFORCB0MS5iID0gMCBPUkRFUiBCWSB0MS5hOwogICBh ICB8IGIgfCAgYyAgIApAQCAtNDkyMywzMiArNDkxMCwyNyBAQCBBTkFMWVpFIHBsdDNfYWR2Owog LS0gJzAwMDEnIG9mIHRoYXQgcGFydGl0aW9uCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1Qg dDEuYSwgdDEuYywgdDIuYSwgdDIuYywgdDMuYSwgdDMuYyBGUk9NIChwbHQxX2FkdiB0MSBMRUZU IEpPSU4gcGx0Ml9hZHYgdDIgT04gKHQxLmMgPSB0Mi5jKSkgRlVMTCBKT0lOIHBsdDNfYWR2IHQz IE9OICh0MS5jID0gdDMuYykgV0hFUkUgY29hbGVzY2UodDEuYSwgMCkgJSA1ICE9IDMgQU5EIGNv YWxlc2NlKHQxLmEsIDApICUgNSAhPSA0IE9SREVSIEJZIHQxLmMsIHQxLmEsIHQyLmEsIHQzLmE7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBTb3J0CiAgICBTb3J0IEtleTogdDEuYywgdDEu YSwgdDIuYSwgdDMuYQotICAgLT4gIEFwcGVuZAotICAgICAgICAgLT4gIEhhc2ggRnVsbCBKb2lu Ci0gICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8xLmMgPSB0M18xLmMpCi0gICAgICAgICAg ICAgICBGaWx0ZXI6ICgoKENPQUxFU0NFKHQxXzEuYSwgMCkgJSA1KSA8PiAzKSBBTkQgKChDT0FM RVNDRSh0MV8xLmEsIDApICUgNSkgPD4gNCkpCi0gICAgICAgICAgICAgICAtPiAgSGFzaCBMZWZ0 IEpvaW4KLSAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzEuYyA9IHQyXzEuYykK KyAgIC0+ICBIYXNoIEZ1bGwgSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAodDEuYyA9IHQzLmMp CisgICAgICAgICBGaWx0ZXI6ICgoKENPQUxFU0NFKHQxLmEsIDApICUgNSkgPD4gMykgQU5EICgo Q09BTEVTQ0UodDEuYSwgMCkgJSA1KSA8PiA0KSkKKyAgICAgICAgIC0+ICBIYXNoIExlZnQgSm9p bgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEuYyA9IHQyLmMpCisgICAgICAgICAgICAg ICAtPiAgQXBwZW5kCiAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGx0MV9h ZHZfcDEgdDFfMQotICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwbHQyX2Fkdl9wMSB0Ml8xCi0gICAgICAgICAg ICAgICAtPiAgSGFzaAotICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBsdDNf YWR2X3AxIHQzXzEKLSAgICAgICAgIC0+ICBIYXNoIEZ1bGwgSm9pbgotICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDFfMi5jID0gdDNfMi5jKQotICAgICAgICAgICAgICAgRmlsdGVyOiAoKChD T0FMRVNDRSh0MV8yLmEsIDApICUgNSkgPD4gMykgQU5EICgoQ09BTEVTQ0UodDFfMi5hLCAwKSAl IDUpIDw+IDQpKQotICAgICAgICAgICAgICAgLT4gIEhhc2ggTGVmdCBKb2luCi0gICAgICAgICAg ICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLmMgPSB0Ml8yLmMpCiAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcGx0MV9hZHZfcDIgdDFfMgotICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw bHQyX2Fkdl9wMiB0Ml8yCiAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBsdDJfYWR2X3AxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwbHQyX2Fkdl9wMiB0Ml8yCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBsdDNf YWR2X3AxIHQzXzEKICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwbHQzX2Fk dl9wMiB0M18yCi0oMjMgcm93cykKKygxOCByb3dzKQogCiBTRUxFQ1QgdDEuYSwgdDEuYywgdDIu YSwgdDIuYywgdDMuYSwgdDMuYyBGUk9NIChwbHQxX2FkdiB0MSBMRUZUIEpPSU4gcGx0Ml9hZHYg dDIgT04gKHQxLmMgPSB0Mi5jKSkgRlVMTCBKT0lOIHBsdDNfYWR2IHQzIE9OICh0MS5jID0gdDMu YykgV0hFUkUgY29hbGVzY2UodDEuYSwgMCkgJSA1ICE9IDMgQU5EIGNvYWxlc2NlKHQxLmEsIDAp ICUgNSAhPSA0IE9SREVSIEJZIHQxLmMsIHQxLmEsIHQyLmEsIHQzLmE7CiAgYSAgfCAgYyAgIHwg YSAgfCAgYyAgIHwgYSAgfCAgYyAgIApAQCAtNTI0MCwxNyArNTIyMiwxNSBAQCBTRUxFQ1QgeC5p ZCwgeS5pZCBGUk9NIGZyYWN0X3QgeCBMRUZUIEpPSU4gZnJhY3RfdCB5IFVTSU5HIChpZCkgT1JE RVIgQlkgeC5pZCBBUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAg IC0+ICBNZXJnZSBBcHBlbmQKLSAgICAgICAgIFNvcnQgS2V5OiB4LmlkCi0gICAgICAgICAtPiAg TWVyZ2UgTGVmdCBKb2luCi0gICAgICAgICAgICAgICBNZXJnZSBDb25kOiAoeF8xLmlkID0geV8x LmlkKQorICAgLT4gIE1lcmdlIExlZnQgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKHguaWQg PSB5LmlkKQorICAgICAgICAgLT4gIEFwcGVuZAogICAgICAgICAgICAgICAgLT4gIEluZGV4IE9u bHkgU2NhbiB1c2luZyBmcmFjdF90MF9wa2V5IG9uIGZyYWN0X3QwIHhfMQotICAgICAgICAgICAg ICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBmcmFjdF90MF9wa2V5IG9uIGZyYWN0X3QwIHlf MQotICAgICAgICAgLT4gIE1lcmdlIExlZnQgSm9pbgotICAgICAgICAgICAgICAgTWVyZ2UgQ29u ZDogKHhfMi5pZCA9IHlfMi5pZCkKICAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4g dXNpbmcgZnJhY3RfdDFfcGtleSBvbiBmcmFjdF90MSB4XzIKKyAgICAgICAgIC0+ICBBcHBlbmQK KyAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZnJhY3RfdDBfcGtleSBv biBmcmFjdF90MCB5XzEKICAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcg ZnJhY3RfdDFfcGtleSBvbiBmcmFjdF90MSB5XzIKLSgxMSByb3dzKQorKDkgcm93cykKIAogRVhQ TEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIHguaWQsIHkuaWQgRlJPTSBmcmFjdF90IHggTEVGVCBK T0lOIGZyYWN0X3QgeSBVU0lORyAoaWQpIE9SREVSIEJZIHguaWQgREVTQyBMSU1JVCAxMDsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dAppbmRleCBjZjZiMzJkMTE3My4uODU0 OTYwMWUzYmMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0 Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQKQEAgLTg1 MCwxMCArODUwLDExIEBAIHdoZXJlICh0MS5hLCB0Mi5hKSBpbiAoc2VsZWN0IGEsIGEgZnJvbSB1 bmlxdWVfdGJsX3AgdDMpCiBvcmRlciBieSB0MS5hLCB0Mi5hOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSBNZXJnZSBBcHBlbmQKLSAgIFNvcnQgS2V5OiB0MS5hCi0gICAtPiAgTmVzdGVkIExv b3AKLSAgICAgICAgIE91dHB1dDogdDFfMS5hLCB0MV8xLmIsIHQyXzEuYSwgdDJfMS5iCisgTWVy Z2UgSm9pbgorICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0Mi5hLCB0Mi5iCisgICBNZXJnZSBDb25k OiAodDEuYSA9IHQyLmEpCisgICAtPiAgTWVyZ2UgQXBwZW5kCisgICAgICAgICBTb3J0IEtleTog dDEuYQogICAgICAgICAgLT4gIE5lc3RlZCBMb29wCiAgICAgICAgICAgICAgICBPdXRwdXQ6IHQx XzEuYSwgdDFfMS5iLCB0M18xLmEKICAgICAgICAgICAgICAgIC0+ICBVbmlxdWUKQEAgLTg2Mywx NSArODY0LDYgQEAgb3JkZXIgYnkgdDEuYSwgdDIuYTsKICAgICAgICAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHVuaXF1ZV90YmxfcDFfYV9pZHggb24gcHVibGljLnVuaXF1ZV90YmxfcDEg dDFfMQogICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLmEsIHQxXzEuYgogICAgICAg ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHQxXzEuYSA9IHQzXzEuYSkKLSAgICAgICAgIC0+ ICBNZW1vaXplCi0gICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEuYSwgdDJfMS5iCi0gICAgICAg ICAgICAgICBDYWNoZSBLZXk6IHQxXzEuYQotICAgICAgICAgICAgICAgQ2FjaGUgTW9kZTogbG9n aWNhbAotICAgICAgICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdW5pcXVlX3RibF9wMV9h X2lkeCBvbiBwdWJsaWMudW5pcXVlX3RibF9wMSB0Ml8xCi0gICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzEuYSwgdDJfMS5iCi0gICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAo dDJfMS5hID0gdDFfMS5hKQotICAgLT4gIE5lc3RlZCBMb29wCi0gICAgICAgICBPdXRwdXQ6IHQx XzIuYSwgdDFfMi5iLCB0Ml8yLmEsIHQyXzIuYgogICAgICAgICAgLT4gIE5lc3RlZCBMb29wCiAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIuYSwgdDFfMi5iLCB0M18yLmEKICAgICAgICAgICAg ICAgIC0+ICBVbmlxdWUKQEAgLTg4MSwxNSArODczLDYgQEAgb3JkZXIgYnkgdDEuYSwgdDIuYTsK ICAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHVuaXF1ZV90YmxfcDJfYV9pZHgg b24gcHVibGljLnVuaXF1ZV90YmxfcDIgdDFfMgogICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV8yLmEsIHQxXzIuYgogICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHQxXzIu YSA9IHQzXzIuYSkKLSAgICAgICAgIC0+ICBNZW1vaXplCi0gICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzIuYSwgdDJfMi5iCi0gICAgICAgICAgICAgICBDYWNoZSBLZXk6IHQxXzIuYQotICAgICAg ICAgICAgICAgQ2FjaGUgTW9kZTogbG9naWNhbAotICAgICAgICAgICAgICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgdW5pcXVlX3RibF9wMl9hX2lkeCBvbiBwdWJsaWMudW5pcXVlX3RibF9wMiB0Ml8y Ci0gICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIuYSwgdDJfMi5iCi0gICAgICAgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAodDJfMi5hID0gdDFfMi5hKQotICAgLT4gIE5lc3RlZCBM b29wCi0gICAgICAgICBPdXRwdXQ6IHQxXzMuYSwgdDFfMy5iLCB0Ml8zLmEsIHQyXzMuYgogICAg ICAgICAgLT4gIE5lc3RlZCBMb29wCiAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMuYSwgdDFf My5iLCB0M18zLmEKICAgICAgICAgICAgICAgIC0+ICBVbmlxdWUKQEAgLTkwMiwxNCArODg1LDE2 IEBAIG9yZGVyIGJ5IHQxLmEsIHQyLmE7CiAgICAgICAgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyB1bmlxdWVfdGJsX3AzX2FfaWR4IG9uIHB1YmxpYy51bmlxdWVfdGJsX3AzIHQxXzMKICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy5hLCB0MV8zLmIKICAgICAgICAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6ICh0MV8zLmEgPSB0M18zLmEpCi0gICAgICAgICAtPiAgTWVtb2l6 ZQotICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLmEsIHQyXzMuYgotICAgICAgICAgICAgICAg Q2FjaGUgS2V5OiB0MV8zLmEKLSAgICAgICAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAg IC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgT3V0cHV0OiB0Mi5hLCB0Mi5iCisgICAgICAgICAt PiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyB1bmlxdWVfdGJs X3AxX2FfaWR4IG9uIHB1YmxpYy51bmlxdWVfdGJsX3AxIHQyXzEKKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMS5hLCB0Ml8xLmIKKyAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIHVuaXF1ZV90YmxfcDJfYV9pZHggb24gcHVibGljLnVuaXF1ZV90YmxfcDIgdDJfMgor ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLmEsIHQyXzIuYgogICAgICAgICAgICAg ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdW5pcXVlX3RibF9wM19hX2lkeCBvbiBwdWJsaWMudW5p cXVlX3RibF9wMyB0Ml8zCiAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMuYSwgdDJf My5iCi0gICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodDJfMy5hID0gdDFfMy5hKQot KDU5IHJvd3MpCisoNDQgcm93cykKIAogcmVzZXQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbjsK IGRyb3AgdGFibGUgdW5pcXVlX3RibF9wOwotLSAKMi4zOS4zIChBcHBsZSBHaXQtMTQ1KQoK --0000000000005ed7fc064260aba8 Content-Type: application/octet-stream; name="v1-0006-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v1-0006-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhdgyw0y5 RnJvbSBiY2UxMjg0MmFmNWViZWYzNWY5ZmY4YjA0ZGM2YTE5YTJiM2MyNmIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMzAgT2N0IDIwMjUgMDk6MTQ6MjMgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxIDYv Nl0gV0lQOiBBZGQgcGdfcGxhbl9hZHZpY2UgY29udHJpYiBtb2R1bGUuCgpQcm92aWRlIGEgZmFj aWxpdHkgdGhhdCAoMSkgY2FuIGJlIHVzZWQgdG8gc3RhYmlsaXplIGNlcnRhaW4gcGxhbiBjaG9p Y2VzCnNvIHRoYXQgdGhlIHBsYW5uZXIgY2Fubm90IHJldmVyc2UgY291cnNlIHdpdGhvdXQgYXV0 aG9yaXphdGlvbiBhbmQKKDIpIGNhbiBiZSB1c2VkIGJ5IGtub3dsZWRnZWFibGUgdXNlcnMgdG8g aW5zaXN0IG9uIHBsYW4gY2hvaWNlcyBjb250cmFyeQp0byB3aGF0IHRoZSBwbGFubmVyIGJlbGll dmVzIGJlc3QuIEluIGJvdGggY2FzZXMsIHRlcnJpYmxlIG91dGNvbWVzIGFyZQpwb3NzaWJsZTog dXNlcnMgc2hvdWxkIHRoaW5rIHR3aWNlIGFuZCBwZXJoYXBzIHRocmVlIHRpbWVzIGJlZm9yZQpj b25zdHJhaW5pbmcgdGhlIHBsYW5uZXIncyBhYmlsaXR5IHRvIGRvIGFzIGl0IHRoaW5rcyBiZXN0 OyBuZXZlcnRoZWxlc3MsCnRoZXJlIGFyZSBwcm9ibGVtcyB0aGF0IGFyZSBtdWNoIG1vcmUgZWFz aWx5IHNvbHZlZCB3aXRoIHRoZXNlIGZhY2lsaXRpZXMKdGhhbiB3aXRob3V0IHRoZW0uCgpXZSB0 YWtlIHRoZSBhcHByb2FjaCBvZiBhbmFseXppbmcgYSBmaW5pc2hlZCBwbGFuIHRvIHByb2R1Y2Ug dGV4dHVhbApvdXRwdXQsIHdoaWNoIHdlIGNhbGwgInBsYW4gYWR2aWNlIiwgdGhhdCBkZXNjcmli ZXMga2V5IGRlY2lzaW9ucyBtYWRlCmR1cmluZyBwbGFuOyBpZiB0aGF0IHBsYW4gYWR2aWNlIGlz IHByb3ZpZGVkIGR1cmluZyBmdXR1cmUgcGxhbm5pbmcKY3ljbGVzLCBpdCB3aWxsIGZvcmNlIHRo b3NlIGtleSBkZWNpc2lvbnMgdG8gYmUgbWFkZSBpbiB0aGUgc2FtZSB3YXkuCk5vdCBhbGwgcGxh bm5lciBkZWNpc2lvbnMgY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcgYWR2aWNlOyBmb3IgZXhhbXBs ZSwKZGVjaXNpb25zIGFib3V0IGhvdyB0byBwZXJmb3JtIGFnZ3JlZ2F0aW9uIGFyZSBjdXJyZW50 bHkgb3V0IG9mIHNjb3BlLAphcyBpcyBjaG9pY2Ugb2Ygc29ydCBvcmRlci4gUGxhbiBhZHZpY2Ug Y2FuIGFsc28gYmUgZWRpdGVkIGJ5IHRoZSB1c2VyLApvciBldmVuIHdyaXR0ZW4gZnJvbSBzY3Jh dGNoIGluIHNpbXBsZSBjYXNlcywgbWFraW5nIGl0IHBvc3NpYmxlIHRvCmdlbmVyYXRlIG91dGNv bWVzIHRoYXQgdGhlIHBsYW5uZXIgd291bGQgbm90IGhhdmUgcHJvZHVjZWQuIFBhcnRpYWwKYWR2 aWNlIGNhbiBiZSBwcm92aWRlZCB0byBjb250cm9sIHNvbWUgcGxhbm5lciBvdXRjb21lcyBidXQg bm90IG90aGVycy4KCkN1cnJlbnRseSwgcGxhbiBhZHZpY2UgaXMgZm9jdXNlZCBvbmx5IG9uIHNw ZWNpZmljIG91dGNvbWVzLCBzdWNoIGFzCnRoZSBjaG9pY2UgdG8gdXNlIGEgc2VxdWVudGlhbCBz Y2FuIGZvciBhIHBhcnRpY3VsYXIgcmVsYXRpb24sIGFuZCBub3QKb24gZXN0aW1hdGVzIHRoYXQg bWlnaHQgY29udHJpYnV0ZSB0byB0aG9zZSBvdXRjb21lcywgc3VjaCBhcyBhCnBvc3NpYmx5LWlu Y29ycmVjdCBzZWxlY3Rpdml0eSBlc3RpbWF0ZS4gV2hpbGUgaXQgd291bGQgYmUgdXNlZnVsIHRv CnVzZXJzIHRvIGJlIGFibGUgdG8gcHJvdmlkZSBwbGFuIGFkdmljZSB0aGF0IGFmZmVjdHMgc2Vs ZWN0aXZpdHkKZXN0aW1hdGVzIG9yIG90aGVyIGFzcGVjdHMgb2YgY29zdGluZywgdGhhdCBpcyBv dXQgb2Ygc2NvcGUgZm9yIHRoaXMKY29tbWl0LgoKRm9yIG1vcmUgZGV0YWlscywgc2VlIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FLgoKTk9URTogVGhpcyBjb2RlIGlzIGp1c3QgYSBwcm9v ZiBvZiBjb25jZXB0LiBBIGJ1bmNoIG9mIHRoaW5ncyBkb24ndAp3b3JrIGFuZCBhIGxvdCBvZiB0 aGUgY29kZSBuZWVkcyBjbGVhbnVwLiBJdCBoYXMgbm8gU0dNTCBkb2N1bWVudGF0aW9uCmFuZCBu b3QgZW5vdWdoIHRlc3QgY2FzZXMsIGFuZCBzb21lIG9mIHRoZSBleGlzdGluZyB0ZXN0IGNhc2Vz IGRvbid0CmRvIGFzIHdlIHdvdWxkIGhvcGUuIEtub3duIHByb2JsZW1zIGFyZSBjYWxsZWQgb3V0 IGJ5IFhYWC4KLS0tCiBjb250cmliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAxICsKIGNvbnRyaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS8uZ2l0aWdub3JlICAgICAgICAgICAg IHwgICAgMyArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlICAgICAgICAgICAgICAg fCAgIDQ1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FICAgICAgICAgICAgICAgICB8 ICAyNzUgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQgICAg fCAgMzE5ICsrKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0ICAg IHwgIDI5MiArKysKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91 dCB8ICAyOTcgKysrCiAuLi4vcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5v dXQgfCAgMjQzICsrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91dCAg ICAgIHwgIDQ3NyArKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZCAgICAg ICAgICAgIHwgICA2MyArCiAuLi4vcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5z cWwgICAgfCAgIDU3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYyAg ICAgICB8ICA0NTQgKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2Uu Y29udHJvbCB8ICAgIDUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5o ICAgICAgIHwgICAzNyArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMgICAgICAg ICAgICAgfCAgNjQ3ICsrKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaCAg ICAgICAgICAgICB8ICAyMDQgKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0 b3IuYyAgICAgICB8ICA2MjYgKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29s bGVjdG9yLmggICAgICAgfCAgIDE4ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVu dGlmaWVyLmMgICAgICB8ICA0NzYgKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9p ZGVudGlmaWVyLmggICAgICB8ICAgNTIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pv aW4uYyAgICAgICAgICAgIHwgIDYxNSArKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9qb2luLmggICAgICAgICAgICB8ICAxMDUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X291dHB1dC5jICAgICAgICAgIHwgIDYyNCArKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9vdXRwdXQuaCAgICAgICAgICB8ICAgMjIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3BhcnNlci55ICAgICAgICAgIHwgIDMzNyArKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfcGxhbm5lci5jICAgICAgICAgfCAxNzA2ICsrKysrKysrKysrKysrKysrCiBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oICAgICAgICAgfCAgIDE3ICsKIGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMgICAgICAgICAgICB8ICAyNzggKysrCiBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oICAgICAgICAgICAgfCAgIDg2ICsKIGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwgICAgICAgICB8ICAyOTkgKysrCiBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYyAgICAgICAgICAgfCAgNDg3ICsrKysrCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaCAgICAgICAgICAgfCAgMTEzICsrCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMgICAgICAgICAgfCAgODc4ICsrKysrKysr KwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oICAgICAgICAgIHwgIDEyMSAr KwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbCAgICAgICAgIHwgICA3NSAr CiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVyLnNxbCAgICAgfCAgIDk2ICsK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsICB8ICAgNzYgKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwgIHwgICA3OCArCiBj b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbCAgICAgICAgICAgfCAgMTMyICsrCiBz cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDM3ICsKIDQx IGZpbGVzIGNoYW5nZWQsIDEwNzc0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19wbGFuX2FkdmljZS9SRUFETUUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Bn X3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lz ZS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVk L3NjYW4ub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNv bi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxh bl9hZHZpY2UtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BnX3BsYW5fYWR2aWNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaAogY3JlYXRlIG1vZGUgMTAw NjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55CiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsCiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwKIGNyZWF0ZSBt b2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9NYWtlZmlsZSBiL2NvbnRyaWIvTWFrZWZpbGUKaW5kZXggMmYw YTg4ZDNmNzcuLmRkMDRjMjBhY2QyIDEwMDY0NAotLS0gYS9jb250cmliL01ha2VmaWxlCisrKyBi L2NvbnRyaWIvTWFrZWZpbGUKQEAgLTM0LDYgKzM0LDcgQEAgU1VCRElSUyA9IFwKIAkJcGdfZnJl ZXNwYWNlbWFwIFwKIAkJcGdfbG9naWNhbGluc3BlY3QgXAogCQlwZ19vdmVyZXhwbGFpbiBcCisJ CXBnX3BsYW5fYWR2aWNlIFwKIAkJcGdfcHJld2FybQlcCiAJCXBnX3N0YXRfc3RhdGVtZW50cyBc CiAJCXBnX3N1cmdlcnkJXApkaWZmIC0tZ2l0IGEvY29udHJpYi9tZXNvbi5idWlsZCBiL2NvbnRy aWIvbWVzb24uYnVpbGQKaW5kZXggZWQzMGVlN2Q2MzkuLmNiNzE4ZGJkYWMwIDEwMDY0NAotLS0g YS9jb250cmliL21lc29uLmJ1aWxkCisrKyBiL2NvbnRyaWIvbWVzb24uYnVpbGQKQEAgLTQ4LDYg KzQ4LDcgQEAgc3ViZGlyKCdwZ2NyeXB0bycpCiBzdWJkaXIoJ3BnX2ZyZWVzcGFjZW1hcCcpCiBz dWJkaXIoJ3BnX2xvZ2ljYWxpbnNwZWN0JykKIHN1YmRpcigncGdfb3ZlcmV4cGxhaW4nKQorc3Vi ZGlyKCdwZ19wbGFuX2FkdmljZScpCiBzdWJkaXIoJ3BnX3ByZXdhcm0nKQogc3ViZGlyKCdwZ3Jv d2xvY2tzJykKIHN1YmRpcigncGdfc3RhdF9zdGF0ZW1lbnRzJykKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdp dGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTlhMTQyNTMw MTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUK QEAgLTAsMCArMSwzIEBACisvcGdwYV9wYXJzZXIuaAorL3BncGFfcGFyc2VyLmMKKy9wZ3BhX3Nj YW5uZXIuYwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZSBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjI3ZDM0NTFkNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9NYWtlZmlsZQpAQCAtMCwwICsxLDQ1IEBACisjIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvTWFrZWZpbGUKKworTU9EVUxFX2JpZyA9IHBnX3BsYW5fYWR2aWNlCitPQkpTID0gXAor CSQoV0lOMzJSRVMpIFwKKwlwZ19wbGFuX2FkdmljZS5vIFwKKwlwZ3BhX2FzdC5vIFwKKwlwZ3Bh X2NvbGxlY3Rvci5vIFwKKwlwZ3BhX2lkZW50aWZpZXIubyBcCisJcGdwYV9qb2luLm8gXAorCXBn cGFfb3V0cHV0Lm8gXAorCXBncGFfcGFyc2VyLm8gXAorCXBncGFfcGxhbm5lci5vIFwKKwlwZ3Bh X3NjYW4ubyBcCisJcGdwYV9zY2FubmVyLm8gXAorCXBncGFfdHJvdmUubyBcCisJcGdwYV93YWxr ZXIubworCitFWFRFTlNJT04gPSBwZ19wbGFuX2FkdmljZQorREFUQSA9IHBnX3BsYW5fYWR2aWNl LS0xLjAuc3FsCitQR0ZJTEVERVNDID0gInBnX3BsYW5fYWR2aWNlIC0gaGVscCB0aGUgcGxhbm5l ciBnZXQgdGhlIHJpZ2h0IHBsYW4iCisKK1JFR1JFU1MgPSBnYXRoZXIgam9pbl9vcmRlciBqb2lu X3N0cmF0ZWd5IHBhcnRpdGlvbndpc2Ugc2NhbgorCitFWFRSQV9DTEVBTiA9IHBncGFfcGFyc2Vy LmggcGdwYV9wYXJzZXIuYyBwZ3BhX3NjYW5uZXIuYworCitpZmRlZiBVU0VfUEdYUworUEdfQ09O RklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2lu Y2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gY29udHJpYi9wZ19wbGFuX2FkdmljZQordG9w X2J1aWxkZGlyID0gLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5n bG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitl bmRpZgorCisjIFNlZSBub3RlcyBpbiBzcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUgYWJvdXQg dGhlIGZvbGxvd2luZyB0d28gcnVsZXMKK3BncGFfcGFyc2VyLmg6IHBncGFfcGFyc2VyLmMKKwl0 b3VjaCAkQAorCitwZ3BhX3BhcnNlci5jOiBCSVNPTkZMQUdTICs9IC1kCisKKyMgRm9yY2UgdGhl c2UgZGVwZW5kZW5jaWVzIHRvIGJlIGtub3duIGV2ZW4gd2l0aG91dCBkZXBlbmRlbmN5IGluZm8g YnVpbHQ6CitwZ3BhX3BhcnNlci5vIHBncGFfc2Nhbm5lci5vOiBwZ3BhX3BhcnNlci5oCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRSBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNjcz MmRkZWU3YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1F CkBAIC0wLDAgKzEsMjc1IEBACitjb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQorCitQbGFu IEFkdmljZQorPT09PT09PT09PT0KKworVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIG1pbmktbGFu Z3VhZ2UgZm9yICJwbGFuIGFkdmljZSIgdGhhdCBhbGxvd3MgZm9yCitjb250cm9sIG9mIGNlcnRh aW4ga2V5IHBsYW5uZXIgZGVjaXNpb25zLiBHb2FscyBpbmNsdWRlICgxKSBlbmZvcmNpbmcgcGxh bgorc3RhYmlsaXR5IChteSBwcmV2aW91cyBwbGFuIHdhcyBnb29kIGFuZCBJIHdvdWxkIGxpa2Ug dG8ga2VlcCBnZXR0aW5nIGEKK3NpbWlsYXIgb25lKSBhbmQgKDIpIGFsbG93aW5nIHVzZXJzIHRv IGV4cGVyaW1lbnQgd2l0aCBwbGFucyBvdGhlciB0aGFuCit0aGUgb25lIHByZWZlcnJlZCBieSB0 aGUgb3B0aW1pemVyLiBOb24tZ29hbHMgaW5jbHVkZSAoMSkgY29udHJvbGxpbmcKK2V2ZXJ5IHBv c3NpYmxlIHBsYW5uZXIgZGVjaXNpb24gYW5kICgyKSBmb3JjaW5nIGNvbnNpZGVyYXRpb24gb2Yg cGxhbnMKK3RoYXQgdGhlIG9wdGltaXplciByZWplY3RzIGZvciByZWFzb25zIG90aGVyIHRoYW4g Y29zdC4gKFRoZXJlIGlzIHNvbWUKK3Jvb20gZm9yIGJpa2VzaGVkZGluZyBhYm91dCB3aGF0IGV4 YWN0bHkgdGhpcyBub24tZ29hbCBtZWFuczogd2hhdCBpZgord2Ugc2tpcCBwYXRoIGdlbmVyYXRp b24gZW50aXJlbHkgZm9yIGEgY2VydGFpbiBjYXNlIG9uIHRoZSB0aGVvcnkgdGhhdAord2Uga25v dyBpdCBjYW5ub3Qgd2luIG9uIGNvc3Q/IERvZXMgdGhhdCBjb3VudCBhcyBhIGNvc3QtYmFzZWQg cmVqZWN0aW9uCitldmVuIHRob3VnaCBubyBjb3N0IHdhcyBldmVyIGNvbXB1dGVkPykKKworR2Vu ZXJhbGx5LCBwbGFuIGFkdmljZSBpcyBhIHNlcmllcyBvZiB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBh ZHZpY2UgaXRlbXMsCitlYWNoIG9mIHdoaWNoIGFwcGxpZXMgYW4gYWR2aWNlIHRhZyB0byBhIGxp c3Qgb2YgYWR2aWNlIHRhcmdldHMuIEZvcgorZXhhbXBsZSwgIlNFUV9TQ0FOKGZvbykgSEFTSF9K T0lOKGJhckBzcykiIGNvbnRhaW5zIHR3byBpdGVtcyBvZiBhZHZpY2UsCit0aGUgZmlyc3Qgb2Yg d2hpY2ggYXBwbGllcyB0aGUgU0VRX1NDQU4gdGFnIHRvICJmb28iIGFuZCB0aGUgc2Vjb25kIG9m Cit3aGljaCBhcHBsaWVzIHRoZSBIQVNIX0pPSU4gdGFnIHRvICJiYXJAc3MiLiBJbiB0aGlzIHNp bXBsZSBleGFtcGxlLCBlYWNoCit0YXJnZXQgaWRlbnRpZmllcyBhIHNpbmdsZSByZWxhdGlvbjsg c2VlICJSZWxhdGlvbiBJZGVudGlmaWVycyIsIGJlbG93LgorQWR2aWNlIHRhZ3MgY2FuIGFsc28g YmUgYXBwbGllZCB0byBncm91cHMgb2YgcmVsYXRpb25zOyBmb3IgZXhhbXBsZSwKKyJIQVNIX0pP SU4oYmF6IChibGV0Y2ggcXV1eCkpIiBhcHBsaWVzIHRoZSBIQVNIX0pPSU4gdGFnIHRvIHRoZSBz aW5nbGUKK3JlbGF0aW9uIGlkZW50aWZpZXIgImJheiIgYXMgd2VsbCBhcyB0byB0aGUgMi1pdGVt IGxpc3QgY29udGFpbmluZworImJsZXRjaCIgYW5kICJxdXV4Ii4KKworQ3JpdGljYWxseSwgdGhp cyBtb2R1bGUga25vd3MgYm90aCBob3cgdG8gZ2VuZXJhdGUgcGxhbiBhZHZpY2UgZnJvbSBhbgor YWxyZWFkeS1leGlzdGluZyBwbGFuLCBhbmQgYWxzbyBob3cgdG8gZW5mb3JjZSBpdCBkdXJpbmcg ZnV0dXJlIHBsYW5uaW5nCitjeWNsZXMuIEV2ZXJ5dGhpbmcgaXQgZG9lcyBpcyBpbnRlbmRlZCB0 byBiZSAicm91bmQtdHJpcCBzYWZlIjogaWYgeW91CitnZW5lcmF0ZSBhZHZpY2UgZnJvbSBhIHBs YW4gYW5kIHRoZW4gZmVlZCB0aGF0IGJhY2sgaW50byBhIGZ1dHVyZSBwbGFuaW5nCitjeWNsZSwg ZWFjaCBwaWVjZSBvZiBhZHZpY2Ugc2hvdWxkIGJlIGd1YXJhbnRlZWQgdG8gYXBwbHkgdG8gdGhl IGV4YWN0bHkgdGhlCitzYW1lIHBhcnQgb2YgdGhlIHF1ZXJ5IGZyb20gd2hpY2ggaXQgd2FzIGdl bmVyYXRlZCB3aXRob3V0IGFtYmlndWl0eSBvcgorZ3Vlc3N3b3JrLCBhbmQgaXQgc2hvdWxkIHN1 Y2Nlc2Z1bGx5IGVuZm9yY2UgdGhlIHNhbWUgcGxhbm5pbmcgZGVjaXNpb24gdGhhdAorbGVkIHRv IGl0IGJlaW5nIGdlbmVyYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIE5vdGUgdGhhdCB0aGVyZSBp cyBubworaW50ZW50aW9uIHRoYXQgdGhlc2UgZ3VhcmFudGVlcyBob2xkIGluIHRoZSBwcmVzZW5j ZSBvZiBpbnRlcnZlbmluZyBEREw7CitlLmcuIGlmIHlvdSBjaGFuZ2UgdGhlIHByb3BlcnRpZXMg b2YgYSBmdW5jdGlvbiBzbyB0aGF0IGEgc3VicXVlcnkgaXMgbm8KK2xvbmdlciBpbmxpbmVkLCBv ciBpZiB5b3UgZHJvcCBhbiBpbmRleCBuYW1lZCBpbiB0aGUgcGxhbiBhZHZpY2UsIHRoZSBhZHZp Y2UKK2lzbid0IGdvaW5nIHRvIHdvcmsgYW55IG1vcmUuIFRoYXQncyBleHBlY3RlZC4KKworVGhp cyBtb2R1bGUgYWltcyB0byBmb3JjZSB0aGUgcGxhbm5lciB0byBmb2xsb3cgYW55IHByb3ZpZGVk IGFkdmljZSB3aXRob3V0CityZWdhcmQgdG8gd2hldGhlciBpdCBpcyBhcHBlYXJzIHRvIGJlIGdv b2QgYWR2aWNlIG9yIGJhZCBhZHZpY2UuICBJZiB0aGUKK3VzZXIgcHJvdmlkZXMgYmFkIGFkdmlj ZSwgd2hldGhlciBkZXJpdmVkIGZyb20gYSBwcmV2aW91c2x5LWdlbmVyYXRlZCBwbGFuCitvciBt YW51YWxseSB3cml0dGVuLCB0aGV5IG1heSBnZXQgYSBiYWQgcGxhbi4gV2UgcmVnYXJkIHRoaXMg YXMgdXNlciBlcnJvciwKK25vdCBhIGRlZmVjdCBpbiB0aGlzIG1vZHVsZS4gSXQgc2VlbXMgbGlr ZWx5IHRoYXQgYXBwbHlpbmcgYWR2aWNlCitqdWRpY2lvdXNseSBhbmQgb25seSB3aGVuIHRydWx5 IHJlcXVpcmVkIHRvIGF2b2lkIHByb2JsZW1zIHdpbGwgYmUgYSBtb3JlCitzdWNjZXNzZnVsIHN0 cmF0ZWd5IHRoYW4gYXBwbHlpbmcgaXQgd2l0aCBhIGJyb2FkIGJydXNoLCBidXQgdXNlcnMgYXJl IGZyZWUKK3RvIGV4cGVyaW1lbnQgd2l0aCB3aGF0ZXZlciBzdHJhdGVnaWVzIHRoZXkgdGhpbmsg YmVzdC4KKworUmVsYXRpb24gSWRlbnRpZmllcnMKKz09PT09PT09PT09PT09PT09PT09CisKK1Vu aXF1ZWx5IGlkZW50aWZ5aW5nIHRoZSBwYXJ0IG9mIGEgcXVlcnkgdG8gd2hpY2ggYSBjZXJ0YWlu IHBpZWNlIG9mCithZHZpY2UgYXBwbGllcyBpcyBoYXJkZXIgdGhhbiBpdCBzb3VuZHMuIE91ciBi YXNpYyBhcHByb2FjaCBpcyB0byB1c2UKK3JlbGF0aW9uIGFsaWFzZXMgYXMgYSBzdGFydGluZyBw b2ludCwgYW5kIHRoZW4gZGlzYW1iaWd1YXRlLiBUaGVyZSBhcmUKK3RocmVlIHdheXMgdGhhdCBz YW1lIHJlbGF0aW9uIGFsaWFzIGNhbiBvY2N1ciBtdWx0aXBsZSB0aW1lczoKKworMS4gSXQgY2Fu IGFwcGVhciBpbiBtb3JlIHRoYW4gb25lIHN1YnF1ZXJ5LgorCisyLiBJdCBjYW4gYXBwZWFyIG1v cmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIHN1YnF1ZXJ5LAorICAgZS5nLiAoZm9vIEpPSU4gYmFy KSB4IEpPSU4gZm9vLgorCiszLiBUaGUgdGFibGUgY2FuIGJlIHBhcnRpdGlvbmVkLgorCitBbnkg Y29tYmluYXRpb24gb2YgdGhlc2UgdGhpbmdzIGNhbiBvY2N1ciBzaW11bHRhbmVvdXNseS4gIFRo ZXJlZm9yZSwgb3VyCitnZW5lcmFsIHN5bnRheCBmb3IgYSByZWxhdGlvbiBpZGVudGlmaWVyIGlz OgorCithbGlhc19uYW1lI29jY3VycmVuY2VfbnVtYmVyL3BhcnRpdGlvbl9zY2hlbWEucGFydGl0 aW9uX25hbWVAcGxhbl9uYW1lCisKK0FsbCBjb21wb25lbnRzIGV4Y2VwdCBmb3IgdGhlIGFsaWFz X25hbWUgYXJlIG9wdGlvbmFsIGFuZCBpbmNsdWRlZCBvbmx5Cit3aGVuIHJlcXVpcmVkLiBXaGVu IGEgY29tcG9uZW50IGlzIG9taXR0ZWQsIHRoZSBhc3NvY2lhdGVkIHB1bmN0dWF0aW9uCittdXN0 IGFsc28gYmUgb21pdHRlZC4gT2NjdXJyZW5jZSBudW1iZXJzIGFyZSBjb3VudGVkIGlnbm9yaW5n IGNoaWxkcmVuIG9mCitwYXJ0aXRpb25lZCB0YWJsZXMuICBXaGVuIHRoZSBnZW5lcmF0ZWQgb2Nj dXJyZW5jZSBudW1iZXIgaXMgMSwgd2Ugb21pdAordGhlIG9jY3VycmVuY2UgbnVtYmVyLiBUaGUg cGFydGl0aW9uIHNjaGVtYSBhbmQgcGFydGl0aW9uIG5hbWUgYXJlIGluY2x1ZGVkCitvbmx5IGZv ciBjaGlsZHJlbiBvZiBwYXJ0aXRpb25lZCB0YWJsZXMuIEluIGdlbmVyYXRlZCBhZHZpY2UsIHRo ZQorcGFydGl0aW9uX3NjaGVtYSBpcyBhbHdheXMgaW5jbHVkZWQgd2hlbmV2ZXIgdGhlcmUgaXMg YSBwYXJ0aXRpb25fbmFtZSwKK2J1dCB1c2VyLXdyaXR0ZW4gYWR2aWNlIG1heSBtZW50aW9uIHRo ZSBuYW1lIGFuZCBvbWl0IHRoZSBzY2hlbWEuIFRoZQorcGxhbl9uYW1lIGlzIG9taXR0ZWQgZm9y IHRoZSB0b3AtbGV2ZWwgUGxhbm5lckluZm8uCisKK1NjYW4gQWR2aWNlCis9PT09PT09PT09PQor CitGb3IgbWFueSB0eXBlcyBvZiBzY2FuLCBubyBhZHZpY2UgaXMgZ2VuZXJhdGVkIG9yIHBvc3Np YmxlOyBmb3IgaW5zdGFuY2UsCithIHN1YnF1ZXJ5IGlzIGFsd2F5cyBzY2FubmVkIHVzaW5nIGEg c3VicXVlcnkgc2Nhbi4gV2hpbGUgdGhhdCBzY2FuIG1heSBiZQorZWxpZGVkIHZpYSBzZXRyZWZz IHByb2Nlc3NpbmcsIHRoaXMgZG9lc24ndCBjaGFuZ2UgdGhlIGZhY3QgdGhhdCBvbmx5IG9uZQor YmFzaWMgYXBwcm9hY2ggZXhpc3RzLiBIZW5jZSwgc2NhbiBhZHZpY2UgYXBwbGllcyBtb3N0bHkg dG8gcmVsYXRpb25zLCB3aGljaAorY2FuIGJlIHNjYW5uZWQgaW4gbXVsdGlwbGUgd2F5cy4KKwor V2UgdGVuZCB0byB0aGluayBvZiBhIHNjYW4gYXMgdGFyZ2V0aW5nIGEgc2luZ2xlIHJlbGF0aW9u LCBhbmQgdGhhdCdzCitub3JtYWxseSB0aGUgY2FzZSwgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0byBi ZS4gRm9yIGluc3RhbmNlLCBpZiBhIGpvaW4gaXMKK3Byb3ZlbiBlbXB0eSwgdGhlIHdob2xlIHRo aW5nIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIFJlc3VsdCBub2RlCit3aGljaCwgaW4g ZWZmZWN0LCBpcyBhIGRlZ2VuZXJhdGUgc2NhbiBvZiBldmVyeSByZWxhdGlvbiBpbiB0aGUgY29s bGFwc2VkCitwb3J0aW9uIG9mIHRoZSBqb2luIHRyZWUuIFNpbWlsYXJseSwgaXQncyBwb3NzaWJs ZSB0byBpbmplY3QgYSBjdXN0b20gc2NhbgoraW4gc3VjaCBhIHdheSB0aGF0IGl0IHJlcGxhY2Vz IGFuIGVudGlyZSBqb2luLiBJZiB3ZSBldmVyIGVtaXQgYWR2aWNlCitmb3IgdGhlc2UgY2FzZXMs IGl0IHdvdWxkIHRhcmdldCBzZXRzIG9mIHJlbGF0aW9uIGlkZW50aWZpZXJzIHN1cnJvdW5kZWQK K2J5IGN1cmx5IGJyYW5jZXMsIGUuZy4gU09NRV9TT1JUX09GX1NDQU4oZm9vIChiYXIgYmF6KSkg d291bGQgbWVhbiB0aGF0IHRoZQordGhlIGdpdmVuIHNjYW4gdHlwZSB3b3VsZCBiZSB1c2VkIGZv ciBmb28gYXMgYSBzaW5nbGUgcmVsYXRpb24gYW5kIGFsc28gdGhlCitjb21iaW5hdGlvbiBvZiBi YXIgYW5kIGJheiBhcyBhIGpvaW4gcHJvZHVjdC4gV2UgaGF2ZSBubyBzdWNoIGNhc2VzIGF0Citw cmVzZW50LgorCitGb3IgaW5kZXggYW5kIGluZGV4LW9ubHkgc2NhbnMsIGJvdGggdGhlIHJlbGF0 aW9uIGJlaW5nIHNjYW5uZWQgYW5kIHRoZQoraW5kZXggb3IgaW5kZXhlcyBiZWluZyB1c2VkIG11 c3QgYmUgc3BlY2lmaWVkLiBGb3IgZXhhbXBsZSwgSU5ERVhfU0NBTihmb28KK2Zvb19hX2lkeCBi YXIgYmFyX2JfaWR4KSBpbmRpY2F0ZXMgdGhhdCBhbiBpbmRleCBzY2FuIChub3QgYW4gaW5kZXgt b25seQorc2Nhbikgc2hvdWxkIGJlIHVzZWQgb24gZm9vX2FfaWR4IHdoZW4gc2Nhbm5pbmcgZm9v LCBhbmQgdGhhdCBhbiBpbmRleCBzY2FuCitzaG91bGQgYmUgdXNlZCBvbiBiYXJfYl9pZHggd2hl biBzY2FubmluZyBiYXIuCisKK0JpdG1hcCBoZWFwIHNjYW5zIGFsbG93IGZvciBhIG1vcmUgY29t cGxpY2F0ZWQgaW5kZXggc3BlY2lmaWNhdGlvbi4gRm9yCitleGFtcGxlLCBCSVRNQVBfSEVBUF9T Q0FOKGZvbyAmJihmb29fYV9pZHggfHwoZm9vX2JfaWR4IGZvb19jX2lkeCkpKSBzYXlzCit0aGF0 IGZvbyBzaG91bGQgYmUgc2Nhbm5lZCB1c2luZyBhIEJpdG1hcEhlYXBTY2FuIG92ZXIgYSBCaXRt YXBBbmQgYmV0d2VlbgorZm9vX2FfaWR4IGFuZCB0aGUgcmVzdWx0IG9mIGEgQml0bWFwT3IgYmV0 d2VlbiBmb29fYl9pZHggYW5kIGZvb19jX2lkeC4KKworWFhYOiBDdXJyZW50bHksIEJJVE1BUF9I RUFQX1NDQU4gZG9lcyBub3QgZW5mb3JjZSB0aGUgaW5kZXggc3BlY2lmaWNhdGlvbiwKK2JlY2F1 c2UgdGhlIGF2YWlsYWJsZSBob29rcyBhcmUgaW5zdWZmaWNpZW50IHRvIGRvIHNvLiBJdCdzIHBv c3NpYmxlIHRoYXQKK3RoaXMgc2hvdWxkIGJlIGNoYW5nZWQgdG8gZXhjbHVkZSB0aGUgaW5kZXgg c3BlY2lmaWNhdGlvbiBhbHRvZ2V0aGVyIGFuZAorc2ltcGx5IGluc2lzdCB0aGF0IHNvbWUgc29y dCBvZiBiaXRtYXAgaGVhcCBzY2FuIGlzIHVzZWQ7IGFsdGVybmF0aXZlbHksCit3ZSBuZWVkIGJl dHRlciBob29rcy4KKworSm9pbiBPcmRlciBBZHZpY2UKKz09PT09PT09PT09PT09PT09CisKK1Ro ZSBKT0lOX09SREVSIHRhZyBzcGVjaWZpZXMgdGhlIG9yZGVyIGluIHdoaWNoIHNldmVyYWwgdGFi bGVzIHRoYXQgYXJlCitwYXJ0IG9mIHRoZSBzYW1lIGpvaW4gcHJvYmxlbSBzaG91bGQgYmUgam9p bmVkLiBFYWNoIHN1YnF1ZXJ5IChleGNlcHQgZm9yCit0aG9zZSB0aGF0IGFyZSBpbmxpbmVkKSBp cyBhIHNlcGFyYXRlIGpvaW4gcHJvYmxlbS4gV2l0aGluIGEgc3VicXVlcnksCitwYXJ0aXRpb253 aXNlIGpvaW5zIGNhbiBjcmVhdGUgYWRkaXRpb25hbCwgc2VwYXJhdGUgam9pbiBwcm9ibGVtcy4g SGVuY2UsCitxdWVyaWVzIGludm9sdmluZyBwYXJ0aXRpb253aXNlIGpvaW5zIG1heSB1c2UgSk9J Tl9BRFZJQ0UoKSBtYW55IHRpbWVzLgorCitXZSB0YWtlIHRoZSBjYW5vbmljYWwgam9pbiBzdHJ1 Y3R1cmUgdG8gYmUgYW4gb3V0ZXItZGVlcCB0cmVlLCBzbworSk9JTl9PUkRFUih0MSB0MiB0Mykg c2F5cyB0aGF0IHQxIGlzIHRoZSBkcml2aW5nIHRhYmxlIGFuZCBzaG91bGQgYmUgam9pbmVkCitm aXJzdCB0byB0MiBhbmQgdGhlbiB0byB0My4gSWYgdGhlIGpvaW4gcHJvYmxlbSBpbnZvbHZlcyBh ZGRpdGlvbmFsIHRhYmxlcywKK3RoZXkgY2FuIGJlIGpvaW5lZCBpbiBhbnkgb3JkZXIgYWZ0ZXIg dGhlIGpvaW4gYmV0d2VlbiB0MSwgdDIsIGFuZCB0MyBoYXMKK2JlZW4gY29uc3RydWN0dXJlZC4g R2VuZXJhdGVkIGpvaW4gYWR2aWNlIGFsd2F5cyBtZW50aW9ucyBhbGwgdGFibGVzCitpbiB0aGUg am9pbiBwcm9ibGVtLCBidXQgbWFudWFsbHkgd3JpdHRlbiBqb2luIGFkdmljZSBuZWVkIG5vdCBk byBzby4KKworRm9yIHRyZWVzIHdoaWNoIGFyZSBub3Qgb3V0ZXItZGVlcCwgcGFyZW50aGVzZXMg Y2FuIGJlIHVzZWQuIEZvciBleGFtcGxlLAorSk9JTl9PUkRFUih0MSAodDIgdDMpKSBzYXlzIHRo YXQgdGhlIHRvcC1sZXZlbCBqb2luIHNob3VsZCBoYXZlIHQxIG9uIHRoZQorb3V0ZXIgc2lkZSBh bmQgYSBqb2luIGJldHdlZW4gdDIgYW5kIHQzIG9uIHRoZSBpbm5lciBzaWRlLiBUaGF0IGpvaW4g c2hvdWxkCitiZSBjb25zdHJ1Y3RlZCBzbyB0aGF0IHQyIGlzIG9uIHRoZSBvdXRlciBzaWRlIGFu ZCB0MyBpcyBvbiB0aGUgaW5uZXIgc2lkZS4KKworSW4gc29tZSBjYXNlcywgaXQncyBub3QgcG9z c2libGUgdG8gZnVsbHkgc3BlY2lmeSB0aGUgam9pbiBvcmRlciBpbiB0aGlzIHdheS4KK0ZvciBl eGFtcGxlLCBpZiB0MiBhbmQgdDMgYXJlIGJlaW5nIHNjYW5uZWQgYnkgYSBzaW5nbGUgY3VzdG9t IHNjYW4gb3IgZm9yZWlnbgorc2Nhbiwgb3IgaWYgYSBwYXJ0aXRpb253aXNlIGpvaW4gaXMgYmVp bmcgcGVyZm9ybWVkIGJldHdlZW4gdGhvc2UgdGFibGVzLCB0aGVuCitpdCdzIGltcG9zc2libGUg dG8gc2F5IHRoYXQgdDIgaXMgdGhlIG91dGVyIHRhYmxlIGFuZCB0MyBpcyB0aGUgaW5uZXIgdGFi bGUsCitvciB0aGUgb3RoZXIgd2F5IGFyb3VuZDsgaXQncyBqdXN0IHVuZGVmaW5lZC4gSW4gc3Vj aCBjYXNlcywgd2UgZ2VuZXJhdGUKK2pvaW4gYWR2aWNlIHRoYXQgdXNlcyBjdXJseSBicmFjZXMs IGludGVuZGluZyB0byBpbmRpY2F0ZSBhIGxhY2sgb2Ygb3JkZXJpbmc6CitKT0lOX09SREVSKHQx IHt0MiB0M30pIHNheXMgdGhhdCB0aGUgdXBwZXJtb3N0IGpvaW4gc2hvdWxkIGhhdmUgdDEgb24g dGhlIG91dGVyCitzaWRlIGFuZCBzb21lIGtpbmQgb2Ygam9pbiBiZXR3ZWVuIHQyIGFuZCB0MyBv biB0aGUgaW5uZXIgc2lkZSwgYnV0IHdpdGhvdXQKK3NheWluZyBob3cgdGhhdCBqb2luIG11c3Qg YmUgcGVyZm9ybWVkIG9yIGFueXRoaW5nIGFib3V0IHdoaWNoIHJlbGF0aW9uIHNob3VsZAorYXBw ZWFyIG9uIHdoaWNoIHNpZGUgb2YgdGhlIGpvaW4sIG9yIGV2ZW4gd2hldGhlciB0aGlzIGtpbmQg b2Ygam9pbiBoYXMgc2lkZXMuCisKK0pvaW4gU3RyYXRlZ3kgQWR2aWNlCis9PT09PT09PT09PT09 PT09PT09PQorCitUYWdzIHN1Y2ggYXMgTkVTVEVEX0xPT1BfUExBSU4gc3BlY2lmeSB0aGUgbWV0 aG9kIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8KK3BlcmZvcm0gYSBjZXJ0YWluIGpvaW4uIE1vcmUg c3BlY2lmaWNhbGx5LCBORVNURURfTE9PUF9QTEFJTih4ICh5IHopKSBzYXlzCit0aGF0IHRoZSBw bGFuIHNob3VsZCBwdXQgdGhlIHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMgIngiIG9uIHRo ZSBpbm5lcgorc2lkZSBvZiBhIHBsYWluIG5lc3RlZCBsb29wIChvbmUgd2l0aG91dCBtYXRlcmlh bGl6YXRpb24gb3IgbWVtb2l6YXRpb24pCithbmQgdGhhdCBpdCBzaG91bGQgYWxzbyBwdXQgYSBq b2luIGJldHdlZW4gdGhlIHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMKKyJ5IiBhbmQgdGhl IHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMgInoiIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEg bmVzdGVkCitsb29wLiBIZW5jZSwgZm9yIGFuIE4tdGFibGUgam9pbiBwcm9ibGVtLCB0aGVyZSB3 aWxsIGJlIE4tMSBwaWVjZXMgb2Ygam9pbgorc3RyYXRlZ3kgYWR2aWNlOyBubyBqb2luIHN0cmF0 ZWd5IGFkdmljZSBpcyByZXF1aXJlZCBmb3IgdGhlIG91dGVybW9zdAordGFibGUgaW4gdGhlIGpv aW4gcHJvYmxlbS4KKworQ29uc2lkZXJpbmcgdGhhdCB3ZSBoYXZlIGJvdGggam9pbiBvcmRlciBh ZHZpY2UgYW5kIGpvaW4gc3RyYXRlZ3kgYWR2aWNlLAoraXQgbWlnaHQgc2VlbSBuYXR1cmFsIHRv IHNheSB0aGF0IE5FU1RFRF9MT09QX1BMQUlOKHgpIHNob3VsZCBiZSByZWRlZmluZWQKK3RvIG1l YW4gdGhhdCB4IHNob3VsZCBhcHBlYXIgYnkgaXRzZWxmIG9uIG9uZSBzaWRlIG9yIHRoZSBvdGhl ciBvZiBhIG5lc3RlZAorbG9vcCwgcmF0aGVyIHRoYW4gc3BlY2lmaWNhbGx5IG9uIHRoZSBpbm5l ciBzaWRlLCBidXQgdGhpcyBkZWZpbml0aW9uIGFwcGVhcnMKK3VzZWxlc3MgaW4gcHJhY3RpY2Uu IEl0IGdpdmVzIHRoZSBwZWxhbm5lciB0b28gbXVjaCBmcmVlZG9tIHRvIGRvIHRoaW5ncyB0aGF0 CitiZWFyIGxpdHRsZSByZXNlbWJsYW5jZSB0byB3aGF0IHRoZSB1c2VyIHByb2JhYmx5IGhhZCBp biBtaW5kLiBUaGlzIG1ha2VzCitvbmx5IGEgbGltaXRlZCBhbW91bnQgb2YgcHJhY3RpY2FsIGRp ZmZlcmVuY2UgaW4gdGhlIGNhc2Ugb2YgYSBtZXJnZSBqb2luIG9yCit1bnBhcmFtZXRlcml6ZWQg bmVzdGVkIGxvb3AsIGJ1dCBmb3IgYSBwYXJhbWV0ZXJpemVkIG5lc3RlZCBsb29wIG9yIGEgaGFz aAoram9pbiwgdGhlIHR3byBzaWRlcyBhcmUgdHJlYXRlZCB2ZXJ5IGRpZmZlcmVudGx5IGFuZCBz YXlpbmcgdGhhdCBhIGNlcnRhaW4KK3JlbGF0aW9uIHNob3VsZCBiZSBpbnZvbHZlZCBpbiBvbmUg b2YgdGhvc2Ugb3BlcmF0aW9ucyB3aXRob3V0IHNheWluZyB3aGljaAorcm9sZSBpdCBzaG91bGQg dGFrZSBpc24ndCBzYXlpbmcgbXVjaC4KKworVGhpcyBjaG9pY2Ugb2YgZGVmaW5pdGlvbiBpbXBs aWVzIHRoYXQgam9pbiBzdHJhdGVneSBhZHZpY2UgYWxzbyBpbXBvc2VzIHNvbWUKK2pvaW4gb3Jk ZXIgY29uc3RyYWludHMuIEZvciBleGFtcGxlLCBnaXZlbiBhIGpvaW4gYmV0d2VlbiBmb28gYW5k IGJhciwKK0hBU0hfSk9JTihiYXIpIGltcGxpZXMgdGhhdCBmb28gaXMgdGhlIGRyaXZpbmcgdGFi bGUuIE90aGVyd2lzZSwgaXQgd291bGQKK2JlIGltcG9zc2libGUgdG8gcHV0IGJhciBiZW5lYXRo IHRoZSBpbm5lciBzaWRlIG9mIGEgSGFzaCBKb2luLgorCitOb3RlIHRoYXQsIGdpdmVuIHRoaXMg ZGVmaW5pdGlvbiwgaXQncyByZWFzb25hYmxlIHRvIGNvbnNpZGVyIGRlbGV0aW5nIHRoZQoram9p biBvcmRlciBhZHZpY2UgYnV0IGFwcGx5aW5nIHRoZSBqb2luIHN0cmF0ZWd5IGFkdmljZS4gRm9y IGV4YW1wbGUsCitjb25zaWRlciBhIHN0YXIgc2NoZW1hIHdpdGggdGFibGVzIGZhY3QsIGRpbTEs IGRpbTIsIGRpbTMsIGRpbTQsIGFuZCBkaW01LgorVGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk IGFkdmljZSBtaWdodCBzcGVjaWZ5IEpPSU5fT1JERVIoZmFjdCBkaW0xIGRpbTMKK2RpbTQgZGlt MiBkaW01KSBIQVNIX0pPSU4oZGltMiBkaW00KSBORVNURURfTE9PUF9QTEFJTihkaW0xIGRpbTMg ZGltNSkuCitEZWxldGluZyB0aGUgSk9JTl9PUkRFUiBhZHZpY2UgYWxsb3dzIHRoZSBwbGFubmVy IHRvIHJlb3JkZXIgdGhlIGpvaW5zCitob3dldmVyIGl0IGxpa2VzIHdoaWxlIHN0aWxsIGZvcmNp bmcgdGhlIHNhbWUgY2hvaWNlIG9mIGpvaW4gbWV0aG9kLiBUaGlzCitzZWVtcyBwb3RlbnRpYWxs eSB1c2VmdWwsIGFuZCBpcyBvbmUgcmVhc29uIHdoeSBhIHVuaWZpZWQgc3ludGF4IHRoYXQgY29u dHJvbHMKK2JvdGggam9pbiBvcmRlciBhbmQgam9pbiBtZXRob2QgaW4gYSBzaW5nbGUgbG9jdXRp b24gd2FzIG5vdCBjaG9zZW4uCisKK0FkdmljZSBDb21wbGV0ZW5lc3MKKz09PT09PT09PT09PT09 PT09PT0KKworQW4gZXNzZW50aWFsIGd1aWRpbmcgcHJpbmNpcGxlIGlzIHRoYXQgbm8gaW5mZXJl bmNlIG1heSBtYWRlIG9uIHRoZSBiYXNpcworb2YgdGhlIGFic2VuY2Ugb2YgYWR2aWNlLiBUaGUg dXNlciBpcyBlbnRpdGxlZCB0byByZW1vdmUgYW55IHBvcnRpb24gb2YgdGhlCitnZW5lcmF0ZWQg YWR2aWNlIHdoaWNoIHRoZXkgZGVlbSB1bnN1aXRhYmxlIG9yIGNvdW50ZXJwcm9kdWN0aXZlIGFu ZCB0aGUKK3Jlc3VsdCBzaG91bGQgb25seSBiZSB0byBpbmNyZWFzZSB0aGUgZmxleGliaWxpdHkg YWZmb3JkZWQgdG8gdGhlIHBsYW5uZXIuCitUaGlzIG1lYW5zIHRoYXQgaWYgYWR2aWNlIGNhbiBz YXkgdGhhdCBhIGNlcnRhaW4gb3B0aW1pemF0aW9uIG9yIHRlY2huaXF1ZQorc2hvdWxkIGJlIHVz ZWQsIGl0IHNob3VsZCBhbHNvIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIG9wdGltaXphdGlvbiBv cgordGVjaG5pcXVlIHNob3VsZCBub3QgYmUgdXNlZC4gV2Ugc2hvdWxkIG5ldmVyIGFzc3VtZSB0 aGF0IHRoZSBhYnNlbmNlIG9mIGFuCitpbnN0cnVjdGlvbiB0byBkbyBhIGNlcnRhaW4gdGhpbmcg bWVhbnMgdGhhdCBpdCBzaG91bGQgbm90IGJlIGRvbmU7IGFsbAoraW5zdHJ1Y3Rpb25zIG11c3Qg YmUgZXhwbGljaXQuCisKK1NlbWlqb2luIFVuaXF1ZW5lc3MKKz09PT09PT09PT09PT09PT09PT0K KworRmFjZWQgd2l0aCBhIHNlbWlqb2luLCB0aGUgcGxhbm5lciBjb25zaWRlcnMgYm90aCBhIGRp cmVjdCBpbXBsZW1lbnRhdGlvbgorYW5kIGEgcGxhbiB3aGVyZSB0aGUgb25lIHNpZGUgaXMgbWFk ZSB1bmlxdWUgYW5kIHRoZW4gYW4gaW5uZXIgam9pbiBpcworcGVyZm9ybWVkLiBXZSBlbWl0IFNF TUlKT0lOX1VOSVFVRSgpIGFkdmljZSB3aGVuIHRoaXMgdHJhbnNmb3JtYXRpb24gb2NjdXJzCith bmQgU0VNSUpPSU5fTk9OX1VOSVFVRSgpIGFkdmljZSB3aGVuIGl0IGRvZXNuJ3QuIFRoZXNlIGl0 ZW1zIHdvcmsgbGlrZQoram9pbiBzdHJhdGVneSBhZHZpY2U6IHRoZSBpbm5lciBzaWRlIG9mIHRo ZSByZWxldmFudCBqb2luIGlzIG5hbWVkLCBhbmQgdGhlCitjaG9zZW4gam9pbiBvcmRlciBtdXN0 IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgYWR2aWNlIGhhdmluZyBzb21lIGVmZmVjdC4KKworWFhY OiBDdXJyZW50bHksIFNFTUlKT0lOX05PTl9VTklRVUUoKSBhZHZpY2UgaXMgZW1pdHRlZCBpbiBz b21lIHNpdHVhdGlvbnMKK3doZXJlIHRoZSBTRU1JSk9JTl9VTklRVUUoKSBhcHByb2FjaCB3YXMg ZGV0ZXJtaW5lZCB0byBiZSBub24tdmlhYmxlOyBpZGVhbGx5LAord2Ugc2hvdWxkIGF2b2lkIHRo YXQuCisKK1hYWDogUmlnaHQgc2VtaWpvaW5zIGhhdmVuJ3QgYmVlbiBwcm9wZXJseSB0aG91Z2h0 IHRocm91Z2guIFRoZSBhc3NvY2lhdGVkCitjb2RlIHByb2JhYmx5IGp1c3QgZG9lc24ndCB3b3Jr LgorCitYWFg6IFNlbWlqb2luIHVuaXF1ZW5lc3MgYWR2aWNlIGhhcyBubyBhdXRvbWF0ZWQgdGVz dHMgYW5kIG5lZWQgc3Vic3RhbnRpYWxseQorbW9yZSBtYW51YWwgdGVzdGluZy4KKworUGFydGl0 aW9ud2lzZQorPT09PT09PT09PT09PQorCitQQVJUSVRJT05XSVNFKCkgYWR2aXNlIGNhbiBiZSB1 c2VkIHRvIHNwZWNpZnkgYm90aCB0aG9zZSBwYXJ0aXRpb253aXNlIGpvaW5zCit3aGljaCBzaG91 bGQgYmUgcGVyZm9ybWVkIGFuZCB0aG9zZSB3aGljaCBzaG91bGQgbm90IGJlIHBlcmZvcm1lZDsg dGhlIGlkZWEKK2lzIHRoYXQgZWFjaCBhcmd1bWVudCB0byBQQVJUSVRJT05XSVNFIHNwZWNpZmll cyBhIHNldCBvZiByZWxhdGlvbnMgdGhhdAorc2hvdWxkIGJlIHNjYW5uZWQgcGFydGl0aW9ud2lz ZSBhZnRlciBiZWluZyBqb2luZWQgdG8gZWFjaCBvdGhlciBhbmQgbm90aGluZworZWxzZS4gSGVu Y2UsIGZvciBleGFtcGxlLCBQQVJUSVRJT05XSVNFKCh0MSB0MikgdDMpIHNwZWNpZmllcyB0aGF0 IHRoZQorcXVlcnkgc2hvdWxkIGNvbnRhaW4gYSBwYXJ0aXRpb253aXNlIGpvaW4gYmV0d2VlbiB0 MSBhbmQgdDIgYW5kIHRoYXQgdDMKK3Nob3VsZCBub3QgYmUgcGFydCBvZiBhbnkgcGFydGl0aW9u d2lzZSBqb2luLiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgcmVscworaW4gdGhlIHF1ZXJ5LCBzcGVj aWZ5aW5nIGp1c3QgUEFSVElUSU9OV0lTRSgodDEgdDIpKSB3b3VsZCBoYXZlIHRoZSBzYW1lCitl ZmZlY3QsIHNpbmNlIHRoZXJlIHdvdWxkIGJlIG5vIG90aGVyIHJlbHMgdG8gd2hpY2ggdDMgY291 bGQgYmUgam9pbmVkIGluCithIHBhcnRpdGlvbndpc2UgZmFzaGlvbi4KKworUGFyYWxsZWwgUXVl cnkgKEdhdGhlciwgZXRjLikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0VhY2gg YXJndW1lbnQgdG8gR0FUSEVSKCkgb3IgR0FUSEVSX01FUkdFKCkgaXMgYSBzaW5nbGUgcmVsYXRp b24gb3IgYW4KK2V4YWN0IHNldCBvZiByZWxhdGlvbnMgb24gdG9wIG9mIHdoaWNoIGEgR2F0aGVy IG9yIEdhdGhlciBNZXJnZSBub2RlLAorcmVzcGVjdGl2ZWx5LCBzaG91bGQgYmUgcGxhY2VkLiBF YWNoIGFyZ3VtZW50IHRvIE5PX0dBVEhFUigpIGlzIGEgc2luZ2xlCityZWxhdGlvbiB0aGF0IHNo b3VsZCBub3QgYXBwZWFyIGJlbmVhdGggYW55IEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZTsK K3RoYXQgaXMsIHBhcmFsbGVsaXNtIHNob3VsZCBub3QgYmUgdXNlZC4KKworSW1wbGljaXQgSm9p biBPcmRlciBDb25zdHJhaW50cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitX aGVuIEpPSU5fT1JERVIoKSBhZHZpY2UgaXMgbm90IHByb3ZpZGVkIGZvciBhIHBhcnRpY3VsYXIg am9pbiBwcm9ibGVtLAorb3RoZXIgcGllY2VzIG9mIGFkdmljZSBtYXkgc3RpbGwgaW5jaWRlbnRh bGx5IGNvbnN0cmFpbnQgdGhlIGpvaW4gb3JkZXIuCitGb3IgZXhhbXBsZSwgYSB1c2VyIHdobyBz cGVjaWZpZXMgSEFTSF9KT0lOKChmb28gYmFyKSkgaXMgZXhwbGljaXRseSBzYXlpbmcKK3RoYXQg dGhlcmUgc2hvdWxkIGJlIGEgaGFzaCBqb2luIHdpdGggZXhhY3RseSBmb28gYW5kIGJhciBvbiB0 aGUgb3V0ZXIKK3NpZGUgb2YgaXQsIGJ1dCB0aGF0IGFsc28gaW1wbGllcyB0aGF0IGZvbyBhbmQg YmFyIG11c3QgYmUgam9pbmVkIHRvCitlYWNoIG90aGVyIGJlZm9yZSBlaXRoZXIgb2YgdGhlbSBp cyBqb2luZWQgdG8gYW55dGhpbmcgZWxzZS4gT3RoZXJ3aXNlLAordGhlIGpvaW4gdGhlIHVzZXIg aXMgYXR0ZW1wdGluZyB0byBjb25zdHJhaW50IHdvbid0IGFjdHVhbGx5IG9jY3VyIGluIHRoZQor cXVlcnksIHdoaWNoIGVuZHMgdXAgbG9va2luZyBsaWtlIHRoZSBzeXN0ZW0gaGFzIGp1c3QgZGVj aWRlZCB0byBpZ25vcmUKK3RoZSBhZHZpY2UgYWx0b2dldGhlci4KKworRnV0dXJlIFdvcmsKKz09 PT09PT09PT09CisKK1dlIGRvbid0IGhhbmRsZSBjaG9pY2Ugb2YgYWdncmVnYXRpb246IGl0IHdv dWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBmb3JjZQorc29ydGVkIG9yIGdyb3VwZWQgYWdncmVn YXRpb24uIEknbSBndWVzc2luZyB0aGlzIGNhbiBiZSBsZWZ0IHRvIGZ1dHVyZSB3b3JrLgorCitN b3JlIHNlcmlvdXNseSwgd2UgZG9uJ3Qga25vdyBhbnl0aGluZyBhYm91dCBlYWdlciBhZ2dyZWdh dGlvbiwgd2hpY2ggY291bGQKK2hhdmUgYSBsYXJnZSBpbXBhY3Qgb24gdGhlIHNoYXBlIG9mIHRo ZSBwbGFuIHRyZWUuIFhYWDogVGhpcyBuZWVkcyBzb21lIHN0dWR5Cit0byBkZXRlcm1pbmUgaG93 IGxhcmdlIGEgcHJvYmxlbSBpdCBpcywgYW5kIG1pZ2h0IG5lZWQgdG8gYmUgZml4ZWQgc29vbmVy CityYXRoZXIgdGhhbiBsYXRlci4KKworV2UgZG9uJ3Qgb2ZmZXIgYW55IGNvbnRyb2wgb3ZlciBl c3RpbWF0ZXMsIG9ubHkgb3V0Y29tZXMuIEl0IHNlZW1zIGxpa2UgYQorZ29vZCBpZGVhIHRvIGlu Y29ycG9yYXRlIHRoYXQgYWJpbGl0eSBhdCBzb21lIGZ1dHVyZSBwb2ludCwgYXMgcGdfaGludF9w bGFuCitkb2VzLiBIb3dldmVyLCBzaW5jZSBwcmltYXJ5IGdvYWwgb2YgdGhlIGluaXRpYWwgZGV2 ZWxvcG1lbnQgd29yayBpcyB0byBiZQorYWJsZSB0byBpbmR1Y2UgdGhlIHBsYW5uZXIgdG8gcmVj cmVhdGUgYSBkZXNpcmVkIHBsYW4gdGhhdCB3b3JrZWQgd2VsbCBpbgordGhlIHBhc3QsIHRoaXMg aGFzIG5vdCBiZWVuIGluY2x1ZGVkIGluIHRoZSBpbml0aWFsIGRldmVsb3BtZW50IGVmZm9ydC4K ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDVjNDRhZmY4MmEKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQKQEAgLTAsMCArMSwz MTkgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19w ZXJfZ2F0aGVyID0gMTsKK1NFVCBwYXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKK1NFVCBwYXJhbGxl bF90dXBsZV9jb3N0ID0gMDsKK1NFVCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplID0gMDsK K0NSRUFURSBUQUJMRSBndF9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZGltIChk aW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsK K1ZBQ1VVTSBBTkFMWVpFIGd0X2RpbTsKK0NSRUFURSBUQUJMRSBndF9mYWN0ICgKKwlpZCBpbnQg bm90IG51bGwsCisJZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBndF9kaW0gKGlk KQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBndF9m YWN0CisJU0VMRUNUIGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7 CitWQUNVVU0gQU5BTFlaRSBndF9mYWN0OworLS0gQnkgZGVmYXVsdCwgd2UgZXhwZWN0IEdhdGhl ciBNZXJnZSB3aXRoIGEgcGFyYWxsZWwgaGFzaCBqb2luLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlciBNZXJnZQorICAgV29ya2VycyBQ bGFubmVkOiAxCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAg ICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChm LmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24g Z3RfZmFjdCBmCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAg ICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9T Q0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkKKygxNCByb3dzKQorCistLSBGb3JjZSBH YXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9mIGJvdGggcmVsYXRpb25zIHRvZ2V0aGVyLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2Zh Y3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdh dGhlciBNZXJnZQorICAgV29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAg ICAgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAgICAgICAt PiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAgICAgICAtPiAgUGFy YWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9u IGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoKGYgZCkp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYg ZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKChm IGQpKQorKDE2IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0 aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZ IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU29ydAorICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAtPiAgR2F0aGVyCisgICAg ICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAgICAg ICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgICAgICAgICAgICAgIC0+ ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUigoZiBkKSkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBk KQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoKGYgZCkpCiso MTYgcm93cykKKworQ09NTUlUOworLS0gRm9yY2UgYSBzZXBhcmF0ZSBHYXRoZXIgb3IgR2F0aGVy IE1lcmdlIG9wZXJhdGlvbiBmb3IgZWFjaCByZWxhdGlvbi4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZiBkKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAo Zi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQ bGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGYu ZGltX2lkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBm CisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAg ICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgICAg ICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBHQVRIRVJfTUVSR0UoZikgLyogbWF0Y2hlZCAqLworICAgR0FUSEVSX01FUkdFKGQp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYg ZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9N RVJHRShmIGQpCisoMjAgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdnYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVS IEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNv cnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAg ICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxs ZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6 IGQuaWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5l ZDogMQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZikgLyogbWF0Y2hlZCAqLworICAgR0FU SEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdB VEhFUihmIGQpCisoMjAgcm93cykKKworQ09NTUlUOworLS0gRm9yY2UgYSBHYXRoZXIgb3IgR2F0 aGVyIE1lcmdlIG9uIG9uZSByZWxhdGlvbiBidXQgbm8gcGFyYWxsZWxpc20gb24gb3RoZXIuCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYp IG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVS IEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEdh dGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAgICAgICAtPiAg UGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBn dF9kaW1fcGtleSBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVS X01FUkdFKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lO X1BMQUlOKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1f cGtleSkKKyAgIEdBVEhFUl9NRVJHRShmKQorICAgTk9fR0FUSEVSKGQpCisoMTggcm93cykKKwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZCkgbm9fZ2F0 aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5p ZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBK b2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3Qg ZgorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAg ICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAgICAg ICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgR0FUSEVSX01FUkdFKGQpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihmKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQp CisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVS R0UoZCkKKyAgIE5PX0dBVEhFUihmKQorKDE5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQg T04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5p ZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24gZ3Rf ZGltIGQKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAg IC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAg ICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisg ICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1 YmxpYy5ndF9kaW1fcGtleSkKKyAgIEdBVEhFUihmKQorICAgTk9fR0FUSEVSKGQpCisoMTggcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZCkgbm9fZ2F0 aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJP TSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5p ZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBK b2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3Qg ZgorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAtPiAgR2F0 aGVyCisgICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihmKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9K T0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoZCkKKyAgIE5PX0dBVEhF UihmKQorKDE5IHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIG5vIEdhdGhlciBvciBHYXRoZXIg TWVyZ2UgdXNlIGF0IGFsbC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdub19nYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlk IE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAg SW5kZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorICAgLT4gIFNvcnQKKyAg ICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2Zh Y3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQg Ki8KKyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihkIGYpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBTRVFfU0NB TihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihm IGQpCisoMTUgcm93cykKKworQ09NTUlUOworLS0gQ2FuJ3QgZm9yY2UgR2F0aGVyIE1lcmdlIHdp dGhvdXQgdGhlIE9SREVSIEJZIGNsYXVzZSwgYnV0IGp1c3QgR2F0aGVyIGlzIE9LLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2Zh Y3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIKKyAgIERpc2FibGVkOiB0cnVlCisg ICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAg IEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEg U2NhbiBvbiBndF9mYWN0IGYKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAg ICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkK KyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNSByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBHYXRoZXIKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFBhcmFs bGVsIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAg ICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgLT4gIFBh cmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9k aW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNI X0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNCByb3dzKQor CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pv aW5fb3JkZXIub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVy Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTg3NjUyMzcwYzMK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5f b3JkZXIub3V0CkBAIC0wLDAgKzEsMjkyIEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQg bWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUgam9fZGlt MSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0xIChpZCwgZGlt MSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsg MQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19k aW0xOworQ1JFQVRFIFRBQkxFIGpvX2RpbTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIg dGV4dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5T RVJUIElOVE8gam9fZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZpbGxl ciB0ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTI7CitDUkVBVEUgVEFCTEUgam9fZmFjdCAoCisJ aWQgaW50IHByaW1hcnkga2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2Vz IGpvX2RpbTEgKGlkKSwKKwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19k aW0yIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElO VE8gam9fZmFjdAorCVNFTEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2ZhY3Q7CistLSBXZSBleHBl Y3QgdG8gam9pbiB0byBkMiBmaXJzdCBhbmQgdGhlbiBkMSwgc2luY2UgdGhlIGNvbmRpdGlvbiBv biBkMgorLS0gaXMgbW9yZSBzZWxlY3RpdmUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBm LmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQy LmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQor ICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQp CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpCisgICBIQVNIX0pP SU4oZDIgZDEpCisgICBTRVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCiso MTYgcm93cykKKworLS0gRm9yY2UgYSBmZXcgZGlmZmVyZW50IGpvaW4gb3JkZXJzLiBTb21lIG9m IHRoZXNlIGFyZSB2ZXJ5IGluZWZmaWNpZW50LAorLS0gYnV0IHRoZSBwbGFubmVyIGNvbnNpZGVy cyB0aGVtIGFsbCB2aWFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnam9pbl9vcmRlcihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBm LmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQy LmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQor ICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQp CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikKKyAgIEhB U0hfSk9JTihkMSBkMikKKyAgIFNFUV9TQ0FOKGYgZDEgZDIpCisgICBOT19HQVRIRVIoZiBkMSBk MikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5f b3JkZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0g ZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJF IHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNo IEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpCisgICBIQVNIX0pPSU4oZDIg ZDEpCisgICBTRVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQxIGYg ZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpv X2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVG VCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBB TkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAg IEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgSGFzaCBDb25kOiAoZDEuaWQgPSBmLmRpbTFfaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAg LT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZDEgZiBkMikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoZDEgZiBkMikKKyAgIEhBU0hfSk9JTihmIGQyKQorICAgU0VRX1NDQU4oZDEg ZiBkMikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIChkMSBkMikpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9J TiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIg T04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoKGYuZGltMV9pZCA9IGQxLmlkKSBBTkQg KGYuZGltMl9pZCA9IGQyLmlkKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ ICBIYXNoCisgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0g MSkKKyAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDIgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihm IChkMSBkMikpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGYgKGQxIGQyKSkKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQyKQorICAgSEFT SF9KT0lOKGQyKQorICAgU0VRX1NDQU4oZiBkMSBkMikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQor KDE4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRoZSB1bnVzdWFsIGZvcm11bGF0aW9uIG9mIHRoaXMg cXVlcnkgaXMgaW50ZW5kZWQgdG8gcHJldmVudCB0aGUgcXVlcnkKKy0tIHBsYW5uZXIgZnJvbSBy ZWR1Y2luZyB0aGUgRlVMTCBKT0lOIHRvIHNvbWUgb3RoZXIgam9pbiB0eXBlLCBzbyB0aGF0IHdl CistLSBjYW4gdGVzdCB3aGF0IGhhcHBlbnMgd2l0aCBhIGpvaW4gdHlwZSB0aGF0IGNhbm5vdCBi ZSByZW9yZGVyZWQuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0y IGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQg T1IgZi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4g RmlsdGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAg LT4gIE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAwKSkg PSAoKGYuZGltMl9pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBT b3J0IEtleTogKChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpv X2RpbTIgZDIKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChm LmRpbTJfaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYK KyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEK KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEpCisgICBNRVJH RV9KT0lOX1BMQUlOKGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9T Q0FOKGQyIGYgZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygxOCByb3dzKQorCistLSBXZSBz aG91bGQgbm90IGJlIGFibGUgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gam9pbiBmIHRvIGQxIGZp cnN0LCBiZWNhdXNlCistLSB0aGF0IGlzIG5vdCBhIHZhbGlkIGpvaW4gb3JkZXIsIGJ1dCB3ZSBz aG91bGQgYmUgYWJsZSB0byBmb3JjZSB0aGUgcGxhbm5lcgorLS0gdG8gbWFrZSBlaXRoZXIgZDIg b3IgZiB0aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworLS0gWFhYOiBUaGUgYWR2aWNlIGZlZWRi YWNrIHNheXMgJ3BhcnRpYWxseSBtYXRjaGVkJyBoZXJlIHdoaWNoIGlzbid0IGV4YWN0bHkKKy0t IHdyb25nIGdpdmVuIHRoZSB3YXkgdGhhdCBmbGFnIGlzIGhhbmRsZWQgaW4gdGhlIGNvZGUsIGJ1 dCBpdCdzIGF0IHRoZSB2ZXJ5CistLSBsZWFzdCBjb25mdXNpbmcuIFNvbWV0aGluZyBzaG91bGQg cHJvYmFibHkgYmUgaW1wcm92ZWQgaGVyZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnam9pbl9vcmRlcihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZV TEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEu aWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVk IExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGlt MV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAg ICAgICAgIERpc2FibGVkOiB0cnVlCisgICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDAp KSA9ICgoZi5kaW0yX2lkICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAg IFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g am9fZGltMiBkMgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAo KGYuZGltMl9pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3Qg ZgorICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZiBkMSBkMikgLyogcGFydGlhbGx5IG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEpCisgICBNRVJHRV9KT0lOX1BM QUlOKGYpCisgICBORVNURURfTE9PUF9QTEFJTihkMSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisg ICBOT19HQVRIRVIoZDEgZiBkMikKKygyMSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2Zh Y3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQor CU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1IgKGYu ZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgIE1lcmdl IENvbmQ6ICgoKGYuZGltMl9pZCArIDApKSA9ICgoZDIuaWQgKyAwKSkpCisgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgU29ydAorICAg ICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGYgZDIgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGYgZDIgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQyKQorICAgTkVTVEVEX0xP T1BfTUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGQx IGYgZDIpCisoMjAgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdq b2luX29yZGVyKGQyIGYgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lO IGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYu ZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAor ICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVM TCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5p ZCArIDApKSA9ICgoZi5kaW0yX2lkICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAg ICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMiBkMgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQg S2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpv X2ZhY3QgZgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBmIGQxKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBm IGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUo ZDEpCisgICBTRVFfU0NBTihkMiBmIGQxKQorICAgTk9fR0FUSEVSKGQxIGYgZDIpCisoMjAgcm93 cykKKworQ09NTUlUOworLS0gWFhYOiBhZGQgdGVzdHMgZm9yIGpvaW4gb3JkZXIgcHJlZml4IG1h dGNoaW5nCistLSBYWFg6IGpvaW5fb3JkZXIoanVzdG9uZXJlbCkgc2hvdWxkbid0IHJlcG9ydCBw YXJ0aWFsbHkgbWF0Y2hlZApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBl Y3RlZC9qb2luX3N0cmF0ZWd5Lm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQv am9pbl9zdHJhdGVneS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjcxZWUyNmEzMzdhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9l eHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dApAQCAtMCwwICsxLDI5NyBAQAorTE9BRCAncGdfcGxh bl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JF QVRFIFRBQkxFIGpvaW5fZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvaW5fZGltIChk aW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsK K1ZBQ1VVTSBBTkFMWVpFIGpvaW5fZGltOworQ1JFQVRFIFRBQkxFIGpvaW5fZmFjdCAoCisJaWQg aW50IHByaW1hcnkga2V5LAorCWRpbV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9p bl9kaW0gKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQg SU5UTyBqb2luX2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBqb2luX2ZhY3RfZGltX2lkIE9OIGpvaW5fZmFjdCAo ZGltX2lkKTsKK1ZBQ1VVTSBBTkFMWVpFIGpvaW5fZmFjdDsKKy0tIFdlIGV4cGVjdCBhIGhhc2gg am9pbiBieSBkZWZhdWx0LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQg PSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQor ICAgTk9fR0FUSEVSKGYgZCkKKygxMCByb3dzKQorCistLSBUcnkgZm9yY2luZyBlYWNoIGpvaW4g bWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2RpbSBhcyB0aGUgaW5uZXIgdGFibGUuCistLSBBbGwg b2YgdGhlc2Ugc2hvdWxkIHdvcmsgZXhjZXB0IGZvciBNRVJHRV9KT0lOX01BVEVSSUFMSVpFOyB0 aGF0IHdpbGwKKy0tIGZhaWwsIGJlY2F1c2UgdGhlIHBsYW5uZXIga25vd3MgdGhhdCBqb2luX2Rp bSAoaWQpIGlzIHVuaXF1ZSwgYW5kIHdpbGwKKy0tIHJlZnVzZSB0byBhZGQgbWFyay9yZXN0b3Jl IG92ZXJoZWFkLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hB U0hfSk9JTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQu aWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg SEFTSF9KT0lOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9f R0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgRGlzYWJs ZWQ6IHRydWUKKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIE1FUkdFX0pPSU5fTUFURVJJQUxJWkUoZCkgLyogbWF0Y2hlZCwgZmFpbGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9K T0lOX1BMQUlOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQgZCBw dWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGQpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3Qg ZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihk KQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkIGQgcHVibGljLmpvaW5f ZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDExIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZCknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpP SU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChmLmRpbV9pZCA9IGQu aWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBNYXRlcmlhbGl6ZQor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX01BVEVS SUFMSVpFKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUVNT0la RShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g am9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBO ZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgTWVtb2l6 ZQorICAgICAgICAgQ2FjaGUgS2V5OiBmLmRpbV9pZAorICAgICAgICAgQ2FjaGUgTW9kZTogbG9n aWNhbAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2lu X2RpbSBkCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX01FTU9JWkUoZCkgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTkVTVEVE X0xPT1BfTUVNT0laRShkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMu am9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTUgcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihkKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2Fu IG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9u IGpvaW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltX2lkKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfUExBSU4oZCkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTkVTVEVEX0xP T1BfUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5f ZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK0NPTU1JVDsKKy0tIE5v dyB0cnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2ZhY3QgYXMg dGhlIGlubmVyCistLSB0YWJsZS4gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihmKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBI YXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBTZXEgU2Nh biBvbiBqb2luX2RpbSBkCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpv aW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oZikgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAg SEFTSF9KT0lOKGYpCisgICBTRVFfU0NBTihkIGYpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9NQVRF UklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGlt X2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBk CisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5f ZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1F UkdFX0pPSU5fTUFURVJJQUxJWkUoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKQor ICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5IGYgcHVibGljLmpvaW5fZmFjdF9k aW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisg ICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg am9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2lu X2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBN RVJHRV9KT0lOX1BMQUlOKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIElOREVYX1ND QU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSBmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAg Tk9fR0FUSEVSKGYgZCkKKygxMSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQg T04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNl cSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURf TE9PUF9NQVRFUklBTElaRShmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShmKQorICAg U0VRX1NDQU4oZCBmKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZiknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpP SU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQg TG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBNZW1vaXplCisgICAg ICAgICBDYWNoZSBLZXk6IGQuaWQKKyAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAgICAg ICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYK KyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChkaW1faWQgPSBkLmlkKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUVNT0laRShmKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNURURfTE9PUF9N RU1PSVpFKGYpCisgICBTRVFfU0NBTihkKQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2Zh Y3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGYpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpv aW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEg U2NhbiBvbiBqb2luX2RpbSBkCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGlt X2lkIG9uIGpvaW5fZmFjdCBmCisgICAgICAgICBJbmRleCBDb25kOiAoZGltX2lkID0gZC5pZCkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE5F U1RFRF9MT09QX1BMQUlOKGYpCisgICBTRVFfU0NBTihkKQorICAgSU5ERVhfU0NBTihmIHB1Ymxp Yy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitDT01N SVQ7CistLSBXZSBjYW4ndCBmb3JjZSBhIGZvcmVpZ24gam9pbiBiZXR3ZWVuIHRoZXNlIHRhYmxl cywgYmVjYXVzZSB0aGV5CistLSBhcmVuJ3QgZm9yZWlnbiB0YWJsZXMuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKChmIGQpKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYg Sk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6 IHRydWUKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4g dXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAgICBJbmRleCBDb25kOiAo aWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEZPUkVJR05fSk9JTigo ZiBkKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihmIGQpCisgICBORVNURURfTE9PUF9QTEFJTihkKQorICAgU0VRX1NDQU4oZikK KyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQp CisoMTMgcm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhw ZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmRmMGYwNTUzMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dApAQCAtMCwwICsxLDI0MyBAQAorTE9BRCAn cGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAw OworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gPSB0cnVlOworQ1JFQVRFIFRBQkxFIHB0 MSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlQQVJUSVRJ T04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDFhIFBBUlRJVElPTiBPRiBwdDEgRk9S IFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBm YWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYiBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJP TSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor Q1JFQVRFIFRBQkxFIHB0MWMgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDIwMDEp IHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJ TlRPIHB0MSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcg fHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZB Q1VVTSBBTkFMWVpFIHB0MTsKK0NSRUFURSBUQUJMRSBwdDIgKGlkIGludGVnZXIgcHJpbWFyeSBr ZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVB VEUgVEFCTEUgcHQyYSBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEw MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0 MmIgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJjIFBBUlRJ VElPTiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDIgKGlkLCBkaW0yLCB2YWwy KQorCVNFTEVDVCBnLCAnc29tZSBvdGhlciB0ZXh0ICcgfHwgZywgKGcgJSA1KSArIDEKKwkgIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MjsKK0NSRUFU RSBUQUJMRSBwdDMgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTMgdGV4dCwgdmFsMyBpbnQp CisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQzYSBQQVJUSVRJT04g T0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0M2IgUEFSVElUSU9OIE9GIHB0MyBGT1Ig VkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNjIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBG Uk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7 CitJTlNFUlQgSU5UTyBwdDMgKGlkLCBkaW0zLCB2YWwzKQorCVNFTEVDVCBnLCAnYSB0aGlyZCBy YW5kb20gdGV4dCAnIHx8IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdDM7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaCAo aWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQQVJUSVRJT04g QlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJT04gT0YgcHRt aXNtYXRjaAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDE1MDEpCisJV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBBUlRJVElP TiBPRiBwdG1pc21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9NICgxNTAxKSB0byAoMzAwMSkKKwlX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdG1pc21hdGNo IChpZCwgZGltbSwgdmFsbSkKKwlTRUxFQ1QgZywgJ3lldCBhbm90aGVyIHRleHQgJyB8fCBnLCAo ZyAlIDIpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFO QUxZWkUgcHRtaXNtYXRjaDsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQg PSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEFwcGVuZAorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMS5pZCA9IHB0M18xLmlkKQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFf cGtleSBvbiBwdDFhIHB0MV8xCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJf MS5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBM b29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChw dDJfMi5pZCA9IHB0M18yLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIg cHQyXzIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNi IHB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAg ICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWJfcGtleSBvbiBwdDFiIHB0MV8yCisgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMy5pZCA9IHB0M18zLmlkKQorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVz aW5nIHB0MWNfcGtleSBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAo aWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJs aWMucHQzYSBwdDEvcHVibGljLnB0MWEpCisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYiBw dDMvcHVibGljLnB0M2IgcHQxL3B1YmxpYy5wdDFiKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGlj LnB0MmMgcHQzL3B1YmxpYy5wdDNjIHB0MS9wdWJsaWMucHQxYykKKyAgIE5FU1RFRF9MT09QX1BM QUlOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAg SEFTSF9KT0lOKHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNj KQorICAgU0VRX1NDQU4ocHQyL3B1YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGlj LnB0MmIgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQz YykKKyAgIElOREVYX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkgcHQxL3B1 YmxpYy5wdDFiIHB1YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVibGljLnB0 MWNfcGtleSkKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5PX0dBVEhFUihw dDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGlj LnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQz YSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQ3IHJvd3MpCisKKy0tIFN1cHBy ZXNzIHBhcnRpdGlvbndpc2Ugam9pbiwgb3IgZG8gaXQganVzdCBwYXJ0aWFsbHkuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRShwdDEgcHQy IHB0MyknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00g cHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAor ICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2lu CisgICBIYXNoIENvbmQ6IChwdDEuaWQgPSBwdDIuaWQpCisgICAtPiAgQXBwZW5kCisgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MSA9IDEpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYyBwdDFf MworICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgSGFzaAorICAgICAg ICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyLmlkID0gcHQz LmlkKQorICAgICAgICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIg cHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwzID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFBBUlRJVElPTldJ U0UocHQxKSAvKiBtYXRjaGVkICovCisgICBQQVJUSVRJT05XSVNFKHB0MikgLyogbWF0Y2hlZCAq LworICAgUEFSVElUSU9OV0lTRShwdDMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKHB0MSAocHQyIHB0MykpCisgICBIQVNIX0pPSU4ocHQzIHB0 MykKKyAgIFNFUV9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1Ymxp Yy5wdDFjIHB0Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0 MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYgorICAgIHB0My9wdWJsaWMucHQzYykK KyAgIFBBUlRJVElPTldJU0UocHQxIHB0MiBwdDMpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5w dDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAg cHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1Ymxp Yy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg0MCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdDIpIHB0MyknOworRVhQTEFJTiAo UExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVS RSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFO RCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChw dDEuaWQgPSBwdDMuaWQpCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMS5pZCA9IHB0Ml8xLmlkKQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHB0MV8yLmlkID0gcHQyXzIuaWQpCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMSA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAg SGFzaCBDb25kOiAocHQxXzMuaWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0g MSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHQyYyBwdDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDMgPSAxKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2IgcHQzXzIK KyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDMgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRSgocHQx IHB0MikpIC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElPTldJU0UocHQzKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDEvcHVibGljLnB0MWEg cHQyL3B1YmxpYy5wdDJhKQorICAgSk9JTl9PUkRFUihwdDEvcHVibGljLnB0MWIgcHQyL3B1Ymxp Yy5wdDJiKQorICAgSk9JTl9PUkRFUihwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJjKQor ICAgSk9JTl9PUkRFUih7cHQxIHB0Mn0gcHQzKQorICAgSEFTSF9KT0lOKHB0Mi9wdWJsaWMucHQy YSBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0MykKKyAgIFNFUV9TQ0FOKHB0MS9w dWJsaWMucHQxYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFiIHB0Mi9wdWJsaWMucHQy YgorICAgIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNhIHB0 My9wdWJsaWMucHQzYgorICAgIHB0My9wdWJsaWMucHQzYykKKyAgIFBBUlRJVElPTldJU0UoKHB0 MSBwdDIpIHB0MykKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFi IHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQy L3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5w dDNjKQorKDQ3IHJvd3MpCisKK0NPTU1JVDsKKy0tIENhbid0IGZvcmNlIGEgcGFydGl0aW9ud2lz ZSBqb2luIHdpdGggYSBtaXNtYXRjaGVkIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdG1pc21hdGNoKSknOworRVhQ TEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdG1pc21h dGNoIFdIRVJFIHB0MS5pZCA9IHB0bWlzbWF0Y2guaWQ7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQorICAgLT4g IEFwcGVuZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWEgcHQxXzEKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdDFiIHB0MV8yCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYyBw dDFfMworICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHRtaXNt YXRjaGFfcGtleSBvbiBwdG1pc21hdGNoYSBwdG1pc21hdGNoXzEKKyAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6IChpZCA9IHB0MS5pZCkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0 bWlzbWF0Y2hiX3BrZXkgb24gcHRtaXNtYXRjaGIgcHRtaXNtYXRjaF8yCisgICAgICAgICAgICAg ICBJbmRleCBDb25kOiAoaWQgPSBwdDEuaWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQ QVJUSVRJT05XSVNFKChwdDEgcHRtaXNtYXRjaCkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQxIHB0bWlzbWF0Y2gpCisgICBO RVNURURfTE9PUF9QTEFJTihwdG1pc21hdGNoKQorICAgU0VRX1NDQU4ocHQxL3B1YmxpYy5wdDFh IHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMpCisgICBJTkRFWF9TQ0FOKHB0bWlzbWF0 Y2gvcHVibGljLnB0bWlzbWF0Y2hhIHB1YmxpYy5wdG1pc21hdGNoYV9wa2V5CisgICAgcHRtaXNt YXRjaC9wdWJsaWMucHRtaXNtYXRjaGIgcHVibGljLnB0bWlzbWF0Y2hiX3BrZXkpCisgICBQQVJU SVRJT05XSVNFKHB0MSBwdG1pc21hdGNoKQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBw dDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjCisgICAgcHRtaXNtYXRjaC9wdWJsaWMucHRt aXNtYXRjaGEgcHRtaXNtYXRjaC9wdWJsaWMucHRtaXNtYXRjaGIpCisoMjIgcm93cykKKworQ09N TUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91 dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA4NTkxNTUzMzBjCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91dApAQCAtMCwwICsxLDQ3 NyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Bl cl9nYXRoZXIgPSAwOworU0VUIHNlcV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgcmFuZG9tX3BhZ2Vf Y29zdCA9IDAuMTsKK1NFVCBjcHVfdHVwbGVfY29zdCA9IDA7CitTRVQgY3B1X2luZGV4X3R1cGxl X2Nvc3QgPSAwOworQ1JFQVRFIFRBQkxFIHNjYW5fdGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBi IHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8g c2Nhbl90YWJsZQorCVNFTEVDVCBnLCAnc29tZSB0ZXh0ICcgfHwgZyBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggc2Nhbl90YWJsZV9iIE9OIHNjYW5fdGFi bGUgVVNJTkcgYnJpbiAoYik7CitWQUNVVU0gQU5BTFlaRSBzY2FuX3RhYmxlOworLS0gU2VxdWVu dGlhbCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGU7CisgICAgICAgUVVFUlkgUExBTiAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg0 IHJvd3MpCisKKy0tIEluZGV4IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVf cGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisKKy0tIEluZGV4LW9ubHkg c2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5 IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9w a2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQorCistLSBCaXRtYXAgaGVh cCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKKyAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIHNjYW5f dGFibGUKKyAgIFJlY2hlY2sgQ29uZDogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorICAgLT4g IEJpdG1hcCBJbmRleCBTY2FuIG9uIHNjYW5fdGFibGVfYgorICAgICAgICAgSW5kZXggQ29uZDog KGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJ VE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9iKQorICAgTk9fR0FU SEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCistLSBUSUQgc2NhbgorRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAn KDAsMSknOworICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGlkIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElE IENvbmQ6IChjdGlkID0gJygwLDEpJzo6dGlkKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3Mp CisKKy0tIFRJRCByYW5nZSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8 ICcoMiwxKSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBSYW5nZSBTY2FuIG9uIHNjYW5fdGFibGUK KyAgIFRJRCBDb25kOiAoKGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6 OnRpZCkpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gVHJ5IGZvcmNpbmcgZWFj aCBvZiBvdXIgdGVzdCBxdWVyaWVzIHRvIHVzZSB0aGUgc2NhbiB0eXBlIHRoZXkKKy0tIHdhbnRl ZCB0byB1c2UgYW55d2F5LiBUaGlzIHNob3VsZCBzdWNjZWVkLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNj YW5fdGFibGUpCisoNiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK KyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIElu ZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtl eSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00g c2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNp bmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNj YW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBO T19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl CisJV0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9u IHNjYW5fdGFibGUKKyAgIFJlY2hlY2sgQ29uZDogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQor ICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHNjYW5fdGFibGVfYgorICAgICAgICAgSW5kZXgg Q29uZDogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJs ZSBwdWJsaWMuc2Nhbl90YWJsZV9iKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOSByb3dz KQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFi bGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRp ZCBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIFRJRCBDb25kOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQor ICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygx LDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBSYW5nZSBTY2Fu IG9uIHNjYW5fdGFibGUKKyAgIFRJRCBDb25kOiAoKGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAo Y3RpZCA8ICcoMiwxKSc6OnRpZCkpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NB TihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg VElEX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykK KworQ09NTUlUOworLS0gVHJ5IHRvIGZvcmNlIGEgZnVsbCBzY2FuIG9mIHRoZSB0YWJsZSB0byB1 c2Ugc29tZSBvdGhlciBzY2FuIHR5cGUuIEFsbAorLS0gb2YgdGhlc2Ugd2lsbCBmYWlsLiBBbiBp bmRleCBzY2FuIG9yIGJpdG1hcCBoZWFwIHNjYW4gY291bGQgcG90ZW50aWFsbHkKKy0tIGdlbmVy YXRlIHRoZSBjb3JyZWN0IGFuc3dlciwgYnV0IHRoZSBwbGFubmVyIGRvZXMgbm90IGV2ZW4gY29u c2lkZXIgdGhlc2UKKy0tIHBvc3NpYmlsaXRpZXMgZHVlIHRvIHRoZSBsYWNrIG9mIGEgV0hFUkUg Y2xhdXNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyog bWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4o c2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBz Y2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0 Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nh bl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1h dGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNj YW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFi bGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NB TihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCiso NyByb3dzKQorCitDT01NSVQ7CistLSBUcnkgYWdhaW4gdG8gZm9yY2UgaW5kZXggdXNlLiBUaGlz IHNob3VsZCBub3cgc3VjY2VlZCBmb3IgdGhlIElOREVYX1NDQU4KKy0tIGFuZCBCSVRNQVBfSEVB UF9TQ0FOLCBidXQgdGhlIElOREVYX09OTFlfU0NBTiBjYW4ndCBiZSBmb3JjZWQgYmVjYXVzZSB0 aGUKKy0tIHF1ZXJ5IGZldGNoZXMgY29sdW1ucyBub3QgaW5jbHVkZWQgaW4gdGhlIGluZGV4Lgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nh bl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4g dXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID4g MCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90 YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPiAwKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5 KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFf U0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJp dG1hcCBIZWFwIFNjYW4gb24gc2Nhbl90YWJsZQorICAgUmVjaGVjayBDb25kOiAoYSA+IDApCisg ICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gc2Nhbl90YWJsZV9wa2V5CisgICAgICAgICBJbmRl eCBDb25kOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2Fu X3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg5IHJvd3MpCisKK0NPTU1J VDsKKy0tIFdlIGNhbiBmb3JjZSBhIHByaW1hcnkga2V5IGxvb2t1cCB0byB1c2UgYSBzZXF1ZW50 aWFsIHNjYW4sIGJ1dCB3ZQorLS0gY2FuJ3QgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4LW9ubHkg c2NhbiAoZHVlIHRvIHRoZSBjb2x1bW4gbGlzdCkKKy0tIG9yIGEgVElEIHNjYW4gKGR1ZSB0byB0 aGUgYWJzZW5jZSBvZiBhIFRJRCBxdWFsKS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBGaWx0ZXI6IChh ID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3Rh YmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFi bGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJ bmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxl ZDogdHJ1ZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVk LCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihz Y2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nh bl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGZh aWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJs ZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCBy b3dzKQorCitDT01NSVQ7CistLSBXZSBjYW4gZm9yY2libHkgZG93bmdyYWRlIGFuIGluZGV4LW9u bHkgc2NhbiB0byBhbiBpbmRleCBzY2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZvcmNlIHRoZSB1c2Ug b2YgYW4gaW5kZXggdGhhdCB0aGUgcGxhbm5lciB0aGlua3MgaXMgaW5hcHBsaWNhYmxlLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNp bmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAg IEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihz Y2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2Yg YSBzZXF1ZW50aWFsIHNjYW4gaW4gcGxhY2Ugb2YgYSBiaXRtYXAgaGVhcCBzY2FuLAorLS0gYnV0 IGEgcGxhaW4gaW5kZXggc2NhbiBvbiBhIEJSSU4gaW5kZXggaXMgbm90IHBvc3NpYmxlLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFi bGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoYiA+ICdzb21lIHRleHQgOCc6 OnRleHQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90 YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9i KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQor ICAgRGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCwg ZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJs ZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2Ug Y2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gcmF0aGVyIHRoYW4gYSBUSUQg c2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAs MSknOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAg RmlsdGVyOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCiso NyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoKGN0aWQgPiAn KDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRpZCkpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBhc3NvcnRlZCBpbmNvcnJlY3Qg YWR2aWNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9T Q0FOKG5vdGhpbmcpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBh IEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihub3RoaW5nKSAvKiBub3QgbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1 YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihub3RoaW5n IHdoYXRzb2V2ZXIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBh IEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlcikgLyogbm90 IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4o c2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFi bGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpIC8qIG1hdGNoZWQsIGluYXBwbGljYWJsZSwg ZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNj YW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9P TkxZX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4 IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXgg Q29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FO KG5vdGhpbmcgd2hhdHNvZXZlcikgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9w a2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNp bmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIGJv Z3VzKSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQor ICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u ZGFmYjNmY2U5YjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL21l c29uLmJ1aWxkCkBAIC0wLDAgKzEsNjMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjQsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3BnX3BsYW5fYWR2aWNlX3NvdXJj ZXMgPSBmaWxlcygKKyAgJ3BnX3BsYW5fYWR2aWNlLmMnLAorICAncGdwYV9hc3QuYycsCisgICdw Z3BhX2NvbGxlY3Rvci5jJywKKyAgJ3BncGFfaWRlbnRpZmllci5jJywKKyAgJ3BncGFfam9pbi5j JywKKyAgJ3BncGFfb3V0cHV0LmMnLAorICAncGdwYV9wbGFubmVyLmMnLAorICAncGdwYV9zY2Fu LmMnLAorICAncGdwYV90cm92ZS5jJywKKyAgJ3BncGFfd2Fsa2VyLmMnLAorKQorCitwZ3BhX3Nj YW5uZXIgPSBjdXN0b21fdGFyZ2V0KCdwZ3BhX3NjYW5uZXInLAorICBpbnB1dDogJ3BncGFfc2Nh bm5lci5sJywKKyAgb3V0cHV0OiAncGdwYV9zY2FubmVyLmMnLAorICBjb21tYW5kOiBmbGV4X2Nt ZCwKKykKK2dlbmVyYXRlZF9zb3VyY2VzICs9IHBncGFfc2Nhbm5lcgorcGdfcGxhbl9hZHZpY2Vf c291cmNlcyArPSBwZ3BhX3NjYW5uZXIKKworcGdwYV9wYXJzZXIgPSBjdXN0b21fdGFyZ2V0KCdw Z3BhX3BhcnNlcicsCisgIGlucHV0OiAncGdwYV9wYXJzZXIueScsCisgIGt3YXJnczogYmlzb25f a3csCispCitnZW5lcmF0ZWRfc291cmNlcyArPSBwZ3BhX3BhcnNlci50b19saXN0KCkKK3BnX3Bs YW5fYWR2aWNlX3NvdXJjZXMgKz0gcGdwYV9wYXJzZXIKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dp bmRvd3MnCisgIHBnX3BsYW5fYWR2aWNlX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdp bjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICdwZ19wbGFuX2FkdmljZScs CisgICAgJy0tRklMRURFU0MnLCAncGdfcGxhbl9hZHZpY2UgLSBoZWxwIHRoZSBwbGFubmVyIGdl dCB0aGUgcmlnaHQgcGxhbicsXSkKK2VuZGlmCisKK3BnX3BsYW5fYWR2aWNlID0gc2hhcmVkX21v ZHVsZSgncGdfcGxhbl9hZHZpY2UnLAorICBwZ19wbGFuX2FkdmljZV9zb3VyY2VzLAorICBpbmNs dWRlX2RpcmVjdG9yaWVzOiBpbmNsdWRlX2RpcmVjdG9yaWVzKCcuJyksCisgIGt3YXJnczogY29u dHJpYl9tb2RfYXJncywKKykKK2NvbnRyaWJfdGFyZ2V0cyArPSBwZ19wbGFuX2FkdmljZQorCitp bnN0YWxsX2RhdGEoCisgICdwZ19wbGFuX2FkdmljZS0tMS4wLnNxbCcsCisgICdwZ19wbGFuX2Fk dmljZS5jb250cm9sJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykKKwordGVzdHMg Kz0geworICAnbmFtZSc6ICdwZ19wbGFuX2FkdmljZScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRf c291cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAncmVn cmVzcyc6IHsKKyAgICAnc3FsJzogWworICAgICAgJ2dhdGhlcicsCisgICAgICAnam9pbl9vcmRl cicsCisgICAgICAnam9pbl9zdHJhdGVneScsCisgICAgICAncGFydGl0aW9ud2lzZScsCisgICAg ICAnc2NhbicsCisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn X3BsYW5fYWR2aWNlLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi4yOWIxZTIzYmYzZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwKQEAgLTAsMCArMSw1NyBAQAorLyogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBp ZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVO U0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlIiB0byBsb2Fk IHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9s b2NhbF9hZHZpY2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2Ns ZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklDVDsKKworQ1JFQVRF IEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkKK1JFVFVSTlMgdm9p ZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2Fkdmlj ZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQg ZGJpZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUgdGlt ZXN0YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJT1VUIGFkdmljZSB0ZXh0CispCitSRVRVUk5T IFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRfY29sbGVjdGVkX2xv Y2FsX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0 X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKAorCU9VVCBpZCBiaWdpbnQsCisJT1VUIHVzZXJpZCBv aWQsCisJT1VUIGRiaWQgb2lkLAorCU9VVCBxdWVyeWlkIGJpZ2ludCwKKwlPVVQgY29sbGVjdGlv bl90aW1lIHRpbWVzdGFtcHR6LAorCU9VVCBxdWVyeSB0ZXh0LAorCU9VVCBhZHZpY2UgdGV4dAor KQorUkVUVVJOUyBTRVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2Nv bGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK1JFVk9LRSBBTEwg T04gRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgRlJPTSBQVUJMSUM7 CisKK0NSRUFURSBGVU5DVElPTiBwZ19wYXJzZV9hZHZpY2UoCisJYWR2aWNlX3N0cmluZyB0ZXh0 LAorCU9VVCBwYXRoIGludFtdLAorCU9VVCB0YWcgdGV4dCwKKwlPVVQgb3BlcmF0b3IgdGV4dCwK KwlPVVQgYWxpYXMgdGV4dCwKKwlPVVQgb2NjdXJyZW5jZSBpbnRlZ2VyLAorCU9VVCByZWxzY2hl bWEgdGV4dCwKKwlPVVQgcmVsbmFtZSB0ZXh0LAorCU9VVCBwbGFuX25hbWUgdGV4dAorKQorUkVU VVJOUyBTRVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfcGFyc2VfYWR2aWNl JworTEFOR1VBR0UgQyBTVFJJQ1Q7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BnX3BsYW5fYWR2aWNlLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNl LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYzMmU4YjdhMGQzCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5j CkBAIC0wLDAgKzEsNDU0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19wbGFuX2Fk dmljZS5jCisgKgkgIG1haW4gZW50cnlwb2ludHMgZm9yIGdlbmVyYXRpbmcgYW5kIGFwcGx5aW5n IHBsYW5uZXIgYWR2aWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BnX3BsYW5fYWR2aWNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1 ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ19wbGFuX2FkdmljZS5oIgorI2luY2x1ZGUg InBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9jb2xsZWN0b3IuaCIKKyNpbmNsdWRlICJwZ3Bh X2lkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJwZ3BhX291dHB1dC5oIgorI2luY2x1ZGUgInBncGFf cGxhbm5lci5oIgorI2luY2x1ZGUgInBncGFfdHJvdmUuaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtl ci5oIgorCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMv ZXhwbGFpbi5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW5fZm9ybWF0LmgiCisjaW5jbHVk ZSAiY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNs dWRlICJvcHRpbWl6ZXIvcGxhbm5lci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5 LmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGlj IHBncGFfc2hhcmVkX3N0YXRlICpwZ3BhX3N0YXRlID0gTlVMTDsKK3N0YXRpYyBkc2FfYXJlYSAq cGdwYV9kc2FfYXJlYSA9IE5VTEw7CisKKy8qIEdVQyB2YXJpYWJsZXMgKi8KK2NoYXIJICAgKnBn X3BsYW5fYWR2aWNlX2FkdmljZSA9IE5VTEw7CitzdGF0aWMgYm9vbCBwZ19wbGFuX2FkdmljZV9h bHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UgPSB0cnVlOworaW50CQkJcGdfcGxhbl9hZHZp Y2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDA7CitpbnQJCQlwZ19wbGFuX2FkdmljZV9zaGFy ZWRfY29sbGVjdGlvbl9saW1pdCA9IDA7CisKKy8qIFNhdmVkIGhvb2sgdmFsdWUgKi8KK3N0YXRp YyBleHBsYWluX3Blcl9wbGFuX2hvb2tfdHlwZSBwcmV2X2V4cGxhaW5fcGVyX3BsYW4gPSBOVUxM OworCisvKiBPdGhlciBmaWxlLWxldmVsIGdsb2JhbHMgKi8KK3N0YXRpYyBpbnQJZXNfZXh0ZW5z aW9uX2lkOworc3RhdGljIE1lbW9yeUNvbnRleHQgcGdwYV9tZW1vcnlfY29udGV4dCA9IE5VTEw7 CisKK3N0YXRpYyB2b2lkIHBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIoRXhw bGFpblN0YXRlICplcywKKwkJCQkJCQkJCQkJCSAgRGVmRWxlbSAqb3B0LAorCQkJCQkJCQkJCQkJ ICBQYXJzZVN0YXRlICpwc3RhdGUpOworc3RhdGljIHZvaWQgcGdfcGxhbl9hZHZpY2VfZXhwbGFp bl9wZXJfcGxhbl9ob29rKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJCQkJCSBJ bnRvQ2xhdXNlICppbnRvLAorCQkJCQkJCQkJCQkJIEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJCQkJ CQkJCQkgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCisJCQkJCQkJCQkJCQkgUGFyYW1MaXN0SW5m byBwYXJhbXMsCisJCQkJCQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOworc3Rh dGljIGJvb2wgcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2soY2hhciAqKm5ld3ZhbCwg dm9pZCAqKmV4dHJhLAorCQkJCQkJCQkJCQkgR3VjU291cmNlIHNvdXJjZSk7CitzdGF0aWMgRGVm RWxlbSAqZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFt ZSk7CisKKy8qCisgKiBJbml0aWFsaXplIHRoaXMgbW9kdWxlLgorICovCit2b2lkCitfUEdfaW5p dCh2b2lkKQoreworCURlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5h ZHZpY2UiLAorCQkJCQkJCSAgICJhZHZpY2UgdG8gYXBwbHkgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5n IiwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgICZwZ19wbGFuX2FkdmljZV9hZHZpY2UsCisJ CQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBQR0NfVVNFUlNFVCwKKwkJCQkJCQkgICAwLAorCQkJ CQkJCSAgIHBnX3BsYW5fYWR2aWNlX2FkdmljZV9jaGVja19ob29rLAorCQkJCQkJCSAgIE5VTEws CisJCQkJCQkJICAgTlVMTCk7CisKKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX3BsYW5f YWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSIsCisJCQkJCQkJICJFWFBMQUlO IG91dHB1dCBpbmNsdWRlcyBzdXBwbGllZCBhZHZpY2UgZXZlbiB3aXRob3V0IEVYUExBSU4gKFBM QU5fQURWSUNFKSIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZwZ19wbGFuX2FkdmljZV9hbHdh eXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UsCisJCQkJCQkJIHRydWUsCisJCQkJCQkJIFBHQ19V U0VSU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJ CSBOVUxMKTsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5sb2Nh bF9jb2xsZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQkiIyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRh aW4gaW4gcGVyLWJhY2tlbmQgbWVtb3J5IiwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCSZwZ19wbGFu X2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5U X01BWCwKKwkJCQkJCQlQR0NfVVNFUlNFVCwKKwkJCQkJCQkwLAorCQkJCQkJCU5VTEwsCisJCQkJ CQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19w bGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdCIsCisJCQkJCQkJIiMgb2YgYWR2aWNl IGVudHJpZXMgdG8gcmV0YWluIGluIHNoYXJlZCBtZW1vcnkiLAorCQkJCQkJCU5VTEwsCisJCQkJ CQkJJnBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJ CQkJCQkJMCwgSU5UX01BWCwKKwkJCQkJCQlQR0NfU1VTRVQsCisJCQkJCQkJMCwKKwkJCQkJCQlO VUxMLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2 ZWQoInBnX3BsYW5fYWR2aWNlIik7CisKKwkvKiBHZXQgYW4gSUQgdGhhdCB3ZSBjYW4gdXNlIHRv IGNhY2hlIGRhdGEgaW4gYW4gRXhwbGFpblN0YXRlLiAqLworCWVzX2V4dGVuc2lvbl9pZCA9IEdl dEV4cGxhaW5FeHRlbnNpb25JZCgicGdfcGxhbl9hZHZpY2UiKTsKKworCS8qIFJlZ2lzdGVyIHRo ZSBuZXcgRVhQTEFJTiBvcHRpb25zIGltcGxlbWVudGVkIGJ5IHRoaXMgbW9kdWxlLiAqLworCVJl Z2lzdGVyRXh0ZW5zaW9uRXhwbGFpbk9wdGlvbigicGxhbl9hZHZpY2UiLAorCQkJCQkJCQkgICBw Z19wbGFuX2FkdmljZV9leHBsYWluX29wdGlvbl9oYW5kbGVyKTsKKworCS8qIEluc3RhbGwgaG9v a3MgKi8KKwlwZ3BhX3BsYW5uZXJfaW5zdGFsbF9ob29rcygpOworCXByZXZfZXhwbGFpbl9wZXJf cGxhbiA9IGV4cGxhaW5fcGVyX3BsYW5faG9vazsKKwlleHBsYWluX3Blcl9wbGFuX2hvb2sgPSBw Z19wbGFuX2FkdmljZV9leHBsYWluX3Blcl9wbGFuX2hvb2s7Cit9CisKKy8qCisgKiBJbml0aWFs aXplIHNoYXJlZCBzdGF0ZSB3aGVuIGZpcnN0IGNyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitw Z3BhX2luaXRfc2hhcmVkX3N0YXRlKHZvaWQgKnB0cikKK3sKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAq c3RhdGUgPSAocGdwYV9zaGFyZWRfc3RhdGUgKikgcHRyOworCisJTFdMb2NrSW5pdGlhbGl6ZSgm c3RhdGUtPmxvY2ssIExXTG9ja05ld1RyYW5jaGVJZCgicGdfcGxhbl9hZHZpY2VfbG9jayIpKTsK KwlzdGF0ZS0+ZHNhX3RyYW5jaGUgPSBMV0xvY2tOZXdUcmFuY2hlSWQoInBnX3BsYW5fYWR2aWNl X2RzYSIpOworCXN0YXRlLT5hcmVhID0gRFNBX0hBTkRMRV9JTlZBTElEOworCXN0YXRlLT5zaGFy ZWRfY29sbGVjdG9yID0gSW52YWxpZERzYVBvaW50ZXI7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBw b2ludGVyIHRvIGEgbWVtb3J5IGNvbnRleHQgd2hlcmUgbG9uZy1saXZlZCBkYXRhIG1hbmFnZWQg YnkgdGhpcworICogbW9kdWxlIGNhbiBiZSBzdG9yZWQuCisgKi8KK01lbW9yeUNvbnRleHQKK3Bn X3BsYW5fYWR2aWNlX2dldF9tY3h0KHZvaWQpCit7CisJaWYgKHBncGFfbWVtb3J5X2NvbnRleHQg PT0gTlVMTCkKKwkJcGdwYV9tZW1vcnlfY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShU b3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIsCisJCQkJCQkJ CQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwlyZXR1cm4gcGdwYV9tZW1vcnlfY29u dGV4dDsKK30KKworLyoKKyAqIEdldCBhIHBvaW50ZXIgdG8gb3VyIHNoYXJlZCBzdGF0ZS4KKyAq CisgKiBJZiBubyBzaGFyZWQgc3RhdGUgZXhpc3RzLCBjcmVhdGUgYW5kIGluaXRpYWxpemUgaXQu IElmIGl0IGRvZXMgZXhpc3QgYnV0CisgKiB0aGlzIGJhY2tlbmQgaGFzIG5vdCB5ZXQgYWNjZXNz ZWQgaXQsIGF0dGFjaCB0byBpdC4gT3RoZXJ3aXNlLCBqdXN0IHJldHVybgorICogb3VyIGNhY2hl ZCBwb2ludGVyLgorICoKKyAqIEFsb25nIHRoZSB3YXksIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQg TFdMb2NrIHRyYW5jaGVzIGFyZSByZWdpc3RlcmVkLgorICovCitwZ3BhX3NoYXJlZF9zdGF0ZSAq CitwZ19wbGFuX2FkdmljZV9hdHRhY2godm9pZCkKK3sKKwlpZiAocGdwYV9zdGF0ZSA9PSBOVUxM KQorCXsKKwkJYm9vbAkJZm91bmQ7CisKKwkJcGdwYV9zdGF0ZSA9CisJCQlHZXROYW1lZERTTVNl Z21lbnQoInBnX3BsYW5fYWR2aWNlIiwgc2l6ZW9mKHBncGFfc2hhcmVkX3N0YXRlKSwKKwkJCQkJ CQkgICBwZ3BhX2luaXRfc2hhcmVkX3N0YXRlLCAmZm91bmQpOworCX0KKworCXJldHVybiBwZ3Bh X3N0YXRlOworfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byBwZ19wbGFuX2FkdmljZSdz IERTQSBhcmVhLCBjcmVhdGluZyBpdCBpZiBuZWVkZWQuCisgKi8KK2RzYV9hcmVhICoKK3BnX3Bs YW5fYWR2aWNlX2RzYV9hcmVhKHZvaWQpCit7CisJaWYgKHBncGFfZHNhX2FyZWEgPT0gTlVMTCkK Kwl7CisJCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgp OworCQlkc2FfaGFuZGxlCWFyZWFfaGFuZGxlOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7 CisKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2FkdmljZV9n ZXRfbWN4dCgpKTsKKworCQlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZF KTsKKwkJYXJlYV9oYW5kbGUgPSBzdGF0ZS0+YXJlYTsKKwkJaWYgKGFyZWFfaGFuZGxlID09IERT QV9IQU5ETEVfSU5WQUxJRCkKKwkJeworCQkJcGdwYV9kc2FfYXJlYSA9IGRzYV9jcmVhdGUoc3Rh dGUtPmRzYV90cmFuY2hlKTsKKwkJCWRzYV9waW4ocGdwYV9kc2FfYXJlYSk7CisJCQlzdGF0ZS0+ YXJlYSA9IGRzYV9nZXRfaGFuZGxlKHBncGFfZHNhX2FyZWEpOworCQkJTFdMb2NrUmVsZWFzZSgm c3RhdGUtPmxvY2spOworCQl9CisJCWVsc2UKKwkJeworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUt PmxvY2spOworCQkJcGdwYV9kc2FfYXJlYSA9IGRzYV9hdHRhY2goYXJlYV9oYW5kbGUpOworCQl9 CisKKwkJZHNhX3Bpbl9tYXBwaW5nKHBncGFfZHNhX2FyZWEpOworCisJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlyZXR1cm4gcGdwYV9kc2FfYXJlYTsKK30KKwor LyoKKyAqIEhhbmRsZXIgZm9yIEVYUExBSU4gKFBMQU5fQURWSUNFKS4KKyAqLworc3RhdGljIHZv aWQKK3BnX3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIoRXhwbGFpblN0YXRlICpl cywgRGVmRWxlbSAqb3B0LAorCQkJCQkJCQkJICBQYXJzZVN0YXRlICpwc3RhdGUpCit7CisJYm9v bAkgICAqcGxhbl9hZHZpY2U7CisKKwlwbGFuX2FkdmljZSA9IEdldEV4cGxhaW5FeHRlbnNpb25T dGF0ZShlcywgZXNfZXh0ZW5zaW9uX2lkKTsKKworCWlmIChwbGFuX2FkdmljZSA9PSBOVUxMKQor CXsKKwkJcGxhbl9hZHZpY2UgPSBwYWxsb2MwX29iamVjdChib29sKTsKKwkJU2V0RXhwbGFpbkV4 dGVuc2lvblN0YXRlKGVzLCBlc19leHRlbnNpb25faWQsIHBsYW5fYWR2aWNlKTsKKwl9CisKKwkq cGxhbl9hZHZpY2UgPSBkZWZHZXRCb29sZWFuKG9wdCk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEg c3RyaW5nIHRoYXQgaXMgbGlrZWx5IHRvIGNvbnNpc3Qgb2YgbXVsdGlwbGUgbGluZXMgaW4gRVhQ TEFJTgorICogb3V0cHV0LgorICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFp bl90ZXh0X211bHRpbGluZShFeHBsYWluU3RhdGUgKmVzLCBjaGFyICpxbGFiZWwsCisJCQkJCQkJ CQkgIGNoYXIgKnZhbHVlKQoreworCWNoYXIJICAgKnM7CisKKwkvKiBGb3Igbm9uLXRleHQgZm9y bWF0cywgaXQncyBiZXN0IG5vdCB0byBhZGQgYW55IHNwZWNpYWwgaGFuZGxpbmcuICovCisJaWYg KGVzLT5mb3JtYXQgIT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKKwl7CisJCUV4cGxhaW5Qcm9wZXJ0 eVRleHQocWxhYmVsLCB2YWx1ZSwgZXMpOworCQlyZXR1cm47CisJfQorCisJLyogSW4gdGV4dCBm b3JtYXQsIGlmIHRoZXJlIGlzIG5vIGRhdGEsIGRpc3BsYXkgbm90aGluZy4gKi8KKwlpZiAoKnFs YWJlbCA9PSAnXDAnKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEl0IGxvb2tzIG5pY2VzdCB0byBp bmRlbnQgZWFjaCBsaW5lIG9mIHRoZSBhZHZpY2Ugc2VwYXJhdGVseSwgYmVnaW5uaW5nCisJICog b24gdGhlIGxpbmUgYmVsb3cgdGhlIGxhYmVsLgorCSAqLworCUV4cGxhaW5JbmRlbnRUZXh0KGVz KTsKKwlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICIlczpcbiIsIHFsYWJlbCk7CisJZXMtPmlu ZGVudCsrOworCXdoaWxlICgocyA9IHN0cmNocih2YWx1ZSwgJ1xuJykpICE9IE5VTEwpCisJewor CQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oZXMtPnN0 ciwgdmFsdWUsIChzIC0gdmFsdWUpICsgMSk7CisJCXZhbHVlID0gcyArIDE7CisJfQorCisJLyog RG9uJ3QgaW50ZXJwcmV0IGEgdGVybWluYWwgbmV3bGluZSBhcyBhIHJlcXVlc3QgZm9yIGFuIGVt cHR5IGxpbmUuICovCisJaWYgKCp2YWx1ZSAhPSAnXDAnKQorCXsKKwkJRXhwbGFpbkluZGVudFRl eHQoZXMpOworCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICIlc1xuIiwgdmFsdWUpOworCX0K KworCWVzLT5pbmRlbnQtLTsKK30KKworLyoKKyAqIEFkZCBhZHZpY2UgZmVlZGJhY2sgdG8gdGhl IEVYUExBSU4gb3V0cHV0LgorICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFp bl9mZWVkYmFjayhFeHBsYWluU3RhdGUgKmVzLCBMaXN0ICpmZWVkYmFjaykKK3sKKwlTdHJpbmdJ bmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlmb3JlYWNoX25vZGUoRGVm RWxlbSwgaXRlbSwgZmVlZGJhY2spCisJeworCQlpbnQJCQlmbGFncyA9IGRlZkdldEludDMyKGl0 ZW0pOworCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVzIC8qICIsIGl0ZW0tPmRlZm5hbWUp OworCQlpZiAoKGZsYWdzICYgUEdQQV9URV9NQVRDSF9GVUxMKSAhPSAwKQorCQl7CisJCQlBc3Nl cnQoKGZsYWdzICYgUEdQQV9URV9NQVRDSF9QQVJUSUFMKSAhPSAwKTsKKwkJCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIm1hdGNoZWQiKTsKKwkJfQorCQllbHNlIGlmICgoZmxhZ3MgJiBQR1BBX1RF X01BVENIX1BBUlRJQUwpICE9IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJwYXJ0aWFs bHkgbWF0Y2hlZCIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJub3QgbWF0 Y2hlZCIpOworCQlpZiAoKGZsYWdzICYgUEdQQV9URV9JTkFQUExJQ0FCTEUpICE9IDApCisJCQlh cHBlbmRTdHJpbmdJbmZvKCZidWYsICIsIGluYXBwbGljYWJsZSIpOworCQlpZiAoKGZsYWdzICYg UEdQQV9URV9DT05GTElDVElORykgIT0gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiwg Y29uZmxpY3RpbmciKTsKKwkJaWYgKChmbGFncyAmIFBHUEFfVEVfRkFJTEVEKSAhPSAwKQorCQkJ YXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCBmYWlsZWQiKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygm YnVmLCAiICovXG4iKTsKKwl9CisKKwlwZ19wbGFuX2FkdmljZV9leHBsYWluX3RleHRfbXVsdGls aW5lKGVzLCAiU3VwcGxpZWQgUGxhbiBBZHZpY2UiLAorCQkJCQkJCQkJCSAgYnVmLmRhdGEpOwor fQorCisvKgorICogQWRkIHJlbGV2YW50IGRldGFpbHMsIGlmIGFueSwgdG8gdGhlIEVYUExBSU4g b3V0cHV0IGZvciBhIHNpbmdsZSBwbGFuLgorICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZp Y2VfZXhwbGFpbl9wZXJfcGxhbl9ob29rKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJ CQkJCSBJbnRvQ2xhdXNlICppbnRvLAorCQkJCQkJCQkJIEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJ CQkJCQkgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCisJCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBw YXJhbXMsCisJCQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpCit7CisJYm9vbAkg ICAqcGxhbl9hZHZpY2UgPSBHZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lv bl9pZCk7CisJRGVmRWxlbSAgICAqcGdwYV9pdGVtOworCUxpc3QJICAgKnBncGFfbGlzdDsKKwor CWlmIChwcmV2X2V4cGxhaW5fcGVyX3BsYW4pCisJCXByZXZfZXhwbGFpbl9wZXJfcGxhbihwbGFu bmVkc3RtdCwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMsCisJCQkJCQkJICBxdWVyeUVu dik7CisKKwkvKiBGaW5kIGFueSBkYXRhIHBncGFfcGxhbm5lcl9zaHV0ZG93biBzdGFzaGVkIGlu IHRoZSBQbGFubmVkU3RtdC4gKi8KKwlwZ3BhX2l0ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFt ZShwbGFubmVkc3RtdC0+ZXh0ZW5zaW9uX3N0YXRlLAorCQkJCQkJCQkJCSJwZ19wbGFuX2Fkdmlj ZSIpOworCXBncGFfbGlzdCA9IHBncGFfaXRlbSA9PSBOVUxMID8gTlVMTCA6IChMaXN0ICopIHBn cGFfaXRlbS0+YXJnOworCisJLyoKKwkgKiBCeSBkZWZhdWx0LCBpZiB0aGVyZSBpcyBhIHJlY29y ZCBvZiBhdHRlbXB0aW5nIHRvIGFwcGx5IGFkdmljZSBkdXJpbmcKKwkgKiBxdWVyeSBwbGFubmlu Zywgd2UgYWx3YXlzIG91dHB1dCB0aGF0IGluZm9ybWF0aW9uLCBidXQgdGhlIHVzZXIgY2FuIHNl dAorCSAqIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IGZh bHNlIHRvIHN1cHByZXNzIHRoYXQKKwkgKiBiZWhhdmlvci4gSWYgdGhleSBkbywgd2UnbGwgb25s eSBkaXNwbGF5IGl0IHdoZW4gdGhlIFBMQU5fQURWSUNFIG9wdGlvbgorCSAqIHdhcyBzcGVjaWZp ZWQgYW5kIG5vdCBzZXQgdG8gZmFsc2UuCisJICoKKwkgKiBOQjogSWYgd2UncmUgZXhwbGFpbmlu ZyBhIHF1ZXJ5IHBsYW5uZWQgYmVmb3JlaGFuZCAtLSBpLmUuIGEgcHJlcGFyZWQKKwkgKiBzdGF0 ZW1lbnQgLS0gdGhlIGFwcGxpY2F0aW9uIG9mIHF1ZXJ5IGFkdmljZSBtYXkgbm90IGhhdmUgYmVl bgorCSAqIHJlY29yZGVkLCBhbmQgdGhlcmVmb3JlIHRoaXMgd29uJ3QgYmUgYWJsZSB0byBzaG93 IGFueXRoaW5nLgorCSAqLworCWlmIChwZ3BhX2xpc3QgIT0gTlVMTCAmJiAocGdfcGxhbl9hZHZp Y2VfYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlIHx8CisJCQkJCQkJICAocGxhbl9hZHZp Y2UgIT0gTlVMTCAmJiAqcGxhbl9hZHZpY2UpKSkKKwl7CisJCURlZkVsZW0gICAgKmZlZWRiYWNr OworCisJCWZlZWRiYWNrID0gZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUocGdwYV9saXN0LCAiZmVl ZGJhY2siKTsKKwkJaWYgKGZlZWRiYWNrICE9IE5VTEwpCisJCQlwZ19wbGFuX2FkdmljZV9leHBs YWluX2ZlZWRiYWNrKGVzLCAoTGlzdCAqKSBmZWVkYmFjay0+YXJnKTsKKwl9CisKKwkvKgorCSAq IElmIHRoZSBQTEFOX0FEVklDRSBvcHRpb24gd2FzIHNwZWNpZmllZCAtLSBhbmQgbm90IHNlbnQg dG8gRkFMU0UgLS0KKwkgKiBzaG93IGdlbmVyYXRlZCBhZHZpY2UuCisJICovCisJaWYgKHBsYW5f YWR2aWNlICE9IE5VTEwgJiYgKnBsYW5fYWR2aWNlKQorCXsKKwkJRGVmRWxlbSAgICAqYWR2aWNl X3N0cmluZ19pdGVtOworCQljaGFyCSAgICphZHZpY2Vfc3RyaW5nOworCisJCWFkdmljZV9zdHJp bmdfaXRlbSA9CisJCQlmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwZ3BhX2xpc3QsICJhZHZpY2Vf c3RyaW5nIik7CisJCWlmIChhZHZpY2Vfc3RyaW5nX2l0ZW0gIT0gTlVMTCkKKwkJeworCQkJLyog QWR2aWNlIGhhcyBhbHJlYWR5IGJlZW4gZ2VuZXJhdGVkOyB3ZSBjYW4gcmV1c2UgaXQuICovCisJ CQlhZHZpY2Vfc3RyaW5nID0gc3RyVmFsKGFkdmljZV9zdHJpbmdfaXRlbS0+YXJnKTsKKwkJfQor CQllbHNlCisJCXsKKwkJCXBncGFfcGxhbl93YWxrZXJfY29udGV4dCB3YWxrZXI7CisJCQlTdHJp bmdJbmZvRGF0YSBidWY7CisJCQlwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzOworCisJ CQkvKiBBZHZpY2Ugbm90IHlldCBnZW5lcmF0ZWQ7IGRvIHRoYXQgbm93LiAqLworCQkJcGdwYV9w bGFuX3dhbGtlcigmd2Fsa2VyLCBwbGFubmVkc3RtdCk7CisJCQlydF9pZGVudGlmaWVycyA9CisJ CQkJcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChwbGFubmVkc3RtdCk7 CisJCQlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwkJCXBncGFfb3V0cHV0X2FkdmljZSgmYnVmLCAm d2Fsa2VyLCBydF9pZGVudGlmaWVycyk7CisJCQlhZHZpY2Vfc3RyaW5nID0gYnVmLmRhdGE7CisJ CX0KKworCQlpZiAoYWR2aWNlX3N0cmluZ1swXSAhPSAnXDAnKQorCQkJcGdfcGxhbl9hZHZpY2Vf ZXhwbGFpbl90ZXh0X211bHRpbGluZShlcywgIkdlbmVyYXRlZCBQbGFuIEFkdmljZSIsCisJCQkJ CQkJCQkJCQkgIGFkdmljZV9zdHJpbmcpOworCX0KK30KKworLyoKKyAqIENoZWNrIGhvb2sgZm9y IHBnX3BsYW5fYWR2aWNlLmFkdmljZQorICovCitzdGF0aWMgYm9vbAorcGdfcGxhbl9hZHZpY2Vf YWR2aWNlX2NoZWNrX2hvb2soY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ug c291cmNlKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlNZW1vcnlDb250ZXh0IHRt cGNvbnRleHQ7CisJY2hhcgkgICAqZXJyb3I7CisKKwlpZiAoKm5ld3ZhbCA9PSBOVUxMKQorCQly ZXR1cm4gdHJ1ZTsKKworCXRtcGNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVu dE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkgICAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIiwKKwkJ CQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCW9sZGNvbnRleHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8odG1wY29udGV4dCk7CisKKwkvKgorCSAqIEl0IHdvdWxkIGJlIG5pY2Ug dG8gc2F2ZSB0aGUgcGFyc2UgdHJlZSB0aGF0IHdlIGNvbnN0cnVjdCBoZXJlIGZvcgorCSAqIGV2 ZW50dWFsIHVzZSB3aGVuIHBsYW5uaW5nIHdpdGggdGhpcyBhZHZpY2UsIGJ1dCAqZXh0cmEgY2Fu IG9ubHkgcG9pbnQKKwkgKiB0byBhIHNpbmdsZSBndWNfbWFsbG9jJ2QgY2h1bmssIGFuZCBvdXIg cGFyc2UgdHJlZSBpbnZvbHZlcyBhbgorCSAqIGFyYml0cmFyeSBudW1iZXIgb2YgbWVtb3J5IGFs bG9jYXRpb25zLgorCSAqLworCSh2b2lkKSBwZ3BhX3BhcnNlKCpuZXd2YWwsICZlcnJvcik7CisK KwlpZiAoZXJyb3IgIT0gTlVMTCkKKwl7CisJCUdVQ19jaGVja19lcnJkZXRhaWwoIkNvdWxkIG5v dCBwYXJzZSBhZHZpY2U6ICVzIiwgZXJyb3IpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCU1lbW9yeUNvbnRleHREZWxldGUodG1w Y29udGV4dCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFNlYXJjaCBhIGxpc3Qgb2Yg RGVmRWxlbSBvYmplY3RzIGZvciBhIGdpdmVuIGRlZm5hbWUuCisgKi8KK3N0YXRpYyBEZWZFbGVt ICoKK2ZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExpc3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5hbWUp Cit7CisJZm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0ZW0sIGRlZmxpc3QpCisJeworCQlpZiAoc3Ry Y21wKGl0ZW0tPmRlZm5hbWUsIGRlZm5hbWUpID09IDApCisJCQlyZXR1cm4gaXRlbTsKKwl9CisK KwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdf cGxhbl9hZHZpY2UuY29udHJvbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZp Y2UuY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWE2ZmRj OWU3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5f YWR2aWNlLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHBnX3BsYW5fYWR2aWNlIGV4dGVuc2lv bgorY29tbWVudCA9ICdoZWxwIHRoZSBwbGFubmVyIGdldCB0aGUgcmlnaHQgcGxhbicKK2RlZmF1 bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9wZ19wbGFuX2Fk dmljZScKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ19wbGFuX2FkdmljZS5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2Fk dmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NmVmYjNiNjEx MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZp Y2UuaApAQCAtMCwwICsxLDM3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19wbGFu X2FkdmljZS5oCisgKgkgIG1haW4gaGVhZGVyIGZpbGUgZm9yIHBnX3BsYW5fYWR2aWNlIGNvbnRy aWIgbW9kdWxlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn X3BsYW5fYWR2aWNlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19Q TEFOX0FEVklDRV9ICisjZGVmaW5lIFBHX1BMQU5fQURWSUNFX0gKKworI2luY2x1ZGUgIm5vZGVz L3BsYW5ub2Rlcy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRp bHMvZHNhLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfc2hhcmVkX3N0YXRlCit7CisJTFdMb2Nr CQlsb2NrOworCWludAkJCWRzYV90cmFuY2hlOworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2FfcG9p bnRlciBzaGFyZWRfY29sbGVjdG9yOworfSBwZ3BhX3NoYXJlZF9zdGF0ZTsKKworLyogR1VDIHZh cmlhYmxlcyAqLworZXh0ZXJuIGludAlwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xp bWl0OworZXh0ZXJuIGludAlwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdDsK K2V4dGVybiBjaGFyICpwZ19wbGFuX2FkdmljZV9hZHZpY2U7CisKKy8qIEZ1bmN0aW9uIHByb3Rv dHlwZXMgKi8KK2V4dGVybiBNZW1vcnlDb250ZXh0IHBnX3BsYW5fYWR2aWNlX2dldF9tY3h0KHZv aWQpOworZXh0ZXJuIHBncGFfc2hhcmVkX3N0YXRlICpwZ19wbGFuX2FkdmljZV9hdHRhY2godm9p ZCk7CitleHRlcm4gZHNhX2FyZWEgKnBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKHZvaWQpOworCisj ZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uZWQxODk1MGFmMTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKQEAgLTAsMCArMSw2NDcgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIHBncGFfYXN0LmMKKyAqCSAgYWRkaXRpb25hbCBzdXBwb3J0aW5nIGNvZGUg cmVsYXRlZCB0byBwbGFuIGFkdmljZSBwYXJzaW5nCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2 LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisKKyNp bmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKKyNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgorCitQR19GVU5DVElPTl9JTkZPX1YxKHBnX3BhcnNlX2FkdmljZSk7 CisKKyNkZWZpbmUgUEdfUEFSU0VfQURWSUNFX0NPTFVNTlMJOAorCitzdGF0aWMgdm9pZCBwZ3Bh X2Rlc2NyaWJlX3RhcmdldChSZXR1cm5TZXRJbmZvICpyc2luZm8sCisJCQkJCQkJCSBwZ3BhX2Fk dmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkJIGludCBwYXRoX2xlbmd0aCwgRGF0dW0gKnBh dGhfZGF0dW1zKTsKK3N0YXRpYyB2b2lkIHBncGFfZGVzY3JpYmVfaW5kZXgoUmV0dXJuU2V0SW5m byAqcnNpbmZvLAorCQkJCQkJCQlwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCwKKwkJCQkJCQkJ aW50IHBhdGhfbGVuZ3RoLCBEYXR1bSAqcGF0aF9kYXR1bXMpOworCitzdGF0aWMgYm9vbCBwZ3Bh X2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlk cywKKwkJCQkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJCQkJCSAg Ym9vbCAqcmlkc191c2VkKTsKKworLyoKKyAqIFBhcnNlIGEgdXNlci1wcm92aWRlZCBhZHZpY2Ug c3RyaW5nLgorICoKKyAqIElmIHBhcnNpbmcgaXMgc3VjY2Vzc2Z1bCwgcmV0dXJucyBhIHJlcHJl c2VudGF0aW9uIG9mIHRoZSByZXN1bHRpbmcgc3ludGF4CisgKiB0cmVlLgorICovCitEYXR1bQor cGdfcGFyc2VfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4dAkgICAqYWR2aWNlX3N0 cmluZyA9IFBHX0dFVEFSR19URVhUX1BQKDApOworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChS ZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlMaXN0CSAgICphZHZpY2VfaXRl bXM7CisJY2hhcgkgICAqZXJyb3I7CisJaW50CQkJaXRlbV9jb3VudCA9IDA7CisKKwlJbml0TWF0 ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwkvKiBJbml0aWFsIHBhcnNpbmcuICovCisJYWR2 aWNlX2l0ZW1zID0gcGdwYV9wYXJzZSh0ZXh0X3RvX2NzdHJpbmcoYWR2aWNlX3N0cmluZyksICZl cnJvcik7CisJaWYgKGFkdmljZV9pdGVtcyA9PSBOVUxMKQorCXsKKwkJQXNzZXJ0KGVycm9yICE9 IE5VTEwpOworCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJS T1IpLAorCQkJCWVycm1zZygiY291bGQgbm90IHBhcnNlIHF1ZXJ5IGFkdmljZTogJXMiLCBlcnJv cikpOworCX0KKworCS8qIExvb3Agb3ZlciBhbGwgYWR2aWNlIGl0ZW1zLiAqLworCWZvcmVhY2hf cHRyKHBncGFfYWR2aWNlX2l0ZW0sIGl0ZW0sIGFkdmljZV9pdGVtcykKKwl7CisJCURhdHVtCQl2 YWx1ZXNbUEdfUEFSU0VfQURWSUNFX0NPTFVNTlNdOworCQlib29sCQludWxsc1tQR19QQVJTRV9B RFZJQ0VfQ09MVU1OU107CisJCURhdHVtCQlwYXRoX2RhdHVtc1syXTsKKwkJQXJyYXlUeXBlICAq cGF0aDsKKwkJaW50CQkJdGFyZ2V0X2NvdW50ID0gMDsKKworCQkvKiBFbWl0IGEgdG9wLWxldmVs IHJlY29yZCBmb3IgZWFjaCBhZHZpY2UgaXRlbS4gKi8KKwkJcGF0aF9kYXR1bXNbMF0gPSBJbnQz MkdldERhdHVtKCsraXRlbV9jb3VudCk7CisJCXBhdGggPSBjb25zdHJ1Y3RfYXJyYXlfYnVpbHRp bihwYXRoX2RhdHVtcywgMSwgSU5UNE9JRCk7CisJCXZhbHVlc1swXSA9IFBvaW50ZXJHZXREYXR1 bShwYXRoKTsKKwkJdmFsdWVzWzFdID0gQ1N0cmluZ0dldFRleHREYXR1bShwZ3BhX2NzdHJpbmdf YWR2aWNlX3RhZyhpdGVtLT50YWcpKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBQR19QQVJTRV9B RFZJQ0VfQ09MVU1OUzsgKytpKQorCQkJbnVsbHNbaV0gPSAoaSA+PSAyKTsKKwkJdHVwbGVzdG9y ZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkg dmFsdWVzLCBudWxscyk7CisKKwkJLyogUmVjdXJzaXZlbHkgZGVzY3JpYmUgdGFyZ2V0cyAoYW5k IGFueSBzdWJzdHJ1Y3R1cmUpLiAqLworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQs IHRhcmdldCwgaXRlbS0+dGFyZ2V0cykKKwkJeworCQkJcGF0aF9kYXR1bXNbMV0gPSBJbnQzMkdl dERhdHVtKCsrdGFyZ2V0X2NvdW50KTsKKwkJCXBncGFfZGVzY3JpYmVfdGFyZ2V0KHJzaW5mbywg dGFyZ2V0LCAyLCBwYXRoX2RhdHVtcyk7CisJCX0KKwl9CisKKwlyZXR1cm4gKERhdHVtKSAwOwor fQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lm aWVkIGFkdmljZSB0YWcuCisgKi8KK2NoYXIgKgorcGdwYV9jc3RyaW5nX2FkdmljZV90YWcocGdw YV9hZHZpY2VfdGFnX3R5cGUgYWR2aWNlX3RhZykKK3sKKwlzd2l0Y2ggKGFkdmljZV90YWcpCisJ eworCQljYXNlIFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU46CisJCQlyZXR1cm4gIkJJVE1BUF9I RUFQX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiAiRk9S RUlHTl9KT0lOIjsKKwkJY2FzZSBQR1BBX1RBR19HQVRIRVI6CisJCQlyZXR1cm4gIkdBVEhFUiI7 CisJCWNhc2UgUEdQQV9UQUdfR0FUSEVSX01FUkdFOgorCQkJcmV0dXJuICJHQVRIRVJfTUVSR0Ui OworCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoKKwkJCXJldHVybiAiSEFTSF9KT0lOIjsKKwkJ Y2FzZSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU46CisJCQlyZXR1cm4gIklOREVYX09OTFlfU0NB TiI7CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfU0NBTjoKKwkJCXJldHVybiAiSU5ERVhfU0NBTiI7 CisJCWNhc2UgUEdQQV9UQUdfSk9JTl9PUkRFUjoKKwkJCXJldHVybiAiSk9JTl9PUkRFUiI7CisJ CWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTUVSR0Vf Sk9JTl9NQVRFUklBTElaRSI7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJ CXJldHVybiAiTUVSR0VfSk9JTl9QTEFJTiI7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1Bf TUFURVJJQUxJWkU6CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX01BVEVSSUFMSVpFIjsKKwkJY2Fz ZSBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9N RU1PSVpFIjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiAi TkVTVEVEX0xPT1BfUExBSU4iOworCQljYXNlIFBHUEFfVEFHX05PX0dBVEhFUjoKKwkJCXJldHVy biAiTk9fR0FUSEVSIjsKKwkJY2FzZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJu ICJQQVJUSVRJT05XSVNFIjsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFOgor CQkJcmV0dXJuICJTRU1JSk9JTl9OT05fVU5JUVVFIjsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9J Tl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lOX1VOSVFVRSI7CisJCWNhc2UgUEdQQV9UQUdf U0VRX1NDQU46CisJCQlyZXR1cm4gIlNFUV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19USURfU0NB TjoKKwkJCXJldHVybiAiVElEX1NDQU4iOworCX0KKworCUFzc2VydChmYWxzZSk7Cit9CisKKy8q CisgKiBDb252ZXJ0IGFuIGFkdmljZSB0YWcsIGZvcm1hdHRlZCBhcyBhIHN0cmluZyB0aGF0IGhh cyBhbHJlYWR5IGJlZW4KKyAqIGRvd25jYXNlZCBhcyBhcHByb3ByaWF0ZSwgdG8gYSBwZ3BhX2Fk dmljZV90YWdfdHlwZS4KKyAqCisgKiBJZiB3ZSBzdWNjZWVkLCBzZXQgKmZhaWwgPSBmYWxzZSBh bmQgcmV0dXJuIHRoZSByZXN1bHQ7IGlmIHdlIGZhaWwsCisgKiBzZXQgKmZhaWwgPSB0cnVlIGFu ZCByZXVybiBhbiBhcmJpdHJhcnkgdmFsdWUuCisgKi8KK3BncGFfYWR2aWNlX3RhZ190eXBlCitw Z3BhX3BhcnNlX2FkdmljZV90YWcoY29uc3QgY2hhciAqdGFnLCBib29sICpmYWlsKQoreworCSpm YWlsID0gZmFsc2U7CisKKwlzd2l0Y2ggKHRhZ1swXSkKKwl7CisJCWNhc2UgJ2InOgorCQkJaWYg KHN0cmNtcCh0YWcsICJiaXRtYXBfaGVhcF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9U QUdfQklUTUFQX0hFQVBfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWlmIChzdHJj bXAodGFnLCAiZm9yZWlnbl9qb2luIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfRk9SRUlH Tl9KT0lOOworCQkJYnJlYWs7CisJCWNhc2UgJ2cnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJnYXRo ZXIiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19HQVRIRVI7CisJCQlpZiAoc3RyY21wKHRh ZywgImdhdGhlcl9tZXJnZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0dBVEhFUl9NRVJH RTsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiaGFzaF9qb2lu IikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSEFTSF9KT0lOOworCQkJYnJlYWs7CisJCWNh c2UgJ2knOgorCQkJaWYgKHN0cmNtcCh0YWcsICJpbmRleF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1 cm4gUEdQQV9UQUdfSU5ERVhfU0NBTjsKKwkJCWlmIChzdHJjbXAodGFnLCAiaW5kZXhfb25seV9z Y2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOworCQkJYnJl YWs7CisJCWNhc2UgJ2onOgorCQkJaWYgKHN0cmNtcCh0YWcsICJqb2luX29yZGVyIikgPT0gMCkK KwkJCQlyZXR1cm4gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoK KwkJCWlmIChzdHJjbXAodGFnLCAibWVyZ2Vfam9pbl9tYXRlcmlhbGl6ZSIpID09IDApCisJCQkJ cmV0dXJuIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU7CisJCQlpZiAoc3RyY21wKHRh ZywgIm1lcmdlX2pvaW5fcGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19NRVJHRV9K T0lOX1BMQUlOOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJaWYgKHN0cmNtcCh0YWcsICJu ZXN0ZWRfbG9vcF9tYXRlcmlhbGl6ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05FU1RF RF9MT09QX01BVEVSSUFMSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9tZW1v aXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRTsKKwkJ CWlmIChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfcGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQ R1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjsKKwkJCWlmIChzdHJjbXAodGFnLCAibm9fZ2F0aGVy IikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTk9fR0FUSEVSOworCQkJYnJlYWs7CisJCWNh c2UgJ3AnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJwYXJ0aXRpb253aXNlIikgPT0gMCkKKwkJCQly ZXR1cm4gUEdQQV9UQUdfUEFSVElUSU9OV0lTRTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJ CWlmIChzdHJjbXAodGFnLCAic2VtaWpvaW5fbm9uX3VuaXF1ZSIpID09IDApCisJCQkJcmV0dXJu IFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU7CisJCQlpZiAoc3RyY21wKHRhZywgInNlbWlq b2luX3VuaXF1ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRTsK KwkJCWlmIChzdHJjbXAodGFnLCAic2VxX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RB R19TRVFfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWlmIChzdHJjbXAodGFnLCAi dGlkX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19USURfU0NBTjsKKwkJCWJyZWFr OworCX0KKworCS8qIGRpZG4ndCB3b3JrIG91dCAqLworCSpmYWlsID0gdHJ1ZTsKKworCS8qIHJl dHVybiBhbiBhcmJpdHJhcnkgdmFsdWUgdG8gdW53aW5kIHRoZSBjYWxsIHN0YWNrICovCisJcmV0 dXJuIFBHUEFfVEFHX1NFUV9TQ0FOOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBw Z19wYXJzZV9hZHZpY2UsIHVzZWQgdG8gZGVzY3JpYmUgdG9wLWxldmVsIHRhcmdldHMKKyAqIGFu ZCBhbnkgbmVzdGVkIHRhcmdldHMuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2Rlc2NyaWJlX3Rh cmdldChSZXR1cm5TZXRJbmZvICpyc2luZm8sIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAor CQkJCQkgaW50IHBhdGhfbGVuZ3RoLCBEYXR1bSAqcGF0aF9kYXR1bXMpCit7CisJRGF0dW0JCXZh bHVlc1tQR19QQVJTRV9BRFZJQ0VfQ09MVU1OU107CisJYm9vbAkJbnVsbHNbUEdfUEFSU0VfQURW SUNFX0NPTFVNTlNdID0gezB9OworCUFycmF5VHlwZSAgKnBhdGg7CisJRGF0dW0JICAgKmNoaWxk X3BhdGhfZGF0dW1zOworCWludAkJCWNoaWxkX2NvdW50ID0gMDsKKworCS8qIFdlIGFsd2F5cyBo YXZlIGEgcGF0aCwgd2hpY2ggdGhlIGNhbGxlciBwcm92aWRlcy4gKi8KKwlwYXRoID0gY29uc3Ry dWN0X2FycmF5X2J1aWx0aW4ocGF0aF9kYXR1bXMsIHBhdGhfbGVuZ3RoLCBJTlQ0T0lEKTsKKwl2 YWx1ZXNbMF0gPSBQb2ludGVyR2V0RGF0dW0ocGF0aCk7CisKKwkvKiBPbmx5IGFkdmljZSBpdGVt cyBoYXZlIHRhZ3MsIG5vdCBpbmRpdmlkdWFsIHRhcmdldHMuICovCisJbnVsbHNbMV0gPSB0cnVl OworCisJLyogUHJlcGFyZSBwYXRoIGFycmF5IGZvciBhbnkgY2hpbGRyZW4gKi8KKwljaGlsZF9w YXRoX2RhdHVtcyA9IHBhbGxvYzBfYXJyYXkoRGF0dW0sIHBhdGhfbGVuZ3RoICsgMSk7CisJbWVt Y3B5KGNoaWxkX3BhdGhfZGF0dW1zLCBwYXRoX2RhdHVtcywgcGF0aF9sZW5ndGggKiBzaXplb2Yo RGF0dW0pKTsKKworCS8qIFJlbGF0aW9uIGlkZW50aWZpZXJzIHJlcXVpcmUgdmVyeSBkaWZmZXJl bnQgaGFuZGxpbmcgdnMuIHN1Ymxpc3RzLiAqLworCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFf VEFSR0VUX0lERU5USUZJRVIpCisJeworCQludWxsc1syXSA9IHRydWU7CisKKwkJLyogc2hvdWxk bid0IGV2ZXIgYmUgTlVMTCwgYnV0IGp1c3QgaW4gY2FzZSAqLworCQlpZiAodGFyZ2V0LT5yaWQu YWxpYXNfbmFtZSAhPSBOVUxMKQorCQkJdmFsdWVzWzNdID0gQ1N0cmluZ0dldFRleHREYXR1bSh0 YXJnZXQtPnJpZC5hbGlhc19uYW1lKTsKKwkJZWxzZQorCQkJbnVsbHNbM10gPSB0cnVlOworCisJ CS8qIGNhbid0IGJlIE5VTEwgKi8KKwkJdmFsdWVzWzRdID0gSW50MzJHZXREYXR1bSh0YXJnZXQt PnJpZC5vY2N1cnJlbmNlKTsKKworCQkvKiBjYW4gYmUgTlVMTCBpZiBub3QgYSBwYXJ0aXRpb24g b3Igbm8gc2NoZW1hIGdpdmVuICovCisJCWlmICh0YXJnZXQtPnJpZC5wYXJ0bnNwICE9IE5VTEwp CisJCQl2YWx1ZXNbNV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHRhcmdldC0+cmlkLnBhcnRuc3Ap OworCQllbHNlCisJCQludWxsc1s1XSA9IHRydWU7CisKKwkJLyogY2FuIGJlIE5VTEwgaWYgbm90 IGEgcGFydGl0aW9uICovCisJCWlmICh0YXJnZXQtPnJpZC5wYXJ0cmVsICE9IE5VTEwpCisJCQl2 YWx1ZXNbNl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHRhcmdldC0+cmlkLnBhcnRyZWwpOworCQll bHNlCisJCQludWxsc1s2XSA9IHRydWU7CisKKwkJLyogY2FuIGJlIE5VTEwgYXQgdG9wIHF1ZXJ5 IGxldmVsICovCisJCWlmICh0YXJnZXQtPnJpZC5wbGFuX25hbWUgIT0gTlVMTCkKKwkJCXZhbHVl c1s3XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0odGFyZ2V0LT5yaWQucGxhbl9uYW1lKTsKKwkJZWxz ZQorCQkJbnVsbHNbN10gPSB0cnVlOworCisJCS8qIG91dHB1dCB0aGUgcm93ICovCisJCXR1cGxl c3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsCisJCQkJ CQkJIHZhbHVlcywgbnVsbHMpOworCisJCS8qIHJlY3Vyc2UgaW50byBpbmRleCB0YXJnZXQgaWYg YW55ICovCisJCWlmICh0YXJnZXQtPml0YXJnZXQgIT0gTlVMTCkKKwkJeworCQkJY2hpbGRfcGF0 aF9kYXR1bXNbcGF0aF9sZW5ndGhdID0gSW50MzJHZXREYXR1bSgrK2NoaWxkX2NvdW50KTsKKwkJ CXBncGFfZGVzY3JpYmVfaW5kZXgocnNpbmZvLCB0YXJnZXQtPml0YXJnZXQsIHBhdGhfbGVuZ3Ro ICsgMSwKKwkJCQkJCQkJY2hpbGRfcGF0aF9kYXR1bXMpOworCQl9CisJfQorCWVsc2UKKwl7CisJ CS8qIG9wZXJhdGlvbiBpcyBhIGZ1bmN0aW9uIG9mIHRhcmdldCB0eXBlICovCisJCXN3aXRjaCAo dGFyZ2V0LT50dHlwZSkKKwkJeworCQkJY2FzZSBQR1BBX1RBUkdFVF9JREVOVElGSUVSOgorCQkJ CUFzc2VydChmYWxzZSk7CS8qIGhhbmRsZWQgYWJvdmUgKi8KKwkJCQl2YWx1ZXNbMl0gPSBDU3Ry aW5nR2V0VGV4dERhdHVtKCJCVUciKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUEdQQV9UQVJHRVRf T1JERVJFRF9MSVNUOgorCQkJCXZhbHVlc1syXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oIigpIik7 CisJCQkJYnJlYWs7CisJCQljYXNlIFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUOgorCQkJCXZh bHVlc1syXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oInt9Iik7CisJCQkJYnJlYWs7CisJCX0KKwor CQkvKiBldmVyeXRoaW5nIGJ1dCBwYXRoIGFuZCB0YXJnZXQgd2lsbCBiZSBudWxsICovCisJCWZv ciAoaW50IGkgPSAwOyBpIDwgUEdfUEFSU0VfQURWSUNFX0NPTFVNTlM7ICsraSkKKwkJCW51bGxz W2ldID0gKGkgIT0gMCAmJiBpICE9IDIpOworCisJCS8qIG91dHB1dCB0aGUgcm93ICovCisJCXR1 cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsCisJ CQkJCQkJIHZhbHVlcywgbnVsbHMpOworCisJCS8qIHJlY3Vyc2UgaW50byBjaGlsZCB0YXJnZXRz ICovCisJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJn ZXQtPmNoaWxkcmVuKQorCQl7CisJCQljaGlsZF9wYXRoX2RhdHVtc1twYXRoX2xlbmd0aF0gPSBJ bnQzMkdldERhdHVtKCsrY2hpbGRfY291bnQpOworCQkJcGdwYV9kZXNjcmliZV90YXJnZXQocnNp bmZvLCBjaGlsZF90YXJnZXQsIHBhdGhfbGVuZ3RoICsgMSwKKwkJCQkJCQkJIGNoaWxkX3BhdGhf ZGF0dW1zKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgcGdfcGFy c2VfYWR2aWNlLCB1c2VkIHRvIGRlc2NyaWJlIGluZGV4IHRhcmdldHMuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3BhX2Rlc2NyaWJlX2luZGV4KFJldHVyblNldEluZm8gKnJzaW5mbywgcGdwYV9pbmRl eF90YXJnZXQgKml0YXJnZXQsCisJCQkJCWludCBwYXRoX2xlbmd0aCwgRGF0dW0gKnBhdGhfZGF0 dW1zKQoreworCURhdHVtCQl2YWx1ZXNbUEdfUEFSU0VfQURWSUNFX0NPTFVNTlNdOworCWJvb2wJ CW51bGxzW1BHX1BBUlNFX0FEVklDRV9DT0xVTU5TXSA9IHswfTsKKwlBcnJheVR5cGUgICpwYXRo OworCisJLyogV2UgYWx3YXlzIGhhdmUgYSBwYXRoLCB3aGljaCB0aGUgY2FsbGVyIHByb3ZpZGVz LiAqLworCXBhdGggPSBjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihwYXRoX2RhdHVtcywgcGF0aF9s ZW5ndGgsIElOVDRPSUQpOworCXZhbHVlc1swXSA9IFBvaW50ZXJHZXREYXR1bShwYXRoKTsKKwor CS8qIE9ubHkgYWR2aWNlIGl0ZW1zIGhhdmUgdGFncywgbm90IGluZGl2aWR1YWwgdGFyZ2V0cy4g Ki8KKwludWxsc1sxXSA9IHRydWU7CisKKwkvKiBSZWxhdGlvbiBpZGVudGlmaWVycyByZXF1aXJl IHZlcnkgZGlmZmVyZW50IGhhbmRsaW5nIHZzLiBzdWJsaXN0cy4gKi8KKwlpZiAoaXRhcmdldC0+ aXR5cGUgPT0gUEdQQV9JTkRFWF9OQU1FKQorCXsKKwkJLyogb3BlcmF0b3IsIGFsaWFzX25hbWUs IGFuZCBvY2N1cmVuY2UgbnVtYmVyIGFyZSBudWxsICovCisJCW51bGxzWzJdID0gdHJ1ZTsKKwkJ bnVsbHNbM10gPSB0cnVlOworCQludWxsc1s0XSA9IHRydWU7CisKKwkJLyogaW5kbmFtZXNwYWNl IG1pZ2h0IGJlIE5VTEwgKi8KKwkJaWYgKGl0YXJnZXQtPmluZG5hbWVzcGFjZSAhPSBOVUxMKQor CQkJdmFsdWVzWzVdID0gQ1N0cmluZ0dldFRleHREYXR1bShpdGFyZ2V0LT5pbmRuYW1lc3BhY2Up OworCQllbHNlCisJCQludWxsc1s1XSA9IHRydWU7CisKKwkJLyogaW5kbmFtZSBzaG91bGQgbmV2 ZXIgYmUgTlVMTCAqLworCQl2YWx1ZXNbNl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGl0YXJnZXQt PmluZG5hbWUpOworCisJCS8qIHBsYW5fbmFtZSBpcyBOVUxMICovCisJCW51bGxzWzddID0gdHJ1 ZTsKKworCQkvKiBvdXRwdXQgdGhlIHJvdyAqLworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2lu Zm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLAorCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsK Kwl9CisJZWxzZQorCXsKKwkJRGF0dW0JICAgKmNoaWxkX3BhdGhfZGF0dW1zOworCQlpbnQJCQlj aGlsZF9jb3VudCA9IDA7CisKKwkJLyogb3BlcmF0aW9uIGlzIGEgZnVuY3Rpb24gb2YgdGFyZ2V0 IHR5cGUgKi8KKwkJc3dpdGNoIChpdGFyZ2V0LT5pdHlwZSkKKwkJeworCQkJY2FzZSBQR1BBX0lO REVYX05BTUU6CisJCQkJQXNzZXJ0KGZhbHNlKTsJLyogaGFuZGxlZCBhYm92ZSAqLworCQkJCXZh bHVlc1syXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oIkJVRyIpOworCQkJCWJyZWFrOworCQkJY2Fz ZSBQR1BBX0lOREVYX0FORDoKKwkJCQl2YWx1ZXNbMl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKCIm JiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBQR1BBX0lOREVYX09SOgorCQkJCXZhbHVlc1syXSA9 IENTdHJpbmdHZXRUZXh0RGF0dW0oInx8Iik7CisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBldmVy eXRoaW5nIGJ1dCBwYXRoIGFuZCB0YXJnZXQgd2lsbCBiZSBudWxsICovCisJCWZvciAoaW50IGkg PSAwOyBpIDwgUEdfUEFSU0VfQURWSUNFX0NPTFVNTlM7ICsraSkKKwkJCW51bGxzW2ldID0gKGkg IT0gMCAmJiBpICE9IDIpOworCisJCS8qIG91dHB1dCB0aGUgcm93ICovCisJCXR1cGxlc3RvcmVf cHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsCisJCQkJCQkJIHZh bHVlcywgbnVsbHMpOworCisJCS8qIHByZXBhcmUgcGF0aCBhcnJheSBmb3IgY2hpbGRyZW4gKi8K KwkJY2hpbGRfcGF0aF9kYXR1bXMgPSBwYWxsb2MwX2FycmF5KERhdHVtLCBwYXRoX2xlbmd0aCAr IDEpOworCQltZW1jcHkoY2hpbGRfcGF0aF9kYXR1bXMsIHBhdGhfZGF0dW1zLCBwYXRoX2xlbmd0 aCAqIHNpemVvZihEYXR1bSkpOworCisJCS8qIG5vdyByZWN1cnNlIGludG8gY2hpbGRyZW4gKi8K KwkJZm9yZWFjaF9wdHIocGdwYV9pbmRleF90YXJnZXQsIGNoaWxkX3RhcmdldCwgaXRhcmdldC0+ Y2hpbGRyZW4pCisJCXsKKwkJCWNoaWxkX3BhdGhfZGF0dW1zW3BhdGhfbGVuZ3RoXSA9IEludDMy R2V0RGF0dW0oKytjaGlsZF9jb3VudCk7CisJCQlwZ3BhX2Rlc2NyaWJlX2luZGV4KHJzaW5mbywg Y2hpbGRfdGFyZ2V0LCBwYXRoX2xlbmd0aCArIDEsCisJCQkJCQkJCWNoaWxkX3BhdGhfZGF0dW1z KTsKKwkJfQorCX0KK30KKworLyoKKyAqIEZvcm1hdCBhIHBncGFfYWR2aWNlX3RhcmdldCBhcyBh IHN0cmluZyBhbmQgYXBwZW5kIHJlc3VsdCB0byBhIFN0cmluZ0luZm8uCisgKi8KK3ZvaWQKK3Bn cGFfZm9ybWF0X2FkdmljZV90YXJnZXQoU3RyaW5nSW5mbyBzdHIsIHBncGFfYWR2aWNlX3Rhcmdl dCAqdGFyZ2V0KQoreworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJ RVIpCisJeworCQlib29sCQlmaXJzdCA9IHRydWU7CisJCWNoYXIJICAgKmRlbGltczsKKworCQlp ZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVCkKKwkJCWRlbGlt cyA9ICJ7fSI7CisJCWVsc2UKKwkJCWRlbGltcyA9ICIoKSI7CisKKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoc3RyLCBkZWxpbXNbMF0pOworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQs IGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKGZpcnN0KQorCQkJ CWZpcnN0ID0gZmFsc2U7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCAn ICcpOworCQkJcGdwYV9mb3JtYXRfYWR2aWNlX3RhcmdldChzdHIsIGNoaWxkX3RhcmdldCk7CisJ CX0KKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCBkZWxpbXNbMV0pOworCX0KKwllbHNlCisJ eworCQljb25zdCBjaGFyICpydF9pZGVudGlmaWVyOworCisJCXJ0X2lkZW50aWZpZXIgPSBwZ3Bh X2lkZW50aWZpZXJfc3RyaW5nKCZ0YXJnZXQtPnJpZCk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoc3RyLCBydF9pZGVudGlmaWVyKTsKKwl9Cit9CisKKy8qCisgKiBGb3JtYXQgYSBwZ3BhX2lu ZGV4X3RhcmdldCBhcyBhIHN0cmluZyBhbmQgYXBwZW5kIHJlc3VsdCB0byBhIFN0cmluZ0luZm8u CisgKi8KK3ZvaWQKK3BncGFfZm9ybWF0X2luZGV4X3RhcmdldChTdHJpbmdJbmZvIHN0ciwgcGdw YV9pbmRleF90YXJnZXQgKml0YXJnZXQpCit7CisJaWYgKGl0YXJnZXQtPml0eXBlICE9IFBHUEFf SU5ERVhfTkFNRSkKKwl7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCQlpZiAoaXRhcmdldC0+ aXR5cGUgPT0gUEdQQV9JTkRFWF9BTkQpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwg IiYmKCIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgInx8KCIpOwor CisJCWZvcmVhY2hfcHRyKHBncGFfaW5kZXhfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIGl0YXJnZXQt PmNoaWxkcmVuKQorCQl7CisJCQlpZiAoZmlyc3QpCisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWVs c2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsICcgJyk7CisJCQlwZ3BhX2Zvcm1hdF9p bmRleF90YXJnZXQoc3RyLCBjaGlsZF90YXJnZXQpOworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9D aGFyKHN0ciwgJyknKTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGl0YXJnZXQtPmluZG5hbWVzcGFj ZSAhPSBOVUxMKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhzdHIsICIlcy4iLAorCQkJCQkJCSBxdW90 ZV9pZGVudGlmaWVyKGl0YXJnZXQtPmluZG5hbWVzcGFjZSkpOworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKHN0ciwgcXVvdGVfaWRlbnRpZmllcihpdGFyZ2V0LT5pbmRuYW1lKSk7CisJfQorfQor CisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdHdvIHBncGFfaW5kZXhfdGFyZ2V0IG9iamVjdHMg YXJlIGV4YWN0bHkgaWRlbnRpY2FsLgorICovCitib29sCitwZ3BhX2luZGV4X3RhcmdldHNfZXF1 YWwocGdwYV9pbmRleF90YXJnZXQgKmkxLCBwZ3BhX2luZGV4X3RhcmdldCAqaTIpCit7CisJaWYg KGkxLT5pdHlwZSAhPSBpMi0+aXR5cGUpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChpMS0+aXR5 cGUgPT0gUEdQQV9JTkRFWF9OQU1FKQorCXsKKwkJLyogaW5kbmFtZXNwYWNlIGNhbiBiZSBOVUxM LCBhbmQgdHdvIE5VTEwgdmFsdWVzIGFyZSBlcXVhbCAqLworCQlpZiAoKGkxLT5pbmRuYW1lc3Bh Y2UgIT0gTlVMTCB8fCBpMi0+aW5kbmFtZXNwYWNlICE9IE5VTEwpICYmCisJCQkoaTEtPmluZG5h bWVzcGFjZSA9PSBOVUxMIHx8IGkyLT5pbmRuYW1lc3BhY2UgPT0gTlVMTCB8fAorCQkJIHN0cmNt cChpMS0+aW5kbmFtZXNwYWNlLCBpMi0+aW5kbmFtZXNwYWNlKSAhPSAwKSkKKwkJCXJldHVybiBm YWxzZTsKKwkJaWYgKHN0cmNtcChpMS0+aW5kbmFtZSwgaTItPmluZG5hbWUpICE9IDApCisJCQly ZXR1cm4gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCWludAkJCWkxX2xlbmd0aCA9IGxpc3RfbGVu Z3RoKGkxLT5jaGlsZHJlbik7CisKKwkJaWYgKGkxX2xlbmd0aCAhPSBsaXN0X2xlbmd0aChpMi0+ Y2hpbGRyZW4pKQorCQkJcmV0dXJuIGZhbHNlOworCQlmb3IgKGludCBuID0gMDsgbiA8IGkxX2xl bmd0aDsgKytuKQorCQl7CisJCQlwZ3BhX2luZGV4X3RhcmdldCAqYzEgPSBsaXN0X250aChpMS0+ Y2hpbGRyZW4sIG4pOworCQkJcGdwYV9pbmRleF90YXJnZXQgKmMyID0gbGlzdF9udGgoaTItPmNo aWxkcmVuLCBuKTsKKworCQkJaWYgKCFwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwoYzEsIGMyKSkK KwkJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAq IENoZWNrIHdoZXRoZXIgYW4gaWRlbnRpZmllciBtYXRjaGVzIGFuIGFueSBwYXJ0IG9mIGFuIGFk dmljZSB0YXJnZXQuCisgKi8KK2Jvb2wKK3BncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChw Z3BhX2lkZW50aWZpZXIgKnJpZCwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJLyog Rm9yIG5vbi1pZGVudGlmaWVycywgY2hlY2sgYWxsIGRlc2NlbmRlbnRzLiAqLworCWlmICh0YXJn ZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQlmb3JlYWNoX3B0cihw Z3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJewor CQkJaWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChyaWQsIGNoaWxkX3RhcmdldCkp CisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChzdHJj bXAocmlkLT5hbGlhc19uYW1lLCB0YXJnZXQtPnJpZC5hbGlhc19uYW1lKSAhPSAwKQorCQlyZXR1 cm4gZmFsc2U7CisJaWYgKHJpZC0+b2NjdXJyZW5jZSAhPSB0YXJnZXQtPnJpZC5vY2N1cnJlbmNl KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFRoZSBpZGVudGlmaWVyIG11c3Qgc3BlY2lm eSBhIHNjaGVtYSwgYnV0IHRoZSB0YXJnZXQgbWF5IGxlYXZlIHRoZQorCSAqIHNjaGVtYSBOVUxM IHRvIG1hdGNoIGFueXRoaW5nLgorCSAqLworCWlmICh0YXJnZXQtPnJpZC5wYXJ0bnNwICE9IE5V TEwgJiYKKwkJc3RyY21wKHJpZC0+cGFydG5zcCwgdGFyZ2V0LT5yaWQucGFydG5zcCkgIT0gMCkK KwkJcmV0dXJuIGZhbHNlOworCisKKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBjYW4gYmUgTlVMTCBv biBlaXRoZXIgc2lkZSwgYnV0IE5VTEwgb25seSBtYXRjaGVzIGFub3RoZXIKKwkgKiBOVUxMLgor CSAqLworCWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkLT5wYXJ0cmVsLCB0YXJn ZXQtPnJpZC5wYXJ0cmVsKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghc3RyaW5nc19lcXVhbF9v cl9ib3RoX251bGwocmlkLT5wbGFuX25hbWUsIHRhcmdldC0+cmlkLnBsYW5fbmFtZSkpCisJCXJl dHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogTWF0Y2ggaWRlbnRpZmll cnMgdG8gYWR2aWNlIHRhcmdldHMgYW5kIHJldHVybiBhbiBlbnVtIHZhbHVlIGluZGljYXRpbmcK KyAqIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgc2V0IG9mIGtleXMgYW5kIHRoZSBzZXQg b2YgdGFyZ2V0cy4KKyAqCisgKiBTZWUgdGhlIGNvbW1lbnRzIGZvciBwZ3BhX2l0bV90eXBlLgor ICovCitwZ3BhX2l0bV90eXBlCitwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbnQgbnJp ZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAq dGFyZ2V0KQoreworCWJvb2wJCWFsbF9yaWRzX3VzZWQgPSB0cnVlOworCWJvb2wJCWFueV9yaWRz X3VzZWQgPSBmYWxzZTsKKwlib29sCQlhbGxfdGFyZ2V0c191c2VkOworCWJvb2wJICAgKnJpZHNf dXNlZCA9IHBhbGxvYzBfYXJyYXkoYm9vbCwgbnJpZHMpOworCisJYWxsX3RhcmdldHNfdXNlZCA9 CisJCXBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KG5yaWRzLCByaWRzLCB0YXJnZXQsIHJp ZHNfdXNlZCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5yaWRzOyArK2kpCisJeworCQlpZiAo cmlkc191c2VkW2ldKQorCQkJYW55X3JpZHNfdXNlZCA9IHRydWU7CisJCWVsc2UKKwkJCWFsbF9y aWRzX3VzZWQgPSBmYWxzZTsKKwl9CisKKwlpZiAoYWxsX3JpZHNfdXNlZCkKKwl7CisJCWlmIChh bGxfdGFyZ2V0c191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX0VRVUFMOworCQllbHNlCisJCQly ZXR1cm4gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUOworCX0KKwllbHNlCisJeworCQlpZiAoYWxs X3RhcmdldHNfdXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQ7CisJ CWVsc2UgaWYgKGFueV9yaWRzX3VzZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1fSU5URVJTRUNUSU5H OworCQllbHNlCisJCQlyZXR1cm4gUEdQQV9JVE1fRElTSk9JTlQ7CisJfQorfQorCisvKgorICog UmV0dXJucyB0cnVlIGlmIGV2ZXJ5IHRhcmdldCBvciBzdWItdGFyZ2V0IGlzIG1hdGNoZWQgYnkg YXQgbGVhc3Qgb25lCisgKiBpZGVudGlmaWVyLCBhbmQgb3RoZXJ3aXNlIGZhbHNlLgorICoKKyAq IEFsc28gc2V0cyByaWRzX3VzZWRbaV0gPSB0cnVlIGZvciBlYWNoIGlkZW5pZmllciB0aGF0IG1h dGNoZXMgYXQgbGVhc3Qgb25lCisgKiB0YXJnZXQuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2lk ZW50aWZpZXJzX2NvdmVyX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywK KwkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LCBib29sICpyaWRzX3VzZWQpCit7 CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisKKwlpZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RB UkdFVF9JREVOVElGSUVSKQorCXsKKwkJcmVzdWx0ID0gdHJ1ZTsKKworCQlmb3JlYWNoX3B0cihw Z3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJewor CQkJaWYgKCFwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChucmlkcywgcmlkcywgY2hpbGRf dGFyZ2V0LAorCQkJCQkJCQkJCQkgICByaWRzX3VzZWQpKQorCQkJCXJlc3VsdCA9IGZhbHNlOwor CQl9CisJfQorCWVsc2UKKwl7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnJpZHM7ICsraSkKKwkJ eworCQkJaWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldCgmcmlkc1tpXSwgdGFyZ2V0 KSkKKwkJCXsKKwkJCQlyaWRzX3VzZWRbaV0gPSB0cnVlOworCQkJCXJlc3VsdCA9IHRydWU7CisJ CQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2Fz dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNmZlNzMwYTRkNAot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaApAQCAt MCwwICsxLDIwNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9hc3QuaAorICoJ ICBhYnN0cmFjdCBzeW50YXggdHJlZXMgZm9yIHBsYW4gYWR2aWNlLCBwbHVzIHBhcnNlci9zY2Fu bmVyIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9hc3QuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfQVNU X0gKKyNkZWZpbmUgUEdQQV9BU1RfSAorCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVyLmgiCisK KyNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisKKy8qCisgKiBBZHZpY2UgaXRlbXMgZ2VuZXJh bGx5IHRha2UgdGhlIGZvcm0gU09NRV9UQUcoaXRlbSBbLi4uXSksIHdoZXJlIGFuIGl0ZW0KKyAq IGNhbiB0YWtlIHZhcmlvdXMgZm9ybXMuIFRoZSBzaW1wbGVzdCBjYXNlIGlzIGEgcmVsYXRpb24g aWRlbnRpZmllciwgYnV0CisgKiBzb21lIHRhZ3MgYWxsb3cgc3VibGlzdHMsIGFuZCBKT0lOX09S REVSKCkgYWxsb3dzIGJvdGggb3JkZXJlZCBhbmQgdW5vcmRlcmVkCisgKiBzdWJsaXN0cy4KKyAq LwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9UQVJHRVRfSURFTlRJRklFUiwJCS8qIHJlbGF0aW9u IGlkZW50aWZpZXIgKi8KKwlQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QsCS8qIChpdGVtIC4uLikg Ki8KKwlQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVAkvKiB7aXRlbSAuLi59ICovCit9IHBncGFf dGFyZ2V0X3R5cGU7CisKKy8qCisgKiBXaGVuIGFuIGFkdmljZSBpdGVtIGRlc2NyaWJlcyBhIGJp dG1hcCBpbmRleCBzY2FuLCBpdCBtYXkgbmVlZCB0byBkZXNjcmliZQorICogdGhlIHVzZSBvZiBt dWx0aXBsZSBpbmRleGVzLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlQR1BBX0lOREVYX05BTUUs CQkJLyogaW5kZXggc2NoZW1hICsgbmFtZSAqLworCVBHUEFfSU5ERVhfQU5ELAkJCQkvKiAmJihp dGVtIC4uLikgKi8KKwlQR1BBX0lOREVYX09SCQkJCS8qIHx8KGl0ZW0gLi4uKSAqLworfSBwZ3Bh X2luZGV4X3R5cGU7CisKKy8qCisgKiBBbiBpbmRleCBzcGVjaWZpY2F0aW9uLiBXZSB1c2UgdGhp cyBmb3IgSU5ERVhfU0NBTiwgSU5ERVhfT05MWV9TQ0FOLAorICogYW5kIEJJVE1BUF9IRUFQX1ND QU4gYWR2aWNlLCBidXQgaW4gdGhlIGZvcm1lciB0d28gY2FzZXMsIHRoZSB0YXJnZXQgbXVzdAor ICogYmUgb2YgdHlwZSBQR1BBX0lOREVYX05BTUUuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFf aW5kZXhfdGFyZ2V0Cit7CisJcGdwYV9pbmRleF90eXBlIGl0eXBlOworCisJLyogSW5kZXggc2No ZW0gYW5kIG5hbWUsIHdoZW4gaXR5cGUgPT0gUEdQQV9JTkRFWF9OQU1FICovCisJY2hhcgkgICAq aW5kbmFtZXNwYWNlOworCWNoYXIJICAgKmluZG5hbWU7CisKKwkvKiBMaXN0IG9mIHBncGFfaW5k ZXhfdGFyZ2V0IG9iamVjdHMsIHdoZW4gaXR5cGUgIT0gUEdQQV9JTkRFWF9OQU1FICovCisJTGlz dAkgICAqY2hpbGRyZW47Cit9IHBncGFfaW5kZXhfdGFyZ2V0OworCisvKgorICogQSBzaW5nbGUg aXRlbSBhYm91dCB3aGljaCBhZHZpY2UgaXMgYmVpbmcgZ2l2ZW4sIHdoaWNoIGNvdWxkIGJlIGVp dGhlcgorICogYSByZWxhdGlvbiBpZGVudGlmaWVyIHRoYXQgd2Ugd2FudCB0byBicmVhayBvdXQg aW50byBpdHMgY29uc3RpdHVlbnQgZmllbGRzLAorICogb3IgYSBzdWJsaXN0IG9mIHNvbWUga2lu ZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9hZHZpY2VfdGFyZ2V0Cit7CisJcGdwYV90YXJn ZXRfdHlwZSB0dHlwZTsKKworCS8qCisJICogVGhpcyBmaWVsZCBpcyBtZWFuaW5nZnVsIHdoZW4g dHR5cGUgaXMgUEdQQV9UQVJHRVRfSURFTlRJRklFUi4KKwkgKgorCSAqIEFsbCBpZGVudGlmaWVy cyBtdXN0IGhhdmUgYW4gYWxpYXMgbmFtZSBhbmQgYW4gb2NjdXJyZW5jZSBudW1iZXI7IHRoZQor CSAqIHJlbWFpbmluZyBmaWVsZHMgY2FuIGJlIE5VTEwuIE5vdGUgdGhhdCBpdCdzIHBvc3NpYmxl IHRvIHNwZWNpZnkgYQorCSAqIHBhcnRpdGlvbiBuYW1lIHdpdGhvdXQgYSBwYXJ0aXRpb24gc2No ZW1hLCBidXQgbm90IHRoZSByZXZlcnNlLgorCSAqLworCXBncGFfaWRlbnRpZmllciByaWQ7CisK KwkvKgorCSAqIFRoaXMgZmllbGQgaXMgc2V0IHdoZW4gdHR5cGUgaXMgUFBHQV9UQVJHRVRfSURF TlRJRklFUiBhbmQgdGhlIGFkdmljZQorCSAqIHRhZyBpcyBQR1BBX1RBR19JTkRFWF9TQ0FOLCBQ R1BBX1RBR19JTkRFWF9PTkxZX1NDQU4sIG9yCisJICogUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NB Ti4KKwkgKi8KKwlwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldDsKKworCS8qCisJICogV2hlbiB0 aGUgdHR5cGUgaXMgUEdQQV9UQVJHRVRfPGFueXRoaW5nPl9MSVNULCB0aGlzIGZpZWxkIGNvbnRh aW5zIGEKKwkgKiBsaXN0IG9mIGFkZGl0aW9uYWwgcGdwYV9hZHZpY2VfdGFyZ2V0IG9iamVjdHMu IE90aGVyd2lzZSwgaXQgaXMgdW51c2VkLgorCSAqLworCUxpc3QJICAgKmNoaWxkcmVuOworfSBw Z3BhX2FkdmljZV90YXJnZXQ7CisKKy8qCisgKiBUaGVzZSBhcmUgYWxsIHRoZSBraW5kcyBvZiBh ZHZpY2UgdGhhdCB3ZSBrbm93IGhvdyB0byBwYXJzZS4gSWYgYSBrZXl3b3JkCisgKiBpcyBmb3Vu ZCBhdCB0aGUgdG9wIGxldmVsLCBpdCBtdXN0IGJlIGluIHRoaXMgbGlzdC4KKyAqCisgKiBJZiB5 b3UgY2hhbmdlIGFueXRoaW5nIGhlcmUsIGFsc28gdXBkYXRlIHBncGFfcGFyc2VfYWR2aWNlX3Rh ZyBhbmQKKyAqIHBncGFfY3N0cmluZ19hZHZpY2VfdGFnLgorICovCit0eXBlZGVmIGVudW0gcGdw YV9hZHZpY2VfdGFnX3R5cGUKK3sKKwlQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOLAorCVBHUEFf VEFHX0ZPUkVJR05fSk9JTiwKKwlQR1BBX1RBR19HQVRIRVIsCisJUEdQQV9UQUdfR0FUSEVSX01F UkdFLAorCVBHUEFfVEFHX0hBU0hfSk9JTiwKKwlQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU4sCisJ UEdQQV9UQUdfSU5ERVhfU0NBTiwKKwlQR1BBX1RBR19KT0lOX09SREVSLAorCVBHUEFfVEFHX01F UkdFX0pPSU5fTUFURVJJQUxJWkUsCisJUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTiwKKwlQR1BB X1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRSwKKwlQR1BBX1RBR19ORVNURURfTE9PUF9NRU1P SVpFLAorCVBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOLAorCVBHUEFfVEFHX05PX0dBVEhFUiwK KwlQR1BBX1RBR19QQVJUSVRJT05XSVNFLAorCVBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUUs CisJUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFLAorCVBHUEFfVEFHX1NFUV9TQ0FOLAorCVBHUEFf VEFHX1RJRF9TQ0FOCit9IHBncGFfYWR2aWNlX3RhZ190eXBlOworCisvKgorICogQW4gaXRlbSBv ZiBhZHZpY2UsIG1lYW5pbmcgYSB0YWcgYW5kIHRoZSBsaXN0IG9mIGFsbCB0YXJnZXRzIHRvIHdo aWNoCisgKiBpdCBpcyBiZWluZyBhcHBsaWVkLgorICoKKyAqICJ0YXJnZXRzIiBpcyBhIGxpc3Qg b2YgcGdwYV9hZHZpY2VfdGFyZ2V0IG9iamVjdHMuCisgKgorICogVGhlIExpc3QgcmV0dXJuZWQg ZnJvbSBwZ3BhX3l5cGFyc2UgaXMgbGlzdCBvZiBwZ3BhX2FkdmljZV9pdGVtIG9iamVjdHMuCisg Ki8KK3R5cGVkZWYgc3RydWN0IHBncGFfYWR2aWNlX2l0ZW0KK3sKKwlwZ3BhX2FkdmljZV90YWdf dHlwZSB0YWc7CisJTGlzdAkgICAqdGFyZ2V0czsKK30gcGdwYV9hZHZpY2VfaXRlbTsKKworLyoK KyAqIFJlc3VsdCBvZiBjb21wYXJpbmcgYW4gYXJyYXkgb2YgcGdwYV9yZWxhdGlvbl9pZGVudGlm aWVyIG9iamVjdHMgdG8gYQorICogcGdwYV9hZHZpY2VfdGFyZ2V0LgorICoKKyAqIFBHUEFfSVRN X0VRVUFMIG1lYW5zIGFsbCB0YXJnZXRzIGFyZSBtYXRjaGVkIGJ5IHNvbWUgaWRlbnRpZmllciwg YW5kCisgKiBhbGwgaWRlbnRpZmllcnMgd2VyZSBtYXRjaGVkIHRvIGEgdGFyZ2V0LgorICoKKyAq IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCBtZWFucyB0aGF0IGFsbCBpZGVudGlmaWVycyBtYXRj aGVkIHRvIGEgdGFyZ2V0LAorICogYnV0IHRoZXJlIHdlcmUgbGVmdG92ZXIgdGFyZ2V0cy4gR2Vu ZXJhbGx5LCB0aGlzIG1lYW5zIHRoYXQgdGhlIGFkdmljZSBpcworICogbG9va2luZyB0byBhcHBs eSB0byBhbGwgb2YgdGhlIHJlbHMgd2UgaGF2ZSBwbHVzIHNvbWUgYWRkaXRpb25hbCBvbmVzIHRo YXQKKyAqIHdlIGRvbid0IGhhdmUuCisgKgorICogUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VU IG1lYW5zIHRoYXQgYWxsIHRhcmdldHMgYXJlIG1hdGNoZWQgYnkgYW4KKyAqIGlkZW50aWZpZXJz LCBidXQgdGhlcmUgd2VyZSBsZWZ0b3ZlciBpZGVudGlmaWVycy4gR2VuZXJhbGx5LCB0aGlzIG1l YW5zCisgKiB0aGF0IHRoZSBhZHZpY2UgaXMgbG9va2luZyB0byBhcHBseSB0byBzb21lIGJ1dCBu b3QgYWxsIG9mIHRoZSByZWxzIHdlIGhhdmUuCisgKgorICogUEdQQV9JVE1fSU5URVJTRUNUSU5H IG1lYW5zIHRoYXQgc29tZSBpZGVudGlmZWlycyBhbmQgdGFyZ2V0cyB3ZXJlIG1hdGNoZWQsCisg KiBidXQgbmVpdGhlciBhbGwgaWRlbnRpZmllcnMgbm9yIGFsbCB0YXJnZXRzIGNvdWxkIGJlIG1h dGNoZWQgdG8gaXRlbXMgaW4KKyAqIHRoZSBvdGhlciBzZXQuCisgKgorICogUEdQQV9JVE1fRElT Sk9JTlQgbWVhbnMgdGhhdCBubyBtYXRjaGVzIGJldHdlZW4gaWRlbnRpZmVpcnMgYW5kIHRhcmdl dHMgd2VyZQorICogZm91bmQuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVBHUEFfSVRNX0VRVUFM LAorCVBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCwKKwlQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJT RVQsCisJUEdQQV9JVE1fSU5URVJTRUNUSU5HLAorCVBHUEFfSVRNX0RJU0pPSU5UCit9IHBncGFf aXRtX3R5cGU7CisKKy8qIGZvciBwZ3BhX3NjYW5uZXIubCBhbmQgcGdwYV9wYXJzZXIueSAqLwor dW5pb24gWVlTVFlQRTsKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNkZWZpbmUg WVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9pZCAqeXlzY2FuX3Q7CisjZW5kaWYK KworLyogaW4gcGdwYV9zY2FubmVyLmwgKi8KK2V4dGVybiBpbnQJcGdwYV95eWxleCh1bmlvbiBZ WVNUWVBFICp5eWx2YWxfcGFyYW0sIExpc3QgKipyZXN1bHQsCisJCQkJCSAgIGNoYXIgKipwYXJz ZV9lcnJvcl9tc2dfcCwgeXlzY2FuX3QgeXlzY2FubmVyKTsKK2V4dGVybiB2b2lkIHBncGFfeXll cnJvcihMaXN0ICoqcmVzdWx0LCBjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3AsCisJCQkJCQkgeXlz Y2FuX3QgeXlzY2FubmVyLAorCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZv aWQgcGdwYV9zY2FubmVyX2luaXQoY29uc3QgY2hhciAqc3RyLCB5eXNjYW5fdCAqeXlzY2FubmVy cCk7CitleHRlcm4gdm9pZCBwZ3BhX3NjYW5uZXJfZmluaXNoKHl5c2Nhbl90IHl5c2Nhbm5lcik7 CisKKy8qIGluIHBncGFfcGFyc2VyLnkgKi8KK2V4dGVybiBpbnQJcGdwYV95eXBhcnNlKExpc3Qg KipyZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwKKwkJCQkJCSB5eXNjYW5fdCB5eXNj YW5uZXIpOworZXh0ZXJuIExpc3QgKnBncGFfcGFyc2UoY29uc3QgY2hhciAqYWR2aWNlX3N0cmlu ZywgY2hhciAqKmVycm9yX3ApOworCisvKiBpbiBwZ3BhX2FzdC5jICovCitleHRlcm4gY2hhciAq cGdwYV9jc3RyaW5nX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgYWR2aWNlX3RhZyk7 CitleHRlcm4gYm9vbCBwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQocGdwYV9pZGVudGlm aWVyICpyaWQsCisJCQkJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworZXh0 ZXJuIHBncGFfaXRtX3R5cGUgcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQoaW50IG5yaWRz LAorCQkJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCQkJICAg cGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIGJvb2wgcGdwYV9pbmRleF90YXJn ZXRzX2VxdWFsKHBncGFfaW5kZXhfdGFyZ2V0ICppMSwKKwkJCQkJCQkJCSBwZ3BhX2luZGV4X3Rh cmdldCAqaTIpOworZXh0ZXJuIHBncGFfYWR2aWNlX3RhZ190eXBlIHBncGFfcGFyc2VfYWR2aWNl X3RhZyhjb25zdCBjaGFyICp0YWcsIGJvb2wgKmZhaWwpOworZXh0ZXJuIHZvaWQgcGdwYV9mb3Jt YXRfYWR2aWNlX3RhcmdldChTdHJpbmdJbmZvIHN0ciwKKwkJCQkJCQkJCSAgcGdwYV9hZHZpY2Vf dGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIHZvaWQgcGdwYV9mb3JtYXRfaW5kZXhfdGFyZ2V0KFN0 cmluZ0luZm8gc3RyLAorCQkJCQkJCQkJIHBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0KTsKKwor I2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9y LmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNmYTA0NWEwYjNjCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jCkBAIC0wLDAgKzEsNjI2 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2NvbGxlY3Rvci5jCisgKgkgIGNv bGxlY3QgYWR2aWNlIGludG8gYmFja2VuZC1sb2NhbCBvciBzaGFyZWQgbWVtb3J5CisgKgorICog Q29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2lu Y2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdwYV9jb2xsZWN0b3IuaCIKKwor I2luY2x1ZGUgImRhdGF0eXBlL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNp bmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisjaW5jbHVk ZSAidXRpbHMvYWNsLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1 dGlscy90aW1lc3RhbXAuaCIKKworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19jbGVhcl9jb2xsZWN0 ZWRfbG9jYWxfYWR2aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY2xlYXJfY29sbGVjdGVk X3NoYXJlZF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfY29sbGVjdGVkX2xv Y2FsX2FkdmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVk X2FkdmljZSk7CisKKyNkZWZpbmUgQURWSUNFX0NIVU5LX1NJWkUJCTEwMjQKKyNkZWZpbmUgQURW SUNFX0NIVU5LX0FSUkFZX1NJWkUJNjQKKworI2RlZmluZQlQR19HRVRfQURWSUNFX0NPTFVNTlMJ NworCisvKgorICogQWR2aWNlIGV4dHJhY3RlZCBmcm9tIG9uZSBxdWVyeSBwbGFuLCB0b2dldGhl ciB3aXRoIHRoZSBxdWVyeSBzdHJpbmcKKyAqIGFuZCB2YXJpb3VzIG90aGVyIGlkZW50aWZ5aW5n IGRldGFpbHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfY29sbGVjdGVkX2FkdmljZQorewor CU9pZAkJCXVzZXJpZDsJCQkvKiB1c2VyIE9JRCAqLworCU9pZAkJCWRiaWQ7CQkJLyogZGF0YWJh c2UgT0lEICovCisJdWludDY0CQlxdWVyeWlkOwkJLyogcXVlcnkgaWRlbnRpZmllciAqLworCVRp bWVzdGFtcFR6IHRpbWVzdGFtcDsJCS8qIHF1ZXJ5IHRpbWVzdGFtcCAqLworCWludAkJCWFkdmlj ZV9vZmZzZXQ7CS8qIHN0YXJ0IG9mIGFkdmljZSBpbiB0ZXh0dWFsIGRhdGEgKi8KKwljaGFyCQl0 ZXh0dWFsX2RhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30gcGdwYV9jb2xsZWN0ZWRfYWR2 aWNlOworCisvKgorICogQSBidW5jaCBvZiBwb2ludGVycyB0byBwZ3BhX2NvbGxlY3RlZF9hZHZp Y2Ugb2JqZWN0cywgc3RvcmVkIGluCisgKiBiYWNrZW5kLWxvY2FsIG1lbW9yeS4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsKK3sKKwlwZ3BhX2NvbGxlY3RlZF9h ZHZpY2UgKmVudHJpZXNbQURWSUNFX0NIVU5LX1NJWkVdOworfSBwZ3BhX2xvY2FsX2FkdmljZV9j aHVuazsKKworLyoKKyAqIEluZm9ybWF0aW9uIGFib3V0IGFsbCBvZiB0aGUgcGdwYV9jb2xsZWN0 ZWRfYWR2aWNlIG9iamVjdHMgdGhhdCB3ZSdyZQorICogc3RvcmluZyBpbiBsb2NhbCBtZW1vcnku CisgKgorICogV2UgYXNzaWduIGNvbnNlY3V0aXZlIElEcywgc3RhcnRpbmcgZnJvbSAwLCB0byBl YWNoIHBncGFfY29sbGVjdGVkX2FkdmljZQorICogb2JqZWN0IHRoYXQgd2Ugc3RvcmUuIFRoZSBh Y3R1YWwgc3RvcmFnZSBpcyBhbiBhcnJheSBvZiBjaHVua3MsIHdoaWNoCisgKiBoZWxwcyBrZWVw IG1lbWNweSgpIG92ZXJoZWFkIGxvdyB3aGVuIHdlIHN0YXJ0IGRpc2NhcmRpbmcgb2xkZXIgZGF0 YS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9sb2NhbF9hZHZpY2UKK3sKKwl1aW50NjQJCW5l eHRfaWQ7CisJdWludDY0CQlvbGRlc3RfaWQ7CisJdWludDY0CQliYXNlX2lkOworCWludAkJCWNo dW5rX2FycmF5X2FsbG9jYXRlZF9zaXplOworCXBncGFfbG9jYWxfYWR2aWNlX2NodW5rICoqY2h1 bmtzOworfSBwZ3BhX2xvY2FsX2FkdmljZTsKKworLyoKKyAqIEp1c3QgbGlrZSBwZ3BhX2xvY2Fs X2FkdmljZV9jaHVuaywgYnV0IHN0b3JlZCBpbiBhIGR5bmFtaWMgc2hhcmVkIGFyZWEsCisgKiBz byB3ZSBtdXN0IHVzZSBkc2FfcG9pbnRlciBpbnN0ZWFkIG9mIG5hdGl2ZSBwb2ludGVycy4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rCit7CisJZHNhX3BvaW50 ZXIgZW50cmllc1tBRFZJQ0VfQ0hVTktfU0laRV07Cit9IHBncGFfc2hhcmVkX2FkdmljZV9jaHVu azsKKworLyoKKyAqIEp1c3QgbGlrZSBwZ3BhX2xvY2FsX2FkdmljZSwgYnV0IHN0b3JlZCBpbiBh IGR5bmFtaWMgc2hhcmVkIGFyZWEsIHNvCisgKiB3ZSBtdXN0IHVzZSBkc2FfcG9pbnRlciBpbnN0 ZWFkIG9mIG5hdGl2ZSBwb2ludGVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zaGFyZWRf YWR2aWNlCit7CisJdWludDY0CQluZXh0X2lkOworCXVpbnQ2NAkJb2xkZXN0X2lkOworCXVpbnQ2 NAkJYmFzZV9pZDsKKwlpbnQJCQljaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZTsKKwlkc2FfcG9p bnRlciBjaHVua3M7Cit9IHBncGFfc2hhcmVkX2FkdmljZTsKKworLyogUG9pbnRlcnMgdG8gbG9j YWwgYW5kIHNoYXJlZCBjb2xsZWN0b3JzICovCitzdGF0aWMgcGdwYV9sb2NhbF9hZHZpY2UgKmxv Y2FsX2NvbGxlY3RvciA9IE5VTEw7CitzdGF0aWMgcGdwYV9zaGFyZWRfYWR2aWNlICpzaGFyZWRf Y29sbGVjdG9yID0gTlVMTDsKKworLyogU3RhdGljIGZ1bmN0aW9ucyAqLworc3RhdGljIHBncGFf Y29sbGVjdGVkX2FkdmljZSAqcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UoT2lkIHVzZXJpZCwK KwkJCQkJCQkJCQkJCQkJIE9pZCBkYmlkLAorCQkJCQkJCQkJCQkJCQkgdWludDY0IHF1ZXJ5SWQs CisJCQkJCQkJCQkJCQkJCSBUaW1lc3RhbXBUeiB0aW1lc3RhbXAsCisJCQkJCQkJCQkJCQkJCSBj b25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICphZHZp Y2Vfc3RyaW5nLAorCQkJCQkJCQkJCQkJCQkgZHNhX2FyZWEgKmFyZWEsCisJCQkJCQkJCQkJCQkJ CSBkc2FfcG9pbnRlciAqcmVzdWx0KTsKK3N0YXRpYyB2b2lkIHBncGFfc3RvcmVfbG9jYWxfYWR2 aWNlKHBncGFfY29sbGVjdGVkX2FkdmljZSAqY2EpOworc3RhdGljIHZvaWQgcGdwYV90cmltX2xv Y2FsX2FkdmljZShpbnQgbGltaXQpOworc3RhdGljIHZvaWQgcGdwYV9zdG9yZV9zaGFyZWRfYWR2 aWNlKGRzYV9wb2ludGVyIGNhX3BvaW50ZXIpOworc3RhdGljIHZvaWQgcGdwYV90cmltX3NoYXJl ZF9hZHZpY2UoZHNhX2FyZWEgKmFyZWEsIGludCBsaW1pdCk7CisKKy8qIEhlbHBlciBmdW5jdGlv biB0byBleHRyYWN0IHRoZSBxdWVyeSBzdHJpbmcgZnJvbSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2Ug Ki8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitxdWVyeV9zdHJpbmcocGdwYV9jb2xsZWN0 ZWRfYWR2aWNlICpjYSkKK3sKKwlyZXR1cm4gY2EtPnRleHR1YWxfZGF0YTsKK30KKworLyogSGVs cGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIGFkdmljZSBzdHJpbmcgZnJvbSBwZ3BhX2NvbGxl Y3RlZF9hZHZpY2UgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCithZHZpY2Vfc3RyaW5n KHBncGFfY29sbGVjdGVkX2FkdmljZSAqY2EpCit7CisJcmV0dXJuIGNhLT50ZXh0dWFsX2RhdGEg KyBjYS0+YWR2aWNlX29mZnNldDsKK30KKworLyoKKyAqIFN0b3JlIGNvbGxlY3RlZCBxdWVyeSBh ZHZpY2UgaW50byB0aGUgbG9jYWwgb3Igc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IsCisgKiBhcyBh cHByb3ByaWF0ZS4KKyAqLwordm9pZAorcGdwYV9jb2xsZWN0X2FkdmljZSh1aW50NjQgcXVlcnlJ ZCwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQljb25zdCBjaGFyICphZHZpY2Vfc3Ry aW5nKQoreworCU9pZAkJCXVzZXJpZCA9IEdldFVzZXJJZCgpOworCU9pZAkJCWRiaWQgPSBNeURh dGFiYXNlSWQ7CisJVGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCisJ aWYgKHBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQgPiAwKQorCXsKKwkJcGdw YV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJ CW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdfcGxhbl9hZHZpY2VfZ2V0X21j eHQoKSk7CisJCWNhID0gcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBx dWVyeUlkLCBub3csCisJCQkJCQkJCQkJcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nLAorCQkJ CQkJCQkJCU5VTEwsIE5VTEwpOworCQlwZ3BhX3N0b3JlX2xvY2FsX2FkdmljZShjYSk7CisJCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlpZiAocGdfcGxhbl9hZHZp Y2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQgPiAwKQorCXsKKwkJZHNhX2FyZWEgICAqYXJlYSA9 IHBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKCk7CisJCWRzYV9wb2ludGVyIGNhX3BvaW50ZXI7CisK KwkJcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlkLCBub3cs CisJCQkJCQkJCSAgIHF1ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZywgYXJlYSwKKwkJCQkJCQkJ ICAgJmNhX3BvaW50ZXIpOworCQlwZ3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoY2FfcG9pbnRlcik7 CisJfQorfQorCisvKgorICogQWxsb2NhdGUgYW5kIGZpbGwgYSBuZXcgcGdwYV9jb2xsZWN0ZWRf YWR2aWNlIG9iamVjdC4KKyAqCisgKiBJZiBhcmVhICE9IE5VTEwsIGl0IGlzIHVzZWQgdG8gYWxs b2NhdGUgdGhlIG5ldyBvYmplY3QsIGFuZCB0aGUgcmVzdWx0aW5nCisgKiBkc2FfcG9pbnRlciBp cyByZXR1cm5lZCB2aWEgKnJlc3VsdC4KKyAqCisgKiBJZiBhcmVhID09IE5VTEwsIHRoZSBuZXcg b2JqZWN0IGlzIGFsbG9jYXRlZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dCwKKyAqIGFu ZCByZXN1bHQgaXMgbm90IGV4YW1pbmVkIG9yIG1vZGlmaWVkLgorICovCitzdGF0aWMgcGdwYV9j b2xsZWN0ZWRfYWR2aWNlICoKK3BncGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKE9pZCB1c2VyaWQs IE9pZCBkYmlkLCB1aW50NjQgcXVlcnlJZCwKKwkJCQkJCSAgIFRpbWVzdGFtcFR6IHRpbWVzdGFt cCwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCSAgIGNvbnN0IGNo YXIgKmFkdmljZV9zdHJpbmcsCisJCQkJCQkgICBkc2FfYXJlYSAqYXJlYSwgZHNhX3BvaW50ZXIg KnJlc3VsdCkKK3sKKwlzaXplX3QJCXF1ZXJ5X3N0cmluZ19sZW5ndGggPSBzdHJsZW4ocXVlcnlf c3RyaW5nKSArIDE7CisJc2l6ZV90CQlhZHZpY2Vfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihhZHZp Y2Vfc3RyaW5nKSArIDE7CisJc2l6ZV90CQl0b3RhbF9sZW5ndGg7CisJcGdwYV9jb2xsZWN0ZWRf YWR2aWNlICpjYTsKKworCXRvdGFsX2xlbmd0aCA9IG9mZnNldG9mKHBncGFfY29sbGVjdGVkX2Fk dmljZSwgdGV4dHVhbF9kYXRhKQorCQkrIHF1ZXJ5X3N0cmluZ19sZW5ndGggKyBhZHZpY2Vfc3Ry aW5nX2xlbmd0aDsKKworCWlmIChhcmVhID09IE5VTEwpCisJCWNhID0gcGFsbG9jKHRvdGFsX2xl bmd0aCk7CisJZWxzZQorCXsKKwkJKnJlc3VsdCA9IGRzYV9hbGxvY2F0ZShhcmVhLCB0b3RhbF9s ZW5ndGgpOworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCAqcmVzdWx0KTsKKwl9CisKKwlj YS0+dXNlcmlkID0gR2V0VXNlcklkKCk7CisJY2EtPmRiaWQgPSBNeURhdGFiYXNlSWQ7CisJY2Et PnF1ZXJ5aWQgPSBxdWVyeUlkOworCWNhLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisJY2EtPmFk dmljZV9vZmZzZXQgPSBxdWVyeV9zdHJpbmdfbGVuZ3RoOworCisJbWVtY3B5KGNhLT50ZXh0dWFs X2RhdGEsIHF1ZXJ5X3N0cmluZywgcXVlcnlfc3RyaW5nX2xlbmd0aCk7CisJbWVtY3B5KCZjYS0+ dGV4dHVhbF9kYXRhW2NhLT5hZHZpY2Vfb2Zmc2V0XSwKKwkJICAgYWR2aWNlX3N0cmluZywgYWR2 aWNlX3N0cmluZ19sZW5ndGgpOworCisJcmV0dXJuIGNhOworfQorCisvKgorICogQWRkIGEgcGdf Y29sbGVjdGVkX2FkdmljZSBvYmplY3QgdG8gb3VyIGJhY2tlbmQtbG9jYWwgYWR2aWNlIGNvbGxl Y3Rpb24uCisgKgorICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzd2l0Y2hpbmcgdG8gdGhl IGFwcHJvcHJpYXRlIG1lbW9yeSBjb250ZXh0OworICogdGhlIHByb3ZpZGVkIG9iamVjdCBzaG91 bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiB0aGF0IHNhbWUgY29udGV4dC4KKyAqLworc3RhdGlj IHZvaWQKK3BncGFfc3RvcmVfbG9jYWxfYWR2aWNlKHBncGFfY29sbGVjdGVkX2FkdmljZSAqY2Ep Cit7CisJdWludDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZzZXQ7CisJcGdw YV9sb2NhbF9hZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCisJLyogSWYgdGhlIGxvY2Fs IGFkdmljZSBjb2xsZWN0b3IgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LCBkbyB0aGF0IG5vdy4gKi8K KwlpZiAobGEgPT0gTlVMTCkKKwl7CisJCWxhID0gcGFsbG9jMChzaXplb2YocGdwYV9sb2NhbF9h ZHZpY2UpKTsKKwkJbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5L X0FSUkFZX1NJWkU7CisJCWxhLT5jaHVua3MgPSBwYWxsb2MwX2FycmF5KHBncGFfbG9jYWxfYWR2 aWNlX2NodW5rICosCisJCQkJCQkJCSAgIGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSk7 CisJCWxvY2FsX2NvbGxlY3RvciA9IGxhOworCX0KKworCS8qIENvbXB1dGUgY2h1bmsgYW5kIG9m ZnNldCBhdCB3aGljaCB0byBzdG9yZSB0aGlzIGFkdmljZS4gKi8KKwljaHVua19udW1iZXIgPSAo bGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwljaHVua19v ZmZzZXQgPSAobGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsK KworCS8qIEV4dGVuZCBjaHVuayBhcnJheSwgaWYgbmVlZGVkLiAqLworCWlmIChjaHVua19udW1i ZXIgPiBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUpCisJeworCQlpbnQJCQluZXdfc2l6 ZTsKKworCQluZXdfc2l6ZSA9IGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSArIEFEVklD RV9DSFVOS19BUlJBWV9TSVpFOworCQlsYS0+Y2h1bmtzID0gcmVwYWxsb2MwX2FycmF5KGxhLT5j aHVua3MsCisJCQkJCQkJCQkgcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJCQkJCSBs YS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUsCisJCQkJCQkJCQkgbmV3X3NpemUpOworCQls YS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBuZXdfc2l6ZTsKKwl9CisKKwkvKiBBbGxv Y2F0ZSBuZXcgY2h1bmssIGlmIG5lZWRlZC4gKi8KKwlpZiAobGEtPmNodW5rc1tjaHVua19udW1i ZXJdID09IE5VTEwpCisJCWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXSA9IHBhbGxvYzBfb2JqZWN0 KHBncGFfbG9jYWxfYWR2aWNlX2NodW5rKTsKKworCS8qIFNhdmUgcG9pbnRlciBhbmQgYnVtcCBu ZXh0LWlkIGNvdW50ZXIuICovCisJQXNzZXJ0KGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50 cmllc1tjaHVua19vZmZzZXRdID09IE5VTEwpOworCWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ ZW50cmllc1tjaHVua19vZmZzZXRdID0gY2E7CisJKytsYS0+bmV4dF9pZDsKKworCS8qIElmIHdl J3ZlIGV4Y2VlZGVkIHRoZSBzdG9yYWdlIGxpbWl0LCBkaXNjYXJkIG9sZCBkYXRhLiAqLworCXBn cGFfdHJpbV9sb2NhbF9hZHZpY2UocGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1p dCk7Cit9CisKKy8qCisgKiBBZGQgYSBwZ19jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdCB0byB0aGUg c2hhcmVkIGFkdmljZSBjb2xsZWN0aW9uLgorICoKKyAqICdjYV9wb2ludGVyJyBzaG91bGQgaGF2 ZSBiZWVuIGFsbG9jYXRlZCBmcm9tIHRoZSBwZ19wbGFuX2FkdmljZSBEU0EgYXJlYQorICogYW5k IHNob3VsZCBwb2ludCB0byBhbiBvYmplY3Qgb2YgdHlwZSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2Uu CisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoZHNhX3BvaW50ZXIg Y2FfcG9pbnRlcikKK3sKKwl1aW50NjQJCWNodW5rX251bWJlcjsKKwl1aW50NjQJCWNodW5rX29m ZnNldDsKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19wbGFuX2FkdmljZV9hdHRhY2go KTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKwlwZ3Bh X3NoYXJlZF9hZHZpY2UgKnNhID0gc2hhcmVkX2NvbGxlY3RvcjsKKwlkc2FfcG9pbnRlciAqY2h1 bmtfYXJyYXk7CisJcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rICpjaHVuazsKKworCS8qIExvY2sg dGhlIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhD TFVTSVZFKTsKKworCS8qCisJICogSWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQg YWR2aWNlIGNvbGxlY3RvciB5ZXQsIGZpeCB0aGF0IG5vdy4KKwkgKiBJZiB3ZSdyZSB0aGUgZmly c3Qgb25lcyB0byBhdHRhY2gsIHdlIG1heSBuZWVkIHRvIGNyZWF0ZSB0aGUgb2JqZWN0LgorCSAq LworCWlmIChzYSA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID09 IEludmFsaWREc2FQb2ludGVyKQorCQkJc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPQorCQkJCWRz YV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKHBncGFfc2hhcmVkX2FkdmljZSkpOworCQlzaGFyZWRf Y29sbGVjdG9yID0gc2EgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xs ZWN0b3IpOworCX0KKworCS8qCisJICogSXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgb3RoZXIgYmFj a2VuZCBtYXkgaGF2ZSBzdWNjZWVkZWQgaW4gY3JlYXRpbmcKKwkgKiB0aGUgbWFpbiBjb2xsZWN0 b3Igb2JqZWN0IGJ1dCBmYWlsZWQgdG8gYWxsb2NhdGUgYW4gaW5pdGlhbCBjaHVuaworCSAqIGFy cmF5LCBzbyB3ZSBtdXN0IGJlIHByZXBhcmVkIHRvIGFsbG9jYXRlIHRoZSBjaHVuayBhcnJheSBo ZXJlIHdoZXRoZXIKKwkgKiBvciBub3Qgd2UgY3JlYXRlZCB0aGUgY29sbGVjdG9yIG9iamVjdC4K KwkgKi8KKwlpZiAoc2hhcmVkX2NvbGxlY3Rvci0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUg PT0gMCkKKwl7CisJCXNhLT5jaHVua3MgPQorCQkJZHNhX2FsbG9jYXRlMChhcmVhLAorCQkJCQkJ ICBzaXplb2YoZHNhX3BvaW50ZXIpICogQURWSUNFX0NIVU5LX0FSUkFZX1NJWkUpOworCQlzYS0+ Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwl9 CisKKwkvKiBDb21wdXRlIGNodW5rIGFuZCBvZmZzZXQgYXQgd2hpY2ggdG8gc3RvcmUgdGhpcyBh ZHZpY2UuICovCisJY2h1bmtfbnVtYmVyID0gKHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQpIC8g QURWSUNFX0NIVU5LX1NJWkU7CisJY2h1bmtfb2Zmc2V0ID0gKHNhLT5uZXh0X2lkIC0gc2EtPmJh c2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhl IGNodW5rIGFycmF5IGFuZCwgaWYgbmVlZGVkLCBleHRlbmQgaXQuICovCisJaWYgKGNodW5rX251 bWJlciA+PSBzYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUpCisJeworCQlpbnQJCQluZXdf c2l6ZTsKKwkJZHNhX3BvaW50ZXIgbmV3X2NodW5rczsKKworCQkvKgorCQkgKiBEU0EgY2FuJ3Qg ZW5sYXJnZSBhbiBleGlzdGluZyBhbGxvY2F0aW9uLCBzbyB3ZSBtdXN0IG1ha2UgYSBuZXcKKwkJ ICogYWxsb2NhdGlvbiBhbmQgY29weSBkYXRhIG92ZXIuCisJCSAqLworCQluZXdfc2l6ZSA9IHNh LT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSArIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOwor CQluZXdfY2h1bmtzID0gZHNhX2FsbG9jYXRlMChhcmVhLCBzaXplb2YoZHNhX3BvaW50ZXIpICog bmV3X3NpemUpOworCQljaHVua19hcnJheSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBuZXdfY2h1 bmtzKTsKKwkJbWVtY3B5KGNodW5rX2FycmF5LCBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNo dW5rcyksCisJCQkgICBzaXplb2YoZHNhX3BvaW50ZXIpICogc2EtPmNodW5rX2FycmF5X2FsbG9j YXRlZF9zaXplKTsKKwkJZHNhX2ZyZWUoYXJlYSwgc2EtPmNodW5rcyk7CisJCXNhLT5jaHVua3Mg PSBuZXdfY2h1bmtzOworCQlzYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBuZXdfc2l6 ZTsKKwl9CisJZWxzZQorCQljaHVua19hcnJheSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+ Y2h1bmtzKTsKKworCS8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUgZGVzaXJlZCBjaHVuaywgYWxs b2NhdGluZyBpdCBpZiBuZWVkZWQuICovCisJaWYgKGNodW5rX2FycmF5W2NodW5rX251bWJlcl0g PT0gSW52YWxpZERzYVBvaW50ZXIpCisJCWNodW5rX2FycmF5W2NodW5rX251bWJlcl0gPQorCQkJ ZHNhX2FsbG9jYXRlMChhcmVhLCBzaXplb2YocGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rKSk7CisJ Y2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSk7 CisKKwkvKiBTYXZlIHBvaW50ZXIgYW5kIGJ1bXAgbmV4dC1pZCBjb3VudGVyLiAqLworCUFzc2Vy dChjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdID09IEludmFsaWREc2FQb2ludGVyKTsKKwlj aHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gY2FfcG9pbnRlcjsKKwkrK3NhLT5uZXh0X2lk OworCisJLyogSWYgd2UndmUgZXhjZWVkZWQgdGhlIHN0b3JhZ2UgbGltaXQsIGRpc2NhcmQgb2xk IGRhdGEuICovCisJcGdwYV90cmltX3NoYXJlZF9hZHZpY2UoYXJlYSwgcGdfcGxhbl9hZHZpY2Vf c2hhcmVkX2NvbGxlY3Rpb25fbGltaXQpOworCisJLyogUmVsZWFzZSBsb2NrIG9uIHNoYXJlZCBz dGF0ZS4gKi8KKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7Cit9CisKKy8qCisgKiBEaXNj YXJkIGNvbGxlY3RlZCBhZHZpY2Ugc3RvcmVkIGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5IGluIGV4 Y2VzcyBvZiB0aGUKKyAqIHNwZWNpZmllZCBsaW1pdC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFf dHJpbV9sb2NhbF9hZHZpY2UoaW50IGxpbWl0KQoreworCXBncGFfbG9jYWxfYWR2aWNlICpsYSA9 IGxvY2FsX2NvbGxlY3RvcjsKKwl1aW50NjQJCWN1cnJlbnRfY291bnQ7CisJdWludDY0CQl0cmlt X2NvdW50OworCXVpbnQ2NAkJdG90YWxfY2h1bmtfY291bnQ7CisJdWludDY0CQl0cmltX2NodW5r X2NvdW50OworCXVpbnQ2NAkJcmVtYWluaW5nX2NodW5rX2NvdW50OworCisJLyogSWYgd2UgaGF2 ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbGltaXQsIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KKwlj dXJyZW50X2NvdW50ID0gbGEtPm5leHRfaWQgLSBsYS0+b2xkZXN0X2lkOworCWlmIChjdXJyZW50 X2NvdW50IDw9IGxpbWl0KQorCQlyZXR1cm47CisKKwkvKiBGcmVlIGVub3VnaCBlbnRyaWVzIHRv IGdldCB1cyBiYWNrIGRvd24gdG8gdGhlIGxpbWl0LiAqLworCXRyaW1fY291bnQgPSBjdXJyZW50 X2NvdW50IC0gbGltaXQ7CisJd2hpbGUgKHRyaW1fY291bnQgPiAwKQorCXsKKwkJdWludDY0CQlj aHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCisJCWNodW5rX251bWJlciA9 IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNo dW5rX29mZnNldCA9IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5L X1NJWkU7CisKKwkJQXNzZXJ0KGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVu a19vZmZzZXRdICE9IE5VTEwpOworCQlwZnJlZShsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVu dHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisJCWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmll c1tjaHVua19vZmZzZXRdID0gTlVMTDsKKwkJKytsYS0+b2xkZXN0X2lkOworCQktLXRyaW1fY291 bnQ7CisJfQorCisJLyogRnJlZSBhbnkgY2h1bmtzIHRoYXQgYXJlIG5vdyBlbnRpcmVseSB1bnVz ZWQuICovCisJdHJpbV9jaHVua19jb3VudCA9IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJhc2VfaWQp IC8gQURWSUNFX0NIVU5LX1NJWkU7CisJZm9yICh1aW50NjQgbiA9IDA7IG4gPCB0cmltX2NodW5r X2NvdW50OyArK24pCisJCXBmcmVlKGxhLT5jaHVua3Nbbl0pOworCisJLyogU2xpZGUgcmVtYWlu aW5nIGNodW5rIHBvaW50ZXJzIGJhY2sgdG93YXJkIHRoZSBiYXNlIG9mIHRoZSBhcnJheS4gKi8K Kwl0b3RhbF9jaHVua19jb3VudCA9IChsYS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lkICsKKwkJCQkJ CSBBRFZJQ0VfQ0hVTktfU0laRSAtIDEpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJcmVtYWluaW5n X2NodW5rX2NvdW50ID0gdG90YWxfY2h1bmtfY291bnQgLSB0cmltX2NodW5rX2NvdW50OworCWlm IChyZW1haW5pbmdfY2h1bmtfY291bnQgPiAwKQorCQltZW1tb3ZlKCZsYS0+Y2h1bmtzWzBdLCAm bGEtPmNodW5rc1t0cmltX2NodW5rX2NvdW50XSwKKwkJCQlzaXplb2YocGdwYV9sb2NhbF9hZHZp Y2VfY2h1bmsgKikgKiByZW1haW5pbmdfY2h1bmtfY291bnQpOworCisJLyogQWRqdXN0IGJhc2Ug SUQgdmFsdWUgYWNjb3JkaW5nbHkuICovCisJbGEtPmJhc2VfaWQgKz0gdHJpbV9jaHVua19jb3Vu dCAqIEFEVklDRV9DSFVOS19TSVpFOworfQorCisvKgorICogRGlzY2FyZCBjb2xsZWN0ZWQgYWR2 aWNlIHN0b3JlZCBpbiBzaGFyZWQgbWVtb3J5IGluIGV4Y2VzcyBvZiB0aGUKKyAqIHNwZWNpZmll ZCBsaW1pdC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJpbV9zaGFyZWRfYWR2aWNlKGRzYV9h cmVhICphcmVhLCBpbnQgbGltaXQpCit7CisJcGdwYV9zaGFyZWRfYWR2aWNlICpzYSA9IHNoYXJl ZF9jb2xsZWN0b3I7CisJdWludDY0CQljdXJyZW50X2NvdW50OworCXVpbnQ2NAkJdHJpbV9jb3Vu dDsKKwl1aW50NjQJCXRvdGFsX2NodW5rX2NvdW50OworCXVpbnQ2NAkJdHJpbV9jaHVua19jb3Vu dDsKKwl1aW50NjQJCXJlbWFpbmluZ19jaHVua19jb3VudDsKKwlkc2FfcG9pbnRlciAqY2h1bmtf YXJyYXk7CisKKwkvKiBJZiB3ZSBoYXZlbid0IHlldCByZWFjaGVkIHRoZSBsaW1pdCwgdGhlcmUn cyBub3RoaW5nIHRvIGRvLiAqLworCWN1cnJlbnRfY291bnQgPSBzYS0+bmV4dF9pZCAtIHNhLT5v bGRlc3RfaWQ7CisJaWYgKGN1cnJlbnRfY291bnQgPD0gbGltaXQpCisJCXJldHVybjsKKworCS8q IEdldCBhIHBvaW50ZXIgdG8gdGhlIGNodW5rIGFycmF5LiAqLworCWNodW5rX2FycmF5ID0gZHNh X2dldF9hZGRyZXNzKGFyZWEsIHNhLT5jaHVua3MpOworCisJLyogRnJlZSBlbm91Z2ggZW50cmll cyB0byBnZXQgdXMgYmFjayBkb3duIHRvIHRoZSBsaW1pdC4gKi8KKwl0cmltX2NvdW50ID0gY3Vy cmVudF9jb3VudCAtIGxpbWl0OworCXdoaWxlICh0cmltX2NvdW50ID4gMCkKKwl7CisJCXVpbnQ2 NAkJY2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKwkJcGdwYV9zaGFyZWRf YWR2aWNlX2NodW5rICpjaHVuazsKKworCQljaHVua19udW1iZXIgPSAoc2EtPm9sZGVzdF9pZCAt IHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAoc2Et Pm9sZGVzdF9pZCAtIHNhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJCWNodW5r ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOworCQlB c3NlcnQoY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSAhPSBJbnZhbGlkRHNhUG9pbnRlcik7 CisJCWRzYV9mcmVlKGFyZWEsIGNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0pOworCQljaHVu ay0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gSW52YWxpZERzYVBvaW50ZXI7CisJCSsrc2EtPm9s ZGVzdF9pZDsKKwkJLS10cmltX2NvdW50OworCX0KKworCS8qIEZyZWUgYW55IGNodW5rcyB0aGF0 IGFyZSBub3cgZW50aXJlbHkgdW51c2VkLiAqLworCXRyaW1fY2h1bmtfY291bnQgPSAoc2EtPm9s ZGVzdF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCWZvciAodWludDY0 IG4gPSAwOyBuIDwgdHJpbV9jaHVua19jb3VudDsgKytuKQorCQlkc2FfZnJlZShhcmVhLCBjaHVu a19hcnJheVtuXSk7CisKKwkvKiBTbGlkZSByZW1haW5pbmcgY2h1bmsgcG9pbnRlcnMgYmFjayB0 b3dhcmQgdGhlIGJhc2Ugb2YgdGhlIGFycmF5LiAqLworCXRvdGFsX2NodW5rX2NvdW50ID0gKHNh LT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQgKworCQkJCQkJIEFEVklDRV9DSFVOS19TSVpFIC0gMSkg LyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlyZW1haW5pbmdfY2h1bmtfY291bnQgPSB0b3RhbF9jaHVu a19jb3VudCAtIHRyaW1fY2h1bmtfY291bnQ7CisJaWYgKHJlbWFpbmluZ19jaHVua19jb3VudCA+ IDApCisJCW1lbW1vdmUoJmNodW5rX2FycmF5WzBdLCAmY2h1bmtfYXJyYXlbdHJpbV9jaHVua19j b3VudF0sCisJCQkJc2l6ZW9mKGRzYV9wb2ludGVyKSAqIHJlbWFpbmluZ19jaHVua19jb3VudCk7 CisKKwkvKiBBZGp1c3QgYmFzZSBJRCB2YWx1ZSBhY2NvcmRpbmdseS4gKi8KKwlzYS0+YmFzZV9p ZCArPSB0cmltX2NodW5rX2NvdW50ICogQURWSUNFX0NIVU5LX1NJWkU7Cit9CisKKy8qCisgKiBT UUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gZGlzY2FyZCBhZHZpY2UgY29sbGVjdGVkIGluIGJhY2tl bmQtbG9jYWwgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJcGdwYV90cmltX2xvY2FsX2FkdmljZSgwKTsKKwor CVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8g ZGlzY2FyZCBhZHZpY2UgY29sbGVjdGVkIGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5CisgKi8KK0Rh dHVtCitwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQor eworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOwor CWRzYV9hcmVhICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSgpOworCisJTFdMb2Nr QWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKgorCSAqIElmIHdlJ3Jl IG5vdCBhdHRhY2hlZCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhh dCBub3c7CisJICogYnV0IGlmIHRoZSBjb2xsZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBj YW4gcmV0dXJuIHdpdGhvdXQgZG9pbmcKKwkgKiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChz aGFyZWRfY29sbGVjdG9yID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0 b3IgPT0gSW52YWxpZERzYVBvaW50ZXIpCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5s b2NrKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwkJc2hhcmVkX2NvbGxlY3RvciA9IGRz YV9nZXRfYWRkcmVzcyhhcmVhLCBzdGF0ZS0+c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyog RG8gdGhlIHJlYWwgd29yayAqLworCXBncGFfdHJpbV9zaGFyZWRfYWR2aWNlKGFyZWEsIDApOwor CisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30K KworLyoKKyAqIFNRTC1jYWxsYWJsZSBTUkYgdG8gcmV0dXJuIGFkdmljZSBjb2xsZWN0ZWQgaW4g YmFja2VuZC1sb2NhbCBtZW1vcnkKKyAqLworRGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfbG9jYWxf YWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJl dHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOworCXBncGFfbG9jYWxfYWR2aWNlICps YSA9IGxvY2FsX2NvbGxlY3RvcjsKKwlPaWQJCQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKworCUlu aXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCWlmIChsYSA9PSBOVUxMKQorCQlyZXR1 cm4gKERhdHVtKSAwOworCisJLyogTG9vcCBvdmVyIGFsbCBlbnRyaWVzLiAqLworCWZvciAodWlu dDY0IGlkID0gbGEtPm9sZGVzdF9pZDsgaWQgPCBsYS0+bmV4dF9pZDsgKytpZCkKKwl7CisJCXVp bnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKwkJcGdwYV9jb2xs ZWN0ZWRfYWR2aWNlICpjYTsKKwkJRGF0dW0JCXZhbHVlc1tQR19HRVRfQURWSUNFX0NPTFVNTlNd OworCQlib29sCQludWxsc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdID0gezB9OworCisJCWNodW5r X251bWJlciA9IChpZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVu a19vZmZzZXQgPSAoaWQgLSBsYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQlj YSA9IGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdOworCisJ CWlmICghbWVtYmVyX2Nhbl9zZXRfcm9sZSh1c2VyaWQsIGNhLT51c2VyaWQpKQorCQkJY29udGlu dWU7CisKKwkJdmFsdWVzWzBdID0gVUludDY0R2V0RGF0dW0oaWQpOworCQl2YWx1ZXNbMV0gPSBP YmplY3RJZEdldERhdHVtKGNhLT51c2VyaWQpOworCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERh dHVtKGNhLT5kYmlkKTsKKwkJdmFsdWVzWzNdID0gVUludDY0R2V0RGF0dW0oY2EtPnF1ZXJ5aWQp OworCQl2YWx1ZXNbNF0gPSBUaW1lc3RhbXBHZXREYXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFs dWVzWzVdID0gQ1N0cmluZ0dldFRleHREYXR1bShxdWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVz WzZdID0gQ1N0cmluZ0dldFRleHREYXR1bShhZHZpY2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVz dG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJ CQkgdmFsdWVzLCBudWxscyk7CisJfQorCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAq IFNRTC1jYWxsYWJsZSBTUkYgdG8gcmV0dXJuIGFkdmljZSBjb2xsZWN0ZWQgaW4gc2hhcmVkIG1l bW9yeQorICovCitEYXR1bQorcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikg ZmNpbmZvLT5yZXN1bHRpbmZvOworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5f YWR2aWNlX2F0dGFjaCgpOworCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9kc2Ff YXJlYSgpOworCWRzYV9wb2ludGVyICpjaHVua19hcnJheTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2Ug KnNhID0gc2hhcmVkX2NvbGxlY3RvcjsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAw KTsKKworCS8qIExvY2sgdGhlIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tBY3F1aXJlKCZzdGF0 ZS0+bG9jaywgTFdfU0hBUkVEKTsKKworCS8qCisJICogSWYgd2UncmUgbm90IGF0dGFjaGVkIHRv IHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciB5ZXQsIGZpeCB0aGF0IG5vdzsKKwkgKiBidXQg aWYgdGhlIGNvbGxlY3RvciBkb2Vzbid0IGV2ZW4gZXhpc3QsIHdlIGNhbiByZXR1cm4gd2l0aG91 dCBkb2luZworCSAqIGFueXRoaW5nIGVsc2UuCisJICovCisJaWYgKHNhID09IE5VTEwpCisJewor CQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPT0gSW52YWxpZERzYVBvaW50ZXIpCisJCXsK KwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJ CX0KKwkJc2hhcmVkX2NvbGxlY3RvciA9IHNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRl LT5zaGFyZWRfY29sbGVjdG9yKTsKKwl9CisKKwkvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBjaHVu ayBhcnJheS4gKi8KKwljaHVua19hcnJheSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1 bmtzKTsKKworCS8qIExvb3Agb3ZlciBhbGwgZW50cmllcy4gKi8KKwlmb3IgKHVpbnQ2NCBpZCA9 IHNhLT5vbGRlc3RfaWQ7IGlkIDwgc2EtPm5leHRfaWQ7ICsraWQpCisJeworCQl1aW50NjQJCWNo dW5rX251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisJCXBncGFfc2hhcmVkX2Fkdmlj ZV9jaHVuayAqY2h1bms7CisJCXBncGFfY29sbGVjdGVkX2FkdmljZSAqY2E7CisJCURhdHVtCQl2 YWx1ZXNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXTsKKwkJYm9vbAkJbnVsbHNbUEdfR0VUX0FEVklD RV9DT0xVTU5TXSA9IHswfTsKKworCQljaHVua19udW1iZXIgPSAoaWQgLSBzYS0+YmFzZV9pZCkg LyBBRFZJQ0VfQ0hVTktfU0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKGlkIC0gc2EtPmJhc2VfaWQp ICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwg Y2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSk7CisJCWNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEs IGNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0pOworCisJCXZhbHVlc1swXSA9IFVJbnQ2NEdl dERhdHVtKGlkKTsKKwkJdmFsdWVzWzFdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+dXNlcmlkKTsK KwkJdmFsdWVzWzJdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9 IFVJbnQ2NEdldERhdHVtKGNhLT5xdWVyeWlkKTsKKwkJdmFsdWVzWzRdID0gVGltZXN0YW1wR2V0 RGF0dW0oY2EtPnRpbWVzdGFtcCk7CisJCXZhbHVlc1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0o cXVlcnlfc3RyaW5nKGNhKSk7CisJCXZhbHVlc1s2XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2 aWNlX3N0cmluZyhjYSkpOworCisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVz dWx0LCByc2luZm8tPnNldERlc2MsCisJCQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCS8q IFJlbGVhc2UgbG9jayBvbiBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUt PmxvY2spOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9jb2xsZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjZl NzQ2YTA2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf Y29sbGVjdG9yLmgKQEAgLTAsMCArMSwxOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog cGdwYV9jb2xsZWN0b3IuaAorICoJICBjb2xsZWN0IGFkdmljZSBpbnRvIGJhY2tlbmQtbG9jYWwg b3Igc2hhcmVkIG1lbW9yeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX2NvbGxlY3Rvci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5k ZWYgUEdQQV9DT0xMRUNUT1JfSAorI2RlZmluZSBQR1BBX0NPTExFQ1RPUl9ICisKK2V4dGVybiB2 b2lkIHBncGFfY29sbGVjdF9hZHZpY2UodWludDY0IHF1ZXJ5SWQsIGNvbnN0IGNoYXIgKnF1ZXJ5 X3N0cmluZywKKwkJCQkJCQkJY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZyk7CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJmYTgwNzVkNjZlCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYwpAQCAtMCwwICsxLDQ3NiBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9pZGVudGlmaWVyLmMKKyAqCSAgY3JlYXRl IGFwcHJvcHJpYXRlIGlkZW50aWZpZXJzIGZvciByYW5nZSB0YWJsZSBlbnRyaWVzCisgKgorICog VGhlIGdvYWwgb2YgdGhpcyBtb2R1bGUgaXMgdG8gYmUgYWJsZSB0byBwcm9kdWNlIGlkZW50aWZp ZXJzIGZvciByYW5nZQorICogdGFibGUgZW50cmllcyB0aGF0IGFyZSB1bmlxdWUsIHVuZGVyc3Rh bmRhYmxlIHRvIGh1bWFuIGJlaW5ncywgYW5kCisgKiBhYmxlIHRvIGJlIHJlY29uc3RydWN0ZWQg ZHVyaW5nIGZ1dHVyZSBwbGFubmluZyBjeWNsZXMuIEFzIGFuCisgKiBleGNlcHRpb24sIHdlIGRv IG5vdCBjYXJlIGFib3V0LCBvciB3YW50IHRvIHByb2R1Y2UsIGlkZW50aWZpZXJzIGZvcgorICog UlRFX0pPSU4gZW50cmllcy4gVGhpcyBpcyBiZWNhdXNlICgxKSB3ZSB3b3VsZCBlbmQgdXAgd2l0 aCBhIHRvbiBvZgorICogUlRFcyB3aXRoIHVuaGVscGZ1bCBuYW1lcyBsaWtlIHVubmFtZWRfam9p bl8xNzsgKDIpIG5vdCBhbGwgam9pbnMgaGF2ZQorICogUlRFczsgYW5kICgzKSB3ZSBpbnRlbmQg dG8gcmVmZXIgdG8gam9pbnMgYnkgdGhlaXIgY29uc3RpdHVlbnQgbWVtYmVycworICogcmF0aGVy IHRoYW4gYnkgcmVmZXJlbmNlIHRvIHRoZSBqb2luIFJURS4KKyAqCisgKiBJbiBnZW5lcmFsLCB3 ZSBjb25zdHJ1Y3QgaWRlbnRpZmllcnMgb2YgdGhlIGZvbGxvd2luZyBmb3JtOgorICoKKyAqIGFs aWFzX25hbWUjb2NjdXJyZW5jZV9udW1iZXIvY2hpbGRfdGFibGVfbmFtZUBzdWJxdWVyeV9uYW1l CisgKgorICogSG93ZXZlciwgb2NjdXJyZW5jZV9udW1iZXIgaXMgb21pdHRlZCB3aGVuIGl0IGlz IHRoZSBmaXJzdCBvY2N1cnJlbmNlCisgKiB3aXRoaW4gdGhlIHNhbWUgc3VicXVlcnksIGNoaWxk X3RhYmxlX25hbWUgaXMgb21pdHRlZCBmb3IgcmVsYXRpb25zIHRoYXQKKyAqIGFyZSBub3QgY2hp bGQgdGFibGVzLCBhbmQgc3VicXVlcnlfbmFtZSBpcyBvbWl0dGVkIGZvciB0aGUgdG9wbW9zdAor ICogcXVlcnkgbGV2ZWwuIFdoZW5ldmVyIGFuIGl0ZW0gaXMgb21pdHRlZCwgdGhlIHByZWNlZGlu ZyBwdW5jdHVhdGlvbiBtYXJrCisgKiBpcyBhbHNvIG9taXR0ZWQuICBJZGVudGlmaWVyLXN0eWxl IGVzY2FwaW5nIGlzIGFwcGxpZWQgdG8gYWxpYXNfbmFtZSBhbmQKKyAqIHN1YnF1ZXJ5X25hbWUu ICBXaGVuZXZlciB3ZSBpbmNsdWRlIGNoaWxkX3RhYmxlX25hbWUsIHdlIGFsd2F5cworICogc2No ZW1hLXF1YWxpZmllZCBuYW1lLCBidXQgd3JpdGluZyB0aGVpciBvd24gcGxhbiBhZHZpY2UgYXJl IG5vdCByZXF1aXJlZAorICogdG8gZG8gc28uICBJZGVudGlmaWVyLXN0eWxlIGVzY2FwaW5nIGlz IGFwcGxpZWQgdG8gdGhlIHNjaGVtYSBhbmQgdG8gdGhlCisgKiByZWxhdGlvbiBuYW1lcyBzZXBh cmF0ZWx5LgorICoKKyAqIFRoZSB1cHNob3Qgb2YgYWxsIG9mIHRoZXNlIHJ1bGVzIGlzIHRoYXQg aW4gc2ltcGxlIGNhc2VzLCB0aGUgcmVsYXRpb24KKyAqIGlkZW50aWZpZXIgaXMgdGV4dHVhbGx5 IGlkZW50aWNhbCB0byB0aGUgYWxpYXMgbmFtZSwgbWFraW5nIGxpZmUgZWFzaWVyCisgKiBmb3Ig dXNlcnMuIEhvd2V2ZXIsIGV2ZW4gaW4gY29tcGxleCBjYXNlcywgZXZlcnkgcmVsYXRpb24gaWRl bnRpZmllcgorICogZm9yIGEgZ2l2ZW4gcXVlcnkgd2lsbCBiZSB1bmlxdWUgKG9yIGF0IGxlYXN0 IHdlIGhvcGUgc286IGlmIG5vdCwgdGhpcworICogY29kZSBpcyBidWdneSBhbmQgdGhlIGlkZW50 aWZpZXIgZm9ybWF0IG1pZ2h0IG5lZWQgdG8gYmUgcmV0aG91Z2h0KS4KKyAqCisgKiBBIGtleSBn b2FsIG9mIHRoaXMgc3lzdGVtIGlzIHRoYXQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHJlY29uc3Ry dWN0IHRoZQorICogc2FtZSBpZGVudGlmaWVycyBkdXJpbmcgYSBmdXR1cmUgcGxhbm5pbmcgY3lj bGUgZm9yIHRoZSBzYW1lIHF1ZXJ5LCBzbworICogdGhhdCBpZiBhIGNlcnRhaW4gYmVoYXZpb3Ig aXMgc3BlY2lmaWVkIGZvciBhIGNlcnRhaW4gaWRlbnRpZmllciwgd2UgY2FuCisgKiBwcm9wZXJs eSBpZGVudGlmeSB0aGUgUlRJIGZvciB3aGljaCB0aGF0IGJlaGF2aW9yIGlzIG1hbmRhdGVkLiBJ biBvcmRlcgorICogZm9yIHRoaXMgdG8gd29yaywgc3VicXVlcnkgbmFtZXMgbXVzdCBiZSB1bmlx dWUgYW5kIGtub3duIGJlZm9yZSB0aGUKKyAqIHN1YnF1ZXJ5IGlzIHBsYW5uZWQsIGFuZCB0aGUg cmVtYWluZGVyIG9mIHRoZSBpZGVudGlmaWVyIG11c3Qgbm90IGRlcGVuZAorICogb24gYW55IHBh cnQgb2YgdGhlIHF1ZXJ5IG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgc3VicXVlcnkgbGV2ZWwuIElu CisgKiBwYXJ0aWN1bGFyLCBvY2N1cnJlbmNlX251bWJlciBtdXN0IGJlIGNhbGN1bGF0ZWQgcmVs YXRpdmUgdG8gdGhlIHJhbmdlCisgKiB0YWJsZSBmb3IgdGhlIHJlbGV2YW50IHN1YnF1ZXJ5LCBu b3QgdGhlIGZpbmFsIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkg IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFf aWRlbnRpZmllci5oIgorCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKK3N0YXRp YyBJbmRleCAqcGdwYV9jcmVhdGVfdG9wX3J0aV9tYXAoSW5kZXggcnRhYmxlX2xlbmd0aCwgTGlz dCAqcnRhYmxlLAorCQkJCQkJCQkJICBMaXN0ICphcHBpbmZvcyk7CitzdGF0aWMgaW50CXBncGFf b2NjdXJyZW5jZV9udW1iZXIoTGlzdCAqcnRhYmxlLCBJbmRleCAqdG9wX3J0aV9tYXAsCisJCQkJ CQkJCSAgIFN1YlBsYW5SVEluZm8gKnJ0aW5mbywgSW5kZXggcnRpKTsKKworLyoKKyAqIENyZWF0 ZSBhIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIgZnJvbSBzY3JhdGNoLgorICoKKyAqIFRoaXMgZnVu Y3Rpb24gbGVhdmVzIHRoZSBjYWxsZXIgdG8gZG8gYWxsIHRoZSBoZWF2eSBsaWZ0aW5nLCBzbyBp dCdzCisgKiBnZW5lcmFsbHkgYmV0dGVyIHRvIHVzZSBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBiZWxv dyBpbnN0ZWFkLgorICoKKyAqIFNlZSB0aGUgZmlsZSBoZWFkZXIgY29tbWVudHMgZm9yIG1vcmUg ZGV0YWlscyBvbiB0aGUgZm9ybWF0IG9mIGFuCisgKiBpZGVudGlmaWVyLgorICovCitjb25zdCBj aGFyICoKK3BncGFfaWRlbnRpZmllcl9zdHJpbmcoY29uc3QgcGdwYV9pZGVudGlmaWVyICpyaWQp Cit7CisJY29uc3QgY2hhciAqcmVzdWx0OworCisJQXNzZXJ0KHJpZC0+YWxpYXNfbmFtZSAhPSBO VUxMKTsKKwlyZXN1bHQgPSBxdW90ZV9pZGVudGlmaWVyKHJpZC0+YWxpYXNfbmFtZSk7CisKKwlB c3NlcnQocmlkLT5vY2N1cnJlbmNlID49IDApOworCWlmIChyaWQtPm9jY3VycmVuY2UgPiAxKQor CQlyZXN1bHQgPSBwc3ByaW50ZigiJXMjJWQiLCByZXN1bHQsIHJpZC0+b2NjdXJyZW5jZSk7CisK KwlpZiAocmlkLT5wYXJ0cmVsICE9IE5VTEwpCisJeworCQlpZiAocmlkLT5wYXJ0bnNwID09IE5V TEwpCisJCQlyZXN1bHQgPSBwc3ByaW50ZigiJXMvJXMiLCByZXN1bHQsCisJCQkJCQkJICBxdW90 ZV9pZGVudGlmaWVyKHJpZC0+cGFydG5zcCkpOworCQllbHNlCisJCQlyZXN1bHQgPSBwc3ByaW50 ZigiJXMvJXMuJXMiLCByZXN1bHQsCisJCQkJCQkJICBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGFy dG5zcCksCisJCQkJCQkJICBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGFydHJlbCkpOworCX0KKwor CWlmIChyaWQtPnBsYW5fbmFtZSAhPSBOVUxMKQorCQlyZXN1bHQgPSBwc3ByaW50ZigiJXNAJXMi LCByZXN1bHQsIHF1b3RlX2lkZW50aWZpZXIocmlkLT5wbGFuX25hbWUpKTsKKworCXJldHVybiBy ZXN1bHQ7Cit9CisKKy8qCisgKiBDb21wdXRlIGEgcmVsYXRpb24gaWRlbnRpZmllciBmb3IgYSBw YXJ0aWN1bGFyIFJUSS4KKyAqCisgKiBUaGUgY2FsbGVyIHByb3ZpZGVzIHJvb3QgYW5kIHJ0aSwg YW5kIGdldHMgdGhlIG5lY2Vzc2FyeSBkZXRhaWxzIGJhY2sgdmlhCisgKiB0aGUgcmVtYWluaW5n IHBhcmFtZXRlcnMuCisgKi8KK3ZvaWQKK3BncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShQ bGFubmVySW5mbyAqcm9vdCwgSW5kZXggcnRpLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAq cmlkKQoreworCUluZGV4CQl0b3BfcnRpID0gcnRpOworCWludAkJCW9jY3VycmVuY2UgPSAxOwor CVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwlSYW5nZVRibEVudHJ5ICp0b3BfcnRlOworCWNoYXIJICAg KnBhcnRuc3AgPSBOVUxMOworCWNoYXIJICAgKnBhcnRyZWwgPSBOVUxMOworCisJLyoKKwkgKiBJ ZiB0aGlzIGlzIGEgY2hpbGQgUlRFLCBmaW5kIHRoZSB0b3Btb3N0IHBhcmVudCB0aGF0IGlzIHN0 aWxsIG9mIHR5cGUKKwkgKiBSVEVfUkVMQVRJT04uIFdlIGRvIHRoaXMgYmVjYXVzZSB3ZSBpZGVu dGlmeSBjaGlsZHJlbiBvZiBwYXJ0aXRpb25lZAorCSAqIHRhYmxlcyBieSB0aGUgbmFtZSBvZiB0 aGUgY2hpbGQgdGFibGUsIGJ1dCBzdWJxdWVyaWVzIGNhbiBhbHNvIGhhdmUKKwkgKiBjaGlsZCBy ZWxzIGFuZCB3ZSBkb24ndCBjYXJlIGFib3V0IHRob3NlIGhlcmUuCisJICovCisJZm9yICg7OykK Kwl7CisJCUFwcGVuZFJlbEluZm8gKmFwcGluZm87CisJCVJhbmdlVGJsRW50cnkgKnBhcmVudF9y dGU7CisKKwkJLyogYXBwZW5kX3JlbF9hcnJheSBjYW4gYmUgTlVMTCBpZiB0aGVyZSBhcmUgbm8g Y2hpbGRyZW4gKi8KKwkJaWYgKHJvb3QtPmFwcGVuZF9yZWxfYXJyYXkgPT0gTlVMTCB8fAorCQkJ KGFwcGluZm8gPSByb290LT5hcHBlbmRfcmVsX2FycmF5W3RvcF9ydGldKSA9PSBOVUxMKQorCQkJ YnJlYWs7CisKKwkJcGFyZW50X3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50 X3JlbGlkLCByb290KTsKKwkJaWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9O KQorCQkJYnJlYWs7CisKKwkJdG9wX3J0aSA9IGFwcGluZm8tPnBhcmVudF9yZWxpZDsKKwl9CisK KwkvKiBHZXQgdGhlIHJhbmdlIHRhYmxlIGVudHJpZXMgZm9yIHRoZSBSVEkgYW5kIHRvcCBSVEku ICovCisJcnRlID0gcGxhbm5lcl9ydF9mZXRjaChydGksIHJvb3QpOworCXRvcF9ydGUgPSBwbGFu bmVyX3J0X2ZldGNoKHRvcF9ydGksIHJvb3QpOworCUFzc2VydChydGUtPnJ0ZWtpbmQgIT0gUlRF X0pPSU4pOworCUFzc2VydCh0b3BfcnRlLT5ydGVraW5kICE9IFJURV9KT0lOKTsKKworCS8qIFdv cmsgb3V0IHRoZSBjb3JyZWN0IG9jY3VycmVuY2UgbnVtYmVyLiAqLworCWZvciAoSW5kZXggcHJp b3JfcnRpID0gMTsgcHJpb3JfcnRpIDwgdG9wX3J0aTsgKytwcmlvcl9ydGkpCisJeworCQlSYW5n ZVRibEVudHJ5ICpwcmlvcl9ydGU7CisJCUFwcGVuZFJlbEluZm8gKmFwcGluZm87CisKKwkJLyoK KwkJICogSWYgdGhpcyBpcyBhIGNoaWxkIHJlbCBvZiBhIHBhcmVudCB0aGF0IGlzIGEgcmVsYXRp b24sIHNraXAgaXQuCisJCSAqCisJCSAqIFN1Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBhcmUgZGlz YW1iaWd1YXRlZCBieSBtZW50aW9uaW5nIHRoZSBzY2hlbWEKKwkJICogYW5kIG5hbWUgb2YgdGhl IHRhYmxlLCBub3QgYnkgY291bnRpbmcgdGhlbSBhcyBzZXBhcmF0ZSBvY2N1cnJlbmNlcworCQkg KiBvZiB0aGUgc2FtZSB0YWJsZS4KKwkJICoKKwkJICogTkI6IGFwcGVuZF9yZWxfYXJyYXkgY2Fu IGJlIE5VTEwgaWYgdGhlcmUgYXJlIG5vIGNoaWxkcmVuCisJCSAqLworCQlpZiAocm9vdC0+YXBw ZW5kX3JlbF9hcnJheSAhPSBOVUxMICYmCisJCQkoYXBwaW5mbyA9IHJvb3QtPmFwcGVuZF9yZWxf YXJyYXlbcHJpb3JfcnRpXSkgIT0gTlVMTCkKKwkJeworCQkJUmFuZ2VUYmxFbnRyeSAqcGFyZW50 X3J0ZTsKKworCQkJcGFyZW50X3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50 X3JlbGlkLCByb290KTsKKwkJCWlmIChwYXJlbnRfcnRlLT5ydGVraW5kID09IFJURV9SRUxBVElP TikKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFNraXAgTlVMTCBlbnRyaWVzIGFuZCBqb2lu cy4gKi8KKwkJcHJpb3JfcnRlID0gcGxhbm5lcl9ydF9mZXRjaChwcmlvcl9ydGksIHJvb3QpOwor CQlpZiAocHJpb3JfcnRlID09IE5VTEwgfHwgcHJpb3JfcnRlLT5ydGVraW5kID09IFJURV9KT0lO KQorCQkJY29udGludWU7CisKKwkJLyogU2tpcCBpZiB0aGUgYWxpYXMgbmFtZSBkaWZmZXJzLiAq LworCQlpZiAoc3RyY21wKHByaW9yX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lLCBydGUtPmVyZWYtPmFs aWFzbmFtZSkgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIExvb2tzIGxpa2UgYSB0cnVlIGR1 cGxpY2F0ZS4gKi8KKwkJKytvY2N1cnJlbmNlOworCX0KKworCS8qIElmIHRoaXMgaXMgYSBjaGls ZCB0YWJsZSwgZ2V0IHRoZSBzY2hlbWEgYW5kIHJlbGF0aW9uIG5hbWVzLiAqLworCWlmIChydGkg IT0gdG9wX3J0aSkKKwl7CisJCXBhcnRuc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChn ZXRfcmVsX25hbWVzcGFjZShydGUtPnJlbGlkKSk7CisJCXBhcnRyZWwgPSBnZXRfcmVsX25hbWUo cnRlLT5yZWxpZCk7CisJfQorCisJLyogT0ssIHdlIGhhdmUgYWxsIHRoZSBhbnN3ZXJzIHdlIG5l ZWQuIFJldHVybiB0aGVtIHRvIHRoZSBjYWxsZXIuICovCisJcmlkLT5hbGlhc19uYW1lID0gdG9w X3J0ZS0+ZXJlZi0+YWxpYXNuYW1lOworCXJpZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7CisJ cmlkLT5wYXJ0bnNwID0gcGFydG5zcDsKKwlyaWQtPnBhcnRyZWwgPSBwYXJ0cmVsOworCXJpZC0+ cGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOworfQorCisvKgorICogQ29tcHV0ZSBhIHJlbGF0 aW9uIGlkZW50aWZpZXIgZm9yIGEgc2V0IG9mIFJUSXMsIGV4Y2VwdCBmb3IgYW55IFJURV9KT0lO CisgKiBSVElzIHRoYXQgbWF5IGJlIHByZXNlbnQuCisgKgorICogUlRFX0pPSU4gZW50cmllcyBh cmUgZXhjbHVkZWQgYmVjYXVzZSB0aGV5IGNhbm5vdCBiZSBtZW50aW9uZWQgYnkgcGxhbgorICog YWR2aWNlLgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJl IHRoYXQgdGhlIHRrZXlzIGFycmF5IGlzIGxhcmdlCisgKiBlbm91Z2ggdG8gc3RvcmUgdGhlIHJl c3VsdHMuCisgKgorICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGlkZW50aWZp ZXJzIGNvbXB1dGVkLgorICovCitpbnQKK3BncGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9yZWxp ZHMoUGxhbm5lckluZm8gKnJvb3QsIEJpdG1hcHNldCAqcmVsaWRzLAorCQkJCQkJCQkgICBwZ3Bh X2lkZW50aWZpZXIgKnJpZHMpCit7CisJaW50CQkJY291bnQgPSAwOworCWludAkJCXJ0aSA9IC0x OworCisJd2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQor CXsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcGxhbm5lcl9ydF9mZXRjaChydGksIHJvb3QpOwor CisJCWlmIChydGUtPnJ0ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKwkJcGdwYV9j b21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKHJvb3QsIHJ0aSwgJnJpZHNbY291bnQrK10pOworCX0K KworCUFzc2VydChjb3VudCA+IDApOworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIENyZWF0 ZSBhbiBhcnJheSBvZiByYW5nZSB0YWJsZSBpZGVudGlmaWVycyBmb3IgYWxsIHRoZSBub24tTlVM TCwKKyAqIG5vbi1SVEVfSk9JTiBlbnRyaWVzIGluIHRoZSBQbGFubmVkU3RtdCdzIHJhbmdlIHRh YmxlLgorICovCitwZ3BhX2lkZW50aWZpZXIgKgorcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9y X3BsYW5uZWRfc3RtdChQbGFubmVkU3RtdCAqcHN0bXQpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5n dGggPSBsaXN0X2xlbmd0aChwc3RtdC0+cnRhYmxlKTsKKwlwZ3BhX2lkZW50aWZpZXIgKnJlc3Vs dCA9IHBhbGxvYzBfYXJyYXkocGdwYV9pZGVudGlmaWVyLCBydGFibGVfbGVuZ3RoKTsKKwlJbmRl eAkgICAqdG9wX3J0aV9tYXA7CisJaW50CQkJcnRpbmZvaW5kZXggPSAwOworCVN1YlBsYW5SVElu Zm8gKnJ0aW5mbyA9IE5VTEw7CisJU3ViUGxhblJUSW5mbyAqbmV4dHJ0aW5mbyA9IE5VTEw7CisK KwkvKgorCSAqIEFjY291bnQgZm9yIHJlbGF0aW9ucyBhZGRkZWQgYnkgaW5oZXJpdGFuY2UgZXhw YW5zaW9uIG9mIHBhcnRpdGlvbmVkCisJICogdGFibGVzLgorCSAqLworCXRvcF9ydGlfbWFwID0g cGdwYV9jcmVhdGVfdG9wX3J0aV9tYXAocnRhYmxlX2xlbmd0aCwgcHN0bXQtPnJ0YWJsZSwKKwkJ CQkJCQkJCQkgIHBzdG10LT5hcHBlbmRSZWxhdGlvbnMpOworCisJLyoKKwkgKiBXaGVuIHdlIGJl Z2luIGl0ZXJhdGluZywgd2UncmUgcHJvY2Vzc2luZyB0aGUgcG9ydGlvbiBvZiB0aGUgcmFuZ2UK KwkgKiB0YWJsZSB0aGF0IG9yaWdpbmF0ZWQgZnJvbSB0aGUgdG9wLWxldmVsIFBsYW5uZXJJbmZv LCBzbyBzdWJydGluZm8gaXMKKwkgKiBOVUxMLiBMYXRlciwgc3VicnRpbmZvIHdpbGwgYmUgdGhl IFN1YlBsYW5SVEluZm8gZm9yIHRoZSBzdWJxdWVyeSB3aG9zZQorCSAqIHBvcnRpb24gb2YgdGhl IHJhbmdlIHRhYmxlIHdlIGFyZSBwcm9jZXNzaW5nLiBuZXh0cnRpbmZvIGlzIGFsd2F5cyB0aGUK KwkgKiBTdWJQbGFuUlRJbmZvIHRoYXQgZm9sbG93cyB0aGUgY3VycmVudCBvbmUsIGlmIGFueSwg c28gd2hlbiB3ZSdyZQorCSAqIHByb2Nlc3NpbmcgdGhlIHRvcC1sZXZlbCBxdWVyeSdzIHBvcnRp b24gb2YgdGhlIHJhbmdlIHRhYmxlLCB0aGUgbmV4dAorCSAqIFN1YlBsYW5SVEluZm8gaXMgdGhl IHZlcnkgZmlyc3Qgb25lLgorCSAqLworCWlmIChwc3RtdC0+c3VicnRpbmZvcyAhPSBOVUxMKQor CQluZXh0cnRpbmZvID0gbGluaXRpYWwocHN0bXQtPnN1YnJ0aW5mb3MpOworCisJLyogTWFpbiBs b29wIG92ZXIgdGhlIHJhbmdlIHRhYmxlLiAqLworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9 IHJ0YWJsZV9sZW5ndGg7IHJ0aSsrKQorCXsKKwkJY29uc3QgY2hhciAqcGxhbl9uYW1lOworCQlJ bmRleAkJdG9wX3J0aTsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlOworCQlSYW5nZVRibEVudHJ5ICp0 b3BfcnRlOworCQljaGFyCSAgICpwYXJ0bnNwID0gTlVMTDsKKwkJY2hhcgkgICAqcGFydHJlbCA9 IE5VTEw7CisJCWludAkJCW9jY3VycmVuY2U7CisJCXBncGFfaWRlbnRpZmllciAqcmlkOworCisJ CS8qCisJCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgU3ViUGxhblJUSW5mbywgaWYgaXQncyB0aW1l IHRvIGRvIHRoYXQuCisJCSAqCisJCSAqIFRoaXMgbG9vcCBwcm9iYWJseSBzaG91bGRuJ3QgZXZl ciBpdGVyYXRlIG1vcmUgdGhhbiBvbmNlLCBiZWNhdXNlCisJCSAqIHRoYXQgd291bGQgaW1wbHkg dGhhdCBhIHN1YnF1ZXJ5IHdhcyBwbGFubmVkIGJ1dCBhZGRlZCBub3RoaW5nIHRvCisJCSAqIHRo ZSByYW5nZSB0YWJsZTsgYnV0IGxldCdzIGJlIGRlZmVuc2l2ZSBhbmQgYXNzdW1lIGl0IGNhbiBo YXBwZW4uCisJCSAqLworCQl3aGlsZSAobmV4dHJ0aW5mbyAhPSBOVUxMICYmIHJ0aSA+IG5leHRy dGluZm8tPnJ0b2Zmc2V0KQorCQl7CisJCQlydGluZm8gPSBuZXh0cnRpbmZvOworCQkJaWYgKCsr cnRpbmZvaW5kZXggPj0gbGlzdF9sZW5ndGgocHN0bXQtPnN1YnJ0aW5mb3MpKQorCQkJCW5leHRy dGluZm8gPSBOVUxMOworCQkJZWxzZQorCQkJCW5leHRydGluZm8gPSBsaXN0X250aChwc3RtdC0+ c3VicnRpbmZvcywgcnRpbmZvaW5kZXgpOworCQl9CisKKwkJLyogRmV0Y2ggdGhlIHJhbmdlIHRh YmxlIGVudHJ5LCBpZiBhbnkuICovCisJCXJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcHN0bXQtPnJ0YWJs ZSk7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgYW5kIGRvbid0IG5lZWQgdG8gaWRlbnRpZnkgbnVs bCBlbnRyaWVzLCBhbmQgd2UgZG9uJ3Qgd2FudAorCQkgKiB0byBpZGVudGlmeSBqb2luIGVudHJp ZXMuCisJCSAqLworCQlpZiAocnRlID09IE5VTEwgfHwgcnRlLT5ydGVraW5kID09IFJURV9KT0lO KQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub3QgYSByZWxhdGlvbiBh ZGRlZCBieSBwYXJ0aXRpb25lZCB0YWJsZSBleHBhbnNpb24sCisJCSAqIHRoZW4gdGhlIHRvcCBS VEkvUlRFIGFyZSBqdXN0IHRoZSBzYW1lIGFzIHRoaXMgUlRJL1JURS4gT3RoZXJ3aXNlLAorCQkg KiB3ZSBuZWVkIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRvcCBSVEkvUlRFLCBhbmQgbXVzdCBh bHNvIGZldGNoCisJCSAqIHRoZSBwYXJ0aXRpb24gc2NoZW1hIGFuZCBuYW1lLgorCQkgKi8KKwkJ dG9wX3J0aSA9IHRvcF9ydGlfbWFwW3J0aSAtIDFdOworCQlpZiAocnRpID09IHRvcF9ydGkpCisJ CQl0b3BfcnRlID0gcnRlOworCQllbHNlCisJCXsKKwkJCXRvcF9ydGUgPSBydF9mZXRjaCh0b3Bf cnRpLCBwc3RtdC0+cnRhYmxlKTsKKwkJCXBhcnRuc3AgPQorCQkJCWdldF9uYW1lc3BhY2VfbmFt ZV9vcl90ZW1wKGdldF9yZWxfbmFtZXNwYWNlKHJ0ZS0+cmVsaWQpKTsKKwkJCXBhcnRyZWwgPSBn ZXRfcmVsX25hbWUocnRlLT5yZWxpZCk7CisJCX0KKworCQkvKiBDb21wdXRlIHRoZSBjb3JyZWN0 IG9jY3VycmVuY2UgbnVtYmVyLiAqLworCQlvY2N1cnJlbmNlID0gcGdwYV9vY2N1cnJlbmNlX251 bWJlcihwc3RtdC0+cnRhYmxlLCB0b3BfcnRpX21hcCwKKwkJCQkJCQkJCQkJcnRpbmZvLCB0b3Bf cnRpKTsKKworCQkvKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgcGxhbiAoTlVMTCBmb3Ig dG9wbGV2ZWwgcXVlcnkpLiAqLworCQlwbGFuX25hbWUgPSBydGluZm8gPT0gTlVMTCA/IE5VTEwg OiBydGluZm8tPnBsYW5fbmFtZTsKKworCQkvKiBTYXZlIGFsbCB0aGUgZGV0YWlscyB3ZSd2ZSBk ZXJpdmVkLiAqLworCQlyaWQgPSAmcmVzdWx0W3J0aSAtIDFdOworCQlyaWQtPmFsaWFzX25hbWUg PSB0b3BfcnRlLT5lcmVmLT5hbGlhc25hbWU7CisJCXJpZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVu Y2U7CisJCXJpZC0+cGFydG5zcCA9IHBhcnRuc3A7CisJCXJpZC0+cGFydHJlbCA9IHBhcnRyZWw7 CisJCXJpZC0+cGxhbl9uYW1lID0gcGxhbl9uYW1lOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9 CisKKy8qCisgKiBTZWFyY2ggZm9yIGEgcGdwYV9pZGVudGlmaWVyIGluIHRoZSBhcnJheSBvZiBp ZGVudGlmaWVycyBjb21wdXRlZCBmb3IgdGhlCisgKiByYW5nZSB0YWJsZS4gSWYgZXhhY3RseSBv bmUgbWF0Y2ggaXMgZm91bmQsIHJldHVybiB0aGUgbWF0Y2hpbmcgUlRJOyBlbHNlCisgKiByZXR1 cm4gMC4KKyAqLworSW5kZXgKK3BncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKGludCBy dGFibGVfbGVuZ3RoLAorCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywK KwkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcmlkKQoreworCUluZGV4CQlyZXN1bHQgPSAwOwor CisJZm9yIChJbmRleCBydGkgPSAxOyBydGkgPD0gcnRhYmxlX2xlbmd0aDsgKytydGkpCisJewor CQlwZ3BhX2lkZW50aWZpZXIgKnJ0aV9yaWQgPSAmcnRfaWRlbnRpZmllcnNbcnRpIC0gMV07CisK KwkJLyogSWYgdGhlcmUncyBubyBpZGVudGlmaWVyIGZvciB0aGlzIFJUSSwgc2tpcCBpdC4gKi8K KwkJaWYgKHJ0aV9yaWQtPmFsaWFzX25hbWUgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8q CisJCSAqIElmIGl0IG1hdGNoZXMsIHJldHVybiB0aGlzIFJUSS4gQXMgdXN1YWwsIGFuIG9taXR0 ZWQgcGFydGl0aW9uCisJCSAqIHNjaGVtYSBtYXRjaGVzIGFueXRoaW5nLCBidXQgcGFydGl0aW9u IGFuZCBwbGFuIG5hbWVzIG11c3QgZWl0aGVyCisJCSAqIG1hdGNoIGV4YWN0bHkgb3IgYmUgb21p dHRlZCBvbiBib3RoIHNpZGVzLgorCQkgKi8KKwkJaWYgKHN0cmNtcChyaWQtPmFsaWFzX25hbWUs IHJ0aV9yaWQtPmFsaWFzX25hbWUpID09IDAgJiYKKwkJCXJpZC0+b2NjdXJyZW5jZSA9PSBydGlf cmlkLT5vY2N1cnJlbmNlICYmCisJCQkocmlkLT5wYXJ0bnNwID09IE5VTEwgfHwgcnRpX3JpZC0+ cGFydG5zcCA9PSBOVUxMIHx8CisJCQkgc3RyY21wKHJpZC0+cGFydG5zcCwgcnRpX3JpZC0+cGFy dG5zcCkgPT0gMCkgJiYKKwkJCXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGFydHJl bCwgcnRpX3JpZC0+cGFydHJlbCkgJiYKKwkJCXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJp ZC0+cGxhbl9uYW1lLCBydGlfcmlkLT5wbGFuX25hbWUpKQorCQl7CisJCQlpZiAocmVzdWx0ICE9 IDApCisJCQl7CisJCQkJLyogTXVsdGlwbGUgbWF0Y2hlcyB3ZXJlIGZvdW5kLiAqLworCQkJCXJl dHVybiAwOworCQkJfQorCQkJcmVzdWx0ID0gcnRpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3Vs dDsKK30KKworLyoKKyAqIEJ1aWxkIGEgbWFwcGluZyBmcm9tIGVhY2ggUlRJIHRvIHRoZSBSVEkg d2hvc2UgYWxpYXNfbmFtZSB3aWxsIGJlIHVzZWQgdG8KKyAqIGNvbnN0cnVjdCB0aGUgcmFuZ2Ug dGFibGUgaWRlbnRpZmllci4KKyAqCisgKiBGb3IgY2hpbGQgcmVsYXRpb25zLCB0aGlzIGlzIHRo ZSB0b3Btb3N0IHBhcmVudCB0aGF0IGlzIHN0aWxsIG9mIHR5cGUKKyAqIFJURV9SRUxBVElPTi4g Rm9yIG90aGVyIHJlbGF0aW9ucywgaXQncyBqdXN0IHRoZSBvcmlnaW5hbCBSVEkuCisgKgorICog U2luY2Ugd2UncmUgZXZlbnR1YWxseSBnb2luZyB0byBuZWVkIHRoaXMgaW5mb3JtYXRpb24gZm9y IGV2ZXJ5IFJUSSBpbgorICogdGhlIHJhbmdlIHRhYmxlLCBpdCdzIGJlc3QgdG8gY29tcHV0ZSBh bGwgdGhlIGFuc3dlcnMgaW4gYSBzaW5nbGUgcGFzcyBvdmVyCisgKiB0aGUgQXBwZW5kUmVsSW5m byBsaXN0LiBPdGhlcndpc2UsIHdlIG1pZ2h0IGVuZCB1cCBzZWFyY2hpbmcgdGhyb3VnaCB0aGF0 CisgKiBsaXN0IHJlcGVhdGVkbHkgZm9yIGVudHJpZXMgb2YgaW50ZXJlc3QuCisgKgorICogTm90 ZSB0aGF0IHRoZSByZXR1cm5lZCBhcnJheSBpcyB1c2VzIHplcm8tYmFzZWQgaW5kZXhpbmcsIHdo aWxlIFJUSXMgdXNlCisgKiAxLWJhc2VkIGluZGV4aW5nLCBzbyBzdWJ0cmFjdCAxIGZyb20gdGhl IFJUSSBiZWZvcmUgbG9va2luZyBpdCB1cCBpbiB0aGUKKyAqIGFycmF5LgorICovCitzdGF0aWMg SW5kZXggKgorcGdwYV9jcmVhdGVfdG9wX3J0aV9tYXAoSW5kZXggcnRhYmxlX2xlbmd0aCwgTGlz dCAqcnRhYmxlLCBMaXN0ICphcHBpbmZvcykKK3sKKwlJbmRleAkgICAqdG9wX3J0aV9tYXAgPSBw YWxsb2MwX2FycmF5KEluZGV4LCBydGFibGVfbGVuZ3RoKTsKKworCS8qIEluaXRpYWxseSwgbWFr ZSBldmVyeSBSVEkgcG9pbnQgdG8gaXRzZWxmLiAqLworCWZvciAoSW5kZXggcnRpID0gMTsgcnRp IDw9IHJ0YWJsZV9sZW5ndGg7ICsrcnRpKQorCQl0b3BfcnRpX21hcFtydGkgLSAxXSA9IHJ0aTsK KworCS8qIFVwZGF0ZSB0aGUgbWFwIGZvciBlYWNoIEFwcGVuZFJlbEluZm8gb2JqZWN0LiAqLwor CWZvcmVhY2hfbm9kZShBcHBlbmRSZWxJbmZvLCBhcHBpbmZvLCBhcHBpbmZvcykKKwl7CisJCUlu ZGV4CQlwYXJlbnRfcnRpID0gYXBwaW5mby0+cGFyZW50X3JlbGlkOworCQlSYW5nZVRibEVudHJ5 ICpwYXJlbnRfcnRlID0gcnRfZmV0Y2gocGFyZW50X3J0aSwgcnRhYmxlKTsKKworCQkvKiBJZiB0 aGUgcGFyZW50IGlzIG5vdCBSVEVfUkVMQVRJT04sIGlnbm9yZSB0aGlzIGVudHJ5LiAqLworCQlp ZiAocGFyZW50X3J0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQljb250aW51ZTsKKwor CQkvKgorCQkgKiBNYXAgdGhlIGNoaWxkIHRvIHdoZXJldmVyIHdlIG1hcHBlZCB0aGUgcGFyZW50 LiBQYXJlbnRzIGFsd2F5cworCQkgKiBwcmVjZWRlIHRoZWlyIGNoaWxkcmVuIGluIHRoZSBBcHBl bmRSZWxJbmZvIGxpc3QsIHNvIHRoaXMgc2hvdWxkCisJCSAqIHdvcmsgb3V0LgorCQkgKi8KKwkJ dG9wX3J0aV9tYXBbYXBwaW5mby0+Y2hpbGRfcmVsaWQgLSAxXSA9IHRvcF9ydGlfbWFwW3BhcmVu dF9ydGkgLSAxXTsKKwl9CisKKwlyZXR1cm4gdG9wX3J0aV9tYXA7Cit9CisKKy8qCisgKiBGaW5k IHRoZSBvY2N1cmVuY2UgbnVtYmVyIG9mIGEgY2VydGFpbiByZWxhdGlvbiB3aXRoaW4gYSBjZXJ0 YWluIHN1YnF1ZXJ5LgorICoKKyAqIFRoZSBzYW1lIGFsaWFzIG5hbWUgY2FuIG9jY3VyIG11bHRp cGxlIHRpbWVzIHdpdGhpbiBhIHN1YnF1ZXJ5LCBidXQgd2Ugd2FudAorICogdG8gZGlzYW1iaWd1 YXRlIGJ5IGdpdmluZyBkaWZmZXJlbnQgb2NjdXJyZW5jZXMgZGlmZmVyZW50IGludGVnZXIgaW5k ZXhlcy4KKyAqIEhvd2V2ZXIsIGNoaWxkIHRhYmxlcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBpbmNs dWRpbmcgdGhlIHRhYmxlIG5hbWUgcmF0aGVyCisgKiB0aGFuIGJ5IGluY3JlbWVudGluZyB0aGUg b2NjdXJyZW5jZSBudW1iZXI7IGFuZCBqb2lucyBhcmUgbm90IG5hbWVkIGFuZCBzbworICogc2hv dWxkbid0IGluY3JlbWVudCB0aGUgb2NjdXJlbmNlIG51bWJlciBlaXRoZXIuCisgKi8KK3N0YXRp YyBpbnQKK3BncGFfb2NjdXJyZW5jZV9udW1iZXIoTGlzdCAqcnRhYmxlLCBJbmRleCAqdG9wX3J0 aV9tYXAsCisJCQkJCSAgIFN1YlBsYW5SVEluZm8gKnJ0aW5mbywgSW5kZXggcnRpKQoreworCUlu ZGV4CQlydG9mZnNldCA9IChydGluZm8gPT0gTlVMTCkgPyAwIDogcnRpbmZvLT5ydG9mZnNldDsK KwlpbnQJCQlvY2N1cnJlbmNlID0gMTsKKwlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChy dGksIHJ0YWJsZSk7CisKKwlmb3IgKEluZGV4IHByaW9yX3J0aSA9IHJ0b2Zmc2V0ICsgMTsgcHJp b3JfcnRpIDwgcnRpOyArK3ByaW9yX3J0aSkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnByaW9yX3J0 ZTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgY2hpbGQgcmVsIG9mIGEgcGFyZW50IHRoYXQg aXMgYSByZWxhdGlvbiwgc2tpcCBpdC4KKwkJICoKKwkJICogU3VjaCByYW5nZSB0YWJsZSBlbnRy aWVzIGFyZSBkaXNhbWJpZ3VhdGVkIGJ5IG1lbnRpb25pbmcgdGhlIHNjaGVtYQorCQkgKiBhbmQg bmFtZSBvZiB0aGUgdGFibGUsIG5vdCBieSBjb3VudGluZyB0aGVtIGFzIHNlcGFyYXRlIG9jY3Vy cmVuY2VzCisJCSAqIG9mIHRoZSBzYW1lIHRhYmxlLgorCQkgKi8KKwkJaWYgKHRvcF9ydGlfbWFw W3ByaW9yX3J0aSAtIDFdICE9IHByaW9yX3J0aSkKKwkJCWJyZWFrOworCisJCS8qIFNraXAgam9p bnMuICovCisJCXByaW9yX3J0ZSA9IHJ0X2ZldGNoKHByaW9yX3J0aSwgcnRhYmxlKTsKKwkJaWYg KHByaW9yX3J0ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qIFNr aXAgaWYgdGhlIGFsaWFzIG5hbWUgZGlmZmVycy4gKi8KKwkJaWYgKHN0cmNtcChwcmlvcl9ydGUt PmVyZWYtPmFsaWFzbmFtZSwgcnRlLT5lcmVmLT5hbGlhc25hbWUpICE9IDApCisJCQljb250aW51 ZTsKKworCQkvKiBMb29rcyBsaWtlIGEgdHJ1ZSBkdXBsaWNhdGUuICovCisJCSsrb2NjdXJyZW5j ZTsKKwl9CisKKwlyZXR1cm4gb2NjdXJyZW5jZTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfaWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5i MDAwZDJiNzA4MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9pZGVudGlmaWVyLmgKQEAgLTAsMCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogcGdwYV9pZGVudGlmaWVyLmgKKyAqCSAgY3JlYXRlIGFwcHJvcHJpYXRlIGlkZW50aWZpZXJz IGZvciByYW5nZSB0YWJsZSBlbnRyaWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworI2lmbmRlZiBQR1BBX0lERU5USUZJRVJfSAorI2RlZmluZSBQR1BBX0lERU5USUZJRVJf SAorCisjaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcGxhbm5v ZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfaWRlbnRpZmllcgoreworCWNvbnN0IGNoYXIg KmFsaWFzX25hbWU7CisJaW50CQkJb2NjdXJyZW5jZTsKKwljb25zdCBjaGFyICpwYXJ0bnNwOwor CWNvbnN0IGNoYXIgKnBhcnRyZWw7CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworfSBwZ3BhX2lk ZW50aWZpZXI7CisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgcG9zc2li bHktTlVMTCBzdHJpbmdzLiAqLworc3RhdGljIGlubGluZSBib29sCitzdHJpbmdzX2VxdWFsX29y X2JvdGhfbnVsbChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCWlmIChhID09IGIp CisJCXJldHVybiB0cnVlOworCWVsc2UgaWYgKGEgPT0gTlVMTCB8fCBiID09IE5VTEwpCisJCXJl dHVybiBmYWxzZTsKKwllbHNlCisJCXJldHVybiBzdHJjbXAoYSwgYikgPT0gMDsKK30KKworZXh0 ZXJuIGNvbnN0IGNoYXIgKnBncGFfaWRlbnRpZmllcl9zdHJpbmcoY29uc3QgcGdwYV9pZGVudGlm aWVyICpyaWQpOworZXh0ZXJuIHZvaWQgcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKFBs YW5uZXJJbmZvICpyb290LCBJbmRleCBydGksCisJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVy ICpyaWQpOworZXh0ZXJuIGludAlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKFBs YW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCQkJ CQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWRzKTsKK2V4dGVybiBwZ3BhX2lkZW50aWZpZXIg KnBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQoUGxhbm5lZFN0bXQgKnBz dG10KTsKKworZXh0ZXJuIEluZGV4IHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKGlu dCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRp ZmllcnMsCisJCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWQpOworCisjZW5kaWYKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfam9pbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi4yODYxODc2NGQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9qb2luLmMKQEAgLTAsMCArMSw2MTUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIHBncGFfam9pbi5jCisgKgkgIGFuYWx5c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMK KyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKwor I2luY2x1ZGUgInBncGFfam9pbi5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUg InBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNsdWRl ICJub2Rlcy9wcmludC5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKworLyoKKyAq IFRlbXBvcmFyeSBvYmplY3QgdXNlZCB3aGVuIHVucm9sbGluZyBhIGpvaW4gdHJlZS4KKyAqLwor c3RydWN0IHBncGFfam9pbl91bnJvbGxlcgoreworCXVuc2lnbmVkCW5hbGxvY2F0ZWQ7CisJdW5z aWduZWQJbnVzZWQ7CisJUGxhbgkgICAqb3V0ZXJfc3VicGxhbjsKKwlFbGlkZWROb2RlICpvdXRl cl9lbGlkZWRfbm9kZTsKKwlib29sCQlvdXRlcl9iZW5lYXRoX2FueV9nYXRoZXI7CisJcGdwYV9q b2luX3N0cmF0ZWd5ICpzdHJhdGVneTsKKwlQbGFuCSAgKippbm5lcl9zdWJwbGFuczsKKwlFbGlk ZWROb2RlICoqaW5uZXJfZWxpZGVkX25vZGVzOworCXBncGFfam9pbl91bnJvbGxlciAqKmlubmVy X3Vucm9sbGVyczsKKwlib29sCSAgICppbm5lcl9iZW5lYXRoX2FueV9nYXRoZXI7Cit9OworCitz dGF0aWMgcGdwYV9qb2luX3N0cmF0ZWd5IHBncGFfZGVjb21wb3NlX2pvaW4ocGdwYV9wbGFuX3dh bGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJCSAgUGxhbiAqcGxhbiwKKwkJCQkJCQkJ CQkJICBQbGFuICoqcmVhbG91dGVyLAorCQkJCQkJCQkJCQkgIFBsYW4gKipyZWFsaW5uZXIsCisJ CQkJCQkJCQkJCSAgRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxvdXRlciwKKwkJCQkJCQkJCQkJICBF bGlkZWROb2RlICoqZWxpZGVkcmVhbGlubmVyLAorCQkJCQkJCQkJCQkgIGJvb2wgKmZvdW5kX2Fu eV9vdXRlcl9nYXRoZXIsCisJCQkJCQkJCQkJCSAgYm9vbCAqZm91bmRfYW55X2lubmVyX2dhdGhl cik7CitzdGF0aWMgRWxpZGVkTm9kZSAqcGdwYV9kZXNjZW5kX25vZGUoUGxhbm5lZFN0bXQgKnBz dG10LCBQbGFuICoqcGxhbik7CitzdGF0aWMgRWxpZGVkTm9kZSAqcGdwYV9kZXNjZW5kX2FueV9n YXRoZXIoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCQkJCQkgICBib29s ICpmb3VuZF9hbnlfZ2F0aGVyKTsKK3N0YXRpYyBib29sIHBncGFfZGVzY2VuZF9hbnlfdW5pcXVl KFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQkJCQlFbGlkZWROb2RlICoq ZWxpZGVkX25vZGUpOworCitzdGF0aWMgYm9vbCBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKFBs YW4gKnBsYW4pOworc3RhdGljIGJvb2wgaXNfc29ydGluZ19wbGFuKFBsYW4gKnBsYW4pOworCisv KgorICogQ3JlYXRlIGFuIGluaXRpYWxseS1lbXB0eSBvYmplY3QgZm9yIHVucm9sbGluZyBqb2lu cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBoZWxwZXIgb2JqZWN0IHRoYXQgY2Fu IGxhdGVyIGJlIHVzZWQgdG8gY3JlYXRlIGEKKyAqIHBncGFfdW5yb2xsZWRfam9pbiwgYWZ0ZXIg Zmlyc3QgY2FsbGluZyBwZ3BhX3Vucm9sbF9qb2luIG9uZSBvciBtb3JlIHRpbWVzLgorICovCitw Z3BhX2pvaW5fdW5yb2xsZXIgKgorcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcih2b2lkKQorewor CXBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcjsKKworCWpvaW5fdW5yb2xsZXIgPSBw YWxsb2MwX29iamVjdChwZ3BhX2pvaW5fdW5yb2xsZXIpOworCWpvaW5fdW5yb2xsZXItPm5hbGxv Y2F0ZWQgPSA0OworCWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5ID0KKwkJcGFsbG9jX2FycmF5KHBn cGFfam9pbl9zdHJhdGVneSwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJam9pbl91bnJv bGxlci0+aW5uZXJfc3VicGxhbnMgPQorCQlwYWxsb2NfYXJyYXkoUGxhbiAqLCBqb2luX3Vucm9s bGVyLT5uYWxsb2NhdGVkKTsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMgPQor CQlwYWxsb2NfYXJyYXkoRWxpZGVkTm9kZSAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsK Kwlqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMgPQorCQlwYWxsb2NfYXJyYXkocGdwYV9q b2luX3Vucm9sbGVyICosIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xs ZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlciA9CisJCXBhbGxvY19hcnJheShib29sLCBqb2lu X3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKworCXJldHVybiBqb2luX3Vucm9sbGVyOworfQorCisv KgorICogVW5yb2xsIG9uZSBsZXZlbCBvZiBhbiB1bnJvbGxhYmxlIGpvaW4gdHJlZS4KKyAqCisg KiBPdXIgYmFzaWMgZ29hbCBoZXJlIGlzIHRvIHVucm9sbCBqb2luIHRyZWVzIGFzIHRoZXkgb2Nj dXIgaW4gdGhlIFBsYW4KKyAqIHRyZWUgaW50byBhIHNpbXBsZXIgYW5kIG1vcmUgcmVndWxhciBz dHJ1Y3R1cmUgdGhhdCB3ZSBjYW4gbW9yZSBlYXNpbHkKKyAqIHVzZSBmb3IgZnVydGhlciBwcm9j ZXNzaW5nLiBVbnJvbGxpbmcgaXMgb3V0ZXItZGVlcCwgc28gaWYgdGhlIHBsYW4gdHJlZQorICog aGFzIEpvaW4xKEpvaW4yKEEsQiksSm9pbjMoQyxEKSksIHRoZSBzYW1lIGpvaW4gdW5yb2xsZXIg b2JqZWN0IHNob3VsZCBiZQorICogdXNlZCBmb3IgSm9pbjEgYW5kIEpvaW4yLCBidXQgYSBkaWZm ZXJlbnQgb25lIHdpbGwgYmUgbmVlZGVkIGZvciBKb2luMywKKyAqIHNpbmNlIHRoYXQgaW52b2x2 ZXMgYSBqb2luIHdpdGhpbiB0aGUgKmlubmVyKiBzaWRlIG9mIGFub3RoZXIgam9pbi4KKyAqCisg KiBwZ3BhX3BsYW5fd2Fsa2VyIGNyZWF0ZXMgYSAidG9wIGxldmVsIiBqb2luIHVucm9sbGVyIG9i amVjdCB3aGVuIGl0CisgKiBlbmNvdW50ZXJzIGEgam9pbiBpbiBhIHBvcnRpb24gb2YgdGhlIHBs YW4gdHJlZSBpbiB3aGljaCBubyBqb2luIHVucm9sbGVyCisgKiBpcyBhbHJlYWR5IGFjdGl2ZS4g RnJvbSB0aGVyZSwgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5nCisg KiB0byB3aGF0IHBvcnRpb24gb2YgdGhlIHBsYW4gdHJlZSB0aGF0IGpvaW4gdW5yb2xsZXIgYXBw bGllcywgYW5kIGZvcgorICogY3JlYXRpbmcgYW55IHN1Ym9yZGluYXRlIGpvaW4gdW5yb2xsZXIg b2JqZWN0cyB0aGF0IGFyZSBuZWVkZWQgYXMgYSByZXN1bHQKKyAqIG9mIG5vbi1vdXRlci1kZWVw IGpvaW4gdHJlZXMuIFdlIGRvIHRoaXMgYnkgcmV0dXJuaW5nIHRoZSBqb2luIHVucm9sbGVyCisg KiBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGZ1cnRoZXIgdHJhdmVyc2FsIG9mIHRo ZSBvdXRlciBhbmQgaW5uZXIKKyAqIHN1YnRyZWVzIG9mIHRoZSBjdXJyZW50IHBsYW4gbm9kZSB2 aWEgKm91dGVyX2pvaW5fdW5yb2xsZXIgYW5kCisgKiAqaW5uZXJfam9pbl91bnJvbGxlciwgcmVz cGVjdGl2ZWx5LgorICovCit2b2lkCitwZ3BhX3Vucm9sbF9qb2luKHBncGFfcGxhbl93YWxrZXJf Y29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCSBib29sIGJlbmVhdGhfYW55X2dhdGhl ciwKKwkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCSBwZ3BhX2pv aW5fdW5yb2xsZXIgKipvdXRlcl9qb2luX3Vucm9sbGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xs ZXIgKippbm5lcl9qb2luX3Vucm9sbGVyKQoreworCXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVn eTsKKwlQbGFuCSAgICpyZWFsaW5uZXIsCisJCQkgICAqcmVhbG91dGVyOworCUVsaWRlZE5vZGUg KmVsaWRlZGlubmVyLAorCQkJICAgKmVsaWRlZG91dGVyOworCWludAkJCW47CisJYm9vbAkJZm91 bmRfYW55X291dGVyX2dhdGhlciA9IGZhbHNlOworCWJvb2wJCWZvdW5kX2FueV9pbm5lcl9nYXRo ZXIgPSBmYWxzZTsKKworCUFzc2VydChqb2luX3Vucm9sbGVyICE9IE5VTEwpOworCisJLyoKKwkg KiBXZSBuZWVkIHRvIHBhc3MgdGhlIGpvaW5fdW5yb2xsZXIgb2JqZWN0IGRvd24gdGhyb3VnaCBj ZXJ0YWluIHR5cGVzIG9mCisJICogcGxhbiBub2RlcyAtLSBhbnl0aGluZyB0aGF0J3MgY29uc2lk ZXJlZCBwYXJ0IG9mIHRoZSBqb2luIHN0cmF0ZWd5LCBhbmQKKwkgKiBhbnkgb3RoZXIgbm9kZXMg dGhhdCBjYW4gb2NjdXIgaW4gYSBqb2luIHRyZWUgZGVzcGl0ZSBub3QgYmVpbmcgc2NhbnMKKwkg KiBvciBqb2lucy4KKwkgKgorCSAqIFRoaXMgaW5jbHVkZXM6CisJICoKKwkgKiAoMSkgTWF0ZXJp YWxpemUsIE1lbW9pemUsIGFuZCBIYXNoIG5vZGVzLCB3aGljaCBhcmUgcGFydCBvZiB0aGUgam9p bgorCSAqIHN0cmF0ZWd5LAorCSAqCisJICogKDIpIEdhdGhlciBhbmQgR2F0aGVyIE1lcmdlIG5v ZGVzLCB3aGljaCBjYW4gb2NjdXIgYXQgYW55IHBvaW50IGluIHRoZQorCSAqIGpvaW4gdHJlZSB3 aGVyZSB0aGUgcGxhbm5lciBkZWNpZGVkIHRvIGluaXRpYXRlIHBhcmFsbGVsaXNtLAorCSAqCisJ ICogKDMpIFNvcnQgYW5kIEluY3JlbWVudGFsU29ydCBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIGJl bmVhdGggTWVyZ2VKb2luCisJICogb3IgR2F0aGVyTWVyZ2UsCisJICoKKwkgKiAoNCkgQWdnIGFu ZCBVbmlxdWUgbm9kZXMsIHdoaWNoIGNhbiBvY2N1ciB3aGVuIHdlIGRlY2lkZSB0byBtYWtlIHRo ZQorCSAqIG51bGxhYmxlIHNpZGUgb2YgYSBzZW1pam9pbiB1bmlxdWUgYW5kIHRoZW4gam9pbiB0 aGUgcmVzdWx0LCBhbmQKKwkgKgorCSAqICg1KSBSZXN1bHQgbm9kZXMgd2l0aCBjaGlsZHJlbiwg d2hpY2ggY2FuIGJlIGFkZGVkIGVpdGhlciB0byBwcm9qZWN0IHRvCisJICogZW5mb3JjZSBhIG9u ZS10aW1lIGZpbHRlciAoYnV0IFJlc3VsdCBub2RlcyB3aXRob3V0IGNoaWxkcmVuIGFyZQorCSAq IGRlZ2VuZXJhdGUgc2NhbnMgb3Igam9pbnMpLgorCSAqLworCWlmIChJc0EocGxhbiwgTWF0ZXJp YWwpIHx8IElzQShwbGFuLCBNZW1vaXplKSB8fCBJc0EocGxhbiwgSGFzaCkKKwkJfHwgSXNBKHBs YW4sIEdhdGhlcikgfHwgSXNBKHBsYW4sIEdhdGhlck1lcmdlKQorCQl8fCBpc19zb3J0aW5nX3Bs YW4ocGxhbikgfHwgSXNBKHBsYW4sIEFnZykgfHwgSXNBKHBsYW4sIFVuaXF1ZSkKKwkJfHwgaXNf cmVzdWx0X25vZGVfd2l0aF9jaGlsZChwbGFuKSkKKwl7CisJCSpvdXRlcl9qb2luX3Vucm9sbGVy ID0gam9pbl91bnJvbGxlcjsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU2luY2Ugd2UndmUg YWxyZWFkeSBoYW5kbGVkIG5vZGVzIHRoYXQgcmVxdWlyZSBwYXNzLXRocm91Z2ggdHJlYXRtZW50 LAorCSAqIHRoaXMgc2hvdWxkIGJlIGFuIHVucm9sbGFibGUgam9pbi4KKwkgKi8KKwlzdHJhdGVn eSA9IHBncGFfZGVjb21wb3NlX2pvaW4od2Fsa2VyLCBwbGFuLAorCQkJCQkJCQkgICAmcmVhbG91 dGVyLCAmcmVhbGlubmVyLAorCQkJCQkJCQkgICAmZWxpZGVkb3V0ZXIsICZlbGlkZWRpbm5lciwK KwkJCQkJCQkJICAgJmZvdW5kX2FueV9vdXRlcl9nYXRoZXIsCisJCQkJCQkJCSAgICZmb3VuZF9h bnlfaW5uZXJfZ2F0aGVyKTsKKworCS8qIElmIG91ciB3b3Jrc3BhY2UgaXMgZnVsbCwgZXhwYW5k IGl0LiAqLworCWlmIChqb2luX3Vucm9sbGVyLT5udXNlZCA+PSBqb2luX3Vucm9sbGVyLT5uYWxs b2NhdGVkKQorCXsKKwkJam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCAqPSAyOworCQlqb2luX3Vu cm9sbGVyLT5zdHJhdGVneSA9CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5zdHJh dGVneSwKKwkJCQkJCSAgIHBncGFfam9pbl9zdHJhdGVneSwKKwkJCQkJCSAgIGpvaW5fdW5yb2xs ZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucyA9CisJCQly ZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucywKKwkJCQkJCSAgIFBs YW4gKiwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9s bGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxl ci0+aW5uZXJfZWxpZGVkX25vZGVzLAorCQkJCQkJICAgRWxpZGVkTm9kZSAqLAorCQkJCQkJICAg am9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVh dGhfYW55X2dhdGhlciA9CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl9i ZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQkgICBib29sLAorCQkJCQkJICAgam9pbl91bnJvbGxl ci0+bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyA9CisJCQly ZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMsCisJCQkJCQkgICBw Z3BhX2pvaW5fdW5yb2xsZXIgKiwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQp OworCX0KKworCS8qCisJICogU2luY2Ugd2UncmUgZmxhdHRlbmluZyBvdXRlci1kZWVwIGpvaW4g dHJlZXMsIGl0IGZvbGxvd3MgdGhhdCBpZiB0aGUKKwkgKiBvdXRlciBzaWRlIGlzIHN0aWxsIGFu IHVucm9sbGFibGUgam9pbiwgaXQgc2hvdWxkIGJlIHVucm9sbGVkIGludG8gdGhpcworCSAqIHNh bWUgb2JqZWN0LiBPdGhlcndpc2UsIHdlJ3ZlIHJlYWNoZWQgdGhlIGxpbWl0IG9mIHdoYXQgd2Ug Y2FuIHVucm9sbAorCSAqIGludG8gdGhpcyBvYmplY3QgYW5kIG11c3QgcmVtZW1iZXIgdGhlIG91 dGVyIHNpZGUgYXMgdGhlIGZpbmFsIG91dGVyCisJICogc3VicGxhbi4KKwkgKi8KKwlpZiAoZWxp ZGVkb3V0ZXIgPT0gTlVMTCAmJiBwZ3BhX2lzX2pvaW4ocmVhbG91dGVyKSkKKwkJKm91dGVyX2pv aW5fdW5yb2xsZXIgPSBqb2luX3Vucm9sbGVyOworCWVsc2UKKwl7CisJCWpvaW5fdW5yb2xsZXIt Pm91dGVyX3N1YnBsYW4gPSByZWFsb3V0ZXI7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX2VsaWRl ZF9ub2RlID0gZWxpZGVkb3V0ZXI7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX2JlbmVhdGhfYW55 X2dhdGhlciA9CisJCQliZW5lYXRoX2FueV9nYXRoZXIgfHwgZm91bmRfYW55X291dGVyX2dhdGhl cjsKKwl9CisKKwkvKgorCSAqIFN0b3JlIHRoZSBpbm5lciBzdWJwbGFuLiBJZiBpdCdzIGFuIHVu cm9sbGFibGUgam9pbiwgaXQgbmVlZHMgdG8gYmUKKwkgKiBmbGF0dGVuZWQgaW4gdHVybiwgYnV0 IGludG8gYSBuZXcgdW5yb2xsZXIgb2JqZWN0LCBub3QgdGhpcyBvbmUuCisJICovCisJbiA9IGpv aW5fdW5yb2xsZXItPm51c2VkKys7CisJam9pbl91bnJvbGxlci0+c3RyYXRlZ3lbbl0gPSBzdHJh dGVneTsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFuc1tuXSA9IHJlYWxpbm5lcjsKKwlq b2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXNbbl0gPSBlbGlkZWRpbm5lcjsKKwlqb2lu X3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXJbbl0gPQorCQliZW5lYXRoX2FueV9n YXRoZXIgfHwgZm91bmRfYW55X2lubmVyX2dhdGhlcjsKKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVM TCAmJiBwZ3BhX2lzX2pvaW4ocmVhbGlubmVyKSkKKwkJKmlubmVyX2pvaW5fdW5yb2xsZXIgPSBw Z3BhX2NyZWF0ZV9qb2luX3Vucm9sbGVyKCk7CisJZWxzZQorCQkqaW5uZXJfam9pbl91bnJvbGxl ciA9IE5VTEw7CisJam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzW25dID0gKmlubmVyX2pv aW5fdW5yb2xsZXI7Cit9CisKKy8qCisgKiBVc2UgdGhlIGRhdGEgd2UndmUgYWNjdW11bGF0ZWQg aW4gYSBwZ3BhX2pvaW5fdW5yb2xsZXIgb2JqZWN0IHRvIGNvbnN0cnVjdAorICogYSBwZ3BhX3Vu cm9sbGVkX2pvaW4uCisgKi8KK3BncGFfdW5yb2xsZWRfam9pbiAqCitwZ3BhX2J1aWxkX3Vucm9s bGVkX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgcGdwYV9q b2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKQoreworCXBncGFfdW5yb2xsZWRfam9pbiAqdWpv aW47CisJaW50CQkJaTsKKworCS8qCisJICogV2Ugc2hvdWxkbid0IGhhdmUgZ29uZSBldmVuIHNv IGZhciBhcyB0byBjcmVhdGUgYSBqb2luIHVucm9sbGVyIHVubGVzcworCSAqIHdlIGZvdW5kIGF0 IGxlYXN0IG9uZSB1bnJvbGxhYmxlIGpvaW4uCisJICovCisJQXNzZXJ0KGpvaW5fdW5yb2xsZXIt Pm51c2VkID4gMCk7CisKKwkvKiBBbGxvY2F0ZSByZXN1bHQgc3RydWN0dXJlcy4gKi8KKwl1am9p biA9IHBhbGxvYzBfb2JqZWN0KHBncGFfdW5yb2xsZWRfam9pbik7CisJdWpvaW4tPm5pbm5lciA9 IGpvaW5fdW5yb2xsZXItPm51c2VkOworCXVqb2luLT5zdHJhdGVneSA9IHBhbGxvYzBfYXJyYXko cGdwYV9qb2luX3N0cmF0ZWd5LCBqb2luX3Vucm9sbGVyLT5udXNlZCk7CisJdWpvaW4tPmlubmVy ID0gcGFsbG9jMF9hcnJheShwZ3BhX2pvaW5fbWVtYmVyLCBqb2luX3Vucm9sbGVyLT5udXNlZCk7 CisKKwkvKiBIYW5kbGUgdGhlIG91dGVybW9zdCBqb2luLiAqLworCXVqb2luLT5vdXRlci5wbGFu ID0gam9pbl91bnJvbGxlci0+b3V0ZXJfc3VicGxhbjsKKwl1am9pbi0+b3V0ZXIuZWxpZGVkX25v ZGUgPSBqb2luX3Vucm9sbGVyLT5vdXRlcl9lbGlkZWRfbm9kZTsKKwl1am9pbi0+b3V0ZXIuc2Nh biA9CisJCXBncGFfYnVpbGRfc2Nhbih3YWxrZXIsIHVqb2luLT5vdXRlci5wbGFuLAorCQkJCQkJ dWpvaW4tPm91dGVyLmVsaWRlZF9ub2RlLAorCQkJCQkJam9pbl91bnJvbGxlci0+b3V0ZXJfYmVu ZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJdHJ1ZSk7CisKKwkvKgorCSAqIFdlIHdhbnQgdGhlIGpv aW5zIGZyb20gdGhlIGRlZXBlc3QgcGFydCBvZiB0aGUgcGxhbiB0cmVlIHRvIGFwcGVhcgorCSAq IGZpcnN0IGluIHRoZSByZXN1bHQgb2JqZWN0LCBidXQgdGhlIGpvaW4gdW5yb2xsZXIgYWRkcyB0 aGVtIGluIGV4YWN0bHkKKwkgKiB0aGUgcmV2ZXJzZSBvZiB0aGF0IG9yZGVyLCBzbyB3ZSBuZWVk IHRvIGZsaXAgdGhlIG9yZGVyIG9mIHRoZSBhcnJheXMKKwkgKiB3aGVuIGNvbnN0cnVjdGluZyB0 aGUgZmluYWwgcmVzdWx0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBqb2luX3Vucm9sbGVyLT5u dXNlZDsgKytpKQorCXsKKwkJaW50CQkJayA9IGpvaW5fdW5yb2xsZXItPm51c2VkIC0gaSAtIDE7 CisKKwkJLyogQ29weSBzdHJhdGVneSwgUGxhbiwgYW5kIEVsaWRlZE5vZGUuICovCisJCXVqb2lu LT5zdHJhdGVneVtpXSA9IGpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5W2tdOworCQl1am9pbi0+aW5u ZXJbaV0ucGxhbiA9IGpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zW2tdOworCQl1am9pbi0+ aW5uZXJbaV0uZWxpZGVkX25vZGUgPSBqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXNb a107CisKKwkJLyoKKwkJICogRmlsbCBpbiByZW1haW5pbmcgZGV0YWlscywgdXNpbmcgZWl0aGVy IHRoZSBuZXN0ZWQgam9pbiB1bnJvbGxlciwKKwkJICogb3IgYnkgZGVyaXZpbmcgdGhlbSBmcm9t IHRoZSBwbGFuIGFuZCBlbGlkZWQgbm9kZXMuCisJCSAqLworCQlpZiAoam9pbl91bnJvbGxlci0+ aW5uZXJfdW5yb2xsZXJzW2tdICE9IE5VTEwpCisJCQl1am9pbi0+aW5uZXJbaV0udW5yb2xsZWRf am9pbiA9CisJCQkJcGdwYV9idWlsZF91bnJvbGxlZF9qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkg am9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzW2tdKTsKKwkJZWxzZQorCQkJdWpvaW4tPmlu bmVyW2ldLnNjYW4gPQorCQkJCXBncGFfYnVpbGRfc2Nhbih3YWxrZXIsIHVqb2luLT5pbm5lcltp XS5wbGFuLAorCQkJCQkJCQl1am9pbi0+aW5uZXJbaV0uZWxpZGVkX25vZGUsCisJCQkJCQkJCWpv aW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlcltpXSwKKwkJCQkJCQkJdHJ1ZSk7 CisJfQorCisJcmV0dXJuIHVqb2luOworfQorCisvKgorICogRnJlZSBtZW1vcnkgYWxsb2NhdGVk IGZvciBwZ3BhX2pvaW5fdW5yb2xsZXIuCisgKi8KK3ZvaWQKK3BncGFfZGVzdHJveV9qb2luX3Vu cm9sbGVyKHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcikKK3sKKwlwZnJlZShqb2lu X3Vucm9sbGVyLT5zdHJhdGVneSk7CisJcGZyZWUoam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxh bnMpOworCXBmcmVlKGpvaW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2Rlcyk7CisJcGZyZWUo am9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyKTsK K30KKworLyoKKyAqIElkZW50aWZ5IHRoZSBqb2luIHN0cmF0ZWd5IHVzZWQgYnkgYSBqb2luIGFu ZCB0aGUgInJlYWwiIGlubmVyIGFuZCBvdXRlcgorICogcGxhbnMuCisgKgorICogRm9yIGV4YW1w bGUsIGEgSGFzaCBKb2luIGFsd2F5cyBoYXMgYSBIYXNoIG5vZGUgb24gdGhlIGlubmVyIHNpZGUs IGJ1dAorICogZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcyB0aGUgcmVhbCBpbm5lciBpbnB1 dCBpcyB0aGUgSGFzaCBub2RlJ3MgY2hpbGQsCisgKiBub3QgdGhlIEhhc2ggbm9kZSBpdHNlbGYu CisgKgorICogTGlrZXdpc2UsIGEgTWVyZ2UgSm9pbiBtYXkgaGF2ZSBTb3J0IG5vdGUgb24gdGhl IGlubmVyIG9yIG91dGVyIHNpZGU7IGlmCisgKiBpdCBkb2VzLCB0aGUgcmVhbCBpbnB1dCB0byB0 aGUgam9pbiBpcyB0aGUgU29ydCBub2RlJ3MgY2hpbGQsIG5vdCB0aGUKKyAqIFNvcnQgbm9kZSBp dHNlbGYuCisgKgorICogSW4gYWRkaXRpb24sIHdpdGggYSBNZXJnZSBKb2luIG9yIGEgTmVzdGVk IExvb3AsIHRoZSBqb2luIHBsYW5uaW5nIGNvZGUKKyAqIG1heSBhZGQgYWRkaXRpb25hbCBub2Rl cyBzdWNoIGFzIE1hdGVyaWFsaXplIG9yIE1lbW9pemUuIFdlIHJlZ2FyZCB0aGVzZQorICogYXMg YW4gYXNwZWN0IG9mIHRoZSBqb2luIHN0cmF0ZWd5LiBBcyBpbiB0aGUgcHJldmlvdXMgY2FzZXMs IHRoZSB0cnVlIGlucHV0CisgKiB0byB0aGUgam9pbiBpcyB0aGUgdW5kZXJseWluZyBub2RlLgor ICoKKyAqIEhvd2V2ZXIsIGlmIGFueSBpbnZvbHZlZCBjaGlsZCBub2RlIHByZXZpb3VzbHkgaGFk IGEgbm93LWVsaWRlZCBub2RlIHN0YWNrZWQKKyAqIG9uIHRvcCwgdGhlbiB3ZSBjYW4ndCAibG9v ayB0aHJvdWdoIiB0aGF0IG5vZGUgLS0gaW5kZWVkLCB3aGF0J3MgZ29pbmcgdG8gYmUKKyAqIHJl bGV2YW50IGZvciBvdXIgcHVycG9zZXMgaXMgdGhlIEVsaWRlZE5vZGUgb24gdG9wIG9mIHRoYXQg cGxhbiBub2RlLCByYXRoZXIKKyAqIHRoYW4gdGhlIHBsYW4gbm9kZSBpdHNlbGYuCisgKgorICog SWYgdGhlcmUgYXJlIG11bHRpcGxlIGVsaWRlZCBub2Rlcywgd2Ugd2FudCB0aGF0IG9uZSB0aGF0 IHdvdWxkIGhhdmUgYmVlbgorICogdXBwZXJtb3N0IGluIHRoZSBwbGFuIHRyZWUgcHJpb3IgdG8g c2V0cmVmcyBwcm9jZXNzaW5nOyB3ZSBleHBlY3QgdG8gZmluZAorICogdGhhdCBvbmUgbGFzdCBp biB0aGUgbGlzdCBvZiBlbGlkZWQgbm9kZXMuCisgKgorICogT24gcmV0dXJuICpyZWFsb3V0ZXIg YW5kICpyZWFsaW5uZXIgd2lsbCBoYXZlIGJlZW4gc2V0IHRvIHRoZSByZWFsIGlubmVyCisgKiBh bmQgcmVhbCBvdXRlciBwbGFucyB0aGF0IHdlIGlkZW50aWZpZWQsIGFuZCAqZWxpZGVkcmVhbG91 dGVyIGFuZAorICogKmVsaWRlZHJlYWxpbm5lciB0byB0aGUgbGFzdCBvZiBhbnkgY29ycmVzcG9k aW5nIGVsaWRlZCBub2Rlcy4KKyAqIEFkZGl0aW9uYWxseSwgKmZvdW5kX2FueV9vdXRlcl9nYXRo ZXIgYW5kICpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyIHdpbGwKKyAqIGJlIHNldCB0byB0cnVlIGlm IHdlIGxvb2tlZCB0aHJvdWdoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlIG9uCisgKiB0 aGF0IHNpZGUgb2YgdGhlIGpvaW4sIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBw Z3BhX2pvaW5fc3RyYXRlZ3kKK3BncGFfZGVjb21wb3NlX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCVBsYW4gKipyZWFsb3V0ZXIsIFBsYW4g KipyZWFsaW5uZXIsCisJCQkJCUVsaWRlZE5vZGUgKiplbGlkZWRyZWFsb3V0ZXIsIEVsaWRlZE5v ZGUgKiplbGlkZWRyZWFsaW5uZXIsCisJCQkJCWJvb2wgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIs IGJvb2wgKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIpCit7CisJUGxhbm5lZFN0bXQgKnBzdG10ID0g d2Fsa2VyLT5wc3RtdDsKKwlKb2luVHlwZQlqb2ludHlwZSA9ICgoSm9pbiAqKSBwbGFuKS0+am9p bnR5cGU7CisJUGxhbgkgICAqb3V0ZXJwbGFuID0gcGxhbi0+bGVmdHRyZWU7CisJUGxhbgkgICAq aW5uZXJwbGFuID0gcGxhbi0+cmlnaHR0cmVlOworCUVsaWRlZE5vZGUgKmVsaWRlZG91dGVyOwor CUVsaWRlZE5vZGUgKmVsaWRlZGlubmVyOworCXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneTsK Kwlib29sCQl1bmlxdWVvdXRlcjsKKwlib29sCQl1bmlxdWVpbm5lcjsKKworCWVsaWRlZG91dGVy ID0gcGdwYV9sYXN0X2VsaWRlZF9ub2RlKHBzdG10LCBvdXRlcnBsYW4pOworCWVsaWRlZGlubmVy ID0gcGdwYV9sYXN0X2VsaWRlZF9ub2RlKHBzdG10LCBpbm5lcnBsYW4pOworCSpmb3VuZF9hbnlf b3V0ZXJfZ2F0aGVyID0gZmFsc2U7CisJKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIgPSBmYWxzZTsK KworCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9NZXJnZUpvaW46CisKKwkJ CS8qCisJCQkgKiBUaGUgcGxhbm5lciBtYXkgaGF2ZSBjaG9zZW4gdG8gcGxhY2UgYSBNYXRlcmlh bCBub2RlIG9uIHRoZQorCQkJICogaW5uZXIgc2lkZSBvZiB0aGUgTWVyZ2VKb2luOyBpZiB0aGlz IGlzIHByZXNlbnQsIHdlIHJlY29yZCBpdAorCQkJICogYXMgcGFydCBvZiB0aGUgam9pbiBzdHJh dGVneS4KKwkJCSAqLworCQkJaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYgSXNBKGlubmVycGxh biwgTWF0ZXJpYWwpKQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUo cHN0bXQsICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX01FUkdFX0pPSU5fTUFU RVJJQUxJWkU7CisJCQl9CisJCQllbHNlCisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTUVSR0VfSk9J Tl9QTEFJTjsKKworCQkJLyoKKwkJCSAqIEZvciBhIE1lcmdlSm9pbiwgZWl0aGVyIHRoZSBvdXRl ciBvciB0aGUgaW5uZXIgc3VicGxhbiwgb3IKKwkJCSAqIGJvdGgsIG1heSBoYXZlIG5lZWRlZCB0 byBiZSBzb3J0ZWQ7IHdlIG11c3QgZGlzcmVnYXJkIGFueSBTb3J0CisJCQkgKiBvciBJbmNyZW1l bnRhbFNvcnQgbm9kZSB0byBmaW5kIHRoZSByZWFsIGlubmVyIG9yIG91dGVyCisJCQkgKiBzdWJw bGFuLgorCQkJICovCisJCQlpZiAoZWxpZGVkb3V0ZXIgPT0gTlVMTCAmJiBpc19zb3J0aW5nX3Bs YW4ob3V0ZXJwbGFuKSkKKwkJCQllbGlkZWRvdXRlciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10 LCAmb3V0ZXJwbGFuKTsKKwkJCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIGlzX3NvcnRpbmdf cGxhbihpbm5lcnBsYW4pKQorCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0 bXQsICZpbm5lcnBsYW4pOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX05lc3RMb29wOgorCisJCQkv KgorCQkJICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgY2hvc2VuIHRvIHBsYWNlIGEgTWF0ZXJpYWwg b3IgTWVtb2l6ZSBub2RlCisJCQkgKiBvbiB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgTmVzdExvb3A7 IGlmIHRoaXMgaXMgcHJlc2VudCwgd2UKKwkJCSAqIHJlY29yZCBpdCBhcyBwYXJ0IG9mIHRoZSBq b2luIHN0cmF0ZWd5LgorCQkJICovCisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBJc0Eo aW5uZXJwbGFuLCBNYXRlcmlhbCkpCisJCQl7CisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2Nl bmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTkVTVEVE X0xPT1BfTUFURVJJQUxJWkU7CisJCQl9CisJCQllbHNlIGlmIChlbGlkZWRpbm5lciA9PSBOVUxM ICYmIElzQShpbm5lcnBsYW4sIE1lbW9pemUpKQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdw YV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFU X05FU1RFRF9MT09QX01FTU9JWkU7CisJCQl9CisJCQllbHNlCisJCQkJc3RyYXRlZ3kgPSBKU1RS QVRfTkVTVEVEX0xPT1BfUExBSU47CisJCQlicmVhazsKKworCQljYXNlIFRfSGFzaEpvaW46CisK KwkJCS8qCisJCQkgKiBUaGUgaW5uZXIgc3VicGxhbiBvZiBhIEhhc2hKb2luIGlzIGFsd2F5cyBh IEhhc2ggbm9kZTsgdGhlIHJlYWwKKwkJCSAqIGlubmVyIHN1YnBsYW4gaXMgdGhlIEhhc2ggbm9k ZSdzIGNoaWxkLgorCQkJICovCisJCQlBc3NlcnQoSXNBKGlubmVycGxhbiwgSGFzaCkpOworCQkJ QXNzZXJ0KGVsaWRlZGlubmVyID09IE5VTEwpOworCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2Nl bmRfbm9kZShwc3RtdCwgJmlubmVycGxhbik7CisJCQlzdHJhdGVneSA9IEpTVFJBVF9IQVNIX0pP SU47CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXpl ZCBub2RlIHR5cGU6ICVkIiwgKGludCkgbm9kZVRhZyhwbGFuKSk7CisJfQorCisJLyoKKwkgKiBU aGUgcGxhbm5lciBtYXkgaGF2ZSBkZWNpZGVkIHRvIGltcGxlbWVudCBhIHNlbWlqb2luIGJ5IGZp cnN0IG1ha2luZworCSAqIHRoZSBudWxsYWJsZSBzaWRlIG9mIHRoZSBwbGFuIHVuaXF1ZSwgYW5k IHRoZW4gcGVyZm9ybWluZyBhIG5vcm1hbCBqb2luCisJICogYWdhaW5zdCB0aGUgcmVzdWx0LiBU aGVyZWZvcmUsIHdlIG1pZ2h0IG5lZWQgdG8gZGVzY2VuZCB0aHJvdWdoIGEKKwkgKiB1bmlxdWUg bm9kZSBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgcGxhbi4KKwkgKi8KKwl1bmlxdWVvdXRlciA9IHBn cGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmb3V0ZXJwbGFuLCAmZWxpZGVkb3V0ZXIpOwor CXVuaXF1ZWlubmVyID0gcGdwYV9kZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZpbm5lcnBsYW4s ICZlbGlkZWRpbm5lcik7CisKKwkvKgorCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGRlY2lkZWQg dG8gcGFyYWxsZWxpemUgcGFydCBvZiB0aGUgam9pbiB0cmVlLCBzbworCSAqIHdlIGNvdWxkIGZp bmQgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUgaGVyZS4gTm90ZSB0aGF0LCBpZgorCSAq IHByZXNlbnQsIHRoaXMgd2lsbCBhcHBlYXIgYmVsb3cgbm9kZXMgd2UgY29uc2lkZXJlZCBhcyBw YXJ0IG9mIHRoZSBqb2luCisJICogc3RyYXRlZ3ksIGJ1dCB3ZSBjb3VsZCBmaW5kIGFub3RoZXIg dW5pcXVlbmVzcy1lbmZvcmNpbmcgbm9kZSBiZWxvdyB0aGUKKwkgKiBHYXRoZXIgb3IgR2F0aGVy IE1lcmdlLCBpZiBwcmVzZW50LgorCSAqLworCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMKQorCXsK KwkJZWxpZGVkb3V0ZXIgPSBwZ3BhX2Rlc2NlbmRfYW55X2dhdGhlcihwc3RtdCwgJm91dGVycGxh biwKKwkJCQkJCQkJCQkJICBmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyKTsKKwkJaWYgKGZvdW5kX2Fu eV9vdXRlcl9nYXRoZXIgJiYKKwkJCXBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmb3V0 ZXJwbGFuLCAmZWxpZGVkb3V0ZXIpKQorCQkJdW5pcXVlb3V0ZXIgPSB0cnVlOworCX0KKwlpZiAo ZWxpZGVkaW5uZXIgPT0gTlVMTCkKKwl7CisJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX2Fu eV9nYXRoZXIocHN0bXQsICZpbm5lcnBsYW4sCisJCQkJCQkJCQkJCSAgZm91bmRfYW55X2lubmVy X2dhdGhlcik7CisJCWlmIChmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyICYmCisJCQlwZ3BhX2Rlc2Nl bmRfYW55X3VuaXF1ZShwc3RtdCwgJmlubmVycGxhbiwgJmVsaWRlZGlubmVyKSkKKwkJCXVuaXF1 ZWlubmVyID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBSZXN1bHQg bm9kZSBoYXMgYmVlbiBpbnNlcnRlZCBlaXRoZXIgdG8gcHJvamVjdCBhCisJICogdGFyZ2V0IGxp c3Qgb3IgdG8gaW1wbGVtZW50IGEgb25lLXRpbWUgZmlsdGVyLiBJZiBzbywgd2UgY2FuIGRlc2Nl bmQKKwkgKiB0aHJvdWdodCBpdC4gTm90ZSB0aGF0IGEgcmVzdWx0IG5vZGUgd2l0aG91dCBhIGNo aWxkIHdvdWxkIGJlIGEKKwkgKiBkZWdlbmVyYXRlIHNjYW4gb3Igam9pbiwgYW5kIG5vdCBzb21l dGhpbmcgd2UgY291bGQgZGVzY2VuZCB0aHJvdWdoLgorCSAqCisJICogWFhYLiBJIHN1c3BlY3Qg aXQncyBwb3NzaWJsZSBmb3IgdGhpcyB0byBoYXBwZW4gYWJvdmUgdGhlIEdhdGhlciBvcgorCSAq IEdhdGhlciBNZXJnZSBub2RlLCB0b28sIGJ1dCBhcHBhcmVudGx5IHdlIGhhdmUgbm8gdGVzdCBj YXNlIGZvciB0aGF0CisJICogc2NlbmFyaW8uCisJICovCisJaWYgKGVsaWRlZG91dGVyID09IE5V TEwgJiYgaXNfcmVzdWx0X25vZGVfd2l0aF9jaGlsZChvdXRlcnBsYW4pKQorCQllbGlkZWRvdXRl ciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmb3V0ZXJwbGFuKTsKKwlpZiAoZWxpZGVkaW5u ZXIgPT0gTlVMTCAmJiBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKGlubmVycGxhbikpCisJCWVs aWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCisJLyoK KwkgKiBJZiB0aGlzIGlzIGEgc2VtaWpvaW4gdGhhdCB3YXMgY29udmVydGVkIHRvIGFuIGlubmVy IGpvaW4gYnkgbWFraW5nIG9uZQorCSAqIHNpZGUgb3IgdGhlIG90aGVyIHVuaXF1ZSwgbWFrZSBh IG5vdGUgdGhhdCB0aGUgaW5uZXIgb3Igb3V0ZXIgc3VicGxhbiwKKwkgKiBhcyBhcHByb3ByaWF0 ZSwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBxdWVyeSBwbGFuIGZlYXR1cmUgd2hlbiB0aGUgbWFp bgorCSAqIHRyZWUgdHJhdmVyc2FsIHJlYWNoZXMgaXQuCisJICoKKwkgKiBDb252ZXJzZWx5LCBp ZiB0aGUgcGxhbm5lciBjb3VsZCBoYXZlIG1hZGUgb25lIHNpZGUgb2YgdGhlIGpvaW4gdW5pcXVl CisJICogYW5kIHRoZXJlYnkgY29udmVydGVkIGl0IHRvIGFuIGlubmVyIGpvaW4sIGFuZCBjaG9z ZSBub3QgdG8gZG8gc28sIHRoYXQKKwkgKiBpcyBhbHNvIHdvcnRoIG5vdGluZy4KKwkgKgorCSAq IFhYWDogV2UgYWRtaXQgdG9vIG11Y2ggbm9uLXVuaXF1ZSBhZHZpY2UsIGFzIGluIHRoZSBmb2xs b3dpbmcgZXhhbXBsZQorCSAqIGZyb20gdGhlIHJlZ3Jlc3Npb24gdGVzdHM6IEVYUExBSU4gKFBM QU5fQURWSUNFLCBDT1NUUyBPRkYpIERFTEVURSBGUk9NCisJICogcHJ0MV9sIFdIRVJFIEVYSVNU UyAoU0VMRUNUIDEgRlJPTSBpbnQ0X3RibCwgTEFURVJBTCAoU0VMRUNUCisJICogaW50NF90Ymwu ZjEgRlJPTSBpbnQ4X3RibCBMSU1JVCAyKSBzcyBXSEVSRSBwcnQxX2wuYyBJUyBOVUxMKS4gV2Ug ZW1pdAorCSAqIFNFTUlKT0lOX05PTl9VTklRVUUoKGludDRfdGJsIHNzKSkgYnV0IGNyZWF0ZV91 bmlxdWVfcGF0aCgpIGZhaWxzIGluCisJICogdGhpcyBjYXNlLCBzbyB0aGVyZSdzIG5vIHNqLXVu aXF1ZSB2ZXJzaW9uIHBvc3NpYmxlLgorCSAqCisJICogTkI6IFRoaXMgY29kZSBjb3VsZCBhcHBl YXIgc2xpZ2h0bHkgaGlnaGVyIHVwIGluIGluIHRoaXMgZnVuY3Rpb24sIGJ1dAorCSAqIG5vbmUg b2YgdGhlIG5vZGVzIHRocm91Z2ggd2hpY2ggd2UganVzdCBkZXNjZW5kZWQgc2hvdWxkIGJlIGhh dmUKKwkgKiBhc3NvY2lhdGVkIFJUSXMuCisJICoKKwkgKiBOQjogVGhpcyBzZWVtcyBsaWtlIGEg c29tZXdoYXQgaGFja3kgd2F5IG9mIHBhc3NpbmcgaW5mb3JtYXRpb24gdXAgdG8KKwkgKiB0aGUg bWFpbiB0cmVlIHdhbGssIGJ1dCBJIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgYmV0dGVyIGlkZWEu CisJICovCisJaWYgKHVuaXF1ZW91dGVyKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxr ZXIsIFBHUEFRRl9TRU1JSk9JTl9VTklRVUUsIG91dGVycGxhbik7CisJZWxzZSBpZiAoam9pbnR5 cGUgPT0gSk9JTl9SSUdIVF9TRU1JKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIs IFBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFLCBvdXRlcnBsYW4pOworCWlmICh1bmlxdWVpbm5l cikKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5J UVVFLCBpbm5lcnBsYW4pOworCWVsc2UgaWYgKGpvaW50eXBlID09IEpPSU5fU0VNSSkKKwkJcGdw YV9hZGRfZnV0dXJlX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwg aW5uZXJwbGFuKTsKKworCS8qIFNldCBvdXRwdXQgcGFyYW1ldGVycy4gKi8KKwkqcmVhbG91dGVy ID0gb3V0ZXJwbGFuOworCSpyZWFsaW5uZXIgPSBpbm5lcnBsYW47CisJKmVsaWRlZHJlYWxvdXRl ciA9IGVsaWRlZG91dGVyOworCSplbGlkZWRyZWFsaW5uZXIgPSBlbGlkZWRpbm5lcjsKKwlyZXR1 cm4gc3RyYXRlZ3k7Cit9CisKKy8qCisgKiBEZXNjZW5kIHRocm91Z2ggYSBQbGFuIG5vZGUgaW4g YSBqb2luIHRyZWUgdGhhdCB0aGUgY2FsbGVyIGhhcyBkZXRlcm1pbmVkCisgKiB0byBiZSBpcnJl bGV2YW50LgorICoKKyAqIFVwZGF0ZXMgKnBsYW4sIGFuZCByZXR1cm5zIHRoZSBsYXN0IG9mIGFu eSBlbGlkZWQgbm9kZXMgcGVydGFpbmluZyB0byB0aGUKKyAqIG5ldyBwbGFuIG5vZGUuCisgKi8K K3N0YXRpYyBFbGlkZWROb2RlICoKK3BncGFfZGVzY2VuZF9ub2RlKFBsYW5uZWRTdG10ICpwc3Rt dCwgUGxhbiAqKnBsYW4pCit7CisJKnBsYW4gPSAoKnBsYW4pLT5sZWZ0dHJlZTsKKwlyZXR1cm4g cGdwYV9sYXN0X2VsaWRlZF9ub2RlKHBzdG10LCAqcGxhbik7Cit9CisKKy8qCisgKiBEZXNjZW5k IHRocm91Z2ggYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUsIGlmIHByZXNlbnQsIGFuZCBh bnkgU29ydAorICogb3IgSW5jcmVtZW50YWxTb3J0IG5vZGUgb2NjdXJyaW5nIHVuZGVyIGEgR2F0 aGVyIE1lcmdlLgorICoKKyAqIENhbGxlciBzaG91bGQgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZXJl IGlzIG5vIEVsaWRlZE5vZGUgcGVydGFpbmluZyB0bworICogdGhlIGluaXRpYWwgdmFsdWUgb2Yg KnBsYW4uCisgKgorICogVXBkYXRlcyAqcGxhbiwgYW5kIHJldHVybnMgdGhlIGxhc3Qgb2YgYW55 IGVsaWRlZCBub2RlcyBwZXJ0YWluaW5nIHRvIHRoZQorICogbmV3IHBsYW4gbm9kZS4gU2V0cyAq Zm91bmRfYW55X2dhdGhlciA9IHRydWUgaWYgZWl0aGVyIEdhdGhlciBvcgorICogR2F0aGVyIE1l cmdlIHdhcyBmb3VuZCwgYW5kIG90aGVyd2lzZSBsZWF2ZXMgaXQgdW5jaGFuZ2VkLgorICovCitz dGF0aWMgRWxpZGVkTm9kZSAqCitwZ3BhX2Rlc2NlbmRfYW55X2dhdGhlcihQbGFubmVkU3RtdCAq cHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJYm9vbCAqZm91bmRfYW55X2dhdGhlcikKK3sKKwlp ZiAoSXNBKCpwbGFuLCBHYXRoZXIpKQorCXsKKwkJKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOwor CQlyZXR1cm4gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsIHBsYW4pOworCX0KKworCWlmIChJc0Eo KnBsYW4sIEdhdGhlck1lcmdlKSkKKwl7CisJCUVsaWRlZE5vZGUgKmVsaWRlZCA9IHBncGFfZGVz Y2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKworCQlpZiAoZWxpZGVkID09IE5VTEwgJiYgaXNfc29y dGluZ19wbGFuKCpwbGFuKSkKKwkJCWVsaWRlZCA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBw bGFuKTsKKworCQkqZm91bmRfYW55X2dhdGhlciA9IHRydWU7CisJCXJldHVybiBlbGlkZWQ7CisJ fQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBJZiAqcGxhbiBpcyBhbiBBZ2cgb3IgVW5p cXVlIG5vZGUsIHdlIHdhbnQgdG8gZGVzY2VuZCB0aHJvdWdoIGl0LCB1bmxlc3MKKyAqIGl0IGhh cyBhIGNvcnJlc3BvbmRpbmcgZWxpZGVkIG5vZGUuIElmIGl0cyBpbW1lZGlhdGUgY2hpbGQgaXMg YSBTb3J0IG9yCisgKiBJbmNyZW1lbnRhbFNvcnQsIHdlIGFsc28gd2FudCB0byBkZXNjZW5kIHRo cm91Z2ggdGhhdCwgdW5sZXNzIGl0IGhhcyBhCisgKiBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2Rl LgorICoKKyAqIE9uIGVudHJ5LCAqZWxpZGVkX25vZGUgbXVzdCBiZSB0aGUgbGFzdCBvZiBhbnkg ZWxpZGVkIG5vZGVzIGNvcnJlc3BvbmRpbmcKKyAqIHRvICpwbGFuOyBvbiBleGl0LCB0aGlzIHdp bGwgc3RpbGwgYmUgdHJ1ZSwgYnV0ICpwbGFuIG1heSBoYXZlIGJlZW4gdXBkYXRlZC4KKyAqCisg KiBUaGUgcmVhc29uIHdlIGRvbid0IHdhbnQgdG8gZGVzY2VuZCB0aHJvdWdoIGVsaWRlZCBub2Rl cyBpcyB0aGF0IGEgc2luZ2xlCisgKiBqb2luIHRyZWUgY2FuJ3QgY3Jvc3MgdGhyb3VnaCBhbnkg c29ydCBvZiBlbGlkZWQgbm9kZTogc3VicXVlcmllcyBhcmUKKyAqIHBsYW5uZWQgc2VwYXJhdGVs eSwgYW5kIHBsYW5uaW5nIGluc2lkZSBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgaXMKKyAqIHNl cGFyYXRlIGZyb20gcGxhbm5pbmcgb3V0c2lkZSBvZiBpdC4KKyAqCisgKiBUaGUgcmV0dXJuIHZh bHVlIGlzIHRydWUgaWYgd2UgZGVzY2VuZCB0aHJvdWdoIGF0IGxlYXN0IG9uZSBub2RlLCBhbmQK KyAqIG90aGVyd2lzZSBmYWxzZS4KKyAqLworc3RhdGljIGJvb2wKK3BncGFfZGVzY2VuZF9hbnlf dW5pcXVlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQlFbGlkZWROb2Rl ICoqZWxpZGVkX25vZGUpCit7CisJaWYgKCplbGlkZWRfbm9kZSAhPSBOVUxMKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlpZiAoSXNBKCpwbGFuLCBBZ2cpIHx8IElzQSgqcGxhbiwgVW5pcXVlKSkKKwl7 CisJCSplbGlkZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKworCQlp ZiAoKmVsaWRlZF9ub2RlID09IE5VTEwgJiYgaXNfc29ydGluZ19wbGFuKCpwbGFuKSkKKwkJCSpl bGlkZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKworCQlyZXR1cm4g dHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBJcyB0aGlzIGEgUmVzdWx0 IG5vZGUgdGhhdCBoYXMgYSBjaGlsZD8KKyAqLworc3RhdGljIGJvb2wKK2lzX3Jlc3VsdF9ub2Rl X3dpdGhfY2hpbGQoUGxhbiAqcGxhbikKK3sKKwlyZXR1cm4gSXNBKHBsYW4sIFJlc3VsdCkgJiYg cGxhbi0+bGVmdHRyZWUgIT0gTlVMTDsKK30KKworLyoKKyAqIElzIHRoaXMgYSBQbGFuIG5vZGUg d2hvc2UgcHVycG9zZSBpcyBwdXQgdGhlIGRhdGEgaW4gYSBjZXJ0YWluIG9yZGVyPworICovCitz dGF0aWMgYm9vbAoraXNfc29ydGluZ19wbGFuKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShw bGFuLCBTb3J0KSB8fCBJc0EocGxhbiwgSW5jcmVtZW50YWxTb3J0KTsKK30KZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmggYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfam9pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40 ZGM3Mjk4NmE3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9qb2luLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBn cGFfam9pbi5oCisgKgkgIGFuYWx5c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX0pPSU5fSAorI2RlZmluZSBQR1BBX0pP SU5fSAorCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQ7Cit0eXBlZGVm IHN0cnVjdCBwZ3BhX2pvaW5fdW5yb2xsZXIgcGdwYV9qb2luX3Vucm9sbGVyOwordHlwZWRlZiBz dHJ1Y3QgcGdwYV91bnJvbGxlZF9qb2luIHBncGFfdW5yb2xsZWRfam9pbjsKKworLyoKKyAqIEFs dGhvdWdoIHRoZXJlIGFyZSB0aHJlZSBtYWluIGpvaW4gc3RyYXRlZ2llcywgd2UgdHJ5IHRvIGNs YXNzaWZ5IHRoaW5ncworICogbW9yZSBwcmVjaXNlbHkgaGVyZTogbWVyZ2Ugam9pbnMgaGF2ZSB0 aGUgb3B0aW9uIG9mIHVzaW5nIG1hdGVyaWFsaXphdGlvbgorICogb24gdGhlIGlubmVyIHNpZGUs IGFuZCBuZXN0ZWQgbG9vcHMgY2FuIHVzZSBlaXRoZXIgbWF0ZXJpYWxpemF0aW9uIG9yCisgKiBt ZW1vaXphdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJSlNUUkFUX01FUkdFX0pPSU5fUExB SU4gPSAwLAorCUpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCUpTVFJBVF9ORVNURURf TE9PUF9QTEFJTiwKKwlKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUsCisJSlNUUkFUX05F U1RFRF9MT09QX01FTU9JWkUsCisJSlNUUkFUX0hBU0hfSk9JTgorCS8qIHVwZGF0ZSBOVU1fUEdQ QV9KT0lOX1NUUkFURUdZIGlmIHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX2pvaW5f c3RyYXRlZ3k7CisKKyNkZWZpbmUgTlVNX1BHUEFfSk9JTl9TVFJBVEVHWQkJKChpbnQpIEpTVFJB VF9IQVNIX0pPSU4gKyAxKQorCisvKgorICogSW4gYW4gb3V0ZXItZGVlcCBqb2luIHRyZWUsIGV2 ZXJ5IG1lbWJlciBvZiBhbiB1bnJvbGxlZCBqb2luIHdpbGwgYmUgYSBzY2FuLAorICogYnV0IGpv aW4gdHJlZXMgd2l0aCBvdGhlciBzaGFwZXMgY2FuIGNvbnRhaW4gdW5yb2xsZWQgam9pbnMuCisg KgorICogVGhlIHBsYW4gbm9kZSB3ZSBzdG9yZSBoZXJlIHdpbGwgYmUgdGhlIGlubmVyIG9yIG91 dGVyIGNoaWxkIG9mIHRoZSBqb2luCisgKiBub2RlLCBhcyBhcHByb3ByaWF0ZSwgZXhjZXB0IHRo YXQgd2UgbG9vayB0aHJvdWdoIHN1Ym5vZGVzIHRoYXQgd2UgcmVnYXJkIGFzCisgKiBwYXJ0IG9m IHRoZSBqb2luIG1ldGhvZCBpdHNlbGYuIEZvciBpbnN0YW5jZSwgZm9yIGEgTmVzdGVkIExvb3Ag dGhhdAorICogbWF0ZXJpYWxpemVzIHRoZSBpbm5lciBpbnB1dCwgd2UnbGwgc3RvcmUgdGhlIGNo aWxkIG9mIHRoZSBNYXRlcmlhbGl6ZSBub2RlLAorICogbm90IHRoZSBNYXRlcmlhbGl6ZSBub2Rl IGl0c2VsZi4KKyAqCisgKiBJZiBzZXRyZWZzIHByb2Nlc3NpbmcgZWxpZGVkIG9uZSBvciBtb3Jl IG5vZGVzIGZyb20gdGhlIHBsYW4gdHJlZSwgdGhlbgorICogd2UnbGwgc3RvcmUgZGV0YWlscyBh Ym91dCB0aGUgdG9wbW9zdCBvZiB0aG9zZSBpbiBlbGlkZWRfbm9kZTsgb3RoZXJ3aXNlLAorICog aXQgd2lsbCBiZSBOVUxMLgorICoKKyAqIEV4YWN0bHkgb25lIG9mIHNjYW4gYW5kIHVucm9sbGVk X2pvaW4gd2lsbCBiZSBub24tTlVMTC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQbGFuCSAg ICpwbGFuOworCUVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlOworCXN0cnVjdCBwZ3BhX3NjYW4gKnNj YW47CisJcGdwYV91bnJvbGxlZF9qb2luICp1bnJvbGxlZF9qb2luOworfSBwZ3BhX2pvaW5fbWVt YmVyOworCisvKgorICogV2UgY29udmVydCBvdXRlci1kZWVwIGpvaW4gdHJlZXMgdG8gYSBmbGF0 IHN0cnVjdHVyZTsgdGhhdCBpcywgKChBIEpPSU4gQikKKyAqIEpPSU4gQykgSk9JTiBEIGdldHMg Y29udmVydGVkIHRvIG91dGVyID0gQSwgaW5uZXIgPSA8QiBDIEQ+LiAgV2hlbiBqb2lucworICog YXJlbid0IG91dGVyLWRlZXAsIHN1YnN0cnVjdHVyZSBpcyByZXF1aXJlZCwgZS5nLiAoQSBKT0lO IEIpIEpPSU4gKEMgSk9JTiBEKQorICogaXMgcmVwcmVzZW50ZWQgYXMgb3V0ZXIgPSBBLCBpbm5l ciA9IDxCIFg+LCB3aGVyZSBYIGlzIGEgcGdwYV91bnJvbGxlZF9qb2luCisgKiBjb3ZlcmluZyBD LUQuCisgKi8KK3N0cnVjdCBwZ3BhX3Vucm9sbGVkX2pvaW4KK3sKKwkvKiBPdXRlcm1vc3QgbWVt YmVyOyBtdXN0IG5vdCBpdHNlbGYgYmUgYW4gdW5yb2xsZWQgam9pbi4gKi8KKwlwZ3BhX2pvaW5f bWVtYmVyIG91dGVyOworCisJLyogTnVtYmVyIG9mIGlubmVyIG1lbWJlcnMuIExlbmd0aCBvZiB0 aGUgc3RyYXRlZ3kgYW5kIGlubmVyIGFycmF5cy4gKi8KKwl1bnNpZ25lZAluaW5uZXI7CisKKwkv KiBBcnJheSBvZiBzdHJhdGVnaWVzLCBvbmUgcGVyIG5vbi1vdXRlcm1vc3QgbWVtYmVyLiAqLwor CXBncGFfam9pbl9zdHJhdGVneSAqc3RyYXRlZ3k7CisKKwkvKiBBcnJheSBvZiBtZW1iZXJzLCBl eGNsdWRpbmcgdGhlIG91dGVybW9zdC4gRGVlcGVzdCBmaXJzdC4gKi8KKwlwZ3BhX2pvaW5fbWVt YmVyICppbm5lcjsKK307CisKKy8qCisgKiBEb2VzIHRoaXMgcGxhbiBub2RlIGluaGVyaXQgZnJv bSBKb2luPworICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3BncGFfaXNfam9pbihQbGFuICpwbGFu KQoreworCXJldHVybiBJc0EocGxhbiwgTmVzdExvb3ApIHx8IElzQShwbGFuLCBNZXJnZUpvaW4p IHx8IElzQShwbGFuLCBIYXNoSm9pbik7Cit9CisKK2V4dGVybiBwZ3BhX2pvaW5fdW5yb2xsZXIg KnBncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIodm9pZCk7CitleHRlcm4gdm9pZCBwZ3BhX3Vucm9s bF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBQbGFuICpw bGFuLCBib29sIGJlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVy ICpqb2luX3Vucm9sbGVyLAorCQkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKipvdXRlcl9qb2lu X3Vucm9sbGVyLAorCQkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKippbm5lcl9qb2luX3Vucm9s bGVyKTsKK2V4dGVybiBwZ3BhX3Vucm9sbGVkX2pvaW4gKnBncGFfYnVpbGRfdW5yb2xsZWRfam9p bihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJCQlwZ3BhX2pv aW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpOworZXh0ZXJuIHZvaWQgcGdwYV9kZXN0cm95X2pv aW5fdW5yb2xsZXIocGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKTsKKworI2VuZGlm CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjIxNzUyNzhiNTgwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCkBAIC0wLDAgKzEsNjI0IEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBwZ3BhX291dHB1dC5jCisgKgkgIHByb2R1Y2UgdGV4dHVhbCBvdXRw dXQgZnJvbSB0aGUgcmVzdWx0cyBvZiBhIHBsYW4gdHJlZSB3YWxrCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFf b3V0cHV0LmgiCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXJz ZW5vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKKy8qCisgKiBDb250 ZXh0IG9iamVjdCBmb3IgdGV4dHVhbCBhZHZpY2UgZ2VuZXJhdGlvbi4KKyAqCisgKiBydF9pZGVu dGlmaWVycyBpcyB0aGUgY2FsbGVyLXByb3ZpZGVkIGFycmF5IG9mIHJhbmdlIHRhYmxlIGlkZW50 aWZpZXJzLgorICogU2VlIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHBncGFfaWRlbnRpZmll ci5jIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogYnVmIGlzIHRoZSBjYWxsZXItcHJvdmlkZWQg b3V0cHV0IGJ1ZmZlci4KKyAqCisgKiB3cmFwX2NvbHVtbiBpcyB0aGUgd3JhcCBjb2x1bW4sIHNv IHRoYXQgd2UgZG9uJ3QgY3JlYXRlIG91dHB1dCB0aGF0IGlzCisgKiB0b28gd2lkZS4gU2VlIHBn cGFfbWF5YmVfbGluZWJyZWFrKCkgYW5kIGNvbW1lbnRzIGluIHBncGFfb3V0cHV0X2FkdmljZS4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9vdXRwdXRfY29udGV4dAoreworCWNvbnN0IGNoYXIg KipyaWRfc3RyaW5nczsKKwlTdHJpbmdJbmZvCWJ1ZjsKKwlpbnQJCQl3cmFwX2NvbHVtbjsKK30g cGdwYV9vdXRwdXRfY29udGV4dDsKKworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfdW5yb2xsZWRf am9pbihwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3Vucm9s bGVkX2pvaW4gKmpvaW4pOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIocGdw YV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1l bWJlcik7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9zY2FuX3N0cmF0ZWd5KHBncGFfb3V0cHV0 X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVn eSwKKwkJCQkJCQkJCSAgTGlzdCAqc2NhbnMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfYml0 bWFwX2luZGV4X2RldGFpbHMocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJ CQkJIFBsYW4gKnBsYW4pOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShw Z3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBPaWQgcmVsaWQpOworc3RhdGljIHZvaWQgcGdw YV9vdXRwdXRfcXVlcnlfZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJ CQkJCQkJICBwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVy ZXMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5KHBncGFfb3V0cHV0 X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkJY2hhciAqc3RyYXRlZ3ksCisJCQkJCQkJCQkJ TGlzdCAqcmVsaWRfc2V0cyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9ub19nYXRoZXIocGdw YV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcyk7 CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9yZWxhdGlvbnMocGdwYV9vdXRwdXRfY29udGV4dCAq Y29udGV4dCwgU3RyaW5nSW5mbyBidWYsCisJCQkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpOwor CitzdGF0aWMgY2hhciAqcGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRlZ3kocGdwYV9qb2luX3N0cmF0 ZWd5IHN0cmF0ZWd5KTsKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdfc2Nhbl9zdHJhdGVneShw Z3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3kpOworc3RhdGljIGNoYXIgKnBncGFfY3N0cmluZ19x dWVyeV9mZWF0dXJlX3R5cGUocGdwYV9xZl90eXBlIHR5cGUpOworCitzdGF0aWMgdm9pZCBwZ3Bh X21heWJlX2xpbmVicmVhayhTdHJpbmdJbmZvIGJ1ZiwgaW50IHdyYXBfY29sdW1uKTsKKworLyoK KyAqIEFwcGVuZCBxdWVyeSBhZHZpY2UgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlci4KKyAqCisgKiBC ZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCAnd2Fsa2VyJyBtdXN0IGJlIHVzZWQgdG8gaXRl cmF0ZSBvdmVyIHRoZQorICogbWFpbiBwbGFuIHRyZWUgYW5kIGFsbCBzdWJwbGFucyBmcm9tIHRo ZSBQbGFubmVkU3RtdC4KKyAqCisgKiAncnRfaWRlbnRpZmllcnMnIGlzIGEgdGFibGUgb2YgdW5p cXVlIGlkZW50aWZpZXJzLCBvbmUgZm9yIGVhY2ggUlRJLgorICogU2VlIHBncGFfY3JlYXRlX2lk ZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQoKS4KKyAqCisgKiBSZXN1bHRzIHdpbGwgYmUgYXBw ZW5kZWQgdG8gJ2J1ZicuCisgKi8KK3ZvaWQKK3BncGFfb3V0cHV0X2FkdmljZShTdHJpbmdJbmZv IGJ1ZiwgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJICAgcGdwYV9pZGVu dGlmaWVyICpydF9pZGVudGlmaWVycykKK3sKKwlJbmRleAkJcnRhYmxlX2xlbmd0aCA9IGxpc3Rf bGVuZ3RoKHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJTGlzdENlbGwgICAqbGM7CisJcGdwYV9v dXRwdXRfY29udGV4dCBjb250ZXh0OworCisJLyogQmFzaWMgaW5pdGlhbGl6YXRpb24uICovCisJ bWVtc2V0KCZjb250ZXh0LCAwLCBzaXplb2YocGdwYV9vdXRwdXRfY29udGV4dCkpOworCWNvbnRl eHQuYnVmID0gYnVmOworCisJLyoKKwkgKiBDb252ZXJ0IGlkZW50aWZpZXJzIHRvIHN0cmluZyBm b3JtLiBOb3RlIHRoYXQgdGhlIGxvb3AgdmFyaWFibGUgaGVyZSBpcworCSAqIG5vdCBhbiBSVEks IGJlY2F1c2UgUlRJcyBhcmUgMS1iYXNlZC4gU29tZSBSVElzIHdpbGwgaGF2ZSBubworCSAqIGlk ZW50aWZpZXIsIGVpdGhlciBiZWNhdXNlIHRoZSByZWxvcHRraW5kIGlzIFJURV9KT0lOIG9yIGJl Y2F1c2UgdGhhdAorCSAqIHBvcnRpb24gb2YgdGhlIHF1ZXJ5IGRpZG4ndCBtYWtlIGl0IGludG8g dGhlIGZpbmFsIHBsYW4uCisJICovCisJY29udGV4dC5yaWRfc3RyaW5ncyA9IHBhbGxvYzBfYXJy YXkoY29uc3QgY2hhciAqLCBydGFibGVfbGVuZ3RoKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IHJ0 YWJsZV9sZW5ndGg7ICsraSkKKwkJaWYgKHJ0X2lkZW50aWZpZXJzW2ldLmFsaWFzX25hbWUgIT0g TlVMTCkKKwkJCWNvbnRleHQucmlkX3N0cmluZ3NbaV0gPSBwZ3BhX2lkZW50aWZpZXJfc3RyaW5n KCZydF9pZGVudGlmaWVyc1tpXSk7CisKKwkvKgorCSAqIElmIHRoZSB1c2VyIGNob29zZXMgdG8g dXNlIEVYUExBSU4gKFBMQU5fQURWSUNFKSBpbiBhbiA4MC1jb2x1bW4gd2luZG93CisJICogZnJv bSBhIHBzcWwgY2xpZW50IHdpdGggZGVmYXVsdCBzZXR0aW5ncywgcHNxbCB3aWxsIGFkZCBvbmUg c3BhY2UgdG8KKwkgKiB0aGUgbGVmdCBvZiB0aGUgb3V0cHV0IGFuZCBFWFBMQUlOIHdpbGwgYWRk IHR3byBtb3JlIHRvIHRoZSBsZWZ0IG9mIHRoZQorCSAqIGFkdmljZS4gVGh1cywgbGluZXMgb2Yg bW9yZSB0aGFuIDc3IGNoYXJhY3RlcnMgd2lsbCB3cmFwLiBXZSBzZXQgdGhlCisJICogd3JhcCBs aW1pdCB0byA3NiBoZXJlIHNvIHRoYXQgdGhlIG91dHB1dCB3b24ndCByZWFjaCBhbGwgdGhlIHdh eSB0byB0aGUKKwkgKiB2ZXJ5IGxhc3QgY29sdW1uIG9mIHRoZSB0ZXJtaW5hbC4KKwkgKgorCSAq IE9mIGNvdXJzZSwgdGhpcyBpcyBmYWlybHkgYXJiaXRyYXJ5IHNldCBvZiBhc3N1bXB0aW9ucywg YW5kIG9uZSBjb3VsZAorCSAqIHdlbGwgbWFrZSBhbiBhcmd1bWVudCBmb3IgYSBkaWZmZXJlbnQg d3JhcCBsaW1pdCwgb3IgZm9yIGEgY29uZmlndXJhYmxlCisJICogb25lLgorCSAqLworCWNvbnRl eHQud3JhcF9jb2x1bW4gPSA3NjsKKworCS8qCisJICogRWFjaCBwaWVjZSBvZiBKT0lOX09SREVS KCkgYWR2aWNlIGZ1bGx5IGRlc2NyaWJlcyB0aGUgam9pbiBvcmRlciBmb3IgYQorCSAqIGEgc2lu Z2xlIHVucm9sbGVkIGpvaW4uIE1lcmdpbmcgaXMgbm90IHBlcm1pdHRlZCwgYmVjYXVzZSB0aGF0 IHdvdWxkCisJICogY2hhbmdlIHRoZSBtZWFuaW5nLCBlLmcuIFNFUV9TQ0FOKGEgYiBjIGQpIG1l YW5zIHNpbXBseSB0aGF0IHNlcXVlbnRpYWwKKwkgKiBzY2FucyBzaG91bGQgYmUgdXNlZCBmb3Ig YWxsIG9mIHRob3NlIHJlbGF0aW9ucywgYW5kIGlzIHRodXMgZXF1aXZhbGVudAorCSAqIHRvIFNF UV9TQ0FOKGEgYikgU0VRX1NDQU4oYyBkKSwgYnV0IEpPSU5fT1JERVIoYSBiIGMgZCkgbWVhbnMg dGhhdCAiYSIKKwkgKiBpcyB0aGUgZHJpdmluZyB0YWJsZSB3aGljaCBpcyB0aGVuIGpvaW5lZCB0 byAiYiIgdGhlbiAiYyIgdGhlbiAiZCIsCisJICogd2hpY2ggaXMgdG90YWxseSBkaWZmZXJlbnQg ZnJvbSBKT0lOX09SREVSKGEgYikgYW5kIEpPSU5fT1JERVIoYyBkKS4KKwkgKi8KKwlmb3JlYWNo KGxjLCB3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zKQorCXsKKwkJcGdwYV91bnJvbGxl ZF9qb2luICp1am9pbiA9IGxmaXJzdChsYyk7CisKKwkJaWYgKGJ1Zi0+bGVuID4gMCkKKwkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJ1xuJyk7CisJCWFwcGVuZFN0cmluZ0luZm8oY29udGV4 dC5idWYsICJKT0lOX09SREVSKCIpOworCQlwZ3BhX291dHB1dF91bnJvbGxlZF9qb2luKCZjb250 ZXh0LCB1am9pbik7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQuYnVmLCAnKScpOwor CQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LmJ1ZiwgY29udGV4dC53cmFwX2NvbHVtbik7 CisJfQorCisJLyogRW1pdCBqb2luIHN0cmF0ZWd5IGFkdmljZS4gKi8KKwlmb3IgKGludCBzID0g MDsgcyA8IE5VTV9QR1BBX0pPSU5fU1RSQVRFR1k7ICsrcykKKwl7CisJCWNoYXIJICAgKnN0cmF0 ZWd5ID0gcGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRlZ3kocyk7CisKKwkJcGdwYV9vdXRwdXRfc2lt cGxlX3N0cmF0ZWd5KCZjb250ZXh0LAorCQkJCQkJCQkJc3RyYXRlZ3ksCisJCQkJCQkJCQl3YWxr ZXItPmpvaW5fc3RyYXRlZ2llc1tzXSk7CisJfQorCisJLyoKKwkgKiBFbWl0IHNjYW4gc3RyYXRl Z3kgYWR2aWNlIChidXQgbm90IGZvciBvcmRpbmFyeSBzY2Fucywgd2hpY2ggYXJlCisJICogZGVm aW5pdGlvbmFsbHkgdW5pbnRlcmVzdGluZykuCisJICovCisJZm9yIChpbnQgYyA9IDA7IGMgPCBO VU1fUEdQQV9TQ0FOX1NUUkFURUdZOyArK2MpCisJCWlmIChjICE9IFBHUEFfU0NBTl9PUkRJTkFS WSkKKwkJCXBncGFfb3V0cHV0X3NjYW5fc3RyYXRlZ3koJmNvbnRleHQsIGMsIHdhbGtlci0+c2Nh bnNbY10pOworCisJLyogRW1pdCBxdWVyeSBmZWF0dXJlIGFkdmljZS4gKi8KKwlmb3IgKGludCB0 ID0gMDsgdCA8IE5VTV9QR1BBX1FGX1RZUEVTOyArK3QpCisJCXBncGFfb3V0cHV0X3F1ZXJ5X2Zl YXR1cmUoJmNvbnRleHQsIHQsIHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbdF0pOworCisJLyogRW1p dCBOT19HQVRIRVIgYWR2aWNlLiAqLworCXBncGFfb3V0cHV0X25vX2dhdGhlcigmY29udGV4dCwg d2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMpOworfQorCisvKgorICogT3V0cHV0IHRoZSBtZW1iZXJz IG9mIGFuIHVucm9sbGVkIGpvaW4sIGZpcnN0IHRoZSBvdXRlcm1vc3QgbWVtYmVyLCBhbmQKKyAq IHRoZW4gdGhlIGlubmVyIG1lbWJlcnMgb25lIGJ5IG9uZSwgYXMgcGFydCBvZiBKT0lOX09SREVS KCkgYWR2aWNlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbihw Z3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJICBwZ3BhX3Vucm9sbGVkX2pvaW4g KmpvaW4pCit7CisJcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIoY29udGV4dCwgJmpvaW4tPm91dGVy KTsKKworCWZvciAoaW50IGsgPSAwOyBrIDwgam9pbi0+bmlubmVyOyArK2spCisJeworCQlwZ3Bh X2pvaW5fbWVtYmVyICptZW1iZXIgPSAmam9pbi0+aW5uZXJba107CisKKwkJcGdwYV9tYXliZV9s aW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJcGdwYV9vdXRwdXRfam9pbl9tZW1i ZXIoY29udGV4dCwgbWVtYmVyKTsKKwl9Cit9CisKKy8qCisgKiBPdXRwdXQgYSBzaW5nbGUgbWVt YmVyIG9mIGFuIHVucm9sbGVkIGpvaW4gYXMgcGFydCBvZiBKT0lOX09SREVSKCkgYWR2aWNlLgor ICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIocGdwYV9vdXRwdXRfY29u dGV4dCAqY29udGV4dCwKKwkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlcikKK3sKKwlpZiAo bWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cihjb250ZXh0LT5idWYsICcoJyk7CisJCXBncGFfb3V0cHV0X3Vucm9sbGVkX2pvaW4oY29udGV4 dCwgbWVtYmVyLT51bnJvbGxlZF9qb2luKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4 dC0+YnVmLCAnKScpOworCX0KKwllbHNlCisJeworCQlwZ3BhX3NjYW4gICpzY2FuID0gbWVtYmVy LT5zY2FuOworCisJCUFzc2VydChzY2FuICE9IE5VTEwpOworCQlpZiAoYm1zX21lbWJlcnNoaXAo c2Nhbi0+cmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25z KGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICd7Jyk7CisJCQlwZ3BhX291dHB1dF9y ZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnfScpOworCQl9CisJfQorfQorCisvKgorICog T3V0cHV0IGFkdmljZSBmb3IgYSBMaXN0IG9mIHBncGFfc2NhbiBvYmplY3RzLgorICoKKyAqIEFs bCB0aGUgc2NhbnMgbXVzdCB1c2UgdGhlIHN0cmF0ZWd5IHNwZWNpZmllZCBieSB0aGUgInN0cmF0 ZWd5IiBhcmd1bWVudC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3NjYW5fc3RyYXRl Z3kocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgcGdwYV9zY2FuX3N0cmF0 ZWd5IHN0cmF0ZWd5LAorCQkJCQkJICBMaXN0ICpzY2FucykKK3sKKwlib29sCQlmaXJzdCA9IHRy dWU7CisKKwlpZiAoc2NhbnMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+YnVm LT5sZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicpOwor CWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwKKwkJCQkJIHBncGFfY3N0cmlu Z19zY2FuX3N0cmF0ZWd5KHN0cmF0ZWd5KSk7CisKKwlmb3JlYWNoX3B0cihwZ3BhX3NjYW4sIHNj YW4sIHNjYW5zKQorCXsKKwkJUGxhbgkgICAqcGxhbiA9IHNjYW4tPnBsYW47CisKKwkJaWYgKGZp cnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVi cmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCS8qIE91dHB1dCB0aGUgcmVs YXRpb24gaWRlbnRpZmllcnMuICovCisJCWlmIChibXNfbWVtYmVyc2hpcChzY2FuLT5yZWxpZHMp ID09IEJNU19TSU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29u dGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250 ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cihjb250ZXh0LT5idWYsICcpJyk7CisJCX0KKworCQkvKiBGb3Igc2NhbnMgaW52b2x2aW5nIGlu ZGV4ZXMsIG91dHB1dCBpbmRleCBpbmZvcm1hdGlvbi4gKi8KKwkJaWYgKHN0cmF0ZWd5ID09IFBH UEFfU0NBTl9JTkRFWCkKKwkJeworCQkJQXNzZXJ0KElzQShwbGFuLCBJbmRleFNjYW4pKTsKKwkJ CXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4p OworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQkJcGdwYV9v dXRwdXRfcmVsYXRpb25fbmFtZShjb250ZXh0LCAoKEluZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhp ZCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyYXRlZ3kgPT0gUEdQQV9TQ0FOX0lOREVYX09OTFkpCisJ CXsKKwkJCUFzc2VydChJc0EocGxhbiwgSW5kZXhPbmx5U2NhbikpOworCQkJcGdwYV9tYXliZV9s aW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlv bl9uYW1lKGNvbnRleHQsCisJCQkJCQkJCQkgICgoSW5kZXhPbmx5U2NhbiAqKSBwbGFuKS0+aW5k ZXhpZCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyYXRlZ3kgPT0gUEdQQV9TQ0FOX0JJVE1BUF9IRUFQ KQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndy YXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsK KwkJCXBncGFfb3V0cHV0X2JpdG1hcF9pbmRleF9kZXRhaWxzKGNvbnRleHQsIHBsYW4tPmxlZnR0 cmVlKTsKKwkJfQorCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJykn KTsKKwlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29s dW1uKTsKK30KKworLyoKKyAqIE91dHB1dCBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBpbmRleCBv ciBpbmRleGVzIHBvd2VyIGEgQml0bWFwSGVhcFNjYW4uCisgKgorICogV2UgZW1pdCAmJihpMSBp MiBpMykgZm9yIGEgQml0bWFwQW5kIGJldHdlZW4gaW5kZXhlcyBpMSwgaTIsIGFuZCBpMzsKKyAq IGFuZCBsaWtld2lzZSB8fChpMSBpMiBpMykgZm9yIGEgc2ltaWxhciBCaXRtYXBPciBvcGVyYXRp b24uCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhw Z3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBQbGFuICpwbGFuKQoreworCWNoYXIJICAgKm9w ZXJhdG9yOworCUxpc3QJICAgKmJpdG1hcHBsYW5zOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwor CWlmIChJc0EocGxhbiwgQml0bWFwSW5kZXhTY2FuKSkKKwl7CisJCUJpdG1hcEluZGV4U2NhbiAq Yml0bWFwaW5kZXhzY2FuID0gKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFuOworCisJCXBncGFfb3V0 cHV0X3JlbGF0aW9uX25hbWUoY29udGV4dCwgYml0bWFwaW5kZXhzY2FuLT5pbmRleGlkKTsKKwkJ cmV0dXJuOworCX0KKworCWlmIChJc0EocGxhbiwgQml0bWFwT3IpKQorCXsKKwkJb3BlcmF0b3Ig PSAifHwiOworCQliaXRtYXBwbGFucyA9ICgoQml0bWFwT3IgKikgcGxhbiktPmJpdG1hcHBsYW5z OworCX0KKwllbHNlIGlmIChJc0EocGxhbiwgQml0bWFwQW5kKSkKKwl7CisJCW9wZXJhdG9yID0g IiYmIjsKKwkJYml0bWFwcGxhbnMgPSAoKEJpdG1hcEFuZCAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7 CisJfQorCWVsc2UKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgbm9kZSB0eXBlOiAlZCIsIChp bnQpIG5vZGVUYWcocGxhbikpOworCisJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIl cygiLCBvcGVyYXRvcik7CisJZm9yZWFjaF9wdHIoUGxhbiwgY2hpbGRfcGxhbiwgYml0bWFwcGxh bnMpCisJeworCQlpZiAoZmlyc3QpCisJCQlmaXJzdCA9IGZhbHNlOworCQllbHNlCisJCXsKKwkJ CXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4p OworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQl9CisJCXBn cGFfb3V0cHV0X2JpdG1hcF9pbmRleF9kZXRhaWxzKGNvbnRleHQsIGNoaWxkX3BsYW4pOworCX0K KwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7Cit9CisKKy8qCisgKiBP dXRwdXQgYSBzY2hlbWEtcXVhbGlmaWVkIHJlbGF0aW9uIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lk CitwZ3BhX291dHB1dF9yZWxhdGlvbl9uYW1lKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQs IE9pZCByZWxpZCkKK3sKKwlPaWQJCQluc3BvaWQgPSBnZXRfcmVsX25hbWVzcGFjZShyZWxpZCk7 CisJY2hhcgkgICAqcmVsbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3RlbXAobnNw b2lkKTsKKwljaGFyCSAgICpyZWxuYW1lID0gZ2V0X3JlbF9uYW1lKHJlbGlkKTsKKworCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+YnVmLCBxdW90ZV9pZGVudGlmaWVyKHJlbG5hbWVz cGFjZSkpOworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJy4nKTsKKwlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyZWxuYW1l KSk7Cit9CisKKy8qCisgKiBPdXRwdXQgYWR2aWNlIGZvciBhIExpc3Qgb2YgcGdwYV9xdWVyeV9m ZWF0dXJlIG9iamVjdHMuCisgKgorICogQWxsIGZlYXR1cmVzIG11c3QgYmUgb2YgdGhlIHR5cGUg c3BlY2lmaWVkIGJ5IHRoZSAidHlwZSIgYXJndW1lbnQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Bh X291dHB1dF9xdWVyeV9mZWF0dXJlKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIHBncGFf cWZfdHlwZSB0eXBlLAorCQkJCQkJICBMaXN0ICpxdWVyeV9mZWF0dXJlcykKK3sKKwlib29sCQlm aXJzdCA9IHRydWU7CisKKwlpZiAocXVlcnlfZmVhdHVyZXMgPT0gTklMKQorCQlyZXR1cm47CisK KwlpZiAoY29udGV4dC0+YnVmLT5sZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250 ZXh0LT5idWYsICdcbicpOworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwK KwkJCQkJIHBncGFfY3N0cmluZ19xdWVyeV9mZWF0dXJlX3R5cGUodHlwZSkpOworCisJZm9yZWFj aF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgcXVlcnlfZmVhdHVyZXMpCisJeworCQlpZiAo Zmlyc3QpCisJCQlmaXJzdCA9IGZhbHNlOworCQllbHNlCisJCXsKKwkJCXBncGFfbWF5YmVfbGlu ZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQl9CisKKwkJaWYgKGJtc19tZW1iZXJz aGlwKHFmLT5yZWxpZHMpID09IEJNU19TSU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlv bnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBxZi0+cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCQlwZ3BhX291dHB1dF9y ZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBxZi0+cmVsaWRzKTsKKwkJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwkJfQorCX0KKworCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwlwZ3BhX21heWJlX2xpbmVicmVhayhjb250 ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKK30KKworLyoKKyAqIE91dHB1dCAic2lt cGxlIiBhZHZpY2UgZm9yIGEgTGlzdCBvZiBCaXRtYXBzZXQgb2JqZWN0cyBlYWNoIG9mIHdoaWNo CisgKiBjb250YWlucyBvbmUgb3IgbW9yZSBSVElzLgorICoKKyAqIEJ5IHNpbXBsZSwgd2UganVz dCBtZWFuIHRoYXQgdGhlIGFkdmljZSBlbWl0dGVkIGZvbGxvd3MgdGhlIG1vc3QKKyAqIHN0cmFp Z2h0Zm9yd2FyZCBwYXR0ZXJuOiB0aGUgc3RyYXRlZ3kgbmFtZSwgZm9sbG93ZWQgYnkgYSBsaXN0 IG9mIGl0ZW1zCisgKiBzZXBhcmF0ZWQgYnkgc3BhY2VzIGFuZCBzdXJyb3VuZGVkIGJ5IHBhcmVu dGhlc2VzLiBJbmRpdmlkdWFsIGl0ZW1zIGluCisgKiB0aGUgbGlzdCBhcmUgYSBzaW5nbGUgcmVs YXRpb24gaWRlbnRpZmllciBmb3IgYSBCaXRtYXBzZXQgdGhhdCBjb250YWlucworICoganVzdCBv bmUgbWVtYmVyLCBvciBhIHN1Yi1saXN0IGFnYWluIHNlcGFyYXRlZCBieSBzcGFjZXMgYW5kIHN1 cnJvdW5kZWQKKyAqIGJ5IHBhcmVudGhlc2VzIGZvciBhIEJpdG1hcHNldCB3aXRoIG11bHRpcGxl IG1lbWJlcnMuIEJpdG1hcHNldHMgd2l0aAorICogbm8gbWVtYmVycyBwcm9iYWJseSBzaG91bGRu J3Qgb2NjdXIgaGVyZSwgYnV0IGlmIHRoZXkgZG8gdGhleSdsbCBiZQorICogcmVuZGVyZWQgYXMg YW4gZW1wdHkgc3ViLWxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9zaW1wbGVf c3RyYXRlZ3kocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgY2hhciAqc3RyYXRlZ3ksCisJ CQkJCQkJTGlzdCAqcmVsaWRfc2V0cykKK3sKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwlpZiAo cmVsaWRfc2V0cyA9PSBOSUwpCisJCXJldHVybjsKKworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+ IDApCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5k U3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIlcygiLCBzdHJhdGVneSk7CisKKwlmb3JlYWNoX25v ZGUoQml0bWFwc2V0LCByZWxpZHMsIHJlbGlkX3NldHMpCisJeworCQlpZiAoZmlyc3QpCisJCQlm aXJzdCA9IGZhbHNlOworCQllbHNlCisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRl eHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo Y29udGV4dC0+YnVmLCAnICcpOworCQl9CisKKwkJaWYgKGJtc19tZW1iZXJzaGlwKHJlbGlkcykg PT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250 ZXh0LT5idWYsIHJlbGlkcyk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo Y29udGV4dC0+YnVmLCAnKCcpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNv bnRleHQtPmJ1ZiwgcmVsaWRzKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1 ZiwgJyknKTsKKwkJfQorCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1Ziwg JyknKTsKKwlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBf Y29sdW1uKTsKK30KKworLyoKKyAqIE91dHB1dCBOT19HQVRIRVIgYWR2aWNlIGZvciBhbGwgcmVs YXRpb25zIG5vdCBhcHBlYXJpbmcgYmVuZWF0aCBhbnkKKyAqIEdhdGhlciBvciBHYXRoZXIgTWVy Z2Ugbm9kZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X25vX2dhdGhlcihwZ3BhX291 dHB1dF9jb250ZXh0ICpjb250ZXh0LCBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlpZiAocmVsaWRz ID09IE5VTEwpCisJCXJldHVybjsKKwlpZiAoY29udGV4dC0+YnVmLT5sZW4gPiAwKQorCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoY29udGV4dC0+YnVmLCAiTk9fR0FUSEVSKCIpOworCXBncGFfb3V0cHV0X3JlbGF0aW9u cyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHJlbGlkcyk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIo Y29udGV4dC0+YnVmLCAnKScpOworfQorCisvKgorICogT3V0cHV0IHRoZSBpZGVudGlmaWVycyBm b3IgZWFjaCBSVEkgaW4gdGhlIHByb3ZpZGVkIHNldC4KKyAqCisgKiBJZGVudGlmaWVycyBhcmUg c2VwYXJhdGVkIGJ5IHNwYWNlcywgYW5kIGEgbGluZSBicmVhayBpcyBwb3NzaWJsZSBhZnRlcgor ICogZWFjaCBvbmUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9yZWxhdGlvbnMocGdw YV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgU3RyaW5nSW5mbyBidWYsCisJCQkJCSAgQml0bWFw c2V0ICpyZWxpZHMpCit7CisJaW50CQkJcnRpID0gLTE7CisJYm9vbAkJZmlyc3QgPSB0cnVlOwor CisJd2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsK KwkJY29uc3QgY2hhciAqcmlkX3N0cmluZyA9IGNvbnRleHQtPnJpZF9zdHJpbmdzW3J0aSAtIDFd OworCisJCWlmIChyaWRfc3RyaW5nID09IE5VTEwpCisJCQllbG9nKEVSUk9SLCAibm8gaWRlbnRp ZmllciBmb3IgUlRJICVkIiwgcnRpKTsKKworCQlpZiAoZmlyc3QpCisJCXsKKwkJCWZpcnN0ID0g ZmFsc2U7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcmlkX3N0cmluZyk7CisJCX0K KwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhidWYsIGNvbnRleHQtPndyYXBf Y29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiICVzIiwgcmlkX3N0cmluZyk7CisJ CX0KKwl9Cit9CisKKy8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRo ZSBzcGVjaWZpZWQgam9pbiBzdHJhdGVneS4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9jc3Ry aW5nX2pvaW5fc3RyYXRlZ3kocGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5KQoreworCXN3aXRj aCAoc3RyYXRlZ3kpCisJeworCQljYXNlIEpTVFJBVF9NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0 dXJuICJNRVJHRV9KT0lOX1BMQUlOIjsKKwkJY2FzZSBKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklB TElaRToKKwkJCXJldHVybiAiTUVSR0VfSk9JTl9NQVRFUklBTElaRSI7CisJCWNhc2UgSlNUUkFU X05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9QTEFJTiI7CisJCWNh c2UgSlNUUkFUX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9P UF9NQVRFUklBTElaRSI7CisJCWNhc2UgSlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQly ZXR1cm4gIk5FU1RFRF9MT09QX01FTU9JWkUiOworCQljYXNlIEpTVFJBVF9IQVNIX0pPSU46CisJ CQlyZXR1cm4gIkhBU0hfSk9JTiI7CisJfQorCisJQXNzZXJ0KGZhbHNlKTsKK30KKworLyoKKyAq IEdldCBhIEMgc3RyaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBzY2FuIHN0 cmF0ZWd5LgorICovCitzdGF0aWMgY2hhciAqCitwZ3BhX2NzdHJpbmdfc2Nhbl9zdHJhdGVneShw Z3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3kpCit7CisJc3dpdGNoIChzdHJhdGVneSkKKwl7CisJ CWNhc2UgUEdQQV9TQ0FOX09SRElOQVJZOgorCQkJcmV0dXJuICJPUkRJTkFSWV9TQ0FOIjsKKwkJ Y2FzZSBQR1BBX1NDQU5fU0VROgorCQkJcmV0dXJuICJTRVFfU0NBTiI7CisJCWNhc2UgUEdQQV9T Q0FOX0JJVE1BUF9IRUFQOgorCQkJcmV0dXJuICJCSVRNQVBfSEVBUF9TQ0FOIjsKKwkJY2FzZSBQ R1BBX1NDQU5fRk9SRUlHTjoKKwkJCXJldHVybiAiRk9SRUlHTl9KT0lOIjsKKwkJY2FzZSBQR1BB X1NDQU5fSU5ERVg6CisJCQlyZXR1cm4gIklOREVYX1NDQU4iOworCQljYXNlIFBHUEFfU0NBTl9J TkRFWF9PTkxZOgorCQkJcmV0dXJuICJJTkRFWF9PTkxZX1NDQU4iOworCQljYXNlIFBHUEFfU0NB Tl9QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJuICJQQVJUSVRJT05XSVNFIjsKKwkJY2FzZSBQR1BB X1NDQU5fVElEOgorCQkJcmV0dXJuICJUSURfU0NBTiI7CisJfQorCisJQXNzZXJ0KGZhbHNlKTsK K30KKworLyoKKyAqIEdldCBhIEMgc3RyaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNwZWNp ZmllZCBzY2FuIHN0cmF0ZWd5LgorICovCitzdGF0aWMgY2hhciAqCitwZ3BhX2NzdHJpbmdfcXVl cnlfZmVhdHVyZV90eXBlKHBncGFfcWZfdHlwZSB0eXBlKQoreworCXN3aXRjaCAodHlwZSkKKwl7 CisJCWNhc2UgUEdQQVFGX0dBVEhFUjoKKwkJCXJldHVybiAiR0FUSEVSIjsKKwkJY2FzZSBQR1BB UUZfR0FUSEVSX01FUkdFOgorCQkJcmV0dXJuICJHQVRIRVJfTUVSR0UiOworCQljYXNlIFBHUEFR Rl9TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1JSk9JTl9OT05fVU5JUVVFIjsK KwkJY2FzZSBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1JSk9JTl9VTklR VUUiOworCX0KKworCUFzc2VydChmYWxzZSk7Cit9CisKKy8qCisgKiBJbnNlcnQgYSBsaW5lIGJy ZWFrIGludG8gdGhlIFN0cmluZ0luZm9EYXRhLCBpZiBuZWVkZWQuCisgKgorICogSWYgd3JhcF9j b2x1bW4gaXMgemVybyBvciBuZWdhdGl2ZSwgdGhpcyBkb2VzIG5vdGhpbmcuIE90aGVyd2lzZSwg d2UKKyAqIGNvbnNpZGVyIGluc2VydGluZyBhIG5ld2xpbmUuIFdlIG9ubHkgaW5zZXJ0IGEgbmV3 bGluZSBpZiB0aGUgbGVuZ3RoIG9mCisgKiB0aGUgbGFzdCBsaW5lIGluIHRoZSBidWZmZXIgZXhj ZWVkcyB3cmFwX2NvbHVtbiwgYW5kIG5vdCBpZiB3ZSdkIGJlCisgKiBpbnNlcnRpbmcgYSBuZXds aW5lIGF0IG9yIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IGxpbmUuCisgKgor ICogVGhlIHBvc2l0aW9uIGF0IHdoaWNoIHRoZSBuZXdsaW5lIGlzIGluc2VydGVkIGlzIHNpbXBs eSB3aGVyZXZlciB0aGUKKyAqIGJ1ZmZlciBlbmRlZCB0aGUgbGFzdCB0aW1lIHRoaXMgZnVuY3Rp b24gd2FzIGNhbGxlZC4gSW4gb3RoZXIgd29yZHMsCisgKiB0aGUgY2FsbGVyIGlzIGV4cGVjdGVk IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVyeSB0aW1lIHdlIHJlYWNoIGEgZ29vZAorICogcGxh Y2UgZm9yIGEgbGluZSBicmVhay4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfbWF5YmVfbGluZWJy ZWFrKFN0cmluZ0luZm8gYnVmLCBpbnQgd3JhcF9jb2x1bW4pCit7CisJY2hhcgkgICAqdHJhaWxp bmdfbmw7CisJaW50CQkJbGluZV9zdGFydDsKKwlpbnQJCQlzYXZlX2N1cnNvcjsKKworCS8qIElm IGxpbmUgd3JhcHBpbmcgaXMgZGlzYWJsZWQsIGV4aXQgcXVpY2tseS4gKi8KKwlpZiAod3JhcF9j b2x1bW4gPD0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTZXQgbGluZV9zdGFydCB0byB0aGUg Ynl0ZSBvZmZzZXQgd2l0aGluIGJ1Zi0+ZGF0YSBvZiB0aGUgZmlyc3QKKwkgKiBjaGFyYWN0ZXIg b2YgdGhlIGN1cnJlbnQgbGluZSwgd2hlcmUgdGhlIGN1cnJlbnQgbGluZSBtZWFucyB0aGUgbGFz dAorCSAqIG9uZSBpbiB0aGUgYnVmZmVyLiBOb3RlIHRoYXQgbGluZV9zdGFydCBjb3VsZCBiZSB0 aGUgb2Zmc2V0IG9mIHRoZQorCSAqIHRyYWlsaW5nICdcMCcgaWYgdGhlIGxhc3QgY2hhcmFjdGVy IGluIHRoZSBidWZmZXIgaXMgYSBsaW5lIGJyZWFrLgorCSAqLworCXRyYWlsaW5nX25sID0gc3Ry cmNocihidWYtPmRhdGEsICdcbicpOworCWlmICh0cmFpbGluZ19ubCA9PSBOVUxMKQorCQlsaW5l X3N0YXJ0ID0gMDsKKwllbHNlCisJCWxpbmVfc3RhcnQgPSAodHJhaWxpbmdfbmwgLSBidWYtPmRh dGEpICsgMTsKKworCS8qCisJICogUmVtZW1iZXIgdGhhdCB0aGUgY3VycmVudCBlbmQgb2YgdGhl IGJ1ZmZlciBpcyBhIHBvdGVudGlhbCBsb2NhdGlvbiB0bworCSAqIGluc2VydCBhIGxpbmUgYnJl YWsgb24gYSBmdXR1cmUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorCSAqLworCXNhdmVfY3Vyc29y ID0gYnVmLT5jdXJzb3I7CisJYnVmLT5jdXJzb3IgPSBidWYtPmxlbjsKKworCS8qIElmIHdlIGhh dmVuJ3QgcGFzc2VkIHRoZSB3cmFwIGNvbHVtbiwgd2UgZG9uJ3QgbmVlZCBhIG5ld2xpbmUuICov CisJaWYgKGJ1Zi0+bGVuIC0gbGluZV9zdGFydCA8PSB3cmFwX2NvbHVtbikKKwkJcmV0dXJuOwor CisJLyoKKwkgKiBJdCBvbmx5IG1ha2VzIHNlbnNlIHRvIGluc2VydCBhIG5ld2xpbmUgYXQgYSBw b3NpdGlvbiBsYXRlciB0aGFuIHRoZQorCSAqIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBsaW5l LgorCSAqLworCWlmIChidWYtPmN1cnNvciA8PSBsaW5lX3N0YXJ0KQorCQlyZXR1cm47CisKKwkv KiBJbnNlcnQgYSBuZXdsaW5lIGF0IHRoZSBwcmV2aW91cyBjdXJzb3IgbG9jYXRpb24uICovCisJ ZW5sYXJnZVN0cmluZ0luZm8oYnVmLCAxKTsKKwltZW1tb3ZlKCZidWYtPmRhdGFbc2F2ZV9jdXJz b3JdICsgMSwgJmJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0sCisJCQlidWYtPmxlbiAtIHNhdmVfY3Vy c29yKTsKKwkrK2J1Zi0+Y3Vyc29yOworCWJ1Zi0+ZGF0YVsrK2J1Zi0+bGVuXSA9ICdcMCc7CisJ YnVmLT5kYXRhW3NhdmVfY3Vyc29yXSA9ICdcbic7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf b3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ3NDk2ZDc2 ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1 dC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfb3V0 cHV0LmgKKyAqCSAgcHJvZHVjZSB0ZXh0dWFsIG91dHB1dCBmcm9tIHRoZSByZXN1bHRzIG9mIGEg cGxhbiB0cmVlIHdhbGsKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9vdXRwdXQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBH UEFfT1VUUFVUX0gKKyNkZWZpbmUgUEdQQV9PVVRQVVRfSAorCisjaW5jbHVkZSAicGdwYV9pZGVu dGlmaWVyLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworZXh0ZXJuIHZvaWQgcGdwYV9v dXRwdXRfYWR2aWNlKFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIHBncGFfcGxhbl93YWxrZXJf Y29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmll cnMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9w YXJzZXIueSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDYxN2U3ZjJmNjQKLS0tIC9kZXYvbnVsbAor KysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKQEAgLTAsMCArMSwzMzcg QEAKKyV7CisvKgorICogUGFyc2VyIGZvciBwbGFuIGFkdmljZQorICoKKyAqIENvcHlyaWdodCAo YykgMjAwMC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAq IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQorICovCisKKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNp bmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVzLmgiCisjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbG9hdC5oIgorCisjaW5jbHVkZSAi cGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX3BhcnNlci5oIgorCisvKgorICogQmlzb24gZG9l c24ndCBhbGxvY2F0ZSBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGxpdmUgYWNyb3NzIHBhcnNlciBj YWxscywKKyAqIHNvIHdlIGNhbiBlYXNpbHkgaGF2ZSBpdCB1c2UgcGFsbG9jIGluc3RlYWQgb2Yg bWFsbG9jLiAgVGhpcyBwcmV2ZW50cworICogbWVtb3J5IGxlYWtzIGlmIHdlIGVycm9yIG91dCBk dXJpbmcgcGFyc2luZy4KKyAqLworI2RlZmluZSBZWU1BTExPQyBwYWxsb2MKKyNkZWZpbmUgWVlG UkVFICAgcGZyZWUKKyV9CisKKy8qIEJJU09OIERlY2xhcmF0aW9ucyAqLworJXBhcnNlLXBhcmFt IHtMaXN0ICoqcmVzdWx0fQorJXBhcnNlLXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3B9 CislcGFyc2UtcGFyYW0ge3l5c2Nhbl90IHl5c2Nhbm5lcn0KKyVsZXgtcGFyYW0ge0xpc3QgKipy ZXN1bHR9CislbGV4LXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3B9CislbGV4LXBhcmFt IHt5eXNjYW5fdCB5eXNjYW5uZXJ9CislcHVyZS1wYXJzZXIKKyVleHBlY3QgMAorJW5hbWUtcHJl Zml4PSJwZ3BhX3l5IgorCisldW5pb24KK3sKKwljaGFyCSAgICpzdHI7CisJaW50CQkJaW50ZWdl cjsKKwlMaXN0CSAgICpsaXN0OworCXBncGFfYWR2aWNlX2l0ZW0gKml0ZW07CisJcGdwYV9hZHZp Y2VfdGFyZ2V0ICp0YXJnZXQ7CisJcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQ7Cit9CisldG9r ZW4gPHN0cj4gVE9LX0lERU5UIFRPS19UQUdfSk9JTl9PUkRFUiBUT0tfVEFHX0JJVE1BUCBUT0tf VEFHX0lOREVYCisldG9rZW4gPHN0cj4gVE9LX1RBR19TSU1QTEUgVE9LX1RBR19HRU5FUklDCisl dG9rZW4gPGludGVnZXI+IFRPS19JTlRFR0VSCisldG9rZW4gVE9LX09SIFRPS19BTkQKKworJXR5 cGUgPGludGVnZXI+IG9wdF9yaV9vY2N1cnJlbmNlCisldHlwZSA8aXRlbT4gYWR2aWNlX2l0ZW0K KyV0eXBlIDxsaXN0PiBhZHZpY2VfaXRlbV9saXN0IGJpdG1hcF9zdWJsaXN0IGJpdG1hcF90YXJn ZXRfbGlzdCBnZW5lcmljX3RhcmdldF9saXN0CisldHlwZSA8bGlzdD4gaW5kZXhfdGFyZ2V0X2xp c3Qgam9pbl9vcmRlcl90YXJnZXRfbGlzdAorJXR5cGUgPGxpc3Q+IG9wdF9wYXJ0aXRpb24gc2lt cGxlX3RhcmdldF9saXN0CisldHlwZSA8c3RyPiBpZGVudGlmaWVyIG9wdF9wbGFuX25hbWUKKyV0 eXBlIDx0YXJnZXQ+IGdlbmVyaWNfc3VibGlzdCBqb2luX29yZGVyX3N1Ymxpc3QKKyV0eXBlIDx0 YXJnZXQ+IHJlbGF0aW9uX2lkZW50aWZpZXIKKyV0eXBlIDxpdGFyZ2V0PiBiaXRtYXBfdGFyZ2V0 X2l0ZW0gaW5kZXhfbmFtZQorCislc3RhcnQgcGFyc2VfdG9wbGV2ZWwKKworLyogR3JhbW1hciBm b2xsb3dzICovCislJQorCitwYXJzZV90b3BsZXZlbDogYWR2aWNlX2l0ZW1fbGlzdAorCQl7CisJ CQkodm9pZCkgeXluZXJyczsJCQkJLyogc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLworCQkJ KnJlc3VsdCA9ICQxOworCQl9CisJOworCithZHZpY2VfaXRlbV9saXN0OiBhZHZpY2VfaXRlbV9s aXN0IGFkdmljZV9pdGVtCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQg PSBOSUw7IH0KKwk7CisKK2FkdmljZV9pdGVtOiBUT0tfVEFHX0pPSU5fT1JERVIgJygnIGpvaW5f b3JkZXJfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9h ZHZpY2VfaXRlbSk7CisJCQkkJC0+dGFnID0gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCSQkLT50 YXJnZXRzID0gJDM7CisJCX0KKwl8IFRPS19UQUdfSU5ERVggJygnIGluZGV4X3RhcmdldF9saXN0 ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJ aWYgKHN0cmNtcCgkMSwgImluZGV4X29ubHlfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBH UEFfVEFHX0lOREVYX09OTFlfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgImluZGV4X3Nj YW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19JTkRFWF9TQ0FOOworCQkJZWxzZQor CQkJCWVsb2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVzIiwgJDEpOworCQkJJCQtPnRh cmdldHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19CSVRNQVAgJygnIGJpdG1hcF90YXJnZXRfbGlz dCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJ CSQkLT50YWcgPSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOworCQkJJCQtPnRhcmdldHMgPSAk MzsKKwkJfQorCXwgVE9LX1RBR19TSU1QTEUgJygnIHNpbXBsZV90YXJnZXRfbGlzdCAnKScKKwkJ eworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCWlmIChzdHJj bXAoJDEsICJub19nYXRoZXIiKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19OT19HQVRI RVI7CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJzZXFfc2NhbiIpID09IDApCisJCQkJJCQtPnRh ZyA9IFBHUEFfVEFHX1NFUV9TQ0FOOworCQkJZWxzZSBpZiAoc3RyY21wKCQxLCAidGlkX3NjYW4i KSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19USURfU0NBTjsKKwkJCWVsc2UKKwkJCQll bG9nKEVSUk9SLCAidGFnIHBhcnNpbmcgZmFpbGVkOiAlcyIsICQxKTsKKwkJCSQkLT50YXJnZXRz ID0gJDM7CisJCX0KKwl8IFRPS19UQUdfR0VORVJJQyAnKCcgZ2VuZXJpY190YXJnZXRfbGlzdCAn KScKKwkJeworCQkJYm9vbAlmYWlsOworCisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2 aWNlX2l0ZW0pOworCQkJJCQtPnRhZyA9IHBncGFfcGFyc2VfYWR2aWNlX3RhZygkMSwgJmZhaWwp OworCQkJaWYgKGZhaWwpCisJCQl7CisJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJy b3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkgInVucmVjb2duaXplZCBhZHZpY2UgdGFnIik7 CisJCQl9CisKKwkJCWlmICgkJC0+dGFnID09IFBHUEFfVEFHX0ZPUkVJR05fSk9JTikKKwkJCXsK KwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgJDMpCisJCQkJewor CQkJCQlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSIHx8CisJCQkJ CQlsaXN0X2xlbmd0aCh0YXJnZXQtPmNoaWxkcmVuKSA9PSAxKQorCQkJCQkJCXBncGFfeXllcnJv cihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCQkJICJGT1JF SUdOX0pPSU4gdGFyZ2V0cyBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSByZWxhdGlvbiBpZGVu dGlmaWVyIik7CisJCQkJfQorCQkJfQorCisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQl9CisJOwor CityZWxhdGlvbl9pZGVudGlmaWVyOiBpZGVudGlmaWVyIG9wdF9yaV9vY2N1cnJlbmNlIG9wdF9w YXJ0aXRpb24gb3B0X3BsYW5fbmFtZQorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFf YWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSOwor CQkJJCQtPnJpZC5hbGlhc19uYW1lID0gJDE7CisJCQkkJC0+cmlkLm9jY3VycmVuY2UgPSAkMjsK KwkJCWlmIChsaXN0X2xlbmd0aCgkMykgPT0gMikKKwkJCXsKKwkJCQkkJC0+cmlkLnBhcnRuc3Ag PSBsaW5pdGlhbCgkMyk7CisJCQkJJCQtPnJpZC5wYXJ0cmVsID0gbHNlY29uZCgkMyk7CisJCQl9 CisJCQllbHNlIGlmICgkMyAhPSBOSUwpCisJCQkJJCQtPnJpZC5wYXJ0cmVsID0gbGluaXRpYWwo JDMpOworCQkJJCQtPnJpZC5wbGFuX25hbWUgPSAkNDsKKwkJfQorCTsKKworaW5kZXhfbmFtZTog aWRlbnRpZmllcgorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0 KTsKKwkJCSQkLT5pdHlwZSA9IFBHUEFfSU5ERVhfTkFNRTsKKwkJCSQkLT5pbmRuYW1lID0gJDE7 CisJCX0KKwl8IGlkZW50aWZpZXIgJy4nIGlkZW50aWZpZXIKKwkJeworCQkJJCQgPSBwYWxsb2Mw X29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aXR5cGUgPSBQR1BBX0lOREVYX05B TUU7CisJCQkkJC0+aW5kbmFtZXNwYWNlID0gJDE7CisJCQkkJC0+aW5kbmFtZSA9ICQzOworCQl9 CisJOworCitvcHRfcmlfb2NjdXJyZW5jZToKKwknIycgVE9LX0lOVEVHRVIKKwkJeworCQkJaWYg KCQyIDw9IDApCisJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5 c2Nhbm5lciwKKwkJCQkJCQkgIm9ubHkgcG9zaXRpdmUgb2NjdXJyZW5jZSBudW1iZXJzIGFyZSBw ZXJtaXR0ZWQiKTsKKwkJCSQkID0gJDI7CisJCX0KKwl8CisJCXsKKwkJCS8qIFRoZSBkZWZhdWx0 IG9jY3VycmVuY2UgbnVtYmVyIGlzIDEuICovCisJCQkkJCA9IDE7CisJCX0KKwk7CisKK2lkZW50 aWZpZXI6IFRPS19JREVOVAorCXwgVE9LX1RBR19KT0lOX09SREVSCisJfCBUT0tfVEFHX0lOREVY CisJfCBUT0tfVEFHX0JJVE1BUAorCXwgVE9LX1RBR19TSU1QTEUKKwl8IFRPS19UQUdfR0VORVJJ QworCTsKKworLyoKKyAqIFdoZW4gZ2VuZXJhdGluZyBhZHZpY2UsIHdlIGFsd2F5cyBzY2hlbWEt cXVhbGlmeSB0aGUgcGFydGl0aW9uIG5hbWUsIGJ1dAorICogd2hlbiBwYXJzaW5nIGFkdmljZSwg d2UgYWNjZXB0IGEgc3BlY2lmaWNhdGlvbiB0aGF0IGxhY2tzIG9uZS4KKyAqLworb3B0X3BhcnRp dGlvbjoKKwknLycgVE9LX0lERU5UICcuJyBUT0tfSURFTlQKKwkJeyAkJCA9IGxpc3RfbWFrZTIo JDIsICQ0KTsgfQorCXwgJy8nIFRPS19JREVOVAorCQl7ICQkID0gbGlzdF9tYWtlMSgkMik7IH0K Kwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK29wdF9wbGFuX25hbWU6CisJJ0AnIFRPS19JREVO VAorCQl7ICQkID0gJDI7IH0KKwl8CisJCXsgJCQgPSBOVUxMOyB9CisJOworCitiaXRtYXBfdGFy Z2V0X2xpc3Q6IGJpdG1hcF90YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyIGJpdG1hcF90 YXJnZXRfaXRlbQorCQl7CisJCQkkMi0+aXRhcmdldCA9ICQzOworCQkJJCQgPSBsYXBwZW5kKCQx LCAkMik7CisJCX0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2JpdG1hcF90YXJnZXRfaXRl bTogaW5kZXhfbmFtZQorCQl7ICQkID0gJDE7IH0KKwl8IFRPS19PUiAnKCcgYml0bWFwX3N1Ymxp c3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRleF90YXJnZXQpOwor CQkJJCQtPml0eXBlID0gUEdQQV9JTkRFWF9PUjsKKwkJCSQkLT5jaGlsZHJlbiA9ICQzOworCQl9 CisJfCBUT0tfQU5EICcoJyBiaXRtYXBfc3VibGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2Mw X29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aXR5cGUgPSBQR1BBX0lOREVYX0FO RDsKKwkJCSQkLT5jaGlsZHJlbiA9ICQzOworCQl9CisJOworCitiaXRtYXBfc3VibGlzdDogYml0 bWFwX3N1Ymxpc3QgYml0bWFwX3RhcmdldF9pdGVtCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7 IH0KKwl8IGJpdG1hcF90YXJnZXRfaXRlbQorCQl7ICQkID0gbGlzdF9tYWtlMSgkMSk7IH0KKwk7 CisKK2dlbmVyaWNfdGFyZ2V0X2xpc3Q6IGdlbmVyaWNfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRl bnRpZmllcgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfCBnZW5lcmljX3RhcmdldF9s aXN0IGdlbmVyaWNfc3VibGlzdAorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfAorCQl7 ICQkID0gTklMOyB9CisJOworCitnZW5lcmljX3N1Ymxpc3Q6ICcoJyBnZW5lcmljX3RhcmdldF9s aXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7 CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRy ZW4gPSAkMjsKKwkJfQorCTsKKworaW5kZXhfdGFyZ2V0X2xpc3Q6CisJICBpbmRleF90YXJnZXRf bGlzdCByZWxhdGlvbl9pZGVudGlmaWVyIGluZGV4X25hbWUKKwkJeworCQkJJDItPml0YXJnZXQg PSAkMzsKKwkJCSQkID0gbGFwcGVuZCgkMSwgJDIpOworCQl9CisJfAorCQl7ICQkID0gTklMOyB9 CisJOworCitqb2luX29yZGVyX3RhcmdldF9saXN0OiBqb2luX29yZGVyX3RhcmdldF9saXN0IHJl bGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwgam9pbl9v cmRlcl90YXJnZXRfbGlzdCBqb2luX29yZGVyX3N1Ymxpc3QKKwkJeyAkJCA9IGxhcHBlbmQoJDEs ICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworam9pbl9vcmRlcl9zdWJsaXN0Ogor CScoJyBqb2luX29yZGVyX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2Jq ZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRF UkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRyZW4gPSAkMjsKKwkJfQorCXwgJ3snIHNpbXBsZV90YXJn ZXRfbGlzdCAnfScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJn ZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1Q7CisJCQkkJC0+ Y2hpbGRyZW4gPSAkMjsKKwkJfQorCTsKKworc2ltcGxlX3RhcmdldF9saXN0OiBzaW1wbGVfdGFy Z2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmllcgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9 CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCislJQorCisvKgorICogUGFyc2UgYW4gYWR2aWNl X3N0cmluZyBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlzdCBvZiBwZ3BhX2FkdmljZV9pdGVt CisgKiBvYmplY3RzLiBJZiBhIHBhcnNlIGVycm9yIG9jY3VycywgaW5zdGVhZCByZXR1cm4gTlVM TC4KKyAqCisgKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIE5VTEwsICplcnJvcl9wIHdpbGwgYmUg c2V0IHRvIHRoZSBlcnJvciBtZXNzYWdlOworICogb3RoZXJ3aXNlLCAqZXJyb3JfcCB3aWxsIGJl IHNldCB0byBOVUxMLgorICovCitMaXN0ICoKK3BncGFfcGFyc2UoY29uc3QgY2hhciAqYWR2aWNl X3N0cmluZywgY2hhciAqKmVycm9yX3ApCit7CisJeXlzY2FuX3QJc2Nhbm5lcjsKKwlMaXN0CSAg ICpyZXN1bHQ7CisJY2hhcgkgICAqZXJyb3IgPSBOVUxMOworCisJcGdwYV9zY2FubmVyX2luaXQo YWR2aWNlX3N0cmluZywgJnNjYW5uZXIpOworCXBncGFfeXlwYXJzZSgmcmVzdWx0LCAmZXJyb3Is IHNjYW5uZXIpOworCXBncGFfc2Nhbm5lcl9maW5pc2goc2Nhbm5lcik7CisKKwlpZiAoZXJyb3Ig IT0gTlVMTCkKKwl7CisJCSplcnJvcl9wID0gZXJyb3I7CisJCXJldHVybiBOVUxMOworCX0KKwor CSplcnJvcl9wID0gTlVMTDsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9wbGFubmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM0 ODU5YzIzMDIwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3BsYW5uZXIuYwpAQCAtMCwwICsxLDE3MDYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHBncGFfcGxhbm5lci5jCisgKgkgIHBsYW5uZXIgaG9va3MKKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkg IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdhX3BsYW5uZXIuYworICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBnX3BsYW5fYWR2 aWNlLmgiCisjaW5jbHVkZSAicGdwYV9jb2xsZWN0b3IuaCIKKyNpbmNsdWRlICJwZ3BhX2lkZW50 aWZpZXIuaCIKKyNpbmNsdWRlICJwZ3BhX291dHB1dC5oIgorI2luY2x1ZGUgInBncGFfcGxhbm5l ci5oIgorI2luY2x1ZGUgInBncGFfdHJvdmUuaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgor CisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJsZS5oIgorI2luY2x1ZGUgIm5vZGVzL21h a2VmdW5jcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9leHRlbmRwbGFuLmgiCisjaW5jbHVkZSAi b3B0aW1pemVyL3BhdGhub2RlLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhzLmgiCisjaW5j bHVkZSAib3B0aW1pemVyL3BsYW5jYXQuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5o IgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKworLyoKKyAqIFdoZW4gYXNzZXJ0 aW9ucyBhcmUgZW5hYmxlZCwgd2UgdHJ5IGdlbmVyYXRpbmcgcmVsYXRpb24gaWRlbnRpZmllcnMg ZHVyaW5nCisgKiBwbGFubmluZywgc2F2aW5nIHRoZW0gaW4gYSBoYXNoIHRhYmxlLCBhbmQgdGhl biBjcm9zcy1jaGVja2luZyB0aGVtIGFnYWluc3QKKyAqIHRoZSBvbmVzIGdlbmVyYXRlZCBhZnRl ciBwbGFubmluZyBpcyBjb21wbGV0ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9yaV9jaGVj a2VyX2tleQoreworCWNoYXIJICAgKnBsYW5fbmFtZTsKKwlJbmRleAkJcnRpOworfSBwZ3BhX3Jp X2NoZWNrZXJfa2V5OworCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3JpX2NoZWNrZXIKK3sKKwlwZ3Bh X3JpX2NoZWNrZXJfa2V5IGtleTsKKwl1aW50MzIJCXN0YXR1czsKKwljb25zdCBjaGFyICpyaWRf c3RyaW5nOworfSBwZ3BhX3JpX2NoZWNrZXI7CisKK3N0YXRpYyB1aW50MzIgcGdwYV9yaV9jaGVj a2VyX2hhc2hfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkga2V5KTsKKworc3RhdGljIGlubGluZSBi b29sCitwZ3BhX3JpX2NoZWNrZXJfY29tcGFyZV9rZXkocGdwYV9yaV9jaGVja2VyX2tleSBhLCBw Z3BhX3JpX2NoZWNrZXJfa2V5IGIpCit7CisJaWYgKGEucnRpICE9IGIucnRpKQorCQlyZXR1cm4g ZmFsc2U7CisJaWYgKGEucGxhbl9uYW1lID09IE5VTEwpCisJCXJldHVybiAoYi5wbGFuX25hbWUg PT0gTlVMTCk7CisJaWYgKGIucGxhbl9uYW1lID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKwly ZXR1cm4gc3RyY21wKGEucGxhbl9uYW1lLCBiLnBsYW5fbmFtZSkgPT0gMDsKK30KKworI2RlZmlu ZSBTSF9QUkVGSVgJCQlwZ3BhX3JpX2NoZWNrCisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQRQkJcGdw YV9yaV9jaGVja2VyCisjZGVmaW5lIFNIX0tFWV9UWVBFCQkJcGdwYV9yaV9jaGVja2VyX2tleQor I2RlZmluZSBTSF9LRVkJCQkJa2V5CisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpCXBncGFf cmlfY2hlY2tlcl9oYXNoX2tleShrZXkpCisjZGVmaW5lCVNIX0VRVUFMKHRiLCBhLCBiKQlwZ3Bh X3JpX2NoZWNrZXJfY29tcGFyZV9rZXkoYSwgYikKKyNkZWZpbmUgU0hfU0NPUEUJCQlzdGF0aWMg aW5saW5lCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNkZWZpbmUgU0hfREVGSU5FCisjaW5jbHVkZSAi bGliL3NpbXBsZWhhc2guaCIKKworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbm5l cl9zdGF0ZQoreworCUV4cGxhaW5TdGF0ZSAqZXhwbGFpbl9zdGF0ZTsKKwlwZ3BhX3Ryb3ZlICp0 cm92ZTsKKwlNZW1vcnlDb250ZXh0IHRyb3ZlX2N4dDsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hF Q0tJTkcKKwlwZ3BhX3JpX2NoZWNrX2hhc2ggKnJpX2NoZWNrX2hhc2g7CisjZW5kaWYKK30gcGdw YV9wbGFubmVyX3N0YXRlOworCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2pvaW5fc3RhdGUKK3sKKwkv KiBNb3N0LXJlY2VudGx5LWNvbnNpZGVyZWQgb3V0ZXIgcmVsLiAqLworCVJlbE9wdEluZm8gKm91 dGVycmVsOworCisJLyogTW9zdC1yZWNlbnRseS1jb25zaWRlcmVkIGlubmVyIHJlbC4gKi8KKwlS ZWxPcHRJbmZvICppbm5lcnJlbDsKKworCS8qCisJICogQXJyYXkgb2YgcmVsYXRpb24gaWRlbnRp ZmllcnMgZm9yIGFsbCBtZW1iZXJzIG9mIHRoaXMgam9pbnJlbCwgd2l0aAorCSAqIG91dGVycmVs IGlkZW5pZmllcnMgYmVmb3JlIGlubmVycmVsIGlkZW50aWZpZXJzLgorCSAqLworCXBncGFfaWRl bnRpZmllciAqcmlkczsKKworCS8qIE51bWJlciBvZiBvdXRlciByZWwgaWRlbnRpZmllcnMuICov CisJaW50CQkJb3V0ZXJfY291bnQ7CisKKwkvKiBOdW1iZXIgb2YgaW5uZXIgcmVsIGlkZW50aWZp ZXJzLiAqLworCWludAkJCWlubmVyX2NvdW50OworCisJLyoKKwkgKiBUcm92ZSBsb29rdXAgcmVz dWx0cy4KKwkgKgorCSAqIGpvaW5fZW50cmllcyBhbmQgcmVsX2VudHJpZXMgYXJlIGFycmF5cyBv ZiBlbnRyaWVzLCBhbmQgam9pbl9pbmRleGVzCisJICogYW5kIHJlbF9pbmRleGVzIGFyZSB0aGUg aW50ZWdlciBvZmZzZXRzIHdpdGhpbiB0aG9zZSBhcnJheXMgb2YgZW50cmllcworCSAqIHBvdGVu dGlhbGx5IHJlbGV2YW50IHRvIHVzLiBUaGUgImpvaW4iIGZpZWxkcyBjb3JyZXNwb25kIHRvIGEg bG9va3VwCisJICogdXNpbmcgUEdQQV9UUk9WRV9MT09LVVBfSk9JTiBhbmQgdGhlICJyZWwiIGZp ZWxkcyB0byBhIGxvb2t1cCB1c2luZworCSAqIFBHUEFfVFJPVkVfTE9PS1VQX1JFTC4KKwkgKi8K KwlwZ3BhX3Ryb3ZlX2VudHJ5ICpqb2luX2VudHJpZXM7CisJQml0bWFwc2V0ICAqam9pbl9pbmRl eGVzOworCXBncGFfdHJvdmVfZW50cnkgKnJlbF9lbnRyaWVzOworCUJpdG1hcHNldCAgKnJlbF9p bmRleGVzOworfSBwZ3BhX2pvaW5fc3RhdGU7CisKKy8qIFNhdmVkIGhvb2sgdmFsdWVzICovCitz dGF0aWMgZ2V0X3JlbGF0aW9uX2luZm9faG9va190eXBlIHByZXZfZ2V0X3JlbGF0aW9uX2luZm8g PSBOVUxMOworc3RhdGljIGpvaW5fcGF0aF9zZXR1cF9ob29rX3R5cGUgcHJldl9qb2luX3BhdGhf c2V0dXAgPSBOVUxMOworc3RhdGljIGpvaW5yZWxfc2V0dXBfaG9va190eXBlIHByZXZfam9pbnJl bF9zZXR1cCA9IE5VTEw7CitzdGF0aWMgcGxhbm5lcl9zZXR1cF9ob29rX3R5cGUgcHJldl9wbGFu bmVyX3NldHVwID0gTlVMTDsKK3N0YXRpYyBwbGFubmVyX3NodXRkb3duX2hvb2tfdHlwZSBwcmV2 X3BsYW5uZXJfc2h1dGRvd24gPSBOVUxMOworCisvKiBPdGhlciBnbG9iYWwgdmFyaWFiZXMgKi8K K3N0YXRpYyBpbnQJcGxhbm5lcl9leHRlbnNpb25faWQgPSAtMTsKKworLyogRnVuY3Rpb24gcHJv dG90eXBlcy4gKi8KK3N0YXRpYyB2b2lkIHBncGFfZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lcklu Zm8gKnJvb3QsCisJCQkJCQkJCSAgIE9pZCByZWxhdGlvbk9iamVjdElkLAorCQkJCQkJCQkgICBi b29sIGluaHBhcmVudCwKKwkJCQkJCQkJICAgUmVsT3B0SW5mbyAqcmVsKTsKK3N0YXRpYyB2b2lk IHBncGFfam9pbnJlbF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkgICBSZWxPcHRJ bmZvICpqb2lucmVsLAorCQkJCQkJCSAgIFJlbE9wdEluZm8gKm91dGVycmVsLAorCQkJCQkJCSAg IFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZv LAorCQkJCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCk7CitzdGF0aWMgdm9pZCBwZ3BhX2pvaW5f cGF0aF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJIFJlbE9wdEluZm8gKmpvaW5y ZWwsCisJCQkJCQkJCSBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJCQkJCQkJIFJlbE9wdEluZm8g KmlubmVycmVsLAorCQkJCQkJCQkgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCQkJCSBKb2luUGF0 aEV4dHJhRGF0YSAqZXh0cmEpOworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX3NldHVwKFBsYW5u ZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpxdWVy eV9zdHJpbmcsCisJCQkJCQkJICAgZG91YmxlICp0dXBsZV9mcmFjdGlvbiwKKwkJCQkJCQkgICBF eHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9zaHV0ZG93bihQbGFu bmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJCQkJCSAgY29uc3QgY2hhciAqcXVl cnlfc3RyaW5nLCBQbGFubmVkU3RtdCAqcHN0bXQpOworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVy X2FwcGx5X2pvaW5yZWxfYWR2aWNlKHVpbnQ2NCAqcGdzX21hc2tfcCwKKwkJCQkJCQkJCQkJICBj aGFyICpwbGFuX25hbWUsCisJCQkJCQkJCQkJCSAgcGdwYV9qb2luX3N0YXRlICpwanMpOworc3Rh dGljIHZvaWQgcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5fcGF0aF9hZHZpY2UoSm9pblR5cGUgam9p bnR5cGUsCisJCQkJCQkJCQkJCQl1aW50NjQgKnBnc19tYXNrX3AsCisJCQkJCQkJCQkJCQljaGFy ICpwbGFuX25hbWUsCisJCQkJCQkJCQkJCQlwZ3BhX2pvaW5fc3RhdGUgKnBqcyk7CitzdGF0aWMg dm9pZCBwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVsT3B0SW5mbyAqcmVsLAorCQkJ CQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cmllcywKKwkJCQkJCQkJCQkgICBC aXRtYXBzZXQgKnNjYW5faW5kZXhlcywKKwkJCQkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpy ZWxfZW50cmllcywKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbF9pbmRleGVzKTsKK3N0YXRp YyB1aW50NjQgcGdwYV9qb2luX3N0cmF0ZWd5X21hc2tfZnJvbV9hZHZpY2VfdGFnKHBncGFfYWR2 aWNlX3RhZ190eXBlIHRhZyk7CitzdGF0aWMgYm9vbCBwZ3BhX2pvaW5fb3JkZXJfcGVybWl0c19q b2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCSBwZ3BhX2lk ZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5KTsKK3N0 YXRpYyBib29sIHBncGFfam9pbl9tZXRob2RfcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwg aW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJ CQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJCQkJICBib29sICpyZXN0 cmljdF9tZXRob2QpOworc3RhdGljIGJvb2wgcGdwYV9vcGFxdWVfam9pbl9wZXJtaXRzX2pvaW4o aW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJICBwZ3BhX2lkZW50 aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJ CQkJCQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCk7CisKK3N0YXRpYyBMaXN0ICpwZ3BhX3BsYW5u ZXJfYXBwZW5kX2ZlZWRiYWNrKExpc3QgKmxpc3QsIHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJ CQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCQkJCSAgcGdwYV9pZGVu dGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkgIHBncGFfcGxhbl93YWxrZXJfY29u dGV4dCAqd2Fsa2VyKTsKKworc3RhdGljIGlubGluZSB2b2lkIHBncGFfcmlfY2hlY2tlcl9zYXZl KHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLAorCQkJCQkJCQkJCVBsYW5uZXJJbmZvICpyb290LAor CQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbCk7CitzdGF0aWMgdm9pZCBwZ3BhX3JpX2NoZWNrZXJf dmFsaWRhdGUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsCisJCQkJCQkJCQkgUGxhbm5lZFN0bXQg KnBzdG10KTsKKworLyoKKyAqIEluc3RhbGwgcGxhbm5lci1yZWxhdGVkIGhvb2tzLgorICovCit2 b2lkCitwZ3BhX3BsYW5uZXJfaW5zdGFsbF9ob29rcyh2b2lkKQoreworCXBsYW5uZXJfZXh0ZW5z aW9uX2lkID0gR2V0UGxhbm5lckV4dGVuc2lvbklkKCJwZ19wbGFuX2FkdmljZSIpOworCXByZXZf Z2V0X3JlbGF0aW9uX2luZm8gPSBnZXRfcmVsYXRpb25faW5mb19ob29rOworCWdldF9yZWxhdGlv bl9pbmZvX2hvb2sgPSBwZ3BhX2dldF9yZWxhdGlvbl9pbmZvOworCXByZXZfam9pbnJlbF9zZXR1 cCA9IGpvaW5yZWxfc2V0dXBfaG9vazsKKwlqb2lucmVsX3NldHVwX2hvb2sgPSBwZ3BhX2pvaW5y ZWxfc2V0dXA7CisJcHJldl9qb2luX3BhdGhfc2V0dXAgPSBqb2luX3BhdGhfc2V0dXBfaG9vazsK Kwlqb2luX3BhdGhfc2V0dXBfaG9vayA9IHBncGFfam9pbl9wYXRoX3NldHVwOworCXByZXZfcGxh bm5lcl9zZXR1cCA9IHBsYW5uZXJfc2V0dXBfaG9vazsKKwlwbGFubmVyX3NldHVwX2hvb2sgPSBw Z3BhX3BsYW5uZXJfc2V0dXA7CisJcHJldl9wbGFubmVyX3NodXRkb3duID0gcGxhbm5lcl9zaHV0 ZG93bl9ob29rOworCXBsYW5uZXJfc2h1dGRvd25faG9vayA9IHBncGFfcGxhbm5lcl9zaHV0ZG93 bjsKK30KKworLyoKKyAqIEhvb2sgZnVuY3Rpb24gZm9yIGdldF9yZWxhdGlvbl9pbmZvKCkuCisg KgorICogV2UgY2FuIGFwcGx5IHNjYW4gYWR2aWNlIGF0IHRoaXMgb3BpbnQsIGFuZCB3ZSBhbHNv IHVzZWUgdGhpcyBhcyBhbgorICogb3Bwb3J0dW5pdHkgdG8gZG8gcmFuZ2UtdGFibGUgaWRlbnRp ZmllciBjcm9zcy1jaGVja2luZyBpbiBhc3NlcnQtZW5hYmxlZAorICogYnVpbGRzLgorICoKKyAq IFhYWDogV2UgY3VycmVudGx5IGVtaXQgdXNlbGVzcyBhZHZpY2UgbGlrZSBOT19HQVRIRVIoIipS RVNVTFQqIikgZm9yIHRyaXZpYWwKKyAqIHF1ZXJpZXMuIFRoZSBhZHZpY2UgaXMgdXNlbGVzcyBi ZWNhdXNlIGdldF9yZWxhdGlvbl9pbmZvIGlzbid0IGNhbGxlZCBmb3IKKyAqIG5vbi1yZWxhdGlv biBSVEVzLiBXZSBzaG91bGQgZWl0aGVyIHN1cHByZXNzIHRoZSBhZHZpY2UgaW4gc3VjaCBjYXNl cywgb3IKKyAqIGFkZCBhIGhvb2sgdGhhdCBjYW4gYXBwbHkgaXQuCisgKi8KK3N0YXRpYyB2b2lk CitwZ3BhX2dldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25P YmplY3RJZCwKKwkJCQkJICAgYm9vbCBpbmhwYXJlbnQsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwlw Z3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKworCS8qIEZldGNoIG91ciBwcml2YXRlIHN0YXRlLCBz ZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVwKCkuICovCisJcHBzID0gR2V0UGxhbm5lckdsb2Jh bEV4dGVuc2lvblN0YXRlKHJvb3QtPmdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKworCS8q IFNhdmUgZGV0YWlscyBuZWVkZWQgZm9yIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIgY3Jvc3MtY2hl Y2tpbmcuICovCisJaWYgKHBwcyAhPSBOVUxMKQorCQlwZ3BhX3JpX2NoZWNrZXJfc2F2ZShwcHMs IHJvb3QsIHJlbCk7CisKKwkvKiBJZiBxdWVyeSBhZHZpY2Ugd2FzIHByb3ZpZGVkLCBzZWFyY2gg Zm9yIHJlbGV2YW50IGVudHJpZXMuICovCisJaWYgKHBwcyAhPSBOVUxMICYmIHBwcy0+dHJvdmUg IT0gTlVMTCkKKwl7CisJCXBncGFfaWRlbnRpZmllciByaWQ7CisJCXBncGFfdHJvdmVfcmVzdWx0 IHRyZXN1bHRfc2NhbjsKKwkJcGdwYV90cm92ZV9yZXN1bHQgdHJlc3VsdF9yZWw7CisKKwkJLyog U2VhcmNoIGZvciBzY2FuIGFkdmljZSBhbmQgZ2VuZXJhbCByZWwgYWR2aWNlLiAqLworCQlwZ3Bh X2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9vdCwgcmVsLT5yZWxpZCwgJnJpZCk7CisJCXBn cGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4sIDEsICZy aWQsCisJCQkJCQkgICZ0cmVzdWx0X3NjYW4pOworCQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRy b3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9SRUwsIDEsICZyaWQsCisJCQkJCQkgICZ0cmVzdWx0X3Jl bCk7CisKKwkJLyogSWYgcmVsZXZhbnQgZW50cmllcyB3ZXJlIGZvdW5kLCBhcHBseSB0aGVtLiAq LworCQlpZiAodHJlc3VsdF9zY2FuLmluZGV4ZXMgIT0gTlVMTCB8fCB0cmVzdWx0X3JlbC5pbmRl eGVzICE9IE5VTEwpCisJCQlwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UocmVsLAorCQkJ CQkJCQkJCSAgIHRyZXN1bHRfc2Nhbi5lbnRyaWVzLAorCQkJCQkJCQkJCSAgIHRyZXN1bHRfc2Nh bi5pbmRleGVzLAorCQkJCQkJCQkJCSAgIHRyZXN1bHRfcmVsLmVudHJpZXMsCisJCQkJCQkJCQkJ ICAgdHJlc3VsdF9yZWwuaW5kZXhlcyk7CisJfQorCisJLyogUGFzcyBjYWxsIHRvIHByZXZpb3Vz IGhvb2suICovCisJaWYgKHByZXZfZ2V0X3JlbGF0aW9uX2luZm8pCisJCSgqcHJldl9nZXRfcmVs YXRpb25faW5mbykgKHJvb3QsIHJlbGF0aW9uT2JqZWN0SWQsIGluaHBhcmVudCwgcmVsKTsKK30K KworLyoKKyAqIFNlYXJjaCBmb3IgYWR2aWNlIHBlcnRhaW5pbmcgdG8gYSBwcm9wb3NlZCBqb2lu LgorICovCitzdGF0aWMgcGdwYV9qb2luX3N0YXRlICoKK3BncGFfZ2V0X2pvaW5fc3RhdGUoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCVJlbE9wdEluZm8gKm91 dGVycmVsLCBSZWxPcHRJbmZvICppbm5lcnJlbCkKK3sKKwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBw czsKKwlwZ3BhX2pvaW5fc3RhdGUgKnBqczsKKwlib29sCQluZXdfcGpzID0gZmFsc2U7CisKKwkv KiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0ZSwgc2V0IHVwIGJ5IHBncGFfcGxhbm5lcl9zZXR1cCgp LiAqLworCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShyb290LT5nbG9iLCBw bGFubmVyX2V4dGVuc2lvbl9pZCk7CisJaWYgKHBwcyA9PSBOVUxMIHx8IHBwcy0+dHJvdmUgPT0g TlVMTCkKKwl7CisJCS8qIE5vIGFkdmljZSBhcHBsaWVzIHRvIHRoaXMgcXVlcnksIGhlbmNlIG5v bmUgdG8gdGhpcyBqb2lucmVsLiAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIFNl ZSB3aGV0aGVyIHdlJ3ZlIHByZXZpb3VzbHkgYXNzb2NpYXRlZCBhIHBncGFfam9pbl9zdGF0ZSB3 aXRoIHRoaXMKKwkgKiBqb2lucmVsLiBJZiB3ZSBoYXZlIG5vdCwgd2UgbmVlZCB0byB0cnkgdG8g Y29uc3RydWN0IG9uZS4gSWYgd2UgaGF2ZSwKKwkgKiB0aGVuIHRoZXJlIGFyZSB0d28gY2FzZXM6 IChhKSBpZiBpbm5lcnJlbCBhbmQgb3V0ZXJyZWwgYXJlIHVuY2hhbmdlZCwKKwkgKiB3ZSBjYW4g c2ltcGx5IHVzZSBpdCwgYW5kIChiKSBpZiB0aGV5IGhhdmUgY2hhbmdlZCwgd2UgbmVlZCB0byBy ZWppZ2dlcgorCSAqIHRoZSBhcnJheSBvZiBpZGVudGlmaWVycyBidXQgY2FuIHN0aWxsIHNraXAg dGhlIHRyb3ZlIGxvb2t1cC4KKwkgKi8KKwlwanMgPSBHZXRSZWxPcHRJbmZvRXh0ZW5zaW9uU3Rh dGUoam9pbnJlbCwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCWlmIChwanMgIT0gTlVMTCkKKwl7 CisJCWlmIChwanMtPmpvaW5faW5kZXhlcyA9PSBOVUxMICYmIHBqcy0+cmVsX2luZGV4ZXMgPT0g TlVMTCkKKwkJeworCQkJLyoKKwkJCSAqIElmIHRoZXJlJ3Mgbm8gcG90ZW50aWFsbHkgcmVsZXZh bnQgYWR2aWNlLCB0aGVuIHRoZSBwcmVzZW5jZSBvZgorCQkJICogdGhpcyBwZ3BhX2pvaW5fc3Rh dGUgYWN0cyBsaWtlIGEgbmVnYXRpdmUgY2FjaGUgZW50cnk6IGl0IHRlbGxzCisJCQkgKiB1cyBu b3QgdG8gYm90aGVyIHNlYXJjaGluZyB0aGUgdHJvdmUgZm9yIGFkdmljZSwgYmVjYXVzZSB3ZQor CQkJICogd2lsbCBub3QgZmluZCBhbnkuCisJCQkgKi8KKwkJCXJldHVybiBOVUxMOworCQl9CisK KwkJaWYgKHBqcy0+b3V0ZXJyZWwgPT0gb3V0ZXJyZWwgJiYgcGpzLT5pbm5lcnJlbCA9PSBpbm5l cnJlbCkKKwkJeworCQkJLyogTm8gdXBkYXRlcyByZXF1aXJlZCwgc28ganVzdCByZXR1cm4uICov CisJCQkvKiBYWFguIERvZXMgdGhpcyBuZWVkIHRvIGRvIHNvbWV0aGluZyBkaWZmZXJlbnQgdW5k ZXIgR0VRTz8gKi8KKwkJCXJldHVybiBwanM7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoZXJl J3Mgbm8gcGdwYV9qb2luX3N0YXRlIHlldCwgd2UgbmVlZCB0byBhbGxvY2F0ZSBvbmUuIFRyb3Zl IGtleXMKKwkgKiB3aWxsIG5vdCBnZXQgYnVpbHQgZm9yIFJURV9KT0lOIFJURXMsIHNvIHRoZSBh cnJheSBtYXkgZW5kIHVwIGJlaW5nCisJICogbGFyZ2VyIHRoYW4gbmVlZGVkLiBJdCdzIG5vdCB3 b3J0aCB0cnlpbmcgdG8gY29tcHV0ZSBhIHBlcmZlY3RseQorCSAqIGFjY3VyYXRlIGNvdW50IGhl cmUuCisJICovCisJaWYgKHBqcyA9PSBOVUxMKQorCXsKKwkJaW50CQkJcGVzc2ltaXN0aWNfY291 bnQgPSBibXNfbnVtX21lbWJlcnMoam9pbnJlbC0+cmVsaWRzKTsKKworCQlwanMgPSBwYWxsb2Mw X29iamVjdChwZ3BhX2pvaW5fc3RhdGUpOworCQlwanMtPnJpZHMgPSBwYWxsb2NfYXJyYXkocGdw YV9pZGVudGlmaWVyLCBwZXNzaW1pc3RpY19jb3VudCk7CisJCW5ld19wanMgPSB0cnVlOworCX0K KworCS8qCisJICogRWl0aGVyIHdlIGp1c3QgYWxsb2NhdGVkIGEgbmV3IHBncGFfam9pbl9zdGF0 ZSwgb3IgdGhlIGV4aXN0aW5nIG9uZQorCSAqIG5lZWRzIHJlY29uZmlndXJpbmcgZm9yIGEgbmV3 IGlubmVycmVsIGFuZCBvdXRlcnJlbC4gVGhlIHJlcXVpcmVkIGFycmF5CisJICogc2l6ZSBjYW4n dCBjaGFuZ2UsIHNvIHdlIGNhbiBvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIG9uZS4KKwkgKi8KKwlw anMtPm91dGVycmVsID0gb3V0ZXJyZWw7CisJcGpzLT5pbm5lcnJlbCA9IGlubmVycmVsOworCXBq cy0+b3V0ZXJfY291bnQgPQorCQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKHJv b3QsIG91dGVycmVsLT5yZWxpZHMsIHBqcy0+cmlkcyk7CisJcGpzLT5pbm5lcl9jb3VudCA9CisJ CXBncGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9yZWxpZHMocm9vdCwgaW5uZXJyZWwtPnJlbGlk cywKKwkJCQkJCQkJCQkgICBwanMtPnJpZHMgKyBwanMtPm91dGVyX2NvdW50KTsKKworCS8qCisJ ICogSWYgd2UgYWxsb2NhdGVkIGEgbmV3IHBncGFfam9pbl9zdGF0ZSwgc2VhcmNoIG91ciB0cm92 ZSBvZiBhZHZpY2UgZm9yCisJICogcmVsZXZhbnQgZW50cmllcy4gVGhlIHRyb3ZlIGxvb2t1cCB3 aWxsIHJldHVybiB0aGUgc2FtZSByZXN1bHRzIGZvcgorCSAqIGV2ZXJ5IG91dGVycmVsL2lubmVy cmVsIGNvbWJpbmF0aW9uLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHJlcGVhdCB0aGF0CisJICogd29y ayBldmVyeSB0aW1lLgorCSAqLworCWlmIChuZXdfcGpzKQorCXsKKwkJcGdwYV90cm92ZV9yZXN1 bHQgdHJlc3VsdDsKKworCQkvKiBGaW5kIGpvaW4gZW50cmllcy4gKi8KKwkJcGdwYV90cm92ZV9s b29rdXAocHBzLT50cm92ZSwgUEdQQV9UUk9WRV9MT09LVVBfSk9JTiwKKwkJCQkJCSAgcGpzLT5v dXRlcl9jb3VudCArIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkgIHBqcy0+cmlkcywgJnRyZXN1 bHQpOworCQlwanMtPmpvaW5fZW50cmllcyA9IHRyZXN1bHQuZW50cmllczsKKwkJcGpzLT5qb2lu X2luZGV4ZXMgPSB0cmVzdWx0LmluZGV4ZXM7CisKKwkJLyogRmluZCByZWwgZW50cmllcy4gKi8K KwkJcGdwYV90cm92ZV9sb29rdXAocHBzLT50cm92ZSwgUEdQQV9UUk9WRV9MT09LVVBfUkVMLAor CQkJCQkJICBwanMtPm91dGVyX2NvdW50ICsgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCSAgcGpz LT5yaWRzLCAmdHJlc3VsdCk7CisJCXBqcy0+cmVsX2VudHJpZXMgPSB0cmVzdWx0LmVudHJpZXM7 CisJCXBqcy0+cmVsX2luZGV4ZXMgPSB0cmVzdWx0LmluZGV4ZXM7CisKKwkJLyogTm93IHRoYXQg dGhlIG5ldyBwZ3BhX2pvaW5fc3RhdGUgaXMgZnVsbHkgdmFsaWQsIHNhdmUgYSBwb2ludGVyLiAq LworCQlTZXRSZWxPcHRJbmZvRXh0ZW5zaW9uU3RhdGUoam9pbnJlbCwgcGxhbm5lcl9leHRlbnNp b25faWQsIHBqcyk7CisKKwkJLyoKKwkJICogSWYgdGhlcmUgd2FzIG5vIHJlbGV2YW50IGFkdmlj ZSBmb3VuZCwganVzdCByZXR1cm4gTlVMTC4gVGhpcworCQkgKiBwZ3BhX2pvaW5fc3RhdGUgd2ls bCBzdGljayBhcm91bmQgYXMgYSBzb3J0IG9mIG5lZ2F0aXZlIGNhY2hlCisJCSAqIGVudHJ5LCBz byB0aGF0IGZ1dHVyZSBjYWxscyBmb3IgdGhpcyBzYW1lIGpvaW5yZWwgcXVpY2tseSByZXR1cm4K KwkJICogTlVMTC4KKwkJICovCisJCWlmIChwanMtPmpvaW5faW5kZXhlcyA9PSBOVUxMICYmIHBq cy0+cmVsX2luZGV4ZXMgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBw anM7Cit9CisKKy8qCisgKiBFbmZvcmNlIGFueSBwcm92aWRlZCBhZHZpY2UgdGhhdCBpcyByZWxl dmFudCB0byBhbnkgbWV0aG9kIG9mIGltcGxlbWVudGluZworICogdGhpcyBqb2luLgorICoKKyAq IEFsdGhvdWdoIHdlJ3JlIHBhc3NlZCB0aGUgb3V0ZXJyZWwgYW5kIGlubmVycmVsIGhlcmUsIHRo b3NlIGFyZSBqdXN0CisgKiB3aGF0ZXZlciB2YWx1ZXMgaGFwcGVuZWQgdG8gcHJvbXB0IHRoZSBj cmVhdGlvbiBvZiB0aGlzIGpvaW5yZWw7IHRoZXkKKyAqIHNob3VsZG4ndCByZWFsbHkgaW5mbHVl bmNlIG91ciBjaG9pY2Ugb2Ygd2hhdCBhZHZpY2UgdG8gYXBwbHkuCisgKi8KK3N0YXRpYyB2b2lk CitwZ3BhX2pvaW5yZWxfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5y ZWwsCisJCQkJICAgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsIFJlbE9wdEluZm8gKmlubmVycmVsLAor CQkJCSAgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBMaXN0ICpyZXN0cmljdGxpc3QpCit7CisJ cGdwYV9qb2luX3N0YXRlICpwanM7CisKKwlBc3NlcnQoYm1zX21lbWJlcnNoaXAoam9pbnJlbC0+ cmVsaWRzKSA9PSBCTVNfTVVMVElQTEUpOworCisJLyogR2V0IG91ciBwcml2YXRlIHN0YXRlIGlu Zm9ybWF0aW9uIGZvciB0aGlzIGpvaW4uICovCisJcGpzID0gcGdwYV9nZXRfam9pbl9zdGF0ZShy b290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwpOworCisJLyogSWYgdGhlcmUgaXMgcmVs ZXZhbnQgYWR2aWNlLCBjYWxsIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGFwcGx5IGl0LiAqLworCWlm IChwanMgIT0gTlVMTCkKKwkJcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5yZWxfYWR2aWNlKCZqb2lu cmVsLT5wZ3NfbWFzaywKKwkJCQkJCQkJCQkgIHJvb3QtPnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkg IHBqcyk7CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJldmlvdXMgaG9vay4gKi8KKwlpZiAocHJldl9q b2lucmVsX3NldHVwKQorCQkoKnByZXZfam9pbnJlbF9zZXR1cCkgKHJvb3QsIGpvaW5yZWwsIG91 dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkgICBzamluZm8sIHJlc3RyaWN0bGlzdCk7Cit9CisK Ky8qCisgKiBFbmZvcmNlIGFueSBwcm92aWRlZCBhZHZpY2UgdGhhdCBpcyByZWxldmFudCB0byB0 aGlzIHBhcnRpY3VsYXIgbWV0aG9kIG9mCisgKiBpbXBsZW1lbnRpbmcgdGhpcyBwYXJ0aWN1bGFy IGpvaW4uCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2pvaW5fcGF0aF9zZXR1cChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJIFJlbE9wdEluZm8gKm91dGVycmVs LCBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJIEpvaW5UeXBlIGpvaW50eXBlLCBKb2luUGF0 aEV4dHJhRGF0YSAqZXh0cmEpCit7CisJcGdwYV9qb2luX3N0YXRlICpwanM7CisKKwlBc3NlcnQo Ym1zX21lbWJlcnNoaXAoam9pbnJlbC0+cmVsaWRzKSA9PSBCTVNfTVVMVElQTEUpOworCisJLyog R2V0IG91ciBwcml2YXRlIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGlzIGpvaW4uICovCisJcGpz ID0gcGdwYV9nZXRfam9pbl9zdGF0ZShyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwp OworCisJLyogSWYgdGhlcmUgaXMgcmVsZXZhbnQgYWR2aWNlLCBjYWxsIGEgaGVscGVyIGZ1bmN0 aW9uIHRvIGFwcGx5IGl0LiAqLworCWlmIChwanMgIT0gTlVMTCkKKwkJcGdwYV9wbGFubmVyX2Fw cGx5X2pvaW5fcGF0aF9hZHZpY2Uoam9pbnR5cGUsCisJCQkJCQkJCQkJCSZleHRyYS0+cGdzX21h c2ssCisJCQkJCQkJCQkJCXJvb3QtPnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkJcGpzKTsKKworCS8q IFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLiAqLworCWlmIChwcmV2X2pvaW5fcGF0aF9zZXR1 cCkKKwkJKCpwcmV2X2pvaW5fcGF0aF9zZXR1cCkgKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBp bm5lcnJlbCwKKwkJCQkJCQkJIGpvaW50eXBlLCBleHRyYSk7Cit9CisKKy8qCisgKiBQcmVwYXJl IGFkdmljZSBmb3IgdXNlIGJ5IGEgcXVlcnkuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5u ZXJfc2V0dXAoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpx dWVyeV9zdHJpbmcsCisJCQkJICAgZG91YmxlICp0dXBsZV9mcmFjdGlvbiwgRXhwbGFpblN0YXRl ICplcykKK3sKKwlwZ3BhX3Ryb3ZlICp0cm92ZSA9IE5VTEw7CisJcGdwYV9wbGFubmVyX3N0YXRl ICpwcHM7CisJY2hhcgkgICAqZXJyb3I7CisJYm9vbAkJbmVlZHNfcHBzID0gZmFsc2U7CisKKwkv KgorCSAqIElmIGFueSBhZHZpY2Ugd2FzIHByb3ZpZGVkLCBidWlsZCBhIHRyb3ZlIG9mIGFkdmlj ZSBmb3IgdXNlIGR1cmluZworCSAqIHBsYW5uaW5nLgorCSAqLworCWlmIChwZ19wbGFuX2Fkdmlj ZV9hZHZpY2UgIT0gTlVMTCAmJiBwZ19wbGFuX2FkdmljZV9hZHZpY2VbMF0gIT0gJ1wwJykKKwl7 CisJCUxpc3QJICAgKmFkdmljZV9pdGVtczsKKworCQkvKgorCQkgKiBQYXJzaW5nIHNob3VsZG4n dCBmYWlsIGhlcmUsIGJlY2F1c2Ugd2UgbXVzdCBoYXZlIHByZXZpb3VzbHkgcGFyc2VkCisJCSAq IHN1Y2Nlc3NmdWxseSBpbiBwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vaywgYnV0IGlm IGl0IGRvZXMsCisJCSAqIGVtaXQgYSB3YXJuaW5nLgorCQkgKi8KKwkJYWR2aWNlX2l0ZW1zID0g cGdwYV9wYXJzZShwZ19wbGFuX2FkdmljZV9hZHZpY2UsICZlcnJvcik7CisJCWlmIChlcnJvcikK KwkJCWVsb2coV0FSTklORywgImNvdWxkIG5vdCBwYXJzZSBhZHZpY2U6ICVzIiwgZXJyb3IpOwor CisJCS8qCisJCSAqIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgYWR2aWNlIHN0cmluZyB3YXMgbm9u LWVtcHR5IGJ1dCBjb250YWluZWQgbm8KKwkJICogYWN0dWFsIGFkdmljZSwgZS5nLiBpdCB3YXMg YWxsIHdoaXRlc3BhY2UuCisJCSAqLworCQlpZiAoYWR2aWNlX2l0ZW1zICE9IE5JTCkKKwkJewor CQkJdHJvdmUgPSBwZ3BhX2J1aWxkX3Ryb3ZlKGFkdmljZV9pdGVtcyk7CisJCQluZWVkc19wcHMg PSB0cnVlOworCQl9CisJfQorCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCisJLyoKKwkg KiBJZiBhc3NlcnRzIGFyZSBlbmFibGVkLCBhbHdheXMgYnVpbGQgYSBwcml2YXRlIHN0YXRlIG9i amVjdCBmb3IKKwkgKiBjcm9zcy1jaGVja3MuCisJICovCisJbmVlZHNfcHBzID0gdHJ1ZTsKKyNl bmRpZgorCisJLyogSW5pdGlhbGl6ZSBhbmQgc3RvcmUgcHJpdmF0ZSBzdGF0ZSwgaWYgcmVxdWly ZWQuICovCisJaWYgKG5lZWRzX3BwcykKKwl7CisJCXBwcyA9IHBhbGxvYzBfb2JqZWN0KHBncGFf cGxhbm5lcl9zdGF0ZSk7CisJCXBwcy0+ZXhwbGFpbl9zdGF0ZSA9IGVzOworCQlwcHMtPnRyb3Zl ID0gdHJvdmU7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQlwcHMtPnJpX2NoZWNrX2hh c2ggPQorCQkJcGdwYV9yaV9jaGVja19jcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsIDEwMjQs IE5VTEwpOworI2VuZGlmCisJCVNldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShnbG9iLCBw bGFubmVyX2V4dGVuc2lvbl9pZCwgcHBzKTsKKwl9Cit9CisKKy8qCisgKiBDYXJyeSBvdXQgd2hh dGV2ZXIgd29yayB3ZSB3YW50IHRvIGRvIGFmdGVyIHBsYW5uaW5nIGlzIGNvbXBsZXRlLgorICov CitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX3NodXRkb3duKFBsYW5uZXJHbG9iYWwgKmdsb2Is IFF1ZXJ5ICpwYXJzZSwKKwkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIFBsYW5uZWRT dG10ICpwc3RtdCkKK3sKKwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKwlwZ3BhX3Ryb3ZlICp0 cm92ZSA9IE5VTEw7CisJRXhwbGFpblN0YXRlICplcyA9IE5VTEw7CisJcGdwYV9wbGFuX3dhbGtl cl9jb250ZXh0IHdhbGtlciA9IHswfTsJLyogcGxhY2F0ZSBjb21waWxlciAqLworCWJvb2wJCWRv X2FkdmljZV9mZWVkYmFjazsKKwlib29sCQlkb19jb2xsZWN0X2FkdmljZTsKKwlMaXN0CSAgICpw Z3BhX2l0ZW1zID0gTklMOworCXBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMgPSBOVUxM OworCisJLyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1cCBieSBwZ3BhX3BsYW5uZXJf c2V0dXAoKS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUoZ2xvYiwg cGxhbm5lcl9leHRlbnNpb25faWQpOworCWlmIChwcHMgIT0gTlVMTCkKKwl7CisJCXRyb3ZlID0g cHBzLT50cm92ZTsKKwkJZXMgPSBwcHMtPmV4cGxhaW5fc3RhdGU7CisJfQorCisJLyogSWYgYXQg bGVhc3Qgb25lIGNvbGxlY3RvciBpcyBlbmFibGVkLCBnZW5lcmF0ZSBhZHZpY2UuICovCisJZG9f Y29sbGVjdF9hZHZpY2UgPSAocGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA+ IDAgfHwKKwkJCQkJCSBwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA+IDAp OworCisJLyogSWYgd2UgYXBwbGllZCBhZHZpY2UsIGdlbmVyYXRlIGZlZWRiYWNrLiAqLworCWRv X2FkdmljZV9mZWVkYmFjayA9ICh0cm92ZSAhPSBOVUxMICYmIGVzICE9IE5VTEwpOworCisJLyog SWYgZWl0aGVyIG9mIHRoZSBhYm92ZSBhcHBseSwgYW5hbHl6ZSB0aGUgcmVzdWx0aW5nIFBsYW5u ZWRTdG10LiAqLworCWlmIChkb19jb2xsZWN0X2FkdmljZSB8fCBkb19hZHZpY2VfZmVlZGJhY2sp CisJeworCQlwZ3BhX3BsYW5fd2Fsa2VyKCZ3YWxrZXIsIHBzdG10KTsKKwkJcnRfaWRlbnRpZmll cnMgPSBwZ3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10KTsKKwl9 CisKKwkvKgorCSAqIElmIGFkdmljZSBjb2xsZWN0aW9uIGlzIGVuYWJsZWQsIHB1dCB0aGUgYWR2 aWNlIGluIHN0cmluZyBmb3JtIGFuZCBzZW5kCisJICogaXQgdG8gdGhlIGNvbGxlY3Rvci4KKwkg Ki8KKwlpZiAoZG9fY29sbGVjdF9hZHZpY2UpCisJeworCQljaGFyCSAgICphZHZpY2Vfc3RyaW5n OworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJLyogR2VuZXJhdGUgYSB0ZXh0dWFsIGFkdmlj ZSBzdHJpbmcuICovCisJCWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlwZ3BhX291dHB1dF9hZHZp Y2UoJmJ1ZiwgJndhbGtlciwgcnRfaWRlbnRpZmllcnMpOworCQlhZHZpY2Vfc3RyaW5nID0gYnVm LmRhdGE7CisKKwkJLyogSWYgdGhlIGFkdmljZSBzdHJpbmcgaXMgZW1wdHksIGRvbid0IGJvdGhl ciBjb2xsZWN0aW5nIGl0LiAqLworCQlpZiAoYWR2aWNlX3N0cmluZ1swXSAhPSAnXDAnKQorCQkJ cGdwYV9jb2xsZWN0X2FkdmljZShwc3RtdC0+cXVlcnlJZCwgcXVlcnlfc3RyaW5nLCBhZHZpY2Vf c3RyaW5nKTsKKworCQkvKgorCQkgKiBJZiB3ZSd2ZSBnb25lIHRvIHRoZSB0cm91YmxlIG9mIGdl bmVyYXRpbmcgYW4gYWR2aWNlIHN0cmluZywgYW5kIGlmCisJCSAqIHdlJ3JlIGluc2lkZSBFWFBM QUlOLCBzYXZlIHRoZSBzdHJpbmcgc28gd2UgZG9uJ3QgbmVlZCB0bworCQkgKiByZWdlbmVyYXRl IGl0LgorCQkgKi8KKwkJaWYgKGVzICE9IE5VTEwpCisJCQlwZ3BhX2l0ZW1zID0gbGFwcGVuZChw Z3BhX2l0ZW1zLAorCQkJCQkJCQkgbWFrZURlZkVsZW0oImFkdmljZV9zdHJpbmciLAorCQkJCQkJ CQkJCQkgKE5vZGUgKikgbWFrZVN0cmluZyhhZHZpY2Vfc3RyaW5nKSwKKwkJCQkJCQkJCQkJIC0x KSk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgcGxhbm5pbmcgd2l0aGluIEVYUExBSU4sIG1h a2UgYXJyYW5nZW1lbnRzIHRvIGFsbG93IEVYUExBSU4KKwkgKiB0byB0ZWxsIHRoZSB1c2VyIHdo YXQgaGFzIGhhcHBlbmVkIHdpdGggdGhlIHByb3ZpZGVkIGFkdmljZS4KKwkgKgorCSAqIE5COiBJ ZiBFWFBMQUlOIGlzIHVzZWQgb24gYSBwcmVwYXJlZCBpcyBhIHByZXBhcmVkIHN0YXRlbWVudCwg cGxhbm5pbmcKKwkgKiB3aWxsIGhhdmUgYWxyZWFkeSBoYXBwZW5lZCBoYXBwZW5lZCB3aXRob3V0 IHJlY29yZGluZyB0aGVzZSBkZXRhaWxzLiBXZQorCSAqIGNvdWxkIGNvbnNpZGVyIGFkZGluZyBh IEdVQyB0byBjYXRlciB0byB0aGF0IHNjZW5hcmlvOyBvciB3ZSBjb3VsZCBkbworCSAqIHRoaXMg d29yayBhbGwgdGhlIHRpbWUsIGJ1dCB0aGF0IHNlZW1zIGxpa2UgdG9vIG11Y2ggb3ZlcmhlYWQu CisJICovCisJaWYgKGRvX2FkdmljZV9mZWVkYmFjaykKKwl7CisJCUxpc3QJICAgKmZlZWRiYWNr ID0gTklMOworCisJCS8qCisJCSAqIEluamVjdCBhIE5vZGUtdHJlZSByZXByZXNlbnRhdGlvbiBv ZiBhbGwgdGhlIHRyb3ZlLWVudHJ5IGZsYWdzIGludG8KKwkJICogdGhlIFBsYW5uZWRTdG10Lgor CQkgKi8KKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKGZlZWRiYWNr LAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJCQlQR1BBX1RST1ZFX0xPT0tVUF9TQ0FO LAorCQkJCQkJCQkJCQkJcnRfaWRlbnRpZmllcnMsICZ3YWxrZXIpOworCQlmZWVkYmFjayA9IHBn cGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soZmVlZGJhY2ssCisJCQkJCQkJCQkJCQl0cm92ZSwK KwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVfTE9PS1VQX0pPSU4sCisJCQkJCQkJCQkJCQlydF9pZGVu dGlmaWVycywgJndhbGtlcik7CisJCWZlZWRiYWNrID0gcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVk YmFjayhmZWVkYmFjaywKKwkJCQkJCQkJCQkJCXRyb3ZlLAorCQkJCQkJCQkJCQkJUEdQQV9UUk9W RV9MT09LVVBfUkVMLAorCQkJCQkJCQkJCQkJcnRfaWRlbnRpZmllcnMsICZ3YWxrZXIpOworCisJ CXBncGFfaXRlbXMgPSBsYXBwZW5kKHBncGFfaXRlbXMsIG1ha2VEZWZFbGVtKCJmZWVkYmFjayIs CisJCQkJCQkJCQkJCQkJIChOb2RlICopIGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJCSAtMSkpOwor CX0KKworCS8qIFB1c2ggd2hhdGV2ZXIgZGF0YSB3ZSdyZSBzYXZpbmcgaW50byB0aGUgUGxhbm5l ZFN0bXQuICovCisJaWYgKHBncGFfaXRlbXMgIT0gTklMKQorCQlwc3RtdC0+ZXh0ZW5zaW9uX3N0 YXRlID0KKwkJCWxhcHBlbmQocHN0bXQtPmV4dGVuc2lvbl9zdGF0ZSwKKwkJCQkJbWFrZURlZkVs ZW0oInBnX3BsYW5fYWR2aWNlIiwgKE5vZGUgKikgcGdwYV9pdGVtcywgLTEpKTsKKworCS8qCisJ ICogSWYgYXNzZXJ0aW9ucyBhcmUgZW5hYmxlZCwgY3Jvc3MtY2hlY2sgdGhlIGdlbmVyYXRlZCBy YW5nZSB0YWJsZQorCSAqIGlkZW50aWZpZXJzLgorCSAqLworCWlmIChwcHMgIT0gTlVMTCkKKwkJ cGdwYV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBwcywgcHN0bXQpOworfQorCisvKgorICogRW5mb3Jj ZSBvdmVyYWxsIHJlc3RyaWN0aW9ucyBvbiBhIGpvaW4gcmVsYXRpb24gdGhhdCBhcHBseSB1bmlm b3JtbHkKKyAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGNob2ljZSBvZiBpbm5lciBhbmQgb3V0ZXIgcmVs LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5yZWxfYWR2aWNlKHVp bnQ2NCAqcGdzX21hc2tfcCwgY2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkgIHBncGFfam9pbl9z dGF0ZSAqcGpzKQoreworCWludAkJCWkgPSAtMTsKKwlpbnQJCQlmbGFnczsKKwlib29sCQlnYXRo ZXJfY29uZmxpY3QgPSBmYWxzZTsKKwl1aW50NjQJCWdhdGhlcl9tYXNrID0gMDsKKwlCaXRtYXBz ZXQgICpnYXRoZXJfcGFydGlhbF9tYXRjaCA9IE5VTEw7CisJQml0bWFwc2V0ICAqZ2F0aGVyX2Z1 bGxfbWF0Y2ggPSBOVUxMOworCWJvb2wJCXBhcnRpdGlvbndpc2VfY29uZmxpY3QgPSBmYWxzZTsK KwlpbnQJCQlwYXJ0aXRpb253aXNlX291dGNvbWUgPSAwOworCUJpdG1hcHNldCAgKnBhcnRpdGlv bndpc2VfcGFydGlhbF9tYXRjaCA9IE5VTEw7CisJQml0bWFwc2V0ICAqcGFydGl0aW9ud2lzZV9m dWxsX21hdGNoID0gTlVMTDsKKworCS8qIEl0ZXJhdGUgb3ZlciBhbGwgcG9zc2libHktcmVsZXZh bnQgYWR2aWNlLiAqLworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwanMtPnJlbF9pbmRl eGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJnBqcy0+cmVs X2VudHJpZXNbaV07CisJCXBncGFfaXRtX3R5cGUgaXRtOworCQlib29sCQlmdWxsX21hdGNoID0g ZmFsc2U7CisJCXVpbnQ2NAkJbXlfZ2F0aGVyX21hc2sgPSAwOworCQlpbnQJCQlteV9wYXJ0aXRp b253aXNlX291dGNvbWUgPSAwOwkvKiA+MCB5ZXMsIDwwIG5vICovCisKKwkJLyoKKwkJICogRm9y IEdBVEhFUiBhbmQgR0FUSEVSX01FUkdFLCBpZiB0aGUgc3BlY2lmaWVkIHJlbGF0aW9ucyBleGFj dGx5CisJCSAqIG1hdGNoIHRoaXMgam9pbnJlbCwgZG8gd2hhdGV2ZXIgdGhlIGFkdmljZSBzYXlz OyBvdGhlcndpc2UsIGRvbid0CisJCSAqIGFsbG93IEdhdGhlciBvciBHYXRoZXIgTWVyZ2UgYXQg dGhpcyBsZXZlbC4gRm9yIE5PX0dBVEhFUiwgdGhlcmUKKwkJICogbXVzdCBiZSBhIHNpbmdsZSB0 YXJnZXQgcmVsYXRpb24gd2hpY2ggbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGlzCisJCSAqIGpvaW5y ZWwsIHNvIGp1c3QgZG9uJ3QgYWxsb3cgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBoZXJlLCBmdWxs CisJCSAqIHN0b3AuCisJCSAqLworCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19OT19HQVRI RVIpCisJCXsKKwkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJ CQlmdWxsX21hdGNoID0gdHJ1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWludAkJCXRvdGFsX2Nv dW50OworCisJCQl0b3RhbF9jb3VudCA9IHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2Nv dW50OworCQkJaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQodG90YWxfY291bnQs IHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJCWVudHJ5LT50YXJnZXQpOworCQkJQXNzZXJ0KGl0bSAh PSBQR1BBX0lUTV9ESVNKT0lOVCk7CisKKwkJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJ CQl7CisJCQkJZnVsbF9tYXRjaCA9IHRydWU7CisJCQkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9U QUdfUEFSVElUSU9OV0lTRSkKKwkJCQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gMTsKKwkJ CQllbHNlIGlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUikKKwkJCQkJbXlfZ2F0aGVy X21hc2sgPSBQR1NfR0FUSEVSOworCQkJCWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdf R0FUSEVSX01FUkdFKQorCQkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVJfTUVSR0U7CisJ CQkJZWxzZQorCQkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBhZHZpY2UgdGFnOiAlZCIsCisJ CQkJCQkgKGludCkgZW50cnktPnRhZyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKGVu dHJ5LT50YWcgPT0gUEdQQV9UQUdfUEFSVElUSU9OV0lTRSkKKwkJCQl7CisJCQkJCW15X3BhcnRp dGlvbndpc2Vfb3V0Y29tZSA9IC0xOworCQkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOworCQkJCX0KKwkJCQllbHNlIGlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFH X0dBVEhFUiB8fAorCQkJCQkJIGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSX01FUkdFKQor CQkJCXsKKwkJCQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gLTE7CisJCQkJCW15X2dhdGhl cl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJ ZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgYWR2aWNlIHRhZzogJWQiLAorCQkJCQkJIChpbnQpIGVu dHJ5LT50YWcpOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogSWYgd2Ugc2V0IG15X2dhdGhlcl9t YXNrIHVwIGFib3ZlLCB0aGVuIHdlICgxKSBtYWtlIGEgbm90ZSBpZiB0aGUKKwkJICogYWR2aWNl IGNvbmZsaWN0ZWQsICgyKSByZW1lbWJlciB0aGUgbWFzayB2YWx1ZSwgYW5kICgzKSByZW1lbWJl cgorCQkgKiB3aGV0aGVyIHRoaXMgd2FzIGEgZnVsbCBvciBwYXJ0aWFsIG1hdGNoLgorCQkgKi8K KwkJaWYgKG15X2dhdGhlcl9tYXNrICE9IDApCisJCXsKKwkJCWlmIChnYXRoZXJfbWFzayAhPSAw ICYmIGdhdGhlcl9tYXNrICE9IG15X2dhdGhlcl9tYXNrKQorCQkJCWdhdGhlcl9jb25mbGljdCA9 IHRydWU7CisJCQlnYXRoZXJfbWFzayA9IG15X2dhdGhlcl9tYXNrOworCQkJaWYgKGZ1bGxfbWF0 Y2gpCisJCQkJZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJfZnVsbF9t YXRjaCwgaSk7CisJCQllbHNlCisJCQkJZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBibXNfYWRkX21l bWJlcihnYXRoZXJfcGFydGlhbF9tYXRjaCwgaSk7CisJCX0KKworCQkvKgorCQkgKiBMaWtld2lz ZSwgaWYgd2Ugc2V0IG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSB1cCBhYm92ZSwgdGhlbiB3ZSAo MSkKKwkJICogbWFrZSBhIG5vdGUgaWYgdGhlIGFkdmljZSBjb25mbGljdGVkLCAoMikgcmVtZW1i ZXIgd2hhdCB0aGUgZGVzaXJlZAorCQkgKiBvdXRjb21lIHdhcywgYW5kICgzKSByZW1lbWJlciB3 aGV0aGVyIHRoaXMgd2FzIGEgZnVsbCBvciBwYXJ0aWFsCisJCSAqIG1hdGNoLgorCQkgKi8KKwkJ aWYgKG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwKQorCQl7CisJCQlpZiAocGFydGl0aW9u d2lzZV9vdXRjb21lICE9IDAgJiYKKwkJCQlwYXJ0aXRpb253aXNlX291dGNvbWUgIT0gbXlfcGFy dGl0aW9ud2lzZV9vdXRjb21lKQorCQkJCXBhcnRpdGlvbndpc2VfY29uZmxpY3QgPSB0cnVlOwor CQkJcGFydGl0aW9ud2lzZV9vdXRjb21lID0gbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lOworCQkJ aWYgKGZ1bGxfbWF0Y2gpCisJCQkJcGFydGl0aW9ud2lzZV9mdWxsX21hdGNoID0KKwkJCQkJYm1z X2FkZF9tZW1iZXIocGFydGl0aW9ud2lzZV9mdWxsX21hdGNoLCBpKTsKKwkJCWVsc2UKKwkJCQlw YXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2ggPQorCQkJCQlibXNfYWRkX21lbWJlcihwYXJ0aXRp b253aXNlX3BhcnRpYWxfbWF0Y2gsIGkpOworCQl9CisJfQorCisJLyoKKwkgKiBNYXJrIGV2ZXJ5 IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9mIGFkdmljZSBhcyBwYXJ0aWFsbHkgbWF0Y2hlZCwgYW5k IGlmCisJICogdGhlIHNldCBvZiB0YXJnZXRzIGV4YWN0bHkgbWF0Y2hlZCB0aGlzIHJlbGF0aW9u LCBmdWxseSBtYXRjaGVkLiBJZgorCSAqIHRoZXJlIHdhcyBhIGNvbmZsaWN0LCBtYXJrIHRoZW0g YWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWZsYWdzID0gUEdQQV9URV9NQVRDSF9QQVJUSUFM OworCWlmIChnYXRoZXJfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJQ1RJTkc7 CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgZ2F0aGVyX3BhcnRpYWxf bWF0Y2gsIGZsYWdzKTsKKwlmbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdwYV90cm92 ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgZ2F0aGVyX2Z1bGxfbWF0Y2gsIGZsYWdzKTsK KworCS8qIExpa2V3aXNlIGZvciBwYXJ0aXRpb253aXNlIGFkdmljZS4gKi8KKwlmbGFncyA9IFBH UEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAocGFydGl0aW9ud2lzZV9jb25mbGljdCkKKwkJZmxh Z3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJl bF9lbnRyaWVzLCBwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2gsIGZsYWdzKTsKKwlmbGFncyB8 PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50 cmllcywgcGFydGl0aW9ud2lzZV9mdWxsX21hdGNoLCBmbGFncyk7CisKKwkvKiBJZiB0aGVyZSBp cyBhIG5vbi1jb25mbGljdGluZyBnYXRoZXIgc3BlY2lmaWNhdGlvbiwgZW5mb3JjZSBpdC4gKi8K KwlpZiAoZ2F0aGVyX21hc2sgIT0gMCAmJiAhZ2F0aGVyX2NvbmZsaWN0KQorCXsKKwkJKnBnc19t YXNrX3AgJj0KKwkJCX4oUEdTX0dBVEhFUiB8IFBHU19HQVRIRVJfTUVSR0UgfCBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTCk7CisJCSpwZ3NfbWFza19wIHw9IGdhdGhlcl9tYXNrOworCX0KKworCS8q CisJICogSWYgdGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgcGFydGl0aW9ud2lzZSBzcGVjaWZp Y2F0aW9uLCBlbmZvcmNlLgorCSAqCisJICogVG8gZm9yY2UgYSBwYXJ0aXRpb253aXNlIGpvaW4s IHdlIGRpc2FibGUgYWxsIHRoZSBvcmRpbmFyeSBtZWFucyBvZgorCSAqIHBlcmZvcm1pbmcgYSBq b2luLCBhbmQgaW5zdGVhZCBvbmx5IEFwcGVuZCBhbmQgTWVyZ2VBcHBlbmQgcGF0aHMgaGVyZS4K KwkgKiBUbyBwcmV2ZW50IG9uZSwgd2UganVzdCBkaXNhYmxlIEFwcGVuZCBhbmQgTWVyZ2VBcHBl bmQuICBOb3RlIHRoYXQgd2UKKwkgKiBtdXN0IG5vdCB1bnNldCBQR1NfQ09OU0lERVJfUEFSVElU SU9OV0lTRSBldmVuIHdoZW4gd2UgZG9uJ3Qgd2FudCBhCisJICogcGFydGl0aW9ud2lzZSBqb2lu IGhlcmUsIGJlY2F1c2Ugd2UgbWlnaHQgd2FudCBvbmUgYXQgYSBoaWdoZXIgbGV2ZWwKKwkgKiB0 aGF0IGlzIGNvbnN0cnVjdGluZyB1c2luZyBwYXRocyBmcm9tIHRoaXMgbGV2ZWwuCisJICovCisJ aWYgKHBhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwICYmICFwYXJ0aXRpb253aXNlX2NvbmZsaWN0 KQorCXsKKwkJaWYgKHBhcnRpdGlvbndpc2Vfb3V0Y29tZSA+IDApCisJCQkqcGdzX21hc2tfcCA9 ICgqcGdzX21hc2tfcCAmIH5QR1NfSk9JTl9BTlkpIHwKKwkJCQlQR1NfQVBQRU5EIHwgUEdTX01F UkdFX0FQUEVORCB8IFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFOworCQllbHNlCisJCQkqcGdz X21hc2tfcCAmPSB+KFBHU19BUFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5EKTsKKwl9Cit9CisKKy8q CisgKiBFbmZvcmNlIHJlc3RyaWN0aW9ucyBvbiB0aGUgam9pbiBvcmRlciBvciBqb2luIG1ldGhv ZC4KKyAqCisgKiBOb3RlIHRoYXQsIGFsdGhvdWdoIGl0IGlzIHBvc3NpYmxlIHRvIHZpZXcgUEFS VElUSU9OV0lTRSBhZHZpY2UgYXMKKyAqIGNvbnRyb2xsaW5nIHRoZSBqb2luIG1ldGhvZCwgd2Ug Y2FuJ3QgZW5mb3JjZSBpdCBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlCisgKiBwYXRoIHdoZXJlIHRo aXMgZXhlY3V0ZXMgb25seSBkZWFscyB3aXRoIGpvaW4gcGF0aHMgdGhhdCBhcmUgYnVpbHQgZGly ZWN0bHkKKyAqIGZyb20gYSBzaW5nbGUgb3V0ZXIgcGF0aCBhbmQgYSBzaW5nbGUgaW5uZXIgcGF0 aC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNl KEpvaW5UeXBlIGpvaW50eXBlLCB1aW50NjQgKnBnc19tYXNrX3AsCisJCQkJCQkJCQljaGFyICpw bGFuX25hbWUsCisJCQkJCQkJCQlwZ3BhX2pvaW5fc3RhdGUgKnBqcykKK3sKKwlpbnQJCQlpID0g LTE7CisJQml0bWFwc2V0ICAqam9fcGVybWl0X2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNldCAg KmpvX2RlbnlfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqam1faW5kZXhlcyA9IE5VTEw7 CisJYm9vbAkJam1fY29uZmxpY3QgPSBmYWxzZTsKKwl1aW50MzIJCWpvaW5fbWFzayA9IDA7CisK KwkvKiBJdGVyYXRlIG92ZXIgYWxsIHBvc3NpYmx5LXJlbGV2YW50IGFkdmljZS4gKi8KKwl3aGls ZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocGpzLT5qb2luX2luZGV4ZXMsIGkpKSA+PSAwKQorCXsK KwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmcGpzLT5qb2luX2VudHJpZXNbaV07CisJCXVp bnQzMgkJbXlfam9pbl9tYXNrOworCisJCS8qIEhhbmRsZSBqb2luIG9yZGVyIGFkdmljZS4gKi8K KwkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfSk9JTl9PUkRFUikKKwkJeworCQkJaWYgKHBn cGFfam9pbl9vcmRlcl9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJ IHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSBwanMtPnJpZHMsCisJCQkJCQkJCQkJCSBl bnRyeSkpCisJCQkJam9fcGVybWl0X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19wZXJtaXRf aW5kZXhlcywgaSk7CisJCQllbHNlCisJCQkJam9fZGVueV9pbmRleGVzID0gYm1zX2FkZF9tZW1i ZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxl IGpvaW4gc3RyYXRlZ3kgYWR2aWNlLiAqLworCQlteV9qb2luX21hc2sgPSBwZ3BhX2pvaW5fc3Ry YXRlZ3lfbWFza19mcm9tX2FkdmljZV90YWcoZW50cnktPnRhZyk7CisJCWlmIChteV9qb2luX21h c2sgIT0gMCkKKwkJeworCQkJYm9vbAkJcGVybWl0OworCQkJYm9vbAkJcmVzdHJpY3RfbWV0aG9k OworCisJCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19GT1JFSUdOX0pPSU4pCisJCQkJcGVy bWl0ID0gcGdwYV9vcGFxdWVfam9pbl9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJ CQkJCQkJCQkJCQkgICBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+cmlk cywKKwkJCQkJCQkJCQkJCQkgICBlbnRyeSwKKwkJCQkJCQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0 aG9kKTsKKwkJCWVsc2UKKwkJCQlwZXJtaXQgPSBwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9p bihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+aW5uZXJfY291bnQsCisJ CQkJCQkJCQkJCQkJICAgcGpzLT5yaWRzLAorCQkJCQkJCQkJCQkJCSAgIGVudHJ5LAorCQkJCQkJ CQkJCQkJCSAgICZyZXN0cmljdF9tZXRob2QpOworCQkJaWYgKCFwZXJtaXQpCisJCQkJam9fZGVu eV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCWVsc2Ug aWYgKHJlc3RyaWN0X21ldGhvZCkKKwkJCXsKKwkJCQlqb19wZXJtaXRfaW5kZXhlcyA9IGJtc19h ZGRfbWVtYmVyKGpvX3Blcm1pdF9pbmRleGVzLCBpKTsKKwkJCQlqbV9pbmRleGVzID0gYm1zX2Fk ZF9tZW1iZXIoam9fcGVybWl0X2luZGV4ZXMsIGkpOworCQkJCWlmIChqb2luX21hc2sgIT0gMCAm JiBqb2luX21hc2sgIT0gbXlfam9pbl9tYXNrKQorCQkJCQlqbV9jb25mbGljdCA9IHRydWU7CisJ CQkJam9pbl9tYXNrID0gbXlfam9pbl9tYXNrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwor CQkvKiBIYW5kbGUgc2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZpY2UuICovCisJCWlmIChlbnRyeS0+ dGFnID09IFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSB8fAorCQkJZW50cnktPnRhZyA9PSBQR1BB X1RBR19TRU1JSk9JTl9OT05fVU5JUVVFKQorCQl7CisJCQlib29sCQlhZHZpY2VfdW5pcXVlOwor CQkJYm9vbAkJanRfdW5pcXVlOworCQkJYm9vbAkJanRfbm9uX3VuaXF1ZTsKKwkJCWJvb2wJCXJl c3RyaWN0X21ldGhvZDsKKworCQkJLyogQWR2aWNlIHdhbnRzIHRvIHVuaXF1ZS1pZnkgYW5kIHVz ZSBhIHJlZ3VsYXIgam9pbj8gKi8KKwkJCWFkdmljZV91bmlxdWUgPSAoZW50cnktPnRhZyA9PSBQ R1BBX1RBR19TRU1JSk9JTl9VTklRVUUpOworCisJCQkvKiBQbGFubmVyIGlzIHRyeWluZyB0byB1 bmlxdWUtaWZ5IGFuZCB1c2UgYSByZWd1bGFyIGpvaW4/ICovCisJCQlqdF91bmlxdWUgPSAoam9p bnR5cGUgPT0gSk9JTl9VTklRVUVfSU5ORVIgfHwKKwkJCQkJCSBqb2ludHlwZSA9PSBKT0lOX1VO SVFVRV9PVVRFUik7CisKKwkJCS8qIFBsYW5uZXIgaXMgdHJ5aW5nIGEgc2VtaS1qb2luLCB3aXRo b3V0IHVuaXF1ZS1pZnlpbmc/ICovCisJCQlqdF9ub25fdW5pcXVlID0gKGpvaW50eXBlID09IEpP SU5fU0VNSSB8fAorCQkJCQkJCSBqb2ludHlwZSA9PSBKT0lOX1JJR0hUX1NFTUkpOworCisJCQkv KgorCQkJICogVGhlc2UgYWR2aWNlIHRhZ3MgYmVoYXZlIHZlcnkgbXVjaCBsaWtlIGpvaW4gbWV0 aG9kIGFkdmljZSwgaW4KKwkJCSAqIHRoYXQgdGhleSB3YW50IHRoZSBpbm5lciBzaWRlIG9mIHRo ZSBzZW1pam9pbiB0byBtYXRjaCB0aGUKKwkJCSAqIHJlbGF0aW9ucyBsaXN0ZWQgaW4gdGhlIGFk dmljZS4gSGVuY2UsIHdlIHRlc3Qgd2hldGhlciBqb2luCisJCQkgKiBtZXRob2QgYWR2aWNlIHdv dWxkIGVuZm9yY2UgYSBqb2luIG9yZGVyIHJlc3RyaWN0aW9uIGhlcmUsIGFuZAorCQkJICogZGlz YWxsb3cgdGhlIGpvaW4gaWYgbm90LgorCQkJICoKKwkJCSAqIFhYWC4gVGhpbmsgaGFyZGVyIGFi b3V0IHJpZ2h0IHNlbWlqb2lucy4KKwkJCSAqLworCQkJaWYgKCFwZ3BhX2pvaW5fbWV0aG9kX3Bl cm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgICBwanMtPmlubmVyX2Nv dW50LAorCQkJCQkJCQkJCQkgICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCSAgIGVudHJ5LAorCQkJ CQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0aG9kKSkKKwkJCQlqb19kZW55X2luZGV4ZXMgPSBibXNf YWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJZWxzZSBpZiAocmVzdHJpY3RfbWV0 aG9kKQorCQkJeworCQkJCWpvX3Blcm1pdF9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fcGVy bWl0X2luZGV4ZXMsIGkpOworCQkJCWlmICghanRfdW5pcXVlICYmICFqdF9ub25fdW5pcXVlKQor CQkJCXsKKwkJCQkJLyoKKwkJCQkJICogVGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzZW1pam9p biB0byB3aGljaCBTSl9VTklRVUUKKwkJCQkJICogb3IgU0pfTk9OX1VOSVFVRSBjYW4gYmUgYXBw bGllZC4KKwkJCQkJICovCisJCQkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX0lOQVBQTElDQUJM RTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoYWR2aWNlX3VuaXF1ZSAhPSBqdF91bmlxdWUpCisJCQkJ CWpvX2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7CisJ CQl9CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhlIGFkdmljZSBpbmRp Y2F0ZXMgYm90aCB0aGF0IHRoaXMgam9pbiBvcmRlciBpcyBwZXJtaXNzaWJsZSBhbmQKKwkgKiBh bHNvIHRoYXQgaXQgaXNuJ3QsIHRoZW4gbWFyayBhZHZpY2UgcmVsYXRlZCB0byB0aGUgam9pbiBv cmRlciBhcworCSAqIGNvbmZsaWN0aW5nLgorCSAqLworCWlmIChqb19wZXJtaXRfaW5kZXhlcyAh PSBOVUxMICYmIGpvX2RlbnlfaW5kZXhlcyAhPSBOVUxMKQorCXsKKwkJcGdwYV90cm92ZV9zZXRf ZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIGpvX3Blcm1pdF9pbmRleGVzLAorCQkJCQkJCSBQR1BB X1RFX0NPTkZMSUNUSU5HKTsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJp ZXMsIGpvX2RlbnlfaW5kZXhlcywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisJfQor CisJLyoKKwkgKiBJZiBtb3JlIHRoYW4gb25lIGpvaW4gbWV0aG9kIHNwZWNpZmljYXRpb24gaXMg cmVsZXZhbnQgaGVyZSBhbmQgdGhleQorCSAqIGRpZmZlciwgbWFyayB0aGVtIGFsbCBhcyBjb25m bGljdGluZy4KKwkgKi8KKwlpZiAoam1fY29uZmxpY3QpCisJCXBncGFfdHJvdmVfc2V0X2ZsYWdz KHBqcy0+am9pbl9lbnRyaWVzLCBqbV9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNU SU5HKTsKKworCS8qCisJICogSWYgd2Ugd2VyZSBhZHZpc2VkIHRvIGRlbnkgdGhpcyBqb2luIG9y ZGVyLCB0aGVuIGRvIHNvLiBIb3dldmVyLCBpZiB3ZQorCSAqIHdlcmUgYWxzbyBhZHZpc2VkIHRv IHBlcm1pdCBpdCwgdGhlbiBkbyBub3RoaW5nLCBzaW5jZSB0aGUgYWR2aWNlCisJICogY29uZmxp Y3RzLgorCSAqLworCWlmIChqb19kZW55X2luZGV4ZXMgIT0gTlVMTCAmJiBqb19wZXJtaXRfaW5k ZXhlcyA9PSBOVUxMKQorCQkqcGdzX21hc2tfcCA9IDA7CisKKwkvKgorCSAqIElmIHdlIHdlcmUg YWR2aXNlZCB0byByZXN0cmljdCB0aGUgam9pbiBtZXRob2QsIHRoZW4gZG8gc28uIEhvd2V2ZXIs IGlmCisJICogd2UgZ290IGNvbmZsaWN0aW5nIGpvaW4gbWV0aG9kIGFkdmljZSBvciB3ZXJlIGFs c28gYWR2aXNlZCB0byByZWplY3QKKwkgKiB0aGlzIGpvaW4gb3JkZXIgY29tcGxldGVseSwgdGhl biBpbnN0ZWFkIGRvIG5vdGhpbmcuCisJICovCisJaWYgKGpvaW5fbWFzayAhPSAwICYmICFqbV9j b25mbGljdCAmJiBqb19kZW55X2luZGV4ZXMgPT0gTlVMTCkKKwkJKnBnc19tYXNrX3AgPSAoKnBn c19tYXNrX3AgJiB+UEdTX0pPSU5fQU5ZKSB8IGpvaW5fbWFzazsKK30KKworLyoKKyAqIFRyYW5z bGF0ZSBhbiBhZHZpY2UgdGFnIGludG8gYSBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ3kgbWFzay4K KyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0aCB0YWcgdHlwZXMgdGhhdCBk b24ndCByZXByZXNlbnQgam9pbgorICogc3RyYXRlZ2llcy4gSW4gc3VjaCBjYXNlcywgd2UganVz dCByZXR1cm4gMCwgd2hpY2ggY2FuJ3QgYmUgY29uZnVzZWQgd2l0aAorICogYSB2YWxpZCBtYXNr LgorICovCitzdGF0aWMgdWludDY0CitwZ3BhX2pvaW5fc3RyYXRlZ3lfbWFza19mcm9tX2Fkdmlj ZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnKQoreworCXN3aXRjaCAodGFnKQorCXsKKwkJ Y2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQlyZXR1cm4gUEdTX0ZPUkVJR05KT0lOOwor CQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU46CisJCQlyZXR1cm4gUEdTX01FUkdFSk9J Tl9QTEFJTjsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0 dXJuIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkU7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xP T1BfUExBSU46CisJCQlyZXR1cm4gUEdTX05FU1RMT09QX1BMQUlOOworCQljYXNlIFBHUEFfVEFH X05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIFBHU19ORVNUTE9PUF9NQVRFUklB TElaRTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuIFBH U19ORVNUTE9PUF9NRU1PSVpFOworCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoKKwkJCXJldHVy biBQR1NfSEFTSEpPSU47CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisg KiBEb2VzIGEgY2VydGFpbiBpdGVtIG9mIGpvaW4gb3JkZXIgYWR2aWNlIHBlcm1pdCBhIGNlcnRh aW4gam9pbj8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfam9pbl9vcmRlcl9wZXJtaXRzX2pvaW4o aW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJIHBncGFfaWRlbnRpZmll ciAqcmlkcywKKwkJCQkJCQkgcGdwYV90cm92ZV9lbnRyeSAqZW50cnkpCit7CisJYm9vbAkJbG9v cCA9IHRydWU7CisJYm9vbAkJc3VibGlzdCA9IGZhbHNlOworCWludAkJCWxlbmd0aDsKKwlpbnQJ CQlvdXRlcl9sZW5ndGg7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFy Z2V0OworCXBncGFfYWR2aWNlX3RhcmdldCAqcHJlZml4X3RhcmdldDsKKworCS8qIFdlIGRlZmlu aXRlbHkgaGF2ZSBhdCBsZWFzdCBhIHBhcnRpYWwgbWF0Y2ggZm9yIHRoaXMgdHJvdmUgZW50cnku ICovCisJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKworCS8qCisJICog RmluZCB0aGUgaW5uZXJtb3N0IHN1Ymxpc3QgdGhhdCBjb250YWlucyBhbGwga2V5czsgaWYgbm8g c3VibGlzdCBkb2VzLAorCSAqIHRoZW4gY29udGludWUgcHJvY2Vzc2luZyB3aXRoIHRoZSB0b3Bs ZXZlbCBsaXN0LgorCSAqCisJICogRm9yIGV4YW1wbGUsIGlmIHRoZSBhZHZpY2Ugc2F5cyBKT0lO X09SREVSKHQxIHQyICh0MyB0NCB0NSkpLCB0aGVuIHdlCisJICogc2hvdWxkIGV2YWx1YXRlIGpv aW5zIHRoYXQgb25seSBpbnZvbHZlIHQzLCB0NCwgYW5kL29yIHQ1IGFnYWluc3QgdGhlCisJICog KHQzIHQ0IHQ1KSBzdWJsaXN0LCBhbmQgb3RoZXJzIGFnYWluc3QgdGhlIGZ1bGwgbGlzdC4KKwkg KgorCSAqIE5vdGUgdGhhdCAoMSkgb3V0ZXJtb3N0IHN1Ymxpc3QgaXMgYWx3YXlzIG9yZGVyZWQg YW5kICgyKSB3aGVuZXZlciB3ZQorCSAqIHpvb20gaW50byBhbiB1bm9yZGVyZWQgc3VibGlzdCwg d2UgaW5zdGFudGx5IGFjY2VwdCB0aGUgcHJvcG9zZWQgam9pbi4KKwkgKiBJZiB0aGUgYWR2aWNl IHNheXMgSk9JTl9PUkRFUih0MSB0MiB7dDMgdDQgdDV9KSwgYW55IGFwcHJvYWNoIHRvCisJICog am9pbmluZyB0MywgdDQsIGFuZC9vciB0NSBpcyBhY2NlcHRhYmxlLgorCSAqLworCXdoaWxlIChs b29wKQorCXsKKwkJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJFRF9M SVNUKTsKKworCQlsb29wID0gZmFsc2U7CisJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3Rhcmdl dCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlwZ3BhX2l0bV90eXBl IGl0bTsKKworCQkJaWYgKGNoaWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJ RklFUikKKwkJCQljb250aW51ZTsKKworCQkJaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90 YXJnZXQob3V0ZXJfY291bnQgKyBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJCXJpZHMsIGNoaWxk X3RhcmdldCk7CisJCQlpZiAoaXRtID09IFBHUEFfSVRNX0VRVUFMIHx8IGl0bSA9PSBQR1BBX0lU TV9LRVlTX0FSRV9TVUJTRVQpCisJCQl7CisJCQkJaWYgKGNoaWxkX3RhcmdldC0+dHR5cGUgPT0g UEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKQorCQkJCXsKKwkJCQkJdGFyZ2V0ID0gY2hpbGRfdGFy Z2V0OworCQkJCQlzdWJsaXN0ID0gdHJ1ZTsKKwkJCQkJbG9vcCA9IHRydWU7CisJCQkJCWJyZWFr OworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlBc3NlcnQoY2hpbGRfdGFyZ2V0LT50dHlw ZSA9PSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVCk7CisJCQkJCXJldHVybiB0cnVlOworCQkJ CX0KKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogVHJ5IHRvIGZpbmQgYSBwcmVmaXggb2YgdGhl IHNlbGVjdGVkIGpvaW4gb3JkZXIgbGlzdCB0aGF0IGlzIGV4YWN0bHkKKwkgKiBlcXVhbCB0byB0 aGUgb3V0ZXIgc2lkZSBvZiB0aGUgcHJvcG9zZWQgam9pbi4KKwkgKi8KKwlsZW5ndGggPSBsaXN0 X2xlbmd0aCh0YXJnZXQtPmNoaWxkcmVuKTsKKwlwcmVmaXhfdGFyZ2V0ID0gcGFsbG9jMF9vYmpl Y3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwlwcmVmaXhfdGFyZ2V0LT50dHlwZSA9IFBHUEFfVEFS R0VUX09SREVSRURfTElTVDsKKwlmb3IgKG91dGVyX2xlbmd0aCA9IDE7IG91dGVyX2xlbmd0aCA8 PSBsZW5ndGg7ICsrb3V0ZXJfbGVuZ3RoKQorCXsKKwkJcGdwYV9pdG1fdHlwZSBpdG07CisKKwkJ LyogQXZvaWQgbGVha2luZyBtZW1vcnkgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uICovCisJCWlm IChwcmVmaXhfdGFyZ2V0LT5jaGlsZHJlbiAhPSBOVUxMKQorCQkJbGlzdF9mcmVlKHByZWZpeF90 YXJnZXQtPmNoaWxkcmVuKTsKKwkJcHJlZml4X3RhcmdldC0+Y2hpbGRyZW4gPSBsaXN0X2NvcHlf aGVhZCh0YXJnZXQtPmNoaWxkcmVuLAorCQkJCQkJCQkJCQkJIG91dGVyX2xlbmd0aCk7CisKKwkJ LyogU2VhcmNoLCBob3BpbmcgdG8gZmluZCBhbiBleGFjdCBtYXRjaC4gKi8KKwkJaXRtID0gcGdw YV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJfY291bnQsIHJpZHMsIHByZWZpeF90YXJn ZXQpOworCQlpZiAoaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJ ICogSWYgdGhlIHByZWZpeCBvZiB0aGUgam9pbiBvcmRlciBsaXN0IHRoYXQgd2UncmUgY29uc2lk ZXJpbmcKKwkJICogaW5jbHVkZXMgc29tZSBidXQgbm90IGFsbCBvZiB0aGUgb3V0ZXIgcmVscywg d2UgY2FuIG1ha2UgdGhlIHByZWZpeAorCQkgKiBsb25nZXIgdG8gZmluZCBhbiBleGFjdCBtYXRj aC4gQnV0IHRoZSBhZHZpY2UgaGFzbid0IG1lbnRpb25lZAorCQkgKiBldmVyeXRoaW5nIHRoYXQn cyBwYXJ0IG9mIG91ciBvdXRlciByZWwgeWV0LCBidXQgaGFzIG1lbnRpb25lZAorCQkgKiB0aGlu Z3MgdGhhdCBhcmUgbm90LCB0aGVuIHRoaXMgam9pbiBkb2Vzbid0IG1hdGNoIHRoZSBqb2luIG9y ZGVyCisJCSAqIGxpc3QuCisJCSAqLworCQlpZiAoaXRtICE9IFBHUEFfSVRNX1RBUkdFVFNfQVJF X1NVQlNFVCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBwcmV2aW91 cyBsb29wZWQgc3RvcHBlZCBiZWZvcmUgdGhlIHByZWZpeF90YXJnZXQgaW5jbHVkZWQgdGhlCisJ ICogZW50aXJlIGpvaW4gb3JkZXIgbGlzdCwgdGhlbiB0aGUgbmV4dCBtZW1iZXIgb2YgdGhlIGpv aW4gb3JkZXIgbGlzdAorCSAqIG11c3QgZXhhY3RseSBtYXRjaCB0aGUgaW5uZXIgc2lkZSBvZiB0 aGUgam9pbi4KKwkgKgorCSAqIEV4YW1wbGU6IEdpdmVuIEpPSU5fT1JERVIodDEgdDIgKHQzIHQ0 IHQ1KSksIGlmIHRoZSBvdXRlciBzaWRlIG9mIHRoZQorCSAqIGN1cnJlbnQgam9pbiBpbmNsdWRl cyBvbmx5IHQxLCB0aGVuIHRoZSBpbm5lciBzaWRlIG11c3QgYmUgZXhhY3RseSB0MjsKKwkgKiBp ZiB0aGUgb3V0ZXIgc2lkZSBpbmNsdWRlcyBib3RoIHQxIGFuZCB0MiwgdGhlbiB0aGUgaW5uZXIg c2lkZSBtdXN0CisJICogaW5jbHVkZSBleGFjdGx5IHQzLCB0NCwgYW5kIHQ1LgorCSAqLworCWlm IChvdXRlcl9sZW5ndGggPCBsZW5ndGgpCisJeworCQlwZ3BhX2FkdmljZV90YXJnZXQgKmlubmVy X3RhcmdldDsKKwkJcGdwYV9pdG1fdHlwZSBpdG07CisKKwkJaW5uZXJfdGFyZ2V0ID0gbGlzdF9u dGgodGFyZ2V0LT5jaGlsZHJlbiwgb3V0ZXJfbGVuZ3RoKTsKKworCQlpdG0gPSBwZ3BhX2lkZW50 aWZpZXJzX21hdGNoX3RhcmdldChpbm5lcl9jb3VudCwgcmlkcyArIG91dGVyX2NvdW50LAorCQkJ CQkJCQkJCQlpbm5lcl90YXJnZXQpOworCisJCS8qCisJCSAqIEJlZm9yZSByZXR1cm5pbmcsIGNv bnNpZGVyIHdoZXRoZXIgd2UgbmVlZCB0byBtYXJrIHRoaXMgZW50cnkgYXMKKwkJICogZnVsbHkg bWF0Y2hlZC4gSWYgd2UgZm91bmQgZXZlcnkgaXRlbSBidXQgb25lIG9uIHRoZSBsZWZ0aGFuZCBz aWRlCisJCSAqIG9mIHRoZSBqb2luIGFuZCB0aGUgbGFzdCBpdGVtIG9uIHRoZSByaWdodGhhbmQg c2lkZSBvZiB0aGUgam9pbiwKKwkJICogdGhlbiB0aGUgYW5zd2VyIGlzIHllcy4KKwkJICovCisJ CWlmIChvdXRlcl9sZW5ndGggKyAxID09IGxlbmd0aCAmJiBpdG0gPT0gUEdQQV9JVE1fRVFVQUwp CisJCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCisJCXJldHVybiAoaXRt ID09IFBHUEFfSVRNX0VRVUFMKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGdldCBoZXJlLCB0aGVu IHRoZSBvdXRlciBzaWRlIG9mIHRoZSBqb2luIGluY2x1ZGVzIHRoZSBlbnRpcmV0eQorCSAqIG9m IHRoZSBqb2luIG9yZGVyIGxpc3QuIEluIHRoaXMgY2FzZSwgd2UgYmVoYXZlIGRpZmZlcmVudGx5 IGRlcGVuZGluZworCSAqIG9uIHdoZXRoZXIgd2UncmUgbG9va2luZyBhdCB0aGUgdG9wLWxldmVs IGpvaW4gb3JkZXIgbGlzdCBvciBzdWJsaXN0LgorCSAqIEF0IHRoZSB0b3AtbGV2ZWwsIHdlIHRy ZWF0IHRoZSBzcGVjaWZpZWQgbGlzdCBhcyBtYW5kYXRpbmcgdGhhdCB0aGUKKwkgKiBhY3R1YWwg am9pbiBvcmRlciBoYXMgdGhlIGdpdmVuIGxpc3QgYXMgYSBwcmVmaXgsIGJ1dCBhIHN1Ymxpc3QK KwkgKiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaC4KKwkgKgorCSAqIEV4bWFwbGU6IEdpdmVuIEpP SU5fT1JERVIodDEgdDIgKHQzIHQ0IHQ1KSksIHdlIG11c3Qgc3RhcnQgYnkgam9pbmluZworCSAq IGFsbCBmaXZlIG9mIHRob3NlIHJlbGF0aW9ucyBhbmQgaW4gdGhhdCBzZXF1ZW5jZSwgYnV0IG9u Y2UgdGhhdCBpcworCSAqIGRvbmUsIGl0J3MgT0sgdG8gam9pbiBhbnkgb3RoZXIgcmVscyB0aGF0 IGFyZSBwYXJ0IG9mIHRoZSBqb2luIHByb2JsZW0uCisJICogVGhpcyBhbGxvd3MgYSB1c2VyIHRv IHNwZWNpZnkgdGhlIGRyaXZpbmcgdGFibGUgYW5kIHBlcmhhcHMgdGhlIGZpcnN0CisJICogZmV3 IHRoaW5ncyB0byB3aGljaCBpdCBzaG91bGQgYmUgam9pbmVkIHdoaWxlIGxlYXZpbmcgdGhlIHJl c3Qgb2YgdGhlCisJICogam9pbiBvcmRlciB1cCB0aGUgb3B0aW1pemVyLiBCdXQgaXQgc2VlbXMg bGlrZSBpdCB3b3VsZCBiZSBzdXJwcmlzaW5nLAorCSAqIGdpdmVuIHRoYXQgc3BlY2lmaWNhdGlv biwgaWYgdGhlIHVzZXIgY291bGQgYWRkIHQ2IHRvIHRoZSAodDMgdDQgdDUpCisJICogc3ViLWpv aW4sIHNvIHdlIGRvbid0IGFsbG93IHRoYXQuIElmIHdlIGRpZCB3YW50IHRvIGFsbG93IGl0LCB0 aGUgbG9naWMKKwkgKiBlYXJsaWVyIGluIHRoaXMgZnVuY3Rpb24gd291bGQgcmVxdWlyZSBzdWJz dGFudGlhbCBhZGp1c3RtZW50OiB3ZSBjb3VsZAorCSAqIGFsbG93IHRoZSB0My10NC10NS10NiBq b2luIHRvIGJlIGJ1aWx0IGhlcmUsIGJ1dCB0aGUgbmV4dCBzdGVwIG9mCisJICogam9pbmluZyB0 MS10MiB0byB0aGUgcmVzdWx0IHdvdWxkIHN0aWxsIGJlIHJlamVjdGVkLgorCSAqLworCXJldHVy biAhc3VibGlzdDsKK30KKworLyoKKyAqIERvZXMgYSBjZXJ0YWluIGl0ZW0gb2Ygam9pbiBtZXRo b2QgYWR2aWNlIHBlcm1pdCBhIGNlcnRhaW4gam9pbj8KKyAqCisgKiBBZHZpY2Ugc3VjaCBhcyBI QVNIX0pPSU4oKHggeSkpIG1lYW5zIHRoYXQgdGhlcmUgc2hvdWxkIGJlIGEgaGFzaCBqb2luIHdp dGgKKyAqIGV4YWN0bHkgeCBhbmQgeSBvbiB0aGUgaW5uZXIgc2lkZS4gT2J2aW91c2x5LCB0aGlz IG1lYW5zIHRoYXQgaWYgd2UgYXJlCisgKiBjb25zaWRlcmluZyBhIGpvaW4gd2l0aCBleGFjdGx5 IHggYW5kIHkgb24gdGhlIGlubmVyIHNpZGUsIHdlIHNob3VsZCBlbmZvcmNlCisgKiB0aGUgdXNl IG9mIGEgaGFzaCBqb2luLiBIb3dldmVyLCBpdCBhbHNvIG1lYW5zIHRoYXQgd2UgbXVzdCByZWpl Y3Qgc29tZQorICogaW5jb21wYXRpYmxlIGpvaW4gb3JkZXJzIGVudGlyZWx5LiAgRm9yIGV4YW1w bGUsIGEgam9pbiB3aXRoIGV4YWN0bHkgeAorICogYW5kIHkgb24gdGhlIG91dGVyIHNpZGUgc2hv dWxkbid0IGJlIGFsbG93ZWQsIGJlY2F1c2Ugc3VjaCBwYXRocyBtaWdodCB3aW4KKyAqIG92ZXIg dGhlIGFkdmljZS1kcml2ZW4gcGF0aCBvbiBjb3N0LgorICoKKyAqIFRvIGFjY29tbW9kYXRlIHRo ZXNlIHJlcXVpcmVtZW50cywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGpvaW4K KyAqIHNob3VsZCBiZSBhbGxvd2VkIGFuZCBmYWxzZSBpZiBpdCBzaG91bGQgbm90LiBGdXJ0aGVy bW9yZSwgKnJlc3RyaWN0X21ldGhvZAorICogaXMgc2V0IHRvIHRydWUgaWYgdGhlIGpvaW4gbWV0 aG9kIHNob3VsZCBiZSBlbmZvcmNlZCBhbmQgZmFsc2UgaWYgbm90LgorICovCitzdGF0aWMgYm9v bAorcGdwYV9qb2luX21ldGhvZF9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5u ZXJfY291bnQsCisJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJICBwZ3Bh X3Ryb3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJCQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCkKK3sK KwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCA9IGVudHJ5LT50YXJnZXQ7CisJcGdwYV9pdG1f dHlwZSBpbm5lcl9pdG07CisJcGdwYV9pdG1fdHlwZSBvdXRlcl9pdG07CisJcGdwYV9pdG1fdHlw ZSBqb2luX2l0bTsKKworCS8qIFdlIGRlZmluaXRlbHkgaGF2ZSBhdCBsZWFzdCBhIHBhcnRpYWwg bWF0Y2ggZm9yIHRoaXMgdHJvdmUgZW50cnkuICovCisJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVf TUFUQ0hfUEFSVElBTDsKKworCSpyZXN0cmljdF9tZXRob2QgPSBmYWxzZTsKKworCS8qCisJICog SWYgb3VyIGlubmVyIHJlbCBtZW50aW9ucyBleGFjdGx5IHRoZSBzYW1lIHJlbGF0aW9ucyBhcyB0 aGUgYWR2aWNlCisJICogdGFyZ2V0LCBhbGxvdyB0aGUgam9pbiBhbmQgZW5mb3JjZSB0aGUgam9p biBtZXRob2QgcmVzdHJpY3Rpb24uCisJICoKKwkgKiBJZiBvdXIgaW5uZXIgcmVsIG1lbnRpb25z IGEgc3VwZXJzZXQgb2YgdGhlIHRhcmdldCByZWxhdGlvbnMsIGFsbG93IHRoZQorCSAqIGpvaW4u IFRoZSBqb2luIHdlIGNhcmUgYWJvdXQgaGFzIGFscmVhZHkgdGFrZW4gcGxhY2UsIGFuZCB0aGlz IGFkdmljZQorCSAqIGltcG9zZXMgbm8gZnVydGhlciByZXN0cmljdGlvbnMuCisJICovCisJaW5u ZXJfaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQoaW5uZXJfY291bnQsCisJCQkJ CQkJCQkJCSAgcmlkcyArIG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHRhcmdldCk7CisJaWYg KGlubmVyX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwl7CisJCWVudHJ5LT5mbGFncyB8PSBQR1BB X1RFX01BVENIX0ZVTEw7CisJCSpyZXN0cmljdF9tZXRob2QgPSB0cnVlOworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisJZWxzZSBpZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNF VCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIElmIG91ciBvdXRlciByZWwgbWVudGlvbnMg YSBzdXBzZXJzZXQgb2YgdGhlIHJlbGF0aW9ucyBpbiB0aGUgYWR2aWNlCisJICogdGFyZ2V0LCBu byByZXN0cmljdGlvbnMgYXBwbHkuIFRoZSBqb2luIHdlIGNhcmUgaGFzIGFscmVhZHkgdGFrZW4K KwkgKiBwbGFjZSwgYW5kIHRoaXMgYWR2aWNlIGltcG9zZXMgbm8gZnVydGhlciByZXN0cmljdGlv bnMuCisJICoKKwkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgb3VyIG91dGVyIHJlbCBtZW50aW9u cyBleGFjdGx5IHRoZSByZWxhdGlvbnMKKwkgKiBtZW50aW9uZWQgaW4gdGhlIGFkdmljZSB0YXJn ZXQsIHRoZSBwbGFubmVyIGlzIHRyeWluZyB0byByZXZlcnNlIHRoZQorCSAqIHNpZGVzIG9mIHRo ZSBqb2luIGFzIGNvbXBhcmVkIHdpdGggb3VyIGRlc2lyZWQgb3V0Y29tZS4gUmVqZWN0IHRoYXQu CisJICovCisJb3V0ZXJfaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJf Y291bnQsCisJCQkJCQkJCQkJCSAgcmlkcywgdGFyZ2V0KTsKKwlpZiAob3V0ZXJfaXRtID09IFBH UEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJcmV0dXJuIHRydWU7CisJZWxzZSBpZiAob3V0 ZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElm IHRoZSBhZHZpY2UgdGFyZ2V0IG1lbnRpb25zIG9ubHkgYSBzaW5nbGUgcmVsYXRpb24sIHRoZSB0 ZXN0IGJlbG93CisJICogY2Fubm90IGV2ZXIgcGFzcywgc28gc2F2ZSBzb21lIHdvcmsgYnkgZXhp dGluZyBub3cuCisJICovCisJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJ RklFUikKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBJZiBldmVyeXRoaW5nIGluIHRoZSBq b2lucmVsIGlzIGFwcGVhcnMgaW4gdGhlIGFkdmljZSB0YXJnZXQsIHdlJ3JlCisJICogYmVsb3cg dGhlIGxldmVsIG9mIHRoZSBqb2luIHdlIHdhbnQgdG8gY29udHJvbC4KKwkgKgorCSAqIEZvciBl eGFtcGxlLCBIQVNIX0pPSU4oKHggeSkpIGRvZXNuJ3QgcmVzdHJpY3QgaG93IHggYW5kIHkgY2Fu IGJlCisJICogam9pbmVkLgorCSAqCisJICogVGhpcyBsb29rdXAgc2hvdWxkbid0IHJldHVybiBQ R1BBX0lUTV9ESVNKT0lOVCwgYmVjYXVzZSBhbnkgc3VjaCBhZHZpY2UKKwkgKiBzaG91bGQgbm90 IGhhdmUgYmVlbiByZXR1cm5lZCBmcm9tIHRoZSB0cm92ZSBpbiB0aGUgZmlyc3QgcGxhY2UuCisJ ICovCisJam9pbl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3Vu dCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgcmlkcywgdGFyZ2V0KTsKKwlBc3NlcnQoam9p bl9pdG0gIT0gUEdQQV9JVE1fRElTSk9JTlQpOworCWlmIChqb2luX2l0bSA9PSBQR1BBX0lUTV9L RVlTX0FSRV9TVUJTRVQgfHwKKwkJam9pbl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCXJldHVy biB0cnVlOworCisJLyoKKwkgKiBXZSd2ZSBhbHJlYWR5IHBlcm1pdHRlZCBhbGwgYWxsb3dhYmxl IGNhc2VzLCBzbyByZWplY3QgdGhpcy4KKwkgKgorCSAqIElmIHdlIHJlYWNoIHRoaXMgcG9pbnQs IHRoZW4gdGhlIGFkdmljZSBvdmVybGFwcyB3aXRoIHRoaXMgam9pbiBidXQKKwkgKiBpc24ndCBl bnRpcmVseSBjb250YWluZWQgd2l0aGluIGVpdGhlciBzaWRlLCBhbmQgdGhlcmUncyBhbHNvIGF0 IGxlYXN0CisJICogb25lIHJlbGF0aW9uIHByZXNlbnQgaW4gdGhlIGpvaW4gdGhhdCBpc24ndCBt ZW50aW9uZWQgYnkgdGhlIGFkdmljZS4KKwkgKgorCSAqIEZvciBpbnN0YW5jZSwgaW4gdGhlIEhB U0hfSk9JTigoeCB5KSkgZXhhbXBsZSwgd2Ugd291bGQgcmVhY2ggaGVyZSBpZiB4CisJICogd2Vy ZSBvbiBvbmUgc2lkZSBvZiB0aGUgam9pbiwgeSBvbiB0aGUgb3RoZXIsIGFuZCBhdCBsZWFzdCBv bmUgb2YgdGhlCisJICogdHdvIHNpZGVzIGFsc28gaW5jbHVkZWQgc29tZSBvdGhlciByZWxhdGlv biwgc2F5IHQuIEluIHRoYXQgY2FzZSwKKwkgKiBhY2NlcHRpbmcgdGhpcyBqb2luIHdvdWxkIGFs bG93IHRoZSAoeCB5IHQpIGpvaW5yZWwgdG8gY29udGFpbgorCSAqIG5vbi1kaXNhYmxlZCBwYXRo cyB0aGF0IGRvIG5vdCBwdXQgKHggeSkgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBoYXNoCisJICog am9pbjsgd2UgY291bGQgaW5zdGVhZCBlbmQgdXAgd2l0aCBzb21ldGhpbmcgbGlrZSAoeCBKT0lO IHQpIEpPSU4geS4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIGFkdmlj ZSBjb25jZXJuaW5nIGFuIG9wYXF1ZSBqb2luIHBlcm1pdCBhIGNlcnRhaW4gam9pbj8KKyAqCisg KiBCeSBhbiBvcGFxdWUgam9pbiwgd2UgbWVhbiBvbmUgd2hlcmUgdGhlIGV4YWN0IG1lY2hhbmlz bSBieSB3aGljaCB0aGUKKyAqIGpvaW4gaXMgcGVyZm9ybWVkIGlzIG5vdCB2aXNpYmxlIHRvIFBv c3RncmVTUUwuIEN1cnJlbnRseSB0aGlzIGlzIHRoZQorICogY2FzZSBvbmx5IGZvciBmb3JlaWdu IGpvaW5zOiBGT1JFSUdOX0pPSU4oKHggeSB6KSkgbWVhbnMgdGhhdCB4LCB5LCBhbmQKKyAqIHog YXJlIGpvaW5lZCBvbiB0aGUgcmVtb3RlIHNpZGUsIGJ1dCB3ZSBrbm93IG5vdGhpbmcgYWJvdXQg dGhlIGpvaW4gb3JkZXIKKyAqIG9yIGpvaW4gbWV0aG9kcyB1c2VkIG92ZXIgdGhlcmUuCisgKi8K K3N0YXRpYyBib29sCitwZ3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291 bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJ CQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3Rf bWV0aG9kKQoreworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRhcmdldDsK KwlwZ3BhX2l0bV90eXBlIGpvaW5faXRtOworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxl YXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+Zmxh Z3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJKnJlc3RyaWN0X21ldGhvZCA9IGZhbHNl OworCisJam9pbl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3Vu dCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgcmlkcywgdGFyZ2V0KTsKKwlpZiAoam9pbl9p dG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJeworCQkvKgorCQkgKiBXZSBoYXZlIGFuIGV4YWN0IG1h dGNoLCBhbmQgc2hvdWxkIHRoZXJlZm9yZSBhbGxvdyB0aGUgam9pbiBhbmQKKwkJICogZW5mb3Jj ZSB0aGUgdXNlIG9mIHRoZSByZWxldmFudCBvcGFxdWUgam9pbiBtZXRob2QuCisJCSAqLworCQll bnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQkqcmVzdHJpY3RfbWV0aG9kID0g dHJ1ZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKGpvaW5faXRtID09IFBHUEFfSVRNX0tF WVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJT RVQpCisJeworCQkvKgorCQkgKiBJZiBqb2luX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9T VUJTRVQsIHRoZW4gdGhlIGpvaW4gd2UgY2FyZQorCQkgKiBhYm91dCBoYXMgYWxyZWFkeSB0YWtl biBwbGFjZSBhbmQgbm8gZnVydGhlciByZXN0cmljdGlvbnMgYXBwbHkuCisJCSAqCisJCSAqIElm IGpvaW5faXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCwgd2UncmUgc3RpbGwgYnVpbGRp bmcgdXAgdG8KKwkJICogdGhlIGpvaW4gd2UgY2FyZSBhYm91dCBhbmQgaGF2ZSBub3QgaW50cm9k dWNlZCBhbnkgZXh0cmFuZW91cworCQkgKiByZWxhdGlvbnMgbm90IG5hbWVkIGluIHRoZSBhZHZp Y2UuIE5vdGUgdGhhdCBGb3JlaWduU2NhbiBwYXRocyBmb3IKKwkJICogam9pbnMgYXJlIGJ1aWx0 IHVwIGZyb20gRm9yZWlnblNjYW4gcGF0aHMgZnJvbSB1bmRlcmx5aW5nIGpvaW5zIGFuZAorCQkg KiBzY2Fucywgc28gd2UgbXVzdCBub3QgZGlzYWJsZSB0aGlzIGpvaW4gd2hlbiBjb25zaWRlcmlu ZyBhIHN1YnNldAorCQkgKiBvZiB0aGUgcmVsYXRpb25zIHdlIHVsdGltYXRlbHkgd2FudC4KKwkJ ICovCisJCXJldHVybiB0cnVlOworCX0KKworCS8qCisJICogVGhlIGFkdmljZSBvdmVybGFwcyB0 aGUgam9pbiwgYnV0IGF0IGxlYXN0IG9uZSByZWxhdGlvbiBpcyBwcmVzZW50IGluCisJICogdGhl IGpvaW4gdGhhdCBpc24ndCBtZW50aW9uZWQgYnkgdGhlIGFkdmljZS4gV2Ugd2FudCB0byBkaXNh YmxlIHN1Y2gKKwkgKiBwYXRocyBzbyB0aGF0IHdlIGFjdHVhbGx5IHB1c2ggZG93biB0aGUgam9p biBhcyBpbnRlbmRlZC4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBBcHBseSBz Y2FuIGFkdmljZSB0byBhIFJlbE9wdEluZm8uCisgKgorICogWFhYLiBGb3IgYml0bWFwIGhlYXAg c2NhbnMsIHdlJ3JlIGp1c3QgaWdub3JpbmcgdGhlIGluZGV4IGluZm9ybWF0aW9uIGZyb20KKyAq IHRoZSBhZHZpY2UuIFRoYXQncyBub3QgY29vbC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxh bm5lcl9hcHBseV9zY2FuX2FkdmljZShSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJICAgcGdwYV90 cm92ZV9lbnRyeSAqc2Nhbl9lbnRyaWVzLAorCQkJCQkJCSAgIEJpdG1hcHNldCAqc2Nhbl9pbmRl eGVzLAorCQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnJlbF9lbnRyaWVzLAorCQkJCQkJCSAg IEJpdG1hcHNldCAqcmVsX2luZGV4ZXMpCit7CisJYm9vbAkJZ2F0aGVyX2NvbmZsaWN0ID0gZmFs c2U7CisJQml0bWFwc2V0ICAqZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBOVUxMOworCUJpdG1hcHNl dCAgKmdhdGhlcl9mdWxsX21hdGNoID0gTlVMTDsKKwlpbnQJCQlpID0gLTE7CisJcGdwYV90cm92 ZV9lbnRyeSAqc2Nhbl9lbnRyeSA9IE5VTEw7CisJaW50CQkJZmxhZ3M7CisJYm9vbAkJc2Nhbl90 eXBlX2NvbmZsaWN0ID0gZmFsc2U7CisJQml0bWFwc2V0ICAqc2Nhbl90eXBlX2luZGV4ZXMgPSBO VUxMOworCUJpdG1hcHNldCAgKnNjYW5fdHlwZV9yZWxfaW5kZXhlcyA9IE5VTEw7CisJdWludDY0 CQlnYXRoZXJfbWFzayA9IDA7CisJdWludDY0CQlzY2FuX3R5cGUgPSAwOworCisJLyogU2NydXRp bml6ZSBhdmFpbGFibGUgc2NhbiBhZHZpY2UuICovCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVt YmVyKHNjYW5faW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICpteV9l bnRyeSA9ICZzY2FuX2VudHJpZXNbaV07CisJCXVpbnQ2NAkJbXlfc2Nhbl90eXBlID0gMDsKKwor CQkvKiBUcmFuc2xhdGUgb3VyIGFkdmljZSB0YWdzIHRvIGEgc2NhbiBzdHJhdGVneSBhZHZpY2Ug dmFsdWUuICovCisJCWlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0JJVE1BUF9IRUFQX1ND QU4pCisJCQlteV9zY2FuX3R5cGUgPSBQR1NfQklUTUFQU0NBTjsKKwkJZWxzZSBpZiAobXlfZW50 cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU4pCisJCQlteV9zY2FuX3R5cGUgPSBQ R1NfSU5ERVhPTkxZU0NBTiB8IFBHU19DT05TSURFUl9JTkRFWE9OTFk7CisJCWVsc2UgaWYgKG15 X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBH U19JTkRFWFNDQU47CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VRX1ND QU4pCisJCQlteV9zY2FuX3R5cGUgPSBQR1NfU0VRU0NBTjsKKwkJZWxzZSBpZiAobXlfZW50cnkt PnRhZyA9PSBQR1BBX1RBR19USURfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19USURTQ0FO OworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgdW5kZXJzdGFuZGFibGUgc2NhbiBhZHZpY2UsIGhh bmcgb24gdG8gdGhlIGVudHJ5LCB0aGUKKwkJICogaW5mZXJyZWQgc2NhbiB0eXBlIHR5cGUsIGFu ZCB0aGUgaW5kZXggYXQgd2hpY2ggd2UgZm91bmQgaXQuCisJCSAqCisJCSAqIEFsc28gbWFrZSBh IG5vdGUgaWYgd2Ugc2VlIGNvbmZsaWN0aW5nIHNjYW4gdHlwZSBhZHZpY2UuIE5vdGUgdGhhdAor CQkgKiB3ZSByZWdhcmQgdHdvIGluZGV4IHNwZWNpZmljYXRpb25zIGFzIGNvbmZsaWN0aW5nIHVu bGVzcyB0aGV5IG1hdGNoCisJCSAqIGV4YWN0bHkuIEluIHRoZW9yeSwgcGVyaGFwcyB3ZSBjb3Vs ZCByZWdhcmQgSU5ERVhfU0NBTihhIGMpIGFuZAorCQkgKiBJTkRFWF9TQ0FOKGEgYi5jKSBhcyBu b24tY29uZmxpY3RpbmcgaWYgaXQgaGFwcGVucyB0aGF0IHRoZSBvbmx5CisJCSAqIGluZGV4IG5h bWVkIGMgaXMgaW4gc2NoZW1hIGIsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gd29ydGggdGhlIGNvZGUu CisJCSAqLworCQlpZiAobXlfc2Nhbl90eXBlICE9IDApCisJCXsKKwkJCWlmIChzY2FuX3R5cGUg IT0gMCAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nhbl90eXBlKQorCQkJCXNjYW5fdHlwZV9jb25mbGlj dCA9IHRydWU7CisJCQlpZiAoIXNjYW5fdHlwZV9jb25mbGljdCAmJiBzY2FuX2VudHJ5ICE9IE5V TEwgJiYKKwkJCQlteV9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0ICE9IE5VTEwgJiYKKwkJCQlzY2Fu X2VudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0gTlVMTCAmJgorCQkJCSFwZ3BhX2luZGV4X3Rhcmdl dHNfZXF1YWwoc2Nhbl9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0LAorCQkJCQkJCQkJCSAgbXlfZW50 cnktPnRhcmdldC0+aXRhcmdldCkpCisJCQkJc2Nhbl90eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJ CXNjYW5fZW50cnkgPSBteV9lbnRyeTsKKwkJCXNjYW5fdHlwZSA9IG15X3NjYW5fdHlwZTsKKwkJ CXNjYW5fdHlwZV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoc2Nhbl90eXBlX2luZGV4ZXMsIGkp OworCQl9CisJfQorCisJLyogU2NydXRpbml6ZSBhdmFpbGFibGUgZ2F0aGVyLXJlbGF0ZWQgYW5k IHBhcnRpdGlvbndpc2UgYWR2aWNlLiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4 dF9tZW1iZXIocmVsX2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAq bXlfZW50cnkgPSAmcmVsX2VudHJpZXNbaV07CisJCXVpbnQ2NAkJbXlfZ2F0aGVyX21hc2sgPSAw OworCQlib29sCQlqdXN0X29uZV9yZWw7CisKKwkJanVzdF9vbmVfcmVsID0gbXlfZW50cnktPnRh cmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUgorCQkJfHwgbGlzdF9sZW5ndGgo bXlfZW50cnktPnRhcmdldC0+Y2hpbGRyZW4pID09IDE7CisKKwkJLyoKKwkJICogUEFSVElUSU9O V0lTRSBiZWhhdmVzIGxpa2UgYSBzY2FuIHR5cGUsIGV4Y2VwdCB0aGF0IGlmIHRoZXJlJ3MgbW9y ZQorCQkgKiB0aGFuIG9uZSByZWxhdGlvbiB0YXJnZXRlZCwgaXQgaGFzIG5vIGVmZmVjdCBhdCB0 aGlzIGxldmVsLgorCQkgKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfUEFSVElU SU9OV0lTRSkKKwkJeworCQkJaWYgKGp1c3Rfb25lX3JlbCkKKwkJCXsKKwkJCQljb25zdCB1aW50 NjQgbXlfc2Nhbl90eXBlID0gUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQ7CisKKwkJCQlp ZiAoc2Nhbl90eXBlICE9IDAgJiYgc2Nhbl90eXBlICE9IG15X3NjYW5fdHlwZSkKKwkJCQkJc2Nh bl90eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCQlzY2FuX2VudHJ5ID0gbXlfZW50cnk7CisJCQkJ c2Nhbl90eXBlID0gbXlfc2Nhbl90eXBlOworCQkJCXNjYW5fdHlwZV9yZWxfaW5kZXhlcyA9CisJ CQkJCWJtc19hZGRfbWVtYmVyKHNjYW5fdHlwZV9yZWxfaW5kZXhlcywgaSk7CisJCQl9CisJCQlj b250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIEdBVEhFUiBhbmQgR0FUSEVSX01FUkdFIGFwcGxp ZWQgdG8gYSBzaW5nbGUgcmVsIG1lYW4gdGhhdCB3ZSBzaG91bGQKKwkJICogdXNlIHRoZSBjb3Jy ZXNwb25kaW5ncyBzdHJhdGVneSBoZXJlLCB3aGlsZSBhcHBseWluZyBlaXRoZXIgdG8gbW9yZQor CQkgKiB0aGFuIG9uZSByZWwgbWVhbnMgd2Ugc2hvdWxkIG5vdCB1c2UgdGhvc2Ugc3RyYXRlZ2ll cyBoZXJlLCBidXQKKwkJICogcmF0aGVyIGF0IHRoZSBsZXZlbCBvZiB0aGUgam9pbnJlbCB0aGF0 IGNvcnJlc3BvbmRzIHRvIHdoYXQgd2FzCisJCSAqIHNwZWNpZmllZC4gTk9fR0FUSEVSIGNhbiBv bmx5IGJlIGFwcGxpZWQgdG8gc2luZ2xlIHJlbHMuCisJCSAqCisJCSAqIE5vdGUgdGhhdCBzZXR0 aW5nIFBHU19DT05TSURFUl9OT05QQVJUSUFMIGluIG15X2dhdGhlcl9tYXNrIGlzCisJCSAqIGVx dWl2YWxlbnQgdG8gYWxsb3dpbmcgdGhlIG5vbi11c2Ugb2YgZWl0aGVyIGZvcm0gb2YgR2F0aGVy IGhlcmUuCisJCSAqLworCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVIgfAor CQkJbXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVSR0UpCisJCXsKKwkJCWlmICgh anVzdF9vbmVfcmVsKQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJ QUw7CisJCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUikKKwkJCQlt eV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVI7CisJCQllbHNlCisJCQkJbXlfZ2F0aGVyX21hc2sg PSBQR1NfR0FUSEVSX01FUkdFOworCQl9CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQ QV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlBc3NlcnQoanVzdF9vbmVfcmVsKTsKKwkJCW15X2dh dGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCX0KKworCQkvKgorCQkgKiBJ ZiB3ZSBzZXQgbXlfZ2F0aGVyX21hc2sgdXAgYWJvdmUsIHRoZW4gd2UgKDEpIG1ha2UgYSBub3Rl IGlmIHRoZQorCQkgKiBhZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHRoZSBtYXNrIHZh bHVlLCBhbmQgKDMpIHJlbWVtYmVyCisJCSAqIHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxsIG9yIHBh cnRpYWwgbWF0Y2guCisJCSAqLworCQlpZiAobXlfZ2F0aGVyX21hc2sgIT0gMCkKKwkJeworCQkJ aWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgZ2F0aGVyX21hc2sgIT0gbXlfZ2F0aGVyX21hc2spCisJ CQkJZ2F0aGVyX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWdhdGhlcl9tYXNrID0gbXlfZ2F0aGVyX21h c2s7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJCWdhdGhlcl9mdWxsX21hdGNoID0gYm1zX2Fk ZF9tZW1iZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJCWdhdGhlcl9wYXJ0 aWFsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGkpOworCQl9 CisJfQorCisJLyogRW5mb3JjZSBjaG9pY2Ugb2YgaW5kZXguICovCisJaWYgKHNjYW5fZW50cnkg IT0gTlVMTCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0ICYmCisJCShzY2FuX2VudHJ5LT50YWcgPT0g UEdQQV9UQUdfSU5ERVhfU0NBTiB8fAorCQkgc2Nhbl9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lO REVYX09OTFlfU0NBTikpCisJeworCQlwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCA9IHNjYW5f ZW50cnktPnRhcmdldC0+aXRhcmdldDsKKwkJSW5kZXhPcHRJbmZvICptYXRjaGVkX2luZGV4ID0g TlVMTDsKKworCQlBc3NlcnQoaXRhcmdldC0+aXR5cGUgPT0gUEdQQV9JTkRFWF9OQU1FKTsKKwor CQlmb3JlYWNoX25vZGUoSW5kZXhPcHRJbmZvLCBpbmRleCwgcmVsLT5pbmRleGxpc3QpCisJCXsK KwkJCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUoaW5kZXgtPmluZGV4b2lkKTsKKwkJ CU9pZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4LT5pbmRleG9pZCk7CisJCQlj aGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUobnNwb2lkKTsKKworCQkJ aWYgKHN0cmNtcChpdGFyZ2V0LT5pbmRuYW1lLCByZWxuYW1lKSA9PSAwICYmCisJCQkJKGl0YXJn ZXQtPmluZG5hbWVzcGFjZSA9PSBOVUxMIHx8CisJCQkJIHN0cmNtcChpdGFyZ2V0LT5pbmRuYW1l c3BhY2UsIHJlbG5hbWVzcGFjZSkgPT0gMCkpCisJCQl7CisJCQkJbWF0Y2hlZF9pbmRleCA9IGlu ZGV4OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG1hdGNoZWRfaW5kZXggPT0gTlVM TCkKKwkJeworCQkJLyogRG9uJ3QgZm9yY2UgdGhlIHNjYW4gdHlwZSBpZiB0aGUgaW5kZXggZG9l c24ndCBleGlzdC4gKi8KKwkJCXNjYW5fdHlwZSA9IDA7CisKKwkJCS8qIE1hcmsgYWR2aWNlIGFz IGluYXBwbGljYWJsZS4gKi8KKwkJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHNjYW5fZW50cmllcywg c2Nhbl90eXBlX2luZGV4ZXMsCisJCQkJCQkJCSBQR1BBX1RFX0lOQVBQTElDQUJMRSk7CisJCX0K KwkJZWxzZQorCQl7CisJCQkvKiBSZXRhaW4gdGhpcyBpbmRleCBhbmQgZGlzY2FyZCB0aGUgcmVz dC4gKi8KKwkJCXJlbC0+aW5kZXhsaXN0ID0gbGlzdF9tYWtlMShtYXRjaGVkX2luZGV4KTsKKwkJ fQorCX0KKworCS8qCisJICogTWFyayBhbGwgdGhlIHNjYW4gbWV0aG9kIGVudHJpZXMgYXMgZnVs bHkgbWF0Y2hlZDsgYW5kIGlmIHRoZXkgc3BlY2lmeQorCSAqIGRpZmZlcmVudCB0aGluZ3MsIG1h cmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENI X1BBUlRJQUwgfCBQR1BBX1RFX01BVENIX0ZVTEw7CisJaWYgKHNjYW5fdHlwZV9jb25mbGljdCkK KwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhz Y2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVzLCBmbGFncyk7CisJcGdwYV90cm92ZV9zZXRf ZmxhZ3MocmVsX2VudHJpZXMsIHNjYW5fdHlwZV9yZWxfaW5kZXhlcywgZmxhZ3MpOworCisJLyoK KwkgKiBNYXJrIGV2ZXJ5IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9mIGFkdmljZSBhcyBwYXJ0aWFs bHkgbWF0Y2hlZC4gTWFyaworCSAqIHRoZSBvbmVzIHRoYXQgaW5jbHVkZWQgdGhpcyByZWxhdGlv biBhcyBhIHRhcmdldCBieSBpdHNlbGYgYXMgZnVsbHkKKwkgKiBtYXRjaGVkLiBJZiB0aGVyZSB3 YXMgYSBjb25mbGljdCwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8KKwlmbGFn cyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAoZ2F0aGVyX2NvbmZsaWN0KQorCQlmbGFn cyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHJlbF9lbnRy aWVzLCBnYXRoZXJfcGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZsYWdzIHw9IFBHUEFfVEVfTUFU Q0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50cmllcywgZ2F0aGVyX2Z1bGxf bWF0Y2gsIGZsYWdzKTsKKworCS8qIElmIHRoZXJlIGlzIGEgbm9uLWNvbmZsaWN0aW5nIHNjYW4g c3BlY2lmaWNhdGlvbiwgZW5mb3JjZSBpdC4gKi8KKwlpZiAoc2Nhbl90eXBlICE9IDAgJiYgIXNj YW5fdHlwZV9jb25mbGljdCkKKwl7CisJCXJlbC0+cGdzX21hc2sgJj0KKwkJCX4oUEdTX1NDQU5f QU5ZIHwgUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfAorCQkJICBQR1NfQ09OU0lERVJf SU5ERVhPTkxZKTsKKwkJcmVsLT5wZ3NfbWFzayB8PSBzY2FuX3R5cGU7CisJfQorCisJLyogSWYg dGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgZ2F0aGVyIHNwZWNpZmljYXRpb24sIGVuZm9yY2Ug aXQuICovCisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGljdCkKKwl7CisJ CXJlbC0+cGdzX21hc2sgJj0KKwkJCX4oUEdTX0dBVEhFUiB8IFBHU19HQVRIRVJfTUVSR0UgfCBQ R1NfQ09OU0lERVJfTk9OUEFSVElBTCk7CisJCXJlbC0+cGdzX21hc2sgfD0gZ2F0aGVyX21hc2s7 CisJfQorfQorCisvKgorICogQWRkIGZlZWRiYWNrIGVudHJpZXMgdG8gZm9yIG9uZSB0cm92ZSBz bGljZSB0byB0aGUgcHJvdmlkZWQgbGlzdCBhbmQKKyAqIHJldHVybiB0aGUgcmVzdWx0aW5nIGxp c3QuCisgKgorICogRmVlZGJhY2sgZW50cmllcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIHRyb3Zl IGVudHJ5J3MgZmxhZ3MuIEl0J3MgYXNzdW1lZAorICogdGhhdCB0aGUgY2FsbGVyIGhhcyBhbHJl YWR5IHNldCBhbGwgcmVsZXZhbnQgZmxhZ3Mgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCisgKiBQR1BB X1RFX0ZBSUxFRC4gV2Ugc2V0IHRoYXQgZmxhZyBoZXJlIGlmIGFwcHJvcHJpYXRlLgorICovCitz dGF0aWMgTGlzdCAqCitwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKExpc3QgKmxpc3QsIHBn cGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJ CQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJIHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyKQoreworCXBncGFfdHJvdmVfZW50cnkgKmVudHJpZXM7 CisJaW50CQkJbmVudHJpZXM7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0lu Zm8oJmJ1Zik7CisJcGdwYV90cm92ZV9sb29rdXBfYWxsKHRyb3ZlLCB0eXBlLCAmZW50cmllcywg Jm5lbnRyaWVzKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG5lbnRyaWVzOyArK2kpCisJeworCQlw Z3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZlbnRyaWVzW2ldOworCQlEZWZFbGVtICAgICppdGVt OworCisJCS8qCisJCSAqIElmIHRoaXMgZW50cnkgd2FzIGZ1bGx5IG1hdGNoZWQsIGNoZWNrIHdo ZXRoZXIgZ2VuZXJhdGluZyBhZHZpY2UKKwkJICogZnJvbSB0aGlzIHBsYW4gd291bGQgcHJvZHVj ZSBzdWNoIGFuIGVudHJ5LiBJZiBub3QsIGxhYmVsIHRoZSBlbnRyeQorCQkgKiBhcyBmYWlsZWQu CisJCSAqLworCQlpZiAoKGVudHJ5LT5mbGFncyAmIFBHUEFfVEVfTUFUQ0hfRlVMTCkgIT0gMCAm JgorCQkJIXBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZSh3YWxrZXIsIHJ0X2lkZW50aWZpZXJzLAor CQkJCQkJCQkJICBlbnRyeS0+dGFnLCBlbnRyeS0+dGFyZ2V0KSkKKwkJCWVudHJ5LT5mbGFncyB8 PSBQR1BBX1RFX0ZBSUxFRDsKKworCQlpdGVtID0gbWFrZURlZkVsZW0ocGdwYV9jc3RyaW5nX3Ry b3ZlX2VudHJ5KGVudHJ5KSwKKwkJCQkJCSAgIChOb2RlICopIG1ha2VJbnRlZ2VyKGVudHJ5LT5m bGFncyksIC0xKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgaXRlbSk7CisJfQorCisJcmV0dXJu IGxpc3Q7Cit9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKy8qCisgKiBGYXN0IGhh c2ggZnVuY3Rpb24gZm9yIGEga2V5IGNvbnNpc3Rpbmcgb2YgYW4gUlRJIGFuZCBwbGFuIG5hbWUu CisgKi8KK3N0YXRpYyB1aW50MzIKK3BncGFfcmlfY2hlY2tlcl9oYXNoX2tleShwZ3BhX3JpX2No ZWNrZXJfa2V5IGtleSkKK3sKKwlmYXN0aGFzaF9zdGF0ZSBoczsKKwlpbnQJCQlzcF9sZW47CisK KwlmYXN0aGFzaF9pbml0KCZocywgMCk7CisKKwlocy5hY2N1bSA9IGtleS5ydGk7CisJZmFzdGhh c2hfY29tYmluZSgmaHMpOworCisJLyogcGxhbl9uYW1lIGNhbiBiZSBOVUxMICovCisJaWYgKGtl eS5wbGFuX25hbWUgPT0gTlVMTCkKKwkJc3BfbGVuID0gMDsKKwllbHNlCisJCXNwX2xlbiA9IGZh c3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXkucGxhbl9uYW1lKTsKKworCS8qIGhhc2hmbl91 bnN0YWJsZS5oIHJlY29tbWVuZHMgdXNpbmcgc3RyaW5nIGxlbmd0aCBhcyB0d2VhayAqLworCXJl dHVybiBmYXN0aGFzaF9maW5hbDMyKCZocywgc3BfbGVuKTsKK30KKworI2VuZGlmCisKKy8qCisg KiBTYXZlIHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZvciBvbmUgcmVsYXRpb24gZm9yIGZ1 dHVyZSBjcm9zcy1jaGVja2luZy4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcmlfY2hlY2tlcl9z YXZlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLCBQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJIFJl bE9wdEluZm8gKnJlbCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJcGdwYV9yaV9j aGVja2VyX2tleSBrZXk7CisJcGdwYV9yaV9jaGVja2VyICpjaGVjazsKKwlwZ3BhX2lkZW50aWZp ZXIgcmlkOworCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7CisJYm9vbAkJZm91bmQ7CisKKwlrZXku cnRpID0gYm1zX3NpbmdsZXRvbl9tZW1iZXIocmVsLT5yZWxpZHMpOworCWtleS5wbGFuX25hbWUg PSByb290LT5wbGFuX25hbWU7CisJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKHJvb3Qs IGtleS5ydGksICZyaWQpOworCXJpZF9zdHJpbmcgPSBwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKCZy aWQpOworCWNoZWNrID0gcGdwYV9yaV9jaGVja19pbnNlcnQocHBzLT5yaV9jaGVja19oYXNoLCBr ZXksICZmb3VuZCk7CisJQXNzZXJ0KCFmb3VuZCB8fCBzdHJjbXAoY2hlY2stPnJpZF9zdHJpbmcs IHJpZF9zdHJpbmcpID09IDApOworCWNoZWNrLT5yaWRfc3RyaW5nID0gcmlkX3N0cmluZzsKKyNl bmRpZgorfQorCisvKgorICogVmFsaWRhdGUgdGhhdCB0aGUgcmFuZ2UgdGFibGUgaWRlbnRpZmll cnMgd2Ugd2VyZSBhYmxlIHRvIGdlbmVyYXRlIGR1cmluZworICogcGxhbm5pbmcgbWF0Y2ggdGhl IG9uZXMgd2UgZ2VuZXJhdGVkIGZyb20gdGhlIGZpbmFsIHBsYW4uCisgKi8KK3N0YXRpYyB2b2lk CitwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsIFBsYW5u ZWRTdG10ICpwc3RtdCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJcGdwYV9pZGVu dGlmaWVyICpydF9pZGVudGlmaWVyczsKKwlwZ3BhX3JpX2NoZWNrX2l0ZXJhdG9yIGl0OworCXBn cGFfcmlfY2hlY2tlciAqY2hlY2s7CisKKwkvKiBDcmVhdGUgaWRlbnRpZmllcnMgZnJvbSB0aGUg cGxhbm5lZCBzdGF0ZW1lbnQuICovCisJcnRfaWRlbnRpZmllcnMgPSBwZ3BhX2NyZWF0ZV9pZGVu dGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10KTsKKworCS8qIEl0ZXJhdGUgb3ZlciBpZGVu dGlmaWVycyBjcmVhdGVkIGR1cmluZyBwbGFubmluZywgc28gd2UgY2FuIGNvbXBhcmUuICovCisJ cGdwYV9yaV9jaGVja19zdGFydF9pdGVyYXRlKHBwcy0+cmlfY2hlY2tfaGFzaCwgJml0KTsKKwl3 aGlsZSAoKGNoZWNrID0gcGdwYV9yaV9jaGVja19pdGVyYXRlKHBwcy0+cmlfY2hlY2tfaGFzaCwg Jml0KSkgIT0gTlVMTCkKKwl7CisJCWludAkJCXJ0b2Zmc2V0ID0gMDsKKwkJY29uc3QgY2hhciAq cmlkX3N0cmluZzsKKwkJSW5kZXgJCWZsYXRfcnRpOworCisJCS8qCisJCSAqIElmIHRoZXJlJ3Mg bm8gcGxhbiBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVudHJ5LCB0aGVuIHRoZQorCQkgKiBy dG9mZnNldCBpcyAwLiBPdGhlcndpc2UsIHdlIGNhbiBzZWFyY2ggdGhlIFN1YlBsYW5SVEluZm8g bGlzdCB0bworCQkgKiBmaW5kIHRoZSBydG9mZnNldC4KKwkJICovCisJCWlmIChjaGVjay0+a2V5 LnBsYW5fbmFtZSAhPSBOVUxMKQorCQl7CisJCQlmb3JlYWNoX25vZGUoU3ViUGxhblJUSW5mbywg cnRpbmZvLCBwc3RtdC0+c3VicnRpbmZvcykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIElmIHJ0aW5m by0+ZHVtbXkgaXMgc2V0LCB0aGVuIHRoZSBzdWJxdWVyeSdzIHJhbmdlIHRhYmxlCisJCQkJICog d2lsbCBvbmx5IGhhdmUgYmVlbiBwYXJ0aWFsbHkgY29waWVkIHRvIHRoZSBmaW5hbCByYW5nZQor CQkJCSAqIHRhYmxlLiBTcGVjaWZpY2FsbHksIG9ubHkgUlRFX1JFTEFUSU9OIGVudHJpZXMgYW5k CisJCQkJICogUlRFX1NVQlFVRVJZIGVudHJpZXMgdGhhdCB3ZXJlIG9uY2UgUlRFX1JFTEFUSU9O IGVudHJpZXMKKwkJCQkgKiB3aWxsIGJlIGNvcGllZCwgYXMgcGVyIGFkZF9ydGVzX3RvX2ZsYXRf cnRhYmxlLiBUaGVyZWZvcmUsCisJCQkJICogdGhlcmUncyBubyBmaXhlZCBydG9mZnNldCB0aGF0 IHdlIGNhbiBhcHBseSB0byB0aGUgUlRJcworCQkJCSAqIHVzZWQgZHVyaW5nIHBsYW5uaW5nIHRv IGxvY2F0ZSB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbnMKKwkJCQkgKiBpbiB0aGUgZmluYWwg cnRhYmxlLgorCQkJCSAqCisJCQkJICogV2l0aCBtb3JlIGNvbXBsZXggbG9naWMsIHdlIGNvdWxk IHdvcmsgYXJvdW5kIHRoYXQgcHJvYmxlbQorCQkJCSAqIGJ5IHJlbWVtYmVyaW5nIHRoZSB3aG9s ZSBjb250ZW50cyBvZiB0aGUgc3VicXVlcnkncyBydGFibGUKKwkJCQkgKiBkdXJpbmcgcGxhbm5p bmcsIGRldGVybWluaW5nIHdoaWNoIG9mIHRob3NlIHdvdWxkIGhhdmUgYmVlbgorCQkJCSAqIGNv cGllZCB0byB0aGUgZmluYWwgcnRhYmxlLCBhbmQgbWF0Y2hpbmcgdGhlbSB1cC4gQnV0IGl0CisJ CQkJICogZG9lc24ndCBzZWVtIGxpa2UgYSB3b3J0aHdoaWxlIGVuZGVhdm9yIGZvciByaWdodCBu b3csCisJCQkJICogYmVjYXVzZSBSVElzIGZyb20gc3VjaCBzdWJxdWVyaWVzIHdvbid0IGFwcGVh ciBpbiB0aGUgcGxhbgorCQkJCSAqIHRyZWUgaXRzZWxmLCBqdXN0IGluIHRoZSByYW5nZSB0YWJs ZS4gSGVuY2UsIHdlIGNhbiBuZWl0aGVyCisJCQkJICogZ2VuZXJhdGUgbm9yIGFjY2VwdCBhZHZp Y2UgZm9yIHRoZW0uCisJCQkJICovCisJCQkJaWYgKHN0cmNtcChjaGVjay0+a2V5LnBsYW5fbmFt ZSwgcnRpbmZvLT5wbGFuX25hbWUpID09IDAKKwkJCQkJJiYgIXJ0aW5mby0+ZHVtbXkpCisJCQkJ eworCQkJCQlydG9mZnNldCA9IHJ0aW5mby0+cnRvZmZzZXQ7CisJCQkJCUFzc2VydChydG9mZnNl dCA+IDApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCS8qCisJCQkgKiBJdCdzIG5v dCBhbiBlcnJvciBpZiB3ZSBkb24ndCBmaW5kIHRoZSBwbGFuIG5hbWU6IHRoYXQganVzdAorCQkJ ICogbWVhbnMgdGhhdCB3ZSBwbGFubmVkIGEgc3VicGxhbiBieSB0aGlzIG5hbWUgYnV0IGl0IGVu ZGVkIHVwCisJCQkgKiBiZWluZyBhIGR1bW15IHN1YnBsYW4gYW5kIHNvIHdhc24ndCBpbmNsdWRl ZCBpbiB0aGUgZmluYWwgcGxhbgorCQkJICogdHJlZS4KKwkJCSAqLworCQkJaWYgKHJ0b2Zmc2V0 ID09IDApCisJCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBjaGVjay0+a2V5LnJ0aSBp cyB0aGUgUlRJIHRoYXQgd2Ugc2F3IHByaW9yIHRvIHJhbmdlLXRhYmxlCisJCSAqIGZsYXR0ZW5p bmcsIHNvIHdlIG11c3QgYWRkIHRoZSBhcHByb3ByaWF0ZSBSVCBvZmZzZXQgdG8gZ2V0IHRoZQor CQkgKiBmaW5hbCBSVEkuCisJCSAqLworCQlmbGF0X3J0aSA9IGNoZWNrLT5rZXkucnRpICsgcnRv ZmZzZXQ7CisJCUFzc2VydChmbGF0X3J0aSA8PSBsaXN0X2xlbmd0aChwc3RtdC0+cnRhYmxlKSk7 CisKKwkJLyogQXNzZXJ0IHRoYXQgdGhlIHN0cmluZyB3ZSBjb21wdXRlIG5vdyBtYXRjaGVzIHRo ZSBwcmV2aW91cyBvbmUuICovCisJCXJpZF9zdHJpbmcgPSBwZ3BhX2lkZW50aWZpZXJfc3RyaW5n KCZydF9pZGVudGlmaWVyc1tmbGF0X3J0aSAtIDFdKTsKKwkJQXNzZXJ0KHN0cmNtcChyaWRfc3Ry aW5nLCBjaGVjay0+cmlkX3N0cmluZykgPT0gMCk7CisJfQorI2VuZGlmCit9CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3BsYW5uZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uN2Q0MGI5MTBiMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfcGxhbm5lci5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIHBncGFfcGxhbm5lci5oCisgKgkgIHBsYW5uZXIgaG9va3MKKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq CisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1BMQU5ORVJfSAorI2RlZmluZSBQR1BBX1BM QU5ORVJfSAorCitleHRlcm4gdm9pZCBwZ3BhX3BsYW5uZXJfaW5zdGFsbF9ob29rcyh2b2lkKTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5j IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uZGJkN2M5OWU0YzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCkBAIC0wLDAgKzEsMjc4IEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3NjYW4uYworICoJICBhbmFseXNpcyBvZiBzY2FucyBp biBQbGFuIHRyZWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfc2Nhbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIu aCIKKworI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFy c2V0cmVlLmgiCisKK3N0YXRpYyBwZ3BhX3NjYW4gKnBncGFfbWFrZV9zY2FuKHBncGFfcGxhbl93 YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkJCQkgcGdwYV9zY2FuX3N0 cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMsCisJCQkJCQkJCSBi b29sIGJlbmVhdGhfYW55X2dhdGhlcik7CisKKworc3RhdGljIEJpdG1hcHNldCAqZmlsdGVyX291 dF9qb2luX3JlbGlkcyhCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxlKTsKK3N0YXRpYyBS VEVLaW5kIHVuaXF1ZV9ub25qb2luX3J0ZWtpbmQoQml0bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0 YWJsZSk7CisKKy8qCisgKiBCdWlsZCBhIHBncGFfc2NhbiBvYmplY3QgZm9yIGEgUGxhbiBub2Rl IGFuZCB1cGRhdGUgdGhlIHBsYW4gd2Fsa2VyCisgKiBjb250ZXh0IGFzIGFwcG9wcmlhdGUuICBJ ZiB0aGlzIGlzIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBzY2FuLCBhbHNvCisgKiBidWlsZCBw Z3BhX3NjYW4gZm9yIGFueSBzY2FucyB0aGF0IHdlcmUgY29uc29saWRhdGVkIGludG8gdGhpcyBv bmUgYnkKKyAqIEFwcGVuZC9NZXJnZUFwcGVuZCBwdWxsLXVwLgorICoKKyAqIElmIHRoZXJlIGlz IGF0IGxlYXN0IG9uZSBFbGlkZWROb2RlIGZvciB0aGlzIHBsYW4gbm9kZSwgcGFzcyB0aGUgdXBw ZXJtb3N0CisgKiBvbmUgYXMgZWxpZGVkX25vZGUsIGVsc2UgcGFzcyBOVUxMLgorICoKKyAqIFNl dCB0aGUgJ2JlbmVhdGhfYW55X2dhdGhlcicgbm9kZSBpZiB3ZSBhcmUgdW5kZXJuZWF0aCBhIEdh dGhlciBvcgorICogR2F0aGVyIE1lcmdlIG5vZGUuCisgKgorICogU2V0IHRoZSAnd2l0aGluX2pv aW5fcHJvYmxlbScgZmxhZyBpZiB3ZSdyZSBpbnNpZGUgb2YgYSBqb2luIHByb2JsZW0gYW5kCisg KiBub3Qgb3RoZXJ3aXNlLgorICovCitwZ3BhX3NjYW4gKgorcGdwYV9idWlsZF9zY2FuKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCUVsaWRlZE5vZGUg KmVsaWRlZF9ub2RlLAorCQkJCWJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyLCBib29sIHdpdGhpbl9q b2luX3Byb2JsZW0pCit7CisJcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5ID0gUEdQQV9TQ0FO X09SRElOQVJZOworCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7CisJaW50CQkJcnRpID0gLTE7 CisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBOSUw7CisKKwlpZiAoZWxpZGVk X25vZGUgIT0gTlVMTCkKKwl7CisJCU5vZGVUYWcJCWVsaWRlZF90eXBlID0gZWxpZGVkX25vZGUt PmVsaWRlZF90eXBlOworCisJCS8qCisJCSAqIElmIHNldHJlZnMgcHJvY2Vzc2luZyBlbGlkZWQg YW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUgdGhhdCBoYWQKKwkJICogb25seSBvbmUgc3Vy dml2aW5nIGNoaWxkLCB0aGVuIHRoaXMgaXMgYSBwYXJ0aXRpb253aXNlICJzY2FuIiAtLQorCQkg KiB3aGljaCBtYXkgcmVhbGx5IGJlIGEgcGFydGl0aW9ud2lzZSBqb2luLCBidXQgdGhlcmUncyBu byBuZWVkIHRvCisJCSAqIGRpc3Rpbmd1aXNoLgorCQkgKgorCQkgKiBJZiBpdCdzIGEgdHJpdmlh bCBTdWJxdWVyeVNjYW4gdGhhdCB3YXMgZWxpZGVkLCB0aGVuIHRoaXMgaXMgYW4KKwkJICogIm9y ZGluYXJ5IiBzY2FuIGkuZS4gb25lIGZvciB3aGljaCB3ZSBuZWVkIHRvIGdlbmVyYXRlIGFkdmlj ZQorCQkgKiBiZWNhdXNlIHRoZSBwbGFubmVyIGhhcyBub3QgbWFkZSBhbnkgbWVhbmluZ2Z1bCBj aG9pY2UuCisJCSAqLworCQlyZWxpZHMgPSBlbGlkZWRfbm9kZS0+cmVsaWRzOworCQlpZiAoZWxp ZGVkX3R5cGUgPT0gVF9BcHBlbmQgfHwgZWxpZGVkX3R5cGUgPT0gVF9NZXJnZUFwcGVuZCkKKwkJ CXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U7CisJCWVsc2UKKwkJCXN0cmF0ZWd5 ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCS8qIEpvaW4gUlRJcyBjYW4gYmUgcHJlc2VudCwg YnV0IGFkdmljZSBuZXZlciByZWZlcnMgdG8gdGhlbS4gKi8KKwkJcmVsaWRzID0gZmlsdGVyX291 dF9qb2luX3JlbGlkcyhyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJfQorCWVsc2Ug aWYgKChydGkgPSBwZ3BhX3NjYW5yZWxpZChwbGFuKSkgIT0gMCkKKwl7CisJCXJlbGlkcyA9IGJt c19tYWtlX3NpbmdsZXRvbihydGkpOworCisJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwkJewor CQkJY2FzZSBUX1NlcVNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fU0VROworCQkJCWJy ZWFrOworCQkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FO X0JJVE1BUF9IRUFQOworCQkJCWJyZWFrOworCQkJY2FzZSBUX0luZGV4U2NhbjoKKwkJCQlzdHJh dGVneSA9IFBHUEFfU0NBTl9JTkRFWDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9JbmRleE9ubHlT Y2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0lOREVYX09OTFk7CisJCQkJYnJlYWs7CisJ CQljYXNlIFRfVGlkU2NhbjoKKwkJCWNhc2UgVF9UaWRSYW5nZVNjYW46CisJCQkJc3RyYXRlZ3kg PSBQR1BBX1NDQU5fVElEOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKworCQkJCS8qCisJCQkJ ICogVGhpcyBjYXNlIGluY2x1ZGVzIGEgRm9yZWlnblNjYW4gdGFyZ2V0aW5nIGEgc2luZ2xlCisJ CQkJICogcmVsYXRpb247IG5vIG90aGVyIHN0cmF0ZWd5IGlzIHBvc3NpYmxlIGluIHRoYXQgY2Fz ZSwgYnV0CisJCQkJICogc2VlIGJlbG93LCB3aGVyZSB0aGluZ3MgYXJlIGRpZmZlcmVudCBpbiBt dWx0aS1yZWxhdGlvbgorCQkJCSAqIGNhc2VzLgorCQkJCSAqLworCQkJCXN0cmF0ZWd5ID0gUEdQ QV9TQ0FOX09SRElOQVJZOworCQkJCWJyZWFrOworCQl9CisJfQorCWVsc2UgaWYgKChyZWxpZHMg PSBwZ3BhX3JlbGlkcyhwbGFuKSkgIT0gTlVMTCkKKwl7CisJCXN3aXRjaCAobm9kZVRhZyhwbGFu KSkKKwkJeworCQkJY2FzZSBUX0ZvcmVpZ25TY2FuOgorCisJCQkJLyoKKwkJCQkgKiBJZiBtdWx0 aXBsZSByZWxhdGlvbnMgYXJlIGJlaW5nIHRhcmdldGVkIGJ5IGEgc2luZ2xlCisJCQkJICogZm9y ZWlnbiBzY2FuLCB0aGVuIHRoZSBmb3JlaWduIGpvaW4gaGFzIGJlZW4gcHVzaGVkIHRvIHRoZQor CQkJCSAqIHJlbW90ZSBzaWRlLCBhbmQgd2Ugd2FudCB0aGF0IHRvIGJlIHJlZmxlY3RlZCBpbiB0 aGUKKwkJCQkgKiBnZW5lcmF0ZWQgYWR2aWNlLgorCQkJCSAqLworCQkJCXN0cmF0ZWd5ID0gUEdQ QV9TQ0FOX0ZPUkVJR047CisJCQkJYnJlYWs7CisJCQljYXNlIFRfQXBwZW5kOgorCisJCQkJLyoK KwkJCQkgKiBBcHBlbmQgbm9kZXMgY2FuIHJlcHJlc2VudCBwYXJ0aXRpb253aXNlIHNjYW5zIG9m IGEgYQorCQkJCSAqIHJlbGF0aW9uLCBidXQgd2hlbiB0aGV5IGltcGxlbWVudCBhIHNldCBvcGVy YXRpb24sIHRoZXkgYXJlCisJCQkJICoganVzdCBvcmRpbmFyeSBzY2Fucy4KKwkJCQkgKi8KKwkJ CQlpZiAodW5pcXVlX25vbmpvaW5fcnRla2luZChyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJs ZSkKKwkJCQkJPT0gUlRFX1JFTEFUSU9OKQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9QQVJU SVRJT05XSVNFOworCQkJCWVsc2UKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7 CisJCQkJY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCQkoKEFwcGVuZCAqKSBwbGFuKS0+ Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfTWVyZ2VBcHBl bmQ6CisJCQkJLyogU29tZSBsb2dpYyBoZXJlIGFzIGZvciBBcHBlbmQsIGFib3ZlLiAqLworCQkJ CWlmICh1bmlxdWVfbm9uam9pbl9ydGVraW5kKHJlbGlkcywgd2Fsa2VyLT5wc3RtdC0+cnRhYmxl KQorCQkJCQk9PSBSVEVfUkVMQVRJT04pCisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1BBUlRJ VElPTldJU0U7CisJCQkJZWxzZQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsK KwkJCQljaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJCSgoTWVyZ2VBcHBlbmQgKikgcGxh biktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJ CQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKwkJCQlicmVhazsKKwkJfQorCisKKwkJ LyogSm9pbiBSVElzIGNhbiBiZSBwcmVzZW50LCBidXQgYWR2aWNlIG5ldmVyIHJlZmVycyB0byB0 aGVtLiAqLworCQlyZWxpZHMgPSBmaWx0ZXJfb3V0X2pvaW5fcmVsaWRzKHJlbGlkcywgd2Fsa2Vy LT5wc3RtdC0+cnRhYmxlKTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYW4gQXBwZW5kIG9y IE1lcmdlQXBwZW5kIG5vZGUgaW50byB3aGljaCBzdWJvcmRpbmF0ZSBBcHBlbmQKKwkgKiBvciBN ZXJnZUFwcGVuZCBwYXRocyB3ZXJlIG1lcmdlZCwgZWFjaCBvZiB0aG9zZSBtZXJnZWQgcGF0aHMg aXMKKwkgKiBlZmZlY3RpdmVseSBhbm90aGVyIHNjYW4gZm9yIHdoaWNoIHdlIG5lZWQgdG8gYWNj b3VudC4KKwkgKi8KKwlmb3JlYWNoX25vZGUoQml0bWFwc2V0LCBjaGlsZF9yZWxpZHMsIGNoaWxk X2FwcGVuZF9yZWxpZF9zZXRzKQorCXsKKwkJQml0bWFwc2V0ICAqY2hpbGRfbm9uam9pbl9yZWxp ZHM7CisKKwkJY2hpbGRfbm9uam9pbl9yZWxpZHMgPSBmaWx0ZXJfb3V0X2pvaW5fcmVsaWRzKGNo aWxkX3JlbGlkcywKKwkJCQkJCQkJCQkJCQkgIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJCSh2 b2lkKSBwZ3BhX21ha2Vfc2Nhbih3YWxrZXIsIHBsYW4sIHN0cmF0ZWd5LAorCQkJCQkJCSAgY2hp bGRfbm9uam9pbl9yZWxpZHMsCisJCQkJCQkJICBiZW5lYXRoX2FueV9nYXRoZXIpOworCX0KKwor CS8qCisJICogSWYgdGhpcyBwbGFuIG5vZGUgaGFzIG5vIGFzc29jaWF0ZWQgUlRJcywgaXQncyBu b3QgYSBzY2FuLiBXaGVuIHRoZQorCSAqICd3aXRoaW5fam9pbl9wcm9ibGVtJyBmbGFnIGlzIHNl dCwgdGhhdCdzIHVuZXhwZWN0ZWQsIHNvIHRocm93IGFuCisJICogZXJyb3IsIGVsc2UgcmV0dXJu IHF1aWV0bHkuCisJICovCisJaWYgKHJlbGlkcyA9PSBOVUxMKQorCXsKKwkJaWYgKHdpdGhpbl9q b2luX3Byb2JsZW0pCisJCQllbG9nKEVSUk9SLCAicGxhbiBub2RlIGhhcyBubyBSVElzOiAlZCIs IChpbnQpIG5vZGVUYWcocGxhbikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcGdw YV9tYWtlX3NjYW4od2Fsa2VyLCBwbGFuLCBzdHJhdGVneSwgcmVsaWRzLCBiZW5lYXRoX2FueV9n YXRoZXIpOworfQorCisvKgorICogQ3JlYXRlIGEgc2luZ2xlIHBncGFfc2NhbiBvYmplY3QgYW5k IHVwZGF0ZSB0aGUgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0LgorICovCitzdGF0aWMgcGdwYV9z Y2FuICoKK3BncGFfbWFrZV9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQ bGFuICpwbGFuLAorCQkJICAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LCBCaXRtYXBzZXQg KnJlbGlkcywKKwkJCSAgIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyKQoreworCXBncGFfc2NhbiAg KnNjYW47CisKKwkvKiBDcmVhdGUgdGhlIHNjYW4gb2JqZWN0LiAqLworCXNjYW4gPSBwYWxsb2Mo c2l6ZW9mKHBncGFfc2NhbikpOworCXNjYW4tPnBsYW4gPSBwbGFuOworCXNjYW4tPnN0cmF0ZWd5 ID0gc3RyYXRlZ3k7CisJc2Nhbi0+cmVsaWRzID0gcmVsaWRzOworCXNjYW4tPmJlbmVhdGhfYW55 X2dhdGhlciA9IGJlbmVhdGhfYW55X2dhdGhlcjsKKworCS8qIEFkZCBpdCB0byB0aGUgYXBwcm9w cmlhdGUgbGlzdC4gKi8KKwl3YWxrZXItPnNjYW5zW3NjYW4tPnN0cmF0ZWd5XSA9IGxhcHBlbmQo d2Fsa2VyLT5zY2Fuc1tzY2FuLT5zdHJhdGVneV0sCisJCQkJCQkJCQkJCXNjYW4pOworCisJLyoK KwkgKiBXZSBpbnRlbmQgdG8gZW1pdCBOT19HQVRIRVIoKSBhZHZpY2UgZm9yIGVhY2ggc2NhbiB0 aGF0IGRvZXNuJ3QgYXBwZWFyCisJICogYmVuZWF0aCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ug bm9kZSwgYnV0IHdlIG5lZWQgbm90IGRvIHRoaXMgZm9yCisJICogcGFydGl0aW9ud2lzZSBzY2Fu cywgYmVjYXVzZSBlbWl0dGluZyBOT19HQVRIRVIoKSBmb3IgdGhlIGNoaWxkIHNjYW5zCisJICog c3VmZmljZXMuCisJICovCisJaWYgKCFzY2FuLT5iZW5lYXRoX2FueV9nYXRoZXIgJiYgc2Nhbi0+ c3RyYXRlZ3kgIT0gUEdQQV9TQ0FOX1BBUlRJVElPTldJU0UpCisJCXdhbGtlci0+bm9fZ2F0aGVy X3NjYW5zID0gYm1zX2FkZF9tZW1iZXJzKHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zLAorCQkJCQkJ CQkJCQkJICBzY2FuLT5yZWxpZHMpOworCisJcmV0dXJuIHNjYW47Cit9CisKKy8qCisgKiBEZXRl cm1pbmUgdGhlIHVuaXF1ZSBydGVraW5kIG9mIGEgc2V0IG9mIHJlbGlkcy4KKyAqLworc3RhdGlj IFJURUtpbmQKK3VuaXF1ZV9ub25qb2luX3J0ZWtpbmQoQml0bWFwc2V0ICpyZWxpZHMsIExpc3Qg KnJ0YWJsZSkKK3sKKwlpbnQJCQlydGkgPSAtMTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisJUlRF S2luZAkJcnRla2luZDsKKworCUFzc2VydChyZWxpZHMgIT0gTlVMTCk7CisKKwl3aGlsZSAoKHJ0 aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJeworCQlSYW5nZVRibEVu dHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwkJaWYgKHJ0ZS0+cnRla2luZCA9 PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCWlmIChmaXJzdCkKKwkJeworCQkJcnRla2lu ZCA9IHJ0ZS0+cnRla2luZDsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCX0KKwkJZWxzZSBpZiAocnRl a2luZCAhPSBydGUtPnJ0ZWtpbmQpCisJCQllbG9nKEVSUk9SLCAicnRla2luZCBtaXNtYXRjaDog JWQgdnMuICVkIiwKKwkJCQkgcnRla2luZCwgcnRlLT5ydGVraW5kKTsKKwl9CisKKwlpZiAoZmly c3QpCisJCWVsb2coRVJST1IsICJubyBub24tUlRFX0pPSU4gUlRFcyBmb3VuZCIpOworCisJcmV0 dXJuIHJ0ZWtpbmQ7Cit9CisKKy8qCisgKiBDb25zdHJ1Y3QgYSBuZXcgQml0bWFwc2V0IGNvbnRh aW5pbmcgbm9uLVJURV9KT0lOIG1lbWJlcnMgb2YgJ3JlbGlkcycuCisgKi8KK3N0YXRpYyBCaXRt YXBzZXQgKgorZmlsdGVyX291dF9qb2luX3JlbGlkcyhCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAq cnRhYmxlKQoreworCWludAkJCXJ0aSA9IC0xOworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7 CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJ eworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwkJaWYg KHJ0ZS0+cnRla2luZCAhPSBSVEVfSk9JTikKKwkJCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKHJl c3VsdCwgcnRpKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9zY2FuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkwYTA4YjQx YzViCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4u aApAQCAtMCwwICsxLDg2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3NjYW4u aAorICoJICBhbmFseXNpcyBvZiBzY2FucyBpbiBQbGFuIHRyZWVzCisgKgorICogRm9yIHB1cnBv c2VzIG9mIHRoaXMgbW9kdWxlLCBhICJzY2FuIiBpbmNsdWRlcyAoMSkgc2luZ2xlIHBsYW4gbm9k ZXMgdGhhdAorICogc2NhbiBtdWx0aXBsZSBSVElzLCBzdWNoIGFzIGEgZGVnZW5lcmF0ZSBSZXN1 bHQgbm9kZSB0aGF0IHJlcGxhY2VzIHdoYXQKKyAqIHdvdWxkIG90aGVyd2lzZSBoYXZlIGJlZW4g YSBqb2luLCBhbmQgKDIpIEFwcGVuZCBhbmQgTWVyZ2VBcHBlbmQgbm9kZXMKKyAqIGltcGxlbWVu dGluZyBhIHBhcnRpdGlvbndpc2Ugc2NhbiBvciBhIHBhcnRpdGlvbndpc2Ugam9pbi4gU2FpZAor ICogZGlmZmVyZW50bHksIHNjYW5zIGFyZSB0aGUgbGVhdmVzIG9mIHRoZSBqb2luIHRyZWUgZm9y IGEgc2luZ2xlIGpvaW4KKyAqIHByb2JsZW0uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIw MjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpZm5kZWYgUEdQQV9TQ0FOX0gKKyNkZWZpbmUgUEdQQV9TQ0FOX0gKKworI2luY2x1ZGUgIm5v ZGVzL3BsYW5ub2Rlcy5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0OworCisvKgorICogU2NhbiBzdHJhdGVnaWVzLgor ICoKKyAqIFBHUEFfU0NBTl9PUkRJTkFSWSBpcyBhbnkgc2NhbiBzdHJhdGVneSB0aGF0IGlzbid0 IGludGVyZXN0aW5nIHRvIHVzCisgKiBiZWNhdXNlIHRoZXJlIGlzIG5vIG1lYW5pbmdmdWwgcGxh bm5lciBkZWNpc2lvbiBpbnZvbHZlZC4gRm9yIGV4YW1wbGUsCisgKiB0aGUgb25seSB3YXkgdG8g c2NhbiBhIHN1YnF1ZXJ5IGlzIGEgU3VicXVlcnlTY2FuLCBhbmQgdGhlIG9ubHkgd2F5IHRvCisg KiBzY2FuIGEgVkFMVUVTIGNvbnN0cnVjdCBpcyBhIFZhbHVlc1NjYW4uIFdlIG5lZWQgbm90IGNh cmUgZXhhY3RseSB3aGljaAorICogdHlwZSBvZiBwbGFubmVyIG5vZGUgd2FzIHVzZWQgaW4gc3Vj aCBjYXNlcywgYmVjYXVzZSB0aGUgc2FtZSB0aGluZyB3aWxsCisgKiBoYXBwZW4gd2hlbiByZXBs YW5uaW5nLgorICoKKyAqIFBHUEFfU0NBTl9PUkRJTkFSWSBhbHNvIGluY2x1ZGVzIFJlc3VsdCBu b2RlcyB0aGF0IGNvcnJlc3BvbmQgdG8gc2NhbnMKKyAqIG9yIGV2ZW4gam9pbnMgdGhhdCBhcmUg cHJvdmVkIGVtcHR5LiBXZSBkb24ndCBrbm93IHdoZXRoZXIgb3Igbm90IHRoZSBzY2FuCisgKiBv ciBqb2luIHdpbGwgc3RpbGwgYmUgcHJvdmFibHkgZW1wdHkgYXQgcmVwbGFubmluZyB0aW1lLCBi dXQgaWYgaXQgaXMsCisgKiB0aGVuIG5vIHNjYW4tdHlwZSBhZHZpY2UgaXMgbmVlZGVkLCBhbmQg aWYgaXQncyBub3QsIHdlIGNhbid0IHJlY29tbWVuZAorICogYSBzY2FuIHR5cGUgYmFzZWQgb24g dGhlIGN1cnJlbnQgcGxhbi4KKyAqCisgKiBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRSBhbHNvIGx1 bXBzIHRvZ2V0aGVyIHNjYW5zIGFuZCBqb2luczogdGhpcyBjYW4KKyAqIGJlIGVpdGhlciBhIHBh cnRpdGlvbndpc2Ugc2NhbiBvZiBhIHBhcnRpdGlvbmVkIHRhYmxlIG9yIGEgcGFydGl0aW9ud2lz ZQorICogam9pbiBiZXR3ZWVuIHNldmVyYWwgcGFydGl0aW9uZWQgdGFibGVzLiBOb3RlIHRoYXQg YWxsIGRlY2lzaW9ucyBhYm91dAorICogd2hldGhlciBvciBub3QgdG8gdXNlIHBhcnRpdGlvbndp c2Ugam9pbiBhcmUgbWVhbmluZ2Z1bDogbm8gbWF0dGVyIHdoYXQKKyAqIHdlIGRlY2lkZWQgdGhp cyB0aW1lLCB3ZSBjb3VsZCBkbyBtb3JlIG9yIGZld2VyIHRoaW5ncyBwYXJ0aXRpb253aXNlIHRo ZQorICogbmV4dCB0aW1lLgorICoKKyAqIFBHUEFfU0NBTl9GT1JFSUdOIGlzIG9ubHkgdXNlZCB3 aGVuIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSByZWxhdGlvbiBpbnZvbHZlZDsKKyAqIGEgc2luZ2xl LXRhYmxlIGZvcmVpZ24gc2NhbiBpcyBjbGFzc2lmaWVkIGFzIG9yZGluYXJ5LCBzaW5jZSB0aGVy ZSBpcyBubworICogZGVjaXNpb24gdG8gbWFrZSBpbiB0aGF0IGNhc2UuCisgKgorICogT3RoZXIg c2NhbiBzdHJhdGVnaWVzIG1hcCBvbmUtdG8tb25lIHRvIHBsYW4gbm9kZXMuCisgKi8KK3R5cGVk ZWYgZW51bQoreworCVBHUEFfU0NBTl9PUkRJTkFSWSA9IDAsCisJUEdQQV9TQ0FOX1NFUSwKKwlQ R1BBX1NDQU5fQklUTUFQX0hFQVAsCisJUEdQQV9TQ0FOX0ZPUkVJR04sCisJUEdQQV9TQ0FOX0lO REVYLAorCVBHUEFfU0NBTl9JTkRFWF9PTkxZLAorCVBHUEFfU0NBTl9QQVJUSVRJT05XSVNFLAor CVBHUEFfU0NBTl9USUQKKwkvKiB1cGRhdGUgTlVNX1BHUEFfU0NBTl9TVFJBVEVHWSBpZiB5b3Ug YWRkIGFueXRoaW5nIGhlcmUgKi8KK30gcGdwYV9zY2FuX3N0cmF0ZWd5OworCisjZGVmaW5lIE5V TV9QR1BBX1NDQU5fU1RSQVRFR1kJKChpbnQpIFBHUEFfU0NBTl9USUQgKyAxKQorCisvKgorICog QWxsIG9mIHRoZSBkZXRhaWxzIHdlIG5lZWQgcmVnYXJkaW5nIGEgc2Nhbi4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgcGdwYV9zY2FuCit7CisJUGxhbgkgICAqcGxhbjsKKwlwZ3BhX3NjYW5fc3RyYXRl Z3kgc3RyYXRlZ3k7CisJQml0bWFwc2V0ICAqcmVsaWRzOworCWJvb2wJCWJlbmVhdGhfYW55X2dh dGhlcjsKK30gcGdwYV9zY2FuOworCitleHRlcm4gcGdwYV9zY2FuICpwZ3BhX2J1aWxkX3NjYW4o cGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCQkJCSAg RWxpZGVkTm9kZSAqZWxpZGVkX25vZGUsCisJCQkJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9nYXRo ZXIsCisJCQkJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVtKTsKKworI2VuZGlmCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uYmU3ZDdiYTEzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCkBAIC0wLDAgKzEsMjk5IEBACisldG9weworLyoKKyAq IFNjYW5uZXIgZm9yIHBsYW4gYWR2aWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubAorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKwor I2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIK KyNpbmNsdWRlICJwYXJzZXIvc2NhbnN1cC5oIgorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNp bmNsdWRlICJwZ3BhX3BhcnNlci5oIgorCisvKgorICogRXh0cmEgZGF0YSB0aGF0IHdlIHBhc3Mg YXJvdW5kIHdoZW4gZHVyaW5nIHNjYW5uaW5nLgorICoKKyAqICdsaXRidWYnIGlzIHVzZWQgdG8g aW1wbGVtZW50IHRoZSA8eGQ+IGV4Y2x1c2l2ZSBzdGF0ZSwgd2hpY2ggaGFuZGxlcworICogZG91 YmxlLXF1b3RlZCBpZGVudGlmaWVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV95eV9leHRy YV90eXBlCit7CisJU3RyaW5nSW5mb0RhdGEJbGl0YnVmOworfSBwZ3BhX3l5X2V4dHJhX3R5cGU7 CisKK30KKworJXsKKy8qIExDT1ZfRVhDTF9TVEFSVCAqLworCisjZGVmaW5lIFlZX0RFQ0wgXAor CWV4dGVybiBpbnQgcGdwYV95eWxleCh1bmlvbiBZWVNUWVBFICp5eWx2YWxfcGFyYW0sIExpc3Qg KipyZXN1bHQsIFwKKwkJCQkJCSAgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5 eXNjYW5uZXIpCisKKy8qIE5vIHJlYXNvbiB0byBjb25zdHJhaW4gYW1vdW50IG9mIGRhdGEgc2x1 cnBlZCAqLworI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDE2Nzc3MjE2CisKKy8qIEF2b2lkIGV4 aXQoKSBvbiBmYXRhbCBzY2FubmVyIGVycm9ycyAoYSBiaXQgdWdseSAtLSBzZWUgeXlfZmF0YWxf ZXJyb3IpICovCisjdW5kZWYgZnByaW50ZgorI2RlZmluZSBmcHJpbnRmKGZpbGUsIGZtdCwgbXNn KSAgZnByaW50Zl90b19lcmVwb3J0KGZtdCwgbXNnKQorCitzdGF0aWMgdm9pZAorZnByaW50Zl90 b19lcmVwb3J0KGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgY2hhciAqbXNnKQoreworCWVyZXBvcnQo RVJST1IsIChlcnJtc2dfaW50ZXJuYWwoIiVzIiwgbXNnKSkpOworfQorJX0KKworJW9wdGlvbiBy ZWVudHJhbnQKKyVvcHRpb24gYmlzb24tYnJpZGdlCislb3B0aW9uIDhiaXQKKyVvcHRpb24gbmV2 ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24gbm9kZWZhdWx0Cislb3B0aW9uIG5vaW5wdXQKKyVvcHRp b24gbm91bnB1dAorJW9wdGlvbiBub3l5d3JhcAorJW9wdGlvbiBub3l5YWxsb2MKKyVvcHRpb24g bm95eXJlYWxsb2MKKyVvcHRpb24gbm95eWZyZWUKKyVvcHRpb24gd2FybgorJW9wdGlvbiBwcmVm aXg9InBncGFfeXkiCislb3B0aW9uIGV4dHJhLXR5cGU9InBncGFfeXlfZXh0cmFfdHlwZSAqIgor CisvKgorICogV2hhdCBmb2xsb3dzIGlzIGEgc2V2ZXJlbHkgc3RyaXBwZWQtZG93biB2ZXJzaW9u IG9mIHRoZSBjb3JlIHNjYW5uZXIuIFdlCisgKiBvbmx5IGNhcmUgYWJvdXQgcmVjb2duaXppbmcg aWRlbnRpZmllcnMgd2l0aCBvciB3aXRob3V0IGlkZW50aWZpZXIgcXVvdGluZworICogKGkuZS4g ZG91YmxlLXF1b3RpbmcpLCBkZWNpbWFsIGludGVnZXJzLCBhbmQgYSBzbWFsbCBoYW5kZnVsIG9m IG90aGVyCisgKiB0aGluZ3MuIEtlZXAgdGhlc2UgcnVsZXMgaW4gc3luYyB3aXRoIHNyYy9iYWNr ZW5kL3BhcnNlci9zY2FuLmwuIEFzIGluIHRoYXQKKyAqIGZpbGUsIHdlIHVzZSBhbiBleGNsdXNp dmUgc3RhdGUgY2FsbGVkICd4YycgZm9yIEMtc3R5bGUgY29tbWVudHMsIGFuZCBhbgorICogZXhj bHVzaXZlIHN0YXRlIGNhbGxlZCAneGQnIGZvciBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzLgor ICovCisleCB4YworJXggeGQKKworaWRlbnRfc3RhcnQJCVtBLVphLXpcMjAwLVwzNzdfXQoraWRl bnRfY29udAkJW0EtWmEtelwyMDAtXDM3N18wLTlcJF0KKworaWRlbnRpZmllcgkJe2lkZW50X3N0 YXJ0fXtpZGVudF9jb250fSoKKworZGVjZGlnaXQJCVswLTldCitkZWNpbnRlZ2VyCQl7ZGVjZGln aXR9KF8/e2RlY2RpZ2l0fSkqCisKK3NwYWNlCQkJWyBcdFxuXHJcZlx2XQord2hpdGVzcGFjZQkJ e3NwYWNlfSsKKworZHF1b3RlCQkJXCIKK3hkc3RhcnQJCQl7ZHF1b3RlfQoreGRzdG9wCQkJe2Rx dW90ZX0KK3hkZG91YmxlCQl7ZHF1b3RlfXtkcXVvdGV9Cit4ZGluc2lkZQkJW14iXSsKKworeGNz dGFydAkJCVwvXCoKK3hjc3RvcAkJCVwqK1wvCit4Y2luc2lkZQkJW14qL10rCisKKyUlCisKK3t3 aGl0ZXNwYWNlfQl7IC8qIGlnbm9yZSAqLyB9CisKK3tpZGVudGlmaWVyfQl7CisJCQkJCWNoYXIg ICAqc3RyOworCQkJCQlib29sCWZhaWw7CisJCQkJCXBncGFfYWR2aWNlX3RhZ190eXBlCXRhZzsK KworCQkJCQkvKgorCQkJCQkgKiBVbmxpa2UgdGhlIGNvcmUgc2Nhbm5lciwgd2UgZG9uJ3QgdHJ1 bmNhdGUgaWRlbnRpZmllcnMKKwkJCQkJICogaGVyZS4gVGhlcmUgaXMgbm8gb2J2aW91cyByZWFz b24gdG8gZG8gc28uCisJCQkJCSAqLworCQkJCQlzdHIgPSBkb3duY2FzZV9pZGVudGlmaWVyKHl5 dGV4dCwgeXlsZW5nLCBmYWxzZSwgZmFsc2UpOworCQkJCQl5eWx2YWwtPnN0ciA9IHN0cjsKKwor CQkJCQkvKgorCQkJCQkgKiBJZiBpdCdzIG5vdCBhIHRhZywganVzdCByZXR1cm4gVE9LX0lERU5U OyBlbHNlLCByZXR1cm4KKwkJCQkJICogYSB0b2tlbiB0eXBlIGJhc2VkIG9uIGhvdyBmdXJ0aGVy IHBhcnNpbmcgc2hvdWxkCisJCQkJCSAqIHByb2NlZWQuCisJCQkJCSAqLworCQkJCQl0YWcgPSBw Z3BhX3BhcnNlX2FkdmljZV90YWcoc3RyLCAmZmFpbCk7CisJCQkJCWlmIChmYWlsKQorCQkJCQkJ cmV0dXJuIFRPS19JREVOVDsKKwkJCQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX0pPSU5fT1JE RVIpCisJCQkJCQlyZXR1cm4gVE9LX1RBR19KT0lOX09SREVSOworCQkJCQllbHNlIGlmICh0YWcg PT0gUEdQQV9UQUdfSU5ERVhfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfSU5ERVhf T05MWV9TQ0FOKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfSU5ERVg7CisJCQkJCWVsc2UgaWYgKHRh ZyA9PSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfQklU TUFQOworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQQV9UQUdfU0VRX1NDQU4gfHwKKwkJCQkJCQkg dGFnID09IFBHUEFfVEFHX1RJRF9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19OT19H QVRIRVIpCisJCQkJCQlyZXR1cm4gVE9LX1RBR19TSU1QTEU7CisJCQkJCWVsc2UKKwkJCQkJCXJl dHVybiBUT0tfVEFHX0dFTkVSSUM7CisJCQkJfQorCit7ZGVjaW50ZWdlcn0JeworCQkJCQljaGFy ICAgKmVuZHB0cjsKKworCQkJCQllcnJubyA9IDA7CisJCQkJCXl5bHZhbC0+aW50ZWdlciA9IHN0 cnRvaW50KHl5dGV4dCwgJmVuZHB0ciwgMTApOworCQkJCQlpZiAoKmVuZHB0ciAhPSAnXDAnIHx8 IGVycm5vID09IEVSQU5HRSkKKwkJCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9y X21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCQkgImludGVnZXIgb3V0IG9mIHJhbmdlIik7CisJ CQkJCXJldHVybiBUT0tfSU5URUdFUjsKKwkJCQl9CisKK3t4Y3N0YXJ0fQkJeworCQkJCQlCRUdJ Tih4Yyk7CisJCQkJfQorCit7eGRzdGFydH0JCXsKKwkJCQkJQkVHSU4oeGQpOworCQkJCQlyZXNl dFN0cmluZ0luZm8oJnl5ZXh0cmEtPmxpdGJ1Zik7CisJCQkJfQorCisifHwiCQkJeyByZXR1cm4g VE9LX09SOyB9CisKKyImJiIJCQl7IHJldHVybiBUT0tfQU5EOyB9CisKKy4JCQkJeyByZXR1cm4g eXl0ZXh0WzBdOyB9CisKKzx4Yz57eGNzdG9wfQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJ CX0KKworPHhjPnt4Y2luc2lkZX0JeworCQkJCQkvKiBkaXNjYXJkIG11bHRpcGxlIGNoYXJhY3Rl cnMgd2l0aG91dCBzbGFzaCBvciBhc3RlcmlzayAqLworCQkJCX0KKworPHhjPi4JCQl7CisJCQkJ CS8qCisJCQkJCSAqIERpc2NhcmQgYW55IHNpbmdsZSBjaGFyYWN0ZXIuIGZsZXggcHJlZmVycyBs b25nZXIKKwkJCQkJICogbWF0Y2hlcywgc28gdGhpcyBydWxlIHdpbGwgbmV2ZXIgYmUgcGlja2Vk IHdoZW4gd2UgY291bGQKKwkJCQkJICogaGF2ZSBtYXRjaGVkIHhjc3RvcC4KKwkJCQkJICoKKwkJ CQkJICogTkI6IEF0IHByZXNlbnQsIHdlIGRvbid0IGJvdGhlciB0byBzdXBwb3J0IG5lc3RlZAor CQkJCQkgKiBDLXN0eWxlIGNvbW1lbnRzIGhlcmUsIGJ1dCB0aGlzIGxvZ2ljIGNvdWxkIGJlIGV4 dGVuZGVkCisJCQkJCSAqIGlmIHRoYXQgcmVzdHJpY3Rpb24gcG9zZXMgYSBwcm9ibGVtLgorCQkJ CQkgKi8KKwkJCQl9CisKKzx4Yz48PEVPRj4+CQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJ CQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJ CQkJCQkgInVudGVybWluYXRlZCBjb21tZW50Iik7CisJCQkJfQorCis8eGQ+e3hkc3RvcH0Jewor CQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQkJeXlsdmFsLT5zdHIgPSBwc3RyZHVwKHl5ZXh0cmEt PmxpdGJ1Zi5kYXRhKTsKKwkJCQkJcmV0dXJuIFRPS19JREVOVDsKKwkJCQl9CisKKzx4ZD57eGRk b3VibGV9CXsKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnl5ZXh0cmEtPmxpdGJ1ZiwgJyIn KTsKKwkJCQl9CisKKzx4ZD57eGRpbnNpZGV9CXsKKwkJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5m bygmeXlleHRyYS0+bGl0YnVmLCB5eXRleHQsIHl5bGVuZyk7CisJCQkJfQorCis8eGQ+PDxFT0Y+ PgkJeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFy c2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJICJ1bnRlcm1pbmF0ZWQgcXVvdGVk IGlkZW50aWZpZXIiKTsKKwkJCQl9CisKKyUlCisKKy8qIExDT1ZfRVhDTF9TVE9QICovCisKKy8q CisgKiBIYW5kbGVyIGZvciBlcnJvcnMgd2hpbGUgc2Nhbm5pbmcgb3IgcGFyc2luZyBhZHZpY2Uu CisgKgorICogYmlzb24gcGFzc2VzIHRoZSBlcnJvciBtZXNzYWdlIHRvIHVzIHZpYSAnbWVzc2Fn ZScsIGFuZCB0aGUgY29udGV4dCBpcworICogYXZhaWxhYmxlIHZpYSB0aGUgJ3l5dGV4dCcgbWFj cm8uIFdlIGFzc2VtYmxlIHRob3NlIHZhbHVlcyBpbnRvIGEgZmluYWwKKyAqIGVycm9yIHRleHQg YW5kIHRoZW4gYXJyYW5nZSB0byBwYXNzIGl0IGJhY2sgdG8gdGhlIGNhbGxlciBvZiBwZ3BhX3l5 cGFyc2UoKQorICogYnkgc3RvcmluZyBpdCBpbnRvICpwYXJzZV9lcnJvcl9tc2dfcC4KKyAqLwor dm9pZAorcGdwYV95eWVycm9yKExpc3QgKipyZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJvcl9tc2df cCwgeXlzY2FuX3QgeXlzY2FubmVyLAorCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJc3Ry dWN0IHl5Z3V0c190ICp5eWcgPSAoc3RydWN0IHl5Z3V0c190ICopIHl5c2Nhbm5lcjsJLyogbmVl ZGVkIGZvciB5eXRleHQKKwkJCQkJCQkJCQkJCQkJCSAqIG1hY3JvICovCisKKworCS8qIHJlcG9y dCBvbmx5IHRoZSBmaXJzdCBlcnJvciBpbiBhIHBhcnNlIG9wZXJhdGlvbiAqLworCWlmICgqcGFy c2VfZXJyb3JfbXNnX3ApCisJCXJldHVybjsKKworCWlmICh5eXRleHRbMF0pCisJCSpwYXJzZV9l cnJvcl9tc2dfcCA9IHBzcHJpbnRmKCIlcyBhdCBvciBuZWFyIFwiJXNcIiIsIG1lc3NhZ2UsIHl5 dGV4dCk7CisJZWxzZQorCQkqcGFyc2VfZXJyb3JfbXNnX3AgPSBwc3ByaW50ZigiJXMgYXQgZW5k IG9mIGlucHV0IiwgbWVzc2FnZSk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBhZHZpY2Ug c2Nhbm5lci4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHBhcnNpbmcgYmVn aW5zLgorICovCit2b2lkCitwZ3BhX3NjYW5uZXJfaW5pdChjb25zdCBjaGFyICpzdHIsIHl5c2Nh bl90ICp5eXNjYW5uZXJwKQoreworCXl5c2Nhbl90CXl5c2Nhbm5lcjsKKwlwZ3BhX3l5X2V4dHJh X3R5cGUJKnl5ZXh0ID0gcGFsbG9jMF9vYmplY3QocGdwYV95eV9leHRyYV90eXBlKTsKKworCWlm ICh5eWxleF9pbml0KHl5c2Nhbm5lcnApICE9IDApCisJCWVsb2coRVJST1IsICJ5eWxleF9pbml0 KCkgZmFpbGVkOiAlbSIpOworCisJeXlzY2FubmVyID0gKnl5c2Nhbm5lcnA7CisKKwlpbml0U3Ry aW5nSW5mbygmeXlleHQtPmxpdGJ1Zik7CisJcGdwYV95eXNldF9leHRyYSh5eWV4dCwgeXlzY2Fu bmVyKTsKKworCXl5X3NjYW5fc3RyaW5nKHN0ciwgeXlzY2FubmVyKTsKK30KKworCisvKgorICog U2h1dCBkb3duIHRoZSBhZHZpY2Ugc2Nhbm5lci4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxs ZWQgYWZ0ZXIgcGFyc2luZyBpcyBjb21wbGV0ZS4KKyAqLwordm9pZAorcGdwYV9zY2FubmVyX2Zp bmlzaCh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJeXlsZXhfZGVzdHJveSh5eXNjYW5uZXIpOwor fQorCisvKgorICogSW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBtYWtlIGZsZXggdXNlIHBhbGxvYygp IGluc3RlYWQgb2YgbWFsbG9jKCkuCisgKiBJdCdkIGJlIGJldHRlciB0byBtYWtlIHRoZXNlIHN0 YXRpYywgYnV0IGZsZXggaW5zaXN0cyBvdGhlcndpc2UuCisgKi8KKwordm9pZCAqCit5eWFsbG9j KHl5X3NpemVfdCBzaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmV0dXJuIHBhbGxvYyhz aXplKTsKK30KKwordm9pZCAqCit5eXJlYWxsb2Modm9pZCAqcHRyLCB5eV9zaXplX3Qgc2l6ZSwg eXlzY2FuX3QgeXlzY2FubmVyKQoreworCWlmIChwdHIpCisJCXJldHVybiByZXBhbGxvYyhwdHIs IHNpemUpOworCWVsc2UKKwkJcmV0dXJuIHBhbGxvYyhzaXplKTsKK30KKwordm9pZAoreXlmcmVl KHZvaWQgKnB0ciwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWlmIChwdHIpCisJCXBmcmVlKHB0 cik7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5hNjdkNTZiM2M3OQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCkBAIC0wLDAgKzEsNDg3IEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3Ryb3ZlLmMKKyAqCSAgQWxsIG9mIHRoZSBhZHZpY2Ug Z2l2ZW4gZm9yIGEgcGFydGljdWxhciBxdWVyeSwgYXBwcm9wcmlhdGVseQorICogICAgb3JnYW5p emVkIGZvciBjb252ZW5pZW50IGFjY2Vzcy4KKyAqCisgKiBUaGlzIG5hbWUgY29tZXMgZnJvbSB0 aGUgRW5nbGlzaCBleHByZXNzaW9uICJ0cm92ZSBvZiBhZHZpY2UiLCB3aGljaAorICogbWVhbnMg YSBjb2xsZWN0aW9uIG9mIHdpc2RvbS4gVGhpcyBzbGlnaHRseSB1bnVzdWFsIHRlcm0gaXMgY2hv c2VuIHRvCisgKiBhdm9pZCBuYW1pbmcgY29uZnVzaW9uOyBmb3IgZXhhbXBsZSwgImNvbGxlY3Rp b24gb2YgYWR2aWNlIiB3b3VsZAorICogaW52aXRlIGNvbmZ1c2lvbiB3aXRoIHBncGFfY29sbGVj dG9yLmMuIE5vdGUgdGhhdCwgd2hpbGUgd2UgZG9uJ3Qga25vdworICogd2hldGhlciB0aGUgcHJv dmlkZWQgYWR2aWNlIGlzIGFjdHVhbGx5IHdpc2UsIGl0J3Mgbm90IG91ciBqb2IgdG8KKyAqIHF1 ZXN0aW9uIHRoZSB1c2VyJ3MgY2hvaWNlcy4KKyAqCisgKiBUaGUgZ29hbCBvZiB0aGlzIG1vZHVs ZSBpcyB0byBtYWtlIGl0IGVhc3kgdG8gbG9jYXRlIHRoZSBzcGVjaWZpYworICogYml0cyBvZiBh ZHZpY2UgdGhhdCBwZXJ0YWluIHRvIGFueSBnaXZlbiBwYXJ0IG9mIGEgcXVlcnksIG9yIHRvCisg KiBkZXRlcm1pbmUgdGhhdCB0aGVyZSBhcmUgbm9uZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV90cm92ZS5oIgor CisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJsZS5oIgorCisvKgorICogQW4gYWR2aWNl IHRyb3ZlIGlzIG9yZ2FuaXplZCBpbnRvIGEgc2VyaWVzIG9mICJzbGljZXMiLCBlYWNoIG9mIHdo aWNoCisgKiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBvbmUgdG9waWMgZS5nLiBzY2FuIG1l dGhvZHMuIEVhY2ggc2xpY2UgY29uc2lzdHMKKyAqIG9mIGFuIGFycmF5IG9mIHRyb3ZlIGVudHJp ZXMgcGx1cyBhIGhhc2ggdGFibGUgdGhhdCB3ZSBjYW4gdXNlIHRvIGRldGVybWluZQorICogd2hp Y2ggb25lcyBhcmUgcmVsZXZhbnQgdG8gYSBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlIHF1ZXJ5Lgor ICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlX3NsaWNlCit7CisJdW5zaWduZWQJbmFsbG9j YXRlZDsKKwl1bnNpZ25lZAludXNlZDsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzOworCXN0 cnVjdCBwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2ggKmhhc2g7Cit9IHBncGFfdHJvdmVfc2xpY2U7CisK Ky8qCisgKiBTY2FuIGFkdmljZSBpcyBzdG9yZWQgaW50byAnc2Nhbic7IGpvaW4gYWR2aWNlIGlz IHN0b3JlZCBpbnRvICdqb2luJzsgYW5kCisgKiBhZHZpY2UgdGhhdCBjYW4gYXBwbHkgdG8gYm90 aCBjYXNlcyBpcyBzdG9yZWQgaW50byAncmVsJy4gVGhpcyBsZXRzIGNhbGxlcnMKKyAqIGFzayBq dXN0IGZvciB3aGF0J3MgcmVsZXZhbnQuIFRoZXNlIHNsaWNlcyBjb3JyZXNwb25kIHRvIHRoZSBw b3NzaWJsZSB2YWx1ZXMKKyAqIG9mIHBncGFfdHJvdmVfbG9va3VwX3R5cGUuCisgKi8KK3N0cnVj dCBwZ3BhX3Ryb3ZlCit7CisJcGdwYV90cm92ZV9zbGljZSBqb2luOworCXBncGFfdHJvdmVfc2xp Y2UgcmVsOworCXBncGFfdHJvdmVfc2xpY2Ugc2NhbjsKK307CisKKy8qCisgKiBXZSdyZSBnb2lu ZyB0byBidWlsZCBhIGhhc2ggdGFibGUgdG8gYWxsb3cgY2xpZW50cyBvZiB0aGlzIG1vZHVsZSB0 byBmaW5kCisgKiByZWxldmFudCBhZHZpY2UgZm9yIGEgZ2l2ZW4gcGFydCBvZiB0aGUgcXVlcnkg cXVpY2tseS4gSG93ZXZlciwgd2UncmUgZ29pbmcKKyAqIHRvIHVzZSBvbmx5IHRocmVlIG9mIHRo ZSBmaXZlIGtleSBmaWVsZHMgYXMgaGFzaCBrZXlzLiBUaGVyZSBhcmUgdHdvIHJlYXNvbnMKKyAq IGZvciB0aGlzLgorICoKKyAqIEZpcnN0LCBpdCdzIGFsbG93YWJsZSB0byBzZXQgcGFydGl0aW9u X3NjaGVtYSB0byBOVUxMIHRvIG1hdGNoIGEgcGFydGl0aW9uCisgKiB3aXRoIHRoZSBjb3JyZWN0 IG5hbWUgaW4gYW55IHNjaGVtYS4KKyAqCisgKiBTZWNvbmQsIHdlIGV4cGVjdCB0aGUgIm9jY3Vy cmVuY2UiIGFuZCAicGFydGl0aW9uX3NjaGVtYSIgcG9ydGlvbnMgb2YgdGhlCisgKiByZWxhdGlv biBpZGVudGlmaWVycyB0byBiZSBtb3N0bHkgdW5pbnRlcmVzdGluZy4gTW9zdCBvZiB0aGUgdGlt ZSwgdGhlCisgKiBvY2N1cnJlbmNlIGZpZWxkIHdpbGwgYmUgMSBhbmQgdGhlIHBhcnRpdGlvbl9z Y2hlbWEgdmFsdWVzIHdpbGwgYWxsIGJlIHRoZQorICogc2FtZS4gRXZlbiB3aGVuIHRoZXJlIGlz IHNvbWUgdmFyaWF0aW9uLCB0aGUgYWJzb2x1dGUgbnVtYmVyIG9mIGVudHJpZXMKKyAqIHRoYXQg aGF2ZSB0aGUgc2FtZSB2YWx1ZXMgZm9yIGFsbCB0aHJlZSBvZiB0aGVzZSBrZXkgZmllbGRzIHNo b3VsZCBiZQorICogcXVpdGUgc21hbGwuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJY29uc3Qg Y2hhciAqYWxpYXNfbmFtZTsKKwljb25zdCBjaGFyICpwYXJ0aXRpb25fbmFtZTsKKwljb25zdCBj aGFyICpwbGFuX25hbWU7Cit9IHBncGFfdHJvdmVfZW50cnlfa2V5OworCit0eXBlZGVmIHN0cnVj dAoreworCXBncGFfdHJvdmVfZW50cnlfa2V5IGtleTsKKwlpbnQJCQlzdGF0dXM7CisJQml0bWFw c2V0ICAqaW5kZXhlczsKK30gcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50OworCitzdGF0aWMgdWlu dDMyIHBncGFfdHJvdmVfZW50cnlfaGFzaF9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkga2V5KTsK Kworc3RhdGljIGlubGluZSBib29sCitwZ3BhX3Ryb3ZlX2VudHJ5X2NvbXBhcmVfa2V5KHBncGFf dHJvdmVfZW50cnlfa2V5IGEsIHBncGFfdHJvdmVfZW50cnlfa2V5IGIpCit7CisJaWYgKHN0cmNt cChhLmFsaWFzX25hbWUsIGIuYWxpYXNfbmFtZSkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJ aWYgKCFzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChhLnBhcnRpdGlvbl9uYW1lLCBiLnBhcnRp dGlvbl9uYW1lKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKyNkZWZp bmUgU0hfUFJFRklYCQkJcGdwYV90cm92ZV9lbnRyeQorI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUJ CXBncGFfdHJvdmVfZW50cnlfZWxlbWVudAorI2RlZmluZSBTSF9LRVlfVFlQRQkJCXBncGFfdHJv dmVfZW50cnlfa2V5CisjZGVmaW5lIFNIX0tFWQkJCQlrZXkKKyNkZWZpbmUgU0hfSEFTSF9LRVko dGIsIGtleSkJcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShrZXkpCisjZGVmaW5lCVNIX0VRVUFM KHRiLCBhLCBiKQlwZ3BhX3Ryb3ZlX2VudHJ5X2NvbXBhcmVfa2V5KGEsIGIpCisjZGVmaW5lIFNI X1NDT1BFCQkJc3RhdGljIGlubGluZQorI2RlZmluZSBTSF9ERUNMQVJFCisjZGVmaW5lIFNIX0RF RklORQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKK3N0YXRpYyB2b2lkIHBncGFfaW5p dF90cm92ZV9zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UpOworc3RhdGljIHZvaWQgcGdw YV90cm92ZV9hZGRfdG9fc2xpY2UocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlLAorCQkJCQkJCQkJ cGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnLAorCQkJCQkJCQkJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0 YXJnZXQpOworc3RhdGljIHZvaWQgcGdwYV90cm92ZV9hZGRfdG9faGFzaChwZ3BhX3Ryb3ZlX2Vu dHJ5X2hhc2ggKmhhc2gsCisJCQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAor CQkJCQkJCQkgICBpbnQgaW5kZXgpOworc3RhdGljIEJpdG1hcHNldCAqcGdwYV90cm92ZV9zbGlj ZV9sb29rdXAocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlLAorCQkJCQkJCQkJCSAgcGdwYV9pZGVu dGlmaWVyICpyaWQpOworCisvKgorICogQnVpbGQgYSB0cm92ZSBvZiBhZHZpY2UgZnJvbSBhIGxp c3Qgb2YgYWR2aWNlIGl0ZW1zLgorICoKKyAqIENhbGxlciBjYW4gb2J0YWluIGEgbGlzdCBvZiBh ZHZpY2UgaXRlbXMgdG8gcGFzcyB0byB0aGlzIGZ1bmN0aW9uIGJ5CisgKiBjYWxsaW5nIHBncGFf cGFyc2UoKS4KKyAqLworcGdwYV90cm92ZSAqCitwZ3BhX2J1aWxkX3Ryb3ZlKExpc3QgKmFkdmlj ZV9pdGVtcykKK3sKKwlwZ3BhX3Ryb3ZlICp0cm92ZSA9IHBhbGxvY19vYmplY3QocGdwYV90cm92 ZSk7CisKKwlwZ3BhX2luaXRfdHJvdmVfc2xpY2UoJnRyb3ZlLT5qb2luKTsKKwlwZ3BhX2luaXRf dHJvdmVfc2xpY2UoJnRyb3ZlLT5yZWwpOworCXBncGFfaW5pdF90cm92ZV9zbGljZSgmdHJvdmUt PnNjYW4pOworCisJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfaXRlbSwgaXRlbSwgYWR2aWNlX2l0 ZW1zKQorCXsKKwkJc3dpdGNoIChpdGVtLT50YWcpCisJCXsKKwkJCWNhc2UgUEdQQV9UQUdfSk9J Tl9PUkRFUjoKKwkJCQl7CisJCQkJCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0OworCisJCQkJ CS8qCisJCQkJCSAqIEZvciBtb3N0IGFkdmljZSB0eXBlcywgZWFjaCBlbGVtZW50IGluIHRoZSB0 b3AtbGV2ZWwKKwkJCQkJICogbGlzdCBpcyBhIHNlcGFyYXRlIHRhcmdldCwgYnV0IGl0J3MgbW9z dCBjb252ZW5pZW50IHRvCisJCQkJCSAqIHJlZ2FyZCB0aGUgZW50aXJldHkgb2YgYSBKT0lOX09S REVSIHNwZWNpZmljYXRpb24gYXMgYQorCQkJCQkgKiBzaW5nbGUgdGFyZ2V0LiBTaW5jZSBpdCB3 YXNuJ3QgcmVwcmVzZW50ZWQgdGhhdCB3YXkKKwkJCQkJICogZHVyaW5nIHBhcnNpbmcsIGJ1aWxk IGEgc3Vycm9nYXRlIG9iamVjdCBub3cuCisJCQkJCSAqLworCQkJCQl0YXJnZXQgPSBwYWxsb2Mw X29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJCQl0YXJnZXQtPnR0eXBlID0gUEdQQV9U QVJHRVRfT1JERVJFRF9MSVNUOworCQkJCQl0YXJnZXQtPmNoaWxkcmVuID0gaXRlbS0+dGFyZ2V0 czsKKworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJvdmUtPmpvaW4sCisJCQkJCQkJ CQkJCWl0ZW0tPnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUEdQ QV9UQUdfQklUTUFQX0hFQVBfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FO OgorCQkJY2FzZSBQR1BBX1RBR19JTkRFWF9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19TRVFfU0NB TjoKKwkJCWNhc2UgUEdQQV9UQUdfVElEX1NDQU46CisKKwkJCQkvKgorCQkJCSAqIFNjYW4gYWR2 aWNlLgorCQkJCSAqLworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0 LCBpdGVtLT50YXJnZXRzKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9yIG5vdywgYWxsIG9m IG91ciBzY2FuIHR5cGVzIHRhcmdldCBzaW5nbGUgcmVsYXRpb25zLAorCQkJCQkgKiBidXQgaW4g dGhlIGZ1dHVyZSB0aGlzIG1pZ2h0IG5vdCBiZSB0cnVlLCBlLmcuIGEgY3VzdG9tCisJCQkJCSAq IHNjYW4gY291bGQgcmVwbGFjZSBhIGpvaW4uCisJCQkJCSAqLworCQkJCQlBc3NlcnQodGFyZ2V0 LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKTsKKwkJCQkJcGdwYV90cm92ZV9hZGRf dG9fc2xpY2UoJnRyb3ZlLT5zY2FuLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRhcmdldCk7CisJ CQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCWNh c2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX01BVEVS SUFMSVpFOgorCQkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJY2FzZSBQR1BB X1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xP T1BfTUVNT0laRToKKwkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU46CisJCQljYXNl IFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lO X1VOSVFVRToKKworCQkJCS8qCisJCQkJICogSm9pbiBzdHJhdGVneSBhZHZpY2UuCisJCQkJICov CisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQsIGl0ZW0tPnRhcmdl dHMpCisJCQkJeworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJvdmUtPmpvaW4sCisJ CQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgUEdQQV9UQUdfUEFSVElUSU9OV0lTRToKKwkJCWNhc2UgUEdQQV9UQUdfR0FUSEVSOgorCQkJ Y2FzZSBQR1BBX1RBR19HQVRIRVJfTUVSR0U6CisJCQljYXNlIFBHUEFfVEFHX05PX0dBVEhFUjoK KworCQkJCS8qCisJCQkJICogQWR2aWNlIGFib3V0IGEgUmVsT3B0SW5mbyByZWxldmFudCB0byBi b3RoIHNjYW5zIGFuZCBqb2lucy4KKwkJCQkgKi8KKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2Fkdmlj ZV90YXJnZXQsIHRhcmdldCwgaXRlbS0+dGFyZ2V0cykKKwkJCQl7CisJCQkJCXBncGFfdHJvdmVf YWRkX3RvX3NsaWNlKCZ0cm92ZS0+cmVsLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRhcmdldCk7 CisJCQkJfQorCQkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHRyb3ZlOworfQorCisvKgor ICogU2VhcmNoIGEgdHJvdmUgb2YgYWR2aWNlIGZvciByZWxldmFudCBlbnRyaWVzLgorICoKKyAq IEFsbCBwYXJhbWV0ZXJzIGFyZSBpbnB1dCBwYXJhbWV0ZXJzIGV4Y2VwdCBmb3IgKnJlc3VsdCwg d2hpY2ggaXMgYW4gb3V0cHV0CisgKiBwYXJhbWV0ZXIgdXNlZCB0byByZXR1cm4gcmVzdWx0cyB0 byB0aGUgY2FsbGVyLgorICovCit2b2lkCitwZ3BhX3Ryb3ZlX2xvb2t1cChwZ3BhX3Ryb3ZlICp0 cm92ZSwgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCSAgaW50IG5yaWRzLCBwZ3Bh X2lkZW50aWZpZXIgKnJpZHMsIHBncGFfdHJvdmVfcmVzdWx0ICpyZXN1bHQpCit7CisJcGdwYV90 cm92ZV9zbGljZSAqdHNsaWNlOworCUJpdG1hcHNldCAgKmluZGV4ZXM7CisKKwlBc3NlcnQobnJp ZHMgPiAwKTsKKworCWlmICh0eXBlID09IFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4pCisJCXRzbGlj ZSA9ICZ0cm92ZS0+c2NhbjsKKwllbHNlIGlmICh0eXBlID09IFBHUEFfVFJPVkVfTE9PS1VQX0pP SU4pCisJCXRzbGljZSA9ICZ0cm92ZS0+am9pbjsKKwllbHNlCisJCXRzbGljZSA9ICZ0cm92ZS0+ cmVsOworCisJaW5kZXhlcyA9IHBncGFfdHJvdmVfc2xpY2VfbG9va3VwKHRzbGljZSwgJnJpZHNb MF0pOworCWZvciAoaW50IGkgPSAxOyBpIDwgbnJpZHM7ICsraSkKKwl7CisJCUJpdG1hcHNldCAg Km90aGVyX2luZGV4ZXM7CisKKwkJLyoKKwkJICogSWYgdGhlIGNhbGxlciBpcyBhc2tpbmcgYWJv dXQgdHdvIHJlbGF0aW9ucyB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoZQorCQkgKiBzYW1lIHN1YnF1 ZXJ5LCB0aGV5J3ZlIG1lc3NlZCB1cC4KKwkJICovCisJCUFzc2VydChzdHJpbmdzX2VxdWFsX29y X2JvdGhfbnVsbChyaWRzWzBdLnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkgIHJpZHNbaV0ucGxhbl9u YW1lKSk7CisKKwkJb3RoZXJfaW5kZXhlcyA9IHBncGFfdHJvdmVfc2xpY2VfbG9va3VwKHRzbGlj ZSwgJnJpZHNbaV0pOworCQlpbmRleGVzID0gYm1zX3VuaW9uKGluZGV4ZXMsIG90aGVyX2luZGV4 ZXMpOworCX0KKworCXJlc3VsdC0+ZW50cmllcyA9IHRzbGljZS0+ZW50cmllczsKKwlyZXN1bHQt PmluZGV4ZXMgPSBpbmRleGVzOworfQorCisvKgorICogUmV0dXJuIGFsbCBlbnRyaWVzIGluIGEg dHJvdmUgc2xpY2UgdG8gdGhlIGNhbGxlci4KKyAqCisgKiBUaGUgZmlyc3QgdHdvIGFyZ3VtZW50 cyBhcmUgaW5wdXQgYXJndW1lbnRzLCBhbmQgdGhlIHJlbWFpbmRlciBhcmUgb3V0cHV0CisgKiBh cmd1bWVudHMuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVfbG9va3VwX2FsbChwZ3BhX3Ryb3ZlICp0 cm92ZSwgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkgIHBncGFfdHJvdmVfZW50 cnkgKiplbnRyaWVzLCBpbnQgKm5lbnRyaWVzKQoreworCXBncGFfdHJvdmVfc2xpY2UgKnRzbGlj ZTsKKworCWlmICh0eXBlID09IFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4pCisJCXRzbGljZSA9ICZ0 cm92ZS0+c2NhbjsKKwllbHNlIGlmICh0eXBlID09IFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4pCisJ CXRzbGljZSA9ICZ0cm92ZS0+am9pbjsKKwllbHNlCisJCXRzbGljZSA9ICZ0cm92ZS0+cmVsOwor CisJKmVudHJpZXMgPSB0c2xpY2UtPmVudHJpZXM7CisJKm5lbnRyaWVzID0gdHNsaWNlLT5udXNl ZDsKK30KKworLyoKKyAqIENvbnZlcnQgYSB0cm92ZSBlbnRyeSB0byBhbiBpdGVtIG9mIHBsYW4g YWR2aWNlIHRoYXQgd291bGQgcHJvZHVjZSBpdC4KKyAqLworY2hhciAqCitwZ3BhX2NzdHJpbmdf dHJvdmVfZW50cnkocGdwYV90cm92ZV9lbnRyeSAqZW50cnkpCit7CisJU3RyaW5nSW5mb0RhdGEg YnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAi JXMiLCBwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhlbnRyeS0+dGFnKSk7CisKKwkvKiBKT0lOX09S REVSIHRhZ3MgYXJlIHRyYW5zZm9ybWVkIGJ5IHBncGFfYnVpbGRfdHJvdmU7IHVuZG8gdGhhdCBo ZXJlICovCisJaWYgKGVudHJ5LT50YWcgIT0gUEdQQV9UQUdfSk9JTl9PUkRFUikKKwkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJygnKTsKKwllbHNlCisJCUFzc2VydChlbnRyeS0+dGFyZ2V0 LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCisJcGdwYV9mb3JtYXRfYWR2 aWNlX3RhcmdldCgmYnVmLCBlbnRyeS0+dGFyZ2V0KTsKKworCWlmIChlbnRyeS0+dGFyZ2V0LT5p dGFyZ2V0ICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnICcpOwor CQlwZ3BhX2Zvcm1hdF9pbmRleF90YXJnZXQoJmJ1ZiwgZW50cnktPnRhcmdldC0+aXRhcmdldCk7 CisJfQorCisJaWYgKGVudHJ5LT50YWcgIT0gUEdQQV9UQUdfSk9JTl9PUkRFUikKKwkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyknKTsKKworCXJldHVybiBidWYuZGF0YTsKK30KKworLyoK KyAqIFNldCBQR1BBX1RFXyogZmxhZ3Mgb24gYSBzZXQgb2YgdHJvdmUgZW50cmllcy4KKyAqLwor dm9pZAorcGdwYV90cm92ZV9zZXRfZmxhZ3MocGdwYV90cm92ZV9lbnRyeSAqZW50cmllcywgQml0 bWFwc2V0ICppbmRleGVzLCBpbnQgZmxhZ3MpCit7CisJaW50CQkJaSA9IC0xOworCisJd2hpbGUg KChpID0gYm1zX25leHRfbWVtYmVyKGluZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92 ZV9lbnRyeSAqZW50cnkgPSAmZW50cmllc1tpXTsKKworCQllbnRyeS0+ZmxhZ3MgfD0gZmxhZ3M7 CisJfQorfQorCisvKgorICogQWRkIGEgbmV3IGFkdmljZSB0YXJnZXQgdG8gYW4gZXhpc3Rpbmcg cGdwYV90cm92ZV9zbGljZSBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Ryb3ZlX2Fk ZF90b19zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJCQlwZ3BhX2FkdmljZV90 YWdfdHlwZSB0YWcsCisJCQkJCQlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlwZ3Bh X3Ryb3ZlX2VudHJ5ICplbnRyeTsKKworCWlmICh0c2xpY2UtPm51c2VkID49IHRzbGljZS0+bmFs bG9jYXRlZCkKKwl7CisJCWludAkJCW5ld19hbGxvY2F0ZWQ7CisKKwkJbmV3X2FsbG9jYXRlZCA9 IHRzbGljZS0+bmFsbG9jYXRlZCAqIDI7CisJCXRzbGljZS0+ZW50cmllcyA9IHJlcGFsbG9jX2Fy cmF5KHRzbGljZS0+ZW50cmllcywgcGdwYV90cm92ZV9lbnRyeSwKKwkJCQkJCQkJCQkgbmV3X2Fs bG9jYXRlZCk7CisJCXRzbGljZS0+bmFsbG9jYXRlZCA9IG5ld19hbGxvY2F0ZWQ7CisJfQorCisJ ZW50cnkgPSAmdHNsaWNlLT5lbnRyaWVzW3RzbGljZS0+bnVzZWRdOworCWVudHJ5LT50YWcgPSB0 YWc7CisJZW50cnktPnRhcmdldCA9IHRhcmdldDsKKwllbnRyeS0+ZmxhZ3MgPSAwOworCisJcGdw YV90cm92ZV9hZGRfdG9faGFzaCh0c2xpY2UtPmhhc2gsIHRhcmdldCwgdHNsaWNlLT5udXNlZCk7 CisKKwl0c2xpY2UtPm51c2VkKys7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIGhhc2ggdGFibGUg Zm9yIGEgbmV3bHktYWRkZWQgYWR2aWNlIHRhcmdldC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFf dHJvdmVfYWRkX3RvX2hhc2gocGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNoLCBwZ3BhX2Fkdmlj ZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJICAgaW50IGluZGV4KQoreworCXBncGFfdHJvdmVfZW50 cnlfa2V5IGtleTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJYm9vbAkJ Zm91bmQ7CisKKwkvKiBGb3Igbm9uLWlkZW50aWZpZXJzLCBhZGQgZW50cmllcyBmb3IgYWxsIGRl c2NlbmRlbnRzLiAqLworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJ RVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwg dGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJcGdwYV90cm92ZV9hZGRfdG9faGFzaChoYXNoLCBj aGlsZF90YXJnZXQsIGluZGV4KTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyogU2FuaXR5IGNo ZWNrcy4gKi8KKwlBc3NlcnQodGFyZ2V0LT5yaWQub2NjdXJyZW5jZSA+IDApOworCUFzc2VydCh0 YXJnZXQtPnJpZC5hbGlhc19uYW1lICE9IE5VTEwpOworCisJLyogQWRkIGFuIGVudHJ5IGZvciB0 aGlzIHJlbGF0aW9uIGlkZW50aWZpZXIuICovCisJa2V5LmFsaWFzX25hbWUgPSB0YXJnZXQtPnJp ZC5hbGlhc19uYW1lOworCWtleS5wYXJ0aXRpb25fbmFtZSA9IHRhcmdldC0+cmlkLnBhcnRyZWw7 CisJa2V5LnBsYW5fbmFtZSA9IHRhcmdldC0+cmlkLnBsYW5fbmFtZTsKKwllbGVtZW50ID0gcGdw YV90cm92ZV9lbnRyeV9pbnNlcnQoaGFzaCwga2V5LCAmZm91bmQpOworCWVsZW1lbnQtPmluZGV4 ZXMgPSBibXNfYWRkX21lbWJlcihlbGVtZW50LT5pbmRleGVzLCBpbmRleCk7Cit9CisKKy8qCisg KiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgcGdwYV90cm92ZV9zbGljZSBvYmplY3QuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3BhX2luaXRfdHJvdmVfc2xpY2UocGdwYV90cm92ZV9zbGljZSAq dHNsaWNlKQoreworCS8qCisJICogSW4gYW4gaWRlYWwgd29ybGQsIHdlJ2xsIG1ha2UgdHNsaWNl LT5uYWxsb2NhdGVkIGJpZyBlbm91Z2ggdGhhdCB0aGUKKwkgKiBhcnJheSBhbmQgaGFzaCB0YWJs ZSB3aWxsIGJlIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSBudW1iZXIgb2YKKwkgKiBhZHZp Y2UgaXRlbXMgaW4gdGhpcyB0cm92ZSBzbGljZSwgYnV0IGEgZ2VuZXJvdXMgZGVmYXVsdCB2YWx1 ZSBpcyBub3QKKwkgKiBnb29kIGZvciBwZXJmb3JtYW5jZSwgYmVjYXVzZSBwZ3BhX2luaXRfdHJv dmVfc2xpY2UoKSBoYXMgdG8gemVybyBhbgorCSAqIGFtb3VudCBvZiBtZW1vcnkgcHJvcG9ydGlv bmFsIHRvIHRzbGljZS0+bmFsbG9jYXRlZC4gSGVuY2UsIHdlIGtlZXAgdGhlCisJICogc3RhcnRp bmcgdmFsdWUgcXVpdGUgc21hbGwsIG9uIHRoZSB0aGVvcnkgdGhhdCBhZHZpY2Ugc3RyaW5ncyB3 aWxsCisJICogb2Z0ZW4gYmUgcmVsYXRpdmVseSBzaG9ydC4KKwkgKi8KKwl0c2xpY2UtPm5hbGxv Y2F0ZWQgPSAxNjsKKwl0c2xpY2UtPm51c2VkID0gMDsKKwl0c2xpY2UtPmVudHJpZXMgPSBwYWxs b2NfYXJyYXkocGdwYV90cm92ZV9lbnRyeSwgdHNsaWNlLT5uYWxsb2NhdGVkKTsKKwl0c2xpY2Ut Pmhhc2ggPSBwZ3BhX3Ryb3ZlX2VudHJ5X2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJ CQkJCQkJCQkgICB0c2xpY2UtPm5hbGxvY2F0ZWQsIE5VTEwpOworfQorCisvKgorICogRmFzdCBo YXNoIGZ1bmN0aW9uIGZvciBhIGtleSBjb25zaXN0aW5nIG9mIGFsaWFzX25hbWUsIHBhcnRpdGlv bl9uYW1lLAorICogYW5kIHBsYW5fbmFtZS4KKyAqLworc3RhdGljIHVpbnQzMgorcGdwYV90cm92 ZV9lbnRyeV9oYXNoX2tleShwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXkpCit7CisJZmFzdGhhc2hf c3RhdGUgaHM7CisJaW50CQkJc3BfbGVuOworCisJZmFzdGhhc2hfaW5pdCgmaHMsIDApOworCisJ LyogYWxpYXNfbmFtZSBtYXkgbm90IGJlIE5VTEwgKi8KKwlzcF9sZW4gPSBmYXN0aGFzaF9hY2N1 bV9jc3RyaW5nKCZocywga2V5LmFsaWFzX25hbWUpOworCisJLyogcGFydGl0aW9uX25hbWUgYW5k IHBsYW5fbmFtZSwgaG93ZXZlciwgY2FuIGJlIE5VTEwgKi8KKwlpZiAoa2V5LnBhcnRpdGlvbl9u YW1lICE9IE5VTEwpCisJCXNwX2xlbiArPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5 LnBhcnRpdGlvbl9uYW1lKTsKKwlpZiAoa2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQlzcF9sZW4g Kz0gZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5wbGFuX25hbWUpOworCisJLyoKKwkg KiBoYXNoZm5fdW5zdGFibGUuaCByZWNvbW1lbmRzIHVzaW5nIHN0cmluZyBsZW5ndGggYXMgdHdl YWsuIEl0J3Mgbm90CisJICogY2xlYXIgdG8gbWUgd2hhdCB0byBkbyBpZiB0aGVyZSBhcmUgbXVs dGlwbGUgc3RyaW5ncywgc28gZm9yIG5vdyBJJ20KKwkgKiBqdXN0IHVzaW5nIHRoZSB0b3RhbCBv ZiBhbGwgb2YgdGhlIGxlbmd0aHMuCisJICovCisJcmV0dXJuIGZhc3RoYXNoX2ZpbmFsMzIoJmhz LCBzcF9sZW4pOworfQorCisvKgorICogTG9vayBmb3IgbWF0Y2hpbmcgZW50cmllcy4KKyAqLwor c3RhdGljIEJpdG1hcHNldCAqCitwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cChwZ3BhX3Ryb3ZlX3Ns aWNlICp0c2xpY2UsIHBncGFfaWRlbnRpZmllciAqcmlkKQoreworCXBncGFfdHJvdmVfZW50cnlf a2V5IGtleTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJQml0bWFwc2V0 ICAqcmVzdWx0ID0gTlVMTDsKKworCUFzc2VydChyaWQtPm9jY3VycmVuY2UgPj0gMSk7CisKKwlr ZXkuYWxpYXNfbmFtZSA9IHJpZC0+YWxpYXNfbmFtZTsKKwlrZXkucGFydGl0aW9uX25hbWUgPSBy aWQtPnBhcnRuc3A7CisJa2V5LnBsYW5fbmFtZSA9IHJpZC0+cGxhbl9uYW1lOworCisJZWxlbWVu dCA9IHBncGFfdHJvdmVfZW50cnlfbG9va3VwKHRzbGljZS0+aGFzaCwga2V5KTsKKworCWlmIChl bGVtZW50ICE9IE5VTEwpCisJeworCQlpbnQJCQlpID0gLTE7CisKKwkJd2hpbGUgKChpID0gYm1z X25leHRfbWVtYmVyKGVsZW1lbnQtPmluZGV4ZXMsIGkpKSA+PSAwKQorCQl7CisJCQlwZ3BhX3Ry b3ZlX2VudHJ5ICplbnRyeSA9ICZ0c2xpY2UtPmVudHJpZXNbaV07CisKKwkJCS8qCisJCQkgKiBX ZSBrbm93IHRoYXQgdGhpcyB0YXJnZXQgb3Igb25lIG9mIGl0cyBkZXNjZW5kZW50cyBtYXRjaGVz IHRoZQorCQkJICogaWRlbnRpZmllciBvbiB0aGUgdGhyZWUga2V5IGZpZWxkcyBhYm92ZSwgYnV0 IHdlIGRvbid0IGtub3cKKwkJCSAqIHdoaWNoIGRlc2NlbmRlbnQgb3Igd2hldGhlciB0aGUgb2Nj dXJlbmNlIGFuZCBzY2hlbWEgYWxzbworCQkJICogbWF0Y2guCisJCQkgKi8KKwkJCWlmIChwZ3Bh X2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQocmlkLCBlbnRyeS0+dGFyZ2V0KSkKKwkJCQlyZXN1 bHQgPSBibXNfYWRkX21lbWJlcihyZXN1bHQsIGkpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3Vs dDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjQ3OWMzZjc1Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIHBncGFfdHJvdmUuaAorICoJICBBbGwgb2YgdGhlIGFkdmljZSBn aXZlbiBmb3IgYSBwYXJ0aWN1bGFyIHF1ZXJ5LCBhcHByb3ByaWF0ZWx5CisgKiAgICBvcmdhbml6 ZWQgZm9yIGNvbnZlbmllbnQgYWNjZXNzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2lmbmRlZiBQR1BBX1RST1ZFX0gKKyNkZWZpbmUgUEdQQV9UUk9WRV9ICisKKyNpbmNsdWRlICJw Z3BhX2FzdC5oIgorCisjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCisKK3R5cGVkZWYgc3Ry dWN0IHBncGFfdHJvdmUgcGdwYV90cm92ZTsKKworLyoKKyAqIEZsYWdzIHRoYXQgY2FuIGJlIHNl dCBvbiBhIHBncGFfdHJvdmVfZW50cnkgdG8gaW5kaWNhdGUgd2hhdCBoYXBwZW5lZCB3aGVuCisg KiB0cnlpbmcgdG8gcGxhbiB1c2luZyBhZHZpY2UuCisgKgorICogUEdQQV9URV9NQVRDSF9QQVJU SUFMIG1lYW5zIHRoYXQgd2UgZm91bmQgc29tZSBwYXJ0IG9mIHRoZSBxdWVyeSB0aGF0IGF0Cisg KiBsZWFzdCBwYXJ0aWFsbHkgbWF0Y2hlZCB0aGUgdGFyZ2V0OyBlLmcuIGdpdmVuIEpPSU5fT1JE RVIoYSBiKSwgdGhpcyB3b3VsZAorICogYmUgc2V0IGlmIHdlIGV2ZXIgc2F3IGFueSBqb2lucmVs IGluY2x1ZGluZyBlaXRoZXIgImEiIG9yICJiIi4KKyAqCisgKiBQR1BBX1RFX01BVENIX0ZVTEwg bWVhbnMgdGhhdCB3ZSBmb3VuZCBhbiBleGFjdCBtYXRjaCBmb3IgdGhlIHRhcmdldDsgZS5nLgor ICogZ2l2ZW4gSk9JTl9PUkRFUihhIGIpLCB0aGlzIHdvdWxkIGJlIHNldCBpZiB3ZSBzYXcgYSBq b2lucmVsIGNvbnRhaW5pbmcKKyAqIGV4YWN0bHkgImEiIGFuZCAiYiIgYW5kIG5vdGhpbmcgZWxz ZS4KKyAqCisgKiBQR1BBX1RFX0lOQVBQTElDQUJMRSBtZWFucyB0aGF0IHRoZSBhZHZpY2UgZG9l c24ndCBwcm9wZXJseSBhcHBseSB0byB0aGUKKyAqIHRhcmdldDsgZS5nLiBJTkRFWF9TQ0FOKGZv byBiYXJfaWR4KSB3b3VsZCBiZSBzbyBtYXJrZWQgaWYgYmFyX2lkeCBkb2VzIG5vdAorICogZXhp c3Qgb24gZm9vLiBUaGUgZmFjdCB0aGF0IHRoaXMgYml0IGhhcyBiZWVuIHNldCBkb2VzIG5vdCBt ZWFuIHRoYXQgdGhlCisgKiBhZHZpY2UgaGFkIG5vIGVmZmVjdC4KKyAqCisgKiBQR1BBX1RFX0NP TkZMSUNUSU5HIG1lYW5zIHRoYXQgYSBjb25mbGljdCB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiB3aGF0 IHRoaXMKKyAqIGFkdmljZSB3YW50cyBhbmQgd2hhdCBzb21lIG90aGVyIHBsYW4gYWR2aWNlIHdh bnRzOyBlLmcuIEpPSU5fT1JERVIoYSBiKQorICogd291bGQgY29uZmxpY3Qgd2l0aCBIQVNIX0pP SU4oYSksIGJlY2F1c2UgdGhlIGZvcm1lciByZXF1aXJlcyAiYSIgdG8gYmUgdGhlCisgKiBvdXRl ciB0YWJsZSB3aGlsZSB0aGUgbGF0dGVyIHJlcXVpcmVzIGl0IHRvIGJlIHRoZSBpbm5lciB0YWJs ZS4KKyAqCisgKiBQR1BBX1RFX0ZBSUxFRCBtZWFucyB0aGF0IHRoZSByZXN1bHRpbmcgcGxhbiBk aWQgbm90IGNvbmZvcm0gdG8gdGhlIGFkdmljZS4KKyAqLworI2RlZmluZSBQR1BBX1RFX01BVENI X1BBUlRJQUwJCTB4MDAwMQorI2RlZmluZSBQR1BBX1RFX01BVENIX0ZVTEwJCQkweDAwMDIKKyNk ZWZpbmUgUEdQQV9URV9JTkFQUExJQ0FCTEUJCTB4MDAwNAorI2RlZmluZSBQR1BBX1RFX0NPTkZM SUNUSU5HCQkJMHgwMDA4CisjZGVmaW5lIFBHUEFfVEVfRkFJTEVECQkJCTB4MDAxMAorCisvKgor ICogRWFjaCBlbnRyeSBpbiBhIHRyb3ZlIG9mIGFkdmljZSByZXByZXNlbnRzIHRoZSBhcHBsaWNh dGlvbiBvZiBhIHRhZyB0bworICogYSBzaW5nbGUgdGFyZ2V0LgorICovCit0eXBlZGVmIHN0cnVj dCBwZ3BhX3Ryb3ZlX2VudHJ5Cit7CisJcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnOworCXBncGFf YWR2aWNlX3RhcmdldCAqdGFyZ2V0OworCWludAkJCWZsYWdzOworfSBwZ3BhX3Ryb3ZlX2VudHJ5 OworCisvKgorICogV2hhdCBraW5kIG9mIGluZm9ybWF0aW9uIGRvZXMgdGhlIGNhbGxlciB3YW50 IHRvIGZpbmQgaW4gYSB0cm92ZT8KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOIG1lYW5z IHdlJ3JlIGxvb2tpbmcgZm9yIHNjYW4gYWR2aWNlLgorICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQ X0pPSU4gbWVhbnMgd2UncmUgbG9va2luZyBmb3Igam9pbi1yZWxhdGVkIGFkdmljZS4KKyAqIFRo aXMgaW5jbHVkZXMgam9pbiBvcmRlciBhZHZpY2UsIGpvaW4gbWV0aG9kIGFkdmljZSwgYW5kIHNl bWlqb2luLXVuaXF1ZW5lc3MKKyAqIGFkdmljZS4KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9S RUwgbWVhbnMgd2UncmUgbG9va2luZyBmb3IgZ2VuZXJhbCBhZHZpY2UgYWJvdXQgdGhpcworICog YSBSZWxPcHRJbmZvIHRoYXQgbWF5IGNvcnJlc3BvbmQgdG8gZWl0aGVyIGEgc2NhbiBvciBhIGpv aW4uIFRoaXMgaW5jbHVkZXMKKyAqIGdhdGhlci1yZWxhdGVkIGFkdmljZSBhbmQgcGFydGl0aW9u d2lzZSBhZHZpY2UuIE5vdGUgdGhhdCBwYXJ0aXRpb253aXNlCisgKiBhZHZpY2UgbWlnaHQgc2Vl bSBsaWtlIGpvaW4gYWR2aWNlLCBidXQgdGhhdCdzIG5vdCBhIGhlbHBmdWwgd2F5IG9mIHZpZXdp bmcKKyAqIHRoZSBtYXR0ZXIgYmVjYXVzZSAoMSkgcGFydGl0aW9ud2lzZSBhZHZpY2UgaXMgYWxz byByZWxldmFudCBhdCB0aGUgc2NhbgorICogbGV2ZWwgYW5kICgyKSBvdGhlciB0eXBlcyBvZiBq b2luIGFkdmljZSBhZmZlY3Qgb25seSB3aGF0IHRvIGRvIGZyb20KKyAqIGpvaW5fcGF0aF9zZXR1 cF9ob29rLCBidXQgcGFydGl0aW9ud2lzZSBhZHZpY2UgYWZmZWN0cyB3aGF0IHRvIGRvIGluCisg KiBqb2lucmVsX3NldHVwX2hvb2suCisgKi8KK3R5cGVkZWYgZW51bSBwZ3BhX3Ryb3ZlX2xvb2t1 cF90eXBlCit7CisJUEdQQV9UUk9WRV9MT09LVVBfSk9JTiwKKwlQR1BBX1RST1ZFX0xPT0tVUF9S RUwsCisJUEdQQV9UUk9WRV9MT09LVVBfU0NBTgorfSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlOwor CisvKgorICogVGhpcyBzdHJ1Y3QgaXMgdXNlZCB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIGEgdHJv dmUgbG9va3VwLiBGb3IgZWFjaCBtZW1iZXIKKyAqIG9mICJpbmRleGVzIiwgdGhlIGVudHJ5IGF0 IHRoZSBjb3JyZXNwb25kaW5nIG9mZnNldCB3aXRoaW4gImVudHJpZXMiIGlzIG9uZQorICogb2Yg dGhlIHJlc3VsdHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmVfcmVzdWx0Cit7CisJ cGdwYV90cm92ZV9lbnRyeSAqZW50cmllczsKKwlCaXRtYXBzZXQgICppbmRleGVzOworfSBwZ3Bh X3Ryb3ZlX3Jlc3VsdDsKKworZXh0ZXJuIHBncGFfdHJvdmUgKnBncGFfYnVpbGRfdHJvdmUoTGlz dCAqYWR2aWNlX2l0ZW1zKTsKK2V4dGVybiB2b2lkIHBncGFfdHJvdmVfbG9va3VwKHBncGFfdHJv dmUgKnRyb3ZlLAorCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJ CSAgaW50IG5yaWRzLAorCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAg cGdwYV90cm92ZV9yZXN1bHQgKnJlc3VsdCk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX2xvb2t1 cF9hbGwocGdwYV90cm92ZSAqdHJvdmUsCisJCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlw ZSB0eXBlLAorCQkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKiplbnRyaWVzLAorCQkJCQkJCQkg IGludCAqbmVudHJpZXMpOworZXh0ZXJuIGNoYXIgKnBncGFfY3N0cmluZ190cm92ZV9lbnRyeShw Z3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX3NldF9mbGFn cyhwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzLAorCQkJCQkJCQkgQml0bWFwc2V0ICppbmRleGVz LCBpbnQgZmxhZ3MpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV93YWxrZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDIyYWMxMWJmOTEKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKQEAgLTAs MCArMSw4NzggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfd2Fsa2VyLmMKKyAq CSAgUGxhbiB0cmVlIGl0ZXJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9qb2luLmgiCisjaW5jbHVkZSAi cGdwYV9zY2FuLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgIm5vZGVz L3BsYW5ub2Rlcy5oIgorCitzdGF0aWMgdm9pZCBwZ3BhX3dhbGtfcmVjdXJzaXZlbHkocGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCQkJCSAgYm9vbCB3 aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJCQkJCQkgIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91 bnJvbGxlciwKKwkJCQkJCQkJICBMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJ CSAgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIpOworc3RhdGljIEJpdG1hcHNldCAqcGdwYV9wcm9j ZXNzX3Vucm9sbGVkX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQkJCQkJCSBwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luKTsKKworc3RhdGljIHBncGFfcXVlcnlf ZmVhdHVyZSAqcGdwYV9hZGRfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtl ciwKKwkJCQkJCQkJCQkJcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJCQkJCVBsYW4gKnBsYW4p OworCitzdGF0aWMgdm9pZCBwZ3BhX3FmX2FkZF9ydGkoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1 cmVzLCBJbmRleCBydGkpOworc3RhdGljIHZvaWQgcGdwYV9xZl9hZGRfcnRpcyhMaXN0ICphY3Rp dmVfcXVlcnlfZmVhdHVyZXMsIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyB2b2lkIHBncGFf cWZfYWRkX3BsYW5fcnRpcyhMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIFBsYW4gKnBsYW4p OworCitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXMocGdwYV91bnJv bGxlZF9qb2luICp1am9pbiwKKwkJCQkJCQkJCQkgICBJbmRleCBydGFibGVfbGVuZ3RoLAorCQkJ CQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJICAg cGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJCQkJCQkJICAgYm9vbCB0b3BsZXZlbCk7 CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNfbWVtYmVyKHBncGFf am9pbl9tZW1iZXIgKm1lbWJlciwKKwkJCQkJCQkJCQkJCSAgSW5kZXggcnRhYmxlX2xlbmd0aCwK KwkJCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJ CQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworc3RhdGljIGJvb2wgcGdwYV93YWxr ZXJfY29udGFpbnNfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJ CQkJCSAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJICBCaXRtYXBzZXQg KnJlbGlkcyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCSBwZ3BhX3FmX3R5cGUgdHlw ZSwKKwkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMpOworc3RhdGljIGJvb2wgcGdwYV93YWxr ZXJfY29udGFpbnNfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJ CQkJCSAgcGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJICBCaXRtYXBzZXQg KnJlbGlkcyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250YWluc19ub19nYXRoZXIocGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpy ZWxpZHMpOworc3RhdGljIEluZGV4IHBncGFfd2Fsa2VyX2dldF9ydGkoSW5kZXggcnRhYmxlX2xl bmd0aCwKKwkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJ CSBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7CisKKy8qCisgKiBUb3AtbGV2ZWwgZW50cnlwb2ludCBm b3IgdGhlIHBsYW4gdHJlZSB3YWxrLgorICoKKyAqIFBvcHVsYXRlcyB3YWxrZXIgYmFzZWQgb24g YSB0cmF2ZXJzYWwgb2YgdGhlIFBsYW4gdHJlZXMgaW4gcHN0bXQuCisgKi8KK3ZvaWQKK3BncGFf cGxhbl93YWxrZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW5uZWRTdG10 ICpwc3RtdCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qIEluaXRpYWxpemF0aW9uLiAqLwor CW1lbXNldCh3YWxrZXIsIDAsIHNpemVvZihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQpKTsKKwl3 YWxrZXItPnBzdG10ID0gcHN0bXQ7CisKKwkvKiBXYWxrIHRoZSBtYWluIHBsYW4gdHJlZS4gKi8K KwlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBwc3RtdC0+cGxhblRyZWUsIDAsIE5VTEws IE5JTCwgZmFsc2UpOworCisJLyogTWFpbiBwbGFuIHRyZWUgd2FsayB3b24ndCByZWFjaCBzdWJw bGFucywgc28gd2FsayB0aG9zZS4gKi8KKwlmb3JlYWNoKGxjLCBwc3RtdC0+c3VicGxhbnMpCisJ eworCQlQbGFuCSAgICpwbGFuID0gbGZpcnN0KGxjKTsKKworCQlpZiAocGxhbiAhPSBOVUxMKQor CQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgcGxhbiwgMCwgTlVMTCwgTklMLCBmYWxz ZSk7CisJfQorfQorCisvKgorICogTWFpbiB3b3JraG9yc2UgZm9yIHRoZSBwbGFuIHRyZWUgd2Fs ay4KKyAqCisgKiBJZiB3aXRoaW5fam9pbl9wcm9ibGVtIGlzIHRydWUsIHdlIGVuY291bnRlcmVk IGEgam9pbiBhdCBzb21lIGhpZ2hlciBsZXZlbAorICogb2YgdGhlIHRyZWUgd2FsayBhbmQgaGF2 ZW4ndCB5ZXQgZGVzY2VuZGVkIG91dCBvZiB0aGUgcG9ydGlvbiBvZiB0aGUgcGxhbgorICogdHJl ZSB0aGF0IGlzIHBhcnQgb2YgdGhhdCBzYW1lIGpvaW4gcHJvYmxlbS4gV2UncmUgbm8gbG9uZ2Vy IGluIHRoZSBzYW1lCisgKiBqb2luIHByb2JsZW0gaWYgKDEpIHdlIGNyb3NzIGludG8gYSBkaWZm ZXJlbnQgc3VicXVlcnkgb3IgKDIpIHdlIGRlc2NlbmQKKyAqIHRocm91Z2ggYW4gQXBwZW5kIG9y IE1lcmdlQXBwZW5kIG5vZGUsIGJlbG93IHdoaWNoIGFueSBmdXJ0aGVyIGpvaW5zIHdvdWxkCisg KiBiZSBwYXJ0aXRpb253aXNlIGpvaW5zIHBsYW5uZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBvdXRl ciBqb2luIHByb2JsZW0uCisgKgorICogSWYgam9pbl91bnJvbGxlciAhPSBOVUxMLCB0aGUgam9p biB1bnJvbGxlciBjb2RlIGV4cGVjdHMgdXMgdG8gZmluZCBhIGpvaW4KKyAqIHRoYXQgc2hvdWxk IGJlIHVucm9sbGVkIGludG8gdGhhdCBvYmplY3QuIFRoaXMgaW1wbGllcyB0aGF0IHdlJ3JlIHdp dGhpbiBhCisgKiBqb2luIHByb2JsZW0sIGJ1dCB0aGUgcmV2ZXJzZSBpcyBub3QgdHJ1ZTogd2hl biB3ZSd2ZSB0cmF2ZXJzZWQgYWxsIHRoZQorICogam9pbnMgYnV0IGFyZSBzdGlsbCBsb29raW5n IGZvciB0aGUgc2NhbiB0aGF0IGlzIHRoZSBsZWFmIG9mIHRoZSBqb2luIHRyZWUsCisgKiBqb2lu X3Vucm9sbGVyIHdpbGwgYmUgTlVMTCBidXQgd2l0aGluX2pvaW5fcHJvYmxlbSB3aWxsIGJlIHRy dWUuCisgKgorICogRWFjaCBlbGVtZW50IG9mIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyBjb3JyZXNw b25kcyB0byBzb21lIGl0ZW0gb2YgYWR2aWNlCisgKiB0aGF0IG5lZWRzIHRvIGVudW1lcmF0ZSBh bGwgdGhlIHJlbGF0aW9ucyBpdCBhZmZlY3RzLiBXZSBhZGQgUlRJcyB3ZSBmaW5kCisgKiBkdXJp bmcgdHJlZSB0cmF2ZXJzYWwgdG8gZWFjaCBvZiB0aGVzZSBxdWVyeSBmZWF0dXJlcy4KKyAqCisg KiBJZiBiZW5lYXRoX2FueV9nYXRoZXIgPT0gdHJ1ZSwgc29tZSBoaWdoZXIgbGV2ZWwgb2YgdGhl IHRyZWUgdHJhdmVyc2FsIGZvdW5kCisgKiBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZS4K KyAqLworc3RhdGljIHZvaWQKK3BncGFfd2Fsa19yZWN1cnNpdmVseShwZ3BhX3BsYW5fd2Fsa2Vy X2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJICBib29sIHdpdGhpbl9qb2luX3By b2JsZW0sCisJCQkJCSAgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCQkg IExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJICBib29sIGJlbmVhdGhfYW55X2dh dGhlcikKK3sKKwlwZ3BhX2pvaW5fdW5yb2xsZXIgKm91dGVyX2pvaW5fdW5yb2xsZXIgPSBOVUxM OworCXBncGFfam9pbl91bnJvbGxlciAqaW5uZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJYm9v bAkJam9pbl91bnJvbGxlcl90b3BsZXZlbCA9IGZhbHNlOworCUxpc3QJICAgKnB1c2hkb3duX3F1 ZXJ5X2ZlYXR1cmVzID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKmV4dHJhcGxh bnMgPSBOSUw7CisJTGlzdAkgICAqZWxpZGVkX25vZGVzID0gTklMOworCWJvb2wJCWlzX3F1ZXJ5 X2ZlYXR1cmUgPSBmYWxzZTsKKworCUFzc2VydCh3aXRoaW5fam9pbl9wcm9ibGVtIHx8IGpvaW5f dW5yb2xsZXIgPT0gTlVMTCk7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBHYXRoZXIgb3IgR2F0 aGVyIE1lcmdlIG5vZGUsIGRpcmVjdGx5IGFkZCBpdCB0byB0aGUgbGlzdAorCSAqIG9mIGN1cnJl bnRseS1hY3RpdmUgcXVlcnkgZmVhdHVyZXMuCisJICoKKwkgKiBPdGhlcndpc2UsIGNoZWNrIHRo ZSBmdXR1cmVfcXVlcnlfZmVhdHVyZXMgbGlzdCB0byBzZWUgd2hldGhlciB0aGlzIHdhcworCSAq IHByZXZpb3VzbHkgaWRlbnRpZmllZCBhcyBhIHBsYW4gbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRy ZWF0ZWQgYXMgYQorCSAqIHF1ZXJ5IGZlYXR1cmUuCisJICovCisJaWYgKElzQShwbGFuLCBHYXRo ZXIpKQorCXsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJCWxhcHBlbmQoYWN0aXZlX3F1 ZXJ5X2ZlYXR1cmVzLAorCQkJCQlwZ3BhX2FkZF9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX0dBVEhF UiwgcGxhbikpOworCQlpc19xdWVyeV9mZWF0dXJlID0gdHJ1ZTsKKwkJYmVuZWF0aF9hbnlfZ2F0 aGVyID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoSXNBKHBsYW4sIEdhdGhlck1lcmdlKSkKKwl7CisJ CWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9CisJCQlsYXBwZW5kKGFjdGl2ZV9xdWVyeV9mZWF0dXJl cywKKwkJCQkJcGdwYV9hZGRfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9HQVRIRVJfTUVSR0UsIHBs YW4pKTsKKwkJaXNfcXVlcnlfZmVhdHVyZSA9IHRydWU7CisJCWJlbmVhdGhfYW55X2dhdGhlciA9 IHRydWU7CisJfQorCWVsc2UKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwg cWYsIHdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzKQorCQl7CisJCQlpZiAocWYtPnBsYW4g PT0gcGxhbikKKwkJCXsKKwkJCQlpc19xdWVyeV9mZWF0dXJlID0gdHJ1ZTsKKwkJCQlhY3RpdmVf cXVlcnlfZmVhdHVyZXMgPSBsYXBwZW5kKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgcWYpOworCQkJ CXdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJCQkJbGlzdF9kZWxldGVfcHRyKHdh bGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzLCBwbGFuKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ fQorCX0KKworCS8qCisJICogRmluZCBhbGwgZWxpZGVkIG5vZGVzIGZvciB0aGlzIFBsYW4gbm9k ZS4KKwkgKi8KKwlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgd2Fsa2VyLT5wc3RtdC0+ZWxp ZGVkTm9kZXMpCisJeworCQlpZiAobi0+cGxhbl9ub2RlX2lkID09IHBsYW4tPnBsYW5fbm9kZV9p ZCkKKwkJCWVsaWRlZF9ub2RlcyA9IGxhcHBlbmQoZWxpZGVkX25vZGVzLCBuKTsKKwl9CisKKwkv KiBJZiB3ZSBmb3VuZCBhbnkgZWxpZGVkX25vZGVzLCBoYW5kbGUgdGhlbS4gKi8KKwlpZiAoZWxp ZGVkX25vZGVzICE9IE5JTCkKKwl7CisJCWludAkJCW51bV9lbGlkZWRfbm9kZXMgPSBsaXN0X2xl bmd0aChlbGlkZWRfbm9kZXMpOworCQlFbGlkZWROb2RlICpsYXN0X2VsaWRlZF9ub2RlOworCisJ CS8qCisJCSAqIFJUSXMgZm9yIHRoZSBmaW5hbCAtLSBhbmQgdGh1cyBsb2dpY2FsbHkgdXBwZXJt b3N0IC0tIGVsaWRlZCBub2RlCisJCSAqIHNob3VsZCBiZSBjb2xsZWN0ZWQgZm9yIHF1ZXJ5IGZl YXR1cmVzIHBhc3NlZCBkb3duIGJ5IHRoZSBjYWxsZXIuCisJCSAqIEhvd2V2ZXIsIGVsaWRlZCBu b2RlcyBhY3QgYXMgYmFycmllcnMgdG8gcXVlcnkgZmVhdHVyZXMsIHdoaWNoCisJCSAqIG1lYW5z IHRoYXQgKDEpIHRoZSByZW1haW5pbmcgZWxpZGVkIG5vZGVzLCBpZiBhbnksIHNob3VsZCBiZQor CQkgKiBpZ25vcmVkIGZvciBwdXJwb3NlcyBvZiBxdWVyeSBmZWF0dXJlcyBhbmQgKDIpIHRoZSBs aXN0IG9mIGFjdGl2ZQorCQkgKiBxdWVyeSBmZWF0dXJlcyBzaG91bGQgYmUgcmVzZXQgdG8gZW1w dHkgc28gdGhhdCB3ZSBkbyBub3QgYWRkIFJUSXMKKwkJICogZnJvbSB0aGUgcGxhbiBub2RlIHRo YXQgaXMgbG9naWNhbGx5IGJlbmVhdGggdGhlIGVsaWRlZCBub2RlIHRvIHRoZQorCQkgKiBxdWVy eSBmZWF0dXJlcyBwYXNzZWQgZG93biBmcm9tIHRoZSBjYWxsZXIuCisJCSAqLworCQlsYXN0X2Vs aWRlZF9ub2RlID0gbGlzdF9udGgoZWxpZGVkX25vZGVzLCBudW1fZWxpZGVkX25vZGVzIC0gMSk7 CisJCXBncGFfcWZfYWRkX3J0aXMoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBsYXN0X2VsaWRlZF9u b2RlLT5yZWxpZHMpOworCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPSBOSUw7CisKKwkJLyoKKwkJ ICogSWYgd2UncmUgd2l0aGluIGEgam9pbiBwcm9ibGVtLCB0aGUgam9pbl91bnJvbGxlciBpcyBy ZXNwb25zaWJsZQorCQkgKiBmb3IgYnVpbGRpbmcgdGhlIHNjYW4gZm9yIHRoZSBmaW5hbCBlbGlk ZWQgbm9kZSwgc28gdGhyb3cgaXQgb3V0LgorCQkgKi8KKwkJaWYgKHdpdGhpbl9qb2luX3Byb2Js ZW0pCisJCQllbGlkZWRfbm9kZXMgPSBsaXN0X3RydW5jYXRlKGVsaWRlZF9ub2RlcywgbnVtX2Vs aWRlZF9ub2RlcyAtIDEpOworCisJCS8qIEJ1aWxkIHNjYW5zIGZvciBhbGwgKG9yIHRoZSByZW1h aW5pbmcpIGVsaWRlZCBub2Rlcy4gKi8KKwkJZm9yZWFjaF9ub2RlKEVsaWRlZE5vZGUsIGVsaWRl ZF9ub2RlLCBlbGlkZWRfbm9kZXMpCisJCXsKKwkJCSh2b2lkKSBwZ3BhX2J1aWxkX3NjYW4od2Fs a2VyLCBwbGFuLCBlbGlkZWRfbm9kZSwKKwkJCQkJCQkJICAgYmVuZWF0aF9hbnlfZ2F0aGVyLCB3 aXRoaW5fam9pbl9wcm9ibGVtKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZXJlIHdlcmUgYW55 IGVsaWRlZCBub2RlcywgdGhlbiBldmVyeXRoaW5nIGJlbmVhdGggdGhvc2Ugbm9kZXMKKwkJICog aXMgbm90IHBhcnQgb2YgdGhlIHNhbWUgam9pbiBwcm9ibGVtLgorCQkgKgorCQkgKiBJbiBtb3Jl IGRldGFpbCwgaWYgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIHdhcyBlbGlkZWQsIHRoZW4gYQor CQkgKiBwYXJ0aXRpb253aXNlIGpvaW4gd2FzIGNob3NlbiBhbmQgb25seSBhIHNpbmdsZSBjaGls ZCBzdXJ2aXZlZDsgaWYKKwkJICogYSBTdWJxdWVyeVNjYW4gd2FzIGVsaWRlZCwgdGhlIHN1YnF1 ZXJ5IHdhcyBwbGFubmVkIHdpdGhvdXQKKwkJICogZmxhdHRlbmluZyBpdCBpbnRvIHRoZSBwYXJl bnQuCisJCSAqLworCQl3aXRoaW5fam9pbl9wcm9ibGVtID0gZmFsc2U7CisJCWpvaW5fdW5yb2xs ZXIgPSBOVUxMOworCX0KKworCS8qCisJICogSWYgd2UncmUgd2l0aGluIGEgam9pbiBwcm9ibGVt LCB0aGUgam9pbiB1bnJvbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKwkgKiBidWlsZGluZyBhbnkg cmVxdWlyZWQgc2NhbiBmb3IgdGhpcyBub2RlLiBJZiBub3QsIHdlIGRvIGl0IGhlcmUuCisJICov CisJaWYgKCF3aXRoaW5fam9pbl9wcm9ibGVtKQorCQkodm9pZCkgcGdwYV9idWlsZF9zY2FuKHdh bGtlciwgcGxhbiwgTlVMTCwgYmVuZWF0aF9hbnlfZ2F0aGVyLCBmYWxzZSk7CisKKwkvKgorCSAq IElmIHRoaXMgam9pbiBuZWVkcyB0byB1bnJvbGxlZCBidXQgdGhlcmUncyBubyBqb2luIHVucm9s bGVyIGFscmVhZHkKKwkgKiBhdmFpbGFibGUsIGNyZWF0ZSBvbmUuCisJICovCisJaWYgKGpvaW5f dW5yb2xsZXIgPT0gTlVMTCAmJiBwZ3BhX2lzX2pvaW4ocGxhbikpCisJeworCQlqb2luX3Vucm9s bGVyID0gcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcigpOworCQlqb2luX3Vucm9sbGVyX3RvcGxl dmVsID0gdHJ1ZTsKKwkJd2l0aGluX2pvaW5fcHJvYmxlbSA9IHRydWU7CisJfQorCisJLyoKKwkg KiBJZiB0aGlzIGpvaW4gaXMgdG8gYmUgdW5yb2xsZWQsIHBncGFfdW5yb2xsX2pvaW4oKSB3aWxs IHJldHVybiB0aGUgam9pbgorCSAqIHVucm9sbGVyIG9iamVjdCB0aGF0IHNob3VsZCBiZSBwYXNz ZWQgZG93biB3aGVuIHdlIHJlY3Vyc2UgaW50byB0aGUKKwkgKiBvdXRlciBhbmQgaW5uZXIgc2lk ZXMgb2YgdGhlIHBsYW4uCisJICovCisJaWYgKGpvaW5fdW5yb2xsZXIgIT0gTlVMTCkKKwkJcGdw YV91bnJvbGxfam9pbih3YWxrZXIsIHBsYW4sIGJlbmVhdGhfYW55X2dhdGhlciwgam9pbl91bnJv bGxlciwKKwkJCQkJCSAmb3V0ZXJfam9pbl91bnJvbGxlciwgJmlubmVyX2pvaW5fdW5yb2xsZXIp OworCisJLyogQWRkIFJUSXMgZnJvbSB0aGUgcGxhbiBub2RlIHRvIGFsbCBhY3RpdmUgcXVlcnkg ZmVhdHVyZXMuICovCisJcGdwYV9xZl9hZGRfcGxhbl9ydGlzKGFjdGl2ZV9xdWVyeV9mZWF0dXJl cywgcGxhbik7CisKKwkvKgorCSAqIFJlY3Vyc2UgaW50byB0aGUgb3V0ZXIgYW5kIGlubmVyIHN1 YnRyZWVzLgorCSAqCisJICogQXMgYW4gZXhjZXB0aW9uLCBpZiB0aGlzIGlzIGEgRm9yZWlnblNj YW4sIGRvbid0IHJlY3Vyc2UuIHBvc3RncmVzX2ZkdworCSAqIHNvbWV0aW1lcyBzdG9yZXMgYW4g RVBRIHJlY2hlY2sgcGxhbiBpbiBwbGFuLT5sZWZ0cmVlLCBidXQgdGhhdCdzIGdvaW5nCisJICog dG8gbWVudGlvbiB0aGUgc2FtZSBzZXQgb2YgcmVsYXRpb25zIGFzIHRoZSBGb3JlaWduU2NhbiBp dHNlbGYsIGFuZCB3ZQorCSAqIGhhdmUgbm8gd2F5IHRvIGVtaXQgYWR2aWNlIHRhcmdldGluZyB0 aGUgRVBRIGNhc2UgdnMuIHRoZSBub24tRVBRIGNhc2UuCisJICogTW9yZW92ZXIsIGl0J3Mgbm90 IGVudGlyZWx5IGNsZWFyIHdoYXQgb3RoZXIgRkRXcyBtaWdodCBkbyB3aXRoIHRoZQorCSAqIGxl ZnQgYW5kIHJpZ2h0IHN1YnRyZWVzLiBNYXliZSBzb21lIGJldHRlciBoYW5kbGluZyBpcyBuZWVk ZWQgaGVyZSwgYnV0CisJICogZm9yIG5vdywgd2UganVzdCBwdW50LgorCSAqLworCWlmICghSXNB KHBsYW4sIEZvcmVpZ25TY2FuKSkKKwl7CisJCWlmIChwbGFuLT5sZWZ0dHJlZSAhPSBOVUxMKQor CQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgcGxhbi0+bGVmdHRyZWUsIHdpdGhpbl9q b2luX3Byb2JsZW0sCisJCQkJCQkJCSAgb3V0ZXJfam9pbl91bnJvbGxlciwgYWN0aXZlX3F1ZXJ5 X2ZlYXR1cmVzLAorCQkJCQkJCQkgIGJlbmVhdGhfYW55X2dhdGhlcik7CisJCWlmIChwbGFuLT5y aWdodHRyZWUgIT0gTlVMTCkKKwkJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4t PnJpZ2h0dHJlZSwgd2l0aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJCQkJICBpbm5lcl9qb2luX3Vu cm9sbGVyLCBhY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJCSAgYmVuZWF0aF9hbnlfZ2F0 aGVyKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGNyZWF0ZWQgYSBqb2luIHVucm9sbGVyIHVwIGFi b3ZlLCB0aGVuIGl0J3MgYWxzbyBvdXIgam9pbiB0byB1c2UKKwkgKiBpdCB0byBidWlsZCB0aGUg ZmluYWwgcGdwYV91bnJvbGxlZF9qb2luLCBhbmQgdG8gZGVzdHJveSB0aGUgb2JqZWN0LgorCSAq LworCWlmIChqb2luX3Vucm9sbGVyX3RvcGxldmVsKQorCXsKKwkJcGdwYV91bnJvbGxlZF9qb2lu ICp1am9pbjsKKworCQl1am9pbiA9IHBncGFfYnVpbGRfdW5yb2xsZWRfam9pbih3YWxrZXIsIGpv aW5fdW5yb2xsZXIpOworCQl3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zID0KKwkJCWxh cHBlbmQod2Fsa2VyLT50b3BsZXZlbF91bnJvbGxlZF9qb2lucywgdWpvaW4pOworCQlwZ3BhX2Rl c3Ryb3lfam9pbl91bnJvbGxlcihqb2luX3Vucm9sbGVyKTsKKwkJKHZvaWQpIHBncGFfcHJvY2Vz c191bnJvbGxlZF9qb2luKHdhbGtlciwgdWpvaW4pOworCX0KKworCS8qCisJICogU29tZSBwbGFu IHR5cGVzIGNhbiBoYXZlIGFkZGl0aW9uYWwgY2hpbGRyZW4uIE5vZGVzIGxpa2UgQXBwZW5kIHRo YXQKKwkgKiBjYW4gaGF2ZSBhbnkgbnVtYmVyIG9mIGNoaWxkcmVuIHN0b3JlIHRoZW0gaW4gYSBM aXN0OyBhIFN1YnF1ZXJ5U2NhbgorCSAqIGp1c3QgaGFzIGEgZmllbGQgZm9yIGEgc2luZ2xlIGFk ZGl0aW9uYWwgUGxhbi4KKwkgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNl IFRfQXBwZW5kOgorCQkJeworCQkJCUFwcGVuZAkgICAqYXBsYW4gPSAoQXBwZW5kICopIHBsYW47 CisKKwkJCQlleHRyYXBsYW5zID0gYXBsYW4tPmFwcGVuZHBsYW5zOworCQkJCWlmIChibXNfaXNf ZW1wdHkoYXBsYW4tPmFwcHJlbGlkcykpCisJCQkJCXB1c2hkb3duX3F1ZXJ5X2ZlYXR1cmVzID0g YWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFw cGVuZDoKKwkJCXsKKwkJCQlNZXJnZUFwcGVuZCAqbWFwbGFuID0gKE1lcmdlQXBwZW5kICopIHBs YW47CisKKwkJCQlleHRyYXBsYW5zID0gbWFwbGFuLT5tZXJnZXBsYW5zOworCQkJCWlmIChibXNf aXNfZW1wdHkobWFwbGFuLT5hcHByZWxpZHMpKQorCQkJCQlwdXNoZG93bl9xdWVyeV9mZWF0dXJl cyA9IGFjdGl2ZV9xdWVyeV9mZWF0dXJlczsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfQml0 bWFwQW5kOgorCQkJZXh0cmFwbGFucyA9ICgoQml0bWFwQW5kICopIHBsYW4pLT5iaXRtYXBwbGFu czsKKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwT3I6CisJCQlleHRyYXBsYW5zID0gKChCaXRt YXBPciAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7CisJCQlicmVhazsKKwkJY2FzZSBUX1N1YnF1ZXJ5 U2NhbjoKKworCQkJLyoKKwkJCSAqIFdlIGRvbid0IHBhc3MgZG93biBhY3RpdmVfcXVlcnlfZmVh dHVyZXMgYWNyb3NzIGhlcmUsIGJlY2F1c2UKKwkJCSAqIHRob3NlIGFyZSBzcGVjaWZpYyB0byBh IHN1YnF1ZXJ5IGxldmVsLgorCQkJICovCisJCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2Vy LCAoKFN1YnF1ZXJ5U2NhbiAqKSBwbGFuKS0+c3VicGxhbiwKKwkJCQkJCQkJICAwLCBOVUxMLCBO SUwsIGJlbmVhdGhfYW55X2dhdGhlcik7CisJCQlicmVhazsKKwkJY2FzZSBUX0N1c3RvbVNjYW46 CisJCQlleHRyYXBsYW5zID0gKChDdXN0b21TY2FuICopIHBsYW4pLT5jdXN0b21fcGxhbnM7CisJ CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCS8qIElmIHdlIGZvdW5kIGEg bGlzdCBvZiBleHRyYSBjaGlsZHJlbiwgaXRlcmF0ZSBvdmVyIGl0LiAqLworCWZvcmVhY2gobGMs IGV4dHJhcGxhbnMpCisJeworCQlQbGFuCSAgICpzdWJwbGFuID0gbGZpcnN0KGxjKTsKKworCQlw Z3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBzdWJwbGFuLCAwLCBOVUxMLCBwdXNoZG93bl9x dWVyeV9mZWF0dXJlcywKKwkJCQkJCQkgIGJlbmVhdGhfYW55X2dhdGhlcik7CisJfQorCisJLyoK KwkgKiBJZiB0aGUgY3VycmVudCBub2RlIGlzIGEgcXVlcnkgZmVhdHVyZSwgdGhlbiBhY3RpdmVf cXVlcnlfZmVhdHVyZXMgaGFzCisJICogYmVlbiBkZXN0cnVjdGl2ZWx5IG1vZGlmaWVkIGFzIGNv bXBhcmVkIHRvIHRoZSB2YWx1ZSBwYXNzZWQgZG93biBmcm9tCisJICogdGhlIGNhbGxlciwgYW5k IHdlIG5lZWQgdG8gcHV0IHRoaW5ncyBiYWNrIGFzIHRoZXkgd2VyZS4KKwkgKgorCSAqIEV4Y2Vw dGlvbnM6IElmIHRoZSBjYWxsZXIgcGFzc2VkIE5JTCwgb3IgaWYgd2UgcmVzZXQgdGhlIGxpc3Qg dG8gTklMCisJICogYmVjYXVzZSBvZiB0aGUgcHJlc2VuY2Ugb2YgYW4gZWxpZGVkIFN1YnF1ZXJ5 U2NhbiwgdGhlbiB3ZSBjcmVhdGVkIGEKKwkgKiBuZXcgbGlzdCBhYm92ZSwgcmF0aGVyIHRoYW4g ZGVzdHJ1Y3RpdmVseSBtb2RpZnlpbmcgdGhlIGNhbGxlcidzIGxpc3QuCisJICogVGhhdCBjYXNl IHJlcXVpcmVzIG5vIHNwZWNpYWwgaGFuZGxpbmcsIGJlY2F1c2UgbGlzdF90cnVuY2F0ZSgpIHdp bGwKKwkgKiBzaW1wbHkgZXhpdCBxdWlja2x5LgorCSAqLworCWlmIChpc19xdWVyeV9mZWF0dXJl KQorCXsKKwkJaW50CQkJbnVtX2FxZiA9IGxpc3RfbGVuZ3RoKGFjdGl2ZV9xdWVyeV9mZWF0dXJl cyk7CisKKwkJKHZvaWQpIGxpc3RfdHJ1bmNhdGUoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBudW1f YXFmIC0gMSk7CisJfQorfQorCisvKgorICogUGVyZm9ybSBmaW5hbCBwcm9jZXNzaW5nIG9mIGEg bmV3bHktY29uc3RydWN0ZWQgcGdwYV91bnJvbGxlZF9qb2luLiBUaGlzCisgKiBvbmx5IG5lZWRz IHRvIGJlIGNhbGxlZCBmb3IgdG9wbGV2ZWwgcGdwYV91bnJvbGxlZF9qb2luIG9iamVjdHMsIHNp bmNlIGl0CisgKiByZWN1cnNlcyB0byBzdWItam9pbnMgYXMgbmVlZGVkLgorICoKKyAqIE91ciBn b2FsIGlzIHRvIGFkZCB0aGUgc2V0IG9mIGlubmVyIHJlbGlkcyB0byB0aGUgcmVsZXZhbnQgam9p bl9zdHJhdGVnaWVzCisgKiBsaXN0LCBhbmQgdG8gZG8gdGhlIHNhbWUgZm9yIGFueSBzdWItam9p bnMuIFRvIHRoYXQgZW5kLCB0aGUgcmV0dXJuIHZhbHVlCisgKiBpcyB0aGUgc2V0IG9mIHJlbGlk cyBmb3VuZCBiZW5lYXRoIHRoZSBpbm5lciBzaWRlIG9mIHRoZSBqb2luLCBidXQgaXQgaXMKKyAq IGV4cGVjdGVkIHRoYXQgdGhlIHRvcGxldmVsIGNhbGxlciB3aWxsIGlnbm9yZSB0aGlzLgorICov CitzdGF0aWMgQml0bWFwc2V0ICoKK3BncGFfcHJvY2Vzc191bnJvbGxlZF9qb2luKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJICAgcGdwYV91bnJvbGxlZF9qb2luICp1 am9pbikKK3sKKwlCaXRtYXBzZXQgICphbGxfcmVsaWRzID0gTlVMTDsKKworCWZvciAoaW50IGsg PSAwOyBrIDwgdWpvaW4tPm5pbm5lcjsgKytrKQorCXsKKwkJcGdwYV9qb2luX21lbWJlciAqbWVt YmVyID0gJnVqb2luLT5pbm5lcltrXTsKKwkJQml0bWFwc2V0ICAqcmVsaWRzOworCisJCWlmICht ZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwkJCXJlbGlkcyA9IHBncGFfcHJvY2Vzc191 bnJvbGxlZF9qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJCW1lbWJlci0+dW5yb2xsZWRfam9pbik7 CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KG1lbWJlci0+c2NhbiAhPSBOVUxMKTsKKwkJCXJlbGlk cyA9IG1lbWJlci0+c2Nhbi0+cmVsaWRzOworCQl9CisJCXdhbGtlci0+am9pbl9zdHJhdGVnaWVz W3Vqb2luLT5zdHJhdGVneVtrXV0gPQorCQkJbGFwcGVuZCh3YWxrZXItPmpvaW5fc3RyYXRlZ2ll c1t1am9pbi0+c3RyYXRlZ3lba11dLCByZWxpZHMpOworCQlhbGxfcmVsaWRzID0gYm1zX2FkZF9t ZW1iZXJzKGFsbF9yZWxpZHMsIHJlbGlkcyk7CisJfQorCisJcmV0dXJuIGFsbF9yZWxpZHM7Cit9 CisKKy8qCisgKiBBcnJhbmdlIGZvciB0aGUgZ2l2ZW4gcGxhbiBub2RlIHRvIGJlIHRyZWF0ZWQg YXMgYSBxdWVyeSBmZWF0dXJlIHdoZW4gdGhlCisgKiB0cmVlIHdhbGsgcmVhY2hlcyBpdC4KKyAq CisgKiBNYWtlIHN1cmUgdG8gb25seSB1c2UgdGhpcyBmb3Igbm9kZXMgdGhhdCB0aGUgdHJlZSB3 YWxrIGNhbid0IGhhdmUgcmVhY2hlZAorICogeWV0IQorICovCit2b2lkCitwZ3BhX2FkZF9mdXR1 cmVfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCXBncGFf cWZfdHlwZSB0eXBlLCBQbGFuICpwbGFuKQoreworCXBncGFfcXVlcnlfZmVhdHVyZSAqcWYgPSBw Z3BhX2FkZF9mZWF0dXJlKHdhbGtlciwgdHlwZSwgcGxhbik7CisKKwl3YWxrZXItPmZ1dHVyZV9x dWVyeV9mZWF0dXJlcyA9CisJCWxhcHBlbmQod2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMs IHFmKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbGFzdCBvZiBhbnkgZWxpZGVkIG5vZGVzIGFz c29jaWF0ZWQgd2l0aCB0aGlzIHBsYW4gbm9kZSBJRC4KKyAqCisgKiBUaGUgbGFzdCBlbGlkZWQg bm9kZSBpcyB0aGUgb25lIHRoYXQgd291bGQgaGF2ZSBiZWVuIHVwcGVybW9zdCBpbiB0aGUgcGxh bgorICogdHJlZSBoYWQgaXQgbm90IGJlZW4gcmVtb3ZlZCBkdXJpbmcgc2V0cmVmcyBwcm9jZXNz aWcuCisgKi8KK0VsaWRlZE5vZGUgKgorcGdwYV9sYXN0X2VsaWRlZF9ub2RlKFBsYW5uZWRTdG10 ICpwc3RtdCwgUGxhbiAqcGxhbikKK3sKKwlFbGlkZWROb2RlICplbGlkZWRfbm9kZSA9IE5VTEw7 CisKKwlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgcHN0bXQtPmVsaWRlZE5vZGVzKQorCXsK KwkJaWYgKG4tPnBsYW5fbm9kZV9pZCA9PSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQllbGlkZWRf bm9kZSA9IG47CisJfQorCisJcmV0dXJuIGVsaWRlZF9ub2RlOworfQorCisvKgorICogQ2VydGFp biBwbGFuIG5vZGVzIGNhbiByZWZlciB0byBhIHNldCBvZiBSVElzLiBFeHRyYWN0IGFuZCByZXR1 cm4gdGhlIHNldC4KKyAqLworQml0bWFwc2V0ICoKK3BncGFfcmVsaWRzKFBsYW4gKnBsYW4pCit7 CisJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQlyZXR1cm4gKChSZXN1bHQgKikgcGxhbiktPnJl bGlkczsKKwllbHNlIGlmIChJc0EocGxhbiwgRm9yZWlnblNjYW4pKQorCQlyZXR1cm4gKChGb3Jl aWduU2NhbiAqKSBwbGFuKS0+ZnNfcmVsaWRzOworCWVsc2UgaWYgKElzQShwbGFuLCBBcHBlbmQp KQorCQlyZXR1cm4gKChBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkczsKKwllbHNlIGlmIChJc0Eo cGxhbiwgTWVyZ2VBcHBlbmQpKQorCQlyZXR1cm4gKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBw cmVsaWRzOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBFeHRyYWN0IHRoZSBzY2FubmVk IFJUSSBmcm9tIGEgcGxhbiBub2RlLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGVyZSBpc24ndCBv bmUuCisgKi8KK0luZGV4CitwZ3BhX3NjYW5yZWxpZChQbGFuICpwbGFuKQoreworCXN3aXRjaCAo bm9kZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9TZXFTY2FuOgorCQljYXNlIFRfU2FtcGxlU2Nh bjoKKwkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgorCQljYXNlIFRfVGlkU2NhbjoKKwkJY2FzZSBU X1RpZFJhbmdlU2NhbjoKKwkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKwkJY2FzZSBUX0Z1bmN0aW9u U2NhbjoKKwkJY2FzZSBUX1RhYmxlRnVuY1NjYW46CisJCWNhc2UgVF9WYWx1ZXNTY2FuOgorCQlj YXNlIFRfQ3RlU2NhbjoKKwkJY2FzZSBUX05hbWVkVHVwbGVzdG9yZVNjYW46CisJCWNhc2UgVF9X b3JrVGFibGVTY2FuOgorCQljYXNlIFRfRm9yZWlnblNjYW46CisJCWNhc2UgVF9DdXN0b21TY2Fu OgorCQljYXNlIFRfSW5kZXhTY2FuOgorCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKKwkJCXJldHVy biAoKFNjYW4gKikgcGxhbiktPnNjYW5yZWxpZDsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOwor CX0KK30KKworLyoKKyAqIENyZWF0ZSBhIHBncGFfcXVlcnlfZmVhdHVyZSBhbmQgYWRkIGl0IHRv IHRoZSBsaXN0IG9mIGFsbCBxdWVyeSBmZWF0dXJlcworICogZm9yIHRoaXMgcGxhbi4KKyAqLwor c3RhdGljIHBncGFfcXVlcnlfZmVhdHVyZSAqCitwZ3BhX2FkZF9mZWF0dXJlKHBncGFfcGxhbl93 YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCSBwZ3BhX3FmX3R5cGUgdHlwZSwgUGxhbiAqcGxh bikKK3sKKwlwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKnFmID0gcGFsbG9jMF9vYmplY3QocGdwYV9xdWVy eV9mZWF0dXJlKTsKKworCXFmLT50eXBlID0gdHlwZTsKKwlxZi0+cGxhbiA9IHBsYW47CisKKwl3 YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3FmLT50eXBlXSA9CisJCWxhcHBlbmQod2Fsa2VyLT5xdWVy eV9mZWF0dXJlc1txZi0+dHlwZV0sIHFmKTsKKworCXJldHVybiBxZjsKK30KKworLyoKKyAqIEFk ZCBhIHNpbmdsZSBSVEkgdG8gZWFjaCBhY3RpdmUgcXVlcnkgZmVhdHVyZS4KKyAqLworc3RhdGlj IHZvaWQKK3BncGFfcWZfYWRkX3J0aShMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIEluZGV4 IHJ0aSkKK3sKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBhY3RpdmVfcXVl cnlfZmVhdHVyZXMpCisJeworCQlxZi0+cmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocWYtPnJlbGlk cywgcnRpKTsKKwl9Cit9CisKKy8qCisgKiBBZGQgYSBzZXQgb2YgUlRJcyB0byBlYWNoIGFjdGl2 ZSBxdWVyeSBmZWF0dXJlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9xZl9hZGRfcnRpcyhMaXN0 ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIEJpdG1hcHNldCAqcmVsaWRzKQoreworCWZvcmVhY2hf cHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcykKKwl7CisJ CXFmLT5yZWxpZHMgPSBibXNfYWRkX21lbWJlcnMocWYtPnJlbGlkcywgcmVsaWRzKTsKKwl9Cit9 CisKKy8qCisgKiBBZGQgUlRJcyBkaXJlY3RseSBjb250YWluZWQgaW4gYSBwbGFuIG5vZGUgdG8g ZWFjaCBhY3RpdmUgcXVlcnkgZmVhdHVyZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcWZfYWRk X3BsYW5fcnRpcyhMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIFBsYW4gKnBsYW4pCit7CisJ Qml0bWFwc2V0ICAqcmVsaWRzOworCUluZGV4CQlydGk7CisKKwlpZiAoKHJlbGlkcyA9IHBncGFf cmVsaWRzKHBsYW4pKSAhPSBOVUxMKQorCQlwZ3BhX3FmX2FkZF9ydGlzKGFjdGl2ZV9xdWVyeV9m ZWF0dXJlcywgcmVsaWRzKTsKKwllbHNlIGlmICgocnRpID0gcGdwYV9zY2FucmVsaWQocGxhbikp ICE9IDApCisJCXBncGFfcWZfYWRkX3J0aShhY3RpdmVfcXVlcnlfZmVhdHVyZXMsIHJ0aSk7Cit9 CisKKy8qCisgKiBJZiB3ZSBnZW5lcmF0ZWQgcGxhbiBhZHZpY2UgdXNpbmcgdGhlIHByb3ZpZGVk IHdhbGtlciBvYmplY3QgYW5kIGFycmF5CisgKiBvZiBpZGVudGlmaWVycywgd291bGQgd2UgZ2Vu ZXJhdGUgdGhlIHNwZWNpZmllZCB0YWcvdGFyZ2V0IGNvbWJpbmF0aW9uPworICoKKyAqIElmIHll cywgdGhlIHBsYW4gY29uZm9ybXMgdG8gdGhlIGFkdmljZTsgaWYgbm8sIGl0IGRvZXMgbm90LiBO b3RlIHRoYXQKKyAqIHdlIGhhdmUga25vdyB3YXkgb2Yga25vd2luZyB3aGV0aGVyIHRoZSBwbGFu bmVyIHdhcyBmb3JjZWQgdG8gZW1pdCBhIHBsYW4KKyAqIHRoYXQgY29uZm9ybWVkIHRvIHRoZSBh ZHZpY2Ugb3IganVzdCBoYXBwZW5lZCB0byBkbyBzby4KKyAqLworYm9vbAorcGdwYV93YWxrZXJf d291bGRfYWR2aXNlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJIHBn cGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkgcGdwYV9hZHZpY2VfdGFnX3R5 cGUgdGFnLAorCQkJCQkJIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCUluZGV4CQly dGFibGVfbGVuZ3RoID0gbGlzdF9sZW5ndGgod2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwlCaXRt YXBzZXQgICpyZWxpZHMgPSBOVUxMOworCisJaWYgKHRhZyA9PSBQR1BBX1RBR19KT0lOX09SREVS KQorCXsKKwkJZm9yZWFjaF9wdHIocGdwYV91bnJvbGxlZF9qb2luLCB1am9pbiwgd2Fsa2VyLT50 b3BsZXZlbF91bnJvbGxlZF9qb2lucykKKwkJeworCQkJaWYgKHBncGFfd2Fsa2VyX2pvaW5fb3Jk ZXJfbWF0Y2hlcyh1am9pbiwgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJICAgcnRfaWRlbnRp ZmllcnMsIHRhcmdldCwgdHJ1ZSkpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklF UikKKwl7CisJCUluZGV4CQlydGk7CisKKwkJcnRpID0gcGdwYV93YWxrZXJfZ2V0X3J0aShydGFi bGVfbGVuZ3RoLCBydF9pZGVudGlmaWVycywgJnRhcmdldC0+cmlkKTsKKwkJcmVsaWRzID0gYm1z X21ha2Vfc2luZ2xldG9uKHJ0aSk7CisJfQorCWVsc2UKKwl7CisJCUFzc2VydCh0YXJnZXQtPnR0 eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCk7CisJCWZvcmVhY2hfcHRyKHBncGFfYWR2 aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlJbmRl eAkJcnRpOworCisJCQlBc3NlcnQoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9J REVOVElGSUVSKTsKKwkJCXJ0aSA9IHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKHJ0 YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJ CSAgICZjaGlsZF90YXJnZXQtPnJpZCk7CisJCQlpZiAocnRpID09IDApCisJCQkJZWxvZyhFUlJP UiwgImNhbm5vdCBkZXRlcm1pbmUgUlRJIGZvciBhZHZpY2UgdGFyZ2V0Iik7CisJCQlyZWxpZHMg PSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHJ0aSk7CisJCX0KKwl9CisKKwlzd2l0Y2ggKHRhZykK Kwl7CisJCWNhc2UgUEdQQV9UQUdfSk9JTl9PUkRFUjoKKwkJCS8qIHNob3VsZCBoYXZlIGJlZW4g aGFuZGxlZCBhYm92ZSAqLworCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJyZWFrOworCQljYXNlIFBH UEFfVEFHX0JJVE1BUF9IRUFQX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNf c2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5fQklUTUFQX0hFQVAsCisJCQkJCQkJ CQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiBw Z3BhX3dhbGtlcl9jb250YWluc19zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkJIFBHUEFfU0NBTl9G T1JFSUdOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19JTkRFWF9PTkxZ X1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJ CQkJCQkJCSBQR1BBX1NDQU5fSU5ERVhfT05MWSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNh c2UgUEdQQV9UQUdfSU5ERVhfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19z Y2FuKHdhbGtlciwKKwkJCQkJCQkJCQkJIFBHUEFfU0NBTl9JTkRFWCwKKwkJCQkJCQkJCQkJIHJl bGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfUEFSVElUSU9OV0lTRToKKwkJCXJldHVybiBwZ3BhX3dh bGtlcl9jb250YWluc19zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkJIFBHUEFfU0NBTl9QQVJUSVRJ T05XSVNFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19TRVFfU0NBTjoK KwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkJ IFBHUEFfU0NBTl9TRVEsCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1RJ RF9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJ CQkJCQkJCQkgUEdQQV9TQ0FOX1RJRCwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQ QV9UQUdfR0FUSEVSOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUod2Fs a2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX0dBVEhFUiwKKwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJ CWNhc2UgUEdQQV9UQUdfR0FUSEVSX01FUkdFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRh aW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX0dBVEhFUl9NRVJHRSwKKwkJ CQkJCQkJCQkJCXJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRToK KwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJ CQkJCVBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFLAorCQkJCQkJCQkJCQkJcmVsaWRzKTsKKwkJ Y2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29u dGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfU0VNSUpPSU5fVU5JUVVF LAorCQkJCQkJCQkJCQkJcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQly ZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RS QVRfSEFTSF9KT0lOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19NRVJH RV9KT0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4o d2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkUsCisJCQkJ CQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU46CisJCQly ZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RS QVRfTUVSR0VfSk9JTl9QTEFJTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9U QUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFp bnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJ WkUsCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01F TU9JWkU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJ CQkJCQkJCSBKU1RSQVRfTkVTVEVEX0xPT1BfTUVNT0laRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7 CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4gcGdwYV93YWxr ZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RSQVRfTkVTVEVEX0xPT1Bf UExBSU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05PX0dBVEhFUjoK KwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19ub19nYXRoZXIod2Fsa2VyLCByZWxpZHMp OworCX0KKworCS8qIHNob3VsZCBub3QgZ2V0IGhlcmUgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisK Ky8qCisgKiBEb2VzIGFuIHVucm9sbGVkIGpvaW4gbWF0Y2ggdGhlIGpvaW4gb3JkZXIgc3BlY2lm aWVkIGJ5IGFuIGFkdmljZSB0YXJnZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9q b2luX29yZGVyX21hdGNoZXMocGdwYV91bnJvbGxlZF9qb2luICp1am9pbiwKKwkJCQkJCQkgICBJ bmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRp ZmllcnMsCisJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJCQkJICAg Ym9vbCB0b3BsZXZlbCkKK3sKKwlpbnQJCW5jaGlsZHJlbiA9IGxpc3RfbGVuZ3RoKHRhcmdldC0+ Y2hpbGRyZW4pOworCisJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJF RF9MSVNUKTsKKworCS8qIEF0IHRvcGxldmVsLCB3ZSBhbGxvdyBhIHByZWZpeCBtYXRjaC4gKi8K KwlpZiAodG9wbGV2ZWwpCisJeworCQlpZiAobmNoaWxkcmVuID4gdWpvaW4tPm5pbm5lciArIDEp CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCWlmIChuY2hpbGRyZW4gIT0gdWpv aW4tPm5pbm5lciArIDEpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogT3V0ZXJtb3N0IHJl bCBtdXN0IG1hdGNoLiAqLworCWlmICghcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21l bWJlcigmdWpvaW4tPm91dGVyLAorCQkJCQkJCQkJCQkgICBydGFibGVfbGVuZ3RoLAorCQkJCQkJ CQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICAgbGluaXRpYWwodGFyZ2V0LT5j aGlsZHJlbikpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBFYWNoIGlubmVyIHJlbCBtdXN0IG1h dGNoLiAqLworCWZvciAoaW50IG4gPSAwOyBuIDwgbmNoaWxkcmVuIC0gMTsgKytuKQorCXsKKwkJ cGdwYV9hZHZpY2VfdGFyZ2V0ICpjaGlsZF90YXJnZXQgPSBsaXN0X250aCh0YXJnZXQtPmNoaWxk cmVuLCBuICsgMSk7CisKKwkJaWYgKCFwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNfbWVt YmVyKCZ1am9pbi0+aW5uZXJbbl0sCisJCQkJCQkJCQkJCQkgICBydGFibGVfbGVuZ3RoLAorCQkJ CQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkgICBjaGlsZF90YXJnZXQp KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogRG9l cyBvbmUgbWVtYmVyIG9mIGFuIHVucm9sbGVkIGpvaW4gbWF0Y2ggYW4gYWR2aWNlIHRhcmdldD8K KyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlc19tZW1iZXIo cGdwYV9qb2luX21lbWJlciAqbWVtYmVyLAorCQkJCQkJCQkJICBJbmRleCBydGFibGVfbGVuZ3Ro LAorCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJ ICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlCaXRtYXBzZXQgICpyZWxpZHMgPSBO VUxMOworCisJaWYgKG1lbWJlci0+dW5yb2xsZWRfam9pbiAhPSBOVUxMKQorCXsKKwkJaWYgKHRh cmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKQorCQkJcmV0dXJuIGZhbHNl OworCQlyZXR1cm4gcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKG1lbWJlci0+dW5yb2xs ZWRfam9pbiwKKwkJCQkJCQkJCQkJICBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkgIHJ0X2lk ZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgIHRhcmdldCwKKwkJCQkJCQkJCQkJICBmYWxzZSk7CisJ fQorCisJQXNzZXJ0KG1lbWJlci0+c2NhbiAhPSBOVUxMKTsKKwlzd2l0Y2ggKHRhcmdldC0+dHR5 cGUpCisJeworCQljYXNlIFBHUEFfVEFSR0VUX09SREVSRURfTElTVDoKKwkJCS8qIENvdWxkIG9u bHkgbWF0Y2ggYW4gdW5yb2xsZWQgam9pbiAqLworCQkJcmV0dXJuIGZhbHNlOworCisJCWNhc2Ug UEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1Q6CisJCQl7CisJCQkJZm9yZWFjaF9wdHIocGdwYV9h ZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCQkJeworCQkJ CQlJbmRleAkJcnRpOworCisJCQkJCXJ0aSA9IHBncGFfd2Fsa2VyX2dldF9ydGkocnRhYmxlX2xl bmd0aCwgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCSAgJmNoaWxkX3RhcmdldC0+cmlkKTsK KwkJCQkJcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCBydGkpOworCQkJCX0KKwkJCX0K KworCQljYXNlIFBHUEFfVEFSR0VUX0lERU5USUZJRVI6CisJCQl7CisJCQkJSW5kZXgJCXJ0aTsK KworCQkJCXJ0aSA9IHBncGFfd2Fsa2VyX2dldF9ydGkocnRhYmxlX2xlbmd0aCwgcnRfaWRlbnRp ZmllcnMsCisJCQkJCQkJCQkJICAmdGFyZ2V0LT5yaWQpOworCQkJCXJlbGlkcyA9IGJtc19tYWtl X3NpbmdsZXRvbihydGkpOworCQkJfQorCX0KKworCXJldHVybiBibXNfZXF1YWwobWVtYmVyLT5z Y2FuLT5yZWxpZHMsIHJlbGlkcyk7Cit9CisKKy8qCisgKiBEb2VzIHRoaXMgd2Fsa2VyIHNheSB0 aGF0IHRoZSBnaXZlbiBzY2FuIHN0cmF0ZWd5IHNob3VsZCBiZSB1c2VkIGZvciB0aGUKKyAqIGdp dmVuIHJlbGlkIHNldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2NvbnRhaW5zX3Nj YW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgIHBncGFfc2Nhbl9z dHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJTGlzdAkg ICAqc2NhbnMgPSB3YWxrZXItPnNjYW5zW3N0cmF0ZWd5XTsKKworCWZvcmVhY2hfcHRyKHBncGFf c2Nhbiwgc2Nhbiwgc2NhbnMpCisJeworCQkvKgorCQkgKiBYWFguIElmIHRoaXMgaXMgaW5kZXgt cmVsYXRlZCBhZHZpY2UsIHdlIHNob3VsZCBhbHNvIHZhbGlkYXRlIHRoYXQKKwkJICogdGhlIGFk dmljZSB0YXJnZXQncyBpbmRleCB0YXJnZXQgbWF0Y2hlcyB0aGUgUGxhbiB0cmVlLgorCQkgKi8K KwkJaWYgKGJtc19lcXVhbChzY2FuLT5yZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIHRoaXMgd2Fsa2VyIHNheSB0 aGF0IHRoZSBnaXZlbiBxdWVyeSBmZWF0dXJlIGFwcGxpZXMgdG8gdGhlIGdpdmVuCisgKiByZWxp ZCBzZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBwZ3BhX3FmX3R5cGUgdHlw ZSwKKwkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJTGlzdAkgICAqcXVlcnlfZmVhdHVy ZXMgPSB3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3R5cGVdOworCisJZm9yZWFjaF9wdHIocGdwYV9x dWVyeV9mZWF0dXJlLCBxZiwgcXVlcnlfZmVhdHVyZXMpCisJeworCQlpZiAoYm1zX2VxdWFsKHFm LT5yZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7 Cit9CisKKy8qCisgKiBEb2VzIHRoZSB3YWxrZXIgc2F5IHRoYXQgdGhlIGdpdmVuIGpvaW4gc3Ry YXRlZ3kgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZQorICogZ2l2ZW4gcmVsaWQgc2V0PworICovCitz dGF0aWMgYm9vbAorcGdwYV93YWxrZXJfY29udGFpbnNfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQgKndhbGtlciwKKwkJCQkJCSAgcGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJ CQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlMaXN0CSAgICpqb2luX3N0cmF0ZWdpZXMgPSB3 YWxrZXItPmpvaW5fc3RyYXRlZ2llc1tzdHJhdGVneV07CisKKwlmb3JlYWNoX3B0cihCaXRtYXBz ZXQsIGpzcmVsaWRzLCBqb2luX3N0cmF0ZWdpZXMpCisJeworCQlpZiAoYm1zX2VxdWFsKGpzcmVs aWRzLCByZWxpZHMpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQor CisvKgorICogRG9lcyB0aGUgd2Fsa2VyIHNheSB0aGF0IHRoZSBnaXZlbiByZWxpZHMgc2hvdWxk IGJlIG1hcmtlZCBhcyBOT19HQVRIRVI/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9j b250YWluc19ub19nYXRoZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQkJICAgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJcmV0dXJuIGJtc19pc19zdWJzZXQocmVsaWRz LCB3YWxrZXItPm5vX2dhdGhlcl9zY2Fucyk7Cit9CisKKy8qCisgKiBDb252ZW5pZW5jZSBmdW5j dGlvbiB0byBjb252ZXJ0IGEgcmVsYXRpb24gaWRlbnRpZmllciB0byBhbiBSVEkuCisgKgorICog V2UgdGhyb3cgYW4gZXJyb3IgaGVyZSBiZWNhdXNlIHdlIGV4cGVjdCB0aGlzIHRvIGJlIHVzZWQg b24gc3lzdGVtLWdlbmVyYXRlZAorICogYWR2aWNlLiBIZW5jZSwgZmFpbHVyZSBoZXJlIGluZGlj YXRlcyBhbiBhZHZpY2UgZ2VuZXJhdGlvbiBidWcuCisgKi8KK3N0YXRpYyBJbmRleAorcGdwYV93 YWxrZXJfZ2V0X3J0aShJbmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQlwZ3BhX2lkZW50aWZpZXIg KnJ0X2lkZW50aWZpZXJzLAorCQkJCQlwZ3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwlJbmRleAkJ cnRpOworCisJcnRpID0gcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lkZW50aWZpZXIocnRhYmxlX2xl bmd0aCwKKwkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkgICByaWQpOwor CWlmIChydGkgPT0gMCkKKwkJZWxvZyhFUlJPUiwgImNhbm5vdCBkZXRlcm1pbmUgUlRJIGZvciBh ZHZpY2UgdGFyZ2V0Iik7CisJcmV0dXJuIHJ0aTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93 YWxrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDY1ODRjMDE0 YjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2Vy LmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfd2Fs a2VyLmgKKyAqCSAgUGxhbiB0cmVlIGl0ZXJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAx Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpZm5kZWYgUEdQQV9XQUxLRVJfSAorI2RlZmluZSBQR1BBX1dBTEtFUl9ICisKKyNp bmNsdWRlICJwZ3BhX2FzdC5oIgorI2luY2x1ZGUgInBncGFfam9pbi5oIgorI2luY2x1ZGUgInBn cGFfc2Nhbi5oIgorCisvKgorICogV2UgdXNlIHRoZSB0ZXJtICJxdWVyeSBmZWF0dXJlIiB0byBy ZWZlciB0byBwbGFuIG5vZGVzIHRoYXQgYXJlIGludGVyZXN0aW5nCisgKiBpbiB0aGUgZm9sbG93 aW5nIHdheTogdG8gZ2VuZXJhdGUgYWR2aWNlLCB3ZSdsbCBuZWVkIHRvIGtub3cgdGhlIHNldCBv ZgorICogc2FtZS1zdWJxdWVyeSwgbm9uLWpvaW4gUlRJcyBvY2N1cmluZyBhdCBvciBiZWxvdyB0 aGF0IHBsYW4gbm9kZSwgd2l0aG91dAorICogYWRtaXh0dXJlIG9mIHBhcmVudCBhbmQgY2hpbGQg UlRJcy4KKyAqCisgKiBGb3IgZXhhbXBsZSwgR2F0aGVyIG5vZGVzLCBkZXNpZ2luYXRlZCBieSBQ R1BBUUZfR0FUSEVSLCBhbmQgR2F0aGVyIE1lcmdlCisgKiBub2RlcywgZGVzaWduYXRlZCBieSBQ R1BBUUZfR0FUSEVSX01FUkdFLCBhcmUgcXVlcnkgZmVhdHVyZXMsIGJlY2F1c2Ugd2UnbGwKKyAq IHdhbnQgdG8gYWRtaXQgc29tZSBraW5kIG9mIGFkdmljZSB0aGF0IGRlc2NyaWJlcyB0aGUgcG9y dGlvbiBvZiB0aGUgcGxhbgorICogdHJlZSB0aGF0IGFwcGVhcnMgYmVuZWF0aCB0aG9zZSBub2Rl cy4KKyAqCisgKiBFYWNoIHNlbWlqb2luIGNhbiBiZSBpbXBsZW1lbnRlZCBlaXRoZXIgYnkgZGly ZWN0bHkgcGVyZm9ybWluZyBhIHNlbWlqb2luLAorICogb3IgYnkgbWFraW5nIG9uZSBzaWRlIHVu aXF1ZSBhbmQgdGhlbiBwZXJmb3JtaW5nIGEgbm9ybWFsIGpvaW4uIEVpdGhlciB3YXksCisgKiB3 ZSB1c2UgYSBxdWVyeSBmZWF0dXJlIHRvIG5vdGljZSB3aGF0IGRlY2lzaW9uIHdhcyBtYWRlLCBz byB0aGF0IHdlIGNhbgorICogZGVzY3JpYmUgaXQgYnkgZW51bWVyYXRpbmcgdGhlIFJUSXMgb24g dGhhdCBzaWRlIG9mIHRoZSBqb2luLgorICoKKyAqIFRvIGVsYWJvcmF0ZSBvbiB0aGUgIm5vIGFk bWl4dHVyZSBvZiBwYXJlbnQgYW5kIGNoaWxkIFJUSXMiIHJ1bGUsIGluIGFsbCBvZgorICogdGhl c2UgY2FzZXMsIGlmIHRoZSBlbnRpcmV0eSBvZiBhbiBpbmhlcml0YW5jZSBoaWVyYXJjaHkgYXBw ZWFycyBiZW5lYXRoCisgKiB0aGUgcXVlcnkgZmVhdHVyZSwgd2Ugb25seSB3YW50IHRvIG5hbWUg dGhlIHBhcmVudCB0YWJsZS4gQnV0IGl0J3MgYWxzbworICogcG9zc2libGUgdG8gaGF2ZSBjYXNl cyB3aGVyZSB3ZSBtdXN0IG5hbWUgY2hpbGQgdGFibGVzLiBUaGlzIGlzIHBhcnRpY3VsYXJseQor ICogbGlrZWx5IHRvIGhhcHBlbiB3aGVuIHBhcnRpdGlvbndpc2Ugam9pbiBpcyBpbiB1c2UsIGJ1 dCBjb3VsZCBoYXBwZW4gZm9yCisgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIGV2ZW4gd2l0aG91 dCB0aGF0LCBpZiBvbmUgb2YgdGhvc2UgYXBwZWFycyBiZWxvdworICogYW4gQXBwZW5kIG9yIE1l cmdlQXBwZW5kIG5vZGUgZm9yIGEgc2luZ2xlIHRhYmxlLgorICovCit0eXBlZGVmIGVudW0gcGdw YV9xZl90eXBlCit7CisJUEdQQVFGX0dBVEhFUiwKKwlQR1BBUUZfR0FUSEVSX01FUkdFLAorCVBH UEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFLAorCVBHUEFRRl9TRU1JSk9JTl9VTklRVUUKKwkvKiB1 cGRhdGUgTlVNX1BHUEFfUUZfVFlQRVMgaWYgeW91IGFkZCBhbnl0aGluZyBoZXJlICovCit9IHBn cGFfcWZfdHlwZTsKKworI2RlZmluZSBOVU1fUEdQQV9RRl9UWVBFUyAoKGludCkgUEdQQVFGX1NF TUlKT0lOX1VOSVFVRSArIDEpCisKKy8qCisgKiBGb3IgZWFjaCBxdWVyeSBmZWF0dXJlLCB3ZSBr ZWVwIHRyYWNrIG9mIHRoZSBmZWF0dXJlIHR5cGUgYW5kIHRoZSBzZXQgb2YKKyAqIHJlbGlkcyB0 aGF0IHdlIGZvdW5kIHVuZGVybmVhdGggdGhlIHJlbGV2YW50IHBsYW4gbm9kZS4gU2VlIHRoZSBj b21tZW50cworICogb24gcGdwYV9xZl90eXBlLCBhYm92ZSwgZm9yIGFkZGl0aW9uYWwgZGV0YWls cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9xdWVyeV9mZWF0dXJlCit7CisJcGdwYV9xZl90 eXBlIHR5cGU7CisJUGxhbgkgICAqcGxhbjsKKwlCaXRtYXBzZXQgICpyZWxpZHM7Cit9IHBncGFf cXVlcnlfZmVhdHVyZTsKKworLyoKKyAqIENvbnRleHQgb2JqZWN0IGZvciBwbGFuIHRyZWUgd2Fs ay4KKyAqCisgKiBwc3RtdCBpcyB0aGUgUGxhbm5lZFN0bXQgd2UncmUgc3R1ZHlpbmcuCisgKgor ICogc2NhbnMgaXMgYW4gYXJyYXkgb2YgbGlzdHMgb2YgcGdwYV9zY2FuIG9iamVjdHMuIFRoZSBh cnJheSBpcyBpbmRleGVkIGJ5CisgKiB0aGUgc2NhbidzIHBncGFfc2Nhbl9zdHJhdGVneS4KKyAq CisgKiBub19nYXRoZXJfc2NhbnMgaXMgdGhlIHNldCBvZiBzY2FuIFJUSXMgdGhhdCBkbyBub3Qg YXBwZWFyIGJlbmVhdGggYW55CisgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUuCisgKgor ICogdG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMgaXMgYSBsaXN0IG9mIGFsbCBwZ3BhX3Vucm9sbGVk X2pvaW4gb2JqZWN0cyB0aGF0CisgKiBhcmUgbm90IGEgY2hpbGQgb2Ygc29tZSBvdGhlciBwZ3Bh X3Vucm9sbGVkX2pvaW4uCisgKgorICogam9pbl9zdHJhdGVneSBpcyBhbiBhcnJheSBvZiBsaXN0 cyBvZiBCaXRtYXBzZXQgb2JqZWN0cy4gRWFjaCBCaXRtYXBzZXQKKyAqIGlzIHRoZSBzZXQgb2Yg cmVsaWRzIHRoYXQgYXBwZWFycyBvbiB0aGUgaW5uZXIgc2lkZSBvZiBzb21lIGpvaW4gKGV4Y2x1 ZGluZworICogUlRJcyBmcm9tIHBhcnRpdGlvbiBjaGlsZHJlbiBhbmQgc3VicXVlcmllcykuIFRo ZSBhcnJheSBpcyBpbmRleGVkIGJ5CisgKiBwZ3BhX2pvaW5fc3RyYXRlZ3kuCisgKgorICogcXVl cnlfZmVhdHVyZXMgaXMgYW4gYXJyYXkgbGlzdHMgb2YgcGdwYV9xdWVyeV9mZWF0dXJlIG9iamVj dHMsIGluZGV4ZWQKKyAqIGJ5IHBncGFfcWZfdHlwZS4KKyAqCisgKiBmdXR1cmVfcXVlcnlfZmVh dHVyZXMgaXMgb25seSB1c2VkIGR1cmluZyB0aGUgcGxhbiB0cmVlIHdhbGsgYW5kIHNob3VsZAor ICogYmUgZW1wdHkgd2hlbiB0aGUgdHJlZSB3YWxrIGNvbmNsdWRlcy4gSXQgaXMgYSBsaXN0IG9m IHBncGFfcXVlcnlfZmVhdHVyZQorICogb2JqZWN0cyBmb3IgUGxhbiBub2RlcyB0aGF0IHRoZSBw bGFuIHRyZWUgd2FsayBoYXMgbm90IHlldCBlbmNvdW50ZXJlZDsKKyAqIHdoZW4gZW5jb3VudGVy ZWQsIHRoZXkgd2lsbCBiZSBtb3ZlZCB0byB0aGUgbGlzdCBvZiBhY3RpdmUgcXVlcnkgZmVhdHVy ZXMKKyAqIHRoYXQgaXMgcHJvcGFnYXRlZCB2aWEgdGhlIGNhbGwgc3RhY2suCisgKi8KK3R5cGVk ZWYgc3RydWN0IHBncGFfcGxhbl93YWxrZXJfY29udGV4dAoreworCVBsYW5uZWRTdG10ICpwc3Rt dDsKKwlMaXN0CSAgICpzY2Fuc1tOVU1fUEdQQV9TQ0FOX1NUUkFURUdZXTsKKwlCaXRtYXBzZXQg ICpub19nYXRoZXJfc2NhbnM7CisJTGlzdAkgICAqdG9wbGV2ZWxfdW5yb2xsZWRfam9pbnM7CisJ TGlzdAkgICAqam9pbl9zdHJhdGVnaWVzW05VTV9QR1BBX0pPSU5fU1RSQVRFR1ldOworCUxpc3QJ ICAgKnF1ZXJ5X2ZlYXR1cmVzW05VTV9QR1BBX1FGX1RZUEVTXTsKKwlMaXN0CSAgICpmdXR1cmVf cXVlcnlfZmVhdHVyZXM7Cit9IHBncGFfcGxhbl93YWxrZXJfY29udGV4dDsKKworZXh0ZXJuIHZv aWQgcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJ CQkJCQkgUGxhbm5lZFN0bXQgKnBzdG10KTsKKworZXh0ZXJuIHZvaWQgcGdwYV9hZGRfZnV0dXJl X2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQlwZ3Bh X3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCVBsYW4gKnBsYW4pOworCitleHRlcm4gRWxpZGVkTm9k ZSAqcGdwYV9sYXN0X2VsaWRlZF9ub2RlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqcGxhbik7 CitleHRlcm4gQml0bWFwc2V0ICpwZ3BhX3JlbGlkcyhQbGFuICpwbGFuKTsKK2V4dGVybiBJbmRl eCBwZ3BhX3NjYW5yZWxpZChQbGFuICpwbGFuKTsKKworZXh0ZXJuIGJvb2wgcGdwYV93YWxrZXJf d291bGRfYWR2aXNlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJ IHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkgcGdwYV9hZHZpY2Vf dGFnX3R5cGUgdGFnLAorCQkJCQkJCQkJIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKKwor I2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3Fs IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmIxNWUxOGU5OGUKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsCkBAIC0wLDAgKzEsNzUgQEAKK0xP QUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVy ID0gMTsKK1NFVCBwYXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKK1NFVCBwYXJhbGxlbF90dXBsZV9j b3N0ID0gMDsKK1NFVCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplID0gMDsKKworQ1JFQVRF IFRBQkxFIGd0X2RpbSAoaWQgc2VyaWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBndF9kaW0gKGRpbSkgU0VM RUNUIHJhbmRvbSgpOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVN IEFOQUxZWkUgZ3RfZGltOworCitDUkVBVEUgVEFCTEUgZ3RfZmFjdCAoCisJaWQgaW50IG5vdCBu dWxsLAorCWRpbV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgZ3RfZGltIChpZCkKKykg V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZmFjdAor CVNFTEVDVCBnLCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFD VVVNIEFOQUxZWkUgZ3RfZmFjdDsKKworLS0gQnkgZGVmYXVsdCwgd2UgZXhwZWN0IEdhdGhlciBN ZXJnZSB3aXRoIGEgcGFyYWxsZWwgaGFzaCBqb2luLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworCistLSBGb3JjZSBHYXRoZXIgb3IgR2F0aGVyIE1l cmdlIG9mIGJvdGggcmVsYXRpb25zIHRvZ2V0aGVyLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gRm9yY2UgYSBzZXBhcmF0ZSBH YXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9wZXJhdGlvbiBmb3IgZWFjaCByZWxhdGlvbi4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZiBkKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFj dCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihmIGQpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gRm9y Y2UgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9uIG9uZSByZWxhdGlvbiBidXQgbm8gcGFyYWxs ZWxpc20gb24gb3RoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnZ2F0aGVyX21lcmdlKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2dhdGhlcl9tZXJnZShkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdnYXRoZXIoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnZ2F0aGVyKGQpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIG5vIEdhdGhl ciBvciBHYXRoZXIgTWVyZ2UgdXNlIGF0IGFsbC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdub19nYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIEdh dGhlciBNZXJnZSB3aXRob3V0IHRoZSBPUkRFUiBCWSBjbGF1c2UsIGJ1dCBqdXN0IEdhdGhlciBp cyBPSy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJf bWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0 X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvam9pbl9vcmRlci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjVhYTJmYzYyZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvam9pbl9vcmRlci5zcWwKQEAgLTAsMCArMSw5NiBAQAorTE9BRCAncGdfcGxhbl9hZHZp Y2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUg VEFCTEUgam9fZGltMSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGlu dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19k aW0xIChpZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBn LCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0g QU5BTFlaRSBqb19kaW0xOworQ1JFQVRFIFRBQkxFIGpvX2RpbTIgKGlkIGludGVnZXIgcHJpbWFy eSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcs ICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTI7CisKK0NSRUFURSBUQUJM RSBqb19mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRlZ2VyIG5vdCBu dWxsIHJlZmVyZW5jZXMgam9fZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBub3QgbnVsbCBy ZWZlcmVuY2VzIGpvX2RpbTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBqb19mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwgKGclMTAwKSsx IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZmFj dDsKKworLS0gV2UgZXhwZWN0IHRvIGpvaW4gdG8gZDIgZmlyc3QgYW5kIHRoZW4gZDEsIHNpbmNl IHRoZSBjb25kaXRpb24gb24gZDIKKy0tIGlzIG1vcmUgc2VsZWN0aXZlLgorRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lO IGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBP TiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0g Rm9yY2UgYSBmZXcgZGlmZmVyZW50IGpvaW4gb3JkZXJzLiBTb21lIG9mIHRoZXNlIGFyZSB2ZXJ5 IGluZWZmaWNpZW50LAorLS0gYnV0IHRoZSBwbGFubmVyIGNvbnNpZGVycyB0aGVtIGFsbCB2aWFi bGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRl cihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5p ZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFs MSA9IDEgQU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdq b2luX29yZGVyKGYgZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9p ZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlX SEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2pvaW5fb3JkZXIoZDEgZiBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04g Zi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBk Mi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIChkMSBkMikpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19k aW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5k aW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitDT01NSVQ7CisK Ky0tIFRoZSB1bnVzdWFsIGZvcm11bGF0aW9uIG9mIHRoaXMgcXVlcnkgaXMgaW50ZW5kZWQgdG8g cHJldmVudCB0aGUgcXVlcnkKKy0tIHBsYW5uZXIgZnJvbSByZWR1Y2luZyB0aGUgRlVMTCBKT0lO IHRvIHNvbWUgb3RoZXIgam9pbiB0eXBlLCBzbyB0aGF0IHdlCistLSBjYW4gdGVzdCB3aGF0IGhh cHBlbnMgd2l0aCBhIGpvaW4gdHlwZSB0aGF0IGNhbm5vdCBiZSByZW9yZGVyZWQuCitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5O RVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAg PSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7 CisKKy0tIFdlIHNob3VsZCBub3QgYmUgYWJsZSB0byBmb3JjZSB0aGUgcGxhbm5lciB0byBqb2lu IGYgdG8gZDEgZmlyc3QsIGJlY2F1c2UKKy0tIHRoYXQgaXMgbm90IGEgdmFsaWQgam9pbiBvcmRl ciwgYnV0IHdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIHRoZSBwbGFubmVyCistLSB0byBtYWtl IGVpdGhlciBkMiBvciBmIHRoZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CistLSBYWFg6IFRoZSBh ZHZpY2UgZmVlZGJhY2sgc2F5cyAncGFydGlhbGx5IG1hdGNoZWQnIGhlcmUgd2hpY2ggaXNuJ3Qg ZXhhY3RseQorLS0gd3JvbmcgZ2l2ZW4gdGhlIHdheSB0aGF0IGZsYWcgaXMgaGFuZGxlZCBpbiB0 aGUgY29kZSwgYnV0IGl0J3MgYXQgdGhlIHZlcnkKKy0tIGxlYXN0IGNvbmZ1c2luZy4gU29tZXRo aW5nIHNob3VsZCBwcm9iYWJseSBiZSBpbXByb3ZlZCBoZXJlLgorU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChq b19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsg MCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5O RVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAg PSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDIgZiBkMSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGlt MSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRp bTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9p ZCBJUyBOVUxMOworQ09NTUlUOworCistLSBYWFg6IGFkZCB0ZXN0cyBmb3Igam9pbiBvcmRlciBw cmVmaXggbWF0Y2hpbmcKKy0tIFhYWDogam9pbl9vcmRlcihqdXN0b25lcmVsKSBzaG91bGRuJ3Qg cmVwb3J0IHBhcnRpYWxseSBtYXRjaGVkCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pv aW5fc3RyYXRlZ3kuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44 ZWI4MjNmMWMwZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3Fs L2pvaW5fc3RyYXRlZ3kuc3FsCkBAIC0wLDAgKzEsNzYgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNl JzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRFIFRB QkxFIGpvaW5fZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvaW5fZGltIChkaW0pIFNF TEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VV TSBBTkFMWVpFIGpvaW5fZGltOworCitDUkVBVEUgVEFCTEUgam9pbl9mYWN0ICgKKwlpZCBpbnQg cHJpbWFyeSBrZXksCisJZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb2luX2Rp bSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRP IGpvaW5fZmFjdAorCVNFTEVDVCBnLCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MDAwKSBnOworQ1JFQVRFIElOREVYIGpvaW5fZmFjdF9kaW1faWQgT04gam9pbl9mYWN0IChkaW1f aWQpOworVkFDVVVNIEFOQUxZWkUgam9pbl9mYWN0OworCistLSBXZSBleHBlY3QgYSBoYXNoIGpv aW4gYnkgZGVmYXVsdC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor CistLSBUcnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2RpbSBh cyB0aGUgaW5uZXIgdGFibGUuCistLSBBbGwgb2YgdGhlc2Ugc2hvdWxkIHdvcmsgZXhjZXB0IGZv ciBNRVJHRV9KT0lOX01BVEVSSUFMSVpFOyB0aGF0IHdpbGwKKy0tIGZhaWwsIGJlY2F1c2UgdGhl IHBsYW5uZXIga25vd3MgdGhhdCBqb2luX2RpbSAoaWQpIGlzIHVuaXF1ZSwgYW5kIHdpbGwKKy0t IHJlZnVzZSB0byBhZGQgbWFyay9yZXN0b3JlIG92ZXJoZWFkLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihkKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0Vf Sk9JTl9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJQUxJ WkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZCknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBm IEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOworCistLSBOb3cgdHJ5IGZvcmNpbmcgZWFj aCBqb2luIG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9mYWN0IGFzIHRoZSBpbm5lcgorLS0gdGFi bGUuIEFsbCBvZiB0aGVzZSBzaG91bGQgd29yay4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdIQVNIX0pPSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdF X0pPSU5fTUFURVJJQUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9 IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fUExB SU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2Zh Y3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpFKGYpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpv aW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdORVNURURfTE9PUF9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKKworLS0gV2UgY2FuJ3QgZm9yY2UgYSBmb3JlaWduIGpv aW4gYmV0d2VlbiB0aGVzZSB0YWJsZXMsIGJlY2F1c2UgdGhleQorLS0gYXJlbid0IGZvcmVpZ24g dGFibGVzLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJ R05fSk9JTigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRp b253aXNlLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNDJjMDYxMTc2MAotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uu c3FsCkBAIC0wLDAgKzEsNzggQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFy YWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9q b2luID0gdHJ1ZTsKKworQ1JFQVRFIFRBQkxFIHB0MSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwg ZGltMSB0ZXh0LCB2YWwxIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBU QUJMRSBwdDFhIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkK KwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYiBQ QVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWMgUEFSVElUSU9O IE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MSAoaWQsIGRpbTEsIHZhbDEpCisJ U0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MTsKKworQ1JFQVRF IFRBQkxFIHB0MiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkK KwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBP RiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBW QUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZS T00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0lOU0VSVCBJTlRPIHB0MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVy IHRleHQgJyB8fCBnLCAoZyAlIDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAw KSBnOworVkFDVVVNIEFOQUxZWkUgcHQyOworCitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2Vy IHByaW1hcnkga2V5LCBkaW0zIHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAo aWQpOworQ1JFQVRFIFRBQkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00g KDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFU RSBUQUJMRSBwdDNiIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAo MjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUg cHQzYyBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwg ZGltMywgdmFsMykKKwlTRUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAl IDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZ WkUgcHQzOworCitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaCAoaWQgaW50ZWdlciBwcmltYXJ5IGtl eSwgZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFU RSBUQUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxV RVMgRlJPTSAoMSkgdG8gKDE1MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAg Rk9SIFZBTFVFUyBGUk9NICgxNTAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdG1pc21hdGNoIChpZCwgZGltbSwgdmFsbSkKKwlT RUxFQ1QgZywgJ3lldCBhbm90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDIpICsgMQorCSAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHRtaXNtYXRjaDsKKwor RVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIs IHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZh bDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisKKy0tIFN1cHByZXNzIHBhcnRpdGlv bndpc2Ugam9pbiwgb3IgZG8gaXQganVzdCBwYXJ0aWFsbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRShwdDEgcHQyIHB0MyknOworRVhQ TEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0 MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEg PSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdDIpIHB0MyknOworRVhQTEFJTiAoUExBTl9B RFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEu aWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwy ID0gMSBBTkQgdmFsMyA9IDE7CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIGEgcGFydGl0aW9u d2lzZSBqb2luIHdpdGggYSBtaXNtYXRjaGVkIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdG1pc21hdGNoKSknOwor RVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdG1p c21hdGNoIFdIRVJFIHB0MS5pZCA9IHB0bWlzbWF0Y2guaWQ7CitDT01NSVQ7CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL3NjYW4uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li42NDIyMDVjYzA5NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL3NjYW4uc3FsCkBAIC0wLDAgKzEsMTMyIEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitT RVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29z dCA9IDAuMTsKK1NFVCByYW5kb21fcGFnZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0 ID0gMDsKK1NFVCBjcHVfaW5kZXhfdHVwbGVfY29zdCA9IDA7CisKK0NSRUFURSBUQUJMRSBzY2Fu X3RhYmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3NvbWUg dGV4dCAnIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElO REVYIHNjYW5fdGFibGVfYiBPTiBzY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVNIEFO QUxZWkUgc2Nhbl90YWJsZTsKKworLS0gU2VxdWVudGlhbCBzY2FuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisKKy0tIEluZGV4IHNj YW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKworLS0gSW5kZXgtb25seSBzY2FuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisK Ky0tIEJpdG1hcCBoZWFwIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworCistLSBU SUQgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworCistLSBUSUQgcmFuZ2Ugc2NhbgorRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJ V0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworCistLSBUcnkgZm9yY2lu ZyBlYWNoIG9mIG91ciB0ZXN0IHF1ZXJpZXMgdG8gdXNlIHRoZSBzY2FuIHR5cGUgdGhleQorLS0g d2FudGVkIHRvIHVzZSBhbnl3YXkuIFRoaXMgc2hvdWxkIHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUg c2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRN QVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3Nv bWUgdGV4dCA4JzsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4o c2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICco MSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworQ09NTUlUOworCistLSBUcnkgdG8gZm9yY2UgYSBm dWxsIHNjYW4gb2YgdGhlIHRhYmxlIHRvIHVzZSBzb21lIG90aGVyIHNjYW4gdHlwZS4gQWxsCist LSBvZiB0aGVzZSB3aWxsIGZhaWwuIEFuIGluZGV4IHNjYW4gb3IgYml0bWFwIGhlYXAgc2NhbiBj b3VsZCBwb3RlbnRpYWxseQorLS0gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgYW5zd2VyLCBidXQgdGhl IHBsYW5uZXIgZG9lcyBub3QgZXZlbiBjb25zaWRlciB0aGVzZQorLS0gcG9zc2liaWxpdGllcyBk dWUgdG8gdGhlIGxhY2sgb2YgYSBXSEVSRSBjbGF1c2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2Fu X3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGU7CitDT01NSVQ7CisKKy0tIFRyeSBhZ2FpbiB0byBmb3JjZSBpbmRleCB1c2Uu IFRoaXMgc2hvdWxkIG5vdyBzdWNjZWVkIGZvciB0aGUgSU5ERVhfU0NBTgorLS0gYW5kIEJJVE1B UF9IRUFQX1NDQU4sIGJ1dCB0aGUgSU5ERVhfT05MWV9TQ0FOIGNhbid0IGJlIGZvcmNlZCBiZWNh dXNlIHRoZQorLS0gcXVlcnkgZmV0Y2hlcyBjb2x1bW5zIG5vdCBpbmNsdWRlZCBpbiB0aGUgaW5k ZXguCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPiAwOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgYSBwcmltYXJ5IGtleSBs b29rdXAgdG8gdXNlIGEgc2VxdWVudGlhbCBzY2FuLCBidXQgd2UKKy0tIGNhbid0IGZvcmNlIGl0 IHRvIHVzZSBhbiBpbmRleC1vbmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1uIGxpc3QpCistLSBv ciBhIFRJRCBzY2FuIChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCkuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2libHkgZG93bmdyYWRl IGFuIGluZGV4LW9ubHkgc2NhbiB0byBhbiBpbmRleCBzY2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZv cmNlIHRoZSB1c2Ugb2YgYW4gaW5kZXggdGhhdCB0aGUgcGxhbm5lciB0aGlua3MgaXMgaW5hcHBs aWNhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgdGhl IHVzZSBvZiBhIHNlcXVlbnRpYWwgc2NhbiBpbiBwbGFjZSBvZiBhIGJpdG1hcCBoZWFwIHNjYW4s CistLSBidXQgYSBwbGFpbiBpbmRleCBzY2FuIG9uIGEgQlJJTiBpbmRleCBpcyBub3QgcG9zc2li bGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4o c2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2Ip JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKK0NPTU1JVDsKKworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2Yg YSBzZXF1ZW50aWFsIHNjYW4gcmF0aGVyIHRoYW4gYSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdl IHNjYW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworQ09NTUlUOworCistLSBUZXN0IGFzc29ydGVk IGluY29ycmVjdCBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4obm90aGluZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FO KHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZ X1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOwpkaWZmIC0t Z2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAppbmRleCBmN2Y3OWZhMDFmNC4uY2RjMGY3OGRmNjEgMTAwNjQ0Ci0t LSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CkBAIC0zOTE4LDYgKzM5MTgsNDMgQEAgcGdfd2NfcHJvYmVmdW5j CiBwZ193Y2hhcgogcGdfd2NoYXJfdGJsCiBwZ3BfYXJtb3JfaGVhZGVyc19zdGF0ZQorcGdwYV9j b2xsZWN0ZWRfYWR2aWNlCitwZ3BhX2FkdmljZV9pdGVtCitwZ3BhX2FkdmljZV90YWdfdHlwZQor cGdwYV9hZHZpY2VfdGFyZ2V0CitwZ3BhX2lkZW50aWZpZXIKK3BncGFfaW5kZXhfdGFyZ2V0Citw Z3BhX2luZGV4X3R5cGUKK3BncGFfaXRtX3R5cGUKK3BncGFfam9pbl9jbGFzcworcGdwYV9qb2lu X21lbWJlcgorcGdwYV9qb2luX3N0YXRlCitwZ3BhX2pvaW5fc3RyYXRlZ3kKK3BncGFfam9pbl91 bnJvbGxlcgorcGdwYV9sb2NhbF9hZHZpY2UKK3BncGFfbG9jYWxfYWR2aWNlX2NodW5rCitwZ3Bh X291dHB1dF9jb250ZXh0CitwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQKK3BncGFfcGxhbm5lcl9z dGF0ZQorcGdwYV9xZl90eXBlCitwZ3BhX3F1ZXJ5X2ZlYXR1cmUKK3BncGFfcmlfY2hlY2tlcgor cGdwYV9yaV9jaGVja2VyX2tleQorcGdwYV9zY2FuCitwZ3BhX3NjYW5fc3RyYXRlZ3kKK3BncGFf c2hhcmVkX2FkdmljZQorcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rCitwZ3BhX3NoYXJlZF9zdGF0 ZQorcGdwYV90YXJnZXRfdHlwZQorcGdwYV90cm92ZQorcGdwYV90cm92ZV9lbnRyeQorcGdwYV90 cm92ZV9lbnRyeV9lbGVtZW50CitwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2gKK3BncGFfdHJvdmVfZW50 cnlfa2V5CitwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlCitwZ3BhX3Ryb3ZlX3Jlc3VsdAorcGdwYV90 cm92ZV9zbGljZQorcGdwYV91bnJvbGxlZF9qb2luCiBwZ3NvY2tldAogcGdzcWxfdGhpbmdfdAog cGdzc0VudHJ5Ci0tIAoyLjM5LjMgKEFwcGxlIEdpdC0xNDUpCgo= --0000000000005ed7fc064260aba8--