<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.kde.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugs.kde.org/"
          
          maintainer="sysadmin@kde.org"
>

    <bug>
          <bug_id>62425</bug_id>
          
          <creation_ts>2003-08-09 19:24:02 +0000</creation_ts>
          <short_desc>Lowercasing/normalising URLs breaks some non-compliant protocols</short_desc>
          <delta_ts>2008-03-11 23:17:31 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>10</classification_id>
          <classification>Unmaintained</classification>
          <product>kdelibs</product>
          <component>general</component>
          <version>unspecified</version>
          <rep_platform>Compiled Sources</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>NOR</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Thiago Macieira">thiago</reporter>
          <assigned_to name="Thiago Macieira">thiago</assigned_to>
          <cc>bastian</cc>
    
    <cc>mail</cc>
    
    <cc>ummo</cc>
          
          <cf_commitlink></cf_commitlink>
          <cf_versionfixedin></cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>0</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>151121</commentid>
    <comment_count>0</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2003-08-09 19:24:02 +0000</bug_when>
    <thetext>Version:            (using KDE Devel)
Installed from:    Compiled sources
OS:          Linux

Since the IDNA changes were incorporated into KURL and friends, the hostnames are normalised internally according to the following RFCs:

RFC 3454 - Preparation of Internationalized Strings
RFC 3490 - Internationalizing Domain Names in Applications (IDNA)
RFC 3491 - Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN)
RFC 3492 - Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)

That means that, among other modifications, that hostnames in URLs get lowercased. Actually, if libidn is not found, current KDE CVS code simply lowercases the URL. This behaviour is (as per my reading) acceptable according to:

STD 3 [mentioned several times in the rules in the RFCs above]
RFC 1738 - Uniform Resource Locators (URL)

However, there are some &quot;URLs&quot; in use out there that do not respect the rules given by the IDNA RFCs and there could be even those that disrespect STD 3. One such scheme is ed2k, which is known to encode a filename inside the hostname part of the URL.

My understanding is that calling ed2k:// a URL is wrong, but RFC 2396 (Uniform Resource Identifiers (URI): Generic Syntax) (URIs are a superset of URLs) allows that. Therefore, ed2k:// and others might be valid URIs even though they are not valid URLs.

This has been a bit of summary of the thread in kde-devel:
http://lists.kde.org/?t=105978281800002&amp;r=1&amp;w=2&amp;n=16

Anyways, as suggested in that thread, KURL should support some kind of different URIs that are not URLs and be aware of their peculiarities. I&apos;m here proposing three different URI types:

internet or url - normal URLs, as they are treated today
mailto - URIs containing mail addresses; IDNA needs to be applied to the hostname part (after the @)
raw - don&apos;t touch, don&apos;t encode

I&apos;ve opened this bug report to keep track of the support and also for the information as to why some broken &quot;URLs&quot; broke in KDE CVS/3.2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151309</commentid>
    <comment_count>1</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2003-08-10 23:47:18 +0000</bug_when>
    <thetext>Moving the discussion here. 
 
Last message from the list was (from Petter Stokke): 
 
My current working copy uses a simple hardcoded list (&quot;ed2k&quot; is raw,  
&quot;mailto&quot; is mailto, and everything else is a normal URL), I guess it could  
fall back on that if no KInstance is available. 
  
  
&gt; But you should also provide a means of the user setting the  
&gt; URI type and handling method. 
 
  
I added that as an option to the constructor, with the present processing  
mode being the default one. 
  
  
&gt; KURL should be lightweight. So, I don&apos;t recommend writing code to find 
&gt; files in the disk. 
 
  
I&apos;m trying hard to keep it lightweight, but I don&apos;t know any other way to  
do it except to hardcode the protocol list into KURL, which doesn&apos;t really  
appeal to me. I was planning on writing a very lightweight parser to fetch  
the protocol mode from the .protocol file, and storing it in a hard cache  
for future use (so it doesn&apos;t care if the .protocol file changes) in order  
to maintain some semblance of efficiency. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151310</commentid>
    <comment_count>2</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2003-08-10 23:50:17 +0000</bug_when>
    <thetext>Agreed on the part of the no-rereading. Protocols shouldn&apos;t reasonably change within the 
lifetime of a program. 
 
Another solution would be to code this list inside kdeglobals. It would then be a static list, 
instead of one that each protocol could determine the handling method. 
 
One way or another, I recommend using a QDict hashing table for faster lookups. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151313</commentid>
    <comment_count>3</comment_count>
    <who name="Petter Stokke">ummo</who>
    <bug_when>2003-08-11 01:23:12 +0000</bug_when>
    <thetext>I&apos;ve used a QMap, it seems a bit excessive to have to allocate memory for
storing ints in a QDict. But that brings up another issue: should I add locks
around the table access to ensure thread safety, or is KURL in general not
thread safe?

For now, I&apos;ve written a simple parser using QRegExp to pull the relevant data
out of the .protocol file if KGlobal::activeInstance() returns non-NULL and we
can thus determine the location of the files, defaulting to a hardcoded list
inside KURL if it does not, or if kdecore is being compiled with KDE_QT_ONLY
defined. The whole database could be moved elsewhere if it seems practical, but
for the moment I&apos;ve tried to keep KURL as self-sufficient as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151673</commentid>
    <comment_count>4</comment_count>
      <attachid>2222</attachid>
    <who name="Petter Stokke">ummo</who>
    <bug_when>2003-08-12 19:06:46 +0000</bug_when>
    <thetext>Created attachment 2222
Support for URI processing modes and per-protocol mode selection.

Here&apos;s the proposed patch. I&apos;m still trying to find things which break after
applying it, but it seems to have become stable enough for review. At least
KHTML seems to be quite OK with it.

It adds a static method to KURL (uriModeForProtocol) for accessing the
protocol/mode database, and some constructors and methods for manually
specifying processing modes. The processing modes for standardised URLs
(previous and default behaviour) and non-standard but processable URLs (called
RawURI in the code, which on second thought might be incorrect) are
implemented; I&apos;ve added database support but no implementation for mailto style
URIs as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151679</commentid>
    <comment_count>5</comment_count>
    <who name="Petter Stokke">ummo</who>
    <bug_when>2003-08-12 19:34:08 +0000</bug_when>
    <thetext>Oh, I should add that the parser looks for &quot;urimode=&lt;mode&gt;&quot; in the relevant
.protocol file, where &lt;mode&gt; is either &quot;rawuri&quot;, &quot;mailto&quot; or anything else
(which signifies a standard URL).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151812</commentid>
    <comment_count>6</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2003-08-13 13:49:36 +0000</bug_when>
    <thetext>Ok, I&apos;ve reviewed your patch and I have two comments about it. I&apos;ll apply it to my local 
tree in my next KDE recompile (two weeks from now, I&apos;ve got some other time constraints) 
and help you testing it. 
 
Anyways, my comments are: 
1) I don&apos;t like the URIMODE_ prefix (all capitals with an underscore) in the enum. In my 
view, it&apos;s ugly, but that&apos;s me. We&apos;ll see if the later if the coding style guide says anything 
about that. 
 
2) I think you should be bold and move all the processing into different parse functions, 
and make KURL::parse simply select the parser function from the uriMode. That way, we&apos;d 
have KURL::parseNormalURI being a copy of the current KURL::parse, then we&apos;d also have 
KURL::parseRawURI (essentially a no-op) and a future KURL::parseMailtoURI. That would 
make the code cleaner. 
 
Oh, I should also say that the URI RFC (2396) specifies that all URIs have the &quot;schema&quot; part 
(what we call protocol). So that part of the code can be inside KURL::parse, which would 
also be required in order to automatically find the URI Mode. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151858</commentid>
    <comment_count>7</comment_count>
    <who name="Petter Stokke">ummo</who>
    <bug_when>2003-08-13 16:15:05 +0000</bug_when>
    <thetext>&gt; 1) I don&apos;t like the URIMODE_ prefix (all capitals with an underscore) in the
&gt; enum. In my view, it&apos;s ugly, but that&apos;s me. We&apos;ll see if the later if the coding
&gt; style guide says anything about that.

I originally didn&apos;t use a prefix there, but I got worried about namespace
collisions. The prefix style was inspired by the enums in KIO, but I&apos;ll be the
first to agree with you about their ugliness. Possibly we should just do away
with the prefix altogether? As long as they&apos;re capitalised, at least they won&apos;t
collide with any method names.

&gt; 2) I think you should be bold and move all the processing into different parse
&gt; functions, and make KURL::parse simply select the parser function from the
&gt; uriMode. That way, we&apos;d have KURL::parseNormalURI being a copy of the current
&gt; KURL::parse, then we&apos;d also have KURL::parseRawURI (essentially a no-op) and a
&gt; future KURL::parseMailtoURI. That would make the code cleaner. 

Good idea - the way raw URIs are parsed right now is identical to the standard
parser, and with ed2k URLs what actually happens is that the whole URL aside
from the protocol ends up in the host field. This is syntactically correct if
you assume ed2k is standards compliant, but extremely counter-intuitive - it
would probably be a lot better to just put the whole URI (not including the
protocol) into the path field instead of trying to parse it as a standard URL
without the IDNA code applied on the host name like it&apos;s done right now.


Another thing that bothers me: I&apos;ve tried to maintain binary compatibility as
much as possible, but I think I broke it after all, judging by Konqueror&apos;s
misbehaving before I did a complete kdebase recompile. The three extra
constructors I added are a result of this, but I find them less than pleasing -
I&apos;d rather put the URIMode argument into the original three as a default
argument. Is that a big issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151862</commentid>
    <comment_count>8</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2003-08-13 16:29:46 +0000</bug_when>
    <thetext>1) They are already namespace-safe because the enum is declared inside the KURL class. 
As long as nobody goes about adding methods with the same names as the enum 
constants, we&apos;ll be fine. 
 
And that won&apos;t happen because method names should always start with a lowercase letter 
(name it myFunctionLikeThis), while the enum constants start with a capital letter 
(MyEnumConstant). And we don&apos;t do underscore hell. :-) 
 
2) No, you can&apos;t change the existing constructors without breaking binary compatibility. You 
can, however, make your new constructors look like the old ones and add a comment like 
this: 
 ## BCI KDE 4.0: merge with above 
(BCI stands for Binary Compatibility Issue) 
 
The way I see it, KURL needs a cleanup for KDE 4.0. I&apos;d actually vote for having it be 
subclassed into the different URI modes. (KURL would be a misnomer for KURI, but that&apos;s 
what is used throughout) 
 
My first glance at your code did not spot any Binary Incompatible Changes. It should be 
safe to run without rebuilding kdebase. Your problems might be caused by one of your 
earlier builds. I&apos;ll test that when I build it myself. 
 
Actually, scratch that. I&apos;ve just spotted the BIC: you&apos;ve added a new member variable to the 
class, increasing its size. You can&apos;t do that. Add it to the d pointer and change your uriMode
() inline function into a full one. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152144</commentid>
    <comment_count>9</comment_count>
      <attachid>2241</attachid>
    <who name="Petter Stokke">ummo</who>
    <bug_when>2003-08-14 18:24:33 +0000</bug_when>
    <thetext>Created attachment 2241
Processing modes, second attempt.

Here&apos;s a new patch. I&apos;ve not been able to tell in practice if it breaks binary
compatibility, as I had to recompile my whole KDE again because it certainly
breaks compatibility with the previous patch, but as far as I can tell it looks
safe.

I&apos;ve also split the parse function into one for each mode, as suggested, and
while I was at it I implemented the mailto parsing with IDNA conversion of the
host part of the email address.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154187</commentid>
    <comment_count>10</comment_count>
      <attachid>2311</attachid>
    <who name="Petter Stokke">ummo</who>
    <bug_when>2003-08-25 20:06:10 +0000</bug_when>
    <thetext>Created attachment 2311
Processing modes, updated.

There have been some conflicting commits to the KURL code lately, so I thought
I&apos;d make a new patch. After two weeks of testing, the code seems stable; can I
commit it soon? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154189</commentid>
    <comment_count>11</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2003-08-25 20:14:04 +0000</bug_when>
    <thetext>Well, I&apos;m still unable to compile or run KDE, but I hope this situation will 
change later this week. I recommend, though, you post the patch to kde-core-
devel and ask for comments and more testers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155003</commentid>
    <comment_count>12</comment_count>
    <who name="Matthias Wieser">mwieser</who>
    <bug_when>2003-08-30 01:46:50 +0000</bug_when>
    <thetext>Urls are case-insensitive. So there is no deed to change valid URLs to lower 
case. 
If, for example, an user writes http://ReallyLongUrl.com because it&apos;s better 
readable then respect this. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155004</commentid>
    <comment_count>13</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2003-08-30 01:50:55 +0000</bug_when>
    <thetext>The URL gets lowercased because it&apos;s part of the normalisation process. That 
process is also responsible for changing the </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158367</commentid>
    <comment_count>14</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2003-09-15 00:12:21 +0000</bug_when>
    <thetext>I may add my own wisdom here regarding data urls (rfc2397).  
  
data urls don&apos;t comply with [rfc1738, 3.1] at all, they have no host part and  
no path. Therefore, *everything* has to be treated literally.  
  
However, rfc2397 states they are subject to decoding. That means the data url  
  
data:,%31%30%30  
  
should be decoded to  
  
data:,100  
  
Interpreting the definition of KURL::RawURI, this won&apos;t happen. If this is the  
case (and I haven&apos;t misinterpreted it), data urls need another URIMode like  
RawDecodeable.  
  
I also think it&apos;s a bad idea to put the raw url into the path variable. The  
rationale is that for data urls, there is no such thing that is even remotely  
comparable to a path. DOM&apos;s HTMLAnchorElement::pathname, however, gets  
initialized with whatever KURL::path() returns which would be total crap in the  
case of data urls. But Javascript applications expect a valid pathname here  
(Mozilla, e. g. fills in nothing for pathname on data urls).  
  
Therefore I propose that with the exception of protocol() and url(), all  
component-retrieval methods return an empty string on raw urls. As url()  
returns the url with encodings left in place, maybe there should be an  
additional function urlDecoded().  
  
Petter: Please include &quot;data&quot; in the list for autodetection 
 
	if ( protocol == &quot;ed2k&quot; ) mode = RawURI; 
+       else if ( protocol == &quot;data&quot; ) mode = RawURI; 
	else if ( protocol == &quot;mailto&quot; ) mode = Mailto; 
 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158377</commentid>
    <comment_count>15</comment_count>
    <who name="Petter Stokke">ummo</who>
    <bug_when>2003-09-15 01:24:44 +0000</bug_when>
    <thetext>Subject: Re:  Lowercasing/normalising URLs breaks some
	non-compliant protocols

&gt; However, rfc2397 states they are subject to decoding. That means the data url  
&gt;   
&gt; data:,%31%30%30  
&gt;   
&gt; should be decoded to  
&gt;   
&gt; data:,100  
&gt;   
&gt; Interpreting the definition of KURL::RawURI, this won&apos;t happen. If this is the  
&gt; case (and I haven&apos;t misinterpreted it), data urls need another URIMode like  
&gt; RawDecodeable.  

I&apos;m not sure about the definition, but the RawURI implementation, at
least, does decode its input, because ed2k, sig2dat and magnet URIs want
the same behaviour as data. In fact, I don&apos;t think there&apos;s ever going to
be a situation where we don&apos;t want to decode %xx constructs.
  
&gt; [...] I propose that with the exception of protocol() and url(), all  
&gt; component-retrieval methods return an empty string on raw urls.

This might cause problems with mailto URIs, though - the old behaviour
would return the email address as path(). In my implementation, they&apos;re
treated as RawURI, but with extra processing for the host part, which is
the reasoning behind putting it in path() in both cases. Then again,
it&apos;s perfectly possible to make this behaviour exclusive to mailto.

&gt; As url() returns the url with encodings left in place, maybe there should be an
&gt; additional function urlDecoded().

Isn&apos;t that pretty much what prettyURL() does?

&gt; Petter: Please include &quot;data&quot; in the list for autodetection 

Done.


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158459</commentid>
    <comment_count>16</comment_count>
    <who name="Leo Savernik">l.savernik</who>
    <bug_when>2003-09-15 12:28:00 +0000</bug_when>
    <thetext>Well, in this case data urls are all RawURI. 
 
As you tell it, mailto should be treated exceptionally. 
 
Doesn&apos;t prettyURL mean: Do any amount of incomprehensible, irreversible 
distortion to make the url pretty to read, but totally unsuitable for any 
further processing? 
 
Data urls have to be treated literally (the only processing allowed is %xx 
decoding). If prettyURL does exactly do this for RawURI, and this behaviour is 
guaranteed (i. e. doesn&apos;t start doing distortions in KDE 3.3/4.0 because of 
some &quot;usability&quot; study), everything&apos;s well. 
 
But deducing from the explanation in the docs &quot;Returns the URL as string in 
human-friendly format.&quot;, I&apos;m afraid this won&apos;t hold true for long because one 
day a programmer will come, and *do* distortions to make is more 
&quot;human-friendly&quot;. 
 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158771</commentid>
    <comment_count>17</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2003-09-16 16:25:06 +0000</bug_when>
    <thetext>Hello, this is to let you know that I&apos;m back to my own computer. KDE recompilation is 
scheduled for tonight :-) 
 
Anyways, about the KURL::prettyURL() call: it&apos;s intended for things shown to the user, but 
not for internal data. That is, if we had got data:%31%41%E1, Konqueror would show in 
the status bar &quot;data:1A%E1&quot;, as well as in the Location window if clicked. But the URL being 
copied into the clipboard or sent to the ioslaves would be the one from KURL::url() -- that 
is, untransformed. 
 
The same is also true for IDN domains: url() returns the ACE-encoded domain, which is 
NEVER to be shown to the user outside debugging purposes, whereas prettyURL() shows 
them in the normalised Unicode form. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167329</commentid>
    <comment_count>18</comment_count>
    <who name="David Faure">faure</who>
    <bug_when>2003-10-20 00:31:19 +0000</bug_when>
    <thetext>&gt; Doesn&apos;t prettyURL mean: Do any amount of incomprehensible, irreversible 
&gt; distortion to make the url pretty to read, but totally unsuitable for any 
&gt; further processing? 

Not at all. The golden rule of prettyURL is that
KURL( u.prettyURL() ) == u (or at least they&apos;re equivalent).

Otherwise pressing &apos;Enter&apos; in the Konqueror location bar would lead to &quot;invalid URL&quot;. So prettyURL gives a URL that _is_ suitable for further processing, and its transformations are usually reversible. Hmm did someone tell Waldo about this BR?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170390</commentid>
    <comment_count>19</comment_count>
    <who name="Petter Stokke">ummo</who>
    <bug_when>2003-10-30 00:25:19 +0000</bug_when>
    <thetext>Anything happening here? It&apos;s getting dangerously close to the 3.2 release...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172823</commentid>
    <comment_count>20</comment_count>
      <attachid>3046</attachid>
    <who name="Petter Stokke">ummo</who>
    <bug_when>2003-11-05 21:49:26 +0000</bug_when>
    <thetext>Created attachment 3046
Processing modes patch without ugly parser

Here&apos;s a new patch. What&apos;s different: KProtocolInfo now understands the
&quot;urimode&quot; field in the protocol description file. KURL uses KProtocolInfo if
available to get the data it needs, instead of relying on that ugly standalone
parser. Added some tests for the new API stuff, and fixed some bugs exposed by
the test suite.

How does this look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172848</commentid>
    <comment_count>21</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2003-11-05 22:23:58 +0000</bug_when>
    <thetext>Thank you, it looks now much nicer. Too bad KURL has to have a d-pointer now.

Anyways, there&apos;s just one thing missing I&apos;d like to add: the automatic detection could check if the first two characters after the protocol and the colon are //. If they are, it should default to URL mode; if it doesn&apos;t, RawURI.

That is, blah://txt is URL and therefore &quot;txt&quot; is supposed to be a hostname, whereas blah:txt is not URL and &quot;txt&quot; can be anything. This is the very reason why ed2k:// is broken. If it didn&apos;t have those //, it would be ok.

PS: can you also add the @since 3.2 to the other members you added?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172860</commentid>
    <comment_count>22</comment_count>
    <who name="Petter Stokke">ummo</who>
    <bug_when>2003-11-05 22:49:22 +0000</bug_when>
    <thetext>&gt; Anyways, there&apos;s just one thing missing I&apos;d like to add: the automatic
&gt; detection could check if the first two characters after the protocol and
&gt; the colon are //. If they are, it should default to URL mode; if it
&gt; doesn&apos;t, RawURI.
&gt; 
&gt; That is, blah://txt is URL and therefore &quot;txt&quot; is supposed to be a
&gt; hostname, whereas blah:txt is not URL and &quot;txt&quot; can be anything. This is
&gt; the very reason why ed2k:// is broken. If it didn&apos;t have those //, it
&gt; would be ok.

Maybe I misunderstood what you meant, but that sounds to me like it would break a lot of things. If we do that, correctly formed URIs which don&apos;t start with // (like mailto, assuming that wasn&apos;t handled as a special case) would be parsed as raw URIs, meaning eg. &quot;mailto:foo@bar.com?subject=Foobar&quot; would get everything after the colon put into the path part, which is clearly incorrect. Moreover, all broken URLs I&apos;ve come across so far (ed2k, sig2dat and slsk) all have the //, so 
making assumptions based on their presence doesn&apos;t make much sense either.

I think it&apos;s safer to assume everything should be parsed as a valid URL (as it is today), unless explicitly told otherwise by a protocol file or the hardcoded fallback list.

&gt; PS: can you also add the @since 3.2 to the other members you added?

Oops. Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172867</commentid>
    <comment_count>23</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2003-11-05 23:03:50 +0000</bug_when>
    <thetext>That&apos;s not what I meant. What I wanted to do is add an extra check for the automatic mode, for when KURL doesn&apos;t find a value for a given protocol.

The decision would be thus like this:
- if the mode is on cache, use it
- if the .protocol file has the value, use it (and cache)
- if the mode hasn&apos;t been detected, look at the URI schema (the protocol)
.- if it&apos;s mailto:, set the mode to MailTo mode
.- if it&apos;s one of the known broken schemas (ed2k, sig2dat, slsk), use RawURI
and here&apos;s the change:
.- if it&apos;s still unknown, but the non-schema part starts with //, it&apos;s URL
.- otherwise, it&apos;s RawURI

What the RFCs say is that anything://something-else is a URL and that&apos;s what those broken protocols violate (because they have // not followed by a hostname). Other schemas may be specified (like data or mailto) with different parsings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172884</commentid>
    <comment_count>24</comment_count>
    <who name="Petter Stokke">ummo</who>
    <bug_when>2003-11-06 00:03:01 +0000</bug_when>
    <thetext>Look at these URLs (all of which are correctly parsed by KURL today):

aim:goim?screenname=Foobar&amp;message=Hello+world
magnet:?xt=urn:sha1:PIXQRS5AZHRIXCBEJJS3W2JATUQ6XZZA&amp;dn=foobar.zip
file:/foo/bar/baz?foo=bar

Assuming none of those protocols have a URIMode tag in their respective protocol files (file doesn&apos;t, and KDE doesn&apos;t even handle the other two), they would all be parsed as RawURI according to the method you suggest, which means KURL::queryItem() et al wouldn&apos;t work on them as expected, and, in the case of the file URL especially, KURL::path() would be unusable. RawURI doesn&apos;t parse anything besides putting whatever comes after the colon into m_strPath after expanding %xx constructs, which is clearly not what we want in these cases. It should be reserved for protocols which are explicitly known to be broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175211</commentid>
    <comment_count>25</comment_count>
      <attachid>3154</attachid>
    <who name="Petter Stokke">ummo</who>
    <bug_when>2003-11-11 17:37:57 +0000</bug_when>
    <thetext>Created attachment 3154
Processing modes with working mailto mode.

I broke the mailto processing in the last patch, so here&apos;s a working version,
along with the requested apidoc update. Is this starting to look committable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175362</commentid>
    <comment_count>26</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2003-11-11 22:12:18 +0000</bug_when>
    <thetext>It has been committable for some time. The problem is, it&apos;s never got applied. I just want someone with better knowledge of KURL than me to verify because it&apos;s a pretty intrusive patch (unlike anything I had done in KURL before). So far no one has stepped up to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175369</commentid>
    <comment_count>27</comment_count>
    <who name="Waldo Bastian">bastian</who>
    <bug_when>2003-11-11 22:24:11 +0000</bug_when>
    <thetext>Will have a look at it later this week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179394</commentid>
    <comment_count>28</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2003-11-23 05:27:24 +0000</bug_when>
    <thetext>We have a slight problem with the current code. I&apos;ve just fixed it halfway but the patch is not correct, so I&apos;m not attaching anything. 

You may have noticed that Konqueror stopped caching correctly the webpages. I&apos;ve spent a couple of hours tracing down the bug and I got it narrowed to KURL::url.

The reason for that is that the caching is handled in kio_http, but the URL is read from a data stream, which doesn&apos;t and cannot carry the d-&gt;uriMode variable (the wire format is crystallised and cannot change before KDE4, no room for updates).

That means that when HTTPProtocol::checkCacheEntry calls KURL::url to determine the cache, the value of d-&gt;uriMode can be undetermined and, therefore, the path name and query can be mishandled.

The same could also be true for other cases.

My recommendation is that operator&gt;&gt;(QDataStream&amp;, KURL&amp;) make sure that d-&gt;uriMode is properly set.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181735</commentid>
    <comment_count>29</comment_count>
    <who name="Waldo Bastian">bastian</who>
    <bug_when>2003-11-30 23:18:59 +0000</bug_when>
    <thetext>I am currently testing a patch, will commit after Beta2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184497</commentid>
    <comment_count>30</comment_count>
    <who name="Waldo Bastian">bastian</who>
    <bug_when>2003-12-10 15:19:01 +0000</bug_when>
    <thetext>Subject: kdelibs

CVS commit by waba: 

Make parsing of URLs protocol-dependant (BR62425)
Based on a patch by Petter E. Stokke
CCMAIL: 62425-done@bugs.kde.org


  M +26 -4     kdecore/kprotocolinfo_kdecore.cpp   1.8
  M +4 -3      kdecore/kprotocolinfofactory.cpp   1.2
  M +2 -2      kdecore/kprotocolinfofactory.h   1.4
  M +169 -9    kdecore/kurl.cpp   1.261
  M +54 -3     kdecore/kurl.h   1.130
  M +11 -0     kdecore/tests/kurltest.cpp   1.82
  M +1 -0      kio/data.protocol   1.6
  M +17 -0     kio/kio/kprotocolinfo.h   1.28



</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184514</commentid>
    <comment_count>31</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2003-12-10 16:10:07 +0000</bug_when>
    <thetext>Please test if the query part isn&apos;t lost in KURL::url().

I.e., go to Google, get a search. Then hit Next. If it shows the same page again instead of the next results, it&apos;s this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185146</commentid>
    <comment_count>32</comment_count>
      <attachid>3664</attachid>
    <who name="Petter Stokke">ummo</who>
    <bug_when>2003-12-12 02:06:17 +0000</bug_when>
    <thetext>Created attachment 3664
KProtocolInfo::uriParseMode default value fix

KProtocolInfo::uriParseMode needs to return Auto if the URI mode is missing,
otherwise the fallback list is never used, causing mailto URLs to be parsed as
regular URLs in the absence of a mailto.protocol file (there isn&apos;t one in KDE).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586275</commentid>
    <comment_count>33</comment_count>
    <who name="Sebastian Sauer">mail</who>
    <bug_when>2008-03-11 22:18:16 +0000</bug_when>
    <thetext>Hi Thiago,

should we reopen this report cause QUrl and with it KDE4&apos;s KUrl are not any longer able to deal with RAW-mode url&apos;s/uri&apos;s?

probably somewhat related report is bug #159017
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586289</commentid>
    <comment_count>34</comment_count>
    <who name="Thiago Macieira">thiago</who>
    <bug_when>2008-03-11 23:17:31 +0000</bug_when>
    <thetext>Hmm... looks like we lost the KURL fixes when we moved to QUrl.

QUrl is to-the-letter strict. If your URI is not a URL, placing it in a QUrl will lose some of the data.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2222</attachid>
            <date>2003-08-12 19:06:46 +0000</date>
            <delta_ts>2003-08-14 18:24:33 +0000</delta_ts>
            <desc>Support for URI processing modes and per-protocol mode selection.</desc>
            <filename>kurl.diff</filename>
            <type>text/plain</type>
            <size>11578</size>
            <attacher name="Petter Stokke">ummo</attacher>
            
              <data encoding="base64">SW5kZXg6IGt1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2tk
