<?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>141431</bug_id>
          
          <creation_ts>2015-02-10 07:26:01 -0800</creation_ts>
          <short_desc>[CSS Grid Layout] Support marking/unmarking tracks as infinitely growable</short_desc>
          <delta_ts>2015-04-13 06:22:52 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>141422</dependson>
          <blocked>60731</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>jfernandez</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>ossy</cc>
    
    <cc>rego</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1068052</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-02-10 07:26:01 -0800</bug_when>
    <thetext>As explained here http://lists.w3.org/Archives/Public/www-style/2014Mar/0512.html we sometimes need to consider that some tracks are infinitely growable when they are really not, in order to produce better results.

One example is this case:

* Two &quot;auto&quot; tracks (i.e. &quot;minmax(min-content, max-content) minmax(min-content, max-content)&quot;)
* Item 1 is in track 1, and has min-content = max-content = 10.
* Item 2 spans tracks 1 and 2, and has min-content = 30, max-content = 100.

Our current implementation will outcome [45px, 55px]. But with this change that would be [10, 90] which is considered more &quot;natural&quot; from the algorithm author&apos;s POV.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083580</commentid>
    <comment_count>1</comment_count>
      <attachid>250342</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-08 01:59:13 -0700</bug_when>
    <thetext>Created attachment 250342
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084201</commentid>
    <comment_count>2</comment_count>
      <attachid>250342</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-09 22:27:20 -0700</bug_when>
    <thetext>Comment on attachment 250342
Patch

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

&gt; Source/WebCore/rendering/RenderGrid.cpp:76
&gt; +    bool growthLimitIsInfiniteOrTrackIsInfinitelyGrowable() const

I wonder if there’s a shorter name for this that could still be just as clear.

&gt; Source/WebCore/rendering/RenderGrid.cpp:726
&gt; +        auto* tracksToGrowBeyondGrowthLimits = sizingData.growBeyondGrowthLimitsTracks.isEmpty() ? &amp;sizingData.filteredTracks : &amp;sizingData.growBeyondGrowthLimitsTracks;

This could be a reference instead of a pointer.

&gt; Source/WebCore/rendering/RenderGrid.cpp:735
&gt; +        if ((track.*trackSize)() == infinity &amp;&amp; track.plannedSize() != infinity)
&gt; +            track.setInfinitelyGrowable(true);
&gt; +        else if (track.infinitelyGrowable())
&gt; +            track.setInfinitelyGrowable(false);

This should be written more simply:

    track.setInfinitelyGrowable((track.*trackSize)() == infinity &amp;&amp; track.plannedSize() != infinity);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084295</commentid>
    <comment_count>3</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-10 07:00:24 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 250342 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250342&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:76
&gt; &gt; +    bool growthLimitIsInfiniteOrTrackIsInfinitelyGrowable() const
&gt; 
&gt; I wonder if there’s a shorter name for this that could still be just as
&gt; clear.

I think I can use trackIsInfinitelyGrowable() because that includes the case of growth limit being infinite.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:726
&gt; &gt; +        auto* tracksToGrowBeyondGrowthLimits = sizingData.growBeyondGrowthLimitsTracks.isEmpty() ? &amp;sizingData.filteredTracks : &amp;sizingData.growBeyondGrowthLimitsTracks;
&gt; 
&gt; This could be a reference instead of a pointer.

Yes it&apos;s just used as an argument of a function that requires a pointer (as it could be nullptr)

&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:735
&gt; &gt; +        if ((track.*trackSize)() == infinity &amp;&amp; track.plannedSize() != infinity)
&gt; &gt; +            track.setInfinitelyGrowable(true);
&gt; &gt; +        else if (track.infinitelyGrowable())
&gt; &gt; +            track.setInfinitelyGrowable(false);
&gt; 
&gt; This should be written more simply:
&gt; 
&gt;     track.setInfinitelyGrowable((track.*trackSize)() == infinity &amp;&amp;
&gt; track.plannedSize() != infinity);

Yeah. In any case I&apos;m changing it now that we have explicit phases of the algorithm added in https://bugs.webkit.org/show_bug.cgi?id=143481</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084305</commentid>
    <comment_count>4</comment_count>
      <attachid>250342</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-10 07:45:22 -0700</bug_when>
    <thetext>Comment on attachment 250342
Patch

Clearing the r+ as I&apos;m going to attach a different version of the patch based on the changes added in https://bugs.webkit.org/show_bug.cgi?id=143481. Basically we have now extra information about the step/phase of the algorithm that is being run, so we can take better decisions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084306</commentid>
    <comment_count>5</comment_count>
      <attachid>250519</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-10 07:48:19 -0700</bug_when>
    <thetext>Created attachment 250519
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084321</commentid>
    <comment_count>6</comment_count>
      <attachid>250342</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-10 09:26:43 -0700</bug_when>
    <thetext>Comment on attachment 250342
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:726
&gt;&gt;&gt; +        auto* tracksToGrowBeyondGrowthLimits = sizingData.growBeyondGrowthLimitsTracks.isEmpty() ? &amp;sizingData.filteredTracks : &amp;sizingData.growBeyondGrowthLimitsTracks;
&gt;&gt; 
&gt;&gt; This could be a reference instead of a pointer.
&gt; 
&gt; Yes it&apos;s just used as an argument of a function that requires a pointer (as it could be nullptr)

And when passing to that function, you can use &amp; right at that point (&amp;tracksToGrowBeyondGrowthLimits); it’s better to keep locals as references right until they get to the point where they need to become pointers, especially if the code might be refactored later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084322</commentid>
    <comment_count>7</comment_count>
      <attachid>250519</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-10 09:28:22 -0700</bug_when>
    <thetext>Comment on attachment 250519
Patch

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

&gt; Source/WebCore/rendering/RenderGrid.cpp:839
&gt; +        auto* tracksToGrowBeyondGrowthLimits = sizingData.growBeyondGrowthLimitsTracks.isEmpty() ? &amp;sizingData.filteredTracks : &amp;sizingData.growBeyondGrowthLimitsTracks;

Looking at this expression, I wish there was a function to do this that took a sizingData argument, or even a member function.

I still stand by my suggestion that we use a reference here and put the &amp; on the next line of code instead of this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084761</commentid>
    <comment_count>8</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-13 03:50:50 -0700</bug_when>
    <thetext>Committed r182704: &lt;http://trac.webkit.org/changeset/182704&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084763</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-04-13 04:10:58 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Committed r182704: &lt;http://trac.webkit.org/changeset/182704&gt;

It broke the build everywhere. Could you fix it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084766</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-04-13 04:28:01 -0700</bug_when>
    <thetext>ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084777</commentid>
    <comment_count>11</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-13 06:22:52 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Committed r182704: &lt;http://trac.webkit.org/changeset/182704&gt;
&gt; 
&gt; It broke the build everywhere. Could you fix it?

Should be fixed. Sorry for the inconvenience, a last minute change as usual :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250342</attachid>
            <date>2015-04-08 01:59:13 -0700</date>
            <delta_ts>2015-04-10 07:48:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141431-20150408105822.patch</filename>
            <type>text/plain</type>
            <size>13272</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNDcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjM1Njk4MTkzOTE3NGU5
