<?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>79749</bug_id>
          
          <creation_ts>2012-02-27 23:17:19 -0800</creation_ts>
          <short_desc>Determine text direction for rendering a TextTrackCue</short_desc>
          <delta_ts>2013-03-18 15:05:11 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>79347</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Victor Carbune">vcarbune</reporter>
          <assigned_to name="Victor Carbune">vcarbune</assigned_to>
          <cc>aharon</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>jer.noble</cc>
    
    <cc>leviw</cc>
    
    <cc>mitz</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>silviapf</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>566421</commentid>
    <comment_count>0</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2012-02-27 23:17:19 -0800</bug_when>
    <thetext>This bug represents substeps 10.2, 10.3 used to determine the text direction of the cue text.
http://dev.w3.org/html5/webvtt/#webvtt-cue-text-rendering-rules

&quot;10.2 Apply the Unicode Bidirectional Algorithm&apos;s Paragraph Level steps to nodes using the following constraints, to determine the paragraph embedding level of the cue: [BIDI]
* nodes represents a single paragraph.
* The paragraph&apos;s text consists of the concatenation of the values of each WebVTT Text Object in nodes, in a pre-order, depth-first traversal, excluding WebVTT Ruby Text Objects and their descendants.

10.3 If the paragraph embedding level determined in the previous step is even (the paragraph direction is left-to-right), let direction be &apos;ltr&apos;, otherwise, let it be &apos;rtl&apos;.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811480</commentid>
    <comment_count>1</comment_count>
      <attachid>183639</attachid>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-01-19 15:22:25 -0800</bug_when>
    <thetext>Created attachment 183639
WIP Patch

This is a work-in-progress patch, as I would like to make sure this is the right direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811482</commentid>
    <comment_count>2</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-01-19 15:27:21 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; This is a work-in-progress patch, as I would like to make sure this is the right direction.

This is the way bidiResolver is called in GraphicsContext and TextRunIterator looks generic enough to me that it could be extracted from there and used in
both places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811495</commentid>
    <comment_count>3</comment_count>
      <attachid>183639</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-01-19 16:35:44 -0800</bug_when>
    <thetext>Comment on attachment 183639
WIP Patch

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

&gt; Source/WebCore/html/track/TextTrackCue.cpp:640
&gt; +        if (!node-&gt;isTextNode() || node-&gt;localName() == rubyTag)

I believe a &quot;WebVTT Ruby Text Object&quot; is a node with a local name of &quot;rt&quot; (rtTag).

&gt; Source/WebCore/html/track/TextTrackCue.cpp:648
&gt; +    String paragraph = paragraphBuilder.toString();
&gt; +    TextRun textRun(paragraph, paragraph.length());
&gt; +    LOG(Media, &quot;%s&quot;, paragraph.utf8().data());
&gt; +

You can return early here if paragraphBuilder is empty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814548</commentid>
    <comment_count>4</comment_count>
      <attachid>184294</attachid>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-01-23 13:11:58 -0800</bug_when>
    <thetext>Created attachment 184294
Patch to determine the text direction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814555</commentid>
    <comment_count>5</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-01-23 13:17:53 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 183639 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183639&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/track/TextTrackCue.cpp:640
&gt; &gt; +        if (!node-&gt;isTextNode() || node-&gt;localName() == rubyTag)
&gt; 
&gt; I believe a &quot;WebVTT Ruby Text Object&quot; is a node with a local name of &quot;rt&quot; (rtTag).
Done. I used the rtTag, but named badly the variable.
 
&gt; &gt; Source/WebCore/html/track/TextTrackCue.cpp:648
&gt; &gt; +    String paragraph = paragraphBuilder.toString();
&gt; &gt; +    TextRun textRun(paragraph, paragraph.length());
&gt; &gt; +    LOG(Media, &quot;%s&quot;, paragraph.utf8().data());
&gt; &gt; +
&gt; 
&gt; You can return early here if paragraphBuilder is empty.
Done.

The patch is minimal to solely determine properly the text direction, since
while working on it I think the parameter determination for RTL cues
with is broken either in the implementation or in the spec.

I will file a different bug to extend the added test with multiple rendering
situations to make sure everything works properly (positioning/alignment/etc.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814572</commentid>
    <comment_count>6</comment_count>
      <attachid>184299</attachid>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-01-23 13:31:26 -0800</bug_when>
    <thetext>Created attachment 184299
Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815648</commentid>
    <comment_count>7</comment_count>
      <attachid>184299</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-01-24 11:20:40 -0800</bug_when>
    <thetext>Comment on attachment 184299
Rebased patch

This looks reasonable to me, but most of it is out of my area of expertise so I would rather that someone else r+ it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815993</commentid>
    <comment_count>8</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-01-24 16:53:21 -0800</bug_when>
    <thetext>CC-ing Eric in the hope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815995</commentid>
    <comment_count>9</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-01-24 16:54:40 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; CC-ing Eric in the hope
In the hope of a review, I meant :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815999</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-24 16:57:39 -0800</bug_when>
    <thetext>Bidi layout is normally not done in the DOM.  You need to know your line widths in order to paint.  I assume that these text tracks are never wrapped?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816006</commentid>
    <comment_count>11</comment_count>
      <attachid>184299</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-24 17:01:10 -0800</bug_when>
    <thetext>Comment on attachment 184299
Rebased patch

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

Can you help me understand what problem you&apos;re trying to solve?  This does not seem like the right solution.

&gt; Source/WebCore/html/track/TextTrackCue.cpp:636
&gt; +    // ... to determine the paragraph embedding level of the first Unicode paragraph of the cue.
&gt; +
&gt; +    // If the paragraph embedding level determined in the previous step is even
&gt; +    // (the paragraph direction is left-to-right), let direction be &apos;ltr&apos;, otherwise, let it be &apos;rtl&apos;.
&gt; +    m_displayDirection = bidiRuns.firstRun()-&gt;level() % 2 ? CSSValueRtl : CSSValueLtr;

This is a huge amount of code to answer this very simple question.  You want basically text-direction: auto behavior it seems.

If this is the right way to do this (and I don&apos;t believe that), then this is the wrong abstraction to use.  You shouldn&apos;t have to do a full bidi line layout to ask what the direction of the first character is. :)

Also, Bi-di text is just that &quot;bi directional&quot;, so it commonly has mixed LTR and RTL.  That&apos;s why we have lots of bidi runs.  They&apos;re not going to all be the same direction. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816625</commentid>
    <comment_count>12</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-01-25 08:36:32 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 184299 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184299&amp;action=review
&gt; 
&gt; Can you help me understand what problem you&apos;re trying to solve?  This does not seem like the right solution.

So the WebVTT Cue Text rendering rules depend on a direction parameter, which
is determined by the paragraph embedding level of the first paragraph of
the cue - which is the concatenation of all those WebVTT text nodes.

The direction parameter which results after the application of the Unicode
Bidirectional Algorithm is further used at establishing the following
parameters of a cue: x-position, y-position, maximum width (steps 10.4 - 10.11 of [1])

So this isn&apos;t a rendering of the cue lines (that&apos;s done later normally), it&apos;s
just a determination for parameters that place the overall cue box within
the video element (in case you think this is wrong, maybe we should file
some bugs on the WebVTT spec).

Either way, it looks like indeed what&apos;s needed is what
RenderBlockLineLayout::determineDirection() does, but I&apos;m not sure if the
InlineIterator can be used here?


[1] http://dev.w3.org/html5/webvtt/#webvtt-cue-text-rendering-rules</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816686</commentid>
    <comment_count>13</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2013-01-25 09:54:50 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Either way, it looks like indeed what&apos;s needed is what
&gt; RenderBlockLineLayout::determineDirection() does, but I&apos;m not sure if the
&gt; InlineIterator can be used here?

That was that conclusion I was afraid you&apos;d come to. Since this isn&apos;t fundamentally rendered by the Rendering tree, we don&apos;t have Inlines for these boxes, right?

You&apos;re still likely doing more work than necessary in your determineTextDirection function. You could just be iterating across the characters looking for strong directionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816706</commentid>
    <comment_count>14</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-01-25 10:08:46 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Either way, it looks like indeed what&apos;s needed is what
&gt; &gt; RenderBlockLineLayout::determineDirection() does, but I&apos;m not sure if the
&gt; &gt; InlineIterator can be used here?
&gt; 
&gt; That was that conclusion I was afraid you&apos;d come to. Since this isn&apos;t fundamentally rendered by the Rendering tree, we don&apos;t have Inlines for these boxes, right?

At the point where this algorithm is run, no rendering happens (this is a
preprocessing of the cue to ensure proper parameters are given when the actual
rendering is done).

&gt; You&apos;re still likely doing more work than necessary in your determineTextDirection function. You could just be iterating across the characters looking for strong directionality.

This is precisely what I need to do! (and I thought that this is what I was
doing). So applying determineDirectionality with a TextRunIterator makes sense
to you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816718</commentid>
    <comment_count>15</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2013-01-25 10:19:26 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; This is precisely what I need to do! (and I thought that this is what I was
&gt; doing). So applying determineDirectionality with a TextRunIterator makes sense
&gt; to you?

