<?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>24312</bug_id>
          
          <creation_ts>2009-03-02 20:08:56 -0800</creation_ts>
          <short_desc>Hit test through 3d transforms</short_desc>
          <delta_ts>2009-03-19 09:22:54 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>24313</dependson>
    
    <dependson>24317</dependson>
          <blocked>23359</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dino</cc>
    
    <cc>hausmann</cc>
    
    <cc>hyatt</cc>
    
    <cc>kari.hiitola</cc>
    
    <cc>kim.1.gronholm</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>111958</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-02 20:08:56 -0800</bug_when>
    <thetext>We need to have hit testing be aware of 3d transforms, and preserve-3d style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111974</commentid>
    <comment_count>1</comment_count>
      <attachid>28214</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-02 23:39:57 -0800</bug_when>
    <thetext>Created attachment 28214
Patch, changelog.

Testcases will be added once we turn on support for 3d rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112009</commentid>
    <comment_count>2</comment_count>
      <attachid>28224</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-03 09:10:35 -0800</bug_when>
    <thetext>Created attachment 28224
Prequel patch: refactor code into transformFromContainer()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112010</commentid>
    <comment_count>3</comment_count>
      <attachid>28224</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-03-03 09:13:25 -0800</bug_when>
    <thetext>Comment on attachment 28224
Prequel patch: refactor code into transformFromContainer()

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index e7b3153..0256ec1 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -2,6 +2,22 @@
&gt;  
&gt;          Reviewed by NOBODY (OOPS!).
&gt;  
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=24312
&gt; +        
&gt; +        Factor the code that compute a transform relative to the container
&gt; +        into RenderObject::transformFromContainer().
&gt; +      

&quot;that computes a transform&quot;

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112011</commentid>
    <comment_count>4</comment_count>
      <attachid>28214</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-03-03 09:19:09 -0800</bug_when>
    <thetext>Comment on attachment 28214
Patch, changelog.

&quot;Recurses through the layer hieraarchy&quot;

Actually just remove this comment.  I think it&apos;s just confusing.  hit testing doesn&apos;t go through the parent/child hierarchy, which is what the comment implies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112020</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-03 09:53:34 -0800</bug_when>
    <thetext>Prequel patch:
http://trac.webkit.org/changeset/41387</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112028</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-03 10:11:05 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/41389</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113594</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-13 08:28:47 -0700</bug_when>
    <thetext>*** Bug 24573 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114304</commentid>
    <comment_count>8</comment_count>
    <who name="Kari Hiitola">kari.hiitola</who>
    <bug_when>2009-03-19 06:21:15 -0700</bug_when>
    <thetext>I tested with the latest nightly on a Mac, and the hit testing really doesn&apos;t seem to work as it should. If you try the test page of the duplicate bug: https://bugs.webkit.org/attachment.cgi?id=28576 the child div can not be clicked. I would suggest reopening this bug. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114319</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-19 09:22:54 -0700</bug_when>
    <thetext>Kari: I believe the issue that breaks your is covered by bug 24659.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28214</attachid>
            <date>2009-03-02 23:39:57 -0800</date>
            <delta_ts>2009-03-03 09:19:09 -0800</delta_ts>
            <desc>Patch, changelog.</desc>
            <filename>24312_patch.txt</filename>
            <type>text/plain</type>
            <size>34600</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDI1NmVjMS4uNWRiZTljZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTQsNiArNCw2MyBAQAogCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDMxMgogICAgICAgICAKKyAgICAgICAgVGFrZSAz