YTE5NTc4MTZjYzc0OWU3MGE5NmI0OWYzYS4uZWVlY2IwNDAwNWJiNDBiNmJiYmI0ZDg2OWZjNTYx
ZTNkMjIwZjY4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE1LTA0LTA4ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtDU1MgR3Jp
ZCBMYXlvdXRdIFN1cHBvcnQgbWFya2luZy91bm1hcmtpbmcgdHJhY2tzIGFzIGluZmluaXRlbHkg
Z3Jvd2FibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MTQzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFzIGV4cGxhaW5lZCBoZXJlCisgICAgICAgIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMv
UHVibGljL3d3dy1zdHlsZS8yMDE0TWFyLzA1MTIuaHRtbCB3ZQorICAgICAgICBzb21ldGltZXMg
bmVlZCB0byBjb25zaWRlciB0aGF0IHNvbWUgdHJhY2tzIGFyZSBpbmZpbml0ZWx5CisgICAgICAg
IGdyb3dhYmxlIGV2ZW4gd2hlbiB0aGV5IGFyZSByZWFsbHkgbm90LCBpbiBvcmRlciB0byBwcm9k
dWNlIG1vcmUKKyAgICAgICAgIm5hdHVyYWwiIHJlc3VsdHMuCisKKyAgICAgICAgRm9yIGV4YW1w
bGUgdGhlIGZvbGxvd2luZyBjYXNlOgorICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczog
YXV0byBhdXRvOworICAgICAgICAgIGl0ZW0gMSBpbiBjb2x1bW4gMSB3aXRoIG1pbi1jb250ZW50
ID0gbWF4LWNvbnRlbnQgPSAxMHB4OworICAgICAgICAgIGl0ZW0gMiBpbiBjb2x1bW5zIDEtMiB3
aXRoIG1pbi1jb250ZW50ID0gMzAsIG1heC1jb250ZW50ID0gMTAwcHg7CisKKyAgICAgICAgd2ls
bCBwcm9kdWNlICg0NXB4LCA1NXB4KSB3aXRob3V0IHRoaXMgcGF0Y2guIEJ1dCBjb25zaWRlcmlu
ZyB0aGUKKyAgICAgICAgc2Vjb25kIGNvbHVtbiBhcyBpbmZpbml0ZWx5IGdyb3dhYmxlIHRoZSBy
ZXN1bHQgaXMgKDEwcHgsIDkwcHgpLCBhCisgICAgICAgIG1vcmUgIm5hdHVyYWwiIHJlc3VsdCBi
ZWNhdXNlIGNvbHVtbiAxIGp1c3QgbmVlZHMgdG8gYmUgMTBweCB0bworICAgICAgICBhY2NvbW1v
ZGF0ZSBpdGVtIDEuIEZyb20gbm93IG9uIHdlIGNhbiBmbGFnIEdyaWRUcmFja3Mgc28gdGhhdAor
ICAgICAgICB0aGV5IGNhbiBpbmZpbml0ZWx5IGdyb3cgZXZlbiB3aGVuIHRoZSBncm93dGggbGlt
aXQgaXMgZmluaXRlLgorCisgICAgICAgIEFwYXJ0IGZyb20gdGhhdCBkaXN0cmlidXRlU3BhY2VU
b1RyYWNrcygpIGlzIG5vdyB1bmNvbmRpdGlvbmFsbHkKKyAgICAgICAgY2FsbGVkIGV2ZW4gdGhv
dWdoIHRoZSBleHRyYSBzcGFjZSBpcyAwLiBUaGF0J3MgYmVjYXVzZSBpdAorICAgICAgICBjb21w
dXRlcyB0aGUgcGxhbm5lZFNpemUgdmFsdWUuCisKKyAgICAgICAgVGVzdDogZmFzdC9jc3MtZ3Jp
ZC1sYXlvdXQvbWFyay1hcy1pbmZpbml0ZWx5LWdyb3dhYmxlLmh0bWwKKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFjazo6Z3Jv
d3RoTGltaXRJc0luZmluaXRlT3JUcmFja0lzSW5maW5pdGVseUdyb3dhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyaWRUcmFjazo6aW5maW5pdGVseUdyb3dhYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyaWRUcmFjazo6c2V0SW5maW5pdGVseUdyb3dhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdyaWQ6OmNvbXB1dGVVc2VkQnJlYWR0aE9mR3JpZFRyYWNrcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHcmlkOjpyZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlv
bnNGb3JJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpzb3J0QnlHcmlkVHJhY2tHcm93dGhQb3Rl
bnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6ZGlzdHJpYnV0ZVNwYWNlVG9U
cmFja3MpOgorCiAyMDE1LTAyLTI1ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtDU1MgR3JpZCBMYXlvdXRdIFVwZGF0ZSB0cmFjayBzaXplcyBh
ZnRlciBkaXN0cmlidXRpbmcgZXh0cmEgc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHcmlkLmNwcAppbmRleCA3YzViN2Q1MTRhMmYyMmQ4MWEzYjk5N2I2ZjA0NGE2OGZiODU2MDQy
Li44ZWYzMzIzZDExZTQ1NDNlMjRlNDljM2IxZDllZTgwMmZjOGVkMmMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCkBAIC03Myw2ICs3MywxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX2dyb3d0aExpbWl0ID09IGluZmluaXR5OwogICAgIH0KIAorICAgIGJv
b2wgZ3Jvd3RoTGltaXRJc0luZmluaXRlT3JUcmFja0lzSW5maW5pdGVseUdyb3dhYmxlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBncm93dGhMaW1pdElzSW5maW5pdGUoKSB8fCBtX2lu
ZmluaXRlbHlHcm93YWJsZTsKKyAgICB9CisKICAgICBjb25zdCBMYXlvdXRVbml0JiBncm93dGhM
aW1pdElmTm90SW5maW5pdGUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzR3Jvd3Ro
TGltaXRCaWdnZXJUaGFuQmFzZVNpemUoKSk7CkBAIC04OCw2ICs5MywxMyBAQCBwdWJsaWM6CiAK
ICAgICBMYXlvdXRVbml0JiB0ZW1wU2l6ZSgpIHsgcmV0dXJuIG1fdGVtcFNpemU7IH0KIAorICAg
IGJvb2wgaW5maW5pdGVseUdyb3dhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pbmZpbml0ZWx5R3Jv
d2FibGU7IH0KKworICAgIHZvaWQgc2V0SW5maW5pdGVseUdyb3dhYmxlKGJvb2wgaW5maW5pdGVs
eUdyb3dhYmxlKQorICAgIHsKKyAgICAgICAgbV9pbmZpbml0ZWx5R3Jvd2FibGUgPSBpbmZpbml0
ZWx5R3Jvd2FibGU7CisgICAgfQorCiBwcml2YXRlOgogICAgIGJvb2wgaXNHcm93dGhMaW1pdEJp
Z2dlclRoYW5CYXNlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGdyb3d0aExpbWl0SXNJbmZpbml0ZSgp
IHx8IG1fZ3Jvd3RoTGltaXQgPj0gbV9iYXNlU2l6ZTsgfQogCkBAIC0xMDEsNiArMTEzLDcgQEAg
cHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG1fZ3Jvd3RoTGltaXQgeyAwIH07CiAgICAgTGF5b3V0
VW5pdCBtX3BsYW5uZWRTaXplIHsgMCB9OwogICAgIExheW91dFVuaXQgbV90ZW1wU2l6ZSB7IDAg
fTsKKyAgICBib29sIG1faW5maW5pdGVseUdyb3dhYmxlIHsgZmFsc2UgfTsKIH07CiAKIHN0cnVj
dCBHcmlkVHJhY2tGb3JOb3JtYWxpemF0aW9uIHsKQEAgLTM0Miw2ICszNTUsNyBAQCB2b2lkIFJl
bmRlckdyaWQ6OmNvbXB1dGVVc2VkQnJlYWR0aE9mR3JpZFRyYWNrcyhHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb24gZGlyZWN0aQogCiAgICAgICAgIHRyYWNrLnNldEJhc2VTaXplKGNvbXB1dGVVc2Vk
QnJlYWR0aE9mTWluTGVuZ3RoKGRpcmVjdGlvbiwgbWluVHJhY2tCcmVhZHRoKSk7CiAgICAgICAg
IHRyYWNrLnNldEdyb3d0aExpbWl0KGNvbXB1dGVVc2VkQnJlYWR0aE9mTWF4TGVuZ3RoKGRpcmVj
dGlvbiwgbWF4VHJhY2tCcmVhZHRoLCB0cmFjay5iYXNlU2l6ZSgpKSk7CisgICAgICAgIHRyYWNr
LnNldEluZmluaXRlbHlHcm93YWJsZShmYWxzZSk7CiAKICAgICAgICAgaWYgKHRyYWNrU2l6ZS5p
c0NvbnRlbnRTaXplZCgpKQogICAgICAgICAgICAgc2l6aW5nRGF0YS5jb250ZW50U2l6ZWRUcmFj
a3NJbmRleC5hcHBlbmQoaSk7CkBAIC03MDgsMTQgKzcyMiwxNyBAQCB2b2lkIFJlbmRlckdyaWQ6
OnJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvckl0ZW1zKEdyaWRUcmFj
a1NpemluZwogICAgICAgICAvLyBTcGVjcyBtYW5kYXRlIHRvIGZsb29yIGV4dHJhU3BhY2UgdG8g
MC4gSW5zdGVhZCB3ZSBkaXJlY3RseSBhdm9pZCB0aGUgZnVuY3Rpb24gY2FsbCBpbiB0aG9zZSBj
YXNlcyBhcyBpdCB3aWxsIGJlCiAgICAgICAgIC8vIGEgbm9vcCBpbiB0ZXJtcyBvZiB0cmFjayBz
aXppbmcuCiAgICAgICAgIExheW91dFVuaXQgZXh0cmFTcGFjZSA9ICh0aGlzLT4qc2l6aW5nRnVu
Y3Rpb24pKGdyaWRJdGVtV2l0aFNwYW4uZ3JpZEl0ZW0oKSwgZGlyZWN0aW9uLCBzaXppbmdEYXRh
LmNvbHVtblRyYWNrcykgLSBzcGFubmluZ1RyYWNrc1NpemU7Ci0gICAgICAgIGlmIChleHRyYVNw
YWNlID4gMCkgewotICAgICAgICAgICAgYXV0byogdHJhY2tzVG9Hcm93QmV5b25kR3Jvd3RoTGlt
aXRzID0gc2l6aW5nRGF0YS5ncm93QmV5b25kR3Jvd3RoTGltaXRzVHJhY2tzLmlzRW1wdHkoKSA/
ICZzaXppbmdEYXRhLmZpbHRlcmVkVHJhY2tzIDogJnNpemluZ0RhdGEuZ3Jvd0JleW9uZEdyb3d0
aExpbWl0c1RyYWNrczsKLSAgICAgICAgICAgIGRpc3RyaWJ1dGVTcGFjZVRvVHJhY2tzKHNpemlu
Z0RhdGEuZmlsdGVyZWRUcmFja3MsIHRyYWNrc1RvR3Jvd0JleW9uZEdyb3d0aExpbWl0cywgY29y
cmVjdGVkVHJhY2tTaXplLCBleHRyYVNwYWNlKTsKLSAgICAgICAgfQorICAgICAgICBleHRyYVNw
YWNlID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oZXh0cmFTcGFjZSwgMCk7CisgICAgICAgIGF1dG8q
IHRyYWNrc1RvR3Jvd0JleW9uZEdyb3d0aExpbWl0cyA9IHNpemluZ0RhdGEuZ3Jvd0JleW9uZEdy
b3d0aExpbWl0c1RyYWNrcy5pc0VtcHR5KCkgPyAmc2l6aW5nRGF0YS5maWx0ZXJlZFRyYWNrcyA6
ICZzaXppbmdEYXRhLmdyb3dCZXlvbmRHcm93dGhMaW1pdHNUcmFja3M7CisgICAgICAgIGRpc3Ry
aWJ1dGVTcGFjZVRvVHJhY2tzKHNpemluZ0RhdGEuZmlsdGVyZWRUcmFja3MsIHRyYWNrc1RvR3Jv
d0JleW9uZEdyb3d0aExpbWl0cywgY29ycmVjdGVkVHJhY2tTaXplLCBleHRyYVNwYWNlKTsKICAg
ICB9CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYWNrSW5kZXggOiBzaXppbmdEYXRhLmNvbnRl
bnRTaXplZFRyYWNrc0luZGV4KSB7CiAgICAgICAgIEdyaWRUcmFjayYgdHJhY2sgPSB0cmFja3Nb
dHJhY2tJbmRleF07CisgICAgICAgIGlmICgodHJhY2suKnRyYWNrU2l6ZSkoKSA9PSBpbmZpbml0
eSAmJiB0cmFjay5wbGFubmVkU2l6ZSgpICE9IGluZmluaXR5KQorICAgICAgICAgICAgdHJhY2su
c2V0SW5maW5pdGVseUdyb3dhYmxlKHRydWUpOworICAgICAgICBlbHNlIGlmICh0cmFjay5pbmZp
bml0ZWx5R3Jvd2FibGUoKSkKKyAgICAgICAgICAgIHRyYWNrLnNldEluZmluaXRlbHlHcm93YWJs
ZShmYWxzZSk7CiAgICAgICAgICh0cmFjay4qdHJhY2tHcm93dGhGdW5jdGlvbikodHJhY2sucGxh
bm5lZFNpemUoKSk7CiAgICAgfQogfQpAQCAtNzI0LDM1ICs3NDEsMzkgQEAgc3RhdGljIGJvb2wg
c29ydEJ5R3JpZFRyYWNrR3Jvd3RoUG90ZW50aWFsKGNvbnN0IEdyaWRUcmFjayogdHJhY2sxLCBj
b25zdCBHcmlkVHIKIHsKICAgICAvLyBUaGlzIGNoZWNrIGVuc3VyZXMgdGhhdCB3ZSByZXNwZWN0
IHRoZSBpcnJlZmxleGl2aXR5IHByb3BlcnR5IG9mIHRoZSBzdHJpY3Qgd2VhayBvcmRlcmluZyBy
ZXF1aXJlZCBieSBzdGQ6OnNvcnQKICAgICAvLyAoZm9yYWxsIHg6IE5PVCB4IDwgeCkuCi0gICAg
aWYgKHRyYWNrMS0+Z3Jvd3RoTGltaXRJc0luZmluaXRlKCkgJiYgdHJhY2syLT5ncm93dGhMaW1p
dElzSW5maW5pdGUoKSkKKyAgICBpZiAodHJhY2sxLT5ncm93dGhMaW1pdElzSW5maW5pdGVPclRy
YWNrSXNJbmZpbml0ZWx5R3Jvd2FibGUoKSAmJiB0cmFjazItPmdyb3d0aExpbWl0SXNJbmZpbml0
ZU9yVHJhY2tJc0luZmluaXRlbHlHcm93YWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAodHJhY2sxLT5ncm93dGhMaW1pdElzSW5maW5pdGUoKSB8fCB0cmFjazItPmdyb3d0
aExpbWl0SXNJbmZpbml0ZSgpKQotICAgICAgICByZXR1cm4gdHJhY2syLT5ncm93dGhMaW1pdElz
SW5maW5pdGUoKTsKKyAgICBpZiAodHJhY2sxLT5ncm93dGhMaW1pdElzSW5maW5pdGVPclRyYWNr
SXNJbmZpbml0ZWx5R3Jvd2FibGUoKSB8fCB0cmFjazItPmdyb3d0aExpbWl0SXNJbmZpbml0ZU9y
VHJhY2tJc0luZmluaXRlbHlHcm93YWJsZSgpKQorICAgICAgICByZXR1cm4gdHJhY2syLT5ncm93
dGhMaW1pdElzSW5maW5pdGVPclRyYWNrSXNJbmZpbml0ZWx5R3Jvd2FibGUoKTsKIAogICAgIHJl
dHVybiAodHJhY2sxLT5ncm93dGhMaW1pdCgpIC0gdHJhY2sxLT5iYXNlU2l6ZSgpKSA8ICh0cmFj
azItPmdyb3d0aExpbWl0KCkgLSB0cmFjazItPmJhc2VTaXplKCkpOwogfQogCiB2b2lkIFJlbmRl
ckdyaWQ6OmRpc3RyaWJ1dGVTcGFjZVRvVHJhY2tzKFZlY3RvcjxHcmlkVHJhY2sqPiYgdHJhY2tz
LCBjb25zdCBWZWN0b3I8R3JpZFRyYWNrKj4qIGdyb3dCZXlvbmRHcm93dGhMaW1pdHNUcmFja3Ms
IEFjY3VtdWxhdG9yR2V0dGVyIHRyYWNrR2V0dGVyLCBMYXlvdXRVbml0JiBhdmFpbGFibGVMb2dp
Y2FsU3BhY2UpCiB7Ci0gICAgQVNTRVJUKGF2YWlsYWJsZUxvZ2ljYWxTcGFjZSA+IDApOwotICAg
IHN0ZDo6c29ydCh0cmFja3MuYmVnaW4oKSwgdHJhY2tzLmVuZCgpLCBzb3J0QnlHcmlkVHJhY2tH
cm93dGhQb3RlbnRpYWwpOwotCi0gICAgdW5zaWduZWQgdHJhY2tzU2l6ZSA9IHRyYWNrcy5zaXpl
KCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhY2tzU2l6ZTsgKytpKSB7Ci0g
ICAgICAgIEdyaWRUcmFjayYgdHJhY2sgPSAqdHJhY2tzW2ldOwotICAgICAgICBjb25zdCBMYXlv
dXRVbml0JiB0cmFja0JyZWFkdGggPSAodHJhY2suKnRyYWNrR2V0dGVyKSgpOwotICAgICAgICBi
b29sIGluZmluaXRlR3Jvd3RoUG90ZW50aWFsID0gdHJhY2suZ3Jvd3RoTGltaXRJc0luZmluaXRl
KCk7Ci0gICAgICAgIExheW91dFVuaXQgdHJhY2tHcm93dGhQb3RlbnRpYWwgPSBpbmZpbml0ZUdy
b3d0aFBvdGVudGlhbCA/IHRyYWNrLmdyb3d0aExpbWl0KCkgOiB0cmFjay5ncm93dGhMaW1pdCgp
IC0gdHJhY2tCcmVhZHRoOwotICAgICAgICB0cmFjay50ZW1wU2l6ZSgpID0gdHJhY2tCcmVhZHRo
OwotICAgICAgICAvLyBMZXQncyBhdm9pZCBjb21wdXRpbmcgYXZhaWxhYmxlTG9naWNhbFNwYWNl
U2hhcmUgYXMgbXVjaCBhcyBwb3NzaWJsZSBhcyBpdCdzIGEgaG90IHNwb3QgaW4gcGVyZm9ybWFu
Y2UgdGVzdHMuCi0gICAgICAgIGlmICh0cmFja0dyb3d0aFBvdGVudGlhbCA+IDAgfHwgaW5maW5p
dGVHcm93dGhQb3RlbnRpYWwpIHsKLSAgICAgICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9n
aWNhbFNwYWNlU2hhcmUgPSBhdmFpbGFibGVMb2dpY2FsU3BhY2UgLyAodHJhY2tzU2l6ZSAtIGkp
OwotICAgICAgICAgICAgTGF5b3V0VW5pdCBncm93dGhTaGFyZSA9IGluZmluaXRlR3Jvd3RoUG90
ZW50aWFsID8gYXZhaWxhYmxlTG9naWNhbFNwYWNlU2hhcmUgOiBzdGQ6Om1pbihhdmFpbGFibGVM
b2dpY2FsU3BhY2VTaGFyZSwgdHJhY2tHcm93dGhQb3RlbnRpYWwpOwotICAgICAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShncm93dGhTaGFyZSA+PSAwLCAiV2Ugc2hvdWxkIG5ldmVyIHNocmlu
ayBhbnkgZ3JpZCB0cmFjayBvciBlbHNlIHdlIGNhbid0IGd1YXJhbnRlZSB3ZSBhYmlkZSBieSBv
dXIgbWluLXNpemluZyBmdW5jdGlvbi4gV2UgY2FuIHN0aWxsIGhhdmUgMCBhcyBncm93dGhTaGFy
ZSBpZiB0aGUgYW1vdW50IG9mIHRyYWNrcyBncmVhdGx5IGV4Y2VlZHMgdGhlIGF2YWlsYWJsZUxv
Z2ljYWxTcGFjZS4iKTsKLSAgICAgICAgICAgIHRyYWNrLnRlbXBTaXplKCkgKz0gZ3Jvd3RoU2hh
cmU7Ci0gICAgICAgICAgICBhdmFpbGFibGVMb2dpY2FsU3BhY2UgLT0gZ3Jvd3RoU2hhcmU7Cisg
ICAgQVNTRVJUKGF2YWlsYWJsZUxvZ2ljYWxTcGFjZSA+PSAwKTsKKworICAgIGZvciAoYXV0byog
dHJhY2sgOiB0cmFja3MpCisgICAgICAgIHRyYWNrLT50ZW1wU2l6ZSgpID0gKHRyYWNrLT4qdHJh
Y2tHZXR0ZXIpKCk7CisKKyAgICBpZiAoYXZhaWxhYmxlTG9naWNhbFNwYWNlID4gMCkgeworICAg
ICAgICBzdGQ6OnNvcnQodHJhY2tzLmJlZ2luKCksIHRyYWNrcy5lbmQoKSwgc29ydEJ5R3JpZFRy
YWNrR3Jvd3RoUG90ZW50aWFsKTsKKworICAgICAgICB1bnNpZ25lZCB0cmFja3NTaXplID0gdHJh
Y2tzLnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRyYWNrc1NpemU7
ICsraSkgeworICAgICAgICAgICAgR3JpZFRyYWNrJiB0cmFjayA9ICp0cmFja3NbaV07CisgICAg
ICAgICAgICBjb25zdCBMYXlvdXRVbml0JiB0cmFja0JyZWFkdGggPSAodHJhY2suKnRyYWNrR2V0
dGVyKSgpOworICAgICAgICAgICAgYm9vbCBpbmZpbml0ZUdyb3d0aFBvdGVudGlhbCA9IHRyYWNr
Lmdyb3d0aExpbWl0SXNJbmZpbml0ZU9yVHJhY2tJc0luZmluaXRlbHlHcm93YWJsZSgpOworICAg
ICAgICAgICAgTGF5b3V0VW5pdCB0cmFja0dyb3d0aFBvdGVudGlhbCA9IGluZmluaXRlR3Jvd3Ro
UG90ZW50aWFsID8gdHJhY2suZ3Jvd3RoTGltaXQoKSA6IHRyYWNrLmdyb3d0aExpbWl0KCkgLSB0
cmFja0JyZWFkdGg7CisgICAgICAgICAgICAvLyBMZXQncyBhdm9pZCBjb21wdXRpbmcgYXZhaWxh
YmxlTG9naWNhbFNwYWNlU2hhcmUgYXMgbXVjaCBhcyBwb3NzaWJsZSBhcyBpdCdzIGEgaG90IHNw
b3QgaW4gcGVyZm9ybWFuY2UgdGVzdHMuCisgICAgICAgICAgICBpZiAodHJhY2tHcm93dGhQb3Rl
bnRpYWwgPiAwIHx8IGluZmluaXRlR3Jvd3RoUG90ZW50aWFsKSB7CisgICAgICAgICAgICAgICAg
TGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsU3BhY2VTaGFyZSA9IGF2YWlsYWJsZUxvZ2ljYWxT
cGFjZSAvICh0cmFja3NTaXplIC0gaSk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBncm93
dGhTaGFyZSA9IGluZmluaXRlR3Jvd3RoUG90ZW50aWFsID8gYXZhaWxhYmxlTG9naWNhbFNwYWNl
U2hhcmUgOiBzdGQ6Om1pbihhdmFpbGFibGVMb2dpY2FsU3BhY2VTaGFyZSwgdHJhY2tHcm93dGhQ
b3RlbnRpYWwpOworICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZ3Jvd3RoU2hh
cmUgPj0gMCwgIldlIHNob3VsZCBuZXZlciBzaHJpbmsgYW55IGdyaWQgdHJhY2sgb3IgZWxzZSB3
ZSBjYW4ndCBndWFyYW50ZWUgd2UgYWJpZGUgYnkgb3VyIG1pbi1zaXppbmcgZnVuY3Rpb24uIFdl
IGNhbiBzdGlsbCBoYXZlIDAgYXMgZ3Jvd3RoU2hhcmUgaWYgdGhlIGFtb3VudCBvZiB0cmFja3Mg
Z3JlYXRseSBleGNlZWRzIHRoZSBhdmFpbGFibGVMb2dpY2FsU3BhY2UuIik7CisgICAgICAgICAg
ICAgICAgdHJhY2sudGVtcFNpemUoKSArPSBncm93dGhTaGFyZTsKKyAgICAgICAgICAgICAgICBh
dmFpbGFibGVMb2dpY2FsU3BhY2UgLT0gZ3Jvd3RoU2hhcmU7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTc2Nyw3ICs3ODgsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OmRpc3Ry
aWJ1dGVTcGFjZVRvVHJhY2tzKFZlY3RvcjxHcmlkVHJhY2sqPiYgdHJhY2tzLCBjb25zdCBWZWN0
bwogICAgIH0KIAogICAgIGZvciAoYXV0byogdHJhY2sgOiB0cmFja3MpCi0gICAgICAgIHRyYWNr
LT5zZXRQbGFubmVkU2l6ZShzdGQ6Om1heCh0cmFjay0+cGxhbm5lZFNpemUoKSwgdHJhY2stPnRl
bXBTaXplKCkpKTsKKyAgICAgICAgdHJhY2stPnNldFBsYW5uZWRTaXplKHRyYWNrLT5wbGFubmVk
U2l6ZSgpID09IGluZmluaXR5ID8gdHJhY2stPnRlbXBTaXplKCkgOiBzdGQ6Om1heCh0cmFjay0+
cGxhbm5lZFNpemUoKSwgdHJhY2stPnRlbXBTaXplKCkpKTsKIH0KIAogI2lmbmRlZiBOREVCVUcK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4MzgxNDUxZjI2YjNmNjY1N2Q4NzRiNWFhOWFiZDJkMTEzZDEzODQ2Li5iZjk0ZjUz
ZDNkZjA1MGJkMjAwYTQ5M2YxNTM3MDUwYWQxMDYzYWU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTUtMDQtMDggIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0NTUyBHcmlkIExheW91dF0gU3VwcG9ydCBtYXJraW5nL3VubWFya2luZyB0cmFj
a3MgYXMgaW5maW5pdGVseSBncm93YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTmV3IHRlc3QgdGhhdCB0byBjaGVjayB0aGF0IHRyYWNrcyB3aG9z
ZSBncm93dGggbGltaXQgY2hhbmdlcyBmcm9tCisgICAgICAgIGluZmluaXRlIHRvIGZpbml0ZSB3
aGVuIGV2YWx1YXRpbmcgImludHJpbnNpYyBtYXhpbXVtcyIgYXJlIG1hcmtlZAorICAgICAgICBh
cyBpbmZpbml0ZWx5IGdyb3dhYmxlIGZvciB0aGUgIm1heC1jb250ZW50IG1heGltdW1zIiBzdGVw
LgorCisgICAgICAgICogZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbWFyay1hcy1pbmZpbml0ZWx5LWdy
b3dhYmxlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MtZ3JpZC1sYXlv
dXQvbWFyay1hcy1pbmZpbml0ZWx5LWdyb3dhYmxlLmh0bWw6IEFkZGVkLgorCiAyMDE1LTAyLTI1
ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtD
U1MgR3JpZCBMYXlvdXRdIFVwZGF0ZSB0cmFjayBzaXplcyBhZnRlciBkaXN0cmlidXRpbmcgZXh0
cmEgc3BhY2UKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L21h
cmstYXMtaW5maW5pdGVseS1ncm93YWJsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy1ncmlkLWxheW91dC9tYXJrLWFzLWluZmluaXRlbHktZ3Jvd2FibGUtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjU4MTE5YWRiMTFlN2QzMzAyMDlhYWE2MjBhZGY5MGEzYzIyNzI1MTYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9tYXJrLWFz
LWluZmluaXRlbHktZ3Jvd2FibGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1BBU1Mg
d2luZG93LmdldENvbXB1dGVkU3R5bGUoZ3JpZEF1dG9BbmRBdXRvLCAnJykuZ2V0UHJvcGVydHlW
YWx1ZSgnLXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNvbHVtbnMnKSBpcyAiMzBweCA3MHB4IgorUEFT
UyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShncmlkQXV0b0FuZEF1dG8sICcnKS5nZXRQcm9wZXJ0
eVZhbHVlKCctd2Via2l0LWdyaWQtdGVtcGxhdGUtcm93cycpIGlzICIxMHB4IgorUEFTUyB3aW5k
b3cuZ2V0Q29tcHV0ZWRTdHlsZShncmlkRml4ZWRNYXhDb250ZW50QW5kRml4ZWRNYXhDb250ZW50
LCAnJykuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNvbHVtbnMnKSBp
cyAiMjBweCA4MHB4IgorUEFTUyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShncmlkRml4ZWRNYXhD
b250ZW50QW5kRml4ZWRNYXhDb250ZW50LCAnJykuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1n
cmlkLXRlbXBsYXRlLXJvd3MnKSBpcyAiMTBweCIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorWCBYCitYWFhYWFggWFhYCitYWAorWFhYWCBYIFhYWApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbWFyay1hcy1pbmZp
bml0ZWx5LWdyb3dhYmxlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9t
YXJrLWFzLWluZmluaXRlbHktZ3Jvd2FibGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OTUzNmZlYjRjZmQ0
YjUyOGM2ZGI3ZWQyZmU3YWY1YTU5MGQyZWJlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbWFyay1hcy1pbmZpbml0ZWx5LWdyb3dhYmxlLmh0bWwK
QEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aGVhZD4KKzxsaW5rIGhyZWY9InJl
c291cmNlcy9ncmlkLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ii8+Cis8c3R5bGU+CisuZ3JpZCB7Cisg
ICAgZm9udDogMTBweC8xIEFoZW07Cit9CisuZ3JpZEF1dG9BbmRBdXRvIHsKKyAgICAtd2Via2l0
LWdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBhdXRvOworfQorCisuZ3JpZEZpeGVkTWF4Q29u
dGVudEFuZEZpeGVkTWF4Q29udGVudCB7CisgICAgLXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNvbHVt
bnM6IG1pbm1heCgyMHB4LCAtd2Via2l0LW1heC1jb250ZW50KSBtaW5tYXgoMTBweCwgLXdlYmtp
dC1tYXgtY29udGVudCk7Cit9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9ncmlkLWRlZmluaXRpb25zLXBhcnNpbmctdXRpbHMuanMiPjwvc2NyaXB0PgorCis8
ZGl2IGNsYXNzPSJncmlkIGdyaWRBdXRvQW5kQXV0byIgaWQ9ImdyaWRBdXRvQW5kQXV0byI+Cisg
ICAgPGRpdiBjbGFzcz0iZmlyc3RSb3dGaXJzdENvbHVtbiI+WCBYPC9kaXY+CisgICAgPGRpdiBj
bGFzcz0iZmlyc3RSb3dCb3RoQ29sdW1uIj5YWFhYWFggWFhYPC9kaXY+Cis8L2Rpdj4KKworPGRp
diBjbGFzcz0iZ3JpZCBncmlkRml4ZWRNYXhDb250ZW50QW5kRml4ZWRNYXhDb250ZW50IiBpZD0i
Z3JpZEZpeGVkTWF4Q29udGVudEFuZEZpeGVkTWF4Q29udGVudCI+CisgICAgPGRpdiBjbGFzcz0i
Zmlyc3RSb3dGaXJzdENvbHVtbiI+WFg8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJmaXJzdFJvd0Jv
dGhDb2x1bW4iPlhYWFggWCBYWFg8L2Rpdj4KKzwvZGl2PgorCis8c2NyaXB0PgordGVzdEdyaWRU
ZW1wbGF0ZXNWYWx1ZXMoZ3JpZEF1dG9BbmRBdXRvLCAiMzBweCA3MHB4IiwgIjEwcHgiKTsKK3Rl
c3RHcmlkVGVtcGxhdGVzVmFsdWVzKGdyaWRGaXhlZE1heENvbnRlbnRBbmRGaXhlZE1heENvbnRl
bnQsICIyMHB4IDgwcHgiLCAiMTBweCIpOworPC9zY3JpcHQ+CisKKzwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250519</attachid>
            <date>2015-04-10 07:48:19 -0700</date>
            <delta_ts>2015-04-10 09:28:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141431-20150410164726.patch</filename>
            <type>text/plain</type>
            <size>20058</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ3MTE5NmE3YzgwZDY3