ZWNvcmUva3VybC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjQ5CmRpZmYgLXUgLTMgLXAg
LWIgLUIgLXIxLjI0OSBrdXJsLmNwcAotLS0ga3VybC5jcHAJMjYgSnVuIDIwMDMgMTM6NTE6MTIg
LTAwMDAJMS4yNDkKKysrIGt1cmwuY3BwCTEyIEF1ZyAyMDAzIDE2OjUzOjIyIC0wMDAwCkBAIC0y
Myw2ICsyMywxMiBAQAogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtnbG9iYWwuaD4K
ICNpbmNsdWRlIDxraWRuYS5oPgorI2luY2x1ZGUgPGtsYXJnZWZpbGUuaD4KKyNpbmNsdWRlIDxr
c3RhbmRhcmRkaXJzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMv
c3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPHN0ZGlvLmg+
CkBAIC0zOCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8cXN0eWxlc2hlZXQuaD4KICNpbmNsdWRlIDxx
bWFwLmg+CiAjaW5jbHVkZSA8cXRleHRjb2RlYy5oPgorI2luY2x1ZGUgPHFtdXRleC5oPgogCiBz
dGF0aWMgY29uc3QgUVN0cmluZyBmaWxlUHJvdCA9ICJmaWxlIjsKIApAQCAtNDIyLDYgKzQyOSwy
NyBAQCBLVVJMOjpLVVJMKCBjb25zdCBRQ1N0cmluZyYgdXJsLCBpbnQgZW5jCiAgIHBhcnNlKCBR
U3RyaW5nOjpmcm9tTGF0aW4xKHVybCksIGVuY29kaW5nX2hpbnQgKTsKIH0KIAorS1VSTDo6S1VS
TCggY29uc3QgUVN0cmluZyAmdXJsLCBLVVJMOjpVUklNb2RlIG1vZGUsIGludCBlbmNvZGluZ19o
aW50ICkKK3sKKyAgcmVzZXQoKTsKKyAgbV9pVXJpTW9kZSA9IG1vZGU7CisgIHBhcnNlKCB1cmws
IGVuY29kaW5nX2hpbnQgKTsKK30KKworS1VSTDo6S1VSTCggY29uc3QgY2hhciAqIHVybCwgS1VS
TDo6VVJJTW9kZSBtb2RlLCBpbnQgZW5jb2RpbmdfaGludCApCit7CisgIHJlc2V0KCk7CisgIG1f
aVVyaU1vZGUgPSBtb2RlOworICBwYXJzZSggUVN0cmluZzo6ZnJvbUxhdGluMSh1cmwpLCBlbmNv
ZGluZ19oaW50ICk7Cit9CisKK0tVUkw6OktVUkwoIGNvbnN0IFFDU3RyaW5nJiB1cmwsIEtVUkw6
OlVSSU1vZGUgbW9kZSwgaW50IGVuY29kaW5nX2hpbnQgKQoreworICByZXNldCgpOworICBtX2lV
cmlNb2RlID0gbW9kZTsKKyAgcGFyc2UoIFFTdHJpbmc6OmZyb21MYXRpbjEodXJsKSwgZW5jb2Rp
bmdfaGludCApOworfQorCiBLVVJMOjpLVVJMKCBjb25zdCBLVVJMJiBfdSApCiB7CiAgICp0aGlz
ID0gX3U7CkBAIC01NTIsNiArNTgwLDcgQEAgdm9pZCBLVVJMOjpyZXNldCgpCiAgIG1fc3RyUmVm
X2VuY29kZWQgPSBRU3RyaW5nOjpudWxsOwogICBtX2JJc01hbGZvcm1lZCA9IHRydWU7CiAgIG1f
aVBvcnQgPSAwOworICBtX2lVcmlNb2RlID0gVVJJTU9ERV9BdXRvOwogfQogCiBib29sIEtVUkw6
OmlzRW1wdHkoKSBjb25zdApAQCAtNTk4LDExICs2MjcsMTMgQEAgdm9pZCBLVVJMOjpwYXJzZSgg
Y29uc3QgUVN0cmluZyYgX3VybCwgaQogICBpZiAoIHBvcysyIDwgbGVuICYmIGJ1Zltwb3NdID09
ICc6JyAmJiBidWZbcG9zKzFdID09ICcvJyAmJiBidWZbcG9zKzJdID09ICcvJyApCiAgICAgewog
ICAgICAgbV9zdHJQcm90b2NvbCA9IFFTdHJpbmcoIG9yaWcsIHBvcyApLmxvd2VyKCk7CisgICAg
ICBpZiAoIG1faVVyaU1vZGUgPT0gVVJJTU9ERV9BdXRvICkgbV9pVXJpTW9kZSA9IHVyaU1vZGVG
b3JQcm90b2NvbCggbV9zdHJQcm90b2NvbCApOwogICAgICAgcG9zICs9IDM7CiAgICAgfQogICBl
bHNlIGlmIChwb3MrMSA8IGxlbiAmJiBidWZbcG9zXSA9PSAnOicgKSAvLyBOZWVkIHRvIGFsd2F5
cyBjb21wYXJlIGxlbmd0aCgpLTEgb3RoZXJ3aXNlIEtVUkwgcGFzc2VzICJodHRwOiIgYXMgbGVn
YWwhIQogICAgIHsKICAgICAgIG1fc3RyUHJvdG9jb2wgPSBRU3RyaW5nKCBvcmlnLCBwb3MgKS5s
b3dlcigpOworICAgICAgaWYgKCBtX2lVcmlNb2RlID09IFVSSU1PREVfQXV0byApIG1faVVyaU1v
ZGUgPSB1cmlNb2RlRm9yUHJvdG9jb2woIG1fc3RyUHJvdG9jb2wgKTsKICAgICAgIC8va2REZWJ1
ZygxMjYpPDwic2V0dGluZyBwcm90b2NvbCB0byAiPDxtX3N0clByb3RvY29sPDxlbmRsOwogICAg
ICAgcG9zKys7CiAgICAgICBzdGFydCA9IHBvczsKQEAgLTg1NCw2ICs4ODUsNyBAQCBLVVJMJiBL
VVJMOjpvcGVyYXRvcj0oIGNvbnN0IGNoYXIgKiBfdXJsCiBLVVJMJiBLVVJMOjpvcGVyYXRvcj0o
IGNvbnN0IFFVcmwgJiB1ICkKIHsKICAgbV9zdHJQcm90b2NvbCA9IHUucHJvdG9jb2woKTsKKyAg
bV9pVXJpTW9kZSA9IFVSSU1PREVfQXV0bzsKICAgbV9zdHJVc2VyID0gdS51c2VyKCk7CiAgIG1f
c3RyUGFzcyA9IHUucGFzc3dvcmQoKTsKICAgbV9zdHJIb3N0ID0gdS5ob3N0KCk7CkBAIC04ODAs
NiArOTEyLDcgQEAgS1VSTCYgS1VSTDo6b3BlcmF0b3I9KCBjb25zdCBLVVJMJiBfdSApCiAgIG1f
c3RyUmVmX2VuY29kZWQgPSBfdS5tX3N0clJlZl9lbmNvZGVkOwogICBtX2JJc01hbGZvcm1lZCA9
IF91Lm1fYklzTWFsZm9ybWVkOwogICBtX2lQb3J0ID0gX3UubV9pUG9ydDsKKyAgbV9pVXJpTW9k
ZSA9IF91Lm1faVVyaU1vZGU7CiAKICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMTIzNCw2ICsxMjY3
LDggQEAgUVN0cmluZyBLVVJMOjp1cmwoIGludCBfdHJhaWxpbmcsIGludCBlbgogICAgICAgfQog
ICAgICAgdSArPSAiQCI7CiAgICAgfQorICAgIGlmICggbV9pVXJpTW9kZSA9PSBVUklNT0RFX1VS
TCApCisgICAgewogICAgIGJvb2wgSVB2NiA9IChtX3N0ckhvc3QuZmluZCgnOicpICE9IC0xKTsK
ICAgICBpZiAoSVB2NikKICAgICAgICB1ICs9ICdbJyArIG1fc3RySG9zdCArICddJzsKQEAgLTEy
NDUsNiArMTI4MCwxMSBAQCBRU3RyaW5nIEtVUkw6OnVybCggaW50IF90cmFpbGluZywgaW50IGVu
CiAgICAgICB1ICs9IGJ1ZmZlcjsKICAgICB9CiAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
dSArPSBtX3N0ckhvc3Q7CisgICAgfQorICB9CiAKICAgdSArPSBlbmNvZGVkUGF0aEFuZFF1ZXJ5
KCBfdHJhaWxpbmcsIGZhbHNlLCBlbmNvZGluZ19oaW50ICk7CiAKQEAgLTEyODAsNiArMTMyMCw4
IEBAIFFTdHJpbmcgS1VSTDo6cHJldHR5VVJMKCBpbnQgX3RyYWlsaW5nICkKICAgICAgIC8vIERv
bid0IHNob3cgcGFzc3dvcmQhCiAgICAgICB1ICs9ICJAIjsKICAgICB9CisgICAgaWYgKCBtX2lV
cmlNb2RlID09IFVSSU1PREVfVVJMICkKKyAgICB7CiAgICAgYm9vbCBJUHY2ID0gKG1fc3RySG9z
dC5maW5kKCc6JykgIT0gLTEpOwogICAgIGlmIChJUHY2KQogICAgIHsKQEAgLTEyODksNiArMTMz
MSwxMSBAQCBRU3RyaW5nIEtVUkw6OnByZXR0eVVSTCggaW50IF90cmFpbGluZyApCiAgICAgewog
ICAgICAgIHUgKz0gbGF6eV9lbmNvZGUobV9zdHJIb3N0KTsKICAgICB9CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICB1ICs9IGxhenlfZW5jb2RlKG1fc3RySG9zdCk7CisgICAgfQogICAg
IGlmICggbV9pUG9ydCAhPSAwICkgewogICAgICAgUVN0cmluZyBidWZmZXI7CiAgICAgICBidWZm
ZXIuc3ByaW50ZiggIjoldSIsIG1faVBvcnQgKTsKQEAgLTE2NDcsNiArMTY5NCw3IEBAIHZvaWQK
IEtVUkw6OnNldFByb3RvY29sKCBjb25zdCBRU3RyaW5nJiBfdHh0ICkKIHsKICAgIG1fc3RyUHJv
dG9jb2wgPSBfdHh0OworICAgaWYgKCBtX2lVcmlNb2RlID09IFVSSU1PREVfQXV0byApIG1faVVy
aU1vZGUgPSB1cmlNb2RlRm9yUHJvdG9jb2woIG1fc3RyUHJvdG9jb2wgKTsKICAgIG1fYklzTWFs
Zm9ybWVkID0gZmFsc2U7CiB9CiAKQEAgLTE2NjUsNiArMTcxMyw5IEBAIEtVUkw6OnNldFBhc3Mo
IGNvbnN0IFFTdHJpbmcmIF90eHQgKQogdm9pZAogS1VSTDo6c2V0SG9zdCggY29uc3QgUVN0cmlu
ZyYgX3R4dCApCiB7CisgIHN3aXRjaCAoIG1faVVyaU1vZGUgKQorICB7CisgIGNhc2UgVVJJTU9E
RV9VUkw6CiAjaWZuZGVmIEtERV9RVF9PTkxZCiAgICBtX3N0ckhvc3QgPSBLSUROQTo6dG9Vbmlj
b2RlKF90eHQpOwogICAgaWYgKG1fc3RySG9zdC5pc0VtcHR5KCkpCkBAIC0xNjcyLDYgKzE3MjMs
MTEgQEAgS1VSTDo6c2V0SG9zdCggY29uc3QgUVN0cmluZyYgX3R4dCApCiAjZWxzZQogICAgbV9z
dHJIb3N0ID0gX3R4dC5sb3dlcigpOwogI2VuZGlmCisgICAgYnJlYWs7CisgIGRlZmF1bHQ6Cisg
ICAgbV9zdHJIb3N0ID0gX3R4dDsKKyAgICBicmVhazsKKyAgfQogfQogCiB2b2lkCkBAIC0yMDE2
LDMgKzIwNzIsOTcgQEAgUVN0cmluZyBLVVJMOjpyZWxhdGl2ZVVSTChjb25zdCBLVVJMICZiYQog
CiAgICByZXR1cm4gcmVsVVJMOwogfQorCit2b2lkIEtVUkw6OnNldFVSSU1vZGUoS1VSTDo6VVJJ
TW9kZSBtb2RlKQoreworICBtX2lVcmlNb2RlID0gbW9kZTsKK30KKworCisKKy8vIFVSSU1vZGUg
ZGF0YWJhc2UKKworUU1hcDxRU3RyaW5nLCBLVVJMOjpVUklNb2RlPiB1cmlNb2RlczsKK1FNdXRl
eCB1cmlNb2RlTXV0ZXg7CisKKyNpZm5kZWYgS0RFX1FUX09OTFkKK1FTdHJpbmcgcGFyc2VQcm90
b2NvbEZpbGUoY29uc3QgUVN0cmluZyYgZmlsZSkKK3sKKyAgICBLREVfc3RydWN0X3N0YXQgc3Q7
CisgICAgaWYgKCBLREVfc3RhdCggZmlsZS5sYXRpbjEoKSwgJnN0KSA9PSAtMSApIHsKKwlyZXR1
cm4gUVN0cmluZzo6bnVsbDsKKyAgICB9CisgICAgY2hhciogYnVmID0gKGNoYXIqKSA6Om1hbGxv
Yyggc3Quc3Rfc2l6ZSApOworICAgIGlmICggIWJ1ZiApIHsKKwlyZXR1cm4gUVN0cmluZzo6bnVs
bDsKKyAgICB9CisgICAgaW50IGZkID0gS0RFX29wZW4oIGZpbGUubGF0aW4xKCksIE9fUkRPTkxZ
ICk7CisgICAgaWYgKCBmZCA8IDAgKSB7CisJOjpmcmVlKCAodm9pZCopYnVmICk7CisJcmV0dXJu
IFFTdHJpbmc6Om51bGw7CisgICAgfQorICAgIGludCByZWFkc2l6ZSA9IDA7CisgICAgY2hhciog
cG9zID0gYnVmOworICAgIHdoaWxlICggcmVhZHNpemUgPCBzdC5zdF9zaXplICkKKyAgICB7CisJ
aW50IG4gPSA6OnJlYWQoIGZkLCBwb3MsIHN0LnN0X3NpemUgLSByZWFkc2l6ZSApOworCWlmICgg
biA9PSAtMSApIHsKKwkgICAgOjpmcmVlKCAodm9pZCopYnVmICk7CisJICAgIDo6Y2xvc2UoIGZk
ICk7CisJICAgIHJldHVybiBRU3RyaW5nOjpudWxsOworCX0KKwlpZiAoIG4gPT0gMCApCisJICAg
IGJyZWFrOworCXBvcyArPSBuOworCXJlYWRzaXplICs9IG47CisgICAgfQorICAgIDo6Y2xvc2Uo
IGZkICk7CisKKyAgICBRQ1N0cmluZyBjcyggKGNvbnN0IGNoYXIqKWJ1ZiwgcmVhZHNpemUgKTsK
KyAgICA6OmZyZWUoICh2b2lkKilidWYgKTsKKyAgICBRU3RyaW5nIHMgPSBjczsKKyAgICBRU3Ry
aW5nTGlzdCBsaXN0ID0gUVN0cmluZ0xpc3Q6OnNwbGl0KCBRUmVnRXhwKCAiKFxccnxcXG4pKyIg
KSwgcyApOworCisgICAgUVJlZ0V4cCByZSggIlxccyp1cmltb2RlXFxzKj1cXHMqKFxcdyspXFxz
KiIgKTsKKyAgICBRU3RyaW5nTGlzdDo6SXRlcmF0b3IgaXQ7CisgICAgZm9yICggaXQgPSBsaXN0
LmJlZ2luKCk7IGl0ICE9IGxpc3QuZW5kKCk7ICsraXQgKSB7CisJaWYgKCByZS5leGFjdE1hdGNo
KCAoKml0KS5sb3dlcigpICkgKSB7CisJICAgIHJldHVybiByZS5jYXAoMSkubG93ZXIoKTsKKwl9
CisgICAgfQorCisgICAgcmV0dXJuIFFTdHJpbmc6Om51bGw7Cit9CisjZW5kaWYKKworS1VSTDo6
VVJJTW9kZSBLVVJMOjp1cmlNb2RlRm9yUHJvdG9jb2woY29uc3QgUVN0cmluZyYgcHJvdG9jb2wp
Cit7CisgICAgVVJJTW9kZSBtb2RlID0gVVJJTU9ERV9BdXRvOworCisgICAgdXJpTW9kZU11dGV4
LmxvY2soKTsKKyAgICBpZiAoIHVyaU1vZGVzLmNvbnRhaW5zKCBwcm90b2NvbCApICkKKwltb2Rl
ID0gdXJpTW9kZXNbcHJvdG9jb2xdOworICAgIHVyaU1vZGVNdXRleC51bmxvY2soKTsKKyAgICBp
ZiAobW9kZSAhPSBVUklNT0RFX0F1dG8pCisJcmV0dXJuIG1vZGU7CisjaWZuZGVmIEtERV9RVF9P
TkxZCisgICAgaWYgKCBLR2xvYmFsOjphY3RpdmVJbnN0YW5jZSgpICkgeworCVFTdHJpbmcgbW9k
ZW5hbWUgPSBwYXJzZVByb3RvY29sRmlsZShLR2xvYmFsOjphY3RpdmVJbnN0YW5jZSgpLT5kaXJz
KCktPmZpbmRSZXNvdXJjZSggInNlcnZpY2VzIiwgUVN0cmluZyggIiUxLnByb3RvY29sIiApLmFy
ZyggcHJvdG9jb2wgKSApICk7CisJaWYgKCBtb2RlbmFtZSA9PSAicmF3dXJpIiApIG1vZGUgPSBV
UklNT0RFX1Jhd1VSSTsKKwllbHNlIGlmICggbW9kZW5hbWUgPT0gIm1haWx0byIgKSBtb2RlID0g
VVJJTU9ERV9NYWlsdG87CisJZWxzZSBpZiAoICFtb2RlbmFtZS5pc0VtcHR5KCkgKSBtb2RlID0g
VVJJTU9ERV9VUkw7CisgICAgfQorICAgIGlmIChtb2RlID09IFVSSU1PREVfQXV0byApIHsKKyNl
bmRpZgorCWlmICggcHJvdG9jb2wgPT0gImVkMmsiICkgbW9kZSA9IFVSSU1PREVfUmF3VVJJOwor
CWVsc2UgaWYgKCBwcm90b2NvbCA9PSAibWFpbHRvIiApIG1vZGUgPSBVUklNT0RFX01haWx0bzsK
KwllbHNlIG1vZGUgPSBVUklNT0RFX1VSTDsKKyNpZm5kZWYgS0RFX1FUX09OTFkKKyAgICB9Cisj
ZW5kaWYKKyAgICB1cmlNb2RlTXV0ZXgubG9jaygpOworICAgIHVyaU1vZGVzLnJlcGxhY2UoIHBy
b3RvY29sLCBtb2RlICk7CisgICAgdXJpTW9kZU11dGV4LnVubG9jaygpOworICAgIHJldHVybiBt
b2RlOworfQorCkluZGV4OiBrdXJsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tk
ZWxpYnMva2RlY29yZS9rdXJsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTExCmRpZmYgLXUg
LTMgLXAgLWIgLUIgLXIxLjExMSBrdXJsLmgKLS0tIGt1cmwuaAkxMyBKdW4gMjAwMyAxOTo1MTo0
NiAtMDAwMAkxLjExMQorKysga3VybC5oCTEyIEF1ZyAyMDAzIDE2OjUzOjIzIC0wMDAwCkBAIC01
OSw2ICs1OSwzMSBAQCBwdWJsaWM6CiAgIH07CiAKICAgLyoqCisgICAqIERlZmluZXMgdGhlIHR5
cGUgb2YgVVJJIHdlIGFyZSBwcm9jZXNzaW5nLgorICAgKi8KKyAgZW51bSBVUklNb2RlCisgIHsK
KyAgICAvKioKKyAgICAgKiBBdXRvbWF0aWNhbGx5IGRldGVjdGVkLiBVc2luZyB0aGlzIG1vZGUs
IGFuIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcKKyAgICAgKiBtb2RlIHdpbGwgYmUgc2VsZWN0ZWQg
d2hlbiB0aGUgVVJJIGlzIGZpcnN0IHByb2Nlc3NlZC4KKyAgICAgKi8KKyAgICBVUklNT0RFX0F1
dG8sCisgICAgLyoqCisgICAgICogUmF3IFVSSS4gVGhpcyB0eXBlIG9mIFVSSSBzaG91bGQgbm90
IGJlIHByb2Nlc3NlZCBpbiBhbnkgd2F5LgorICAgICAqLworICAgIFVSSU1PREVfUmF3VVJJLAor
ICAgIC8qKgorICAgICAqIFN0YW5kYXJkcyBjb21wbGlhbnQgVVJMLiBQcm9jZXNzIGFzIGEgc3lu
dGFjdGljYWxseSBjb3JyZWN0IFVSTC4KKyAgICAgKi8KKyAgICBVUklNT0RFX1VSTCwKKyAgICAv
KioKKyAgICAgKiBNYWlsdG8gVVJJLiBwYXRoKCkgY29udGFpbnMgYW4gZW1haWwgYWRkcmVzcyB3
aGljaCBzaG91bGQgaGF2ZSBpdHMKKyAgICAgKiBkb21haW4gcGFydCBwcm9jZXNzZWQgYXMgYSBE
TlMgbmFtZS4KKyAgICAgKi8KKyAgICBVUklNT0RFX01haWx0bworICB9OworCisgIC8qKgogICAg
KiBLVVJMOjpMaXN0IGlzIGEgUVZhbHVlTGlzdCB0aGF0IGNvbnRhaW5zIEtVUkxzIHdpdGggYSBm
ZXcKICAgICogY29udmVuaWVuY2UgbWV0aG9kcy4KICAgICogQHNlZSBLVVJMCkBAIC0xMzcsNiAr
MTYyLDQ5IEBAIHB1YmxpYzoKICAgICovCiAgIEtVUkwoIGNvbnN0IFFDU3RyaW5nJiB1cmwsIGlu
dCBlbmNvZGluZ19oaW50ID0gMCApOwogICAvKioKKyAgICogVXN1YWwgY29uc3RydWN0b3IsIHRv
IGNvbnN0cnVjdCBmcm9tIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gdXJsIEEgVVJMLCBub3QgYSBm
aWxlbmFtZS4gSWYgdGhlIFVSTCBkb2VzIG5vdCBoYXZlIGEgcHJvdG9jb2wKKyAgICogICAgICAg
ICAgICAgcGFydCwgImZpbGU6IiBpcyBhc3N1bWVkLgorICAgKiAgICAgICAgICAgICBJdCBpcyBk
YW5nZXJvdXMgdG8gZmVlZCB1bml4IGZpbGVuYW1lcyBpbnRvIHRoaXMgZnVuY3Rpb24sCisgICAq
ICAgICAgICAgICAgIHRoaXMgd2lsbCB3b3JrIG1vc3Qgb2YgdGhlIHRpbWUgYnV0IG5vdCBhbHdh
eXMuCisgICAqICAgICAgICAgICAgIEZvciBleGFtcGxlICIvaG9tZS9Ub3JiZW4lMjBXZWlzIiB3
aWxsIGJlIGNvbnNpZGVyZWQgYSBVUkwKKyAgICogICAgICAgICAgICAgcG9pbnRpbmcgdG8gdGhl
IGZpbGUgIi9ob21lL1RvcmJlbiBXZWlzIiBpbnN0ZWFkIG9mIHRvIHRoZQorICAgKiAgICAgICAg
ICAgICBmaWxlICIvaG9tZS9Ub3JiZW4lMjBXZWlzIi4KKyAgICogICAgICAgICAgICAgVGhpcyBt
ZWFucyB0aGF0IGlmIHlvdSBoYXZlIGEgdXN1YWwgVU5JWCBsaWtlIHBhdGggeW91CisgICAqICAg
ICAgICAgICAgIHNob3VsZCBub3QgdXNlIHRoaXMgY29uc3RydWN0b3IuCisgICAqICAgICAgICAg
ICAgIEluc3RlYWQgY3JlYXRlIGFuIGVtcHR5IHVybCBhbmQgc2V0IHRoZSBwYXRoIGJ5IHVzaW5n
CisgICAqICAgICAgICAgICAgIEByZWYgc2V0UGF0aCgpLgorICAgKiBAcGFyYW0gdXJpTW9kZSBN
YW51YWxseSBzcGVjaWZ5IHRoZSBVUkkgcHJvY2Vzc2luZyBtb2RlLiBCeSBkZWZhdWx0LAorICAg
KiAgICAgICAgICAgICB0aGlzIGlzIGRlY2lkZWQgYnkgdGhlIFVSSSdzIHByb3RvY29sLgorICAg
KiBAcGFyYW0gZW5jb2RpbmdfaGludCBNSUIgb2Ygb3JpZ2luYWwgZW5jb2Rpbmcgb2YgVVJMLgor
ICAgKiBAc2VlIFFUZXh0Q29kZWM6Om1pYkVudW0oKQorICAgKi8KKyAgS1VSTCggY29uc3QgUVN0
cmluZyYgdXJsLCBVUklNb2RlIHVyaU1vZGUsIGludCBlbmNvZGluZ19oaW50ID0gMCApOworICAv
KioKKyAgICogQ29uc3RydWN0b3IgdGFraW5nIGEgY2hhciAqIEBwIHVybCwgd2hpY2ggaXMgYW4g
X2VuY29kZWRfIHJlcHJlc2VudGF0aW9uCisgICAqIG9mIHRoZSBVUkwsIGV4YWN0bHkgbGlrZSB0
aGUgdXN1YWwgY29uc3RydWN0b3IuIFRoaXMgaXMgdXNlZnVsIHdoZW4KKyAgICogdGhlbiBVUkws
IGluIGl0cyBlbmNvZGVkIGZvcm0sIGlzIHN0cmljdGx5IGFzY2lpLgorICAgKiBAcGFyYW0gdXJs
IEEgZW5jb2RlZCBVUkwuIElmIHRoZSBVUkwgZG9lcyBub3QgaGF2ZSBhIHByb3RvY29sIHBhcnQs
CisgICAqICAgICAgICAgICAgImZpbGU6IiBpcyBhc3N1bWVkLgorICAgKiBAcGFyYW0gdXJpTW9k
ZSBNYW51YWxseSBzcGVjaWZ5IHRoZSBVUkkgcHJvY2Vzc2luZyBtb2RlLiBCeSBkZWZhdWx0LAor
ICAgKiAgICAgICAgICAgICB0aGlzIGlzIGRlY2lkZWQgYnkgdGhlIFVSSSdzIHByb3RvY29sLgor
ICAgKiBAcGFyYW0gZW5jb2RpbmdfaGludCBNSUIgb2Ygb3JpZ2luYWwgZW5jb2Rpbmcgb2YgVVJM
LgorICAgKiBAc2VlIFFUZXh0Q29kZWM6Om1pYkVudW0oKQorICAgKi8KKyAgS1VSTCggY29uc3Qg
Y2hhciAqIHVybCwgVVJJTW9kZSB1cmlNb2RlLCBpbnQgZW5jb2RpbmdfaGludCA9IDAgKTsKKyAg
LyoqCisgICAqIENvbnN0cnVjdG9yIHRha2luZyBhIFFDU3RyaW5nIEBwIHVybCwgd2hpY2ggaXMg
YW4gX2VuY29kZWRfIHJlcHJlc2VudGF0aW9uCisgICAqIG9mIHRoZSBVUkwsIGV4YWN0bHkgbGlr
ZSB0aGUgdXN1YWwgY29uc3RydWN0b3IuIFRoaXMgaXMgdXNlZnVsIHdoZW4KKyAgICogdGhlbiBV
UkwsIGluIGl0cyBlbmNvZGVkIGZvcm0sIGlzIHN0cmljdGx5IGFzY2lpLgorICAgKiBAcGFyYW0g
dXJsIEEgZW5jb2RlZCBVUkwuIElmIHRoZSBVUkwgZG9lcyBub3QgaGF2ZSBhIHByb3RvY29sIHBh
cnQsCisgICAqICAgICAgICAgICAgImZpbGU6IiBpcyBhc3N1bWVkLgorICAgKiBAcGFyYW0gdXJp
TW9kZSBNYW51YWxseSBzcGVjaWZ5IHRoZSBVUkkgcHJvY2Vzc2luZyBtb2RlLiBCeSBkZWZhdWx0
LAorICAgKiAgICAgICAgICAgICB0aGlzIGlzIGRlY2lkZWQgYnkgdGhlIFVSSSdzIHByb3RvY29s
LgorICAgKiBAcGFyYW0gZW5jb2RpbmdfaGludCBNSUIgb2Ygb3JpZ2luYWwgZW5jb2Rpbmcgb2Yg
VVJMLgorICAgKiBAc2VlIFFUZXh0Q29kZWM6Om1pYkVudW0oKQorICAgKi8KKyAgS1VSTCggY29u
c3QgUUNTdHJpbmcmIHVybCwgVVJJTW9kZSB1cmlNb2RlLCBpbnQgZW5jb2RpbmdfaGludCA9IDAg
KTsKKyAgLyoqCiAgICAqIENvcHkgY29uc3RydWN0b3IuCiAgICAqIEBwYXJhbSB1IHRoZSBLVVJM
IHRvIGNvcHkKICAgICovCkBAIC0xNzMsNiArMjQxLDE5IEBAIHB1YmxpYzoKICAgdm9pZCBzZXRQ
cm90b2NvbCggY29uc3QgUVN0cmluZyYgX3R4dCApOwogCiAgIC8qKgorICAgKiBSZXR1cm5zIHRo
ZSBVUkkgcHJvY2Vzc2luZyBtb2RlIGZvciB0aGUgVVJMLgorICAgKiBAcmV0dXJuIHRoZSBVUkkg
cHJvY2Vzc2luZyBtb2RlIHNldCBmb3IgdGhpcyBVUkwuCisgICAqKi8KKyAgaW50IHVyaU1vZGUo
KSBjb25zdCB7IHJldHVybiBtX2lVcmlNb2RlOyB9CisgIC8qKgorICAgKiBTZXRzIHRoZSBVUkkg
cHJvY2Vzc2luZyBtb2RlIGZvciB0aGUgVVJMLiBOb3RlIHRoYXQgaXQgaXMgbm90CisgICAqIHJl
dHJvYWN0aXZlIC0gb25seSBkYXRhIGFkZGVkIHRvIGl0IGFmdGVyIHlvdSBjaGFuZ2UgdGhlIFVS
SQorICAgKiBtb2RlIHdpbGwgYmUgcHJvY2Vzc2VkIGFjY29yZGluZyB0byB0aGUgbmV3IG1vZGUu
CisgICAqIEBwYXJhbSBtb2RlIHRoZSBuZXcgVVJJIHByb2Nlc3NpbmcgbW9kZSBmb3IgdGhlIFVS
TC4KKyAgICoqLworICB2b2lkIHNldFVSSU1vZGUoVVJJTW9kZSBtb2RlKTsKKworICAvKioKICAg
ICogUmV0dXJucyB0aGUgZGVjb2RlZCB1c2VyIG5hbWUgKGxvZ2luLCB1c2VyIGlkLCAuLi4pIGlu
Y2x1ZGVkIGluIHRoZSBVUkwuCiAgICAqIEByZXR1cm4gdGhlIHVzZXIgbmFtZSBvciBRU3RyaW5n
OjpudWxsIGlmIHRoZXJlIGlzIG5vIHVzZXIgbmFtZQogICAgKiovCkBAIC04MjEsNiArOTAyLDEy
IEBAIHB1YmxpYzoKICAgICovCiAgIHN0YXRpYyBRU3RyaW5nIHJlbGF0aXZlUGF0aChjb25zdCBR
U3RyaW5nICZiYXNlX2RpciwgY29uc3QgUVN0cmluZyAmcGF0aCwgYm9vbCAqaXNQYXJlbnQ9MCk7
CiAKKyAgLyoqCisgICAqIERldGVybWluZSB3aGljaCBVUkkgbW9kZSBpcyBzdWl0YWJsZSBmb3Ig
cHJvY2Vzc2luZyBVUklzIG9mIGEgZ2l2ZW4gcHJvdG9jb2wuCisgICAqIEBwYXJhbSBwcm90b2Nv
bCBUaGUgcHJvdG9jb2wgbmFtZS4KKyAgICovCisgIHN0YXRpYyBVUklNb2RlIHVyaU1vZGVGb3JQ
cm90b2NvbChjb25zdCBRU3RyaW5nJiBwcm90b2NvbCk7CisKICNpZmRlZiBLREVfTk9fQ09NUEFU
CiBwcml2YXRlOgogI2VuZGlmCkBAIC04NDUsNiArOTMyLDcgQEAgcHJpdmF0ZToKICAgaW50IGZy
ZWVGb3JVc2UgICAgICA6IDc7CiAgIHVuc2lnbmVkIHNob3J0IGludCBtX2lQb3J0OwogICBRU3Ry
aW5nIG1fc3RyUGF0aF9lbmNvZGVkOworICBpbnQgbV9pVXJpTW9kZTsKIAogICBmcmllbmQgUURh
dGFTdHJlYW0gJiBvcGVyYXRvcjw8IChRRGF0YVN0cmVhbSAmIHMsIGNvbnN0IEtVUkwgJiBhKTsK
ICAgZnJpZW5kIFFEYXRhU3RyZWFtICYgb3BlcmF0b3I+PiAoUURhdGFTdHJlYW0gJiBzLCBLVVJM
ICYgYSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2241</attachid>
            <date>2003-08-14 18:24:33 +0000</date>
            <delta_ts>2003-08-25 20:06:10 +0000</delta_ts>
            <desc>Processing modes, second attempt.</desc>
            <filename>kurl.diff</filename>
            <type>text/plain</type>
            <size>16891</size>
            <attacher name="Petter Stokke">ummo</attacher>
            
              <data encoding="base64">PyBEb3h5ZmlsZQo/IGt1cmwuZGlmZgpJbmRleDoga3VybC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2hvbWUva2RlL2tkZWxpYnMva2RlY29yZS9rdXJsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yNTAKZGlmZiAtdSAtMyAtcCAtYiAtQiAtcjEuMjUwIGt1cmwuY3BwCi0tLSBrdXJsLmNw