RCB0cmFuc2Zvcm1zIGludG8gYWNjb3VudCB3aGVuIGhpdCB0ZXN0aW5nOgorICAgICAgICAKKyAg
ICAgICAgMS4gTWFpbnRhaW4gYSBiaXQgb24gZWFjaCBSZW5kZXJMYXllciB0aGF0IGlzIHNldCB3
aGVuIHRoZSBsYXllcgorICAgICAgICAgICBoYXMgM2QgZGVzY2VuZGFudHMsIHNvIHRoYXQgd2Ug
a25vdyB3aGVuIHRvIGZhbGwgaW50byB0aGUgc2xvdworICAgICAgICAgICBoaXQgdGVzdGluZyBw
YXRoLgorICAgICAgICAgICAKKyAgICAgICAgMi4gTWFrZSBhIHJlZi1jb3VudGVkIEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZSwgd2hpY2ggaXMgdXNlZCB0byBzdG9yZQorICAgICAgICAgICBhbiBh
Y2N1bXVsYXRlZCB0cmFuc2Zvcm0sIGFuZCB0aGUgaGl0IHRlc3QgcG9pbnQsIGFuZCBoaXRUZXN0
UmVjdAorICAgICAgICAgICBpbiB0aGUgcGxhbmUgb2YgdGhlIGFuY2VzdG9yIG5vbi0zZCAoJ2Zs
YXR0ZW5pbmcnKSBsYXllci4KKyAgICAgICAgICAgCisgICAgICAgICAgIEl0J3MgcmVmLWNvdW50
ZWQgc28gd2UgY2FuIGhlYXAgYWxsb2NhdGUgaXQgKHRvIGF2b2lkIHN0YWNrIGJsb2F0KSwKKyAg
ICAgICAgICAgYW5kIGF2b2lkIGNvcHlpbmcgd2hlbiBoaXRUZXN0TGF5ZXIgY2FsbHMgaXRzZWxm
IGFmdGVyIGFwcGx5aW5nIHRoZSB0cmFuc2Zvcm0uCisgICAgICAgICAgIAorICAgICAgICAzLiBB
ZGQgbG9naWMgdG8gaGl0VGVzdExheWVyIHRvIGRlcHRoLXRlc3QganVzdCBkaXJlY3QgZGVzY2Vu
ZGFudHMsIGlmIGFueSBoYXZlCisgICAgICAgICAgIDNEIHRyYW5zZm9ybXMsIG9yIHRvIGRvIGRl
ZXAgZGVwdGgtdGVzdGluZyB3aGVuIHRyYXZlcnNpbmcgYSBwcmVzZXJ2ZXMtM2QKKyAgICAgICAg
ICAgaGllcmFyY2h5LiBXaGVuIGhpdCwgbGF5ZXJzIGNvbXB1dGUgYSB6LW9mZnNldCBmcm9tIHRo
ZSBhbmNlc3RvciBmbGF0dGVuaW5nCisgICAgICAgICAgIGxheWVyLCB3aGljaCBhbGxvd3MgZm9y
IGNvcnJlY3QgZGVwdGggdGVzdGluZy4KKyAgICAgICAgICAgCisgICAgICAgICAgIFRoZSBleGlz
dGluZyBlYXJseS1yZXR1cm4gY29kZXBhdGggaXMgdW5hZmZlY3RlZCB3aGVuIHRoZXJlIGFyZSBu
byAzZCB0cmFuc2Zvcm1zCisgICAgICAgICAgIGFuZCBubyBwcmVzZXJ2ZS0zZC4KKworICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0
ZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlydHkzRFRyYW5z
Zm9ybWVkRGVzY2VuZGFudFN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
dXBkYXRlM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVpPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNyZWF0ZUxvY2FsVHJhbnNmb3JtU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpw
cmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzM0RUcmFuc2Zv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldEhhczNEVHJhbnNmb3JtZWRE
ZXNjZW5kYW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXMzRFRyYW5zZm9y
bWVkRGVzY2VuZGFudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHA6CisgICAgICAgICogcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRyYW5zZm9ybVN0YXRlOjpmbGF0dGVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5z
Zm9ybVN0YXRlOjptYXBwZWRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGU6Om1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdGluZ1RyYW5zZm9y
bVN0YXRlOjphcHBseVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGU6OmZsYXR0ZW4pOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdGluZ1RyYW5z
Zm9ybVN0YXRlOjptYXBwZWRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGU6Om1hcHBlZFF1YWQpOgorICAgICAgICAqIHJlbmRlcmluZy9UcmFuc2Zvcm1T
dGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtU3RhdGU6OlRyYW5zZm9ybVN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6bW92ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OkhpdFRlc3RpbmdUcmFuc2Zv
cm1TdGF0ZSk6CisKKzIwMDktMDMtMDIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0MzEyCisgICAgICAgIAog
ICAgICAgICBGYWN0b3IgdGhlIGNvZGUgdGhhdCBjb21wdXRlIGEgdHJhbnNmb3JtIHJlbGF0aXZl
IHRvIHRoZSBjb250YWluZXIKICAgICAgICAgaW50byBSZW5kZXJPYmplY3Q6OnRyYW5zZm9ybUZy
b21Db250YWluZXIoKS4KICAgICAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXgg
ODU1NTc2Yi4uNDA5MjkyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNTAsNiAr
NTAsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgi
CiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCkBAIC03Niw2ICs3Nyw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUu
aCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2luY2x1ZGUgIlRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KQEAgLTE2NSw2ICsxNjcsOCBAQCBSZW5k
ZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyKQogICAg
ICwgbV9oYXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1fdmlzaWJsZURlc2NlbmRhbnRT
dGF0dXNEaXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURlc2NlbmRhbnQoZmFsc2UpCisg
ICAgLCBtXzNEVHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVzRGlydHkodHJ1ZSkKKyAgICAsIG1f
aGFzM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnQoZmFsc2UpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogICAgICwgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoZmFsc2UpCiAjZW5k
aWYKQEAgLTMxNiw2ICszMjAsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVUcmFuc2Zvcm0o
KQogICAgIC8vIGhhc1RyYW5zZm9ybSgpIG9uIHRoZSByZW5kZXJlciBpcyBhbHNvIHRydWUgd2hl
biB0aGVyZSBpcyB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkIG9yIHBlcnNwZWN0aXZlIHNl
dCwKICAgICAvLyBzbyBjaGVjayBzdHlsZSB0b28uCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0gPSBy
ZW5kZXJlcigpLT5oYXNUcmFuc2Zvcm0oKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNUcmFu
c2Zvcm0oKTsKKyAgICBib29sIGhhZDNEVHJhbnNmb3JtID0gaGFzM0RUcmFuc2Zvcm0oKTsKKwog
ICAgIGJvb2wgaGFkVHJhbnNmb3JtID0gbV90cmFuc2Zvcm07CiAgICAgaWYgKGhhc1RyYW5zZm9y
bSAhPSBoYWRUcmFuc2Zvcm0pIHsKICAgICAgICAgaWYgKGhhc1RyYW5zZm9ybSkKQEAgLTMzMCw2
ICszMzYsOSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVUcmFuc2Zvcm0oKQogICAgICAgICBt
X3RyYW5zZm9ybS0+bWFrZUlkZW50aXR5KCk7CiAgICAgICAgIGJveC0+c3R5bGUoKS0+YXBwbHlU
cmFuc2Zvcm0oKm1fdHJhbnNmb3JtLCBib3gtPmJvcmRlckJveFJlY3QoKS5zaXplKCksIFJlbmRl
clN0eWxlOjpJbmNsdWRlVHJhbnNmb3JtT3JpZ2luKTsKICAgICB9CisKKyAgICBpZiAoaGFkM0RU
cmFuc2Zvcm0gIT0gaGFzM0RUcmFuc2Zvcm0oKSkKKyAgICAgICAgZGlydHkzRFRyYW5zZm9ybWVk
RGVzY2VuZGFudFN0YXR1cygpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWaXNpYmxl
Q29udGVudChib29sIGIpCkBAIC00MjQsNiArNDMzLDQ4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZVZpc2liaWxpdHlTdGF0dXMoKQogICAgIH0KIH0KIAordm9pZCBSZW5kZXJMYXllcjo6ZGly
dHkzRFRyYW5zZm9ybWVkRGVzY2VuZGFudFN0YXR1cygpCit7CisgICAgUmVuZGVyTGF5ZXIqIGN1
cnIgPSBzdGFja2luZ0NvbnRleHQoKTsKKyAgICBpZiAoY3VycikKKyAgICAgICAgY3Vyci0+bV8z
RFRyYW5zZm9ybWVkRGVzY2VuZGFudFN0YXR1c0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgCisgICAg
Ly8gVGhpcyBwcm9wYWdhdGVzIHVwIHRocm91Z2ggcHJlc2VydmUtM2QgaGllcmFyY2hpZXMgdG8g
dGhlIGVuY2xvc2luZyBmbGF0dGVuaW5nIGxheWVyLgorICAgIC8vIE5vdGUgdGhhdCBwcmVzZXJ2
ZXMzRCgpIGNyZWF0ZXMgc3RhY2tpbmcgY29udGV4dCwgc28gd2UgY2FuIGp1c3QgcnVuIHVwIHRo
ZSBzdGFja2luZyBjb250ZXh0cy4KKyAgICB3aGlsZSAoY3VyciAmJiBjdXJyLT5wcmVzZXJ2ZXMz
RCgpKSB7CisgICAgICAgIGN1cnItPm1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0
eSA9IHRydWU7CisgICAgICAgIGN1cnIgPSBjdXJyLT5zdGFja2luZ0NvbnRleHQoKTsKKyAgICB9
Cit9CisKKy8vIFJldHVybiB0cnVlIGlmIHRoaXMgbGF5ZXIgb3IgYW55IHByZXNlcnZlLTNkIGRl
c2NlbmRhbnRzIGhhdmUgM2QuCitib29sIFJlbmRlckxheWVyOjp1cGRhdGUzRFRyYW5zZm9ybWVk
RGVzY2VuZGFudFN0YXR1cygpCit7CisgICAgaWYgKG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRT
dGF0dXNEaXJ0eSkgeworICAgICAgICBtX2hhczNEVHJhbnNmb3JtZWREZXNjZW5kYW50ID0gZmFs
c2U7CisKKyAgICAgICAgLy8gVHJhbnNmb3JtZWQgb3IgcHJlc2VydmUtM2QgZGVzY2VuZGFudHMg
Y2FuIG9ubHkgYmUgaW4gdGhlIHotb3JkZXIgbGlzdHMsIG5vdAorICAgICAgICAvLyBpbiB0aGUg
bm9ybWFsIGZsb3cgbGlzdCwgc28gd2Ugb25seSBuZWVkIHRvIGNoZWNrIHRob3NlLgorICAgICAg
ICBpZiAobV9wb3NaT3JkZXJMaXN0KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9wb3NaT3JkZXJMaXN0LT5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBtX2hh
czNEVHJhbnNmb3JtZWREZXNjZW5kYW50IHw9IG1fcG9zWk9yZGVyTGlzdC0+YXQoaSktPnVwZGF0
ZTNEVHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVzKCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBOb3cgY2hlY2sgb3VyIG5lZ2F0aXZlIHotaW5kZXggY2hpbGRyZW4uCisgICAgICAgIGlmICht
X25lZ1pPcmRlckxpc3QpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X25lZ1pPcmRlckxpc3QtPnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG1faGFzM0RUcmFu
c2Zvcm1lZERlc2NlbmRhbnQgfD0gbV9uZWdaT3JkZXJMaXN0LT5hdChpKS0+dXBkYXRlM0RUcmFu
c2Zvcm1lZERlc2NlbmRhbnRTdGF0dXMoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAv
LyBJZiB3ZSBsaXZlIGluIGEgM2QgaGllcmFyY2h5LCB0aGVuIHRoZSBsYXllciBhdCB0aGUgcm9v
dCBvZiB0aGF0IGhpZXJhcmNoeSBuZWVkcworICAgIC8vIHRoZSBtX2hhczNEVHJhbnNmb3JtZWRE
ZXNjZW5kYW50IHNldC4KKyAgICBpZiAocHJlc2VydmVzM0QoKSkKKyAgICAgICAgcmV0dXJuIGhh
czNEVHJhbnNmb3JtKCkgfHwgbV9oYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudDsKKworICAgIHJl
dHVybiBoYXMzRFRyYW5zZm9ybSgpOworfQorCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9uKCkKIHsKICAgICAvLyBDbGVhciBvdXIgY2FjaGVkIGNsaXAgcmVjdCBpbmZvcm1h
dGlvbi4KQEAgLTIwNDQsNyArMjA5NSwxNiBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCiAgICAg
aWYgKCFyZXF1ZXN0Lmlnbm9yZUNsaXBwaW5nKCkpCiAgICAgICAgIGJvdW5kc1JlY3QuaW50ZXJz
ZWN0KGZyYW1lVmlzaWJsZVJlY3QocmVuZGVyZXIoKSkpOwogCi0gICAgUmVuZGVyTGF5ZXIqIGlu
c2lkZUxheWVyID0gaGl0VGVzdExheWVyKHRoaXMsIHJlcXVlc3QsIHJlc3VsdCwgYm91bmRzUmVj
dCwgcmVzdWx0LnBvaW50KCkpOworICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRl
c3RMYXllcih0aGlzLCAwLCByZXF1ZXN0LCByZXN1bHQsIGJvdW5kc1JlY3QsIHJlc3VsdC5wb2lu
dCgpLCBmYWxzZSk7CisgICAgaWYgKCFpbnNpZGVMYXllcikgeworICAgICAgICAvLyBXZSBkaWRu
J3QgaGl0IGFueSBsYXllci4gSWYgd2UgYXJlIHRoZSByb290IGxheWVyIGFuZCB0aGUgbW91c2Ug
aXMgLS0gb3IganVzdCB3YXMgLS0gZG93biwgCisgICAgICAgIC8vIHJldHVybiBvdXJzZWx2ZXMu
IFdlIGRvIHRoaXMgc28gbW91c2UgZXZlbnRzIGNvbnRpbnVlIGdldHRpbmcgZGVsaXZlcmVkIGFm
dGVyIGEgZHJhZyBoYXMgCisgICAgICAgIC8vIGV4aXRlZCB0aGUgV2ViVmlldywgYW5kIHNvIGhp
dCB0ZXN0aW5nIG92ZXIgYSBzY3JvbGxiYXIgaGl0cyB0aGUgY29udGVudCBkb2N1bWVudC4KKyAg
ICAgICAgaWYgKChyZXF1ZXN0LmFjdGl2ZSgpIHx8IHJlcXVlc3QubW91c2VVcCgpKSAmJiByZW5k
ZXJlcigpLT5pc1JlbmRlclZpZXcoKSkgeworICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIHJlc3VsdC5wb2ludCgpKTsKKyAgICAgICAgICAgIGluc2lk
ZUxheWVyID0gdGhpczsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8vIE5vdyBkZXRlcm1pbmUg
aWYgdGhlIHJlc3VsdCBpcyBpbnNpZGUgYW4gYW5jaG9yOyBtYWtlIHN1cmUgYW4gaW1hZ2UgbWFw
IHdpbnMgaWYKICAgICAvLyBpdCBhbHJlYWR5IHNldCBVUkxFbGVtZW50IGFuZCBvbmx5IHVzZSB0
aGUgaW5uZXJtb3N0LgpAQCAtMjA3NCwxNSArMjEzNCw2NCBAQCBOb2RlKiBSZW5kZXJMYXllcjo6
ZW5jbG9zaW5nRWxlbWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLVJlbmRlckxheWVy
KiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBoaXRUZXN0UmVj
dCwgY29uc3QgSW50UG9pbnQmIGhpdFRlc3RQb2ludCwgYm9vbCBhcHBsaWVkVHJhbnNmb3JtKQor
Ly8gQ29tcHV0ZSB0aGUgei1vZmZzZXQgb2YgdGhlIHBvaW50IGluIHRoZSB0cmFuc2Zvcm1TdGF0
ZS4KKy8vIFRoaXMgaXMgZWZmZWN0aXZlbHkgcHJvamVjdGluZyBhIHJheSBub3JtYWwgdG8gdGhl
IHBsYW5lIG9mIGFuY2VzdG9yLCBmaW5kaW5nIHdoZXJlIHRoYXQKKy8vIHJheSBpbnRlcnNlY3Rz
IHRhcmdldCwgYW5kIGNvbXB1dGluZyB0aGUgeiBkZWx0YSBiZXR3ZWVuIHRob3NlIHR3byBwb2lu
dHMuCitzdGF0aWMgZG91YmxlIGNvbXB1dGVaT2Zmc2V0KGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zv
cm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpCit7CisgICAgLy8gV2UgZ290IGFuIGFmZmluZSB0cmFu
c2Zvcm0sIHNvIG5vIHotb2Zmc2V0CisgICAgaWYgKHRyYW5zZm9ybVN0YXRlLm1fYWNjdW11bGF0
ZWRUcmFuc2Zvcm0uaXNBZmZpbmUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGbGF0
dGVuIHRoZSBwb2ludCBpbnRvIHRoZSB0YXJnZXQgcGxhbmUKKyAgICBGbG9hdFBvaW50IHRhcmdl
dFBvaW50ID0gdHJhbnNmb3JtU3RhdGUubWFwcGVkUG9pbnQoKTsKKyAgICAKKyAgICAvLyBOb3cg
bWFwIHRoZSBwb2ludCBiYWNrIHRocm91Z2ggdGhlIHRyYW5zZm9ybSwgd2hpY2ggY29tcHV0ZXMg
Wi4KKyAgICBGbG9hdFBvaW50M0QgYmFja21hcHBlZFBvaW50ID0gdHJhbnNmb3JtU3RhdGUubV9h
Y2N1bXVsYXRlZFRyYW5zZm9ybS5tYXBQb2ludChGbG9hdFBvaW50M0QodGFyZ2V0UG9pbnQpKTsK
KyAgICByZXR1cm4gYmFja21hcHBlZFBvaW50LnooKTsKK30KKworUGFzc1JlZlB0cjxIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGU+IFJlbmRlckxheWVyOjpjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRl
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBoaXRU
ZXN0UmVjdCwgY29uc3QgSW50UG9pbnQmIGhpdFRlc3RQb2ludCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIGNv
bnRhaW5lclRyYW5zZm9ybVN0YXRlKSBjb25zdAogeworICAgIFJlZlB0cjxIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGU+IHRyYW5zZm9ybVN0YXRlOworICAgIGludCBvZmZzZXRYID0gMDsKKyAgICBp
bnQgb2Zmc2V0WSA9IDA7CisgICAgaWYgKGNvbnRhaW5lclRyYW5zZm9ybVN0YXRlKSB7CisgICAg
ICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgY29tcHV0aW5nIHRyYW5zZm9ybSBzdGF0ZSwgdGhlbiBp
dCdzIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXIgKHdoaWNoIHdlIGtub3cgaXMgbm9uLW51bGwp
LgorICAgICAgICB0cmFuc2Zvcm1TdGF0ZSA9IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6Y3Jl
YXRlKCpjb250YWluZXJUcmFuc2Zvcm1TdGF0ZSk7CisgICAgICAgIGNvbnZlcnRUb0xheWVyQ29v
cmRzKGNvbnRhaW5lckxheWVyLCBvZmZzZXRYLCBvZmZzZXRZKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIG5lZWQgdG8gbWFrZSB0cmFuc2Zv
cm0gc3RhdGUsIHRoZW4gYmFzZSBpdCBvZmYgb2YgaGl0VGVzdFBvaW50LAorICAgICAgICAvLyB3
aGljaCBpcyByZWxhdGl2ZSB0byByb290TGF5ZXIuCisgICAgICAgIHRyYW5zZm9ybVN0YXRlID0g
SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpjcmVhdGUoaGl0VGVzdFBvaW50LCBGbG9hdFF1YWQo
aGl0VGVzdFJlY3QpKTsKKyAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBv
ZmZzZXRYLCBvZmZzZXRZKTsKKyAgICB9CisgICAgCisgICAgLy8gRklYTUU6IG5lZWQgdG8gaGF2
ZSB0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyIGJlIGFibGUgdG8gdXNlIGdldEFuaW1hdGVkU3R5bGVG
b3JSZW5kZXJlcigpCisgICAgLy8gd2hlbiBkb2luZyBhY2NlbGVyYXRlZCBhbmltYXRpb25zLgor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRhaW5lclRyYW5zZm9ybSA9IHJlbmRlcmVyKCkt
PnRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyTGF5ZXIgPyBjb250YWluZXJMYXllci0+
cmVuZGVyZXIoKSA6IDAsIEludFNpemUob2Zmc2V0WCwgb2Zmc2V0WSkpOworICAgIHRyYW5zZm9y
bVN0YXRlLT5hcHBseVRyYW5zZm9ybShjb250YWluZXJUcmFuc2Zvcm0sIHRydWUpOworICAgIHJl
dHVybiB0cmFuc2Zvcm1TdGF0ZTsKK30KKworLy8gaGl0VGVzdFBvaW50IGFuZCBoaXRUZXN0UmVj
dCBhcmUgcmVsYXRpdmUgdG8gcm9vdExheWVyLgorLy8gQSAnZmxhdHRlbmluZycgbGF5ZXIgaXMg
b25lIHByZXNlcnZlczNEKCkgPT0gZmFsc2UuCisvLyB0cmFuc2Zvcm1TdGF0ZS5tX2FjY3VtdWxh
dGVkVHJhbnNmb3JtIGhvbGRzIHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgY29udGFpbmluZyBmbGF0
dGVuaW5nIGxheWVyLgorLy8gdHJhbnNmb3JtU3RhdGUubV9sYXN0UGxhbmFyUG9pbnQgaXMgdGhl
IGhpdFRlc3RQb2ludCBpbiB0aGUgcGxhbmUgb2YgdGhlIGNvbnRhaW5pbmcgZmxhdHRlbmluZyBs
YXllci4KKy8vIHRyYW5zZm9ybVN0YXRlLm1fbGFzdFBsYW5hclF1YWQgaXMgdGhlIGhpdFRlc3RS
ZWN0IGFzIGEgcXVhZCBpbiB0aGUgcGxhbmUgb2YgdGhlIGNvbnRhaW5pbmcgZmxhdHRlbmluZyBs
YXllci4KKy8vIAorLy8gSWYgek9mZnNldCBpcyBub24tbnVsbCAod2hpY2ggaW5kaWNhdGVzIHRo
YXQgdGhlIGNhbGxlciB3YW50cyB6IG9mZnNldCBpbmZvcm1hdGlvbiksIAorLy8gICp6T2Zmc2V0
IG9uIHJldHVybiBpcyB0aGUgeiBvZmZzZXQgb2YgdGhlIGhpdCBwb2ludCByZWxhdGl2ZSB0byB0
aGUgY29udGFpbmluZyBmbGF0dGVuaW5nIGxheWVyLgorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
OjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRh
aW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW50UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBoaXRUZXN0UG9pbnQs
IGJvb2wgYXBwbGllZFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3Jt
U3RhdGUsIGRvdWJsZSogek9mZnNldCkKK3sKKyAgICAvLyBUaGUgbmF0dXJhbCB0aGluZyB3b3Vs
ZCBiZSB0byBrZWVwIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSBvbiB0aGUgc3RhY2ssIGJ1dCBp
dCdzIGJpZywgc28gd2UgaGVhcC1hbGxvY2F0ZS4KKyAgICAKICAgICAvLyBBcHBseSBhIHRyYW5z
Zm9ybSBpZiB3ZSBoYXZlIG9uZS4KICAgICBpZiAodHJhbnNmb3JtKCkgJiYgIWFwcGxpZWRUcmFu
c2Zvcm0pIHsKLSAgICAgICAgLy8gSWYgdGhlIHRyYW5zZm9ybSBjYW4ndCBiZSBpbnZlcnRlZCwg
dGhlbiBkb24ndCBoaXQgdGVzdCB0aGlzIGxheWVyIGF0IGFsbC4KLSAgICAgICAgaWYgKCFtX3Ry
YW5zZm9ybS0+aXNJbnZlcnRpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgCiAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGFyZW50J3MgY2xpcCByZWN0cyBoYXZlIGJlZW4gY2FsY3Vs
YXRlZC4KICAgICAgICAgaWYgKHBhcmVudCgpKSB7CiAgICAgICAgICAgICBwYXJlbnQoKS0+dXBk
YXRlQ2xpcFJlY3RzKHJvb3RMYXllcik7CkBAIC0yMDkzLDMyICsyMjAyLDQ2IEBAIFJlbmRlckxh
eWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNv
bnN0IEhpdFRlc3RSZXF1CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAot
ICAgICAgICAvLyBBZGp1c3QgdGhlIHRyYW5zZm9ybSBzdWNoIHRoYXQgdGhlIHJlbmRlcmVyJ3Mg
dXBwZXIgbGVmdCBjb3JuZXIgaXMgYXQgKDAsMCkgaW4gdXNlciBzcGFjZS4KLSAgICAgICAgLy8g
VGhpcyBpbnZvbHZlcyBzdWJ0cmFjdGluZyBvdXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXllciBp
biBvdXIgY3VycmVudCBjb29yZGluYXRlIHNwYWNlLgotICAgICAgICBpbnQgeCA9IDA7Ci0gICAg
ICAgIGludCB5ID0gMDsKLSAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCB4
LCB5KTsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgICAgICB0
cmFuc2Zvcm0udHJhbnNsYXRlKHgsIHkpOwotICAgICAgICAKLSAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbG9jYWxUcmFuc2Zvcm07Ci0gICAgICAgIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLSAgICAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxlKCktPmlzUnVubmluZ0Fj
Y2VsZXJhdGVkQW5pbWF0aW9uKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEludFJlY3QgYm9yZGVy
Qm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKTsKLSAgICAgICAg
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHlsZSA9IHJlbmRlcmVyKCktPmFuaW1h
dGlvbigpLT5nZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7Ci0gICAgICAg
ICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFuc2Zvcm1PcGVyYXRpb25zID0gYW5p
bWF0ZWRTdHlsZS0+dHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25z
LmFwcGx5KGJvcmRlckJveC5zaXplKCksIGxvY2FsVHJhbnNmb3JtKTsKLSAgICAgICAgfSBlbHNl
Ci0jZW5kaWYKLSAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtID0gKm1fdHJhbnNmb3JtOworICAg
ICAgICAvLyBDcmVhdGUgYSB0cmFuc2Zvcm0gc3RhdGUgdG8gYWNjdW11bGF0ZSB0aGlzIHRyYW5z
Zm9ybS4KKyAgICAgICAgUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gbmV3VHJhbnNm
b3JtU3RhdGUgPSBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXllciwgY29udGFpbmVy
TGF5ZXIsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0YXRlKTsKKworICAg
ICAgICAvLyBJZiB0aGUgdHJhbnNmb3JtIGNhbid0IGJlIGludmVydGVkLCB0aGVuIGRvbid0IGhp
dCB0ZXN0IHRoaXMgbGF5ZXIgYXQgYWxsLgorICAgICAgICBpZiAoIW5ld1RyYW5zZm9ybVN0YXRl
LT5tX2FjY3VtdWxhdGVkVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICAgICAgdHJhbnNmb3JtID0gbG9jYWxUcmFuc2Zvcm0gKiB0cmFuc2Zvcm07
CisgICAgICAgIC8vIENvbXB1dGUgdGhlIHBvaW50IGFuZCB0aGUgaGl0IHRlc3QgcmVjdCBpbiB0
aGUgY29vcmRzIG9mIHRoaXMgbGF5ZXIgYnkgdXNpbmcgdGhlIHZhbHVlcworICAgICAgICAvLyBm
cm9tIHRoZSB0cmFuc2Zvcm1TdGF0ZSwgd2hpY2ggc3RvcmUgdGhlIHBvaW50IGFuZCBxdWFkIGlu
IHRoZSBjb29yZHMgb2YgdGhlIGxhc3QgZmxhdHRlbmVkCisgICAgICAgIC8vIGxheWVyLCBhbmQg
dGhlIGFjY3VtdWxhdGVkIHRyYW5zZm9ybSB3aGljaCBsZXRzIHVwIG1hcCB0aHJvdWdoIHByZXNl
cnZlLTNkIGxheWVycy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBtYXAg
aGl0VGVzdFBvaW50IGFuZCBoaXRUZXN0UmVjdCBiZWNhdXNlIHRoZXkgbWF5IGhhdmUgYmVlbiBm
bGF0dGVuZWQgKGxvc2luZyB6KQorICAgICAgICAvLyBieSBvdXIgY29udGFpbmVyLgorICAgICAg
ICBJbnRQb2ludCBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KG5ld1RyYW5zZm9ybVN0YXRl
LT5tYXBwZWRQb2ludCgpKTsKKyAgICAgICAgSW50UmVjdCBsb2NhbEhpdFRlc3RSZWN0ID0gbmV3
VHJhbnNmb3JtU3RhdGUtPm1hcHBlZFF1YWQoKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworCisg
ICAgICAgIC8vIEZJWE1FOiBjaGVjayBmb3IgaGl0IHRlc3Qgb24gYmFja2ZhY2UgaWYgYmFja2Zh
Y2UtdmlzaWJpbGl0eSBpcyAnaGlkZGVuJwogICAgICAgICAKLSAgICAgICAgLy8gTWFwIHRoZSBo
aXQgdGVzdCBwb2ludCBpbnRvIHRoZSB0cmFuc2Zvcm1lZCBzcGFjZSBhbmQgdGhlbiBkbyBhIGhp
dCB0ZXN0IHdpdGggdGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBiZSB1cy4KLSAgICAgICAgcmV0
dXJuIGhpdFRlc3RMYXllcih0aGlzLCByZXF1ZXN0LCByZXN1bHQsIHRyYW5zZm9ybS5pbnZlcnNl
KCkubWFwUmVjdChoaXRUZXN0UmVjdCksIHRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUG9pbnQoaGl0
VGVzdFBvaW50KSwgdHJ1ZSk7CisgICAgICAgIC8vIE5vdyBkbyBhIGhpdCB0ZXN0IHdpdGggdGhl
IHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBiZSB1cy4KKyAgICAgICAgcmV0dXJuIGhpdFRlc3RMYXll
cih0aGlzLCBjb250YWluZXJMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhbEhpdFRlc3RSZWN0
LCBsb2NhbFBvaW50LCB0cnVlLCBuZXdUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldCk7Cisg
ICAgfQorICAgIAorICAgIFJlZlB0cjxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IGxvY2FsVHJh
bnNmb3JtU3RhdGU7CisgICAgaWYgKGFwcGxpZWRUcmFuc2Zvcm0pIHsKKyAgICAgICAgLy8gV2Ug
Y29tcHV0ZWQgdGhlIGNvcnJlY3Qgc3RhdGUgaW4gdGhlIGNhbGxlciAoYWJvdmUgY29kZSksIHNv
IGp1c3QgcmVmZXJlbmNlIGl0LgorICAgICAgICBBU1NFUlQodHJhbnNmb3JtU3RhdGUpOworICAg
ICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlID0gY29uc3RfY2FzdDxIaXRUZXN0aW5nVHJhbnNmb3Jt
U3RhdGUqPih0cmFuc2Zvcm1TdGF0ZSk7CisgICAgfSBlbHNlIGlmICh0cmFuc2Zvcm1TdGF0ZSB8
fCBtX2hhczNEVHJhbnNmb3JtZWREZXNjZW5kYW50KSB7CisgICAgICAgIC8vIFdlIG5lZWQgdHJh
bnNmb3JtIHN0YXRlIGZvciB0aGUgZmlyc3QgdGltZSwgb3IgdG8gb2Zmc2V0IHRoZSBjb250YWlu
ZXIgc3RhdGUsIHNvIGNyZWF0ZSBpdCBoZXJlLgorICAgICAgICBsb2NhbFRyYW5zZm9ybVN0YXRl
ID0gY3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0ZShyb290TGF5ZXIsIGNvbnRhaW5lckxheWVyLCBo
aXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LCB0cmFuc2Zvcm1TdGF0ZSk7CiAgICAgfQogCisgICAg
UmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0
ZSA9IGxvY2FsVHJhbnNmb3JtU3RhdGU7CisgICAgaWYgKGxvY2FsVHJhbnNmb3JtU3RhdGUgJiYg
IXByZXNlcnZlczNEKCkpIHsKKyAgICAgICAgLy8gS2VlcCBhIGNvcHkgb2YgdGhlIHByZS1mbGF0
dGVuaW5nIHN0YXRlLCBmb3IgY29tcHV0aW5nIHotb2Zmc2V0cyBmb3IgdGhlIGNvbnRhaW5lcgor
ICAgICAgICB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlID0gSGl0VGVzdGluZ1RyYW5zZm9ybVN0
YXRlOjpjcmVhdGUoKmxvY2FsVHJhbnNmb3JtU3RhdGUpOworICAgICAgICAvLyBUaGlzIGxheWVy
IGlzIGZsYXR0ZW5pbmcsIHNvIGZsYXR0ZW4gdGhlIHN0YXRlIHBhc3NlZCB0byBkZXNjZW5kYW50
cy4KKyAgICAgICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZS0+ZmxhdHRlbigpOworICAgIH0KKyAgICAK
ICAgICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxkIHVzZS4KICAgICBJbnRS
ZWN0IGxheWVyQm91bmRzOwogICAgIEludFJlY3QgYmdSZWN0OwpAQCAtMjEyNiw5MSArMjI0OSwx
NDUgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciwgY29uc3QgSGl0VGVzdFJlcXUKICAgICBJbnRSZWN0IG91dGxpbmVSZWN0Owog
ICAgIGNhbGN1bGF0ZVJlY3RzKHJvb3RMYXllciwgaGl0VGVzdFJlY3QsIGxheWVyQm91bmRzLCBi
Z1JlY3QsIGZnUmVjdCwgb3V0bGluZVJlY3QpOwogICAgIAotICAgIC8vIEVuc3VyZSBvdXIgbGlz
dHMgYXJlIHVwLXRvLWRhdGUuCisgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhbmQgM2Qgc3RhdHVz
IGFyZSB1cC10by1kYXRlLgogICAgIHVwZGF0ZUxheWVyTGlzdHNJZk5lZWRlZCgpOwotCi0gICAg
Ly8gVGhpcyB2YXJpYWJsZSB0cmFja3Mgd2hpY2ggbGF5ZXIgdGhlIG1vdXNlIGVuZHMgdXAgYmVp
bmcgaW5zaWRlLiAgVGhlIG1pbnV0ZSB3ZSBmaW5kIGFuIGluc2lkZUxheWVyLAotICAgIC8vIHdl
IGFyZSBkb25lIGFuZCBjYW4gcmV0dXJuIGl0LgotICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXll
ciA9IDA7Ci0gICAgCi0gICAgLy8gQmVnaW4gYnkgd2Fsa2luZyBvdXIgbGlzdCBvZiBwb3NpdGl2
ZSBsYXllcnMgZnJvbSBoaWdoZXN0IHotaW5kZXggZG93biB0byB0aGUgbG93ZXN0Ci0gICAgLy8g
ei1pbmRleC4KKyAgICB1cGRhdGUzRFRyYW5zZm9ybWVkRGVzY2VuZGFudFN0YXR1cygpOworCisg
ICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiB0aGUgei1k
ZXB0aCBvZiB0aGUgaGl0IHBvaW50IG9mIDNkLXRyYW5zZm9ybWVkCisgICAgLy8gZGVzY2VuZGFu
dHMuCisgICAgZG91YmxlIGxvY2FsWk9mZnNldCA9IC1udW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpOworICAgIGRvdWJsZSogek9mZnNldEZvckRlc2NlbmRhbnRzUHRyID0gMDsKKyAg
ICBkb3VibGUqIHpPZmZzZXRGb3JDb250ZW50c1B0ciA9IDA7CisgICAgCisgICAgYm9vbCBkZXB0
aFNvcnREZXNjZW5kYW50cyA9IGZhbHNlOworICAgIGlmIChwcmVzZXJ2ZXMzRCgpKSB7CisgICAg
ICAgIGRlcHRoU29ydERlc2NlbmRhbnRzID0gdHJ1ZTsKKyAgICAgICAgLy8gT3VyIGxheWVycyBj
YW4gZGVwdGgtdGVzdCB3aXRoIG91ciBjb250YWluZXIsIHNvIHNoYXJlIHRoZSB6IGRlcHRoIHBv
aW50ZXIgd2l0aCB0aGUgY29udGFpbmVyLCBpZiBpdCBwYXNzZWQgb25lIGRvd24uCisgICAgICAg
IHpPZmZzZXRGb3JEZXNjZW5kYW50c1B0ciA9IHpPZmZzZXQgPyB6T2Zmc2V0IDogJmxvY2FsWk9m
ZnNldDsKKyAgICAgICAgek9mZnNldEZvckNvbnRlbnRzUHRyID0gek9mZnNldCA/IHpPZmZzZXQg
OiAmbG9jYWxaT2Zmc2V0OworICAgIH0gZWxzZSBpZiAobV9oYXMzRFRyYW5zZm9ybWVkRGVzY2Vu
ZGFudCkgeworICAgICAgICAvLyBGbGF0dGVuaW5nIGxheWVyIHdpdGggM2QgY2hpbGRyZW47IHVz
ZSBhIGxvY2FsIHpPZmZzZXQgcG9pbnRlciB0byBkZXB0aC10ZXN0IGNoaWxkcmVuIGFuZCBmb3Jl
Z3JvdW5kLgorICAgICAgICBkZXB0aFNvcnREZXNjZW5kYW50cyA9IHRydWU7CisgICAgICAgIHpP
ZmZzZXRGb3JEZXNjZW5kYW50c1B0ciA9IHpPZmZzZXQgPyB6T2Zmc2V0IDogJmxvY2FsWk9mZnNl
dDsKKyAgICAgICAgek9mZnNldEZvckNvbnRlbnRzUHRyID0gek9mZnNldCA/IHpPZmZzZXQgOiAm
bG9jYWxaT2Zmc2V0OworICAgIH0gZWxzZSBpZiAoek9mZnNldCkgeworICAgICAgICB6T2Zmc2V0
Rm9yRGVzY2VuZGFudHNQdHIgPSAwOworICAgICAgICAvLyBDb250YWluZXIgbmVlZHMgdXMgdG8g
Z2l2ZSBiYWNrIGEgeiBvZmZzZXQgZm9yIHRoZSBoaXQgbGF5ZXIuCisgICAgICAgIHpPZmZzZXRG
b3JDb250ZW50c1B0ciA9IHpPZmZzZXQ7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgdmFyaWFi
bGUgdHJhY2tzIHdoaWNoIGxheWVyIHRoZSBtb3VzZSBlbmRzIHVwIGJlaW5nIGluc2lkZS4gCisg
ICAgUmVuZGVyTGF5ZXIqIGNhbmRpZGF0ZUxheWVyID0gMDsKKworICAgIC8vIEJlZ2luIGJ5IHdh
bGtpbmcgb3VyIGxpc3Qgb2YgcG9zaXRpdmUgbGF5ZXJzIGZyb20gaGlnaGVzdCB6LWluZGV4IGRv
d24gdG8gdGhlIGxvd2VzdCB6LWluZGV4LgogICAgIGlmIChtX3Bvc1pPcmRlckxpc3QpIHsKICAg
ICAgICAgZm9yIChpbnQgaSA9IG1fcG9zWk9yZGVyTGlzdC0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAt
LWkpIHsKLSAgICAgICAgICAgIGluc2lkZUxheWVyID0gbV9wb3NaT3JkZXJMaXN0LT5hdChpKS0+
aGl0VGVzdExheWVyKHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0
VGVzdFBvaW50KTsKLSAgICAgICAgICAgIGlmIChpbnNpZGVMYXllcikKLSAgICAgICAgICAgICAg
ICByZXR1cm4gaW5zaWRlTGF5ZXI7CisgICAgICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIg
PSBtX3Bvc1pPcmRlckxpc3QtPmF0KGkpLT5oaXRUZXN0TGF5ZXIocm9vdExheWVyLCB0aGlzLCBy
ZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIGZhbHNlLCBsb2NhbFRy
YW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHNQdHIpOworICAgICAgICAg
ICAgaWYgKGhpdExheWVyKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlcHRoU29ydERlc2NlbmRh
bnRzKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJldHVybiB5ZXQuIEtlZXAgYSBy
ZWYgdG8gdGhlIGZyb250bW9zdCBsYXllciwgYW5kIGtlZXAgbG9va2luZy4KKyAgICAgICAgICAg
ICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSBoaXRMYXllcjsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAvLyBPdXIgY29udGFpbmVyIG5lZWRzIHRvIGtub3cg
dGhlIHogb2YgdGhlIGhpdCBsYXllci4gVGhpcyBpcyBhY3R1YWxseSBjb21wdXRpbmcgb3VyIHos
IGJ1dCB0aGF0J3MgT0sgYmVjYXVzZSB0aGUgaGl0TGF5ZXIgaXMgY29wbGFuYXIgd2l0aCB1cy4K
KyAgICAgICAgICAgICAgICAgICAgaWYgKHpPZmZzZXQgJiYgIXpPZmZzZXRGb3JEZXNjZW5kYW50
c1B0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICp6T2Zmc2V0ID0gY29tcHV0ZVpPZmZzZXQo
KnVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
aGl0TGF5ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQogCiAgICAgLy8gTm93IGNoZWNrIG91ciBvdmVyZmxvdyBvYmplY3RzLgogICAgIGlmICht
X25vcm1hbEZsb3dMaXN0KSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBtX25vcm1hbEZsb3dMaXN0
LT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgaWYgKG1fbm9ybWFsRmxv
d0xpc3QtPmF0KGkpLT5pc1NlbGZQYWludGluZ0xheWVyKCkpCi0gICAgICAgICAgICAgICAgaW5z
aWRlTGF5ZXIgPSBtX25vcm1hbEZsb3dMaXN0LT5hdChpKS0+aGl0VGVzdExheWVyKHJvb3RMYXll
ciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50KTsKLSAgICAgICAg
ICAgIGlmIChpbnNpZGVMYXllcikKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5zaWRlTGF5ZXI7
CisgICAgICAgICAgICBSZW5kZXJMYXllciogY3VyckxheWVyID0gbV9ub3JtYWxGbG93TGlzdC0+
YXQoaSk7CisgICAgICAgICAgICBpZiAoIWN1cnJMYXllci0+aXNTZWxmUGFpbnRpbmdMYXllcigp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGhp
dExheWVyID0gY3VyckxheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExheWVyLCB0aGlzLCByZXF1ZXN0
LCByZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIGZhbHNlLCBsb2NhbFRyYW5zZm9y
bVN0YXRlLmdldCgpLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHNQdHIpOworICAgICAgICAgICAgaWYg
KGRlcHRoU29ydERlc2NlbmRhbnRzKSB7CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmV0dXJu
IHlldC4gS2VlcCBhIHJlZiB0byB0aGUgZnJvbnRtb3N0IGxheWVyLCBhbmQga2VlcCBsb29raW5n
LgorICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUxheWVyID0gaGl0TGF5ZXI7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIE91ciBjb250YWluZXIgbmVlZHMgdG8ga25v
dyB0aGUgeiBvZiB0aGUgaGl0IGxheWVyLiBUaGlzIGlzIGFjdHVhbGx5IGNvbXB1dGluZyBvdXIg
eiwgYnV0IHRoYXQncyBPSyBiZWNhdXNlIHRoZSBoaXRMYXllciBpcyBjb3BsYW5hciB3aXRoIHVz
LgorICAgICAgICAgICAgICAgIGlmICh6T2Zmc2V0ICYmICF6T2Zmc2V0Rm9yRGVzY2VuZGFudHNQ
dHIpCisgICAgICAgICAgICAgICAgICAgICp6T2Zmc2V0ID0gY29tcHV0ZVpPZmZzZXQoKnVuZmxh
dHRlbmVkVHJhbnNmb3JtU3RhdGUpOworICAgICAgICAgICAgICAgIHJldHVybiBoaXRMYXllcjsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5leHQgd2Ugd2FudCB0
byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMg
b2YgdGhlIGxheWVyLgotICAgIGlmIChmZ1JlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSAmJiAK
LSAgICAgICAgcmVuZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RQb2lu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckJvdW5kcy54KCkgLSByZW5kZXJC
b3hYKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueSgpIC0gcmVu
ZGVyQm94WSgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRUZXN0RGVzY2VuZGFu
dHMpKSB7Ci0gICAgICAgIC8vIEZvciBwb3NpdGlvbmVkIGdlbmVyYXRlZCBjb250ZW50LCB3ZSBt
aWdodCBzdGlsbCBub3QgaGF2ZSBhCi0gICAgICAgIC8vIG5vZGUgYnkgdGhlIHRpbWUgd2UgZ2V0
IHRvIHRoZSBsYXllciBsZXZlbCwgc2luY2Ugbm9uZSBvZgotICAgICAgICAvLyB0aGUgY29udGVu
dCBpbiB0aGUgbGF5ZXIgaGFzIGFuIGVsZW1lbnQuIFNvIGp1c3Qgd2FsayB1cAotICAgICAgICAv
LyB0aGUgdHJlZS4KLSAgICAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb2RlKCkgfHwgIXJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKSkgewotICAgICAgICAgICAgTm9kZSogZSA9IGVuY2xvc2luZ0Vs
ZW1lbnQoKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmlubmVyTm9kZSgpKQotICAgICAgICAg
ICAgICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuc2V0SW5uZXJOb25T
aGFyZWROb2RlKGUpOworICAgIGlmIChmZ1JlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSkgewor
ICAgICAgICAvLyBIaXQgdGVzdCB3aXRoIGEgdGVtcG9yYXJ5IEhpdFRlc3RSZXN1bHQsIGJlY2F1
c2Ugd2Ugb25seWwgd2FudCB0byBjb21taXQgdG8gJ3Jlc3VsdCcgaWYgd2Uga25vdyB3ZSdyZSBm
cm9udG1vc3QuCisgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQo
KSk7CisgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5
ZXJCb3VuZHMsIGhpdFRlc3RQb2ludCwgSGl0VGVzdERlc2NlbmRhbnRzKSkgeworICAgICAgICAg
ICAgaWYgKHpPZmZzZXRGb3JDb250ZW50c1B0cikgeworICAgICAgICAgICAgICAgIGRvdWJsZSBm
b3JlZ3JvdW5kWk9mZnNldCA9IGNvbXB1dGVaT2Zmc2V0KCp1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0
YXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoZm9yZWdyb3VuZFpPZmZzZXQgPiAqek9mZnNldEZv
ckNvbnRlbnRzUHRyKSB7CisgICAgICAgICAgICAgICAgICAgICp6T2Zmc2V0Rm9yQ29udGVudHNQ
dHIgPSBmb3JlZ3JvdW5kWk9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVt
cFJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoU29ydERlc2NlbmRhbnRzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSB0aGlzOworICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJl
c3VsdCA9IHRlbXBSZXN1bHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGhpczsKICAgICB9Ci0gICAgICAg
IAorCiAgICAgLy8gTm93IGNoZWNrIG91ciBuZWdhdGl2ZSB6LWluZGV4IGNoaWxkcmVuLgogICAg
IGlmIChtX25lZ1pPcmRlckxpc3QpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IG1fbmVnWk9yZGVy
TGlzdC0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIGluc2lkZUxheWVy
ID0gbV9uZWdaT3JkZXJMaXN0LT5hdChpKS0+aGl0VGVzdExheWVyKHJvb3RMYXllciwgcmVxdWVz
dCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50KTsKLSAgICAgICAgICAgIGlmIChp
bnNpZGVMYXllcikKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5zaWRlTGF5ZXI7CisgICAgICAg
ICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSBtX25lZ1pPcmRlckxpc3QtPmF0KGkpLT5oaXRU
ZXN0TGF5ZXIocm9vdExheWVyLCB0aGlzLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RSZWN0LCBo
aXRUZXN0UG9pbnQsIGZhbHNlLCBsb2NhbFRyYW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0Rm9y
RGVzY2VuZGFudHNQdHIpOworICAgICAgICAgICAgaWYgKGhpdExheWVyKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGRlcHRoU29ydERlc2NlbmRhbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IERvbid0IHJldHVybiB5ZXQuIEtlZXAgYSByZWYgdG8gdGhlIGZyb250bW9zdCBsYXllciwgYW5k
IGtlZXAgbG9va2luZy4KKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSBoaXRM
YXllcjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBP
dXIgY29udGFpbmVyIG5lZWRzIHRvIGtub3cgdGhlIHogb2YgdGhlIGhpdCBsYXllci4gVGhpcyBp
cyBhY3R1YWxseSBjb21wdXRpbmcgb3VyIHosIGJ1dCB0aGF0J3MgT0sgYmVjYXVzZSB0aGUgaGl0
TGF5ZXIgaXMgY29wbGFuYXIgd2l0aCB1cy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHpPZmZz
ZXQgJiYgIXpPZmZzZXRGb3JEZXNjZW5kYW50c1B0cikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICp6T2Zmc2V0ID0gY29tcHV0ZVpPZmZzZXQoKnVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGl0TGF5ZXI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIC8vIElmIHdlIGZvdW5k
IGEgbGF5ZXIsIHJldHVybi4gQ2hpbGQgbGF5ZXJzLCBhbmQgZm9yZWdyb3VuZCBhbHdheXMgcmVu
ZGVyIGluIGZyb250IG9mIGJhY2tncm91bmQuCisgICAgaWYgKGNhbmRpZGF0ZUxheWVyKQorICAg
ICAgICByZXR1cm4gY2FuZGlkYXRlTGF5ZXI7CiAKLSAgICAvLyBOZXh0IHdlIHdhbnQgdG8gc2Vl
IGlmIHRoZSBtb3VzZSBpcyBpbnNpZGUgdGhpcyBsYXllciBidXQgbm90IGFueSBvZiBpdHMgY2hp
bGRyZW4uCi0gICAgaWYgKGJnUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpICYmCi0gICAgICAg
IHJlbmRlcmVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UG9pbnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueCgpIC0gcmVuZGVyQm94WCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLnkoKSAtIHJlbmRlckJveFko
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRUZXN0U2VsZikpIHsKLSAgICAgICAg
aWYgKCFyZXN1bHQuaW5uZXJOb2RlKCkgfHwgIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkg
ewotICAgICAgICAgICAgTm9kZSogZSA9IGVuY2xvc2luZ0VsZW1lbnQoKTsKLSAgICAgICAgICAg
IGlmICghcmVzdWx0LmlubmVyTm9kZSgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRJbm5l
ck5vZGUoZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkK
LSAgICAgICAgICAgICAgICByZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKGUpOworICAgIGlm
IChiZ1JlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSkgeworICAgICAgICBIaXRUZXN0UmVzdWx0
IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCkpOworICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRz
KHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxheWVyQm91bmRzLCBoaXRUZXN0UG9pbnQsIEhpdFRlc3RT
ZWxmKSkgeworICAgICAgICAgICAgaWYgKHpPZmZzZXRGb3JDb250ZW50c1B0cikgeworICAgICAg
ICAgICAgICAgIGRvdWJsZSBiYWNrZ3JvdW5kWk9mZnNldCA9IGNvbXB1dGVaT2Zmc2V0KCp1bmZs
YXR0ZW5lZFRyYW5zZm9ybVN0YXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZFpP
ZmZzZXQgPiAqek9mZnNldEZvckNvbnRlbnRzUHRyKSB7CisgICAgICAgICAgICAgICAgICAgICp6
T2Zmc2V0Rm9yQ29udGVudHNQdHIgPSBiYWNrZ3JvdW5kWk9mZnNldDsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQot
Ci0gICAgLy8gV2UgZGlkbid0IGhpdCBhbnkgbGF5ZXIuIElmIHdlIGFyZSB0aGUgcm9vdCBsYXll
ciBhbmQgdGhlIG1vdXNlIGlzIC0tIG9yIGp1c3Qgd2FzIC0tIGRvd24sIAotICAgIC8vIHJldHVy
biBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgc28gbW91c2UgZXZlbnRzIGNvbnRpbnVlIGdldHRpbmcg
ZGVsaXZlcmVkIGFmdGVyIGEgZHJhZyBoYXMgCi0gICAgLy8gZXhpdGVkIHRoZSBXZWJWaWV3LCBh
bmQgc28gaGl0IHRlc3Rpbmcgb3ZlciBhIHNjcm9sbGJhciBoaXRzIHRoZSBjb250ZW50IGRvY3Vt
ZW50LgotICAgIGlmICgocmVxdWVzdC5hY3RpdmUoKSB8fCByZXF1ZXN0Lm1vdXNlVXAoKSkgJiYg
cmVuZGVyZXIoKS0+aXNSZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIGhpdFRlc3RQb2ludCk7Ci0gICAgICAgIHJldHVybiB0aGlz
OwogICAgIH0KLQorICAgIAogICAgIHJldHVybiAwOwogfQogCitib29sIFJlbmRlckxheWVyOjpo
aXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgSW50UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEludFBvaW50JiBo
aXRUZXN0UG9pbnQsIEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcmVuZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RQb2ludCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckJvdW5kcy54KCkgLSByZW5kZXJCb3hY
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueSgpIC0gcmVuZGVy
Qm94WSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXRUZXN0RmlsdGVyKTsKK30K
Kwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ2xpcFJlY3RzKGNvbnN0IFJlbmRlckxheWVyKiBy
b290TGF5ZXIpCiB7CiAgICAgaWYgKG1fY2xpcFJlY3RzKSB7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aAppbmRleCA5OGY1ZWFkLi5jZGRmMjMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTU0
LDYgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiBj
bGFzcyBIaXRUZXN0UmVxdWVzdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CitjbGFzcyBIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGU7CiBjbGFzcyBSZW5kZXJGcmFtZVNldDsKIGNsYXNzIFJlbmRlck1h
cnF1ZWU7CiBjbGFzcyBSZW5kZXJSZXBsaWNhOwpAQCAtNDA1LDYgKzQwNiw4IEBAIHB1YmxpYzoK
ICAgICAvLyBOb3RlIHRoYXQgdGhpcyB0cmFuc2Zvcm0gaGFzIHRoZSBwZXJzcGVjdGl2ZS1vcmln
aW4gYmFrZWQgaW4uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGVyc3BlY3RpdmVUcmFuc2Zv
cm0oKSBjb25zdDsKICAgICBGbG9hdFBvaW50IHBlcnNwZWN0aXZlT3JpZ2luKCkgY29uc3Q7Cisg
ICAgYm9vbCBwcmVzZXJ2ZXMzRCgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPnN0eWxlKCkt
PnRyYW5zZm9ybVN0eWxlM0QoKSA9PSBUcmFuc2Zvcm1TdHlsZTNEUHJlc2VydmUzRDsgfQorICAg
IGJvb2wgaGFzM0RUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybSAmJiAhbV90
cmFuc2Zvcm0tPmlzQWZmaW5lKCk7IH0KIAogICAgIHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSop
OwogCkBAIC00NTUsOCArNDU4LDE4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludExheWVyKFJl
bmRlckxheWVyKiByb290TGF5ZXIsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIHBh
aW50RGlydHlSZWN0LAogICAgICAgICAgICAgICAgICAgICBib29sIGhhdmVUcmFuc3BhcmVuY3ks
IFBhaW50UmVzdHJpY3Rpb24sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290LAogICAgICAgICAg
ICAgICAgICAgICBib29sIGFwcGxpZWRUcmFuc2Zvcm0gPSBmYWxzZSwgYm9vbCB0ZW1wb3JhcnlD
bGlwUmVjdHMgPSBmYWxzZSk7Ci0gICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RMYXllcihSZW5kZXJM
YXllciogcm9vdExheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBJbnRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSW50UG9pbnQmIGhpdFRlc3RQb2ludCwg
Ym9vbCBhcHBsaWVkVHJhbnNmb3JtID0gZmFsc2UpOwogCisgICAgLy8gUmVjdXJzZXMgdGhyb3Vn
aCB0aGUgbGF5ZXIgaGllcmFhcmNoeQorICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGF5ZXIoUmVu
ZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBJbnRQ
b2ludCYgaGl0VGVzdFBvaW50LCBib29sIGFwcGxpZWRUcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1T
dGF0ZSA9IDAsIGRvdWJsZSogek9mZnNldCA9IDApOworCisgICAgUGFzc1JlZlB0cjxIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGU+IGNyZWF0ZUxvY2FsVHJhbnNmb3JtU3RhdGUoUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBJbnRQb2ludCYg
aGl0VGVzdFBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZSogY29udGFpbmVyVHJhbnNmb3JtU3RhdGUpIGNvbnN0OworICAgIAor
ICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBJbnRQb2ludCYgaGl0VGVz
dFBvaW50LCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKKyAgICAKICAgICB2b2lkIGNvbXB1dGVTY3Jv
bGxEaW1lbnNpb25zKGJvb2wqIG5lZWRIQmFyID0gMCwgYm9vbCogbmVlZFZCYXIgPSAwKTsKIAog
ICAgIGJvb2wgc2hvdWxkQmVOb3JtYWxGbG93T25seSgpIGNvbnN0OyAKQEAgLTQ3Miw2ICs0ODUs
MTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpcnR5VmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsK
ICAgICB2b2lkIHVwZGF0ZVZpc2liaWxpdHlTdGF0dXMoKTsKIAorICAgIC8vIFRoaXMgZmxhZyBp
cyBjb21wdXRlZCBieSBSZW5kZXJMYXllckNvbXBvc2l0b3IsIHdoaWNoIGtub3dzIG1vcmUgYWJv
dXQgM2QgaGllcmFyY2hpZXMgdGhhbiB3ZSBkby4KKyAgICB2b2lkIHNldEhhczNEVHJhbnNmb3Jt
ZWREZXNjZW5kYW50KGJvb2wgYikgeyBtX2hhczNEVHJhbnNmb3JtZWREZXNjZW5kYW50ID0gYjsg
fQorICAgIGJvb2wgaGFzM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnQoKSBjb25zdCB7IHJldHVybiBt
X2hhczNEVHJhbnNmb3JtZWREZXNjZW5kYW50OyB9CisgICAgCisgICAgdm9pZCBkaXJ0eTNEVHJh
bnNmb3JtZWREZXNjZW5kYW50U3RhdHVzKCk7CisgICAgLy8gQm90aCB1cGRhdGVzIHRoZSBzdGF0
dXMsIGFuZCByZXR1cm5zIHRydWUgaWYgZGVzY2VuZGFudHMgb2YgdGhpcyBoYXZlIDNkLgorICAg
IGJvb2wgdXBkYXRlM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXMoKTsKKwogICAgIE5vZGUq
IGVuY2xvc2luZ0VsZW1lbnQoKSBjb25zdDsKIAogICAgIHZvaWQgY3JlYXRlUmVmbGVjdGlvbigp
OwpAQCAtNTcyLDYgKzU5Myw5IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fdmlzaWJsZURlc2Nl
bmRhbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVEZXNjZW5kYW50IDog
MTsKIAorICAgIGJvb2wgbV8zRFRyYW5zZm9ybWVkRGVzY2VuZGFudFN0YXR1c0RpcnR5IDogMTsK
KyAgICBib29sIG1faGFzM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnQgOiAxOyAgLy8gU2V0IG9uIGEg
c3RhY2tpbmcgY29udGV4dCBsYXllciB0aGF0IGhhcyAzRCBkZXNjZW5kYW50cyBhbnl3aGVyZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBhIHByZXNl
cnZlczNEIGhpZXJhcmNoeS4gSGludCB0byBkbyAzRC1hd2FyZSBoaXQgdGVzdGluZy4KICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgYm9vbCBtX2hhc0NvbXBvc2l0aW5nRGVz
Y2VuZGFudCA6IDE7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCmluZGV4IDBjNzYwYTEuLmEzYzViYjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcApAQCAtMzMsOCArMzMsNiBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIK
LSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRl
ICJSZW5kZXJJbWFnZS5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3Jt
U3RhdGUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuY3BwCmluZGV4IGMx
OWVkODEuLjBjZmE4ODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0
YXRlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAKQEAgLTUx
LDEyICs1MSw1NCBAQCB2b2lkIFRyYW5zZm9ybVN0YXRlOjphcHBseVRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtRnJvbUNvbgogCiB2b2lkIFRyYW5zZm9ybVN0
YXRlOjpmbGF0dGVuKCkKIHsKKyAgICBtX2xhc3RQbGFuYXJQb2ludCA9IG1hcHBlZFBvaW50KCk7
CisgICAgbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKKyAgICBtX2FjY3Vt
dWxhdGluZ1RyYW5zZm9ybSA9IGZhbHNlOworfQorCitGbG9hdFBvaW50IFRyYW5zZm9ybVN0YXRl
OjptYXBwZWRQb2ludCgpIGNvbnN0Cit7CiAgICAgaWYgKG1fZGlyZWN0aW9uID09IEFwcGx5VHJh
bnNmb3JtRGlyZWN0aW9uKQotICAgICAgICBtX2xhc3RQbGFuYXJQb2ludCA9IG1fYWNjdW11bGF0
ZWRUcmFuc2Zvcm0ubWFwUG9pbnQobV9sYXN0UGxhbmFyUG9pbnQpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9sYXN0UGxhbmFyUG9pbnQgPSBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLmludmVyc2UoKS5w
cm9qZWN0UG9pbnQobV9sYXN0UGxhbmFyUG9pbnQpOworICAgICAgICByZXR1cm4gbV9hY2N1bXVs
YXRlZFRyYW5zZm9ybS5tYXBQb2ludChtX2xhc3RQbGFuYXJQb2ludCk7CisKKyAgICByZXR1cm4g
bV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5pbnZlcnNlKCkucHJvamVjdFBvaW50KG1fbGFzdFBsYW5h
clBvaW50KTsKK30KKworLy8gSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlIG1ldGhvZHMKK3ZvaWQg
SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjptb3ZlKGludCB4LCBpbnQgeSkKK3sKKyAgICBpZiAo
bV9hY2N1bXVsYXRpbmdUcmFuc2Zvcm0pCisgICAgICAgIGZsYXR0ZW4oKTsKKworICAgIG1fbGFz
dFBsYW5hclBvaW50Lm1vdmUoeCwgeSk7CisgICAgbV9sYXN0UGxhbmFyUXVhZC5tb3ZlKHgsIHkp
OworfQorCit2b2lkIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6YXBwbHlUcmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybUZyb21Db250YWluZXIsIGJvb2wgYWNj
dW11bGF0ZVRyYW5zZm9ybSkKK3sKKyAgICBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLm11bHRMZWZ0
KHRyYW5zZm9ybUZyb21Db250YWluZXIpOyAgICAKKyAgICBpZiAoIWFjY3VtdWxhdGVUcmFuc2Zv
cm0pCisgICAgICAgIGZsYXR0ZW4oKTsKKworICAgIG1fYWNjdW11bGF0aW5nVHJhbnNmb3JtID0g
YWNjdW11bGF0ZVRyYW5zZm9ybTsKK30KKwordm9pZCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6
OmZsYXR0ZW4oKQoreworICAgIG1fbGFzdFBsYW5hclBvaW50ID0gbWFwcGVkUG9pbnQoKTsKKyAg
ICBtX2xhc3RQbGFuYXJRdWFkID0gbWFwcGVkUXVhZCgpOwogICAgIG1fYWNjdW11bGF0ZWRUcmFu
c2Zvcm0ubWFrZUlkZW50aXR5KCk7CiAgICAgbV9hY2N1bXVsYXRpbmdUcmFuc2Zvcm0gPSBmYWxz
ZTsKIH0KIAorRmxvYXRQb2ludCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6Om1hcHBlZFBvaW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5pbnZlcnNlKCku
cHJvamVjdFBvaW50KG1fbGFzdFBsYW5hclBvaW50KTsKK30KKworRmxvYXRRdWFkIEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZTo6bWFwcGVkUXVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWNj
dW11bGF0ZWRUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFF1YWQobV9sYXN0UGxhbmFyUXVhZCk7ICAg
ICAgLy8gb3IgcHJvamVjdD8KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuaCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1RyYW5zZm9ybVN0YXRlLmgKaW5kZXggZjBiODQ5MC4uNGE1ZWY5ZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9U
cmFuc2Zvcm1TdGF0ZS5oCkBAIC0yNyw4ICsyNywxMSBAQAogI2RlZmluZSBUcmFuc2Zvcm1TdGF0
ZV9oCiAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAj
aW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDYgKzQ0LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgLCBtX2RpcmVjdGlvbihtYXBwaW5nRGlyZWN0aW9uKQogICAgIHsKICAgICB9CisgICAgCisg
ICAgVHJhbnNmb3JtU3RhdGUoY29uc3QgVHJhbnNmb3JtU3RhdGUmIG90aGVyKQorICAgICAgICA6
IG1fbGFzdFBsYW5hclBvaW50KG90aGVyLm1fbGFzdFBsYW5hclBvaW50KQorICAgICAgICAsIG1f
YWNjdW11bGF0ZWRUcmFuc2Zvcm0ob3RoZXIubV9hY2N1bXVsYXRlZFRyYW5zZm9ybSkKKyAgICAg
ICAgLCBtX2FjY3VtdWxhdGluZ1RyYW5zZm9ybShvdGhlci5tX2FjY3VtdWxhdGluZ1RyYW5zZm9y
bSkKKyAgICAgICAgLCBtX2RpcmVjdGlvbihvdGhlci5tX2RpcmVjdGlvbikKKyAgICB7CisgICAg
fQogCiAgICAgdm9pZCBtb3ZlKGNvbnN0IEludFNpemUmIHMpCiAgICAgewpAQCAtNDksNiArNjAs
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBtb3ZlKGludCB4LCBpbnQgeSk7CiAgICAgdm9p
ZCBhcHBseVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtRnJv
bUNvbnRhaW5lciwgYm9vbCBhY2N1bXVsYXRlVHJhbnNmb3JtKTsKKyAgICBGbG9hdFBvaW50IG1h
cHBlZFBvaW50KCkgY29uc3Q7CiAgICAgdm9pZCBmbGF0dGVuKCk7CiAKICAgICBGbG9hdFBvaW50
IG1fbGFzdFBsYW5hclBvaW50OwpAQCAtNTcsNiArNjksNTIgQEAgcHVibGljOgogICAgIFRyYW5z
Zm9ybURpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIH07CiAKK2NsYXNzIEhpdFRlc3RpbmdUcmFuc2Zv
cm1TdGF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4g
Y3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKHAs
IHF1YWQpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIaXRUZXN0aW5nVHJhbnNm
b3JtU3RhdGU+IGNyZWF0ZShjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUmIG90aGVyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGUob3RoZXIpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3ZlKGNvbnN0IEludFNpemUmIHMp
CisgICAgeworICAgICAgICBtb3ZlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgbW92ZShpbnQgeCwgaW50IHkpOworICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybUZyb21Db250YWluZXIsIGJvb2wg
YWNjdW11bGF0ZVRyYW5zZm9ybSk7CisgICAgRmxvYXRQb2ludCBtYXBwZWRQb2ludCgpIGNvbnN0
OworICAgIEZsb2F0UXVhZCBtYXBwZWRRdWFkKCkgY29uc3Q7CisgICAgdm9pZCBmbGF0dGVuKCk7
CisKKyAgICBGbG9hdFBvaW50IG1fbGFzdFBsYW5hclBvaW50OworICAgIEZsb2F0UXVhZCBtX2xh
c3RQbGFuYXJRdWFkOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fYWNjdW11bGF0ZWRUcmFu
c2Zvcm07CisgICAgYm9vbCBtX2FjY3VtdWxhdGluZ1RyYW5zZm9ybTsKKworcHJpdmF0ZToKKyAg
ICBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUoY29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgRmxv
YXRRdWFkJiBxdWFkKQorICAgICAgICA6IG1fbGFzdFBsYW5hclBvaW50KHApCisgICAgICAgICwg
bV9sYXN0UGxhbmFyUXVhZChxdWFkKQorICAgICAgICAsIG1fYWNjdW11bGF0aW5nVHJhbnNmb3Jt
KGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
KGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSYgb3RoZXIpCisgICAgICAgIDogUmVmQ291
bnRlZDxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+KCkKKyAgICAgICAgLCBtX2xhc3RQbGFuYXJQ
b2ludChvdGhlci5tX2xhc3RQbGFuYXJQb2ludCkKKyAgICAgICAgLCBtX2xhc3RQbGFuYXJRdWFk
KG90aGVyLm1fbGFzdFBsYW5hclF1YWQpCisgICAgICAgICwgbV9hY2N1bXVsYXRlZFRyYW5zZm9y
bShvdGhlci5tX2FjY3VtdWxhdGVkVHJhbnNmb3JtKQorICAgICAgICAsIG1fYWNjdW11bGF0aW5n
VHJhbnNmb3JtKG90aGVyLm1fYWNjdW11bGF0aW5nVHJhbnNmb3JtKQorICAgIHsKKyAgICB9Cit9
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBUcmFuc2Zvcm1TdGF0ZV9o
Cg==
</data>
<flag name="review"
          id="13793"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28224</attachid>
            <date>2009-03-03 09:10:35 -0800</date>
            <delta_ts>2009-03-03 09:13:25 -0800</delta_ts>
            <desc>Prequel patch: refactor code into transformFromContainer()</desc>
            <filename>24312a_patch.txt</filename>
            <type>text/plain</type>
            <size>7310</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTdiMzE1My4uMDI1NmVjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwyMiBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNDMxMgorICAgICAgICAKKyAgICAgICAgRmFjdG9yIHRoZSBjb2RlIHRoYXQgY29t
