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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>119423</bug_id>
          
          <creation_ts>2013-08-01 19:09:48 -0700</creation_ts>
          <short_desc>Improve srcset parser</short_desc>
          <delta_ts>2013-09-17 13:05:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>110252</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Romain Perier">romain.perier</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eoconnor</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
    
    <cc>syoichi</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>yoav</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>913962</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-08-01 19:09:48 -0700</bug_when>
    <thetext>The srcset parser creates intermediate arrays of strings (multiple times). We should make a better parser than walks along the attribute value to extract the candidates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913963</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-08-01 19:09:57 -0700</bug_when>
    <thetext>&lt;rdar://problem/14628284&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913964</commentid>
    <comment_count>2</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-08-01 19:10:22 -0700</bug_when>
    <thetext>Note that the parser is duplicated in the preload scanner and the image element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916398</commentid>
    <comment_count>3</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-08-12 14:14:40 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Note that the parser is duplicated in the preload scanner and the image element.

It&apos;s not duplicated - ignore this. Still needs improvement though :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916407</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-08-12 14:35:11 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Note that the parser is duplicated in the preload scanner and the image element.
&gt; 
&gt; It&apos;s not duplicated - ignore this. Still needs improvement though :)

Romain is getting started on this, he emailed me yesterday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918732</commentid>
    <comment_count>5</comment_count>
      <attachid>209108</attachid>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-08-19 12:24:54 -0700</bug_when>
    <thetext>Created attachment 209108
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918733</commentid>
    <comment_count>6</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-08-19 12:25:29 -0700</bug_when>
    <thetext>See a first proposal in attachment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918964</commentid>
    <comment_count>7</comment_count>
      <attachid>209108</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-08-20 01:22:34 -0700</bug_when>
    <thetext>Comment on attachment 209108
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=209108&amp;action=review

I am going to bed, I&apos;ll finish the review on the next iteration :)

General comments:
-This looks very efficient allocation wise. (did you benchmark it?)
-You should have more variables with better names instead of reusing index and from.
-If you can avoid loading a character twice from memory, that is great.
-We should probably extract the whole parsing code in a static function with a explanative name (parseImagesWithScaleFromSrcsetAttribute()?). That&apos;s usually how we document things in WebKit.

&gt; Source/WebCore/ChangeLog:14
&gt; +        when parsing. That is more efficient on ARM devices and avoids trashing the data cache.

You can probably drop the &quot;on ARM&quot;. I have the feeling this is gonna be faster everywhere.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:325
&gt; +    size_t from = 0;

&quot;from&quot; is a little generic.
What about imageCandidateStringStart?

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:328
&gt;  

Extra space.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:329
&gt; +        if (from &gt;= srcSetAttribute.length())

You could keep srcSetAttribute.length() in a temporary variable outside the loop. This would avoid querying for the string impl for each iterations.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:330
&gt; +            break;

Since this is the only break condition for the loop, why not have while(from &gt;= srcSetAttributeLength)?

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:335
&gt; +        // Collect a sequence of characters that are not space, it&apos;s the url

Missing period.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:340
&gt; +        size_t index = srcSetAttribute.find(isNotHTMLSpace, from);
&gt; +        if (index &gt;= separator) {
&gt; +            from = separator + 1;
&gt;              continue;
&gt; -        if (!data.last().endsWith(&apos;x&apos;))
&gt; +        }

I would start with this, then find the separator.

The reason has to do with how you read the memory:
Let&apos;s say you have &quot;    foo.jpg 2x&quot;. When executing &quot;srcSetAttribute.find(&apos;,&apos;, from)&quot;, you will go over the spaces and find the separator. Then, you execute &quot;srcSetAttribute.find(isNotHTMLSpace, from)&quot; which will read the memory again from the beginning to find the character &apos;f&apos;.

If you inverses the operations. You first skip all the HTMLSpace. Then you never have to go over them again. You take the position you found, and you look for the separator: &quot;srcSetAttribute.find(&apos;,&apos;, index).

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:341
&gt; +        from = index;

index is too generic. The previous &quot;index&quot; is &quot;startOfTheURLString&quot;

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:342
&gt; +        index = srcSetAttribute.find(isHTMLSpace, index);

index -&gt; endOfTheURLString?

You could also imagine doing this before finding the separator (to avoid loading the same characters again from memory).

In that case, &quot;foo,bar.jpg 2x, would parse &quot;foo,bar.jpg&quot; as the URL. I don&apos;t know if that is okay? (hum, do we have tests for that kind of input anyway?)

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:347
&gt; +        size_t url = from, spaceSep = index;

Each statement should get its own line. (WebKit coding style)

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:349
&gt; +        // Collect a sequence of characters that are neither &quot;,&quot; nor space, it&apos;s the descriptor

Missing period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921584</commentid>
    <comment_count>8</comment_count>
      <attachid>209785</attachid>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-08-27 10:23:40 -0700</bug_when>
    <thetext>Created attachment 209785
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921585</commentid>
    <comment_count>9</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-08-27 10:29:25 -0700</bug_when>
    <thetext>This patch should fit your needs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921815</commentid>
    <comment_count>10</comment_count>
      <attachid>209785</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-08-27 20:53:40 -0700</bug_when>
    <thetext>Comment on attachment 209785
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=209785&amp;action=review

I just had a quick look but this seems good.

You need to rebaseline though. The patch does not apply on the bots.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:328
&gt;  

You can remove this space.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:360
&gt; +        imageScaleEnd = (imageScaleEnd == notFound) ? srcSetLen: imageScaleEnd;

missing space before :

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:365
&gt; +            separator = srcSetAttribute.find(&quot;,&quot;, separator + 1);

&quot;,&quot; -&gt; &apos;,&apos;

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:384
&gt; +        image.imageURL = decodeURLEscapeSequences(StringImpl::createWithoutCopying(srcSetAttribute.characters() + imageUrlStart, imageUrlEnd - imageUrlStart));

You could do without the StirngImpl::createWithoutCopying(). It is not gonna be a big deal here to create a single string, and it will be safer not to share the memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922199</commentid>
    <comment_count>11</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-08-28 14:27:49 -0700</bug_when>
    <thetext>Great stuff Romain.

One area I&apos;m especially interested in is data: URLs inside srcset. Ted tells me the spec says that we shouldn&apos;t universally split on commas. I wonder if we need more tests of this. Similarly, the inline URL might be a data: SVG which has inline commas as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922404</commentid>
    <comment_count>12</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-08-29 05:22:40 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Great stuff Romain.
&gt; 
&gt; One area I&apos;m especially interested in is data: URLs inside srcset.
&gt;
Mhhh right


&gt; Ted tells me the spec says that we shouldn&apos;t universally split on commas.

Yes, but you can detect and skip invalid candidates (and switch to another one)

&gt; I wonder if we need more tests of this. Similarly, the inline URL might be a &gt;data: SVG which has inline commas as well.

It&apos;s an issue that I need to resolve, good catch. I will look at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922507</commentid>
    <comment_count>13</comment_count>
    <who name="Theresa O&apos;Connor">eoconnor</who>
    <bug_when>2013-08-29 09:41:08 -0700</bug_when>
    <thetext>If your implementation follows the &quot;Processing the image candidates&quot; algorithm as specified, you won&apos;t have an issue with commas in data URLs.

http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#processing-the-image-candidates
http://www.w3.org/html/wg/drafts/srcset/w3c-srcset/#processing-the-image-candidates</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923652</commentid>
    <comment_count>14</comment_count>
      <attachid>210274</attachid>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-02 03:59:37 -0700</bug_when>
    <thetext>Created attachment 210274
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923653</commentid>
    <comment_count>15</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-02 04:17:57 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Great stuff Romain.
&gt; 
&gt; One area I&apos;m especially interested in is data: URLs inside srcset. Ted tells me the spec says that we shouldn&apos;t universally split on commas. I wonder if we need more tests of this. Similarly, the inline URL might be a data: SVG which has inline commas as well.

Btw, as discussed with Benjamin an SVG might contain commas but also spaces... (the URL delimiter). The parser can handle several commas in the data but not space as it&apos;s the end of the url... (how do you make difference between a normal space and the space delimiter ? And yes I have fallowed the specification)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923704</commentid>
    <comment_count>16</comment_count>
      <attachid>210285</attachid>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-02 07:51:11 -0700</bug_when>
    <thetext>Created attachment 210285
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924230</commentid>
    <comment_count>17</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-09-03 18:19:04 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #11)
&gt; &gt; Great stuff Romain.
&gt; &gt; 
&gt; &gt; One area I&apos;m especially interested in is data: URLs inside srcset. Ted tells me the spec says that we shouldn&apos;t universally split on commas. I wonder if we need more tests of this. Similarly, the inline URL might be a data: SVG which has inline commas as well.
&gt; 
&gt; Btw, as discussed with Benjamin an SVG might contain commas but also spaces... (the URL delimiter). The parser can handle several commas in the data but not space as it&apos;s the end of the url... (how do you make difference between a normal space and the space delimiter ? And yes I have fallowed the specification)

I guess there are limits to what data: content we can put in a srcset attribute without having to escape things. I don&apos; t think we should worry too much about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924232</commentid>
    <comment_count>18</comment_count>
      <attachid>210285</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-09-03 18:28:03 -0700</bug_when>
    <thetext>Comment on attachment 210285
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=210285&amp;action=review

I think this looks almost ready - just some minor comments.

However, the fact that this is custom parsing code makes me nervous. How confident are we that our tests cover all ranges of correct and incorrect input? It would be nice if we had some stress tests for really bad input (e.g. malformed data:, encoded commas, etc).

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:322
&gt; +static void parseImagesWithScaleFromSrcsetAttribute(const String&amp; srcSetAttribute, ImageCandidates&amp; imageCandidates)

I guess for consistency &quot;FromSrcsetAttribute&quot; should be &quot;FromSrcSetAttribute&quot;

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:329
&gt; +        // Collect a sequence of characters that are not space, it&apos;s the url.

I don&apos;t think we need this comment. Or it should be &quot;Find the next non-space character in the attribute.&quot;

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:350
&gt; +        // Collect a sequence of characters that are neither &apos;,&apos; nor space, it&apos;s the descriptor.
&gt; +        size_t imageScaleStart = srcSetAttribute.find(isNotHTMLSpace, imageUrlEnd + 1);

The comment doesn&apos;t match the code. isNotHTMLSpace doesn&apos;t check for &apos;,&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924308</commentid>
    <comment_count>19</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-04 01:09:26 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 210285 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=210285&amp;action=review
&gt; 
&gt; I think this looks almost ready - just some minor comments.
&gt; 
&gt; However, the fact that this is custom parsing code makes me nervous. How confident are we that our tests cover all ranges of correct and incorrect input? 

See fast/hidpi/image-srcset-invalid-inputs.html which contains a various range of invalid cases. However It does not include data: , perhaps I should write a separated unit test for data: (including valid and invalid cases). For valid inputs, we already have several unit tests. I could improve them by adding some weird valid inputs (containing a lot of spaces for example). 

What do you think ?
My implementation follows the specification , the only difference is that it handles better invalid inputs not covered by the
high level algorithm in the spec, nothing more, really :)

&gt; It would be nice if we had some stress tests for really bad input (e.g. malformed data:, encoded commas, etc).
&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:322
&gt; &gt; +static void parseImagesWithScaleFromSrcsetAttribute(const String&amp; srcSetAttribute, ImageCandidates&amp; imageCandidates)
&gt; 
&gt; I guess for consistency &quot;FromSrcsetAttribute&quot; should be &quot;FromSrcSetAttribute&quot;
&gt;

sure

&gt; &gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:329
&gt; &gt; +        // Collect a sequence of characters that are not space, it&apos;s the url.
&gt; 
&gt; I don&apos;t think we need this comment. Or it should be &quot;Find the next non-space character in the attribute.&quot;
&gt; 

This comment is for the block of code which extracts the url, not the for the line

&gt; &gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:350
&gt; &gt; +        // Collect a sequence of characters that are neither &apos;,&apos; nor space, it&apos;s the descriptor.
&gt; &gt; +        size_t imageScaleStart = srcSetAttribute.find(isNotHTMLSpace, imageUrlEnd + 1);
&gt; 
&gt; The comment doesn&apos;t match the code. isNotHTMLSpace doesn&apos;t check for &apos;,&apos;.

Same thing as the previous comment, it is for the block of code which extracts the descriptor, not the for the line.

However if these comments are really useless, I can remove them, sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924450</commentid>
    <comment_count>20</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-04 08:47:02 -0700</bug_when>
    <thetext>For really bad inputs I have something like the following test in mind:

&lt;html&gt;
&lt;head&gt;
&lt;script src=&quot;resources/srcset-helper.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;

&lt;body id=&quot;body&quot;&gt;
    &lt;div&gt;This test passes if this img tag below is empty and displays nothing. It ensures that the srcset attribute supports invalid inputs&lt;/div&gt;
    &lt;img height=&quot;100&quot; width=&quot;100&quot; src=&quot;&quot; srcset=&quot;1x,,  ,   x    ,2x  , foo.jpg, 3x, bar.jpg 4x 100h, foo.jpg 5, bar.jpg dx,foo.jpg,bar.jpg, data:image/png;base64,ThisIsAMalFormedData%/,withForbidden,Characters:!?~&amp;#&apos;) 6x, data: 7x, data:;charset= 8x, data:;charset=us-ASCII 9x, data:,BadData 10x, data:foo/bar,foobar 11x, data:foo/bar, 12x&quot;&gt;&lt;/img&gt;
&lt;/body&gt;
&lt;/html&gt;