cAkxMyBBdWcgMjAwMyAxMDoxNjo1OCAtMDAwMAkxLjI1MAorKysga3VybC5jcHAJMTQgQXVnIDIw
MDMgMTY6MTY6MzcgLTAwMDAKQEAgLTIzLDYgKzIzLDEyIEBACiAjaW5jbHVkZSA8a2RlYnVnLmg+
CiAjaW5jbHVkZSA8a2dsb2JhbC5oPgogI2luY2x1ZGUgPGtpZG5hLmg+CisjaW5jbHVkZSA8a2xh
cmdlZmlsZS5oPgorI2luY2x1ZGUgPGtzdGFuZGFyZGRpcnMuaD4KKworI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KICNlbmRp
ZgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTM4LDYgKzQ0LDEzIEBACiAjaW5jbHVkZSA8cXN0
eWxlc2hlZXQuaD4KICNpbmNsdWRlIDxxbWFwLmg+CiAjaW5jbHVkZSA8cXRleHRjb2RlYy5oPgor
I2luY2x1ZGUgPHFtdXRleC5oPgorCitjbGFzcyBLVVJMUHJpdmF0ZQoreworcHVibGljOgorICAg
IGludCBtX2lVcmlNb2RlOworfTsKIAogc3RhdGljIGNvbnN0IFFTdHJpbmcgZmlsZVByb3QgPSAi
ZmlsZSI7CiAKQEAgLTM5NiwzNCArNDA5LDY0IEBAIFFTdHJpbmdMaXN0IEtVUkw6Okxpc3Q6OnRv
U3RyaW5nTGlzdCgpIGMKIAogS1VSTDo6S1VSTCgpCiB7CisgIGQgPSBuZXcgS1VSTFByaXZhdGUo
KTsKICAgcmVzZXQoKTsKIH0KIAogS1VSTDo6fktVUkwoKQogeworICBkZWxldGUgZDsKIH0KIAog
CiBLVVJMOjpLVVJMKCBjb25zdCBRU3RyaW5nICZ1cmwsIGludCBlbmNvZGluZ19oaW50ICkKIHsK
KyAgZCA9IG5ldyBLVVJMUHJpdmF0ZSgpOwogICByZXNldCgpOwogICBwYXJzZSggdXJsLCBlbmNv
ZGluZ19oaW50ICk7CiB9CiAKIEtVUkw6OktVUkwoIGNvbnN0IGNoYXIgKiB1cmwsIGludCBlbmNv
ZGluZ19oaW50ICkKIHsKKyAgZCA9IG5ldyBLVVJMUHJpdmF0ZSgpOwogICByZXNldCgpOwogICBw
YXJzZSggUVN0cmluZzo6ZnJvbUxhdGluMSh1cmwpLCBlbmNvZGluZ19oaW50ICk7CiB9CiAKIEtV
Ukw6OktVUkwoIGNvbnN0IFFDU3RyaW5nJiB1cmwsIGludCBlbmNvZGluZ19oaW50ICkKIHsKKyAg
ZCA9IG5ldyBLVVJMUHJpdmF0ZSgpOworICByZXNldCgpOworICBwYXJzZSggUVN0cmluZzo6ZnJv
bUxhdGluMSh1cmwpLCBlbmNvZGluZ19oaW50ICk7Cit9CisKK0tVUkw6OktVUkwoIGNvbnN0IFFT
dHJpbmcgJnVybCwgS1VSTDo6VVJJTW9kZSBtb2RlLCBpbnQgZW5jb2RpbmdfaGludCApCit7Cisg
IGQgPSBuZXcgS1VSTFByaXZhdGUoKTsKKyAgcmVzZXQoKTsKKyAgZC0+bV9pVXJpTW9kZSA9IG1v
ZGU7CisgIHBhcnNlKCB1cmwsIGVuY29kaW5nX2hpbnQgKTsKK30KKworS1VSTDo6S1VSTCggY29u
c3QgY2hhciAqIHVybCwgS1VSTDo6VVJJTW9kZSBtb2RlLCBpbnQgZW5jb2RpbmdfaGludCApCit7
CisgIGQgPSBuZXcgS1VSTFByaXZhdGUoKTsKKyAgcmVzZXQoKTsKKyAgZC0+bV9pVXJpTW9kZSA9
IG1vZGU7CisgIHBhcnNlKCBRU3RyaW5nOjpmcm9tTGF0aW4xKHVybCksIGVuY29kaW5nX2hpbnQg
KTsKK30KKworS1VSTDo6S1VSTCggY29uc3QgUUNTdHJpbmcmIHVybCwgS1VSTDo6VVJJTW9kZSBt
b2RlLCBpbnQgZW5jb2RpbmdfaGludCApCit7CisgIGQgPSBuZXcgS1VSTFByaXZhdGUoKTsKICAg
cmVzZXQoKTsKKyAgZC0+bV9pVXJpTW9kZSA9IG1vZGU7CiAgIHBhcnNlKCBRU3RyaW5nOjpmcm9t
TGF0aW4xKHVybCksIGVuY29kaW5nX2hpbnQgKTsKIH0KIAogS1VSTDo6S1VSTCggY29uc3QgS1VS
TCYgX3UgKQogeworICBkID0gbmV3IEtVUkxQcml2YXRlKCk7CiAgICp0aGlzID0gX3U7CiB9CiAK
QEAgLTQ1OSwxMiArNTAyLDE0IEBAIFFEYXRhU3RyZWFtICYgb3BlcmF0b3I+PiAoUURhdGFTdHJl
YW0gJiAKICNpZm5kZWYgUVRfTk9fTkVUV09SS1BST1RPQ09MCiBLVVJMOjpLVVJMKCBjb25zdCBR
VXJsICZ1ICkKIHsKKyAgZCA9IG5ldyBLVVJMUHJpdmF0ZSgpOwogICAqdGhpcyA9IHU7CiB9CiAj
ZW5kaWYKIAogS1VSTDo6S1VSTCggY29uc3QgS1VSTCYgX3UsIGNvbnN0IFFTdHJpbmcmIF9yZWxf
dXJsLCBpbnQgZW5jb2RpbmdfaGludCApCiB7CisgIGQgPSBuZXcgS1VSTFByaXZhdGUoKTsKICAg
Ly8gV09SS0FST1VORCBUSEUgUkZDIDE2MDYgTE9PUEhPTEUgVEhBVCBBTExPV1MKICAgLy8gaHR0
cDovaW5kZXguaHRtbCBBUyBBIFZBTElEIFNZTlRBWCBGT1IgUkVMQVRJVkUKICAgLy8gVVJMUy4g
KCBSRkMgMjM5NiBzZWN0aW9uIDUuMiBpdGVtICMgMyApCkBAIC01NTIsNiArNTk3LDcgQEAgdm9p
ZCBLVVJMOjpyZXNldCgpCiAgIG1fc3RyUmVmX2VuY29kZWQgPSBRU3RyaW5nOjpudWxsOwogICBt
X2JJc01hbGZvcm1lZCA9IHRydWU7CiAgIG1faVBvcnQgPSAwOworICBkLT5tX2lVcmlNb2RlID0g
QXV0bzsKIH0KIAogYm9vbCBLVVJMOjppc0VtcHR5KCkgY29uc3QKQEAgLTU2MSwyMSArNjA3LDEz
MiBAQCBib29sIEtVUkw6OmlzRW1wdHkoKSBjb25zdAogCiB2b2lkIEtVUkw6OnBhcnNlKCBjb25z
dCBRU3RyaW5nJiBfdXJsLCBpbnQgZW5jb2RpbmdfaGludCApCiB7Ci0gIC8va2REZWJ1ZygxMjYp
IDw8ICJwYXJzZSAiIDw8IF91cmwgPDwgZW5kbDsKLSAgLy8gUmV0dXJuIGltbWVkaWF0ZWx5IHdo
ZW5ldmVyIHRoZSBnaXZlbiB1cmwKLSAgLy8gaXMgZW1wdHkgb3IgbnVsbC4KLSAgaWYgKCBfdXJs
LmlzRW1wdHkoKSApCisgICAgaWYgKCBfdXJsLmlzRW1wdHkoKSB8fCBkLT5tX2lVcmlNb2RlID09
IEludmFsaWQgKQogICB7CiAgICAgbV9zdHJQcm90b2NvbCA9IF91cmw7CisJZC0+bV9pVXJpTW9k
ZSA9IEludmFsaWQ7CisJcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFFDaGFyKiBidWYgPSBf
dXJsLnVuaWNvZGUoKTsKKyAgICBjb25zdCBRQ2hhciogb3JpZyA9IGJ1ZjsKKyAgICB1aW50IGxl
biA9IF91cmwubGVuZ3RoKCk7CisgICAgdWludCBwb3MgPSAwOworCisgICAgLy8gTm9kZSAxOiBB
Y2NlcHQgYWxwaGEgb3Igc2xhc2gKKyAgICBRQ2hhciB4ID0gYnVmW3BvcysrXTsKKyAgICBpZiAo
IHggPT0gJy8nICkKKyAgICB7CisJLy8gQSBzbGFzaCBtZWFucyB3ZSBpbW1lZGlhdGVseSBwcm9j
ZWVkIHRvIHBhcnNlIGl0IGFzIGEgZmlsZSBVUkwuCisJZC0+bV9pVXJpTW9kZSA9IFVSTDsKKwlt
X3N0clByb3RvY29sID0gZmlsZVByb3Q7CisJcGFyc2VVUkwoIF91cmwsIGVuY29kaW5nX2hpbnQg
KTsKKwlyZXR1cm47CisgICAgfQorICAgIGlmICggIWlzYWxwaGEoIChpbnQpeCApICkKKwlnb3Rv
IE5vZGVFcnI7CisKKyAgICAvLyBOb2RlIDI6IEFjY2VwdCBhbnkgYW1vdW50IG9mIChhbHBoYXxk
aWdpdHwnKyd8Jy0nKQorICAgIC8vICcuJyBpcyBub3QgY3VycmVudGx5IGFjY2VwdGVkLCBiZWNh
dXNlIGN1cnJlbnQgS1VSTCBtYXkgYmUgY29uZnVzZWQuCisgICAgLy8gUHJvY2VlZCB3aXRoIDov
LyA6LyBvciA6CisgICAgd2hpbGUoIHBvcyA8IGxlbiAmJiAoaXNhbHBoYSgoaW50KWJ1Zltwb3Nd
KSB8fCBpc2RpZ2l0KChpbnQpYnVmW3Bvc10pIHx8CisJCQkgYnVmW3Bvc10gPT0gJysnIHx8IGJ1
Zltwb3NdID09ICctJykpIHBvcysrOworCisgICAgaWYgKHBvcyA8IGxlbiAmJiBidWZbcG9zXSA9
PSAnOicgKQorICAgIHsKKwltX3N0clByb3RvY29sID0gUVN0cmluZyggb3JpZywgcG9zICkubG93
ZXIoKTsKKwlpZiAoIGQtPm1faVVyaU1vZGUgPT0gQXV0byApCisJICAgIGQtPm1faVVyaU1vZGUg
PSB1cmlNb2RlRm9yUHJvdG9jb2woIG1fc3RyUHJvdG9jb2wgKTsKKwkvLyBQcm9jZWVkIHRvIGNv
cnJlY3QgcGFyc2UgZnVuY3Rpb24uCisJc3dpdGNoICggZC0+bV9pVXJpTW9kZSApCisJeworCWNh
c2UgUmF3VVJJOgorCSAgICBwYXJzZVJhd1VSSSggX3VybCApOworCSAgICByZXR1cm47CisJY2Fz
ZSBNYWlsdG86CisJICAgIHBhcnNlTWFpbHRvKCBfdXJsICk7CisJICAgIHJldHVybjsKKwljYXNl
IFVSTDoKKwkgICAgcGFyc2VVUkwoIF91cmwsIGVuY29kaW5nX2hpbnQgKTsKKwkgICAgcmV0dXJu
OworCWRlZmF1bHQ6CisJICAgIC8vIFVua25vd24gVVJJIG1vZGUgcmVzdWx0cyBpbiBhbiBpbnZh
bGlkIFVSSS4KKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworTm9kZUVycjoKKyAgICByZXNldCgp
OworICAgIG1fc3RyUHJvdG9jb2wgPSBfdXJsOworICAgIGQtPm1faVVyaU1vZGUgPSBJbnZhbGlk
OworfQorCit2b2lkIEtVUkw6OnBhcnNlUmF3VVJJKCBjb25zdCBRU3RyaW5nJiBfdXJsLCBpbnQg
ZW5jb2RpbmdfaGludCApCit7CisgICAgdWludCBsZW4gPSBfdXJsLmxlbmd0aCgpOworICAgIGNv
bnN0IFFDaGFyKiBidWYgPSBfdXJsLnVuaWNvZGUoKTsKKworICAgIHVpbnQgcG9zID0gMDsKKwor
ICAgIC8vIEFjY2VwdCBhbnkgYW1vdW50IG9mIChhbHBoYXxkaWdpdHwnKyd8Jy0nKQorICAgIC8v
ICcuJyBpcyBub3QgY3VycmVudGx5IGFjY2VwdGVkLCBiZWNhdXNlIGN1cnJlbnQgS1VSTCBtYXkg
YmUgY29uZnVzZWQuCisgICAgLy8gUHJvY2VlZCB3aXRoIDoKKyAgICB3aGlsZSggcG9zIDwgbGVu
ICYmIChpc2FscGhhKChpbnQpYnVmW3Bvc10pIHx8IGlzZGlnaXQoKGludClidWZbcG9zXSkgfHwK
KwkJCSBidWZbcG9zXSA9PSAnKycgfHwgYnVmW3Bvc10gPT0gJy0nKSkgcG9zKys7CisKKyAgICAv
LyBOb3RlIHRoYXQgbV9zdHJQcm90b2NvbCBpcyBhbHJlYWR5IHNldCBoZXJlLCBzbyB3ZSBqdXN0
IHNraXAgb3ZlciB0aGUgcHJvdG9jb2wuCisgICAgaWYgKHBvcyA8IGxlbiAmJiBidWZbcG9zXSA9
PSAnOicgKQorCXBvcysrOworICAgIGVsc2UKKwlnb3RvIE5vZGVFcnI7CisKKyAgICBpZiAoIHBv
cyA9PSBsZW4gKQorCW1fc3RyUGF0aCA9IFFTdHJpbmc6Om51bGw7CisgICAgZWxzZQorCW1fc3Ry
UGF0aCA9IGRlY29kZSggUVN0cmluZyggYnVmICsgcG9zLCBsZW4gLSBwb3MgKSwgZW5jb2Rpbmdf
aGludCApOworCisgICAgbV9iSXNNYWxmb3JtZWQgPSBmYWxzZTsKKworICAgIHJldHVybjsKKwor
Tm9kZUVycjoKKyAgICByZXNldCgpOworICAgIG1fc3RyUHJvdG9jb2wgPSBfdXJsOworICAgIGQt
Pm1faVVyaU1vZGUgPSBJbnZhbGlkOworfQorCit2b2lkIEtVUkw6OnBhcnNlTWFpbHRvKCBjb25z
dCBRU3RyaW5nJiBfdXJsLCBpbnQgZW5jb2RpbmdfaGludCApCit7CisgICAgcGFyc2VSYXdVUkko
IF91cmwsIGVuY29kaW5nX2hpbnQgKTsKKyAgICBpZiAoIG1fYklzTWFsZm9ybWVkICkKICAgICBy
ZXR1cm47CisgICAgUVJlZ0V4cCBtYWlscmUoIiguK0ApKC4rKSIpOworICAgIGlmICggbWFpbHJl
LmV4YWN0TWF0Y2goIG1fc3RyUGF0aCApICkKKyAgICB7CisjaWZuZGVmIEtERV9RVF9PTkxZCisJ
UVN0cmluZyBob3N0ID0gS0lETkE6OnRvVW5pY29kZSggbWFpbHJlLmNhcCggMiApICk7CisJaWYg
KGhvc3QuaXNFbXB0eSgpKQorCSAgICBob3N0ID0gbWFpbHJlLmNhcCggMiApLmxvd2VyKCk7Cisj
ZWxzZQorCVFTdHJpbmcgaG9zdCA9IG1haWxyZS5jYXAoIDIgKS5sb3dlcigpOworI2VuZGlmCisJ
bV9zdHJQYXRoID0gbWFpbHJlLmNhcCggMSApICsgaG9zdDsKICAgfQorICAgIGVsc2UKKyAgICB7
CisJcmVzZXQoKTsKKwltX3N0clByb3RvY29sID0gX3VybDsKKwlkLT5tX2lVcmlNb2RlID0gSW52
YWxpZDsKKyAgICB9Cit9CiAKK3ZvaWQgS1VSTDo6cGFyc2VVUkwoIGNvbnN0IFFTdHJpbmcmIF91
cmwsIGludCBlbmNvZGluZ19oaW50ICkKK3sKICAgUVN0cmluZyBwb3J0OwogICBib29sIGJhZEhv
c3ROYW1lID0gZmFsc2U7CiAgIGludCBzdGFydCA9IDA7CiAgIHVpbnQgbGVuID0gX3VybC5sZW5n
dGgoKTsKICAgY29uc3QgUUNoYXIqIGJ1ZiA9IF91cmwudW5pY29kZSgpOwotICBjb25zdCBRQ2hh
ciogb3JpZyA9IGJ1ZjsKIAogICBRQ2hhciBkZWxpbTsKICAgUVN0cmluZyB0bXA7CkBAIC01OTUs
MTUgKzc1MiwxMyBAQCB2b2lkIEtVUkw6OnBhcnNlKCBjb25zdCBRU3RyaW5nJiBfdXJsLCBpCiAg
IHdoaWxlKCBwb3MgPCBsZW4gJiYgKGlzYWxwaGEoKGludClidWZbcG9zXSkgfHwgaXNkaWdpdCgo
aW50KWJ1Zltwb3NdKSB8fAogICAgICAgICAgIGJ1Zltwb3NdID09ICcrJyB8fCBidWZbcG9zXSA9
PSAnLScpKSBwb3MrKzsKIAorICAvLyBOb3RlIHRoYXQgbV9zdHJQcm90b2NvbCBpcyBhbHJlYWR5
IHNldCBoZXJlLCBzbyB3ZSBqdXN0IHNraXAgb3ZlciB0aGUgcHJvdG9jb2wuCiAgIGlmICggcG9z
KzIgPCBsZW4gJiYgYnVmW3Bvc10gPT0gJzonICYmIGJ1Zltwb3MrMV0gPT0gJy8nICYmIGJ1Zltw
b3MrMl0gPT0gJy8nICkKICAgICB7Ci0gICAgICBtX3N0clByb3RvY29sID0gUVN0cmluZyggb3Jp
ZywgcG9zICkubG93ZXIoKTsKICAgICAgIHBvcyArPSAzOwogICAgIH0KICAgZWxzZSBpZiAocG9z
KzEgPCBsZW4gJiYgYnVmW3Bvc10gPT0gJzonICkgLy8gTmVlZCB0byBhbHdheXMgY29tcGFyZSBs
ZW5ndGgoKS0xIG90aGVyd2lzZSBLVVJMIHBhc3NlcyAiaHR0cDoiIGFzIGxlZ2FsISEKICAgICB7
Ci0gICAgICBtX3N0clByb3RvY29sID0gUVN0cmluZyggb3JpZywgcG9zICkubG93ZXIoKTsKLSAg
ICAgIC8va2REZWJ1ZygxMjYpPDwic2V0dGluZyBwcm90b2NvbCB0byAiPDxtX3N0clByb3RvY29s
PDxlbmRsOwogICAgICAgcG9zKys7CiAgICAgICBzdGFydCA9IHBvczsKICAgICAgIGdvdG8gTm9k
ZTk7CkBAIC04MzIsNiArOTg3LDcgQEAgdm9pZCBLVVJMOjpwYXJzZSggY29uc3QgUVN0cmluZyYg
X3VybCwgaQogLy8gIGtkRGVidWcoMTI2KSA8PCAiS1VSTCBjb3VsZG4ndCBwYXJzZSBVUkwgXCIi
IDw8IF91cmwgPDwgIlwiIiA8PCBlbmRsOwogICByZXNldCgpOwogICBtX3N0clByb3RvY29sID0g
X3VybDsKKyAgZC0+bV9pVXJpTW9kZSA9IEludmFsaWQ7CiB9CiAKIEtVUkwmIEtVUkw6Om9wZXJh
dG9yPSggY29uc3QgUVN0cmluZyYgX3VybCApCkBAIC04NTQsNiArMTAxMCw3IEBAIEtVUkwmIEtV
Ukw6Om9wZXJhdG9yPSggY29uc3QgY2hhciAqIF91cmwKIEtVUkwmIEtVUkw6Om9wZXJhdG9yPSgg
Y29uc3QgUVVybCAmIHUgKQogewogICBtX3N0clByb3RvY29sID0gdS5wcm90b2NvbCgpOworICBk
LT5tX2lVcmlNb2RlID0gQXV0bzsKICAgbV9zdHJVc2VyID0gdS51c2VyKCk7CiAgIG1fc3RyUGFz
cyA9IHUucGFzc3dvcmQoKTsKICAgbV9zdHJIb3N0ID0gdS5ob3N0KCk7CkBAIC04ODAsNiArMTAz
Nyw3IEBAIEtVUkwmIEtVUkw6Om9wZXJhdG9yPSggY29uc3QgS1VSTCYgX3UgKQogICBtX3N0clJl
Zl9lbmNvZGVkID0gX3UubV9zdHJSZWZfZW5jb2RlZDsKICAgbV9iSXNNYWxmb3JtZWQgPSBfdS5t
X2JJc01hbGZvcm1lZDsKICAgbV9pUG9ydCA9IF91Lm1faVBvcnQ7CisgIGQtPm1faVVyaU1vZGUg
PSBfdS5kLT5tX2lVcmlNb2RlOwogCiAgIHJldHVybiAqdGhpczsKIH0KQEAgLTEyNjksNiArMTQy
Nyw4IEBAIFFTdHJpbmcgS1VSTDo6dXJsKCBpbnQgX3RyYWlsaW5nLCBpbnQgZW4KICAgICAgIH0K
ICAgICAgIHUgKz0gIkAiOwogICAgIH0KKyAgICBpZiAoIGQtPm1faVVyaU1vZGUgPT0gVVJMICkK
KyAgICB7CiAgICAgYm9vbCBJUHY2ID0gKG1fc3RySG9zdC5maW5kKCc6JykgIT0gLTEpOwogICAg
IGlmIChJUHY2KQogICAgICAgIHUgKz0gJ1snICsgbV9zdHJIb3N0ICsgJ10nOwpAQCAtMTI4MCw4
ICsxNDQwLDE2IEBAIFFTdHJpbmcgS1VSTDo6dXJsKCBpbnQgX3RyYWlsaW5nLCBpbnQgZW4KICAg
ICAgIHUgKz0gYnVmZmVyOwogICAgIH0KICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB1ICs9
IG1fc3RySG9zdDsKKyAgICB9CisgIH0KIAorICBpZiAoIGQtPm1faVVyaU1vZGUgPT0gVVJMICkK
ICAgdSArPSBlbmNvZGVkUGF0aEFuZFF1ZXJ5KCBfdHJhaWxpbmcsIGZhbHNlLCBlbmNvZGluZ19o
aW50ICk7CisgIGVsc2UKKyAgICB1ICs9IG1fc3RyUGF0aDsKIAogICBpZiAoIGhhc1JlZigpICkK
ICAgewpAQCAtMTMxNSw2ICsxNDgzLDggQEAgUVN0cmluZyBLVVJMOjpwcmV0dHlVUkwoIGludCBf
dHJhaWxpbmcgKQogICAgICAgLy8gRG9uJ3Qgc2hvdyBwYXNzd29yZCEKICAgICAgIHUgKz0gIkAi
OwogICAgIH0KKyAgICBpZiAoIGQtPm1faVVyaU1vZGUgPT0gVVJMICkKKyAgICB7CiAgICAgYm9v
bCBJUHY2ID0gKG1fc3RySG9zdC5maW5kKCc6JykgIT0gLTEpOwogICAgIGlmIChJUHY2KQogICAg
IHsKQEAgLTEzMjQsNiArMTQ5NCwxMSBAQCBRU3RyaW5nIEtVUkw6OnByZXR0eVVSTCggaW50IF90
cmFpbGluZyApCiAgICAgewogICAgICAgIHUgKz0gbGF6eV9lbmNvZGUobV9zdHJIb3N0KTsKICAg
ICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB1ICs9IGxhenlfZW5jb2RlKG1fc3Ry
SG9zdCk7CisgICAgfQogICAgIGlmICggbV9pUG9ydCAhPSAwICkgewogICAgICAgUVN0cmluZyBi
dWZmZXI7CiAgICAgICBidWZmZXIuc3ByaW50ZiggIjoldSIsIG1faVBvcnQgKTsKQEAgLTE2ODIs
NiArMTg1Nyw3IEBAIHZvaWQKIEtVUkw6OnNldFByb3RvY29sKCBjb25zdCBRU3RyaW5nJiBfdHh0
ICkKIHsKICAgIG1fc3RyUHJvdG9jb2wgPSBfdHh0OworICAgaWYgKCBkLT5tX2lVcmlNb2RlID09
IEF1dG8gKSBkLT5tX2lVcmlNb2RlID0gdXJpTW9kZUZvclByb3RvY29sKCBtX3N0clByb3RvY29s
ICk7CiAgICBtX2JJc01hbGZvcm1lZCA9IGZhbHNlOwogfQogCkBAIC0xNzAwLDYgKzE4NzYsOSBA
QCBLVVJMOjpzZXRQYXNzKCBjb25zdCBRU3RyaW5nJiBfdHh0ICkKIHZvaWQKIEtVUkw6OnNldEhv
c3QoIGNvbnN0IFFTdHJpbmcmIF90eHQgKQogeworICBzd2l0Y2ggKCBkLT5tX2lVcmlNb2RlICkK
KyAgeworICBjYXNlIFVSTDoKICNpZm5kZWYgS0RFX1FUX09OTFkKICAgIG1fc3RySG9zdCA9IEtJ
RE5BOjp0b1VuaWNvZGUoX3R4dCk7CiAgICBpZiAobV9zdHJIb3N0LmlzRW1wdHkoKSkKQEAgLTE3
MDcsNiArMTg4NiwxMSBAQCBLVVJMOjpzZXRIb3N0KCBjb25zdCBRU3RyaW5nJiBfdHh0ICkKICNl
bHNlCiAgICBtX3N0ckhvc3QgPSBfdHh0Lmxvd2VyKCk7CiAjZW5kaWYKKyAgICBicmVhazsKKyAg
ZGVmYXVsdDoKKyAgICBtX3N0ckhvc3QgPSBfdHh0OworICAgIGJyZWFrOworICB9CiB9CiAKIHZv
aWQKQEAgLTIwNTEsMyArMjIzNSwxMDIgQEAgUVN0cmluZyBLVVJMOjpyZWxhdGl2ZVVSTChjb25z
dCBLVVJMICZiYQogCiAgICByZXR1cm4gcmVsVVJMOwogfQorCitpbnQgS1VSTDo6dXJpTW9kZSgp
IGNvbnN0Cit7CisgIHJldHVybiBkLT5tX2lVcmlNb2RlOworfQorCit2b2lkIEtVUkw6OnNldFVS
SU1vZGUoS1VSTDo6VVJJTW9kZSBtb2RlKQoreworICBkLT5tX2lVcmlNb2RlID0gbW9kZTsKK30K
KworCisKKy8vIFVSSU1vZGUgZGF0YWJhc2UKKworUU1hcDxRU3RyaW5nLCBLVVJMOjpVUklNb2Rl
PiB1cmlNb2RlczsKK1FNdXRleCB1cmlNb2RlTXV0ZXg7CisKKyNpZm5kZWYgS0RFX1FUX09OTFkK
K1FTdHJpbmcgcGFyc2VQcm90b2NvbEZpbGUoY29uc3QgUVN0cmluZyYgZmlsZSkKK3sKKyAgICBL
REVfc3RydWN0X3N0YXQgc3Q7CisgICAgaWYgKCBLREVfc3RhdCggZmlsZS5sYXRpbjEoKSwgJnN0
KSA9PSAtMSApIHsKKwlyZXR1cm4gUVN0cmluZzo6bnVsbDsKKyAgICB9CisgICAgY2hhciogYnVm
ID0gKGNoYXIqKSA6Om1hbGxvYyggc3Quc3Rfc2l6ZSApOworICAgIGlmICggIWJ1ZiApIHsKKwly
ZXR1cm4gUVN0cmluZzo6bnVsbDsKKyAgICB9CisgICAgaW50IGZkID0gS0RFX29wZW4oIGZpbGUu
bGF0aW4xKCksIE9fUkRPTkxZICk7CisgICAgaWYgKCBmZCA8IDAgKSB7CisJOjpmcmVlKCAodm9p
ZCopYnVmICk7CisJcmV0dXJuIFFTdHJpbmc6Om51bGw7CisgICAgfQorICAgIGludCByZWFkc2l6
ZSA9IDA7CisgICAgY2hhciogcG9zID0gYnVmOworICAgIHdoaWxlICggcmVhZHNpemUgPCBzdC5z
dF9zaXplICkKKyAgICB7CisJaW50IG4gPSA6OnJlYWQoIGZkLCBwb3MsIHN0LnN0X3NpemUgLSBy
ZWFkc2l6ZSApOworCWlmICggbiA9PSAtMSApIHsKKwkgICAgOjpmcmVlKCAodm9pZCopYnVmICk7
CisJICAgIDo6Y2xvc2UoIGZkICk7CisJICAgIHJldHVybiBRU3RyaW5nOjpudWxsOworCX0KKwlp
ZiAoIG4gPT0gMCApCisJICAgIGJyZWFrOworCXBvcyArPSBuOworCXJlYWRzaXplICs9IG47Cisg
ICAgfQorICAgIDo6Y2xvc2UoIGZkICk7CisKKyAgICBRQ1N0cmluZyBjcyggKGNvbnN0IGNoYXIq
KWJ1ZiwgcmVhZHNpemUgKTsKKyAgICA6OmZyZWUoICh2b2lkKilidWYgKTsKKyAgICBRU3RyaW5n
IHMgPSBjczsKKyAgICBRU3RyaW5nTGlzdCBsaXN0ID0gUVN0cmluZ0xpc3Q6OnNwbGl0KCBRUmVn
RXhwKCAiKFxccnxcXG4pKyIgKSwgcyApOworCisgICAgUVJlZ0V4cCByZSggIlxccyp1cmltb2Rl
XFxzKj1cXHMqKFxcdyspXFxzKiIgKTsKKyAgICBRU3RyaW5nTGlzdDo6SXRlcmF0b3IgaXQ7Cisg
ICAgZm9yICggaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGxpc3QuZW5kKCk7ICsraXQgKSB7CisJ
aWYgKCByZS5leGFjdE1hdGNoKCAoKml0KS5sb3dlcigpICkgKSB7CisJICAgIHJldHVybiByZS5j
YXAoMSkubG93ZXIoKTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIFFTdHJpbmc6Om51bGw7Cit9
CisjZW5kaWYKKworS1VSTDo6VVJJTW9kZSBLVVJMOjp1cmlNb2RlRm9yUHJvdG9jb2woY29uc3Qg
UVN0cmluZyYgcHJvdG9jb2wpCit7CisgICAgVVJJTW9kZSBtb2RlID0gQXV0bzsKKworICAgIHVy
aU1vZGVNdXRleC5sb2NrKCk7CisgICAgaWYgKCB1cmlNb2Rlcy5jb250YWlucyggcHJvdG9jb2wg
KSApCisJbW9kZSA9IHVyaU1vZGVzW3Byb3RvY29sXTsKKyAgICB1cmlNb2RlTXV0ZXgudW5sb2Nr
KCk7CisgICAgaWYgKG1vZGUgIT0gQXV0bykKKwlyZXR1cm4gbW9kZTsKKyNpZm5kZWYgS0RFX1FU
X09OTFkKKyAgICBpZiAoIEtHbG9iYWw6OmFjdGl2ZUluc3RhbmNlKCkgKSB7CisJUVN0cmluZyBt
b2RlbmFtZSA9IHBhcnNlUHJvdG9jb2xGaWxlKEtHbG9iYWw6OmFjdGl2ZUluc3RhbmNlKCktPmRp
cnMoKS0+ZmluZFJlc291cmNlKCAic2VydmljZXMiLCBRU3RyaW5nKCAiJTEucHJvdG9jb2wiICku
YXJnKCBwcm90b2NvbCApICkgKTsKKwlpZiAoIG1vZGVuYW1lID09ICJyYXd1cmkiICkgbW9kZSA9
IFJhd1VSSTsKKwllbHNlIGlmICggbW9kZW5hbWUgPT0gIm1haWx0byIgKSBtb2RlID0gTWFpbHRv
OworCWVsc2UgaWYgKCAhbW9kZW5hbWUuaXNFbXB0eSgpICkgbW9kZSA9IFVSTDsKKyAgICB9Cisg
ICAgaWYgKG1vZGUgPT0gQXV0byApIHsKKyNlbmRpZgorCWlmICggcHJvdG9jb2wgPT0gImVkMmsi
ICkgbW9kZSA9IFJhd1VSSTsKKwllbHNlIGlmICggcHJvdG9jb2wgPT0gIm1haWx0byIgKSBtb2Rl
ID0gTWFpbHRvOworCWVsc2UgbW9kZSA9IFVSTDsKKyNpZm5kZWYgS0RFX1FUX09OTFkKKyAgICB9
CisjZW5kaWYKKyAgICB1cmlNb2RlTXV0ZXgubG9jaygpOworICAgIHVyaU1vZGVzLnJlcGxhY2Uo
IHByb3RvY29sLCBtb2RlICk7CisgICAgdXJpTW9kZU11dGV4LnVubG9jaygpOworICAgIHJldHVy
biBtb2RlOworfQorCkluZGV4OiBrdXJsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2Rl
L2tkZWxpYnMva2RlY29yZS9rdXJsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEyCmRpZmYg
LXUgLTMgLXAgLWIgLUIgLXIxLjExMiBrdXJsLmgKLS0tIGt1cmwuaAkxMyBBdWcgMjAwMyAxMDox
Njo1OCAtMDAwMAkxLjExMgorKysga3VybC5oCTE0IEF1ZyAyMDAzIDE2OjE2OjM5IC0wMDAwCkBA
IC01OSw2ICs1OSwzOCBAQCBwdWJsaWM6CiAgIH07CiAKICAgLyoqCisgICAqIERlZmluZXMgdGhl
IHR5cGUgb2YgVVJJIHdlIGFyZSBwcm9jZXNzaW5nLgorICAgKi8KKyAgZW51bSBVUklNb2RlCisg
IHsKKyAgICAvKioKKyAgICAgKiBBdXRvbWF0aWNhbGx5IGRldGVjdGVkLiBVc2luZyB0aGlzIG1v
ZGUsIGFuIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcKKyAgICAgKiBtb2RlIHdpbGwgYmUgc2VsZWN0
ZWQgd2hlbiB0aGUgVVJJIGlzIGZpcnN0IHByb2Nlc3NlZC4KKyAgICAgKi8KKyAgICBBdXRvLAor
ICAgIC8qKgorICAgICAqIEludmFsaWQgVVJJLiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IGNhbid0
IGJlIHBhcnNlZCBhcyBhIFVSSSBhdCBhbGwuCisgICAgICogVGhlIGNvbnRlbnRzIGFyZSBhY2Nl
c3NpYmxlIHRocm91Z2ggdGhlIEByZWYgcHJvdG9jb2woKSBtZXRob2QuCisgICAgICovCisgICAg
SW52YWxpZCwKKyAgICAvKioKKyAgICAgKiBSYXcgVVJJLiBUaGlzIHR5cGUgb2YgVVJJIHNob3Vs
ZCBub3QgYmUgcHJvY2Vzc2VkIGluIGFueSB3YXkuCisgICAgICogQ29udGVudHMgYXJlIGFjY2Vz
c2libGUgdGhyb3VnaCB0aGUgQHJlZiBwYXRoKCkgbWV0aG9kLgorICAgICAqLworICAgIFJhd1VS
SSwKKyAgICAvKioKKyAgICAgKiBTdGFuZGFyZHMgY29tcGxpYW50IFVSTC4gUHJvY2VzcyBhcyBh
IHN5bnRhY3RpY2FsbHkgY29ycmVjdCBVUkwuCisgICAgICovCisgICAgVVJMLAorICAgIC8qKgor
ICAgICAqIE1haWx0byBVUkkuIHBhdGgoKSBjb250YWlucyBhbiBlbWFpbCBhZGRyZXNzIHdoaWNo
IHNob3VsZCBoYXZlIGl0cworICAgICAqIGRvbWFpbiBwYXJ0IHByb2Nlc3NlZCBhcyBhIEROUyBu
YW1lLiBUaGUgZW1haWwgYWRkcmVzcyBpcyBhY2Nlc3NpYmxlCisgICAgICogdGhyb3VnaCB0aGUg
QHJlZiBwYXRoKCkgbWV0aG9kLgorICAgICAqLworICAgIE1haWx0bworICB9OworCisgIC8qKgog
ICAgKiBLVVJMOjpMaXN0IGlzIGEgUVZhbHVlTGlzdCB0aGF0IGNvbnRhaW5zIEtVUkxzIHdpdGgg
YSBmZXcKICAgICogY29udmVuaWVuY2UgbWV0aG9kcy4KICAgICogQHNlZSBLVVJMCkBAIC0xMzcs
NiArMTY5LDQ5IEBAIHB1YmxpYzoKICAgICovCiAgIEtVUkwoIGNvbnN0IFFDU3RyaW5nJiB1cmws
IGludCBlbmNvZGluZ19oaW50ID0gMCApOwogICAvKioKKyAgICogVXN1YWwgY29uc3RydWN0b3Is
IHRvIGNvbnN0cnVjdCBmcm9tIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gdXJsIEEgVVJMLCBub3Qg
YSBmaWxlbmFtZS4gSWYgdGhlIFVSTCBkb2VzIG5vdCBoYXZlIGEgcHJvdG9jb2wKKyAgICogICAg
ICAgICAgICAgcGFydCwgImZpbGU6IiBpcyBhc3N1bWVkLgorICAgKiAgICAgICAgICAgICBJdCBp
cyBkYW5nZXJvdXMgdG8gZmVlZCB1bml4IGZpbGVuYW1lcyBpbnRvIHRoaXMgZnVuY3Rpb24sCisg
ICAqICAgICAgICAgICAgIHRoaXMgd2lsbCB3b3JrIG1vc3Qgb2YgdGhlIHRpbWUgYnV0IG5vdCBh
bHdheXMuCisgICAqICAgICAgICAgICAgIEZvciBleGFtcGxlICIvaG9tZS9Ub3JiZW4lMjBXZWlz
IiB3aWxsIGJlIGNvbnNpZGVyZWQgYSBVUkwKKyAgICogICAgICAgICAgICAgcG9pbnRpbmcgdG8g
dGhlIGZpbGUgIi9ob21lL1RvcmJlbiBXZWlzIiBpbnN0ZWFkIG9mIHRvIHRoZQorICAgKiAgICAg
ICAgICAgICBmaWxlICIvaG9tZS9Ub3JiZW4lMjBXZWlzIi4KKyAgICogICAgICAgICAgICAgVGhp
cyBtZWFucyB0aGF0IGlmIHlvdSBoYXZlIGEgdXN1YWwgVU5JWCBsaWtlIHBhdGggeW91CisgICAq
ICAgICAgICAgICAgIHNob3VsZCBub3QgdXNlIHRoaXMgY29uc3RydWN0b3IuCisgICAqICAgICAg
ICAgICAgIEluc3RlYWQgY3JlYXRlIGFuIGVtcHR5IHVybCBhbmQgc2V0IHRoZSBwYXRoIGJ5IHVz
aW5nCisgICAqICAgICAgICAgICAgIEByZWYgc2V0UGF0aCgpLgorICAgKiBAcGFyYW0gdXJpTW9k
ZSBNYW51YWxseSBzcGVjaWZ5IHRoZSBVUkkgcHJvY2Vzc2luZyBtb2RlLiBCeSBkZWZhdWx0LAor
ICAgKiAgICAgICAgICAgICB0aGlzIGlzIGRlY2lkZWQgYnkgdGhlIFVSSSdzIHByb3RvY29sLgor
ICAgKiBAcGFyYW0gZW5jb2RpbmdfaGludCBNSUIgb2Ygb3JpZ2luYWwgZW5jb2Rpbmcgb2YgVVJM
LgorICAgKiBAc2VlIFFUZXh0Q29kZWM6Om1pYkVudW0oKQorICAgKi8KKyAgS1VSTCggY29uc3Qg
UVN0cmluZyYgdXJsLCBVUklNb2RlIHVyaU1vZGUsIGludCBlbmNvZGluZ19oaW50ID0gMCApOwor
ICAvKioKKyAgICogQ29uc3RydWN0b3IgdGFraW5nIGEgY2hhciAqIEBwIHVybCwgd2hpY2ggaXMg
YW4gX2VuY29kZWRfIHJlcHJlc2VudGF0aW9uCisgICAqIG9mIHRoZSBVUkwsIGV4YWN0bHkgbGlr
ZSB0aGUgdXN1YWwgY29uc3RydWN0b3IuIFRoaXMgaXMgdXNlZnVsIHdoZW4KKyAgICogdGhlbiBV
UkwsIGluIGl0cyBlbmNvZGVkIGZvcm0sIGlzIHN0cmljdGx5IGFzY2lpLgorICAgKiBAcGFyYW0g
dXJsIEEgZW5jb2RlZCBVUkwuIElmIHRoZSBVUkwgZG9lcyBub3QgaGF2ZSBhIHByb3RvY29sIHBh
cnQsCisgICAqICAgICAgICAgICAgImZpbGU6IiBpcyBhc3N1bWVkLgorICAgKiBAcGFyYW0gdXJp
TW9kZSBNYW51YWxseSBzcGVjaWZ5IHRoZSBVUkkgcHJvY2Vzc2luZyBtb2RlLiBCeSBkZWZhdWx0
LAorICAgKiAgICAgICAgICAgICB0aGlzIGlzIGRlY2lkZWQgYnkgdGhlIFVSSSdzIHByb3RvY29s
LgorICAgKiBAcGFyYW0gZW5jb2RpbmdfaGludCBNSUIgb2Ygb3JpZ2luYWwgZW5jb2Rpbmcgb2Yg
VVJMLgorICAgKiBAc2VlIFFUZXh0Q29kZWM6Om1pYkVudW0oKQorICAgKi8KKyAgS1VSTCggY29u
c3QgY2hhciAqIHVybCwgVVJJTW9kZSB1cmlNb2RlLCBpbnQgZW5jb2RpbmdfaGludCA9IDAgKTsK
KyAgLyoqCisgICAqIENvbnN0cnVjdG9yIHRha2luZyBhIFFDU3RyaW5nIEBwIHVybCwgd2hpY2gg
aXMgYW4gX2VuY29kZWRfIHJlcHJlc2VudGF0aW9uCisgICAqIG9mIHRoZSBVUkwsIGV4YWN0bHkg
bGlrZSB0aGUgdXN1YWwgY29uc3RydWN0b3IuIFRoaXMgaXMgdXNlZnVsIHdoZW4KKyAgICogdGhl
biBVUkwsIGluIGl0cyBlbmNvZGVkIGZvcm0sIGlzIHN0cmljdGx5IGFzY2lpLgorICAgKiBAcGFy
YW0gdXJsIEEgZW5jb2RlZCBVUkwuIElmIHRoZSBVUkwgZG9lcyBub3QgaGF2ZSBhIHByb3RvY29s
IHBhcnQsCisgICAqICAgICAgICAgICAgImZpbGU6IiBpcyBhc3N1bWVkLgorICAgKiBAcGFyYW0g
dXJpTW9kZSBNYW51YWxseSBzcGVjaWZ5IHRoZSBVUkkgcHJvY2Vzc2luZyBtb2RlLiBCeSBkZWZh
dWx0LAorICAgKiAgICAgICAgICAgICB0aGlzIGlzIGRlY2lkZWQgYnkgdGhlIFVSSSdzIHByb3Rv
Y29sLgorICAgKiBAcGFyYW0gZW5jb2RpbmdfaGludCBNSUIgb2Ygb3JpZ2luYWwgZW5jb2Rpbmcg
b2YgVVJMLgorICAgKiBAc2VlIFFUZXh0Q29kZWM6Om1pYkVudW0oKQorICAgKi8KKyAgS1VSTCgg
Y29uc3QgUUNTdHJpbmcmIHVybCwgVVJJTW9kZSB1cmlNb2RlLCBpbnQgZW5jb2RpbmdfaGludCA9
IDAgKTsKKyAgLyoqCiAgICAqIENvcHkgY29uc3RydWN0b3IuCiAgICAqIEBwYXJhbSB1IHRoZSBL
VVJMIHRvIGNvcHkKICAgICovCkBAIC0xNzMsNiArMjQ4LDE5IEBAIHB1YmxpYzoKICAgdm9pZCBz
ZXRQcm90b2NvbCggY29uc3QgUVN0cmluZyYgX3R4dCApOwogCiAgIC8qKgorICAgKiBSZXR1cm5z
IHRoZSBVUkkgcHJvY2Vzc2luZyBtb2RlIGZvciB0aGUgVVJMLgorICAgKiBAcmV0dXJuIHRoZSBV
UkkgcHJvY2Vzc2luZyBtb2RlIHNldCBmb3IgdGhpcyBVUkwuCisgICAqKi8KKyAgaW50IHVyaU1v
ZGUoKSBjb25zdDsKKyAgLyoqCisgICAqIFNldHMgdGhlIFVSSSBwcm9jZXNzaW5nIG1vZGUgZm9y
IHRoZSBVUkwuIE5vdGUgdGhhdCBpdCBpcyBub3QKKyAgICogcmV0cm9hY3RpdmUgLSBvbmx5IGRh
dGEgYWRkZWQgdG8gaXQgYWZ0ZXIgeW91IGNoYW5nZSB0aGUgVVJJCisgICAqIG1vZGUgd2lsbCBi
ZSBwcm9jZXNzZWQgYWNjb3JkaW5nIHRvIHRoZSBuZXcgbW9kZS4KKyAgICogQHBhcmFtIG1vZGUg
dGhlIG5ldyBVUkkgcHJvY2Vzc2luZyBtb2RlIGZvciB0aGUgVVJMLgorICAgKiovCisgIHZvaWQg
c2V0VVJJTW9kZShVUklNb2RlIG1vZGUpOworCisgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBkZWNv
ZGVkIHVzZXIgbmFtZSAobG9naW4sIHVzZXIgaWQsIC4uLikgaW5jbHVkZWQgaW4gdGhlIFVSTC4K
ICAgICogQHJldHVybiB0aGUgdXNlciBuYW1lIG9yIFFTdHJpbmc6Om51bGwgaWYgdGhlcmUgaXMg
bm8gdXNlciBuYW1lCiAgICAqKi8KQEAgLTgyMyw2ICs5MTEsMTIgQEAgcHVibGljOgogICAgKi8K
ICAgc3RhdGljIFFTdHJpbmcgcmVsYXRpdmVQYXRoKGNvbnN0IFFTdHJpbmcgJmJhc2VfZGlyLCBj
b25zdCBRU3RyaW5nICZwYXRoLCBib29sICppc1BhcmVudD0wKTsKIAorICAvKioKKyAgICogRGV0
ZXJtaW5lIHdoaWNoIFVSSSBtb2RlIGlzIHN1aXRhYmxlIGZvciBwcm9jZXNzaW5nIFVSSXMgb2Yg
YSBnaXZlbiBwcm90b2NvbC4KKyAgICogQHBhcmFtIHByb3RvY29sIFRoZSBwcm90b2NvbCBuYW1l
LgorICAgKi8KKyAgc3RhdGljIFVSSU1vZGUgdXJpTW9kZUZvclByb3RvY29sKGNvbnN0IFFTdHJp
bmcmIHByb3RvY29sKTsKKwogI2lmZGVmIEtERV9OT19DT01QQVQKIHByaXZhdGU6CiAjZW5kaWYK
QEAgLTgzMyw3ICs5MjcsMTAgQEAgcHJpdmF0ZToKIAogcHJvdGVjdGVkOgogICB2b2lkIHJlc2V0
KCk7Ci0gIHZvaWQgcGFyc2UoIGNvbnN0IFFTdHJpbmcmIF91cmwsIGludCBlbmNvZGluZ19oaW50
ID0gMCk7CisgIHZvaWQgcGFyc2VVUkwoIGNvbnN0IFFTdHJpbmcmIF91cmwsIGludCBlbmNvZGlu
Z19oaW50ID0gMCApOworICB2b2lkIHBhcnNlUmF3VVJJKCBjb25zdCBRU3RyaW5nJiBfdXJsLCBp
bnQgZW5jb2RpbmdfaGludCA9IDAgKTsKKyAgdm9pZCBwYXJzZU1haWx0byggY29uc3QgUVN0cmlu
ZyYgX3VybCwgaW50IGVuY29kaW5nX2hpbnQgPSAwICk7CisgIHZvaWQgcGFyc2UoIGNvbnN0IFFT
dHJpbmcmIF91cmwsIGludCBlbmNvZGluZ19oaW50ID0gMCApOwogCiBwcml2YXRlOgogICBRU3Ry
aW5nIG1fc3RyUHJvdG9jb2w7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2311</attachid>
            <date>2003-08-25 20:06:10 +0000</date>
            <delta_ts>2003-11-05 21:49:27 +0000</delta_ts>
            <desc>Processing modes, updated.</desc>
            <filename>kurl.diff</filename>
            <type>text/plain</type>
            <size>16899</size>
            <attacher name="Petter Stokke">ummo</attacher>
            
              <data encoding="base64">SW5kZXg6IGt1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9rZGVsaWJzL2tk
