Return-Path: Delivered-To: apmail-ws-sandesha-dev-archive@www.apache.org Received: (qmail 72947 invoked from network); 29 Oct 2008 13:44:50 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 29 Oct 2008 13:44:50 -0000 Received: (qmail 21552 invoked by uid 500); 29 Oct 2008 13:44:55 -0000 Delivered-To: apmail-ws-sandesha-dev-archive@ws.apache.org Received: (qmail 21479 invoked by uid 500); 29 Oct 2008 13:44:55 -0000 Mailing-List: contact sandesha-dev-help@ws.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list sandesha-dev@ws.apache.org Received: (qmail 21468 invoked by uid 99); 29 Oct 2008 13:44:54 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 29 Oct 2008 06:44:54 -0700 X-ASF-Spam-Status: No, hits=2.0 required=10.0 tests=HTML_MESSAGE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of amilasuriarachchi@gmail.com designates 66.249.90.177 as permitted sender) Received: from [66.249.90.177] (HELO ik-out-1112.google.com) (66.249.90.177) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 29 Oct 2008 13:43:40 +0000 Received: by ik-out-1112.google.com with SMTP id c28so1275652ika.0 for ; Wed, 29 Oct 2008 06:44:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:cc:in-reply-to:mime-version:content-type:references; bh=g4c2Y/iCWD7eKJgtO88GrPxQdtym3DraNX2EP1wHwuA=; b=CouU5VZTDjsN8A2AMBnunFa1nywWSWGW5WF3i/4N7WEFqdilK1uY5r47CG3e/zbdAB ZqBpwZjzxBkCl1roCrwZuYCDmGC3s1zyKY7mymPmv1ePAPmKS1ueNbi7iX83aczSxkvC p0cu0vp+dII9ReZvIBlZ7ol3CoIHklxZRMUGY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version :content-type:references; b=mtjI1gX1/2/GSxhSki9Sp4Wa6nyAlY9o0WpMowIiKefZ8tB/Jl3Ap3BAm0LBo/+lVN ROcS2m9LNgKZBS5DIL5yzuCbHsGHkRqIcwfZh1Ze8pjipXONEh3cnvKk1PDCb3Q0o9tU dmthP1voYVVG+/A2J5qEm4IMr93haKSYa7iqE= Received: by 10.103.248.17 with SMTP id a17mr4185913mus.37.1225287848999; Wed, 29 Oct 2008 06:44:08 -0700 (PDT) Received: by 10.103.18.20 with HTTP; Wed, 29 Oct 2008 06:44:08 -0700 (PDT) Message-ID: <60708f4b0810290644p59bf40eemda704e078e95d9fd@mail.gmail.com> Date: Wed, 29 Oct 2008 19:14:08 +0530 From: "Amila Suriarachchi" To: "Thomas McKiernan" Subject: Re: Sandesha2 synchronization and dead lock handling. Cc: "Andrew K Gatford" , "sandesha-dev@ws.apache.org" In-Reply-To: <60708f4b0810272256y53efda90o467fe6347e63c28e@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_57638_21645536.1225287848980" References: <60708f4b0810240226l6e25d96boccf15b0700c127b1@mail.gmail.com> <60708f4b0810240603p1314d9a7g631a52fbe1f4e80c@mail.gmail.com> <60708f4b0810272256y53efda90o467fe6347e63c28e@mail.gmail.com> X-Virus-Checked: Checked by ClamAV on apache.org ------=_Part_57638_21645536.1225287848980 Content-Type: multipart/alternative; boundary="----=_Part_57639_8559608.1225287848980" ------=_Part_57639_8559608.1225287848980 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline On Tue, Oct 28, 2008 at 11:26 AM, Amila Suriarachchi < amilasuriarachchi@gmail.com> wrote: > > > On Fri, Oct 24, 2008 at 7:54 PM, Thomas McKiernan wrote: > >> I think Andrew was saying that there is already an implicit order for the >> beans. > > > yes this is correct. most of the transactions follows a same order except > some transactions. > What about making an explicit order so that we can change the code whenever > found an exception. > > we can have an order like RMSBean, RMDBean, MessageBean, SenderBean. > > >> The point is people keep changing the code and breaking that order. >> Therefore this is not quite a hack but an attempt to make explicit what is >> already implied in the open src code. >> >> It would not work for the distributed case but, assuming each distributed >> thread was behaving correctly i.e. obeying the correct locking order then >> this would not be an issue. >> And this would catch any thread disobeying that ordering. > > Please see the attached patch I have added some similar thing as you have mentioned. Here I could not locate the InvokerBean. Then I proceed with this change. I found a lot of places where it does not follow the given order. In order to proceed I put another set of methods called locks which are called earlier to make the sequence correct. In this way I found a lot of places which does not follow this order. Of course this may not be the correct order to follow. Based on the above observations we can possibly have following options to address this problem. 1. Although there are dead locks sequence get finished. I think this is the way Sandesha2 is written. if there is an error it can roll back and proceed. But lot of people may not like it. 2. To implement a possible deadlock detection system (As suggested above ) and remove them either using some dummy locks or reformatting the code. Here reformatting the code may not feasible all the time. Any thoughts? thanks, Amila. > > As I understood in your method what you try to do is to have an explicit > order of accessing the > beans and raise an exception if one transaction make an exception. > > In this case also don't we have to go and change the transaction to have it > correct order (the explicit order you have define). Otherwise it keep on > failing. > > But this will certainly improve the transaction debugging. > > thanks, > Amila. > > > >> >> >> ---------------------------------- >> Thomas McKiernan >> >> WebSphere Messaging Development, >> IBM United Kingdom Limited >> >> Internal Phone: 248241 >> External Phone: +44 (0)1962 818241 >> Mobile: +44 (0)789 1737497 >> Email: MCKIERNA@uk.ibm.com >> >> Mail Point 211, IBM, Hursley Park, Winchester, Hampshire, England, SO21 >> 2JN >> >> >> Caminante, no hay camino >> Se hace camino al andar. >> ("Walker, there is no path; the path is made by walking.") Antonio >> Machado >> >> >> >> From: >> "Amila Suriarachchi" >> To: >> Thomas McKiernan/UK/IBM@IBMGB >> Cc: >> Andrew K Gatford/UK/IBM@IBMGB, "sandesha-dev@ws.apache.org" >> >> Date: >> 24/10/2008 14:06 >> Subject: >> Re: Sandesha2 synchronization and dead lock handling. >> >> >> >> >> >> On Fri, Oct 24, 2008 at 3:55 PM, Thomas McKiernan >> wrote: >> How about a lock manager impl independent of any particular store's impl. >> It could be abstract if necessary. >> >> Basically, this has a hierarchy of classes (beans) hard coded. >> If you use a store to access a bean then the store impl's tran calls into >> the independent lock manager. >> >> I feel this is a kind hack for the problem. And also as Andrew has >> mentioned this won't work in a >> distributed environment. >> For me the correct solution is to go through all the transactions and make >> an order of which >> transactions access the beans. But apparently this is also seems to be >> difficult since a lot >> of transactions has start and commits. >> So have to think bit more. >> >> thanks, >> Amila. >> >> >> >> >> Any attempt to enlist outside of the locking hierarchy results in a hard >> runtime error and a rollback of the tran. >> >> Is this too naive? >> >> ---------------------------------- >> Thomas McKiernan >> >> WebSphere Messaging Development, >> IBM United Kingdom Limited >> >> Internal Phone: 248241 >> External Phone: +44 (0)1962 818241 >> Mobile: +44 (0)789 1737497 >> Email: MCKIERNA@uk.ibm.com >> >> Mail Point 211, IBM, Hursley Park, Winchester, Hampshire, England, SO21 >> 2JN >> >> >> Caminante, no hay camino >> Se hace camino al andar. >> ("Walker, there is no path; the path is made by walking.") Antonio >> Machado >> >> >> >> From: >> Andrew K Gatford/UK/IBM@IBMGB >> To: >> "Amila Suriarachchi" >> Cc: >> "sandesha-dev@ws.apache.org" >> Date: >> 24/10/2008 11:07 >> Subject: >> Re: Sandesha2 synchronization and dead lock handling. >> >> >> >> I went through similar pain when implementing a StorageManager and >> encountered a number of deadlocks similar to the ones that you describe. >> What I have gradually done is eliminate these in both the InMemory store >> and my store by changing the ordering the beans were taken in. >> >> In general the beans are taken in this order. >> >> RMSBean or RMDBean followed by >> SenderBean or InvokerBean. >> >> In cases where both the RMSBean and RMDBean are locked, they tend to be >> taken in that order - RMS followed by RMD. >> The one thing that I do know is that it is fairly easy to introduce new >> deadlocks by slightly altering the order that beans are read. >> >> The one question I have is how does the jdbc store handle multiple threads >> >> accessing multiple sequences, or even a single sequence, but with multiple >> >> threads sending multiple requests. From my experience this is where we >> have found a lot of problems in the InMemory store and I expect to be even >> >> more painful with a jdbc store. >> >> Andrew Gatford >> Technical Project Lead >> Websphere ESB Foundation Technologies >> Hursley MP211 >> IBM United Kingdom Laboratories, Hursley Park, Winchester, SO21 2JN >> Telephone : >> Internal (7) 245743 >> External 01962 815743 >> Internet : gatfora@uk.ibm.com >> >> >> >> From: >> "Amila Suriarachchi" >> To: >> "sandesha-dev@ws.apache.org" >> Date: >> 24/10/2008 10:30 >> Subject: >> Sandesha2 synchronization and dead lock handling. >> >> >> >> hi all, >> >> This is regarding the issue [1]. >> >> First of all as I learned Sandesha2 uses different beans to keep the state >> >> of the sequence and the messages. In a dual channel mode >> different threads can access these beans and update them concurrently. So >> the synchronization of these beans done by using the >> storage level transactions. Therefore Sandesha2 needs an storage which >> supports isolated transactions. >> >> To synchronize these beans the transactions must be completely isolated. >> i.e It should not allow simultaneous reads of >> same record from different transactions. Therefore I think the problem I >> saw on[1] because not isolating the transactions properly. >> >> Then I increased the transaction isolation to fix the above problem. It >> fixed that problem but results in dead locks. >> The reason I believe for this dead locks is that different transactions >> try to access the data base tables in different order. >> But unfortunately I could not fix the issue. >> >> Normally these types of dead locks are prevented by accessing resources in >> >> same order. Does Sandesha2 follows such a order or any >> other technique? >> >> Or is there any other reason for this dead locks and synchronization >> problems? Can someone >> have a better idea of Sandesha2 Design shed some light on this? >> >> thanks, >> Amila. >> >> >> [1] http://issues.apache.org/jira/browse/SANDESHA2-179 >> -- >> Amila Suriarachchi >> WSO2 Inc. >> blog: http://amilachinthaka.blogspot.com/ >> >> >> >> >> >> >> Unless stated otherwise above: >> IBM United Kingdom Limited - Registered in England and Wales with number >> 741598. >> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU >> >> >> >> >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org >> For additional commands, e-mail: sandesha-dev-help@ws.apache.org >> >> >> >> >> >> >> >> >> >> Unless stated otherwise above: >> IBM United Kingdom Limited - Registered in England and Wales with number >> 741598. >> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU >> >> >> >> >> >> >> >> >> >> -- >> Amila Suriarachchi >> WSO2 Inc. >> blog: http://amilachinthaka.blogspot.com/ >> >> >> >> >> >> >> >> Unless stated otherwise above: >> IBM United Kingdom Limited - Registered in England and Wales with number >> 741598. >> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU >> >> >> >> >> >> >> > > > -- > Amila Suriarachchi > WSO2 Inc. > blog: http://amilachinthaka.blogspot.com/ > -- Amila Suriarachchi WSO2 Inc. blog: http://amilachinthaka.blogspot.com/ ------=_Part_57639_8559608.1225287848980 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline

