Re: Is.Serializable
"Simone Busoli" <[email protected]> Mon, 8 Sep 2008 21:28:51 +0200
| Newsgroups | gmane.comp.windows.dotnet.nunit.user |
|---|---|
| Message-ID | <[email protected]> |
------=_Part_79349_6646098.1220902131809 Content-Type: multipart/alternative; boundary="----=_Part_79350_20876809.1220902131809" ------=_Part_79350_20876809.1220902131809 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline So here's the patch, for both the BinarySerializable and XmlSerializable constraints. I've followed your guide, I hope I did everything correctly. Feedback welcome. On Sun, Sep 7, 2008 at 7:35 PM, Charlie Poole <[email protected]>wrote: > Fair Enough! I'll put it on both lists. > > Charlie > > ------------------------------ > *From:* [email protected] [mailto: > [email protected]] *On Behalf Of *Simone Busoli > *Sent:* Sunday, September 07, 2008 12:24 AM > > *To:* Charlie Poole > *Cc:* [email protected] > *Subject:* Re: [Nunit-users] Is.Serializable > > Hi Charlie, > I'd prefer to work on it again, there's been some changes since I wrote it > in the beginning, and it would be useful for me to get comfortable with > them. If you agree, I think this would be the right moment to publish the > list of steps required to create a new constraint. > > On Sun, Sep 7, 2008 at 1:33 AM, Charlie Poole <[email protected] > > wrote: > >> Hi Simone, >> >> I'm now back to looking at this patch, which I set aside while working on >> other stuff. >> >> I agree with you about having two different constraints. Do you want me to >> put in >> the patch you sent and change the name to "Binary..." or would you like to >> rework it? >> >> As noted, we do now have a generic AttributeConstraint. >> >> Charlie >> >> ------------------------------ >> *From:* Simone Busoli [mailto:[email protected]] >> *Sent:* Thursday, August 14, 2008 11:15 AM >> *To:* Charlie Poole >> *Cc:* [email protected] >> >> *Subject:* Re: [Nunit-users] Is.Serializable >> >> >>> To check just for the attribute or the interface >>> Is.Serializable() OR >>> Is.Serializable >>> >>> To check by trying to do it >>> Is.Serializable(formatter) OR >>> Is.Serializable.Using(formatter) >>> >> >> I think that making Is.Serializable check for the presence of the >> attribute on the class might be misleading, because its presence doesn't >> mean it's serializable, and its absence doesn't mean it isn't. I think that >> Is.Serializable should be used to check that an object is really >> serializable, together with its references. That is, Is.Serializable should >> come in two flavours, one that checks if it is serializable in binary >> format, and another for xml. I'll come to this later. >> About checking for the presence of the attribute, as you mentioned in a >> comment to Fabio's feature request, I think it could be generalized with >> Has.Attribute<> or Has.Attribute(Type). >> So, given that the presence of an attribute is checked with a generic >> Has.Attribute, the way I would tackle the true ability of an object graph to >> serialize is either using Is.XmlSerializable and Is.BinarySerializable or >> something equivalent. I don't get how you could pass in an instance of a >> formatter; I guess you proposed it because you might want to be able to use >> the assertion for other types of formatters not built into the .net fx s >> well, but then how would you call their methods? Via reflection? >> >> >>> >>> The aternatives above are between using a method and using a property. It >>> would be >>> cool to use the property for te first example and the method for the >>> second, but >>> that's not possible. >>> >>> Most of our syntactic elements use a property format when there is no >>> argument. >>> When an element has an optional argument, then we are forced to use >>> method >>> syntax, which may look a bit odd. For example, we have to useIs.Ordered() >>> rather than Is.Ordered - That example should be familiar to you :-) >>> >>> I lean toward "Using" or "With" or some other keyword. >>> >>> What do folks think? >>> >> >> I'm fine with anything you choose. I don't think it's so important if it's >> a property or a method, just let's try to be consistent :) >> >> >>> >>> Charlie >>> >>> ------------------------------ >>> *From:* Simone Busoli [mailto:[email protected]] >>> *Sent:* Thursday, August 14, 2008 12:16 AM >>> *To:* Charlie Poole >>> *Subject:* Re: [Nunit-users] Is.Serializable >>> >>> Hmm, I just realized that what I'm doing is not enough for the object >>> to be serializable. I noticed that the prerequisites for it to be >>> serializable are quite different according to whether you want to serialize >>> it to xml or to binary. For example, the binary serialization doesn't >>> require classes to be public, while xml does. xml serialization doesn't >>> require the serializable attribute, while the binary does. So I'm wondering >>> if it could be the case to split the assertion in IsBinarySerializable and >>> IsXmlSerializable, or check that it is both binary and xml serializable in >>> the same assertion. Thoughts? >>> >>> On Thu, Aug 14, 2008 at 2:02 AM, Charlie Poole < >>> [email protected]> wrote: >>> >>>> Hi Simone, >>>> >>>> This looks good to me. Would you like to synch up and fix it so it works >>>> with the latest code? My major >>>> changes to Constraint, ConstraintBuilder, etc. are done and it would >>>> give you a good way for you >>>> to get familiar with those changes. Once it's done, you can either send >>>> me a new patch or - if >>>> you would like - I'll make you a commiter so you can add it yourself. If >>>> you agree, I'll explain more >>>> to you about review of code etc. >>>> >>>> Charlie >>>> >>>> ------------------------------ >>>> *From:* [email protected] [mailto: >>>> [email protected]] *On Behalf Of *Simone Busoli >>>> *Sent:* Monday, August 11, 2008 7:11 AM >>>> *To:* [email protected] >>>> *Subject:* [Nunit-users] Is.Serializable >>>> >>>> With regards to: >>>> http://sourceforge.net/tracker/index.php?func=detail&aid=2028517&group_id=10749&atid=360749 >>>> >>>> I have implemented a SerializableConstraint accessible via >>>> Is.Serializable. The match is true if serialization to and deserialization >>>> from a memory stream via a BinaryFormatter both succeed and the deserialized >>>> object is not null. Otherwise the match returns false. >>>> >>>> >>> >> > ------=_Part_79350_20876809.1220902131809 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline <div dir="ltr">So here's the patch, for both the BinarySerializable and XmlSerializable constraints. I've followed your guide, I hope I did everything correctly. Feedback welcome.<br><br><div class="gmail_quote">On Sun, Sep 7, 2008 at 7:35 PM, Charlie Poole <span dir="ltr"><<a href="mailto:[email protected]">[email protected]</a>></span> wrote:<br> <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> <div> <div><span><font face="Arial" color="#0000ff" size="2">Fair Enough! I'll put it on both lists.</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div><span><font face="Arial" color="#0000ff" size="2">Charlie</font></span></div><br> <blockquote dir="ltr" style="padding-left:5px;margin-left:5px;border-left:#0000ff 2px solid;margin-right:0px"> <div lang="en-us" dir="ltr" align="left"> <hr> <font face="Tahoma" size="2"><div class="Ih2E3d"><b>From:</b> <a href="mailto:[email protected]" target="_blank">[email protected]</a> [mailto:<a href="mailto:[email protected]" target="_blank">[email protected]</a>] <b>On Behalf Of </b>Simone Busoli<br></div><b>Sent:</b> Sunday, September 07, 2008 12:24 AM<div><div></div><div class="Wj3C7c"><br><b>To:</b> Charlie Poole<br><b>Cc:</b> <a href="mailto:[email protected]" target="_blank">[email protected]</a><br><b>Subject:</b> Re: [Nunit-users] Is.Serializable<br></div></div></font><br></div><div><div></div><div class="Wj3C7c"> <div></div> <div dir="ltr">Hi Charlie, <div><br></div> <div>I'd prefer to work on it again, there's been some changes since I wrote it in the beginning, and it would be useful for me to get comfortable with them. If you agree, I think this would be the right moment to publish the list of steps required to create a new constraint.<br><br> <div class="gmail_quote">On Sun, Sep 7, 2008 at 1:33 AM, Charlie Poole <span dir="ltr"><<a href="mailto:[email protected]" target="_blank">[email protected]</a>></span> wrote:<br> <blockquote class="gmail_quote" style="padding-left:1ex;margin:0px 0px 0px 0.8ex;border-left:#ccc 1px solid"> <div> <div><span><font face="Arial" color="#0000ff" size="2">Hi Simone,</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div><span><font face="Arial" color="#0000ff" size="2">I'm now back to looking at this patch, which I set aside while working on other stuff.</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div><span><font face="Arial" color="#0000ff" size="2">I agree with you about having two different constraints. Do you want me to put in</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2">the patch you sent and change the name to "Binary..." or would you like to rework it?</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div><span><font face="Arial" color="#0000ff" size="2">As noted, we do now have a generic AttributeConstraint.</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div><span><font face="Arial" color="#0000ff" size="2">Charlie</font></span></div><br> <blockquote dir="ltr" style="padding-left:5px;margin-left:5px;border-left:#0000ff 2px solid;margin-right:0px"> <div lang="en-us" dir="ltr" align="left"> <hr> <font face="Tahoma" size="2"> <div><b>From:</b> Simone Busoli [mailto:<a href="mailto:[email protected]" target="_blank">[email protected]</a>] <br></div><b>Sent:</b> Thursday, August 14, 2008 11:15 AM<br><b>To:</b> Charlie Poole<br><b>Cc:</b> <a href="mailto:[email protected]" target="_blank">[email protected]</a> <div> <div></div> <div><br><b>Subject:</b> Re: [Nunit-users] Is.Serializable<br></div></div></font><br></div> <div> <div></div> <div> <div></div> <div dir="ltr"> <div class="gmail_quote"> <blockquote class="gmail_quote" style="padding-left:1ex;margin:0pt 0pt 0pt 0.8ex;border-left:rgb(204,204,204) 1px solid"> <div><br> <div><span><font face="Arial" color="#0000ff" size="2">To check just for the attribute or the interface</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"> Is.Serializable() OR</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"> Is.Serializable</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div><span><font face="Arial" color="#0000ff" size="2">To check by trying to do it</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"> Is.Serializable(formatter) OR</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"> Is.Serializable.Using(formatter)</font></span></div></div></blockquote> <div><br>I think that making Is.Serializable check for the presence of the attribute on the class might be misleading, because its presence doesn't mean it's serializable, and its absence doesn't mean it isn't. I think that Is.Serializable should be used to check that an object is really serializable, together with its references. That is, Is.Serializable should come in two flavours, one that checks if it is serializable in binary format, and another for xml. I'll come to this later.<br>About checking for the presence of the attribute, as you mentioned in a comment to Fabio's feature request, I think it could be generalized with Has.Attribute<> or Has.Attribute(Type).<br>So, given that the presence of an attribute is checked with a generic Has.Attribute, the way I would tackle the true ability of an object graph to serialize is either using Is.XmlSerializable and Is.BinarySerializable or something equivalent. I don't get how you could pass in an instance of a formatter; I guess you proposed it because you might want to be able to use the assertion for other types of formatters not built into the .net fx s well, but then how would you call their methods? Via reflection?<br> </div> <blockquote class="gmail_quote" style="padding-left:1ex;margin:0pt 0pt 0pt 0.8ex;border-left:rgb(204,204,204) 1px solid"> <div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div><span><font face="Arial" color="#0000ff" size="2">The aternatives above are between using a method and using a property. It would be</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2">cool to use the property for te first example and the method for the second, but </font></span></div> <div><span><font face="Arial" color="#0000ff" size="2">that's not possible.</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div><span><font face="Arial" color="#0000ff" size="2">Most of our syntactic elements use a property format when there is no argument.</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2">When an element has an optional argument, then we are forced to use method</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2">syntax, which may look a bit odd. For example, we have to use</font></span><span><font face="Arial" color="#0000ff" size="2"> Is.Ordered()</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2">rather than Is.Ordered - That example should be familiar to you :-)</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div><span><font face="Arial" color="#0000ff" size="2">I lean toward "Using" or "With" or some other keyword.</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div><span><font face="Arial" color="#0000ff" size="2">What do folks think?</font></span></div></div></blockquote> <div><br>I'm fine with anything you choose. I don't think it's so important if it's a property or a method, just let's try to be consistent :)<br> </div> <blockquote class="gmail_quote" style="padding-left:1ex;margin:0pt 0pt 0pt 0.8ex;border-left:rgb(204,204,204) 1px solid"> <div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span> </div><font color="#888888"> <div><span><font face="Arial" color="#0000ff" size="2">Charlie</font></span></div><br></font> <blockquote dir="ltr" style="padding-left:5px;margin-left:5px;border-left:rgb(0,0,255) 2px solid;margin-right:0px"> <div> <div lang="en-us" dir="ltr" align="left"> <hr> <font face="Tahoma" size="2"><b>From:</b> Simone Busoli [mailto:<a href="mailto:[email protected]" target="_blank">[email protected]</a>] <br><b>Sent:</b> Thursday, August 14, 2008 12:16 AM<br><b>To:</b> Charlie Poole<br><b>Subject:</b> Re: [Nunit-users] Is.Serializable<br></font><br></div> <div></div></div> <div> <div></div> <div> <div dir="ltr">Hmm, I just realized that what I'm doing is not enough for the object to be serializable. I noticed that the prerequisites for it to be serializable are quite different according to whether you want to serialize it to xml or to binary. For example, the binary serialization doesn't require classes to be public, while xml does. xml serialization doesn't require the serializable attribute, while the binary does. So I'm wondering if it could be the case to split the assertion in IsBinarySerializable and IsXmlSerializable, or check that it is both binary and xml serializable in the same assertion. Thoughts?<br><br> <div class="gmail_quote">On Thu, Aug 14, 2008 at 2:02 AM, Charlie Poole <span dir="ltr"><<a href="mailto:[email protected]" target="_blank">[email protected]</a>></span> wrote:<br> <blockquote class="gmail_quote" style="padding-left:1ex;margin:0pt 0pt 0pt 0.8ex;border-left:rgb(204,204,204) 1px solid"> <div> <div><span><font face="Arial" color="#0000ff" size="2">Hi Simone,</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div><span><font face="Arial" color="#0000ff" size="2">This looks good to me. Would you like to synch up and fix it so it works with the latest code? My major</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2">changes to Constraint, ConstraintBuilder, etc. are done and it would give you a good way for you</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2">to get familiar with those changes. Once it's done, you can either send me a new patch or - if</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2">you would like - I'll make you a commiter so you can add it yourself. If you agree, I'll explain more</font></span></div> <div><span><font face="Arial" color="#0000ff" size="2">to you about review of code etc.</font></span></div> <div> </div> <div><span></span><font face="Arial"><font color="#0000ff"><font size="2">C<span>harlie</span></font></font></font><br></div> <blockquote dir="ltr" style="padding-left:5px;margin-left:5px;border-left:rgb(0,0,255) 2px solid;margin-right:0px"> <div lang="en-us" dir="ltr" align="left"> <hr> <font face="Tahoma" size="2"><b>From:</b> <a href="mailto:[email protected]" target="_blank">[email protected]</a> [mailto:<a href="mailto:[email protected]" target="_blank">[email protected]</a>] <b>On Behalf Of </b>Simone Busoli<br><b>Sent:</b> Monday, August 11, 2008 7:11 AM<br><b>To:</b> <a href="mailto:[email protected]" target="_blank">[email protected]</a><br><b>Subject:</b> [Nunit-users] Is.Serializable<br></font><br></div> <div> <div></div> <div dir="ltr">With regards to: <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=2028517&group_id=10749&atid=360749" target="_blank">http://sourceforge.net/tracker/index.php?func=detail&aid=2028517&group_id=10749&atid=360749</a><br> <br>I have implemented a SerializableConstraint accessible via Is.Serializable. The match is true if serialization to and deserialization from a memory stream via a BinaryFormatter both succeed and the deserialized object is not null. Otherwise the match returns false.<br></div></div></blockquote></div></blockquote></div><br></div></div></div></blockquote></div></blockquote></div><br></div></div></div></blockquote></div></blockquote></div><br></div></div></div></div></blockquote> </div> </blockquote></div><br></div> ------=_Part_79350_20876809.1220902131809-- ------=_Part_79349_6646098.1220902131809 Content-Type: application/octet-stream; name=serializable.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fkvhkugj0 Content-Disposition: attachment; filename=serializable.patch SW5kZXg6IHNvbHV0aW9ucy92czIwMDgvTlVuaXRGcmFtZXdvcmsvZnJhbWV3b3JrL251bml0LmZy YW1ld29yay5kbGwuY3Nwcm9qDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3QvbnVuaXQv bnVuaXQyMC9zb2x1dGlvbnMvdnMyMDA4L05Vbml0RnJhbWV3b3JrL2ZyYW1ld29yay9udW5pdC5m cmFtZXdvcmsuZGxsLmNzcHJvaix2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQNCmRpZmYgLXUg LXIxLjE0IG51bml0LmZyYW1ld29yay5kbGwuY3Nwcm9qDQotLS0gc29sdXRpb25zL3ZzMjAwOC9O VW5pdEZyYW1ld29yay9mcmFtZXdvcmsvbnVuaXQuZnJhbWV3b3JrLmRsbC5jc3Byb2oJNSBTZXAg MjAwOCAyMjozNDoxOSAtMDAwMAkxLjE0DQorKysgc29sdXRpb25zL3ZzMjAwOC9OVW5pdEZyYW1l d29yay9mcmFtZXdvcmsvbnVuaXQuZnJhbWV3b3JrLmRsbC5jc3Byb2oJOCBTZXAgMjAwOCAxODox MToxMCAtMDAwMA0KQEAgLTEsNyArMSw3IEBADQog77u/PFByb2plY3QgRGVmYXVsdFRhcmdldHM9 IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNi dWlsZC8yMDAzIiBUb29sc1ZlcnNpb249IjMuNSI+DQogICA8UHJvcGVydHlHcm91cD4NCiAgICAg PFByb2plY3RUeXBlPkxvY2FsPC9Qcm9qZWN0VHlwZT4NCi0gICAgPFByb2R1Y3RWZXJzaW9uPjku MC4yMTAyMjwvUHJvZHVjdFZlcnNpb24+DQorICAgIDxQcm9kdWN0VmVyc2lvbj45LjAuMzA3Mjk8 L1Byb2R1Y3RWZXJzaW9uPg0KICAgICA8U2NoZW1hVmVyc2lvbj4yLjA8L1NjaGVtYVZlcnNpb24+ DQogICAgIDxQcm9qZWN0R3VpZD57ODNERDdFMTItQTcwNS00REJBLTlENzEtMDlDODk3M0Q5Mzgy fTwvUHJvamVjdEd1aWQ+DQogICAgIDxDb25maWd1cmF0aW9uIENvbmRpdGlvbj0iICckKENvbmZp Z3VyYXRpb24pJyA9PSAnJyAiPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KQEAgLTE3Myw2ICsxNzMs OSBAQA0KICAgICAgIDxMaW5rPkNvbnN0cmFpbnRzXFNhbWVBc0NvbnN0cmFpbnQuY3M8L0xpbms+ DQogICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4NCiAgICAgPC9Db21waWxlPg0KKyAgICA8 Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcTlVuaXRGcmFtZXdvcmtcZnJhbWV3b3Jr XENvbnN0cmFpbnRzXFNlcmlhbGl6YWJsZUNvbnN0cmFpbnRzLmNzIj4NCisgICAgICA8TGluaz5D b25zdHJhaW50c1xTZXJpYWxpemFibGVDb25zdHJhaW50cy5jczwvTGluaz4NCisgICAgPC9Db21w aWxlPg0KICAgICA8Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcTlVuaXRGcmFtZXdv cmtcZnJhbWV3b3JrXENvbnN0cmFpbnRzXFN0cmluZ0NvbnN0cmFpbnRzLmNzIj4NCiAgICAgICA8 TGluaz5Db25zdHJhaW50c1xTdHJpbmdDb25zdHJhaW50cy5jczwvTGluaz4NCiAgICAgICA8U3Vi VHlwZT5Db2RlPC9TdWJUeXBlPg0KSW5kZXg6IHNvbHV0aW9ucy92czIwMDgvTlVuaXRGcmFtZXdv cmsvdGVzdHMvbnVuaXQuZnJhbWV3b3JrLnRlc3RzLmNzcHJvag0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZp bGU6IC9jdnNyb290L251bml0L251bml0MjAvc29sdXRpb25zL3ZzMjAwOC9OVW5pdEZyYW1ld29y ay90ZXN0cy9udW5pdC5mcmFtZXdvcmsudGVzdHMuY3Nwcm9qLHYNCnJldHJpZXZpbmcgcmV2aXNp b24gMS45DQpkaWZmIC11IC1yMS45IG51bml0LmZyYW1ld29yay50ZXN0cy5jc3Byb2oNCi0tLSBz b2x1dGlvbnMvdnMyMDA4L05Vbml0RnJhbWV3b3JrL3Rlc3RzL251bml0LmZyYW1ld29yay50ZXN0 cy5jc3Byb2oJNSBTZXAgMjAwOCAyMjozNDoxOSAtMDAwMAkxLjkNCisrKyBzb2x1dGlvbnMvdnMy MDA4L05Vbml0RnJhbWV3b3JrL3Rlc3RzL251bml0LmZyYW1ld29yay50ZXN0cy5jc3Byb2oJOCBT ZXAgMjAwOCAxOToyMTozMiAtMDAwMA0KQEAgLTEsNyArMSw3IEBADQog77u/PFByb2plY3QgRGVm YXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9k ZXZlbG9wZXIvbXNidWlsZC8yMDAzIiBUb29sc1ZlcnNpb249IjMuNSI+DQogICA8UHJvcGVydHlH cm91cD4NCiAgICAgPFByb2plY3RUeXBlPkxvY2FsPC9Qcm9qZWN0VHlwZT4NCi0gICAgPFByb2R1 Y3RWZXJzaW9uPjkuMC4yMTAyMjwvUHJvZHVjdFZlcnNpb24+DQorICAgIDxQcm9kdWN0VmVyc2lv bj45LjAuMzA3Mjk8L1Byb2R1Y3RWZXJzaW9uPg0KICAgICA8U2NoZW1hVmVyc2lvbj4yLjA8L1Nj aGVtYVZlcnNpb24+DQogICAgIDxQcm9qZWN0R3VpZD57OEMzMjY0MzEtQUU1Ny00NjQ1LUFDQzEt QTkwQTBCNDI1MTI5fTwvUHJvamVjdEd1aWQ+DQogICAgIDxDb25maWd1cmF0aW9uIENvbmRpdGlv bj0iICckKENvbmZpZ3VyYXRpb24pJyA9PSAnJyAiPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KQEAg LTE2Niw2ICsxNjYsOSBAQA0KICAgICAgIDxMaW5rPkNvbnN0cmFpbnRzXFNhbWVBc1Rlc3QuY3M8 L0xpbms+DQogICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4NCiAgICAgPC9Db21waWxlPg0K KyAgICA8Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcTlVuaXRGcmFtZXdvcmtcdGVz dHNcQ29uc3RyYWludHNcU2VyaWFsaXphYmxlQ29uc3RyYWludFRlc3QuY3MiPg0KKyAgICAgIDxM aW5rPkNvbnN0cmFpbnRzXFNlcmlhbGl6YWJsZUNvbnN0cmFpbnRUZXN0LmNzPC9MaW5rPg0KKyAg ICA8L0NvbXBpbGU+DQogICAgIDxDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xOVW5p dEZyYW1ld29ya1x0ZXN0c1xDb25zdHJhaW50c1xTdHJpbmdDb25zdHJhaW50VGVzdHMuY3MiPg0K ICAgICAgIDxMaW5rPkNvbnN0cmFpbnRzXFN0cmluZ0NvbnN0cmFpbnRUZXN0cy5jczwvTGluaz4N CiAgICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPg0KQEAgLTI0OSw2ICsyNTIsOSBAQA0KICAg ICA8Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcTlVuaXRGcmFtZXdvcmtcdGVzdHNc U3ludGF4XFByb3BlcnR5VGVzdHMuY3MiPg0KICAgICAgIDxMaW5rPlN5bnRheFxQcm9wZXJ0eVRl c3RzLmNzPC9MaW5rPg0KICAgICA8L0NvbXBpbGU+DQorICAgIDxDb21waWxlIEluY2x1ZGU9Ii4u XC4uXC4uXC4uXHNyY1xOVW5pdEZyYW1ld29ya1x0ZXN0c1xTeW50YXhcU2VyaWFsaXphYmxlQ29u c3RyYWludHMuY3MiPg0KKyAgICAgIDxMaW5rPlN5bnRheFxTZXJpYWxpemFibGVDb25zdHJhaW50 cy5jczwvTGluaz4NCisgICAgPC9Db21waWxlPg0KICAgICA8Q29tcGlsZSBJbmNsdWRlPSIuLlwu LlwuLlwuLlxzcmNcTlVuaXRGcmFtZXdvcmtcdGVzdHNcU3ludGF4XFNpbXBsZUNvbnN0cmFpbnRz LmNzIj4NCiAgICAgICA8TGluaz5TeW50YXhcU2ltcGxlQ29uc3RyYWludHMuY3M8L0xpbms+DQog ICAgIDwvQ29tcGlsZT4NCkluZGV4OiBzcmMvTlVuaXRGcmFtZXdvcmsvZnJhbWV3b3JrL0NvbnN0 cmFpbnRzL0NvbnN0cmFpbnRGYWN0b3J5LmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jv b3QvbnVuaXQvbnVuaXQyMC9zcmMvTlVuaXRGcmFtZXdvcmsvZnJhbWV3b3JrL0NvbnN0cmFpbnRz L0NvbnN0cmFpbnRGYWN0b3J5LmNzLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS43DQpkaWZmIC11 IC1yMS43IENvbnN0cmFpbnRGYWN0b3J5LmNzDQotLS0gc3JjL05Vbml0RnJhbWV3b3JrL2ZyYW1l d29yay9Db25zdHJhaW50cy9Db25zdHJhaW50RmFjdG9yeS5jcwk2IFNlcCAyMDA4IDIyOjAyOjI3 IC0wMDAwCTEuNw0KKysrIHNyYy9OVW5pdEZyYW1ld29yay9mcmFtZXdvcmsvQ29uc3RyYWludHMv Q29uc3RyYWludEZhY3RvcnkuY3MJOCBTZXAgMjAwOCAxOToyMTozMSAtMDAwMA0KQEAgLTY2NCw1 ICs2NjQsMjYgQEANCiAgICAgICAgICAgICByZXR1cm4gbmV3IENvbGxlY3Rpb25Db250YWluc0Nv bnN0cmFpbnQoZXhwZWN0ZWQpOw0KICAgICAgICAgfQ0KICAgICAgICAgI2VuZHJlZ2lvbg0KKw0K KyAgICAgICAgI3JlZ2lvbiBTZXJpYWxpemFibGUgQ29uc3RyYWludHMNCisgICAgICAgIC8vLyA8 c3VtbWFyeT4NCisgICAgICAgIC8vLyBCaW5hcnlTZXJpYWxpemFibGUgcmV0dXJucyBhIGNvbnN0 cmFpbnQgdGhhdCB0ZXN0cyB3aGV0aGVyIA0KKyAgICAgICAgLy8vIGFuIG9iamVjdCBncmFwaCBp cyBzZXJpYWxpemFibGUgaW4gYmluYXJ5IGZvcm1hdC4NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+ DQorICAgICAgICBwdWJsaWMgQ29uc3RyYWludEV4cHJlc3Npb24gQmluYXJ5U2VyaWFsaXphYmxl DQorICAgICAgICB7DQorICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIElzLkJpbmFyeVNlcmlhbGl6 YWJsZTsgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQor ICAgICAgICAvLy8gWG1sU2VyaWFsaXphYmxlIHJldHVybnMgYSBjb25zdHJhaW50IHRoYXQgdGVz dHMgd2hldGhlciANCisgICAgICAgIC8vLyBhbiBvYmplY3QgZ3JhcGggaXMgc2VyaWFsaXphYmxl IGluIHhtbCBmb3JtYXQuDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHVibGlj IENvbnN0cmFpbnRFeHByZXNzaW9uIFhtbFNlcmlhbGl6YWJsZQ0KKyAgICAgICAgew0KKyAgICAg ICAgICAgIGdldCB7IHJldHVybiBJcy5YbWxTZXJpYWxpemFibGU7IH0NCisgICAgICAgIH0NCisN CisgICAgICAgICNlbmRyZWdpb24NCiAgICAgfQ0KIH0NCkluZGV4OiBzcmMvTlVuaXRGcmFtZXdv cmsvZnJhbWV3b3JrL0NvbnN0cmFpbnRzL1BhcnRpYWxDb25zdHJhaW50RXhwcmVzc2lvbi5jcw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L251bml0L251bml0MjAvc3JjL05Vbml0RnJh bWV3b3JrL2ZyYW1ld29yay9Db25zdHJhaW50cy9QYXJ0aWFsQ29uc3RyYWludEV4cHJlc3Npb24u Y3Msdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjQNCmRpZmYgLXUgLXIxLjQgUGFydGlhbENvbnN0 cmFpbnRFeHByZXNzaW9uLmNzDQotLS0gc3JjL05Vbml0RnJhbWV3b3JrL2ZyYW1ld29yay9Db25z dHJhaW50cy9QYXJ0aWFsQ29uc3RyYWludEV4cHJlc3Npb24uY3MJNiBTZXAgMjAwOCAyMjowMjoy NyAtMDAwMAkxLjQNCisrKyBzcmMvTlVuaXRGcmFtZXdvcmsvZnJhbWV3b3JrL0NvbnN0cmFpbnRz L1BhcnRpYWxDb25zdHJhaW50RXhwcmVzc2lvbi5jcwk4IFNlcCAyMDA4IDE5OjEyOjE2IC0wMDAw DQpAQCAtNDUwLDYgKzQ1MCwyOCBAQA0KICAgICAgICAgfQ0KICAgICAgICAgI2VuZHJlZ2lvbg0K IA0KKyAgICAgICAgI3JlZ2lvbiBTZXJpYWxpemFibGUgQ29uc3RyYWludHMNCisNCisgICAgICAg IC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBSZXNvbHZlcyB0aGUgY2hhaW4gb2YgY29uc3Ry YWludHMgdXNpbmcNCisgICAgICAgIC8vLyBCaW5hcnlTZXJpYWxpemFibGVDb25zdHJhaW50IGFz IGJhc2UuDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHVibGljIENvbnN0cmFp bnRFeHByZXNzaW9uIEJpbmFyeVNlcmlhbGl6YWJsZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg IGdldCB7IHJldHVybiBBcHBlbmQobmV3IEJpbmFyeVNlcmlhbGl6YWJsZUNvbnN0cmFpbnQoKSk7 IH0NCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBS ZXNvbHZlcyB0aGUgY2hhaW4gb2YgY29uc3RyYWludHMgdXNpbmcNCisgICAgICAgIC8vLyBYbWxT ZXJpYWxpemFibGVDb25zdHJhaW50IGFzIGJhc2UuDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0K KyAgICAgICAgcHVibGljIENvbnN0cmFpbnRFeHByZXNzaW9uIFhtbFNlcmlhbGl6YWJsZQ0KKyAg ICAgICAgew0KKyAgICAgICAgICAgIGdldCB7IHJldHVybiBBcHBlbmQobmV3IFhtbFNlcmlhbGl6 YWJsZUNvbnN0cmFpbnQoKSk7IH0NCisgICAgICAgIH0NCisNCisgICAgICAgICNlbmRyZWdpb24N CisNCiAgICAgICAgICNyZWdpb24gT3BlcmF0b3JzDQogDQogICAgICAgICAjcmVnaW9uIE5vdA0K SW5kZXg6IHNyYy9OVW5pdEZyYW1ld29yay9mcmFtZXdvcmsvSXMuY3MNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJD UyBmaWxlOiAvY3Zzcm9vdC9udW5pdC9udW5pdDIwL3NyYy9OVW5pdEZyYW1ld29yay9mcmFtZXdv cmsvSXMuY3Msdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjcNCmRpZmYgLXUgLXIxLjcgSXMuY3MN Ci0tLSBzcmMvTlVuaXRGcmFtZXdvcmsvZnJhbWV3b3JrL0lzLmNzCTYgU2VwIDIwMDggMjA6NDc6 MDMgLTAwMDAJMS43DQorKysgc3JjL05Vbml0RnJhbWV3b3JrL2ZyYW1ld29yay9Jcy5jcwk4IFNl cCAyMDA4IDE5OjE0OjE0IC0wMDAwDQpAQCAtODksNiArODksMjIgQEANCiAgICAgICAgICAgICBn ZXQgeyByZXR1cm4gbmV3IFBhcnRpYWxDb25zdHJhaW50RXhwcmVzc2lvbigpLlVuaXF1ZTsgfQ0K ICAgICAgICAgfQ0KIA0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIElzLkJp bmFyeVNlcmlhbGl6YWJsZSByZXR1cm5zIGEgY29uc3RyYWludCB0aGF0IHRlc3RzIHdoZXRoZXIg YW4gb2JqZWN0IGdyYXBoIGlzIHNlcmlhbGl6YWJsZSBpbiBiaW5hcnkgZm9ybWF0Lg0KKyAgICAg ICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHB1YmxpYyBzdGF0aWMgQ29uc3RyYWludEV4cHJl c3Npb24gQmluYXJ5U2VyaWFsaXphYmxlDQorICAgICAgICB7DQorICAgICAgICAgICAgZ2V0IHsg cmV0dXJuIG5ldyBQYXJ0aWFsQ29uc3RyYWludEV4cHJlc3Npb24oKS5CaW5hcnlTZXJpYWxpemFi bGU7IH0NCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8v LyBJcy5YbWxTZXJpYWxpemFibGUgcmV0dXJucyBhIGNvbnN0cmFpbnQgdGhhdCB0ZXN0cyB3aGV0 aGVyIGFuIG9iamVjdCBncmFwaCBpcyBzZXJpYWxpemFibGUgaW4geG1sIGZvcm1hdC4NCisgICAg ICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICBwdWJsaWMgc3RhdGljIENvbnN0cmFpbnRFeHBy ZXNzaW9uIFhtbFNlcmlhbGl6YWJsZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGdldCB7IHJl dHVybiBuZXcgUGFydGlhbENvbnN0cmFpbnRFeHByZXNzaW9uKCkuWG1sU2VyaWFsaXphYmxlOyB9 DQorICAgICAgICB9DQorDQogICAgICAgICAjZW5kcmVnaW9uDQogDQogICAgICAgICAjcmVnaW9u IENvbnN0cmFpbnRzIHdpdGggYW4gZXhwZWN0ZWQgdmFsdWUNCi0tLSBmcmFtZXdvcmsvQ29uc3Ry YWludHMvU2VyaWFsaXphYmxlQ29uc3RyYWludHMuY3MNCisrKyBmcmFtZXdvcmsvQ29uc3RyYWlu dHMvU2VyaWFsaXphYmxlQ29uc3RyYWludHMuY3MNCkBAIC0wLDAgKzEsMTU5IEBADQorLy8gKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKg0KKy8vIENvcHlyaWdodCAyMDA3LCBDaGFybGllIFBvb2xlDQorLy8gVGhpcyBpcyBmcmVl IHNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBOVW5pdCBsaWNlbnNlLiBZb3UgbWF5DQorLy8g b2J0YWluIGEgY29weSBvZiB0aGUgbGljZW5zZSBhdCBodHRwOi8vbnVuaXQub3JnLz9wPWxpY2Vu c2Umcj0yLjQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqDQorDQordXNpbmcgU3lzdGVtOw0KK3VzaW5nIFN5c3RlbS5J TzsNCit1c2luZyBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uOw0KK3VzaW5nIFN5c3RlbS5S dW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5CaW5hcnk7DQordXNpbmcgU3lzdGVtLlht bC5TZXJpYWxpemF0aW9uOw0KKw0KK25hbWVzcGFjZSBOVW5pdC5GcmFtZXdvcmsuQ29uc3RyYWlu dHMNCit7DQorICAgICNyZWdpb24gQmluYXJ5U2VyaWFsaXphYmxlQ29uc3RyYWludA0KKw0KKyAg ICAvLy8gPHN1bW1hcnk+DQorICAgIC8vLyBCaW5hcnlTZXJpYWxpemFibGVDb25zdHJhaW50IHRl c3RzIHdoZXRoZXIgDQorICAgIC8vLyBhbiBvYmplY3QgaXMgc2VyaWFsaXphYmxlIGluIGJpbmFy eSBmb3JtYXQuDQorICAgIC8vLyA8L3N1bW1hcnk+DQorICAgIHB1YmxpYyBjbGFzcyBCaW5hcnlT ZXJpYWxpemFibGVDb25zdHJhaW50IDogQ29uc3RyYWludA0KKyAgICB7DQorICAgICAgICByZWFk b25seSBCaW5hcnlGb3JtYXR0ZXIgc2VyaWFsaXplciA9IG5ldyBCaW5hcnlGb3JtYXR0ZXIoKTsN CisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBUZXN0IHdoZXRoZXIgdGhl IGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkIGJ5IGEgZ2l2ZW4gdmFsdWUNCisgICAgICAgIC8vLyA8 L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImFjdHVhbCI+VGhlIHZhbHVlIHRv IGJlIHRlc3RlZDwvcGFyYW0+DQorICAgICAgICAvLy8gPHJldHVybnM+VHJ1ZSBmb3Igc3VjY2Vz cywgZmFsc2UgZm9yIGZhaWx1cmU8L3JldHVybnM+DQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUg Ym9vbCBNYXRjaGVzKG9iamVjdCBhY3R1YWwpDQorICAgICAgICB7DQorICAgICAgICAgICAgdGhp cy5hY3R1YWwgPSBhY3R1YWw7DQorDQorICAgICAgICAgICAgaWYoYWN0dWFsID09IG51bGwpDQor ICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigpOw0KKw0KKyAgICAg ICAgICAgIHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7DQorDQorICAgICAgICAgICAg dHJ5DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzZXJpYWxpemVyLlNlcmlhbGl6 ZShzdHJlYW0sIGFjdHVhbCk7DQorDQorICAgICAgICAgICAgICAgIHN0cmVhbS5TZWVrKDAsIFNl ZWtPcmlnaW4uQmVnaW4pOw0KKw0KKyAgICAgICAgICAgICAgICBvYmplY3QgdmFsdWUgPSBzZXJp YWxpemVyLkRlc2VyaWFsaXplKHN0cmVhbSk7DQorDQorICAgICAgICAgICAgICAgIHJldHVybiB2 YWx1ZSAhPSBudWxsOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBjYXRjaCAoU2VyaWFs aXphdGlvbkV4Y2VwdGlvbikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICAvLy8gPHN1 bW1hcnk+DQorICAgICAgICAvLy8gV3JpdGUgdGhlIGNvbnN0cmFpbnQgZGVzY3JpcHRpb24gdG8g YSBNZXNzYWdlV3JpdGVyDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8vIDxw YXJhbSBuYW1lPSJ3cml0ZXIiPlRoZSB3cml0ZXIgb24gd2hpY2ggdGhlIGRlc2NyaXB0aW9uIGlz IGRpc3BsYXllZDwvcGFyYW0+DQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBXcml0ZURl c2NyaXB0aW9uVG8oTWVzc2FnZVdyaXRlciB3cml0ZXIpDQorICAgICAgICB7DQorICAgICAgICAg ICAgd3JpdGVyLldyaXRlKCJiaW5hcnkgc2VyaWFsaXphYmxlIik7DQorICAgICAgICB9DQorDQor ICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gV3JpdGUgdGhlIGFjdHVhbCB2YWx1 ZSBmb3IgYSBmYWlsaW5nIGNvbnN0cmFpbnQgdGVzdCB0byBhDQorICAgICAgICAvLy8gTWVzc2Fn ZVdyaXRlci4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHdyaXRlcw0KKyAgICAg ICAgLy8vIHRoZSByYXcgdmFsdWUgb2YgYWN0dWFsLCBsZWF2aW5nIGl0IHRvIHRoZSB3cml0ZXIg dG8NCisgICAgICAgIC8vLyBwZXJmb3JtIGFueSBmb3JtYXR0aW5nLg0KKyAgICAgICAgLy8vIDwv c3VtbWFyeT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0id3JpdGVyIj5UaGUgd3JpdGVyIG9u IHdoaWNoIHRoZSBhY3R1YWwgdmFsdWUgaXMgZGlzcGxheWVkPC9wYXJhbT4NCisgICAgICAgIHB1 YmxpYyBvdmVycmlkZSB2b2lkIFdyaXRlQWN0dWFsVmFsdWVUbyhNZXNzYWdlV3JpdGVyIHdyaXRl cikNCisgICAgICAgIHsNCisgICAgICAgICAgICB3cml0ZXIuV3JpdGUoIjx7MH0+IiwgYWN0dWFs LkdldFR5cGUoKS5OYW1lKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHB1YmxpYyBvdmVycmlk ZSBzdHJpbmcgVG9TdHJpbmcoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAiPGJp bmFyeXNlcmlhbGl6YWJsZT4iOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgICNlbmRyZWdp b24NCisgICAgDQorICAgICNyZWdpb24gWG1sU2VyaWFsaXphYmxlQ29uc3RyYWludA0KKw0KKyAg ICAvLy8gPHN1bW1hcnk+DQorICAgIC8vLyBCaW5hcnlTZXJpYWxpemFibGVDb25zdHJhaW50IHRl c3RzIHdoZXRoZXIgDQorICAgIC8vLyBhbiBvYmplY3QgaXMgc2VyaWFsaXphYmxlIGluIGJpbmFy eSBmb3JtYXQuDQorICAgIC8vLyA8L3N1bW1hcnk+DQorICAgIHB1YmxpYyBjbGFzcyBYbWxTZXJp YWxpemFibGVDb25zdHJhaW50IDogQ29uc3RyYWludA0KKyAgICB7DQorICAgICAgICBwcml2YXRl IFhtbFNlcmlhbGl6ZXIgc2VyaWFsaXplcjsNCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisg ICAgICAgIC8vLyBUZXN0IHdoZXRoZXIgdGhlIGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkIGJ5IGEg Z2l2ZW4gdmFsdWUNCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFt IG5hbWU9ImFjdHVhbCI+VGhlIHZhbHVlIHRvIGJlIHRlc3RlZDwvcGFyYW0+DQorICAgICAgICAv Ly8gPHJldHVybnM+VHJ1ZSBmb3Igc3VjY2VzcywgZmFsc2UgZm9yIGZhaWx1cmU8L3JldHVybnM+ DQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBNYXRjaGVzKG9iamVjdCBhY3R1YWwpDQor ICAgICAgICB7DQorICAgICAgICAgICAgdGhpcy5hY3R1YWwgPSBhY3R1YWw7DQorDQorICAgICAg ICAgICAgaWYoYWN0dWFsID09IG51bGwpDQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1 bWVudEV4Y2VwdGlvbigpOw0KKw0KKyAgICAgICAgICAgIHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5 U3RyZWFtKCk7DQorDQorICAgICAgICAgICAgdHJ5DQorICAgICAgICAgICAgew0KKyAgICAgICAg ICAgICAgICBzZXJpYWxpemVyID0gbmV3IFhtbFNlcmlhbGl6ZXIoYWN0dWFsLkdldFR5cGUoKSk7 DQorDQorICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuU2VyaWFsaXplKHN0cmVhbSwgYWN0dWFs KTsNCisNCisgICAgICAgICAgICAgICAgc3RyZWFtLlNlZWsoMCwgU2Vla09yaWdpbi5CZWdpbik7 DQorDQorICAgICAgICAgICAgICAgIG9iamVjdCB2YWx1ZSA9IHNlcmlhbGl6ZXIuRGVzZXJpYWxp emUoc3RyZWFtKTsNCisNCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGw7DQor ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGNhdGNoIChOb3RTdXBwb3J0ZWRFeGNlcHRpb24p DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAg ICAgICAgfQ0KKyAgICAgICAgICAgIGNhdGNoIChJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKQ0K KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAg ICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8v LyBXcml0ZSB0aGUgY29uc3RyYWludCBkZXNjcmlwdGlvbiB0byBhIE1lc3NhZ2VXcml0ZXINCisg ICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9IndyaXRlciI+ VGhlIHdyaXRlciBvbiB3aGljaCB0aGUgZGVzY3JpcHRpb24gaXMgZGlzcGxheWVkPC9wYXJhbT4N CisgICAgICAgIHB1YmxpYyBvdmVycmlkZSB2b2lkIFdyaXRlRGVzY3JpcHRpb25UbyhNZXNzYWdl V3JpdGVyIHdyaXRlcikNCisgICAgICAgIHsNCisgICAgICAgICAgICB3cml0ZXIuV3JpdGUoInht bCBzZXJpYWxpemFibGUiKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4N CisgICAgICAgIC8vLyBXcml0ZSB0aGUgYWN0dWFsIHZhbHVlIGZvciBhIGZhaWxpbmcgY29uc3Ry YWludCB0ZXN0IHRvIGENCisgICAgICAgIC8vLyBNZXNzYWdlV3JpdGVyLiBUaGUgZGVmYXVsdCBp bXBsZW1lbnRhdGlvbiBzaW1wbHkgd3JpdGVzDQorICAgICAgICAvLy8gdGhlIHJhdyB2YWx1ZSBv ZiBhY3R1YWwsIGxlYXZpbmcgaXQgdG8gdGhlIHdyaXRlciB0bw0KKyAgICAgICAgLy8vIHBlcmZv cm0gYW55IGZvcm1hdHRpbmcuDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8v IDxwYXJhbSBuYW1lPSJ3cml0ZXIiPlRoZSB3cml0ZXIgb24gd2hpY2ggdGhlIGFjdHVhbCB2YWx1 ZSBpcyBkaXNwbGF5ZWQ8L3BhcmFtPg0KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIHZvaWQgV3Jp dGVBY3R1YWxWYWx1ZVRvKE1lc3NhZ2VXcml0ZXIgd3JpdGVyKQ0KKyAgICAgICAgew0KKyAgICAg ICAgICAgIHdyaXRlci5Xcml0ZSgiPHswfT4iLCBhY3R1YWwuR2V0VHlwZSgpLk5hbWUpOw0KKyAg ICAgICAgfQ0KKw0KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpDQor ICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuICI8eG1sc2VyaWFsaXphYmxlPiI7DQorICAg ICAgICB9DQorICAgIH0NCisNCisgICAgI2VuZHJlZ2lvbg0KKw0KK30NCg0KLS0tIHRlc3RzL0Nv bnN0cmFpbnRzL1NlcmlhbGl6YWJsZUNvbnN0cmFpbnRUZXN0LmNzDQorKysgdGVzdHMvQ29uc3Ry YWludHMvU2VyaWFsaXphYmxlQ29uc3RyYWludFRlc3QuY3MNCkBAIC0wLDAgKzEsNTkgQEANCisv LyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqDQorLy8gQ29weXJpZ2h0IDIwMDcsIENoYXJsaWUgUG9vbGUNCisvLyBUaGlzIGlz IGZyZWUgc29mdHdhcmUgbGljZW5zZWQgdW5kZXIgdGhlIE5Vbml0IGxpY2Vuc2UuIFlvdSBtYXkN CisvLyBvYnRhaW4gYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGF0IGh0dHA6Ly9udW5pdC5vcmcvP3A9 bGljZW5zZSZyPTIuNA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCit1c2luZyBTeXN0ZW07DQordXNpbmcgU3lz dGVtLkNvbGxlY3Rpb25zOw0KK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOw0KKw0K K25hbWVzcGFjZSBOVW5pdC5GcmFtZXdvcmsuQ29uc3RyYWludHMuVGVzdHMNCit7DQorICAgIFtU ZXN0Rml4dHVyZV0NCisgICAgcHVibGljIGNsYXNzIEJpbmFyeVNlcmlhbGl6YWJsZVRlc3QgOiBD b25zdHJhaW50VGVzdEJhc2VXaXRoQXJndW1lbnRFeGNlcHRpb24NCisgICAgew0KKwkJW1NldFVw XQ0KKyAgICAgICAgcHVibGljIHZvaWQgU2V0VXAoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg IHRoZUNvbnN0cmFpbnQgPSBuZXcgQmluYXJ5U2VyaWFsaXphYmxlQ29uc3RyYWludCgpOw0KKyAg ICAgICAgICAgIGV4cGVjdGVkRGVzY3JpcHRpb24gPSAiYmluYXJ5IHNlcmlhbGl6YWJsZSI7DQor ICAgICAgICAgICAgc3RyaW5nUmVwcmVzZW50YXRpb24gPSAiPGJpbmFyeXNlcmlhbGl6YWJsZT4i Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgb2JqZWN0W10gU3VjY2Vzc0RhdGEgPSBuZXcgb2Jq ZWN0W10geyAxLCAiYSIsIG5ldyBBcnJheUxpc3QoKSwgbmV3IEludGVybmFsV2l0aFNlcmlhbGl6 YWJsZUF0dHJpYnV0ZUNsYXNzKCkgfTsNCisgICAgICAgIA0KKyAgICAgICAgb2JqZWN0W10gRmFp bHVyZURhdGEgPSBuZXcgb2JqZWN0W10geyBuZXcgSW50ZXJuYWxDbGFzcygpIH07DQorDQorICAg ICAgICBzdHJpbmdbXSBBY3R1YWxWYWx1ZXMgPSBuZXcgc3RyaW5nW10geyAiPEludGVybmFsQ2xh c3M+IiB9OyANCisNCisgICAgICAgIG9iamVjdFtdIEludmFsaWREYXRhID0gbmV3IG9iamVjdFtd IHsgbnVsbCB9Ow0KKyAgICB9DQorDQorICAgIFtUZXN0Rml4dHVyZV0NCisgICAgcHVibGljIGNs YXNzIFhtbFNlcmlhbGl6YWJsZVRlc3QgOiBDb25zdHJhaW50VGVzdEJhc2VXaXRoQXJndW1lbnRF eGNlcHRpb24NCisgICAgew0KKyAgICAgICAgW1NldFVwXQ0KKyAgICAgICAgcHVibGljIHZvaWQg U2V0VXAoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHRoZUNvbnN0cmFpbnQgPSBuZXcgWG1s U2VyaWFsaXphYmxlQ29uc3RyYWludCgpOw0KKyAgICAgICAgICAgIGV4cGVjdGVkRGVzY3JpcHRp b24gPSAieG1sIHNlcmlhbGl6YWJsZSI7DQorICAgICAgICAgICAgc3RyaW5nUmVwcmVzZW50YXRp b24gPSAiPHhtbHNlcmlhbGl6YWJsZT4iOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgb2JqZWN0 W10gU3VjY2Vzc0RhdGEgPSBuZXcgb2JqZWN0W10geyAxLCAiYSIsIG5ldyBBcnJheUxpc3QoKSB9 Ow0KKw0KKyAgICAgICAgb2JqZWN0W10gRmFpbHVyZURhdGEgPSBuZXcgb2JqZWN0W10geyBuZXcg RGljdGlvbmFyeTxzdHJpbmcsIHN0cmluZz4oKSwgbmV3IEludGVybmFsQ2xhc3MoKSwgbmV3IElu dGVybmFsV2l0aFNlcmlhbGl6YWJsZUF0dHJpYnV0ZUNsYXNzKCkgfTsNCisNCisgICAgICAgIHN0 cmluZ1tdIEFjdHVhbFZhbHVlcyA9IG5ldyBzdHJpbmdbXSB7ICI8RGljdGlvbmFyeWAyPiIsICI8 SW50ZXJuYWxDbGFzcz4iLCAiPEludGVybmFsV2l0aFNlcmlhbGl6YWJsZUF0dHJpYnV0ZUNsYXNz PiIgfTsNCisNCisgICAgICAgIG9iamVjdFtdIEludmFsaWREYXRhID0gbmV3IG9iamVjdFtdIHsg bnVsbCB9Ow0KKyAgICB9DQorDQorICAgIGludGVybmFsIGNsYXNzIEludGVybmFsQ2xhc3MNCisg ICAge30NCisNCisgICAgW1NlcmlhbGl6YWJsZV0NCisgICAgaW50ZXJuYWwgY2xhc3MgSW50ZXJu YWxXaXRoU2VyaWFsaXphYmxlQXR0cmlidXRlQ2xhc3MNCisgICAge30NCit9DQoNCi0tLSB0ZXN0 cy9TeW50YXgvU2VyaWFsaXphYmxlQ29uc3RyYWludHMuY3MNCisrKyB0ZXN0cy9TeW50YXgvU2Vy aWFsaXphYmxlQ29uc3RyYWludHMuY3MNCkBAIC0wLDAgKzEsMjggQEANCivvu79uYW1lc3BhY2Ug TlVuaXQuRnJhbWV3b3JrLlN5bnRheA0KK3sNCisgICAgW1Rlc3RGaXh0dXJlXQ0KKyAgICBwdWJs aWMgY2xhc3MgQmluYXJ5U2VyaWFsaXphYmxlVGVzdCA6IFN5bnRheFRlc3QNCisgICAgew0KKyAg ICAgICAgW1NldFVwXQ0KKyAgICAgICAgcHVibGljIHZvaWQgU2V0VXAoKQ0KKyAgICAgICAgew0K KyAgICAgICAgICAgIHBhcnNlVHJlZSA9ICI8YmluYXJ5c2VyaWFsaXphYmxlPiI7DQorICAgICAg ICAgICAgc3RhdGljU3ludGF4ID0gSXMuQmluYXJ5U2VyaWFsaXphYmxlOw0KKyAgICAgICAgICAg IGluaGVyaXRlZFN5bnRheCA9IEhlbHBlcigpLkJpbmFyeVNlcmlhbGl6YWJsZTsNCisgICAgICAg ICAgICBidWlsZGVyU3ludGF4ID0gQnVpbGRlcigpLkJpbmFyeVNlcmlhbGl6YWJsZTsNCisgICAg ICAgIH0NCisgICAgfQ0KKw0KKyAgICBbVGVzdEZpeHR1cmVdDQorICAgIHB1YmxpYyBjbGFzcyBY bWxTZXJpYWxpemFibGVUZXN0IDogU3ludGF4VGVzdA0KKyAgICB7DQorICAgICAgICBbU2V0VXBd DQorICAgICAgICBwdWJsaWMgdm9pZCBTZXRVcCgpDQorICAgICAgICB7DQorICAgICAgICAgICAg cGFyc2VUcmVlID0gIjx4bWxzZXJpYWxpemFibGU+IjsNCisgICAgICAgICAgICBzdGF0aWNTeW50 YXggPSBJcy5YbWxTZXJpYWxpemFibGU7DQorICAgICAgICAgICAgaW5oZXJpdGVkU3ludGF4ID0g SGVscGVyKCkuWG1sU2VyaWFsaXphYmxlOw0KKyAgICAgICAgICAgIGJ1aWxkZXJTeW50YXggPSBC dWlsZGVyKCkuWG1sU2VyaWFsaXphYmxlOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KDQoNCg== ------=_Part_79349_6646098.1220902131809 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ ------=_Part_79349_6646098.1220902131809 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Nunit-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/nunit-users ------=_Part_79349_6646098.1220902131809--