ZWNvcmUva3VybC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjUyCmRpZmYgLXUgLTMgLXAg
LWIgLUIgLXIxLjI1MiBrdXJsLmNwcAotLS0ga3VybC5jcHAJMTYgQXVnIDIwMDMgMTQ6MTQ6MjUg
LTAwMDAJMS4yNTIKKysrIGt1cmwuY3BwCTI1IEF1ZyAyMDAzIDE3OjU5OjQ1IC0wMDAwCkBAIC0y
Myw2ICsyMywxMiBAQAogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtnbG9iYWwuaD4K
ICNpbmNsdWRlIDxraWRuYS5oPgorI2luY2x1ZGUgPGtsYXJnZWZpbGUuaD4KKyNpbmNsdWRlIDxr
c3RhbmRhcmRkaXJzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMv
c3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPHN0ZGlvLmg+
CkBAIC0zOCw2ICs0NCwxMyBAQAogI2luY2x1ZGUgPHFzdHlsZXNoZWV0Lmg+CiAjaW5jbHVkZSA8
cW1hcC5oPgogI2luY2x1ZGUgPHF0ZXh0Y29kZWMuaD4KKyNpbmNsdWRlIDxxbXV0ZXguaD4KKwor
Y2xhc3MgS1VSTFByaXZhdGUKK3sKK3B1YmxpYzoKKyAgICBpbnQgbV9pVXJpTW9kZTsKK307CiAK
IHN0YXRpYyBjb25zdCBRU3RyaW5nIGZpbGVQcm90ID0gImZpbGUiOwogCkBAIC0zOTYsMzQgKzQw
OSw2NCBAQCBRU3RyaW5nTGlzdCBLVVJMOjpMaXN0Ojp0b1N0cmluZ0xpc3QoKSBjCiAKIEtVUkw6
OktVUkwoKQogeworICBkID0gbmV3IEtVUkxQcml2YXRlKCk7CiAgIHJlc2V0KCk7CiB9CiAKIEtV
Ukw6On5LVVJMKCkKIHsKKyAgZGVsZXRlIGQ7CiB9CiAKIAogS1VSTDo6S1VSTCggY29uc3QgUVN0
cmluZyAmdXJsLCBpbnQgZW5jb2RpbmdfaGludCApCiB7CisgIGQgPSBuZXcgS1VSTFByaXZhdGUo
KTsKICAgcmVzZXQoKTsKICAgcGFyc2UoIHVybCwgZW5jb2RpbmdfaGludCApOwogfQogCiBLVVJM
OjpLVVJMKCBjb25zdCBjaGFyICogdXJsLCBpbnQgZW5jb2RpbmdfaGludCApCiB7CisgIGQgPSBu
ZXcgS1VSTFByaXZhdGUoKTsKICAgcmVzZXQoKTsKICAgcGFyc2UoIFFTdHJpbmc6OmZyb21MYXRp
bjEodXJsKSwgZW5jb2RpbmdfaGludCApOwogfQogCiBLVVJMOjpLVVJMKCBjb25zdCBRQ1N0cmlu
ZyYgdXJsLCBpbnQgZW5jb2RpbmdfaGludCApCiB7CisgIGQgPSBuZXcgS1VSTFByaXZhdGUoKTsK
KyAgcmVzZXQoKTsKKyAgcGFyc2UoIFFTdHJpbmc6OmZyb21MYXRpbjEodXJsKSwgZW5jb2Rpbmdf
aGludCApOworfQorCitLVVJMOjpLVVJMKCBjb25zdCBRU3RyaW5nICZ1cmwsIEtVUkw6OlVSSU1v
ZGUgbW9kZSwgaW50IGVuY29kaW5nX2hpbnQgKQoreworICBkID0gbmV3IEtVUkxQcml2YXRlKCk7
CisgIHJlc2V0KCk7CisgIGQtPm1faVVyaU1vZGUgPSBtb2RlOworICBwYXJzZSggdXJsLCBlbmNv
ZGluZ19oaW50ICk7Cit9CisKK0tVUkw6OktVUkwoIGNvbnN0IGNoYXIgKiB1cmwsIEtVUkw6OlVS
SU1vZGUgbW9kZSwgaW50IGVuY29kaW5nX2hpbnQgKQoreworICBkID0gbmV3IEtVUkxQcml2YXRl
KCk7CisgIHJlc2V0KCk7CisgIGQtPm1faVVyaU1vZGUgPSBtb2RlOworICBwYXJzZSggUVN0cmlu
Zzo6ZnJvbUxhdGluMSh1cmwpLCBlbmNvZGluZ19oaW50ICk7Cit9CisKK0tVUkw6OktVUkwoIGNv
bnN0IFFDU3RyaW5nJiB1cmwsIEtVUkw6OlVSSU1vZGUgbW9kZSwgaW50IGVuY29kaW5nX2hpbnQg
KQoreworICBkID0gbmV3IEtVUkxQcml2YXRlKCk7CiAgIHJlc2V0KCk7CisgIGQtPm1faVVyaU1v
ZGUgPSBtb2RlOwogICBwYXJzZSggUVN0cmluZzo6ZnJvbUxhdGluMSh1cmwpLCBlbmNvZGluZ19o
aW50ICk7CiB9CiAKIEtVUkw6OktVUkwoIGNvbnN0IEtVUkwmIF91ICkKIHsKKyAgZCA9IG5ldyBL
VVJMUHJpdmF0ZSgpOwogICAqdGhpcyA9IF91OwogfQogCkBAIC00NTksMTIgKzUwMiwxNCBAQCBR
RGF0YVN0cmVhbSAmIG9wZXJhdG9yPj4gKFFEYXRhU3RyZWFtICYgCiAjaWZuZGVmIFFUX05PX05F
VFdPUktQUk9UT0NPTAogS1VSTDo6S1VSTCggY29uc3QgUVVybCAmdSApCiB7CisgIGQgPSBuZXcg
S1VSTFByaXZhdGUoKTsKICAgKnRoaXMgPSB1OwogfQogI2VuZGlmCiAKIEtVUkw6OktVUkwoIGNv
bnN0IEtVUkwmIF91LCBjb25zdCBRU3RyaW5nJiBfcmVsX3VybCwgaW50IGVuY29kaW5nX2hpbnQg
KQogeworICBkID0gbmV3IEtVUkxQcml2YXRlKCk7CiAgIGlmIChfdS5oYXNTdWJVUkwoKSkgLy8g
T3BlcmF0ZSBvbiB0aGUgbGFzdCBzdWJ1cmwsIG5vdCB0aGUgZmlyc3QKICAgewogICAgIEtVUkw6
Okxpc3QgbHN0ID0gc3BsaXQoIF91ICk7CkBAIC01NjEsNiArNjA2LDcgQEAgdm9pZCBLVVJMOjpy
ZXNldCgpCiAgIG1fc3RyUmVmX2VuY29kZWQgPSBRU3RyaW5nOjpudWxsOwogICBtX2JJc01hbGZv
cm1lZCA9IHRydWU7CiAgIG1faVBvcnQgPSAwOworICBkLT5tX2lVcmlNb2RlID0gQXV0bzsKIH0K
IAogYm9vbCBLVVJMOjppc0VtcHR5KCkgY29uc3QKQEAgLTU3MCwyMSArNjE2LDEzMiBAQCBib29s
IEtVUkw6OmlzRW1wdHkoKSBjb25zdAogCiB2b2lkIEtVUkw6OnBhcnNlKCBjb25zdCBRU3RyaW5n
JiBfdXJsLCBpbnQgZW5jb2RpbmdfaGludCApCiB7Ci0gIC8va2REZWJ1ZygxMjYpIDw8ICJwYXJz
ZSAiIDw8IF91cmwgPDwgZW5kbDsKLSAgLy8gUmV0dXJuIGltbWVkaWF0ZWx5IHdoZW5ldmVyIHRo
ZSBnaXZlbiB1cmwKLSAgLy8gaXMgZW1wdHkgb3IgbnVsbC4KLSAgaWYgKCBfdXJsLmlzRW1wdHko
KSApCisgICAgaWYgKCBfdXJsLmlzRW1wdHkoKSB8fCBkLT5tX2lVcmlNb2RlID09IEludmFsaWQg
KQogICB7CiAgICAgbV9zdHJQcm90b2NvbCA9IF91cmw7CisJZC0+bV9pVXJpTW9kZSA9IEludmFs
aWQ7CisJcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFFDaGFyKiBidWYgPSBfdXJsLnVuaWNv
ZGUoKTsKKyAgICBjb25zdCBRQ2hhciogb3JpZyA9IGJ1ZjsKKyAgICB1aW50IGxlbiA9IF91cmwu
bGVuZ3RoKCk7CisgICAgdWludCBwb3MgPSAwOworCisgICAgLy8gTm9kZSAxOiBBY2NlcHQgYWxw
aGEgb3Igc2xhc2gKKyAgICBRQ2hhciB4ID0gYnVmW3BvcysrXTsKKyAgICBpZiAoIHggPT0gJy8n
ICkKKyAgICB7CisJLy8gQSBzbGFzaCBtZWFucyB3ZSBpbW1lZGlhdGVseSBwcm9jZWVkIHRvIHBh
cnNlIGl0IGFzIGEgZmlsZSBVUkwuCisJZC0+bV9pVXJpTW9kZSA9IFVSTDsKKwltX3N0clByb3Rv
Y29sID0gZmlsZVByb3Q7CisJcGFyc2VVUkwoIF91cmwsIGVuY29kaW5nX2hpbnQgKTsKKwlyZXR1
cm47CisgICAgfQorICAgIGlmICggIWlzYWxwaGEoIChpbnQpeCApICkKKwlnb3RvIE5vZGVFcnI7
CisKKyAgICAvLyBOb2RlIDI6IEFjY2VwdCBhbnkgYW1vdW50IG9mIChhbHBoYXxkaWdpdHwnKyd8
Jy0nKQorICAgIC8vICcuJyBpcyBub3QgY3VycmVudGx5IGFjY2VwdGVkLCBiZWNhdXNlIGN1cnJl
bnQgS1VSTCBtYXkgYmUgY29uZnVzZWQuCisgICAgLy8gUHJvY2VlZCB3aXRoIDovLyA6LyBvciA6
CisgICAgd2hpbGUoIHBvcyA8IGxlbiAmJiAoaXNhbHBoYSgoaW50KWJ1Zltwb3NdKSB8fCBpc2Rp
Z2l0KChpbnQpYnVmW3Bvc10pIHx8CisJCQkgYnVmW3Bvc10gPT0gJysnIHx8IGJ1Zltwb3NdID09
ICctJykpIHBvcysrOworCisgICAgaWYgKHBvcyA8IGxlbiAmJiBidWZbcG9zXSA9PSAnOicgKQor
ICAgIHsKKwltX3N0clByb3RvY29sID0gUVN0cmluZyggb3JpZywgcG9zICkubG93ZXIoKTsKKwlp
ZiAoIGQtPm1faVVyaU1vZGUgPT0gQXV0byApCisJICAgIGQtPm1faVVyaU1vZGUgPSB1cmlNb2Rl
Rm9yUHJvdG9jb2woIG1fc3RyUHJvdG9jb2wgKTsKKwkvLyBQcm9jZWVkIHRvIGNvcnJlY3QgcGFy
c2UgZnVuY3Rpb24uCisJc3dpdGNoICggZC0+bV9pVXJpTW9kZSApCisJeworCWNhc2UgUmF3VVJJ
OgorCSAgICBwYXJzZVJhd1VSSSggX3VybCApOworCSAgICByZXR1cm47CisJY2FzZSBNYWlsdG86
CisJICAgIHBhcnNlTWFpbHRvKCBfdXJsICk7CisJICAgIHJldHVybjsKKwljYXNlIFVSTDoKKwkg
ICAgcGFyc2VVUkwoIF91cmwsIGVuY29kaW5nX2hpbnQgKTsKKwkgICAgcmV0dXJuOworCWRlZmF1
bHQ6CisJICAgIC8vIFVua25vd24gVVJJIG1vZGUgcmVzdWx0cyBpbiBhbiBpbnZhbGlkIFVSSS4K
KwkgICAgYnJlYWs7CisJfQorICAgIH0KKworTm9kZUVycjoKKyAgICByZXNldCgpOworICAgIG1f
c3RyUHJvdG9jb2wgPSBfdXJsOworICAgIGQtPm1faVVyaU1vZGUgPSBJbnZhbGlkOworfQorCit2
b2lkIEtVUkw6OnBhcnNlUmF3VVJJKCBjb25zdCBRU3RyaW5nJiBfdXJsLCBpbnQgZW5jb2Rpbmdf
aGludCApCit7CisgICAgdWludCBsZW4gPSBfdXJsLmxlbmd0aCgpOworICAgIGNvbnN0IFFDaGFy
KiBidWYgPSBfdXJsLnVuaWNvZGUoKTsKKworICAgIHVpbnQgcG9zID0gMDsKKworICAgIC8vIEFj
Y2VwdCBhbnkgYW1vdW50IG9mIChhbHBoYXxkaWdpdHwnKyd8Jy0nKQorICAgIC8vICcuJyBpcyBu
b3QgY3VycmVudGx5IGFjY2VwdGVkLCBiZWNhdXNlIGN1cnJlbnQgS1VSTCBtYXkgYmUgY29uZnVz
ZWQuCisgICAgLy8gUHJvY2VlZCB3aXRoIDoKKyAgICB3aGlsZSggcG9zIDwgbGVuICYmIChpc2Fs
cGhhKChpbnQpYnVmW3Bvc10pIHx8IGlzZGlnaXQoKGludClidWZbcG9zXSkgfHwKKwkJCSBidWZb
cG9zXSA9PSAnKycgfHwgYnVmW3Bvc10gPT0gJy0nKSkgcG9zKys7CisKKyAgICAvLyBOb3RlIHRo
YXQgbV9zdHJQcm90b2NvbCBpcyBhbHJlYWR5IHNldCBoZXJlLCBzbyB3ZSBqdXN0IHNraXAgb3Zl
ciB0aGUgcHJvdG9jb2wuCisgICAgaWYgKHBvcyA8IGxlbiAmJiBidWZbcG9zXSA9PSAnOicgKQor
CXBvcysrOworICAgIGVsc2UKKwlnb3RvIE5vZGVFcnI7CisKKyAgICBpZiAoIHBvcyA9PSBsZW4g
KQorCW1fc3RyUGF0aCA9IFFTdHJpbmc6Om51bGw7CisgICAgZWxzZQorCW1fc3RyUGF0aCA9IGRl
Y29kZSggUVN0cmluZyggYnVmICsgcG9zLCBsZW4gLSBwb3MgKSwgZW5jb2RpbmdfaGludCApOwor
CisgICAgbV9iSXNNYWxmb3JtZWQgPSBmYWxzZTsKKworICAgIHJldHVybjsKKworTm9kZUVycjoK
KyAgICByZXNldCgpOworICAgIG1fc3RyUHJvdG9jb2wgPSBfdXJsOworICAgIGQtPm1faVVyaU1v
ZGUgPSBJbnZhbGlkOworfQorCit2b2lkIEtVUkw6OnBhcnNlTWFpbHRvKCBjb25zdCBRU3RyaW5n
JiBfdXJsLCBpbnQgZW5jb2RpbmdfaGludCApCit7CisgICAgcGFyc2VSYXdVUkkoIF91cmwsIGVu
Y29kaW5nX2hpbnQgKTsKKyAgICBpZiAoIG1fYklzTWFsZm9ybWVkICkKICAgICByZXR1cm47Cisg
ICAgUVJlZ0V4cCBtYWlscmUoIiguK0ApKC4rKSIpOworICAgIGlmICggbWFpbHJlLmV4YWN0TWF0
Y2goIG1fc3RyUGF0aCApICkKKyAgICB7CisjaWZuZGVmIEtERV9RVF9PTkxZCisJUVN0cmluZyBo
b3N0ID0gS0lETkE6OnRvVW5pY29kZSggbWFpbHJlLmNhcCggMiApICk7CisJaWYgKGhvc3QuaXNF
bXB0eSgpKQorCSAgICBob3N0ID0gbWFpbHJlLmNhcCggMiApLmxvd2VyKCk7CisjZWxzZQorCVFT
dHJpbmcgaG9zdCA9IG1haWxyZS5jYXAoIDIgKS5sb3dlcigpOworI2VuZGlmCisJbV9zdHJQYXRo
ID0gbWFpbHJlLmNhcCggMSApICsgaG9zdDsKICAgfQorICAgIGVsc2UKKyAgICB7CisJcmVzZXQo
KTsKKwltX3N0clByb3RvY29sID0gX3VybDsKKwlkLT5tX2lVcmlNb2RlID0gSW52YWxpZDsKKyAg
ICB9Cit9CiAKK3ZvaWQgS1VSTDo6cGFyc2VVUkwoIGNvbnN0IFFTdHJpbmcmIF91cmwsIGludCBl
bmNvZGluZ19oaW50ICkKK3sKICAgUVN0cmluZyBwb3J0OwogICBib29sIGJhZEhvc3ROYW1lID0g
ZmFsc2U7CiAgIGludCBzdGFydCA9IDA7CiAgIHVpbnQgbGVuID0gX3VybC5sZW5ndGgoKTsKICAg
Y29uc3QgUUNoYXIqIGJ1ZiA9IF91cmwudW5pY29kZSgpOwotICBjb25zdCBRQ2hhciogb3JpZyA9
IGJ1ZjsKIAogICBRQ2hhciBkZWxpbTsKICAgUVN0cmluZyB0bXA7CkBAIC02MDQsMTUgKzc2MSwx
MyBAQCB2b2lkIEtVUkw6OnBhcnNlKCBjb25zdCBRU3RyaW5nJiBfdXJsLCBpCiAgIHdoaWxlKCBw
b3MgPCBsZW4gJiYgKGlzYWxwaGEoKGludClidWZbcG9zXSkgfHwgaXNkaWdpdCgoaW50KWJ1Zltw
b3NdKSB8fAogICAgICAgICAgIGJ1Zltwb3NdID09ICcrJyB8fCBidWZbcG9zXSA9PSAnLScpKSBw
b3MrKzsKIAorICAvLyBOb3RlIHRoYXQgbV9zdHJQcm90b2NvbCBpcyBhbHJlYWR5IHNldCBoZXJl
LCBzbyB3ZSBqdXN0IHNraXAgb3ZlciB0aGUgcHJvdG9jb2wuCiAgIGlmICggcG9zKzIgPCBsZW4g
JiYgYnVmW3Bvc10gPT0gJzonICYmIGJ1Zltwb3MrMV0gPT0gJy8nICYmIGJ1Zltwb3MrMl0gPT0g
Jy8nICkKICAgICB7Ci0gICAgICBtX3N0clByb3RvY29sID0gUVN0cmluZyggb3JpZywgcG9zICku
bG93ZXIoKTsKICAgICAgIHBvcyArPSAzOwogICAgIH0KICAgZWxzZSBpZiAocG9zKzEgPCBsZW4g
JiYgYnVmW3Bvc10gPT0gJzonICkgLy8gTmVlZCB0byBhbHdheXMgY29tcGFyZSBsZW5ndGgoKS0x
IG90aGVyd2lzZSBLVVJMIHBhc3NlcyAiaHR0cDoiIGFzIGxlZ2FsISEKICAgICB7Ci0gICAgICBt
X3N0clByb3RvY29sID0gUVN0cmluZyggb3JpZywgcG9zICkubG93ZXIoKTsKLSAgICAgIC8va2RE
ZWJ1ZygxMjYpPDwic2V0dGluZyBwcm90b2NvbCB0byAiPDxtX3N0clByb3RvY29sPDxlbmRsOwog
ICAgICAgcG9zKys7CiAgICAgICBzdGFydCA9IHBvczsKICAgICAgIGdvdG8gTm9kZTk7CkBAIC04
NDEsNiArOTk2LDcgQEAgdm9pZCBLVVJMOjpwYXJzZSggY29uc3QgUVN0cmluZyYgX3VybCwgaQog
Ly8gIGtkRGVidWcoMTI2KSA8PCAiS1VSTCBjb3VsZG4ndCBwYXJzZSBVUkwgXCIiIDw8IF91cmwg
PDwgIlwiIiA8PCBlbmRsOwogICByZXNldCgpOwogICBtX3N0clByb3RvY29sID0gX3VybDsKKyAg
ZC0+bV9pVXJpTW9kZSA9IEludmFsaWQ7CiB9CiAKIEtVUkwmIEtVUkw6Om9wZXJhdG9yPSggY29u
c3QgUVN0cmluZyYgX3VybCApCkBAIC04NjMsNiArMTAxOSw3IEBAIEtVUkwmIEtVUkw6Om9wZXJh
dG9yPSggY29uc3QgY2hhciAqIF91cmwKIEtVUkwmIEtVUkw6Om9wZXJhdG9yPSggY29uc3QgUVVy
bCAmIHUgKQogewogICBtX3N0clByb3RvY29sID0gdS5wcm90b2NvbCgpOworICBkLT5tX2lVcmlN
b2RlID0gQXV0bzsKICAgbV9zdHJVc2VyID0gdS51c2VyKCk7CiAgIG1fc3RyUGFzcyA9IHUucGFz
c3dvcmQoKTsKICAgbV9zdHJIb3N0ID0gdS5ob3N0KCk7CkBAIC04ODksNiArMTA0Niw3IEBAIEtV
UkwmIEtVUkw6Om9wZXJhdG9yPSggY29uc3QgS1VSTCYgX3UgKQogICBtX3N0clJlZl9lbmNvZGVk
ID0gX3UubV9zdHJSZWZfZW5jb2RlZDsKICAgbV9iSXNNYWxmb3JtZWQgPSBfdS5tX2JJc01hbGZv
cm1lZDsKICAgbV9pUG9ydCA9IF91Lm1faVBvcnQ7CisgIGQtPm1faVVyaU1vZGUgPSBfdS5kLT5t
X2lVcmlNb2RlOwogCiAgIHJldHVybiAqdGhpczsKIH0KQEAgLTEyODgsNiArMTQ0Niw4IEBAIFFT
dHJpbmcgS1VSTDo6dXJsKCBpbnQgX3RyYWlsaW5nLCBpbnQgZW4KICAgICAgIH0KICAgICAgIHUg
Kz0gIkAiOwogICAgIH0KKyAgICBpZiAoIGQtPm1faVVyaU1vZGUgPT0gVVJMICkKKyAgICB7CiAg
ICAgYm9vbCBJUHY2ID0gKG1fc3RySG9zdC5maW5kKCc6JykgIT0gLTEpOwogICAgIGlmIChJUHY2
KQogICAgICAgIHUgKz0gJ1snICsgbV9zdHJIb3N0ICsgJ10nOwpAQCAtMTI5OSw4ICsxNDU5LDE2
IEBAIFFTdHJpbmcgS1VSTDo6dXJsKCBpbnQgX3RyYWlsaW5nLCBpbnQgZW4KICAgICAgIHUgKz0g
YnVmZmVyOwogICAgIH0KICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB1ICs9IG1fc3RySG9z
dDsKKyAgICB9CisgIH0KIAorICBpZiAoIGQtPm1faVVyaU1vZGUgPT0gVVJMICkKICAgdSArPSBl
bmNvZGVkUGF0aEFuZFF1ZXJ5KCBfdHJhaWxpbmcsIGZhbHNlLCBlbmNvZGluZ19oaW50ICk7Cisg
IGVsc2UKKyAgICB1ICs9IG1fc3RyUGF0aDsKIAogICBpZiAoIGhhc1JlZigpICkKICAgewpAQCAt
MTMzNCw2ICsxNTAyLDggQEAgUVN0cmluZyBLVVJMOjpwcmV0dHlVUkwoIGludCBfdHJhaWxpbmcg
KQogICAgICAgLy8gRG9uJ3Qgc2hvdyBwYXNzd29yZCEKICAgICAgIHUgKz0gIkAiOwogICAgIH0K
KyAgICBpZiAoIGQtPm1faVVyaU1vZGUgPT0gVVJMICkKKyAgICB7CiAgICAgYm9vbCBJUHY2ID0g
KG1fc3RySG9zdC5maW5kKCc6JykgIT0gLTEpOwogICAgIGlmIChJUHY2KQogICAgIHsKQEAgLTEz
NDMsNiArMTUxMywxMSBAQCBRU3RyaW5nIEtVUkw6OnByZXR0eVVSTCggaW50IF90cmFpbGluZyAp
CiAgICAgewogICAgICAgIHUgKz0gbGF6eV9lbmNvZGUobV9zdHJIb3N0KTsKICAgICB9CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICB1ICs9IGxhenlfZW5jb2RlKG1fc3RySG9zdCk7Cisg
ICAgfQogICAgIGlmICggbV9pUG9ydCAhPSAwICkgewogICAgICAgUVN0cmluZyBidWZmZXI7CiAg
ICAgICBidWZmZXIuc3ByaW50ZiggIjoldSIsIG1faVBvcnQgKTsKQEAgLTE3MDEsNiArMTg3Niw3
IEBAIHZvaWQKIEtVUkw6OnNldFByb3RvY29sKCBjb25zdCBRU3RyaW5nJiBfdHh0ICkKIHsKICAg
IG1fc3RyUHJvdG9jb2wgPSBfdHh0OworICAgaWYgKCBkLT5tX2lVcmlNb2RlID09IEF1dG8gKSBk
LT5tX2lVcmlNb2RlID0gdXJpTW9kZUZvclByb3RvY29sKCBtX3N0clByb3RvY29sICk7CiAgICBt
X2JJc01hbGZvcm1lZCA9IGZhbHNlOwogfQogCkBAIC0xNzE5LDYgKzE4OTUsOSBAQCBLVVJMOjpz
ZXRQYXNzKCBjb25zdCBRU3RyaW5nJiBfdHh0ICkKIHZvaWQKIEtVUkw6OnNldEhvc3QoIGNvbnN0
IFFTdHJpbmcmIF90eHQgKQogeworICBzd2l0Y2ggKCBkLT5tX2lVcmlNb2RlICkKKyAgeworICBj
YXNlIFVSTDoKICNpZm5kZWYgS0RFX1FUX09OTFkKICAgIG1fc3RySG9zdCA9IEtJRE5BOjp0b1Vu
aWNvZGUoX3R4dCk7CiAgICBpZiAobV9zdHJIb3N0LmlzRW1wdHkoKSkKQEAgLTE3MjYsNiArMTkw
NSwxMSBAQCBLVVJMOjpzZXRIb3N0KCBjb25zdCBRU3RyaW5nJiBfdHh0ICkKICNlbHNlCiAgICBt
X3N0ckhvc3QgPSBfdHh0Lmxvd2VyKCk7CiAjZW5kaWYKKyAgICBicmVhazsKKyAgZGVmYXVsdDoK
KyAgICBtX3N0ckhvc3QgPSBfdHh0OworICAgIGJyZWFrOworICB9CiB9CiAKIHZvaWQKQEAgLTIw
NzAsMyArMjI1NCwxMDIgQEAgUVN0cmluZyBLVVJMOjpyZWxhdGl2ZVVSTChjb25zdCBLVVJMICZi
YQogCiAgICByZXR1cm4gcmVsVVJMOwogfQorCitpbnQgS1VSTDo6dXJpTW9kZSgpIGNvbnN0Cit7
CisgIHJldHVybiBkLT5tX2lVcmlNb2RlOworfQorCit2b2lkIEtVUkw6OnNldFVSSU1vZGUoS1VS
TDo6VVJJTW9kZSBtb2RlKQoreworICBkLT5tX2lVcmlNb2RlID0gbW9kZTsKK30KKworCisKKy8v
IFVSSU1vZGUgZGF0YWJhc2UKKworUU1hcDxRU3RyaW5nLCBLVVJMOjpVUklNb2RlPiB1cmlNb2Rl
czsKK1FNdXRleCB1cmlNb2RlTXV0ZXg7CisKKyNpZm5kZWYgS0RFX1FUX09OTFkKK1FTdHJpbmcg
cGFyc2VQcm90b2NvbEZpbGUoY29uc3QgUVN0cmluZyYgZmlsZSkKK3sKKyAgICBLREVfc3RydWN0
X3N0YXQgc3Q7CisgICAgaWYgKCBLREVfc3RhdCggZmlsZS5sYXRpbjEoKSwgJnN0KSA9PSAtMSAp
IHsKKwlyZXR1cm4gUVN0cmluZzo6bnVsbDsKKyAgICB9CisgICAgY2hhciogYnVmID0gKGNoYXIq
KSA6Om1hbGxvYyggc3Quc3Rfc2l6ZSApOworICAgIGlmICggIWJ1ZiApIHsKKwlyZXR1cm4gUVN0
cmluZzo6bnVsbDsKKyAgICB9CisgICAgaW50IGZkID0gS0RFX29wZW4oIGZpbGUubGF0aW4xKCks
IE9fUkRPTkxZICk7CisgICAgaWYgKCBmZCA8IDAgKSB7CisJOjpmcmVlKCAodm9pZCopYnVmICk7
CisJcmV0dXJuIFFTdHJpbmc6Om51bGw7CisgICAgfQorICAgIGludCByZWFkc2l6ZSA9IDA7Cisg
ICAgY2hhciogcG9zID0gYnVmOworICAgIHdoaWxlICggcmVhZHNpemUgPCBzdC5zdF9zaXplICkK
KyAgICB7CisJaW50IG4gPSA6OnJlYWQoIGZkLCBwb3MsIHN0LnN0X3NpemUgLSByZWFkc2l6ZSAp
OworCWlmICggbiA9PSAtMSApIHsKKwkgICAgOjpmcmVlKCAodm9pZCopYnVmICk7CisJICAgIDo6
Y2xvc2UoIGZkICk7CisJICAgIHJldHVybiBRU3RyaW5nOjpudWxsOworCX0KKwlpZiAoIG4gPT0g
MCApCisJICAgIGJyZWFrOworCXBvcyArPSBuOworCXJlYWRzaXplICs9IG47CisgICAgfQorICAg
IDo6Y2xvc2UoIGZkICk7CisKKyAgICBRQ1N0cmluZyBjcyggKGNvbnN0IGNoYXIqKWJ1ZiwgcmVh
ZHNpemUgKTsKKyAgICA6OmZyZWUoICh2b2lkKilidWYgKTsKKyAgICBRU3RyaW5nIHMgPSBjczsK
KyAgICBRU3RyaW5nTGlzdCBsaXN0ID0gUVN0cmluZ0xpc3Q6OnNwbGl0KCBRUmVnRXhwKCAiKFxc
cnxcXG4pKyIgKSwgcyApOworCisgICAgUVJlZ0V4cCByZSggIlxccyp1cmltb2RlXFxzKj1cXHMq
KFxcdyspXFxzKiIgKTsKKyAgICBRU3RyaW5nTGlzdDo6SXRlcmF0b3IgaXQ7CisgICAgZm9yICgg
aXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGxpc3QuZW5kKCk7ICsraXQgKSB7CisJaWYgKCByZS5l
eGFjdE1hdGNoKCAoKml0KS5sb3dlcigpICkgKSB7CisJICAgIHJldHVybiByZS5jYXAoMSkubG93
ZXIoKTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIFFTdHJpbmc6Om51bGw7Cit9CisjZW5kaWYK
KworS1VSTDo6VVJJTW9kZSBLVVJMOjp1cmlNb2RlRm9yUHJvdG9jb2woY29uc3QgUVN0cmluZyYg
cHJvdG9jb2wpCit7CisgICAgVVJJTW9kZSBtb2RlID0gQXV0bzsKKworICAgIHVyaU1vZGVNdXRl
eC5sb2NrKCk7CisgICAgaWYgKCB1cmlNb2Rlcy5jb250YWlucyggcHJvdG9jb2wgKSApCisJbW9k
ZSA9IHVyaU1vZGVzW3Byb3RvY29sXTsKKyAgICB1cmlNb2RlTXV0ZXgudW5sb2NrKCk7CisgICAg
aWYgKG1vZGUgIT0gQXV0bykKKwlyZXR1cm4gbW9kZTsKKyNpZm5kZWYgS0RFX1FUX09OTFkKKyAg
ICBpZiAoIEtHbG9iYWw6OmFjdGl2ZUluc3RhbmNlKCkgKSB7CisJUVN0cmluZyBtb2RlbmFtZSA9
IHBhcnNlUHJvdG9jb2xGaWxlKEtHbG9iYWw6OmFjdGl2ZUluc3RhbmNlKCktPmRpcnMoKS0+Zmlu
ZFJlc291cmNlKCAic2VydmljZXMiLCBRU3RyaW5nKCAiJTEucHJvdG9jb2wiICkuYXJnKCBwcm90
b2NvbCApICkgKTsKKwlpZiAoIG1vZGVuYW1lID09ICJyYXd1cmkiICkgbW9kZSA9IFJhd1VSSTsK
KwllbHNlIGlmICggbW9kZW5hbWUgPT0gIm1haWx0byIgKSBtb2RlID0gTWFpbHRvOworCWVsc2Ug
aWYgKCAhbW9kZW5hbWUuaXNFbXB0eSgpICkgbW9kZSA9IFVSTDsKKyAgICB9CisgICAgaWYgKG1v
ZGUgPT0gQXV0byApIHsKKyNlbmRpZgorCWlmICggcHJvdG9jb2wgPT0gImVkMmsiICkgbW9kZSA9
IFJhd1VSSTsKKwllbHNlIGlmICggcHJvdG9jb2wgPT0gIm1haWx0byIgKSBtb2RlID0gTWFpbHRv
OworCWVsc2UgbW9kZSA9IFVSTDsKKyNpZm5kZWYgS0RFX1FUX09OTFkKKyAgICB9CisjZW5kaWYK
KyAgICB1cmlNb2RlTXV0ZXgubG9jaygpOworICAgIHVyaU1vZGVzLnJlcGxhY2UoIHByb3RvY29s
LCBtb2RlICk7CisgICAgdXJpTW9kZU11dGV4LnVubG9jaygpOworICAgIHJldHVybiBtb2RlOwor
fQorCkluZGV4OiBrdXJsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMv
a2RlY29yZS9rdXJsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIwCmRpZmYgLXUgLTMgLXAg
LWIgLUIgLXIxLjEyMCBrdXJsLmgKLS0tIGt1cmwuaAkyNCBBdWcgMjAwMyAxMTowMDozNCAtMDAw
MAkxLjEyMAorKysga3VybC5oCTI1IEF1ZyAyMDAzIDE3OjU5OjQ1IC0wMDAwCkBAIC01OSw2ICs1
OSwzOCBAQCBwdWJsaWM6CiAgIH07CiAKICAgLyoqCisgICAqIERlZmluZXMgdGhlIHR5cGUgb2Yg
VVJJIHdlIGFyZSBwcm9jZXNzaW5nLgorICAgKi8KKyAgZW51bSBVUklNb2RlCisgIHsKKyAgICAv
KioKKyAgICAgKiBBdXRvbWF0aWNhbGx5IGRldGVjdGVkLiBVc2luZyB0aGlzIG1vZGUsIGFuIGFw
cHJvcHJpYXRlIHByb2Nlc3NpbmcKKyAgICAgKiBtb2RlIHdpbGwgYmUgc2VsZWN0ZWQgd2hlbiB0
aGUgVVJJIGlzIGZpcnN0IHByb2Nlc3NlZC4KKyAgICAgKi8KKyAgICBBdXRvLAorICAgIC8qKgor
ICAgICAqIEludmFsaWQgVVJJLiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IGNhbid0IGJlIHBhcnNl
ZCBhcyBhIFVSSSBhdCBhbGwuCisgICAgICogVGhlIGNvbnRlbnRzIGFyZSBhY2Nlc3NpYmxlIHRo
cm91Z2ggdGhlIEByZWYgcHJvdG9jb2woKSBtZXRob2QuCisgICAgICovCisgICAgSW52YWxpZCwK
KyAgICAvKioKKyAgICAgKiBSYXcgVVJJLiBUaGlzIHR5cGUgb2YgVVJJIHNob3VsZCBub3QgYmUg
cHJvY2Vzc2VkIGluIGFueSB3YXkuCisgICAgICogQ29udGVudHMgYXJlIGFjY2Vzc2libGUgdGhy
b3VnaCB0aGUgQHJlZiBwYXRoKCkgbWV0aG9kLgorICAgICAqLworICAgIFJhd1VSSSwKKyAgICAv
KioKKyAgICAgKiBTdGFuZGFyZHMgY29tcGxpYW50IFVSTC4gUHJvY2VzcyBhcyBhIHN5bnRhY3Rp
Y2FsbHkgY29ycmVjdCBVUkwuCisgICAgICovCisgICAgVVJMLAorICAgIC8qKgorICAgICAqIE1h
aWx0byBVUkkuIHBhdGgoKSBjb250YWlucyBhbiBlbWFpbCBhZGRyZXNzIHdoaWNoIHNob3VsZCBo
YXZlIGl0cworICAgICAqIGRvbWFpbiBwYXJ0IHByb2Nlc3NlZCBhcyBhIEROUyBuYW1lLiBUaGUg
ZW1haWwgYWRkcmVzcyBpcyBhY2Nlc3NpYmxlCisgICAgICogdGhyb3VnaCB0aGUgQHJlZiBwYXRo
KCkgbWV0aG9kLgorICAgICAqLworICAgIE1haWx0bworICB9OworCisgIC8qKgogICAgKiBLVVJM
OjpMaXN0IGlzIGEgUVZhbHVlTGlzdCB0aGF0IGNvbnRhaW5zIEtVUkxzIHdpdGggYSBmZXcKICAg
ICogY29udmVuaWVuY2UgbWV0aG9kcy4KICAgICogQHNlZSBLVVJMCkBAIC0xMzcsNiArMTY5LDUx
IEBAIHB1YmxpYzoKICAgICovCiAgIEtVUkwoIGNvbnN0IFFDU3RyaW5nJiB1cmwsIGludCBlbmNv
ZGluZ19oaW50ID0gMCApOwogICAvKioKKyAgICogVXN1YWwgY29uc3RydWN0b3IsIHRvIGNvbnN0
cnVjdCBmcm9tIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gdXJsIEEgVVJMLCBub3QgYSBmaWxlbmFt
ZS4gSWYgdGhlIFVSTCBkb2VzIG5vdCBoYXZlIGEgcHJvdG9jb2wKKyAgICogICAgICAgICAgICAg
cGFydCwgImZpbGU6IiBpcyBhc3N1bWVkLgorICAgKiAgICAgICAgICAgICBJdCBpcyBkYW5nZXJv
dXMgdG8gZmVlZCB1bml4IGZpbGVuYW1lcyBpbnRvIHRoaXMgZnVuY3Rpb24sCisgICAqICAgICAg
ICAgICAgIHRoaXMgd2lsbCB3b3JrIG1vc3Qgb2YgdGhlIHRpbWUgYnV0IG5vdCBhbHdheXMuCisg
ICAqICAgICAgICAgICAgIEZvciBleGFtcGxlICIvaG9tZS9Ub3JiZW4lMjBXZWlzIiB3aWxsIGJl
IGNvbnNpZGVyZWQgYSBVUkwKKyAgICogICAgICAgICAgICAgcG9pbnRpbmcgdG8gdGhlIGZpbGUg
Ii9ob21lL1RvcmJlbiBXZWlzIiBpbnN0ZWFkIG9mIHRvIHRoZQorICAgKiAgICAgICAgICAgICBm
aWxlICIvaG9tZS9Ub3JiZW4lMjBXZWlzIi4KKyAgICogICAgICAgICAgICAgVGhpcyBtZWFucyB0
aGF0IGlmIHlvdSBoYXZlIGEgdXN1YWwgVU5JWCBsaWtlIHBhdGggeW91CisgICAqICAgICAgICAg
ICAgIHNob3VsZCBub3QgdXNlIHRoaXMgY29uc3RydWN0b3IuCisgICAqICAgICAgICAgICAgIElu
c3RlYWQgY3JlYXRlIGFuIGVtcHR5IHVybCBhbmQgc2V0IHRoZSBwYXRoIGJ5IHVzaW5nCisgICAq
ICAgICAgICAgICAgIEByZWYgc2V0UGF0aCgpLgorICAgKiBAcGFyYW0gdXJpTW9kZSBNYW51YWxs
eSBzcGVjaWZ5IHRoZSBVUkkgcHJvY2Vzc2luZyBtb2RlLiBCeSBkZWZhdWx0LAorICAgKiAgICAg
ICAgICAgICB0aGlzIGlzIGRlY2lkZWQgYnkgdGhlIFVSSSdzIHByb3RvY29sLgorICAgKiBAcGFy
YW0gZW5jb2RpbmdfaGludCBNSUIgb2Ygb3JpZ2luYWwgZW5jb2Rpbmcgb2YgVVJMLgorICAgKiBA
c2VlIFFUZXh0Q29kZWM6Om1pYkVudW0oKQorICAgKi8KKyAgS1VSTCggY29uc3QgUVN0cmluZyYg
dXJsLCBVUklNb2RlIHVyaU1vZGUsIGludCBlbmNvZGluZ19oaW50ID0gMCApOworICAvKioKKyAg
ICogQ29uc3RydWN0b3IgdGFraW5nIGEgY2hhciAqIEBwIHVybCwgd2hpY2ggaXMgYW4gX2VuY29k
ZWRfIHJlcHJlc2VudGF0aW9uCisgICAqIG9mIHRoZSBVUkwsIGV4YWN0bHkgbGlrZSB0aGUgdXN1
YWwgY29uc3RydWN0b3IuIFRoaXMgaXMgdXNlZnVsIHdoZW4KKyAgICogdGhlbiBVUkwsIGluIGl0
cyBlbmNvZGVkIGZvcm0sIGlzIHN0cmljdGx5IGFzY2lpLgorICAgKiBAcGFyYW0gdXJsIEEgZW5j
b2RlZCBVUkwuIElmIHRoZSBVUkwgZG9lcyBub3QgaGF2ZSBhIHByb3RvY29sIHBhcnQsCisgICAq
ICAgICAgICAgICAgImZpbGU6IiBpcyBhc3N1bWVkLgorICAgKiBAcGFyYW0gdXJpTW9kZSBNYW51
YWxseSBzcGVjaWZ5IHRoZSBVUkkgcHJvY2Vzc2luZyBtb2RlLiBCeSBkZWZhdWx0LAorICAgKiAg
ICAgICAgICAgICB0aGlzIGlzIGRlY2lkZWQgYnkgdGhlIFVSSSdzIHByb3RvY29sLgorICAgKiBA
cGFyYW0gZW5jb2RpbmdfaGludCBNSUIgb2Ygb3JpZ2luYWwgZW5jb2Rpbmcgb2YgVVJMLgorICAg
KiBAc2VlIFFUZXh0Q29kZWM6Om1pYkVudW0oKQorICAgKi8KKyAgS1VSTCggY29uc3QgY2hhciAq
IHVybCwgVVJJTW9kZSB1cmlNb2RlLCBpbnQgZW5jb2RpbmdfaGludCA9IDAgKTsKKyAgLyoqCisg
ICAqIENvbnN0cnVjdG9yIHRha2luZyBhIFFDU3RyaW5nIEBwIHVybCwgd2hpY2ggaXMgYW4gX2Vu
Y29kZWRfIHJlcHJlc2VudGF0aW9uCisgICAqIG9mIHRoZSBVUkwsIGV4YWN0bHkgbGlrZSB0aGUg
dXN1YWwgY29uc3RydWN0b3IuIFRoaXMgaXMgdXNlZnVsIHdoZW4KKyAgICogdGhlbiBVUkwsIGlu
IGl0cyBlbmNvZGVkIGZvcm0sIGlzIHN0cmljdGx5IGFzY2lpLgorICAgKiBAcGFyYW0gdXJsIEEg
ZW5jb2RlZCBVUkwuIElmIHRoZSBVUkwgZG9lcyBub3QgaGF2ZSBhIHByb3RvY29sIHBhcnQsCisg
ICAqICAgICAgICAgICAgImZpbGU6IiBpcyBhc3N1bWVkLgorICAgKiBAcGFyYW0gdXJpTW9kZSBN
YW51YWxseSBzcGVjaWZ5IHRoZSBVUkkgcHJvY2Vzc2luZyBtb2RlLiBCeSBkZWZhdWx0LAorICAg
KiAgICAgICAgICAgICB0aGlzIGlzIGRlY2lkZWQgYnkgdGhlIFVSSSdzIHByb3RvY29sLgorICAg
KiBAcGFyYW0gZW5jb2RpbmdfaGludCBNSUIgb2Ygb3JpZ2luYWwgZW5jb2Rpbmcgb2YgVVJMLgor
ICAgKiBAc2VlIFFUZXh0Q29kZWM6Om1pYkVudW0oKQorICAgKi8KKyAgS1VSTCggY29uc3QgUUNT
dHJpbmcmIHVybCwgVVJJTW9kZSB1cmlNb2RlLCBpbnQgZW5jb2RpbmdfaGludCA9IDAgKTsKKyAg
Ly8gIyMjIEJJQzogTWVyZ2UgdGhlIGFib3ZlIHRocmVlIGNvbnN0cnVjdG9ycyB3aXRoIHRoZSBm
aXJzdCB0aHJlZS4KKworICAvKioKICAgICogQ29weSBjb25zdHJ1Y3Rvci4KICAgICogQHBhcmFt
IHUgdGhlIEtVUkwgdG8gY29weQogICAgKi8KQEAgLTE3Myw2ICsyNTAsMTkgQEAgcHVibGljOgog
ICB2b2lkIHNldFByb3RvY29sKCBjb25zdCBRU3RyaW5nJiBfdHh0ICk7CiAKICAgLyoqCisgICAq
IFJldHVybnMgdGhlIFVSSSBwcm9jZXNzaW5nIG1vZGUgZm9yIHRoZSBVUkwuCisgICAqIEByZXR1
cm4gdGhlIFVSSSBwcm9jZXNzaW5nIG1vZGUgc2V0IGZvciB0aGlzIFVSTC4KKyAgICoqLworICBp
bnQgdXJpTW9kZSgpIGNvbnN0OworICAvKioKKyAgICogU2V0cyB0aGUgVVJJIHByb2Nlc3Npbmcg
bW9kZSBmb3IgdGhlIFVSTC4gTm90ZSB0aGF0IGl0IGlzIG5vdAorICAgKiByZXRyb2FjdGl2ZSAt
IG9ubHkgZGF0YSBhZGRlZCB0byBpdCBhZnRlciB5b3UgY2hhbmdlIHRoZSBVUkkKKyAgICogbW9k
ZSB3aWxsIGJlIHByb2Nlc3NlZCBhY2NvcmRpbmcgdG8gdGhlIG5ldyBtb2RlLgorICAgKiBAcGFy
YW0gbW9kZSB0aGUgbmV3IFVSSSBwcm9jZXNzaW5nIG1vZGUgZm9yIHRoZSBVUkwuCisgICAqKi8K
KyAgdm9pZCBzZXRVUklNb2RlKFVSSU1vZGUgbW9kZSk7CisKKyAgLyoqCiAgICAqIFJldHVybnMg
dGhlIGRlY29kZWQgdXNlciBuYW1lIChsb2dpbiwgdXNlciBpZCwgLi4uKSBpbmNsdWRlZCBpbiB0
aGUgVVJMLgogICAgKiBAcmV0dXJuIHRoZSB1c2VyIG5hbWUgb3IgUVN0cmluZzo6bnVsbCBpZiB0
aGVyZSBpcyBubyB1c2VyIG5hbWUKICAgICoqLwpAQCAtODMyLDYgKzkyMiwxMiBAQCBwdWJsaWM6
CiAgICAqLwogICBzdGF0aWMgUVN0cmluZyByZWxhdGl2ZVBhdGgoY29uc3QgUVN0cmluZyAmYmFz
ZV9kaXIsIGNvbnN0IFFTdHJpbmcgJnBhdGgsIGJvb2wgKmlzUGFyZW50PTApOwogCisgIC8qKgor
ICAgKiBEZXRlcm1pbmUgd2hpY2ggVVJJIG1vZGUgaXMgc3VpdGFibGUgZm9yIHByb2Nlc3Npbmcg
VVJJcyBvZiBhIGdpdmVuIHByb3RvY29sLgorICAgKiBAcGFyYW0gcHJvdG9jb2wgVGhlIHByb3Rv
Y29sIG5hbWUuCisgICAqLworICBzdGF0aWMgVVJJTW9kZSB1cmlNb2RlRm9yUHJvdG9jb2woY29u
c3QgUVN0cmluZyYgcHJvdG9jb2wpOworCiAjaWZkZWYgS0RFX05PX0NPTVBBVAogcHJpdmF0ZToK
ICNlbmRpZgpAQCAtODQyLDcgKzkzOCwxMCBAQCBwcml2YXRlOgogCiBwcm90ZWN0ZWQ6CiAgIHZv
aWQgcmVzZXQoKTsKLSAgdm9pZCBwYXJzZSggY29uc3QgUVN0cmluZyYgX3VybCwgaW50IGVuY29k
aW5nX2hpbnQgPSAwKTsKKyAgdm9pZCBwYXJzZVVSTCggY29uc3QgUVN0cmluZyYgX3VybCwgaW50
IGVuY29kaW5nX2hpbnQgPSAwICk7CisgIHZvaWQgcGFyc2VSYXdVUkkoIGNvbnN0IFFTdHJpbmcm
IF91cmwsIGludCBlbmNvZGluZ19oaW50ID0gMCApOworICB2b2lkIHBhcnNlTWFpbHRvKCBjb25z
dCBRU3RyaW5nJiBfdXJsLCBpbnQgZW5jb2RpbmdfaGludCA9IDAgKTsKKyAgdm9pZCBwYXJzZSgg
Y29uc3QgUVN0cmluZyYgX3VybCwgaW50IGVuY29kaW5nX2hpbnQgPSAwICk7CiAKIHByaXZhdGU6
CiAgIFFTdHJpbmcgbV9zdHJQcm90b2NvbDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3046</attachid>
            <date>2003-11-05 21:49:26 +0000</date>
            <delta_ts>2003-11-11 17:37:58 +0000</delta_ts>
            <desc>Processing modes patch without ugly parser</desc>
            <filename>kurl.patch</filename>
            <type>text/plain</type>
            <size>21106</size>
            <attacher name="Petter Stokke">ummo</attacher>
            
              <data encoding="base64">PyBrdXJsLXN5Y29jYS5wYXRjaAo/IGt1cmwucGF0Y2gKSW5kZXg6IGtkZWNvcmUva3Byb3RvY29s