On Tue, Oct 28, 2008 at 11:26 AM, Amila Suriarachchi <amilasuriarachchi@gmail.com> wrote:


On Fri, Oct 24, 2008 at 7:54 PM, Thomas McKiernan <MCKIERNA@uk.ibm.com> wrote:
I think Andrew was saying that there is already an implicit order for the
beans.

yes this is correct. most of the transactions follows a same order except some transactions.
What about making an explicit order so that we can change the code whenever found an exception.

we can have an order like RMSBean, RMDBean, MessageBean, SenderBean.


The point is people keep changing the code and breaking that order.
Therefore this is not quite a hack but an attempt to make explicit what is
already implied in the open src code.

It would not work for the distributed case but, assuming each distributed
thread was behaving correctly i.e. obeying the correct locking order then
this would not be an issue.
And this would catch any thread disobeying that ordering.

Please see the attached patch I have added some similar thing as you have mentioned. Here I could not locate the InvokerBean.

Then I proceed with this change. I found a lot of places where it does not follow the given order. In order to proceed I put another set of methods called locks which are called earlier to make the sequence correct.

In this way I found a lot of places which does not follow this order. Of course this may not be the correct order to follow.

Based on the above observations we can possibly have following options to address this problem.

1. Although there are dead locks sequence get finished. I think this is the way Sandesha2 is written. if there is an error it can roll back and proceed. But lot of people may not like it.

2. To implement a possible deadlock detection system (As suggested above ) and remove them either using some dummy locks or reformatting the code. Here reformatting the code may not feasible all the time.

Any thoughts?

thanks,
Amila.

As I understood in your method what you try to do is to have an explicit order of accessing the
beans and raise an exception if one transaction make an exception.

In this case also don't we have to go and change the transaction to have it correct order (the explicit order you have define). Otherwise it keep on failing.

But this will certainly improve the transaction debugging.

thanks,
Amila.





----------------------------------
Thomas McKiernan

WebSphere Messaging Development,
IBM United Kingdom Limited

Internal Phone: 248241
External Phone: +44 (0)1962 818241
Mobile: +44 (0)789 1737497
Email: MCKIERNA@uk.ibm.com

Mail Point 211, IBM, Hursley Park, Winchester, Hampshire, England, SO21
2JN


Caminante, no hay camino
Se hace camino al andar.
("Walker, there is no path; the path is made by walking.")  Antonio
Machado



From:
"Amila Suriarachchi" <amilasuriarachchi@gmail.com>
To:
Thomas McKiernan/UK/IBM@IBMGB
Cc:
Andrew K Gatford/UK/IBM@IBMGB, "sandesha-dev@ws.apache.org"
24/10/2008 14:06
Subject:
Re: Sandesha2 synchronization and dead lock handling.





On Fri, Oct 24, 2008 at 3:55 PM, Thomas McKiernan <MCKIERNA@uk.ibm.com>
wrote:
How about a lock manager impl independent of any particular store's impl.
It could be abstract if necessary.

Basically, this has a hierarchy of classes (beans) hard coded.
If you use a store to access a bean then the store impl's tran calls into
the independent lock manager.

I feel this is a kind hack for the problem. And also as Andrew has
mentioned this won't work in a
distributed environment.
For me the correct solution is to go through all the transactions and make
an order of which
transactions access the beans. But apparently  this is also seems to be
difficult since a lot
of transactions has start and commits.
So have to think bit more.

thanks,
Amila.




Any attempt to enlist outside of the locking hierarchy results in a hard
runtime error and a rollback of the tran.

Is this too naive?

----------------------------------
Thomas McKiernan

WebSphere Messaging Development,
IBM United Kingdom Limited

Internal Phone: 248241
External Phone: +44 (0)1962 818241
Mobile: +44 (0)789 1737497
Email: MCKIERNA@uk.ibm.com

Mail Point 211, IBM, Hursley Park, Winchester, Hampshire, England, SO21
2JN


Caminante, no hay camino
Se hace camino al andar.
("Walker, there is no path; the path is made by walking.")  Antonio
Machado



From:
Andrew K Gatford/UK/IBM@IBMGB
To:
"Amila Suriarachchi" <amilasuriarachchi@gmail.com>
Cc:
"sandesha-dev@ws.apache.org" <sandesha-dev@ws.apache.org>
Date:
24/10/2008 11:07
Subject:
Re: Sandesha2 synchronization and dead lock handling.



I went through similar pain when implementing a StorageManager and
encountered a number of deadlocks similar to the ones that you describe.
What I have gradually done is eliminate these in both the InMemory store
and my store by changing the ordering the beans were taken in.

In general the beans are taken in this order.

RMSBean or RMDBean followed by
SenderBean or InvokerBean.

In cases where both the RMSBean and RMDBean are locked, they tend to be
taken in that order - RMS followed by RMD.
The one thing that I do know is that it is fairly easy to introduce new
deadlocks by slightly altering the order that beans are read.

The one question I have is how does the jdbc store handle multiple threads

accessing multiple sequences, or even a single sequence, but with multiple

threads sending multiple requests.  From my experience this is where we
have found a lot of problems in the InMemory store and I expect to be even

more painful with a jdbc store.

Andrew Gatford
Technical Project Lead
Websphere ESB Foundation Technologies
Hursley MP211
IBM United Kingdom Laboratories, Hursley Park, Winchester, SO21 2JN
Telephone :
Internal (7) 245743
External 01962 815743
Internet : gatfora@uk.ibm.com



From:
"Amila Suriarachchi" <amilasuriarachchi@gmail.com>
To:
"sandesha-dev@ws.apache.org" <sandesha-dev@ws.apache.org>
Date:
24/10/2008 10:30
Subject:
Sandesha2 synchronization and dead lock handling.



hi all,

This is regarding the issue [1].

First of all as I learned Sandesha2 uses different beans to keep the state

of the sequence and the messages. In a dual channel mode
different threads can access these beans and update them concurrently. So
the synchronization of these beans done by using the
storage level transactions. Therefore Sandesha2 needs an storage which
supports isolated transactions.

To synchronize these beans the transactions must be completely isolated.
i.e It should not allow simultaneous reads of
same record from different transactions. Therefore I think the problem I
saw on[1] because not isolating the transactions properly.

Then I increased the transaction isolation to fix the above problem. It
fixed that problem but results in dead locks.
The reason I believe for this dead locks is that different transactions
try to access the data base tables in different order.
But unfortunately I could not fix the issue.

Normally these types of dead locks are prevented by accessing resources in

same order. Does Sandesha2 follows such a order or any
other technique?

Or is there any other reason for this dead locks and synchronization
problems? Can someone
have a better idea of Sandesha2 Design shed some light on this?

thanks,
Amila.


[1] http://issues.apache.org/jira/browse/SANDESHA2-179
--
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/






Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU







---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org









Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU









--
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/







Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU









--
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/