N2JmNjhjMTU3NmVmNmQzMDZhMDE0NThhZS4uMzcxNDQ1YmI2ZjljNzkyNTE2YzE0M2UwYTAzYjFl
NmY1YjFkYmQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA0LTEwICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtDU1MgR3Jp
ZCBMYXlvdXRdIFN1cHBvcnQgbWFya2luZy91bm1hcmtpbmcgdHJhY2tzIGFzIGluZmluaXRlbHkg
Z3Jvd2FibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MTQzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFzIGV4cGxhaW5lZCBoZXJlCisgICAgICAgIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMv
UHVibGljL3d3dy1zdHlsZS8yMDE0TWFyLzA1MTIuaHRtbCB3ZQorICAgICAgICBzb21ldGltZXMg
bmVlZCB0byBjb25zaWRlciB0aGF0IHNvbWUgdHJhY2tzIGFyZSBpbmZpbml0ZWx5CisgICAgICAg
IGdyb3dhYmxlIGV2ZW4gd2hlbiB0aGV5IGFyZSByZWFsbHkgbm90LCBpbiBvcmRlciB0byBwcm9k
dWNlIG1vcmUKKyAgICAgICAgIm5hdHVyYWwiIHJlc3VsdHMuCisKKyAgICAgICAgRm9yIGV4YW1w
bGUgdGhlIGZvbGxvd2luZyBjYXNlOgorICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczog
YXV0byBhdXRvOworICAgICAgICAgIGl0ZW0gMSBpbiBjb2x1bW4gMSB3aXRoIG1pbi1jb250ZW50
ID0gbWF4LWNvbnRlbnQgPSAxMHB4OworICAgICAgICAgIGl0ZW0gMiBpbiBjb2x1bW5zIDEtMiB3
aXRoIG1pbi1jb250ZW50ID0gMzAsIG1heC1jb250ZW50ID0gMTAwcHg7CisKKyAgICAgICAgd2ls
bCBwcm9kdWNlICg0NXB4LCA1NXB4KSB3aXRob3V0IHRoaXMgcGF0Y2guIEJ1dCBjb25zaWRlcmlu
ZyB0aGUKKyAgICAgICAgc2Vjb25kIGNvbHVtbiBhcyBpbmZpbml0ZWx5IGdyb3dhYmxlIHRoZSBy
ZXN1bHQgaXMgKDEwcHgsIDkwcHgpLCBhCisgICAgICAgIG1vcmUgIm5hdHVyYWwiIHJlc3VsdCBi
ZWNhdXNlIGNvbHVtbiAxIGp1c3QgbmVlZHMgdG8gYmUgMTBweCB0bworICAgICAgICBhY2NvbW1v
ZGF0ZSBpdGVtIDEuIEZyb20gbm93IG9uIHdlIGNhbiBmbGFnIEdyaWRUcmFja3Mgc28gdGhhdAor
ICAgICAgICB0aGV5IGNhbiBpbmZpbml0ZWx5IGdyb3cgZXZlbiB3aGVuIHRoZSBncm93dGggbGlt
aXQgaXMgZmluaXRlLgorCisgICAgICAgIEFwYXJ0IGZyb20gdGhhdCBkaXN0cmlidXRlU3BhY2VU
b1RyYWNrcygpIGlzIG5vdyB1bmNvbmRpdGlvbmFsbHkKKyAgICAgICAgY2FsbGVkIGV2ZW4gdGhv
dWdoIHRoZSBleHRyYSBzcGFjZSBpcyAwLiBUaGF0J3MgYmVjYXVzZSBpdAorICAgICAgICBjb21w
dXRlcyB0aGUgcGxhbm5lZFNpemUgdmFsdWUuCisKKyAgICAgICAgVGVzdDogZmFzdC9jc3MtZ3Jp
ZC1sYXlvdXQvbWFyay1hcy1pbmZpbml0ZWx5LWdyb3dhYmxlLmh0bWwKKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFjazo6aW5m
aW5pdGVHcm93dGhQb3RlbnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrOjppbmZp
bml0ZWx5R3Jvd2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrOjpzZXRJbmZpbml0
ZWx5R3Jvd2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y29tcHV0ZVVzZWRC
cmVhZHRoT2ZHcmlkVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnRyYWNr
U2l6ZUZvclRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UpOiBVcGRhdGVkIHdpdGggbmV3IHBoYXNl
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6c2hvdWxkUHJvY2Vzc1RyYWNrRm9yVHJh
Y2tTaXplQ29tcHV0YXRpb25QaGFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
R3JpZDo6dHJhY2tTaG91bGRHcm93QmV5b25kR3Jvd3RoTGltaXRzRm9yVHJhY2tTaXplQ29tcHV0
YXRpb25QaGFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6dXBkYXRl
VHJhY2tTaXplRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyR3JpZDo6Y3VycmVudEl0ZW1TaXplRm9yVHJhY2tTaXplQ29tcHV0YXRp
b25QaGFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6bWFya0FzSW5m
aW5pdGVseUdyb3dhYmxlRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZSk6CisgICAgICAgIE5l
dyBoZWxwZXIgbWV0aG9kIHdoaWNoIGRvZXMgdGhlIG1hcmsvdW5tYXJrIGp1c3QgZm9yIGdyb3d0
aCBsaW1pdHMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpyZXNvbHZlQ29udGVudEJh
c2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpzb3J0
QnlHcmlkVHJhY2tHcm93dGhQb3RlbnRpYWwpOiBVc2UKKyAgICAgICAgaW5maW5pdGVHcm93dGhQ
b3RlbnRpYWwoKSBmb3Igc29ydGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmRp
c3RyaWJ1dGVTcGFjZVRvVHJhY2tzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5o
OgorCiAyMDE1LTA0LTA5ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtDU1MgR3JpZCBMYXlvdXRdIEZpeCByYXcgZnVuY3Rpb24gcG9pbnRlciB1
c2FnZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAppbmRleCAwNGQyNWM0
Nzk3NmM0MDA3MzJhODQzYTg3MmZiZTFmMmVkNDNkMWIyLi40NWQyYzBlZjBhMWVmMDU5ZjI1MTk1
YzM4OTYwMDFhNzQ1NjM5YWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQu
Y3BwCkBAIC03Myw2ICs3MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2dyb3d0aExp
bWl0ID09IGluZmluaXR5OwogICAgIH0KIAorICAgIGJvb2wgaW5maW5pdGVHcm93dGhQb3RlbnRp
YWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdyb3d0aExpbWl0SXNJbmZpbml0ZSgp
IHx8IG1faW5maW5pdGVseUdyb3dhYmxlOworICAgIH0KKwogICAgIGNvbnN0IExheW91dFVuaXQm
IGdyb3d0aExpbWl0SWZOb3RJbmZpbml0ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aXNHcm93dGhMaW1pdEJpZ2dlclRoYW5CYXNlU2l6ZSgpKTsKQEAgLTg4LDYgKzkzLDEzIEBAIHB1
YmxpYzoKIAogICAgIExheW91dFVuaXQmIHRlbXBTaXplKCkgeyByZXR1cm4gbV90ZW1wU2l6ZTsg
fQogCisgICAgYm9vbCBpbmZpbml0ZWx5R3Jvd2FibGUoKSBjb25zdCB7IHJldHVybiBtX2luZmlu
aXRlbHlHcm93YWJsZTsgfQorCisgICAgdm9pZCBzZXRJbmZpbml0ZWx5R3Jvd2FibGUoYm9vbCBp
bmZpbml0ZWx5R3Jvd2FibGUpCisgICAgeworICAgICAgICBtX2luZmluaXRlbHlHcm93YWJsZSA9
IGluZmluaXRlbHlHcm93YWJsZTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgYm9vbCBpc0dyb3d0
aExpbWl0QmlnZ2VyVGhhbkJhc2VTaXplKCkgY29uc3QgeyByZXR1cm4gZ3Jvd3RoTGltaXRJc0lu
ZmluaXRlKCkgfHwgbV9ncm93dGhMaW1pdCA+PSBtX2Jhc2VTaXplOyB9CiAKQEAgLTEwMSw2ICsx
MTMsNyBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgbV9ncm93dGhMaW1pdCB7IDAgfTsKICAg
ICBMYXlvdXRVbml0IG1fcGxhbm5lZFNpemUgeyAwIH07CiAgICAgTGF5b3V0VW5pdCBtX3RlbXBT
aXplIHsgMCB9OworICAgIGJvb2wgbV9pbmZpbml0ZWx5R3Jvd2FibGUgeyBmYWxzZSB9OwogfTsK
IAogc3RydWN0IEdyaWRUcmFja0Zvck5vcm1hbGl6YXRpb24gewpAQCAtMzQyLDYgKzM1NSw3IEBA
IHZvaWQgUmVuZGVyR3JpZDo6Y29tcHV0ZVVzZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBkaXJlY3RpCiAKICAgICAgICAgdHJhY2suc2V0QmFzZVNpemUoY29t
cHV0ZVVzZWRCcmVhZHRoT2ZNaW5MZW5ndGgoZGlyZWN0aW9uLCBtaW5UcmFja0JyZWFkdGgpKTsK
ICAgICAgICAgdHJhY2suc2V0R3Jvd3RoTGltaXQoY29tcHV0ZVVzZWRCcmVhZHRoT2ZNYXhMZW5n
dGgoZGlyZWN0aW9uLCBtYXhUcmFja0JyZWFkdGgsIHRyYWNrLmJhc2VTaXplKCkpKTsKKyAgICAg
ICAgdHJhY2suc2V0SW5maW5pdGVseUdyb3dhYmxlKGZhbHNlKTsKIAogICAgICAgICBpZiAodHJh
Y2tTaXplLmlzQ29udGVudFNpemVkKCkpCiAgICAgICAgICAgICBzaXppbmdEYXRhLmNvbnRlbnRT
aXplZFRyYWNrc0luZGV4LmFwcGVuZChpKTsKQEAgLTM3Miw3ICszODYsNyBAQCB2b2lkIFJlbmRl
ckdyaWQ6OmNvbXB1dGVVc2VkQnJlYWR0aE9mR3JpZFRyYWNrcyhHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gZGlyZWN0aQogICAgICAgICAgICAgdHJhY2tzRm9yRGlzdHJpYnV0aW9uW2ldLT5zZXRQ
bGFubmVkU2l6ZSh0cmFja3NGb3JEaXN0cmlidXRpb25baV0tPmJhc2VTaXplKCkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3M8RGlzdHJpYnV0ZVNwYWNlVG9C
YXNlU2l6ZXM+KHRyYWNrc0ZvckRpc3RyaWJ1dGlvbiwgbnVsbHB0ciwgYXZhaWxhYmxlTG9naWNh
bFNwYWNlKTsKKyAgICAgICAgZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3M8TWF4aW1pemVUcmFja3M+
KHRyYWNrc0ZvckRpc3RyaWJ1dGlvbiwgbnVsbHB0ciwgYXZhaWxhYmxlTG9naWNhbFNwYWNlKTsK
IAogICAgICAgICBmb3IgKGF1dG8qIHRyYWNrIDogdHJhY2tzRm9yRGlzdHJpYnV0aW9uKQogICAg
ICAgICAgICAgdHJhY2stPnNldEJhc2VTaXplKHRyYWNrLT5wbGFubmVkU2l6ZSgpKTsKQEAgLTY3
NywxMiArNjkxLDExIEBAIGNvbnN0IExheW91dFVuaXQmIFJlbmRlckdyaWQ6OnRyYWNrU2l6ZUZv
clRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UoVHJhY2tTaXplQ29tCiAgICAgc3dpdGNoIChwaGFz
ZSkgewogICAgIGNhc2UgUmVzb2x2ZUludHJpbnNpY01pbmltdW1zOgogICAgIGNhc2UgUmVzb2x2
ZU1heENvbnRlbnRNaW5pbXVtczoKKyAgICBjYXNlIE1heGltaXplVHJhY2tzOgogICAgICAgICBy
ZXR1cm4gdHJhY2suYmFzZVNpemUoKTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZXNvbHZl
SW50cmluc2ljTWF4aW11bXM6CiAgICAgY2FzZSBSZXNvbHZlTWF4Q29udGVudE1heGltdW1zOgog
ICAgICAgICByZXR1cm4gcmVzdHJpY3Rpb24gPT0gQWxsb3dJbmZpbml0eSA/IHRyYWNrLmdyb3d0
aExpbWl0KCkgOiB0cmFjay5ncm93dGhMaW1pdElmTm90SW5maW5pdGUoKTsKLSAgICAgICAgYnJl
YWs7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03MDAsNiArNzEzLDkg
QEAgYm9vbCBSZW5kZXJHcmlkOjpzaG91bGRQcm9jZXNzVHJhY2tGb3JUcmFja1NpemVDb21wdXRh
dGlvblBoYXNlKFRyYWNrU2l6ZUNvbXB1dGEKICAgICAgICAgcmV0dXJuIHRyYWNrU2l6ZS5oYXNN
aW5Pck1heENvbnRlbnRNYXhUcmFja0JyZWFkdGgoKTsKICAgICBjYXNlIFJlc29sdmVNYXhDb250
ZW50TWF4aW11bXM6CiAgICAgICAgIHJldHVybiB0cmFja1NpemUuaGFzTWF4Q29udGVudE1heFRy
YWNrQnJlYWR0aCgpOworICAgIGNhc2UgTWF4aW1pemVUcmFja3M6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC03MTYsMTIgKzczMiwzNyBAQCBib29sIFJlbmRlckdyaWQ6OnRy
YWNrU2hvdWxkR3Jvd0JleW9uZEdyb3d0aExpbWl0c0ZvclRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhh
c2UoVAogICAgIGNhc2UgUmVzb2x2ZUludHJpbnNpY01heGltdW1zOgogICAgIGNhc2UgUmVzb2x2
ZU1heENvbnRlbnRNYXhpbXVtczoKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBNYXhp
bWl6ZVRyYWNrczoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK3ZvaWQgUmVuZGVyR3JpZDo6bWFya0FzSW5maW5pdGVseUdyb3dhYmxlRm9y
VHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZShUcmFja1NpemVDb21wdXRhdGlvblBoYXNlIHBoYXNl
LCBHcmlkVHJhY2smIHRyYWNrKQoreworICAgIHN3aXRjaCAocGhhc2UpIHsKKyAgICBjYXNlIFJl
c29sdmVJbnRyaW5zaWNNaW5pbXVtczoKKyAgICBjYXNlIFJlc29sdmVNYXhDb250ZW50TWluaW11
bXM6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlc29sdmVJbnRyaW5zaWNNYXhpbXVtczoK
KyAgICAgICAgaWYgKHRyYWNrU2l6ZUZvclRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UocGhhc2Us
IHRyYWNrLCBBbGxvd0luZmluaXR5KSA9PSBpbmZpbml0eSAgJiYgdHJhY2sucGxhbm5lZFNpemUo
KSAhPSBpbmZpbml0eSkKKyAgICAgICAgICAgIHRyYWNrLnNldEluZmluaXRlbHlHcm93YWJsZSh0
cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVzb2x2ZU1heENvbnRlbnRNYXhpbXVt
czoKKyAgICAgICAgaWYgKHRyYWNrLmluZmluaXRlbHlHcm93YWJsZSgpKQorICAgICAgICAgICAg
dHJhY2suc2V0SW5maW5pdGVseUdyb3dhYmxlKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgTWF4aW1pemVUcmFja3M6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZv
aWQgUmVuZGVyR3JpZDo6dXBkYXRlVHJhY2tTaXplRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFz
ZShUcmFja1NpemVDb21wdXRhdGlvblBoYXNlIHBoYXNlLCBHcmlkVHJhY2smIHRyYWNrKQogewog
ICAgIHN3aXRjaCAocGhhc2UpIHsKQEAgLTczMyw2ICs3NzQsOSBAQCB2b2lkIFJlbmRlckdyaWQ6
OnVwZGF0ZVRyYWNrU2l6ZUZvclRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UoVHJhY2tTaXplQ29t
cHV0YXRpbwogICAgIGNhc2UgUmVzb2x2ZU1heENvbnRlbnRNYXhpbXVtczoKICAgICAgICAgdHJh
Y2suc2V0R3Jvd3RoTGltaXQodHJhY2sucGxhbm5lZFNpemUoKSk7CiAgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIE1heGltaXplVHJhY2tzOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
NzQ3LDYgKzc5MSw5IEBAIExheW91dFVuaXQgUmVuZGVyR3JpZDo6Y3VycmVudEl0ZW1TaXplRm9y
VHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZShUcmFja1NpemVDb21wCiAgICAgY2FzZSBSZXNvbHZl
TWF4Q29udGVudE1pbmltdW1zOgogICAgIGNhc2UgUmVzb2x2ZU1heENvbnRlbnRNYXhpbXVtczoK
ICAgICAgICAgcmV0dXJuIG1heENvbnRlbnRGb3JDaGlsZChncmlkSXRlbSwgZGlyZWN0aW9uLCBj
b2x1bW5UcmFja3MpOworICAgIGNhc2UgTWF4aW1pemVUcmFja3M6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTc4OCwyNSArODM1LDE0IEBAIHZvaWQgUmVuZGVyR3JpZDo6cmVzb2x2
ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMoR3JpZFRyYWNrU2l6aW5n
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBMYXlvdXRVbml0IGV4dHJhU3BhY2Ug
PSBjdXJyZW50SXRlbVNpemVGb3JUcmFja1NpemVDb21wdXRhdGlvblBoYXNlKHBoYXNlLCBncmlk
SXRlbVdpdGhTcGFuLmdyaWRJdGVtKCksIGRpcmVjdGlvbiwgc2l6aW5nRGF0YS5jb2x1bW5UcmFj
a3MpIC0gc3Bhbm5pbmdUcmFja3NTaXplOwotICAgICAgICAvLyBTcGVjcyBtYW5kYXRlIHRvIGZs
b29yIGV4dHJhU3BhY2UgdG8gMC4gSW5zdGVhZCB3ZSBkaXJlY3RseSBhdm9pZCB0aGUgZnVuY3Rp
b24gY2FsbCBpbiB0aG9zZSBjYXNlcyBhcyBpdCB3aWxsIGJlCi0gICAgICAgIC8vIGEgbm9vcCBp
biB0ZXJtcyBvZiB0cmFjayBzaXppbmcuCi0gICAgICAgIGlmIChleHRyYVNwYWNlID4gMCkgewot
ICAgICAgICAgICAgYXV0byogdHJhY2tzVG9Hcm93QmV5b25kR3Jvd3RoTGltaXRzID0gc2l6aW5n
RGF0YS5ncm93QmV5b25kR3Jvd3RoTGltaXRzVHJhY2tzLmlzRW1wdHkoKSA/ICZzaXppbmdEYXRh
LmZpbHRlcmVkVHJhY2tzIDogJnNpemluZ0RhdGEuZ3Jvd0JleW9uZEdyb3d0aExpbWl0c1RyYWNr
czsKLSAgICAgICAgICAgIHN3aXRjaCAocGhhc2UpIHsKLSAgICAgICAgICAgIGNhc2UgUmVzb2x2
ZUludHJpbnNpY01pbmltdW1zOgotICAgICAgICAgICAgY2FzZSBSZXNvbHZlTWF4Q29udGVudE1p
bmltdW1zOgotICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVTcGFjZVRvVHJhY2tzPERpc3RyaWJ1
dGVTcGFjZVRvQmFzZVNpemVzPihzaXppbmdEYXRhLmZpbHRlcmVkVHJhY2tzLCB0cmFja3NUb0dy
b3dCZXlvbmRHcm93dGhMaW1pdHMsIGV4dHJhU3BhY2UpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBSZXNvbHZlSW50cmluc2ljTWF4aW11bXM6Ci0gICAgICAgICAg
ICBjYXNlIFJlc29sdmVNYXhDb250ZW50TWF4aW11bXM6Ci0gICAgICAgICAgICAgICAgZGlzdHJp
YnV0ZVNwYWNlVG9UcmFja3M8RGlzdHJpYnV0ZVNwYWNlVG9Hcm93dGhMaW1pdHM+KHNpemluZ0Rh
dGEuZmlsdGVyZWRUcmFja3MsIHRyYWNrc1RvR3Jvd0JleW9uZEdyb3d0aExpbWl0cywgZXh0cmFT
cGFjZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
KyAgICAgICAgZXh0cmFTcGFjZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KGV4dHJhU3BhY2UsIDAp
OworICAgICAgICBhdXRvKiB0cmFja3NUb0dyb3dCZXlvbmRHcm93dGhMaW1pdHMgPSBzaXppbmdE
YXRhLmdyb3dCZXlvbmRHcm93dGhMaW1pdHNUcmFja3MuaXNFbXB0eSgpID8gJnNpemluZ0RhdGEu
ZmlsdGVyZWRUcmFja3MgOiAmc2l6aW5nRGF0YS5ncm93QmV5b25kR3Jvd3RoTGltaXRzVHJhY2tz
OworICAgICAgICBkaXN0cmlidXRlU3BhY2VUb1RyYWNrczxwaGFzZT4oc2l6aW5nRGF0YS5maWx0
ZXJlZFRyYWNrcywgdHJhY2tzVG9Hcm93QmV5b25kR3Jvd3RoTGltaXRzLCBleHRyYVNwYWNlKTsK
ICAgICB9CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYWNrSW5kZXggOiBzaXppbmdEYXRhLmNv
bnRlbnRTaXplZFRyYWNrc0luZGV4KSB7CiAgICAgICAgIEdyaWRUcmFjayYgdHJhY2sgPSB0cmFj
a3NbdHJhY2tJbmRleF07CisgICAgICAgIG1hcmtBc0luZmluaXRlbHlHcm93YWJsZUZvclRyYWNr
U2l6ZUNvbXB1dGF0aW9uUGhhc2UocGhhc2UsIHRyYWNrKTsKICAgICAgICAgdXBkYXRlVHJhY2tT
aXplRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZShwaGFzZSwgdHJhY2spOwogICAgIH0KIH0K
QEAgLTgxNSw0NCArODUxLDQwIEBAIHN0YXRpYyBib29sIHNvcnRCeUdyaWRUcmFja0dyb3d0aFBv
dGVudGlhbChjb25zdCBHcmlkVHJhY2sqIHRyYWNrMSwgY29uc3QgR3JpZFRyCiB7CiAgICAgLy8g
VGhpcyBjaGVjayBlbnN1cmVzIHRoYXQgd2UgcmVzcGVjdCB0aGUgaXJyZWZsZXhpdml0eSBwcm9w
ZXJ0eSBvZiB0aGUgc3RyaWN0IHdlYWsgb3JkZXJpbmcgcmVxdWlyZWQgYnkgc3RkOjpzb3J0CiAg
ICAgLy8gKGZvcmFsbCB4OiBOT1QgeCA8IHgpLgotICAgIGlmICh0cmFjazEtPmdyb3d0aExpbWl0
SXNJbmZpbml0ZSgpICYmIHRyYWNrMi0+Z3Jvd3RoTGltaXRJc0luZmluaXRlKCkpCisgICAgaWYg
KHRyYWNrMS0+aW5maW5pdGVHcm93dGhQb3RlbnRpYWwoKSAmJiB0cmFjazItPmluZmluaXRlR3Jv
d3RoUG90ZW50aWFsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICh0cmFjazEt
Pmdyb3d0aExpbWl0SXNJbmZpbml0ZSgpIHx8IHRyYWNrMi0+Z3Jvd3RoTGltaXRJc0luZmluaXRl
KCkpCi0gICAgICAgIHJldHVybiB0cmFjazItPmdyb3d0aExpbWl0SXNJbmZpbml0ZSgpOworICAg
IGlmICh0cmFjazEtPmluZmluaXRlR3Jvd3RoUG90ZW50aWFsKCkgfHwgdHJhY2syLT5pbmZpbml0
ZUdyb3d0aFBvdGVudGlhbCgpKQorICAgICAgICByZXR1cm4gdHJhY2syLT5pbmZpbml0ZUdyb3d0
aFBvdGVudGlhbCgpOwogCiAgICAgcmV0dXJuICh0cmFjazEtPmdyb3d0aExpbWl0KCkgLSB0cmFj
azEtPmJhc2VTaXplKCkpIDwgKHRyYWNrMi0+Z3Jvd3RoTGltaXQoKSAtIHRyYWNrMi0+YmFzZVNp
emUoKSk7CiB9CiAKLXRlbXBsYXRlIDxSZW5kZXJHcmlkOjpEaXN0cmlidXRlU3BhY2VQaGFzZSBw
aGFzZT4KK3RlbXBsYXRlIDxSZW5kZXJHcmlkOjpUcmFja1NpemVDb21wdXRhdGlvblBoYXNlIHBo
YXNlPgogdm9pZCBSZW5kZXJHcmlkOjpkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyhWZWN0b3I8R3Jp
ZFRyYWNrKj4mIHRyYWNrcywgY29uc3QgVmVjdG9yPEdyaWRUcmFjayo+KiBncm93QmV5b25kR3Jv
d3RoTGltaXRzVHJhY2tzLCBMYXlvdXRVbml0JiBhdmFpbGFibGVMb2dpY2FsU3BhY2UpCiB7Ci0g
ICAgQVNTRVJUKGF2YWlsYWJsZUxvZ2ljYWxTcGFjZSA+IDApOwotICAgIHN0ZDo6c29ydCh0cmFj
a3MuYmVnaW4oKSwgdHJhY2tzLmVuZCgpLCBzb3J0QnlHcmlkVHJhY2tHcm93dGhQb3RlbnRpYWwp
OwotCi0gICAgdW5zaWduZWQgdHJhY2tzU2l6ZSA9IHRyYWNrcy5zaXplKCk7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhY2tzU2l6ZTsgKytpKSB7Ci0gICAgICAgIEdyaWRUcmFj
ayYgdHJhY2sgPSAqdHJhY2tzW2ldOwotICAgICAgICBMYXlvdXRVbml0IHRyYWNrQnJlYWR0aDsK
LSAgICAgICAgc3dpdGNoIChwaGFzZSkgewotICAgICAgICBjYXNlIERpc3RyaWJ1dGVTcGFjZVRv
QmFzZVNpemVzOgotICAgICAgICAgICAgdHJhY2tCcmVhZHRoID0gdHJhY2suYmFzZVNpemUoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERpc3RyaWJ1dGVTcGFjZVRvR3Jvd3Ro
TGltaXRzOgotICAgICAgICAgICAgdHJhY2tCcmVhZHRoID0gdHJhY2suZ3Jvd3RoTGltaXRJZk5v
dEluZmluaXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBib29s
IGluZmluaXRlR3Jvd3RoUG90ZW50aWFsID0gdHJhY2suZ3Jvd3RoTGltaXRJc0luZmluaXRlKCk7
Ci0gICAgICAgIExheW91dFVuaXQgdHJhY2tHcm93dGhQb3RlbnRpYWwgPSBpbmZpbml0ZUdyb3d0
aFBvdGVudGlhbCA/IHRyYWNrLmdyb3d0aExpbWl0KCkgOiB0cmFjay5ncm93dGhMaW1pdCgpIC0g
dHJhY2tCcmVhZHRoOwotICAgICAgICB0cmFjay50ZW1wU2l6ZSgpID0gdHJhY2tCcmVhZHRoOwot
ICAgICAgICAvLyBMZXQncyBhdm9pZCBjb21wdXRpbmcgYXZhaWxhYmxlTG9naWNhbFNwYWNlU2hh
cmUgYXMgbXVjaCBhcyBwb3NzaWJsZSBhcyBpdCdzIGEgaG90IHNwb3QgaW4gcGVyZm9ybWFuY2Ug
dGVzdHMuCi0gICAgICAgIGlmICh0cmFja0dyb3d0aFBvdGVudGlhbCA+IDAgfHwgaW5maW5pdGVH
cm93dGhQb3RlbnRpYWwpIHsKLSAgICAgICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNh
bFNwYWNlU2hhcmUgPSBhdmFpbGFibGVMb2dpY2FsU3BhY2UgLyAodHJhY2tzU2l6ZSAtIGkpOwot
ICAgICAgICAgICAgTGF5b3V0VW5pdCBncm93dGhTaGFyZSA9IGluZmluaXRlR3Jvd3RoUG90ZW50
aWFsID8gYXZhaWxhYmxlTG9naWNhbFNwYWNlU2hhcmUgOiBzdGQ6Om1pbihhdmFpbGFibGVMb2dp
Y2FsU3BhY2VTaGFyZSwgdHJhY2tHcm93dGhQb3RlbnRpYWwpOwotICAgICAgICAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShncm93dGhTaGFyZSA+PSAwLCAiV2Ugc2hvdWxkIG5ldmVyIHNocmluayBh
bnkgZ3JpZCB0cmFjayBvciBlbHNlIHdlIGNhbid0IGd1YXJhbnRlZSB3ZSBhYmlkZSBieSBvdXIg
bWluLXNpemluZyBmdW5jdGlvbi4gV2UgY2FuIHN0aWxsIGhhdmUgMCBhcyBncm93dGhTaGFyZSBp
ZiB0aGUgYW1vdW50IG9mIHRyYWNrcyBncmVhdGx5IGV4Y2VlZHMgdGhlIGF2YWlsYWJsZUxvZ2lj
YWxTcGFjZS4iKTsKLSAgICAgICAgICAgIHRyYWNrLnRlbXBTaXplKCkgKz0gZ3Jvd3RoU2hhcmU7
Ci0gICAgICAgICAgICBhdmFpbGFibGVMb2dpY2FsU3BhY2UgLT0gZ3Jvd3RoU2hhcmU7CisgICAg
QVNTRVJUKGF2YWlsYWJsZUxvZ2ljYWxTcGFjZSA+PSAwKTsKKworICAgIGZvciAoYXV0byogdHJh
Y2sgOiB0cmFja3MpCisgICAgICAgIHRyYWNrLT50ZW1wU2l6ZSgpID0gdHJhY2tTaXplRm9yVHJh
Y2tTaXplQ29tcHV0YXRpb25QaGFzZShwaGFzZSwgKnRyYWNrLCBGb3JiaWRJbmZpbml0eSk7CisK
KyAgICBpZiAoYXZhaWxhYmxlTG9naWNhbFNwYWNlID4gMCkgeworICAgICAgICBzdGQ6OnNvcnQo
dHJhY2tzLmJlZ2luKCksIHRyYWNrcy5lbmQoKSwgc29ydEJ5R3JpZFRyYWNrR3Jvd3RoUG90ZW50
aWFsKTsKKworICAgICAgICB1bnNpZ25lZCB0cmFja3NTaXplID0gdHJhY2tzLnNpemUoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRyYWNrc1NpemU7ICsraSkgeworICAgICAg
ICAgICAgR3JpZFRyYWNrJiB0cmFjayA9ICp0cmFja3NbaV07CisgICAgICAgICAgICBjb25zdCBM
YXlvdXRVbml0JiB0cmFja0JyZWFkdGggPSB0cmFja1NpemVGb3JUcmFja1NpemVDb21wdXRhdGlv
blBoYXNlKHBoYXNlLCB0cmFjaywgRm9yYmlkSW5maW5pdHkpOworICAgICAgICAgICAgYm9vbCBp
bmZpbml0ZUdyb3d0aFBvdGVudGlhbCA9IHRyYWNrLmluZmluaXRlR3Jvd3RoUG90ZW50aWFsKCk7
CisgICAgICAgICAgICBMYXlvdXRVbml0IHRyYWNrR3Jvd3RoUG90ZW50aWFsID0gaW5maW5pdGVH
cm93dGhQb3RlbnRpYWwgPyB0cmFjay5ncm93dGhMaW1pdCgpIDogdHJhY2suZ3Jvd3RoTGltaXQo
KSAtIHRyYWNrQnJlYWR0aDsKKyAgICAgICAgICAgIC8vIExldCdzIGF2b2lkIGNvbXB1dGluZyBh
dmFpbGFibGVMb2dpY2FsU3BhY2VTaGFyZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGFzIGl0J3MgYSBo
b3Qgc3BvdCBpbiBwZXJmb3JtYW5jZSB0ZXN0cy4KKyAgICAgICAgICAgIGlmICh0cmFja0dyb3d0
aFBvdGVudGlhbCA+IDAgfHwgaW5maW5pdGVHcm93dGhQb3RlbnRpYWwpIHsKKyAgICAgICAgICAg
ICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxTcGFjZVNoYXJlID0gYXZhaWxhYmxlTG9n
aWNhbFNwYWNlIC8gKHRyYWNrc1NpemUgLSBpKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0
IGdyb3d0aFNoYXJlID0gaW5maW5pdGVHcm93dGhQb3RlbnRpYWwgPyBhdmFpbGFibGVMb2dpY2Fs
U3BhY2VTaGFyZSA6IHN0ZDo6bWluKGF2YWlsYWJsZUxvZ2ljYWxTcGFjZVNoYXJlLCB0cmFja0dy
b3d0aFBvdGVudGlhbCk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShncm93
dGhTaGFyZSA+PSAwLCAiV2Ugc2hvdWxkIG5ldmVyIHNocmluayBhbnkgZ3JpZCB0cmFjayBvciBl
bHNlIHdlIGNhbid0IGd1YXJhbnRlZSB3ZSBhYmlkZSBieSBvdXIgbWluLXNpemluZyBmdW5jdGlv
bi4gV2UgY2FuIHN0aWxsIGhhdmUgMCBhcyBncm93dGhTaGFyZSBpZiB0aGUgYW1vdW50IG9mIHRy
YWNrcyBncmVhdGx5IGV4Y2VlZHMgdGhlIGF2YWlsYWJsZUxvZ2ljYWxTcGFjZS4iKTsKKyAgICAg
ICAgICAgICAgICB0cmFjay50ZW1wU2l6ZSgpICs9IGdyb3d0aFNoYXJlOworICAgICAgICAgICAg
ICAgIGF2YWlsYWJsZUxvZ2ljYWxTcGFjZSAtPSBncm93dGhTaGFyZTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KIApAQCAtODY3LDcgKzg5OSw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6
ZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdyaWRUcmFjayo+JiB0cmFja3MsIGNvbnN0
IFZlY3RvCiAgICAgfQogCiAgICAgZm9yIChhdXRvKiB0cmFjayA6IHRyYWNrcykKLSAgICAgICAg
dHJhY2stPnNldFBsYW5uZWRTaXplKHN0ZDo6bWF4KHRyYWNrLT5wbGFubmVkU2l6ZSgpLCB0cmFj
ay0+dGVtcFNpemUoKSkpOworICAgICAgICB0cmFjay0+c2V0UGxhbm5lZFNpemUodHJhY2stPnBs
YW5uZWRTaXplKCkgPT0gaW5maW5pdHkgPyB0cmFjay0+dGVtcFNpemUoKSA6IHN0ZDo6bWF4KHRy
YWNrLT5wbGFubmVkU2l6ZSgpLCB0cmFjay0+dGVtcFNpemUoKSkpOwogfQogCiAjaWZuZGVmIE5E
RUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKaW5kZXggYzk3ODFlOWYyNzUz
YzBmYjg0NTU5N2M2NjBiNWQ2OWIwMzJjZGI5ZS4uZjJlMDA1MTY4Nzk2OGY2ZDMxMjE0OGMzNjc0
ODdhNmRhM2E0MWFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdyaWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCkBAIC05
NiwyMSArOTYsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgUmVzb2x2ZU1heENvbnRlbnRNaW5pbXVt
cywKICAgICAgICAgUmVzb2x2ZUludHJpbnNpY01heGltdW1zLAogICAgICAgICBSZXNvbHZlTWF4
Q29udGVudE1heGltdW1zLAotICAgIH07Ci0gICAgZW51bSBEaXN0cmlidXRlU3BhY2VQaGFzZSB7
Ci0gICAgICAgIERpc3RyaWJ1dGVTcGFjZVRvQmFzZVNpemVzLAotICAgICAgICBEaXN0cmlidXRl
U3BhY2VUb0dyb3d0aExpbWl0cywKKyAgICAgICAgTWF4aW1pemVUcmFja3MsCiAgICAgfTsKICAg
ICBzdGF0aWMgY29uc3QgTGF5b3V0VW5pdCYgdHJhY2tTaXplRm9yVHJhY2tTaXplQ29tcHV0YXRp
b25QaGFzZShUcmFja1NpemVDb21wdXRhdGlvblBoYXNlLCBHcmlkVHJhY2smLCBUcmFja1NpemVS
ZXN0cmljdGlvbik7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkUHJvY2Vzc1RyYWNrRm9yVHJhY2tT
aXplQ29tcHV0YXRpb25QaGFzZShUcmFja1NpemVDb21wdXRhdGlvblBoYXNlLCBjb25zdCBHcmlk
VHJhY2tTaXplJik7CiAgICAgc3RhdGljIGJvb2wgdHJhY2tTaG91bGRHcm93QmV5b25kR3Jvd3Ro
TGltaXRzRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZShUcmFja1NpemVDb21wdXRhdGlvblBo
YXNlLCBjb25zdCBHcmlkVHJhY2tTaXplJik7CisgICAgc3RhdGljIHZvaWQgbWFya0FzSW5maW5p
dGVseUdyb3dhYmxlRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZShUcmFja1NpemVDb21wdXRh
dGlvblBoYXNlLCBHcmlkVHJhY2smKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVUcmFja1NpemVG
b3JUcmFja1NpemVDb21wdXRhdGlvblBoYXNlKFRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UsIEdy
aWRUcmFjayYpOwogICAgIExheW91dFVuaXQgY3VycmVudEl0ZW1TaXplRm9yVHJhY2tTaXplQ29t
cHV0YXRpb25QaGFzZShUcmFja1NpemVDb21wdXRhdGlvblBoYXNlLCBSZW5kZXJCb3gmLCBHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24sIFZlY3RvcjxHcmlkVHJhY2s+JiBjb2x1bW5UcmFja3MpOwog
CiAgICAgdHlwZWRlZiBzdHJ1Y3QgR3JpZEl0ZW1zU3Bhbkdyb3VwUmFuZ2UgR3JpZEl0ZW1zU3Bh
bkdyb3VwUmFuZ2U7CiAgICAgdm9pZCByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5j
dGlvbnNGb3JOb25TcGFubmluZ0l0ZW1zKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgY29uc3Qg
R3JpZENvb3JkaW5hdGUmLCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlkVHJhY2smLCBWZWN0b3I8
R3JpZFRyYWNrPiYgY29sdW1uVHJhY2tzKTsKICAgICB0ZW1wbGF0ZSA8VHJhY2tTaXplQ29tcHV0
YXRpb25QaGFzZT4gdm9pZCByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNG
b3JJdGVtcyhHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIEdyaWRTaXppbmdEYXRhJiwgY29uc3Qg
R3JpZEl0ZW1zU3Bhbkdyb3VwUmFuZ2UmKTsKLSAgICB0ZW1wbGF0ZSA8RGlzdHJpYnV0ZVNwYWNl
UGhhc2U+IHZvaWQgZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdyaWRUcmFjayo+Jiwg
Y29uc3QgVmVjdG9yPEdyaWRUcmFjayo+KiBncm93QmV5b25kR3Jvd3RoTGltaXRzVHJhY2tzLCBM
YXlvdXRVbml0JiBhdmFpbGFibGVMb2dpY2FsU3BhY2UpOworICAgIHRlbXBsYXRlIDxUcmFja1Np
emVDb21wdXRhdGlvblBoYXNlPiB2b2lkIGRpc3RyaWJ1dGVTcGFjZVRvVHJhY2tzKFZlY3RvcjxH
cmlkVHJhY2sqPiYsIGNvbnN0IFZlY3RvcjxHcmlkVHJhY2sqPiogZ3Jvd0JleW9uZEdyb3d0aExp
bWl0c1RyYWNrcywgTGF5b3V0VW5pdCYgYXZhaWxhYmxlTG9naWNhbFNwYWNlKTsKIAogICAgIGRv
dWJsZSBjb21wdXRlTm9ybWFsaXplZEZyYWN0aW9uQnJlYWR0aChWZWN0b3I8R3JpZFRyYWNrPiYs
IGNvbnN0IEdyaWRTcGFuJiB0cmFja3NTcGFuLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIExh
eW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFNwYWNlKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU3ZjVmZWY0
ODBkNjI3ZGIwNWMzYjU5NDkxODk3ZDU5OGQxZjhmYWYuLmEyYmFhZGNmODRjMmY4YjcyMDY4OWFl
Njc3YzY3MTNmODIwOGUyNzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNS0wNC0xMCAgU2Vy
Z2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbQ1NTIEdy
aWQgTGF5b3V0XSBTdXBwb3J0IG1hcmtpbmcvdW5tYXJraW5nIHRyYWNrcyBhcyBpbmZpbml0ZWx5
IGdyb3dhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDE0MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBOZXcgdGVzdCB0aGF0IHRvIGNoZWNrIHRoYXQgdHJhY2tzIHdob3NlIGdyb3d0aCBsaW1pdCBj
aGFuZ2VzIGZyb20KKyAgICAgICAgaW5maW5pdGUgdG8gZmluaXRlIHdoZW4gZXZhbHVhdGluZyAi
aW50cmluc2ljIG1heGltdW1zIiBhcmUgbWFya2VkCisgICAgICAgIGFzIGluZmluaXRlbHkgZ3Jv
d2FibGUgZm9yIHRoZSAibWF4LWNvbnRlbnQgbWF4aW11bXMiIHN0ZXAuCisKKyAgICAgICAgKiBm
YXN0L2Nzcy1ncmlkLWxheW91dC9tYXJrLWFzLWluZmluaXRlbHktZ3Jvd2FibGUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy1ncmlkLWxheW91dC9tYXJrLWFzLWluZmlu
aXRlbHktZ3Jvd2FibGUuaHRtbDogQWRkZWQuCisKIDIwMTUtMDQtMTAgIFhhYmllciBSb2RyaWd1
ZXogQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiBhbmQgWW91ZW5uIEZhYmxldCAgPHlvdWVu
bi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIEFkZCB0b3RhbCB0ZXN0IHRlc3Qgb2Yg
U3RyZWFtcyBBUEkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0
L21hcmstYXMtaW5maW5pdGVseS1ncm93YWJsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2Nzcy1ncmlkLWxheW91dC9tYXJrLWFzLWluZmluaXRlbHktZ3Jvd2FibGUtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU4MTE5YWRiMTFlN2QzMzAyMDlhYWE2MjBhZGY5MGEzYzIyNzI1MTYK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9tYXJr
LWFzLWluZmluaXRlbHktZ3Jvd2FibGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1BB
U1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZ3JpZEF1dG9BbmRBdXRvLCAnJykuZ2V0UHJvcGVy
dHlWYWx1ZSgnLXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNvbHVtbnMnKSBpcyAiMzBweCA3MHB4Igor
UEFTUyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShncmlkQXV0b0FuZEF1dG8sICcnKS5nZXRQcm9w
ZXJ0eVZhbHVlKCctd2Via2l0LWdyaWQtdGVtcGxhdGUtcm93cycpIGlzICIxMHB4IgorUEFTUyB3
aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShncmlkRml4ZWRNYXhDb250ZW50QW5kRml4ZWRNYXhDb250
ZW50LCAnJykuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNvbHVtbnMn
KSBpcyAiMjBweCA4MHB4IgorUEFTUyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShncmlkRml4ZWRN
YXhDb250ZW50QW5kRml4ZWRNYXhDb250ZW50LCAnJykuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtp
dC1ncmlkLXRlbXBsYXRlLXJvd3MnKSBpcyAiMTBweCIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorWCBYCitYWFhYWFggWFhYCitYWAorWFhYWCBYIFhY
WApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbWFyay1hcy1p
bmZpbml0ZWx5LWdyb3dhYmxlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91
dC9tYXJrLWFzLWluZmluaXRlbHktZ3Jvd2FibGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OTUzNmZlYjRj
ZmQ0YjUyOGM2ZGI3ZWQyZmU3YWY1YTU5MGQyZWJlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvbWFyay1hcy1pbmZpbml0ZWx5LWdyb3dhYmxlLmh0
bWwKQEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aGVhZD4KKzxsaW5rIGhyZWY9
InJlc291cmNlcy9ncmlkLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ii8+Cis8c3R5bGU+CisuZ3JpZCB7
CisgICAgZm9udDogMTBweC8xIEFoZW07Cit9CisuZ3JpZEF1dG9BbmRBdXRvIHsKKyAgICAtd2Vi
a2l0LWdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBhdXRvOworfQorCisuZ3JpZEZpeGVkTWF4
Q29udGVudEFuZEZpeGVkTWF4Q29udGVudCB7CisgICAgLXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNv
bHVtbnM6IG1pbm1heCgyMHB4LCAtd2Via2l0LW1heC1jb250ZW50KSBtaW5tYXgoMTBweCwgLXdl
YmtpdC1tYXgtY29udGVudCk7Cit9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9ncmlkLWRlZmluaXRpb25zLXBhcnNpbmctdXRpbHMuanMiPjwvc2NyaXB0Pgor
Cis8ZGl2IGNsYXNzPSJncmlkIGdyaWRBdXRvQW5kQXV0byIgaWQ9ImdyaWRBdXRvQW5kQXV0byI+
CisgICAgPGRpdiBjbGFzcz0iZmlyc3RSb3dGaXJzdENvbHVtbiI+WCBYPC9kaXY+CisgICAgPGRp
diBjbGFzcz0iZmlyc3RSb3dCb3RoQ29sdW1uIj5YWFhYWFggWFhYPC9kaXY+Cis8L2Rpdj4KKwor
PGRpdiBjbGFzcz0iZ3JpZCBncmlkRml4ZWRNYXhDb250ZW50QW5kRml4ZWRNYXhDb250ZW50IiBp
ZD0iZ3JpZEZpeGVkTWF4Q29udGVudEFuZEZpeGVkTWF4Q29udGVudCI+CisgICAgPGRpdiBjbGFz
cz0iZmlyc3RSb3dGaXJzdENvbHVtbiI+WFg8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJmaXJzdFJv
d0JvdGhDb2x1bW4iPlhYWFggWCBYWFg8L2Rpdj4KKzwvZGl2PgorCis8c2NyaXB0PgordGVzdEdy
aWRUZW1wbGF0ZXNWYWx1ZXMoZ3JpZEF1dG9BbmRBdXRvLCAiMzBweCA3MHB4IiwgIjEwcHgiKTsK
K3Rlc3RHcmlkVGVtcGxhdGVzVmFsdWVzKGdyaWRGaXhlZE1heENvbnRlbnRBbmRGaXhlZE1heENv
bnRlbnQsICIyMHB4IDgwcHgiLCAiMTBweCIpOworPC9zY3JpcHQ+CisKKzwvYm9keT4K
</data>
<flag name="review"
          id="275309"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>