aW5mb19rZGVjb3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9r
ZGVjb3JlL2twcm90b2NvbGluZm9fa2RlY29yZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NwpkaWZmIC11IC0zIC1wIC1iIC1CIC1yMS43IGtwcm90b2NvbGluZm9fa2RlY29yZS5jcHAKLS0t
IGtkZWNvcmUva3Byb3RvY29saW5mb19rZGVjb3JlLmNwcAkzMSBPY3QgMjAwMyAyMjowNTo1OCAt
MDAwMAkxLjcKKysrIGtkZWNvcmUva3Byb3RvY29saW5mb19rZGVjb3JlLmNwcAk1IE5vdiAyMDAz
IDIwOjQxOjMwIC0wMDAwCkBAIC0zNCw2ICszNCw3IEBAIHB1YmxpYzoKICAgUVN0cmluZyBwcm90
Q2xhc3M7CiAgIEtQcm90b2NvbEluZm86OkV4dHJhRmllbGRMaXN0IGV4dHJhRmllbGRzOwogICBi
b29sIHNob3dQcmV2aWV3czsKKyAgUVN0cmluZyB1cmlNb2RlOwogfTsKIAogLy8KQEAgLTEwMSw2
ICsxMDIsOCBAQCBLUHJvdG9jb2xJbmZvOjpLUHJvdG9jb2xJbmZvKGNvbnN0IFFTdHJpCiAgIH0K
IAogICBkLT5zaG93UHJldmlld3MgPSBjb25maWcucmVhZEJvb2xFbnRyeSggIlNob3dQcmV2aWV3
cyIsIGQtPnByb3RDbGFzcyA9PSAiOmxvY2FsIiApOworCisgIGQtPnVyaU1vZGUgPSBjb25maWcu
cmVhZEVudHJ5KCAiVVJJTW9kZSIsIFFTdHJpbmc6Om51bGwgKTsKIH0KIAogS1Byb3RvY29sSW5m
bzo6S1Byb3RvY29sSW5mbyggUURhdGFTdHJlYW0mIF9zdHIsIGludCBvZmZzZXQpIDoKQEAgLTEz
NSw3ICsxMzgsNyBAQCBLUHJvdG9jb2xJbmZvOjpsb2FkKCBRRGF0YVN0cmVhbSYgX3N0cikKICAg
ICAgICAgPj4gaV9zdXBwb3J0c0RlbGV0aW5nID4+IGlfc3VwcG9ydHNMaW5raW5nCiAgICAgICAg
ID4+IGlfc3VwcG9ydHNNb3ZpbmcKICAgICAgICAgPj4gaV9jYW5Db3B5RnJvbUZpbGUgPj4gaV9j
YW5Db3B5VG9GaWxlCi0gICAgICAgID4+IG1fY29uZmlnID4+IG1fbWF4U2xhdmVzID4+IGQtPmRv
Y1BhdGggPj4gZC0+cHJvdENsYXNzID4+IGQtPmV4dHJhRmllbGRzID4+IGlfc2hvd1ByZXZpZXdz
OworICAgICAgICA+PiBtX2NvbmZpZyA+PiBtX21heFNsYXZlcyA+PiBkLT5kb2NQYXRoID4+IGQt
PnByb3RDbGFzcyA+PiBkLT5leHRyYUZpZWxkcyA+PiBpX3Nob3dQcmV2aWV3cyA+PiBkLT51cmlN
b2RlOwogICAgbV9pbnB1dFR5cGUgPSAoVHlwZSkgaV9pbnB1dFR5cGU7CiAgICBtX291dHB1dFR5
cGUgPSAoVHlwZSkgaV9vdXRwdXRUeXBlOwogICAgbV9pc1NvdXJjZVByb3RvY29sID0gKGlfaXNT
b3VyY2VQcm90b2NvbCAhPSAwKTsKQEAgLTE5Miw3ICsxOTUsNyBAQCBLUHJvdG9jb2xJbmZvOjpz
YXZlKCBRRGF0YVN0cmVhbSYgX3N0cikKICAgICAgICAgPDwgaV9zdXBwb3J0c0RlbGV0aW5nIDw8
IGlfc3VwcG9ydHNMaW5raW5nCiAgICAgICAgIDw8IGlfc3VwcG9ydHNNb3ZpbmcKICAgICAgICAg
PDwgaV9jYW5Db3B5RnJvbUZpbGUgPDwgaV9jYW5Db3B5VG9GaWxlCi0gICAgICAgIDw8IG1fY29u
ZmlnIDw8IG1fbWF4U2xhdmVzIDw8IGQtPmRvY1BhdGggPDwgZC0+cHJvdENsYXNzIDw8IGQtPmV4
dHJhRmllbGRzIDw8IGlfc2hvd1ByZXZpZXdzOworICAgICAgICA8PCBtX2NvbmZpZyA8PCBtX21h
eFNsYXZlcyA8PCBkLT5kb2NQYXRoIDw8IGQtPnByb3RDbGFzcyA8PCBkLT5leHRyYUZpZWxkcyA8
PCBpX3Nob3dQcmV2aWV3cyA8PCBkLT51cmlNb2RlOwogfQogCiAKQEAgLTQzNSw2ICs0MzgsMTUg
QEAgYm9vbCBLUHJvdG9jb2xJbmZvOjpzaG93RmlsZVByZXZpZXcoIGNvbgogICAgIHJldHVybiBm
YWxzZTsKIAogICByZXR1cm4gcHJvdC0+ZC0+c2hvd1ByZXZpZXdzOworfQorCitRU3RyaW5nIEtQ
cm90b2NvbEluZm86OnVyaVBhcnNlTW9kZSggY29uc3QgUVN0cmluZyYgX3Byb3RvY29sICkKK3sK
KyAgS1Byb3RvY29sSW5mbzo6UHRyIHByb3QgPSBLUHJvdG9jb2xJbmZvRmFjdG9yeTo6c2VsZigp
LT5maW5kUHJvdG9jb2woX3Byb3RvY29sKTsKKyAgaWYgKCAhcHJvdCApCisgICAgcmV0dXJuIFFT
dHJpbmc6Om51bGw7CisKKyAgcmV0dXJuIHByb3QtPmQtPnVyaU1vZGU7CiB9CiAKIFFEYXRhU3Ry
ZWFtJiBvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSYgcywgS1Byb3RvY29sSW5mbzo6RXh0cmFGaWVs
ZCYgZmllbGQgKSAgewpJbmRleDoga2RlY29yZS9rdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvaG9tZS9rZGUva2RlbGlicy9rZGVjb3JlL2t1cmwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjI2MApkaWZmIC11IC0zIC1wIC1iIC1CIC1yMS4yNjAga3VybC5jcHAKLS0tIGtkZWNvcmUv
a3VybC5jcHAJMzEgT2N0IDIwMDMgMjI6MDU6NTggLTAwMDAJMS4yNjAKKysrIGtkZWNvcmUva3Vy
bC5jcHAJNSBOb3YgMjAwMyAyMDo0MTozMyAtMDAwMApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1
ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtnbG9iYWwuaD4KICNpbmNsdWRlIDxraWRuYS5oPgor
I2luY2x1ZGUgPGtwcm90b2NvbGluZm8uaD4KICNlbmRpZgogCiAjaW5jbHVkZSA8c3RkaW8uaD4K
QEAgLTM4LDYgKzM5LDEzIEBACiAjaW5jbHVkZSA8cXN0eWxlc2hlZXQuaD4KICNpbmNsdWRlIDxx
bWFwLmg+CiAjaW5jbHVkZSA8cXRleHRjb2RlYy5oPgorI2luY2x1ZGUgPHFtdXRleC5oPgorCitj
bGFzcyBLVVJMUHJpdmF0ZQoreworcHVibGljOgorICAgIGludCBtX2lVcmlNb2RlOworfTsKIAog
c3RhdGljIGNvbnN0IFFTdHJpbmcgZmlsZVByb3QgPSAiZmlsZSI7CiAKQEAgLTQyMywzNCArNDMx
LDY0IEBAIFFTdHJpbmdMaXN0IEtVUkw6Okxpc3Q6OnRvU3RyaW5nTGlzdCgpIGMKIAogS1VSTDo6
S1VSTCgpCiB7CisgIGQgPSBuZXcgS1VSTFByaXZhdGUoKTsKICAgcmVzZXQoKTsKIH0KIAogS1VS
TDo6fktVUkwoKQogeworICBkZWxldGUgZDsKIH0KIAogCiBLVVJMOjpLVVJMKCBjb25zdCBRU3Ry
aW5nICZ1cmwsIGludCBlbmNvZGluZ19oaW50ICkKIHsKKyAgZCA9IG5ldyBLVVJMUHJpdmF0ZSgp
OwogICByZXNldCgpOwogICBwYXJzZSggdXJsLCBlbmNvZGluZ19oaW50ICk7CiB9CiAKIEtVUkw6
OktVUkwoIGNvbnN0IGNoYXIgKiB1cmwsIGludCBlbmNvZGluZ19oaW50ICkKIHsKKyAgZCA9IG5l
dyBLVVJMUHJpdmF0ZSgpOwogICByZXNldCgpOwogICBwYXJzZSggUVN0cmluZzo6ZnJvbUxhdGlu
MSh1cmwpLCBlbmNvZGluZ19oaW50ICk7CiB9CiAKIEtVUkw6OktVUkwoIGNvbnN0IFFDU3RyaW5n
JiB1cmwsIGludCBlbmNvZGluZ19oaW50ICkKIHsKKyAgZCA9IG5ldyBLVVJMUHJpdmF0ZSgpOwor
ICByZXNldCgpOworICBwYXJzZSggUVN0cmluZzo6ZnJvbUxhdGluMSh1cmwpLCBlbmNvZGluZ19o
aW50ICk7Cit9CisKK0tVUkw6OktVUkwoIGNvbnN0IFFTdHJpbmcgJnVybCwgS1VSTDo6VVJJTW9k
ZSBtb2RlLCBpbnQgZW5jb2RpbmdfaGludCApCit7CisgIGQgPSBuZXcgS1VSTFByaXZhdGUoKTsK
KyAgcmVzZXQoKTsKKyAgZC0+bV9pVXJpTW9kZSA9IG1vZGU7CisgIHBhcnNlKCB1cmwsIGVuY29k
aW5nX2hpbnQgKTsKK30KKworS1VSTDo6S1VSTCggY29uc3QgY2hhciAqIHVybCwgS1VSTDo6VVJJ
TW9kZSBtb2RlLCBpbnQgZW5jb2RpbmdfaGludCApCit7CisgIGQgPSBuZXcgS1VSTFByaXZhdGUo
KTsKKyAgcmVzZXQoKTsKKyAgZC0+bV9pVXJpTW9kZSA9IG1vZGU7CisgIHBhcnNlKCBRU3RyaW5n
Ojpmcm9tTGF0aW4xKHVybCksIGVuY29kaW5nX2hpbnQgKTsKK30KKworS1VSTDo6S1VSTCggY29u
c3QgUUNTdHJpbmcmIHVybCwgS1VSTDo6VVJJTW9kZSBtb2RlLCBpbnQgZW5jb2RpbmdfaGludCAp
Cit7CisgIGQgPSBuZXcgS1VSTFByaXZhdGUoKTsKICAgcmVzZXQoKTsKKyAgZC0+bV9pVXJpTW9k
ZSA9IG1vZGU7CiAgIHBhcnNlKCBRU3RyaW5nOjpmcm9tTGF0aW4xKHVybCksIGVuY29kaW5nX2hp
bnQgKTsKIH0KIAogS1VSTDo6S1VSTCggY29uc3QgS1VSTCYgX3UgKQogeworICBkID0gbmV3IEtV
UkxQcml2YXRlKCk7CiAgICp0aGlzID0gX3U7CiB9CiAKQEAgLTQ4NiwxMiArNTI0LDE0IEBAIFFE
YXRhU3RyZWFtICYgb3BlcmF0b3I+PiAoUURhdGFTdHJlYW0gJiAKICNpZm5kZWYgUVRfTk9fTkVU
V09SS1BST1RPQ09MCiBLVVJMOjpLVVJMKCBjb25zdCBRVXJsICZ1ICkKIHsKKyAgZCA9IG5ldyBL
VVJMUHJpdmF0ZSgpOwogICAqdGhpcyA9IHU7CiB9CiAjZW5kaWYKIAogS1VSTDo6S1VSTCggY29u
c3QgS1VSTCYgX3UsIGNvbnN0IFFTdHJpbmcmIF9yZWxfdXJsLCBpbnQgZW5jb2RpbmdfaGludCAp
CiB7CisgIGQgPSBuZXcgS1VSTFByaXZhdGUoKTsKICAgaWYgKF91Lmhhc1N1YlVSTCgpKSAvLyBP
cGVyYXRlIG9uIHRoZSBsYXN0IHN1YnVybCwgbm90IHRoZSBmaXJzdAogICB7CiAgICAgS1VSTDo6
TGlzdCBsc3QgPSBzcGxpdCggX3UgKTsKQEAgLTU4OSw2ICs2MjksNyBAQCB2b2lkIEtVUkw6OnJl
c2V0KCkKICAgbV9zdHJSZWZfZW5jb2RlZCA9IFFTdHJpbmc6Om51bGw7CiAgIG1fYklzTWFsZm9y
bWVkID0gdHJ1ZTsKICAgbV9pUG9ydCA9IDA7CisgIGQtPm1faVVyaU1vZGUgPSBBdXRvOwogfQog
CiBib29sIEtVUkw6OmlzRW1wdHkoKSBjb25zdApAQCAtNTk4LDIxICs2MzksMTI4IEBAIGJvb2wg
S1VSTDo6aXNFbXB0eSgpIGNvbnN0CiAKIHZvaWQgS1VSTDo6cGFyc2UoIGNvbnN0IFFTdHJpbmcm
IF91cmwsIGludCBlbmNvZGluZ19oaW50ICkKIHsKLSAgLy9rZERlYnVnKDEyNikgPDwgInBhcnNl
ICIgPDwgX3VybCA8PCBlbmRsOwotICAvLyBSZXR1cm4gaW1tZWRpYXRlbHkgd2hlbmV2ZXIgdGhl
IGdpdmVuIHVybAotICAvLyBpcyBlbXB0eSBvciBudWxsLgotICBpZiAoIF91cmwuaXNFbXB0eSgp
ICkKKyAgICBpZiAoIF91cmwuaXNFbXB0eSgpIHx8IGQtPm1faVVyaU1vZGUgPT0gSW52YWxpZCAp
CisgICAgeworCW1fc3RyUHJvdG9jb2wgPSBfdXJsOworCWQtPm1faVVyaU1vZGUgPSBJbnZhbGlk
OworCXJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBRQ2hhciogYnVmID0gX3VybC51bmljb2Rl
KCk7CisgICAgY29uc3QgUUNoYXIqIG9yaWcgPSBidWY7CisgICAgdWludCBsZW4gPSBfdXJsLmxl
bmd0aCgpOworICAgIHVpbnQgcG9zID0gMDsKKworICAgIC8vIE5vZGUgMTogQWNjZXB0IGFscGhh
IG9yIHNsYXNoCisgICAgUUNoYXIgeCA9IGJ1Zltwb3MrK107CisgICAgaWYgKCB4ID09ICcvJyAp
CisgICAgeworCS8vIEEgc2xhc2ggbWVhbnMgd2UgaW1tZWRpYXRlbHkgcHJvY2VlZCB0byBwYXJz
ZSBpdCBhcyBhIGZpbGUgVVJMLgorCWQtPm1faVVyaU1vZGUgPSBVUkw7CisJbV9zdHJQcm90b2Nv
bCA9IGZpbGVQcm90OworCXBhcnNlVVJMKCBfdXJsLCBlbmNvZGluZ19oaW50ICk7CisJcmV0dXJu
OworICAgIH0KKyAgICBpZiAoICFpc2FscGhhKCAoaW50KXggKSApCisJZ290byBOb2RlRXJyOwor
CisgICAgLy8gTm9kZSAyOiBBY2NlcHQgYW55IGFtb3VudCBvZiAoYWxwaGF8ZGlnaXR8JysnfCct
JykKKyAgICAvLyAnLicgaXMgbm90IGN1cnJlbnRseSBhY2NlcHRlZCwgYmVjYXVzZSBjdXJyZW50
IEtVUkwgbWF5IGJlIGNvbmZ1c2VkLgorICAgIC8vIFByb2NlZWQgd2l0aCA6Ly8gOi8gb3IgOgor
ICAgIHdoaWxlKCBwb3MgPCBsZW4gJiYgKGlzYWxwaGEoKGludClidWZbcG9zXSkgfHwgaXNkaWdp
dCgoaW50KWJ1Zltwb3NdKSB8fAorCQkJIGJ1Zltwb3NdID09ICcrJyB8fCBidWZbcG9zXSA9PSAn
LScpKSBwb3MrKzsKKworICAgIGlmIChwb3MgPCBsZW4gJiYgYnVmW3Bvc10gPT0gJzonICkKKyAg
ICB7CisJbV9zdHJQcm90b2NvbCA9IFFTdHJpbmcoIG9yaWcsIHBvcyApLmxvd2VyKCk7CisJaWYg
KCBkLT5tX2lVcmlNb2RlID09IEF1dG8gKQorCSAgICBkLT5tX2lVcmlNb2RlID0gdXJpTW9kZUZv
clByb3RvY29sKCBtX3N0clByb3RvY29sICk7CisJLy8gUHJvY2VlZCB0byBjb3JyZWN0IHBhcnNl
IGZ1bmN0aW9uLgorCXN3aXRjaCAoIGQtPm1faVVyaU1vZGUgKQogICB7CisJY2FzZSBSYXdVUkk6
CisJICAgIHBhcnNlUmF3VVJJKCBfdXJsICk7CisJICAgIHJldHVybjsKKwljYXNlIE1haWx0bzoK
KwkgICAgcGFyc2VNYWlsdG8oIF91cmwgKTsKKwkgICAgcmV0dXJuOworCWNhc2UgVVJMOgorCSAg
ICBwYXJzZVVSTCggX3VybCwgZW5jb2RpbmdfaGludCApOworCSAgICByZXR1cm47CisJZGVmYXVs
dDoKKwkgICAgLy8gVW5rbm93biBVUkkgbW9kZSByZXN1bHRzIGluIGFuIGludmFsaWQgVVJJLgor
CSAgICBicmVhazsKKwl9CisgICAgfQorCitOb2RlRXJyOgorICAgIHJlc2V0KCk7CisgICAgbV9z
dHJQcm90b2NvbCA9IF91cmw7CisgICAgZC0+bV9pVXJpTW9kZSA9IEludmFsaWQ7Cit9CisKK3Zv
aWQgS1VSTDo6cGFyc2VSYXdVUkkoIGNvbnN0IFFTdHJpbmcmIF91cmwsIGludCBlbmNvZGluZ19o
aW50ICkKK3sKKyAgICB1aW50IGxlbiA9IF91cmwubGVuZ3RoKCk7CisgICAgY29uc3QgUUNoYXIq
IGJ1ZiA9IF91cmwudW5pY29kZSgpOworCisgICAgdWludCBwb3MgPSAwOworCisgICAgLy8gQWNj
ZXB0IGFueSBhbW91bnQgb2YgKGFscGhhfGRpZ2l0fCcrJ3wnLScpCisgICAgLy8gJy4nIGlzIG5v
dCBjdXJyZW50bHkgYWNjZXB0ZWQsIGJlY2F1c2UgY3VycmVudCBLVVJMIG1heSBiZSBjb25mdXNl
ZC4KKyAgICAvLyBQcm9jZWVkIHdpdGggOgorICAgIHdoaWxlKCBwb3MgPCBsZW4gJiYgKGlzYWxw
aGEoKGludClidWZbcG9zXSkgfHwgaXNkaWdpdCgoaW50KWJ1Zltwb3NdKSB8fAorCQkJIGJ1Zltw
b3NdID09ICcrJyB8fCBidWZbcG9zXSA9PSAnLScpKSBwb3MrKzsKKworICAgIC8vIE5vdGUgdGhh
dCBtX3N0clByb3RvY29sIGlzIGFscmVhZHkgc2V0IGhlcmUsIHNvIHdlIGp1c3Qgc2tpcCBvdmVy
IHRoZSBwcm90b2NvbC4KKyAgICBpZiAocG9zIDwgbGVuICYmIGJ1Zltwb3NdID09ICc6JyApCisJ
cG9zKys7CisgICAgZWxzZSB7CisJcmVzZXQoKTsKICAgICBtX3N0clByb3RvY29sID0gX3VybDsK
KwlkLT5tX2lVcmlNb2RlID0gSW52YWxpZDsKKwlyZXR1cm47CisgICAgfQorCisgICAgaWYgKCBw
b3MgPT0gbGVuICkKKwltX3N0clBhdGggPSBRU3RyaW5nOjpudWxsOworICAgIGVsc2UKKwltX3N0
clBhdGggPSBkZWNvZGUoIFFTdHJpbmcoIGJ1ZiArIHBvcywgbGVuIC0gcG9zICksIGVuY29kaW5n
X2hpbnQgKTsKKworICAgIG1fYklzTWFsZm9ybWVkID0gZmFsc2U7CisKKyAgICByZXR1cm47Cit9
CisKK3ZvaWQgS1VSTDo6cGFyc2VNYWlsdG8oIGNvbnN0IFFTdHJpbmcmIF91cmwsIGludCBlbmNv
ZGluZ19oaW50ICkKK3sKKyAgICBwYXJzZVVSTCggX3VybCwgZW5jb2RpbmdfaGludCk7CisvKiBU
aGlzIHN0dWZmIGlzIHRvdGFsbHkgaW5hZGVxdWF0ZS4gSnVzdCBkbyBwYXJzZVVSTCBpbnN0ZWFk
IGZvciBub3cuCisgICAgcGFyc2VSYXdVUkkoIF91cmwsIGVuY29kaW5nX2hpbnQgKTsKKyAgICBp
ZiAoIG1fYklzTWFsZm9ybWVkICkKICAgICByZXR1cm47CisgICAgUVJlZ0V4cCBtYWlscmUoIigu
K0ApKC4rKSIpOworICAgIGlmICggbWFpbHJlLmV4YWN0TWF0Y2goIG1fc3RyUGF0aCApICkKKyAg
ICB7CisjaWZuZGVmIEtERV9RVF9PTkxZCisJUVN0cmluZyBob3N0ID0gS0lETkE6OnRvVW5pY29k
ZSggbWFpbHJlLmNhcCggMiApICk7CisJaWYgKGhvc3QuaXNFbXB0eSgpKQorCSAgICBob3N0ID0g
bWFpbHJlLmNhcCggMiApLmxvd2VyKCk7CisjZWxzZQorCVFTdHJpbmcgaG9zdCA9IG1haWxyZS5j
YXAoIDIgKS5sb3dlcigpOworI2VuZGlmCisJbV9zdHJQYXRoID0gbWFpbHJlLmNhcCggMSApICsg
aG9zdDsKICAgfQorKi8KK30KIAordm9pZCBLVVJMOjpwYXJzZVVSTCggY29uc3QgUVN0cmluZyYg
X3VybCwgaW50IGVuY29kaW5nX2hpbnQgKQorewogICBRU3RyaW5nIHBvcnQ7CiAgIGJvb2wgYmFk
SG9zdE5hbWUgPSBmYWxzZTsKICAgaW50IHN0YXJ0ID0gMDsKICAgdWludCBsZW4gPSBfdXJsLmxl
bmd0aCgpOwogICBjb25zdCBRQ2hhciogYnVmID0gX3VybC51bmljb2RlKCk7Ci0gIGNvbnN0IFFD
aGFyKiBvcmlnID0gYnVmOwogCiAgIFFDaGFyIGRlbGltOwogICBRU3RyaW5nIHRtcDsKQEAgLTYz
MiwxNSArNzgwLDEzIEBAIHZvaWQgS1VSTDo6cGFyc2UoIGNvbnN0IFFTdHJpbmcmIF91cmwsIGkK
ICAgd2hpbGUoIHBvcyA8IGxlbiAmJiAoaXNhbHBoYSgoaW50KWJ1Zltwb3NdKSB8fCBpc2RpZ2l0
KChpbnQpYnVmW3Bvc10pIHx8CiAgICAgICAgICAgYnVmW3Bvc10gPT0gJysnIHx8IGJ1Zltwb3Nd
ID09ICctJykpIHBvcysrOwogCisgIC8vIE5vdGUgdGhhdCBtX3N0clByb3RvY29sIGlzIGFscmVh
ZHkgc2V0IGhlcmUsIHNvIHdlIGp1c3Qgc2tpcCBvdmVyIHRoZSBwcm90b2NvbC4KICAgaWYgKCBw
b3MrMiA8IGxlbiAmJiBidWZbcG9zXSA9PSAnOicgJiYgYnVmW3BvcysxXSA9PSAnLycgJiYgYnVm
W3BvcysyXSA9PSAnLycgKQogICAgIHsKLSAgICAgIG1fc3RyUHJvdG9jb2wgPSBRU3RyaW5nKCBv
cmlnLCBwb3MgKS5sb3dlcigpOwogICAgICAgcG9zICs9IDM7CiAgICAgfQogICBlbHNlIGlmIChw
b3MrMSA8IGxlbiAmJiBidWZbcG9zXSA9PSAnOicgKSAvLyBOZWVkIHRvIGFsd2F5cyBjb21wYXJl
IGxlbmd0aCgpLTEgb3RoZXJ3aXNlIEtVUkwgcGFzc2VzICJodHRwOiIgYXMgbGVnYWwhIQogICAg
IHsKLSAgICAgIG1fc3RyUHJvdG9jb2wgPSBRU3RyaW5nKCBvcmlnLCBwb3MgKS5sb3dlcigpOwot
ICAgICAgLy9rZERlYnVnKDEyNik8PCJzZXR0aW5nIHByb3RvY29sIHRvICI8PG1fc3RyUHJvdG9j
b2w8PGVuZGw7CiAgICAgICBwb3MrKzsKICAgICAgIHN0YXJ0ID0gcG9zOwogICAgICAgZ290byBO
b2RlOTsKQEAgLTg2OSw2ICsxMDE1LDcgQEAgdm9pZCBLVVJMOjpwYXJzZSggY29uc3QgUVN0cmlu
ZyYgX3VybCwgaQogLy8gIGtkRGVidWcoMTI2KSA8PCAiS1VSTCBjb3VsZG4ndCBwYXJzZSBVUkwg
XCIiIDw8IF91cmwgPDwgIlwiIiA8PCBlbmRsOwogICByZXNldCgpOwogICBtX3N0clByb3RvY29s
ID0gX3VybDsKKyAgZC0+bV9pVXJpTW9kZSA9IEludmFsaWQ7CiB9CiAKIEtVUkwmIEtVUkw6Om9w
ZXJhdG9yPSggY29uc3QgUVN0cmluZyYgX3VybCApCkBAIC04OTEsNiArMTAzOCw3IEBAIEtVUkwm
IEtVUkw6Om9wZXJhdG9yPSggY29uc3QgY2hhciAqIF91cmwKIEtVUkwmIEtVUkw6Om9wZXJhdG9y
PSggY29uc3QgUVVybCAmIHUgKQogewogICBtX3N0clByb3RvY29sID0gdS5wcm90b2NvbCgpOwor
ICBkLT5tX2lVcmlNb2RlID0gQXV0bzsKICAgbV9zdHJVc2VyID0gdS51c2VyKCk7CiAgIG1fc3Ry
UGFzcyA9IHUucGFzc3dvcmQoKTsKICAgbV9zdHJIb3N0ID0gdS5ob3N0KCk7CkBAIC05MTcsNiAr
MTA2NSw3IEBAIEtVUkwmIEtVUkw6Om9wZXJhdG9yPSggY29uc3QgS1VSTCYgX3UgKQogICBtX3N0
clJlZl9lbmNvZGVkID0gX3UubV9zdHJSZWZfZW5jb2RlZDsKICAgbV9iSXNNYWxmb3JtZWQgPSBf
dS5tX2JJc01hbGZvcm1lZDsKICAgbV9pUG9ydCA9IF91Lm1faVBvcnQ7CisgIGQtPm1faVVyaU1v
ZGUgPSBfdS5kLT5tX2lVcmlNb2RlOwogCiAgIHJldHVybiAqdGhpczsKIH0KQEAgLTEwOTYsNiAr
MTI0NSw3IEBAIHZvaWQgS1VSTDo6c2V0RmlsZU5hbWUoIGNvbnN0IFFTdHJpbmcmIF8KIAogdm9p
ZCBLVVJMOjpjbGVhblBhdGgoIGJvb2wgY2xlYW5EaXJTZXBhcmF0b3IgKSAvLyB0YWtlbiBmcm9t
IHRoZSBvbGQgS1VSTAogeworICBpZiAoZC0+bV9pVXJpTW9kZSAhPSBVUkwpIHJldHVybjsKICAg
bV9zdHJQYXRoID0gY2xlYW5wYXRoKG1fc3RyUGF0aCwgY2xlYW5EaXJTZXBhcmF0b3IsIGZhbHNl
KTsKICAgLy8gV0FCQTogSXMgdGhpcyBzYWZlIHdoZW4gIi8uLi8iIGlzIGVuY29kZWQgd2l0aCAl
PwogICBtX3N0clBhdGhfZW5jb2RlZCA9IGNsZWFucGF0aChtX3N0clBhdGhfZW5jb2RlZCwgY2xl
YW5EaXJTZXBhcmF0b3IsIHRydWUpOwpAQCAtMTMxNiw2ICsxNDY2LDggQEAgUVN0cmluZyBLVVJM
Ojp1cmwoIGludCBfdHJhaWxpbmcsIGludCBlbgogICAgICAgfQogICAgICAgdSArPSAiQCI7CiAg
ICAgfQorICAgIGlmICggZC0+bV9pVXJpTW9kZSA9PSBVUkwgKQorICAgIHsKICAgICBib29sIElQ
djYgPSAobV9zdHJIb3N0LmZpbmQoJzonKSAhPSAtMSk7CiAgICAgaWYgKElQdjYpCiAgICAgICAg
dSArPSAnWycgKyBtX3N0ckhvc3QgKyAnXSc7CkBAIC0xMzI3LDggKzE0NzksMTYgQEAgUVN0cmlu
ZyBLVVJMOjp1cmwoIGludCBfdHJhaWxpbmcsIGludCBlbgogICAgICAgdSArPSBidWZmZXI7CiAg
ICAgfQogICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHUgKz0gbV9zdHJIb3N0OworICAgIH0K
KyAgfQogCisgIGlmICggZC0+bV9pVXJpTW9kZSA9PSBVUkwgKQogICB1ICs9IGVuY29kZWRQYXRo
QW5kUXVlcnkoIF90cmFpbGluZywgZmFsc2UsIGVuY29kaW5nX2hpbnQgKTsKKyAgZWxzZQorICAg
IHUgKz0gbV9zdHJQYXRoOwogCiAgIGlmICggaGFzUmVmKCkgKQogICB7CkBAIC0xMzYyLDYgKzE1
MjIsOCBAQCBRU3RyaW5nIEtVUkw6OnByZXR0eVVSTCggaW50IF90cmFpbGluZyApCiAgICAgICAv
LyBEb24ndCBzaG93IHBhc3N3b3JkIQogICAgICAgdSArPSAiQCI7CiAgICAgfQorICAgIGlmICgg
ZC0+bV9pVXJpTW9kZSA9PSBVUkwgKQorICAgIHsKICAgICBib29sIElQdjYgPSAobV9zdHJIb3N0
LmZpbmQoJzonKSAhPSAtMSk7CiAgICAgaWYgKElQdjYpCiAgICAgewpAQCAtMTM3MSw2ICsxNTMz
LDExIEBAIFFTdHJpbmcgS1VSTDo6cHJldHR5VVJMKCBpbnQgX3RyYWlsaW5nICkKICAgICB7CiAg
ICAgICAgdSArPSBsYXp5X2VuY29kZShtX3N0ckhvc3QpOwogICAgIH0KKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgIHUgKz0gbGF6eV9lbmNvZGUobV9zdHJIb3N0KTsKKyAgICB9CiAgICAg
aWYgKCBtX2lQb3J0ICE9IDAgKSB7CiAgICAgICBRU3RyaW5nIGJ1ZmZlcjsKICAgICAgIGJ1ZmZl
ci5zcHJpbnRmKCAiOiV1IiwgbV9pUG9ydCApOwpAQCAtMTcyOSw2ICsxODk2LDcgQEAgdm9pZAog
S1VSTDo6c2V0UHJvdG9jb2woIGNvbnN0IFFTdHJpbmcmIF90eHQgKQogewogICAgbV9zdHJQcm90
b2NvbCA9IF90eHQ7CisgICBpZiAoIGQtPm1faVVyaU1vZGUgPT0gQXV0byApIGQtPm1faVVyaU1v
ZGUgPSB1cmlNb2RlRm9yUHJvdG9jb2woIG1fc3RyUHJvdG9jb2wgKTsKICAgIG1fYklzTWFsZm9y
bWVkID0gZmFsc2U7CiB9CiAKQEAgLTE3NDcsNiArMTkxNSw5IEBAIEtVUkw6OnNldFBhc3MoIGNv
bnN0IFFTdHJpbmcmIF90eHQgKQogdm9pZAogS1VSTDo6c2V0SG9zdCggY29uc3QgUVN0cmluZyYg
X3R4dCApCiB7CisgIHN3aXRjaCAoIGQtPm1faVVyaU1vZGUgKQorICB7CisgIGNhc2UgVVJMOgog
I2lmbmRlZiBLREVfUVRfT05MWQogICAgbV9zdHJIb3N0ID0gS0lETkE6OnRvVW5pY29kZShfdHh0
KTsKICAgIGlmIChtX3N0ckhvc3QuaXNFbXB0eSgpKQpAQCAtMTc1NCw2ICsxOTI1LDExIEBAIEtV
Ukw6OnNldEhvc3QoIGNvbnN0IFFTdHJpbmcmIF90eHQgKQogI2Vsc2UKICAgIG1fc3RySG9zdCA9
IF90eHQubG93ZXIoKTsKICNlbmRpZgorICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIG1fc3Ry
SG9zdCA9IF90eHQ7CisgICAgYnJlYWs7CisgIH0KIH0KIAogdm9pZApAQCAtMjEwMCw0ICsyMjc2
LDUzIEBAIFFTdHJpbmcgS1VSTDo6cmVsYXRpdmVVUkwoY29uc3QgS1VSTCAmYmEKICAgICAgIHJl
dHVybiAiLi8iOwogCiAgICByZXR1cm4gcmVsVVJMOworfQorCitpbnQgS1VSTDo6dXJpTW9kZSgp
IGNvbnN0Cit7CisgIHJldHVybiBkLT5tX2lVcmlNb2RlOworfQorCit2b2lkIEtVUkw6OnNldFVS
SU1vZGUoS1VSTDo6VVJJTW9kZSBtb2RlKQoreworICBkLT5tX2lVcmlNb2RlID0gbW9kZTsKK30K
KworCisKKy8vIFVSSU1vZGUgZGF0YWJhc2UKKworUU1hcDxRU3RyaW5nLCBLVVJMOjpVUklNb2Rl
PiB1cmlNb2RlczsKK1FNdXRleCB1cmlNb2RlTXV0ZXg7CisKK0tVUkw6OlVSSU1vZGUgS1VSTDo6
dXJpTW9kZUZvclByb3RvY29sKGNvbnN0IFFTdHJpbmcmIHByb3RvY29sKQoreworICAgIFVSSU1v
ZGUgbW9kZSA9IEF1dG87CisKKyAgICB1cmlNb2RlTXV0ZXgubG9jaygpOworICAgIGlmICggdXJp
TW9kZXMuY29udGFpbnMoIHByb3RvY29sICkgKQorCW1vZGUgPSB1cmlNb2Rlc1twcm90b2NvbF07
CisgICAgdXJpTW9kZU11dGV4LnVubG9jaygpOworICAgIGlmIChtb2RlICE9IEF1dG8pIHsgLy8g
Q2FjaGUgaGl0CisJcmV0dXJuIG1vZGU7CisgICAgfQorI2lmbmRlZiBLREVfUVRfT05MWQorICAg
IFFTdHJpbmcgbW9kZW5hbWUgPSBLUHJvdG9jb2xJbmZvOjp1cmlQYXJzZU1vZGUocHJvdG9jb2wp
Lmxvd2VyKCk7CisgICAgaWYgKCFtb2RlbmFtZS5pc051bGwoKSkgeworCWlmICggbW9kZW5hbWUg
PT0gInJhd3VyaSIgKSBtb2RlID0gUmF3VVJJOworCWVsc2UgaWYgKCBtb2RlbmFtZSA9PSAibWFp
bHRvIiApIG1vZGUgPSBNYWlsdG87CisJZWxzZSBpZiAoIG1vZGVuYW1lID09ICJ1cmwiICkgbW9k
ZSA9IFVSTDsKKyAgICB9CisgICAgaWYgKG1vZGUgPT0gQXV0byApIHsKKyNlbmRpZgorCWlmICgg
cHJvdG9jb2wgPT0gImVkMmsiIHx8IHByb3RvY29sID09ICJzaWcyZGF0IiB8fCBwcm90b2NvbCA9
PSAic2xzayIgfHwgcHJvdG9jb2wgPT0gImRhdGEiICkgbW9kZSA9IFJhd1VSSTsKKwllbHNlIGlm
ICggcHJvdG9jb2wgPT0gIm1haWx0byIgKSBtb2RlID0gTWFpbHRvOworCWVsc2UgbW9kZSA9IFVS
TDsKKyNpZm5kZWYgS0RFX1FUX09OTFkKKyAgICB9CisjZW5kaWYKKyAgICB1cmlNb2RlTXV0ZXgu
bG9jaygpOworICAgIHVyaU1vZGVzLnJlcGxhY2UoIHByb3RvY29sLCBtb2RlICk7CisgICAgdXJp
TW9kZU11dGV4LnVubG9jaygpOworICAgIHJldHVybiBtb2RlOwogfQpJbmRleDoga2RlY29yZS9r
dXJsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2RlY29yZS9rdXJs
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTI5CmRpZmYgLXUgLTMgLXAgLWIgLUIgLXIxLjEy
OSBrdXJsLmgKLS0tIGtkZWNvcmUva3VybC5oCTMxIE9jdCAyMDAzIDIyOjA1OjU4IC0wMDAwCTEu
MTI5CisrKyBrZGVjb3JlL2t1cmwuaAk1IE5vdiAyMDAzIDIwOjQxOjM0IC0wMDAwCkBAIC0xMjUs
NiArMTI1LDM4IEBAIHB1YmxpYzoKICAgfTsKIAogICAvKioKKyAgICogRGVmaW5lcyB0aGUgdHlw
ZSBvZiBVUkkgd2UgYXJlIHByb2Nlc3NpbmcuCisgICAqLworICBlbnVtIFVSSU1vZGUKKyAgewor
ICAgIC8qKgorICAgICAqIEF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQuIFVzaW5nIHRoaXMgbW9kZSwg
YW4gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZworICAgICAqIG1vZGUgd2lsbCBiZSBzZWxlY3RlZCB3
aGVuIHRoZSBVUkkgaXMgZmlyc3QgcHJvY2Vzc2VkLgorICAgICAqLworICAgIEF1dG8sCisgICAg
LyoqCisgICAgICogSW52YWxpZCBVUkkuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgY2FuJ3QgYmUg
cGFyc2VkIGFzIGEgVVJJIGF0IGFsbC4KKyAgICAgKiBUaGUgY29udGVudHMgYXJlIGFjY2Vzc2li
bGUgdGhyb3VnaCB0aGUgQHJlZiBwcm90b2NvbCgpIG1ldGhvZC4KKyAgICAgKi8KKyAgICBJbnZh
bGlkLAorICAgIC8qKgorICAgICAqIFJhdyBVUkkuIFRoaXMgdHlwZSBvZiBVUkkgc2hvdWxkIG5v
dCBiZSBwcm9jZXNzZWQgaW4gYW55IHdheS4KKyAgICAgKiBDb250ZW50cyBhcmUgYWNjZXNzaWJs
ZSB0aHJvdWdoIHRoZSBAcmVmIHBhdGgoKSBtZXRob2QuCisgICAgICovCisgICAgUmF3VVJJLAor
ICAgIC8qKgorICAgICAqIFN0YW5kYXJkcyBjb21wbGlhbnQgVVJMLiBQcm9jZXNzIGFzIGEgc3lu
dGFjdGljYWxseSBjb3JyZWN0IFVSTC4KKyAgICAgKi8KKyAgICBVUkwsCisgICAgLyoqCisgICAg
ICogTWFpbHRvIFVSSS4gcGF0aCgpIGNvbnRhaW5zIGFuIGVtYWlsIGFkZHJlc3Mgd2hpY2ggc2hv
dWxkIGhhdmUgaXRzCisgICAgICogZG9tYWluIHBhcnQgcHJvY2Vzc2VkIGFzIGEgRE5TIG5hbWUu
IFRoZSBlbWFpbCBhZGRyZXNzIGlzIGFjY2Vzc2libGUKKyAgICAgKiB0aHJvdWdoIHRoZSBAcmVm
IHBhdGgoKSBtZXRob2QuCisgICAgICovCisgICAgTWFpbHRvCisgIH07CisKKyAgLyoqCiAgICAq
IEtVUkw6Okxpc3QgaXMgYSBRVmFsdWVMaXN0IHRoYXQgY29udGFpbnMgS1VSTHMgd2l0aCBhIGZl
dwogICAgKiBjb252ZW5pZW5jZSBtZXRob2RzLgogICAgKiBAc2VlIEtVUkwKQEAgLTIwMyw2ICsy
MzUsNTEgQEAgcHVibGljOgogICAgKi8KICAgS1VSTCggY29uc3QgUUNTdHJpbmcmIHVybCwgaW50
IGVuY29kaW5nX2hpbnQgPSAwICk7CiAgIC8qKgorICAgKiBVc3VhbCBjb25zdHJ1Y3RvciwgdG8g
Y29uc3RydWN0IGZyb20gYSBzdHJpbmcuCisgICAqIEBwYXJhbSB1cmwgQSBVUkwsIG5vdCBhIGZp
bGVuYW1lLiBJZiB0aGUgVVJMIGRvZXMgbm90IGhhdmUgYSBwcm90b2NvbAorICAgKiAgICAgICAg
ICAgICBwYXJ0LCAiZmlsZToiIGlzIGFzc3VtZWQuCisgICAqICAgICAgICAgICAgIEl0IGlzIGRh
bmdlcm91cyB0byBmZWVkIHVuaXggZmlsZW5hbWVzIGludG8gdGhpcyBmdW5jdGlvbiwKKyAgICog
ICAgICAgICAgICAgdGhpcyB3aWxsIHdvcmsgbW9zdCBvZiB0aGUgdGltZSBidXQgbm90IGFsd2F5
cy4KKyAgICogICAgICAgICAgICAgRm9yIGV4YW1wbGUgIi9ob21lL1RvcmJlbiUyMFdlaXMiIHdp
bGwgYmUgY29uc2lkZXJlZCBhIFVSTAorICAgKiAgICAgICAgICAgICBwb2ludGluZyB0byB0aGUg
ZmlsZSAiL2hvbWUvVG9yYmVuIFdlaXMiIGluc3RlYWQgb2YgdG8gdGhlCisgICAqICAgICAgICAg
ICAgIGZpbGUgIi9ob21lL1RvcmJlbiUyMFdlaXMiLgorICAgKiAgICAgICAgICAgICBUaGlzIG1l
YW5zIHRoYXQgaWYgeW91IGhhdmUgYSB1c3VhbCBVTklYIGxpa2UgcGF0aCB5b3UKKyAgICogICAg
ICAgICAgICAgc2hvdWxkIG5vdCB1c2UgdGhpcyBjb25zdHJ1Y3Rvci4KKyAgICogICAgICAgICAg
ICAgSW5zdGVhZCBjcmVhdGUgYW4gZW1wdHkgdXJsIGFuZCBzZXQgdGhlIHBhdGggYnkgdXNpbmcK
KyAgICogICAgICAgICAgICAgQHJlZiBzZXRQYXRoKCkuCisgICAqIEBwYXJhbSB1cmlNb2RlIE1h
bnVhbGx5IHNwZWNpZnkgdGhlIFVSSSBwcm9jZXNzaW5nIG1vZGUuIEJ5IGRlZmF1bHQsCisgICAq
ICAgICAgICAgICAgIHRoaXMgaXMgZGVjaWRlZCBieSB0aGUgVVJJJ3MgcHJvdG9jb2wuCisgICAq
IEBwYXJhbSBlbmNvZGluZ19oaW50IE1JQiBvZiBvcmlnaW5hbCBlbmNvZGluZyBvZiBVUkwuCisg
ICAqIEBzZWUgUVRleHRDb2RlYzo6bWliRW51bSgpCisgICAqLworICBLVVJMKCBjb25zdCBRU3Ry
aW5nJiB1cmwsIFVSSU1vZGUgdXJpTW9kZSwgaW50IGVuY29kaW5nX2hpbnQgPSAwICk7CisgIC8q
KgorICAgKiBDb25zdHJ1Y3RvciB0YWtpbmcgYSBjaGFyICogQHAgdXJsLCB3aGljaCBpcyBhbiBf
ZW5jb2RlZF8gcmVwcmVzZW50YXRpb24KKyAgICogb2YgdGhlIFVSTCwgZXhhY3RseSBsaWtlIHRo
ZSB1c3VhbCBjb25zdHJ1Y3Rvci4gVGhpcyBpcyB1c2VmdWwgd2hlbgorICAgKiB0aGVuIFVSTCwg
aW4gaXRzIGVuY29kZWQgZm9ybSwgaXMgc3RyaWN0bHkgYXNjaWkuCisgICAqIEBwYXJhbSB1cmwg
QSBlbmNvZGVkIFVSTC4gSWYgdGhlIFVSTCBkb2VzIG5vdCBoYXZlIGEgcHJvdG9jb2wgcGFydCwK
KyAgICogICAgICAgICAgICAiZmlsZToiIGlzIGFzc3VtZWQuCisgICAqIEBwYXJhbSB1cmlNb2Rl
IE1hbnVhbGx5IHNwZWNpZnkgdGhlIFVSSSBwcm9jZXNzaW5nIG1vZGUuIEJ5IGRlZmF1bHQsCisg
ICAqICAgICAgICAgICAgIHRoaXMgaXMgZGVjaWRlZCBieSB0aGUgVVJJJ3MgcHJvdG9jb2wuCisg
ICAqIEBwYXJhbSBlbmNvZGluZ19oaW50IE1JQiBvZiBvcmlnaW5hbCBlbmNvZGluZyBvZiBVUkwu
CisgICAqIEBzZWUgUVRleHRDb2RlYzo6bWliRW51bSgpCisgICAqLworICBLVVJMKCBjb25zdCBj
aGFyICogdXJsLCBVUklNb2RlIHVyaU1vZGUsIGludCBlbmNvZGluZ19oaW50ID0gMCApOworICAv
KioKKyAgICogQ29uc3RydWN0b3IgdGFraW5nIGEgUUNTdHJpbmcgQHAgdXJsLCB3aGljaCBpcyBh
biBfZW5jb2RlZF8gcmVwcmVzZW50YXRpb24KKyAgICogb2YgdGhlIFVSTCwgZXhhY3RseSBsaWtl
IHRoZSB1c3VhbCBjb25zdHJ1Y3Rvci4gVGhpcyBpcyB1c2VmdWwgd2hlbgorICAgKiB0aGVuIFVS
TCwgaW4gaXRzIGVuY29kZWQgZm9ybSwgaXMgc3RyaWN0bHkgYXNjaWkuCisgICAqIEBwYXJhbSB1
cmwgQSBlbmNvZGVkIFVSTC4gSWYgdGhlIFVSTCBkb2VzIG5vdCBoYXZlIGEgcHJvdG9jb2wgcGFy
dCwKKyAgICogICAgICAgICAgICAiZmlsZToiIGlzIGFzc3VtZWQuCisgICAqIEBwYXJhbSB1cmlN
b2RlIE1hbnVhbGx5IHNwZWNpZnkgdGhlIFVSSSBwcm9jZXNzaW5nIG1vZGUuIEJ5IGRlZmF1bHQs
CisgICAqICAgICAgICAgICAgIHRoaXMgaXMgZGVjaWRlZCBieSB0aGUgVVJJJ3MgcHJvdG9jb2wu
CisgICAqIEBwYXJhbSBlbmNvZGluZ19oaW50IE1JQiBvZiBvcmlnaW5hbCBlbmNvZGluZyBvZiBV
UkwuCisgICAqIEBzZWUgUVRleHRDb2RlYzo6bWliRW51bSgpCisgICAqLworICBLVVJMKCBjb25z
dCBRQ1N0cmluZyYgdXJsLCBVUklNb2RlIHVyaU1vZGUsIGludCBlbmNvZGluZ19oaW50ID0gMCAp
OworICAvLyAjIyMgQklDOiBNZXJnZSB0aGUgYWJvdmUgdGhyZWUgY29uc3RydWN0b3JzIHdpdGgg
dGhlIGZpcnN0IHRocmVlLgorCisgIC8qKgogICAgKiBDb3B5IGNvbnN0cnVjdG9yLgogICAgKiBA
cGFyYW0gdSB0aGUgS1VSTCB0byBjb3B5CiAgICAqLwpAQCAtMjM5LDYgKzMxNiwxOSBAQCBwdWJs
aWM6CiAgIHZvaWQgc2V0UHJvdG9jb2woIGNvbnN0IFFTdHJpbmcmIF90eHQgKTsKIAogICAvKioK
KyAgICogUmV0dXJucyB0aGUgVVJJIHByb2Nlc3NpbmcgbW9kZSBmb3IgdGhlIFVSTC4KKyAgICog
QHJldHVybiB0aGUgVVJJIHByb2Nlc3NpbmcgbW9kZSBzZXQgZm9yIHRoaXMgVVJMLgorICAgKiov
CisgIGludCB1cmlNb2RlKCkgY29uc3Q7CisgIC8qKgorICAgKiBTZXRzIHRoZSBVUkkgcHJvY2Vz
c2luZyBtb2RlIGZvciB0aGUgVVJMLiBOb3RlIHRoYXQgaXQgaXMgbm90CisgICAqIHJldHJvYWN0
aXZlIC0gb25seSBkYXRhIGFkZGVkIHRvIGl0IGFmdGVyIHlvdSBjaGFuZ2UgdGhlIFVSSQorICAg
KiBtb2RlIHdpbGwgYmUgcHJvY2Vzc2VkIGFjY29yZGluZyB0byB0aGUgbmV3IG1vZGUuCisgICAq
IEBwYXJhbSBtb2RlIHRoZSBuZXcgVVJJIHByb2Nlc3NpbmcgbW9kZSBmb3IgdGhlIFVSTC4KKyAg
ICoqLworICB2b2lkIHNldFVSSU1vZGUoVVJJTW9kZSBtb2RlKTsKKworICAvKioKICAgICogUmV0
dXJucyB0aGUgZGVjb2RlZCB1c2VyIG5hbWUgKGxvZ2luLCB1c2VyIGlkLCAuLi4pIGluY2x1ZGVk
IGluIHRoZSBVUkwuCiAgICAqIEByZXR1cm4gdGhlIHVzZXIgbmFtZSBvciBRU3RyaW5nOjpudWxs
IGlmIHRoZXJlIGlzIG5vIHVzZXIgbmFtZQogICAgKiovCkBAIC05MDQsNiArOTk0LDEyIEBAIHB1
YmxpYzoKICAgICovCiAgIHN0YXRpYyBRU3RyaW5nIHJlbGF0aXZlUGF0aChjb25zdCBRU3RyaW5n
ICZiYXNlX2RpciwgY29uc3QgUVN0cmluZyAmcGF0aCwgYm9vbCAqaXNQYXJlbnQ9MCk7CiAKKyAg
LyoqCisgICAqIERldGVybWluZSB3aGljaCBVUkkgbW9kZSBpcyBzdWl0YWJsZSBmb3IgcHJvY2Vz
c2luZyBVUklzIG9mIGEgZ2l2ZW4gcHJvdG9jb2wuCisgICAqIEBwYXJhbSBwcm90b2NvbCBUaGUg
cHJvdG9jb2wgbmFtZS4KKyAgICovCisgIHN0YXRpYyBVUklNb2RlIHVyaU1vZGVGb3JQcm90b2Nv
bChjb25zdCBRU3RyaW5nJiBwcm90b2NvbCk7CisKICNpZmRlZiBLREVfTk9fQ09NUEFUCiBwcml2
YXRlOgogI2VuZGlmCkBAIC05MTQsNyArMTAxMCwxMCBAQCBwcml2YXRlOgogCiBwcm90ZWN0ZWQ6
CiAgIHZvaWQgcmVzZXQoKTsKLSAgdm9pZCBwYXJzZSggY29uc3QgUVN0cmluZyYgX3VybCwgaW50
IGVuY29kaW5nX2hpbnQgPSAwKTsKKyAgdm9pZCBwYXJzZVVSTCggY29uc3QgUVN0cmluZyYgX3Vy
bCwgaW50IGVuY29kaW5nX2hpbnQgPSAwICk7CisgIHZvaWQgcGFyc2VSYXdVUkkoIGNvbnN0IFFT
dHJpbmcmIF91cmwsIGludCBlbmNvZGluZ19oaW50ID0gMCApOworICB2b2lkIHBhcnNlTWFpbHRv
KCBjb25zdCBRU3RyaW5nJiBfdXJsLCBpbnQgZW5jb2RpbmdfaGludCA9IDAgKTsKKyAgdm9pZCBw
YXJzZSggY29uc3QgUVN0cmluZyYgX3VybCwgaW50IGVuY29kaW5nX2hpbnQgPSAwICk7CiAKIHBy
aXZhdGU6CiAgIHZvaWQgX3NldFF1ZXJ5KCBjb25zdCBRU3RyaW5nJiBfdHh0LCBpbnQgZW5jb2Rp
bmdfaGludCA9IDApOwpJbmRleDoga2RlY29yZS90ZXN0cy9rdXJsdGVzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2hvbWUva2RlL2tkZWxpYnMva2RlY29yZS90ZXN0cy9rdXJsdGVzdC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzgKZGlmZiAtdSAtMyAtcCAtYiAtQiAtcjEuNzgga3Vy
bHRlc3QuY3BwCi0tLSBrZGVjb3JlL3Rlc3RzL2t1cmx0ZXN0LmNwcAkyMiBPY3QgMjAwMyAxNTo1
MTozNCAtMDAwMAkxLjc4CisrKyBrZGVjb3JlL3Rlc3RzL2t1cmx0ZXN0LmNwcAk1IE5vdiAyMDAz
IDIwOjQxOjM3IC0wMDAwCkBAIC02ODIsNiArNjgyLDE0IEBAIGludCBtYWluKGludCBhcmdjLCBj
aGFyICphcmd2W10pCiAgIGNoZWNrKCJxdWVyeSgpPyIsIGxkYXAucXVlcnkoKSwgIj8/c3ViPyhj
bj1LYXJsJTIwTWFyeCkiKTsKICAgY2hlY2soInVybCgpPyIsIGxkYXAudXJsKCksICJsZGFwOi8v
aG9zdC5jb206NjY2Ni9vPVVuaXZlcnNpdHklMjBvZiUyME1pY2hpZ2FuLGM9VVM/P3N1Yj8oY249
S2FybCUyME1hcngpIik7CiAKKyAgLy8gVVJJIE1vZGUgdGVzdHMKKyAgdXJsMSA9ICJodHRwOi8v
d3d3LmZvb2Jhci5jb20vIjsKKyAgY2hlY2soIktVUkwoXCJodHRwOi8vd3d3LmZvb2Jhci5jb20v
XCIpLnVyaU1vZGUoKSIsIFFTdHJpbmc6Om51bWJlcih1cmwxLnVyaU1vZGUoKSksIFFTdHJpbmc6
Om51bWJlcihLVVJMOjpVUkwpKTsKKyAgdXJsMSA9ICJtYWlsdG86dXNlckBob3N0LmNvbSI7Cisg
IGNoZWNrKCJLVVJMKFwibWFpbHRvOnVzZXJAaG9zdC5jb21cIikudXJpTW9kZSgpIiwgUVN0cmlu
Zzo6bnVtYmVyKHVybDEudXJpTW9kZSgpKSwgUVN0cmluZzo6bnVtYmVyKEtVUkw6Ok1haWx0bykp
OworICB1cmwxID0gImRhdGE6dGV4dC9wbGFpbixmb29iYXIiOworICBjaGVjaygiS1VSTChcImRh
dGE6dGV4dC9wbGFpbixmb29iYXJcIikudXJpTW9kZSgpIiwgUVN0cmluZzo6bnVtYmVyKHVybDEu
dXJpTW9kZSgpKSwgUVN0cmluZzo6bnVtYmVyKEtVUkw6OlJhd1VSSSkpOworCiAgIHByaW50Zigi
XG5UZXN0IE9LICFcbiIpOwogfQogCkluZGV4OiBraW8vZGF0YS5wcm90b2NvbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raW8vZGF0YS5wcm90b2NvbCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS41CmRpZmYgLXUgLTMgLXAgLWIgLUIgLXIxLjUgZGF0YS5wcm90b2NvbAot
LS0ga2lvL2RhdGEucHJvdG9jb2wJMTcgU2VwIDIwMDMgMTE6MjQ6NDEgLTAwMDAJMS41CisrKyBr
aW8vZGF0YS5wcm90b2NvbAk1IE5vdiAyMDAzIDIwOjQxOjQxIC0wMDAwCkBAIC04LDMgKzgsNCBA
QCBDbGFzcz06aW50ZXJuZXQKIERlc2NyaXB0aW9uPUEga2lvc2xhdmUgZm9yIGRhdGEgVVJJcyAo
cmZjMjM5NykKIERlc2NyaXB0aW9uW2RlXT1FaW4gUHJvdG9rb2xsIGbDvHIgZGF0YSBVUklzIChy
ZmMyMzk3KQogRG9jUGF0aD1raW9zbGF2ZS9kYXRhLmh0bWwKK1VSSU1vZGU9cmF3dXJpCkluZGV4
OiBraW8va2lvL2twcm90b2NvbGluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUv
a2RlbGlicy9raW8va2lvL2twcm90b2NvbGluZm8uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
NwpkaWZmIC11IC0zIC1wIC1iIC1CIC1yMS4yNyBrcHJvdG9jb2xpbmZvLmgKLS0tIGtpby9raW8v
a3Byb3RvY29saW5mby5oCTI2IE9jdCAyMDAzIDIwOjQyOjE1IC0wMDAwCTEuMjcKKysrIGtpby9r
aW8va3Byb3RvY29saW5mby5oCTUgTm92IDIwMDMgMjA6NDE6NDIgLTAwMDAKQEAgLTQzNCw2ICs0
MzQsMjUgQEAgcHVibGljOgogICAgKi8KICAgc3RhdGljIGJvb2wgc2hvd0ZpbGVQcmV2aWV3KCBj
b25zdCBRU3RyaW5nJiBwcm90b2NvbCApOwogCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBzdWdn
ZXN0ZWQgVVJJIHBhcnNpbmcgbW9kZSBmb3IgdGhlIEtVUkwgcGFyc2VyLgorICAgKgorICAgKiBU
aGlzIGNvcnJlc3BvbmRzIHRvIHRoZSAiVVJJTW9kZT0iIGZpZWxkIGluIHRoZSBwcm90b2NvbCBk
ZXNjcmlwdGlvbiBmaWxlLgorICAgKgorICAgKiBUaGUgZm9sbG93aW5nIHBhcnNpbmcgbW9kZXMg
YXJlIGRlZmluZWQ6CisgICAqIEBsaSAidXJsIiBmb3IgYSBzdGFuZGFyZHMgY29tcGxpYW50IFVS
TAorICAgKiBAbGkgInJhd3VyaSIgZm9yIGEgbm9uLWNvbmZvcm1hbnQgVVJJIHRoYXQgd291bGQg
YmUgbWFuZ2xlZCBieSBhc3N1bWluZyBpdCdzIGEgdmFsaWQgVVJMCisgICAqIEBsaSAibWFpbHRv
IiBmb3IgYSBtYWlsdG8gc3R5bGUgVVJJIChvbmUgY29udGFpbmluZyBvbmx5IGFuIGVtYWlsIGFk
ZHJlc3MgYWZ0ZXIgdGhlIHByb3RvY29sKQorICAgKgorICAgKiBUaGlzIGRlZmF1bHRzIHRvICJ1
cmwiIGlmIHVuc3BlY2lmaWVkLgorICAgKgorICAgKiBAcGFyYW0gcHJvdG9jb2wgdGhlIHByb3Rv
Y29sIHRvIGNoZWNrCisgICAqIEByZXR1cm4gdGhlIHN1Z2dlc3RlZCBwYXJzaW5nIG1vZGUKKyAg
ICoKKyAgICogQHNpbmNlIDMuMgorICAgKi8KKyAgc3RhdGljIFFTdHJpbmcgdXJpUGFyc2VNb2Rl
KCBjb25zdCBRU3RyaW5nJiBwcm90b2NvbCApOworCiBwdWJsaWM6CiAgIC8vIEludGVybmFsIGZ1
bmN0aW9uczoKICAgLyoqCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3154</attachid>
            <date>2003-11-11 17:37:57 +0000</date>
            <delta_ts>2003-11-11 17:37:57 +0000</delta_ts>
            <desc>Processing modes with working mailto mode.</desc>
            <filename>kurl.patch</filename>
            <type>text/plain</type>
            <size>21308</size>
            <attacher name="Petter Stokke">ummo</attacher>
            
              <data encoding="base64">SW5kZXg6IGtkZWNvcmUva3Byb3RvY29saW5mb19rZGVjb3JlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvaG9tZS9rZGUva2RlbGlicy9rZGVjb3JlL2twcm90b2NvbGluZm9fa2RlY29yZS5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11IC0zIC1wIC1iIC1CIC1yMS43IGtwcm90