--
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/
------=_Part_57639_8559608.1225287848980-- ------=_Part_57638_21645536.1225287848980 Content-Type: text/plain; name=patch.txt Content-Transfer-Encoding: base64 X-Attachment-Id: f_fmw0fnca0 Content-Disposition: attachment; filename=patch.txt SW5kZXg6IHNyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zYW5kZXNoYTIvc3RvcmFnZS9qZGJjL1Bl cnNpc3RlbnRSTURCZWFuTWdyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3JjL21haW4vamF2YS9vcmcv YXBhY2hlL3NhbmRlc2hhMi9zdG9yYWdlL2pkYmMvUGVyc2lzdGVudFJNREJlYW5NZ3IuamF2YQko cmV2aXNpb24gNzA4ODA1KQorKysgc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NhbmRlc2hhMi9z dG9yYWdlL2pkYmMvUGVyc2lzdGVudFJNREJlYW5NZ3IuamF2YQkod29ya2luZyBjb3B5KQpAQCAt MjQ1LDcgKzI0NSw3IEBACiAJCQl0aHJvd3MgU2FuZGVzaGFTdG9yYWdlRXhjZXB0aW9uIHsNCiAJ CWlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgbG9nLmRlYnVnKCJkZWxldGUgUk1TQmVhbiBzZXF1 ZW5jZUlEICIgKyBzZXF1ZW5jZUlEKTsNCiAJCXRyeSB7DQotCQkJU3RhdGVtZW50IHN0bXQgPSBn ZXREYkNvbm5lY3Rpb24oKS5jcmVhdGVTdGF0ZW1lbnQoKTsNCisJCQlTdGF0ZW1lbnQgc3RtdCA9 IGdldERiQ29ubmVjdGlvbihKREJDVHJhbnNhY3Rpb24uUk1EX0JFQU4pLmNyZWF0ZVN0YXRlbWVu dCgpOw0KIAkJCXN0bXQuZXhlY3V0ZVVwZGF0ZSgiZGVsZXRlIGZyb20gd3NybV9ybWQgd2hlcmUg c2VxdWVuY2VfaWQ9JyIgKyBzZXF1ZW5jZUlEICsgIiciKTsNCiAJCQlzdG10LmNsb3NlKCk7DQog CQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsNCkBAIC0yNTksNyArMjU5LDcgQEAKIAkJU3RyaW5n IHNxbCA9IHJlcXVlc3RGb3JNb2RlbChiZWFuKTsNCiAJCUFycmF5TGlzdDxSTURCZWFuPiBsc3Qg PSBuZXcgQXJyYXlMaXN0PFJNREJlYW4+KCk7DQogCQl0cnkgew0KLQkJCVN0YXRlbWVudCBzdG10 ID0gZ2V0RGJDb25uZWN0aW9uKCkuY3JlYXRlU3RhdGVtZW50KFJlc3VsdFNldC5UWVBFX0ZPUldB UkRfT05MWSwgUmVzdWx0U2V0LkNPTkNVUl9VUERBVEFCTEUpOw0KKwkJCVN0YXRlbWVudCBzdG10 ID0gZ2V0RGJDb25uZWN0aW9uKEpEQkNUcmFuc2FjdGlvbi5STURfQkVBTikuY3JlYXRlU3RhdGVt ZW50KFJlc3VsdFNldC5UWVBFX0ZPUldBUkRfT05MWSwgUmVzdWx0U2V0LkNPTkNVUl9VUERBVEFC TEUpOw0KIAkJCVJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7DQogCQkJd2hp bGUgKHJzLm5leHQoKSkgew0KIAkJCQlsc3QuYWRkKGdldEJlYW4ocnMpKTsNCkBAIC0yNzcsNyAr Mjc3LDcgQEAKIAkJCXRocm93cyBTYW5kZXNoYVN0b3JhZ2VFeGNlcHRpb24gew0KIAkJbG9nLmRl YnVnKCJpbnNlcnQgIiArIGJlYW4pOw0KIAkJdHJ5IHsNCi0JCQlQcmVwYXJlZFN0YXRlbWVudCBw c3RtdCA9IGdldERiQ29ubmVjdGlvbigpLnByZXBhcmVTdGF0ZW1lbnQoImluc2VydCBpbnRvIHdz cm1fcm1kKCIgKw0KKwkJCVByZXBhcmVkU3RhdGVtZW50IHBzdG10ID0gZ2V0RGJDb25uZWN0aW9u KEpEQkNUcmFuc2FjdGlvbi5STURfQkVBTikucHJlcGFyZVN0YXRlbWVudCgiaW5zZXJ0IGludG8g d3NybV9ybWQoIiArDQogCQkJCQkic2VxdWVuY2VfaWQsdG9fZXByX2FkZHIsdG9fZXByLHJlcGx5 X3RvX2Vwcl9hZGRyLHJlcGx5X3RvX2VwcixhY2tzX3RvX2Vwcl9hZGRyLCIgKw0KIAkJCQkJImFj a3NfdG9fZXByLHJtX3ZlcnNpb24sc2VjdXJpdHlfdG9rZW5fZGF0YSwiICsNCiAJCQkJCSJsYXN0 X2FjdGl2YXRlZF90aW1lLGNsb3NlZCx0ZXJtaW5hdGVkX2ZsYWcscG9sbGluZ19tb2RlLHNlcnZp Y2VfbmFtZSwiICsNCkBAIC0zMzMsNyArMzMzLDcgQEAKIAkJCXRocm93cyBTYW5kZXNoYVN0b3Jh Z2VFeGNlcHRpb24gew0KIAkJUk1EQmVhbiBiZWFuID0gbnVsbDsNCiAJCXRyeSB7DQotCQkJU3Rh dGVtZW50IHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oKS5jcmVhdGVTdGF0ZW1lbnQoUmVzdWx0U2V0 LlRZUEVfRk9SV0FSRF9PTkxZLCBSZXN1bHRTZXQuQ09OQ1VSX1VQREFUQUJMRSk7DQorCQkJU3Rh dGVtZW50IHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oSkRCQ1RyYW5zYWN0aW9uLlJNRF9CRUFOKS5j cmVhdGVTdGF0ZW1lbnQoUmVzdWx0U2V0LlRZUEVfRk9SV0FSRF9PTkxZLCBSZXN1bHRTZXQuQ09O Q1VSX1VQREFUQUJMRSk7DQogCQkJUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoInNl bGVjdCAqIGZyb20gd3NybV9ybWQgd2hlcmUgc2VxdWVuY2VfaWQ9JyIgKyBzZXF1ZW5jZUlEICsg IiciKTsNCiAJCQlpZiAoISBycy5uZXh0KCkpIHJldHVybiBiZWFuOw0KIAkJCWJlYW4gPSBnZXRC ZWFuKHJzKTsNCkBAIC0zNTQsNyArMzU0LDcgQEAKIAkJCXRocm93cyBTYW5kZXNoYVN0b3JhZ2VF eGNlcHRpb24gew0KIAkJbG9nLmRlYnVnKCJ1cGRhdGUgIiArIGJlYW4pOw0KIAkJdHJ5IHsNCi0J CQlQcmVwYXJlZFN0YXRlbWVudCBwc3RtdCA9IGdldERiQ29ubmVjdGlvbigpLnByZXBhcmVTdGF0 ZW1lbnQoInVwZGF0ZSB3c3JtX3JtZCBzZXQgIiArDQorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgcHN0 bXQgPSBnZXREYkNvbm5lY3Rpb24oSkRCQ1RyYW5zYWN0aW9uLlJNRF9CRUFOKS5wcmVwYXJlU3Rh dGVtZW50KCJ1cGRhdGUgd3NybV9ybWQgc2V0ICIgKw0KIAkJCQkJInRvX2Vwcl9hZGRyPT8sdG9f ZXByPT8scmVwbHlfdG9fZXByX2FkZHI9PyxyZXBseV90b19lcHI9PyxhY2tzX3RvX2Vwcl9hZGRy PT8sIiArDQogCQkJCQkiYWNrc190b19lcHI9PyxybV92ZXJzaW9uPT8sc2VjdXJpdHlfdG9rZW5f ZGF0YT0/LCIgKw0KIAkJCQkJImxhc3RfYWN0aXZhdGVkX3RpbWU9PyxjbG9zZWQ9Pyx0ZXJtaW5h dGVkX2ZsYWc9Pyxwb2xsaW5nX21vZGU9PyxzZXJ2aWNlX25hbWU9PywiICsNCkBAIC00MDksNyAr NDA5LDcgQEAKIAkJU3RyaW5nIHNxbCA9IHJlcXVlc3RGb3JNb2RlbChiZWFuKTsNCiAJCVJNREJl YW4gcmVzdWx0ID0gbnVsbDsNCiAJCXRyeSB7DQotCQkJU3RhdGVtZW50IHN0bXQgPSBnZXREYkNv bm5lY3Rpb24oKS5jcmVhdGVTdGF0ZW1lbnQoUmVzdWx0U2V0LlRZUEVfRk9SV0FSRF9PTkxZLCBS ZXN1bHRTZXQuQ09OQ1VSX1VQREFUQUJMRSk7DQorCQkJU3RhdGVtZW50IHN0bXQgPSBnZXREYkNv bm5lY3Rpb24oSkRCQ1RyYW5zYWN0aW9uLlJNRF9CRUFOKS5jcmVhdGVTdGF0ZW1lbnQoUmVzdWx0 U2V0LlRZUEVfRk9SV0FSRF9PTkxZLCBSZXN1bHRTZXQuQ09OQ1VSX1VQREFUQUJMRSk7DQogCQkJ UmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsNCiAJCQl3aGlsZSAocnMubmV4 dCgpKSB7DQogCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgew0KQEAgLTQzMCw0ICs0MzAsMTYgQEAK IAkJfQ0KIAkJcmV0dXJuIHJlc3VsdDsNCiAJfQ0KKw0KKwlwdWJsaWMgdm9pZCBsb2NrKCkgdGhy b3dzIFNhbmRlc2hhU3RvcmFnZUV4Y2VwdGlvbiB7DQorCQl0cnkgew0KKwkJCVN0YXRlbWVudCBz dG10ID0gZ2V0RGJDb25uZWN0aW9uKEpEQkNUcmFuc2FjdGlvbi5STURfQkVBTikuY3JlYXRlU3Rh dGVtZW50KFJlc3VsdFNldC5UWVBFX0ZPUldBUkRfT05MWSwgUmVzdWx0U2V0LkNPTkNVUl9VUERB VEFCTEUpOw0KKwkJCVJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBm cm9tICB3c3JtX3JtZCIpOw0KKwkJCXJzLm5leHQoKTsNCisJCQlycy5jbG9zZSgpOw0KKwkJCXN0 bXQuY2xvc2UoKTsNCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgew0KKwkJCXRocm93IG5ldyBT YW5kZXNoYVN0b3JhZ2VFeGNlcHRpb24oZXgpOw0KKwkJfQ0KKwl9DQogfQ0KSW5kZXg6IHNyYy9t YWluL2phdmEvb3JnL2FwYWNoZS9zYW5kZXNoYTIvc3RvcmFnZS9qZGJjL1BlcnNpc3RlbnRTdG9y YWdlTWFuYWdlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9z YW5kZXNoYTIvc3RvcmFnZS9qZGJjL1BlcnNpc3RlbnRTdG9yYWdlTWFuYWdlci5qYXZhCShyZXZp c2lvbiA3MDg4MDYpCisrKyBzcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2FuZGVzaGEyL3N0b3Jh Z2UvamRiYy9QZXJzaXN0ZW50U3RvcmFnZU1hbmFnZXIuamF2YQkod29ya2luZyBjb3B5KQpAQCAt MTk4LDEwICsxOTgsMTAgQEAKIAkgKg0KIAkgKiBAcmV0dXJuIERhdGEgQmFzZSBDb25uZWN0aW9u DQogCSAqLw0KLQlwdWJsaWMgQ29ubmVjdGlvbiBnZXREYkNvbm5lY3Rpb24oKSB7DQorCXB1Ymxp YyBDb25uZWN0aW9uIGdldERiQ29ubmVjdGlvbihpbnQgbGV2ZWwpIHsNCiAJCUpEQkNUcmFuc2Fj dGlvbiB0cmFuc2FjdGlvbiA9IChKREJDVHJhbnNhY3Rpb24pIHRocmVhZFRyYW5zYWN0aW9uLmdl dCgpOw0KIAkJaWYgKHRyYW5zYWN0aW9uID09IG51bGwpIHJldHVybiBkYkNvbm5lY3Rpb247DQot CQlyZXR1cm4gdHJhbnNhY3Rpb24uZ2V0RGJDb25uZWN0aW9uKCk7DQorCQlyZXR1cm4gdHJhbnNh Y3Rpb24uZ2V0RGJDb25uZWN0aW9uKGxldmVsKTsNCiAJfQ0KIA0KIA0KQEAgLTIzNSw3ICsyMzUs NyBAQAogCQl9DQogCQkgLyoqLw0KIAkJdHJ5IHsNCi0JCQlTdGF0ZW1lbnQgc3RtdCA9IGdldERi Q29ubmVjdGlvbigpLmNyZWF0ZVN0YXRlbWVudCgpOw0KKwkJCVN0YXRlbWVudCBzdG10ID0gZ2V0 RGJDb25uZWN0aW9uKEpEQkNUcmFuc2FjdGlvbi5NRVNTQUdFX0JFQU4pLmNyZWF0ZVN0YXRlbWVu dCgpOw0KIAkJCSAvKiovDQogCQkJUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoInNl bGVjdCAqIGZyb20gd3NybV9tc2djdHggd2hlcmUgY3R4X2tleT0nIiArDQogCQkJCQlrZXkgKyAi JyIpOw0KQEAgLTI1OSw3ICsyNTksNyBAQAogCQlpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpIGxv Zy5kZWJ1ZygiRW50ZXIgc3RvcmVNZXNzYWdlQ29udGV4dCBmb3Iga2V5ICIgKyBrZXkgKyAiIGNv bnRleHQgIiArIG1zZ0NvbnRleHQpOw0KIAkJc3RvcmFnZU1hcC5wdXQoa2V5LCBtc2dDb250ZXh0 KTsNCiAJCXRyeSB7DQotCQkJUHJlcGFyZWRTdGF0ZW1lbnQgcHN0bXQgPSBnZXREYkNvbm5lY3Rp b24oKS5wcmVwYXJlU3RhdGVtZW50KCJpbnNlcnQgaW50byB3c3JtX21zZ2N0eChjdHhfa2V5LGN0 eCl2YWx1ZXMoPyw/KSIpOw0KKwkJCVByZXBhcmVkU3RhdGVtZW50IHBzdG10ID0gZ2V0RGJDb25u ZWN0aW9uKEpEQkNUcmFuc2FjdGlvbi5NRVNTQUdFX0JFQU4pLnByZXBhcmVTdGF0ZW1lbnQoImlu c2VydCBpbnRvIHdzcm1fbXNnY3R4KGN0eF9rZXksY3R4KXZhbHVlcyg/LD8pIik7DQogCQkJcHN0 bXQuc2V0U3RyaW5nKDEsIGtleSk7DQogCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBu ZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7DQogCQkJT2JqZWN0T3V0cHV0U3RyZWFtIG9vcyA9 IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0oYmFvcyk7DQpAQCAtMjgwLDcgKzI4MCw3IEBACiAJCXN0 b3JhZ2VNYXAucHV0KGtleSwgbXNnQ29udGV4dCk7DQogCQlQcmVwYXJlZFN0YXRlbWVudCBwc3Rt dCA9IG51bGw7DQogCQl0cnkgew0KLQkJCXBzdG10ID0gZ2V0RGJDb25uZWN0aW9uKCkucHJlcGFy ZVN0YXRlbWVudCgidXBkYXRlIHdzcm1fbXNnY3R4IHNldCBjdHg9PyIgKw0KKwkJCXBzdG10ID0g Z2V0RGJDb25uZWN0aW9uKEpEQkNUcmFuc2FjdGlvbi5NRVNTQUdFX0JFQU4pLnByZXBhcmVTdGF0 ZW1lbnQoInVwZGF0ZSB3c3JtX21zZ2N0eCBzZXQgY3R4PT8iICsNCiAJCQkJCSJ3aGVyZSBjdHhf a2V5PSciICsga2V5ICsgIiciKTsNCiAJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5l dyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsNCiAJCQlPYmplY3RPdXRwdXRTdHJlYW0gb29zID0g bmV3IE9iamVjdE91dHB1dFN0cmVhbShiYW9zKTsNCkBAIC0yOTksNyArMjk5LDcgQEAKIAkJCXRo cm93cyBTYW5kZXNoYVN0b3JhZ2VFeGNlcHRpb24gew0KIAkJaWYgKGxvZy5pc0RlYnVnRW5hYmxl ZCgpKSBsb2cuZGVidWcoInJlbW92ZU1lc3NhZ2VDb250ZXh0IGtleSA6ICIgKyBrZXkpOw0KIAkJ dHJ5IHsNCi0JCQlTdGF0ZW1lbnQgc3RtdCA9IGdldERiQ29ubmVjdGlvbigpLmNyZWF0ZVN0YXRl bWVudCgpOw0KKwkJCVN0YXRlbWVudCBzdG10ID0gZ2V0RGJDb25uZWN0aW9uKEpEQkNUcmFuc2Fj dGlvbi5NRVNTQUdFX0JFQU4pLmNyZWF0ZVN0YXRlbWVudCgpOw0KIAkJCU1lc3NhZ2VDb250ZXh0 IG1lc3NhZ2VJbkNhY2hlID0gKE1lc3NhZ2VDb250ZXh0KSBzdG9yYWdlTWFwLmdldChrZXkpOw0K IAkJCWlmIChtZXNzYWdlSW5DYWNoZSAhPSBudWxsKSBzdG9yYWdlTWFwLnJlbW92ZShrZXkpOw0K IAkJCXN0bXQuZXhlY3V0ZVVwZGF0ZSgiZGVsZXRlIGZyb20gd3NybV9tc2djdHggd2hlcmUgY3R4 X2tleT0nIiArIGtleSArICInIik7DQpAQCAtMzA5LDQgKzMwOSwxNyBAQAogCQl9DQogCX0NCiAN CisJcHVibGljIHZvaWQgbG9ja01lc3NhZ2VCZWFuKCkgdGhyb3dzIFNhbmRlc2hhU3RvcmFnZUV4 Y2VwdGlvbiB7DQorCQl0cnkgew0KKwkJCVN0YXRlbWVudCBzdG10ID0gZ2V0RGJDb25uZWN0aW9u KEpEQkNUcmFuc2FjdGlvbi5NRVNTQUdFX0JFQU4pLmNyZWF0ZVN0YXRlbWVudCgpOw0KKwkJCVJl c3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBmcm9tIHdzcm1fbXNnY3R4 Iik7DQorCQkJcnMubmV4dCgpOw0KKwkJCXJzLmNsb3NlKCk7DQorCQkJc3RtdC5jbG9zZSgpOw0K KwkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7DQorCQkJbG9nLmVycm9yKCJSZXRyaWV2ZU1lc3Nh Z2VDb250ZXh0IGV4Y2VwdGlvbiAiICsgZXgpOw0KKwkJCXRocm93IG5ldyBTYW5kZXNoYVN0b3Jh Z2VFeGNlcHRpb24oZXgpOw0KKwkJfQ0KKwl9DQorDQogfQ0KSW5kZXg6IHNyYy9tYWluL2phdmEv b3JnL2FwYWNoZS9zYW5kZXNoYTIvc3RvcmFnZS9qZGJjL0pEQkNUcmFuc2FjdGlvbi5qYXZhCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIHNyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zYW5kZXNoYTIvc3RvcmFnZS9q ZGJjL0pEQkNUcmFuc2FjdGlvbi5qYXZhCShyZXZpc2lvbiA3MDg4MDUpCisrKyBzcmMvbWFpbi9q YXZhL29yZy9hcGFjaGUvc2FuZGVzaGEyL3N0b3JhZ2UvamRiYy9KREJDVHJhbnNhY3Rpb24uamF2 YQkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsOCBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnNh bmRlc2hhMi5zdG9yYWdlLmpkYmM7DQogDQogaW1wb3J0IGphdmEuc3FsLio7DQoraW1wb3J0IGph dmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KIA0KIGltcG9ydCBv cmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7DQogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9u cy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7DQpAQCAtMzcsMTkgKzM5LDQ0IEBACiAJcHJpdmF0ZSBib29s ZWFuIGFjdGl2ZSA9IGZhbHNlOw0KIAlwcml2YXRlIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExv ZyhnZXRDbGFzcygpKTsNCiANCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk1TX0JFQU4gPSAx Ow0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSTURfQkVBTiA9IDI7DQorCXB1YmxpYyBzdGF0 aWMgZmluYWwgaW50IE1FU1NBR0VfQkVBTiA9IDM7DQorCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50 IFNFTkRFUl9CRUFOID0gNDsNCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5WT0tFUl9CRUFO ID0gNTsNCisNCisNCisJcHJpdmF0ZSBpbnQgY3VycmVudExldmVsID0gMDsNCisJcHJpdmF0ZSBM aXN0IGdyYW50ZWRMZXZlbHMgPSBuZXcgQXJyYXlMaXN0KCk7DQorDQogCXB1YmxpYyBKREJDVHJh bnNhY3Rpb24oUGVyc2lzdGVudFN0b3JhZ2VNYW5hZ2VyIHBtZ3IpIHsNCiAJCWxvZy5kZWJ1Zygi bmV3IEpEQkNUcmFuc2FjdGlvbiIpOw0KIAkJdHJ5IHsNCiAJCQl0aGlzLnBtZ3IgPSBwbWdyOw0K IAkJCWRiQ29ubmVjdGlvbiA9IHBtZ3IuZGJDb25uZWN0KCk7DQogCQkJZGJDb25uZWN0aW9uLnNl dEF1dG9Db21taXQoZmFsc2UpOw0KLQkJCWRiQ29ubmVjdGlvbi5zZXRUcmFuc2FjdGlvbklzb2xh dGlvbihDb25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRSk7DQorCQkJZGJDb25uZWN0 aW9uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKENvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFU QUJMRV9SRUFEKTsNCiAJCQlhY3RpdmUgPSB0cnVlOw0KIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4 KSB7DQogCQl9DQogCX0NCiANCi0JcHVibGljIENvbm5lY3Rpb24gZ2V0RGJDb25uZWN0aW9uKCkg ew0KKwlwdWJsaWMgQ29ubmVjdGlvbiBnZXREYkNvbm5lY3Rpb24oaW50IGxldmVsKSB7DQorDQor CQlpZiAobGV2ZWwgIT0gSU5WT0tFUl9CRUFOKSB7DQorCQkJaWYgKGN1cnJlbnRMZXZlbCA8PSBs ZXZlbCkgew0KKwkJCQl0aGlzLmdyYW50ZWRMZXZlbHMuYWRkKGxldmVsKTsNCisJCQkJY3VycmVu dExldmVsID0gbGV2ZWw7DQorCQkJfSBlbHNlIHsNCisJCQkJaWYgKCF0aGlzLmdyYW50ZWRMZXZl bHMuY29udGFpbnMobGV2ZWwpKSB7DQorCQkJCQkvLyB0aGlzIGlzIGEgbm9uIGdyYW50ZWQgbG93 ZXIgbGV2ZWwNCisJCQkJCWlmIChsZXZlbCAhPSBJTlZPS0VSX0JFQU4pIHsNCisJCQkJCQl0aHJv dyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ3VycmVudCBsZXZlbCAiICsgY3VycmVudExldmVsICsg IiBHcmFudCBsZXZlbCAiICsgbGV2ZWwpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0K Kw0KIAkJcmV0dXJuIGRiQ29ubmVjdGlvbjsNCiAJfQ0KIA0KSW5kZXg6IHNyYy9tYWluL2phdmEv b3JnL2FwYWNoZS9zYW5kZXNoYTIvc3RvcmFnZS9qZGJjL1BlcnNpc3RlbnRJbnZva2VyQmVhbk1n ci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIHNyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zYW5kZXNoYTIv c3RvcmFnZS9qZGJjL1BlcnNpc3RlbnRJbnZva2VyQmVhbk1nci5qYXZhCShyZXZpc2lvbiA3MDg4 MDUpCisrKyBzcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2FuZGVzaGEyL3N0b3JhZ2UvamRiYy9Q ZXJzaXN0ZW50SW52b2tlckJlYW5NZ3IuamF2YQkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEs NyBAQAogCXB1YmxpYyBib29sZWFuIGRlbGV0ZShTdHJpbmcga2V5KQ0KIAkJCXRocm93cyBTYW5k ZXNoYVN0b3JhZ2VFeGNlcHRpb24gew0KIAkJdHJ5IHsNCi0JCQlTdGF0ZW1lbnQgc3RtdCA9IGdl dERiQ29ubmVjdGlvbigpLmNyZWF0ZVN0YXRlbWVudCgpOw0KKwkJCVN0YXRlbWVudCBzdG10ID0g Z2V0RGJDb25uZWN0aW9uKEpEQkNUcmFuc2FjdGlvbi5JTlZPS0VSX0JFQU4pLmNyZWF0ZVN0YXRl bWVudCgpOw0KIAkJCXN0bXQuZXhlY3V0ZVVwZGF0ZSgiZGVsZXRlIGZyb20gd3NybV9pbnZva2Vy IHdoZXJlIG1lc3NhZ2VfY29udGV4dF9yZWZfa2V5PSciICsga2V5ICsgIiciKTsNCiAJCQlzdG10 LmNsb3NlKCk7DQogCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsNCkBAIC05NSw3ICs5NSw3IEBA CiAJCVN0cmluZyBzcWwgPSByZXF1ZXN0Rm9yTW9kZWwoYmVhbik7DQogCQlBcnJheUxpc3Q8SW52 b2tlckJlYW4+IGxzdCA9IG5ldyBBcnJheUxpc3Q8SW52b2tlckJlYW4+KCk7DQogCQl0cnkgew0K LQkJCVN0YXRlbWVudCBzdG10ID0gZ2V0RGJDb25uZWN0aW9uKCkuY3JlYXRlU3RhdGVtZW50KFJl c3VsdFNldC5UWVBFX0ZPUldBUkRfT05MWSwgUmVzdWx0U2V0LkNPTkNVUl9VUERBVEFCTEUpOw0K KwkJCVN0YXRlbWVudCBzdG10ID0gZ2V0RGJDb25uZWN0aW9uKEpEQkNUcmFuc2FjdGlvbi5JTlZP S0VSX0JFQU4pLmNyZWF0ZVN0YXRlbWVudChSZXN1bHRTZXQuVFlQRV9GT1JXQVJEX09OTFksIFJl c3VsdFNldC5DT05DVVJfVVBEQVRBQkxFKTsNCiAJCQlSZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1 dGVRdWVyeShzcWwpOw0KIAkJCXdoaWxlIChycy5uZXh0KCkpIHsNCiAJCQkJbHN0LmFkZChnZXRJ bnZva2VyQmVhbihycykpOw0KQEAgLTExMSw3ICsxMTEsNyBAQAogCXB1YmxpYyBib29sZWFuIGlu c2VydChJbnZva2VyQmVhbiBiZWFuKQ0KIAkJCXRocm93cyBTYW5kZXNoYVN0b3JhZ2VFeGNlcHRp b24gew0KIAkJdHJ5IHsNCi0JCQlQcmVwYXJlZFN0YXRlbWVudCBwc3RtdCA9IGdldERiQ29ubmVj dGlvbigpLnByZXBhcmVTdGF0ZW1lbnQoImluc2VydCBpbnRvIHdzcm1faW52b2tlcihtZXNzYWdl X2NvbnRleHRfcmVmX2tleSwiICsNCisJCQlQcmVwYXJlZFN0YXRlbWVudCBwc3RtdCA9IGdldERi Q29ubmVjdGlvbihKREJDVHJhbnNhY3Rpb24uSU5WT0tFUl9CRUFOKS5wcmVwYXJlU3RhdGVtZW50 KCJpbnNlcnQgaW50byB3c3JtX2ludm9rZXIobWVzc2FnZV9jb250ZXh0X3JlZl9rZXksIiArDQog CQkJCQkic2VxdWVuY2VfaWQsY29udGV4dCxtc2dfbm8sZmxhZ3MpdmFsdWVzKD8sPyw/LD8sPyki KTsNCiAJCQlwc3RtdC5zZXRTdHJpbmcoMSwgYmVhbi5nZXRNZXNzYWdlQ29udGV4dFJlZktleSgp KTsNCiAJCQlwc3RtdC5zZXRTdHJpbmcoMiwgYmVhbi5nZXRTZXF1ZW5jZUlEKCkpOw0KQEAgLTEz Miw3ICsxMzIsNyBAQAogCQkJdGhyb3dzIFNhbmRlc2hhU3RvcmFnZUV4Y2VwdGlvbiB7DQogCQlJ bnZva2VyQmVhbiBpbnZva2VyQmVhbiA9IG51bGw7DQogCQl0cnkgew0KLQkJCVN0YXRlbWVudCBz dG10ID0gZ2V0RGJDb25uZWN0aW9uKCkuY3JlYXRlU3RhdGVtZW50KFJlc3VsdFNldC5UWVBFX0ZP UldBUkRfT05MWSwgUmVzdWx0U2V0LkNPTkNVUl9VUERBVEFCTEUpOw0KKwkJCVN0YXRlbWVudCBz dG10ID0gZ2V0RGJDb25uZWN0aW9uKEpEQkNUcmFuc2FjdGlvbi5JTlZPS0VSX0JFQU4pLmNyZWF0 ZVN0YXRlbWVudChSZXN1bHRTZXQuVFlQRV9GT1JXQVJEX09OTFksIFJlc3VsdFNldC5DT05DVVJf VVBEQVRBQkxFKTsNCiAJCQlSZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgic2VsZWN0 ICogZnJvbSB3c3JtX2ludm9rZXIgd2hlcmUgbWVzc2FnZV9jb250ZXh0X3JlZl9rZXk9JyIgKyBr ZXkgKyAiJyIpOw0KIAkJCWlmICghIHJzLm5leHQoKSkgcmV0dXJuIGludm9rZXJCZWFuOw0KIAkJ CWludm9rZXJCZWFuID0gZ2V0SW52b2tlckJlYW4ocnMpOw0KQEAgLTE0Nyw3ICsxNDcsNyBAQAog CXB1YmxpYyBib29sZWFuIHVwZGF0ZShJbnZva2VyQmVhbiBiZWFuKQ0KIAkJCXRocm93cyBTYW5k ZXNoYVN0b3JhZ2VFeGNlcHRpb24gew0KIAkJdHJ5IHsNCi0JCQlQcmVwYXJlZFN0YXRlbWVudCBw c3RtdCA9IGdldERiQ29ubmVjdGlvbigpLnByZXBhcmVTdGF0ZW1lbnQoInVwZGF0ZSB3c3JtX2lu dm9rZXIgc2V0ICIgKw0KKwkJCVByZXBhcmVkU3RhdGVtZW50IHBzdG10ID0gZ2V0RGJDb25uZWN0 aW9uKEpEQkNUcmFuc2FjdGlvbi5JTlZPS0VSX0JFQU4pLnByZXBhcmVTdGF0ZW1lbnQoInVwZGF0 ZSB3c3JtX2ludm9rZXIgc2V0ICIgKw0KIAkJCQkJInNlcXVlbmNlX2lkPT8sY29udGV4dD0/LG1z Z19ubz0/LGZsYWdzPT8gd2hlcmUgbWVzc2FnZV9jb250ZXh0X3JlZl9rZXk9JyIgKyBiZWFuLmdl dE1lc3NhZ2VDb250ZXh0UmVmS2V5KCkgKyAiJyIpOw0KIAkJCXBzdG10LnNldFN0cmluZygxLCBi ZWFuLmdldFNlcXVlbmNlSUQoKSk7DQogCQkJcHN0bXQuc2V0TG9uZygzLCBiZWFuLmdldE1zZ05v KCkpOw0KQEAgLTE2OCw3ICsxNjgsNyBAQAogCQlTdHJpbmcgc3FsID0gcmVxdWVzdEZvck1vZGVs KGJlYW4pOw0KIAkJSW52b2tlckJlYW4gcmVzdWx0ID0gbnVsbDsNCiAJCXRyeSB7DQotCQkJU3Rh dGVtZW50IHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oKS5jcmVhdGVTdGF0ZW1lbnQoUmVzdWx0U2V0 LlRZUEVfRk9SV0FSRF9PTkxZLCBSZXN1bHRTZXQuQ09OQ1VSX1VQREFUQUJMRSk7DQorCQkJU3Rh dGVtZW50IHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oSkRCQ1RyYW5zYWN0aW9uLklOVk9LRVJfQkVB TikuY3JlYXRlU3RhdGVtZW50KFJlc3VsdFNldC5UWVBFX0ZPUldBUkRfT05MWSwgUmVzdWx0U2V0 LkNPTkNVUl9VUERBVEFCTEUpOw0KIAkJCVJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5 KHNxbCk7DQogCQkJd2hpbGUgKHJzLm5leHQoKSkgew0KIAkJCQlpZiAocmVzdWx0ID09IG51bGwp IHsNCkluZGV4OiBzcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2FuZGVzaGEyL3N0b3JhZ2UvamRi Yy9QZXJzaXN0ZW50QmVhbk1nci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNyYy9tYWluL2phdmEvb3Jn L2FwYWNoZS9zYW5kZXNoYTIvc3RvcmFnZS9qZGJjL1BlcnNpc3RlbnRCZWFuTWdyLmphdmEJKHJl dmlzaW9uIDcwODgwNSkKKysrIHNyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zYW5kZXNoYTIvc3Rv cmFnZS9qZGJjL1BlcnNpc3RlbnRCZWFuTWdyLmphdmEJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0 ICszMywxNyBAQAogCUxvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhnZXRDbGFzcygpKTsNCiAJ UGVyc2lzdGVudFN0b3JhZ2VNYW5hZ2VyIHBtZ3IgPSBudWxsOw0KIA0KKw0KIAlwdWJsaWMgUGVy c2lzdGVudEJlYW5NZ3IoUGVyc2lzdGVudFN0b3JhZ2VNYW5hZ2VyIHBtZ3IpIHsNCiAJCXRoaXMu cG1nciA9IHBtZ3I7DQogCX0NCiANCi0JcHVibGljIENvbm5lY3Rpb24gZ2V0RGJDb25uZWN0aW9u KCkgew0KLQkJcmV0dXJuIHBtZ3IuZ2V0RGJDb25uZWN0aW9uKCk7DQorCXB1YmxpYyBDb25uZWN0 aW9uIGdldERiQ29ubmVjdGlvbihpbnQgbGV2ZWwpIHsNCisJCXJldHVybiBwbWdyLmdldERiQ29u bmVjdGlvbihsZXZlbCk7DQogCX0NCiANCisNCisNCiAJcHJvdGVjdGVkIE9iamVjdCBnZXRPYmpl Y3QoUmVzdWx0U2V0IHJzLCBTdHJpbmcgZmllbGQpDQogCQkJdGhyb3dzIEV4Y2VwdGlvbiB7DQog CQkvLyBNeVNRTCBKREJDIGNvbm5lY3RvciByZXR1cm5zIGEgYnl0ZSBhcnJheSANCkluZGV4OiBz cmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2FuZGVzaGEyL3N0b3JhZ2UvamRiYy9QZXJzaXN0ZW50 U2VuZGVyQmVhbk1nci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNyYy9tYWluL2phdmEvb3JnL2FwYWNo ZS9zYW5kZXNoYTIvc3RvcmFnZS9qZGJjL1BlcnNpc3RlbnRTZW5kZXJCZWFuTWdyLmphdmEJKHJl dmlzaW9uIDcwODgwNSkKKysrIHNyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zYW5kZXNoYTIvc3Rv cmFnZS9qZGJjL1BlcnNpc3RlbnRTZW5kZXJCZWFuTWdyLmphdmEJKHdvcmtpbmcgY29weSkKQEAg LTE4MSw3ICsxODEsNyBAQAogCQkJdGhyb3dzIFNhbmRlc2hhU3RvcmFnZUV4Y2VwdGlvbiB7DQog CQlpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpIGxvZy5kZWJ1ZygiRGVsZXRlIE1zZ0lEICIgKyBt ZXNzYWdlSUQpOw0KIAkJdHJ5IHsNCi0JCQlTdGF0ZW1lbnQgc3RtdCA9IGdldERiQ29ubmVjdGlv bigpLmNyZWF0ZVN0YXRlbWVudCgpOw0KKwkJCVN0YXRlbWVudCBzdG10ID0gZ2V0RGJDb25uZWN0 aW9uKEpEQkNUcmFuc2FjdGlvbi5TRU5ERVJfQkVBTikuY3JlYXRlU3RhdGVtZW50KCk7DQogCQkJ c3RtdC5leGVjdXRlVXBkYXRlKCJkZWxldGUgZnJvbSB3c3JtX3NlbmRlciB3aGVyZSBtZXNzYWdl X2lkPSciICsgbWVzc2FnZUlEICsgIiciKTsNCiAJCQlzdG10LmNsb3NlKCk7DQogCQl9IGNhdGNo IChFeGNlcHRpb24gZXgpIHsNCkBAIC0xOTUsNyArMTk1LDcgQEAKIAkJU3RyaW5nIHNxbCA9IHJl cXVlc3RGb3JNb2RlbChiZWFuKTsNCiAJCUFycmF5TGlzdDxTZW5kZXJCZWFuPiBsc3QgPSBuZXcg QXJyYXlMaXN0PFNlbmRlckJlYW4+KCk7DQogCQl0cnkgew0KLQkJCVN0YXRlbWVudCBzdG10ID0g Z2V0RGJDb25uZWN0aW9uKCkuY3JlYXRlU3RhdGVtZW50KFJlc3VsdFNldC5UWVBFX0ZPUldBUkRf T05MWSwgUmVzdWx0U2V0LkNPTkNVUl9VUERBVEFCTEUpOw0KKwkJCVN0YXRlbWVudCBzdG10ID0g Z2V0RGJDb25uZWN0aW9uKEpEQkNUcmFuc2FjdGlvbi5TRU5ERVJfQkVBTikuY3JlYXRlU3RhdGVt ZW50KFJlc3VsdFNldC5UWVBFX0ZPUldBUkRfT05MWSwgUmVzdWx0U2V0LkNPTkNVUl9VUERBVEFC TEUpOw0KIAkJCVJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHNxbCk7DQogCQkJd2hp bGUgKHJzLm5leHQoKSkgew0KIAkJCQlsc3QuYWRkKGdldEJlYW4ocnMpKTsNCkBAIC0yMTMsNyAr MjEzLDcgQEAKIAkJCXRocm93cyBTYW5kZXNoYVN0b3JhZ2VFeGNlcHRpb24gew0KIAkJQXJyYXlM aXN0PFNlbmRlckJlYW4+IGxzdCA9IG5ldyBBcnJheUxpc3Q8U2VuZGVyQmVhbj4oKTsNCiAJCXRy eSB7DQotCQkJU3RhdGVtZW50IHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oKS5jcmVhdGVTdGF0ZW1l bnQoUmVzdWx0U2V0LlRZUEVfRk9SV0FSRF9PTkxZLCBSZXN1bHRTZXQuQ09OQ1VSX1VQREFUQUJM RSk7DQorCQkJU3RhdGVtZW50IHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oSkRCQ1RyYW5zYWN0aW9u LlNFTkRFUl9CRUFOKS5jcmVhdGVTdGF0ZW1lbnQoUmVzdWx0U2V0LlRZUEVfRk9SV0FSRF9PTkxZ LCBSZXN1bHRTZXQuQ09OQ1VSX1VQREFUQUJMRSk7DQogCQkJUmVzdWx0U2V0IHJzID0gc3RtdC5l eGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gd3NybV9zZW5kZXIgd2hlcmUgaW50ZXJuYWxfc2Vx dWVuY2VfaWQ9JyIgKw0KIAkJCQkJaW50ZXJuYWxTZXF1ZW5jZUlkICsgIiciKTsNCiAJCQl3aGls ZSAocnMubmV4dCgpKSB7DQpAQCAtMjMxLDcgKzIzMSw3IEBACiAJCQl0aHJvd3MgU2FuZGVzaGFT dG9yYWdlRXhjZXB0aW9uIHsNCiAJCVNlbmRlckJlYW4gcmVzdWx0ID0gbnVsbDsNCiAJCXRyeSB7 DQotCQkJU3RhdGVtZW50IHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oKS5jcmVhdGVTdGF0ZW1lbnQo KTsNCisJCQlTdGF0ZW1lbnQgc3RtdCA9IGdldERiQ29ubmVjdGlvbihKREJDVHJhbnNhY3Rpb24u U0VOREVSX0JFQU4pLmNyZWF0ZVN0YXRlbWVudCgpOw0KIAkJCVN0cmluZyBzcWwgPSAic2VsZWN0 ICogZnJvbSB3c3JtX3NlbmRlciB3aGVyZSBzZXF1ZW5jZV9pZCI7DQogCQkJaWYgKHNlcXVlbmNl SWQgPT0gbnVsbCkgc3FsICs9ICIgaXMgbnVsbCAiOw0KIAkJCWVsc2Ugc3FsICs9ICI9JyIgKyBz ZXF1ZW5jZUlkICsgIicgIjsNCkBAIC0yNjAsNyArMjYwLDcgQEAKIAkJCXRocm93cyBTYW5kZXNo YVN0b3JhZ2VFeGNlcHRpb24gew0KIAkJaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKSBsb2cuZGVi dWcoIkluc2VydCAiICsgYmVhbik7DQogCQl0cnkgew0KLQkJCVByZXBhcmVkU3RhdGVtZW50IHBz dG10ID0gZ2V0RGJDb25uZWN0aW9uKCkucHJlcGFyZVN0YXRlbWVudCgiaW5zZXJ0IGludG8gd3Ny bV9zZW5kZXIoIiArDQorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgcHN0bXQgPSBnZXREYkNvbm5lY3Rp b24oSkRCQ1RyYW5zYWN0aW9uLlNFTkRFUl9CRUFOKS5wcmVwYXJlU3RhdGVtZW50KCJpbnNlcnQg aW50byB3c3JtX3NlbmRlcigiICsNCiAJCQkJCSJtZXNzYWdlX2lkLCBtZXNzYWdlX2NvbnRleHRf cmVmX2tleSwgaW50ZXJuYWxfc2VxdWVuY2VfaWQsIHNlcXVlbmNlX2lkLCIgKw0KIAkJCQkJInRv X2FkZHJlc3MsIGluYm91bmRfc2VxdWVuY2VfaWQsIHNlbmQsIHNlbnRfY291bnQsIG1lc3NhZ2Vf bnVtYmVyLCByZXNlbmQsIiArDQogCQkJCQkidGltZV90b19zZW5kLCBtZXNzYWdlX3R5cGUsIGxh c3RfbWVzc2FnZSwgaW5ib3VuZF9tZXNzYWdlX251bWJlciwgdHJhbnNwb3J0X2F2YWlsYWJsZSwi ICsNCkBAIC0yOTMsNyArMjkzLDcgQEAKIAkJCXRocm93cyBTYW5kZXNoYVN0b3JhZ2VFeGNlcHRp b24gew0KIAkJU2VuZGVyQmVhbiBiZWFuID0gbnVsbDsNCiAJCXRyeSB7DQotCQkJU3RhdGVtZW50 IHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oKS5jcmVhdGVTdGF0ZW1lbnQoUmVzdWx0U2V0LlRZUEVf Rk9SV0FSRF9PTkxZLCBSZXN1bHRTZXQuQ09OQ1VSX1VQREFUQUJMRSk7DQorCQkJU3RhdGVtZW50 IHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oSkRCQ1RyYW5zYWN0aW9uLlNFTkRFUl9CRUFOKS5jcmVh dGVTdGF0ZW1lbnQoUmVzdWx0U2V0LlRZUEVfRk9SV0FSRF9PTkxZLCBSZXN1bHRTZXQuQ09OQ1VS X1VQREFUQUJMRSk7DQogCQkJUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoInNlbGVj dCAqIGZyb20gd3NybV9zZW5kZXIgd2hlcmUgbWVzc2FnZV9pZD0nIiArIG1lc3NhZ2VJRCArICIn Iik7DQogCQkJaWYgKCEgcnMubmV4dCgpKSByZXR1cm4gYmVhbjsNCiAJCQliZWFuID0gZ2V0QmVh bihycyk7DQpAQCAtMzA5LDcgKzMwOSw3IEBACiAJCQl0aHJvd3MgU2FuZGVzaGFTdG9yYWdlRXhj ZXB0aW9uIHsNCiAJCWlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgbG9nLmRlYnVnKCJVcGRhdGUg IiArIGJlYW4pOw0KIAkJdHJ5IHsNCi0JCQlQcmVwYXJlZFN0YXRlbWVudCBwc3RtdCA9IGdldERi Q29ubmVjdGlvbigpLnByZXBhcmVTdGF0ZW1lbnQoInVwZGF0ZSB3c3JtX3NlbmRlciBzZXQgIiAr DQorCQkJUHJlcGFyZWRTdGF0ZW1lbnQgcHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oSkRCQ1RyYW5z YWN0aW9uLlNFTkRFUl9CRUFOKS5wcmVwYXJlU3RhdGVtZW50KCJ1cGRhdGUgd3NybV9zZW5kZXIg c2V0ICIgKw0KIAkJCQkJIm1lc3NhZ2VfY29udGV4dF9yZWZfa2V5PT8sIGludGVybmFsX3NlcXVl bmNlX2lkPT8sIHNlcXVlbmNlX2lkPT8sIiArDQogCQkJCQkidG9fYWRkcmVzcz0/LCBpbmJvdW5k X3NlcXVlbmNlX2lkPT8sIHNlbmQ9Pywgc2VudF9jb3VudD0/LCBtZXNzYWdlX251bWJlcj0/LCBy ZXNlbmQ9PywiICsNCiAJCQkJCSJ0aW1lX3RvX3NlbmQ9PywgbWVzc2FnZV90eXBlPT8sIGxhc3Rf bWVzc2FnZT0/LCBpbmJvdW5kX21lc3NhZ2VfbnVtYmVyPT8sIHRyYW5zcG9ydF9hdmFpbGFibGU9 PywiICsNCkBAIC0zNDMsNyArMzQzLDcgQEAKIAkJU3RyaW5nIHNxbCA9IHJlcXVlc3RGb3JNb2Rl bChiZWFuKTsNCiAJCVNlbmRlckJlYW4gcmVzdWx0ID0gbnVsbDsNCiAJCXRyeSB7DQotCQkJU3Rh dGVtZW50IHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oKS5jcmVhdGVTdGF0ZW1lbnQoKTsNCisJCQlT dGF0ZW1lbnQgc3RtdCA9IGdldERiQ29ubmVjdGlvbihKREJDVHJhbnNhY3Rpb24uU0VOREVSX0JF QU4pLmNyZWF0ZVN0YXRlbWVudCgpOw0KIAkJCVJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1 ZXJ5KHNxbCk7DQogCQkJd2hpbGUgKHJzLm5leHQoKSkgew0KIAkJCQlpZiAocmVzdWx0ID09IG51 bGwpIHsNCkBAIC0zNjgsNyArMzY4LDcgQEAKIAlwdWJsaWMgU2VuZGVyQmVhbiByZXRyaWV2ZUZy b21NZXNzYWdlUmVmS2V5KFN0cmluZyBtZXNzYWdlQ29udGV4dFJlZktleSkgew0KIAkJU2VuZGVy QmVhbiBiZWFuID0gbnVsbDsNCiAJCXRyeSB7DQotCQkJU3RhdGVtZW50IHN0bXQgPSBnZXREYkNv bm5lY3Rpb24oKS5jcmVhdGVTdGF0ZW1lbnQoUmVzdWx0U2V0LlRZUEVfRk9SV0FSRF9PTkxZLCBS ZXN1bHRTZXQuQ09OQ1VSX1VQREFUQUJMRSk7DQorCQkJU3RhdGVtZW50IHN0bXQgPSBnZXREYkNv bm5lY3Rpb24oSkRCQ1RyYW5zYWN0aW9uLlNFTkRFUl9CRUFOKS5jcmVhdGVTdGF0ZW1lbnQoUmVz dWx0U2V0LlRZUEVfRk9SV0FSRF9PTkxZLCBSZXN1bHRTZXQuQ09OQ1VSX1VQREFUQUJMRSk7DQog CQkJUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gd3NybV9z ZW5kZXIgd2hlcmUgbWVzc2FnZV9jb250ZXh0X3JlZl9rZXk9JyIgKyBtZXNzYWdlQ29udGV4dFJl ZktleSArICInIik7DQogCQkJaWYgKCEgcnMubmV4dCgpKSByZXR1cm4gYmVhbjsNCiAJCQliZWFu ID0gZ2V0QmVhbihycyk7DQpAQCAtMzgzLDcgKzM4Myw3IEBACiAJcHVibGljIFNlbmRlckJlYW4g cmV0cmlldmUoU3RyaW5nIHNlcXVuY2VJZCwgbG9uZyBtZXNzYWdlTnVtYmVyKSB0aHJvd3MgU2Fu ZGVzaGFTdG9yYWdlRXhjZXB0aW9uIHsNCiAJCVNlbmRlckJlYW4gYmVhbiA9IG51bGw7DQogCQl0 cnkgew0KLQkJCVN0YXRlbWVudCBzdG10ID0gZ2V0RGJDb25uZWN0aW9uKCkuY3JlYXRlU3RhdGVt ZW50KFJlc3VsdFNldC5UWVBFX0ZPUldBUkRfT05MWSwgUmVzdWx0U2V0LkNPTkNVUl9VUERBVEFC TEUpOw0KKwkJCVN0YXRlbWVudCBzdG10ID0gZ2V0RGJDb25uZWN0aW9uKEpEQkNUcmFuc2FjdGlv bi5TRU5ERVJfQkVBTikuY3JlYXRlU3RhdGVtZW50KFJlc3VsdFNldC5UWVBFX0ZPUldBUkRfT05M WSwgUmVzdWx0U2V0LkNPTkNVUl9VUERBVEFCTEUpOw0KIAkJCVJlc3VsdFNldCBycyA9IHN0bXQu ZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBmcm9tIHdzcm1fc2VuZGVyIHdoZXJlIHNlcXVlbmNlX2lk PSciICsgc2VxdW5jZUlkICsgIicgIiArDQogCQkJCQkiIGFuZCBtZXNzYWdlX251bWJlcj0iICsg bWVzc2FnZU51bWJlcik7DQogCQkJaWYgKCEgcnMubmV4dCgpKSByZXR1cm4gYmVhbjsNCkluZGV4 OiBzcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2FuZGVzaGEyL3N0b3JhZ2UvamRiYy9QZXJzaXN0 ZW50Uk1TQmVhbk1nci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNyYy9tYWluL2phdmEvb3JnL2FwYWNo ZS9zYW5kZXNoYTIvc3RvcmFnZS9qZGJjL1BlcnNpc3RlbnRSTVNCZWFuTWdyLmphdmEJKHJldmlz aW9uIDcwODgwNSkKKysrIHNyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zYW5kZXNoYTIvc3RvcmFn ZS9qZGJjL1BlcnNpc3RlbnRSTVNCZWFuTWdyLmphdmEJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw3 ICszMjIsNyBAQAogCQkJdGhyb3dzIFNhbmRlc2hhU3RvcmFnZUV4Y2VwdGlvbiB7DQogCQlpZiAo bG9nLmlzRGVidWdFbmFibGVkKCkpIGxvZy5kZWJ1ZygiZGVsZXRlIFJNU0JlYW4gbXNnSWQgIiAr IG1zZ0lkKTsNCiAJCXRyeSB7DQotCQkJU3RhdGVtZW50IHN0bXQgPSBnZXREYkNvbm5lY3Rpb24o KS5jcmVhdGVTdGF0ZW1lbnQoKTsNCisJCQlTdGF0ZW1lbnQgc3RtdCA9IGdldERiQ29ubmVjdGlv bihKREJDVHJhbnNhY3Rpb24uUk1TX0JFQU4pLmNyZWF0ZVN0YXRlbWVudCgpOw0KIAkJCXN0bXQu ZXhlY3V0ZVVwZGF0ZSgiZGVsZXRlIGZyb20gd3NybV9ybXMgd2hlcmUgY3JlYXRlX3NlcV9tc2df aWQ9JyIgKyBtc2dJZCArICInIik7DQogCQkJc3RtdC5jbG9zZSgpOw0KIAkJfSBjYXRjaCAoRXhj ZXB0aW9uIGV4KSB7DQpAQCAtMzM2LDcgKzMzNiw3IEBACiAJCVN0cmluZyBzcWwgPSByZXF1ZXN0 Rm9yTW9kZWwoYmVhbik7DQogCQlBcnJheUxpc3Q8Uk1TQmVhbj4gbHN0ID0gbmV3IEFycmF5TGlz dDxSTVNCZWFuPigpOw0KIAkJdHJ5IHsNCi0JCQlTdGF0ZW1lbnQgc3RtdCA9IGdldERiQ29ubmVj dGlvbigpLmNyZWF0ZVN0YXRlbWVudChSZXN1bHRTZXQuVFlQRV9GT1JXQVJEX09OTFksIFJlc3Vs dFNldC5DT05DVVJfVVBEQVRBQkxFKTsNCisJCQlTdGF0ZW1lbnQgc3RtdCA9IGdldERiQ29ubmVj dGlvbihKREJDVHJhbnNhY3Rpb24uUk1TX0JFQU4pLmNyZWF0ZVN0YXRlbWVudChSZXN1bHRTZXQu VFlQRV9GT1JXQVJEX09OTFksIFJlc3VsdFNldC5DT05DVVJfVVBEQVRBQkxFKTsNCiAJCQlSZXN1 bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOw0KIAkJCXdoaWxlIChycy5uZXh0KCkp IHsNCiAJCQkJbHN0LmFkZChnZXRCZWFuKHJzKSk7DQpAQCAtMzU0LDcgKzM1NCw3IEBACiAJCQl0 aHJvd3MgU2FuZGVzaGFTdG9yYWdlRXhjZXB0aW9uIHsNCiAJCWxvZy5kZWJ1ZygiaW5zZXJ0IFJN U0JlYW4gIiArIGJlYW4pOw0KIAkJdHJ5IHsNCi0JCQlQcmVwYXJlZFN0YXRlbWVudCBwc3RtdCA9 IGdldERiQ29ubmVjdGlvbigpLnByZXBhcmVTdGF0ZW1lbnQoImluc2VydCBpbnRvIHdzcm1fcm1z KCIgKw0KKwkJCVByZXBhcmVkU3RhdGVtZW50IHBzdG10ID0gZ2V0RGJDb25uZWN0aW9uKEpEQkNU cmFuc2FjdGlvbi5STVNfQkVBTikucHJlcGFyZVN0YXRlbWVudCgiaW5zZXJ0IGludG8gd3NybV9y bXMoIiArDQogCQkJCQkiY3JlYXRlX3NlcV9tc2dfaWQsc2VxdWVuY2VfaWQsdG9fZXByX2FkZHIs dG9fZXByLHJlcGx5X3RvX2Vwcl9hZGRyLHJlcGx5X3RvX2VwcixhY2tzX3RvX2Vwcl9hZGRyLGFj a3NfdG9fZXByLHJtX3ZlcnNpb24sc2VjdXJpdHlfdG9rZW5fZGF0YSwiICsNCiAJCQkJCSJsYXN0 X2FjdGl2YXRlZF90aW1lLGNsb3NlZCx0ZXJtaW5hdGVkX2ZsYWcscG9sbGluZ19tb2RlLHNlcnZp Y2VfbmFtZSwiICsNCiAJCQkJCSJmbGFncyxpZCxpbnRlcm5hbF9zZXF1ZW5jZV9pZCxjcmVhdGVf c2VxdWVuY2VfbXNnX3N0b3JlX2tleSwiICsNCkBAIC00MjcsNyArNDI3LDcgQEAKIAkJbG9nLmRl YnVnKCJSZXRyaWV2ZSAgbXNkSWQgIiArIG1zZ0lkKTsNCiAJCVJNU0JlYW4gYmVhbiA9IG51bGw7 DQogCQl0cnkgew0KLQkJCVN0YXRlbWVudCBzdG10ID0gZ2V0RGJDb25uZWN0aW9uKCkuY3JlYXRl U3RhdGVtZW50KFJlc3VsdFNldC5UWVBFX0ZPUldBUkRfT05MWSwgUmVzdWx0U2V0LkNPTkNVUl9V UERBVEFCTEUpOw0KKwkJCVN0YXRlbWVudCBzdG10ID0gZ2V0RGJDb25uZWN0aW9uKEpEQkNUcmFu c2FjdGlvbi5STVNfQkVBTikuY3JlYXRlU3RhdGVtZW50KFJlc3VsdFNldC5UWVBFX0ZPUldBUkRf T05MWSwgUmVzdWx0U2V0LkNPTkNVUl9VUERBVEFCTEUpOw0KIAkJCVJlc3VsdFNldCBycyA9IHN0 bXQuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBmcm9tIHdzcm1fcm1zIHdoZXJlIGNyZWF0ZV9zZXFf bXNnX2lkPSciICsgbXNnSWQgKyAiJyIpOw0KIAkJCWlmIChycy5uZXh0KCkpIGJlYW4gPSBnZXRC ZWFuKHJzKTsNCiAJCQlycy5jbG9zZSgpOw0KQEAgLTQ0Niw3ICs0NDYsNyBAQAogCQkJbG9nLmRl YnVnKCJVcGRhdGUgYmVhbiA6ICIgKyBiZWFuKTsNCiAJCX0NCiAJCXRyeSB7DQotCQkJUHJlcGFy ZWRTdGF0ZW1lbnQgcHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oKS5wcmVwYXJlU3RhdGVtZW50KCJ1 cGRhdGUgd3NybV9ybXMgc2V0ICIgKw0KKwkJCVByZXBhcmVkU3RhdGVtZW50IHBzdG10ID0gZ2V0 RGJDb25uZWN0aW9uKEpEQkNUcmFuc2FjdGlvbi5STVNfQkVBTikucHJlcGFyZVN0YXRlbWVudCgi dXBkYXRlIHdzcm1fcm1zIHNldCAiICsNCiAJCQkJCSJzZXF1ZW5jZV9pZD0/LHRvX2Vwcl9hZGRy PT8sdG9fZXByPT8scmVwbHlfdG9fZXByX2FkZHI9PyxyZXBseV90b19lcHI9PyxhY2tzX3RvX2Vw cl9hZGRyPT8sYWNrc190b19lcHI9PyxybV92ZXJzaW9uPT8sc2VjdXJpdHlfdG9rZW5fZGF0YT0/ LCIgKw0KIAkJCQkJImxhc3RfYWN0aXZhdGVkX3RpbWU9PyxjbG9zZWQ9Pyx0ZXJtaW5hdGVkX2Zs YWc9Pyxwb2xsaW5nX21vZGU9PyxzZXJ2aWNlX25hbWU9PywiICsNCiAJCQkJCSJmbGFncz0/LGlk PT8saW50ZXJuYWxfc2VxdWVuY2VfaWQ9PyxjcmVhdGVfc2VxdWVuY2VfbXNnX3N0b3JlX2tleT0/ LCIgKw0KQEAgLTUxOSw3ICs1MTksNyBAQAogCQlTdHJpbmcgc3FsID0gcmVxdWVzdEZvck1vZGVs KGJlYW4pOw0KIAkJUk1TQmVhbiByZXN1bHQgPSBudWxsOw0KIAkJdHJ5IHsNCi0JCQlTdGF0ZW1l bnQgc3RtdCA9IGdldERiQ29ubmVjdGlvbigpLmNyZWF0ZVN0YXRlbWVudChSZXN1bHRTZXQuVFlQ RV9GT1JXQVJEX09OTFksIFJlc3VsdFNldC5DT05DVVJfVVBEQVRBQkxFKTsNCisJCQlTdGF0ZW1l bnQgc3RtdCA9IGdldERiQ29ubmVjdGlvbihKREJDVHJhbnNhY3Rpb24uUk1TX0JFQU4pLmNyZWF0 ZVN0YXRlbWVudChSZXN1bHRTZXQuVFlQRV9GT1JXQVJEX09OTFksIFJlc3VsdFNldC5DT05DVVJf VVBEQVRBQkxFKTsNCiAJCQlSZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeShzcWwpOw0K IAkJCXdoaWxlIChycy5uZXh0KCkpIHsNCiAJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7DQpAQCAt NTQ5LDcgKzU0OSw3IEBACiAJCVN0cmluZyBzcWwgPSByZXF1ZXN0Rm9yTW9kZWwoZHVtbXlCZWFu KTsNCiAJCVJNU0JlYW4gcmVzdWx0ID0gbnVsbDsNCiAJCXRyeSB7DQotCQkJU3RhdGVtZW50IHN0 bXQgPSBnZXREYkNvbm5lY3Rpb24oKS5jcmVhdGVTdGF0ZW1lbnQoUmVzdWx0U2V0LlRZUEVfRk9S V0FSRF9PTkxZLCBSZXN1bHRTZXQuQ09OQ1VSX1VQREFUQUJMRSk7DQorCQkJU3RhdGVtZW50IHN0 bXQgPSBnZXREYkNvbm5lY3Rpb24oSkRCQ1RyYW5zYWN0aW9uLlJNU19CRUFOKS5jcmVhdGVTdGF0 ZW1lbnQoUmVzdWx0U2V0LlRZUEVfRk9SV0FSRF9PTkxZLCBSZXN1bHRTZXQuQ09OQ1VSX1VQREFU QUJMRSk7DQogCQkJUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoc3FsKTsNCiANCiAJ CQl3aGlsZSAocnMubmV4dCgpKSB7DQpAQCAtNTgwLDcgKzU4MCw3IEBACiAJCVN0cmluZyBzcWwg PSByZXF1ZXN0Rm9yTW9kZWwoZHVtbXlCZWFuKTsNCiAJCVJNU0JlYW4gcmVzdWx0ID0gbnVsbDsN CiAJCXRyeSB7DQotCQkJU3RhdGVtZW50IHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oKS5jcmVhdGVT dGF0ZW1lbnQoUmVzdWx0U2V0LlRZUEVfRk9SV0FSRF9PTkxZLCBSZXN1bHRTZXQuQ09OQ1VSX1VQ REFUQUJMRSk7DQorCQkJU3RhdGVtZW50IHN0bXQgPSBnZXREYkNvbm5lY3Rpb24oSkRCQ1RyYW5z YWN0aW9uLlJNU19CRUFOKS5jcmVhdGVTdGF0ZW1lbnQoUmVzdWx0U2V0LlRZUEVfRk9SV0FSRF9P TkxZLCBSZXN1bHRTZXQuQ09OQ1VSX1VQREFUQUJMRSk7DQogCQkJUmVzdWx0U2V0IHJzID0gc3Rt dC5leGVjdXRlUXVlcnkoc3FsKTsNCiAJCQl3aGlsZSAocnMubmV4dCgpKSB7DQogCQkJCWlmIChy ZXN1bHQgPT0gbnVsbCkgew0KQEAgLTYwMyw0ICs2MDMsMTcgQEAKIAkJbG9nLmRlYnVnKCJGaW5k VW5pcXVlIFJNU0JlYW4gOiAiICsgcmVzdWx0KTsNCiAJCXJldHVybiByZXN1bHQ7DQogCX0NCisN CisJcHVibGljIHZvaWQgbG9jaygpIHRocm93cyBTYW5kZXNoYVN0b3JhZ2VFeGNlcHRpb24gew0K KwkJdHJ5IHsNCisJCQlTdGF0ZW1lbnQgc3RtdCA9IGdldERiQ29ubmVjdGlvbihKREJDVHJhbnNh Y3Rpb24uUk1TX0JFQU4pLmNyZWF0ZVN0YXRlbWVudChSZXN1bHRTZXQuVFlQRV9GT1JXQVJEX09O TFksIFJlc3VsdFNldC5DT05DVVJfVVBEQVRBQkxFKTsNCisJCQlSZXN1bHRTZXQgcnMgPSBzdG10 LmV4ZWN1dGVRdWVyeSgic2VsZWN0ICogZnJvbSB3c3JtX3JtcyIpOw0KKwkJCXJzLm5leHQoKTsN CisJCQlycy5jbG9zZSgpOw0KKwkJCXN0bXQuY2xvc2UoKTsNCisJCX0gY2F0Y2ggKEV4Y2VwdGlv biBleCkgew0KKwkJCWxvZy5lcnJvcigiRXhjZXB0aW9uIGluIGdldHRpbmcgbG9jayAiICsgZXgp Ow0KKwkJCXRocm93IG5ldyBTYW5kZXNoYVN0b3JhZ2VFeGNlcHRpb24oIkV4Y2VwdGlvbiBpbiBQ ZXJzaXN0ZW50Uk1TQmVhbk1hbmFnZXI6OmdldHRpbmcgbG9jayIsIGV4KTsNCisJCX0NCisJfQ0K IH0NCg== ------=_Part_57638_21645536.1225287848980 Content-Type: text/plain; charset=us-ascii --------------------------------------------------------------------- To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org For additional commands, e-mail: sandesha-dev-help@ws.apache.org ------=_Part_57638_21645536.1225287848980--