You&apos;re doing a lot more work than that! You&apos;re building a single string with all your text, creating text runs, and running the UBA over those text runs. All of this is necessary for rendering, but *not* for finding the directionality of the paragraph! You can simply iterate over the characters until you find one that&apos;s strongly directional. Then, obviously, bail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817347</commentid>
    <comment_count>16</comment_count>
    <who name="Aharon (Vladimir) Lanin">aharon</who>
    <bug_when>2013-01-27 01:59:18 -0800</bug_when>
    <thetext>Not sure if this is relevant to the current discussion, but the spec (http://dev.w3.org/html5/webvtt/#applying-css-properties-to-webvtt-node-objects) includes a full specification of the CSS to be used for a cue (and it is the CSS that is supposed to do all the rendering).

Bidi-wise, this includes:

the &apos;unicode-bidi&apos; property must be set to &apos;plaintext&apos;

the &apos;direction&apos; property must be set to [the value] determined by the rules for updating the display of WebVTT text tracks for the text track cue from whose text the List of WebVTT Node Objects was constructed.

The &apos;text-align&apos; property on the (root) List of WebVTT Node Objects must be set to the value in the second cell of the row of the table below whose first cell is the value of the corresponding cue&apos;s text track cue alignment:

Text track cue alignment	 &apos;text-align&apos; value
Start alignment	 &apos;start&apos;
Middle alignment	 &apos;center&apos;
End alignment	 &apos;end&apos;
Left alignment	 &apos;left&apos;
Right alignment	 &apos;right&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817362</commentid>
    <comment_count>17</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-01-27 03:57:09 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Not sure if this is relevant to the current discussion, but the spec (http://dev.w3.org/html5/webvtt/#applying-css-properties-to-webvtt-node-objects) includes a full specification of the CSS to be used for a cue (and it is the CSS that is supposed to do all the rendering).

And that&apos;s what happens at that point - the cue is rendered with all the CSS
parameters applied (section 3.5.1 as you pointed out). This is really not about
rendering lines correctly, but computing the position of the cue within the
video (and after the cue block is positioned, lines are rendered inside it
normally).

This is about step 10.2 of section 3.5.

Let me give an example of the outcome for a cue with &apos;position&apos; and &apos;alignment&apos;:

00:00:00.000 -&gt; 00:00:30.000 position:30% align:end
Cue text (arabic or english)

If the direction determined in step 10.2 is:
* LTR, the parameters are:
size: 30%, x-position: 0%, y-position: 0%

* RTL, the parameters are:
size: 70%, x-position: 70%, y-position: 0%


So I&apos;m just trying to plug in properly the direction parameter.


These parameters are then set as CSS values in:
Step 10.7: If the text track cue writing direction is horizontal, then let width be &apos;size vw&apos;

Step 10.11: Let left be &apos;x-position vw&apos; and top be &apos;y-position vh&apos;. (These 
again are CSS values used by the next section to set CSS properties for the 
rendering; &apos;vw&apos; and &apos;vh&apos; are CSS units.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830723</commentid>
    <comment_count>18</comment_count>
      <attachid>187814</attachid>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-02-12 02:27:38 -0800</bug_when>
    <thetext>Created attachment 187814
Simple iteration through characters

I stripped down the code to the simplest and direct method I could think of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840391</commentid>
    <comment_count>19</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-02-23 09:54:21 -0800</bug_when>
    <thetext>Ping about this? Are there concerns about the usefulness of the interpretation
of the positioning attributes in the case of RTL text?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855403</commentid>
    <comment_count>20</comment_count>
      <attachid>187814</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2013-03-14 12:14:41 -0700</bug_when>
    <thetext>Comment on attachment 187814
Simple iteration through characters

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Test: media/track/track-cue-rendering-rtl.html

A general description of the patch would be nice.

&gt; Source/WebCore/html/track/TextTrackCue.cpp:597
&gt; +    // such as U+000A LINE FEED (LF), U+0085 NEXT LINE (NEL), and U+2029 PARAGRAPH SEPARATOR.
&gt; +    return character == 0x000A || character == 0x0085 || character == 0x2029;

Is it &quot;such as&quot; or &quot;specifically&quot;? The spec says &quot;only&quot; from what I can tell.

&gt; LayoutTests/media/track/track-cue-rendering-rtl-expected.txt:14
&gt; +** The cue should contain arabic text **
&gt; +EXPECTED (video.currentTime == &apos;0.5&apos;) OK
&gt; +EXPECTED (testTrack.track.activeCues.length == &apos;1&apos;) OK
&gt; +EXPECTED (testTrack.track.activeCues[0].text == &apos;ØªØ¬Ø±Ø¨Ø©&apos;) OK
&gt; +EXPECTED (testCueDisplayBox.innerText == &apos;ØªØ¬Ø±Ø¨Ø©&apos;) OK
&gt; +
&gt; +** The position should be default and CSS direction set to RTL **
&gt; +EXPECTED (2 * testCueDisplayBox.offsetLeft == video.videoWidth - testCueDisplayBox.offsetWidth == &apos;true&apos;) OK
&gt; +EXPECTED (getComputedStyle(testCueDisplayBox).direction == &apos;rtl&apos;) OK

This test should check more permutations of text, like a cue with multiple paragraphs, neutral characters, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855404</commentid>
    <comment_count>21</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2013-03-14 12:15:11 -0700</bug_when>
    <thetext>Other than the points I made, I think the implementation looks just fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857137</commentid>
    <comment_count>22</comment_count>
      <attachid>193568</attachid>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-03-18 08:33:46 -0700</bug_when>
    <thetext>Created attachment 193568
More test cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857144</commentid>
    <comment_count>23</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-03-18 08:40:08 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 187814 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=187814&amp;action=review
&gt; 
&gt; Is it &quot;such as&quot; or &quot;specifically&quot;? The spec says &quot;only&quot; from what I can tell.

I changed to check if Separator_Paragraph bit is set using Unicode::category.
I hope that&apos;s appropriate.

&gt; This test should check more permutations of text, like a cue with multiple paragraphs, neutral characters, etc.

I added more variations with strong, weak and neutral characters.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857275</commentid>
    <comment_count>24</comment_count>
      <attachid>193568</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2013-03-18 10:31:04 -0700</bug_when>
    <thetext>Comment on attachment 193568
More test cases

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

Thanks, lgtm!

&gt; Source/WebCore/html/track/TextTrackCue.cpp:591
&gt; +    return WTF::Unicode::category(character) &amp; WTF::Unicode::Separator_Paragraph;

FYI that this is an expensive, but functionally correct approach. Given the short size of the content usually being dealt with here, I think this is probably fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857602</commentid>
    <comment_count>25</comment_count>
    <who name="Victor Carbune">vcarbune</who>
    <bug_when>2013-03-18 15:03:00 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 193568 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=193568&amp;action=review
&gt; 
&gt; Thanks, lgtm!
&gt; 
&gt; &gt; Source/WebCore/html/track/TextTrackCue.cpp:591
&gt; &gt; +    return WTF::Unicode::category(character) &amp; WTF::Unicode::Separator_Paragraph;
&gt; 
&gt; FYI that this is an expensive, but functionally correct approach. Given the short size of the content usually being dealt with here, I think this is probably fine.

Thanks, I&apos;ll keep this in mind (and change it, if there&apos;s a need) - at this 
point it should be run at most once per cue (or at most once each time the
cue contents change)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857606</commentid>
    <comment_count>26</comment_count>
      <attachid>193568</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-18 15:05:05 -0700</bug_when>
    <thetext>Comment on attachment 193568
More test cases

Clearing flags on attachment: 193568

Committed r146128: &lt;http://trac.webkit.org/changeset/146128&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857607</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-18 15:05:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183639</attachid>
            <date>2013-01-19 15:22:25 -0800</date>
            <delta_ts>2013-01-23 13:11:54 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-79749-20130120011922.patch</filename>
            <type>text/plain</type>
            <size>5884</size>
            <attacher name="Victor Carbune">vcarbune</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTlhMzYxYmIyMTRiYTFl
NWY0ZDA1MTJjOTkzOTdhNDdhODQwMzczZC4uYzE1Zjg4YmZjYmE0OTNiODViOTA3OTYzNDRmZmY5
NDcwOGE5YzRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEzLTAxLTE5ICBWaWN0
b3IgQ2FyYnVuZSAgPHZjYXJidW5lQGNocm9taXVtLm9yZz4KKworICAgICAgICBEZXRlcm1pbmUg
dGV4dCBkaXJlY3Rpb24gZm9yIHJlbmRlcmluZyBhIFRleHRUcmFja0N1ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk3NDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4K
KworICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcDoKKyAgICAgICAgKFRleHRS
dW5JdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuSXRlcmF0b3I6OlRleHRSdW5J
dGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuSXRlcmF0b3I6Om9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0UnVuSXRlcmF0b3I6OmluY3JlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0UnVuSXRlcmF0b3I6OmF0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRS
dW5JdGVyYXRvcjo6Y3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuSXRlcmF0b3I6
OmRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuSXRlcmF0b3I6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bkl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpkZXRlcm1p
bmVUZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6Y2FsY3Vs
YXRlRGlzcGxheVBhcmFtZXRlcnMpOgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3Vl
Lmg6CisgICAgICAgIChUZXh0VHJhY2tDdWUpOgorCiAyMDEzLTAxLTE4ICBTZXJnaW8gVmlsbGFy
IFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTb3VwXSBGcmVxdWVudCBj
cmFzaGVzIG9uIHJlZGlyZWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2tDdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWUuY3BwCmluZGV4IDUzOWE2NzljN2MwNDMwNWMwMTIzZmY2Yzk3M2Q2MGNjNTJjZjc5ZjEu
Ljc4YTRjMjQzYWZmYjUxYmM4ZjgwYTg5ZmMxNmJjN2Y1MGM2YWNhMzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2lu
Y2x1ZGUgIlRleHRUcmFja0N1ZS5oIgogCisjaW5jbHVkZSAiQmlkaVJlc29sdmVyLmgiCiAjaW5j
bHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIK
ICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCkBAIC01MSw4ICs1Miw0OSBAQAogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgVGV4dFJ1bkl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUZXh0UnVuSXRlcmF0b3IoKQorICAg
ICAgICA6IG1fdGV4dFJ1bigwKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0K
KworICAgIFRleHRSdW5JdGVyYXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCB1bnNpZ25lZCBv
ZmZzZXQpCisgICAgICAgIDogbV90ZXh0UnVuKHRleHRSdW4pCisgICAgICAgICwgbV9vZmZzZXQo
b2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICBUZXh0UnVuSXRlcmF0b3IoY29uc3QgVGV4dFJ1
bkl0ZXJhdG9yJiBvdGhlcikKKyAgICAgICAgOiBtX3RleHRSdW4ob3RoZXIubV90ZXh0UnVuKQor
ICAgICAgICAsIG1fb2Zmc2V0KG90aGVyLm1fb2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIHZvaWQgaW5j
cmVtZW50KCkgeyBtX29mZnNldCsrOyB9CisgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3RleHRSdW4gfHwgbV9vZmZzZXQgPj0gbV90ZXh0UnVuLT5sZW5ndGgoKTsgfQorICAgIFVD
aGFyIGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAoKm1fdGV4dFJ1bilbbV9vZmZzZXRdOyB9Cisg
ICAgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYXRF
bmQoKSA/IFdURjo6VW5pY29kZTo6T3RoZXJOZXV0cmFsIDogV1RGOjpVbmljb2RlOjpkaXJlY3Rp
b24oY3VycmVudCgpKTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRleHRSdW5JdGVy
YXRvciYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9v
ZmZzZXQgJiYgbV90ZXh0UnVuID09IG90aGVyLm1fdGV4dFJ1bjsKKyAgICB9CisKKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgVGV4dFJ1bkl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gIW9wZXJh
dG9yPT0ob3RoZXIpOyB9Citwcml2YXRlOgorICAgIGNvbnN0IFRleHRSdW4qIG1fdGV4dFJ1bjsK
KyAgICBpbnQgbV9vZmZzZXQ7Cit9OworCisKIHN0YXRpYyBjb25zdCBpbnQgaW52YWxpZEN1ZUlu
ZGV4ID0gLTE7CiBzdGF0aWMgY29uc3QgaW50IHVuZGVmaW5lZFBvc2l0aW9uID0gLTE7CiBzdGF0
aWMgY29uc3QgaW50IGF1dG9TaXplID0gMDsKQEAgLTU4NCwxMSArNjI2LDQ4IEBAIGludCBUZXh0
VHJhY2tDdWU6OmNhbGN1bGF0ZUNvbXB1dGVkTGluZVBvc2l0aW9uKCkKICAgICByZXR1cm4gbjsK
IH0KIAordm9pZCBUZXh0VHJhY2tDdWU6OmRldGVybWluZVRleHREaXJlY3Rpb24oKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBydWJ5VGFnLCAoQVNDSUlMaXRlcmFs
KCJydCIpKSk7CisgICAgY3JlYXRlV2ViVlRUTm9kZVRyZWUoKTsKKworICAgIC8vIEFwcGx5IHRo
ZSBVbmljb2RlIEJpZGlyZWN0aW9uYWwgQWxnb3JpdGhtJ3MgUGFyYWdyYXBoIExldmVsIHN0ZXBz
IHRvIHRoZQorICAgIC8vIGNvbmNhdGVuYXRpb24gb2YgdGhlIHZhbHVlcyBvZiBlYWNoIFdlYlZU
VCBUZXh0IE9iamVjdCBpbiBub2RlcywgaW4gYQorICAgIC8vIHByZS1vcmRlciwgZGVwdGgtZmly
c3QgdHJhdmVyc2FsLCBleGNsdWRpbmcgV2ViVlRUIFJ1YnkgVGV4dCBPYmplY3RzIGFuZAorICAg
IC8vIHRoZWlyIGRlc2NlbmRhbnRzLi4uCisgICAgU3RyaW5nQnVpbGRlciBwYXJhZ3JhcGhCdWls
ZGVyOworICAgIGZvciAoTm9kZSogbm9kZSA9IG1fd2ViVlRUTm9kZVRyZWUtPmZpcnN0Q2hpbGQo
KTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgbV93ZWJWVFROb2RlVHJl
ZS5nZXQoKSkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5pc1RleHROb2RlKCkgfHwgbm9kZS0+bG9j
YWxOYW1lKCkgPT0gcnVieVRhZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHBh
cmFncmFwaEJ1aWxkZXIuYXBwZW5kKG5vZGUtPm5vZGVWYWx1ZSgpKTsKKyAgICB9CisgICAgU3Ry
aW5nIHBhcmFncmFwaCA9IHBhcmFncmFwaEJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBUZXh0UnVu
IHRleHRSdW4ocGFyYWdyYXBoLCBwYXJhZ3JhcGgubGVuZ3RoKCkpOworICAgIExPRyhNZWRpYSwg
IiVzIiwgcGFyYWdyYXBoLnV0ZjgoKS5kYXRhKCkpOworCisgICAgQmlkaVJlc29sdmVyPFRleHRS
dW5JdGVyYXRvciwgQmlkaUNoYXJhY3RlclJ1bj4gYmlkaVJlc29sdmVyOworICAgIGJpZGlSZXNv
bHZlci5zZXRTdGF0dXMoQmlkaVN0YXR1cyh0ZXh0UnVuLmRpcmVjdGlvbigpLCB0ZXh0UnVuLmRp
cmVjdGlvbmFsT3ZlcnJpZGUoKSkpOworICAgIGJpZGlSZXNvbHZlci5zZXRQb3NpdGlvbklnbm9y
aW5nTmVzdGVkSXNvbGF0ZXMoVGV4dFJ1bkl0ZXJhdG9yKCZ0ZXh0UnVuLCAwKSk7CisKKyAgICBC
aWRpUnVuTGlzdDxCaWRpQ2hhcmFjdGVyUnVuPiYgYmlkaVJ1bnMgPSBiaWRpUmVzb2x2ZXIucnVu
cygpOworICAgIGJpZGlSZXNvbHZlci5jcmVhdGVCaWRpUnVuc0ZvckxpbmUoVGV4dFJ1bkl0ZXJh
dG9yKCZ0ZXh0UnVuLCB0ZXh0UnVuLmxlbmd0aCgpKSk7CisKKyAgICBMT0coTWVkaWEsICJOdW1i
ZXIgb2YgcnVuczogJWQiLCBiaWRpUnVucy5ydW5Db3VudCgpKTsKKyAgICBBU1NFUlQoYmlkaVJ1
bnMucnVuQ291bnQoKSk7CisKKyAgICAvLyAuLi4gdG8gZGV0ZXJtaW5lIHRoZSBwYXJhZ3JhcGgg
ZW1iZWRkaW5nIGxldmVsIG9mIHRoZSBmaXJzdCBVbmljb2RlIHBhcmFncmFwaCBvZiB0aGUgY3Vl
LgorCisgICAgLy8gSWYgdGhlIHBhcmFncmFwaCBlbWJlZGRpbmcgbGV2ZWwgZGV0ZXJtaW5lZCBp
biB0aGUgcHJldmlvdXMgc3RlcCBpcyBldmVuCisgICAgLy8gKHRoZSBwYXJhZ3JhcGggZGlyZWN0
aW9uIGlzIGxlZnQtdG8tcmlnaHQpLCBsZXQgZGlyZWN0aW9uIGJlICdsdHInLCBvdGhlcndpc2Us
IGxldCBpdCBiZSAncnRsJy4KKyAgICBtX2Rpc3BsYXlEaXJlY3Rpb24gPSBiaWRpUnVucy5maXJz
dFJ1bigpLT5sZXZlbCgpICUgMiA/IENTU1ZhbHVlUnRsIDogQ1NTVmFsdWVMdHI7CisgICAgTE9H
KE1lZGlhLCAiRW1iZWRkaW5nIGxldmVsOiAlZCIsIGJpZGlSdW5zLmZpcnN0UnVuKCktPmxldmVs
KCkpOworfQorCiB2b2lkIFRleHRUcmFja0N1ZTo6Y2FsY3VsYXRlRGlzcGxheVBhcmFtZXRlcnMo
KQogewotICAgIC8vIEZJWE1FKEJVRyA3OTc0OSk6IERldGVybWluZSB0aGUgdGV4dCBkaXJlY3Rp
b24gdXNpbmcgdGhlIEJJREkgYWxnb3JpdGhtLgogICAgIC8vIFN0ZXBzIDEwLjIsIDEwLjMKLSAg
ICBtX2Rpc3BsYXlEaXJlY3Rpb24gPSBDU1NWYWx1ZUx0cjsKKyAgICBkZXRlcm1pbmVUZXh0RGly
ZWN0aW9uKCk7CiAKICAgICAvLyAxMC40IElmIHRoZSB0ZXh0IHRyYWNrIGN1ZSB3cml0aW5nIGRp
cmVjdGlvbiBpcyBob3Jpem9udGFsLCB0aGVuIGxldAogICAgIC8vIGJsb2NrLWZsb3cgYmUgJ3Ri
Jy4gT3RoZXJ3aXNlLCBpZiB0aGUgdGV4dCB0cmFjayBjdWUgd3JpdGluZyBkaXJlY3Rpb24gaXMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCmluZGV4IGVmM2Q4MDQ1OWIx
NzE3NzQzYzg0NjZmODc3MjZjMzc3Nzc5ODNjYzMuLjFjOGFiNzZlNDlmY2EzZjE0NThmMTg4Zjll
MTJkOTE2M2U5MzJmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrQ3VlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUu
aApAQCAtMTg5LDYgKzE4OSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjpwYWlyPGRvdWJsZSwgZG91
YmxlPiBnZXRQb3NpdGlvbkNvb3JkaW5hdGVzKCkgY29uc3Q7CiAgICAgdm9pZCBwYXJzZVNldHRp
bmdzKGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBkZXRlcm1pbmVUZXh0RGlyZWN0aW9uKCk7
CiAgICAgdm9pZCBjYWxjdWxhdGVEaXNwbGF5UGFyYW1ldGVycygpOwogCiAgICAgdm9pZCBjdWVX
aWxsQ2hhbmdlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184294</attachid>
            <date>2013-01-23 13:11:58 -0800</date>
            <delta_ts>2013-01-23 13:31:23 -0800</delta_ts>
            <desc>Patch to determine the text direction</desc>
            <filename>bug-79749-20130123230850.patch</filename>
            <type>text/plain</type>
            <size>14750</size>
            <attacher name="Victor Carbune">vcarbune</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTlhMzYxYmIyMTRiYTFl
NWY0ZDA1MTJjOTkzOTdhNDdhODQwMzczZC4uZWEwM2Y3Njg4MmI2ODRkMWQxNzAzNDY5ZDNhMWMy
ZjAwNDMyMTQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEzLTAxLTIzICBWaWN0
b3IgQ2FyYnVuZSAgPHZpY3RvckByb3NlZHUub3JnPgorCisgICAgICAgIERldGVybWluZSB0ZXh0
IGRpcmVjdGlvbiBmb3IgcmVuZGVyaW5nIGEgVGV4dFRyYWNrQ3VlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTc0OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IG1lZGlhL3RyYWNrL3RyYWNrLWN1
ZS1yZW5kZXJpbmctcnRsLmh0bWwKKworICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3Vl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUJveDo6YXBwbHlDU1NQcm9wZXJ0
aWVzKTogVXBkYXRlZCB0bworICAgICAgICByZXRyaWV2ZSBhcHBseSB0aGUgZGlyZWN0aW9uIGRl
dGVybWluZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1ZSk6
IFNldCBkZWZhdWx0IHZhbHVlCisgICAgICAgIGZvciB0aGUgZGlzcGxheSBkaXJlY3Rpb24uCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OmRldGVybWluZVRleHREaXJlY3Rpb24pOiBE
ZXRlcm1pbmVkCisgICAgICAgIGRpcmVjdGlvbiB1c2luZyB0aGUgVW5pY29kZSBCaWRpcmVjdGlv
bmFsIEFsZ29yaXRobS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFRyYWNrQ3VlOjpjYWxjdWxhdGVEaXNwbGF5UGFyYW1ldGVycyk6IFVwZGF0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OmdldENTU1dyaXRpbmdEaXJlY3Rpb24pOiBBZGRlZCB0
bworICAgICAgICByZXR1cm4gdGhlIHdyaXRpbmcgZGlyZWN0aW9uIG9mIHRoZSBjdWUuCisgICAg
ICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaDoKKyAgICAgICAgKFRleHRUcmFja0N1ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDogRXh0cmFj
dGVkIFRleHRSdW5JdGVyYXRvci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVu
Lmg6IEFkZGVkIFRleHRSdW5JdGVyYXRvci4KKyAgICAgICAgKFRleHRSdW5JdGVyYXRvcik6IE1v
dmVkIHRoZSBUZXh0UnVuSXRlcmF0b3IgY2xhc3MgdG8gVGV4dFJ1biwKKyAgICAgICAgc28gaXQg
Y2FuIGJlIHVzZWQgYW55d2hlcmUgdGhlIHVuaWNvZGUgYmlkaXJlY3Rpb25hbCBhbGdvcml0aG0K
KyAgICAgICAgbmVlZHMgdG8gYmUgcnVuLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bkl0ZXJh
dG9yOjpUZXh0UnVuSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bkl0ZXJhdG9y
OjpvZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bkl0ZXJhdG9yOjppbmNyZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bkl0ZXJhdG9yOjphdEVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0UnVuSXRlcmF0b3I6OmN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFJ1bkl0ZXJhdG9yOjpkaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bkl0ZXJh
dG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVyYXRvcjo6b3Bl
cmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMy0wMS0xOCAgU2VyZ2lvIFZpbGxh
ciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbU291cF0gRnJlcXVlbnQg
Y3Jhc2hlcyBvbiByZWRpcmVjdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVGV4dFRyYWNrQ3VlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrQ3VlLmNwcAppbmRleCA1MzlhNjc5YzdjMDQzMDVjMDEyM2ZmNmM5NzNkNjBjYzUyY2Y3OWYx
Li5iNDI5NDY4YWU3NzJjMDc4NDk0YmUxNjRiZjEyNmNhYmU3ODY0YzQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAKICNp
bmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKIAorI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgogI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgpAQCAtNDUsNiArNDYsNyBAQAogI2luY2x1
ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0VHJhY2tDdWUuaCIKICNp
bmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgIlRleHRUcmFj
ay5oIgogI2luY2x1ZGUgIlRleHRUcmFja0N1ZUxpc3QuaCIKICNpbmNsdWRlICJXZWJWVFRQYXJz
ZXIuaCIKQEAgLTExOCw5ICsxMjAsOCBAQCB2b2lkIFRleHRUcmFja0N1ZUJveDo6YXBwbHlDU1NQ
cm9wZXJ0aWVzKCkKICAgICAvLyAgdGhlICd1bmljb2RlLWJpZGknIHByb3BlcnR5IG11c3QgYmUg
c2V0IHRvICdwbGFpbnRleHQnCiAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVVuaWNvZGVCaWRpLCBDU1NWYWx1ZVdlYmtpdFBsYWludGV4dCk7CiAKLSAgICAvLyBGSVhNRTog
RGV0ZXJtaW5lIHRoZSB0ZXh0IGRpcmVjdGlvbiB1c2luZyB0aGUgQklESSBhbGdvcml0aG0uIGh0
dHA6Ly93a2IudWcvNzk3NDkKICAgICAvLyB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgbXVzdCBi
ZSBzZXQgdG8gZGlyZWN0aW9uCi0gICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eURpcmVjdGlvbiwgQ1NTVmFsdWVMdHIpOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlEaXJlY3Rpb24sIG1fY3VlLT5nZXRDU1NXcml0aW5nRGlyZWN0aW9uKCkpOwogCiAg
ICAgLy8gdGhlICd3cml0aW5nLW1vZGUnIHByb3BlcnR5IG11c3QgYmUgc2V0IHRvIHdyaXRpbmct
bW9kZQogICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRXcml0aW5n
TW9kZSwgbV9jdWUtPmdldENTU1dyaXRpbmdNb2RlKCksIGZhbHNlKTsKQEAgLTIxMCw2ICsyMTEs
NyBAQCBUZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBkb3VibGUgc3RhcnQsIGRvdWJsZQogICAgICwgbV9hbGxEb2N1bWVudE5vZGVzKEhU
TUxEaXZFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KSkpCiAg
ICAgLCBtX2Rpc3BsYXlUcmVlU2hvdWxkQ2hhbmdlKHRydWUpCiAgICAgLCBtX2Rpc3BsYXlUcmVl
KFRleHRUcmFja0N1ZUJveDo6Y3JlYXRlKHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0KSwgdGhpcykpCisgICAgLCBtX2Rpc3BsYXlEaXJlY3Rpb24oQ1NTVmFs
dWVMdHIpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVu
dCgpKTsKIApAQCAtNTg0LDExICs1ODYsNDkgQEAgaW50IFRleHRUcmFja0N1ZTo6Y2FsY3VsYXRl
Q29tcHV0ZWRMaW5lUG9zaXRpb24oKQogICAgIHJldHVybiBuOwogfQogCit2b2lkIFRleHRUcmFj
a0N1ZTo6ZGV0ZXJtaW5lVGV4dERpcmVjdGlvbigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHJ0VGFnLCAoQVNDSUlMaXRlcmFsKCJydCIpKSk7CisgICAgY3JlYXRl
V2ViVlRUTm9kZVRyZWUoKTsKKworICAgIC8vIEFwcGx5IHRoZSBVbmljb2RlIEJpZGlyZWN0aW9u
YWwgQWxnb3JpdGhtJ3MgUGFyYWdyYXBoIExldmVsIHN0ZXBzIHRvIHRoZQorICAgIC8vIGNvbmNh
dGVuYXRpb24gb2YgdGhlIHZhbHVlcyBvZiBlYWNoIFdlYlZUVCBUZXh0IE9iamVjdCBpbiBub2Rl
cywgaW4gYQorICAgIC8vIHByZS1vcmRlciwgZGVwdGgtZmlyc3QgdHJhdmVyc2FsLCBleGNsdWRp
bmcgV2ViVlRUIFJ1YnkgVGV4dCBPYmplY3RzIGFuZAorICAgIC8vIHRoZWlyIGRlc2NlbmRhbnRz
Li4uCisgICAgU3RyaW5nQnVpbGRlciBwYXJhZ3JhcGhCdWlsZGVyOworICAgIGZvciAoTm9kZSog
bm9kZSA9IG1fd2ViVlRUTm9kZVRyZWUtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQobm9kZSwgbV93ZWJWVFROb2RlVHJlZS5nZXQoKSkpIHsKKyAgICAgICAg
aWYgKCFub2RlLT5pc1RleHROb2RlKCkgfHwgbm9kZS0+bG9jYWxOYW1lKCkgPT0gcnRUYWcpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBwYXJhZ3JhcGhCdWlsZGVyLmFwcGVuZChu
b2RlLT5ub2RlVmFsdWUoKSk7CisgICAgfQorCisgICAgU3RyaW5nIHBhcmFncmFwaCA9IHBhcmFn
cmFwaEJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBpZiAoIXBhcmFncmFwaC5sZW5ndGgoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVGV4dFJ1biB0ZXh0UnVuKHBhcmFncmFwaCwgcGFyYWdyYXBo
Lmxlbmd0aCgpKTsKKworICAgIEJpZGlSZXNvbHZlcjxUZXh0UnVuSXRlcmF0b3IsIEJpZGlDaGFy
YWN0ZXJSdW4+IGJpZGlSZXNvbHZlcjsKKyAgICBiaWRpUmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlT
dGF0dXModGV4dFJ1bi5kaXJlY3Rpb24oKSwgdGV4dFJ1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCkp
KTsKKyAgICBiaWRpUmVzb2x2ZXIuc2V0UG9zaXRpb25JZ25vcmluZ05lc3RlZElzb2xhdGVzKFRl
eHRSdW5JdGVyYXRvcigmdGV4dFJ1biwgMCkpOworCisgICAgQmlkaVJ1bkxpc3Q8QmlkaUNoYXJh
Y3RlclJ1bj4mIGJpZGlSdW5zID0gYmlkaVJlc29sdmVyLnJ1bnMoKTsKKyAgICBiaWRpUmVzb2x2
ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5lKFRleHRSdW5JdGVyYXRvcigmdGV4dFJ1biwgdGV4dFJ1
bi5sZW5ndGgoKSkpOworCisgICAgQVNTRVJUKGJpZGlSdW5zLnJ1bkNvdW50KCkpOworCisgICAg
Ly8gLi4uIHRvIGRldGVybWluZSB0aGUgcGFyYWdyYXBoIGVtYmVkZGluZyBsZXZlbCBvZiB0aGUg
Zmlyc3QgVW5pY29kZSBwYXJhZ3JhcGggb2YgdGhlIGN1ZS4KKworICAgIC8vIElmIHRoZSBwYXJh
Z3JhcGggZW1iZWRkaW5nIGxldmVsIGRldGVybWluZWQgaW4gdGhlIHByZXZpb3VzIHN0ZXAgaXMg
ZXZlbgorICAgIC8vICh0aGUgcGFyYWdyYXBoIGRpcmVjdGlvbiBpcyBsZWZ0LXRvLXJpZ2h0KSwg
bGV0IGRpcmVjdGlvbiBiZSAnbHRyJywgb3RoZXJ3aXNlLCBsZXQgaXQgYmUgJ3J0bCcuCisgICAg
bV9kaXNwbGF5RGlyZWN0aW9uID0gYmlkaVJ1bnMuZmlyc3RSdW4oKS0+bGV2ZWwoKSAlIDIgPyBD
U1NWYWx1ZVJ0bCA6IENTU1ZhbHVlTHRyOworfQorCiB2b2lkIFRleHRUcmFja0N1ZTo6Y2FsY3Vs
YXRlRGlzcGxheVBhcmFtZXRlcnMoKQogewotICAgIC8vIEZJWE1FKEJVRyA3OTc0OSk6IERldGVy
bWluZSB0aGUgdGV4dCBkaXJlY3Rpb24gdXNpbmcgdGhlIEJJREkgYWxnb3JpdGhtLgogICAgIC8v
IFN0ZXBzIDEwLjIsIDEwLjMKLSAgICBtX2Rpc3BsYXlEaXJlY3Rpb24gPSBDU1NWYWx1ZUx0cjsK
KyAgICBkZXRlcm1pbmVUZXh0RGlyZWN0aW9uKCk7CiAKICAgICAvLyAxMC40IElmIHRoZSB0ZXh0
IHRyYWNrIGN1ZSB3cml0aW5nIGRpcmVjdGlvbiBpcyBob3Jpem9udGFsLCB0aGVuIGxldAogICAg
IC8vIGJsb2NrLWZsb3cgYmUgJ3RiJy4gT3RoZXJ3aXNlLCBpZiB0aGUgdGV4dCB0cmFjayBjdWUg
d3JpdGluZyBkaXJlY3Rpb24gaXMKQEAgLTEwMjcsNiArMTA2NywxMSBAQCBOZXh0U2V0dGluZzoK
ICAgICB9CiB9CiAKK2ludCBUZXh0VHJhY2tDdWU6OmdldENTU1dyaXRpbmdEaXJlY3Rpb24oKSBj
b25zdAoreworICAgIHJldHVybiBtX2Rpc3BsYXlEaXJlY3Rpb247Cit9CisKIGludCBUZXh0VHJh
Y2tDdWU6OmdldENTU1dyaXRpbmdNb2RlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5
V3JpdGluZ01vZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja0N1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAppbmRl
eCBlZjNkODA0NTliMTcxNzc0M2M4NDY2Zjg3NzI2YzM3Nzc3OTgzY2MzLi4yNDBhZGY3N2RiZWI5
NDc4Yzc1NDY0Njk3ZDBlMjNlMzliY2U3OTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VGV4dFRyYWNrQ3VlLmgKQEAgLTE2Miw3ICsxNjIsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAK
ICAgICBzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+IGdldENTU1Bvc2l0aW9uKCkgY29uc3Q7CisK
ICAgICBpbnQgZ2V0Q1NTU2l6ZSgpIGNvbnN0OworICAgIGludCBnZXRDU1NXcml0aW5nRGlyZWN0
aW9uKCkgY29uc3Q7CiAgICAgaW50IGdldENTU1dyaXRpbmdNb2RlKCkgY29uc3Q7CiAKICAgICBl
bnVtIFdyaXRpbmdEaXJlY3Rpb24gewpAQCAtMTg5LDYgKzE5MSw3IEBAIHByaXZhdGU6CiAgICAg
c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPiBnZXRQb3NpdGlvbkNvb3JkaW5hdGVzKCkgY29uc3Q7
CiAgICAgdm9pZCBwYXJzZVNldHRpbmdzKGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBkZXRl
cm1pbmVUZXh0RGlyZWN0aW9uKCk7CiAgICAgdm9pZCBjYWxjdWxhdGVEaXNwbGF5UGFyYW1ldGVy
cygpOwogCiAgICAgdm9pZCBjdWVXaWxsQ2hhbmdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA2OWFkNGZkZDI5
MDVlZGJkYWM1YWE5ZmRkN2NiZTRjZTk3NjMzODljLi41MmIyYzIxN2NjOTA3ZTgzYzM2MjBmNDBk
YzYyYmRhMTk0ODkwYTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTQwLDQ0ICs0MCw2IEBAIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVGV4dFJ1bkl0ZXJhdG9y
IHsKLXB1YmxpYzoKLSAgICBUZXh0UnVuSXRlcmF0b3IoKQotICAgICAgICA6IG1fdGV4dFJ1bigw
KQotICAgICAgICAsIG1fb2Zmc2V0KDApCi0gICAgewotICAgIH0KLQotICAgIFRleHRSdW5JdGVy
YXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCB1bnNpZ25lZCBvZmZzZXQpCi0gICAgICAgIDog
bV90ZXh0UnVuKHRleHRSdW4pCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgIHsKLSAg
ICB9Ci0KLSAgICBUZXh0UnVuSXRlcmF0b3IoY29uc3QgVGV4dFJ1bkl0ZXJhdG9yJiBvdGhlcikK
LSAgICAgICAgOiBtX3RleHRSdW4ob3RoZXIubV90ZXh0UnVuKQotICAgICAgICAsIG1fb2Zmc2V0
KG90aGVyLm1fb2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBvZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAgIHZvaWQgaW5jcmVtZW50KCkgeyBtX29mZnNl
dCsrOyB9Ci0gICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX3RleHRSdW4gfHwgbV9v
ZmZzZXQgPj0gbV90ZXh0UnVuLT5sZW5ndGgoKTsgfQotICAgIFVDaGFyIGN1cnJlbnQoKSBjb25z
dCB7IHJldHVybiAoKm1fdGV4dFJ1bilbbV9vZmZzZXRdOyB9Ci0gICAgV1RGOjpVbmljb2RlOjpE
aXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYXRFbmQoKSA/IFdURjo6VW5pY29k
ZTo6T3RoZXJOZXV0cmFsIDogV1RGOjpVbmljb2RlOjpkaXJlY3Rpb24oY3VycmVudCgpKTsgfQot
Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRleHRSdW5JdGVyYXRvciYgb3RoZXIpCi0gICAg
ewotICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQgJiYgbV90ZXh0UnVu
ID09IG90aGVyLm1fdGV4dFJ1bjsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
VGV4dFJ1bkl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gIW9wZXJhdG9yPT0ob3RoZXIpOyB9Ci0K
LXByaXZhdGU6Ci0gICAgY29uc3QgVGV4dFJ1biogbV90ZXh0UnVuOwotICAgIGludCBtX29mZnNl
dDsKLX07Ci0KIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKICAgICA6IG1fdXBkYXRpbmdDb250
cm9sVGludHMoZmFsc2UpCiAgICAgLCBtX3RyYW5zcGFyZW5jeUNvdW50KDApCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKaW5kZXggYzY0ZjA5OGZlNDc0YWIzNjhk
YzkzYmM5MzQzYzM2OTI3ZjY2MDRhOS4uZDBhNDk5NGVmOGZiZDQyYzVkMGU3ZWJkOWNhZTA5MTgx
NjFlNjc0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dFJ1bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaApA
QCAtMjU2LDYgKzI1Niw0NCBAQCBpbmxpbmUgdm9pZCBUZXh0UnVuOjpzZXRUYWJTaXplKGJvb2wg
YWxsb3csIHVuc2lnbmVkIHNpemUpCiAgICAgbV90YWJTaXplID0gc2l6ZTsKIH0KIAorY2xhc3Mg
VGV4dFJ1bkl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUZXh0UnVuSXRlcmF0b3IoKQorICAgICAg
ICA6IG1fdGV4dFJ1bigwKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0KKwor
ICAgIFRleHRSdW5JdGVyYXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCB1bnNpZ25lZCBvZmZz
ZXQpCisgICAgICAgIDogbV90ZXh0UnVuKHRleHRSdW4pCisgICAgICAgICwgbV9vZmZzZXQob2Zm
c2V0KQorICAgIHsKKyAgICB9CisKKyAgICBUZXh0UnVuSXRlcmF0b3IoY29uc3QgVGV4dFJ1bkl0
ZXJhdG9yJiBvdGhlcikKKyAgICAgICAgOiBtX3RleHRSdW4ob3RoZXIubV90ZXh0UnVuKQorICAg
ICAgICAsIG1fb2Zmc2V0KG90aGVyLm1fb2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIHZvaWQgaW5jcmVt
ZW50KCkgeyBtX29mZnNldCsrOyB9CisgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFt
X3RleHRSdW4gfHwgbV9vZmZzZXQgPj0gbV90ZXh0UnVuLT5sZW5ndGgoKTsgfQorICAgIFVDaGFy
IGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAoKm1fdGV4dFJ1bilbbV9vZmZzZXRdOyB9CisgICAg
V1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYXRFbmQo
KSA/IFdURjo6VW5pY29kZTo6T3RoZXJOZXV0cmFsIDogV1RGOjpVbmljb2RlOjpkaXJlY3Rpb24o
Y3VycmVudCgpKTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRleHRSdW5JdGVyYXRv
ciYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZz
ZXQgJiYgbV90ZXh0UnVuID09IG90aGVyLm1fdGV4dFJ1bjsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgVGV4dFJ1bkl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gIW9wZXJhdG9y
PT0ob3RoZXIpOyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgVGV4dFJ1biogbV90ZXh0UnVuOwor
ICAgIGludCBtX29mZnNldDsKK307CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTZjN2YxNWFhOWNi
MGYwNDE4ODc1NWE4ZjIxMmQ0MWExNjBlOTg4MC4uZjhkMTY2YmZiMzU1ZDhjZjk1MTYyNmM0N2Zl
YTY2MjZmNzYzMjc2MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEzLTAxLTIzICBWaWN0b3Ig
Q2FyYnVuZSAgPHZpY3RvckByb3NlZHUub3JnPgorCisgICAgICAgIERldGVybWluZSB0ZXh0IGRp
cmVjdGlvbiBmb3IgcmVuZGVyaW5nIGEgVGV4dFRyYWNrQ3VlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTc0OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0
L2NhcHRpb25zLXJ0bC52dHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL3RyYWNrL3RyYWNrLWN1
ZS1yZW5kZXJpbmctcnRsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvdHJh
Y2svdHJhY2stY3VlLXJlbmRlcmluZy1ydGwuaHRtbDogQWRkZWQuCisKIDIwMTMtMDEtMTggIERv
bWluaWsgUsO2dHRzY2hlcyAgPGRvbWluaWsucm90dHNjaGVzQGludGVsLmNvbT4KIAogICAgICAg
ICBbRUZMXSBVbnJldmlld2VkIGdhcmRlbmluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL21l
ZGlhL3RyYWNrL2NhcHRpb25zLXdlYnZ0dC9jYXB0aW9ucy1ydGwudnR0IGIvTGF5b3V0VGVzdHMv
bWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0L2NhcHRpb25zLXJ0bC52dHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Nzk3MjdmYWNjZDc0M2Q2MDE4N2YwZDJlMmQzOWIwMTlmMWMxYWU0NAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL2NhcHRpb25zLXdlYnZ0dC9jYXB0aW9ucy1ydGwu
dnR0CkBAIC0wLDAgKzEsNSBAQAor77u/V0VCVlRUCisKKzEKKzAwOjAwOjAwLjAwMCAtLT4gMDA6
MDA6MDEuMDAwCivYqtis2LHYqNipCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS90cmFj
ay90cmFjay1jdWUtcmVuZGVyaW5nLXJ0bC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9tZWRp
YS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLXJ0bC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZmI3M2RjMWMzODI3N2U2YWRiNWFiODI4NTVjZDhmNTUyOGRmNTAwOQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctcnRsLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitUZXN0IHRoYXQgVGV4dFRyYWNrIFJUTCBjdWVzIGFy
ZSByZW5kZXJlZCBjb3JyZWN0bHkuCisKK0VWRU5UKGNhbnBsYXl0aHJvdWdoKQorRVZFTlQoc2Vl
a2VkKQorCisqKiBUaGUgY3VlIHNob3VsZCBjb250YWluIGFyYWJpYyB0ZXh0ICoqCitFWFBFQ1RF
RCAodmlkZW8uY3VycmVudFRpbWUgPT0gJzAuNScpIE9LCitFWFBFQ1RFRCAodGVzdFRyYWNrLnRy
YWNrLmFjdGl2ZUN1ZXMubGVuZ3RoID09ICcxJykgT0sKK0VYUEVDVEVEICh0ZXN0VHJhY2sudHJh
Y2suYWN0aXZlQ3Vlc1swXS50ZXh0ID09ICfYqtis2LHYqNipJykgT0sKK0VYUEVDVEVEICh0ZXN0
Q3VlRGlzcGxheUJveC5pbm5lclRleHQgPT0gJ9iq2KzYsdio2KknKSBPSworCisqKiBUaGUgcG9z
aXRpb24gc2hvdWxkIGJlIGRlZmF1bHQgYW5kIENTUyBkaXJlY3Rpb24gc2V0IHRvIFJUTCAqKgor
RVhQRUNURUQgKDIgKiB0ZXN0Q3VlRGlzcGxheUJveC5vZmZzZXRMZWZ0ID09IHZpZGVvLnZpZGVv
V2lkdGggLSB0ZXN0Q3VlRGlzcGxheUJveC5vZmZzZXRXaWR0aCA9PSAndHJ1ZScpIE9LCitFWFBF
Q1RFRCAoZ2V0Q29tcHV0ZWRTdHlsZSh0ZXN0Q3VlRGlzcGxheUJveCkuZGlyZWN0aW9uID09ICdy
dGwnKSBPSworRU5EIE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvdHJh
Y2svdHJhY2stY3VlLXJlbmRlcmluZy1ydGwuaHRtbCBiL0xheW91dFRlc3RzL21lZGlhL3RyYWNr
L3RyYWNrLWN1ZS1yZW5kZXJpbmctcnRsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWU2NWI5ZDU1MDliY2Zh
OWIwYTU5MDU1NTc5NDE0Mjg0ZDk2MWM2OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctcnRsLmh0bWwKQEAgLTAsMCArMSw2NiBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAgPG1ldGEgaHR0
cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgi
IC8+CisKKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vbWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KKyAg
ICAgICAgPHNjcmlwdCBzcmM9Li4vdmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KKyAgICAgICAgPHNj
cmlwdCBzcmM9Li4vbWVkaWEtY29udHJvbHMuanM+PC9zY3JpcHQ+CisKKyAgICAgICAgPHNjcmlw
dD4KKworICAgICAgICB2YXIgdGVzdFRyYWNrOworICAgICAgICB2YXIgdGVzdEN1ZURpc3BsYXlC
b3g7CisgICAgICAgIHZhciBzZWVrZWRDb3VudCA9IDA7CisgICAgICAgIHZhciBpbmZvID0gWyAi
2KrYrNix2KjYqSIgXTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0Q3VlU3R5bGUoKQorICAgICAg
ICB7CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biBzZWVrZWQoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0Q3VlRGlzcGxheUJveCA9IHRl
eHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvLCAnZGlzcGxheScpOworCisgICAgICAgICAgICBj
b25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgY29uc29sZVdyaXRlKCIqKiBUaGUgY3VlIHNo
b3VsZCBjb250YWluIGFyYWJpYyB0ZXh0ICoqIik7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
InZpZGVvLmN1cnJlbnRUaW1lIiwgc2Vla2VkQ291bnQgKyAuNSk7CisgICAgICAgICAgICB0ZXN0
RXhwZWN0ZWQoInRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0aCIsIDEpOworICAgICAg
ICAgICAgdGVzdEV4cGVjdGVkKCJ0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlc1swXS50ZXh0Iiwg
aW5mb1tzZWVrZWRDb3VudF0pOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0ZXN0Q3VlRGlz
cGxheUJveC5pbm5lclRleHQiLCBpbmZvW3NlZWtlZENvdW50XSk7CisKKyAgICAgICAgICAgIGNv
bnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIioqIFRoZSBwb3NpdGlv
biBzaG91bGQgYmUgZGVmYXVsdCBhbmQgQ1NTIGRpcmVjdGlvbiBzZXQgdG8gUlRMICoqIik7Cisg
ICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoIjIgKiB0ZXN0Q3VlRGlzcGxheUJveC5vZmZzZXRMZWZ0
ID09IHZpZGVvLnZpZGVvV2lkdGggLSB0ZXN0Q3VlRGlzcGxheUJveC5vZmZzZXRXaWR0aCIsIHRy
dWUpCisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoImdldENvbXB1dGVkU3R5bGUodGVzdEN1ZURp
c3BsYXlCb3gpLmRpcmVjdGlvbiIsICJydGwiKTsKKworICAgICAgICAgICAgaWYgKCsrc2Vla2Vk
Q291bnQgPT0gaW5mby5sZW5ndGgpCisgICAgICAgICAgICAgICAgZW5kVGVzdCgpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAg
ICAgICAgICBydW4oInZpZGVvLmN1cnJlbnRUaW1lID0gIiArICh2aWRlby5jdXJyZW50VGltZSAr
IDEpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBsb2FkZWQoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25z
b2xlV3JpdGUoIlRlc3QgdGhhdCBUZXh0VHJhY2sgUlRMIGN1ZXMgYXJlIHJlbmRlcmVkIGNvcnJl
Y3RseS4iKTsKKyAgICAgICAgICAgIHRlc3RUcmFjayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io
J3RyYWNrJyk7CisKKyAgICAgICAgICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsKKyAgICAgICAgICAg
IHZpZGVvLnNyYyA9IGZpbmRNZWRpYUZpbGUoJ3ZpZGVvJywgJy4uL2NvbnRlbnQvdGVzdCcpOwor
CisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgd2FpdEZvckV2ZW50
KCdzZWVrZWQnLCBzZWVrZWQpOworICAgICAgICAgICAgd2FpdEZvckV2ZW50KCdjYW5wbGF5dGhy
b3VnaCcsIGZ1bmN0aW9uKCkgeyB2aWRlby5jdXJyZW50VGltZSA9IC41OyB9KTsKKyAgICAgICAg
fQorICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHkgb25sb2FkPSJsb2Fk
ZWQoKSI+CisgICAgICAgIDx2aWRlbyBjb250cm9scyA+CisgICAgICAgICAgICA8dHJhY2sgc3Jj
PSJjYXB0aW9ucy13ZWJ2dHQvY2FwdGlvbnMtcnRsLnZ0dCIga2luZD0iY2FwdGlvbnMiIGRlZmF1
bHQ+CisgICAgICAgIDwvdmlkZW8+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184299</attachid>
            <date>2013-01-23 13:31:26 -0800</date>
            <delta_ts>2013-02-12 02:27:34 -0800</delta_ts>
            <desc>Rebased patch</desc>
            <filename>bug-79749-20130123232818.patch</filename>
            <type>text/plain</type>
            <size>14708</size>
            <attacher name="Victor Carbune">vcarbune</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmYxNGRhNGRlZGYzYTJj
YzBjMzdjMjU1OGE3NzZlMmYwODM1NDQ3Ny4uN2ZmYjE5ZTdmMTc4OGIzZmQxYjUzYjc3NTI5Y2Jk
MzI2NmQxYTVjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEzLTAxLTIzICBWaWN0
b3IgQ2FyYnVuZSAgPHZjYXJidW5lQGNocm9taXVtLm9yZz4KKworICAgICAgICBEZXRlcm1pbmUg
dGV4dCBkaXJlY3Rpb24gZm9yIHJlbmRlcmluZyBhIFRleHRUcmFja0N1ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk3NDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBtZWRpYS90cmFjay90cmFj
ay1jdWUtcmVuZGVyaW5nLXJ0bC5odG1sCisKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFj
a0N1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVCb3g6OmFwcGx5Q1NTUHJv
cGVydGllcyk6IFVwZGF0ZWQgdG8KKyAgICAgICAgcmV0cmlldmUgYXBwbHkgdGhlIGRpcmVjdGlv
biBkZXRlcm1pbmVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tD
dWUpOiBTZXQgZGVmYXVsdCB2YWx1ZQorICAgICAgICBmb3IgdGhlIGRpc3BsYXkgZGlyZWN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpkZXRlcm1pbmVUZXh0RGlyZWN0aW9u
KTogRGV0ZXJtaW5lZAorICAgICAgICBkaXJlY3Rpb24gdXNpbmcgdGhlIFVuaWNvZGUgQmlkaXJl
Y3Rpb25hbCBBbGdvcml0aG0uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRUcmFja0N1ZTo6Y2FsY3VsYXRlRGlzcGxheVBhcmFtZXRlcnMpOiBVcGRhdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpnZXRDU1NXcml0aW5nRGlyZWN0aW9uKTogQWRk
ZWQgdG8KKyAgICAgICAgcmV0dXJuIHRoZSB3cml0aW5nIGRpcmVjdGlvbiBvZiB0aGUgY3VlLgor
ICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmg6CisgICAgICAgIChUZXh0VHJhY2tD
dWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6IEV4
dHJhY3RlZCBUZXh0UnVuSXRlcmF0b3IuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dFJ1bi5oOiBBZGRlZCBUZXh0UnVuSXRlcmF0b3IuCisgICAgICAgIChUZXh0UnVuSXRlcmF0b3Ip
OiBNb3ZlZCB0aGUgVGV4dFJ1bkl0ZXJhdG9yIGNsYXNzIHRvIFRleHRSdW4sCisgICAgICAgIHNv
IGl0IGNhbiBiZSB1c2VkIGFueXdoZXJlIHRoZSB1bmljb2RlIGJpZGlyZWN0aW9uYWwgYWxnb3Jp
dGhtCisgICAgICAgIG5lZWRzIHRvIGJlIHJ1bi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5J
dGVyYXRvcjo6VGV4dFJ1bkl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVy
YXRvcjo6b2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVyYXRvcjo6aW5jcmVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5JdGVyYXRvcjo6YXRFbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFJ1bkl0ZXJhdG9yOjpjdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRSdW5JdGVyYXRvcjo6ZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5J
dGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuSXRlcmF0b3I6
Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTMtMDEtMjMgIFRvbnkgQ2hh
bmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmNvcnJlY3Qgc2Nyb2xsYWJsZSBo
ZWlnaHQgZHVyaW5nIHNpbXBsaWZpZWQgbGF5b3V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RleHRUcmFja0N1ZS5jcHAKaW5kZXggMzg0NWE3NDllOTU0NThiNGU3OTU0NTk3MTE0ZWNjMmY5
NzBlYTdkMS4uOThmMTgwYjQ1OWE5ZGIyMDdlZWFjNjQ5ODk3MzUxNjVhNTY0NjBmMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcApAQCAtMzUsNiArMzUsNyBA
QAogCiAjaW5jbHVkZSAiVGV4dFRyYWNrQ3VlLmgiCiAKKyNpbmNsdWRlICJCaWRpUmVzb2x2ZXIu
aCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3
b3Jkcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKQEAgLTQ1LDYgKzQ2LDcgQEAK
ICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dFRyYWNrQ3Vl
LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJU
ZXh0VHJhY2suaCIKICNpbmNsdWRlICJUZXh0VHJhY2tDdWVMaXN0LmgiCiAjaW5jbHVkZSAiV2Vi
VlRURWxlbWVudC5oIgpAQCAtMTE5LDkgKzEyMSw4IEBAIHZvaWQgVGV4dFRyYWNrQ3VlQm94Ojph
cHBseUNTU1Byb3BlcnRpZXMoY29uc3QgSW50U2l6ZSYpCiAgICAgLy8gIHRoZSAndW5pY29kZS1i
aWRpJyBwcm9wZXJ0eSBtdXN0IGJlIHNldCB0byAncGxhaW50ZXh0JwogICAgIHNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgQ1NTVmFsdWVXZWJraXRQbGFpbnRl
eHQpOwogCi0gICAgLy8gRklYTUU6IERldGVybWluZSB0aGUgdGV4dCBkaXJlY3Rpb24gdXNpbmcg
dGhlIEJJREkgYWxnb3JpdGhtLiBodHRwOi8vd2tiLnVnLzc5NzQ5CiAgICAgLy8gdGhlICdkaXJl
Y3Rpb24nIHByb3BlcnR5IG11c3QgYmUgc2V0IHRvIGRpcmVjdGlvbgotICAgIHNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlTHRyKTsKKyAgICBzZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBtX2N1ZS0+Z2V0Q1NTV3Jp
dGluZ0RpcmVjdGlvbigpKTsKIAogICAgIC8vIHRoZSAnd3JpdGluZy1tb2RlJyBwcm9wZXJ0eSBt
dXN0IGJlIHNldCB0byB3cml0aW5nLW1vZGUKICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGUsIG1fY3VlLT5nZXRDU1NXcml0aW5nTW9kZSgpLCBm
YWxzZSk7CkBAIC0yMTAsNiArMjExLDcgQEAgVGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgZG91YmxlIHN0YXJ0LCBkb3VibGUKICAgICAs
IG1fc25hcFRvTGluZXModHJ1ZSkKICAgICAsIG1fYWxsRG9jdW1lbnROb2RlcyhIVE1MRGl2RWxl
bWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCkpKQogICAgICwgbV9k
aXNwbGF5VHJlZVNob3VsZENoYW5nZSh0cnVlKQorICAgICwgbV9kaXNwbGF5RGlyZWN0aW9uKENT
U1ZhbHVlTHRyKQogewogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9j
dW1lbnQoKSk7CiAKQEAgLTU5NSwxMSArNTk3LDQ5IEBAIGludCBUZXh0VHJhY2tDdWU6OmNhbGN1
bGF0ZUNvbXB1dGVkTGluZVBvc2l0aW9uKCkKICAgICByZXR1cm4gbjsKIH0KIAordm9pZCBUZXh0
VHJhY2tDdWU6OmRldGVybWluZVRleHREaXJlY3Rpb24oKQoreworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgU3RyaW5nLCBydFRhZywgKEFTQ0lJTGl0ZXJhbCgicnQiKSkpOworICAgIGNy
ZWF0ZVdlYlZUVE5vZGVUcmVlKCk7CisKKyAgICAvLyBBcHBseSB0aGUgVW5pY29kZSBCaWRpcmVj
dGlvbmFsIEFsZ29yaXRobSdzIFBhcmFncmFwaCBMZXZlbCBzdGVwcyB0byB0aGUKKyAgICAvLyBj
b25jYXRlbmF0aW9uIG9mIHRoZSB2YWx1ZXMgb2YgZWFjaCBXZWJWVFQgVGV4dCBPYmplY3QgaW4g
bm9kZXMsIGluIGEKKyAgICAvLyBwcmUtb3JkZXIsIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCwgZXhj
bHVkaW5nIFdlYlZUVCBSdWJ5IFRleHQgT2JqZWN0cyBhbmQKKyAgICAvLyB0aGVpciBkZXNjZW5k
YW50cy4uLgorICAgIFN0cmluZ0J1aWxkZXIgcGFyYWdyYXBoQnVpbGRlcjsKKyAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBtX3dlYlZUVE5vZGVUcmVlLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIG1fd2ViVlRUTm9kZVRyZWUuZ2V0KCkpKSB7CisgICAg
ICAgIGlmICghbm9kZS0+aXNUZXh0Tm9kZSgpIHx8IG5vZGUtPmxvY2FsTmFtZSgpID09IHJ0VGFn
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcGFyYWdyYXBoQnVpbGRlci5hcHBl
bmQobm9kZS0+bm9kZVZhbHVlKCkpOworICAgIH0KKworICAgIFN0cmluZyBwYXJhZ3JhcGggPSBw
YXJhZ3JhcGhCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgaWYgKCFwYXJhZ3JhcGgubGVuZ3RoKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFRleHRSdW4gdGV4dFJ1bihwYXJhZ3JhcGgsIHBhcmFn
cmFwaC5sZW5ndGgoKSk7CisKKyAgICBCaWRpUmVzb2x2ZXI8VGV4dFJ1bkl0ZXJhdG9yLCBCaWRp
Q2hhcmFjdGVyUnVuPiBiaWRpUmVzb2x2ZXI7CisgICAgYmlkaVJlc29sdmVyLnNldFN0YXR1cyhC
aWRpU3RhdHVzKHRleHRSdW4uZGlyZWN0aW9uKCksIHRleHRSdW4uZGlyZWN0aW9uYWxPdmVycmlk
ZSgpKSk7CisgICAgYmlkaVJlc29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdOZXN0ZWRJc29sYXRl
cyhUZXh0UnVuSXRlcmF0b3IoJnRleHRSdW4sIDApKTsKKworICAgIEJpZGlSdW5MaXN0PEJpZGlD
aGFyYWN0ZXJSdW4+JiBiaWRpUnVucyA9IGJpZGlSZXNvbHZlci5ydW5zKCk7CisgICAgYmlkaVJl
c29sdmVyLmNyZWF0ZUJpZGlSdW5zRm9yTGluZShUZXh0UnVuSXRlcmF0b3IoJnRleHRSdW4sIHRl
eHRSdW4ubGVuZ3RoKCkpKTsKKworICAgIEFTU0VSVChiaWRpUnVucy5ydW5Db3VudCgpKTsKKwor
ICAgIC8vIC4uLiB0byBkZXRlcm1pbmUgdGhlIHBhcmFncmFwaCBlbWJlZGRpbmcgbGV2ZWwgb2Yg
dGhlIGZpcnN0IFVuaWNvZGUgcGFyYWdyYXBoIG9mIHRoZSBjdWUuCisKKyAgICAvLyBJZiB0aGUg
cGFyYWdyYXBoIGVtYmVkZGluZyBsZXZlbCBkZXRlcm1pbmVkIGluIHRoZSBwcmV2aW91cyBzdGVw
IGlzIGV2ZW4KKyAgICAvLyAodGhlIHBhcmFncmFwaCBkaXJlY3Rpb24gaXMgbGVmdC10by1yaWdo
dCksIGxldCBkaXJlY3Rpb24gYmUgJ2x0cicsIG90aGVyd2lzZSwgbGV0IGl0IGJlICdydGwnLgor
ICAgIG1fZGlzcGxheURpcmVjdGlvbiA9IGJpZGlSdW5zLmZpcnN0UnVuKCktPmxldmVsKCkgJSAy
ID8gQ1NTVmFsdWVSdGwgOiBDU1NWYWx1ZUx0cjsKK30KKwogdm9pZCBUZXh0VHJhY2tDdWU6OmNh
bGN1bGF0ZURpc3BsYXlQYXJhbWV0ZXJzKCkKIHsKLSAgICAvLyBGSVhNRShCVUcgNzk3NDkpOiBE
ZXRlcm1pbmUgdGhlIHRleHQgZGlyZWN0aW9uIHVzaW5nIHRoZSBCSURJIGFsZ29yaXRobS4KICAg
ICAvLyBTdGVwcyAxMC4yLCAxMC4zCi0gICAgbV9kaXNwbGF5RGlyZWN0aW9uID0gQ1NTVmFsdWVM
dHI7CisgICAgZGV0ZXJtaW5lVGV4dERpcmVjdGlvbigpOwogCiAgICAgLy8gMTAuNCBJZiB0aGUg
dGV4dCB0cmFjayBjdWUgd3JpdGluZyBkaXJlY3Rpb24gaXMgaG9yaXpvbnRhbCwgdGhlbiBsZXQK
ICAgICAvLyBibG9jay1mbG93IGJlICd0YicuIE90aGVyd2lzZSwgaWYgdGhlIHRleHQgdHJhY2sg
Y3VlIHdyaXRpbmcgZGlyZWN0aW9uIGlzCkBAIC0xMDM5LDYgKzEwNzksMTEgQEAgTmV4dFNldHRp
bmc6CiAgICAgfQogfQogCitpbnQgVGV4dFRyYWNrQ3VlOjpnZXRDU1NXcml0aW5nRGlyZWN0aW9u
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kaXNwbGF5RGlyZWN0aW9uOworfQorCiBpbnQgVGV4
dFRyYWNrQ3VlOjpnZXRDU1NXcml0aW5nTW9kZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGlz
cGxheVdyaXRpbmdNb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9U
ZXh0VHJhY2tDdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgK
aW5kZXggY2MxNmYwNzlmYmQxOTU5NzUwMWM3YjRjOWZlZmY1NWNiMzk0ZGZkNC4uMTk4M2MxMTll
ZWRkMzI1NGU5Zjk4Y2Q3ZmZhZDVjNzE1ODA1Zjc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1RleHRUcmFja0N1ZS5oCkBAIC0xNjksNyArMTY5LDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
OwogCiAgICAgc3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPiBnZXRDU1NQb3NpdGlvbigpIGNvbnN0
OworCiAgICAgaW50IGdldENTU1NpemUoKSBjb25zdDsKKyAgICBpbnQgZ2V0Q1NTV3JpdGluZ0Rp
cmVjdGlvbigpIGNvbnN0OwogICAgIGludCBnZXRDU1NXcml0aW5nTW9kZSgpIGNvbnN0OwogCiAg
ICAgZW51bSBXcml0aW5nRGlyZWN0aW9uIHsKQEAgLTIyMCw2ICsyMjIsNyBAQCBwcml2YXRlOgog
ICAgIHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gZ2V0UG9zaXRpb25Db29yZGluYXRlcygpIGNv
bnN0OwogICAgIHZvaWQgcGFyc2VTZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQg
ZGV0ZXJtaW5lVGV4dERpcmVjdGlvbigpOwogICAgIHZvaWQgY2FsY3VsYXRlRGlzcGxheVBhcmFt
ZXRlcnMoKTsKIAogICAgIHZvaWQgY3VlV2lsbENoYW5nZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggMWQ1NzIw
NzE3ZGI3MmFkNjJkZjVjODNiOGYxYzI3MGJjODMwZjM4MS4uYjkyMGRhMjhmZWE2MDYyNzc4NTQ4
NWJhNzcwMjBjZWYyMzcxMDc3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC00MCw0NCArNDAsNiBAQCB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFRleHRSdW5JdGVy
YXRvciB7Ci1wdWJsaWM6Ci0gICAgVGV4dFJ1bkl0ZXJhdG9yKCkKLSAgICAgICAgOiBtX3RleHRS
dW4oMCkKLSAgICAgICAgLCBtX29mZnNldCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBUZXh0UnVu
SXRlcmF0b3IoY29uc3QgVGV4dFJ1biogdGV4dFJ1biwgdW5zaWduZWQgb2Zmc2V0KQotICAgICAg
ICA6IG1fdGV4dFJ1bih0ZXh0UnVuKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICB7
Ci0gICAgfQotCi0gICAgVGV4dFJ1bkl0ZXJhdG9yKGNvbnN0IFRleHRSdW5JdGVyYXRvciYgb3Ro
ZXIpCi0gICAgICAgIDogbV90ZXh0UnVuKG90aGVyLm1fdGV4dFJ1bikKLSAgICAgICAgLCBtX29m
ZnNldChvdGhlci5tX29mZnNldCkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgb2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICB2b2lkIGluY3JlbWVudCgpIHsgbV9v
ZmZzZXQrKzsgfQotICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV90ZXh0UnVuIHx8
IG1fb2Zmc2V0ID49IG1fdGV4dFJ1bi0+bGVuZ3RoKCk7IH0KLSAgICBVQ2hhciBjdXJyZW50KCkg
Y29uc3QgeyByZXR1cm4gKCptX3RleHRSdW4pW21fb2Zmc2V0XTsgfQotICAgIFdURjo6VW5pY29k
ZTo6RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGF0RW5kKCkgPyBXVEY6OlVu
aWNvZGU6Ok90aGVyTmV1dHJhbCA6IFdURjo6VW5pY29kZTo6ZGlyZWN0aW9uKGN1cnJlbnQoKSk7
IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0UnVuSXRlcmF0b3ImIG90aGVyKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0ICYmIG1fdGV4
dFJ1biA9PSBvdGhlci5tX3RleHRSdW47Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFRleHRSdW5JdGVyYXRvciYgb3RoZXIpIHsgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsg
fQotCi1wcml2YXRlOgotICAgIGNvbnN0IFRleHRSdW4qIG1fdGV4dFJ1bjsKLSAgICBpbnQgbV9v
ZmZzZXQ7Ci19OwotCiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQpCiAgICAgOiBtX3VwZGF0aW5n
Q29udHJvbFRpbnRzKGZhbHNlKQogICAgICwgbV90cmFuc3BhcmVuY3lDb3VudCgwKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCmluZGV4IGM2NGYwOThmZTQ3NGFi
MzY4ZGM5M2JjOTM0M2MzNjkyN2Y2NjA0YTkuLmQwYTQ5OTRlZjhmYmQ0MmM1ZDBlN2ViZDljYWUw
OTE4MTYxZTY3NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1RleHRSdW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVu
LmgKQEAgLTI1Niw2ICsyNTYsNDQgQEAgaW5saW5lIHZvaWQgVGV4dFJ1bjo6c2V0VGFiU2l6ZShi
b29sIGFsbG93LCB1bnNpZ25lZCBzaXplKQogICAgIG1fdGFiU2l6ZSA9IHNpemU7CiB9CiAKK2Ns
YXNzIFRleHRSdW5JdGVyYXRvciB7CitwdWJsaWM6CisgICAgVGV4dFJ1bkl0ZXJhdG9yKCkKKyAg
ICAgICAgOiBtX3RleHRSdW4oMCkKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsKKyAgICB9
CisKKyAgICBUZXh0UnVuSXRlcmF0b3IoY29uc3QgVGV4dFJ1biogdGV4dFJ1biwgdW5zaWduZWQg
b2Zmc2V0KQorICAgICAgICA6IG1fdGV4dFJ1bih0ZXh0UnVuKQorICAgICAgICAsIG1fb2Zmc2V0
KG9mZnNldCkKKyAgICB7CisgICAgfQorCisgICAgVGV4dFJ1bkl0ZXJhdG9yKGNvbnN0IFRleHRS
dW5JdGVyYXRvciYgb3RoZXIpCisgICAgICAgIDogbV90ZXh0UnVuKG90aGVyLm1fdGV4dFJ1bikK
KyAgICAgICAgLCBtX29mZnNldChvdGhlci5tX29mZnNldCkKKyAgICB7CisgICAgfQorCisgICAg
dW5zaWduZWQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICB2b2lkIGlu
Y3JlbWVudCgpIHsgbV9vZmZzZXQrKzsgfQorICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVy
biAhbV90ZXh0UnVuIHx8IG1fb2Zmc2V0ID49IG1fdGV4dFJ1bi0+bGVuZ3RoKCk7IH0KKyAgICBV
Q2hhciBjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gKCptX3RleHRSdW4pW21fb2Zmc2V0XTsgfQor
ICAgIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGF0
RW5kKCkgPyBXVEY6OlVuaWNvZGU6Ok90aGVyTmV1dHJhbCA6IFdURjo6VW5pY29kZTo6ZGlyZWN0
aW9uKGN1cnJlbnQoKSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0UnVuSXRl
cmF0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1f
b2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFRleHRSdW5JdGVyYXRvciYgb3RoZXIpIHsgcmV0dXJuICFvcGVy
YXRvcj09KG90aGVyKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRleHRSdW4qIG1fdGV4dFJ1
bjsKKyAgICBpbnQgbV9vZmZzZXQ7Cit9OworCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI4ZWM5ZDVm
MTAzZjNjOTlkNzZkODI4ZGM3NzQ4Y2ZmYmQwYjg2MzAuLjk0NzUyNjliNTA0OGJmZmRjMDI2NmUz
ODE3NzgwNjNiNDZjNTc5MmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wMS0yMyAgVmlj
dG9yIENhcmJ1bmUgIDx2Y2FyYnVuZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRGV0ZXJtaW5l
IHRleHQgZGlyZWN0aW9uIGZvciByZW5kZXJpbmcgYSBUZXh0VHJhY2tDdWUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NzQ5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBtZWRpYS90cmFjay9jYXB0aW9u
cy13ZWJ2dHQvY2FwdGlvbnMtcnRsLnZ0dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvdHJhY2sv
dHJhY2stY3VlLXJlbmRlcmluZy1ydGwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBt
ZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLXJ0bC5odG1sOiBBZGRlZC4KKwogMjAxMy0w
MS0yMyAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluY29ycmVj
dCBzY3JvbGxhYmxlIGhlaWdodCBkdXJpbmcgc2ltcGxpZmllZCBsYXlvdXQKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL21lZGlhL3RyYWNrL2NhcHRpb25zLXdlYnZ0dC9jYXB0aW9ucy1ydGwudnR0
IGIvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0L2NhcHRpb25zLXJ0bC52
dHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzk3MjdmYWNjZDc0M2Q2MDE4N2YwZDJlMmQzOWIwMTlmMWMxYWU0NAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL2NhcHRpb25zLXdlYnZ0
dC9jYXB0aW9ucy1ydGwudnR0CkBAIC0wLDAgKzEsNSBAQAor77u/V0VCVlRUCisKKzEKKzAwOjAw
OjAwLjAwMCAtLT4gMDA6MDA6MDEuMDAwCivYqtis2LHYqNipCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9tZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLXJ0bC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLXJ0bC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZmI3M2RjMWMzODI3N2U2YWRiNWFiODI4NTVjZDhmNTUyOGRmNTAwOQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5k
ZXJpbmctcnRsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitUZXN0IHRoYXQgVGV4dFRy
YWNrIFJUTCBjdWVzIGFyZSByZW5kZXJlZCBjb3JyZWN0bHkuCisKK0VWRU5UKGNhbnBsYXl0aHJv
dWdoKQorRVZFTlQoc2Vla2VkKQorCisqKiBUaGUgY3VlIHNob3VsZCBjb250YWluIGFyYWJpYyB0
ZXh0ICoqCitFWFBFQ1RFRCAodmlkZW8uY3VycmVudFRpbWUgPT0gJzAuNScpIE9LCitFWFBFQ1RF
RCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXMubGVuZ3RoID09ICcxJykgT0sKK0VYUEVDVEVE
ICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlc1swXS50ZXh0ID09ICfYqtis2LHYqNipJykgT0sK
K0VYUEVDVEVEICh0ZXN0Q3VlRGlzcGxheUJveC5pbm5lclRleHQgPT0gJ9iq2KzYsdio2KknKSBP
SworCisqKiBUaGUgcG9zaXRpb24gc2hvdWxkIGJlIGRlZmF1bHQgYW5kIENTUyBkaXJlY3Rpb24g
c2V0IHRvIFJUTCAqKgorRVhQRUNURUQgKDIgKiB0ZXN0Q3VlRGlzcGxheUJveC5vZmZzZXRMZWZ0
ID09IHZpZGVvLnZpZGVvV2lkdGggLSB0ZXN0Q3VlRGlzcGxheUJveC5vZmZzZXRXaWR0aCA9PSAn
dHJ1ZScpIE9LCitFWFBFQ1RFRCAoZ2V0Q29tcHV0ZWRTdHlsZSh0ZXN0Q3VlRGlzcGxheUJveCku
ZGlyZWN0aW9uID09ICdydGwnKSBPSworRU5EIE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy1ydGwuaHRtbCBiL0xheW91dFRl
c3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctcnRsLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NWU2NWI5ZDU1MDliY2ZhOWIwYTU5MDU1NTc5NDE0Mjg0ZDk2MWM2OAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctcnRsLmh0bWwK
QEAgLTAsMCArMSw2NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAg
ICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7
IGNoYXJzZXQ9dXRmLTgiIC8+CisKKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vbWVkaWEtZmlsZS5q
cz48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vdmlkZW8tdGVzdC5qcz48L3Njcmlw
dD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vbWVkaWEtY29udHJvbHMuanM+PC9zY3JpcHQ+CisK
KyAgICAgICAgPHNjcmlwdD4KKworICAgICAgICB2YXIgdGVzdFRyYWNrOworICAgICAgICB2YXIg
dGVzdEN1ZURpc3BsYXlCb3g7CisgICAgICAgIHZhciBzZWVrZWRDb3VudCA9IDA7CisgICAgICAg
IHZhciBpbmZvID0gWyAi2KrYrNix2KjYqSIgXTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0Q3Vl
U3R5bGUoKQorICAgICAgICB7CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiBzZWVrZWQoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0Q3Vl
RGlzcGxheUJveCA9IHRleHRUcmFja0Rpc3BsYXlFbGVtZW50KHZpZGVvLCAnZGlzcGxheScpOwor
CisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgY29uc29sZVdyaXRl
KCIqKiBUaGUgY3VlIHNob3VsZCBjb250YWluIGFyYWJpYyB0ZXh0ICoqIik7CisgICAgICAgICAg
ICB0ZXN0RXhwZWN0ZWQoInZpZGVvLmN1cnJlbnRUaW1lIiwgc2Vla2VkQ291bnQgKyAuNSk7Cisg
ICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0
aCIsIDEpOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0ZXN0VHJhY2sudHJhY2suYWN0aXZl
Q3Vlc1swXS50ZXh0IiwgaW5mb1tzZWVrZWRDb3VudF0pOworICAgICAgICAgICAgdGVzdEV4cGVj
dGVkKCJ0ZXN0Q3VlRGlzcGxheUJveC5pbm5lclRleHQiLCBpbmZvW3NlZWtlZENvdW50XSk7CisK
KyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICBjb25zb2xlV3JpdGUo
IioqIFRoZSBwb3NpdGlvbiBzaG91bGQgYmUgZGVmYXVsdCBhbmQgQ1NTIGRpcmVjdGlvbiBzZXQg
dG8gUlRMICoqIik7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoIjIgKiB0ZXN0Q3VlRGlzcGxh
eUJveC5vZmZzZXRMZWZ0ID09IHZpZGVvLnZpZGVvV2lkdGggLSB0ZXN0Q3VlRGlzcGxheUJveC5v
ZmZzZXRXaWR0aCIsIHRydWUpCisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoImdldENvbXB1dGVk
U3R5bGUodGVzdEN1ZURpc3BsYXlCb3gpLmRpcmVjdGlvbiIsICJydGwiKTsKKworICAgICAgICAg
ICAgaWYgKCsrc2Vla2VkQ291bnQgPT0gaW5mby5sZW5ndGgpCisgICAgICAgICAgICAgICAgZW5k
VGVzdCgpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRl
KCIiKTsKKyAgICAgICAgICAgICAgICBydW4oInZpZGVvLmN1cnJlbnRUaW1lID0gIiArICh2aWRl
by5jdXJyZW50VGltZSArIDEpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBsb2FkZWQoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zb2xlV3JpdGUoIlRlc3QgdGhhdCBUZXh0VHJhY2sgUlRMIGN1ZXMgYXJl
IHJlbmRlcmVkIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIHRlc3RUcmFjayA9IGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3IoJ3RyYWNrJyk7CisKKyAgICAgICAgICAgIGZpbmRNZWRpYUVsZW1lbnQo
KTsKKyAgICAgICAgICAgIHZpZGVvLnNyYyA9IGZpbmRNZWRpYUZpbGUoJ3ZpZGVvJywgJy4uL2Nv
bnRlbnQvdGVzdCcpOworCisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAg
ICAgd2FpdEZvckV2ZW50KCdzZWVrZWQnLCBzZWVrZWQpOworICAgICAgICAgICAgd2FpdEZvckV2
ZW50KCdjYW5wbGF5dGhyb3VnaCcsIGZ1bmN0aW9uKCkgeyB2aWRlby5jdXJyZW50VGltZSA9IC41
OyB9KTsKKyAgICAgICAgfQorICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAgPGJv
ZHkgb25sb2FkPSJsb2FkZWQoKSI+CisgICAgICAgIDx2aWRlbyBjb250cm9scyA+CisgICAgICAg
ICAgICA8dHJhY2sgc3JjPSJjYXB0aW9ucy13ZWJ2dHQvY2FwdGlvbnMtcnRsLnZ0dCIga2luZD0i
Y2FwdGlvbnMiIGRlZmF1bHQ+CisgICAgICAgIDwvdmlkZW8+CisgICAgPC9ib2R5PgorPC9odG1s
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187814</attachid>
            <date>2013-02-12 02:27:38 -0800</date>
            <delta_ts>2013-03-18 08:33:40 -0700</delta_ts>
            <desc>Simple iteration through characters</desc>
            <filename>bug-79749-20130212122408.patch</filename>
            <type>text/plain</type>
            <size>10845</size>
            <attacher name="Victor Carbune">vcarbune</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWFmZDkzOGJlMWJiNzYz
MzRmMTE5NGQyYTkyNGViYmIyMGM1YWEyYy4uYzgyYzVjN2U2Y2Y2NWE2ZWMwZDk4YzU5MmU5N2Iw
YzA3ODE1NzEwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEzLTAyLTEyICBWaWN0
b3IgQ2FyYnVuZSAgPHZjYXJidW5lQGNocm9taXVtLm9yZz4KKworICAgICAgICBEZXRlcm1pbmUg
dGV4dCBkaXJlY3Rpb24gZm9yIHJlbmRlcmluZyBhIFRleHRUcmFja0N1ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk3NDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBtZWRpYS90cmFjay90cmFj
ay1jdWUtcmVuZGVyaW5nLXJ0bC5odG1sCisKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFj
a0N1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVCb3g6OmFwcGx5Q1NTUHJv
cGVydGllcyk6IEFwcGxpZXMgdGhlIGRldGVybWluZWQKKyAgICAgICAgZGlyZWN0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUpOiBTZXRzIHRoZSBkZWZh
dWx0IHZhbHVlIGZvciB0aGUKKyAgICAgICAgZGlzcGxheSBkaXJlY3Rpb24uCisgICAgICAgIChX
ZWJDb3JlOjppc0N1ZVBhcmFncmFwaFNlcGFyYXRvcik6IFRlc3RzIGZvciBleHBsaWNpdCB1bmlj
b2RlIGNoYXJhY3RlcnMKKyAgICAgICAgdGhhdCBhcmUgcGFyYWdyYXBoIHNlcGFyYXRvcnMuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6ZGV0ZXJt
aW5lVGV4dERpcmVjdGlvbik6IERldGVybWluZWQgdGhlIGRpcmVjdGlvbgorICAgICAgICBieSB0
aGUgZmlyc3Qgc3Ryb25nIGRpcmVjdGlvbmFsIGNoYXJhY3RlciBmb3VuZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRUcmFja0N1ZTo6Y2FsY3VsYXRlRGlzcGxheVBhcmFtZXRlcnMpOiBVcGRhdGVk
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpnZXRDU1NXcml0aW5nRGlyZWN0aW9u
KTogUmV0dXJuIHRoZSBkZXRlcm1pbmVkIENTUworICAgICAgICB3cml0aW5nIGRpcmVjdGlvbi4K
KyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oOgorICAgICAgICAoVGV4dFRyYWNr
Q3VlKToKKwogMjAxMy0wMi0xMCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgogCiAgICAgICAgIFdlYlNwZWVjaDogSW1wbGVtZW50IGJhc2ljIHNwZWFraW5nL2ZpbmlzaGVk
IHNwZWFraW5nIGJlaGF2aW9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RleHRUcmFja0N1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1
ZS5jcHAKaW5kZXggZjNiOTM1MzgxOGUwMWI2M2RhODNlNTc2OWVhYTM1ZDYzOWM5ZTU0ZS4uNjhi
MGFkMGMxMjI2OGE5NDM1NTRkYzgyZWIyODJjYjMyOWYzOGM1OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcApAQCAtMTE5LDkgKzExOSw4IEBAIHZvaWQgVGV4
dFRyYWNrQ3VlQm94OjphcHBseUNTU1Byb3BlcnRpZXMoY29uc3QgSW50U2l6ZSYpCiAgICAgLy8g
IHRoZSAndW5pY29kZS1iaWRpJyBwcm9wZXJ0eSBtdXN0IGJlIHNldCB0byAncGxhaW50ZXh0Jwog
ICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgQ1NTVmFs
dWVXZWJraXRQbGFpbnRleHQpOwogCi0gICAgLy8gRklYTUU6IERldGVybWluZSB0aGUgdGV4dCBk
aXJlY3Rpb24gdXNpbmcgdGhlIEJJREkgYWxnb3JpdGhtLiBodHRwOi8vd2tiLnVnLzc5NzQ5CiAg
ICAgLy8gdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG11c3QgYmUgc2V0IHRvIGRpcmVjdGlvbgot
ICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIENTU1ZhbHVl
THRyKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBt
X2N1ZS0+Z2V0Q1NTV3JpdGluZ0RpcmVjdGlvbigpKTsKIAogICAgIC8vIHRoZSAnd3JpdGluZy1t
b2RlJyBwcm9wZXJ0eSBtdXN0IGJlIHNldCB0byB3cml0aW5nLW1vZGUKICAgICBzZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGUsIG1fY3VlLT5nZXRDU1NX
cml0aW5nTW9kZSgpLCBmYWxzZSk7CkBAIC0yMTAsNiArMjA5LDcgQEAgVGV4dFRyYWNrQ3VlOjpU
ZXh0VHJhY2tDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgZG91YmxlIHN0YXJ0
LCBkb3VibGUKICAgICAsIG1fc25hcFRvTGluZXModHJ1ZSkKICAgICAsIG1fYWxsRG9jdW1lbnRO
b2RlcyhIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4
dCkpKQogICAgICwgbV9kaXNwbGF5VHJlZVNob3VsZENoYW5nZSh0cnVlKQorICAgICwgbV9kaXNw
bGF5RGlyZWN0aW9uKENTU1ZhbHVlTHRyKQogewogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CiAKQEAgLTU5MCwxMSArNTkwLDU4IEBAIGludCBUZXh0
VHJhY2tDdWU6OmNhbGN1bGF0ZUNvbXB1dGVkTGluZVBvc2l0aW9uKCkKICAgICByZXR1cm4gbjsK
IH0KIAorc3RhdGljIGJvb2wgaXNDdWVQYXJhZ3JhcGhTZXBhcmF0b3IoVUNoYXIgY2hhcmFjdGVy
KQoreworICAgIC8vIFdpdGhpbiBhIGN1ZSwgcGFyYWdyYXBoIGJvdW5kYXJpZXMgYXJlIG9ubHkg
ZGVub3RlZCBieSBUeXBlIEIgY2hhcmFjdGVycywKKyAgICAvLyBzdWNoIGFzIFUrMDAwQSBMSU5F
IEZFRUQgKExGKSwgVSswMDg1IE5FWFQgTElORSAoTkVMKSwgYW5kIFUrMjAyOSBQQVJBR1JBUEgg
U0VQQVJBVE9SLgorICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gMHgwMDBBIHx8IGNoYXJhY3RlciA9
PSAweDAwODUgfHwgY2hhcmFjdGVyID09IDB4MjAyOTsKK30KKwordm9pZCBUZXh0VHJhY2tDdWU6
OmRldGVybWluZVRleHREaXJlY3Rpb24oKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgU3RyaW5nLCBydFRhZywgKEFTQ0lJTGl0ZXJhbCgicnQiKSkpOworICAgIGNyZWF0ZVdlYlZU
VE5vZGVUcmVlKCk7CisKKyAgICAvLyBBcHBseSB0aGUgVW5pY29kZSBCaWRpcmVjdGlvbmFsIEFs
Z29yaXRobSdzIFBhcmFncmFwaCBMZXZlbCBzdGVwcyB0byB0aGUKKyAgICAvLyBjb25jYXRlbmF0
aW9uIG9mIHRoZSB2YWx1ZXMgb2YgZWFjaCBXZWJWVFQgVGV4dCBPYmplY3QgaW4gbm9kZXMsIGlu
IGEKKyAgICAvLyBwcmUtb3JkZXIsIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCwgZXhjbHVkaW5nIFdl
YlZUVCBSdWJ5IFRleHQgT2JqZWN0cyBhbmQKKyAgICAvLyB0aGVpciBkZXNjZW5kYW50cy4uLgor
ICAgIFN0cmluZ0J1aWxkZXIgcGFyYWdyYXBoQnVpbGRlcjsKKyAgICBmb3IgKE5vZGUqIG5vZGUg
PSBtX3dlYlZUVE5vZGVUcmVlLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KG5vZGUsIG1fd2ViVlRUTm9kZVRyZWUuZ2V0KCkpKSB7CisgICAgICAgIGlmICgh
bm9kZS0+aXNUZXh0Tm9kZSgpIHx8IG5vZGUtPmxvY2FsTmFtZSgpID09IHJ0VGFnKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgcGFyYWdyYXBoQnVpbGRlci5hcHBlbmQobm9kZS0+
bm9kZVZhbHVlKCkpOworICAgIH0KKworICAgIFN0cmluZyBwYXJhZ3JhcGggPSBwYXJhZ3JhcGhC
dWlsZGVyLnRvU3RyaW5nKCk7CisgICAgaWYgKCFwYXJhZ3JhcGgubGVuZ3RoKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYWdyYXBoLmxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgVUNoYXIgY3VycmVudCA9IHBhcmFncmFwaFtpXTsKKyAgICAgICAg
aWYgKCFjdXJyZW50IHx8IGlzQ3VlUGFyYWdyYXBoU2VwYXJhdG9yKGN1cnJlbnQpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChVQ2hhciBjdXJyZW50ID0gcGFyYWdyYXBoW2ld
KSB7CisgICAgICAgICAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBjaGFyRGlyZWN0aW9uID0g
V1RGOjpVbmljb2RlOjpkaXJlY3Rpb24oY3VycmVudCk7CisgICAgICAgICAgICBpZiAoY2hhckRp
cmVjdGlvbiA9PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KSB7CisgICAgICAgICAgICAgICAg
bV9kaXNwbGF5RGlyZWN0aW9uID0gQ1NTVmFsdWVMdHI7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoYXJEaXJlY3Rpb24gPT0gV1RGOjpV
bmljb2RlOjpSaWdodFRvTGVmdAorICAgICAgICAgICAgICAgIHx8IGNoYXJEaXJlY3Rpb24gPT0g
V1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdEFyYWJpYykgeworICAgICAgICAgICAgICAgIG1fZGlz
cGxheURpcmVjdGlvbiA9IENTU1ZhbHVlUnRsOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBUZXh0VHJhY2tDdWU6OmNh
bGN1bGF0ZURpc3BsYXlQYXJhbWV0ZXJzKCkKIHsKLSAgICAvLyBGSVhNRShCVUcgNzk3NDkpOiBE
ZXRlcm1pbmUgdGhlIHRleHQgZGlyZWN0aW9uIHVzaW5nIHRoZSBCSURJIGFsZ29yaXRobS4KICAg
ICAvLyBTdGVwcyAxMC4yLCAxMC4zCi0gICAgbV9kaXNwbGF5RGlyZWN0aW9uID0gQ1NTVmFsdWVM
dHI7CisgICAgZGV0ZXJtaW5lVGV4dERpcmVjdGlvbigpOwogCiAgICAgLy8gMTAuNCBJZiB0aGUg
dGV4dCB0cmFjayBjdWUgd3JpdGluZyBkaXJlY3Rpb24gaXMgaG9yaXpvbnRhbCwgdGhlbiBsZXQK
ICAgICAvLyBibG9jay1mbG93IGJlICd0YicuIE90aGVyd2lzZSwgaWYgdGhlIHRleHQgdHJhY2sg
Y3VlIHdyaXRpbmcgZGlyZWN0aW9uIGlzCkBAIC0xMDM0LDYgKzEwODEsMTEgQEAgTmV4dFNldHRp
bmc6CiAgICAgfQogfQogCitpbnQgVGV4dFRyYWNrQ3VlOjpnZXRDU1NXcml0aW5nRGlyZWN0aW9u
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kaXNwbGF5RGlyZWN0aW9uOworfQorCiBpbnQgVGV4
dFRyYWNrQ3VlOjpnZXRDU1NXcml0aW5nTW9kZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGlz
cGxheVdyaXRpbmdNb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9U
ZXh0VHJhY2tDdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgK
aW5kZXggNWI0ODdmZDQ1Nzk2ZTQzNzNhNTI4NWExNzM2ODQ0ZGFmZGRkMmQ2Mi4uYmE0ZjVmYzY1
YmU3YjIyNjkxMzdlZmY0YzYzYzM1N2Y5ZWIyN2E2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1RleHRUcmFja0N1ZS5oCkBAIC0xNTMsNyArMTUzLDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
OwogCiAgICAgc3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPiBnZXRDU1NQb3NpdGlvbigpIGNvbnN0
OworCiAgICAgaW50IGdldENTU1NpemUoKSBjb25zdDsKKyAgICBpbnQgZ2V0Q1NTV3JpdGluZ0Rp
cmVjdGlvbigpIGNvbnN0OwogICAgIGludCBnZXRDU1NXcml0aW5nTW9kZSgpIGNvbnN0OwogCiAg
ICAgZW51bSBXcml0aW5nRGlyZWN0aW9uIHsKQEAgLTIwNCw2ICsyMDYsNyBAQCBwcml2YXRlOgog
ICAgIHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gZ2V0UG9zaXRpb25Db29yZGluYXRlcygpIGNv
bnN0OwogICAgIHZvaWQgcGFyc2VTZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQg
ZGV0ZXJtaW5lVGV4dERpcmVjdGlvbigpOwogICAgIHZvaWQgY2FsY3VsYXRlRGlzcGxheVBhcmFt
ZXRlcnMoKTsKIAogICAgIHZvaWQgY3VlV2lsbENoYW5nZSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDk1MGU5NzkyNTQz
ZWEyMDdkYzU3ZTQxOTJjYjA0NzVlNzU2ZjI1OGMuLjRhNjk3OGRmMWI0YzcxOTVkOGMxZmY4MmY2
OTJlOTk1ZGExMTM3YjEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wMi0xMiAgVmljdG9y
IENhcmJ1bmUgIDx2Y2FyYnVuZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRGV0ZXJtaW5lIHRl
eHQgZGlyZWN0aW9uIGZvciByZW5kZXJpbmcgYSBUZXh0VHJhY2tDdWUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NzQ5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBtZWRpYS90cmFjay9jYXB0aW9ucy13
ZWJ2dHQvY2FwdGlvbnMtcnRsLnZ0dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvdHJhY2svdHJh
Y2stY3VlLXJlbmRlcmluZy1ydGwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRp
YS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLXJ0bC5odG1sOiBBZGRlZC4KKwogMjAxMy0wMi0x
MCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYlNw
ZWVjaDogSW1wbGVtZW50IGJhc2ljIHNwZWFraW5nL2ZpbmlzaGVkIHNwZWFraW5nIGJlaGF2aW9y
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay9jYXB0aW9ucy13ZWJ2dHQvY2Fw
dGlvbnMtcnRsLnZ0dCBiL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL2NhcHRpb25zLXdlYnZ0dC9j
YXB0aW9ucy1ydGwudnR0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5NzI3ZmFjY2Q3NDNkNjAxODdmMGQyZTJkMzli
MDE5ZjFjMWFlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay9j
YXB0aW9ucy13ZWJ2dHQvY2FwdGlvbnMtcnRsLnZ0dApAQCAtMCwwICsxLDUgQEAKK++7v1dFQlZU
VAorCisxCiswMDowMDowMC4wMDAgLS0+IDAwOjAwOjAxLjAwMAor2KrYrNix2KjYqQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy1ydGwtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy1y
dGwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiNzNkYzFjMzgyNzdlNmFkYjVhYjgyODU1Y2Q4
ZjU1MjhkZjUwMDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay90
cmFjay1jdWUtcmVuZGVyaW5nLXJ0bC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNiBAQAorVGVz
dCB0aGF0IFRleHRUcmFjayBSVEwgY3VlcyBhcmUgcmVuZGVyZWQgY29ycmVjdGx5LgorCitFVkVO
VChjYW5wbGF5dGhyb3VnaCkKK0VWRU5UKHNlZWtlZCkKKworKiogVGhlIGN1ZSBzaG91bGQgY29u
dGFpbiBhcmFiaWMgdGV4dCAqKgorRVhQRUNURUQgKHZpZGVvLmN1cnJlbnRUaW1lID09ICcwLjUn
KSBPSworRVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0aCA9PSAnMScp
IE9LCitFWFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXNbMF0udGV4dCA9PSAn2KrY
rNix2KjYqScpIE9LCitFWFBFQ1RFRCAodGVzdEN1ZURpc3BsYXlCb3guaW5uZXJUZXh0ID09ICfY
qtis2LHYqNipJykgT0sKKworKiogVGhlIHBvc2l0aW9uIHNob3VsZCBiZSBkZWZhdWx0IGFuZCBD
U1MgZGlyZWN0aW9uIHNldCB0byBSVEwgKioKK0VYUEVDVEVEICgyICogdGVzdEN1ZURpc3BsYXlC
b3gub2Zmc2V0TGVmdCA9PSB2aWRlby52aWRlb1dpZHRoIC0gdGVzdEN1ZURpc3BsYXlCb3gub2Zm
c2V0V2lkdGggPT0gJ3RydWUnKSBPSworRVhQRUNURUQgKGdldENvbXB1dGVkU3R5bGUodGVzdEN1
ZURpc3BsYXlCb3gpLmRpcmVjdGlvbiA9PSAncnRsJykgT0sKK0VORCBPRiBURVNUCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctcnRsLmh0
bWwgYi9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVyaW5nLXJ0bC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVlNjViOWQ1NTA5YmNmYTliMGE1OTA1NTU3OTQxNDI4NGQ5NjFjNjgKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1jdWUtcmVuZGVy
aW5nLXJ0bC5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cisg
ICAgPGhlYWQ+CisgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgorCisgICAgICAgIDxzY3JpcHQgc3JjPS4u
L21lZGlhLWZpbGUuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPS4uL3ZpZGVvLXRl
c3QuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPS4uL21lZGlhLWNvbnRyb2xzLmpz
Pjwvc2NyaXB0PgorCisgICAgICAgIDxzY3JpcHQ+CisKKyAgICAgICAgdmFyIHRlc3RUcmFjazsK
KyAgICAgICAgdmFyIHRlc3RDdWVEaXNwbGF5Qm94OworICAgICAgICB2YXIgc2Vla2VkQ291bnQg
PSAwOworICAgICAgICB2YXIgaW5mbyA9IFsgItiq2KzYsdio2KkiIF07CisKKyAgICAgICAgZnVu
Y3Rpb24gdGVzdEN1ZVN0eWxlKCkKKyAgICAgICAgeworICAgICAgICAgICAgZW5kVGVzdCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2Vla2VkKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdGVzdEN1ZURpc3BsYXlCb3ggPSB0ZXh0VHJhY2tEaXNwbGF5RWxlbWVudCh2aWRlbywg
J2Rpc3BsYXknKTsKKworICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAg
IGNvbnNvbGVXcml0ZSgiKiogVGhlIGN1ZSBzaG91bGQgY29udGFpbiBhcmFiaWMgdGV4dCAqKiIp
OworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5jdXJyZW50VGltZSIsIHNlZWtlZENv
dW50ICsgLjUpOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0ZXN0VHJhY2sudHJhY2suYWN0
aXZlQ3Vlcy5sZW5ndGgiLCAxKTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidGVzdFRyYWNr
LnRyYWNrLmFjdGl2ZUN1ZXNbMF0udGV4dCIsIGluZm9bc2Vla2VkQ291bnRdKTsKKyAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgidGVzdEN1ZURpc3BsYXlCb3guaW5uZXJUZXh0IiwgaW5mb1tzZWVr
ZWRDb3VudF0pOworCisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAg
Y29uc29sZVdyaXRlKCIqKiBUaGUgcG9zaXRpb24gc2hvdWxkIGJlIGRlZmF1bHQgYW5kIENTUyBk
aXJlY3Rpb24gc2V0IHRvIFJUTCAqKiIpOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCIyICog
dGVzdEN1ZURpc3BsYXlCb3gub2Zmc2V0TGVmdCA9PSB2aWRlby52aWRlb1dpZHRoIC0gdGVzdEN1
ZURpc3BsYXlCb3gub2Zmc2V0V2lkdGgiLCB0cnVlKQorICAgICAgICAgICAgdGVzdEV4cGVjdGVk
KCJnZXRDb21wdXRlZFN0eWxlKHRlc3RDdWVEaXNwbGF5Qm94KS5kaXJlY3Rpb24iLCAicnRsIik7
CisKKyAgICAgICAgICAgIGlmICgrK3NlZWtlZENvdW50ID09IGluZm8ubGVuZ3RoKQorICAgICAg
ICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICAgICAgcnVuKCJ2aWRlby5jdXJyZW50VGlt
ZSA9ICIgKyAodmlkZW8uY3VycmVudFRpbWUgKyAxKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbG9hZGVkKCkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc29sZVdyaXRlKCJUZXN0IHRoYXQgVGV4dFRyYWNr
IFJUTCBjdWVzIGFyZSByZW5kZXJlZCBjb3JyZWN0bHkuIik7CisgICAgICAgICAgICB0ZXN0VHJh
Y2sgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd0cmFjaycpOworCisgICAgICAgICAgICBmaW5k
TWVkaWFFbGVtZW50KCk7CisgICAgICAgICAgICB2aWRlby5zcmMgPSBmaW5kTWVkaWFGaWxlKCd2
aWRlbycsICcuLi9jb250ZW50L3Rlc3QnKTsKKworICAgICAgICAgICAgY29uc29sZVdyaXRlKCIi
KTsKKyAgICAgICAgICAgIHdhaXRGb3JFdmVudCgnc2Vla2VkJywgc2Vla2VkKTsKKyAgICAgICAg
ICAgIHdhaXRGb3JFdmVudCgnY2FucGxheXRocm91Z2gnLCBmdW5jdGlvbigpIHsgdmlkZW8uY3Vy
cmVudFRpbWUgPSAuNTsgfSk7CisgICAgICAgIH0KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9o
ZWFkPgorICAgIDxib2R5IG9ubG9hZD0ibG9hZGVkKCkiPgorICAgICAgICA8dmlkZW8gY29udHJv
bHMgPgorICAgICAgICAgICAgPHRyYWNrIHNyYz0iY2FwdGlvbnMtd2VidnR0L2NhcHRpb25zLXJ0
bC52dHQiIGtpbmQ9ImNhcHRpb25zIiBkZWZhdWx0PgorICAgICAgICA8L3ZpZGVvPgorICAgIDwv
Ym9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193568</attachid>
            <date>2013-03-18 08:33:46 -0700</date>
            <delta_ts>2013-03-18 15:05:04 -0700</delta_ts>
            <desc>More test cases</desc>
            <filename>bug-79749-20130318172937.patch</filename>
            <type>text/plain</type>
            <size>14881</size>
            <attacher name="Victor Carbune">vcarbune</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2MDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmYzNzM2YzNhM2YzNjNh
N2JhNGE5NGRhN2YzZmE2NjUwZTNmNWQ0OS4uNzJkYzljMmJkZWM4YmI1NjA4MDEzODRiMGI0Yjk1
ZDNmYmUyZmRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAzLTE4ICBWaWN0
b3IgQ2FyYnVuZSAgPHZjYXJidW5lQGNocm9taXVtLm9yZz4KKworICAgICAgICBEZXRlcm1pbmUg
dGV4dCBkaXJlY3Rpb24gZm9yIHJlbmRlcmluZyBhIFRleHRUcmFja0N1ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk3NDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgcmVuZGVyaW5nIHJ1bGVzIGZv
ciBXZWJWVFQgY3VlcyBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50CisgICAgICAgIGRlcGVuZGluZyBv
biB0aGUgZGlyZWN0aW9uYWxpdHkgZGV0ZXJtaW5lZCBmcm9tIHRoZSBjaGFyYWN0ZXJzCisgICAg
ICAgIG9mIHRoZSBjdWUgdGV4dC4gVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBwcmVsaW1pbmFy
eSBzdGVwCisgICAgICAgIHRvIGJlIGFibGUgdG8gdGFrZSBkaXJlY3Rpb25hbGl0eSBpbnRvIGFj
Y291bnQuCisKKyAgICAgICAgSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgY3VlIGNoYXJhY3RlcnMg
YW5kIHNldHRpbmcgdGhlIENTUworICAgICAgICBkaXJlY3Rpb25hbGl0eSB0byB0aGUgb25lIG9m
IHRoZSBmaXJzdCBzdHJvbmcgZGlyZWN0aW9uYWwgY2hhcmFjdGVyLgorCisgICAgICAgIFRlc3Q6
IG1lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctcnRsLmh0bWwKKworICAgICAgICAqIGh0
bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1
ZUJveDo6YXBwbHlDU1NQcm9wZXJ0aWVzKTogQXBwbGllcyB0aGUgZGV0ZXJtaW5lZAorICAgICAg
ICBkaXJlY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1
ZSk6IFNldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQorICAgICAgICBkaXNwbGF5IGRpcmVj
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OmlzQ3VlUGFyYWdyYXBoU2VwYXJhdG9yKTogVGVzdHMg
Zm9yIGV4cGxpY2l0IHVuaWNvZGUgY2hhcmFjdGVycworICAgICAgICB0aGF0IGFyZSBwYXJhZ3Jh
cGggc2VwYXJhdG9ycy4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFRyYWNrQ3VlOjpkZXRlcm1pbmVUZXh0RGlyZWN0aW9uKTogRGV0ZXJtaW5lZCB0aGUgZGlyZWN0
aW9uCisgICAgICAgIGJ5IHRoZSBmaXJzdCBzdHJvbmcgZGlyZWN0aW9uYWwgY2hhcmFjdGVyIGZv
dW5kLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpjYWxjdWxhdGVEaXNwbGF5UGFy
YW1ldGVycyk6IFVwZGF0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OmdldENT
U1dyaXRpbmdEaXJlY3Rpb24pOiBSZXR1cm4gdGhlIGRldGVybWluZWQgQ1NTCisgICAgICAgIHdy
aXRpbmcgZGlyZWN0aW9uLgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmg6Cisg
ICAgICAgIChUZXh0VHJhY2tDdWUpOgorCiAyMDEzLTAzLTE4ICBLZWlzaGkgSGF0dG9yaSAgPGtl
aXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCB0b3VjaCBzdXBwb3J0IHRvIHRoZSBjYWxl
bmRhciBwaWNrZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrQ3VlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcApp
bmRleCA1ZWUzZDIyMzdmNGE0MDE1M2Y3ZDA4ODliZWEzZjBkZjRmODFkYTBmLi4zZDNlYThmMmUz
NzZiNTEyNjc4ZWFmMjJjNDA4ZTNlNTlmZjIxMzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2tDdWUuY3BwCkBAIC0xMTksOSArMTE5LDggQEAgdm9pZCBUZXh0VHJhY2tD
dWVCb3g6OmFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJbnRTaXplJikKICAgICAvLyAgdGhlICd1
bmljb2RlLWJpZGknIHByb3BlcnR5IG11c3QgYmUgc2V0IHRvICdwbGFpbnRleHQnCiAgICAgc2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBDU1NWYWx1ZVdlYmtp
dFBsYWludGV4dCk7CiAKLSAgICAvLyBGSVhNRTogRGV0ZXJtaW5lIHRoZSB0ZXh0IGRpcmVjdGlv
biB1c2luZyB0aGUgQklESSBhbGdvcml0aG0uIGh0dHA6Ly93a2IudWcvNzk3NDkKICAgICAvLyB0
aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgbXVzdCBiZSBzZXQgdG8gZGlyZWN0aW9uCi0gICAgc2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgQ1NTVmFsdWVMdHIpOwor
ICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIG1fY3VlLT5n
ZXRDU1NXcml0aW5nRGlyZWN0aW9uKCkpOwogCiAgICAgLy8gdGhlICd3cml0aW5nLW1vZGUnIHBy
b3BlcnR5IG11c3QgYmUgc2V0IHRvIHdyaXRpbmctbW9kZQogICAgIHNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlXZWJraXRXcml0aW5nTW9kZSwgbV9jdWUtPmdldENTU1dyaXRpbmdN
b2RlKCksIGZhbHNlKTsKQEAgLTIwNCw2ICsyMDMsNyBAQCBUZXh0VHJhY2tDdWU6OlRleHRUcmFj
a0N1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBkb3VibGUgc3RhcnQsIGRvdWJs
ZQogICAgICwgbV9zbmFwVG9MaW5lcyh0cnVlKQogICAgICwgbV9jdWVCYWNrZ3JvdW5kQm94KEhU
TUxEaXZFbGVtZW50OjpjcmVhdGUodG9Eb2N1bWVudChjb250ZXh0KSkpCiAgICAgLCBtX2Rpc3Bs
YXlUcmVlU2hvdWxkQ2hhbmdlKHRydWUpCisgICAgLCBtX2Rpc3BsYXlEaXJlY3Rpb24oQ1NTVmFs
dWVMdHIpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVu
dCgpKTsKIApAQCAtNTg0LDExICs1ODQsNTggQEAgaW50IFRleHRUcmFja0N1ZTo6Y2FsY3VsYXRl
Q29tcHV0ZWRMaW5lUG9zaXRpb24oKQogICAgIHJldHVybiBuOwogfQogCitzdGF0aWMgYm9vbCBp
c0N1ZVBhcmFncmFwaFNlcGFyYXRvcihVQ2hhciBjaGFyYWN0ZXIpCit7CisgICAgLy8gV2l0aGlu
IGEgY3VlLCBwYXJhZ3JhcGggYm91bmRhcmllcyBhcmUgb25seSBkZW5vdGVkIGJ5IFR5cGUgQiBj
aGFyYWN0ZXJzLAorICAgIC8vIHN1Y2ggYXMgVSswMDBBIExJTkUgRkVFRCAoTEYpLCBVKzAwODUg
TkVYVCBMSU5FIChORUwpLCBhbmQgVSsyMDI5IFBBUkFHUkFQSCBTRVBBUkFUT1IuCisgICAgcmV0
dXJuIFdURjo6VW5pY29kZTo6Y2F0ZWdvcnkoY2hhcmFjdGVyKSAmIFdURjo6VW5pY29kZTo6U2Vw
YXJhdG9yX1BhcmFncmFwaDsKK30KKwordm9pZCBUZXh0VHJhY2tDdWU6OmRldGVybWluZVRleHRE
aXJlY3Rpb24oKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBydFRh
ZywgKEFTQ0lJTGl0ZXJhbCgicnQiKSkpOworICAgIGNyZWF0ZVdlYlZUVE5vZGVUcmVlKCk7CisK
KyAgICAvLyBBcHBseSB0aGUgVW5pY29kZSBCaWRpcmVjdGlvbmFsIEFsZ29yaXRobSdzIFBhcmFn
cmFwaCBMZXZlbCBzdGVwcyB0byB0aGUKKyAgICAvLyBjb25jYXRlbmF0aW9uIG9mIHRoZSB2YWx1
ZXMgb2YgZWFjaCBXZWJWVFQgVGV4dCBPYmplY3QgaW4gbm9kZXMsIGluIGEKKyAgICAvLyBwcmUt
b3JkZXIsIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCwgZXhjbHVkaW5nIFdlYlZUVCBSdWJ5IFRleHQg
T2JqZWN0cyBhbmQKKyAgICAvLyB0aGVpciBkZXNjZW5kYW50cy4KKyAgICBTdHJpbmdCdWlsZGVy
IHBhcmFncmFwaEJ1aWxkZXI7CisgICAgZm9yIChOb2RlKiBub2RlID0gbV93ZWJWVFROb2RlVHJl
ZS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBt
X3dlYlZUVE5vZGVUcmVlLmdldCgpKSkgeworICAgICAgICBpZiAoIW5vZGUtPmlzVGV4dE5vZGUo
KSB8fCBub2RlLT5sb2NhbE5hbWUoKSA9PSBydFRhZykKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIHBhcmFncmFwaEJ1aWxkZXIuYXBwZW5kKG5vZGUtPm5vZGVWYWx1ZSgpKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgcGFyYWdyYXBoID0gcGFyYWdyYXBoQnVpbGRlci50b1N0cmluZygp
OworICAgIGlmICghcGFyYWdyYXBoLmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFncmFwaC5sZW5ndGgoKTsgKytpKSB7CisgICAgICAg
IFVDaGFyIGN1cnJlbnQgPSBwYXJhZ3JhcGhbaV07CisgICAgICAgIGlmICghY3VycmVudCB8fCBp
c0N1ZVBhcmFncmFwaFNlcGFyYXRvcihjdXJyZW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAoVUNoYXIgY3VycmVudCA9IHBhcmFncmFwaFtpXSkgeworICAgICAgICAgICAg
V1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gY2hhckRpcmVjdGlvbiA9IFdURjo6VW5pY29kZTo6ZGly
ZWN0aW9uKGN1cnJlbnQpOworICAgICAgICAgICAgaWYgKGNoYXJEaXJlY3Rpb24gPT0gV1RGOjpV
bmljb2RlOjpMZWZ0VG9SaWdodCkgeworICAgICAgICAgICAgICAgIG1fZGlzcGxheURpcmVjdGlv
biA9IENTU1ZhbHVlTHRyOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChjaGFyRGlyZWN0aW9uID09IFdURjo6VW5pY29kZTo6UmlnaHRUb0xl
ZnQKKyAgICAgICAgICAgICAgICB8fCBjaGFyRGlyZWN0aW9uID09IFdURjo6VW5pY29kZTo6Umln
aHRUb0xlZnRBcmFiaWMpIHsKKyAgICAgICAgICAgICAgICBtX2Rpc3BsYXlEaXJlY3Rpb24gPSBD
U1NWYWx1ZVJ0bDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKIHZvaWQgVGV4dFRyYWNrQ3VlOjpjYWxjdWxhdGVEaXNwbGF5UGFy
YW1ldGVycygpCiB7Ci0gICAgLy8gRklYTUUoQlVHIDc5NzQ5KTogRGV0ZXJtaW5lIHRoZSB0ZXh0
IGRpcmVjdGlvbiB1c2luZyB0aGUgQklESSBhbGdvcml0aG0uCiAgICAgLy8gU3RlcHMgMTAuMiwg
MTAuMwotICAgIG1fZGlzcGxheURpcmVjdGlvbiA9IENTU1ZhbHVlTHRyOworICAgIGRldGVybWlu
ZVRleHREaXJlY3Rpb24oKTsKIAogICAgIC8vIDEwLjQgSWYgdGhlIHRleHQgdHJhY2sgY3VlIHdy
aXRpbmcgZGlyZWN0aW9uIGlzIGhvcml6b250YWwsIHRoZW4gbGV0CiAgICAgLy8gYmxvY2stZmxv
dyBiZSAndGInLiBPdGhlcndpc2UsIGlmIHRoZSB0ZXh0IHRyYWNrIGN1ZSB3cml0aW5nIGRpcmVj
dGlvbiBpcwpAQCAtMTAyOCw2ICsxMDc1LDExIEBAIE5leHRTZXR0aW5nOgogICAgIH0KIH0KIAor
aW50IFRleHRUcmFja0N1ZTo6Z2V0Q1NTV3JpdGluZ0RpcmVjdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZGlzcGxheURpcmVjdGlvbjsKK30KKwogaW50IFRleHRUcmFja0N1ZTo6Z2V0Q1NT
V3JpdGluZ01vZGUoKSBjb25zdAogewogICAgIHJldHVybiBtX2Rpc3BsYXlXcml0aW5nTW9kZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCmluZGV4IGI1YzVjZjRlZDBh
MDlhN2NhNDhhMDdmMTJhOWVhMzUxNWZjNWFiMzUuLjQ4MDhiMTkyOWM4MGNkYWRmNDQ2NDlmZDNj
OTVmZTdmYTY4M2VhNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrQ3VlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUu
aApAQCAtMTUxLDcgKzE1MSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgIHN0ZDo6cGFp
cjxkb3VibGUsIGRvdWJsZT4gZ2V0Q1NTUG9zaXRpb24oKSBjb25zdDsKKwogICAgIGludCBnZXRD
U1NTaXplKCkgY29uc3Q7CisgICAgaW50IGdldENTU1dyaXRpbmdEaXJlY3Rpb24oKSBjb25zdDsK
ICAgICBpbnQgZ2V0Q1NTV3JpdGluZ01vZGUoKSBjb25zdDsKIAogICAgIGVudW0gV3JpdGluZ0Rp
cmVjdGlvbiB7CkBAIC0yMDIsNiArMjA0LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnBhaXI8ZG91
YmxlLCBkb3VibGU+IGdldFBvc2l0aW9uQ29vcmRpbmF0ZXMoKSBjb25zdDsKICAgICB2b2lkIHBh
cnNlU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIGRldGVybWluZVRleHREaXJl
Y3Rpb24oKTsKICAgICB2b2lkIGNhbGN1bGF0ZURpc3BsYXlQYXJhbWV0ZXJzKCk7CiAKICAgICB2
b2lkIGN1ZVdpbGxDaGFuZ2UoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkYzkwNjlmN2U1ZTI1MDQyOTZmN2M4NzJmMTdj
NjY3NmRhNTJiNzMzLi5jNTlhYTgwNTk4ODIwYmMxNTg0ZWE3YTE1YTY4NGFhNWNmZjM5OTE4IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDMtMTggIFZpY3RvciBDYXJidW5lICA8dmNhcmJ1
bmVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIERldGVybWluZSB0ZXh0IGRpcmVjdGlvbiBmb3Ig
cmVuZGVyaW5nIGEgVGV4dFRyYWNrQ3VlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03OTc0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogbWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0L2NhcHRpb25zLXJ0
bC52dHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmct
cnRsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvdHJhY2svdHJhY2stY3Vl
LXJlbmRlcmluZy1ydGwuaHRtbDogQWRkZWQuCisKIDIwMTMtMDMtMTggIEtlaXNoaSBIYXR0b3Jp
ICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIHRvdWNoIHN1cHBvcnQgdG8gdGhl
IGNhbGVuZGFyIHBpY2tlcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svY2Fw
dGlvbnMtd2VidnR0L2NhcHRpb25zLXJ0bC52dHQgYi9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay9j
YXB0aW9ucy13ZWJ2dHQvY2FwdGlvbnMtcnRsLnZ0dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjE4NWJkMjQxMzEw
ZmEzYWIzZjc1NDY2YjI4OTk5MDdmNDdjZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvbWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0L2NhcHRpb25zLXJ0bC52dHQKQEAgLTAsMCAr
MSwyNyBAQAor77u/V0VCVlRUCitFeGFtcGxlcyBvZiBSVEwgKG9kZC1udW1iZXJlZCBpZHMpIGFu
ZCBMVFIgY3VlcyAoZXZlbi1udW1iZXJlZCBpZHMpLgorCisxCiswMDowMDowMC4wMDAgLS0+IDAw
OjAwOjAwLjUwMAor2KrYrNix2KjYqQorCisyCiswMDowMDowMC41MDAgLS0+IDAwOjAwOjAxLjAw
MAorCTEyMzQKKworMworMDA6MDA6MDEuMDAwIC0tPiAwMDowMDowMS41MDAKK9iq2KzYsdio2KkK
K0xUUiBuZXcgbGluZSwgYnV0IGN1ZSBzaG91bGQgYmUgUlRMCisKKzQKKzAwOjAwOjAxLjUwMCAt
LT4gMDA6MDA6MDIuMDAwCitMVFIgY3VlINiq2KzYsdio2KkKKworNQorMDA6MDA6MDIuMDAwIC0t
PiAwMDowMDowMi41MDAKKzsxMjM02KrYrNix2KjYqQorCis2CiswMDowMDowMi41MDAgLS0+IDAw
OjAwOjAzLjAwMAorCeClpuClp+ClqOClqeClquClq+ClrOClreClruClryAgCQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy1ydGwtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy1ydGwt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1Mjg1OTRmMTUyNGMyODc2NjI1M2Q0OWE5MWRiODQ2
NDE2YTE4MDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFj
ay1jdWUtcmVuZGVyaW5nLXJ0bC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4MiBAQAorVGVzdCB0
aGF0IGRpcmVjdGlvbmFsaXR5IGlzIHNldCBjb3JyZWN0bHkgb24gY3Vlcy4KKworKiogUlRMIGN1
ZXMgYWx0ZXJuYXRlIHdpdGggTFRSIGN1ZXMgKioKK0VWRU5UKGNhbnBsYXl0aHJvdWdoKQorRVZF
TlQoc2Vla2VkKQorCisqKiBKdW1wIHRvIG5leHQgY3VlICoqCitFWFBFQ1RFRCAodmlkZW8uY3Vy
cmVudFRpbWUgPT0gJzAuMjUnKSBPSworRVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVD
dWVzLmxlbmd0aCA9PSAnMScpIE9LCitFWFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1
ZXNbMF0udGV4dCA9PSAn2KrYrNix2KjYqScpIE9LCitFWFBFQ1RFRCAodGVzdEN1ZURpc3BsYXlC
b3guaW5uZXJUZXh0ID09ICfYqtis2LHYqNipJykgT0sKKworKiogVGhlIHBvc2l0aW9uIHNob3Vs
ZCBiZSBkZWZhdWx0IGFuZCBDU1MgZGlyZWN0aW9uIHNldCB0byBydGwgKioKK0VYUEVDVEVEICgy
ICogdGVzdEN1ZURpc3BsYXlCb3gub2Zmc2V0TGVmdCA9PSB2aWRlby52aWRlb1dpZHRoIC0gdGVz
dEN1ZURpc3BsYXlCb3gub2Zmc2V0V2lkdGggPT0gJ3RydWUnKSBPSworRVhQRUNURUQgKGdldENv
bXB1dGVkU3R5bGUodGVzdEN1ZURpc3BsYXlCb3gpLmRpcmVjdGlvbiA9PSAncnRsJykgT0sKKwor
UlVOKHZpZGVvLmN1cnJlbnRUaW1lID0gMC43NSkKK0VWRU5UKHNlZWtlZCkKKworKiogSnVtcCB0
byBuZXh0IGN1ZSAqKgorRVhQRUNURUQgKHZpZGVvLmN1cnJlbnRUaW1lID09ICcwLjc1JykgT0sK
K0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlcy5sZW5ndGggPT0gJzEnKSBPSwor
RVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzWzBdLnRleHQgPT0gJwkxMjM0Jykg
T0sKK0VYUEVDVEVEICh0ZXN0Q3VlRGlzcGxheUJveC5pbm5lclRleHQgPT0gJwkxMjM0JykgT0sK
KworKiogVGhlIHBvc2l0aW9uIHNob3VsZCBiZSBkZWZhdWx0IGFuZCBDU1MgZGlyZWN0aW9uIHNl
dCB0byBsdHIgKioKK0VYUEVDVEVEICgyICogdGVzdEN1ZURpc3BsYXlCb3gub2Zmc2V0TGVmdCA9
PSB2aWRlby52aWRlb1dpZHRoIC0gdGVzdEN1ZURpc3BsYXlCb3gub2Zmc2V0V2lkdGggPT0gJ3Ry
dWUnKSBPSworRVhQRUNURUQgKGdldENvbXB1dGVkU3R5bGUodGVzdEN1ZURpc3BsYXlCb3gpLmRp
cmVjdGlvbiA9PSAnbHRyJykgT0sKKworUlVOKHZpZGVvLmN1cnJlbnRUaW1lID0gMS4yNSkKK0VW
RU5UKHNlZWtlZCkKKworKiogSnVtcCB0byBuZXh0IGN1ZSAqKgorRVhQRUNURUQgKHZpZGVvLmN1
cnJlbnRUaW1lID09ICcxLjI1JykgT0sKK0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZl
Q3Vlcy5sZW5ndGggPT0gJzEnKSBPSworRVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVD
dWVzWzBdLnRleHQgPT0gJ9iq2KzYsdio2KkgTFRSIG5ldyBsaW5lLCBidXQgY3VlIHNob3VsZCBi
ZSBSVEwnKSBPSworRVhQRUNURUQgKHRlc3RDdWVEaXNwbGF5Qm94LmlubmVyVGV4dCA9PSAn2KrY
rNix2KjYqSBMVFIgbmV3IGxpbmUsIGJ1dCBjdWUgc2hvdWxkIGJlIFJUTCcpIE9LCisKKyoqIFRo
ZSBwb3NpdGlvbiBzaG91bGQgYmUgZGVmYXVsdCBhbmQgQ1NTIGRpcmVjdGlvbiBzZXQgdG8gcnRs
ICoqCitFWFBFQ1RFRCAoMiAqIHRlc3RDdWVEaXNwbGF5Qm94Lm9mZnNldExlZnQgPT0gdmlkZW8u
dmlkZW9XaWR0aCAtIHRlc3RDdWVEaXNwbGF5Qm94Lm9mZnNldFdpZHRoID09ICd0cnVlJykgT0sK
K0VYUEVDVEVEIChnZXRDb21wdXRlZFN0eWxlKHRlc3RDdWVEaXNwbGF5Qm94KS5kaXJlY3Rpb24g
PT0gJ3J0bCcpIE9LCisKK1JVTih2aWRlby5jdXJyZW50VGltZSA9IDEuNzUpCitFVkVOVChzZWVr
ZWQpCisKKyoqIEp1bXAgdG8gbmV4dCBjdWUgKioKK0VYUEVDVEVEICh2aWRlby5jdXJyZW50VGlt
ZSA9PSAnMS43NScpIE9LCitFWFBFQ1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXMubGVu
Z3RoID09ICcxJykgT0sKK0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlc1swXS50
ZXh0ID09ICdMVFIgY3VlINiq2KzYsdio2KknKSBPSworRVhQRUNURUQgKHRlc3RDdWVEaXNwbGF5
Qm94LmlubmVyVGV4dCA9PSAnTFRSIGN1ZSDYqtis2LHYqNipJykgT0sKKworKiogVGhlIHBvc2l0
aW9uIHNob3VsZCBiZSBkZWZhdWx0IGFuZCBDU1MgZGlyZWN0aW9uIHNldCB0byBsdHIgKioKK0VY
UEVDVEVEICgyICogdGVzdEN1ZURpc3BsYXlCb3gub2Zmc2V0TGVmdCA9PSB2aWRlby52aWRlb1dp
ZHRoIC0gdGVzdEN1ZURpc3BsYXlCb3gub2Zmc2V0V2lkdGggPT0gJ3RydWUnKSBPSworRVhQRUNU
RUQgKGdldENvbXB1dGVkU3R5bGUodGVzdEN1ZURpc3BsYXlCb3gpLmRpcmVjdGlvbiA9PSAnbHRy
JykgT0sKKworUlVOKHZpZGVvLmN1cnJlbnRUaW1lID0gMi4yNSkKK0VWRU5UKHNlZWtlZCkKKwor
KiogSnVtcCB0byBuZXh0IGN1ZSAqKgorRVhQRUNURUQgKHZpZGVvLmN1cnJlbnRUaW1lID09ICcy
LjI1JykgT0sKK0VYUEVDVEVEICh0ZXN0VHJhY2sudHJhY2suYWN0aXZlQ3Vlcy5sZW5ndGggPT0g
JzEnKSBPSworRVhQRUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzWzBdLnRleHQgPT0g
JzsxMjM02KrYrNix2KjYqScpIE9LCitFWFBFQ1RFRCAodGVzdEN1ZURpc3BsYXlCb3guaW5uZXJU
ZXh0ID09ICc7MTIzNNiq2KzYsdio2KknKSBPSworCisqKiBUaGUgcG9zaXRpb24gc2hvdWxkIGJl
IGRlZmF1bHQgYW5kIENTUyBkaXJlY3Rpb24gc2V0IHRvIHJ0bCAqKgorRVhQRUNURUQgKDIgKiB0
ZXN0Q3VlRGlzcGxheUJveC5vZmZzZXRMZWZ0ID09IHZpZGVvLnZpZGVvV2lkdGggLSB0ZXN0Q3Vl
RGlzcGxheUJveC5vZmZzZXRXaWR0aCA9PSAndHJ1ZScpIE9LCitFWFBFQ1RFRCAoZ2V0Q29tcHV0
ZWRTdHlsZSh0ZXN0Q3VlRGlzcGxheUJveCkuZGlyZWN0aW9uID09ICdydGwnKSBPSworCitSVU4o
dmlkZW8uY3VycmVudFRpbWUgPSAyLjc1KQorRVZFTlQoc2Vla2VkKQorCisqKiBKdW1wIHRvIG5l
eHQgY3VlICoqCitFWFBFQ1RFRCAodmlkZW8uY3VycmVudFRpbWUgPT0gJzIuNzUnKSBPSworRVhQ
RUNURUQgKHRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzLmxlbmd0aCA9PSAnMScpIE9LCitFWFBF
Q1RFRCAodGVzdFRyYWNrLnRyYWNrLmFjdGl2ZUN1ZXNbMF0udGV4dCA9PSAnCeClpuClp+ClqOCl
qeClquClq+ClrOClreClruClryAnKSBPSworRVhQRUNURUQgKHRlc3RDdWVEaXNwbGF5Qm94Lmlu
bmVyVGV4dCA9PSAnCeClpuClp+ClqOClqeClquClq+ClrOClreClruClryAnKSBPSworCisqKiBU
aGUgcG9zaXRpb24gc2hvdWxkIGJlIGRlZmF1bHQgYW5kIENTUyBkaXJlY3Rpb24gc2V0IHRvIGx0
ciAqKgorRVhQRUNURUQgKDIgKiB0ZXN0Q3VlRGlzcGxheUJveC5vZmZzZXRMZWZ0ID09IHZpZGVv
LnZpZGVvV2lkdGggLSB0ZXN0Q3VlRGlzcGxheUJveC5vZmZzZXRXaWR0aCA9PSAndHJ1ZScpIE9L
CitFWFBFQ1RFRCAoZ2V0Q29tcHV0ZWRTdHlsZSh0ZXN0Q3VlRGlzcGxheUJveCkuZGlyZWN0aW9u
ID09ICdsdHInKSBPSworRU5EIE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVk
aWEvdHJhY2svdHJhY2stY3VlLXJlbmRlcmluZy1ydGwuaHRtbCBiL0xheW91dFRlc3RzL21lZGlh
L3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctcnRsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTRhNjZlZjBj
NzJiODQ0MTZjZTliY2MxNzQ1ZDBmNzMwOGE5MmNkOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWN1ZS1yZW5kZXJpbmctcnRsLmh0bWwKQEAgLTAsMCAr
MSw3NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAgPG1l
dGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9
dXRmLTgiIC8+CisKKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vbWVkaWEtZmlsZS5qcz48L3Njcmlw
dD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vdmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KKyAgICAg
ICAgPHNjcmlwdCBzcmM9Li4vbWVkaWEtY29udHJvbHMuanM+PC9zY3JpcHQ+CisKKyAgICAgICAg
PHNjcmlwdD4KKworICAgICAgICB2YXIgdGVzdFRyYWNrOworICAgICAgICB2YXIgdGVzdEN1ZURp
c3BsYXlCb3g7CisgICAgICAgIHZhciBzZWVrZWRDb3VudCA9IDA7CisgICAgICAgIHZhciBkaXJl
Y3Rpb247CisKKyAgICAgICAgdmFyIGluZm8gPSBbItiq2KzYsdio2KkiLAorICAgICAgICAgICAg
ICAgICAgICAiXHQxMjM0IiwKKyAgICAgICAgICAgICAgICAgICAgItiq2KzYsdio2KlcbkxUUiBu
ZXcgbGluZSwgYnV0IGN1ZSBzaG91bGQgYmUgUlRMIiwKKyAgICAgICAgICAgICAgICAgICAgIkxU
UiBjdWUg2KrYrNix2KjYqSIsCisgICAgICAgICAgICAgICAgICAgICI7MTIzNNiq2KzYsdio2Kki
LAorICAgICAgICAgICAgICAgICAgICAiXHTgpabgpafgpajgpangpargpavgpazgpa3gpa7gpa8g
IFx0Il07CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEN1ZVN0eWxlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZW5kVGVzdCgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2Vla2Vk
KCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdEN1ZURpc3BsYXlCb3ggPSB0ZXh0VHJhY2tE
aXNwbGF5RWxlbWVudCh2aWRlbywgJ2Rpc3BsYXknKTsKKworICAgICAgICAgICAgY29uc29sZVdy
aXRlKCIiKTsKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiKiogSnVtcCB0byBuZXh0IGN1ZSAq
KiIpOworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5jdXJyZW50VGltZSIsIChzZWVr
ZWRDb3VudCAvIDIpICsgLjI1KTsKKyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidGVzdFRyYWNr
LnRyYWNrLmFjdGl2ZUN1ZXMubGVuZ3RoIiwgMSk7CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
InRlc3RUcmFjay50cmFjay5hY3RpdmVDdWVzWzBdLnRleHQiLCBpbmZvW3NlZWtlZENvdW50XSk7
CisgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRlc3RDdWVEaXNwbGF5Qm94LmlubmVyVGV4dCIs
IGluZm9bc2Vla2VkQ291bnRdKTsKKworICAgICAgICAgICAgZGlyZWN0aW9uID0gc2Vla2VkQ291
bnQgJSAyID8gImx0ciIgOiAicnRsIjsKKworICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsK
KyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiKiogVGhlIHBvc2l0aW9uIHNob3VsZCBiZSBkZWZh
dWx0IGFuZCBDU1MgZGlyZWN0aW9uIHNldCB0byAiICsgZGlyZWN0aW9uICsgIiAqKiIpOworICAg
ICAgICAgICAgdGVzdEV4cGVjdGVkKCIyICogdGVzdEN1ZURpc3BsYXlCb3gub2Zmc2V0TGVmdCA9
PSB2aWRlby52aWRlb1dpZHRoIC0gdGVzdEN1ZURpc3BsYXlCb3gub2Zmc2V0V2lkdGgiLCB0cnVl
KTsKKworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJnZXRDb21wdXRlZFN0eWxlKHRlc3RDdWVE
aXNwbGF5Qm94KS5kaXJlY3Rpb24iLCBkaXJlY3Rpb24pOworCisgICAgICAgICAgICBpZiAoKytz
ZWVrZWRDb3VudCA9PSBpbmZvLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBlbmRUZXN0KCk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAg
ICAgICAgICAgICAgIHJ1bigidmlkZW8uY3VycmVudFRpbWUgPSAiICsgKHZpZGVvLmN1cnJlbnRU
aW1lICsgLjUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiBsb2FkZWQoKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zb2xlV3JpdGUoIlRlc3QgdGhhdCBkaXJlY3Rpb25hbGl0eSBpcyBzZXQgY29ycmVjdGx5
IG9uIGN1ZXMuIik7CisgICAgICAgICAgICB0ZXN0VHJhY2sgPSBkb2N1bWVudC5xdWVyeVNlbGVj
dG9yKCd0cmFjaycpOworCisgICAgICAgICAgICBmaW5kTWVkaWFFbGVtZW50KCk7CisgICAgICAg
ICAgICB2aWRlby5zcmMgPSBmaW5kTWVkaWFGaWxlKCd2aWRlbycsICcuLi9jb250ZW50L3Rlc3Qn
KTsKKworICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAgIGNvbnNvbGVX
cml0ZSgiKiogUlRMIGN1ZXMgYWx0ZXJuYXRlIHdpdGggTFRSIGN1ZXMgKioiKTsKKyAgICAgICAg
ICAgIHdhaXRGb3JFdmVudCgnc2Vla2VkJywgc2Vla2VkKTsKKyAgICAgICAgICAgIHdhaXRGb3JF
dmVudCgnY2FucGxheXRocm91Z2gnLCBmdW5jdGlvbigpIHsgdmlkZW8uY3VycmVudFRpbWUgPSAu
MjU7IH0pOworICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8
Ym9keSBvbmxvYWQ9ImxvYWRlZCgpIj4KKyAgICAgICAgPHZpZGVvIGNvbnRyb2xzID4KKyAgICAg
ICAgICAgIDx0cmFjayBzcmM9ImNhcHRpb25zLXdlYnZ0dC9jYXB0aW9ucy1ydGwudnR0IiBraW5k
PSJjYXB0aW9ucyIgZGVmYXVsdD4KKyAgICAgICAgPC92aWRlbz4KKyAgICA8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>