b2NvbGluZm9fa2RlY29yZS5jcHAKLS0tIGtkZWNvcmUva3Byb3RvY29saW5mb19rZGVjb3JlLmNw
cAkzMSBPY3QgMjAwMyAyMjowNTo1OCAtMDAwMAkxLjcKKysrIGtkZWNvcmUva3Byb3RvY29saW5m
b19rZGVjb3JlLmNwcAkxMSBOb3YgMjAwMyAxNjoyMzowNiAtMDAwMApAQCAtMzQsNiArMzQsNyBA
QCBwdWJsaWM6CiAgIFFTdHJpbmcgcHJvdENsYXNzOwogICBLUHJvdG9jb2xJbmZvOjpFeHRyYUZp
ZWxkTGlzdCBleHRyYUZpZWxkczsKICAgYm9vbCBzaG93UHJldmlld3M7CisgIFFTdHJpbmcgdXJp
TW9kZTsKIH07CiAKIC8vCkBAIC0xMDEsNiArMTAyLDggQEAgS1Byb3RvY29sSW5mbzo6S1Byb3Rv
Y29sSW5mbyhjb25zdCBRU3RyaQogICB9CiAKICAgZC0+c2hvd1ByZXZpZXdzID0gY29uZmlnLnJl
YWRCb29sRW50cnkoICJTaG93UHJldmlld3MiLCBkLT5wcm90Q2xhc3MgPT0gIjpsb2NhbCIgKTsK
KworICBkLT51cmlNb2RlID0gY29uZmlnLnJlYWRFbnRyeSggIlVSSU1vZGUiLCBRU3RyaW5nOjpu
dWxsICk7CiB9CiAKIEtQcm90b2NvbEluZm86OktQcm90b2NvbEluZm8oIFFEYXRhU3RyZWFtJiBf
c3RyLCBpbnQgb2Zmc2V0KSA6CkBAIC0xMzUsNyArMTM4LDcgQEAgS1Byb3RvY29sSW5mbzo6bG9h
ZCggUURhdGFTdHJlYW0mIF9zdHIpCiAgICAgICAgID4+IGlfc3VwcG9ydHNEZWxldGluZyA+PiBp
X3N1cHBvcnRzTGlua2luZwogICAgICAgICA+PiBpX3N1cHBvcnRzTW92aW5nCiAgICAgICAgID4+
IGlfY2FuQ29weUZyb21GaWxlID4+IGlfY2FuQ29weVRvRmlsZQotICAgICAgICA+PiBtX2NvbmZp
ZyA+PiBtX21heFNsYXZlcyA+PiBkLT5kb2NQYXRoID4+IGQtPnByb3RDbGFzcyA+PiBkLT5leHRy
YUZpZWxkcyA+PiBpX3Nob3dQcmV2aWV3czsKKyAgICAgICAgPj4gbV9jb25maWcgPj4gbV9tYXhT
bGF2ZXMgPj4gZC0+ZG9jUGF0aCA+PiBkLT5wcm90Q2xhc3MgPj4gZC0+ZXh0cmFGaWVsZHMgPj4g
aV9zaG93UHJldmlld3MgPj4gZC0+dXJpTW9kZTsKICAgIG1faW5wdXRUeXBlID0gKFR5cGUpIGlf
aW5wdXRUeXBlOwogICAgbV9vdXRwdXRUeXBlID0gKFR5cGUpIGlfb3V0cHV0VHlwZTsKICAgIG1f
aXNTb3VyY2VQcm90b2NvbCA9IChpX2lzU291cmNlUHJvdG9jb2wgIT0gMCk7CkBAIC0xOTIsNyAr
MTk1LDcgQEAgS1Byb3RvY29sSW5mbzo6c2F2ZSggUURhdGFTdHJlYW0mIF9zdHIpCiAgICAgICAg
IDw8IGlfc3VwcG9ydHNEZWxldGluZyA8PCBpX3N1cHBvcnRzTGlua2luZwogICAgICAgICA8PCBp
X3N1cHBvcnRzTW92aW5nCiAgICAgICAgIDw8IGlfY2FuQ29weUZyb21GaWxlIDw8IGlfY2FuQ29w
eVRvRmlsZQotICAgICAgICA8PCBtX2NvbmZpZyA8PCBtX21heFNsYXZlcyA8PCBkLT5kb2NQYXRo
IDw8IGQtPnByb3RDbGFzcyA8PCBkLT5leHRyYUZpZWxkcyA8PCBpX3Nob3dQcmV2aWV3czsKKyAg
ICAgICAgPDwgbV9jb25maWcgPDwgbV9tYXhTbGF2ZXMgPDwgZC0+ZG9jUGF0aCA8PCBkLT5wcm90
Q2xhc3MgPDwgZC0+ZXh0cmFGaWVsZHMgPDwgaV9zaG93UHJldmlld3MgPDwgZC0+dXJpTW9kZTsK
IH0KIAogCkBAIC00MzcsNiArNDQwLDE1IEBAIGJvb2wgS1Byb3RvY29sSW5mbzo6c2hvd0ZpbGVQ
cmV2aWV3KCBjb24KICAgcmV0dXJuIHByb3QtPmQtPnNob3dQcmV2aWV3czsKIH0KIAorUVN0cmlu
ZyBLUHJvdG9jb2xJbmZvOjp1cmlQYXJzZU1vZGUoIGNvbnN0IFFTdHJpbmcmIF9wcm90b2NvbCAp
Cit7CisgIEtQcm90b2NvbEluZm86OlB0ciBwcm90ID0gS1Byb3RvY29sSW5mb0ZhY3Rvcnk6OnNl
bGYoKS0+ZmluZFByb3RvY29sKF9wcm90b2NvbCk7CisgIGlmICggIXByb3QgKQorICAgIHJldHVy
biBRU3RyaW5nOjpudWxsOworCisgIHJldHVybiBwcm90LT5kLT51cmlNb2RlOworfQorCiBRRGF0
YVN0cmVhbSYgb3BlcmF0b3I+PiggUURhdGFTdHJlYW0mIHMsIEtQcm90b2NvbEluZm86OkV4dHJh
RmllbGQmIGZpZWxkICkgIHsKICAgcyA+PiBmaWVsZC5uYW1lOwogICBzID4+IGZpZWxkLnR5cGU7
CkluZGV4OiBrZGVjb3JlL2t1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tkZS9r
ZGVsaWJzL2tkZWNvcmUva3VybC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYwCmRpZmYg
LXUgLTMgLXAgLWIgLUIgLXIxLjI2MCBrdXJsLmNwcAotLS0ga2RlY29yZS9rdXJsLmNwcAkzMSBP
Y3QgMjAwMyAyMjowNTo1OCAtMDAwMAkxLjI2MAorKysga2RlY29yZS9rdXJsLmNwcAkxMSBOb3Yg
MjAwMyAxNjoyMzoxMSAtMDAwMApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGtkZWJ1Zy5o
PgogI2luY2x1ZGUgPGtnbG9iYWwuaD4KICNpbmNsdWRlIDxraWRuYS5oPgorI2luY2x1ZGUgPGtw
cm90b2NvbGluZm8uaD4KICNlbmRpZgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTM4LDYgKzM5
LDEzIEBACiAjaW5jbHVkZSA8cXN0eWxlc2hlZXQuaD4KICNpbmNsdWRlIDxxbWFwLmg+CiAjaW5j
bHVkZSA8cXRleHRjb2RlYy5oPgorI2luY2x1ZGUgPHFtdXRleC5oPgorCitjbGFzcyBLVVJMUHJp
dmF0ZQoreworcHVibGljOgorICAgIGludCBtX2lVcmlNb2RlOworfTsKIAogc3RhdGljIGNvbnN0
IFFTdHJpbmcgZmlsZVByb3QgPSAiZmlsZSI7CiAKQEAgLTQyMywzNCArNDMxLDY0IEBAIFFTdHJp
bmdMaXN0IEtVUkw6Okxpc3Q6OnRvU3RyaW5nTGlzdCgpIGMKIAogS1VSTDo6S1VSTCgpCiB7Cisg
IGQgPSBuZXcgS1VSTFByaXZhdGUoKTsKICAgcmVzZXQoKTsKIH0KIAogS1VSTDo6fktVUkwoKQog
eworICBkZWxldGUgZDsKIH0KIAogCiBLVVJMOjpLVVJMKCBjb25zdCBRU3RyaW5nICZ1cmwsIGlu
dCBlbmNvZGluZ19oaW50ICkKIHsKKyAgZCA9IG5ldyBLVVJMUHJpdmF0ZSgpOwogICByZXNldCgp
OwogICBwYXJzZSggdXJsLCBlbmNvZGluZ19oaW50ICk7CiB9CiAKIEtVUkw6OktVUkwoIGNvbnN0
IGNoYXIgKiB1cmwsIGludCBlbmNvZGluZ19oaW50ICkKIHsKKyAgZCA9IG5ldyBLVVJMUHJpdmF0
ZSgpOwogICByZXNldCgpOwogICBwYXJzZSggUVN0cmluZzo6ZnJvbUxhdGluMSh1cmwpLCBlbmNv
ZGluZ19oaW50ICk7CiB9CiAKIEtVUkw6OktVUkwoIGNvbnN0IFFDU3RyaW5nJiB1cmwsIGludCBl
bmNvZGluZ19oaW50ICkKIHsKKyAgZCA9IG5ldyBLVVJMUHJpdmF0ZSgpOworICByZXNldCgpOwor
ICBwYXJzZSggUVN0cmluZzo6ZnJvbUxhdGluMSh1cmwpLCBlbmNvZGluZ19oaW50ICk7Cit9CisK
K0tVUkw6OktVUkwoIGNvbnN0IFFTdHJpbmcgJnVybCwgS1VSTDo6VVJJTW9kZSBtb2RlLCBpbnQg
ZW5jb2RpbmdfaGludCApCit7CisgIGQgPSBuZXcgS1VSTFByaXZhdGUoKTsKKyAgcmVzZXQoKTsK
KyAgZC0+bV9pVXJpTW9kZSA9IG1vZGU7CisgIHBhcnNlKCB1cmwsIGVuY29kaW5nX2hpbnQgKTsK
K30KKworS1VSTDo6S1VSTCggY29uc3QgY2hhciAqIHVybCwgS1VSTDo6VVJJTW9kZSBtb2RlLCBp
bnQgZW5jb2RpbmdfaGludCApCit7CisgIGQgPSBuZXcgS1VSTFByaXZhdGUoKTsKKyAgcmVzZXQo
KTsKKyAgZC0+bV9pVXJpTW9kZSA9IG1vZGU7CisgIHBhcnNlKCBRU3RyaW5nOjpmcm9tTGF0aW4x
KHVybCksIGVuY29kaW5nX2hpbnQgKTsKK30KKworS1VSTDo6S1VSTCggY29uc3QgUUNTdHJpbmcm
IHVybCwgS1VSTDo6VVJJTW9kZSBtb2RlLCBpbnQgZW5jb2RpbmdfaGludCApCit7CisgIGQgPSBu
ZXcgS1VSTFByaXZhdGUoKTsKICAgcmVzZXQoKTsKKyAgZC0+bV9pVXJpTW9kZSA9IG1vZGU7CiAg
IHBhcnNlKCBRU3RyaW5nOjpmcm9tTGF0aW4xKHVybCksIGVuY29kaW5nX2hpbnQgKTsKIH0KIAog
S1VSTDo6S1VSTCggY29uc3QgS1VSTCYgX3UgKQogeworICBkID0gbmV3IEtVUkxQcml2YXRlKCk7
CiAgICp0aGlzID0gX3U7CiB9CiAKQEAgLTQ4NiwxMiArNTI0LDE0IEBAIFFEYXRhU3RyZWFtICYg
b3BlcmF0b3I+PiAoUURhdGFTdHJlYW0gJiAKICNpZm5kZWYgUVRfTk9fTkVUV09SS1BST1RPQ09M
CiBLVVJMOjpLVVJMKCBjb25zdCBRVXJsICZ1ICkKIHsKKyAgZCA9IG5ldyBLVVJMUHJpdmF0ZSgp
OwogICAqdGhpcyA9IHU7CiB9CiAjZW5kaWYKIAogS1VSTDo6S1VSTCggY29uc3QgS1VSTCYgX3Us
IGNvbnN0IFFTdHJpbmcmIF9yZWxfdXJsLCBpbnQgZW5jb2RpbmdfaGludCApCiB7CisgIGQgPSBu
ZXcgS1VSTFByaXZhdGUoKTsKICAgaWYgKF91Lmhhc1N1YlVSTCgpKSAvLyBPcGVyYXRlIG9uIHRo
ZSBsYXN0IHN1YnVybCwgbm90IHRoZSBmaXJzdAogICB7CiAgICAgS1VSTDo6TGlzdCBsc3QgPSBz
cGxpdCggX3UgKTsKQEAgLTU4OSw2ICs2MjksNyBAQCB2b2lkIEtVUkw6OnJlc2V0KCkKICAgbV9z
dHJSZWZfZW5jb2RlZCA9IFFTdHJpbmc6Om51bGw7CiAgIG1fYklzTWFsZm9ybWVkID0gdHJ1ZTsK
ICAgbV9pUG9ydCA9IDA7CisgIGQtPm1faVVyaU1vZGUgPSBBdXRvOwogfQogCiBib29sIEtVUkw6
OmlzRW1wdHkoKSBjb25zdApAQCAtNTk4LDIxICs2MzksMTI1IEBAIGJvb2wgS1VSTDo6aXNFbXB0
eSgpIGNvbnN0CiAKIHZvaWQgS1VSTDo6cGFyc2UoIGNvbnN0IFFTdHJpbmcmIF91cmwsIGludCBl
bmNvZGluZ19oaW50ICkKIHsKLSAgLy9rZERlYnVnKDEyNikgPDwgInBhcnNlICIgPDwgX3VybCA8
PCBlbmRsOwotICAvLyBSZXR1cm4gaW1tZWRpYXRlbHkgd2hlbmV2ZXIgdGhlIGdpdmVuIHVybAot
ICAvLyBpcyBlbXB0eSBvciBudWxsLgotICBpZiAoIF91cmwuaXNFbXB0eSgpICkKKyAgICBpZiAo
IF91cmwuaXNFbXB0eSgpIHx8IGQtPm1faVVyaU1vZGUgPT0gSW52YWxpZCApCisgICAgeworCW1f
c3RyUHJvdG9jb2wgPSBfdXJsOworCWQtPm1faVVyaU1vZGUgPSBJbnZhbGlkOworCXJldHVybjsK
KyAgICB9CisKKyAgICBjb25zdCBRQ2hhciogYnVmID0gX3VybC51bmljb2RlKCk7CisgICAgY29u
c3QgUUNoYXIqIG9yaWcgPSBidWY7CisgICAgdWludCBsZW4gPSBfdXJsLmxlbmd0aCgpOworICAg
IHVpbnQgcG9zID0gMDsKKworICAgIC8vIE5vZGUgMTogQWNjZXB0IGFscGhhIG9yIHNsYXNoCisg
ICAgUUNoYXIgeCA9IGJ1Zltwb3MrK107CisgICAgaWYgKCB4ID09ICcvJyApCisgICAgeworCS8v
IEEgc2xhc2ggbWVhbnMgd2UgaW1tZWRpYXRlbHkgcHJvY2VlZCB0byBwYXJzZSBpdCBhcyBhIGZp
bGUgVVJMLgorCWQtPm1faVVyaU1vZGUgPSBVUkw7CisJbV9zdHJQcm90b2NvbCA9IGZpbGVQcm90
OworCXBhcnNlVVJMKCBfdXJsLCBlbmNvZGluZ19oaW50ICk7CisJcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoICFpc2FscGhhKCAoaW50KXggKSApCisJZ290byBOb2RlRXJyOworCisgICAgLy8gTm9k
ZSAyOiBBY2NlcHQgYW55IGFtb3VudCBvZiAoYWxwaGF8ZGlnaXR8JysnfCctJykKKyAgICAvLyAn
LicgaXMgbm90IGN1cnJlbnRseSBhY2NlcHRlZCwgYmVjYXVzZSBjdXJyZW50IEtVUkwgbWF5IGJl
IGNvbmZ1c2VkLgorICAgIC8vIFByb2NlZWQgd2l0aCA6Ly8gOi8gb3IgOgorICAgIHdoaWxlKCBw
b3MgPCBsZW4gJiYgKGlzYWxwaGEoKGludClidWZbcG9zXSkgfHwgaXNkaWdpdCgoaW50KWJ1Zltw
b3NdKSB8fAorCQkJIGJ1Zltwb3NdID09ICcrJyB8fCBidWZbcG9zXSA9PSAnLScpKSBwb3MrKzsK
KworICAgIGlmIChwb3MgPCBsZW4gJiYgYnVmW3Bvc10gPT0gJzonICkKKyAgICB7CisJbV9zdHJQ
cm90b2NvbCA9IFFTdHJpbmcoIG9yaWcsIHBvcyApLmxvd2VyKCk7CisJaWYgKCBkLT5tX2lVcmlN
b2RlID09IEF1dG8gKQorCSAgICBkLT5tX2lVcmlNb2RlID0gdXJpTW9kZUZvclByb3RvY29sKCBt
X3N0clByb3RvY29sICk7CisJLy8gUHJvY2VlZCB0byBjb3JyZWN0IHBhcnNlIGZ1bmN0aW9uLgor
CXN3aXRjaCAoIGQtPm1faVVyaU1vZGUgKQogICB7CisJY2FzZSBSYXdVUkk6CisJICAgIHBhcnNl
UmF3VVJJKCBfdXJsICk7CisJICAgIHJldHVybjsKKwljYXNlIE1haWx0bzoKKwkgICAgcGFyc2VN
YWlsdG8oIF91cmwgKTsKKwkgICAgcmV0dXJuOworCWNhc2UgVVJMOgorCSAgICBwYXJzZVVSTCgg
X3VybCwgZW5jb2RpbmdfaGludCApOworCSAgICByZXR1cm47CisJZGVmYXVsdDoKKwkgICAgLy8g
VW5rbm93biBVUkkgbW9kZSByZXN1bHRzIGluIGFuIGludmFsaWQgVVJJLgorCSAgICBicmVhazsK
Kwl9CisgICAgfQorCitOb2RlRXJyOgorICAgIHJlc2V0KCk7CisgICAgbV9zdHJQcm90b2NvbCA9
IF91cmw7CisgICAgZC0+bV9pVXJpTW9kZSA9IEludmFsaWQ7Cit9CisKK3ZvaWQgS1VSTDo6cGFy
c2VSYXdVUkkoIGNvbnN0IFFTdHJpbmcmIF91cmwsIGludCBlbmNvZGluZ19oaW50ICkKK3sKKyAg
ICB1aW50IGxlbiA9IF91cmwubGVuZ3RoKCk7CisgICAgY29uc3QgUUNoYXIqIGJ1ZiA9IF91cmwu
dW5pY29kZSgpOworCisgICAgdWludCBwb3MgPSAwOworCisgICAgLy8gQWNjZXB0IGFueSBhbW91
bnQgb2YgKGFscGhhfGRpZ2l0fCcrJ3wnLScpCisgICAgLy8gJy4nIGlzIG5vdCBjdXJyZW50bHkg
YWNjZXB0ZWQsIGJlY2F1c2UgY3VycmVudCBLVVJMIG1heSBiZSBjb25mdXNlZC4KKyAgICAvLyBQ
cm9jZWVkIHdpdGggOgorICAgIHdoaWxlKCBwb3MgPCBsZW4gJiYgKGlzYWxwaGEoKGludClidWZb
cG9zXSkgfHwgaXNkaWdpdCgoaW50KWJ1Zltwb3NdKSB8fAorCQkJIGJ1Zltwb3NdID09ICcrJyB8
fCBidWZbcG9zXSA9PSAnLScpKSBwb3MrKzsKKworICAgIC8vIE5vdGUgdGhhdCBtX3N0clByb3Rv
Y29sIGlzIGFscmVhZHkgc2V0IGhlcmUsIHNvIHdlIGp1c3Qgc2tpcCBvdmVyIHRoZSBwcm90b2Nv
bC4KKyAgICBpZiAocG9zIDwgbGVuICYmIGJ1Zltwb3NdID09ICc6JyApCisJcG9zKys7CisgICAg
ZWxzZSB7CisJcmVzZXQoKTsKICAgICBtX3N0clByb3RvY29sID0gX3VybDsKKwlkLT5tX2lVcmlN
b2RlID0gSW52YWxpZDsKKwlyZXR1cm47CisgICAgfQorCisgICAgaWYgKCBwb3MgPT0gbGVuICkK
KwltX3N0clBhdGggPSBRU3RyaW5nOjpudWxsOworICAgIGVsc2UKKwltX3N0clBhdGggPSBkZWNv
ZGUoIFFTdHJpbmcoIGJ1ZiArIHBvcywgbGVuIC0gcG9zICksIGVuY29kaW5nX2hpbnQgKTsKKwor
ICAgIG1fYklzTWFsZm9ybWVkID0gZmFsc2U7CisKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgS1VS
TDo6cGFyc2VNYWlsdG8oIGNvbnN0IFFTdHJpbmcmIF91cmwsIGludCBlbmNvZGluZ19oaW50ICkK
K3sKKyAgICBwYXJzZVVSTCggX3VybCwgZW5jb2RpbmdfaGludCk7CisgICAgaWYgKCBtX2JJc01h
bGZvcm1lZCApCiAgICAgcmV0dXJuOworICAgIFFSZWdFeHAgbWFpbHJlKCIoLitAKSguKykiKTsK
KyAgICBpZiAoIG1haWxyZS5leGFjdE1hdGNoKCBtX3N0clBhdGggKSApCisgICAgeworI2lmbmRl
ZiBLREVfUVRfT05MWQorCVFTdHJpbmcgaG9zdCA9IEtJRE5BOjp0b1VuaWNvZGUoIG1haWxyZS5j
YXAoIDIgKSApOworCWlmIChob3N0LmlzRW1wdHkoKSkKKwkgICAgaG9zdCA9IG1haWxyZS5jYXAo
IDIgKS5sb3dlcigpOworI2Vsc2UKKwlRU3RyaW5nIGhvc3QgPSBtYWlscmUuY2FwKCAyICkubG93
ZXIoKTsKKyNlbmRpZgorCW1fc3RyUGF0aCA9IG1haWxyZS5jYXAoIDEgKSArIGhvc3Q7CiAgIH0K
K30KIAordm9pZCBLVVJMOjpwYXJzZVVSTCggY29uc3QgUVN0cmluZyYgX3VybCwgaW50IGVuY29k
aW5nX2hpbnQgKQorewogICBRU3RyaW5nIHBvcnQ7CiAgIGJvb2wgYmFkSG9zdE5hbWUgPSBmYWxz
ZTsKICAgaW50IHN0YXJ0ID0gMDsKICAgdWludCBsZW4gPSBfdXJsLmxlbmd0aCgpOwogICBjb25z
dCBRQ2hhciogYnVmID0gX3VybC51bmljb2RlKCk7Ci0gIGNvbnN0IFFDaGFyKiBvcmlnID0gYnVm
OwogCiAgIFFDaGFyIGRlbGltOwogICBRU3RyaW5nIHRtcDsKQEAgLTYzMiwxNSArNzc3LDEzIEBA
IHZvaWQgS1VSTDo6cGFyc2UoIGNvbnN0IFFTdHJpbmcmIF91cmwsIGkKICAgd2hpbGUoIHBvcyA8
IGxlbiAmJiAoaXNhbHBoYSgoaW50KWJ1Zltwb3NdKSB8fCBpc2RpZ2l0KChpbnQpYnVmW3Bvc10p
IHx8CiAgICAgICAgICAgYnVmW3Bvc10gPT0gJysnIHx8IGJ1Zltwb3NdID09ICctJykpIHBvcysr
OwogCisgIC8vIE5vdGUgdGhhdCBtX3N0clByb3RvY29sIGlzIGFscmVhZHkgc2V0IGhlcmUsIHNv
IHdlIGp1c3Qgc2tpcCBvdmVyIHRoZSBwcm90b2NvbC4KICAgaWYgKCBwb3MrMiA8IGxlbiAmJiBi
dWZbcG9zXSA9PSAnOicgJiYgYnVmW3BvcysxXSA9PSAnLycgJiYgYnVmW3BvcysyXSA9PSAnLycg
KQogICAgIHsKLSAgICAgIG1fc3RyUHJvdG9jb2wgPSBRU3RyaW5nKCBvcmlnLCBwb3MgKS5sb3dl
cigpOwogICAgICAgcG9zICs9IDM7CiAgICAgfQogICBlbHNlIGlmIChwb3MrMSA8IGxlbiAmJiBi
dWZbcG9zXSA9PSAnOicgKSAvLyBOZWVkIHRvIGFsd2F5cyBjb21wYXJlIGxlbmd0aCgpLTEgb3Ro
ZXJ3aXNlIEtVUkwgcGFzc2VzICJodHRwOiIgYXMgbGVnYWwhIQogICAgIHsKLSAgICAgIG1fc3Ry
UHJvdG9jb2wgPSBRU3RyaW5nKCBvcmlnLCBwb3MgKS5sb3dlcigpOwotICAgICAgLy9rZERlYnVn
KDEyNik8PCJzZXR0aW5nIHByb3RvY29sIHRvICI8PG1fc3RyUHJvdG9jb2w8PGVuZGw7CiAgICAg
ICBwb3MrKzsKICAgICAgIHN0YXJ0ID0gcG9zOwogICAgICAgZ290byBOb2RlOTsKQEAgLTg2OSw2
ICsxMDEyLDcgQEAgdm9pZCBLVVJMOjpwYXJzZSggY29uc3QgUVN0cmluZyYgX3VybCwgaQogLy8g
IGtkRGVidWcoMTI2KSA8PCAiS1VSTCBjb3VsZG4ndCBwYXJzZSBVUkwgXCIiIDw8IF91cmwgPDwg
IlwiIiA8PCBlbmRsOwogICByZXNldCgpOwogICBtX3N0clByb3RvY29sID0gX3VybDsKKyAgZC0+
bV9pVXJpTW9kZSA9IEludmFsaWQ7CiB9CiAKIEtVUkwmIEtVUkw6Om9wZXJhdG9yPSggY29uc3Qg
UVN0cmluZyYgX3VybCApCkBAIC04OTEsNiArMTAzNSw3IEBAIEtVUkwmIEtVUkw6Om9wZXJhdG9y
PSggY29uc3QgY2hhciAqIF91cmwKIEtVUkwmIEtVUkw6Om9wZXJhdG9yPSggY29uc3QgUVVybCAm
IHUgKQogewogICBtX3N0clByb3RvY29sID0gdS5wcm90b2NvbCgpOworICBkLT5tX2lVcmlNb2Rl
ID0gQXV0bzsKICAgbV9zdHJVc2VyID0gdS51c2VyKCk7CiAgIG1fc3RyUGFzcyA9IHUucGFzc3dv
cmQoKTsKICAgbV9zdHJIb3N0ID0gdS5ob3N0KCk7CkBAIC05MTcsNiArMTA2Miw3IEBAIEtVUkwm
IEtVUkw6Om9wZXJhdG9yPSggY29uc3QgS1VSTCYgX3UgKQogICBtX3N0clJlZl9lbmNvZGVkID0g
X3UubV9zdHJSZWZfZW5jb2RlZDsKICAgbV9iSXNNYWxmb3JtZWQgPSBfdS5tX2JJc01hbGZvcm1l
ZDsKICAgbV9pUG9ydCA9IF91Lm1faVBvcnQ7CisgIGQtPm1faVVyaU1vZGUgPSBfdS5kLT5tX2lV
cmlNb2RlOwogCiAgIHJldHVybiAqdGhpczsKIH0KQEAgLTEwOTYsNiArMTI0Miw3IEBAIHZvaWQg
S1VSTDo6c2V0RmlsZU5hbWUoIGNvbnN0IFFTdHJpbmcmIF8KIAogdm9pZCBLVVJMOjpjbGVhblBh
dGgoIGJvb2wgY2xlYW5EaXJTZXBhcmF0b3IgKSAvLyB0YWtlbiBmcm9tIHRoZSBvbGQgS1VSTAog
eworICBpZiAoZC0+bV9pVXJpTW9kZSAhPSBVUkwpIHJldHVybjsKICAgbV9zdHJQYXRoID0gY2xl
YW5wYXRoKG1fc3RyUGF0aCwgY2xlYW5EaXJTZXBhcmF0b3IsIGZhbHNlKTsKICAgLy8gV0FCQTog
SXMgdGhpcyBzYWZlIHdoZW4gIi8uLi8iIGlzIGVuY29kZWQgd2l0aCAlPwogICBtX3N0clBhdGhf
ZW5jb2RlZCA9IGNsZWFucGF0aChtX3N0clBhdGhfZW5jb2RlZCwgY2xlYW5EaXJTZXBhcmF0b3Is
IHRydWUpOwpAQCAtMTMxNiw2ICsxNDYzLDggQEAgUVN0cmluZyBLVVJMOjp1cmwoIGludCBfdHJh
aWxpbmcsIGludCBlbgogICAgICAgfQogICAgICAgdSArPSAiQCI7CiAgICAgfQorICAgIGlmICgg
ZC0+bV9pVXJpTW9kZSA9PSBVUkwgKQorICAgIHsKICAgICBib29sIElQdjYgPSAobV9zdHJIb3N0
LmZpbmQoJzonKSAhPSAtMSk7CiAgICAgaWYgKElQdjYpCiAgICAgICAgdSArPSAnWycgKyBtX3N0
ckhvc3QgKyAnXSc7CkBAIC0xMzI3LDggKzE0NzYsMTYgQEAgUVN0cmluZyBLVVJMOjp1cmwoIGlu
dCBfdHJhaWxpbmcsIGludCBlbgogICAgICAgdSArPSBidWZmZXI7CiAgICAgfQogICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgIHUgKz0gbV9zdHJIb3N0OworICAgIH0KKyAgfQogCisgIGlmICgg
ZC0+bV9pVXJpTW9kZSA9PSBVUkwgKQogICB1ICs9IGVuY29kZWRQYXRoQW5kUXVlcnkoIF90cmFp
bGluZywgZmFsc2UsIGVuY29kaW5nX2hpbnQgKTsKKyAgZWxzZQorICAgIHUgKz0gbV9zdHJQYXRo
OwogCiAgIGlmICggaGFzUmVmKCkgKQogICB7CkBAIC0xMzYyLDYgKzE1MTksOCBAQCBRU3RyaW5n
IEtVUkw6OnByZXR0eVVSTCggaW50IF90cmFpbGluZyApCiAgICAgICAvLyBEb24ndCBzaG93IHBh
c3N3b3JkIQogICAgICAgdSArPSAiQCI7CiAgICAgfQorICAgIGlmICggZC0+bV9pVXJpTW9kZSA9
PSBVUkwgKQorICAgIHsKICAgICBib29sIElQdjYgPSAobV9zdHJIb3N0LmZpbmQoJzonKSAhPSAt
MSk7CiAgICAgaWYgKElQdjYpCiAgICAgewpAQCAtMTM3MSw2ICsxNTMwLDExIEBAIFFTdHJpbmcg
S1VSTDo6cHJldHR5VVJMKCBpbnQgX3RyYWlsaW5nICkKICAgICB7CiAgICAgICAgdSArPSBsYXp5
X2VuY29kZShtX3N0ckhvc3QpOwogICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
IHUgKz0gbGF6eV9lbmNvZGUobV9zdHJIb3N0KTsKKyAgICB9CiAgICAgaWYgKCBtX2lQb3J0ICE9
IDAgKSB7CiAgICAgICBRU3RyaW5nIGJ1ZmZlcjsKICAgICAgIGJ1ZmZlci5zcHJpbnRmKCAiOiV1
IiwgbV9pUG9ydCApOwpAQCAtMTcyOSw2ICsxODkzLDcgQEAgdm9pZAogS1VSTDo6c2V0UHJvdG9j
b2woIGNvbnN0IFFTdHJpbmcmIF90eHQgKQogewogICAgbV9zdHJQcm90b2NvbCA9IF90eHQ7Cisg
ICBpZiAoIGQtPm1faVVyaU1vZGUgPT0gQXV0byApIGQtPm1faVVyaU1vZGUgPSB1cmlNb2RlRm9y
UHJvdG9jb2woIG1fc3RyUHJvdG9jb2wgKTsKICAgIG1fYklzTWFsZm9ybWVkID0gZmFsc2U7CiB9
CiAKQEAgLTE3NDcsNiArMTkxMiw5IEBAIEtVUkw6OnNldFBhc3MoIGNvbnN0IFFTdHJpbmcmIF90
eHQgKQogdm9pZAogS1VSTDo6c2V0SG9zdCggY29uc3QgUVN0cmluZyYgX3R4dCApCiB7CisgIHN3
aXRjaCAoIGQtPm1faVVyaU1vZGUgKQorICB7CisgIGNhc2UgVVJMOgogI2lmbmRlZiBLREVfUVRf
T05MWQogICAgbV9zdHJIb3N0ID0gS0lETkE6OnRvVW5pY29kZShfdHh0KTsKICAgIGlmIChtX3N0
ckhvc3QuaXNFbXB0eSgpKQpAQCAtMTc1NCw2ICsxOTIyLDExIEBAIEtVUkw6OnNldEhvc3QoIGNv
bnN0IFFTdHJpbmcmIF90eHQgKQogI2Vsc2UKICAgIG1fc3RySG9zdCA9IF90eHQubG93ZXIoKTsK
ICNlbmRpZgorICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIG1fc3RySG9zdCA9IF90eHQ7Cisg
ICAgYnJlYWs7CisgIH0KIH0KIAogdm9pZApAQCAtMjEwMSwzICsyMjc0LDUyIEBAIFFTdHJpbmcg
S1VSTDo6cmVsYXRpdmVVUkwoY29uc3QgS1VSTCAmYmEKIAogICAgcmV0dXJuIHJlbFVSTDsKIH0K
KworaW50IEtVUkw6OnVyaU1vZGUoKSBjb25zdAoreworICByZXR1cm4gZC0+bV9pVXJpTW9kZTsK
K30KKwordm9pZCBLVVJMOjpzZXRVUklNb2RlKEtVUkw6OlVSSU1vZGUgbW9kZSkKK3sKKyAgZC0+
bV9pVXJpTW9kZSA9IG1vZGU7Cit9CisKKworCisvLyBVUklNb2RlIGRhdGFiYXNlCisKK1FNYXA8
UVN0cmluZywgS1VSTDo6VVJJTW9kZT4gdXJpTW9kZXM7CitRTXV0ZXggdXJpTW9kZU11dGV4Owor
CitLVVJMOjpVUklNb2RlIEtVUkw6OnVyaU1vZGVGb3JQcm90b2NvbChjb25zdCBRU3RyaW5nJiBw
cm90b2NvbCkKK3sKKyAgICBVUklNb2RlIG1vZGUgPSBBdXRvOworCisgICAgdXJpTW9kZU11dGV4
LmxvY2soKTsKKyAgICBpZiAoIHVyaU1vZGVzLmNvbnRhaW5zKCBwcm90b2NvbCApICkKKwltb2Rl
ID0gdXJpTW9kZXNbcHJvdG9jb2xdOworICAgIHVyaU1vZGVNdXRleC51bmxvY2soKTsKKyAgICBp
ZiAobW9kZSAhPSBBdXRvKSB7IC8vIENhY2hlIGhpdAorCXJldHVybiBtb2RlOworICAgIH0KKyNp
Zm5kZWYgS0RFX1FUX09OTFkKKyAgICBRU3RyaW5nIG1vZGVuYW1lID0gS1Byb3RvY29sSW5mbzo6
dXJpUGFyc2VNb2RlKHByb3RvY29sKS5sb3dlcigpOworICAgIGlmICghbW9kZW5hbWUuaXNOdWxs
KCkpIHsKKwlpZiAoIG1vZGVuYW1lID09ICJyYXd1cmkiICkgbW9kZSA9IFJhd1VSSTsKKwllbHNl
IGlmICggbW9kZW5hbWUgPT0gIm1haWx0byIgKSBtb2RlID0gTWFpbHRvOworCWVsc2UgaWYgKCBt
b2RlbmFtZSA9PSAidXJsIiApIG1vZGUgPSBVUkw7CisgICAgfQorICAgIGlmIChtb2RlID09IEF1
dG8gKSB7CisjZW5kaWYKKwlpZiAoIHByb3RvY29sID09ICJlZDJrIiB8fCBwcm90b2NvbCA9PSAi
c2lnMmRhdCIgfHwgcHJvdG9jb2wgPT0gInNsc2siIHx8IHByb3RvY29sID09ICJkYXRhIiApIG1v
ZGUgPSBSYXdVUkk7CisJZWxzZSBpZiAoIHByb3RvY29sID09ICJtYWlsdG8iICkgbW9kZSA9IE1h
aWx0bzsKKwllbHNlIG1vZGUgPSBVUkw7CisjaWZuZGVmIEtERV9RVF9PTkxZCisgICAgfQorI2Vu
ZGlmCisgICAgdXJpTW9kZU11dGV4LmxvY2soKTsKKyAgICB1cmlNb2Rlcy5yZXBsYWNlKCBwcm90
b2NvbCwgbW9kZSApOworICAgIHVyaU1vZGVNdXRleC51bmxvY2soKTsKKyAgICByZXR1cm4gbW9k
ZTsKK30KSW5kZXg6IGtkZWNvcmUva3VybC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2tk
ZS9rZGVsaWJzL2tkZWNvcmUva3VybC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyOQpkaWZm
IC11IC0zIC1wIC1iIC1CIC1yMS4xMjkga3VybC5oCi0tLSBrZGVjb3JlL2t1cmwuaAkzMSBPY3Qg
MjAwMyAyMjowNTo1OCAtMDAwMAkxLjEyOQorKysga2RlY29yZS9rdXJsLmgJMTEgTm92IDIwMDMg
MTY6MjM6MTMgLTAwMDAKQEAgLTEyNSw2ICsxMjUsMzggQEAgcHVibGljOgogICB9OwogCiAgIC8q
KgorICAgKiBEZWZpbmVzIHRoZSB0eXBlIG9mIFVSSSB3ZSBhcmUgcHJvY2Vzc2luZy4KKyAgICov
CisgIGVudW0gVVJJTW9kZQorICB7CisgICAgLyoqCisgICAgICogQXV0b21hdGljYWxseSBkZXRl
Y3RlZC4gVXNpbmcgdGhpcyBtb2RlLCBhbiBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nCisgICAgICog
bW9kZSB3aWxsIGJlIHNlbGVjdGVkIHdoZW4gdGhlIFVSSSBpcyBmaXJzdCBwcm9jZXNzZWQuCisg
ICAgICovCisgICAgQXV0bywKKyAgICAvKioKKyAgICAgKiBJbnZhbGlkIFVSSS4gVGhpcyBpcyBz
b21ldGhpbmcgdGhhdCBjYW4ndCBiZSBwYXJzZWQgYXMgYSBVUkkgYXQgYWxsLgorICAgICAqIFRo
ZSBjb250ZW50cyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBAcmVmIHByb3RvY29sKCkgbWV0
aG9kLgorICAgICAqLworICAgIEludmFsaWQsCisgICAgLyoqCisgICAgICogUmF3IFVSSS4gVGhp
cyB0eXBlIG9mIFVSSSBzaG91bGQgbm90IGJlIHByb2Nlc3NlZCBpbiBhbnkgd2F5LgorICAgICAq
IENvbnRlbnRzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIEByZWYgcGF0aCgpIG1ldGhvZC4K
KyAgICAgKi8KKyAgICBSYXdVUkksCisgICAgLyoqCisgICAgICogU3RhbmRhcmRzIGNvbXBsaWFu
dCBVUkwuIFByb2Nlc3MgYXMgYSBzeW50YWN0aWNhbGx5IGNvcnJlY3QgVVJMLgorICAgICAqLwor
ICAgIFVSTCwKKyAgICAvKioKKyAgICAgKiBNYWlsdG8gVVJJLiBwYXRoKCkgY29udGFpbnMgYW4g
ZW1haWwgYWRkcmVzcyB3aGljaCBzaG91bGQgaGF2ZSBpdHMKKyAgICAgKiBkb21haW4gcGFydCBw
cm9jZXNzZWQgYXMgYSBETlMgbmFtZS4gVGhlIGVtYWlsIGFkZHJlc3MgaXMgYWNjZXNzaWJsZQor
ICAgICAqIHRocm91Z2ggdGhlIEByZWYgcGF0aCgpIG1ldGhvZC4KKyAgICAgKi8KKyAgICBNYWls
dG8KKyAgfTsKKworICAvKioKICAgICogS1VSTDo6TGlzdCBpcyBhIFFWYWx1ZUxpc3QgdGhhdCBj
b250YWlucyBLVVJMcyB3aXRoIGEgZmV3CiAgICAqIGNvbnZlbmllbmNlIG1ldGhvZHMuCiAgICAq
IEBzZWUgS1VSTApAQCAtMjAzLDYgKzIzNSw1NCBAQCBwdWJsaWM6CiAgICAqLwogICBLVVJMKCBj
b25zdCBRQ1N0cmluZyYgdXJsLCBpbnQgZW5jb2RpbmdfaGludCA9IDAgKTsKICAgLyoqCisgICAq
IFVzdWFsIGNvbnN0cnVjdG9yLCB0byBjb25zdHJ1Y3QgZnJvbSBhIHN0cmluZy4KKyAgICogQHBh
cmFtIHVybCBBIFVSTCwgbm90IGEgZmlsZW5hbWUuIElmIHRoZSBVUkwgZG9lcyBub3QgaGF2ZSBh
IHByb3RvY29sCisgICAqICAgICAgICAgICAgIHBhcnQsICJmaWxlOiIgaXMgYXNzdW1lZC4KKyAg
ICogICAgICAgICAgICAgSXQgaXMgZGFuZ2Vyb3VzIHRvIGZlZWQgdW5peCBmaWxlbmFtZXMgaW50
byB0aGlzIGZ1bmN0aW9uLAorICAgKiAgICAgICAgICAgICB0aGlzIHdpbGwgd29yayBtb3N0IG9m
IHRoZSB0aW1lIGJ1dCBub3QgYWx3YXlzLgorICAgKiAgICAgICAgICAgICBGb3IgZXhhbXBsZSAi
L2hvbWUvVG9yYmVuJTIwV2VpcyIgd2lsbCBiZSBjb25zaWRlcmVkIGEgVVJMCisgICAqICAgICAg
ICAgICAgIHBvaW50aW5nIHRvIHRoZSBmaWxlICIvaG9tZS9Ub3JiZW4gV2VpcyIgaW5zdGVhZCBv
ZiB0byB0aGUKKyAgICogICAgICAgICAgICAgZmlsZSAiL2hvbWUvVG9yYmVuJTIwV2VpcyIuCisg
ICAqICAgICAgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgaGF2ZSBhIHVzdWFsIFVOSVgg
bGlrZSBwYXRoIHlvdQorICAgKiAgICAgICAgICAgICBzaG91bGQgbm90IHVzZSB0aGlzIGNvbnN0
cnVjdG9yLgorICAgKiAgICAgICAgICAgICBJbnN0ZWFkIGNyZWF0ZSBhbiBlbXB0eSB1cmwgYW5k
IHNldCB0aGUgcGF0aCBieSB1c2luZworICAgKiAgICAgICAgICAgICBAcmVmIHNldFBhdGgoKS4K
KyAgICogQHBhcmFtIHVyaU1vZGUgTWFudWFsbHkgc3BlY2lmeSB0aGUgVVJJIHByb2Nlc3Npbmcg
bW9kZS4gQnkgZGVmYXVsdCwKKyAgICogICAgICAgICAgICAgdGhpcyBpcyBkZWNpZGVkIGJ5IHRo
ZSBVUkkncyBwcm90b2NvbC4KKyAgICogQHBhcmFtIGVuY29kaW5nX2hpbnQgTUlCIG9mIG9yaWdp
bmFsIGVuY29kaW5nIG9mIFVSTC4KKyAgICogQHNlZSBRVGV4dENvZGVjOjptaWJFbnVtKCkKKyAg
ICogQHNpbmNlIDMuMgorICAgKi8KKyAgS1VSTCggY29uc3QgUVN0cmluZyYgdXJsLCBVUklNb2Rl
IHVyaU1vZGUsIGludCBlbmNvZGluZ19oaW50ID0gMCApOworICAvKioKKyAgICogQ29uc3RydWN0
b3IgdGFraW5nIGEgY2hhciAqIEBwIHVybCwgd2hpY2ggaXMgYW4gX2VuY29kZWRfIHJlcHJlc2Vu
dGF0aW9uCisgICAqIG9mIHRoZSBVUkwsIGV4YWN0bHkgbGlrZSB0aGUgdXN1YWwgY29uc3RydWN0
b3IuIFRoaXMgaXMgdXNlZnVsIHdoZW4KKyAgICogdGhlbiBVUkwsIGluIGl0cyBlbmNvZGVkIGZv
cm0sIGlzIHN0cmljdGx5IGFzY2lpLgorICAgKiBAcGFyYW0gdXJsIEEgZW5jb2RlZCBVUkwuIElm
IHRoZSBVUkwgZG9lcyBub3QgaGF2ZSBhIHByb3RvY29sIHBhcnQsCisgICAqICAgICAgICAgICAg
ImZpbGU6IiBpcyBhc3N1bWVkLgorICAgKiBAcGFyYW0gdXJpTW9kZSBNYW51YWxseSBzcGVjaWZ5
IHRoZSBVUkkgcHJvY2Vzc2luZyBtb2RlLiBCeSBkZWZhdWx0LAorICAgKiAgICAgICAgICAgICB0
aGlzIGlzIGRlY2lkZWQgYnkgdGhlIFVSSSdzIHByb3RvY29sLgorICAgKiBAcGFyYW0gZW5jb2Rp
bmdfaGludCBNSUIgb2Ygb3JpZ2luYWwgZW5jb2Rpbmcgb2YgVVJMLgorICAgKiBAc2VlIFFUZXh0
Q29kZWM6Om1pYkVudW0oKQorICAgKiBAc2luY2UgMy4yCisgICAqLworICBLVVJMKCBjb25zdCBj
aGFyICogdXJsLCBVUklNb2RlIHVyaU1vZGUsIGludCBlbmNvZGluZ19oaW50ID0gMCApOworICAv
KioKKyAgICogQ29uc3RydWN0b3IgdGFraW5nIGEgUUNTdHJpbmcgQHAgdXJsLCB3aGljaCBpcyBh
biBfZW5jb2RlZF8gcmVwcmVzZW50YXRpb24KKyAgICogb2YgdGhlIFVSTCwgZXhhY3RseSBsaWtl
IHRoZSB1c3VhbCBjb25zdHJ1Y3Rvci4gVGhpcyBpcyB1c2VmdWwgd2hlbgorICAgKiB0aGVuIFVS
TCwgaW4gaXRzIGVuY29kZWQgZm9ybSwgaXMgc3RyaWN0bHkgYXNjaWkuCisgICAqIEBwYXJhbSB1
cmwgQSBlbmNvZGVkIFVSTC4gSWYgdGhlIFVSTCBkb2VzIG5vdCBoYXZlIGEgcHJvdG9jb2wgcGFy
dCwKKyAgICogICAgICAgICAgICAiZmlsZToiIGlzIGFzc3VtZWQuCisgICAqIEBwYXJhbSB1cmlN
b2RlIE1hbnVhbGx5IHNwZWNpZnkgdGhlIFVSSSBwcm9jZXNzaW5nIG1vZGUuIEJ5IGRlZmF1bHQs
CisgICAqICAgICAgICAgICAgIHRoaXMgaXMgZGVjaWRlZCBieSB0aGUgVVJJJ3MgcHJvdG9jb2wu
CisgICAqIEBwYXJhbSBlbmNvZGluZ19oaW50IE1JQiBvZiBvcmlnaW5hbCBlbmNvZGluZyBvZiBV
UkwuCisgICAqIEBzZWUgUVRleHRDb2RlYzo6bWliRW51bSgpCisgICAqIEBzaW5jZSAzLjIKKyAg
ICovCisgIEtVUkwoIGNvbnN0IFFDU3RyaW5nJiB1cmwsIFVSSU1vZGUgdXJpTW9kZSwgaW50IGVu
Y29kaW5nX2hpbnQgPSAwICk7CisgIC8vICMjIyBCSUM6IE1lcmdlIHRoZSBhYm92ZSB0aHJlZSBj
b25zdHJ1Y3RvcnMgd2l0aCB0aGUgZmlyc3QgdGhyZWUuCisKKyAgLyoqCiAgICAqIENvcHkgY29u
c3RydWN0b3IuCiAgICAqIEBwYXJhbSB1IHRoZSBLVVJMIHRvIGNvcHkKICAgICovCkBAIC0yMzks
NiArMzE5LDIxIEBAIHB1YmxpYzoKICAgdm9pZCBzZXRQcm90b2NvbCggY29uc3QgUVN0cmluZyYg
X3R4dCApOwogCiAgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBVUkkgcHJvY2Vzc2luZyBtb2RlIGZv
ciB0aGUgVVJMLgorICAgKiBAcmV0dXJuIHRoZSBVUkkgcHJvY2Vzc2luZyBtb2RlIHNldCBmb3Ig
dGhpcyBVUkwuCisgICAqIEBzaW5jZSAzLjIKKyAgICoqLworICBpbnQgdXJpTW9kZSgpIGNvbnN0
OworICAvKioKKyAgICogU2V0cyB0aGUgVVJJIHByb2Nlc3NpbmcgbW9kZSBmb3IgdGhlIFVSTC4g
Tm90ZSB0aGF0IGl0IGlzIG5vdAorICAgKiByZXRyb2FjdGl2ZSAtIG9ubHkgZGF0YSBhZGRlZCB0
byBpdCBhZnRlciB5b3UgY2hhbmdlIHRoZSBVUkkKKyAgICogbW9kZSB3aWxsIGJlIHByb2Nlc3Nl
ZCBhY2NvcmRpbmcgdG8gdGhlIG5ldyBtb2RlLgorICAgKiBAcGFyYW0gbW9kZSB0aGUgbmV3IFVS
SSBwcm9jZXNzaW5nIG1vZGUgZm9yIHRoZSBVUkwuCisgICAqIEBzaW5jZSAzLjIKKyAgICoqLwor
ICB2b2lkIHNldFVSSU1vZGUoVVJJTW9kZSBtb2RlKTsKKworICAvKioKICAgICogUmV0dXJucyB0
aGUgZGVjb2RlZCB1c2VyIG5hbWUgKGxvZ2luLCB1c2VyIGlkLCAuLi4pIGluY2x1ZGVkIGluIHRo
ZSBVUkwuCiAgICAqIEByZXR1cm4gdGhlIHVzZXIgbmFtZSBvciBRU3RyaW5nOjpudWxsIGlmIHRo
ZXJlIGlzIG5vIHVzZXIgbmFtZQogICAgKiovCkBAIC05MDQsNiArOTk5LDEzIEBAIHB1YmxpYzoK
ICAgICovCiAgIHN0YXRpYyBRU3RyaW5nIHJlbGF0aXZlUGF0aChjb25zdCBRU3RyaW5nICZiYXNl
X2RpciwgY29uc3QgUVN0cmluZyAmcGF0aCwgYm9vbCAqaXNQYXJlbnQ9MCk7CiAKKyAgLyoqCisg
ICAqIERldGVybWluZSB3aGljaCBVUkkgbW9kZSBpcyBzdWl0YWJsZSBmb3IgcHJvY2Vzc2luZyBV
UklzIG9mIGEgZ2l2ZW4gcHJvdG9jb2wuCisgICAqIEBwYXJhbSBwcm90b2NvbCBUaGUgcHJvdG9j
b2wgbmFtZS4KKyAgICogQHNpbmNlIDMuMgorICAgKi8KKyAgc3RhdGljIFVSSU1vZGUgdXJpTW9k
ZUZvclByb3RvY29sKGNvbnN0IFFTdHJpbmcmIHByb3RvY29sKTsKKwogI2lmZGVmIEtERV9OT19D
T01QQVQKIHByaXZhdGU6CiAjZW5kaWYKQEAgLTkxNCw3ICsxMDE2LDEwIEBAIHByaXZhdGU6CiAK
IHByb3RlY3RlZDoKICAgdm9pZCByZXNldCgpOwotICB2b2lkIHBhcnNlKCBjb25zdCBRU3RyaW5n
JiBfdXJsLCBpbnQgZW5jb2RpbmdfaGludCA9IDApOworICB2b2lkIHBhcnNlVVJMKCBjb25zdCBR
U3RyaW5nJiBfdXJsLCBpbnQgZW5jb2RpbmdfaGludCA9IDAgKTsKKyAgdm9pZCBwYXJzZVJhd1VS
SSggY29uc3QgUVN0cmluZyYgX3VybCwgaW50IGVuY29kaW5nX2hpbnQgPSAwICk7CisgIHZvaWQg
cGFyc2VNYWlsdG8oIGNvbnN0IFFTdHJpbmcmIF91cmwsIGludCBlbmNvZGluZ19oaW50ID0gMCAp
OworICB2b2lkIHBhcnNlKCBjb25zdCBRU3RyaW5nJiBfdXJsLCBpbnQgZW5jb2RpbmdfaGludCA9
IDAgKTsKIAogcHJpdmF0ZToKICAgdm9pZCBfc2V0UXVlcnkoIGNvbnN0IFFTdHJpbmcmIF90eHQs
IGludCBlbmNvZGluZ19oaW50ID0gMCk7CkluZGV4OiBrZGVjb3JlL3Rlc3RzL2t1cmx0ZXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9rZGVjb3JlL3Rlc3RzL2t1
cmx0ZXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43OApkaWZmIC11IC0zIC1wIC1iIC1C
IC1yMS43OCBrdXJsdGVzdC5jcHAKLS0tIGtkZWNvcmUvdGVzdHMva3VybHRlc3QuY3BwCTIyIE9j
dCAyMDAzIDE1OjUxOjM0IC0wMDAwCTEuNzgKKysrIGtkZWNvcmUvdGVzdHMva3VybHRlc3QuY3Bw
CTExIE5vdiAyMDAzIDE2OjIzOjE2IC0wMDAwCkBAIC02ODIsNiArNjgyLDE3IEBAIGludCBtYWlu
KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAgIGNoZWNrKCJxdWVyeSgpPyIsIGxkYXAucXVlcnko
KSwgIj8/c3ViPyhjbj1LYXJsJTIwTWFyeCkiKTsKICAgY2hlY2soInVybCgpPyIsIGxkYXAudXJs
KCksICJsZGFwOi8vaG9zdC5jb206NjY2Ni9vPVVuaXZlcnNpdHklMjBvZiUyME1pY2hpZ2FuLGM9
VVM/P3N1Yj8oY249S2FybCUyME1hcngpIik7CiAKKyAgLy8gVVJJIE1vZGUgdGVzdHMKKyAgdXJs
MSA9ICJodHRwOi8vd3d3LmZvb2Jhci5jb20vIjsKKyAgY2hlY2soIktVUkwoXCJodHRwOi8vd3d3
LmZvb2Jhci5jb20vXCIpLnVyaU1vZGUoKSIsIFFTdHJpbmc6Om51bWJlcih1cmwxLnVyaU1vZGUo
KSksIFFTdHJpbmc6Om51bWJlcihLVVJMOjpVUkwpKTsKKyAgdXJsMSA9ICJtYWlsdG86dXNlckBo
b3N0LmNvbSI7CisgIGNoZWNrKCJLVVJMKFwibWFpbHRvOnVzZXJAaG9zdC5jb21cIikudXJpTW9k
ZSgpIiwgUVN0cmluZzo6bnVtYmVyKHVybDEudXJpTW9kZSgpKSwgUVN0cmluZzo6bnVtYmVyKEtV
Ukw6Ok1haWx0bykpOworICB1cmwxID0gImRhdGE6dGV4dC9wbGFpbixmb29iYXI/Z2F6b25rPWZs
YXJwIjsKKyAgY2hlY2soIktVUkwoXCJkYXRhOnRleHQvcGxhaW4sZm9vYmFyP2dhem9uaz1mbGFy
cFwiKS51cmlNb2RlKCkiLCBRU3RyaW5nOjpudW1iZXIodXJsMS51cmlNb2RlKCkpLCBRU3RyaW5n
OjpudW1iZXIoS1VSTDo6UmF3VVJJKSk7CisgIGNoZWNrKCJLVVJMKFwiZGF0YTp0ZXh0L3BsYWlu
LGZvb2Jhcj9nYXpvbms9ZmxhcnBcIikucGF0aCgpIiwgdXJsMS5wYXRoKCksICJ0ZXh0L3BsYWlu
LGZvb2Jhcj9nYXpvbms9ZmxhcnAiKTsKKyAgdXJsMSA9ICJtYWlsdG86VXNlckBIb3N0LkNPTT9z
dWJqZWN0PUhlbGxvIjsKKyAgY2hlY2soIktVUkwoXCJtYWlsdG86VXNlckBIb3N0LkNPTT9zdWJq
ZWN0PUhlbGxvXCIpLnBhdGgoKSIsIHVybDEucGF0aCgpLCAiVXNlckBob3N0LmNvbSIpOworCiAg
IHByaW50ZigiXG5UZXN0IE9LICFcbiIpOwogfQogCkluZGV4OiBraW8vZGF0YS5wcm90b2NvbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9rZGUva2RlbGlicy9raW8vZGF0YS5wcm90b2NvbCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXUgLTMgLXAgLWIgLUIgLXIxLjUgZGF0YS5w
cm90b2NvbAotLS0ga2lvL2RhdGEucHJvdG9jb2wJMTcgU2VwIDIwMDMgMTE6MjQ6NDEgLTAwMDAJ
MS41CisrKyBraW8vZGF0YS5wcm90b2NvbAkxMSBOb3YgMjAwMyAxNjoyMzozNSAtMDAwMApAQCAt
OCwzICs4LDQgQEAgQ2xhc3M9OmludGVybmV0CiBEZXNjcmlwdGlvbj1BIGtpb3NsYXZlIGZvciBk
YXRhIFVSSXMgKHJmYzIzOTcpCiBEZXNjcmlwdGlvbltkZV09RWluIFByb3Rva29sbCBmw7xyIGRh
dGEgVVJJcyAocmZjMjM5NykKIERvY1BhdGg9a2lvc2xhdmUvZGF0YS5odG1sCitVUklNb2RlPXJh
d3VyaQpJbmRleDoga2lvL2tpby9rcHJvdG9jb2xpbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2hvbWUva2RlL2tkZWxpYnMva2lvL2tpby9rcHJvdG9jb2xpbmZvLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjcKZGlmZiAtdSAtMyAtcCAtYiAtQiAtcjEuMjcga3Byb3RvY29saW5mby5oCi0t
LSBraW8va2lvL2twcm90b2NvbGluZm8uaAkyNiBPY3QgMjAwMyAyMDo0MjoxNSAtMDAwMAkxLjI3
CisrKyBraW8va2lvL2twcm90b2NvbGluZm8uaAkxMSBOb3YgMjAwMyAxNjoyMzozNiAtMDAwMApA
QCAtNDM0LDYgKzQzNCwyMyBAQCBwdWJsaWM6CiAgICAqLwogICBzdGF0aWMgYm9vbCBzaG93Rmls
ZVByZXZpZXcoIGNvbnN0IFFTdHJpbmcmIHByb3RvY29sICk7CiAKKyAgLyoqCisgICAqIFJldHVy
bnMgdGhlIHN1Z2dlc3RlZCBVUkkgcGFyc2luZyBtb2RlIGZvciB0aGUgS1VSTCBwYXJzZXIuCisg
ICAqCisgICAqIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlICJVUklNb2RlPSIgZmllbGQgaW4gdGhl
IHByb3RvY29sIGRlc2NyaXB0aW9uIGZpbGUuCisgICAqCisgICAqIFRoZSBmb2xsb3dpbmcgcGFy
c2luZyBtb2RlcyBhcmUgZGVmaW5lZDoKKyAgICogQGxpICJ1cmwiIGZvciBhIHN0YW5kYXJkcyBj
b21wbGlhbnQgVVJMCisgICAqIEBsaSAicmF3dXJpIiBmb3IgYSBub24tY29uZm9ybWFudCBVUkkg
Zm9yIHdoaWNoIFVSTCBwYXJzaW5nIHdvdWxkIGJlIG1lYW5pbmdsZXNzCisgICAqIEBsaSAibWFp
bHRvIiBmb3IgYSBtYWlsdG8gc3R5bGUgVVJJICh0aGUgcGF0aCBwYXJ0IGNvbnRhaW5zIG9ubHkg
YW4gZW1haWwgYWRkcmVzcykKKyAgICoKKyAgICogQHBhcmFtIHByb3RvY29sIHRoZSBwcm90b2Nv
bCB0byBjaGVjaworICAgKiBAcmV0dXJuIHRoZSBzdWdnZXN0ZWQgcGFyc2luZyBtb2RlLCBvciBR
U3RyaW5nOjpudWxsIGlmIHVuc3BlY2lmaWVkCisgICAqCisgICAqIEBzaW5jZSAzLjIKKyAgICov
CisgIHN0YXRpYyBRU3RyaW5nIHVyaVBhcnNlTW9kZSggY29uc3QgUVN0cmluZyYgcHJvdG9jb2wg
KTsKKwogcHVibGljOgogICAvLyBJbnRlcm5hbCBmdW5jdGlvbnM6CiAgIC8qKgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3664</attachid>
            <date>2003-12-12 02:06:17 +0000</date>
            <delta_ts>2003-12-12 02:06:17 +0000</delta_ts>
            <desc>KProtocolInfo::uriParseMode default value fix</desc>
            <filename>kprotocolinfo_kdecore.patch</filename>
            <type>text/plain</type>
            <size>690</size>
            <attacher name="Petter Stokke">ummo</attacher>
            
              <data encoding="base64">SW5kZXg6IGtwcm90b2NvbGluZm9fa2RlY29yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hv