cHV0ZSBhIHRyYW5zZm9ybSByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyCisgICAgICAgIGludG8g
UmVuZGVyT2JqZWN0Ojp0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKCkuCisgICAgICAgIAorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjptYXBMb2NhbFRvQWJzb2x1dGVQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6dHJhbnNmb3JtRnJvbUNv
bnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorCisyMDA5LTAz
LTAyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNDMxNwogICAgICAgICAKICAgICAgICAgQWx3YXlzIHJldHVy
biB8dHJ1ZXwgZnJvbSBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQoKSBp
ZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggYzE3YjA4Ny4uZWFhMzYyNiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCkBAIC05NTcsMjkgKzk1Nyw5IEBAIHZvaWQgUmVuZGVyQm94OjptYXBM
b2NhbFRvQWJzb2x1dGVQb2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5z
Zm9yCiAKICAgICAgICAgSW50U2l6ZSBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFp
bmVyKG8pOwogICAgICAgICBpZiAodXNlVHJhbnNmb3JtcykgewotCi0gICAgICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyOwotICAgICAgICAgICAgdHJh
bnNmb3JtRnJvbUNvbnRhaW5lci50cmFuc2xhdGUoY29udGFpbmVyT2Zmc2V0LndpZHRoKCksIGNv
bnRhaW5lck9mZnNldC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAoaGFzTGF5ZXIoKSAmJiBs
YXllcigpLT50cmFuc2Zvcm0oKSkKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Gcm9tQ29udGFp
bmVyLm11bHRMZWZ0KCpsYXllcigpLT50cmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIElmIGVpdGhlciB0aGUgY29udGFpbmVyIG9yIHRoaXMgaGF2ZSB0cmFuc2Zvcm0t
c3R5bGU6IHByZXNlcnZlLTNkLCB3ZSBuZWVkIHRvIHN0YXkgaW4gM2Qgc3BhY2UgYnkKLSAgICAg
ICAgICAgIC8vIGFjY3VtdWxhdGluZyB0aGUgdHJhbnNmb3JtLgorICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggY29udGFpbmVyVHJhbnNmb3JtID0gdHJhbnNmb3JtRnJvbUNvbnRhaW5l
cihvLCBjb250YWluZXJPZmZzZXQpOwogICAgICAgICAgICAgYm9vbCBhY2N1bXVsYXRlVHJhbnNm
b3JtID0gKG8tPnN0eWxlKCktPnRyYW5zZm9ybVN0eWxlM0QoKSA9PSBUcmFuc2Zvcm1TdHlsZTNE
UHJlc2VydmUzRCB8fCBzdHlsZSgpLT50cmFuc2Zvcm1TdHlsZTNEKCkgPT0gVHJhbnNmb3JtU3R5
bGUzRFByZXNlcnZlM0QpOwotICAgICAgICAgICAgaWYgKG8tPnN0eWxlKCktPmhhc1BlcnNwZWN0
aXZlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBQZXJwc2VjdGl2ZSBvbiB0aGUgY29udGFpbmVy
IGFmZmVjdHMgdXMsIHNvIHdlIGhhdmUgdG8gZmFjdG9yIGl0IGluIGhlcmUuCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKG8tPmhhc0xheWVyKCkpOwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQg
cGVyc3BlY3RpdmVPcmlnaW4gPSB0b1JlbmRlckJveChvKS0+bGF5ZXIoKS0+cGVyc3BlY3RpdmVP
cmlnaW4oKTsKLQotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBlcnNwZWN0
aXZlTWF0cml4OwotICAgICAgICAgICAgICAgIHBlcnNwZWN0aXZlTWF0cml4LmFwcGx5UGVyc3Bl
Y3RpdmUoby0+c3R5bGUoKS0+cGVyc3BlY3RpdmUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgdHJhbnNmb3JtRnJvbUNvbnRhaW5lci50cmFuc2xhdGVSaWdodDNkKC1wZXJz
cGVjdGl2ZU9yaWdpbi54KCksIC1wZXJzcGVjdGl2ZU9yaWdpbi55KCksIDApOwotICAgICAgICAg
ICAgICAgIHRyYW5zZm9ybUZyb21Db250YWluZXIubXVsdGlwbHkocGVyc3BlY3RpdmVNYXRyaXgp
OwotICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZyb21Db250YWluZXIudHJhbnNsYXRlUmlnaHQz
ZChwZXJzcGVjdGl2ZU9yaWdpbi54KCksIHBlcnNwZWN0aXZlT3JpZ2luLnkoKSwgMCk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRyYW5zZm9ybVN0YXRlLmFwcGx5VHJhbnNmb3JtKHRy
YW5zZm9ybUZyb21Db250YWluZXIsIGFjY3VtdWxhdGVUcmFuc2Zvcm0pOworICAgICAgICAgICAg
dHJhbnNmb3JtU3RhdGUuYXBwbHlUcmFuc2Zvcm0oY29udGFpbmVyVHJhbnNmb3JtLCBhY2N1bXVs
YXRlVHJhbnNmb3JtKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICB0cmFuc2Zvcm1TdGF0
ZS5tb3ZlKGNvbnRhaW5lck9mZnNldC53aWR0aCgpLCBjb250YWluZXJPZmZzZXQuaGVpZ2h0KCkp
OwogCkBAIC0xMDA0LDI4ICs5ODQsOSBAQCB2b2lkIFJlbmRlckJveDo6bWFwQWJzb2x1dGVUb0xv
Y2FsUG9pbnQoYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2ZvcgogCiAgICAg
ICAgIEludFNpemUgY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcihvKTsKICAg
ICAgICAgaWYgKHVzZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHRyYW5zZm9ybUZyb21Db250YWluZXI7Ci0gICAgICAgICAgICB0cmFuc2Zvcm1Gcm9tQ29u
dGFpbmVyLnRyYW5zbGF0ZShjb250YWluZXJPZmZzZXQud2lkdGgoKSwgY29udGFpbmVyT2Zmc2V0
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPnRyYW5z
Zm9ybSgpKQotICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZyb21Db250YWluZXIubXVsdExlZnQo
KmxheWVyKCktPnRyYW5zZm9ybSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSWYg
ZWl0aGVyIHRoZSBjb250YWluZXIgb3IgdGhpcyBoYXZlIHRyYW5zZm9ybS1zdHlsZTogcHJlc2Vy
dmUtM2QsIHdlIG5lZWQgdG8gc3RheSBpbiAzZCBzcGFjZSBieQotICAgICAgICAgICAgLy8gYWNj
dW11bGF0aW5nIHRoZSB0cmFuc2Zvcm0uCisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBjb250YWluZXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKG8sIGNvbnRhaW5l
ck9mZnNldCk7CiAgICAgICAgICAgICBib29sIGFjY3VtdWxhdGVUcmFuc2Zvcm0gPSAoby0+c3R5
bGUoKS0+dHJhbnNmb3JtU3R5bGUzRCgpID09IFRyYW5zZm9ybVN0eWxlM0RQcmVzZXJ2ZTNEIHx8
IHN0eWxlKCktPnRyYW5zZm9ybVN0eWxlM0QoKSA9PSBUcmFuc2Zvcm1TdHlsZTNEUHJlc2VydmUz
RCk7Ci0gICAgICAgICAgICBpZiAoby0+c3R5bGUoKS0+aGFzUGVyc3BlY3RpdmUoKSkgewotICAg
ICAgICAgICAgICAgIC8vIFBlcnBzZWN0aXZlIG9uIHRoZSBjb250YWluZXIgYWZmZWN0cyB1cywg
c28gd2UgaGF2ZSB0byBmYWN0b3IgaXQgaW4gaGVyZS4KLSAgICAgICAgICAgICAgICBBU1NFUlQo
by0+aGFzTGF5ZXIoKSk7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwZXJzcGVjdGl2ZU9y
aWdpbiA9IHRvUmVuZGVyQm94KG8pLT5sYXllcigpLT5wZXJzcGVjdGl2ZU9yaWdpbigpOwotCi0g
ICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGVyc3BlY3RpdmVNYXRyaXg7Ci0g
ICAgICAgICAgICAgICAgcGVyc3BlY3RpdmVNYXRyaXguYXBwbHlQZXJzcGVjdGl2ZShvLT5zdHls
ZSgpLT5wZXJzcGVjdGl2ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB0
cmFuc2Zvcm1Gcm9tQ29udGFpbmVyLnRyYW5zbGF0ZVJpZ2h0M2QoLXBlcnNwZWN0aXZlT3JpZ2lu
LngoKSwgLXBlcnNwZWN0aXZlT3JpZ2luLnkoKSwgMCk7Ci0gICAgICAgICAgICAgICAgdHJhbnNm
b3JtRnJvbUNvbnRhaW5lci5tdWx0aXBseShwZXJzcGVjdGl2ZU1hdHJpeCk7Ci0gICAgICAgICAg
ICAgICAgdHJhbnNmb3JtRnJvbUNvbnRhaW5lci50cmFuc2xhdGVSaWdodDNkKHBlcnNwZWN0aXZl
T3JpZ2luLngoKSwgcGVyc3BlY3RpdmVPcmlnaW4ueSgpLCAwKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdHJhbnNmb3JtU3RhdGUuYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtRnJvbUNv
bnRhaW5lciwgYWNjdW11bGF0ZVRyYW5zZm9ybSk7CisgICAgICAgICAgICB0cmFuc2Zvcm1TdGF0
ZS5hcHBseVRyYW5zZm9ybShjb250YWluZXJUcmFuc2Zvcm0sIGFjY3VtdWxhdGVUcmFuc2Zvcm0p
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoLWNvbnRh
aW5lck9mZnNldC53aWR0aCgpLCAtY29udGFpbmVyT2Zmc2V0LmhlaWdodCgpKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA1ZDkwM2ExLi4xNjcyZmViIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTE2ODIsNiArMTY4MiwzMCBAQCB2b2lkIFJlbmRl
ck9iamVjdDo6bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQoYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFu
c2Zvcm1zLCBUcmFucwogICAgIH0KIH0KIAorVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyT2Jq
ZWN0Ojp0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVy
T2JqZWN0LCBjb25zdCBJbnRTaXplJiBvZmZzZXRJbkNvbnRhaW5lcikgY29uc3QKK3sKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250YWluZXJUcmFuc2Zvcm07CisgICAgY29udGFpbmVyVHJh
bnNmb3JtLnRyYW5zbGF0ZShvZmZzZXRJbkNvbnRhaW5lci53aWR0aCgpLCBvZmZzZXRJbkNvbnRh
aW5lci5oZWlnaHQoKSk7CisgICAgUmVuZGVyTGF5ZXIqIGxheWVyOworICAgIGlmIChoYXNMYXll
cigpICYmIChsYXllciA9IHRvUmVuZGVyQm94KHRoaXMpLT5sYXllcigpKSAmJiBsYXllci0+dHJh
bnNmb3JtKCkpCisgICAgICAgIGNvbnRhaW5lclRyYW5zZm9ybS5tdWx0TGVmdCgqbGF5ZXItPnRy
YW5zZm9ybSgpKTsKKyAgICAKKyAgICBpZiAoY29udGFpbmVyT2JqZWN0ICYmIGNvbnRhaW5lck9i
amVjdC0+c3R5bGUoKS0+aGFzUGVyc3BlY3RpdmUoKSkgeworICAgICAgICAvLyBQZXJwc2VjdGl2
ZSBvbiB0aGUgY29udGFpbmVyIGFmZmVjdHMgdXMsIHNvIHdlIGhhdmUgdG8gZmFjdG9yIGl0IGlu
IGhlcmUuCisgICAgICAgIEFTU0VSVChjb250YWluZXJPYmplY3QtPmhhc0xheWVyKCkpOworICAg
ICAgICBGbG9hdFBvaW50IHBlcnNwZWN0aXZlT3JpZ2luID0gdG9SZW5kZXJCb3goY29udGFpbmVy
T2JqZWN0KS0+bGF5ZXIoKS0+cGVyc3BlY3RpdmVPcmlnaW4oKTsKKworICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBwZXJzcGVjdGl2ZU1hdHJpeDsKKyAgICAgICAgcGVyc3BlY3RpdmVNYXRy
aXguYXBwbHlQZXJzcGVjdGl2ZShjb250YWluZXJPYmplY3QtPnN0eWxlKCktPnBlcnNwZWN0aXZl
KCkpOworICAgICAgICAKKyAgICAgICAgY29udGFpbmVyVHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0
M2QoLXBlcnNwZWN0aXZlT3JpZ2luLngoKSwgLXBlcnNwZWN0aXZlT3JpZ2luLnkoKSwgMCk7Cisg
ICAgICAgIGNvbnRhaW5lclRyYW5zZm9ybS5tdWx0aXBseShwZXJzcGVjdGl2ZU1hdHJpeCk7Cisg
ICAgICAgIGNvbnRhaW5lclRyYW5zZm9ybS50cmFuc2xhdGVSaWdodDNkKHBlcnNwZWN0aXZlT3Jp
Z2luLngoKSwgcGVyc3BlY3RpdmVPcmlnaW4ueSgpLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Y29udGFpbmVyVHJhbnNmb3JtOworfQorCiBGbG9hdFF1YWQgUmVuZGVyT2JqZWN0Ojpsb2NhbFRv
Q29udGFpbmVyUXVhZChjb25zdCBGbG9hdFF1YWQmIGxvY2FsUXVhZCwgUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHJl
cGFpbnRDb250YWluZXIgPT0gdGhpcykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYTFk
ZGRkOS4uMmQ1NGIwNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTY3OCw2ICs2Nzgs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9BYnNvbHV0ZVBvaW50KGJv
b2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgbWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQoYm9vbCBmaXhlZCwgYm9vbCB1
c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OwogICAgIAorICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHRyYW5zZm9ybUZyb21Db250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBj
b250YWluZXIsIGNvbnN0IEludFNpemUmIG9mZnNldEluQ29udGFpbmVyKSBjb25zdDsKKyAgICAK
ICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50
IC8qdHgqLywgaW50IC8qdHkqLykgeyB9OwogCiAgICAgSW50UmVjdCBhYnNvbHV0ZU91dGxpbmVC
b3VuZHMoKSBjb25zdAo=
</data>
<flag name="review"
          id="13799"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>