The test passes. I can improve tests for valid inputs by adding some weird cases for data:URL , but nothing more (I have no other ideas)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924639</commentid>
    <comment_count>21</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-04 15:15:50 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (From update of attachment 210285 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=210285&amp;action=review
&gt; &gt; 
&gt; &gt; I think this looks almost ready - just some minor comments.
&gt; &gt; 
&gt; &gt; However, the fact that this is custom parsing code makes me nervous. How confident are we that our tests cover all ranges of correct and incorrect input? 
&gt; 
&gt; See fast/hidpi/image-srcset-invalid-inputs.html which contains a various range of invalid cases. However It does not include data: , perhaps I should write a separated unit test for data: (including valid and invalid cases). For valid inputs, we already have several unit tests. I could improve them by adding some weird valid inputs (containing a lot of spaces for example). 
&gt; 
&gt; What do you think ?

New separate test for data is a good idea.
Probably at least 2 tests, one for various valid input, and one for bad input.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924651</commentid>
    <comment_count>22</comment_count>
      <attachid>210285</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-04 15:44:13 -0700</bug_when>
    <thetext>Comment on attachment 210285
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=210285&amp;action=review

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:325
&gt; +    unsigned srcSetLen = srcSetAttribute.length();

Len -&gt; Length

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:328
&gt;  

Blank line here.

&gt;&gt;&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:329
&gt;&gt;&gt; +        // Collect a sequence of characters that are not space, it&apos;s the url.
&gt;&gt; 
&gt;&gt; I don&apos;t think we need this comment. Or it should be &quot;Find the next non-space character in the attribute.&quot;
&gt; 
&gt; This comment is for the block of code which extracts the url, not the for the line

I think it is great to use spec text as comments. You should have &quot;5.&quot; in front to make it more obvious.

You could also have a comment linking the spec before the algorithm.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:330
&gt; +        size_t imageUrlStart = srcSetAttribute.find(isNotHTMLSpace, imageCandidateStart);

&quot;4. Splitting loop: Skip whitespace.&quot;?

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:333
&gt; +            imageCandidateStart = srcSetLen;
&gt;              continue;

Shouldn&apos;t you just break here and be done with it?
Here all you will have is imageCandidateStart = srcSetLen, go back to the branch (imageCandidateStart &lt; srcSetLen) and exit the loop.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:338
&gt; +        if (srcSetAttribute[imageUrlStart] == &apos;,&apos;) {
&gt; +            imageCandidateStart = imageUrlStart + 1;
&gt;              continue;
&gt; +        }

Which cases does this cover?
The spec says &quot;Collect a sequence of characters that are not space characters, and let that be url.&quot;, so it is not clear why the initial comma would not be part of the URL.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:342
&gt; +            imageCandidateStart = srcSetLen;
&gt; +            continue;

&quot;break&quot;?

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:347
&gt; +        if (srcSetAttribute[imageUrlEnd - 1] == &apos;,&apos;) {
&gt; +            imageCandidateStart = imageUrlEnd;
&gt; +            continue;
&gt; +        }

An empty descriptor should still get the URL in the raw candidates.
The density would default to 1.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:349
&gt; +        // Collect a sequence of characters that are neither &apos;,&apos; nor space, it&apos;s the descriptor.

7.


Gotta go, I&apos;ll finish the review on the next iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924961</commentid>
    <comment_count>23</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-05 04:15:48 -0700</bug_when>
    <thetext>Rapid reply

(In reply to comment #22)
&gt; (From update of attachment 210285 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=210285&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:325
&gt; &gt; +    unsigned srcSetLen = srcSetAttribute.length();
&gt; 
&gt; Len -&gt; Length
&gt; 

OK


&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:329
&gt; &gt;&gt;&gt; +        // Collect a sequence of characters that are not space, it&apos;s the url.
&gt; &gt;&gt; 
&gt; &gt;&gt; I don&apos;t think we need this comment. Or it should be &quot;Find the next non-space character in the attribute.&quot;
&gt; &gt; 
&gt; &gt; This comment is for the block of code which extracts the url, not the for the line
&gt; 
&gt; I think it is great to use spec text as comments. You should have &quot;5.&quot; in front to make it more obvious.
&gt; 
&gt; You could also have a comment linking the spec before the algorithm.

Yep, I agree. Good idea.

&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:330
&gt; &gt; +        size_t imageUrlStart = srcSetAttribute.find(isNotHTMLSpace, imageCandidateStart);
&gt; 
&gt; &quot;4. Splitting loop: Skip whitespace.&quot;?

+1

&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:333
&gt; &gt; +            imageCandidateStart = srcSetLen;
&gt; &gt;              continue;
&gt; 

Right, good catch !

&gt; Shouldn&apos;t you just break here and be done with it?
&gt; Here all you will have is imageCandidateStart = srcSetLen, go back to the branch (imageCandidateStart &lt; srcSetLen) and exit the loop.
&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:338
&gt; &gt; +        if (srcSetAttribute[imageUrlStart] == &apos;,&apos;) {
&gt; &gt; +            imageCandidateStart = imageUrlStart + 1;
&gt; &gt;              continue;
&gt; &gt; +        }
&gt; 
&gt; Which cases does this cover?
&gt; The spec says &quot;Collect a sequence of characters that are not space characters, and let that be url.&quot;, so it is not clear why the initial comma would not be part of the URL.

It covers this case srcset=&quot;foo.jpg 1x,, bar.jpg 2x&quot;,  or this one srcset=&quot;foo.jpg,          , bar.jpg 2x&quot;
If the current candidate does not contain letters (!= space) , the first match will be a comma... if we don&apos;t do this step, the next url might be &quot;,&quot; or even weird &quot;,bar.jpg&quot; (if the next element does not begin with a space).

&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:342
&gt; &gt; +            imageCandidateStart = srcSetLen;
&gt; &gt; +            continue;
&gt; 
&gt; &quot;break&quot;?

+1

&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:347
&gt; &gt; +        if (srcSetAttribute[imageUrlEnd - 1] == &apos;,&apos;) {
&gt; &gt; +            imageCandidateStart = imageUrlEnd;
&gt; &gt; +            continue;
&gt; &gt; +        }
&gt; 
&gt; An empty descriptor should still get the URL in the raw candidates.
&gt; The density would default to 1.

Have a look at the current parsing algorithm in the repository. It skips the current candidate if this one does not include a descriptor. I just wanted to avoid a regression.
What do we do for this case ? 1. We follow the spec,  2. We suppose that implicit descriptor is a bad idea because it might be misunderstood by the web developer, it would be better to only accept explicit descriptors.
As srcset might be a cross-browser feature, this is probably better to choose 1, imho.  Benjamin ? Dean ? opinion ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925110</commentid>
    <comment_count>24</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-05 10:27:50 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; &gt; &gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:347
&gt; &gt; &gt; +        if (srcSetAttribute[imageUrlEnd - 1] == &apos;,&apos;) {
&gt; &gt; &gt; +            imageCandidateStart = imageUrlEnd;
&gt; &gt; &gt; +            continue;
&gt; &gt; &gt; +        }
&gt; &gt; 
&gt; &gt; An empty descriptor should still get the URL in the raw candidates.
&gt; &gt; The density would default to 1.
&gt; 
&gt; Have a look at the current parsing algorithm in the repository. It skips the current candidate if this one does not include a descriptor. I just wanted to avoid a regression.
&gt; What do we do for this case ? 1. We follow the spec,  2. We suppose that implicit descriptor is a bad idea because it might be misunderstood by the web developer, it would be better to only accept explicit descriptors.
&gt; As srcset might be a cross-browser feature, this is probably better to choose 1, imho.  Benjamin ? Dean ? opinion ?

It is better to follow the spec.
This is still an experimental feature. It is not a problem changing the behavior and updating the tests accordingly.

Supporting candidates without descriptor seems like a sensible choice. I could see people ignoring &quot;src&quot; entirely and writing this kind of declaration:
    &lt;img srcset=&quot;regular.png, highres.png 2x&quot;&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927255</commentid>
    <comment_count>25</comment_count>
      <attachid>211189</attachid>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-10 04:20:49 -0700</bug_when>
    <thetext>Created attachment 211189
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927256</commentid>
    <comment_count>26</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-10 04:23:47 -0700</bug_when>
    <thetext>See the new patch in attachment:

1. I have improved tests
2. I have added new ones (for data uri schemes)
3. I have fixed what was wrong</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927444</commentid>
    <comment_count>27</comment_count>
      <attachid>211229</attachid>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-10 13:05:41 -0700</bug_when>
    <thetext>Created attachment 211229
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927447</commentid>
    <comment_count>28</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-10 13:07:18 -0700</bug_when>
    <thetext>Rebased with latest commits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928124</commentid>
    <comment_count>29</comment_count>
      <attachid>211229</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-11 20:52:22 -0700</bug_when>
    <thetext>Comment on attachment 211229
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=211229&amp;action=review

This looks great. Some nitpick bellow.

Let&apos;s iterate on this quickly so you can move on.

&gt; Source/WebCore/ChangeLog:7
&gt; +

You also updated the behaviors to follow the spec regarding data URLs. You should mention the behavior change in the description.

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests, covered by existing tests.

This is no longer true.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:323
&gt; +// http://www.w3.org/html/wg/drafts/srcset/w3c-srcset/Overview.html#processing-the-image-candidates

Draft change by definition.
IMHO, it is good to link the published version with a date: http://www.w3.org/TR/2013/WD-html-srcset-20130228/#processing-the-image-candidates

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:324
&gt; +// Note: Some items in comments below make reference to the spec (prefixed by numbers).

You don&apos;t need this line, that is common enough in WebKit.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:334
&gt; +        // 5. Collect a sequence of characters that are not space characters, and let that be url.

This should be moved to #344 now.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:336
&gt; +        size_t imageUrlStart = srcSetAttribute.find(isNotHTMLSpace, imageCandidateStart); // 4. Splitting loop: Skip whitespace.

Move the comment above the block.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:343
&gt; +        // If The current candidate is either totally empty or only contains space, skipping.
&gt; +        if (srcSetAttribute[imageUrlStart] == &apos;,&apos;) {
&gt; +            imageCandidateStart = imageUrlStart + 1;
&gt;              continue;
&gt; +        }

I kind of agree with your reasoning here. It is probably worth mailing the standard group to have this clarified in the spec.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:344
&gt; +        size_t imageUrlEnd = srcSetAttribute.find(isHTMLSpace, imageUrlStart + 1);

The comment 5. would be good here.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:346
&gt; +        if (imageUrlEnd == notFound)
&gt; +            break;

Not sure I agree with this.
if you have srcset=&quot;   foobar.jpg&quot;, you would fail here.

Is there a test covering such case?

(*)

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:349
&gt; +            imageUrlEnd--;

--imageUrlEnd; usually in WebKit.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:354
&gt; +
&gt; +            // 7. Collect a sequence of characters that are not &quot;,&quot; (U+002C) characters, and let that be descriptors.
&gt; +

You can remove the blank lines above and above and bellow the comment.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:357
&gt; +            size_t imageScaleStart = srcSetAttribute.find(isNotHTMLSpace, imageUrlEnd + 1);
&gt; +            if (imageScaleStart == notFound)
&gt; +                break;

Same as for (*), I am not sure about this.
You could have srcset=&quot;   foobar.jpg   &quot;
Again, do we have tests for this?

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:365
&gt; +                // Be sure that there are no other descriptors.

Be sure that -&gt; Make sure there are no...

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:367
&gt; +                while ((separator &lt; srcSetLength - 1) &amp;&amp; isHTMLSpace(srcSetAttribute[separator]))
&gt; +                    separator++;

I think this may be abusing the separator variable. I would use an other variable and assign it to separator once you found a comma.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:368
&gt; +                if ((separator &lt; srcSetLength - 1) &amp;&amp; srcSetAttribute[separator] != &apos;,&apos;) {

I would add a comment explaining this failure case.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:371
&gt; +                        separator = srcSetLength;

break?

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:381
&gt; +                imgScaleFactor = charactersToFloat(srcSetAttribute.characters() + imageScaleStart, imageScaleEnd - imageScaleStart - 1, &amp;validScaleFactor);

The -1 is not obvious here.
To explain it, you can just add more temporary variables. E.g.:
size_t scaleFactorStringLength = imageScaleEnd - imageScaleStart;
size_t scaleFactorStringLengthWithoutUnit = scaleFactorStringLength - 1;
imgScaleFactor = charactersToFloat(srcSetAttribute.characters() + imageScaleStart, scaleFactorStringLengthWithoutUnit, &amp;validScaleFactor);

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:390
&gt; -        image.imageURL = decodeURLEscapeSequences(data[0]);
&gt; +        image.imageURL = decodeURLEscapeSequences(StringImpl::createWithoutCopying(srcSetAttribute.characters() + imageUrlStart, imageUrlEnd - imageUrlStart));

I feel like you mentioned why createWithoutCopying is safe here but I forgot. Could you explain again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928764</commentid>
    <comment_count>30</comment_count>
      <attachid>211535</attachid>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-13 04:27:49 -0700</bug_when>
    <thetext>Created attachment 211535
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928784</commentid>
    <comment_count>31</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-13 05:19:15 -0700</bug_when>
    <thetext>Everything should be fixed.
 
&gt; I feel like you mentioned why createWithoutCopying is safe here but I forgot. Could you explain again?

That&apos;s simple:
- StringImpl:createWithoutCopying() creates a StringImpl which shares the same buffer as srcsetAttribute
- String is created on the fly from the StringImpl object, it will delegate string features to it and share the same buffer, as well
- decodeURLEscapeSequences returns a copy of the input String in all cases.

So the resulting image.imageURL is a copy and does not share memory :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928998</commentid>
    <comment_count>32</comment_count>
    <who name="Yoav Weiss">yoav</who>
    <bug_when>2013-09-13 13:51:00 -0700</bug_when>
    <thetext>There&apos;s no need to decodeURLEscapeSequences() the output URL. Data URIs work fine with the new spec-compliant parser (which splits the attribute value according to white spaces, rather than commas)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929000</commentid>
    <comment_count>33</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-13 13:53:49 -0700</bug_when>
    <thetext>The question being do we need to support escaped data:URLs or not , I would say yes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929007</commentid>
    <comment_count>34</comment_count>
    <who name="Yoav Weiss">yoav</who>
    <bug_when>2013-09-13 14:13:05 -0700</bug_when>
    <thetext>&gt; The question being do we need to support escaped data:URLs or not , I would say yes

Escaped data URIs don&apos;t seem to be supported on src on neither Blink nor Gecko.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930040</commentid>
    <comment_count>35</comment_count>
      <attachid>211535</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-16 21:07:31 -0700</bug_when>
    <thetext>Comment on attachment 211535
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=211535&amp;action=review

This looks great. Some minor comments bellow.

Can you please also add tests for a srcset descriptor with spaces around (if there is no such test yet). Something like srcset=&quot;    foobar.jpg&quot;, srcset=&quot;fobar.jpg    &quot; and srcset=&quot;   foobar.jpg   &quot;. (+ the variations with a scale factor if needed).

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:361
&gt; +                size_t comma = imageScaleEnd;

comma -&gt; commaPosition

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:362
&gt; +                // Make sure there are no other descriptors

Missing period.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.cpp:391
&gt; +        image.imageURL = decodeURLEscapeSequences(StringImpl::createWithoutCopying(srcSetAttribute.characters() + imageUrlStart, imageUrlEnd - imageUrlStart));

Please check decodeURLEscapeSequences and do a follow up if the current behavior is erroneous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930237</commentid>
    <comment_count>36</comment_count>
      <attachid>211910</attachid>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-17 08:37:26 -0700</bug_when>
    <thetext>Created attachment 211910
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930238</commentid>
    <comment_count>37</comment_count>
    <who name="Romain Perier">romain.perier</who>
    <bug_when>2013-09-17 08:44:40 -0700</bug_when>
    <thetext>As discussed together, see the spec for data:URLs with escaped characters http://tools.ietf.org/html/rfc2397  (sorry this is the only document I found...).


Also I tested the following example with different browsers:
&quot;
&lt;html&gt;
&lt;img 
src=&quot;data:image/svg+xml,&lt;svg%20xmlns=&apos;http://www.w3.org/2000/svg&apos;%20width=&apos;100&apos;%20height=&apos;100&apos;&gt;&lt;linearGradient%20id=&apos;gradient&apos;&gt;&lt;stop%20offset=&apos;10%&apos;%20stop-color=&apos;#F00&apos;/&gt;&lt;stop%20offset=&apos;90%&apos;%20stop-color=&apos;#fcc&apos;/&gt;&lt;/linearGradient&gt;
&lt;rect%20fill=&apos;url(#gradient)&apos;%20x=&apos;0&apos;%20y=&apos;0&apos;%20width=&apos;100%&apos;%20height=&apos;100%&apos;/&gt;&lt;/svg&gt;&quot;/&gt;
&lt;/html&gt;
&quot;

Results:
1. It works with chromium/blink 29
2. It does not work with firefox 23/24
3. It does not work with IE 10

I think we should support this feature for src and srcset attributes. Also, as it&apos;s not syntaxically possible to support plain/text svgs in data:URLs (a svg contains space, and space is a delimiter for URLs), escaping spaces would be a good solution, imho.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930355</commentid>
    <comment_count>38</comment_count>
      <attachid>211910</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-17 13:05:43 -0700</bug_when>
    <thetext>Comment on attachment 211910
Patch

Clearing flags on attachment: 211910

Committed r155988: &lt;http://trac.webkit.org/changeset/155988&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>930356</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-17 13:05:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209108</attachid>
            <date>2013-08-19 12:24:54 -0700</date>
            <delta_ts>2013-08-27 10:23:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119423-20130819212452.patch</filename>
            <type>text/plain</type>
            <size>4774</size>
            <attacher name="Romain Perier">romain.perier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzOTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWVhY2I2MmFiNWIzNmU1
NmIwNmFlYjQ2YTAxOTYxYjM5NDI3NGVlMS4uMmE5OTkwZTQ5NTcyZDRiMDk0NmI3YTlkNTVlMDg5
N2U0OTZlYmFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEzLTA4LTE5ICBSb21h
aW4gUGVyaWVyICA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisKKyAgICAgICAgSW1wcm92ZSBz
cmNzZXQgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTk0MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
SFRNTFNwYWNlT3JDb21tYSk6IEFkZCBhIG5ldyBwcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCBieSBT
dHJpbmc6OmZpbmQoKQorICAgICAgICB0byBnZXQgdGhlIGZpcnN0IHNwYWNlIG9yIGNvbW1hIGNo
YXJhY3RlciBmcm9tIHRoZSBpbnB1dCBzdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpiZXN0Rml0
U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKTogUmVtb3ZlIGludGVybWVkaWF0ZSBhcnJheXMgb2Yg
c3RyaW5nCisgICAgICAgIHdoZW4gcGFyc2luZy4gVGhhdCBpcyBtb3JlIGVmZmljaWVudCBvbiBB
Uk0gZGV2aWNlcyBhbmQgYXZvaWRzIHRyYXNoaW5nIHRoZSBkYXRhIGNhY2hlLgorICAgICAgICBU
aGUgcGFyc2VyIG5vdyB3YWxrcyBhbG9uZyB0aGUgYXR0cmlidXRlIHZhbHVlIGFuZCBleHRyYWN0
cyB0aGUgY2FuZGlkYXRlcyBkaXJlY3RseQorCiAyMDEzLTA4LTA5ICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoIGluIGNvbS5hcHBsZS5XZWJLaXQuV2Vi
Q29udGVudCBhdCBjb20uYXBwbGUuTWVkaWFUb29sYm94LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAppbmRleCBhMTc4ZTM5NmI0Y2FlMzlhODI1
NDY1YmEwZTIzZWQzYjFiNTBmMDA4Li43NzBhY2NlYTM2YzMxNWY4YmJjYzNlMTNhZjBmMTg3Nzkx
YzE1NjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2Vy
SWRpb21zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRp
b21zLmNwcApAQCAtMzE0LDM4ICszMTQsNjQgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVC
eVNjYWxlRmFjdG9yKGNvbnN0IEltYWdlV2l0aFNjYWxlJiBmaXJzdCwgY29uc3QgSW1hZ2UKICAg
ICByZXR1cm4gZmlyc3Quc2NhbGVGYWN0b3IgPCBzZWNvbmQuc2NhbGVGYWN0b3I7CiB9CiAKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc0hUTUxTcGFjZU9yQ29tbWEoVUNoYXIgY2hhcmFjdGVyKQorewor
ICAgIHJldHVybiBpc0hUTUxTcGFjZShjaGFyYWN0ZXIpIHx8IGNoYXJhY3RlciA9PSAnLCc7Cit9
CisKIFN0cmluZyBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yLCBjb25zdCBTdHJpbmcmIHNyY0F0dHJpYnV0ZSwgY29uc3QgU3RyaW5nJiBzcmNT
ZXRBdHRyaWJ1dGUpCiB7CiAgICAgSW1hZ2VDYW5kaWRhdGVzIGltYWdlQ2FuZGlkYXRlczsKKyAg
ICBzaXplX3QgZnJvbSA9IDA7CiAKLSAgICBjb25zdCBTdHJpbmcgc3JjU2V0QXR0cmlidXRlVmFs
dWUgPSBzcmNTZXRBdHRyaWJ1dGUuc2ltcGxpZnlXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKTsKLSAg
ICBWZWN0b3I8U3RyaW5nPiBzcmNTZXRUb2tlbnM7Ci0KLSAgICBzcmNTZXRBdHRyaWJ1dGVWYWx1
ZS5zcGxpdCgnLCcsIHNyY1NldFRva2Vucyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
cmNTZXRUb2tlbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gZGF0YTsK
LSAgICAgICAgZmxvYXQgaW1nU2NhbGVGYWN0b3IgPSAxLjA7Ci0gICAgICAgIGJvb2wgdmFsaWRT
Y2FsZUZhY3RvciA9IGZhbHNlOworICAgIHdoaWxlICh0cnVlKSB7CiAKLSAgICAgICAgc3JjU2V0
VG9rZW5zW2ldLnN0cmlwV2hpdGVTcGFjZSgpLnNwbGl0KCcgJywgZGF0YSk7Ci0gICAgICAgIC8v
IFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGNhbmRpZGF0ZSBkZXNjcmlwdG9yLCBhbmQgdGhl
IGxhc3Qgb25lIG11c3QKLSAgICAgICAgLy8gYmUgYSBzY2FsZSBmYWN0b3IuIFNpbmNlIHdlIGRv
bid0IHN1cHBvcnQgZGVzY3JpcHRvcnMgb3RoZXIgdGhhbiBzY2FsZSwKLSAgICAgICAgLy8gaXQn
cyBiZXR0ZXIgdG8gZGlzY2FyZCBhbnkgcnVsZSB3aXRoIHN1Y2ggZGVzY3JpcHRvcnMgcmF0aGVy
IHRoYW4gYWNjZXB0Ci0gICAgICAgIC8vIG9ubHkgdGhlIHNjYWxlIGRhdGEuCi0gICAgICAgIGlm
IChkYXRhLnNpemUoKSAhPSAyKQorICAgICAgICBpZiAoZnJvbSA+PSBzcmNTZXRBdHRyaWJ1dGUu
bGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc2l6ZV90IHNlcGFyYXRvciA9
IHNyY1NldEF0dHJpYnV0ZS5maW5kKCcsJywgZnJvbSk7CisgICAgICAgIGlmIChzZXBhcmF0b3Ig
PT0gbm90Rm91bmQpCisgICAgICAgICAgICBzZXBhcmF0b3IgPSBzcmNTZXRBdHRyaWJ1dGUubGVu
Z3RoKCkgLSAxOworCisgICAgICAgIC8vIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJz
IHRoYXQgYXJlIG5vdCBzcGFjZSwgaXQncyB0aGUgdXJsCisgICAgICAgIHNpemVfdCBpbmRleCA9
IHNyY1NldEF0dHJpYnV0ZS5maW5kKGlzTm90SFRNTFNwYWNlLCBmcm9tKTsKKyAgICAgICAgaWYg
KGluZGV4ID49IHNlcGFyYXRvcikgeworICAgICAgICAgICAgZnJvbSA9IHNlcGFyYXRvciArIDE7
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFkYXRhLmxhc3QoKS5lbmRzV2l0
aCgneCcpKQorICAgICAgICB9CisgICAgICAgIGZyb20gPSBpbmRleDsKKyAgICAgICAgaW5kZXgg
PSBzcmNTZXRBdHRyaWJ1dGUuZmluZChpc0hUTUxTcGFjZSwgaW5kZXgpOworICAgICAgICBpZiAo
aW5kZXggPiBzZXBhcmF0b3IpIHsKKyAgICAgICAgICAgIGZyb20gPSBzZXBhcmF0b3IgKyAxOwog
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaW1nU2NhbGVGYWN0b3IgPSBkYXRhLmxh
c3QoKS5zdWJzdHJpbmcoMCwgZGF0YS5sYXN0KCkubGVuZ3RoKCkgLSAxKS50b0Zsb2F0KCZ2YWxp
ZFNjYWxlRmFjdG9yKTsKLSAgICAgICAgaWYgKCF2YWxpZFNjYWxlRmFjdG9yKQorICAgICAgICB9
CisgICAgICAgIHNpemVfdCB1cmwgPSBmcm9tLCBzcGFjZVNlcCA9IGluZGV4OworCisgICAgICAg
IC8vIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5laXRoZXIgIiwi
IG5vciBzcGFjZSwgaXQncyB0aGUgZGVzY3JpcHRvcgorICAgICAgICBmcm9tID0gc3JjU2V0QXR0
cmlidXRlLmZpbmQoaXNOb3RIVE1MU3BhY2UsIGluZGV4KTsKKyAgICAgICAgaW5kZXggPSBzcmNT
ZXRBdHRyaWJ1dGUuZmluZChpc0hUTUxTcGFjZU9yQ29tbWEsIGZyb20pOworICAgICAgICBpZiAo
aW5kZXggPT0gbm90Rm91bmQpCisgICAgICAgICAgICBpbmRleCA9IHNyY1NldEF0dHJpYnV0ZS5s
ZW5ndGgoKTsKKyAgICAgICAgZWxzZSBpZiAoaW5kZXggIT0gbm90Rm91bmQgJiYgaW5kZXggPiBz
ZXBhcmF0b3IpIHsKKyAgICAgICAgICAgIGZyb20gPSBzZXBhcmF0b3IgKyAxOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY1NldEF0dHJpYnV0ZVtpbmRl
eCAtIDFdICE9ICd4JykgeworICAgICAgICAgICAgZnJvbSA9IHNlcGFyYXRvciArIDE7CiAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIHZhbGlkU2NhbGVGYWN0
b3IgPSBmYWxzZTsKKyAgICAgICAgZmxvYXQgaW1nU2NhbGVGYWN0b3IgPSBjaGFyYWN0ZXJzVG9G
bG9hdChzcmNTZXRBdHRyaWJ1dGUuY2hhcmFjdGVycygpICsgZnJvbSwgaW5kZXggLSBmcm9tIC0g
MSwgJnZhbGlkU2NhbGVGYWN0b3IpOwogCisgICAgICAgIGlmICghdmFsaWRTY2FsZUZhY3Rvcikg
eworICAgICAgICAgICAgZnJvbSA9IHNlcGFyYXRvciArIDE7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQogICAgICAgICBJbWFnZVdpdGhTY2FsZSBpbWFnZTsKLSAgICAgICAgaW1h
Z2UuaW1hZ2VVUkwgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YVswXSk7CisgICAgICAg
IGltYWdlLmltYWdlVVJMID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKFN0cmluZ0ltcGw6OmNy
ZWF0ZVdpdGhvdXRDb3B5aW5nKHNyY1NldEF0dHJpYnV0ZS5jaGFyYWN0ZXJzKCkgKyB1cmwsIHNw
YWNlU2VwIC0gdXJsKSk7CiAgICAgICAgIGltYWdlLnNjYWxlRmFjdG9yID0gaW1nU2NhbGVGYWN0
b3I7CiAKICAgICAgICAgaW1hZ2VDYW5kaWRhdGVzLmFwcGVuZChpbWFnZSk7CisgICAgICAgIGZy
b20gPSBzZXBhcmF0b3IgKyAxOwogICAgIH0KIAogICAgIGNvbnN0IFN0cmluZyBzcmMgPSAgc3Jj
QXR0cmlidXRlLnNpbXBsaWZ5V2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209785</attachid>
            <date>2013-08-27 10:23:40 -0700</date>
            <delta_ts>2013-09-02 03:59:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119423-20130827192339.patch</filename>
            <type>text/plain</type>
            <size>8012</size>
            <attacher name="Romain Perier">romain.perier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzOTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWVhY2I2MmFiNWIzNmU1
NmIwNmFlYjQ2YTAxOTYxYjM5NDI3NGVlMS4uMDc4OGVjYTMzYTAyNzdhM2NjZmY3OWVmZWFmZDM0
ZWIxMzY4ZjQzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEzLTA4LTE5ICBSb21h
aW4gUGVyaWVyICA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisKKyAgICAgICAgSW1wcm92ZSBz
cmNzZXQgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTk0MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
SFRNTFNwYWNlT3JDb21tYSk6IEFkZCBhIG5ldyBwcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCBieSBT
dHJpbmc6OmZpbmQoKQorICAgICAgICB0byBnZXQgdGhlIGZpcnN0IHNwYWNlIG9yIGNvbW1hIGNo
YXJhY3RlciBmcm9tIHRoZSBpbnB1dCBzdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUlt
YWdlc1dpdGhTY2FsZUZyb21TcmNzZXRBdHRyaWJ1dGUpOiBBZGQgYSBuZXcgc3RhdGljIGZ1bmN0
aW9uIHRvIHBhcnNlCisgICAgICAgIGFuZCBleHRyYWN0IGltYWdlcyB3aXRoIHNjYWxlIGZyb20g
dGhlIHNyY3NldCBhdHRyaWJ1dGUuIEFsbCB2YWxpZCBjYW5kaWRhdGVzIGFyZQorICAgICAgICBy
ZXR1cm5lZCB0byB0aGUgY2FsbGVyIHRocm91Z2ggYSBsaXN0LgorICAgICAgICAoV2ViQ29yZTo6
YmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyk6IFJlbW92ZSBpbnRlcm1lZGlhdGUgYXJy
YXlzIG9mIHN0cmluZworICAgICAgICB3aGVuIHBhcnNpbmcuIFRoYXQgaXMgbW9yZSBlZmZpY2ll
bnQgYW5kIGF2b2lkcyB0cmFzaGluZyB0aGUgZGF0YSBjYWNoZS4KKyAgICAgICAgVGhlIHBhcnNl
ciBub3cgd2Fsa3MgYWxvbmcgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhbmQgZXh0cmFjdHMgdGhlIGNh
bmRpZGF0ZXMgZGlyZWN0bHkKKwogMjAxMy0wOC0wOSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFw
cGxlLmNvbT4KIAogICAgICAgICBDcmFzaCBpbiBjb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQg
YXQgY29tLmFwcGxlLk1lZGlhVG9vbGJveC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKaW5kZXggYTE3OGUzOTZiNGNhZTM5YTgyNTQ2NWJhMGUy
M2VkM2IxYjUwZjAwOC4uN2VhNzY2OTBmMTQzYmExOTI4ZmY2MmI4YTAzOGE2YWEyNDRiNTIzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAK
QEAgLTMxNCwzOSArMzE0LDg2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlQnlTY2FsZUZh
Y3Rvcihjb25zdCBJbWFnZVdpdGhTY2FsZSYgZmlyc3QsIGNvbnN0IEltYWdlCiAgICAgcmV0dXJu
IGZpcnN0LnNjYWxlRmFjdG9yIDwgc2Vjb25kLnNjYWxlRmFjdG9yOwogfQogCi1TdHJpbmcgYmVz
dEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29u
c3QgU3RyaW5nJiBzcmNBdHRyaWJ1dGUsIGNvbnN0IFN0cmluZyYgc3JjU2V0QXR0cmlidXRlKQor
c3RhdGljIGlubGluZSBib29sIGlzSFRNTFNwYWNlT3JDb21tYShVQ2hhciBjaGFyYWN0ZXIpCiB7
Ci0gICAgSW1hZ2VDYW5kaWRhdGVzIGltYWdlQ2FuZGlkYXRlczsKKyAgICByZXR1cm4gaXNIVE1M
U3BhY2UoY2hhcmFjdGVyKSB8fCBjaGFyYWN0ZXIgPT0gJywnOworfQogCi0gICAgY29uc3QgU3Ry
aW5nIHNyY1NldEF0dHJpYnV0ZVZhbHVlID0gc3JjU2V0QXR0cmlidXRlLnNpbXBsaWZ5V2hpdGVT
cGFjZShpc0hUTUxTcGFjZSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gc3JjU2V0VG9rZW5zOworc3Rh
dGljIHZvaWQgcGFyc2VJbWFnZXNXaXRoU2NhbGVGcm9tU3Jjc2V0QXR0cmlidXRlKGNvbnN0IFN0
cmluZyYgc3JjU2V0QXR0cmlidXRlLCBJbWFnZUNhbmRpZGF0ZXMmIGltYWdlQ2FuZGlkYXRlcykK
K3sKKyAgICBzaXplX3QgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IDA7CisgICAgdW5zaWduZWQgc3Jj
U2V0TGVuID0gc3JjU2V0QXR0cmlidXRlLmxlbmd0aCgpOwogCi0gICAgc3JjU2V0QXR0cmlidXRl
VmFsdWUuc3BsaXQoJywnLCBzcmNTZXRUb2tlbnMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc3JjU2V0VG9rZW5zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGRh
dGE7Ci0gICAgICAgIGZsb2F0IGltZ1NjYWxlRmFjdG9yID0gMS4wOwotICAgICAgICBib29sIHZh
bGlkU2NhbGVGYWN0b3IgPSBmYWxzZTsKKyAgICB3aGlsZSAoaW1hZ2VDYW5kaWRhdGVTdGFydCA8
IHNyY1NldExlbikgewogCi0gICAgICAgIHNyY1NldFRva2Vuc1tpXS5zdHJpcFdoaXRlU3BhY2Uo
KS5zcGxpdCgnICcsIGRhdGEpOwotICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9u
ZSBjYW5kaWRhdGUgZGVzY3JpcHRvciwgYW5kIHRoZSBsYXN0IG9uZSBtdXN0Ci0gICAgICAgIC8v
IGJlIGEgc2NhbGUgZmFjdG9yLiBTaW5jZSB3ZSBkb24ndCBzdXBwb3J0IGRlc2NyaXB0b3JzIG90
aGVyIHRoYW4gc2NhbGUsCi0gICAgICAgIC8vIGl0J3MgYmV0dGVyIHRvIGRpc2NhcmQgYW55IHJ1
bGUgd2l0aCBzdWNoIGRlc2NyaXB0b3JzIHJhdGhlciB0aGFuIGFjY2VwdAotICAgICAgICAvLyBv
bmx5IHRoZSBzY2FsZSBkYXRhLgotICAgICAgICBpZiAoZGF0YS5zaXplKCkgIT0gMikKKyAgICAg
ICAgLy8gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHNwYWNl
LCBpdCdzIHRoZSB1cmwuCisgICAgICAgIHNpemVfdCBpbWFnZVVybFN0YXJ0ID0gc3JjU2V0QXR0
cmlidXRlLmZpbmQoaXNOb3RIVE1MU3BhY2UsIGltYWdlQ2FuZGlkYXRlU3RhcnQpOworICAgICAg
ICBpZiAoaW1hZ2VVcmxTdGFydCA9PSBub3RGb3VuZCkgeworICAgICAgICAgICAgaW1hZ2VDYW5k
aWRhdGVTdGFydCA9IHNyY1NldExlbjsKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoIWRhdGEubGFzdCgpLmVuZHNXaXRoKCd4JykpCisgICAgICAgIH0KKyAgICAgICAgaWYgKHNy
Y1NldEF0dHJpYnV0ZVtpbWFnZVVybFN0YXJ0XSA9PSAnLCcpIHsKKyAgICAgICAgICAgIGltYWdl
Q2FuZGlkYXRlU3RhcnQgPSBpbWFnZVVybFN0YXJ0ICsgMTsKICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisgICAgICAgIHNpemVfdCBpbWFnZVVybEVuZCA9IHNyY1NldEF0dHJpYnV0
ZS5maW5kKGlzSFRNTFNwYWNlT3JDb21tYSwgaW1hZ2VVcmxTdGFydCArIDEpOworICAgICAgICBp
ZiAoaW1hZ2VVcmxFbmQgPT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIGltYWdlQ2FuZGlkYXRl
U3RhcnQgPSBzcmNTZXRMZW47CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoc3JjU2V0QXR0cmlidXRlW2ltYWdlVXJsRW5kXSA9PSAnLCcpIHsKKyAgICAgICAg
ICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBpbWFnZVVybEVuZCArIDE7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQogCi0gICAgICAgIGltZ1NjYWxlRmFjdG9yID0gZGF0YS5sYXN0
KCkuc3Vic3RyaW5nKDAsIGRhdGEubGFzdCgpLmxlbmd0aCgpIC0gMSkudG9GbG9hdCgmdmFsaWRT
Y2FsZUZhY3Rvcik7Ci0gICAgICAgIGlmICghdmFsaWRTY2FsZUZhY3RvcikKKyAgICAgICAgLy8g
Q29sbGVjdCBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgbmVpdGhlciAiLCIgbm9y
IHNwYWNlLCBpdCdzIHRoZSBkZXNjcmlwdG9yLiAgCisgICAgICAgIHNpemVfdCBpbWFnZVNjYWxl
U3RhcnQgPSBzcmNTZXRBdHRyaWJ1dGUuZmluZChpc05vdEhUTUxTcGFjZSwgaW1hZ2VVcmxFbmQg
KyAxKTsKKyAgICAgICAgaWYgKGltYWdlU2NhbGVTdGFydCA9PSBub3RGb3VuZCkgeworICAgICAg
ICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IHNyY1NldExlbjsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIGlmIChzcmNTZXRBdHRyaWJ1dGVbaW1hZ2VTY2FsZVN0
YXJ0XSA9PSAnLCcpIHsKKyAgICAgICAgICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBpbWFnZVNj
YWxlU3RhcnQgKyAxOwogICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
c2l6ZV90IGltYWdlU2NhbGVFbmQgPSBzcmNTZXRBdHRyaWJ1dGUuZmluZChpc0hUTUxTcGFjZU9y
Q29tbWEsIGltYWdlU2NhbGVTdGFydCArIDEpOworICAgICAgICBpbWFnZVNjYWxlRW5kID0gKGlt
YWdlU2NhbGVFbmQgPT0gbm90Rm91bmQpID8gc3JjU2V0TGVuOiBpbWFnZVNjYWxlRW5kOworICAg
ICAgICBzaXplX3Qgc2VwYXJhdG9yID0gaW1hZ2VTY2FsZUVuZDsKKyAgICAgICAgd2hpbGUgKChz
ZXBhcmF0b3IgPCBzcmNTZXRMZW4gLSAxKSAmJiBpc0hUTUxTcGFjZShzcmNTZXRBdHRyaWJ1dGVb
c2VwYXJhdG9yXSkpCisgICAgICAgICAgICBzZXBhcmF0b3IrKzsKKyAgICAgICAgaWYgKChzZXBh
cmF0b3IgPCBzcmNTZXRMZW4gLSAxKSAmJiBzcmNTZXRBdHRyaWJ1dGVbc2VwYXJhdG9yXSAhPSAn
LCcpIHsKKyAgICAgICAgICAgIHNlcGFyYXRvciA9IHNyY1NldEF0dHJpYnV0ZS5maW5kKCIsIiwg
c2VwYXJhdG9yICsgMSk7CisgICAgICAgICAgICBpZiAoc2VwYXJhdG9yID09IG5vdEZvdW5kKQor
ICAgICAgICAgICAgICAgIHNlcGFyYXRvciA9IHNyY1NldExlbjsKKyAgICAgICAgICAgIGltYWdl
Q2FuZGlkYXRlU3RhcnQgPSBzZXBhcmF0b3IgKyAxOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KIAorICAgICAgICBpZiAoc3JjU2V0QXR0cmlidXRlW2ltYWdlU2NhbGVFbmQgLSAx
XSAhPSAneCcpIHsKKyAgICAgICAgICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBzZXBhcmF0b3Ig
KyAxOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCB2YWxp
ZFNjYWxlRmFjdG9yID0gZmFsc2U7CisgICAgICAgIGZsb2F0IGltZ1NjYWxlRmFjdG9yID0gY2hh
cmFjdGVyc1RvRmxvYXQoc3JjU2V0QXR0cmlidXRlLmNoYXJhY3RlcnMoKSArIGltYWdlU2NhbGVT
dGFydCwgaW1hZ2VTY2FsZUVuZCAtIGltYWdlU2NhbGVTdGFydCAtIDEsICZ2YWxpZFNjYWxlRmFj
dG9yKTsKKworICAgICAgICBpZiAoIXZhbGlkU2NhbGVGYWN0b3IpIHsKKyAgICAgICAgICAgIGlt
YWdlQ2FuZGlkYXRlU3RhcnQgPSBzZXBhcmF0b3IgKyAxOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KICAgICAgICAgSW1hZ2VXaXRoU2NhbGUgaW1hZ2U7Ci0gICAgICAgIGltYWdl
LmltYWdlVVJMID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGFbMF0pOworICAgICAgICBp
bWFnZS5pbWFnZVVSTCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhTdHJpbmdJbXBsOjpjcmVh
dGVXaXRob3V0Q29weWluZyhzcmNTZXRBdHRyaWJ1dGUuY2hhcmFjdGVycygpICsgaW1hZ2VVcmxT
dGFydCwgaW1hZ2VVcmxFbmQgLSBpbWFnZVVybFN0YXJ0KSk7CiAgICAgICAgIGltYWdlLnNjYWxl
RmFjdG9yID0gaW1nU2NhbGVGYWN0b3I7CiAKICAgICAgICAgaW1hZ2VDYW5kaWRhdGVzLmFwcGVu
ZChpbWFnZSk7CisgICAgICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBzZXBhcmF0b3IgKyAxOwog
ICAgIH0KK30KKworU3RyaW5nIGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFN0cmluZyYgc3JjQXR0cmlidXRlLCBjb25zdCBTdHJp
bmcmIHNyY1NldEF0dHJpYnV0ZSkKK3sKKyAgICBJbWFnZUNhbmRpZGF0ZXMgaW1hZ2VDYW5kaWRh
dGVzOworCisgICAgcGFyc2VJbWFnZXNXaXRoU2NhbGVGcm9tU3Jjc2V0QXR0cmlidXRlKHNyY1Nl
dEF0dHJpYnV0ZSwgaW1hZ2VDYW5kaWRhdGVzKTsKIAogICAgIGNvbnN0IFN0cmluZyBzcmMgPSAg
c3JjQXR0cmlidXRlLnNpbXBsaWZ5V2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7CiAgICAgaWYgKCFz
cmMuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdl
LXNyY3NldC1pbnZhbGlkLWlucHV0cy1leGNlcHQtb25lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlucHV0cy1leGNlcHQtb25lLmh0bWwKaW5kZXgg
NDU5OTQ1ZTA2ZDZhNTI3OGRlYjEzYzgyODM0OWRkZWJmY2E5NTY1ZC4uZDUxYzEzZWRhZmVjZjI1
OTU1NWJlY2FiMzNmOTVkNWQ4Y2UwZmJhNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9o
aWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtZXhjZXB0LW9uZS5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLWV4Y2VwdC1v
bmUuaHRtbApAQCAtNSw2ICs1LDYgQEAKIAogPGJvZHkgaWQ9ImJvZHkiPgogICAgIDxkaXY+VGhp
cyB0ZXN0IHBhc3NlcyBpZiB0aGUgaW1nIHRhZyBiZWxvdyBpcyBhIGdyZWVuIHNxdWFyZSB3aGVu
IHRoZSBzY2FsZSBmYWN0b3IgaXMgMi4gSXQgZW5zdXJlcyB0aGF0IHdlbGwtZm9ybWVkIGltYWdl
cyBhcmUgY2hvc2VuIGFuZCBpbnZhbGlkIGlucHV0cyBhcmUgaWdub3JlZDwvZGl2PgotICAgIDxp
bWcgaGVpZ2h0PSIxMDAiIHdpZHRoPSIxMDAiIHNyYz0iIiBzcmNzZXQ9IjF4LCwgICwgICB4ICAg
ICwgcmVzb3VyY2VzL2dyZWVuLTIwMC1weC1zcXVhcmUucG5nIDJ4LCAyIj48L2ltZz4KKyAgICA8
aW1nIGhlaWdodD0iMTAwIiB3aWR0aD0iMTAwIiBzcmM9IiIgc3Jjc2V0PSIxeCwsICAsICAgeCAg
ICAsMnggICwgZm9vLmpwZywgM3gsIGJhci5qcGcgNHggMTAwaCwgZm9vLmpwZyA1LCBiYXIuanBn
IGR4LCByZXNvdXJjZXMvZ3JlZW4tMjAwLXB4LXNxdWFyZS5wbmcgMngsIDIiPjwvaW1nPgogPC9i
b2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1z
cmNzZXQtaW52YWxpZC1pbnB1dHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c3Jjc2V0LWludmFsaWQtaW5wdXRzLmh0bWwKaW5kZXggMmRhNmMzMDUxMWJmYWM4N2YzOTlkN2E1
MWZiNjE5M2UwMTc3ZmEyZi4uYTI4NWE3OTI2OGFkODQ3OWJkY2JkNDNhYjhhODM5MDMzZmU4YmZj
YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxp
ZC1pbnB1dHMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1p
bnZhbGlkLWlucHV0cy5odG1sCkBAIC01LDYgKzUsNiBAQAogCiA8Ym9keSBpZD0iYm9keSI+CiAg
ICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoaXMgaW1nIHRhZyBiZWxvdyBpcyBlbXB0eSBh
bmQgZGlzcGxheXMgbm90aGluZy4gSXQgZW5zdXJlcyB0aGF0IHRoZSBzcmNzZXQgYXR0cmlidXRl
IHN1cHBvcnRzIGludmFsaWQgaW5wdXRzPC9kaXY+Ci0gICAgPGltZyBoZWlnaHQ9IjEwMCIgd2lk
dGg9IjEwMCIgc3JjPSIiIHNyY3NldD0iMXgsLCAgLCAgIHggICAgLDJ4ICAiPjwvaW1nPgorICAg
IDxpbWcgaGVpZ2h0PSIxMDAiIHdpZHRoPSIxMDAiIHNyYz0iIiBzcmNzZXQ9IjF4LCwgICwgICB4
ICAgICwyeCAgLCBmb28uanBnLCAzeCwgYmFyLmpwZyA0eCAxMDBoLCBmb28uanBnIDUsIGJhci5q
cGcgZHgiPjwvaW1nPgogPC9ib2R5PgogPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210274</attachid>
            <date>2013-09-02 03:59:37 -0700</date>
            <delta_ts>2013-09-02 07:50:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119423-20130902125935.patch</filename>
            <type>text/plain</type>
            <size>10228</size>
            <attacher name="Romain Perier">romain.perier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU0NzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmNlOTNkNDg5ZDliMDg5
ZmNmZWFmNmRlYTU3ZTljYmIwNmFkYmY1Ny4uMzVkOWU4NzgwMDA3OGViYjFiZDYxZmMxZjkyMTJm
MzVkNzQwYTlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEzLTA4LTI4ICBSb21h
aW4gUGVyaWVyICA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisKKyAgICAgICAgSW1wcm92ZSBz
cmNzZXQgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTk0MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
SFRNTFNwYWNlT3JDb21tYSk6IEFkZCBhIG5ldyBwcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCBieSBT
dHJpbmc6OmZpbmQoKQorICAgICAgICB0byBnZXQgdGhlIGZpcnN0IHNwYWNlIG9yIGNvbW1hIGNo
YXJhY3RlciBmcm9tIHRoZSBpbnB1dCBzdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUlt
YWdlc1dpdGhTY2FsZUZyb21TcmNzZXRBdHRyaWJ1dGUpOiBBZGQgYSBuZXcgc3RhdGljIGZ1bmN0
aW9uIHRvIHBhcnNlCisgICAgICAgIGFuZCBleHRyYWN0IGltYWdlcyB3aXRoIHNjYWxlIGZyb20g
dGhlIHNyY3NldCBhdHRyaWJ1dGUuIEFsbCB2YWxpZCBjYW5kaWRhdGVzIGFyZQorICAgICAgICBy
ZXR1cm5lZCB0byB0aGUgY2FsbGVyIHRocm91Z2ggYSBsaXN0LgorICAgICAgICAoV2ViQ29yZTo6
YmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyk6IFJlbW92ZSBpbnRlcm1lZGlhdGUgYXJy
YXlzIG9mIHN0cmluZworICAgICAgICB3aGVuIHBhcnNpbmcuIFRoYXQgaXMgbW9yZSBlZmZpY2ll
bnQgYW5kIGF2b2lkcyB0cmFzaGluZyB0aGUgZGF0YSBjYWNoZQorICAgICAgICAodmFyeWluZyBi
ZXR3ZWVuIDIwIGFuZCA2NSUgZmFzdGVyIGRlcGVuZGluZyBvZiB0aGUgYW1vdW50IG9mIGRhdGEp
LgorICAgICAgICBUaGUgcGFyc2VyIG5vdyB3YWxrcyBhbG9uZyB0aGUgYXR0cmlidXRlIHZhbHVl
IGFuZCBleHRyYWN0cyB0aGUgY2FuZGlkYXRlcyBkaXJlY3RseS4KKwogMjAxMy0wOC0yNiAgQW50
b25pbyBHb21lcyAgPGExLmdvbWVzQHNpc2Euc2Ftc3VuZy5jb20+CiAKICAgICAgICAgU2Nyb2xs
aW5nIGFsbG93ZWQgd2hlbiBvdmVyZmxvdzpoaWRkZW4gKHNlZW4gb24gQWNpZDIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCmluZGV4IDNkMjY5
NDJmYzc0MjQzMDZmY2Y5ZWNkOGIyODM1OGVmYTcwYTkwYWQuLmI1MDZjODMxMWYxMTI2YzQxMjY4
NjQ0YWIzM2FjNGU3YWUzMThjMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxQYXJzZXJJZGlvbXMuY3BwCkBAIC0zMTQsMzkgKzMxNCw4MiBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgY29tcGFyZUJ5U2NhbGVGYWN0b3IoY29uc3QgSW1hZ2VXaXRoU2NhbGUmIGZpcnN0LCBj
b25zdCBJbWFnZQogICAgIHJldHVybiBmaXJzdC5zY2FsZUZhY3RvciA8IHNlY29uZC5zY2FsZUZh
Y3RvcjsKIH0KIAotU3RyaW5nIGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFN0cmluZyYgc3JjQXR0cmlidXRlLCBjb25zdCBTdHJp
bmcmIHNyY1NldEF0dHJpYnV0ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0hUTUxTcGFjZU9yQ29t
bWEoVUNoYXIgY2hhcmFjdGVyKQogewotICAgIEltYWdlQ2FuZGlkYXRlcyBpbWFnZUNhbmRpZGF0
ZXM7CisgICAgcmV0dXJuIGlzSFRNTFNwYWNlKGNoYXJhY3RlcikgfHwgY2hhcmFjdGVyID09ICcs
JzsKK30KIAotICAgIGNvbnN0IFN0cmluZyBzcmNTZXRBdHRyaWJ1dGVWYWx1ZSA9IHNyY1NldEF0
dHJpYnV0ZS5zaW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpOwotICAgIFZlY3RvcjxTdHJp
bmc+IHNyY1NldFRva2VuczsKK3N0YXRpYyB2b2lkIHBhcnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNy
Y3NldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNyY1NldEF0dHJpYnV0ZSwgSW1hZ2VDYW5kaWRh
dGVzJiBpbWFnZUNhbmRpZGF0ZXMpCit7CisgICAgc2l6ZV90IGltYWdlQ2FuZGlkYXRlU3RhcnQg
PSAwOworICAgIHVuc2lnbmVkIHNyY1NldExlbiA9IHNyY1NldEF0dHJpYnV0ZS5sZW5ndGgoKTsK
IAotICAgIHNyY1NldEF0dHJpYnV0ZVZhbHVlLnNwbGl0KCcsJywgc3JjU2V0VG9rZW5zKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNyY1NldFRva2Vucy5zaXplKCk7ICsraSkgewotICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBkYXRhOwotICAgICAgICBmbG9hdCBpbWdTY2FsZUZhY3RvciA9
IDEuMDsKLSAgICAgICAgYm9vbCB2YWxpZFNjYWxlRmFjdG9yID0gZmFsc2U7CisgICAgd2hpbGUg
KGltYWdlQ2FuZGlkYXRlU3RhcnQgPCBzcmNTZXRMZW4pIHsKKworICAgICAgICAvLyBDb2xsZWN0
IGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBub3Qgc3BhY2UsIGl0J3MgdGhlIHVy
bC4KKyAgICAgICAgc2l6ZV90IGltYWdlVXJsU3RhcnQgPSBzcmNTZXRBdHRyaWJ1dGUuZmluZChp
c05vdEhUTUxTcGFjZSwgaW1hZ2VDYW5kaWRhdGVTdGFydCk7CisgICAgICAgIGlmIChpbWFnZVVy
bFN0YXJ0ID09IG5vdEZvdW5kKSB7CisgICAgICAgICAgICBpbWFnZUNhbmRpZGF0ZVN0YXJ0ID0g
c3JjU2V0TGVuOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHNyY1NldEF0dHJpYnV0ZVtpbWFnZVVybFN0YXJ0XSA9PSAnLCcpIHsKKyAgICAgICAgICAgIGlt
YWdlQ2FuZGlkYXRlU3RhcnQgPSBpbWFnZVVybFN0YXJ0ICsgMTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIHNpemVfdCBpbWFnZVVybEVuZCA9IHNyY1NldEF0dHJp
YnV0ZS5maW5kKGlzSFRNTFNwYWNlLCBpbWFnZVVybFN0YXJ0ICsgMSk7CisgICAgICAgIGlmIChp
bWFnZVVybEVuZCA9PSBub3RGb3VuZCkgeworICAgICAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFy
dCA9IHNyY1NldExlbjsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgICAg
ICAgc3JjU2V0VG9rZW5zW2ldLnN0cmlwV2hpdGVTcGFjZSgpLnNwbGl0KCcgJywgZGF0YSk7Ci0g
ICAgICAgIC8vIFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGNhbmRpZGF0ZSBkZXNjcmlwdG9y
LCBhbmQgdGhlIGxhc3Qgb25lIG11c3QKLSAgICAgICAgLy8gYmUgYSBzY2FsZSBmYWN0b3IuIFNp
bmNlIHdlIGRvbid0IHN1cHBvcnQgZGVzY3JpcHRvcnMgb3RoZXIgdGhhbiBzY2FsZSwKLSAgICAg
ICAgLy8gaXQncyBiZXR0ZXIgdG8gZGlzY2FyZCBhbnkgcnVsZSB3aXRoIHN1Y2ggZGVzY3JpcHRv
cnMgcmF0aGVyIHRoYW4gYWNjZXB0Ci0gICAgICAgIC8vIG9ubHkgdGhlIHNjYWxlIGRhdGEuCi0g
ICAgICAgIGlmIChkYXRhLnNpemUoKSAhPSAyKQorICAgICAgICAvLyBDb2xsZWN0IGEgc2VxdWVu
Y2Ugb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBuZWl0aGVyICcsJyBub3Igc3BhY2UsIGl0J3MgdGhl
IGRlc2NyaXB0b3IuCisgICAgICAgIHNpemVfdCBpbWFnZVNjYWxlU3RhcnQgPSBzcmNTZXRBdHRy
aWJ1dGUuZmluZChpc05vdEhUTUxTcGFjZSwgaW1hZ2VVcmxFbmQgKyAxKTsKKyAgICAgICAgaWYg
KGltYWdlU2NhbGVTdGFydCA9PSBub3RGb3VuZCkgeworICAgICAgICAgICAgaW1hZ2VDYW5kaWRh
dGVTdGFydCA9IHNyY1NldExlbjsKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAo
IWRhdGEubGFzdCgpLmVuZHNXaXRoKCd4JykpCisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY1Nl
dEF0dHJpYnV0ZVtpbWFnZVNjYWxlU3RhcnRdID09ICcsJykgeworICAgICAgICAgICAgaW1hZ2VD
YW5kaWRhdGVTdGFydCA9IGltYWdlU2NhbGVTdGFydCArIDE7CiAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICBzaXplX3QgaW1hZ2VTY2FsZUVuZCA9IHNyY1NldEF0dHJp
YnV0ZS5maW5kKGlzSFRNTFNwYWNlT3JDb21tYSwgaW1hZ2VTY2FsZVN0YXJ0ICsgMSk7CisgICAg
ICAgIGltYWdlU2NhbGVFbmQgPSAoaW1hZ2VTY2FsZUVuZCA9PSBub3RGb3VuZCkgPyBzcmNTZXRM
ZW4gOiBpbWFnZVNjYWxlRW5kOworICAgICAgICBzaXplX3Qgc2VwYXJhdG9yID0gaW1hZ2VTY2Fs
ZUVuZDsKKyAgICAgICAgd2hpbGUgKChzZXBhcmF0b3IgPCBzcmNTZXRMZW4gLSAxKSAmJiBpc0hU
TUxTcGFjZShzcmNTZXRBdHRyaWJ1dGVbc2VwYXJhdG9yXSkpCisgICAgICAgICAgICBzZXBhcmF0
b3IrKzsKKyAgICAgICAgaWYgKChzZXBhcmF0b3IgPCBzcmNTZXRMZW4gLSAxKSAmJiBzcmNTZXRB
dHRyaWJ1dGVbc2VwYXJhdG9yXSAhPSAnLCcpIHsKKyAgICAgICAgICAgIHNlcGFyYXRvciA9IHNy
Y1NldEF0dHJpYnV0ZS5maW5kKCcsJywgc2VwYXJhdG9yICsgMSk7CisgICAgICAgICAgICBpZiAo
c2VwYXJhdG9yID09IG5vdEZvdW5kKQorICAgICAgICAgICAgICAgIHNlcGFyYXRvciA9IHNyY1Nl
dExlbjsKKyAgICAgICAgICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBzZXBhcmF0b3IgKyAxOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAotICAgICAgICBpbWdTY2FsZUZhY3Rv
ciA9IGRhdGEubGFzdCgpLnN1YnN0cmluZygwLCBkYXRhLmxhc3QoKS5sZW5ndGgoKSAtIDEpLnRv
RmxvYXQoJnZhbGlkU2NhbGVGYWN0b3IpOwotICAgICAgICBpZiAoIXZhbGlkU2NhbGVGYWN0b3Ip
CisgICAgICAgIGlmIChzcmNTZXRBdHRyaWJ1dGVbaW1hZ2VTY2FsZUVuZCAtIDFdICE9ICd4Jykg
eworICAgICAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IHNlcGFyYXRvciArIDE7CiAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIHZhbGlkU2NhbGVGYWN0
b3IgPSBmYWxzZTsKKyAgICAgICAgZmxvYXQgaW1nU2NhbGVGYWN0b3IgPSBjaGFyYWN0ZXJzVG9G
bG9hdChzcmNTZXRBdHRyaWJ1dGUuY2hhcmFjdGVycygpICsgaW1hZ2VTY2FsZVN0YXJ0LCBpbWFn
ZVNjYWxlRW5kIC0gaW1hZ2VTY2FsZVN0YXJ0IC0gMSwgJnZhbGlkU2NhbGVGYWN0b3IpOwogCisg
ICAgICAgIGlmICghdmFsaWRTY2FsZUZhY3RvcikgeworICAgICAgICAgICAgaW1hZ2VDYW5kaWRh
dGVTdGFydCA9IHNlcGFyYXRvciArIDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQogICAgICAgICBJbWFnZVdpdGhTY2FsZSBpbWFnZTsKLSAgICAgICAgaW1hZ2UuaW1hZ2VVUkwg
PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YVswXSk7CisgICAgICAgIGltYWdlLmltYWdl
VVJMID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRD
b3B5aW5nKHNyY1NldEF0dHJpYnV0ZS5jaGFyYWN0ZXJzKCkgKyBpbWFnZVVybFN0YXJ0LCBpbWFn
ZVVybEVuZCAtIGltYWdlVXJsU3RhcnQpKTsKICAgICAgICAgaW1hZ2Uuc2NhbGVGYWN0b3IgPSBp
bWdTY2FsZUZhY3RvcjsKIAogICAgICAgICBpbWFnZUNhbmRpZGF0ZXMuYXBwZW5kKGltYWdlKTsK
KyAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IHNlcGFyYXRvciArIDE7CiAgICAgfQorfQor
CitTdHJpbmcgYmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciwgY29uc3QgU3RyaW5nJiBzcmNBdHRyaWJ1dGUsIGNvbnN0IFN0cmluZyYgc3JjU2V0
QXR0cmlidXRlKQoreworICAgIEltYWdlQ2FuZGlkYXRlcyBpbWFnZUNhbmRpZGF0ZXM7CisKKyAg
ICBwYXJzZUltYWdlc1dpdGhTY2FsZUZyb21TcmNzZXRBdHRyaWJ1dGUoc3JjU2V0QXR0cmlidXRl
LCBpbWFnZUNhbmRpZGF0ZXMpOwogCiAgICAgY29uc3QgU3RyaW5nIHNyYyA9ICBzcmNBdHRyaWJ1
dGUuc2ltcGxpZnlXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKTsKICAgICBpZiAoIXNyYy5pc0VtcHR5
KCkpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRh
dGEtc3Jjc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRh
LXNyY3NldC5odG1sCmluZGV4IDRjZTJmZWEwYzMxZDIxZTA2YWUzNmMxNGU1MjFmOTA4NWRlYWJk
YWYuLmVjNWE3OGI2MTgzNzQ0ZDEwYzc0MTg0NmU5MmEzYzViMTk2N2EyZGUgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0Lmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQuaHRtbApA
QCAtMTMsNiArMTMsNiBAQAogPC9oZWFkPgogPGJvZHkgaWQ9ImJvZHkiPgogICAgIDxkaXY+VGhp
cyB0ZXN0IHBhc3NlcyBpZiB0aGUgaW1hZ2UgYmVsb3cgbG9va3MgbGlrZSBhIDJ4MiBncmlkICh5
ZWxsb3csIGdyYXksIGxpZ2h0IGdyZWVuLCBkYXJrIGdyZWVuKS4gSW4gdGhpcyBjYXNlIHRoZSBz
cmNzZXQgYXR0cmlidXRlIGhhcyBhIGJhc2U2NCB1cmwsIHdpdGggdGhlIGNvbW1hIGVzY2FwZWQu
PC9kaXY+Ci0gICAgPGltZyBpZD0iZm9vIiBzcmM9IiIgc3Jjc2V0PSJkYXRhOmltYWdlL3BuZzti
YXNlNjQlMkNpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBOENBSUFBQUFMNU5ROUFBQUFD
WEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUgyd29hQlFjNG9MRUZwQUFBQUJsMFJW
aDBRMjl0YldWdWRBQkRjbVZoZEdWa0lIZHBkR2dnUjBsTlVGZUJEaGNBQUFDTVNVUkJWSGphN2RO
QkVZQWdGRVZSUGhITVlnQXpVSXNtVm5GdkIvZnNvUWIrT2JmQm16TXZ4bmVXMUQxdnp6MndGaUVV
UWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNJVVFpRVVRb1JDS0lSQ2lGQUloVkFJRWVwM3hUV1RM
enp1NW9WQ0tJUkNpRkFJaFZBSUVRcWhFQW9oUWlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFxaEVD
TFVaaTNWRXdjQk1HcjFOZ0FBQUFCSlJVNUVya0pnZ2c9PSAyeCwgZGF0YTppbWFnZS9wbmc7YmFz
ZTY0JTJDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQThDQUlBQUFBTDVOUTlBQUFBQ1hC
SVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIMndvYUJRYzRvTEVGcEFBQUFCbDBSVmgw
UTI5dGJXVnVkQUJEY21WaGRHVmtJSGRwZEdnZ1IwbE5VRmVCRGhjQUFBQ01TVVJCVkhqYTdkTkJF
WUFnRkVWUlBoSE1ZZ0F6VUlzbVZuRnZCL2Zzb1FiK09iZkJtek12eG5lVzFEMXZ6ejJ3RmlFVVFp
RkVLSVJDS0lRSWhWQUloUkNoRUFxaEVDSVVRaUVVUW9SQ0tJUkNpRkFJaFZBSUVlcDN4VFdUTHp6
dTVvVkNLSVJDaUZBSWhWQUlFUXFoRUFvaFFpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0xV
WmkzVkV3Y0JNR3IxTmdBQUFBQkpSVTVFcmtKZ2dnPT0gMXgiPgorICAgIDxpbWcgaWQ9ImZvbyIg
c3JjPSIiIHNyY3NldD0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhF
VWdBQUFKWUFBQUE4Q0FJQUFBQUw1TlE5QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFC
M1JKVFVVSDJ3b2FCUWM0b0xFRnBBQUFBQmwwUlZoMFEyOXRiV1Z1ZEFCRGNtVmhkR1ZrSUhkcGRH
Z2dSMGxOVUZlQkRoY0FBQUNNU1VSQlZIamE3ZE5CRVlBZ0ZFVlJQaEhNWWdBelVJc21WbkZ2Qi9m
c29RYitPYmZCbXpNdnhuZVcxRDF2enoyd0ZpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0lV
UWlFVVFvUkNLSVJDaUZBSWhWQUlFZXAzeFRXVEx6enU1b1ZDS0lSQ2lGQUloVkFJRVFxaEVBb2hR
aUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNMVVppM1ZFd2NCTUdyMU5nQUFBQUJKUlU1RXJr
SmdnZz09IDJ4LCBkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FB
QUpZQUFBQThDQUlBQUFBTDVOUTlBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpU
VVVIMndvYUJRYzRvTEVGcEFBQUFCbDBSVmgwUTI5dGJXVnVkQUJEY21WaGRHVmtJSGRwZEdnZ1Iw
bE5VRmVCRGhjQUFBQ01TVVJCVkhqYTdkTkJFWUFnRkVWUlBoSE1ZZ0F6VUlzbVZuRnZCL2Zzb1Fi
K09iZkJtek12eG5lVzFEMXZ6ejJ3RmlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFxaEVDSVVRaUVV
UW9SQ0tJUkNpRkFJaFZBSUVlcDN4VFdUTHp6dTVvVkNLSVJDaUZBSWhWQUlFUXFoRUFvaFFpRVVR
aUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0xVWmkzVkV3Y0JNR3IxTmdBQUFBQkpSVTVFcmtKZ2dn
PT0gMXgiPgogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9o
aWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtZXhjZXB0LW9uZS5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtZXhjZXB0LW9uZS5o
dG1sCmluZGV4IDM4YWI0M2RlM2YwNGY1NzgwNzkwODI0MWM4Y2NlZmMwOGViMDU5YjMuLjBhZDI2
ZTJlYWNkZTA1YmU0Y2ExZThmOGRkNWU4MzhiNTUzY2RmZDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLWV4Y2VwdC1vbmUuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlucHV0
cy1leGNlcHQtb25lLmh0bWwKQEAgLTE1LDYgKzE1LDYgQEAKIDxib2R5IGlkPSJib2R5Ij4KICAg
ICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGltZyB0YWcgYmVsb3cgaXMgYSBncmVlbiBz
cXVhcmUgcmVnYXJkbGVzcyBvZiB0aGUgc2NhbGUgZmFjdG9yLiBJdCBlbnN1cmVzIHRoYXQgaW52
YWxpZCBpbnB1dHMgYXJlCiAgICAgaWdub3JlZCBhbmQgd2VsbC1mb3JtZWQgaW1hZ2VzIGFyZSBj
aG9zZW4gcmVnYXJkbGVzcyBvZiB0aGVpciBxdWFsaWZpZXJzLCBvbmNlIHRoZXkgYXJlIHRoZSBv
bmx5IGNhbmRpZGF0ZSBsZWZ0PC9kaXY+Ci0gICAgPGltZyBpZD0iZm9vIiBzcmM9IiIgc3Jjc2V0
PSIxeCwsICAsICAgeCAgICAsIHJlc291cmNlcy9ncmVlbi0yMDAtcHgtc3F1YXJlLnBuZyAyeCwg
MiI+CisgICAgPGltZyBpZD0iZm9vIiBzcmM9IiIgc3Jjc2V0PSIxeCwsICAsICAgeCAgICAsMngg
ICwgZm9vLmpwZywgM3gsIGJhci5qcGcgNHggMTAwaCwgZm9vLmpwZyA1LCBiYXIuanBnIGR4LCBy
ZXNvdXJjZXMvZ3JlZW4tMjAwLXB4LXNxdWFyZS5wbmcgMngsIj48L2ltZz4KIDwvYm9keT4KIDwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWlu
dmFsaWQtaW5wdXRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1p
bnZhbGlkLWlucHV0cy5odG1sCmluZGV4IDJkYTZjMzA1MTFiZmFjODdmMzk5ZDdhNTFmYjYxOTNl
MDE3N2ZhMmYuLmYwYzI5YjUwMWJkNjg5YmY1MDQ0N2YwZjEyOGZlYWQ5NWU0MGNjNjEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRz
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1p
bnB1dHMuaHRtbApAQCAtNSw2ICs1LDYgQEAKIAogPGJvZHkgaWQ9ImJvZHkiPgogICAgIDxkaXY+
VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGlzIGltZyB0YWcgYmVsb3cgaXMgZW1wdHkgYW5kIGRpc3Bs
YXlzIG5vdGhpbmcuIEl0IGVuc3VyZXMgdGhhdCB0aGUgc3Jjc2V0IGF0dHJpYnV0ZSBzdXBwb3J0
cyBpbnZhbGlkIGlucHV0czwvZGl2PgotICAgIDxpbWcgaGVpZ2h0PSIxMDAiIHdpZHRoPSIxMDAi
IHNyYz0iIiBzcmNzZXQ9IjF4LCwgICwgICB4ICAgICwyeCAgIj48L2ltZz4KKyAgICA8aW1nIGhl
aWdodD0iMTAwIiB3aWR0aD0iMTAwIiBzcmM9IiIgc3Jjc2V0PSIxeCwsICAsICAgeCAgICAsMngg
ICwgZm9vLmpwZywgM3gsIGJhci5qcGcgNHggMTAwaCwgZm9vLmpwZyA1LCBiYXIuanBnIGR4LCI+
PC9pbWc+CiA8L2JvZHk+CiA8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210285</attachid>
            <date>2013-09-02 07:51:11 -0700</date>
            <delta_ts>2013-09-10 04:20:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119423-20130902165107.patch</filename>
            <type>text/plain</type>
            <size>10366</size>
            <attacher name="Romain Perier">romain.perier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU0NzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmNlOTNkNDg5ZDliMDg5
ZmNmZWFmNmRlYTU3ZTljYmIwNmFkYmY1Ny4uMzVkOWU4NzgwMDA3OGViYjFiZDYxZmMxZjkyMTJm
MzVkNzQwYTlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEzLTA4LTI4ICBSb21h
aW4gUGVyaWVyICA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisKKyAgICAgICAgSW1wcm92ZSBz
cmNzZXQgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTk0MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
SFRNTFNwYWNlT3JDb21tYSk6IEFkZCBhIG5ldyBwcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCBieSBT
dHJpbmc6OmZpbmQoKQorICAgICAgICB0byBnZXQgdGhlIGZpcnN0IHNwYWNlIG9yIGNvbW1hIGNo
YXJhY3RlciBmcm9tIHRoZSBpbnB1dCBzdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUlt
YWdlc1dpdGhTY2FsZUZyb21TcmNzZXRBdHRyaWJ1dGUpOiBBZGQgYSBuZXcgc3RhdGljIGZ1bmN0
aW9uIHRvIHBhcnNlCisgICAgICAgIGFuZCBleHRyYWN0IGltYWdlcyB3aXRoIHNjYWxlIGZyb20g
dGhlIHNyY3NldCBhdHRyaWJ1dGUuIEFsbCB2YWxpZCBjYW5kaWRhdGVzIGFyZQorICAgICAgICBy
ZXR1cm5lZCB0byB0aGUgY2FsbGVyIHRocm91Z2ggYSBsaXN0LgorICAgICAgICAoV2ViQ29yZTo6
YmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyk6IFJlbW92ZSBpbnRlcm1lZGlhdGUgYXJy
YXlzIG9mIHN0cmluZworICAgICAgICB3aGVuIHBhcnNpbmcuIFRoYXQgaXMgbW9yZSBlZmZpY2ll
bnQgYW5kIGF2b2lkcyB0cmFzaGluZyB0aGUgZGF0YSBjYWNoZQorICAgICAgICAodmFyeWluZyBi
ZXR3ZWVuIDIwIGFuZCA2NSUgZmFzdGVyIGRlcGVuZGluZyBvZiB0aGUgYW1vdW50IG9mIGRhdGEp
LgorICAgICAgICBUaGUgcGFyc2VyIG5vdyB3YWxrcyBhbG9uZyB0aGUgYXR0cmlidXRlIHZhbHVl
IGFuZCBleHRyYWN0cyB0aGUgY2FuZGlkYXRlcyBkaXJlY3RseS4KKwogMjAxMy0wOC0yNiAgQW50
b25pbyBHb21lcyAgPGExLmdvbWVzQHNpc2Euc2Ftc3VuZy5jb20+CiAKICAgICAgICAgU2Nyb2xs
aW5nIGFsbG93ZWQgd2hlbiBvdmVyZmxvdzpoaWRkZW4gKHNlZW4gb24gQWNpZDIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCmluZGV4IDNkMjY5
NDJmYzc0MjQzMDZmY2Y5ZWNkOGIyODM1OGVmYTcwYTkwYWQuLmMyMDM1NjYwYjg5YjA1YTU4OWI1
OWU3NmRhOTFkYTdiNTk5YzZjZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxQYXJzZXJJZGlvbXMuY3BwCkBAIC0zMTQsMzkgKzMxNCw4NiBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgY29tcGFyZUJ5U2NhbGVGYWN0b3IoY29uc3QgSW1hZ2VXaXRoU2NhbGUmIGZpcnN0LCBj
b25zdCBJbWFnZQogICAgIHJldHVybiBmaXJzdC5zY2FsZUZhY3RvciA8IHNlY29uZC5zY2FsZUZh
Y3RvcjsKIH0KIAotU3RyaW5nIGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFN0cmluZyYgc3JjQXR0cmlidXRlLCBjb25zdCBTdHJp
bmcmIHNyY1NldEF0dHJpYnV0ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0hUTUxTcGFjZU9yQ29t
bWEoVUNoYXIgY2hhcmFjdGVyKQogewotICAgIEltYWdlQ2FuZGlkYXRlcyBpbWFnZUNhbmRpZGF0
ZXM7CisgICAgcmV0dXJuIGlzSFRNTFNwYWNlKGNoYXJhY3RlcikgfHwgY2hhcmFjdGVyID09ICcs
JzsKK30KIAotICAgIGNvbnN0IFN0cmluZyBzcmNTZXRBdHRyaWJ1dGVWYWx1ZSA9IHNyY1NldEF0
dHJpYnV0ZS5zaW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpOwotICAgIFZlY3RvcjxTdHJp
bmc+IHNyY1NldFRva2VuczsKK3N0YXRpYyB2b2lkIHBhcnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNy
Y3NldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNyY1NldEF0dHJpYnV0ZSwgSW1hZ2VDYW5kaWRh
dGVzJiBpbWFnZUNhbmRpZGF0ZXMpCit7CisgICAgc2l6ZV90IGltYWdlQ2FuZGlkYXRlU3RhcnQg
PSAwOworICAgIHVuc2lnbmVkIHNyY1NldExlbiA9IHNyY1NldEF0dHJpYnV0ZS5sZW5ndGgoKTsK
IAotICAgIHNyY1NldEF0dHJpYnV0ZVZhbHVlLnNwbGl0KCcsJywgc3JjU2V0VG9rZW5zKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNyY1NldFRva2Vucy5zaXplKCk7ICsraSkgewotICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBkYXRhOwotICAgICAgICBmbG9hdCBpbWdTY2FsZUZhY3RvciA9
IDEuMDsKLSAgICAgICAgYm9vbCB2YWxpZFNjYWxlRmFjdG9yID0gZmFsc2U7CisgICAgd2hpbGUg
KGltYWdlQ2FuZGlkYXRlU3RhcnQgPCBzcmNTZXRMZW4pIHsKIAotICAgICAgICBzcmNTZXRUb2tl
bnNbaV0uc3RyaXBXaGl0ZVNwYWNlKCkuc3BsaXQoJyAnLCBkYXRhKTsKLSAgICAgICAgLy8gVGhl
cmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgY2FuZGlkYXRlIGRlc2NyaXB0b3IsIGFuZCB0aGUgbGFz
dCBvbmUgbXVzdAotICAgICAgICAvLyBiZSBhIHNjYWxlIGZhY3Rvci4gU2luY2Ugd2UgZG9uJ3Qg
c3VwcG9ydCBkZXNjcmlwdG9ycyBvdGhlciB0aGFuIHNjYWxlLAotICAgICAgICAvLyBpdCdzIGJl
dHRlciB0byBkaXNjYXJkIGFueSBydWxlIHdpdGggc3VjaCBkZXNjcmlwdG9ycyByYXRoZXIgdGhh
biBhY2NlcHQKLSAgICAgICAgLy8gb25seSB0aGUgc2NhbGUgZGF0YS4KLSAgICAgICAgaWYgKGRh
dGEuc2l6ZSgpICE9IDIpCisgICAgICAgIC8vIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0
ZXJzIHRoYXQgYXJlIG5vdCBzcGFjZSwgaXQncyB0aGUgdXJsLgorICAgICAgICBzaXplX3QgaW1h
Z2VVcmxTdGFydCA9IHNyY1NldEF0dHJpYnV0ZS5maW5kKGlzTm90SFRNTFNwYWNlLCBpbWFnZUNh
bmRpZGF0ZVN0YXJ0KTsKKyAgICAgICAgaWYgKGltYWdlVXJsU3RhcnQgPT0gbm90Rm91bmQpIHsK
KyAgICAgICAgICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBzcmNTZXRMZW47CiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFkYXRhLmxhc3QoKS5lbmRzV2l0aCgneCcpKQorICAg
ICAgICB9CisgICAgICAgIGlmIChzcmNTZXRBdHRyaWJ1dGVbaW1hZ2VVcmxTdGFydF0gPT0gJywn
KSB7CisgICAgICAgICAgICBpbWFnZUNhbmRpZGF0ZVN0YXJ0ID0gaW1hZ2VVcmxTdGFydCArIDE7
CiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzaXplX3QgaW1hZ2VV
cmxFbmQgPSBzcmNTZXRBdHRyaWJ1dGUuZmluZChpc0hUTUxTcGFjZSwgaW1hZ2VVcmxTdGFydCAr
IDEpOworICAgICAgICBpZiAoaW1hZ2VVcmxFbmQgPT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAg
IGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBzcmNTZXRMZW47CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoc3JjU2V0QXR0cmlidXRlW2ltYWdlVXJsRW5kIC0gMV0g
PT0gJywnKSB7CisgICAgICAgICAgICBpbWFnZUNhbmRpZGF0ZVN0YXJ0ID0gaW1hZ2VVcmxFbmQ7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCi0gICAgICAgIGltZ1NjYWxlRmFj
dG9yID0gZGF0YS5sYXN0KCkuc3Vic3RyaW5nKDAsIGRhdGEubGFzdCgpLmxlbmd0aCgpIC0gMSku
dG9GbG9hdCgmdmFsaWRTY2FsZUZhY3Rvcik7Ci0gICAgICAgIGlmICghdmFsaWRTY2FsZUZhY3Rv
cikKKyAgICAgICAgLy8gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUg
bmVpdGhlciAnLCcgbm9yIHNwYWNlLCBpdCdzIHRoZSBkZXNjcmlwdG9yLgorICAgICAgICBzaXpl
X3QgaW1hZ2VTY2FsZVN0YXJ0ID0gc3JjU2V0QXR0cmlidXRlLmZpbmQoaXNOb3RIVE1MU3BhY2Us
IGltYWdlVXJsRW5kICsgMSk7CisgICAgICAgIGlmIChpbWFnZVNjYWxlU3RhcnQgPT0gbm90Rm91
bmQpIHsKKyAgICAgICAgICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBzcmNTZXRMZW47CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjU2V0QXR0cmlidXRl
W2ltYWdlU2NhbGVTdGFydF0gPT0gJywnKSB7CisgICAgICAgICAgICBpbWFnZUNhbmRpZGF0ZVN0
YXJ0ID0gaW1hZ2VTY2FsZVN0YXJ0ICsgMTsKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIHNpemVfdCBpbWFnZVNjYWxlRW5kID0gc3JjU2V0QXR0cmlidXRlLmZpbmQo
aXNIVE1MU3BhY2VPckNvbW1hLCBpbWFnZVNjYWxlU3RhcnQgKyAxKTsKKyAgICAgICAgaW1hZ2VT
Y2FsZUVuZCA9IChpbWFnZVNjYWxlRW5kID09IG5vdEZvdW5kKSA/IHNyY1NldExlbiA6IGltYWdl
U2NhbGVFbmQ7CisgICAgICAgIHNpemVfdCBzZXBhcmF0b3IgPSBpbWFnZVNjYWxlRW5kOworICAg
ICAgICB3aGlsZSAoKHNlcGFyYXRvciA8IHNyY1NldExlbiAtIDEpICYmIGlzSFRNTFNwYWNlKHNy
Y1NldEF0dHJpYnV0ZVtzZXBhcmF0b3JdKSkKKyAgICAgICAgICAgIHNlcGFyYXRvcisrOworICAg
ICAgICBpZiAoKHNlcGFyYXRvciA8IHNyY1NldExlbiAtIDEpICYmIHNyY1NldEF0dHJpYnV0ZVtz
ZXBhcmF0b3JdICE9ICcsJykgeworICAgICAgICAgICAgc2VwYXJhdG9yID0gc3JjU2V0QXR0cmli
dXRlLmZpbmQoJywnLCBzZXBhcmF0b3IgKyAxKTsKKyAgICAgICAgICAgIGlmIChzZXBhcmF0b3Ig
PT0gbm90Rm91bmQpCisgICAgICAgICAgICAgICAgc2VwYXJhdG9yID0gc3JjU2V0TGVuOworICAg
ICAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IHNlcGFyYXRvciArIDE7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQogCisgICAgICAgIGlmIChzcmNTZXRBdHRyaWJ1dGVbaW1h
Z2VTY2FsZUVuZCAtIDFdICE9ICd4JykgeworICAgICAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFy
dCA9IHNlcGFyYXRvciArIDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBib29sIHZhbGlkU2NhbGVGYWN0b3IgPSBmYWxzZTsKKyAgICAgICAgZmxvYXQgaW1nU2Nh
bGVGYWN0b3IgPSBjaGFyYWN0ZXJzVG9GbG9hdChzcmNTZXRBdHRyaWJ1dGUuY2hhcmFjdGVycygp
ICsgaW1hZ2VTY2FsZVN0YXJ0LCBpbWFnZVNjYWxlRW5kIC0gaW1hZ2VTY2FsZVN0YXJ0IC0gMSwg
JnZhbGlkU2NhbGVGYWN0b3IpOworCisgICAgICAgIGlmICghdmFsaWRTY2FsZUZhY3Rvcikgewor
ICAgICAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IHNlcGFyYXRvciArIDE7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQogICAgICAgICBJbWFnZVdpdGhTY2FsZSBpbWFnZTsK
LSAgICAgICAgaW1hZ2UuaW1hZ2VVUkwgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YVsw
XSk7CisgICAgICAgIGltYWdlLmltYWdlVVJMID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKFN0
cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKHNyY1NldEF0dHJpYnV0ZS5jaGFyYWN0ZXJz
KCkgKyBpbWFnZVVybFN0YXJ0LCBpbWFnZVVybEVuZCAtIGltYWdlVXJsU3RhcnQpKTsKICAgICAg
ICAgaW1hZ2Uuc2NhbGVGYWN0b3IgPSBpbWdTY2FsZUZhY3RvcjsKIAogICAgICAgICBpbWFnZUNh
bmRpZGF0ZXMuYXBwZW5kKGltYWdlKTsKKyAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IHNl
cGFyYXRvciArIDE7CiAgICAgfQorfQorCitTdHJpbmcgYmVzdEZpdFNvdXJjZUZvckltYWdlQXR0
cmlidXRlcyhmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgU3RyaW5nJiBzcmNBdHRyaWJ1
dGUsIGNvbnN0IFN0cmluZyYgc3JjU2V0QXR0cmlidXRlKQoreworICAgIEltYWdlQ2FuZGlkYXRl
cyBpbWFnZUNhbmRpZGF0ZXM7CisKKyAgICBwYXJzZUltYWdlc1dpdGhTY2FsZUZyb21TcmNzZXRB
dHRyaWJ1dGUoc3JjU2V0QXR0cmlidXRlLCBpbWFnZUNhbmRpZGF0ZXMpOwogCiAgICAgY29uc3Qg
U3RyaW5nIHNyYyA9ICBzcmNBdHRyaWJ1dGUuc2ltcGxpZnlXaGl0ZVNwYWNlKGlzSFRNTFNwYWNl
KTsKICAgICBpZiAoIXNyYy5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC5odG1sCmluZGV4IDRjZTJmZWEwYzMxZDIx
ZTA2YWUzNmMxNGU1MjFmOTA4NWRlYWJkYWYuLmVjNWE3OGI2MTgzNzQ0ZDEwYzc0MTg0NmU5MmEz
YzViMTk2N2EyZGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jj
c2V0LWRhdGEtc3Jjc2V0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1z
cmNzZXQtZGF0YS1zcmNzZXQuaHRtbApAQCAtMTMsNiArMTMsNiBAQAogPC9oZWFkPgogPGJvZHkg
aWQ9ImJvZHkiPgogICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgaW1hZ2UgYmVsb3cg
bG9va3MgbGlrZSBhIDJ4MiBncmlkICh5ZWxsb3csIGdyYXksIGxpZ2h0IGdyZWVuLCBkYXJrIGdy
ZWVuKS4gSW4gdGhpcyBjYXNlIHRoZSBzcmNzZXQgYXR0cmlidXRlIGhhcyBhIGJhc2U2NCB1cmws
IHdpdGggdGhlIGNvbW1hIGVzY2FwZWQuPC9kaXY+Ci0gICAgPGltZyBpZD0iZm9vIiBzcmM9IiIg
c3Jjc2V0PSJkYXRhOmltYWdlL3BuZztiYXNlNjQlMkNpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFB
SllBQUFBOENBSUFBQUFMNU5ROUFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRV
VUgyd29hQlFjNG9MRUZwQUFBQUJsMFJWaDBRMjl0YldWdWRBQkRjbVZoZEdWa0lIZHBkR2dnUjBs
TlVGZUJEaGNBQUFDTVNVUkJWSGphN2ROQkVZQWdGRVZSUGhITVlnQXpVSXNtVm5GdkIvZnNvUWIr
T2JmQm16TXZ4bmVXMUQxdnp6MndGaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNJVVFpRVVR
b1JDS0lSQ2lGQUloVkFJRWVwM3hUV1RMenp1NW9WQ0tJUkNpRkFJaFZBSUVRcWhFQW9oUWlFVVFp
RkVLSVJDS0lRSWhWQUloUkNoRUFxaEVDTFVaaTNWRXdjQk1HcjFOZ0FBQUFCSlJVNUVya0pnZ2c9
PSAyeCwgZGF0YTppbWFnZS9wbmc7YmFzZTY0JTJDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZ
QUFBQThDQUlBQUFBTDVOUTlBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVI
MndvYUJRYzRvTEVGcEFBQUFCbDBSVmgwUTI5dGJXVnVkQUJEY21WaGRHVmtJSGRwZEdnZ1IwbE5V
RmVCRGhjQUFBQ01TVVJCVkhqYTdkTkJFWUFnRkVWUlBoSE1ZZ0F6VUlzbVZuRnZCL2Zzb1FiK09i
ZkJtek12eG5lVzFEMXZ6ejJ3RmlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFxaEVDSVVRaUVVUW9S
Q0tJUkNpRkFJaFZBSUVlcDN4VFdUTHp6dTVvVkNLSVJDaUZBSWhWQUlFUXFoRUFvaFFpRVVRaUZF
S0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0xVWmkzVkV3Y0JNR3IxTmdBQUFBQkpSVTVFcmtKZ2dnPT0g
MXgiPgorICAgIDxpbWcgaWQ9ImZvbyIgc3JjPSIiIHNyY3NldD0iZGF0YTppbWFnZS9wbmc7YmFz
ZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUE4Q0FJQUFBQUw1TlE5QUFBQUNYQklX
WE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDJ3b2FCUWM0b0xFRnBBQUFBQmwwUlZoMFEy
OXRiV1Z1ZEFCRGNtVmhkR1ZrSUhkcGRHZ2dSMGxOVUZlQkRoY0FBQUNNU1VSQlZIamE3ZE5CRVlB
Z0ZFVlJQaEhNWWdBelVJc21WbkZ2Qi9mc29RYitPYmZCbXpNdnhuZVcxRDF2enoyd0ZpRVVRaUZF
S0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0lVUWlFVVFvUkNLSVJDaUZBSWhWQUlFZXAzeFRXVEx6enU1
b1ZDS0lSQ2lGQUloVkFJRVFxaEVBb2hRaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNMVVpp
M1ZFd2NCTUdyMU5nQUFBQUJKUlU1RXJrSmdnZz09IDJ4LCBkYXRhOmltYWdlL3BuZztiYXNlNjQs
aVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQThDQUlBQUFBTDVOUTlBQUFBQ1hCSVdYTUFB
QXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIMndvYUJRYzRvTEVGcEFBQUFCbDBSVmgwUTI5dGJX
VnVkQUJEY21WaGRHVmtJSGRwZEdnZ1IwbE5VRmVCRGhjQUFBQ01TVVJCVkhqYTdkTkJFWUFnRkVW
UlBoSE1ZZ0F6VUlzbVZuRnZCL2Zzb1FiK09iZkJtek12eG5lVzFEMXZ6ejJ3RmlFVVFpRkVLSVJD
S0lRSWhWQUloUkNoRUFxaEVDSVVRaUVVUW9SQ0tJUkNpRkFJaFZBSUVlcDN4VFdUTHp6dTVvVkNL
SVJDaUZBSWhWQUlFUXFoRUFvaFFpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0xVWmkzVkV3
Y0JNR3IxTmdBQUFBQkpSVTVFcmtKZ2dnPT0gMXgiPgogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMt
ZXhjZXB0LW9uZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52
YWxpZC1pbnB1dHMtZXhjZXB0LW9uZS5odG1sCmluZGV4IDM4YWI0M2RlM2YwNGY1NzgwNzkwODI0
MWM4Y2NlZmMwOGViMDU5YjMuLjBhZDI2ZTJlYWNkZTA1YmU0Y2ExZThmOGRkNWU4MzhiNTUzY2Rm
ZDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFs
aWQtaW5wdXRzLWV4Y2VwdC1vbmUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNyY3NldC1pbnZhbGlkLWlucHV0cy1leGNlcHQtb25lLmh0bWwKQEAgLTE1LDYgKzE1LDYg
QEAKIDxib2R5IGlkPSJib2R5Ij4KICAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGlt
ZyB0YWcgYmVsb3cgaXMgYSBncmVlbiBzcXVhcmUgcmVnYXJkbGVzcyBvZiB0aGUgc2NhbGUgZmFj
dG9yLiBJdCBlbnN1cmVzIHRoYXQgaW52YWxpZCBpbnB1dHMgYXJlCiAgICAgaWdub3JlZCBhbmQg
d2VsbC1mb3JtZWQgaW1hZ2VzIGFyZSBjaG9zZW4gcmVnYXJkbGVzcyBvZiB0aGVpciBxdWFsaWZp
ZXJzLCBvbmNlIHRoZXkgYXJlIHRoZSBvbmx5IGNhbmRpZGF0ZSBsZWZ0PC9kaXY+Ci0gICAgPGlt
ZyBpZD0iZm9vIiBzcmM9IiIgc3Jjc2V0PSIxeCwsICAsICAgeCAgICAsIHJlc291cmNlcy9ncmVl
bi0yMDAtcHgtc3F1YXJlLnBuZyAyeCwgMiI+CisgICAgPGltZyBpZD0iZm9vIiBzcmM9IiIgc3Jj
c2V0PSIxeCwsICAsICAgeCAgICAsMnggICwgZm9vLmpwZywgM3gsIGJhci5qcGcgNHggMTAwaCwg
Zm9vLmpwZyA1LCBiYXIuanBnIGR4LCByZXNvdXJjZXMvZ3JlZW4tMjAwLXB4LXNxdWFyZS5wbmcg
MngsIj48L2ltZz4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlucHV0cy5odG1sCmluZGV4IDJkYTZjMzA1
MTFiZmFjODdmMzk5ZDdhNTFmYjYxOTNlMDE3N2ZhMmYuLmYwYzI5YjUwMWJkNjg5YmY1MDQ0N2Yw
ZjEyOGZlYWQ5NWU0MGNjNjEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1h
Z2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMuaHRtbApAQCAtNSw2ICs1LDYgQEAKIAogPGJv
ZHkgaWQ9ImJvZHkiPgogICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGlzIGltZyB0YWcg
YmVsb3cgaXMgZW1wdHkgYW5kIGRpc3BsYXlzIG5vdGhpbmcuIEl0IGVuc3VyZXMgdGhhdCB0aGUg
c3Jjc2V0IGF0dHJpYnV0ZSBzdXBwb3J0cyBpbnZhbGlkIGlucHV0czwvZGl2PgotICAgIDxpbWcg
aGVpZ2h0PSIxMDAiIHdpZHRoPSIxMDAiIHNyYz0iIiBzcmNzZXQ9IjF4LCwgICwgICB4ICAgICwy
eCAgIj48L2ltZz4KKyAgICA8aW1nIGhlaWdodD0iMTAwIiB3aWR0aD0iMTAwIiBzcmM9IiIgc3Jj
c2V0PSIxeCwsICAsICAgeCAgICAsMnggICwgZm9vLmpwZywgM3gsIGJhci5qcGcgNHggMTAwaCwg
Zm9vLmpwZyA1LCBiYXIuanBnIGR4LCI+PC9pbWc+CiA8L2JvZHk+CiA8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211189</attachid>
            <date>2013-09-10 04:20:49 -0700</date>
            <delta_ts>2013-09-10 13:05:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119423-20130910132047.patch</filename>
            <type>text/plain</type>
            <size>18139</size>
            <attacher name="Romain Perier">romain.perier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU0NzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmNlOTNkNDg5ZDliMDg5
ZmNmZWFmNmRlYTU3ZTljYmIwNmFkYmY1Ny4uNzdjMDkzMWQ0NmM3NWY1ODE1OTYxNjkxNjY3OTk0
NmM0YjVkY2ZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEzLTA5LTEwICBSb21h
aW4gUGVyaWVyICA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisKKyAgICAgICAgSW1wcm92ZSBz
cmNzZXQgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTk0MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
SFRNTFNwYWNlT3JDb21tYSk6IEFkZCBhIG5ldyBwcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCBieSBT
dHJpbmc6OmZpbmQoKQorICAgICAgICB0byBnZXQgdGhlIGZpcnN0IHNwYWNlIG9yIGNvbW1hIGNo
YXJhY3RlciBmcm9tIHRoZSBpbnB1dCBzdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUlt
YWdlc1dpdGhTY2FsZUZyb21TcmNTZXRBdHRyaWJ1dGUpOiBBZGQgYSBuZXcgc3RhdGljIGZ1bmN0
aW9uIHRvIHBhcnNlCisgICAgICAgIGFuZCBleHRyYWN0IGltYWdlcyB3aXRoIHNjYWxlIGZyb20g
dGhlIHNyY3NldCBhdHRyaWJ1dGUuIEFsbCB2YWxpZCBjYW5kaWRhdGVzIGFyZQorICAgICAgICBy
ZXR1cm5lZCB0byB0aGUgY2FsbGVyIHRocm91Z2ggYSBsaXN0LgorICAgICAgICAoV2ViQ29yZTo6
YmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyk6IFJlbW92ZSBpbnRlcm1lZGlhdGUgYXJy
YXlzIG9mIHN0cmluZworICAgICAgICB3aGVuIHBhcnNpbmcuIFRoYXQgaXMgbW9yZSBlZmZpY2ll
bnQgYW5kIGF2b2lkcyB0cmFzaGluZyB0aGUgZGF0YSBjYWNoZQorICAgICAgICAodmFyeWluZyBi
ZXR3ZWVuIDIwIGFuZCA2NSUgZmFzdGVyIGRlcGVuZGluZyBvZiB0aGUgYW1vdW50IG9mIGRhdGEp
LgorICAgICAgICBUaGUgcGFyc2VyIG5vdyB3YWxrcyBhbG9uZyB0aGUgYXR0cmlidXRlIHZhbHVl
IGFuZCBleHRyYWN0cyB0aGUgY2FuZGlkYXRlcyBkaXJlY3RseS4KKwogMjAxMy0wOC0yNiAgQW50
b25pbyBHb21lcyAgPGExLmdvbWVzQHNpc2Euc2Ftc3VuZy5jb20+CiAKICAgICAgICAgU2Nyb2xs
aW5nIGFsbG93ZWQgd2hlbiBvdmVyZmxvdzpoaWRkZW4gKHNlZW4gb24gQWNpZDIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCmluZGV4IDNkMjY5
NDJmYzc0MjQzMDZmY2Y5ZWNkOGIyODM1OGVmYTcwYTkwYWQuLjAwY2Q0YTI3YWY2MTk3YmU0ZmZm
NDYzZDA1MzUwY2UyZGZlYWNlYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxQYXJzZXJJZGlvbXMuY3BwCkBAIC0zMTQsMzkgKzMxNCw5MyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgY29tcGFyZUJ5U2NhbGVGYWN0b3IoY29uc3QgSW1hZ2VXaXRoU2NhbGUmIGZpcnN0LCBj
b25zdCBJbWFnZQogICAgIHJldHVybiBmaXJzdC5zY2FsZUZhY3RvciA8IHNlY29uZC5zY2FsZUZh
Y3RvcjsKIH0KIAotU3RyaW5nIGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFN0cmluZyYgc3JjQXR0cmlidXRlLCBjb25zdCBTdHJp
bmcmIHNyY1NldEF0dHJpYnV0ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0hUTUxTcGFjZU9yQ29t
bWEoVUNoYXIgY2hhcmFjdGVyKQogewotICAgIEltYWdlQ2FuZGlkYXRlcyBpbWFnZUNhbmRpZGF0
ZXM7CisgICAgcmV0dXJuIGlzSFRNTFNwYWNlKGNoYXJhY3RlcikgfHwgY2hhcmFjdGVyID09ICcs
JzsKK30KIAotICAgIGNvbnN0IFN0cmluZyBzcmNTZXRBdHRyaWJ1dGVWYWx1ZSA9IHNyY1NldEF0
dHJpYnV0ZS5zaW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpOwotICAgIFZlY3RvcjxTdHJp
bmc+IHNyY1NldFRva2VuczsKKy8vIFNlZSB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIG1vcmUgZGV0
YWlscyBhYm91dCB0aGUgYWxnb3JpdGhtIHRvIGZvbGxvdy4KKy8vIGh0dHA6Ly93d3cudzMub3Jn
L2h0bWwvd2cvZHJhZnRzL3NyY3NldC93M2Mtc3Jjc2V0L092ZXJ2aWV3Lmh0bWwjcHJvY2Vzc2lu
Zy10aGUtaW1hZ2UtY2FuZGlkYXRlcworLy8gTm90ZTogU29tZSBpdGVtcyBpbiBjb21tZW50cyBi
ZWxvdyBtYWtlIHJlZmVyZW5jZSB0byB0aGUgc3BlYyAocHJlZml4ZWQgYnkgbnVtYmVycykuCitz
dGF0aWMgdm9pZCBwYXJzZUltYWdlc1dpdGhTY2FsZUZyb21TcmNTZXRBdHRyaWJ1dGUoY29uc3Qg
U3RyaW5nJiBzcmNTZXRBdHRyaWJ1dGUsIEltYWdlQ2FuZGlkYXRlcyYgaW1hZ2VDYW5kaWRhdGVz
KQoreworICAgIHNpemVfdCBpbWFnZUNhbmRpZGF0ZVN0YXJ0ID0gMDsKKyAgICB1bnNpZ25lZCBz
cmNTZXRMZW5ndGggPSBzcmNTZXRBdHRyaWJ1dGUubGVuZ3RoKCk7CiAKLSAgICBzcmNTZXRBdHRy
aWJ1dGVWYWx1ZS5zcGxpdCgnLCcsIHNyY1NldFRva2Vucyk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzcmNTZXRUb2tlbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gZGF0YTsKKyAgICB3aGlsZSAoaW1hZ2VDYW5kaWRhdGVTdGFydCA8IHNyY1NldExlbmd0aCkg
ewogICAgICAgICBmbG9hdCBpbWdTY2FsZUZhY3RvciA9IDEuMDsKLSAgICAgICAgYm9vbCB2YWxp
ZFNjYWxlRmFjdG9yID0gZmFsc2U7Ci0KLSAgICAgICAgc3JjU2V0VG9rZW5zW2ldLnN0cmlwV2hp
dGVTcGFjZSgpLnNwbGl0KCcgJywgZGF0YSk7Ci0gICAgICAgIC8vIFRoZXJlIG11c3QgYmUgYXQg
bGVhc3Qgb25lIGNhbmRpZGF0ZSBkZXNjcmlwdG9yLCBhbmQgdGhlIGxhc3Qgb25lIG11c3QKLSAg
ICAgICAgLy8gYmUgYSBzY2FsZSBmYWN0b3IuIFNpbmNlIHdlIGRvbid0IHN1cHBvcnQgZGVzY3Jp
cHRvcnMgb3RoZXIgdGhhbiBzY2FsZSwKLSAgICAgICAgLy8gaXQncyBiZXR0ZXIgdG8gZGlzY2Fy
ZCBhbnkgcnVsZSB3aXRoIHN1Y2ggZGVzY3JpcHRvcnMgcmF0aGVyIHRoYW4gYWNjZXB0Ci0gICAg
ICAgIC8vIG9ubHkgdGhlIHNjYWxlIGRhdGEuCi0gICAgICAgIGlmIChkYXRhLnNpemUoKSAhPSAy
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghZGF0YS5sYXN0KCkuZW5kc1dp
dGgoJ3gnKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzaXplX3Qgc2VwYXJhdG9y
OwogCi0gICAgICAgIGltZ1NjYWxlRmFjdG9yID0gZGF0YS5sYXN0KCkuc3Vic3RyaW5nKDAsIGRh
dGEubGFzdCgpLmxlbmd0aCgpIC0gMSkudG9GbG9hdCgmdmFsaWRTY2FsZUZhY3Rvcik7Ci0gICAg
ICAgIGlmICghdmFsaWRTY2FsZUZhY3RvcikKKyAgICAgICAgLy8gNS4gQ29sbGVjdCBhIHNlcXVl
bmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHNwYWNlIGNoYXJhY3RlcnMsIGFuZCBsZXQg
dGhhdCBiZSB1cmwuCisKKyAgICAgICAgc2l6ZV90IGltYWdlVXJsU3RhcnQgPSBzcmNTZXRBdHRy
aWJ1dGUuZmluZChpc05vdEhUTUxTcGFjZSwgaW1hZ2VDYW5kaWRhdGVTdGFydCk7IC8vIDQuIFNw
bGl0dGluZyBsb29wOiBTa2lwIHdoaXRlc3BhY2UuCisgICAgICAgIGlmIChpbWFnZVVybFN0YXJ0
ID09IG5vdEZvdW5kKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIElmIFRoZSBjdXJy
ZW50IGNhbmRpZGF0ZSBpcyBlaXRoZXIgdG90YWxseSBlbXB0eSBvciBvbmx5IGNvbnRhaW5zIHNw
YWNlLCBza2lwcGluZy4KKyAgICAgICAgaWYgKHNyY1NldEF0dHJpYnV0ZVtpbWFnZVVybFN0YXJ0
XSA9PSAnLCcpIHsKKyAgICAgICAgICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBpbWFnZVVybFN0
YXJ0ICsgMTsKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHNpemVf
dCBpbWFnZVVybEVuZCA9IHNyY1NldEF0dHJpYnV0ZS5maW5kKGlzSFRNTFNwYWNlLCBpbWFnZVVy
bFN0YXJ0ICsgMSk7CisgICAgICAgIGlmIChpbWFnZVVybEVuZCA9PSBub3RGb3VuZCkKKyAgICAg
ICAgICAgIGJyZWFrOwogCisgICAgICAgIGlmIChzcmNTZXRBdHRyaWJ1dGVbaW1hZ2VVcmxFbmQg
LSAxXSA9PSAnLCcpIHsKKyAgICAgICAgICAgIGltYWdlVXJsRW5kLS07CisgICAgICAgICAgICBz
ZXBhcmF0b3IgPSBpbWFnZVVybEVuZDsKKyAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAg
Ly8gNy4gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90ICIsIiAo
VSswMDJDKSBjaGFyYWN0ZXJzLCBhbmQgbGV0IHRoYXQgYmUgZGVzY3JpcHRvcnMuCisKKyAgICAg
ICAgICAgIHNpemVfdCBpbWFnZVNjYWxlU3RhcnQgPSBzcmNTZXRBdHRyaWJ1dGUuZmluZChpc05v
dEhUTUxTcGFjZSwgaW1hZ2VVcmxFbmQgKyAxKTsKKyAgICAgICAgICAgIGlmIChpbWFnZVNjYWxl
U3RhcnQgPT0gbm90Rm91bmQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBp
ZiAoc3JjU2V0QXR0cmlidXRlW2ltYWdlU2NhbGVTdGFydF0gPT0gJywnKQorICAgICAgICAgICAg
ICAgIHNlcGFyYXRvciA9IGltYWdlU2NhbGVTdGFydDsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgcGFydCBkaWZmZXJzIGZyb20gdGhlIHNwZWMgYXMgdGhlIGN1
cnJlbnQgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0
b3JzIGZvciBub3cuCisgICAgICAgICAgICAgICAgc2l6ZV90IGltYWdlU2NhbGVFbmQgPSBzcmNT
ZXRBdHRyaWJ1dGUuZmluZChpc0hUTUxTcGFjZU9yQ29tbWEsIGltYWdlU2NhbGVTdGFydCArIDEp
OworICAgICAgICAgICAgICAgIGltYWdlU2NhbGVFbmQgPSAoaW1hZ2VTY2FsZUVuZCA9PSBub3RG
b3VuZCkgPyBzcmNTZXRMZW5ndGggOiBpbWFnZVNjYWxlRW5kOworICAgICAgICAgICAgICAgIHNl
cGFyYXRvciA9IGltYWdlU2NhbGVFbmQ7CisgICAgICAgICAgICAgICAgLy8gQmUgc3VyZSB0aGF0
IHRoZXJlIGFyZSBubyBvdGhlciBkZXNjcmlwdG9ycy4KKyAgICAgICAgICAgICAgICB3aGlsZSAo
KHNlcGFyYXRvciA8IHNyY1NldExlbmd0aCAtIDEpICYmIGlzSFRNTFNwYWNlKHNyY1NldEF0dHJp
YnV0ZVtzZXBhcmF0b3JdKSkKKyAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yKys7CisgICAg
ICAgICAgICAgICAgaWYgKChzZXBhcmF0b3IgPCBzcmNTZXRMZW5ndGggLSAxKSAmJiBzcmNTZXRB
dHRyaWJ1dGVbc2VwYXJhdG9yXSAhPSAnLCcpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VwYXJh
dG9yID0gc3JjU2V0QXR0cmlidXRlLmZpbmQoJywnLCBzZXBhcmF0b3IgKyAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHNlcGFyYXRvciA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNlcGFyYXRvciA9IHNyY1NldExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgaW1h
Z2VDYW5kaWRhdGVTdGFydCA9IHNlcGFyYXRvciArIDE7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzcmNTZXRB
dHRyaWJ1dGVbaW1hZ2VTY2FsZUVuZCAtIDFdICE9ICd4JykgeworICAgICAgICAgICAgICAgICAg
ICBpbWFnZUNhbmRpZGF0ZVN0YXJ0ID0gc2VwYXJhdG9yICsgMTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJvb2wgdmFs
aWRTY2FsZUZhY3RvciA9IGZhbHNlOworICAgICAgICAgICAgICAgIGltZ1NjYWxlRmFjdG9yID0g
Y2hhcmFjdGVyc1RvRmxvYXQoc3JjU2V0QXR0cmlidXRlLmNoYXJhY3RlcnMoKSArIGltYWdlU2Nh
bGVTdGFydCwgaW1hZ2VTY2FsZUVuZCAtIGltYWdlU2NhbGVTdGFydCAtIDEsICZ2YWxpZFNjYWxl
RmFjdG9yKTsKKworICAgICAgICAgICAgICAgIGlmICghdmFsaWRTY2FsZUZhY3RvcikgeworICAg
ICAgICAgICAgICAgICAgICBpbWFnZUNhbmRpZGF0ZVN0YXJ0ID0gc2VwYXJhdG9yICsgMTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CiAgICAgICAgIEltYWdlV2l0aFNjYWxlIGltYWdlOwotICAgICAgICBp
bWFnZS5pbWFnZVVSTCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhWzBdKTsKKyAgICAg
ICAgaW1hZ2UuaW1hZ2VVUkwgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoU3RyaW5nSW1wbDo6
Y3JlYXRlV2l0aG91dENvcHlpbmcoc3JjU2V0QXR0cmlidXRlLmNoYXJhY3RlcnMoKSArIGltYWdl
VXJsU3RhcnQsIGltYWdlVXJsRW5kIC0gaW1hZ2VVcmxTdGFydCkpOwogICAgICAgICBpbWFnZS5z
Y2FsZUZhY3RvciA9IGltZ1NjYWxlRmFjdG9yOwogCiAgICAgICAgIGltYWdlQ2FuZGlkYXRlcy5h
cHBlbmQoaW1hZ2UpOworICAgICAgICAvLyAxMS4gUmV0dXJuIHRvIHRoZSBzdGVwIGxhYmVsZWQg
c3BsaXR0aW5nIGxvb3AuCisgICAgICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBzZXBhcmF0b3Ig
KyAxOwogICAgIH0KK30KKworU3RyaW5nIGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMo
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFN0cmluZyYgc3JjQXR0cmlidXRlLCBjb25z
dCBTdHJpbmcmIHNyY1NldEF0dHJpYnV0ZSkKK3sKKyAgICBJbWFnZUNhbmRpZGF0ZXMgaW1hZ2VD
YW5kaWRhdGVzOworCisgICAgcGFyc2VJbWFnZXNXaXRoU2NhbGVGcm9tU3JjU2V0QXR0cmlidXRl
KHNyY1NldEF0dHJpYnV0ZSwgaW1hZ2VDYW5kaWRhdGVzKTsKIAogICAgIGNvbnN0IFN0cmluZyBz
cmMgPSAgc3JjQXR0cmlidXRlLnNpbXBsaWZ5V2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7CiAgICAg
aWYgKCFzcmMuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzI2OTBjNTQyNWNiYTJiOWI4OGQ5NjcyMjc4
MTZmMTQ3ZDc3MjAzOS4uNmQwMDFjMjRhNDUyN2JkYjMxYmM0YmY4M2Q3ZDliOGYxMmUzYjc3ZSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEzLTA5LTEwICBSb21haW4gUGVyaWVyICA8cm9tYWlu
LnBlcmllckBnbWFpbC5jb20+CisKKyAgICAgICAgSW1wcm92ZSBzcmNzZXQgcGFyc2VyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk0MjMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvaGlkcGkv
aW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0LWludmFsaWQtaW5wdXRzLmh0bWw6IEVuc3VyZXMgdGhh
dCBhIHZhcmlvdXMgaW52YWxpZCBmb3JtIG9mIGRhdGEgdXJpIHNjaGVtZXMgYXJlIHN1cHBvcnRl
ZCBieSB0aGUgc3Jjc2V0IGF0dHJpYnV0ZS4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNy
Y3NldC1kYXRhLXNyY3NldC12YWxpZC1pbnB1dHMuaHRtbDogRW5zdXJlcyB0aGF0IGEgdmFyaW91
cyB2YWxpZCBmb3JtIG9mIGRhdGEgdXJpIHNjaGVtZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgc3Jj
c2V0IGF0dHJpYnV0ZS4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNy
Y3NldC5odG1sOiBVc2UgY29tbWEgaW5zdGVhZCBvZiAlLgorICAgICAgICAqIGZhc3QvaGlkcGkv
aW1hZ2Utc3Jjc2V0LWZyYWN0aW9uLTEuNXguaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9o
aWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtZXhjZXB0LW9uZS5odG1sOiBNaXNzaW5n
IHNyY3NldC1oZWxwZXIuanMuIEFkZGluZyBtb3JlIGludmFsaWQgY2FzZXMuCisgICAgICAgICog
ZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMuaHRtbDogQWRkaW5nIG1vcmUg
aW52YWxpZCBjYXNlcy4KKwogMjAxMy0wOC0yNiAgQW50b25pbyBHb21lcyAgPGExLmdvbWVzQHNp
c2Euc2Ftc3VuZy5jb20+CiAKICAgICAgICAgU2Nyb2xsaW5nIGFsbG93ZWQgd2hlbiBvdmVyZmxv
dzpoaWRkZW4gKHNlZW4gb24gQWNpZDIpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hp
ZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC1leHBlY3RlZC50eHQKaW5kZXggOGY4
M2EzMjYyZjQxNjJlZjU3OTY3Mzc0OWY4N2Y1NmZmN2E4NzE2Ny4uMWU4M2EzZjRlN2QxMWY5Nzk3
YzhlNjg5ZjYxZDNmNjIwNzRkMGRiNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0LWV4cGVjdGVkLnR4dApAQCAtMSwz
ICsxLDMgQEAKIFBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpLmNsaWVudFdpZHRo
PT0xNTAgaXMgdHJ1ZQotVGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgaW1hZ2UgYmVsb3cgbG9va3Mg
bGlrZSBhIDJ4MiBncmlkICh5ZWxsb3csIGdyYXksIGxpZ2h0IGdyZWVuLCBkYXJrIGdyZWVuKS4g
SW4gdGhpcyBjYXNlIHRoZSBzcmNzZXQgYXR0cmlidXRlIGhhcyBhIGJhc2U2NCB1cmwsIHdpdGgg
dGhlIGNvbW1hIGVzY2FwZWQuCitUaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBpbWFnZSBiZWxvdyBs
b29rcyBsaWtlIGEgMngyIGdyaWQgKHllbGxvdywgZ3JheSwgbGlnaHQgZ3JlZW4sIGRhcmsgZ3Jl
ZW4pLiBJbiB0aGlzIGNhc2UgdGhlIHNyY3NldCBhdHRyaWJ1dGUgaGFzIGEgYmFzZTY0IHVybC4K
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1z
cmNzZXQtaW52YWxpZC1pbnB1dHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIzNjkyY2U0MmRhY2Y0YTAyMjZmMjE5ODAxNDcyYjkxYjE2ZGM0MjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNy
Y3NldC1pbnZhbGlkLWlucHV0cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyIEBACitUaGlzIHRl
c3QgcGFzc2VzIGlmIHRoaXMgaW1nIHRhZyBiZWxvdyBpcyBlbXB0eSBhbmQgZGlzcGxheXMgbm90
aGluZy4gSXQgZW5zdXJlcyB0aGF0IHRoZSBzcmNzZXQgYXR0cmlidXRlIHN1cHBvcnRzIGludmFs
aWQgZGF0YSB1cmkgc2NoZW1lcworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBp
L2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC1pbnZhbGlkLWlucHV0cy5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQtaW52YWxpZC1pbnB1dHMuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xMTI2NzU3YjNjNWNjOTE0YWMzZDI4NTQ2ZTJmNDA0MDZjZmE2ODRiCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0
YS1zcmNzZXQtaW52YWxpZC1pbnB1dHMuaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGlzIGlt
ZyB0YWcgYmVsb3cgaXMgZW1wdHkgYW5kIGRpc3BsYXlzIG5vdGhpbmcuIEl0IGVuc3VyZXMgdGhh
dCB0aGUgc3Jjc2V0IGF0dHJpYnV0ZSBzdXBwb3J0cyBpbnZhbGlkIGRhdGEgdXJpIHNjaGVtZXM8
L2Rpdj4KKyAgICA8aW1nIHNyYz0iIiBzcmNzZXQ9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxUaGlz
SXNBTWFsRm9ybWVkRGF0YSUvLHdpdGhGb3JiaWRkZW4sQ2hhcmFjdGVyczohP34mIycpIDJ4LCBk
YXRhOiAzeCwgZGF0YTo7Y2hhcnNldD0gNHgsIGRhdGE6O2NoYXJzZXQ9dXMtQVNDSUkgNXgsIGRh
dGE6LEJhZERhdGEgNngsIGRhdGE6Zm9vL2Jhcixmb29iYXIgN3gsIGRhdGE6Zm9vL2JhciwgOHgs
IGRhdGE6Zm9vL2JhciA5eCI+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC12YWxpZC1pbnB1dHMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1zcmNz
ZXQtdmFsaWQtaW5wdXRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjc3OGY1MzQ3ZjYzMmYx
MWQ2NzZmOWFiNjA0ZDQ3MGU0NjliZDFlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQtdmFsaWQtaW5wdXRzLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDIgQEAKK1RoaXMgdGVzdCBwYXNzZXMgaWYgdGhpcyBpbWcgdGFnIGJl
bG93IGlzIGVtcHR5IGFuZCBkaXNwbGF5cyBub3RoaW5nLiBJdCBlbnN1cmVzIHRoYXQgdGhlIHNy
Y3NldCBhdHRyaWJ1dGUgc3VwcG9ydHMgdmFyaW91cyBmb3JtcyBvZiB2YWxpZCBkYXRhIHVyaSBz
Y2hlbWVzCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0
LWRhdGEtc3Jjc2V0LXZhbGlkLWlucHV0cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9p
bWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQtdmFsaWQtaW5wdXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmRh
ZjcwNzIzNGFkMDgyMWZhZGMzZGQ2ODUwNzUwYTM1OWQzNjAxZQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0LXZhbGlkLWlu
cHV0cy5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoaXMgaW1nIHRhZyBiZWxvdyBpcyBlbXB0
eSBhbmQgZGlzcGxheXMgbm90aGluZy4gSXQgZW5zdXJlcyB0aGF0IHRoZSBzcmNzZXQgYXR0cmli
dXRlIHN1cHBvcnRzIHZhcmlvdXMgZm9ybXMgb2YgdmFsaWQgZGF0YSB1cmkgc2NoZW1lczwvZGl2
PgorICAgIDxpbWcgc3JjPSIiIHNyY3NldD0iZGF0YToscGxhaW50ZXh0IDJ4LCBkYXRhOjtjaGFy
c2V0PXVzLUFTQ0lJLHBsYWludGV4dCAzeCwgZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXMtQVND
SUkscGxhaW50ZXh0IDR4LCBkYXRhOnRleHQvcGxhaW4scGxhaW50ZXh0IDV4LCBkYXRhOmltYWdl
L3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQThDQUlBQUFBTDVOUTlB
QUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIMndvYUJRYzRvTEVGcEFBQUFC
bDBSVmgwUTI5dGJXVnVkQUJEY21WaGRHVmtJSGRwZEdnZ1IwbE5VRmVCRGhjQUFBQ01TVVJCVkhq
YTdkTkJFWUFnRkVWUlBoSE1ZZ0F6VUlzbVZuRnZCL2Zzb1FiK09iZkJtek12eG5lVzFEMXZ6ejJ3
RmlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFxaEVDSVVRaUVVUW9SQ0tJUkNpRkFJaFZBSUVlcDN4
VFdUTHp6dTVvVkNLSVJDaUZBSWhWQUlFUXFoRUFvaFFpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVB
cWhFQ0xVWmkzVkV3Y0JNR3IxTmdBQUFBQkpSVTVFcmtKZ2dnPT0gNngiPgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0
YS1zcmNzZXQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEt
c3Jjc2V0Lmh0bWwKaW5kZXggNGNlMmZlYTBjMzFkMjFlMDZhZTM2YzE0ZTUyMWY5MDg1ZGVhYmRh
Zi4uNDg0MDE0Y2ZiNDUwNWQ4ZDM0MzcwYzdjMGE0ZTJlOWFjOGI5MTM0YSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC5odG1sCkBA
IC0xMiw3ICsxMiw3IEBACiA8L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IGlkPSJib2R5Ij4KLSAg
ICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGltYWdlIGJlbG93IGxvb2tzIGxpa2UgYSAy
eDIgZ3JpZCAoeWVsbG93LCBncmF5LCBsaWdodCBncmVlbiwgZGFyayBncmVlbikuIEluIHRoaXMg
Y2FzZSB0aGUgc3Jjc2V0IGF0dHJpYnV0ZSBoYXMgYSBiYXNlNjQgdXJsLCB3aXRoIHRoZSBjb21t
YSBlc2NhcGVkLjwvZGl2PgotICAgIDxpbWcgaWQ9ImZvbyIgc3JjPSIiIHNyY3NldD0iZGF0YTpp
bWFnZS9wbmc7YmFzZTY0JTJDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQThDQUlBQUFB
TDVOUTlBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIMndvYUJRYzRvTEVG
cEFBQUFCbDBSVmgwUTI5dGJXVnVkQUJEY21WaGRHVmtJSGRwZEdnZ1IwbE5VRmVCRGhjQUFBQ01T
VVJCVkhqYTdkTkJFWUFnRkVWUlBoSE1ZZ0F6VUlzbVZuRnZCL2Zzb1FiK09iZkJtek12eG5lVzFE
MXZ6ejJ3RmlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFxaEVDSVVRaUVVUW9SQ0tJUkNpRkFJaFZB
SUVlcDN4VFdUTHp6dTVvVkNLSVJDaUZBSWhWQUlFUXFoRUFvaFFpRVVRaUZFS0lSQ0tJUUloVkFJ
aFJDaEVBcWhFQ0xVWmkzVkV3Y0JNR3IxTmdBQUFBQkpSVTVFcmtKZ2dnPT0gMngsIGRhdGE6aW1h
Z2UvcG5nO2Jhc2U2NCUyQ2lWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUE4Q0FJQUFBQUw1
TlE5QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDJ3b2FCUWM0b0xFRnBB
QUFBQmwwUlZoMFEyOXRiV1Z1ZEFCRGNtVmhkR1ZrSUhkcGRHZ2dSMGxOVUZlQkRoY0FBQUNNU1VS
QlZIamE3ZE5CRVlBZ0ZFVlJQaEhNWWdBelVJc21WbkZ2Qi9mc29RYitPYmZCbXpNdnhuZVcxRDF2
enoyd0ZpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0lVUWlFVVFvUkNLSVJDaUZBSWhWQUlF
ZXAzeFRXVEx6enU1b1ZDS0lSQ2lGQUloVkFJRVFxaEVBb2hRaUVVUWlGRUtJUkNLSVFJaFZBSWhS
Q2hFQXFoRUNMVVppM1ZFd2NCTUdyMU5nQUFBQUJKUlU1RXJrSmdnZz09IDF4Ij4KKyAgICA8ZGl2
PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGltYWdlIGJlbG93IGxvb2tzIGxpa2UgYSAyeDIgZ3Jp
ZCAoeWVsbG93LCBncmF5LCBsaWdodCBncmVlbiwgZGFyayBncmVlbikuIEluIHRoaXMgY2FzZSB0
aGUgc3Jjc2V0IGF0dHJpYnV0ZSBoYXMgYSBiYXNlNjQgdXJsLjwvZGl2PgorICAgIDxpbWcgaWQ9
ImZvbyIgc3JjPSIiIHNyY3NldD0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFB
QU5TVWhFVWdBQUFKWUFBQUE4Q0FJQUFBQUw1TlE5QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3
WUFBQUFCM1JKVFVVSDJ3b2FCUWM0b0xFRnBBQUFBQmwwUlZoMFEyOXRiV1Z1ZEFCRGNtVmhkR1Zr
SUhkcGRHZ2dSMGxOVUZlQkRoY0FBQUNNU1VSQlZIamE3ZE5CRVlBZ0ZFVlJQaEhNWWdBelVJc21W
bkZ2Qi9mc29RYitPYmZCbXpNdnhuZVcxRDF2enoyd0ZpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVB
cWhFQ0lVUWlFVVFvUkNLSVJDaUZBSWhWQUlFZXAzeFRXVEx6enU1b1ZDS0lSQ2lGQUloVkFJRVFx
aEVBb2hRaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNMVVppM1ZFd2NCTUdyMU5nQUFBQUJK
UlU1RXJrSmdnZz09IDJ4LCBkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNV
aEVVZ0FBQUpZQUFBQThDQUlBQUFBTDVOUTlBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFB
QUIzUkpUVVVIMndvYUJRYzRvTEVGcEFBQUFCbDBSVmgwUTI5dGJXVnVkQUJEY21WaGRHVmtJSGRw
ZEdnZ1IwbE5VRmVCRGhjQUFBQ01TVVJCVkhqYTdkTkJFWUFnRkVWUlBoSE1ZZ0F6VUlzbVZuRnZC
L2Zzb1FiK09iZkJtek12eG5lVzFEMXZ6ejJ3RmlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFxaEVD
SVVRaUVVUW9SQ0tJUkNpRkFJaFZBSUVlcDN4VFdUTHp6dTVvVkNLSVJDaUZBSWhWQUlFUXFoRUFv
aFFpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0xVWmkzVkV3Y0JNR3IxTmdBQUFBQkpSVTVF
cmtKZ2dnPT0gMXgiPgogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZnJhY3Rpb24tMS41eC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1mcmFjdGlvbi0xLjV4LWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yM2QyYzM5NjAzODVlYzEzZGE4M2JkOGU5MDgyYjcyNTgzM2UzN2JjCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZnJh
Y3Rpb24tMS41eC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACitQQVNTIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0ZXN0aW1nIikuY2xpZW50V2lkdGg9PTIwMCBpcyB0cnVlCitUaGlzIHRl
c3QgcGFzc2VzIGlmIHRoZSBzcmNzZXQgcmVzb3VyY2UgaXMgbG9hZGVkIGFuZCBkaXNwbGF5ZWQg
YXMgdGhlIGltYWdlCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c3Jjc2V0LWZyYWN0aW9uLTEuNXguaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c3Jjc2V0LWZyYWN0aW9uLTEuNXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzA2M2E4NjI4ZGYzYzIzZDk5
MGE2M2EwMTUwYjc1NjU2Zjc3NzBhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9oaWRwaS9pbWFnZS1zcmNzZXQtZnJhY3Rpb24tMS41eC5odG1sCkBAIC0wLDAgKzEsMjMgQEAK
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorICAgIHdpbmRvdy50YXJnZXRTY2FsZUZhY3RvciA9
IDEuNTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zcmNzZXQtaGVscGVyLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAg
ICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgfQorCisgICAgYWRkRXZlbnRMaXN0ZW5l
cigibG9hZCIsIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoaW50ZXJuYWxzKQorICAgICAgICAg
ICAgc2hvdWxkQmVUcnVlKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdGltZyIpLmNsaWVu
dFdpZHRoPT0yMDAnKTsKKyAgICB9LCBmYWxzZSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBzcmNzZXQgcmVzb3VyY2UgaXMgbG9hZGVk
IGFuZCBkaXNwbGF5ZWQgYXMgdGhlIGltYWdlPC9kaXY+Cis8aW1nIHNyYz0icmVzb3VyY2VzL2Js
dWUtMTAwLXB4LXNxdWFyZS5wbmciIHNyY3NldD0icmVzb3VyY2VzL2dyZWVuLTIwMC1weC1zcXVh
cmUucG5nIDJ4IiBpZD0idGVzdGltZyI+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlucHV0cy1leGNlcHQt
b25lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlu
cHV0cy1leGNlcHQtb25lLmh0bWwKaW5kZXggMzhhYjQzZGUzZjA0ZjU3ODA3OTA4MjQxYzhjY2Vm
YzA4ZWIwNTliMy4uY2VlZWRlZTdlOWU2NzU5MWE1OTBhMWQ5Zjc2MTg0NDdhNjVjN2Q3NSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1
dHMtZXhjZXB0LW9uZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jj
c2V0LWludmFsaWQtaW5wdXRzLWV4Y2VwdC1vbmUuaHRtbApAQCAtMSw1ICsxLDYgQEAKIDxodG1s
PgogPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NyY3NldC1oZWxwZXIuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0PgogICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewpAQCAtMTUsNiArMTYs
NiBAQAogPGJvZHkgaWQ9ImJvZHkiPgogICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUg
aW1nIHRhZyBiZWxvdyBpcyBhIGdyZWVuIHNxdWFyZSByZWdhcmRsZXNzIG9mIHRoZSBzY2FsZSBm
YWN0b3IuIEl0IGVuc3VyZXMgdGhhdCBpbnZhbGlkIGlucHV0cyBhcmUKICAgICBpZ25vcmVkIGFu
ZCB3ZWxsLWZvcm1lZCBpbWFnZXMgYXJlIGNob3NlbiByZWdhcmRsZXNzIG9mIHRoZWlyIHF1YWxp
ZmllcnMsIG9uY2UgdGhleSBhcmUgdGhlIG9ubHkgY2FuZGlkYXRlIGxlZnQ8L2Rpdj4KLSAgICA8
aW1nIGlkPSJmb28iIHNyYz0iIiBzcmNzZXQ9IjF4LCwgICwgICB4ICAgICwgcmVzb3VyY2VzL2dy
ZWVuLTIwMC1weC1zcXVhcmUucG5nIDJ4LCAyIj4KKyAgICA8aW1nIGlkPSJmb28iIHNyYz0iIiBz
cmNzZXQ9IjF4LCwgICwgICB4ICAgICwyeCAgLCBmb28uanBnLCAzeCwgYmFyLmpwZyA0eCAxMDBo
LCBmb28uanBnIDUsIGJhci5qcGcgZHgsIHJlc291cmNlcy9ncmVlbi0yMDAtcHgtc3F1YXJlLnBu
ZyAgIDJ4ICwiPjwvaW1nPgogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLmh0bWwKaW5kZXggMmRh
NmMzMDUxMWJmYWM4N2YzOTlkN2E1MWZiNjE5M2UwMTc3ZmEyZi4uMjRkYTI5NmUyZDgxZjA1Mzhi
ZDgxYmI1ZWU2MTI3YTk4NTkyNzUwOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlucHV0cy5odG1sCkBAIC01LDYgKzUsNiBAQAog
CiA8Ym9keSBpZD0iYm9keSI+CiAgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoaXMgaW1n
IHRhZyBiZWxvdyBpcyBlbXB0eSBhbmQgZGlzcGxheXMgbm90aGluZy4gSXQgZW5zdXJlcyB0aGF0
IHRoZSBzcmNzZXQgYXR0cmlidXRlIHN1cHBvcnRzIGludmFsaWQgaW5wdXRzPC9kaXY+Ci0gICAg
PGltZyBoZWlnaHQ9IjEwMCIgd2lkdGg9IjEwMCIgc3JjPSIiIHNyY3NldD0iMXgsLCAgLCAgIHgg
ICAgLDJ4ICAiPjwvaW1nPgorICAgIDxpbWcgaGVpZ2h0PSIxMDAiIHdpZHRoPSIxMDAiIHNyYz0i
IiBzcmNzZXQ9IjF4LCwgICwgICB4ICAgICwyeCAgLCBmb28uanBnLCAzeCwgYmFyLmpwZyA0eCAx
MDBoLCBmb28uanBnIDUsIGJhci5qcGcgZHgsZm9vLmpwZyxiYXIuanBnLCI+PC9pbWc+CiA8L2Jv
ZHk+CiA8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211229</attachid>
            <date>2013-09-10 13:05:41 -0700</date>
            <delta_ts>2013-09-13 04:27:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119423-20130910220538.patch</filename>
            <type>text/plain</type>
            <size>18366</size>
            <attacher name="Romain Perier">romain.perier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU1NDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTU0NDljZGU0YjlhMmRm
ZGYxMWJkOWIzZTFhZjk4MjA4MjVjM2ZhMi4uMDJlYjBmNmY1N2QyOTEzN2JhOTBiMDU4N2U2ZmI2
OGNkZjYzYzg0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEzLTA5LTEwICBSb21h
aW4gUGVyaWVyICA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisKKyAgICAgICAgSW1wcm92ZSBz
cmNzZXQgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTk0MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
SFRNTFNwYWNlT3JDb21tYSk6IEFkZCBhIG5ldyBwcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCBieSBT
dHJpbmc6OmZpbmQoKQorICAgICAgICB0byBnZXQgdGhlIGZpcnN0IHNwYWNlIG9yIGNvbW1hIGNo
YXJhY3RlciBmcm9tIHRoZSBpbnB1dCBzdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUlt
YWdlc1dpdGhTY2FsZUZyb21TcmNTZXRBdHRyaWJ1dGUpOiBBZGQgYSBuZXcgc3RhdGljIGZ1bmN0
aW9uIHRvIHBhcnNlCisgICAgICAgIGFuZCBleHRyYWN0IGltYWdlcyB3aXRoIHNjYWxlIGZyb20g
dGhlIHNyY3NldCBhdHRyaWJ1dGUuIEFsbCB2YWxpZCBjYW5kaWRhdGVzIGFyZQorICAgICAgICBy
ZXR1cm5lZCB0byB0aGUgY2FsbGVyIHRocm91Z2ggYSBsaXN0LgorICAgICAgICAoV2ViQ29yZTo6
YmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyk6IFJlbW92ZSBpbnRlcm1lZGlhdGUgYXJy
YXlzIG9mIHN0cmluZworICAgICAgICB3aGVuIHBhcnNpbmcuIFRoYXQgaXMgbW9yZSBlZmZpY2ll
bnQgYW5kIGF2b2lkcyB0cmFzaGluZyB0aGUgZGF0YSBjYWNoZQorICAgICAgICAodmFyeWluZyBi
ZXR3ZWVuIDIwIGFuZCA2NSUgZmFzdGVyIGRlcGVuZGluZyBvZiB0aGUgYW1vdW50IG9mIGRhdGEp
CisgICAgICAgIFRoZSBwYXJzZXIgbm93IHdhbGtzIGFsb25nIHRoZSBhdHRyaWJ1dGUgdmFsdWUg
YW5kIGV4dHJhY3RzIHRoZSBjYW5kaWRhdGVzIGRpcmVjdGx5LgorCiAyMDEzLTA5LTEwICBBbGJl
cnRvIEdhcmNpYSAgPGJlcnRvQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVGhlIGNvZGUg
Z2VuZXJhdG9yIHByb2R1Y2VzIGEgd2FybmluZyBpZiBhIHBhcmFtZXRlciBjYW4gYmUgTlVMTApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAppbmRl
eCAzZDI2OTQyZmM3NDI0MzA2ZmNmOWVjZDhiMjgzNThlZmE3MGE5MGFkLi4wMGNkNGEyN2FmNjE5
N2JlNGZmZjQ2M2QwNTM1MGNlMmRmZWFjZWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcApAQCAtMzE0LDM5ICszMTQsOTMgQEAgc3RhdGlj
IGlubGluZSBib29sIGNvbXBhcmVCeVNjYWxlRmFjdG9yKGNvbnN0IEltYWdlV2l0aFNjYWxlJiBm
aXJzdCwgY29uc3QgSW1hZ2UKICAgICByZXR1cm4gZmlyc3Quc2NhbGVGYWN0b3IgPCBzZWNvbmQu
c2NhbGVGYWN0b3I7CiB9CiAKLVN0cmluZyBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVz
KGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25zdCBTdHJpbmcmIHNyY0F0dHJpYnV0ZSwgY29u
c3QgU3RyaW5nJiBzcmNTZXRBdHRyaWJ1dGUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNIVE1MU3Bh
Y2VPckNvbW1hKFVDaGFyIGNoYXJhY3RlcikKIHsKLSAgICBJbWFnZUNhbmRpZGF0ZXMgaW1hZ2VD
YW5kaWRhdGVzOworICAgIHJldHVybiBpc0hUTUxTcGFjZShjaGFyYWN0ZXIpIHx8IGNoYXJhY3Rl
ciA9PSAnLCc7Cit9CiAKLSAgICBjb25zdCBTdHJpbmcgc3JjU2V0QXR0cmlidXRlVmFsdWUgPSBz
cmNTZXRBdHRyaWJ1dGUuc2ltcGxpZnlXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKTsKLSAgICBWZWN0
b3I8U3RyaW5nPiBzcmNTZXRUb2tlbnM7CisvLyBTZWUgdGhlIHNwZWNpZmljYXRpb25zIGZvciBt
b3JlIGRldGFpbHMgYWJvdXQgdGhlIGFsZ29yaXRobSB0byBmb2xsb3cuCisvLyBodHRwOi8vd3d3
LnczLm9yZy9odG1sL3dnL2RyYWZ0cy9zcmNzZXQvdzNjLXNyY3NldC9PdmVydmlldy5odG1sI3By
b2Nlc3NpbmctdGhlLWltYWdlLWNhbmRpZGF0ZXMKKy8vIE5vdGU6IFNvbWUgaXRlbXMgaW4gY29t
bWVudHMgYmVsb3cgbWFrZSByZWZlcmVuY2UgdG8gdGhlIHNwZWMgKHByZWZpeGVkIGJ5IG51bWJl
cnMpLgorc3RhdGljIHZvaWQgcGFyc2VJbWFnZXNXaXRoU2NhbGVGcm9tU3JjU2V0QXR0cmlidXRl
KGNvbnN0IFN0cmluZyYgc3JjU2V0QXR0cmlidXRlLCBJbWFnZUNhbmRpZGF0ZXMmIGltYWdlQ2Fu
ZGlkYXRlcykKK3sKKyAgICBzaXplX3QgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IDA7CisgICAgdW5z
aWduZWQgc3JjU2V0TGVuZ3RoID0gc3JjU2V0QXR0cmlidXRlLmxlbmd0aCgpOwogCi0gICAgc3Jj
U2V0QXR0cmlidXRlVmFsdWUuc3BsaXQoJywnLCBzcmNTZXRUb2tlbnMpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3JjU2V0VG9rZW5zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFZlY3Rv
cjxTdHJpbmc+IGRhdGE7CisgICAgd2hpbGUgKGltYWdlQ2FuZGlkYXRlU3RhcnQgPCBzcmNTZXRM
ZW5ndGgpIHsKICAgICAgICAgZmxvYXQgaW1nU2NhbGVGYWN0b3IgPSAxLjA7Ci0gICAgICAgIGJv
b2wgdmFsaWRTY2FsZUZhY3RvciA9IGZhbHNlOwotCi0gICAgICAgIHNyY1NldFRva2Vuc1tpXS5z
dHJpcFdoaXRlU3BhY2UoKS5zcGxpdCgnICcsIGRhdGEpOwotICAgICAgICAvLyBUaGVyZSBtdXN0
IGJlIGF0IGxlYXN0IG9uZSBjYW5kaWRhdGUgZGVzY3JpcHRvciwgYW5kIHRoZSBsYXN0IG9uZSBt
dXN0Ci0gICAgICAgIC8vIGJlIGEgc2NhbGUgZmFjdG9yLiBTaW5jZSB3ZSBkb24ndCBzdXBwb3J0
IGRlc2NyaXB0b3JzIG90aGVyIHRoYW4gc2NhbGUsCi0gICAgICAgIC8vIGl0J3MgYmV0dGVyIHRv
IGRpc2NhcmQgYW55IHJ1bGUgd2l0aCBzdWNoIGRlc2NyaXB0b3JzIHJhdGhlciB0aGFuIGFjY2Vw
dAotICAgICAgICAvLyBvbmx5IHRoZSBzY2FsZSBkYXRhLgotICAgICAgICBpZiAoZGF0YS5zaXpl
KCkgIT0gMikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWRhdGEubGFzdCgp
LmVuZHNXaXRoKCd4JykpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc2l6ZV90IHNl
cGFyYXRvcjsKIAotICAgICAgICBpbWdTY2FsZUZhY3RvciA9IGRhdGEubGFzdCgpLnN1YnN0cmlu
ZygwLCBkYXRhLmxhc3QoKS5sZW5ndGgoKSAtIDEpLnRvRmxvYXQoJnZhbGlkU2NhbGVGYWN0b3Ip
OwotICAgICAgICBpZiAoIXZhbGlkU2NhbGVGYWN0b3IpCisgICAgICAgIC8vIDUuIENvbGxlY3Qg
YSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBzcGFjZSBjaGFyYWN0ZXJzLCBh
bmQgbGV0IHRoYXQgYmUgdXJsLgorCisgICAgICAgIHNpemVfdCBpbWFnZVVybFN0YXJ0ID0gc3Jj
U2V0QXR0cmlidXRlLmZpbmQoaXNOb3RIVE1MU3BhY2UsIGltYWdlQ2FuZGlkYXRlU3RhcnQpOyAv
LyA0LiBTcGxpdHRpbmcgbG9vcDogU2tpcCB3aGl0ZXNwYWNlLgorICAgICAgICBpZiAoaW1hZ2VV
cmxTdGFydCA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBJZiBU
aGUgY3VycmVudCBjYW5kaWRhdGUgaXMgZWl0aGVyIHRvdGFsbHkgZW1wdHkgb3Igb25seSBjb250
YWlucyBzcGFjZSwgc2tpcHBpbmcuCisgICAgICAgIGlmIChzcmNTZXRBdHRyaWJ1dGVbaW1hZ2VV
cmxTdGFydF0gPT0gJywnKSB7CisgICAgICAgICAgICBpbWFnZUNhbmRpZGF0ZVN0YXJ0ID0gaW1h
Z2VVcmxTdGFydCArIDE7CiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICBzaXplX3QgaW1hZ2VVcmxFbmQgPSBzcmNTZXRBdHRyaWJ1dGUuZmluZChpc0hUTUxTcGFjZSwg
aW1hZ2VVcmxTdGFydCArIDEpOworICAgICAgICBpZiAoaW1hZ2VVcmxFbmQgPT0gbm90Rm91bmQp
CisgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBpZiAoc3JjU2V0QXR0cmlidXRlW2ltYWdl
VXJsRW5kIC0gMV0gPT0gJywnKSB7CisgICAgICAgICAgICBpbWFnZVVybEVuZC0tOworICAgICAg
ICAgICAgc2VwYXJhdG9yID0gaW1hZ2VVcmxFbmQ7CisgICAgICAgIH0gZWxzZSB7CisKKyAgICAg
ICAgICAgIC8vIDcuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5v
dCAiLCIgKFUrMDAyQykgY2hhcmFjdGVycywgYW5kIGxldCB0aGF0IGJlIGRlc2NyaXB0b3JzLgor
CisgICAgICAgICAgICBzaXplX3QgaW1hZ2VTY2FsZVN0YXJ0ID0gc3JjU2V0QXR0cmlidXRlLmZp
bmQoaXNOb3RIVE1MU3BhY2UsIGltYWdlVXJsRW5kICsgMSk7CisgICAgICAgICAgICBpZiAoaW1h
Z2VTY2FsZVN0YXJ0ID09IG5vdEZvdW5kKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgaWYgKHNyY1NldEF0dHJpYnV0ZVtpbWFnZVNjYWxlU3RhcnRdID09ICcsJykKKyAgICAg
ICAgICAgICAgICBzZXBhcmF0b3IgPSBpbWFnZVNjYWxlU3RhcnQ7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgZGlmZmVycyBmcm9tIHRoZSBzcGVjIGFz
IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgcGl4ZWwgZGVuc2l0eSBk
ZXNjcmlwdG9ycyBmb3Igbm93LgorICAgICAgICAgICAgICAgIHNpemVfdCBpbWFnZVNjYWxlRW5k
ID0gc3JjU2V0QXR0cmlidXRlLmZpbmQoaXNIVE1MU3BhY2VPckNvbW1hLCBpbWFnZVNjYWxlU3Rh
cnQgKyAxKTsKKyAgICAgICAgICAgICAgICBpbWFnZVNjYWxlRW5kID0gKGltYWdlU2NhbGVFbmQg
PT0gbm90Rm91bmQpID8gc3JjU2V0TGVuZ3RoIDogaW1hZ2VTY2FsZUVuZDsKKyAgICAgICAgICAg
ICAgICBzZXBhcmF0b3IgPSBpbWFnZVNjYWxlRW5kOworICAgICAgICAgICAgICAgIC8vIEJlIHN1
cmUgdGhhdCB0aGVyZSBhcmUgbm8gb3RoZXIgZGVzY3JpcHRvcnMuCisgICAgICAgICAgICAgICAg
d2hpbGUgKChzZXBhcmF0b3IgPCBzcmNTZXRMZW5ndGggLSAxKSAmJiBpc0hUTUxTcGFjZShzcmNT
ZXRBdHRyaWJ1dGVbc2VwYXJhdG9yXSkpCisgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvcisr
OworICAgICAgICAgICAgICAgIGlmICgoc2VwYXJhdG9yIDwgc3JjU2V0TGVuZ3RoIC0gMSkgJiYg
c3JjU2V0QXR0cmlidXRlW3NlcGFyYXRvcl0gIT0gJywnKSB7CisgICAgICAgICAgICAgICAgICAg
IHNlcGFyYXRvciA9IHNyY1NldEF0dHJpYnV0ZS5maW5kKCcsJywgc2VwYXJhdG9yICsgMSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzZXBhcmF0b3IgPT0gbm90Rm91bmQpCisgICAgICAgICAg
ICAgICAgICAgICAgICBzZXBhcmF0b3IgPSBzcmNTZXRMZW5ndGg7CisgICAgICAgICAgICAgICAg
ICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBzZXBhcmF0b3IgKyAxOworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
c3JjU2V0QXR0cmlidXRlW2ltYWdlU2NhbGVFbmQgLSAxXSAhPSAneCcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IHNlcGFyYXRvciArIDE7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
b29sIHZhbGlkU2NhbGVGYWN0b3IgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbWdTY2FsZUZh
Y3RvciA9IGNoYXJhY3RlcnNUb0Zsb2F0KHNyY1NldEF0dHJpYnV0ZS5jaGFyYWN0ZXJzKCkgKyBp
bWFnZVNjYWxlU3RhcnQsIGltYWdlU2NhbGVFbmQgLSBpbWFnZVNjYWxlU3RhcnQgLSAxLCAmdmFs
aWRTY2FsZUZhY3Rvcik7CisKKyAgICAgICAgICAgICAgICBpZiAoIXZhbGlkU2NhbGVGYWN0b3Ip
IHsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IHNlcGFyYXRvciAr
IDE7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBJbWFnZVdpdGhTY2FsZSBpbWFnZTsKLSAg
ICAgICAgaW1hZ2UuaW1hZ2VVUkwgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YVswXSk7
CisgICAgICAgIGltYWdlLmltYWdlVVJMID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKFN0cmlu
Z0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKHNyY1NldEF0dHJpYnV0ZS5jaGFyYWN0ZXJzKCkg
KyBpbWFnZVVybFN0YXJ0LCBpbWFnZVVybEVuZCAtIGltYWdlVXJsU3RhcnQpKTsKICAgICAgICAg
aW1hZ2Uuc2NhbGVGYWN0b3IgPSBpbWdTY2FsZUZhY3RvcjsKIAogICAgICAgICBpbWFnZUNhbmRp
ZGF0ZXMuYXBwZW5kKGltYWdlKTsKKyAgICAgICAgLy8gMTEuIFJldHVybiB0byB0aGUgc3RlcCBs
YWJlbGVkIHNwbGl0dGluZyBsb29wLgorICAgICAgICBpbWFnZUNhbmRpZGF0ZVN0YXJ0ID0gc2Vw
YXJhdG9yICsgMTsKICAgICB9Cit9CisKK1N0cmluZyBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRy
aWJ1dGVzKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25zdCBTdHJpbmcmIHNyY0F0dHJpYnV0
ZSwgY29uc3QgU3RyaW5nJiBzcmNTZXRBdHRyaWJ1dGUpCit7CisgICAgSW1hZ2VDYW5kaWRhdGVz
IGltYWdlQ2FuZGlkYXRlczsKKworICAgIHBhcnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNyY1NldEF0
dHJpYnV0ZShzcmNTZXRBdHRyaWJ1dGUsIGltYWdlQ2FuZGlkYXRlcyk7CiAKICAgICBjb25zdCBT
dHJpbmcgc3JjID0gIHNyY0F0dHJpYnV0ZS5zaW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2Up
OwogICAgIGlmICghc3JjLmlzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE5YzYwMjM1NzQ0NWI4ODZjYjdk
M2ZhNmQ4ZWYzMTM1OGE2NDhjNDkuLjI5ZGJjOGRkNTg4Y2IyNGVhNWRkYjgxMTFiZTYzY2FjNDI1
ZWYzNjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMy0wOS0xMCAgUm9tYWluIFBlcmllciAg
PHJvbWFpbi5wZXJpZXJAZ21haWwuY29tPgorCisgICAgICAgIEltcHJvdmUgc3Jjc2V0IHBhcnNl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5NDIz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0
L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC1pbnZhbGlkLWlucHV0cy5odG1sOiBFbnN1
cmVzIHRoYXQgYSB2YXJpb3VzIGludmFsaWQKKyAgICAgICAgICBmb3JtIG9mIGRhdGEgdXJpIHNj
aGVtZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgc3Jjc2V0IGF0dHJpYnV0ZS4KKyAgICAgICAgKiBm
YXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC12YWxpZC1pbnB1dHMuaHRtbDogRW5z
dXJlcyB0aGF0IGEgdmFyaW91cyB2YWxpZAorICAgICAgICAgIGZvcm0gb2YgZGF0YSB1cmkgc2No
ZW1lcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBzcmNzZXQgYXR0cmlidXRlLgorICAgICAgICAqIGZh
c3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0Lmh0bWw6IFVzZSBjb21tYSBpbnN0ZWFk
IG9mICUuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZnJhY3Rpb24tMS41eC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlu
cHV0cy1leGNlcHQtb25lLmh0bWw6IE1pc3Npbmcgc3Jjc2V0LWhlbHBlci5qcy4gQWRkaW5nIG1v
cmUgaW52YWxpZCBjYXNlcy4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZh
bGlkLWlucHV0cy5odG1sOiBBZGRpbmcgbW9yZSBpbnZhbGlkIGNhc2VzLgorCiAyMDEzLTA5LTEw
ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgW0dUS10gVGVzdCAvd2Via2l0L2F0ay9nZXRUZXh0SW5QYXJhZ3JhcGhBbmRCb2R5TW9kZXJh
dGUgZmFpbHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0
LWRhdGEtc3Jjc2V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c3Jjc2V0LWRhdGEtc3Jjc2V0LWV4cGVjdGVkLnR4dAppbmRleCA4ZjgzYTMyNjJmNDE2MmVmNTc5
NjczNzQ5Zjg3ZjU2ZmY3YTg3MTY3Li4xZTgzYTNmNGU3ZDExZjk3OTdjOGU2ODlmNjFkM2Y2MjA3
NGQwZGI1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1k
YXRhLXNyY3NldC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFn
ZS1zcmNzZXQtZGF0YS1zcmNzZXQtZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsMyBAQAogUEFTUyBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9vIikuY2xpZW50V2lkdGg9PTE1MCBpcyB0cnVlCi1U
aGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBpbWFnZSBiZWxvdyBsb29rcyBsaWtlIGEgMngyIGdyaWQg
KHllbGxvdywgZ3JheSwgbGlnaHQgZ3JlZW4sIGRhcmsgZ3JlZW4pLiBJbiB0aGlzIGNhc2UgdGhl
IHNyY3NldCBhdHRyaWJ1dGUgaGFzIGEgYmFzZTY0IHVybCwgd2l0aCB0aGUgY29tbWEgZXNjYXBl
ZC4KK1RoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGltYWdlIGJlbG93IGxvb2tzIGxpa2UgYSAyeDIg
Z3JpZCAoeWVsbG93LCBncmF5LCBsaWdodCBncmVlbiwgZGFyayBncmVlbikuIEluIHRoaXMgY2Fz
ZSB0aGUgc3Jjc2V0IGF0dHJpYnV0ZSBoYXMgYSBiYXNlNjQgdXJsLgogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC1pbnZhbGlkLWlu
cHV0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1k
YXRhLXNyY3NldC1pbnZhbGlkLWlucHV0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM2OTJj
ZTQyZGFjZjRhMDIyNmYyMTk4MDE0NzJiOTFiMTZkYzQyMgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0LWludmFsaWQtaW5w
dXRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAKK1RoaXMgdGVzdCBwYXNzZXMgaWYgdGhp
cyBpbWcgdGFnIGJlbG93IGlzIGVtcHR5IGFuZCBkaXNwbGF5cyBub3RoaW5nLiBJdCBlbnN1cmVz
IHRoYXQgdGhlIHNyY3NldCBhdHRyaWJ1dGUgc3VwcG9ydHMgaW52YWxpZCBkYXRhIHVyaSBzY2hl
bWVzCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRh
dGEtc3Jjc2V0LWludmFsaWQtaW5wdXRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNyY3NldC1kYXRhLXNyY3NldC1pbnZhbGlkLWlucHV0cy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFi
YTQ1MTdlMTJlMzJjMDk4ZjU1Mjk4ZTVmMDc3ZDkyMWMyYjliYzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC1pbnZhbGlk
LWlucHV0cy5odG1sCkBAIC0wLDAgKzEsMTQgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cisg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4
dCgpOworICAgIH0KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdj5UaGlzIHRl
c3QgcGFzc2VzIGlmIHRoaXMgaW1nIHRhZyBiZWxvdyBpcyBlbXB0eSBhbmQgZGlzcGxheXMgbm90
aGluZy4gSXQgZW5zdXJlcyB0aGF0IHRoZSBzcmNzZXQgYXR0cmlidXRlIHN1cHBvcnRzIGludmFs
aWQgZGF0YSB1cmkgc2NoZW1lczwvZGl2PgorICAgIDxpbWcgc3JjPSIiIHNyY3NldD0iZGF0YTpp
bWFnZS9wbmc7YmFzZTY0LFRoaXNJc0FNYWxGb3JtZWREYXRhJS8sd2l0aEZvcmJpZGRlbixDaGFy
YWN0ZXJzOiE/fiYjJykgMngsIGRhdGE6IDN4LCBkYXRhOjtjaGFyc2V0PSA0eCwgZGF0YTo7Y2hh
cnNldD11cy1BU0NJSSA1eCwgZGF0YTosQmFkRGF0YSA2eCwgZGF0YTpmb28vYmFyLGZvb2JhciA3
eCwgZGF0YTpmb28vYmFyLCA4eCwgZGF0YTpmb28vYmFyIDl4Ij4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jj
c2V0LXZhbGlkLWlucHV0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNyY3NldC1kYXRhLXNyY3NldC12YWxpZC1pbnB1dHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjBmNzc4ZjUzNDdmNjMyZjExZDY3NmY5YWI2MDRkNDcwZTQ2OWJkMWUKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC12
YWxpZC1pbnB1dHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorVGhpcyB0ZXN0IHBhc3Nl
cyBpZiB0aGlzIGltZyB0YWcgYmVsb3cgaXMgZW1wdHkgYW5kIGRpc3BsYXlzIG5vdGhpbmcuIEl0
IGVuc3VyZXMgdGhhdCB0aGUgc3Jjc2V0IGF0dHJpYnV0ZSBzdXBwb3J0cyB2YXJpb3VzIGZvcm1z
IG9mIHZhbGlkIGRhdGEgdXJpIHNjaGVtZXMKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQtdmFsaWQtaW5wdXRzLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC12YWxpZC1pbnB1dHMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iYjVmOWZiOWU2YjBiYTMxNTlhODk2ODgwZmE1OWZjOTcxMTkxOGZh
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQt
ZGF0YS1zcmNzZXQtdmFsaWQtaW5wdXRzLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdD4KKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVz
dFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhpcyBpbWcgdGFnIGJlbG93IGlzIGVtcHR5
IGFuZCBkaXNwbGF5cyBub3RoaW5nLiBJdCBlbnN1cmVzIHRoYXQgdGhlIHNyY3NldCBhdHRyaWJ1
dGUgc3VwcG9ydHMgdmFyaW91cyBmb3JtcyBvZiB2YWxpZCBkYXRhIHVyaSBzY2hlbWVzPC9kaXY+
CisgICAgPGltZyBzcmM9IiIgc3Jjc2V0PSJkYXRhOixwbGFpbnRleHQgMngsIGRhdGE6O2NoYXJz
ZXQ9dXMtQVNDSUkscGxhaW50ZXh0IDN4LCBkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11cy1BU0NJ
SSxwbGFpbnRleHQgNHgsIGRhdGE6dGV4dC9wbGFpbixwbGFpbnRleHQgNXgsIGRhdGE6aW1hZ2Uv
cG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBOENBSUFBQUFMNU5ROUFB
QUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUgyd29hQlFjNG9MRUZwQUFBQUJs
MFJWaDBRMjl0YldWdWRBQkRjbVZoZEdWa0lIZHBkR2dnUjBsTlVGZUJEaGNBQUFDTVNVUkJWSGph
N2ROQkVZQWdGRVZSUGhITVlnQXpVSXNtVm5GdkIvZnNvUWIrT2JmQm16TXZ4bmVXMUQxdnp6MndG
aUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNJVVFpRVVRb1JDS0lSQ2lGQUloVkFJRWVwM3hU
V1RMenp1NW9WQ0tJUkNpRkFJaFZBSUVRcWhFQW9oUWlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFx
aEVDTFVaaTNWRXdjQk1HcjFOZ0FBQUFCSlJVNUVya0pnZ2c9PSA2eCI+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRh
LXNyY3NldC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1z
cmNzZXQuaHRtbAppbmRleCAxOGFjOGY5MjkxOGFhNDRjOGRjYTk4MjI0NDFiOTMxYWJmYmMyYjYz
Li5jYTBhNDdjZTYxN2IzZTgzMjVhZDg0OTE0MjNkMzg3ZDA4ZGEzNWNlIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC5odG1sCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0Lmh0bWwKQEAg
LTEyLDcgKzEyLDcgQEAKIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHkgaWQ9ImJvZHkiPgotICAg
IDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgaW1hZ2UgYmVsb3cgbG9va3MgbGlrZSBhIDJ4
MiBncmlkICh5ZWxsb3csIGdyYXksIGxpZ2h0IGdyZWVuLCBkYXJrIGdyZWVuKS4gSW4gdGhpcyBj
YXNlIHRoZSBzcmNzZXQgYXR0cmlidXRlIGhhcyBhIGJhc2U2NCB1cmwsIHdpdGggdGhlIGNvbW1h
IGVzY2FwZWQuPC9kaXY+Ci0gICAgPGltZyBpZD0iZm9vIiBzcmM9IiIgc3Jjc2V0PSJkYXRhOmlt
YWdlL3BuZztiYXNlNjQlMkNpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBOENBSUFBQUFM
NU5ROUFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUgyd29hQlFjNG9MRUZw
QUFBQUJsMFJWaDBRMjl0YldWdWRBQkRjbVZoZEdWa0lIZHBkR2dnUjBsTlVGZUJEaGNBQUFDTVNV
UkJWSGphN2ROQkVZQWdGRVZSUGhITVlnQXpVSXNtVm5GdkIvZnNvUWIrT2JmQm16TXZ4bmVXMUQx
dnp6MndGaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNJVVFpRVVRb1JDS0lSQ2lGQUloVkFJ
RWVwM3hUV1RMenp1NW9WQ0tJUkNpRkFJaFZBSUVRcWhFQW9oUWlFVVFpRkVLSVJDS0lRSWhWQUlo
UkNoRUFxaEVDTFVaaTNWRXdjQk1HcjFOZ0FBQUFCSlJVNUVya0pnZ2c9PSAyeCwgZGF0YTppbWFn
ZS9wbmc7YmFzZTY0JTJDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQThDQUlBQUFBTDVO
UTlBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIMndvYUJRYzRvTEVGcEFB
QUFCbDBSVmgwUTI5dGJXVnVkQUJEY21WaGRHVmtJSGRwZEdnZ1IwbE5VRmVCRGhjQUFBQ01TVVJC
VkhqYTdkTkJFWUFnRkVWUlBoSE1ZZ0F6VUlzbVZuRnZCL2Zzb1FiK09iZkJtek12eG5lVzFEMXZ6
ejJ3RmlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFxaEVDSVVRaUVVUW9SQ0tJUkNpRkFJaFZBSUVl
cDN4VFdUTHp6dTVvVkNLSVJDaUZBSWhWQUlFUXFoRUFvaFFpRVVRaUZFS0lSQ0tJUUloVkFJaFJD
aEVBcWhFQ0xVWmkzVkV3Y0JNR3IxTmdBQUFBQkpSVTVFcmtKZ2dnPT0gMXgiPgorICAgIDxkaXY+
VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgaW1hZ2UgYmVsb3cgbG9va3MgbGlrZSBhIDJ4MiBncmlk
ICh5ZWxsb3csIGdyYXksIGxpZ2h0IGdyZWVuLCBkYXJrIGdyZWVuKS4gSW4gdGhpcyBjYXNlIHRo
ZSBzcmNzZXQgYXR0cmlidXRlIGhhcyBhIGJhc2U2NCB1cmwuPC9kaXY+CisgICAgPGltZyBpZD0i
Zm9vIiBzcmM9IiIgc3Jjc2V0PSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFB
TlNVaEVVZ0FBQUpZQUFBQThDQUlBQUFBTDVOUTlBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZ
QUFBQUIzUkpUVVVIMndvYUJRYzRvTEVGcEFBQUFCbDBSVmgwUTI5dGJXVnVkQUJEY21WaGRHVmtJ
SGRwZEdnZ1IwbE5VRmVCRGhjQUFBQ01TVVJCVkhqYTdkTkJFWUFnRkVWUlBoSE1ZZ0F6VUlzbVZu
RnZCL2Zzb1FiK09iZkJtek12eG5lVzFEMXZ6ejJ3RmlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFx
aEVDSVVRaUVVUW9SQ0tJUkNpRkFJaFZBSUVlcDN4VFdUTHp6dTVvVkNLSVJDaUZBSWhWQUlFUXFo
RUFvaFFpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0xVWmkzVkV3Y0JNR3IxTmdBQUFBQkpS
VTVFcmtKZ2dnPT0gMngsIGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1Vo
RVVnQUFBSllBQUFBOENBSUFBQUFMNU5ROUFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFB
QjNSSlRVVUgyd29hQlFjNG9MRUZwQUFBQUJsMFJWaDBRMjl0YldWdWRBQkRjbVZoZEdWa0lIZHBk
R2dnUjBsTlVGZUJEaGNBQUFDTVNVUkJWSGphN2ROQkVZQWdGRVZSUGhITVlnQXpVSXNtVm5GdkIv
ZnNvUWIrT2JmQm16TXZ4bmVXMUQxdnp6MndGaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNJ
VVFpRVVRb1JDS0lSQ2lGQUloVkFJRWVwM3hUV1RMenp1NW9WQ0tJUkNpRkFJaFZBSUVRcWhFQW9o
UWlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFxaEVDTFVaaTNWRXdjQk1HcjFOZ0FBQUFCSlJVNUVy
a0pnZ2c9PSAxeCI+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2hpZHBpL2ltYWdlLXNyY3NldC1mcmFjdGlvbi0xLjV4LWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWZyYWN0aW9uLTEuNXgtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjIzZDJjMzk2MDM4NWVjMTNkYTgzYmQ4ZTkwODJiNzI1ODMzZTM3YmMKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1mcmFj
dGlvbi0xLjV4LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK1BBU1MgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInRlc3RpbWciKS5jbGllbnRXaWR0aD09MjAwIGlzIHRydWUKK1RoaXMgdGVz
dCBwYXNzZXMgaWYgdGhlIHNyY3NldCByZXNvdXJjZSBpcyBsb2FkZWQgYW5kIGRpc3BsYXllZCBh
cyB0aGUgaW1hZ2UKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1z
cmNzZXQtZnJhY3Rpb24tMS41eC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1z
cmNzZXQtZnJhY3Rpb24tMS41eC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4MDMwN2Y0NDNkNzg1NTViNTg1
NTFkZGQwNTNhZGM3ZTcxNmM1MWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNyY3NldC1mcmFjdGlvbi0xLjV4Lmh0bWwKQEAgLTAsMCArMSwyMyBAQAor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisgICAgd2luZG93LnRhcmdldFNjYWxlRmFjdG9yID0g
MS41OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NyY3NldC1oZWxwZXIuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAg
ICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB9CisKKyAgICBhZGRFdmVudExpc3RlbmVy
KCJsb2FkIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmIChpbnRlcm5hbHMpCisgICAgICAgICAg
ICBzaG91bGRCZVRydWUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0aW1nIikuY2xpZW50
V2lkdGg9PTIwMCcpOworICAgIH0sIGZhbHNlKTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIHNyY3NldCByZXNvdXJjZSBpcyBsb2FkZWQg
YW5kIGRpc3BsYXllZCBhcyB0aGUgaW1hZ2U8L2Rpdj4KKzxpbWcgc3JjPSJyZXNvdXJjZXMvYmx1
ZS0xMDAtcHgtc3F1YXJlLnBuZyIgc3Jjc2V0PSJyZXNvdXJjZXMvZ3JlZW4tMjAwLXB4LXNxdWFy
ZS5wbmcgMngiIGlkPSJ0ZXN0aW1nIj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLWV4Y2VwdC1v
bmUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5w
dXRzLWV4Y2VwdC1vbmUuaHRtbAppbmRleCAxZjFlMTlkMzkzYjI4NmUyZjBlZTc0NDIwY2YwNjA2
YzI1MTFmN2U0Li4yOTgyNWI5MmRhMjIzYjE2ZjA3ZDQ0MjcwZTc5MDJiNDU0ZGJlNTM5IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlucHV0
cy1leGNlcHQtb25lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNz
ZXQtaW52YWxpZC1pbnB1dHMtZXhjZXB0LW9uZS5odG1sCkBAIC0xLDUgKzEsNiBAQAogPGh0bWw+
CiA8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc3Jjc2V0LWhlbHBlci5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQ+CiAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CkBAIC0xNSw2ICsxNiw2
IEBACiA8Ym9keSBpZD0iYm9keSI+CiAgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBp
bWcgdGFnIGJlbG93IGlzIGEgZ3JlZW4gc3F1YXJlIHJlZ2FyZGxlc3Mgb2YgdGhlIHNjYWxlIGZh
Y3Rvci4gSXQgZW5zdXJlcyB0aGF0IGludmFsaWQgaW5wdXRzIGFyZQogICAgIGlnbm9yZWQgYW5k
IHdlbGwtZm9ybWVkIGltYWdlcyBhcmUgY2hvc2VuIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgcXVhbGlm
aWVycywgb25jZSB0aGV5IGFyZSB0aGUgb25seSBjYW5kaWRhdGUgbGVmdDwvZGl2PgotICAgIDxp
bWcgaWQ9ImZvbyIgc3JjPSIiIHNyY3NldD0iMXgsLCAgLCAgIHggICAgLCByZXNvdXJjZXMvZ3Jl
ZW4tMjAwLXB4LXNxdWFyZS5wbmcgMngsIDIiPgorICAgIDxpbWcgaWQ9ImZvbyIgc3JjPSIiIHNy
Y3NldD0iMXgsLCAgLCAgIHggICAgLDJ4ICAsIGZvby5qcGcsIDN4LCBiYXIuanBnIDR4IDEwMGgs
IGZvby5qcGcgNSwgYmFyLmpwZyBkeCwgcmVzb3VyY2VzL2dyZWVuLTIwMC1weC1zcXVhcmUucG5n
ICAgMnggLCI+PC9pbWc+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlucHV0cy5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMuaHRtbAppbmRleCAyZGE2
YzMwNTExYmZhYzg3ZjM5OWQ3YTUxZmI2MTkzZTAxNzdmYTJmLi4yNGRhMjk2ZTJkODFmMDUzOGJk
ODFiYjVlZTYxMjdhOTg1OTI3NTA5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBp
L2ltYWdlLXNyY3NldC1pbnZhbGlkLWlucHV0cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
aGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLmh0bWwKQEAgLTUsNiArNSw2IEBACiAK
IDxib2R5IGlkPSJib2R5Ij4KICAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhpcyBpbWcg
dGFnIGJlbG93IGlzIGVtcHR5IGFuZCBkaXNwbGF5cyBub3RoaW5nLiBJdCBlbnN1cmVzIHRoYXQg
dGhlIHNyY3NldCBhdHRyaWJ1dGUgc3VwcG9ydHMgaW52YWxpZCBpbnB1dHM8L2Rpdj4KLSAgICA8
aW1nIGhlaWdodD0iMTAwIiB3aWR0aD0iMTAwIiBzcmM9IiIgc3Jjc2V0PSIxeCwsICAsICAgeCAg
ICAsMnggICI+PC9pbWc+CisgICAgPGltZyBoZWlnaHQ9IjEwMCIgd2lkdGg9IjEwMCIgc3JjPSIi
IHNyY3NldD0iMXgsLCAgLCAgIHggICAgLDJ4ICAsIGZvby5qcGcsIDN4LCBiYXIuanBnIDR4IDEw
MGgsIGZvby5qcGcgNSwgYmFyLmpwZyBkeCxmb28uanBnLGJhci5qcGcsIj48L2ltZz4KIDwvYm9k
eT4KIDwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211535</attachid>
            <date>2013-09-13 04:27:49 -0700</date>
            <delta_ts>2013-09-17 08:37:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119423-20130913132746.patch</filename>
            <type>text/plain</type>
            <size>24495</size>
            <attacher name="Romain Perier">romain.perier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU1NDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTU0NDljZGU0YjlhMmRm
ZGYxMWJkOWIzZTFhZjk4MjA4MjVjM2ZhMi4uMTU5MWExZjJjMzUxOTI0NDFkYTJiMmFmOGI2ODgy
YjNiOTViNWRlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEzLTA5LTEzICBSb21h
aW4gUGVyaWVyICA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisKKyAgICAgICAgSW1wcm92ZSBz
cmNzZXQgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTk0MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCBuZXcgdGVzdHMgYW5kIGNvdmVyZWQgYnkgZXhpc3Rpbmcgb25lcy4KKworICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6aXNIVE1MU3BhY2VPckNvbW1hKTogQWRkIGEgbmV3IHByZWRpY2F0ZSBmdW5jdGlvbiB1c2Vk
IGJ5IFN0cmluZzo6ZmluZCgpCisgICAgICAgIHRvIGdldCB0aGUgZmlyc3Qgc3BhY2Ugb3IgY29t
bWEgY2hhcmFjdGVyIGZyb20gdGhlIGlucHV0IHN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNyY1NldEF0dHJpYnV0ZSk6IEFkZCBhIG5ldyBzdGF0aWMg
ZnVuY3Rpb24gdG8gcGFyc2UKKyAgICAgICAgYW5kIGV4dHJhY3QgaW1hZ2VzIHdpdGggc2NhbGUg
ZnJvbSB0aGUgc3Jjc2V0IGF0dHJpYnV0ZS4gQWxsIHZhbGlkIGNhbmRpZGF0ZXMgYXJlCisgICAg
ICAgIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgdGhyb3VnaCBhIGxpc3QuIFRoaXMgcGFyc2luZyBm
dW5jdGlvbiBhbHNvIGFkZHMgc3VwcG9ydAorICAgICAgICBmb3IgZGF0YSBVUkkgc2NoZW1lcyBh
cyBkZXNjcmliZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpiZXN0
Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKTogUmVtb3ZlIGludGVybWVkaWF0ZSBhcnJheXMg
b2Ygc3RyaW5nCisgICAgICAgIHdoZW4gcGFyc2luZy4gVGhhdCBpcyBtb3JlIGVmZmljaWVudCBh
bmQgYXZvaWRzIHRyYXNoaW5nIHRoZSBkYXRhIGNhY2hlCisgICAgICAgICh2YXJ5aW5nIGJldHdl
ZW4gMjAgYW5kIDY1JSBmYXN0ZXIgZGVwZW5kaW5nIG9mIHRoZSBhbW91bnQgb2YgZGF0YSkKKyAg
ICAgICAgVGhlIHBhcnNlciBub3cgd2Fsa3MgYWxvbmcgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhbmQg
ZXh0cmFjdHMgdGhlIGNhbmRpZGF0ZXMgZGlyZWN0bHkuCisKIDIwMTMtMDktMTAgIEFsYmVydG8g
R2FyY2lhICA8YmVydG9AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBUaGUgY29kZSBnZW5l
cmF0b3IgcHJvZHVjZXMgYSB3YXJuaW5nIGlmIGEgcGFyYW1ldGVyIGNhbiBiZSBOVUxMCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCmluZGV4IDNk
MjY5NDJmYzc0MjQzMDZmY2Y5ZWNkOGIyODM1OGVmYTcwYTkwYWQuLmMyNThhMzYzYTFhYjhlYTNh
ZmQxOTYyNWYxZjRjYWRhODU1YjRkODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCkBAIC0zMTQsMzkgKzMxNCw5NCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgY29tcGFyZUJ5U2NhbGVGYWN0b3IoY29uc3QgSW1hZ2VXaXRoU2NhbGUmIGZpcnN0
LCBjb25zdCBJbWFnZQogICAgIHJldHVybiBmaXJzdC5zY2FsZUZhY3RvciA8IHNlY29uZC5zY2Fs
ZUZhY3RvcjsKIH0KIAotU3RyaW5nIGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFN0cmluZyYgc3JjQXR0cmlidXRlLCBjb25zdCBT
dHJpbmcmIHNyY1NldEF0dHJpYnV0ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0hUTUxTcGFjZU9y
Q29tbWEoVUNoYXIgY2hhcmFjdGVyKQogewotICAgIEltYWdlQ2FuZGlkYXRlcyBpbWFnZUNhbmRp
ZGF0ZXM7CisgICAgcmV0dXJuIGlzSFRNTFNwYWNlKGNoYXJhY3RlcikgfHwgY2hhcmFjdGVyID09
ICcsJzsKK30KIAotICAgIGNvbnN0IFN0cmluZyBzcmNTZXRBdHRyaWJ1dGVWYWx1ZSA9IHNyY1Nl
dEF0dHJpYnV0ZS5zaW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpOwotICAgIFZlY3RvcjxT
dHJpbmc+IHNyY1NldFRva2VuczsKKy8vIFNlZSB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIG1vcmUg
ZGV0YWlscyBhYm91dCB0aGUgYWxnb3JpdGhtIHRvIGZvbGxvdy4KKy8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMTMvV0QtaHRtbC1zcmNzZXQtMjAxMzAyMjgvI3Byb2Nlc3NpbmctdGhlLWltYWdl
LWNhbmRpZGF0ZXMuCitzdGF0aWMgdm9pZCBwYXJzZUltYWdlc1dpdGhTY2FsZUZyb21TcmNTZXRB
dHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzcmNTZXRBdHRyaWJ1dGUsIEltYWdlQ2FuZGlkYXRlcyYg
aW1hZ2VDYW5kaWRhdGVzKQoreworICAgIHNpemVfdCBpbWFnZUNhbmRpZGF0ZVN0YXJ0ID0gMDsK
KyAgICB1bnNpZ25lZCBzcmNTZXRMZW5ndGggPSBzcmNTZXRBdHRyaWJ1dGUubGVuZ3RoKCk7CiAK
LSAgICBzcmNTZXRBdHRyaWJ1dGVWYWx1ZS5zcGxpdCgnLCcsIHNyY1NldFRva2Vucyk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzcmNTZXRUb2tlbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgVmVjdG9yPFN0cmluZz4gZGF0YTsKKyAgICB3aGlsZSAoaW1hZ2VDYW5kaWRhdGVTdGFydCA8
IHNyY1NldExlbmd0aCkgewogICAgICAgICBmbG9hdCBpbWdTY2FsZUZhY3RvciA9IDEuMDsKLSAg
ICAgICAgYm9vbCB2YWxpZFNjYWxlRmFjdG9yID0gZmFsc2U7Ci0KLSAgICAgICAgc3JjU2V0VG9r
ZW5zW2ldLnN0cmlwV2hpdGVTcGFjZSgpLnNwbGl0KCcgJywgZGF0YSk7Ci0gICAgICAgIC8vIFRo
ZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGNhbmRpZGF0ZSBkZXNjcmlwdG9yLCBhbmQgdGhlIGxh
c3Qgb25lIG11c3QKLSAgICAgICAgLy8gYmUgYSBzY2FsZSBmYWN0b3IuIFNpbmNlIHdlIGRvbid0
IHN1cHBvcnQgZGVzY3JpcHRvcnMgb3RoZXIgdGhhbiBzY2FsZSwKLSAgICAgICAgLy8gaXQncyBi
ZXR0ZXIgdG8gZGlzY2FyZCBhbnkgcnVsZSB3aXRoIHN1Y2ggZGVzY3JpcHRvcnMgcmF0aGVyIHRo
YW4gYWNjZXB0Ci0gICAgICAgIC8vIG9ubHkgdGhlIHNjYWxlIGRhdGEuCi0gICAgICAgIGlmIChk
YXRhLnNpemUoKSAhPSAyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghZGF0
YS5sYXN0KCkuZW5kc1dpdGgoJ3gnKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBz
aXplX3Qgc2VwYXJhdG9yOwogCi0gICAgICAgIGltZ1NjYWxlRmFjdG9yID0gZGF0YS5sYXN0KCku
c3Vic3RyaW5nKDAsIGRhdGEubGFzdCgpLmxlbmd0aCgpIC0gMSkudG9GbG9hdCgmdmFsaWRTY2Fs
ZUZhY3Rvcik7Ci0gICAgICAgIGlmICghdmFsaWRTY2FsZUZhY3RvcikKKyAgICAgICAgLy8gNC4g
U3BsaXR0aW5nIGxvb3A6IFNraXAgd2hpdGVzcGFjZS4KKyAgICAgICAgc2l6ZV90IGltYWdlVXJs
U3RhcnQgPSBzcmNTZXRBdHRyaWJ1dGUuZmluZChpc05vdEhUTUxTcGFjZSwgaW1hZ2VDYW5kaWRh
dGVTdGFydCk7CisgICAgICAgIGlmIChpbWFnZVVybFN0YXJ0ID09IG5vdEZvdW5kKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIC8vIElmIFRoZSBjdXJyZW50IGNhbmRpZGF0ZSBpcyBlaXRo
ZXIgdG90YWxseSBlbXB0eSBvciBvbmx5IGNvbnRhaW5zIHNwYWNlLCBza2lwcGluZy4KKyAgICAg
ICAgaWYgKHNyY1NldEF0dHJpYnV0ZVtpbWFnZVVybFN0YXJ0XSA9PSAnLCcpIHsKKyAgICAgICAg
ICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBpbWFnZVVybFN0YXJ0ICsgMTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwotCisgICAgICAgIH0KKyAgICAgICAgLy8gNS4gQ29sbGVjdCBhIHNlcXVlbmNl
IG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHNwYWNlIGNoYXJhY3RlcnMsIGFuZCBsZXQgdGhh
dCBiZSB1cmwuCisgICAgICAgIHNpemVfdCBpbWFnZVVybEVuZCA9IHNyY1NldEF0dHJpYnV0ZS5m
aW5kKGlzSFRNTFNwYWNlLCBpbWFnZVVybFN0YXJ0ICsgMSk7CisgICAgICAgIGlmIChpbWFnZVVy
bEVuZCA9PSBub3RGb3VuZCkgeworICAgICAgICAgICAgaW1hZ2VVcmxFbmQgPSBzcmNTZXRMZW5n
dGg7CisgICAgICAgICAgICBzZXBhcmF0b3IgPSBzcmNTZXRMZW5ndGg7CisgICAgICAgIH0gZWxz
ZSBpZiAoc3JjU2V0QXR0cmlidXRlW2ltYWdlVXJsRW5kIC0gMV0gPT0gJywnKSB7CisgICAgICAg
ICAgICAtLWltYWdlVXJsRW5kOworICAgICAgICAgICAgc2VwYXJhdG9yID0gaW1hZ2VVcmxFbmQ7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyA3LiBDb2xsZWN0IGEgc2VxdWVuY2Ug
b2YgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgIiwiIChVKzAwMkMpIGNoYXJhY3RlcnMsIGFuZCBs
ZXQgdGhhdCBiZSBkZXNjcmlwdG9ycy4KKyAgICAgICAgICAgIHNpemVfdCBpbWFnZVNjYWxlU3Rh
cnQgPSBzcmNTZXRBdHRyaWJ1dGUuZmluZChpc05vdEhUTUxTcGFjZSwgaW1hZ2VVcmxFbmQgKyAx
KTsKKyAgICAgICAgICAgIGlmIChpbWFnZVNjYWxlU3RhcnQgPT0gbm90Rm91bmQpCisgICAgICAg
ICAgICAgICAgc2VwYXJhdG9yID0gc3JjU2V0TGVuZ3RoOworICAgICAgICAgICAgZWxzZSBpZiAo
c3JjU2V0QXR0cmlidXRlW2ltYWdlU2NhbGVTdGFydF0gPT0gJywnKQorICAgICAgICAgICAgICAg
IHNlcGFyYXRvciA9IGltYWdlU2NhbGVTdGFydDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIFRoaXMgcGFydCBkaWZmZXJzIGZyb20gdGhlIHNwZWMgYXMgdGhlIGN1cnJl
bnQgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3Jz
IGZvciBub3cuCisgICAgICAgICAgICAgICAgc2l6ZV90IGltYWdlU2NhbGVFbmQgPSBzcmNTZXRB
dHRyaWJ1dGUuZmluZChpc0hUTUxTcGFjZU9yQ29tbWEsIGltYWdlU2NhbGVTdGFydCArIDEpOwor
ICAgICAgICAgICAgICAgIGltYWdlU2NhbGVFbmQgPSAoaW1hZ2VTY2FsZUVuZCA9PSBub3RGb3Vu
ZCkgPyBzcmNTZXRMZW5ndGggOiBpbWFnZVNjYWxlRW5kOworICAgICAgICAgICAgICAgIHNpemVf
dCBjb21tYSA9IGltYWdlU2NhbGVFbmQ7CisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRo
ZXJlIGFyZSBubyBvdGhlciBkZXNjcmlwdG9ycworICAgICAgICAgICAgICAgIHdoaWxlICgoY29t
bWEgPCBzcmNTZXRMZW5ndGggLSAxKSAmJiBpc0hUTUxTcGFjZShzcmNTZXRBdHRyaWJ1dGVbY29t
bWFdKSkKKyAgICAgICAgICAgICAgICAgICAgKytjb21tYTsKKyAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGUgZmlyc3Qgbm90IGh0bWwgc3BhY2UgY2hhcmFjdGVyIGFmdGVyIHRoZSBzY2FsZSBtb2Rp
ZmllciBpcyBub3QgYSBjb21tYSwKKyAgICAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjYW5k
aWRhdGUgaXMgYW4gaW52YWxpZCBpbnB1dC4KKyAgICAgICAgICAgICAgICBpZiAoKGNvbW1hIDwg
c3JjU2V0TGVuZ3RoIC0gMSkgJiYgc3JjU2V0QXR0cmlidXRlW2NvbW1hXSAhPSAnLCcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgbmVhcmVzdCBjb21tYSBhbmQgc2tpcCB0aGUg
aW5wdXQuCisgICAgICAgICAgICAgICAgICAgIGNvbW1hID0gc3JjU2V0QXR0cmlidXRlLmZpbmQo
JywnLCBjb21tYSArIDEpOworICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWEgPT0gbm90Rm91
bmQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
aW1hZ2VDYW5kaWRhdGVTdGFydCA9IGNvbW1hICsgMTsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNlcGFyYXRvciA9IGNv
bW1hOworICAgICAgICAgICAgICAgIGlmIChzcmNTZXRBdHRyaWJ1dGVbaW1hZ2VTY2FsZUVuZCAt
IDFdICE9ICd4JykgeworICAgICAgICAgICAgICAgICAgICBpbWFnZUNhbmRpZGF0ZVN0YXJ0ID0g
c2VwYXJhdG9yICsgMTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJvb2wgdmFsaWRTY2FsZUZhY3RvciA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIHNpemVfdCBzY2FsZUZhY3Rvckxlbmd0aFdpdGhvdXRVbml0ID0gaW1h
Z2VTY2FsZUVuZCAtIGltYWdlU2NhbGVTdGFydCAtIDE7CisgICAgICAgICAgICAgICAgaW1nU2Nh
bGVGYWN0b3IgPSBjaGFyYWN0ZXJzVG9GbG9hdChzcmNTZXRBdHRyaWJ1dGUuY2hhcmFjdGVycygp
ICsgaW1hZ2VTY2FsZVN0YXJ0LCBzY2FsZUZhY3Rvckxlbmd0aFdpdGhvdXRVbml0LCAmdmFsaWRT
Y2FsZUZhY3Rvcik7CisKKyAgICAgICAgICAgICAgICBpZiAoIXZhbGlkU2NhbGVGYWN0b3IpIHsK
KyAgICAgICAgICAgICAgICAgICAgaW1hZ2VDYW5kaWRhdGVTdGFydCA9IHNlcGFyYXRvciArIDE7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBJbWFnZVdpdGhTY2FsZSBpbWFnZTsKLSAgICAg
ICAgaW1hZ2UuaW1hZ2VVUkwgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YVswXSk7Cisg
ICAgICAgIGltYWdlLmltYWdlVVJMID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKFN0cmluZ0lt
cGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKHNyY1NldEF0dHJpYnV0ZS5jaGFyYWN0ZXJzKCkgKyBp
bWFnZVVybFN0YXJ0LCBpbWFnZVVybEVuZCAtIGltYWdlVXJsU3RhcnQpKTsKICAgICAgICAgaW1h
Z2Uuc2NhbGVGYWN0b3IgPSBpbWdTY2FsZUZhY3RvcjsKIAogICAgICAgICBpbWFnZUNhbmRpZGF0
ZXMuYXBwZW5kKGltYWdlKTsKKyAgICAgICAgLy8gMTEuIFJldHVybiB0byB0aGUgc3RlcCBsYWJl
bGVkIHNwbGl0dGluZyBsb29wLgorICAgICAgICBpbWFnZUNhbmRpZGF0ZVN0YXJ0ID0gc2VwYXJh
dG9yICsgMTsKICAgICB9Cit9CisKK1N0cmluZyBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1
dGVzKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25zdCBTdHJpbmcmIHNyY0F0dHJpYnV0ZSwg
Y29uc3QgU3RyaW5nJiBzcmNTZXRBdHRyaWJ1dGUpCit7CisgICAgSW1hZ2VDYW5kaWRhdGVzIGlt
YWdlQ2FuZGlkYXRlczsKKworICAgIHBhcnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNyY1NldEF0dHJp
YnV0ZShzcmNTZXRBdHRyaWJ1dGUsIGltYWdlQ2FuZGlkYXRlcyk7CiAKICAgICBjb25zdCBTdHJp
bmcgc3JjID0gIHNyY0F0dHJpYnV0ZS5zaW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpOwog
ICAgIGlmICghc3JjLmlzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE5YzYwMjM1NzQ0NWI4ODZjYjdkM2Zh
NmQ4ZWYzMTM1OGE2NDhjNDkuLjA3NTc1YzRhODgyOGRkYTZiNDllOTE5NmFiY2I4ZGU1M2EwM2Zi
NzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMy0wOS0xMyAgUm9tYWluIFBlcmllciAgPHJv
bWFpbi5wZXJpZXJAZ21haWwuY29tPgorCisgICAgICAgIEltcHJvdmUgc3Jjc2V0IHBhcnNlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5NDIzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2hp
ZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC1pbnZhbGlkLWlucHV0cy5odG1sOiBFbnN1cmVz
IHRoYXQgYSB2YXJpb3VzIGludmFsaWQKKyAgICAgICAgICBmb3JtIG9mIGRhdGEgdXJpIHNjaGVt
ZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgc3Jjc2V0IGF0dHJpYnV0ZS4KKyAgICAgICAgKiBmYXN0
L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC12YWxpZC1pbnB1dHMuaHRtbDogRW5zdXJl
cyB0aGF0IGEgdmFyaW91cyB2YWxpZAorICAgICAgICAgIGZvcm0gb2YgZGF0YSB1cmkgc2NoZW1l
cyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBzcmNzZXQgYXR0cmlidXRlLgorICAgICAgICAqIGZhc3Qv
aGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0Lmh0bWw6IFVzZSBjb21tYSBpbnN0ZWFkIG9m
ICUuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZnJhY3Rpb24tMS41eC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlucHV0
cy1leGNlcHQtb25lLmh0bWw6IE1pc3Npbmcgc3Jjc2V0LWhlbHBlci5qcy4gQWRkaW5nIG1vcmUg
aW52YWxpZCBjYXNlcy4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlk
LWlucHV0cy5odG1sOiBBZGRpbmcgbW9yZSBpbnZhbGlkIGNhc2VzLgorICAgICAgICAqIGZhc3Qv
aGlkcGkvaW1hZ2Utc3Jjc2V0LW5vbW9kaWZpZXIuaHRtbDogVXBkYXRlZCBvdXRwdXQgYXMgYmVo
YXZpb3VyIGNoYW5nZWQgZm9yIHRoaXMgY2FzZS4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdl
LXNyY3NldC1zcGFjZS1sZWZ0LW5vbW9kaWZpZXIuaHRtbDogRW5zdXJlcyB0aGF0IGEgc2luZ2xl
IGNhbmRpZGF0ZSB3aXRoIG5vIHNjYWxlIG5vbW9kaWZpZXIKKyAgICAgICAgICBpcyBzdXBwb3J0
ZWQgYnkgdGhlIHNyY3NldCBhdHRyaWJ1dGUsIGV2ZW4gaWYgYSBzcGFjZSBpcyBsZWZ0IGF0IHRo
ZSBlbmQuCisKIDIwMTMtMDktMTAgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBz
YW1zdW5nLmNvbT4KIAogICAgICAgICBbR1RLXSBUZXN0IC93ZWJraXQvYXRrL2dldFRleHRJblBh
cmFncmFwaEFuZEJvZHlNb2RlcmF0ZSBmYWlscwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQtZXhwZWN0ZWQudHh0CmluZGV4
IDhmODNhMzI2MmY0MTYyZWY1Nzk2NzM3NDlmODdmNTZmZjdhODcxNjcuLjFlODNhM2Y0ZTdkMTFm
OTc5N2M4ZTY4OWY2MWQzZjYyMDc0ZDBkYjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
aGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC1leHBlY3RlZC50eHQKQEAg
LTEsMyArMSwzIEBACiBQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKS5jbGllbnRX
aWR0aD09MTUwIGlzIHRydWUKLVRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGltYWdlIGJlbG93IGxv
b2tzIGxpa2UgYSAyeDIgZ3JpZCAoeWVsbG93LCBncmF5LCBsaWdodCBncmVlbiwgZGFyayBncmVl
bikuIEluIHRoaXMgY2FzZSB0aGUgc3Jjc2V0IGF0dHJpYnV0ZSBoYXMgYSBiYXNlNjQgdXJsLCB3
aXRoIHRoZSBjb21tYSBlc2NhcGVkLgorVGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgaW1hZ2UgYmVs
b3cgbG9va3MgbGlrZSBhIDJ4MiBncmlkICh5ZWxsb3csIGdyYXksIGxpZ2h0IGdyZWVuLCBkYXJr
IGdyZWVuKS4gSW4gdGhpcyBjYXNlIHRoZSBzcmNzZXQgYXR0cmlidXRlIGhhcyBhIGJhc2U2NCB1
cmwuCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRh
dGEtc3Jjc2V0LWludmFsaWQtaW5wdXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
aGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0LWludmFsaWQtaW5wdXRzLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yMzY5MmNlNDJkYWNmNGEwMjI2ZjIxOTgwMTQ3MmI5MWIxNmRjNDIyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0
YS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorVGhp
cyB0ZXN0IHBhc3NlcyBpZiB0aGlzIGltZyB0YWcgYmVsb3cgaXMgZW1wdHkgYW5kIGRpc3BsYXlz
IG5vdGhpbmcuIEl0IGVuc3VyZXMgdGhhdCB0aGUgc3Jjc2V0IGF0dHJpYnV0ZSBzdXBwb3J0cyBp
bnZhbGlkIGRhdGEgdXJpIHNjaGVtZXMKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9o
aWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQtaW52YWxpZC1pbnB1dHMuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0LWludmFsaWQtaW5wdXRz
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWJhNDUxN2UxMmUzMmMwOThmNTUyOThlNWYwNzdkOTIxYzJiOWJj
NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0
LWRhdGEtc3Jjc2V0LWludmFsaWQtaW5wdXRzLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAg
dGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhpcyBpbWcgdGFnIGJlbG93IGlzIGVt
cHR5IGFuZCBkaXNwbGF5cyBub3RoaW5nLiBJdCBlbnN1cmVzIHRoYXQgdGhlIHNyY3NldCBhdHRy
aWJ1dGUgc3VwcG9ydHMgaW52YWxpZCBkYXRhIHVyaSBzY2hlbWVzPC9kaXY+CisgICAgPGltZyBz
cmM9IiIgc3Jjc2V0PSJkYXRhOmltYWdlL3BuZztiYXNlNjQsVGhpc0lzQU1hbEZvcm1lZERhdGEl
Lyx3aXRoRm9yYmlkZGVuLENoYXJhY3RlcnM6IT9+JiMnKSAyeCwgZGF0YTogM3gsIGRhdGE6O2No
YXJzZXQ9IDR4LCBkYXRhOjtjaGFyc2V0PXVzLUFTQ0lJIDV4LCBkYXRhOixCYWREYXRhIDZ4LCBk
YXRhOmZvby9iYXIsZm9vYmFyIDd4LCBkYXRhOmZvby9iYXIsIDh4LCBkYXRhOmZvby9iYXIgOXgi
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9p
bWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQtdmFsaWQtaW5wdXRzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0LXZhbGlkLWlucHV0cy1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGY3NzhmNTM0N2Y2MzJmMTFkNjc2ZjlhYjYwNGQ0NzBl
NDY5YmQxZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c3Jjc2V0LWRhdGEtc3Jjc2V0LXZhbGlkLWlucHV0cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwy
IEBACitUaGlzIHRlc3QgcGFzc2VzIGlmIHRoaXMgaW1nIHRhZyBiZWxvdyBpcyBlbXB0eSBhbmQg
ZGlzcGxheXMgbm90aGluZy4gSXQgZW5zdXJlcyB0aGF0IHRoZSBzcmNzZXQgYXR0cmlidXRlIHN1
cHBvcnRzIHZhcmlvdXMgZm9ybXMgb2YgdmFsaWQgZGF0YSB1cmkgc2NoZW1lcworCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC12YWxp
ZC1pbnB1dHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEt
c3Jjc2V0LXZhbGlkLWlucHV0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiNWY5ZmI5ZTZiMGJhMzE1OWE4
OTY4ODBmYTU5ZmM5NzExOTE4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC12YWxpZC1pbnB1dHMuaHRtbApAQCAtMCww
ICsxLDE0IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB9Cis8L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGlzIGlt
ZyB0YWcgYmVsb3cgaXMgZW1wdHkgYW5kIGRpc3BsYXlzIG5vdGhpbmcuIEl0IGVuc3VyZXMgdGhh
dCB0aGUgc3Jjc2V0IGF0dHJpYnV0ZSBzdXBwb3J0cyB2YXJpb3VzIGZvcm1zIG9mIHZhbGlkIGRh
dGEgdXJpIHNjaGVtZXM8L2Rpdj4KKyAgICA8aW1nIHNyYz0iIiBzcmNzZXQ9ImRhdGE6LHBsYWlu
dGV4dCAyeCwgZGF0YTo7Y2hhcnNldD11cy1BU0NJSSxwbGFpbnRleHQgM3gsIGRhdGE6dGV4dC9w
bGFpbjtjaGFyc2V0PXVzLUFTQ0lJLHBsYWludGV4dCA0eCwgZGF0YTp0ZXh0L3BsYWluLHBsYWlu
dGV4dCA1eCwgZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFK
WUFBQUE4Q0FJQUFBQUw1TlE5QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVV
SDJ3b2FCUWM0b0xFRnBBQUFBQmwwUlZoMFEyOXRiV1Z1ZEFCRGNtVmhkR1ZrSUhkcGRHZ2dSMGxO
VUZlQkRoY0FBQUNNU1VSQlZIamE3ZE5CRVlBZ0ZFVlJQaEhNWWdBelVJc21WbkZ2Qi9mc29RYitP
YmZCbXpNdnhuZVcxRDF2enoyd0ZpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0lVUWlFVVFv
UkNLSVJDaUZBSWhWQUlFZXAzeFRXVEx6enU1b1ZDS0lSQ2lGQUloVkFJRVFxaEVBb2hRaUVVUWlG
RUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNMVVppM1ZFd2NCTUdyMU5nQUFBQUJKUlU1RXJrSmdnZz09
IDZ4Ij4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlk
cGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBp
L2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC5odG1sCmluZGV4IDE4YWM4ZjkyOTE4YWE0NGM4ZGNh
OTgyMjQ0MWI5MzFhYmZiYzJiNjMuLmNhMGE0N2NlNjE3YjNlODMyNWFkODQ5MTQyM2QzODdkMDhk
YTM1Y2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRh
dGEtc3Jjc2V0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQt
ZGF0YS1zcmNzZXQuaHRtbApAQCAtMTIsNyArMTIsNyBAQAogPC9zY3JpcHQ+CiA8L2hlYWQ+CiA8
Ym9keSBpZD0iYm9keSI+Ci0gICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBpbWFnZSBi
ZWxvdyBsb29rcyBsaWtlIGEgMngyIGdyaWQgKHllbGxvdywgZ3JheSwgbGlnaHQgZ3JlZW4sIGRh
cmsgZ3JlZW4pLiBJbiB0aGlzIGNhc2UgdGhlIHNyY3NldCBhdHRyaWJ1dGUgaGFzIGEgYmFzZTY0
IHVybCwgd2l0aCB0aGUgY29tbWEgZXNjYXBlZC48L2Rpdj4KLSAgICA8aW1nIGlkPSJmb28iIHNy
Yz0iIiBzcmNzZXQ9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCUyQ2lWQk9SdzBLR2dvQUFBQU5TVWhF
VWdBQUFKWUFBQUE4Q0FJQUFBQUw1TlE5QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFC
M1JKVFVVSDJ3b2FCUWM0b0xFRnBBQUFBQmwwUlZoMFEyOXRiV1Z1ZEFCRGNtVmhkR1ZrSUhkcGRH
Z2dSMGxOVUZlQkRoY0FBQUNNU1VSQlZIamE3ZE5CRVlBZ0ZFVlJQaEhNWWdBelVJc21WbkZ2Qi9m
c29RYitPYmZCbXpNdnhuZVcxRDF2enoyd0ZpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0lV
UWlFVVFvUkNLSVJDaUZBSWhWQUlFZXAzeFRXVEx6enU1b1ZDS0lSQ2lGQUloVkFJRVFxaEVBb2hR
aUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNMVVppM1ZFd2NCTUdyMU5nQUFBQUJKUlU1RXJr
SmdnZz09IDJ4LCBkYXRhOmltYWdlL3BuZztiYXNlNjQlMkNpVkJPUncwS0dnb0FBQUFOU1VoRVVn
QUFBSllBQUFBOENBSUFBQUFMNU5ROUFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNS
SlRVVUgyd29hQlFjNG9MRUZwQUFBQUJsMFJWaDBRMjl0YldWdWRBQkRjbVZoZEdWa0lIZHBkR2dn
UjBsTlVGZUJEaGNBQUFDTVNVUkJWSGphN2ROQkVZQWdGRVZSUGhITVlnQXpVSXNtVm5GdkIvZnNv
UWIrT2JmQm16TXZ4bmVXMUQxdnp6MndGaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNJVVFp
RVVRb1JDS0lSQ2lGQUloVkFJRWVwM3hUV1RMenp1NW9WQ0tJUkNpRkFJaFZBSUVRcWhFQW9oUWlF
VVFpRkVLSVJDS0lRSWhWQUloUkNoRUFxaEVDTFVaaTNWRXdjQk1HcjFOZ0FBQUFCSlJVNUVya0pn
Z2c9PSAxeCI+CisgICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBpbWFnZSBiZWxvdyBs
b29rcyBsaWtlIGEgMngyIGdyaWQgKHllbGxvdywgZ3JheSwgbGlnaHQgZ3JlZW4sIGRhcmsgZ3Jl
ZW4pLiBJbiB0aGlzIGNhc2UgdGhlIHNyY3NldCBhdHRyaWJ1dGUgaGFzIGEgYmFzZTY0IHVybC48
L2Rpdj4KKyAgICA8aW1nIGlkPSJmb28iIHNyYz0iIiBzcmNzZXQ9ImRhdGE6aW1hZ2UvcG5nO2Jh
c2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBOENBSUFBQUFMNU5ROUFBQUFDWEJJ
V1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUgyd29hQlFjNG9MRUZwQUFBQUJsMFJWaDBR
Mjl0YldWdWRBQkRjbVZoZEdWa0lIZHBkR2dnUjBsTlVGZUJEaGNBQUFDTVNVUkJWSGphN2ROQkVZ
QWdGRVZSUGhITVlnQXpVSXNtVm5GdkIvZnNvUWIrT2JmQm16TXZ4bmVXMUQxdnp6MndGaUVVUWlG
RUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNJVVFpRVVRb1JDS0lSQ2lGQUloVkFJRWVwM3hUV1RMenp1
NW9WQ0tJUkNpRkFJaFZBSUVRcWhFQW9oUWlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFxaEVDTFVa
aTNWRXdjQk1HcjFOZ0FBQUFCSlJVNUVya0pnZ2c9PSAyeCwgZGF0YTppbWFnZS9wbmc7YmFzZTY0
LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUE4Q0FJQUFBQUw1TlE5QUFBQUNYQklXWE1B
QUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDJ3b2FCUWM0b0xFRnBBQUFBQmwwUlZoMFEyOXRi
V1Z1ZEFCRGNtVmhkR1ZrSUhkcGRHZ2dSMGxOVUZlQkRoY0FBQUNNU1VSQlZIamE3ZE5CRVlBZ0ZF
VlJQaEhNWWdBelVJc21WbkZ2Qi9mc29RYitPYmZCbXpNdnhuZVcxRDF2enoyd0ZpRVVRaUZFS0lS
Q0tJUUloVkFJaFJDaEVBcWhFQ0lVUWlFVVFvUkNLSVJDaUZBSWhWQUlFZXAzeFRXVEx6enU1b1ZD
S0lSQ2lGQUloVkFJRVFxaEVBb2hRaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNMVVppM1ZF
d2NCTUdyMU5nQUFBQUJKUlU1RXJrSmdnZz09IDF4Ij4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWZyYWN0aW9uLTEuNXgt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZnJhY3Rp
b24tMS41eC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjNkMmMzOTYwMzg1ZWMxM2RhODNiZDhl
OTA4MmI3MjU4MzNlMzdiYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlk
cGkvaW1hZ2Utc3Jjc2V0LWZyYWN0aW9uLTEuNXgtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBA
QAorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdGltZyIpLmNsaWVudFdpZHRoPT0y
MDAgaXMgdHJ1ZQorVGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgc3Jjc2V0IHJlc291cmNlIGlzIGxv
YWRlZCBhbmQgZGlzcGxheWVkIGFzIHRoZSBpbWFnZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1mcmFjdGlvbi0xLjV4Lmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1mcmFjdGlvbi0xLjV4Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTgwMzA3ZjQ0M2Q3ODU1NWI1ODU1MWRkZDA1M2FkYzdlNzE2YzUxZQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWZyYWN0aW9uLTEuNXguaHRt
bApAQCAtMCwwICsxLDIzIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICB3aW5kb3cu
dGFyZ2V0U2NhbGVGYWN0b3IgPSAxLjU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvc3Jjc2V0LWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKwor
ICAgIGFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKGlu
dGVybmFscykKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRlc3RpbWciKS5jbGllbnRXaWR0aD09MjAwJyk7CisgICAgfSwgZmFsc2UpOworPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgc3Jjc2V0
IHJlc291cmNlIGlzIGxvYWRlZCBhbmQgZGlzcGxheWVkIGFzIHRoZSBpbWFnZTwvZGl2PgorPGlt
ZyBzcmM9InJlc291cmNlcy9ibHVlLTEwMC1weC1zcXVhcmUucG5nIiBzcmNzZXQ9InJlc291cmNl
cy9ncmVlbi0yMDAtcHgtc3F1YXJlLnBuZyAyeCIgaWQ9InRlc3RpbWciPgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52
YWxpZC1pbnB1dHMtZXhjZXB0LW9uZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFn
ZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtZXhjZXB0LW9uZS5odG1sCmluZGV4IDFmMWUxOWQzOTNi
Mjg2ZTJmMGVlNzQ0MjBjZjA2MDZjMjUxMWY3ZTQuLjI5ODI1YjkyZGEyMjNiMTZmMDdkNDQyNzBl
NzkwMmI0NTRkYmU1MzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c3Jjc2V0LWludmFsaWQtaW5wdXRzLWV4Y2VwdC1vbmUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlucHV0cy1leGNlcHQtb25lLmh0bWwKQEAg
LTEsNSArMSw2IEBACiA8aHRtbD4KIDxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zcmNz
ZXQtaGVscGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KICAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpIHsKQEAgLTE1LDYgKzE2LDYgQEAKIDxib2R5IGlkPSJib2R5Ij4KICAgICA8ZGl2PlRoaXMg
dGVzdCBwYXNzZXMgaWYgdGhlIGltZyB0YWcgYmVsb3cgaXMgYSBncmVlbiBzcXVhcmUgcmVnYXJk
bGVzcyBvZiB0aGUgc2NhbGUgZmFjdG9yLiBJdCBlbnN1cmVzIHRoYXQgaW52YWxpZCBpbnB1dHMg
YXJlCiAgICAgaWdub3JlZCBhbmQgd2VsbC1mb3JtZWQgaW1hZ2VzIGFyZSBjaG9zZW4gcmVnYXJk
bGVzcyBvZiB0aGVpciBxdWFsaWZpZXJzLCBvbmNlIHRoZXkgYXJlIHRoZSBvbmx5IGNhbmRpZGF0
ZSBsZWZ0PC9kaXY+Ci0gICAgPGltZyBpZD0iZm9vIiBzcmM9IiIgc3Jjc2V0PSIxeCwsICAsICAg
eCAgICAsIHJlc291cmNlcy9ncmVlbi0yMDAtcHgtc3F1YXJlLnBuZyAyeCwgMiI+CisgICAgPGlt
ZyBpZD0iZm9vIiBzcmM9IiIgc3Jjc2V0PSIxeCwsICAsICAgeCAgICAsMnggICwgZm9vLmpwZywg
M3gsIGJhci5qcGcgNHggMTAwaCwgZm9vLmpwZyA1LCBiYXIuanBnIGR4LCByZXNvdXJjZXMvZ3Jl
ZW4tMjAwLXB4LXNxdWFyZS5wbmcgICAyeCAsIj48L2ltZz4KIDwvYm9keT4KIDwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5w
dXRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlu
cHV0cy5odG1sCmluZGV4IDJkYTZjMzA1MTFiZmFjODdmMzk5ZDdhNTFmYjYxOTNlMDE3N2ZhMmYu
LjI0ZGEyOTZlMmQ4MWYwNTM4YmQ4MWJiNWVlNjEyN2E5ODU5Mjc1MDkgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMuaHRt
bApAQCAtNSw2ICs1LDYgQEAKIAogPGJvZHkgaWQ9ImJvZHkiPgogICAgIDxkaXY+VGhpcyB0ZXN0
IHBhc3NlcyBpZiB0aGlzIGltZyB0YWcgYmVsb3cgaXMgZW1wdHkgYW5kIGRpc3BsYXlzIG5vdGhp
bmcuIEl0IGVuc3VyZXMgdGhhdCB0aGUgc3Jjc2V0IGF0dHJpYnV0ZSBzdXBwb3J0cyBpbnZhbGlk
IGlucHV0czwvZGl2PgotICAgIDxpbWcgaGVpZ2h0PSIxMDAiIHdpZHRoPSIxMDAiIHNyYz0iIiBz
cmNzZXQ9IjF4LCwgICwgICB4ICAgICwyeCAgIj48L2ltZz4KKyAgICA8aW1nIGhlaWdodD0iMTAw
IiB3aWR0aD0iMTAwIiBzcmM9IiIgc3Jjc2V0PSIxeCwsICAsICAgeCAgICAsMnggICwgZm9vLmpw
ZywgM3gsIGJhci5qcGcgNHggMTAwaCwgZm9vLmpwZyA1LCBiYXIuanBnIGR4LGZvby5qcGcsYmFy
LmpwZywiPjwvaW1nPgogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtbm9tb2RpZmllci1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1ub21vZGlmaWVyLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xYzgyYzZhYWM4NDc3NDhjZDI3MjNkZmFiOWVhZTgxMWE5NzdkNzNhCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtbm9tb2RpZmll
ci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJmb28iKS5jbGllbnRXaWR0aD09MTUwIGlzIHRydWUKK1RoaXMgdGVzdCBwYXNzZXMgaWYg
dGhlIGltYWdlIGJlbG93IGlzIG5vdCBlbXB0eS4gSXQgZW5zdXJlcyB0aGF0IGEgY2FuZGlkYXRl
IHdpdGhvdXQgc2NhbGUgbW9kaWZpZXIgZ2V0IGEgZGVmYXVsdCBvbmUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtbm9tb2RpZmllci5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtbm9tb2RpZmllci5odG1sCmluZGV4IDQ3
YWJmODE3ZGFhYjgxMWY1ODc1Yjc0NzcyZjA0NGNjNzJmNzJhNGYuLjYyOWUxYTZkZjhlYTcwMTll
NzkzMDRlMWJkZmMzZmNlNzQ3OWE0NzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlk
cGkvaW1hZ2Utc3Jjc2V0LW5vbW9kaWZpZXIuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hp
ZHBpL2ltYWdlLXNyY3NldC1ub21vZGlmaWVyLmh0bWwKQEAgLTEsMTAgKzEsMjAgQEAKIDxodG1s
PgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NyY3NldC1oZWxwZXIuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0
UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB9CisKKyAgICBhZGRFdmVudExpc3RlbmVyKCJsb2Fk
IiwgZnVuY3Rpb24oKSB7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImZvbyIpLmNsaWVudFdpZHRoPT0xNTAnKTsKKyAgICB9LCBmYWxzZSk7Cis8L3Njcmlw
dD4KIDwvaGVhZD4KIAogPGJvZHkgaWQ9ImJvZHkiPgotICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3Nl
cyBpZiB0aGUgaW1hZ2UgYmVsb3cgaXMgZW1wdHksIHNpbmNlIHRoZSBzcmNzZXQgaXMgaW52YWxp
ZCAoZG9lcyBub3QgaGF2ZSBhIHNjYWxlIG1vZGlmaWVyIGFueXdoZXJlIGFuZCB0aGUgc3JjIGF0
dHJpYnV0ZSBpcyBlbXB0eSkuPC9kaXY+Ci0gICAgPGltZyBoZWlnaHQ9IjEwMCIgd2lkdGg9IjEw
MCIgc3JjPSIiIHNyY3NldD0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5T
VWhFVWdBQUFKWUFBQUE4Q0FJQUFBQUw1TlE5QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFB
QUFCM1JKVFVVSDJ3b2FCUWM0b0xFRnBBQUFBQmwwUlZoMFEyOXRiV1Z1ZEFCRGNtVmhkR1ZrSUhk
cGRHZ2dSMGxOVUZlQkRoY0FBQUNNU1VSQlZIamE3ZE5CRVlBZ0ZFVlJQaEhNWWdBelVJc21WbkZ2
Qi9mc29RYitPYmZCbXpNdnhuZVcxRDF2enoyd0ZpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhF
Q0lVUWlFVVFvUkNLSVJDaUZBSWhWQUlFZXAzeFRXVEx6enU1b1ZDS0lSQ2lGQUloVkFJRVFxaEVB
b2hRaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNMVVppM1ZFd2NCTUdyMU5nQUFBQUJKUlU1
RXJrSmdnZz09Ij4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGltYWdlIGJlbG93
IGlzIG5vdCBlbXB0eS4gSXQgZW5zdXJlcyB0aGF0IGEgY2FuZGlkYXRlIHdpdGhvdXQgc2NhbGUg
bW9kaWZpZXIgZ2V0IGEgZGVmYXVsdCBvbmU8L2Rpdj4KKyAgICA8aW1nIGlkPSJmb28iIHNyYz0i
IiBzcmNzZXQ9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFB
SllBQUFBOENBSUFBQUFMNU5ROUFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRV
VUgyd29hQlFjNG9MRUZwQUFBQUJsMFJWaDBRMjl0YldWdWRBQkRjbVZoZEdWa0lIZHBkR2dnUjBs
TlVGZUJEaGNBQUFDTVNVUkJWSGphN2ROQkVZQWdGRVZSUGhITVlnQXpVSXNtVm5GdkIvZnNvUWIr
T2JmQm16TXZ4bmVXMUQxdnp6MndGaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNJVVFpRVVR
b1JDS0lSQ2lGQUloVkFJRWVwM3hUV1RMenp1NW9WQ0tJUkNpRkFJaFZBSUVRcWhFQW9oUWlFVVFp
RkVLSVJDS0lRSWhWQUloUkNoRUFxaEVDTFVaaTNWRXdjQk1HcjFOZ0FBQUFCSlJVNUVya0pnZ2c9
PSI+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBp
L2ltYWdlLXNyY3NldC1zcGFjZS1sZWZ0LW5vbW9kaWZpZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtc3BhY2UtbGVmdC1ub21vZGlmaWVyLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iY2IxODEzNTZjNDFkNTQwOGRjNmQ2OTU4NDU2ODhmMGJiYTBj
ZTVjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNz
ZXQtc3BhY2UtbGVmdC1ub21vZGlmaWVyLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK1BB
U1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpLmNsaWVudFdpZHRoPT0xNTAgaXMgdHJ1
ZQorVGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgaW1hZ2UgYmVsb3cgaXMgbm90IGVtcHR5LiBJdCBl
bnN1cmVzIHRoYXQgYSBjYW5kaWRhdGUgd2l0aG91dCBzY2FsZSBtb2RpZmllciBnZXQgYSBkZWZh
dWx0IG9uZSwgZXZlbiB3aXRoIHNwYWNlIGxlZnQgYXQgdGhlIGVuZC4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtc3BhY2UtbGVmdC1ub21vZGlmaWVy
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1zcGFjZS1sZWZ0LW5v
bW9kaWZpZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMzUxYzE2MGNmNjViN2EzODhmMDFhYjJlNGE0ODM4
MjE4NGRjZjNmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFn
ZS1zcmNzZXQtc3BhY2UtbGVmdC1ub21vZGlmaWVyLmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc3Jjc2V0LWhlbHBlci5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRl
c3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKworICAgIGFkZEV2ZW50TGlzdGVuZXIoImxv
YWQiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCdkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZm9vIikuY2xpZW50V2lkdGg9PTE1MCcpOworICAgIH0sIGZhbHNlKTsKKzwvc2Ny
aXB0PgorPC9oZWFkPgorCis8Ym9keSBpZD0iYm9keSI+CisgICAgPGRpdj5UaGlzIHRlc3QgcGFz
c2VzIGlmIHRoZSBpbWFnZSBiZWxvdyBpcyBub3QgZW1wdHkuIEl0IGVuc3VyZXMgdGhhdCBhIGNh
bmRpZGF0ZSB3aXRob3V0IHNjYWxlIG1vZGlmaWVyIGdldCBhIGRlZmF1bHQgb25lLCBldmVuIHdp
dGggc3BhY2UgbGVmdCBhdCB0aGUgZW5kLjwvZGl2PgorICAgIDxpbWcgaWQ9ImZvbyIgc3JjPSIi
IHNyY3NldD0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFK
WUFBQUE4Q0FJQUFBQUw1TlE5QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVV
SDJ3b2FCUWM0b0xFRnBBQUFBQmwwUlZoMFEyOXRiV1Z1ZEFCRGNtVmhkR1ZrSUhkcGRHZ2dSMGxO
VUZlQkRoY0FBQUNNU1VSQlZIamE3ZE5CRVlBZ0ZFVlJQaEhNWWdBelVJc21WbkZ2Qi9mc29RYitP
YmZCbXpNdnhuZVcxRDF2enoyd0ZpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0lVUWlFVVFv
UkNLSVJDaUZBSWhWQUlFZXAzeFRXVEx6enU1b1ZDS0lSQ2lGQUloVkFJRVFxaEVBb2hRaUVVUWlG
RUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNMVVppM1ZFd2NCTUdyMU5nQUFBQUJKUlU1RXJrSmdnZz09
ICAiPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LW5vbW9kaWZpZXItZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LW5vbW9kaWZpZXIt
ZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjZkNmI5MjQxOTBi
YjFjMzNhOTlmZmIxYWVkNmFhMzMzMmRmNzRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2hpZHBpL2lt
YWdlLXNyY3NldC1ub21vZGlmaWVyLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEy
ICswLDAgQEAKLWxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAotICBSZW5kZXJWaWV3IGF0ICgw
LDApIHNpemUgODAweDYwMAotbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi0gIFJlbmRlckJs
b2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAgICBSZW5kZXJCb2R5IHtCT0RZfSBh
dCAoOCw4KSBzaXplIDc4NHg1ODQKLSAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgwLDApIHNp
emUgNzg0eDM2Ci0gICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDc3NXgz
NgotICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDc3NTogIlRoaXMgdGVzdCBwYXNz
ZXMgaWYgdGhlIGltYWdlIGJlbG93IGlzIGVtcHR5LCBzaW5jZSB0aGUgc3Jjc2V0IGlzIGludmFs
aWQgKGRvZXMgbm90IGhhdmUgYSBzY2FsZSBtb2RpZmllciBhbnl3aGVyZSBhbmQgdGhlIHNyYyIK
LSAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwxOCkgd2lkdGggMTE3OiAiYXR0cmlidXRlIGlzIGVt
cHR5KS4iCi0gICAgICBSZW5kZXJCbG9jayAoYW5vbnltb3VzKSBhdCAoMCwzNikgc2l6ZSA3ODR4
MTAwCi0gICAgICAgIFJlbmRlckltYWdlIHtJTUd9IGF0ICgwLDApIHNpemUgMTAweDEwMAotICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211910</attachid>
            <date>2013-09-17 08:37:26 -0700</date>
            <delta_ts>2013-09-17 13:05:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119423-20130917173724.patch</filename>
            <type>text/plain</type>
            <size>30868</size>
            <attacher name="Romain Perier">romain.perier</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU1NDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTU0NDljZGU0YjlhMmRm
ZGYxMWJkOWIzZTFhZjk4MjA4MjVjM2ZhMi4uMTU5MWExZjJjMzUxOTI0NDFkYTJiMmFmOGI2ODgy
YjNiOTViNWRlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEzLTA5LTEzICBSb21h
aW4gUGVyaWVyICA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisKKyAgICAgICAgSW1wcm92ZSBz
cmNzZXQgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTk0MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCBuZXcgdGVzdHMgYW5kIGNvdmVyZWQgYnkgZXhpc3Rpbmcgb25lcy4KKworICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6aXNIVE1MU3BhY2VPckNvbW1hKTogQWRkIGEgbmV3IHByZWRpY2F0ZSBmdW5jdGlvbiB1c2Vk
IGJ5IFN0cmluZzo6ZmluZCgpCisgICAgICAgIHRvIGdldCB0aGUgZmlyc3Qgc3BhY2Ugb3IgY29t
bWEgY2hhcmFjdGVyIGZyb20gdGhlIGlucHV0IHN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlSW1hZ2VzV2l0aFNjYWxlRnJvbVNyY1NldEF0dHJpYnV0ZSk6IEFkZCBhIG5ldyBzdGF0aWMg
ZnVuY3Rpb24gdG8gcGFyc2UKKyAgICAgICAgYW5kIGV4dHJhY3QgaW1hZ2VzIHdpdGggc2NhbGUg
ZnJvbSB0aGUgc3Jjc2V0IGF0dHJpYnV0ZS4gQWxsIHZhbGlkIGNhbmRpZGF0ZXMgYXJlCisgICAg
ICAgIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgdGhyb3VnaCBhIGxpc3QuIFRoaXMgcGFyc2luZyBm
dW5jdGlvbiBhbHNvIGFkZHMgc3VwcG9ydAorICAgICAgICBmb3IgZGF0YSBVUkkgc2NoZW1lcyBh
cyBkZXNjcmliZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpiZXN0
Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKTogUmVtb3ZlIGludGVybWVkaWF0ZSBhcnJheXMg
b2Ygc3RyaW5nCisgICAgICAgIHdoZW4gcGFyc2luZy4gVGhhdCBpcyBtb3JlIGVmZmljaWVudCBh
bmQgYXZvaWRzIHRyYXNoaW5nIHRoZSBkYXRhIGNhY2hlCisgICAgICAgICh2YXJ5aW5nIGJldHdl
ZW4gMjAgYW5kIDY1JSBmYXN0ZXIgZGVwZW5kaW5nIG9mIHRoZSBhbW91bnQgb2YgZGF0YSkKKyAg
ICAgICAgVGhlIHBhcnNlciBub3cgd2Fsa3MgYWxvbmcgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhbmQg
ZXh0cmFjdHMgdGhlIGNhbmRpZGF0ZXMgZGlyZWN0bHkuCisKIDIwMTMtMDktMTAgIEFsYmVydG8g
R2FyY2lhICA8YmVydG9AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBUaGUgY29kZSBnZW5l
cmF0b3IgcHJvZHVjZXMgYSB3YXJuaW5nIGlmIGEgcGFyYW1ldGVyIGNhbiBiZSBOVUxMCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCmluZGV4IDNk
MjY5NDJmYzc0MjQzMDZmY2Y5ZWNkOGIyODM1OGVmYTcwYTkwYWQuLmVkNTdkYmI4ZjIyYjE5MGQ4
MjJmNjQ4MTFmNWFiYmI4ZGYzZTgzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCkBAIC0zMTQsMzkgKzMxNCw5NCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgY29tcGFyZUJ5U2NhbGVGYWN0b3IoY29uc3QgSW1hZ2VXaXRoU2NhbGUmIGZpcnN0
LCBjb25zdCBJbWFnZQogICAgIHJldHVybiBmaXJzdC5zY2FsZUZhY3RvciA8IHNlY29uZC5zY2Fs
ZUZhY3RvcjsKIH0KIAotU3RyaW5nIGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFN0cmluZyYgc3JjQXR0cmlidXRlLCBjb25zdCBT
dHJpbmcmIHNyY1NldEF0dHJpYnV0ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0hUTUxTcGFjZU9y
Q29tbWEoVUNoYXIgY2hhcmFjdGVyKQogewotICAgIEltYWdlQ2FuZGlkYXRlcyBpbWFnZUNhbmRp
ZGF0ZXM7CisgICAgcmV0dXJuIGlzSFRNTFNwYWNlKGNoYXJhY3RlcikgfHwgY2hhcmFjdGVyID09
ICcsJzsKK30KIAotICAgIGNvbnN0IFN0cmluZyBzcmNTZXRBdHRyaWJ1dGVWYWx1ZSA9IHNyY1Nl
dEF0dHJpYnV0ZS5zaW1wbGlmeVdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpOwotICAgIFZlY3RvcjxT
dHJpbmc+IHNyY1NldFRva2VuczsKKy8vIFNlZSB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yIG1vcmUg
ZGV0YWlscyBhYm91dCB0aGUgYWxnb3JpdGhtIHRvIGZvbGxvdy4KKy8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMTMvV0QtaHRtbC1zcmNzZXQtMjAxMzAyMjgvI3Byb2Nlc3NpbmctdGhlLWltYWdl
LWNhbmRpZGF0ZXMuCitzdGF0aWMgdm9pZCBwYXJzZUltYWdlc1dpdGhTY2FsZUZyb21TcmNTZXRB
dHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzcmNTZXRBdHRyaWJ1dGUsIEltYWdlQ2FuZGlkYXRlcyYg
aW1hZ2VDYW5kaWRhdGVzKQoreworICAgIHNpemVfdCBpbWFnZUNhbmRpZGF0ZVN0YXJ0ID0gMDsK
KyAgICB1bnNpZ25lZCBzcmNTZXRMZW5ndGggPSBzcmNTZXRBdHRyaWJ1dGUubGVuZ3RoKCk7CiAK
LSAgICBzcmNTZXRBdHRyaWJ1dGVWYWx1ZS5zcGxpdCgnLCcsIHNyY1NldFRva2Vucyk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzcmNTZXRUb2tlbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgVmVjdG9yPFN0cmluZz4gZGF0YTsKKyAgICB3aGlsZSAoaW1hZ2VDYW5kaWRhdGVTdGFydCA8
IHNyY1NldExlbmd0aCkgewogICAgICAgICBmbG9hdCBpbWdTY2FsZUZhY3RvciA9IDEuMDsKLSAg
ICAgICAgYm9vbCB2YWxpZFNjYWxlRmFjdG9yID0gZmFsc2U7Ci0KLSAgICAgICAgc3JjU2V0VG9r
ZW5zW2ldLnN0cmlwV2hpdGVTcGFjZSgpLnNwbGl0KCcgJywgZGF0YSk7Ci0gICAgICAgIC8vIFRo
ZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGNhbmRpZGF0ZSBkZXNjcmlwdG9yLCBhbmQgdGhlIGxh
c3Qgb25lIG11c3QKLSAgICAgICAgLy8gYmUgYSBzY2FsZSBmYWN0b3IuIFNpbmNlIHdlIGRvbid0
IHN1cHBvcnQgZGVzY3JpcHRvcnMgb3RoZXIgdGhhbiBzY2FsZSwKLSAgICAgICAgLy8gaXQncyBi
ZXR0ZXIgdG8gZGlzY2FyZCBhbnkgcnVsZSB3aXRoIHN1Y2ggZGVzY3JpcHRvcnMgcmF0aGVyIHRo
YW4gYWNjZXB0Ci0gICAgICAgIC8vIG9ubHkgdGhlIHNjYWxlIGRhdGEuCi0gICAgICAgIGlmIChk
YXRhLnNpemUoKSAhPSAyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghZGF0
YS5sYXN0KCkuZW5kc1dpdGgoJ3gnKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBz
aXplX3Qgc2VwYXJhdG9yOwogCi0gICAgICAgIGltZ1NjYWxlRmFjdG9yID0gZGF0YS5sYXN0KCku
c3Vic3RyaW5nKDAsIGRhdGEubGFzdCgpLmxlbmd0aCgpIC0gMSkudG9GbG9hdCgmdmFsaWRTY2Fs
ZUZhY3Rvcik7Ci0gICAgICAgIGlmICghdmFsaWRTY2FsZUZhY3RvcikKKyAgICAgICAgLy8gNC4g
U3BsaXR0aW5nIGxvb3A6IFNraXAgd2hpdGVzcGFjZS4KKyAgICAgICAgc2l6ZV90IGltYWdlVXJs
U3RhcnQgPSBzcmNTZXRBdHRyaWJ1dGUuZmluZChpc05vdEhUTUxTcGFjZSwgaW1hZ2VDYW5kaWRh
dGVTdGFydCk7CisgICAgICAgIGlmIChpbWFnZVVybFN0YXJ0ID09IG5vdEZvdW5kKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIC8vIElmIFRoZSBjdXJyZW50IGNhbmRpZGF0ZSBpcyBlaXRo
ZXIgdG90YWxseSBlbXB0eSBvciBvbmx5IGNvbnRhaW5zIHNwYWNlLCBza2lwcGluZy4KKyAgICAg
ICAgaWYgKHNyY1NldEF0dHJpYnV0ZVtpbWFnZVVybFN0YXJ0XSA9PSAnLCcpIHsKKyAgICAgICAg
ICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBpbWFnZVVybFN0YXJ0ICsgMTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwotCisgICAgICAgIH0KKyAgICAgICAgLy8gNS4gQ29sbGVjdCBhIHNlcXVlbmNl
IG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHNwYWNlIGNoYXJhY3RlcnMsIGFuZCBsZXQgdGhh
dCBiZSB1cmwuCisgICAgICAgIHNpemVfdCBpbWFnZVVybEVuZCA9IHNyY1NldEF0dHJpYnV0ZS5m
aW5kKGlzSFRNTFNwYWNlLCBpbWFnZVVybFN0YXJ0ICsgMSk7CisgICAgICAgIGlmIChpbWFnZVVy
bEVuZCA9PSBub3RGb3VuZCkgeworICAgICAgICAgICAgaW1hZ2VVcmxFbmQgPSBzcmNTZXRMZW5n
dGg7CisgICAgICAgICAgICBzZXBhcmF0b3IgPSBzcmNTZXRMZW5ndGg7CisgICAgICAgIH0gZWxz
ZSBpZiAoc3JjU2V0QXR0cmlidXRlW2ltYWdlVXJsRW5kIC0gMV0gPT0gJywnKSB7CisgICAgICAg
ICAgICAtLWltYWdlVXJsRW5kOworICAgICAgICAgICAgc2VwYXJhdG9yID0gaW1hZ2VVcmxFbmQ7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyA3LiBDb2xsZWN0IGEgc2VxdWVuY2Ug
b2YgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgIiwiIChVKzAwMkMpIGNoYXJhY3RlcnMsIGFuZCBs
ZXQgdGhhdCBiZSBkZXNjcmlwdG9ycy4KKyAgICAgICAgICAgIHNpemVfdCBpbWFnZVNjYWxlU3Rh
cnQgPSBzcmNTZXRBdHRyaWJ1dGUuZmluZChpc05vdEhUTUxTcGFjZSwgaW1hZ2VVcmxFbmQgKyAx
KTsKKyAgICAgICAgICAgIGlmIChpbWFnZVNjYWxlU3RhcnQgPT0gbm90Rm91bmQpCisgICAgICAg
ICAgICAgICAgc2VwYXJhdG9yID0gc3JjU2V0TGVuZ3RoOworICAgICAgICAgICAgZWxzZSBpZiAo
c3JjU2V0QXR0cmlidXRlW2ltYWdlU2NhbGVTdGFydF0gPT0gJywnKQorICAgICAgICAgICAgICAg
IHNlcGFyYXRvciA9IGltYWdlU2NhbGVTdGFydDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIFRoaXMgcGFydCBkaWZmZXJzIGZyb20gdGhlIHNwZWMgYXMgdGhlIGN1cnJl
bnQgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3Jz
IGZvciBub3cuCisgICAgICAgICAgICAgICAgc2l6ZV90IGltYWdlU2NhbGVFbmQgPSBzcmNTZXRB
dHRyaWJ1dGUuZmluZChpc0hUTUxTcGFjZU9yQ29tbWEsIGltYWdlU2NhbGVTdGFydCArIDEpOwor
ICAgICAgICAgICAgICAgIGltYWdlU2NhbGVFbmQgPSAoaW1hZ2VTY2FsZUVuZCA9PSBub3RGb3Vu
ZCkgPyBzcmNTZXRMZW5ndGggOiBpbWFnZVNjYWxlRW5kOworICAgICAgICAgICAgICAgIHNpemVf
dCBjb21tYVBvc2l0aW9uID0gaW1hZ2VTY2FsZUVuZDsKKyAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGRlc2NyaXB0b3JzLgorICAgICAgICAgICAgICAgIHdo
aWxlICgoY29tbWFQb3NpdGlvbiA8IHNyY1NldExlbmd0aCAtIDEpICYmIGlzSFRNTFNwYWNlKHNy
Y1NldEF0dHJpYnV0ZVtjb21tYVBvc2l0aW9uXSkpCisgICAgICAgICAgICAgICAgICAgICsrY29t
bWFQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3Qgbm90IGh0bWwgc3Bh
Y2UgY2hhcmFjdGVyIGFmdGVyIHRoZSBzY2FsZSBtb2RpZmllciBpcyBub3QgYSBjb21tYSwKKyAg
ICAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjYW5kaWRhdGUgaXMgYW4gaW52YWxpZCBpbnB1
dC4KKyAgICAgICAgICAgICAgICBpZiAoKGNvbW1hUG9zaXRpb24gPCBzcmNTZXRMZW5ndGggLSAx
KSAmJiBzcmNTZXRBdHRyaWJ1dGVbY29tbWFQb3NpdGlvbl0gIT0gJywnKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgY29tbWEgYW5kIHNraXAgdGhlIGlucHV0Lgor
ICAgICAgICAgICAgICAgICAgICBjb21tYVBvc2l0aW9uID0gc3JjU2V0QXR0cmlidXRlLmZpbmQo
JywnLCBjb21tYVBvc2l0aW9uICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21tYVBv
c2l0aW9uID09IG5vdEZvdW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBjb21tYVBvc2l0aW9uICsgMTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHNlcGFyYXRvciA9IGNvbW1hUG9zaXRpb247CisgICAgICAgICAgICAgICAgaWYg
KHNyY1NldEF0dHJpYnV0ZVtpbWFnZVNjYWxlRW5kIC0gMV0gIT0gJ3gnKSB7CisgICAgICAgICAg
ICAgICAgICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBzZXBhcmF0b3IgKyAxOworICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Ym9vbCB2YWxpZFNjYWxlRmFjdG9yID0gZmFsc2U7CisgICAgICAgICAgICAgICAgc2l6ZV90IHNj
YWxlRmFjdG9yTGVuZ3RoV2l0aG91dFVuaXQgPSBpbWFnZVNjYWxlRW5kIC0gaW1hZ2VTY2FsZVN0
YXJ0IC0gMTsKKyAgICAgICAgICAgICAgICBpbWdTY2FsZUZhY3RvciA9IGNoYXJhY3RlcnNUb0Zs
b2F0KHNyY1NldEF0dHJpYnV0ZS5jaGFyYWN0ZXJzKCkgKyBpbWFnZVNjYWxlU3RhcnQsIHNjYWxl
RmFjdG9yTGVuZ3RoV2l0aG91dFVuaXQsICZ2YWxpZFNjYWxlRmFjdG9yKTsKKworICAgICAgICAg
ICAgICAgIGlmICghdmFsaWRTY2FsZUZhY3RvcikgeworICAgICAgICAgICAgICAgICAgICBpbWFn
ZUNhbmRpZGF0ZVN0YXJ0ID0gc2VwYXJhdG9yICsgMTsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAg
ICAgIEltYWdlV2l0aFNjYWxlIGltYWdlOwotICAgICAgICBpbWFnZS5pbWFnZVVSTCA9IGRlY29k
ZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhWzBdKTsKKyAgICAgICAgaW1hZ2UuaW1hZ2VVUkwgPSBk
ZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmco
c3JjU2V0QXR0cmlidXRlLmNoYXJhY3RlcnMoKSArIGltYWdlVXJsU3RhcnQsIGltYWdlVXJsRW5k
IC0gaW1hZ2VVcmxTdGFydCkpOwogICAgICAgICBpbWFnZS5zY2FsZUZhY3RvciA9IGltZ1NjYWxl
RmFjdG9yOwogCiAgICAgICAgIGltYWdlQ2FuZGlkYXRlcy5hcHBlbmQoaW1hZ2UpOworICAgICAg
ICAvLyAxMS4gUmV0dXJuIHRvIHRoZSBzdGVwIGxhYmVsZWQgc3BsaXR0aW5nIGxvb3AuCisgICAg
ICAgIGltYWdlQ2FuZGlkYXRlU3RhcnQgPSBzZXBhcmF0b3IgKyAxOwogICAgIH0KK30KKworU3Ry
aW5nIGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IsIGNvbnN0IFN0cmluZyYgc3JjQXR0cmlidXRlLCBjb25zdCBTdHJpbmcmIHNyY1NldEF0dHJp
YnV0ZSkKK3sKKyAgICBJbWFnZUNhbmRpZGF0ZXMgaW1hZ2VDYW5kaWRhdGVzOworCisgICAgcGFy
c2VJbWFnZXNXaXRoU2NhbGVGcm9tU3JjU2V0QXR0cmlidXRlKHNyY1NldEF0dHJpYnV0ZSwgaW1h
Z2VDYW5kaWRhdGVzKTsKIAogICAgIGNvbnN0IFN0cmluZyBzcmMgPSAgc3JjQXR0cmlidXRlLnNp
bXBsaWZ5V2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7CiAgICAgaWYgKCFzcmMuaXNFbXB0eSgpKSB7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggMTljNjAyMzU3NDQ1Yjg4NmNiN2QzZmE2ZDhlZjMxMzU4YTY0OGM0OS4uZmJkOThm
NjI3YmE2NDQ0OGQwODlmMjNkNGU5MzQ1YzZjOWYxMWQzMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBA
CisyMDEzLTA5LTEzICBSb21haW4gUGVyaWVyICA8cm9tYWluLnBlcmllckBnbWFpbC5jb20+CisK
KyAgICAgICAgSW1wcm92ZSBzcmNzZXQgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk0MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jj
c2V0LWludmFsaWQtaW5wdXRzLmh0bWw6IEVuc3VyZXMgdGhhdCBhIHZhcmlvdXMgaW52YWxpZAor
ICAgICAgICAgIGZvcm0gb2YgZGF0YSB1cmkgc2NoZW1lcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBz
cmNzZXQgYXR0cmlidXRlLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEt
c3Jjc2V0LXZhbGlkLWlucHV0cy5odG1sOiBFbnN1cmVzIHRoYXQgYSB2YXJpb3VzIHZhbGlkCisg
ICAgICAgICAgZm9ybSBvZiBkYXRhIHVyaSBzY2hlbWVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIHNy
Y3NldCBhdHRyaWJ1dGUuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1z
cmNzZXQuaHRtbDogVXNlIGNvbW1hIGluc3RlYWQgb2YgJS4KKyAgICAgICAgKiBmYXN0L2hpZHBp
L2ltYWdlLXNyY3NldC1mcmFjdGlvbi0xLjV4Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
aGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLWV4Y2VwdC1vbmUuaHRtbDogTWlzc2lu
ZyBzcmNzZXQtaGVscGVyLmpzLiBBZGRpbmcgbW9yZSBpbnZhbGlkIGNhc2VzLgorICAgICAgICAq
IGZhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLmh0bWw6IEFkZGluZyBtb3Jl
IGludmFsaWQgY2FzZXMuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtbm9tb2Rp
Zmllci5odG1sOiBVcGRhdGVkIG91dHB1dCBhcyBiZWhhdmlvdXIgY2hhbmdlZCBmb3IgdGhpcyBj
YXNlLgorICAgICAgICAqIGZhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LXNwYWNlLXN1ZmZpeC1ub21v
ZGlmaWVyLmh0bWw6IEVuc3VyZXMgdGhhdCBhIHNpbmdsZSBjYW5kaWRhdGUgd2l0aCBubyBzY2Fs
ZSBtb2RpZmllcgorICAgICAgICAgIGlzIHN1cHBvcnRlZCBieSB0aGUgc3Jjc2V0IGF0dHJpYnV0
ZSwgZXZlbiBpZiBhIHNwYWNlIGlzIGxlZnQgYXQgdGhlIGVuZC4KKyAgICAgICAgKiBmYXN0L2hp
ZHBpL2ltYWdlLXNyY3NldC1zcGFjZS1wcmVmaXgtbm9tb2RpZmllci5odG1sOiBFbnN1cmVzIHRo
YXQgYSBzaW5nbGUgY2FuZGlkYXRlIHdpdGggbm8gc2NhbGUgbW9kaWZpZXIKKyAgICAgICAgICBp
cyBzdXBwb3J0ZWQgYnkgdGhlIHNyY3NldCBhdHRyaWJ1dGUsIGV2ZW4gaWYgYSBzcGFjZSBpcyBs
ZWZ0IGF0IHRoZSBiZWdpbm5pbmcuCisgICAgICAgICogZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQt
c3BhY2Utc3Vycm91bmRlZC1ub21vZGlmaWVyLmh0bWw6IEVuc3VyZXMgdGhhdCBhIHNpbmdsZSBj
YW5kaWRhdGUgd2l0aCBubyBzY2FsZSBtb2RpZmllcgorICAgICAgICAgIGlzIHN1cHBvcnRlZCBi
eSB0aGUgc3Jjc2V0IGF0dHJpYnV0ZSwgZXZlbiBpZiBpdCBpcyBzdXJyb3VuZGVkIGJ5IHNwYWNl
cy4KKyAgICAgICAgKiBmYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLWVzY2FwZWQtc3Jjc2V0
Lmh0bWw6IEVuc3VyZXMgdGhhdCBkYXRhIHVyaSBzY2hlbWVzIHdpdGggZXNjYXBlZCBjaGFyYWN0
ZXJzCisgICAgICAgICAgYXJlIHN1cHBvcnRlZCBieSB0aGUgc3Jjc2V0IGF0dHJpYnV0ZS4KKwog
MjAxMy0wOS0xMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29t
PgogCiAgICAgICAgIFtHVEtdIFRlc3QgL3dlYmtpdC9hdGsvZ2V0VGV4dEluUGFyYWdyYXBoQW5k
Qm9keU1vZGVyYXRlIGZhaWxzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNyY3NldC1kYXRhLWVzY2FwZWQtc3Jjc2V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtZXNjYXBlZC1zcmNzZXQtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjBlZDkxMWFhNzdhNjk1MmQ2OWNhMTQ0YWY0ODljNzU2ZTNlNDZhM2QKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRh
LWVzY2FwZWQtc3Jjc2V0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK1BBU1MgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpLmNsaWVudFdpZHRoPT0xMDAgaXMgdHJ1ZQorVGhpcyB0
ZXN0IHBhc3NlcyBpZiB0aGUgaW1hZ2UgYmVsb3cgaXMgbm90IGVtcHR5LiBJdCBlbnN1cmVzIHRo
YXQgdGhlIHNyY3NldCBhdHRyaWJ1dGUgc3VwcG9ydCBkYXRhIFVSSSBzY2hlbWVzIHdpdGggZXNj
YXBlZCBjaGFyYWN0ZXJzLgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNyY3NldC1kYXRhLWVzY2FwZWQtc3Jjc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hp
ZHBpL2ltYWdlLXNyY3NldC1kYXRhLWVzY2FwZWQtc3Jjc2V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGJl
YTIzYjQyMGFhYzg1M2U2ZDg0ZGU1ZDk3OGU3OTExMzFhZDJiYgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtZXNjYXBlZC1zcmNzZXQu
aHRtbApAQCAtMCwwICsxLDE4IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAg
ICB9CisKKyAgICBhZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7CisgICAgICAg
IHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpLmNsaWVudFdpZHRo
PT0xMDAnKTsKKyAgICB9LCBmYWxzZSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJi
b2R5Ij4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGltYWdlIGJlbG93IGlzIG5v
dCBlbXB0eS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBzcmNzZXQgYXR0cmlidXRlIHN1cHBvcnQgZGF0
YSBVUkkgc2NoZW1lcyB3aXRoIGVzY2FwZWQgY2hhcmFjdGVycy48L2Rpdj4KKyAgICA8aW1nIGlk
PSJmb28iIHNyYz0iIiBzcmNzZXQ9ImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnJTIweG1sbnM9J2h0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHdpZHRoPScxMDAnJTIwaGVpZ2h0PScxMDAnPjxs
aW5lYXJHcmFkaWVudCUyMGlkPSdncmFkaWVudCc+PHN0b3AlMjBvZmZzZXQ9JzEwJSclMjBzdG9w
LWNvbG9yPScjRjAwJy8+PHN0b3AlMjBvZmZzZXQ9JzkwJSclMjBzdG9wLWNvbG9yPScjZmNjJy8+
PC9saW5lYXJHcmFkaWVudD48cmVjdCUyMGZpbGw9J3VybCgjZ3JhZGllbnQpJyUyMHg9JzAnJTIw
eT0nMCclMjB3aWR0aD0nMTAwJSclMjBoZWlnaHQ9JzEwMCUnLz48L3N2Zz4gMngiPgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNz
ZXQtZGF0YS1zcmNzZXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFn
ZS1zcmNzZXQtZGF0YS1zcmNzZXQtZXhwZWN0ZWQudHh0CmluZGV4IDhmODNhMzI2MmY0MTYyZWY1
Nzk2NzM3NDlmODdmNTZmZjdhODcxNjcuLjFlODNhM2Y0ZTdkMTFmOTc5N2M4ZTY4OWY2MWQzZjYy
MDc0ZDBkYjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0
LWRhdGEtc3Jjc2V0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNyY3NldC1kYXRhLXNyY3NldC1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwzIEBACiBQQVNT
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKS5jbGllbnRXaWR0aD09MTUwIGlzIHRydWUK
LVRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGltYWdlIGJlbG93IGxvb2tzIGxpa2UgYSAyeDIgZ3Jp
ZCAoeWVsbG93LCBncmF5LCBsaWdodCBncmVlbiwgZGFyayBncmVlbikuIEluIHRoaXMgY2FzZSB0
aGUgc3Jjc2V0IGF0dHJpYnV0ZSBoYXMgYSBiYXNlNjQgdXJsLCB3aXRoIHRoZSBjb21tYSBlc2Nh
cGVkLgorVGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgaW1hZ2UgYmVsb3cgbG9va3MgbGlrZSBhIDJ4
MiBncmlkICh5ZWxsb3csIGdyYXksIGxpZ2h0IGdyZWVuLCBkYXJrIGdyZWVuKS4gSW4gdGhpcyBj
YXNlIHRoZSBzcmNzZXQgYXR0cmlidXRlIGhhcyBhIGJhc2U2NCB1cmwuCiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0LWludmFsaWQt
aW5wdXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0
LWRhdGEtc3Jjc2V0LWludmFsaWQtaW5wdXRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzY5
MmNlNDJkYWNmNGEwMjI2ZjIxOTgwMTQ3MmI5MWIxNmRjNDIyCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQtaW52YWxpZC1p
bnB1dHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorVGhpcyB0ZXN0IHBhc3NlcyBpZiB0
aGlzIGltZyB0YWcgYmVsb3cgaXMgZW1wdHkgYW5kIGRpc3BsYXlzIG5vdGhpbmcuIEl0IGVuc3Vy
ZXMgdGhhdCB0aGUgc3Jjc2V0IGF0dHJpYnV0ZSBzdXBwb3J0cyBpbnZhbGlkIGRhdGEgdXJpIHNj
aGVtZXMKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQt
ZGF0YS1zcmNzZXQtaW52YWxpZC1pbnB1dHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkv
aW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0LWludmFsaWQtaW5wdXRzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWJhNDUxN2UxMmUzMmMwOThmNTUyOThlNWYwNzdkOTIxYzJiOWJjNQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0LWludmFs
aWQtaW5wdXRzLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
KyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNU
ZXh0KCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2PlRoaXMg
dGVzdCBwYXNzZXMgaWYgdGhpcyBpbWcgdGFnIGJlbG93IGlzIGVtcHR5IGFuZCBkaXNwbGF5cyBu
b3RoaW5nLiBJdCBlbnN1cmVzIHRoYXQgdGhlIHNyY3NldCBhdHRyaWJ1dGUgc3VwcG9ydHMgaW52
YWxpZCBkYXRhIHVyaSBzY2hlbWVzPC9kaXY+CisgICAgPGltZyBzcmM9IiIgc3Jjc2V0PSJkYXRh
OmltYWdlL3BuZztiYXNlNjQsVGhpc0lzQU1hbEZvcm1lZERhdGElLyx3aXRoRm9yYmlkZGVuLENo
YXJhY3RlcnM6IT9+JiMnKSAyeCwgZGF0YTogM3gsIGRhdGE6O2NoYXJzZXQ9IDR4LCBkYXRhOjtj
aGFyc2V0PXVzLUFTQ0lJIDV4LCBkYXRhOixCYWREYXRhIDZ4LCBkYXRhOmZvby9iYXIsZm9vYmFy
IDd4LCBkYXRhOmZvby9iYXIsIDh4LCBkYXRhOmZvby9iYXIgOXgiPgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1z
cmNzZXQtdmFsaWQtaW5wdXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkv
aW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0LXZhbGlkLWlucHV0cy1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGY3NzhmNTM0N2Y2MzJmMTFkNjc2ZjlhYjYwNGQ0NzBlNDY5YmQxZQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0
LXZhbGlkLWlucHV0cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyIEBACitUaGlzIHRlc3QgcGFz
c2VzIGlmIHRoaXMgaW1nIHRhZyBiZWxvdyBpcyBlbXB0eSBhbmQgZGlzcGxheXMgbm90aGluZy4g
SXQgZW5zdXJlcyB0aGF0IHRoZSBzcmNzZXQgYXR0cmlidXRlIHN1cHBvcnRzIHZhcmlvdXMgZm9y
bXMgb2YgdmFsaWQgZGF0YSB1cmkgc2NoZW1lcworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRhLXNyY3NldC12YWxpZC1pbnB1dHMuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0LXZhbGlkLWlucHV0
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJiNWY5ZmI5ZTZiMGJhMzE1OWE4OTY4ODBmYTU5ZmM5NzExOTE4
ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3Nl
dC1kYXRhLXNyY3NldC12YWxpZC1pbnB1dHMuaHRtbApAQCAtMCwwICsxLDE0IEBACis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0
ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGlzIGltZyB0YWcgYmVsb3cgaXMgZW1w
dHkgYW5kIGRpc3BsYXlzIG5vdGhpbmcuIEl0IGVuc3VyZXMgdGhhdCB0aGUgc3Jjc2V0IGF0dHJp
YnV0ZSBzdXBwb3J0cyB2YXJpb3VzIGZvcm1zIG9mIHZhbGlkIGRhdGEgdXJpIHNjaGVtZXM8L2Rp
dj4KKyAgICA8aW1nIHNyYz0iIiBzcmNzZXQ9ImRhdGE6LHBsYWludGV4dCAyeCwgZGF0YTo7Y2hh
cnNldD11cy1BU0NJSSxwbGFpbnRleHQgM3gsIGRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXVzLUFT
Q0lJLHBsYWludGV4dCA0eCwgZGF0YTp0ZXh0L3BsYWluLHBsYWludGV4dCA1eCwgZGF0YTppbWFn
ZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUE4Q0FJQUFBQUw1TlE5
QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDJ3b2FCUWM0b0xFRnBBQUFB
QmwwUlZoMFEyOXRiV1Z1ZEFCRGNtVmhkR1ZrSUhkcGRHZ2dSMGxOVUZlQkRoY0FBQUNNU1VSQlZI
amE3ZE5CRVlBZ0ZFVlJQaEhNWWdBelVJc21WbkZ2Qi9mc29RYitPYmZCbXpNdnhuZVcxRDF2enoy
d0ZpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0lVUWlFVVFvUkNLSVJDaUZBSWhWQUlFZXAz
eFRXVEx6enU1b1ZDS0lSQ2lGQUloVkFJRVFxaEVBb2hRaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hF
QXFoRUNMVVppM1ZFd2NCTUdyMU5nQUFBQUJKUlU1RXJrSmdnZz09IDZ4Ij4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRh
dGEtc3Jjc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1kYXRh
LXNyY3NldC5odG1sCmluZGV4IDE4YWM4ZjkyOTE4YWE0NGM4ZGNhOTgyMjQ0MWI5MzFhYmZiYzJi
NjMuLmNhMGE0N2NlNjE3YjNlODMyNWFkODQ5MTQyM2QzODdkMDhkYTM1Y2UgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWRhdGEtc3Jjc2V0Lmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZGF0YS1zcmNzZXQuaHRtbApA
QCAtMTIsNyArMTIsNyBAQAogPC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keSBpZD0iYm9keSI+Ci0g
ICAgPGRpdj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBpbWFnZSBiZWxvdyBsb29rcyBsaWtlIGEg
MngyIGdyaWQgKHllbGxvdywgZ3JheSwgbGlnaHQgZ3JlZW4sIGRhcmsgZ3JlZW4pLiBJbiB0aGlz
IGNhc2UgdGhlIHNyY3NldCBhdHRyaWJ1dGUgaGFzIGEgYmFzZTY0IHVybCwgd2l0aCB0aGUgY29t
bWEgZXNjYXBlZC48L2Rpdj4KLSAgICA8aW1nIGlkPSJmb28iIHNyYz0iIiBzcmNzZXQ9ImRhdGE6
aW1hZ2UvcG5nO2Jhc2U2NCUyQ2lWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUE4Q0FJQUFB
QUw1TlE5QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDJ3b2FCUWM0b0xF
RnBBQUFBQmwwUlZoMFEyOXRiV1Z1ZEFCRGNtVmhkR1ZrSUhkcGRHZ2dSMGxOVUZlQkRoY0FBQUNN
U1VSQlZIamE3ZE5CRVlBZ0ZFVlJQaEhNWWdBelVJc21WbkZ2Qi9mc29RYitPYmZCbXpNdnhuZVcx
RDF2enoyd0ZpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0lVUWlFVVFvUkNLSVJDaUZBSWhW
QUlFZXAzeFRXVEx6enU1b1ZDS0lSQ2lGQUloVkFJRVFxaEVBb2hRaUVVUWlGRUtJUkNLSVFJaFZB
SWhSQ2hFQXFoRUNMVVppM1ZFd2NCTUdyMU5nQUFBQUJKUlU1RXJrSmdnZz09IDJ4LCBkYXRhOmlt
YWdlL3BuZztiYXNlNjQlMkNpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBOENBSUFBQUFM
NU5ROUFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUgyd29hQlFjNG9MRUZw
QUFBQUJsMFJWaDBRMjl0YldWdWRBQkRjbVZoZEdWa0lIZHBkR2dnUjBsTlVGZUJEaGNBQUFDTVNV
UkJWSGphN2ROQkVZQWdGRVZSUGhITVlnQXpVSXNtVm5GdkIvZnNvUWIrT2JmQm16TXZ4bmVXMUQx
dnp6MndGaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNJVVFpRVVRb1JDS0lSQ2lGQUloVkFJ
RWVwM3hUV1RMenp1NW9WQ0tJUkNpRkFJaFZBSUVRcWhFQW9oUWlFVVFpRkVLSVJDS0lRSWhWQUlo
UkNoRUFxaEVDTFVaaTNWRXdjQk1HcjFOZ0FBQUFCSlJVNUVya0pnZ2c9PSAxeCI+CisgICAgPGRp
dj5UaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBpbWFnZSBiZWxvdyBsb29rcyBsaWtlIGEgMngyIGdy
aWQgKHllbGxvdywgZ3JheSwgbGlnaHQgZ3JlZW4sIGRhcmsgZ3JlZW4pLiBJbiB0aGlzIGNhc2Ug
dGhlIHNyY3NldCBhdHRyaWJ1dGUgaGFzIGEgYmFzZTY0IHVybC48L2Rpdj4KKyAgICA8aW1nIGlk
PSJmb28iIHNyYz0iIiBzcmNzZXQ9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FB
QUFOU1VoRVVnQUFBSllBQUFBOENBSUFBQUFMNU5ROUFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1w
d1lBQUFBQjNSSlRVVUgyd29hQlFjNG9MRUZwQUFBQUJsMFJWaDBRMjl0YldWdWRBQkRjbVZoZEdW
a0lIZHBkR2dnUjBsTlVGZUJEaGNBQUFDTVNVUkJWSGphN2ROQkVZQWdGRVZSUGhITVlnQXpVSXNt
Vm5GdkIvZnNvUWIrT2JmQm16TXZ4bmVXMUQxdnp6MndGaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hF
QXFoRUNJVVFpRVVRb1JDS0lSQ2lGQUloVkFJRWVwM3hUV1RMenp1NW9WQ0tJUkNpRkFJaFZBSUVR
cWhFQW9oUWlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFxaEVDTFVaaTNWRXdjQk1HcjFOZ0FBQUFC
SlJVNUVya0pnZ2c9PSAyeCwgZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5T
VWhFVWdBQUFKWUFBQUE4Q0FJQUFBQUw1TlE5QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFB
QUFCM1JKVFVVSDJ3b2FCUWM0b0xFRnBBQUFBQmwwUlZoMFEyOXRiV1Z1ZEFCRGNtVmhkR1ZrSUhk
cGRHZ2dSMGxOVUZlQkRoY0FBQUNNU1VSQlZIamE3ZE5CRVlBZ0ZFVlJQaEhNWWdBelVJc21WbkZ2
Qi9mc29RYitPYmZCbXpNdnhuZVcxRDF2enoyd0ZpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhF
Q0lVUWlFVVFvUkNLSVJDaUZBSWhWQUlFZXAzeFRXVEx6enU1b1ZDS0lSQ2lGQUloVkFJRVFxaEVB
b2hRaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNMVVppM1ZFd2NCTUdyMU5nQUFBQUJKUlU1
RXJrSmdnZz09IDF4Ij4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWZyYWN0aW9uLTEuNXgtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtZnJhY3Rpb24tMS41eC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjNkMmMzOTYwMzg1ZWMxM2RhODNiZDhlOTA4MmI3MjU4MzNlMzdiYwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWZy
YWN0aW9uLTEuNXgtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorUEFTUyBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgidGVzdGltZyIpLmNsaWVudFdpZHRoPT0yMDAgaXMgdHJ1ZQorVGhpcyB0
ZXN0IHBhc3NlcyBpZiB0aGUgc3Jjc2V0IHJlc291cmNlIGlzIGxvYWRlZCBhbmQgZGlzcGxheWVk
IGFzIHRoZSBpbWFnZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdl
LXNyY3NldC1mcmFjdGlvbi0xLjV4Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdl
LXNyY3NldC1mcmFjdGlvbi0xLjV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTgwMzA3ZjQ0M2Q3ODU1NWI1
ODU1MWRkZDA1M2FkYzdlNzE2YzUxZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWZyYWN0aW9uLTEuNXguaHRtbApAQCAtMCwwICsxLDIzIEBA
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKyAgICB3aW5kb3cudGFyZ2V0U2NhbGVGYWN0b3Ig
PSAxLjU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc3Jjc2V0LWhlbHBlci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAg
ICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKworICAgIGFkZEV2ZW50TGlzdGVu
ZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKGludGVybmFscykKKyAgICAgICAg
ICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RpbWciKS5jbGll
bnRXaWR0aD09MjAwJyk7CisgICAgfSwgZmFsc2UpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgc3Jjc2V0IHJlc291cmNlIGlzIGxvYWRl
ZCBhbmQgZGlzcGxheWVkIGFzIHRoZSBpbWFnZTwvZGl2PgorPGltZyBzcmM9InJlc291cmNlcy9i
bHVlLTEwMC1weC1zcXVhcmUucG5nIiBzcmNzZXQ9InJlc291cmNlcy9ncmVlbi0yMDAtcHgtc3F1
YXJlLnBuZyAyeCIgaWQ9InRlc3RpbWciPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMtZXhjZXB0
LW9uZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1p
bnB1dHMtZXhjZXB0LW9uZS5odG1sCmluZGV4IDFmMWUxOWQzOTNiMjg2ZTJmMGVlNzQ0MjBjZjA2
MDZjMjUxMWY3ZTQuLjI5ODI1YjkyZGEyMjNiMTZmMDdkNDQyNzBlNzkwMmI0NTRkYmU1MzkgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5w
dXRzLWV4Y2VwdC1vbmUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNy
Y3NldC1pbnZhbGlkLWlucHV0cy1leGNlcHQtb25lLmh0bWwKQEAgLTEsNSArMSw2IEBACiA8aHRt
bD4KIDxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zcmNzZXQtaGVscGVyLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdD4KICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKQEAgLTE1LDYgKzE2
LDYgQEAKIDxib2R5IGlkPSJib2R5Ij4KICAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhl
IGltZyB0YWcgYmVsb3cgaXMgYSBncmVlbiBzcXVhcmUgcmVnYXJkbGVzcyBvZiB0aGUgc2NhbGUg
ZmFjdG9yLiBJdCBlbnN1cmVzIHRoYXQgaW52YWxpZCBpbnB1dHMgYXJlCiAgICAgaWdub3JlZCBh
bmQgd2VsbC1mb3JtZWQgaW1hZ2VzIGFyZSBjaG9zZW4gcmVnYXJkbGVzcyBvZiB0aGVpciBxdWFs
aWZpZXJzLCBvbmNlIHRoZXkgYXJlIHRoZSBvbmx5IGNhbmRpZGF0ZSBsZWZ0PC9kaXY+Ci0gICAg
PGltZyBpZD0iZm9vIiBzcmM9IiIgc3Jjc2V0PSIxeCwsICAsICAgeCAgICAsIHJlc291cmNlcy9n
cmVlbi0yMDAtcHgtc3F1YXJlLnBuZyAyeCwgMiI+CisgICAgPGltZyBpZD0iZm9vIiBzcmM9IiIg
c3Jjc2V0PSIxeCwsICAsICAgeCAgICAsMnggICwgZm9vLmpwZywgM3gsIGJhci5qcGcgNHggMTAw
aCwgZm9vLmpwZyA1LCBiYXIuanBnIGR4LCByZXNvdXJjZXMvZ3JlZW4tMjAwLXB4LXNxdWFyZS5w
bmcgICAyeCAsIj48L2ltZz4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1pbnZhbGlkLWlucHV0cy5odG1sCmluZGV4IDJk
YTZjMzA1MTFiZmFjODdmMzk5ZDdhNTFmYjYxOTNlMDE3N2ZhMmYuLjI0ZGEyOTZlMmQ4MWYwNTM4
YmQ4MWJiNWVlNjEyN2E5ODU5Mjc1MDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlk
cGkvaW1hZ2Utc3Jjc2V0LWludmFsaWQtaW5wdXRzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9oaWRwaS9pbWFnZS1zcmNzZXQtaW52YWxpZC1pbnB1dHMuaHRtbApAQCAtNSw2ICs1LDYgQEAK
IAogPGJvZHkgaWQ9ImJvZHkiPgogICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGlzIGlt
ZyB0YWcgYmVsb3cgaXMgZW1wdHkgYW5kIGRpc3BsYXlzIG5vdGhpbmcuIEl0IGVuc3VyZXMgdGhh
dCB0aGUgc3Jjc2V0IGF0dHJpYnV0ZSBzdXBwb3J0cyBpbnZhbGlkIGlucHV0czwvZGl2PgotICAg
IDxpbWcgaGVpZ2h0PSIxMDAiIHdpZHRoPSIxMDAiIHNyYz0iIiBzcmNzZXQ9IjF4LCwgICwgICB4
ICAgICwyeCAgIj48L2ltZz4KKyAgICA8aW1nIGhlaWdodD0iMTAwIiB3aWR0aD0iMTAwIiBzcmM9
IiIgc3Jjc2V0PSIxeCwsICAsICAgeCAgICAsMnggICwgZm9vLmpwZywgM3gsIGJhci5qcGcgNHgg
MTAwaCwgZm9vLmpwZyA1LCBiYXIuanBnIGR4LGZvby5qcGcsYmFyLmpwZywiPjwvaW1nPgogPC9i
b2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1z
cmNzZXQtbm9tb2RpZmllci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNyY3NldC1ub21vZGlmaWVyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzgyYzZhYWM4
NDc3NDhjZDI3MjNkZmFiOWVhZTgxMWE5NzdkNzNhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtbm9tb2RpZmllci1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwzIEBACitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKS5jbGllbnRX
aWR0aD09MTUwIGlzIHRydWUKK1RoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGltYWdlIGJlbG93IGlz
IG5vdCBlbXB0eS4gSXQgZW5zdXJlcyB0aGF0IGEgY2FuZGlkYXRlIHdpdGhvdXQgc2NhbGUgbW9k
aWZpZXIgZ2V0IGEgZGVmYXVsdCBvbmUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9o
aWRwaS9pbWFnZS1zcmNzZXQtbm9tb2RpZmllci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRw
aS9pbWFnZS1zcmNzZXQtbm9tb2RpZmllci5odG1sCmluZGV4IDQ3YWJmODE3ZGFhYjgxMWY1ODc1
Yjc0NzcyZjA0NGNjNzJmNzJhNGYuLjYyOWUxYTZkZjhlYTcwMTllNzkzMDRlMWJkZmMzZmNlNzQ3
OWE0NzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LW5v
bW9kaWZpZXIuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1u
b21vZGlmaWVyLmh0bWwKQEAgLTEsMTAgKzEsMjAgQEAKIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3NyY3NldC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKyAgICB9CisKKyAgICBhZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpLmNsaWVu
dFdpZHRoPT0xNTAnKTsKKyAgICB9LCBmYWxzZSk7Cis8L3NjcmlwdD4KIDwvaGVhZD4KIAogPGJv
ZHkgaWQ9ImJvZHkiPgotICAgIDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgaW1hZ2UgYmVs
b3cgaXMgZW1wdHksIHNpbmNlIHRoZSBzcmNzZXQgaXMgaW52YWxpZCAoZG9lcyBub3QgaGF2ZSBh
IHNjYWxlIG1vZGlmaWVyIGFueXdoZXJlIGFuZCB0aGUgc3JjIGF0dHJpYnV0ZSBpcyBlbXB0eSku
PC9kaXY+Ci0gICAgPGltZyBoZWlnaHQ9IjEwMCIgd2lkdGg9IjEwMCIgc3JjPSIiIHNyY3NldD0i
ZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUE4Q0FJ
QUFBQUw1TlE5QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDJ3b2FCUWM0
b0xFRnBBQUFBQmwwUlZoMFEyOXRiV1Z1ZEFCRGNtVmhkR1ZrSUhkcGRHZ2dSMGxOVUZlQkRoY0FB
QUNNU1VSQlZIamE3ZE5CRVlBZ0ZFVlJQaEhNWWdBelVJc21WbkZ2Qi9mc29RYitPYmZCbXpNdnhu
ZVcxRDF2enoyd0ZpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0lVUWlFVVFvUkNLSVJDaUZB
SWhWQUlFZXAzeFRXVEx6enU1b1ZDS0lSQ2lGQUloVkFJRVFxaEVBb2hRaUVVUWlGRUtJUkNLSVFJ
aFZBSWhSQ2hFQXFoRUNMVVppM1ZFd2NCTUdyMU5nQUFBQUJKUlU1RXJrSmdnZz09Ij4KKyAgICA8
ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGltYWdlIGJlbG93IGlzIG5vdCBlbXB0eS4gSXQg
ZW5zdXJlcyB0aGF0IGEgY2FuZGlkYXRlIHdpdGhvdXQgc2NhbGUgbW9kaWZpZXIgZ2V0IGEgZGVm
YXVsdCBvbmU8L2Rpdj4KKyAgICA8aW1nIGlkPSJmb28iIHNyYz0iIiBzcmNzZXQ9ImRhdGE6aW1h
Z2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBOENBSUFBQUFMNU5R
OUFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUgyd29hQlFjNG9MRUZwQUFB
QUJsMFJWaDBRMjl0YldWdWRBQkRjbVZoZEdWa0lIZHBkR2dnUjBsTlVGZUJEaGNBQUFDTVNVUkJW
SGphN2ROQkVZQWdGRVZSUGhITVlnQXpVSXNtVm5GdkIvZnNvUWIrT2JmQm16TXZ4bmVXMUQxdnp6
MndGaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNJVVFpRVVRb1JDS0lSQ2lGQUloVkFJRWVw
M3hUV1RMenp1NW9WQ0tJUkNpRkFJaFZBSUVRcWhFQW9oUWlFVVFpRkVLSVJDS0lRSWhWQUloUkNo
RUFxaEVDTFVaaTNWRXdjQk1HcjFOZ0FBQUFCSlJVNUVya0pnZ2c9PSI+CiA8L2JvZHk+CiA8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1zcGFj
ZS1wcmVmaXgtbm9tb2RpZmllci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBp
L2ltYWdlLXNyY3NldC1zcGFjZS1wcmVmaXgtbm9tb2RpZmllci1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTM2NzE3YmJhZTIxNTAyYzBjMmU0MmZkYzkyM2MxYjlhZWRiN2M5OAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LXNwYWNlLXByZWZp
eC1ub21vZGlmaWVyLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK1BBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImZvbyIpLmNsaWVudFdpZHRoPT0xNTAgaXMgdHJ1ZQorVGhpcyB0ZXN0
IHBhc3NlcyBpZiB0aGUgaW1hZ2UgYmVsb3cgaXMgbm90IGVtcHR5LiBJdCBlbnN1cmVzIHRoYXQg
YSBjYW5kaWRhdGUgd2l0aG91dCBzY2FsZSBtb2RpZmllciBnZXQgYSBkZWZhdWx0IG9uZSwgZXZl
biB3aXRoIHNwYWNlIGxlZnQgYXQgdGhlIGJlZ2lubmluZy4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtc3BhY2UtcHJlZml4LW5vbW9kaWZpZXIuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LXNwYWNlLXByZWZpeC1ub21v
ZGlmaWVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGM2MWU0ZDYzZDA0OWY0Y2E3YzM5NzdmOGUzNjA3NmRl
Y2U5YTYzZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Ut
c3Jjc2V0LXNwYWNlLXByZWZpeC1ub21vZGlmaWVyLmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc3Jjc2V0LWhlbHBlci5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRl
c3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKworICAgIGFkZEV2ZW50TGlzdGVuZXIoImxv
YWQiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCdkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZm9vIikuY2xpZW50V2lkdGg9PTE1MCcpOworICAgIH0sIGZhbHNlKTsKKzwvc2Ny
aXB0PgorPC9oZWFkPgorCis8Ym9keSBpZD0iYm9keSI+CisgICAgPGRpdj5UaGlzIHRlc3QgcGFz
c2VzIGlmIHRoZSBpbWFnZSBiZWxvdyBpcyBub3QgZW1wdHkuIEl0IGVuc3VyZXMgdGhhdCBhIGNh
bmRpZGF0ZSB3aXRob3V0IHNjYWxlIG1vZGlmaWVyIGdldCBhIGRlZmF1bHQgb25lLCBldmVuIHdp
dGggc3BhY2UgbGVmdCBhdCB0aGUgYmVnaW5uaW5nLjwvZGl2PgorICAgIDxpbWcgaWQ9ImZvbyIg
c3JjPSIiIHNyY3NldD0iICBkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNV
aEVVZ0FBQUpZQUFBQThDQUlBQUFBTDVOUTlBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFB
QUIzUkpUVVVIMndvYUJRYzRvTEVGcEFBQUFCbDBSVmgwUTI5dGJXVnVkQUJEY21WaGRHVmtJSGRw
ZEdnZ1IwbE5VRmVCRGhjQUFBQ01TVVJCVkhqYTdkTkJFWUFnRkVWUlBoSE1ZZ0F6VUlzbVZuRnZC
L2Zzb1FiK09iZkJtek12eG5lVzFEMXZ6ejJ3RmlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFxaEVD
SVVRaUVVUW9SQ0tJUkNpRkFJaFZBSUVlcDN4VFdUTHp6dTVvVkNLSVJDaUZBSWhWQUlFUXFoRUFv
aFFpRVVRaUZFS0lSQ0tJUUloVkFJaFJDaEVBcWhFQ0xVWmkzVkV3Y0JNR3IxTmdBQUFBQkpSVTVF
cmtKZ2dnPT0iPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9oaWRwaS9pbWFnZS1zcmNzZXQtc3BhY2Utc3VmZml4LW5vbW9kaWZpZXItZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQtc3BhY2Utc3VmZml4LW5vbW9k
aWZpZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYjE4MTM1NmM0MWQ1NDA4ZGM2ZDY5NTg0
NTY4OGYwYmJhMGNlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBp
L2ltYWdlLXNyY3NldC1zcGFjZS1zdWZmaXgtbm9tb2RpZmllci1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwzIEBACitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKS5jbGllbnRXaWR0
aD09MTUwIGlzIHRydWUKK1RoaXMgdGVzdCBwYXNzZXMgaWYgdGhlIGltYWdlIGJlbG93IGlzIG5v
dCBlbXB0eS4gSXQgZW5zdXJlcyB0aGF0IGEgY2FuZGlkYXRlIHdpdGhvdXQgc2NhbGUgbW9kaWZp
ZXIgZ2V0IGEgZGVmYXVsdCBvbmUsIGV2ZW4gd2l0aCBzcGFjZSBsZWZ0IGF0IHRoZSBlbmQuCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LXNwYWNlLXN1
ZmZpeC1ub21vZGlmaWVyLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3Nl
dC1zcGFjZS1zdWZmaXgtbm9tb2RpZmllci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzNTFjMTYwY2Y2NWI3
YTM4OGYwMWFiMmU0YTQ4MzgyMTg0ZGNmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1zcGFjZS1zdWZmaXgtbm9tb2RpZmllci5odG1sCkBA
IC0wLDAgKzEsMjAgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Ny
Y3NldC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB9CisKKyAgICBh
ZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIHNob3VsZEJlVHJ1
ZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpLmNsaWVudFdpZHRoPT0xNTAnKTsKKyAg
ICB9LCBmYWxzZSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgaWQ9ImJvZHkiPgorICAg
IDxkaXY+VGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUgaW1hZ2UgYmVsb3cgaXMgbm90IGVtcHR5LiBJ
dCBlbnN1cmVzIHRoYXQgYSBjYW5kaWRhdGUgd2l0aG91dCBzY2FsZSBtb2RpZmllciBnZXQgYSBk
ZWZhdWx0IG9uZSwgZXZlbiB3aXRoIHNwYWNlIGxlZnQgYXQgdGhlIGVuZC48L2Rpdj4KKyAgICA8
aW1nIGlkPSJmb28iIHNyYz0iIiBzcmNzZXQ9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncw
S0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBOENBSUFBQUFMNU5ROUFBQUFDWEJJV1hNQUFBc1RBQUFM
RXdFQW1wd1lBQUFBQjNSSlRVVUgyd29hQlFjNG9MRUZwQUFBQUJsMFJWaDBRMjl0YldWdWRBQkRj
bVZoZEdWa0lIZHBkR2dnUjBsTlVGZUJEaGNBQUFDTVNVUkJWSGphN2ROQkVZQWdGRVZSUGhITVln
QXpVSXNtVm5GdkIvZnNvUWIrT2JmQm16TXZ4bmVXMUQxdnp6MndGaUVVUWlGRUtJUkNLSVFJaFZB
SWhSQ2hFQXFoRUNJVVFpRVVRb1JDS0lSQ2lGQUloVkFJRWVwM3hUV1RMenp1NW9WQ0tJUkNpRkFJ
aFZBSUVRcWhFQW9oUWlFVVFpRkVLSVJDS0lRSWhWQUloUkNoRUFxaEVDTFVaaTNWRXdjQk1HcjFO
Z0FBQUFCSlJVNUVya0pnZ2c9PSAgIj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LXNwYWNlLXN1cnJvdW5kZWQtbm9tb2Rp
Zmllci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1z
cGFjZS1zdXJyb3VuZGVkLW5vbW9kaWZpZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2ODQx
OThjZGFmMjgyMWI2NWU5OTFiMzgzZjMwNTQ0ZTdmMDFlODAKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1zcGFjZS1zdXJyb3VuZGVkLW5vbW9k
aWZpZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorUEFTUyBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZm9vIikuY2xpZW50V2lkdGg9PTE1MCBpcyB0cnVlCitUaGlzIHRlc3QgcGFzc2Vz
IGlmIHRoZSBpbWFnZSBiZWxvdyBpcyBub3QgZW1wdHkuIEl0IGVuc3VyZXMgdGhhdCBhIGNhbmRp
ZGF0ZSB3aXRob3V0IHNjYWxlIG1vZGlmaWVyIGdldCBhIGRlZmF1bHQgb25lLCBldmVuIHN1cnJv
dW5kZWQgYnkgc3BhY2VzLgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2lt
YWdlLXNyY3NldC1zcGFjZS1zdXJyb3VuZGVkLW5vbW9kaWZpZXIuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LXNwYWNlLXN1cnJvdW5kZWQtbm9tb2RpZmllci5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFkNTc1YTI5ZTlmNTIyZjAyMDNiN2IyNGI4OWU1YzYyNmUwNTc2ZDIKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1zcGFj
ZS1zdXJyb3VuZGVkLW5vbW9kaWZpZXIuaHRtbApAQCAtMCwwICsxLDIwIEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zcmNzZXQtaGVscGVyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdD4KKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7CisgICAgfQorCisgICAgYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1
bmN0aW9uKCkgeworICAgICAgICBzaG91bGRCZVRydWUoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJmb28iKS5jbGllbnRXaWR0aD09MTUwJyk7CisgICAgfSwgZmFsc2UpOworPC9zY3JpcHQ+Cis8
L2hlYWQ+CisKKzxib2R5IGlkPSJib2R5Ij4KKyAgICA8ZGl2PlRoaXMgdGVzdCBwYXNzZXMgaWYg
dGhlIGltYWdlIGJlbG93IGlzIG5vdCBlbXB0eS4gSXQgZW5zdXJlcyB0aGF0IGEgY2FuZGlkYXRl
IHdpdGhvdXQgc2NhbGUgbW9kaWZpZXIgZ2V0IGEgZGVmYXVsdCBvbmUsIGV2ZW4gc3Vycm91bmRl
ZCBieSBzcGFjZXMuPC9kaXY+CisgICAgPGltZyBpZD0iZm9vIiBzcmM9IiIgc3Jjc2V0PSIgIGRh
dGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBOENBSUFB
QUFMNU5ROUFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUgyd29hQlFjNG9M
RUZwQUFBQUJsMFJWaDBRMjl0YldWdWRBQkRjbVZoZEdWa0lIZHBkR2dnUjBsTlVGZUJEaGNBQUFD
TVNVUkJWSGphN2ROQkVZQWdGRVZSUGhITVlnQXpVSXNtVm5GdkIvZnNvUWIrT2JmQm16TXZ4bmVX
MUQxdnp6MndGaUVVUWlGRUtJUkNLSVFJaFZBSWhSQ2hFQXFoRUNJVVFpRVVRb1JDS0lSQ2lGQUlo
VkFJRWVwM3hUV1RMenp1NW9WQ0tJUkNpRkFJaFZBSUVRcWhFQW9oUWlFVVFpRkVLSVJDS0lRSWhW
QUloUkNoRUFxaEVDTFVaaTNWRXdjQk1HcjFOZ0FBQUFCSlJVNUVya0pnZ2c9PSAgIj4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2hp
ZHBpL2ltYWdlLXNyY3NldC1ub21vZGlmaWVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9mYXN0L2hpZHBpL2ltYWdlLXNyY3NldC1ub21vZGlmaWVyLWV4cGVjdGVkLnR4
dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY2ZDZiOTI0MTkwYmIxYzMzYTk5ZmZi
MWFlZDZhYTMzMzJkZjc0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9oaWRwaS9pbWFnZS1zcmNzZXQt
bm9tb2RpZmllci1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1s
YXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKLWxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAotICBSZW5kZXJCbG9jayB7SFRNTH0g
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi0gICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6
ZSA3ODR4NTg0Ci0gICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCwwKSBzaXplIDc4NHgzNgot
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA3NzV4MzYKLSAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA3NzU6ICJUaGlzIHRlc3QgcGFzc2VzIGlmIHRoZSBp
bWFnZSBiZWxvdyBpcyBlbXB0eSwgc2luY2UgdGhlIHNyY3NldCBpcyBpbnZhbGlkIChkb2VzIG5v
dCBoYXZlIGEgc2NhbGUgbW9kaWZpZXIgYW55d2hlcmUgYW5kIHRoZSBzcmMiCi0gICAgICAgICAg
dGV4dCBydW4gYXQgKDAsMTgpIHdpZHRoIDExNzogImF0dHJpYnV0ZSBpcyBlbXB0eSkuIgotICAg
ICAgUmVuZGVyQmxvY2sgKGFub255bW91cykgYXQgKDAsMzYpIHNpemUgNzg0eDEwMAotICAgICAg
ICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKLSAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>