bWUva2RlL2tkZWxpYnMva2RlY29yZS9rcHJvdG9jb2xpbmZvX2tkZWNvcmUuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjgKZGlmZiAtdSAtMyAtcCAtYiAtQiAtcjEuOCBrcHJvdG9jb2xpbmZv
X2tkZWNvcmUuY3BwCi0tLSBrcHJvdG9jb2xpbmZvX2tkZWNvcmUuY3BwCTEwIERlYyAyMDAzIDEz
OjU1OjUzIC0wMDAwCTEuOAorKysga3Byb3RvY29saW5mb19rZGVjb3JlLmNwcAkxMiBEZWMgMjAw
MyAwMTowMjowMCAtMDAwMApAQCAtMTA4LDggKzEwOCwxMCBAQCBLUHJvdG9jb2xJbmZvOjpLUHJv
dG9jb2xJbmZvKGNvbnN0IFFTdHJpCiAgICAgIGQtPnVyaU1vZGUgPSBLVVJMOjpSYXdVUkk7CiAg
IGVsc2UgaWYgKHRtcCA9PSAibWFpbHRvIikKICAgICAgZC0+dXJpTW9kZSA9IEtVUkw6Ok1haWx0
bzsKLSAgZWxzZSAKKyAgZWxzZSBpZiAodG1wID09ICJ1cmwiKQogICAgICBkLT51cmlNb2RlID0g
S1VSTDo6VVJMOworICBlbHNlIAorICAgICBkLT51cmlNb2RlID0gS1VSTDo6QXV0bzsKIH0KIAog
S1Byb3RvY29sSW5mbzo6S1Byb3RvY29sSW5mbyggUURhdGFTdHJlYW0mIF9zdHIsIGludCBvZmZz
ZXQpIDoK
</data>

          </attachment>
      

    </bug>

</bugzilla>