<?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>67438</bug_id>
          
          <creation_ts>2011-09-01 14:50:56 -0700</creation_ts>
          <short_desc>[chromium] Move updateLayers from LayerRendererChromium to CCLayerTreeHost</short_desc>
          <delta_ts>2011-09-02 18:05:33 -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>WebCore Misc.</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>66430</dependson>
          <blocked>67440</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrienne Walker">enne</reporter>
          <assigned_to name="Adrienne Walker">enne</assigned_to>
          <cc>enne</cc>
    
    <cc>husky</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>460798</commentid>
    <comment_count>0</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-01 14:50:56 -0700</bug_when>
    <thetext>updateLayers processes the LayerChromium tree on the main thread, so it should live on CCLayerTreeHost rather than on the LayerRendererChromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460926</commentid>
    <comment_count>1</comment_count>
      <attachid>106065</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-01 16:51:05 -0700</bug_when>
    <thetext>Created attachment 106065
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461262</commentid>
    <comment_count>2</comment_count>
      <attachid>106065</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-02 09:44:52 -0700</bug_when>
    <thetext>Comment on attachment 106065
Patch

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

Sheep.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:-104
&gt; -void CCLayerTreeHost::preCommit(CCLayerTreeHostImpl* hostImpl)

This is a wonderful deletion to wake up to. Thank you!!!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:-239
&gt; -    m_layerTreeHostImpl-&gt;updateLayers();

&lt;3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461323</commentid>
    <comment_count>3</comment_count>
      <attachid>106153</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-02 10:53:55 -0700</bug_when>
    <thetext>Created attachment 106153
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461324</commentid>
    <comment_count>4</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-02 10:55:17 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=106153) [details]
&gt; Patch

Rebaselined, applies to ToT.

I&apos;d love to get this into m15 to make merging less painful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461362</commentid>
    <comment_count>5</comment_count>
      <attachid>106153</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-02 11:21:56 -0700</bug_when>
    <thetext>Comment on attachment 106153
Patch

R=me, excellent.  The name &quot;CCLayerTreeHostCommon.h&quot; is a little worrying to me because it contains a friggin&apos; gigantic inline templatized function.  I don&apos;t want people to include that from another header file, or really from any file other than CCLayerTreeHost and LayerRendererChromium.  One pattern I&apos;ve seen elsewhere in the code is to suffix these sorts of headers with &quot;InlineMethods.h&quot;, what would you think of doing that?

Also, shouldn&apos;t the other caller be CCLayerTreeHostImpl, not LRC?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461369</commentid>
    <comment_count>6</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-02 11:29:16 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 106153 [details])
&gt; R=me, excellent.  The name &quot;CCLayerTreeHostCommon.h&quot; is a little worrying to me because it contains a friggin&apos; gigantic inline templatized function.  I don&apos;t want people to include that from another header file, or really from any file other than CCLayerTreeHost and LayerRendererChromium.  One pattern I&apos;ve seen elsewhere in the code is to suffix these sorts of headers with &quot;InlineMethods.h&quot;, what would you think of doing that?

Actually, how about I declare the two versions we export in the header, move the template to the source file and then define the two stub functions we care about?

&gt; Also, shouldn&apos;t the other caller be CCLayerTreeHostImpl, not LRC?

Yes, eventually I think that should be the case.  Nat has been making the excellent argument that LTH(I) should deal with layer trees and LRC is our gl implementation.  Under that sort of organization, drawLayers should move to LTHI.

This is the more important move though, because it&apos;s across the thread boundary.  Moving drawLayers is more of a cleanup.  One thing at a time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461379</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-02 11:39:52 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 106153 [details] [details])
&gt; &gt; R=me, excellent.  The name &quot;CCLayerTreeHostCommon.h&quot; is a little worrying to me because it contains a friggin&apos; gigantic inline templatized function.  I don&apos;t want people to include that from another header file, or really from any file other than CCLayerTreeHost and LayerRendererChromium.  One pattern I&apos;ve seen elsewhere in the code is to suffix these sorts of headers with &quot;InlineMethods.h&quot;, what would you think of doing that?
&gt; 
&gt; Actually, how about I declare the two versions we export in the header, move the template to the source file and then define the two stub functions we care about?

If you can make it blend that sounds great!

&gt; 
&gt; &gt; Also, shouldn&apos;t the other caller be CCLayerTreeHostImpl, not LRC?
&gt; 
&gt; Yes, eventually I think that should be the case.  Nat has been making the excellent argument that LTH(I) should deal with layer trees and LRC is our gl implementation.  Under that sort of organization, drawLayers should move to LTHI.
&gt; 
&gt; This is the more important move though, because it&apos;s across the thread boundary.  Moving drawLayers is more of a cleanup.  One thing at a time.

Yes, definitely that&apos;s not a thing to do now - I was just asking to make sure I knew where we were going.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461485</commentid>
    <comment_count>8</comment_count>
      <attachid>106185</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-02 13:40:09 -0700</bug_when>
    <thetext>Created attachment 106185
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461486</commentid>
    <comment_count>9</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-02 13:40:42 -0700</bug_when>
    <thetext>&gt; &gt; Actually, how about I declare the two versions we export in the header, move the template to the source file and then define the two stub functions we care about?
&gt; 
&gt; If you can make it blend that sounds great!

If I&apos;ve learned anything from Will It Blend?, it&apos;s that the answer is always yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461491</commentid>
    <comment_count>10</comment_count>
      <attachid>106185</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-02 13:47:17 -0700</bug_when>
    <thetext>Comment on attachment 106185
Patch

Aha, I see what you did there.  Clever.

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461676</commentid>
    <comment_count>11</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-02 18:05:33 -0700</bug_when>
    <thetext>Committed r94474: &lt;http://trac.webkit.org/changeset/94474&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106065</attachid>
            <date>2011-09-01 16:51:05 -0700</date>
            <delta_ts>2011-09-02 10:53:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67438-20110901165104.patch</filename>
            <type>text/plain</type>
            <size>69405</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQzNTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyOTY3ZjgyNGY1YzdkYWIy
MDYxMTVmMjU2Y2YxZmQyZjc0Njk5NmJlLi4zNGY1ZmNkZTNhMzU5OTVlYjY2MmUwOWVkOTQ3OWU5
MTJlMTgyMTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDggQEAKIDIwMTEtMDktMDEgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAorICAgICAgICBbY2hyb21pdW1dIE1vdmUg
dXBkYXRlTGF5ZXJzIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIENDTGF5ZXJUcmVlSG9z
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0MzgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVk
IGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgIE1vdmUgZnVuY3Rpb25hbGl0eSB1c2VkIGJ5
IGJvdGggQ0NMYXllclRyZWVIb3N0IGFuZAorICAgICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0g
aW50byBDQ0xheWVyVHJlZUhvc3RDb21tb24uIE1vdmUgdXBkYXRlLCBwYWludCwKKyAgICAgICAg
YW5kIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZSBmdW5jdGlvbnMgaW50byBDQ2xheWVyVHJlZUhv
c3QuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzb3J0TGF5
ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4
dHVyZU1lbW9yeVJlY2xhaW1MaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNv
cnRMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0
VG8pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6aXNT
Y2FsZU9yVHJhbnNsYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCk6CisKKzIwMTEt
MDktMDEgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKwogICAgICAgICBbY2hy
b21pdW1dIFJlbW92ZSBMYXllclJlbmRlcmVyQ2hyb21pdW0gcmVmZXJlbmNlcyBmcm9tIHRoZSBM
YXllckNocm9taXVtIHRyZWUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY2NDMwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhNTQ4NDVjZWNiYjUzMGU1NTNj
YThjOTM5NTFkMzdmNzc2YjZkMTIxLi5kYTM3MWQ2YTI3NmQzZDM4YTVmNDg2NzE2OWJlMWZkZmE1
MGFlNTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTM3LDYgKzM1MzcsOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NN
YWluVGhyZWFkLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGQ2NDg4YjA3NjAwZmMy
Njk0YTRmZGMzYTg0ZDIxODFmYmQ1YmEyNzAuLjI1OGVkYmU5NTA4MDg5YzBhZGQ1ZTRkNWQwYzc2
OTdhYzE4OTQ5NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC00MzcsNSArNDM3LDEwIEBA
IGJvb2wgTGF5ZXJDaHJvbWl1bTo6ZGVzY2VuZGFudERyYXdzQ29udGVudCgpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCit2b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVt
PiA+OjppdGVyYXRvciwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwg
dm9pZCopCit7CisgICAgLy8gQ3VycmVudGx5IHdlIGRvbid0IHVzZSB6LW9yZGVyIHRvIGRlY2lk
ZSB3aGF0IHRvIHBhaW50LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gYWN0dWFsbHkgc29ydCBMYXll
ckNocm9taXVtcy4KK30KKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBhN2ViMjA4MzUyNjdhMzRhMGE0NTAzOTg2ZjFiMDVj
ODcyNDdiNTE1Li5iN2Q0YTJjNDg5ZTRkODExYTM2ODY3NjdlYzhjYTc1ZjNkYWUxYTNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5oCkBAIC0zMDAsNiArMzAwLDggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
bV9uYW1lOwogfTsKIAordm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPjo6aXRlcmF0b3IsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3Is
IHZvaWQqKTsKKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggYWFhZTQzMjRmOGQ3ZTgx
MWI2NDg4MjdjOTJlNDg5NjI2ODQwYTIwMi4uYTYwYzE4NjQzNWIxNDVlOTUyYjVmMGM0MDY5ZjMz
YTMyZDI2NjYyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01
Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIldlYkdMTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5o
IgogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgpAQCAtNzgsMzI0ICs3
OSwxMiBAQCBzdGF0aWMgc2l6ZV90IHRleHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRlcyA9IDY0
ICogMTAyNCAqIDEwMjQ7CiAvLyBUaGUgbWF4aW11bSB0ZXh0dXJlIG1lbW9yeSB1c2FnZSB3aGVu
IGFza2VkIHRvIHJlbGVhc2UgdGV4dHVyZXMuCiBzdGF0aWMgc2l6ZV90IHRleHR1cmVNZW1vcnlM
b3dMaW1pdEJ5dGVzID0gMyAqIDEwMjQgKiAxMDI0OwogCi1uYW1lc3BhY2UgewotCi1JbnRSZWN0
IGNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0LCBj
b25zdCBJbnRSZWN0JiBsYXllckJvdW5kUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSkKLXsKLSAgICAvLyBJcyB0aGlzIGxheWVyIGZ1bGx5IGNvbnRhaW5lZCB3aXRo
aW4gdGhlIHRhcmdldCBzdXJmYWNlPwotICAgIEludFJlY3QgbGF5ZXJJblN1cmZhY2VTcGFjZSA9
IHRyYW5zZm9ybS5tYXBSZWN0KGxheWVyQm91bmRSZWN0KTsKLSAgICBpZiAodGFyZ2V0U3VyZmFj
ZVJlY3QuY29udGFpbnMobGF5ZXJJblN1cmZhY2VTcGFjZSkpCi0gICAgICAgIHJldHVybiBsYXll
ckJvdW5kUmVjdDsKLQotICAgIC8vIElmIHRoZSBsYXllciBkb2Vzbid0IGZpbGwgdXAgdGhlIGVu
dGlyZSBzdXJmYWNlLCB0aGVuIGZpbmQgdGhlIHBhcnQgb2YKLSAgICAvLyB0aGUgc3VyZmFjZSBy
ZWN0IHdoZXJlIHRoZSBsYXllciBjb3VsZCBiZSB2aXNpYmxlLiBUaGlzIGF2b2lkcyB0cnlpbmcg
dG8KLSAgICAvLyBwcm9qZWN0IHN1cmZhY2UgcmVjdCBwb2ludHMgdGhhdCBhcmUgYmVoaW5kIHRo
ZSBwcm9qZWN0aW9uIHBvaW50LgotICAgIEludFJlY3QgbWluaW1hbFN1cmZhY2VSZWN0ID0gdGFy
Z2V0U3VyZmFjZVJlY3Q7Ci0gICAgbWluaW1hbFN1cmZhY2VSZWN0LmludGVyc2VjdChsYXllcklu
U3VyZmFjZVNwYWNlKTsKLQotICAgIC8vIFByb2plY3QgdGhlIGNvcm5lcnMgb2YgdGhlIHRhcmdl
dCBzdXJmYWNlIHJlY3QgaW50byB0aGUgbGF5ZXIgc3BhY2UuCi0gICAgLy8gVGhpcyBib3VuZGlu
ZyByZWN0YW5nbGUgbWF5IGJlIGxhcmdlciB0aGFuIGl0IG5lZWRzIHRvIGJlIChiZWluZwotICAg
IC8vIGF4aXMtYWxpZ25lZCksIGJ1dCBpcyBhIHJlYXNvbmFibGUgZmlsdGVyIG9uIHRoZSBzcGFj
ZSB0byBjb25zaWRlci4KLSAgICAvLyBOb24taW52ZXJ0aWJsZSB0cmFuc2Zvcm1zIHdpbGwgY3Jl
YXRlIGFuIGVtcHR5IHJlY3QgaGVyZS4KLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBz
dXJmYWNlVG9MYXllciA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAgSW50UmVjdCBsYXllclJl
Y3QgPSBzdXJmYWNlVG9MYXllci5wcm9qZWN0UXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KG1pbmlt
YWxTdXJmYWNlUmVjdCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgIGxheWVyUmVjdC5p
bnRlcnNlY3QobGF5ZXJCb3VuZFJlY3QpOwotICAgIHJldHVybiBsYXllclJlY3Q7Ci19Ci0KLS8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgbWF0cml4IGhhcyBubyByb3RhdGlvbiwgc2tldyBvciBwZXJz
cGVjdGl2ZSBjb21wb25lbnRzIHRvIGl0LgotYm9vbCBpc1NjYWxlT3JUcmFuc2xhdGlvbihjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKLXsKLSAgICByZXR1cm4gIW0ubTEyKCkgJiYgIW0u
bTEzKCkgJiYgIW0ubTE0KCkKLSAgICAgICAgICAgJiYgIW0ubTIxKCkgJiYgIW0ubTIzKCkgJiYg
IW0ubTI0KCkKLSAgICAgICAgICAgJiYgIW0ubTMxKCkgJiYgIW0ubTMyKCkgJiYgIW0ubTQzKCkK
LSAgICAgICAgICAgJiYgbS5tNDQoKTsKLQotfQotCi12b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+OjppdGVyYXRvciwgdm9pZCopCitzaXplX3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0
ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0KCkKIHsKLSAgICAvLyBDdXJyZW50bHkgd2UgZG9uJ3Qg
dXNlIHotb3JkZXIgdG8gZGVjaWRlIHdoYXQgdG8gcGFpbnQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0
byBhY3R1YWxseSBzb3J0IExheWVyQ2hyb21pdW1zLgotfQotCi12b2lkIHNvcnRMYXllcnMoVmVj
dG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0b3IgZmlyc3QsIFZlY3RvcjxSZWZQdHI8
Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGVuZCwgQ0NMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIp
Ci17Ci0gICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c29ydExheWVycyIs
IDAsIDApOwotICAgIGxheWVyU29ydGVyLT5zb3J0KGZpcnN0LCBlbmQpOwotfQotCi0vLyBSZWN1
cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBh
bmQgY29tcHV0ZXMgYWxsIHRoZQotLy8gbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucywgc2Npc3Nv
ciByZWN0YW5nbGVzLCByZW5kZXIgc3VyZmFjZXMsIGV0Yy4KLXRlbXBsYXRlPHR5cGVuYW1lIExh
eWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIExheWVyU29ydGVy
Pgotdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJUeXBlKiBs
YXllciwgTGF5ZXJUeXBlKiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBw
YXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0
cml4LCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
VmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIGxheWVyTGlzdCwgTGF5ZXJTb3J0ZXIqIGxheWVy
U29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCi17Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PExheWVyVHlwZT4gPiBMYXllckxpc3Q7Ci0gICAgLy8gQ29tcHV0ZSB0aGUgbmV3IG1hdHJpeCB0
cmFuc2Zvcm1hdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGlzIGxheWVyIGFuZAotICAg
IC8vIGFsbCBpdHMgY2hpbGRyZW4uIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhl
IGxheWVyJ3MgcG9zaXRpb24KLSAgICAvLyBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyJ3Mg
YW5jaG9yIHBvaW50LiBBbHNvLCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gdXNlZAotICAgIC8vIGFz
c3VtZXMgdGhhdCB0aGUgb3JpZ2luIGlzIGF0IHRoZSBsb3dlciBsZWZ0IGV2ZW4gdGhvdWdoIHRo
ZSBjb29yZGluYXRlcyB0aGUgYnJvd3NlcgotICAgIC8vIGdpdmVzIHVzIGZvciB0aGUgbGF5ZXJz
IGFyZSBmb3IgdGhlIHVwcGVyIGxlZnQgY29ybmVyLiBUaGUgWSBmbGlwIGhhcHBlbnMgdmlhCi0g
ICAgLy8gdGhlIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIGFwcGxpZWQgYXQgcmVuZGVyIHRpbWUu
Ci0gICAgLy8gVGhlIHRyYW5zZm9ybWF0aW9uIGNoYWluIGZvciB0aGUgbGF5ZXIgaXMgKHVzaW5n
IHRoZSBNYXRyaXggeCBWZWN0b3Igb3JkZXIpOgotICAgIC8vIE0gPSBNW3BdICogVHJbbF0gKiBN
W2xdICogVHJbY10KLSAgICAvLyBXaGVyZSBNW3BdIGlzIHRoZSBwYXJlbnQgbWF0cml4IHBhc3Nl
ZCBkb3duIHRvIHRoZSBmdW5jdGlvbgotICAgIC8vICAgICAgIFRyW2xdIGlzIHRoZSB0cmFuc2xh
dGlvbiBtYXRyaXggbG9jYXRpbmcgdGhlIGxheWVyJ3MgYW5jaG9yIHBvaW50Ci0gICAgLy8gICAg
ICAgVHJbY10gaXMgdGhlIHRyYW5zbGF0aW9uIG9mZnNldCBiZXR3ZWVuIHRoZSBhbmNob3IgcG9p
bnQgYW5kIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyCi0gICAgLy8gICAgICAgTVtsXSBpcyB0aGUg
bGF5ZXIncyBtYXRyaXggKGFwcGxpZWQgYXQgdGhlIGFuY2hvciBwb2ludCkKLSAgICAvLyBUaGlz
IHRyYW5zZm9ybSBjcmVhdGVzIGEgY29vcmRpbmF0ZSBzeXN0ZW0gd2hvc2Ugb3JpZ2luIGlzIHRo
ZSBjZW50ZXIgb2YgdGhlIGxheWVyLgotICAgIC8vIE5vdGUgdGhhdCB0aGUgZmluYWwgbWF0cml4
IHVzZWQgYnkgdGhlIHNoYWRlciBmb3IgdGhlIGxheWVyIGlzIFAgKiBNICogUyAuIFRoaXMgZmlu
YWwgcHJvZHVjdAotICAgIC8vIGlzIGNvbXB1dGVkIGluIGRyYXdUZXh0dXJlZFF1YWQoKS4KLSAg
ICAvLyBXaGVyZTogUCBpcyB0aGUgcHJvamVjdGlvbiBtYXRyaXgKLSAgICAvLyAgICAgICAgTSBp
cyB0aGUgbGF5ZXIncyBtYXRyaXggY29tcHV0ZWQgYWJvdmUKLSAgICAvLyAgICAgICAgUyBpcyB0
aGUgc2NhbGUgYWRqdXN0bWVudCAodG8gc2NhbGUgdXAgdG8gdGhlIGxheWVyIHNpemUpCi0gICAg
SW50U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7Ci0gICAgRmxvYXRQb2ludCBhbmNob3JQ
b2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwotICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBs
YXllci0+cG9zaXRpb24oKTsKLQotICAgIC8vIE9mZnNldCBiZXR3ZWVuIGFuY2hvciBwb2ludCBh
bmQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZC4KLSAgICBmbG9hdCBjZW50ZXJPZmZzZXRYID0gKDAu
NSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMud2lkdGgoKTsKLSAgICBmbG9hdCBjZW50ZXJP
ZmZzZXRZID0gKDAuNSAtIGFuY2hvclBvaW50LnkoKSkgKiBib3VuZHMuaGVpZ2h0KCk7Ci0KLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllckxvY2FsVHJhbnNmb3JtOwotICAgIC8vIExUID0g
VHJbbF0KLSAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHBvc2l0aW9uLngoKSwg
cG9zaXRpb24ueSgpLCBsYXllci0+YW5jaG9yUG9pbnRaKCkpOwotICAgIC8vIExUID0gVHJbbF0g
KiBNW2xdCi0gICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS5tdWx0aXBseShsYXllci0+dHJhbnNmb3Jt
KCkpOwotICAgIC8vIExUID0gVHJbbF0gKiBNW2xdICogVHJbY10KLSAgICBsYXllckxvY2FsVHJh
bnNmb3JtLnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFgsIGNlbnRlck9mZnNldFksIC1sYXllci0+
YW5jaG9yUG9pbnRaKCkpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tYmluZWRUcmFu
c2Zvcm0gPSBwYXJlbnRNYXRyaXg7Ci0gICAgY29tYmluZWRUcmFuc2Zvcm0gPSBjb21iaW5lZFRy
YW5zZm9ybS5tdWx0aXBseShsYXllckxvY2FsVHJhbnNmb3JtKTsKLQotICAgIEZsb2F0UmVjdCBs
YXllclJlY3QoLTAuNSAqIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCAtMC41ICogbGF5ZXItPmJv
dW5kcygpLmhlaWdodCgpLCBsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgbGF5ZXItPmJvdW5kcygp
LmhlaWdodCgpKTsKLSAgICBJbnRSZWN0IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OwotCi0gICAgLy8g
ZnVsbEhpZXJhcmNoeU1hdHJpeCBpcyB0aGUgbWF0cml4IHRoYXQgdHJhbnNmb3JtcyBvYmplY3Rz
IGJldHdlZW4gc2NyZWVuIHNwYWNlIChleGNlcHQgcHJvamVjdGlvbiBtYXRyaXgpIGFuZCB0aGUg
bW9zdCByZWNlbnQgUmVuZGVyU3VyZmFjZSdzIHNwYWNlLgotICAgIC8vIG5leHRIaWVyYXJjaHlN
YXRyaXggd2lsbCBvbmx5IGNoYW5nZSBpZiB0aGlzIGxheWVyIHVzZXMgYSBuZXcgUmVuZGVyU3Vy
ZmFjZSwgb3RoZXJ3aXNlIHJlbWFpbnMgdGhlIHNhbWUuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbmV4dEhpZXJhcmNoeU1hdHJpeCA9IGZ1bGxIaWVyYXJjaHlNYXRyaXg7Ci0KLSAgICAvLyBG
SVhNRTogVGhpcyBzZWVtcyBsaWtlIHRoZSB3cm9uZyBwbGFjZSB0byBzZXQgdGhpcwotICAgIGxh
eWVyLT5zZXRVc2VzTGF5ZXJTY2lzc29yKGZhbHNlKTsKLQotICAgIC8vIFRoZSBsYXllciBhbmQg
aXRzIGRlc2NlbmRhbnRzIHJlbmRlciBvbiBhIG5ldyBSZW5kZXJTdXJmYWNlIGlmIGFueSBvZgot
ICAgIC8vIHRoZXNlIGNvbmRpdGlvbnMgaG9sZDoKLSAgICAvLyAxLiBUaGUgbGF5ZXIgY2xpcHMg
aXRzIGRlc2NlbmRhbnRzIGFuZCBpdHMgdHJhbnNmb3JtIGlzIG5vdCBhIHNpbXBsZSB0cmFuc2xh
dGlvbi4KLSAgICAvLyAyLiBJZiB0aGUgbGF5ZXIgaGFzIG9wYWNpdHkgIT0gMSBhbmQgZG9lcyBu
b3QgaGF2ZSBhIHByZXNlcnZlcy0zZCB0cmFuc2Zvcm0gc3R5bGUuCi0gICAgLy8gMy4gVGhlIGxh
eWVyIHVzZXMgYSBtYXNrCi0gICAgLy8gNC4gVGhlIGxheWVyIGhhcyBhIHJlcGxpY2EgKHVzZWQg
Zm9yIHJlZmxlY3Rpb25zKQotICAgIC8vIDUuIFRoZSBsYXllciBkb2Vzbid0IHByZXNlcnZlLTNk
IGJ1dCBpcyB0aGUgY2hpbGQgb2YgYSBsYXllciB3aGljaCBkb2VzLgotICAgIC8vIElmIGEgbGF5
ZXIgcHJlc2VydmVzLTNkIHRoZW4gd2UgZG9uJ3QgY3JlYXRlIGEgUmVuZGVyU3VyZmFjZSBmb3Ig
aXQgdG8gYXZvaWQgZmxhdHRlbmluZwotICAgIC8vIG91dCBpdHMgY2hpbGRyZW4uIFRoZSBvcGFj
aXR5IHZhbHVlIG9mIHRoZSBjaGlsZHJlbiBsYXllcnMgaXMgbXVsdGlwbGllZCBieSB0aGUgb3Bh
Y2l0eQotICAgIC8vIG9mIHRoZWlyIHBhcmVudC4KLSAgICBib29sIHVzZVN1cmZhY2VGb3JDbGlw
cGluZyA9IGxheWVyLT5tYXNrc1RvQm91bmRzKCkgJiYgIWlzU2NhbGVPclRyYW5zbGF0aW9uKGNv
bWJpbmVkVHJhbnNmb3JtKTsKLSAgICBib29sIHVzZVN1cmZhY2VGb3JPcGFjaXR5ID0gbGF5ZXIt
Pm9wYWNpdHkoKSAhPSAxICYmICFsYXllci0+cHJlc2VydmVzM0QoKTsKLSAgICBib29sIHVzZVN1
cmZhY2VGb3JNYXNraW5nID0gbGF5ZXItPm1hc2tMYXllcigpOwotICAgIGJvb2wgdXNlU3VyZmFj
ZUZvclJlZmxlY3Rpb24gPSBsYXllci0+cmVwbGljYUxheWVyKCk7Ci0gICAgYm9vbCB1c2VTdXJm
YWNlRm9yRmxhdERlc2NlbmRhbnRzID0gbGF5ZXItPnBhcmVudCgpICYmIGxheWVyLT5wYXJlbnQo
KS0+cHJlc2VydmVzM0QoKSAmJiAhbGF5ZXItPnByZXNlcnZlczNEKCkgJiYgbGF5ZXItPmRlc2Nl
bmRhbnREcmF3c0NvbnRlbnQoKTsKLSAgICBpZiAodXNlU3VyZmFjZUZvck1hc2tpbmcgfHwgdXNl
U3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgdXNlU3VyZmFjZUZvckZsYXREZXNjZW5kYW50cyB8fCAo
KHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJmYWNlRm9yT3BhY2l0eSkgJiYgbGF5ZXIt
PmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKSkpIHsKLSAgICAgICAgaWYgKCFsYXllci0+cmVuZGVy
U3VyZmFjZSgpKQotICAgICAgICAgICAgbGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAg
ICAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIHJlbmRlclN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpOwotCi0gICAgICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIG5ldyBzdXJmYWNlIGlzIHRo
ZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIuCi0gICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGRyYXdUcmFuc2Zvcm07Ci0gICAgICAgIGRyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2Qo
MC41ICogYm91bmRzLndpZHRoKCksIDAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7Ci0gICAgICAg
IGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pOwotCi0gICAgICAgIHRyYW5z
Zm9ybWVkTGF5ZXJSZWN0ID0gSW50UmVjdCgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhl
aWdodCgpKTsKLQotICAgICAgICAvLyBMYXllcidzIG9wYWNpdHkgd2lsbCBiZSBhcHBsaWVkIHdo
ZW4gZHJhd2luZyB0aGUgcmVuZGVyIHN1cmZhY2UuCi0gICAgICAgIGZsb2F0IGRyYXdPcGFjaXR5
ID0gbGF5ZXItPm9wYWNpdHkoKTsKLSAgICAgICAgaWYgKGxheWVyLT5wYXJlbnQoKSAmJiBsYXll
ci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpCi0gICAgICAgICAgICBkcmF3T3BhY2l0eSAqPSBs
YXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5KCk7Ci0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNl
dERyYXdPcGFjaXR5KGRyYXdPcGFjaXR5KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5
KDEpOwotCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3Jt
ID0gY29tYmluZWRUcmFuc2Zvcm07Ci0gICAgICAgIGxheWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5z
bGF0ZTNkKC0wLjUgKiBib3VuZHMud2lkdGgoKSwgLTAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7
Ci0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE9yaWdpblRyYW5zZm9ybShsYXllck9yaWdpblRy
YW5zZm9ybSk7Ci0KLSAgICAgICAgLy8gVXBkYXRlIHRoZSBhZ2dyZWdhdGUgaGllcmFyY2h5IG1h
dHJpeCB0byBpbmNsdWRlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIG5ld2x5IGNyZWF0ZWQgUmVuZGVy
U3VyZmFjZS4KLSAgICAgICAgbmV4dEhpZXJhcmNoeU1hdHJpeC5tdWx0aXBseShsYXllck9yaWdp
blRyYW5zZm9ybSk7Ci0KLSAgICAgICAgLy8gVGhlIHJlbmRlciBzdXJmYWNlIHNjaXNzb3IgcmVj
dCBpcyB0aGUgc2Npc3NvciByZWN0IHRoYXQgbmVlZHMgdG8KLSAgICAgICAgLy8gYmUgYXBwbGll
ZCBiZWZvcmUgZHJhd2luZyB0aGUgcmVuZGVyIHN1cmZhY2Ugb250byBpdHMgY29udGFpbmluZwot
ICAgICAgICAvLyBzdXJmYWNlIGFuZCBpcyB0aGVyZWZvcmUgZXhwcmVzc2VkIGluIHRoZSBwYXJl
bnQncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0U2Npc3Nv
clJlY3QobGF5ZXItPnBhcmVudCgpID8gbGF5ZXItPnBhcmVudCgpLT5zY2lzc29yUmVjdCgpIDog
bGF5ZXItPnNjaXNzb3JSZWN0KCkpOwotCi0gICAgICAgIHJlbmRlclN1cmZhY2UtPmNsZWFyTGF5
ZXJMaXN0KCk7Ci0KLSAgICAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICAg
ICAgcmVuZGVyU3VyZmFjZS0+c2V0TWFza0xheWVyKGxheWVyLT5tYXNrTGF5ZXIoKSk7Ci0gICAg
ICAgICAgICBsYXllci0+bWFza0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVy
U3VyZmFjZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0
TWFza0xheWVyKDApOwotCi0gICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYgbGF5
ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgICAgIGxheWVyLT5yZXBs
aWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3Vy
ZmFjZSk7Ci0KLSAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQobGF5ZXIpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIERUID0gTVtwXSAqIExUCi0gICAgICAgIGxheWVyLT5z
ZXREcmF3VHJhbnNmb3JtKGNvbWJpbmVkVHJhbnNmb3JtKTsKLSAgICAgICAgdHJhbnNmb3JtZWRM
YXllclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGxheWVyLT5kcmF3VHJhbnNmb3JtKCkubWFwUmVj
dChsYXllclJlY3QpKTsKLQotICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkobGF5ZXItPm9w
YWNpdHkoKSk7Ci0KLSAgICAgICAgaWYgKGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICAgICAg
aWYgKGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkKLSAgICAgICAgICAgICAgIGxheWVy
LT5zZXREcmF3T3BhY2l0eShsYXllci0+ZHJhd09wYWNpdHkoKSAqIGxheWVyLT5wYXJlbnQoKS0+
ZHJhd09wYWNpdHkoKSk7Ci0KLSAgICAgICAgICAgIC8vIExheWVycyBpbmhlcml0IHRoZSBzY2lz
c29yIHJlY3QgZnJvbSB0aGVpciBwYXJlbnQuCi0gICAgICAgICAgICBsYXllci0+c2V0U2Npc3Nv
clJlY3QobGF5ZXItPnBhcmVudCgpLT5zY2lzc29yUmVjdCgpKTsKLSAgICAgICAgICAgIGlmIChs
YXllci0+cGFyZW50KCktPnVzZXNMYXllclNjaXNzb3IoKSkKLSAgICAgICAgICAgICAgICBsYXll
ci0+c2V0VXNlc0xheWVyU2Npc3Nvcih0cnVlKTsKLQotICAgICAgICAgICAgbGF5ZXItPnNldFRh
cmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnBhcmVudCgpLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxheWVyICE9IHJvb3RMYXllcikKLSAgICAgICAg
ICAgIGxheWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKLQotICAgICAgICBpZiAobGF5ZXItPm1h
c2tzVG9Cb3VuZHMoKSkgewotICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yID0gdHJhbnNmb3Jt
ZWRMYXllclJlY3Q7Ci0gICAgICAgICAgICBzY2lzc29yLmludGVyc2VjdChsYXllci0+c2Npc3Nv
clJlY3QoKSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3Qoc2Npc3Nvcik7Ci0g
ICAgICAgICAgICBsYXllci0+c2V0VXNlc0xheWVyU2Npc3Nvcih0cnVlKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCBsYXllci0+ZHJhd1RyYW5z
Zm9ybSgpIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyBsb2NhbCB2YXJpYWJsZSBkcmF3
VHJhbnNmb3JtLgotICAgIC8vIGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gcmVwcmVzZW50cyB0
aGUgdHJhbnNmb3JtIGJldHdlZW4gbGF5ZXIgc3BhY2UgKGluIHBpeGVscykgYW5kIHNjcmVlbiBz
cGFjZS4KLSAgICAvLyBTbyB3ZSBkbyBub3QgaW5jbHVkZSBwcm9qZWN0aW9uIFAgb3Igc2NhbGlu
ZyB0cmFuc2Zvcm0gUyAoc2VlIGNvbW1lbnRzIGFib3ZlIHRoYXQgZGVzY3JpYmUgUCpNKlMpLgot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBuZXh0
SGllcmFyY2h5TWF0cml4OwotICAgIGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0ubXVsdGlwbHko
bGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybS50
cmFuc2xhdGUzZCgtMC41ICogYm91bmRzLndpZHRoKCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0KCks
IDApOwotICAgIGxheWVyLT5zZXRTY3JlZW5TcGFjZVRyYW5zZm9ybShsYXllclNjcmVlblNwYWNl
VHJhbnNmb3JtKTsKLQotICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpKQotICAgICAgICBs
YXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGxheWVyLT5wYXJlbnQoKSk7Ci0gICAgICAgIGxheWVy
LT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBkcmF3YWJsZUNvbnRlbnRSZWN0KCkgaXMgYWx3YXlz
IHN0b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlCi0gICAgLy8gUmVuZGVyU3Vy
ZmFjZSB0aGUgbGF5ZXIgZHJhd3MgaW50by4KLSAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgp
KSB7Ci0gICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IHRyYW5zZm9ybWVkTGF5
ZXJSZWN0OwotICAgICAgICBpZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3IoKSkKLSAgICAgICAg
ICAgIGRyYXdhYmxlQ29udGVudFJlY3QuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsK
LSAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVj
dCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KElu
dFJlY3QoKSk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllck1hdHJpeCA9IGxh
eWVyLT5kcmF3VHJhbnNmb3JtKCk7Ci0KLSAgICAvLyBGbGF0dGVuIHRvIDJEIGlmIHRoZSBsYXll
ciBkb2Vzbid0IHByZXNlcnZlIDNELgotICAgIGlmICghbGF5ZXItPnByZXNlcnZlczNEKCkpIHsK
LSAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTEzKDApOwotICAgICAgICBzdWJsYXllck1hdHJp
eC5zZXRNMjMoMCk7Ci0gICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0zMSgwKTsKLSAgICAgICAg
c3VibGF5ZXJNYXRyaXguc2V0TTMyKDApOwotICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzMo
MSk7Ci0gICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0zNCgwKTsKLSAgICAgICAgc3VibGF5ZXJN
YXRyaXguc2V0TTQzKDApOwotICAgIH0KLQotICAgIC8vIEFwcGx5IHRoZSBzdWJsYXllciB0cmFu
c2Zvcm0gYXQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIuCi0gICAgc3VibGF5ZXJNYXRyaXgubXVs
dGlwbHkobGF5ZXItPnN1YmxheWVyVHJhbnNmb3JtKCkpOwotCi0gICAgLy8gVGhlIG9yaWdpbiBv
ZiB0aGUgY2hpbGRyZW4gaXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIsIG5vdCB0
aGUKLSAgICAvLyBjZW50ZXIuIFRoZSBtYXRyaXggcGFzc2VkIGRvd24gdG8gdGhlIGNoaWxkcmVu
IGlzIHRoZXJlZm9yZToKLSAgICAvLyBNW3NdID0gTSAqIFRyWy1jZW50ZXJdCi0gICAgc3VibGF5
ZXJNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53aWR0aCgpICogMC41LCAtYm91bmRzLmhlaWdo
dCgpICogMC41LCAwKTsKLQotICAgIExheWVyTGlzdCYgZGVzY2VuZGFudHMgPSAobGF5ZXItPnJl
bmRlclN1cmZhY2UoKSA/IGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpIDogbGF5
ZXJMaXN0KTsKLSAgICBkZXNjZW5kYW50cy5hcHBlbmQobGF5ZXIpOwotCi0gICAgdW5zaWduZWQg
dGhpc0xheWVySW5kZXggPSBkZXNjZW5kYW50cy5zaXplKCkgLSAxOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgewotICAgICAgICBM
YXllclR5cGUqIGNoaWxkID0gbGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCk7Ci0gICAgICAgIGNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlLCBMYXllclNvcnRlcj4oY2hpbGQsIHJvb3RMYXllciwgc3VibGF5ZXJNYXRyaXgsIG5l
eHRIaWVyYXJjaHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzLCBs
YXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOwotCi0gICAgICAgIGlmIChjaGlsZC0+cmVuZGVy
U3VyZmFjZSgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJTdXJmYWNlVHlwZSogY2hpbGRSZW5kZXJT
dXJmYWNlID0gY2hpbGQtPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgICAgIEludFJlY3QgZHJh
d2FibGVDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAg
ICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoY2hpbGRSZW5k
ZXJTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpKTsKLSAgICAgICAgICAgIGxheWVyLT5z
ZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOwotICAgICAgICAgICAg
ZGVzY2VuZGFudHMuYXBwZW5kKGNoaWxkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0
KCk7Ci0gICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGNoaWxkLT5kcmF3YWJs
ZUNvbnRlbnRSZWN0KCkpOwotICAgICAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJl
Y3QoZHJhd2FibGVDb250ZW50UmVjdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobGF5
ZXItPm1hc2tzVG9Cb3VuZHMoKSB8fCB1c2VTdXJmYWNlRm9yTWFza2luZykgewotICAgICAgICBJ
bnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgp
OwotICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVy
UmVjdCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29u
dGVudFJlY3QpOwotICAgIH0KLQotICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxh
eWVyICE9IHJvb3RMYXllcikgewotICAgICAgICBSZW5kZXJTdXJmYWNlVHlwZSogcmVuZGVyU3Vy
ZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIEludFJlY3QgY2xpcHBlZENv
bnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAgRmxvYXRQ
b2ludCBzdXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0KGNsaXBwZWRDb250ZW50UmVjdCkuY2VudGVy
KCk7Ci0KLSAgICAgICAgLy8gUmVzdHJpY3QgdGhlIFJlbmRlclN1cmZhY2Ugc2l6ZSB0byB0aGUg
cG9ydGlvbiB0aGF0J3MgdmlzaWJsZS4KLSAgICAgICAgRmxvYXRTaXplIGNlbnRlck9mZnNldER1
ZVRvQ2xpcHBpbmc7Ci0KLSAgICAgICAgLy8gRG9uJ3QgY2xpcCBpZiB0aGUgbGF5ZXIgaXMgcmVm
bGVjdGVkIGFzIHRoZSByZWZsZWN0aW9uIHNob3VsZG4ndCBiZQotICAgICAgICAvLyBjbGlwcGVk
LgotICAgICAgICBpZiAoIWxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewotICAgICAgICAgICAgaWYg
KCFyZW5kZXJTdXJmYWNlLT5zY2lzc29yUmVjdCgpLmlzRW1wdHkoKSAmJiAhY2xpcHBlZENvbnRl
bnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIEludFJlY3Qgc3VyZmFjZVNjaXNz
b3JSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZVJlY3QocmVuZGVyU3VyZmFjZS0+c2Npc3NvclJlY3Qo
KSwgY2xpcHBlZENvbnRlbnRSZWN0LCByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKSk7
Ci0gICAgICAgICAgICAgICAgY2xpcHBlZENvbnRlbnRSZWN0LmludGVyc2VjdChzdXJmYWNlU2Np
c3NvclJlY3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRmxvYXRQb2ludCBjbGlwcGVk
U3VyZmFjZUNlbnRlciA9IEZsb2F0UmVjdChjbGlwcGVkQ29udGVudFJlY3QpLmNlbnRlcigpOwot
ICAgICAgICAgICAgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZyA9IGNsaXBwZWRTdXJmYWNlQ2Vu
dGVyIC0gc3VyZmFjZUNlbnRlcjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZSBSZW5kZXJT
dXJmYWNlIGJhY2tpbmcgdGV4dHVyZSBjYW5ub3QgZXhjZWVkIHRoZSBtYXhpbXVtIHN1cHBvcnRl
ZAotICAgICAgICAvLyB0ZXh0dXJlIHNpemUuCi0gICAgICAgIGNsaXBwZWRDb250ZW50UmVjdC5z
ZXRXaWR0aChtaW4oY2xpcHBlZENvbnRlbnRSZWN0LndpZHRoKCksIG1heFRleHR1cmVTaXplKSk7
Ci0gICAgICAgIGNsaXBwZWRDb250ZW50UmVjdC5zZXRIZWlnaHQobWluKGNsaXBwZWRDb250ZW50
UmVjdC5oZWlnaHQoKSwgbWF4VGV4dHVyZVNpemUpKTsKLQotICAgICAgICBpZiAoY2xpcHBlZENv
bnRlbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPmNsZWFyTGF5
ZXJMaXN0KCk7Ci0KLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0Q29udGVudFJlY3QoY2xpcHBl
ZENvbnRlbnRSZWN0KTsKLQotICAgICAgICAvLyBTaW5jZSB0aGUgbGF5ZXIgc3RhcnRzIGEgbmV3
IHJlbmRlciBzdXJmYWNlIHdlIG5lZWQgdG8gYWRqdXN0IGl0cwotICAgICAgICAvLyBzY2lzc29y
IHJlY3QgdG8gYmUgZXhwcmVzc2VkIGluIHRoZSBuZXcgc3VyZmFjZSdzIGNvb3JkaW5hdGUgc3lz
dGVtLgotICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3QobGF5ZXItPmRyYXdhYmxlQ29udGVu
dFJlY3QoKSk7Ci0KLSAgICAgICAgLy8gQWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9y
bSB0byBiZSB0aGUgY2VudGVyIG9mIHRoZSByZW5kZXIgc3VyZmFjZS4KLSAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2UtPm9yaWdpblRyYW5z
Zm9ybSgpOwotICAgICAgICBkcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHN1cmZhY2VDZW50ZXIu
eCgpICsgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZy53aWR0aCgpLCBzdXJmYWNlQ2VudGVyLnko
KSArIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcuaGVpZ2h0KCksIDApOwotICAgICAgICByZW5k
ZXJTdXJmYWNlLT5zZXREcmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pOwotCi0gICAgICAgIC8v
IENvbXB1dGUgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB1c2VkIHRvIGRyYXcgdGhlIHJlcGxp
Y2Egb2YgdGhlIHJlbmRlcgotICAgICAgICAvLyBzdXJmYWNlLgotICAgICAgICBpZiAobGF5ZXIt
PnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXBs
aWNhRHJhd1RyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2UtPm9yaWdpblRyYW5zZm9ybSgpOwotICAg
ICAgICAgICAgcmVwbGljYURyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QobGF5ZXItPnJlcGxpY2FM
YXllcigpLT5wb3NpdGlvbigpLngoKSwgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigp
LnkoKSwgMCk7Ci0gICAgICAgICAgICByZXBsaWNhRHJhd1RyYW5zZm9ybS5tdWx0aXBseShsYXll
ci0+cmVwbGljYUxheWVyKCktPnRyYW5zZm9ybSgpKTsKLSAgICAgICAgICAgIHJlcGxpY2FEcmF3
VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHN1cmZhY2VDZW50ZXIueCgpIC0gYW5jaG9yUG9pbnQueCgp
ICogYm91bmRzLndpZHRoKCksIHN1cmZhY2VDZW50ZXIueSgpIC0gYW5jaG9yUG9pbnQueSgpICog
Ym91bmRzLmhlaWdodCgpLCAwKTsKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFJlcGxp
Y2FEcmF3VHJhbnNmb3JtKHJlcGxpY2FEcmF3VHJhbnNmb3JtKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIElmIHByZXNlcnZlcy0zZCB0aGVuIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBp
biAzRCBzbyB0aGF0IHRoZXkgY2FuIGJlCi0gICAgLy8gZHJhd24gZnJvbSBiYWNrIHRvIGZyb250
LiBJZiB0aGUgcHJlc2VydmVzLTNkIHByb3BlcnR5IGlzIGFsc28gc2V0IG9uIHRoZSBwYXJlbnQg
dGhlbgotICAgIC8vIHNraXAgdGhlIHNvcnRpbmcgYXMgdGhlIHBhcmVudCB3aWxsIHNvcnQgYWxs
IHRoZSBkZXNjZW5kYW50cyBhbnl3YXkuCi0gICAgaWYgKGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYm
ICghbGF5ZXItPnBhcmVudCgpIHx8ICFsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpKQot
ICAgICAgICBzb3J0TGF5ZXJzKCZkZXNjZW5kYW50cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRlc2Nl
bmRhbnRzLmVuZCgpLCBsYXllclNvcnRlcik7CisgICAgcmV0dXJuIHRleHR1cmVNZW1vcnlSZWNs
YWltTGltaXRCeXRlczsKIH0KIAotfQorbmFtZXNwYWNlIHsKIAogc3RhdGljIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG9ydGhvTWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0
b20sIGZsb2F0IHRvcCkKIHsKQEAgLTQ1Miw2ICsxNDEsOCBAQCBib29sIGNvbnRleHRTdXBwb3J0
c0FjY2VsZXJhdGVkUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB9CiAjZW5k
aWYKIAorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJl
ckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3Qq
IG93bmVyLCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBvd25lckltcGwsIFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7CiAjaWYgVVNFKFNLSUEpCkBAIC01NTcsMjcgKzI0OCwx
NSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkKICAgICBt
X2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gMDsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVwZGF0ZUxheWVycygpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cygpCiB7Ci0gICAgaWYgKCFyb290TGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fb3duZXItPnZpZXdwb3J0U2l6ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgLy8gRklYTUU6IHVzZSB0aGUgZnJhbWUgYmVnaW4gdGltZSBmcm9tIHRoZSBvdmVyYWxsIGNv
bXBvc2l0b3Igc2NoZWR1bGVyLgogICAgIC8vIFRoaXMgdmFsdWUgaXMgY3VycmVudGx5IGluYWNj
ZXNzaWJsZSBiZWNhdXNlIGl0IGlzIHVwIGluIENocm9taXVtJ3MKICAgICAvLyBSZW5kZXJXaWRn
ZXQuCiAgICAgbV9oZWFkc1VwRGlzcGxheS0+b25GcmFtZUJlZ2luKGN1cnJlbnRUaW1lKCkpOwog
Ci0gICAgdXBkYXRlTGF5ZXJzKHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCkpOwotfQotCi12
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCi17CiAgICAgaWYgKCFyb290
TGF5ZXJJbXBsKCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIC8vIEZJWE1FOiBObyBuZWVkIHRv
IHdhbGsgdGhlIHRyZWUgaGVyZS4gVGhpcyBjb3VsZCBiZSBwYXNzZWQgdmlhIGRyYXcuCiAgICAg
cm9vdExheWVySW1wbCgpLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKHRoaXMpOwogCkBAIC01
OTYsMTI2ICsyNzUsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygp
CiAgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCk7CiB9CiAKLXZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVy
KQotewotICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVy
cyIsIHRoaXMsIDApOwotCi0gICAgaWYgKCFyb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKLSAg
ICAgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcm9vdExheWVyLT5y
ZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIHZp
ZXdwb3J0U2l6ZSgpKSk7Ci0KLSAgICBJbnRSZWN0IHJvb3RTY2lzc29yUmVjdChJbnRQb2ludCgp
LCB2aWV3cG9ydFNpemUoKSk7Ci0gICAgcm9vdExheWVyLT5zZXRTY2lzc29yUmVjdChyb290U2Np
c3NvclJlY3QpOwotCi0gICAgTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyKTsKLQotICAgIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogcm9vdFJlbmRlclN1cmZhY2UgPSByb290TGF5ZXItPnJlbmRlclN1cmZh
Y2UoKTsKLSAgICByb290UmVuZGVyU3VyZmFjZS0+Y2xlYXJMYXllckxpc3QoKTsKLQotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwotCi0gICAgewotICAgICAgICBUUkFD
RV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnM6OmNhbGNEcmF3RXRj
IiwgdGhpcywgMCk7Ci0gICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQqPihyb290TGF5ZXIs
IHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIDAsIG1fY2FwYWJpbGl0
aWVzLm1heFRleHR1cmVTaXplKTsKLSAgICB9Ci0KLSAgICBwYWludExheWVyQ29udGVudHMocmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0KLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJl
ZHVjZU1lbW9yeVRvTGltaXQodGV4dHVyZU1lbW9yeVJlY2xhaW1MaW1pdEJ5dGVzKTsKLSAgICBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2NvbnRleHQu
Z2V0KCkpOwotICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7Ci19Ci0KLXN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QoY29u
c3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFNpemUmIGJvdW5kcywgY29u
c3QgSW50U2l6ZSYgY29udGVudEJvdW5kcywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRp
bGluZ1RyYW5zZm9ybSkKLXsKLSAgICBpZiAodGFyZ2V0U3VyZmFjZVJlY3QuaXNFbXB0eSgpIHx8
IGNvbnRlbnRCb3VuZHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdGFyZ2V0U3VyZmFjZVJl
Y3Q7Ci0KLSAgICBjb25zdCBJbnRSZWN0IGxheWVyQm91bmRSZWN0ID0gSW50UmVjdChJbnRQb2lu
dCgpLCBjb250ZW50Qm91bmRzKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0g
PSB0aWxpbmdUcmFuc2Zvcm07Ci0KLSAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5k
cy53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzLndpZHRoKCkpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmhlaWdodCgpIC8gc3RhdGljX2Nh
c3Q8ZG91YmxlPihjb250ZW50Qm91bmRzLmhlaWdodCgpKSk7Ci0gICAgdHJhbnNmb3JtLnRyYW5z
bGF0ZSgtY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCAtY29udGVudEJvdW5kcy5oZWlnaHQo
KSAvIDIuMCk7Ci0KLSAgICByZXR1cm4gY2FsY3VsYXRlVmlzaWJsZVJlY3QodGFyZ2V0U3VyZmFj
ZVJlY3QsIGxheWVyQm91bmRSZWN0LCB0cmFuc2Zvcm0pOwotfQotCi1zdGF0aWMgdm9pZCBwYWlu
dENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgSW50UmVjdCYgdmlz
aWJsZUxheWVyUmVjdCkKLXsKLSAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKSB7Ci0gICAg
ICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOwotICAgICAg
ICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KQotewotICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRl
clN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZh
Y2VJbmRleCkgewotICAgICAgICBMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Ci0gICAgICAgIFJlbmRl
clN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVu
ZGVyU3VyZmFjZSgpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7Ci0KLSAgICAgICAg
cmVuZGVyU3VyZmFjZUxheWVyLT5zZXRMYXllclRyZWVIb3N0KG93bmVyKCkpOwotCi0gICAgICAg
IC8vIFJlbmRlciBzdXJmYWNlcyB3aG9zZSBkcmF3YWJsZSBhcmVhIGhhcyB6ZXJvIHdpZHRoIG9y
IGhlaWdodAotICAgICAgICAvLyB3aWxsIGhhdmUgbm8gbGF5ZXJzIGFzc29jaWF0ZWQgd2l0aCB0
aGVtIGFuZCBzaG91bGQgYmUgc2tpcHBlZC4KLSAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5s
YXllckxpc3QoKS5zaXplKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAo
IXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVy
TGlzdCgpOwotICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyAr
K2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJM
aXN0W2xheWVySW5kZXhdLmdldCgpOwotCi0gICAgICAgICAgICAvLyBMYXllcnMgdGhhdCBzdGFy
dCBhIG5ldyByZW5kZXIgc3VyZmFjZSB3aWxsIGJlIHBhaW50ZWQgd2hlbiB0aGUgcmVuZGVyCi0g
ICAgICAgICAgICAvLyBzdXJmYWNlJ3MgbGlzdCBpcyBwcm9jZXNzZWQuCi0gICAgICAgICAgICBp
ZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHJl
bmRlclN1cmZhY2UpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGxh
eWVyLT5zZXRMYXllclRyZWVIb3N0KG93bmVyKCkpOwotCi0gICAgICAgICAgICBpZiAoIWxheWVy
LT5vcGFjaXR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlm
IChsYXllci0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICAgICAgbGF5ZXItPm1hc2tMYXllcigp
LT5zZXRMYXllclRyZWVIb3N0KG93bmVyKCkpOwotICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBs
aWNhTGF5ZXIoKSkgewotICAgICAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+c2V0
TGF5ZXJUcmVlSG9zdChvd25lcigpKTsKLSAgICAgICAgICAgICAgICBpZiAobGF5ZXItPnJlcGxp
Y2FMYXllcigpLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnJlcGxp
Y2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdChvd25lcigpKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIEludFJlY3QgdGFyZ2V0U3Vy
ZmFjZVJlY3QgPSBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID8gbGF5ZXItPnRhcmdldFJl
bmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSA6IG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmNv
bnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBpZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3IoKSkK
LSAgICAgICAgICAgICAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNlY3QobGF5ZXItPnNjaXNz
b3JSZWN0KCkpOwotICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3Vs
YXRlVmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5ZXItPmJvdW5kcygpLCBs
YXllci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKLQotICAgICAg
ICAgICAgdmlzaWJsZUxheWVyUmVjdC5tb3ZlKHRvU2l6ZShsYXllci0+c2Nyb2xsUG9zaXRpb24o
KSkpOwotICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5ZXIsIHZpc2libGVMYXll
clJlY3QpOwotCi0gICAgICAgICAgICBpZiAoTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyID0gbGF5
ZXItPm1hc2tMYXllcigpKSB7Ci0gICAgICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHko
bWFza0xheWVyLCBJbnRSZWN0KEludFBvaW50KCksIG1hc2tMYXllci0+Y29udGVudEJvdW5kcygp
KSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChMYXllckNocm9taXVtKiByZXBs
aWNhTGF5ZXIgPSBsYXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgICAgICAgICBwYWlu
dENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHZpc2libGVMYXllclJlY3QpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKExheWVyQ2hyb21pdW0qIHJlcGxpY2FNYXNrTGF5ZXIgPSByZXBsaWNh
TGF5ZXItPm1hc2tMYXllcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhaW50Q29udGVudHNJ
ZkRpcnR5KHJlcGxpY2FNYXNrTGF5ZXIsIEludFJlY3QoSW50UG9pbnQoKSwgcmVwbGljYU1hc2tM
YXllci0+Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVyc0ludGVybmFsKCkKIHsKICAgICBpZiAodmlld3BvcnRTaXplKCkuaXNFbXB0eSgpIHx8
ICFyb290TGF5ZXIoKSkKQEAgLTc0MCw3ICsyOTksNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIAogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQo
IkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsOjpjYWxjRHJhd0V0YyIs
IHRoaXMsIDApOwotICAgICAgICBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHk8
Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllclNvcnRlcj4ocm9vdERyYXdMYXll
ciwgcm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgJm1f
bGF5ZXJTb3J0ZXIsIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHk8
Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllclNvcnRlcj4ocm9vdERyYXdMYXll
ciwgcm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgJm1f
bGF5ZXJTb3J0ZXIsIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKICAgICB9CiAKICAg
ICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNs
dWRpbmcgdGhlIHNjcm9sbGJhcnMuCkBAIC04ODMsNDUgKzQ0Miw2IEBAIGJvb2wgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjppc0xheWVyVmlzaWJsZShMYXllckNocm9taXVtKiBsYXllciwgY29uc3Qg
VHJhbnNmb3JtCiAgICAgcmV0dXJuIG1hcHBlZFJlY3QuaW50ZXJzZWN0cyhGbG9hdFJlY3QoLTEs
IC0xLCAyLCAyKSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkK
LXsKLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNp
emUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAg
TGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJl
bmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAg
ICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwotCi0gICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+
bGF5ZXJMaXN0KCkuc2l6ZSgpIHx8ICFyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBsYXllckxpc3Qg
PSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKLSAgICAgICAgQVNTRVJUKGxheWVyTGlzdC5z
aXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4
IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7Ci0gICAgICAgICAgICBMYXllckNo
cm9taXVtKiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKLSAgICAgICAgICAg
IGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0g
cmVuZGVyU3VyZmFjZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhsYXllcik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKExh
eWVyQ2hyb21pdW0qIGxheWVyKQotewotICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWxheWVyLT5vcGFjaXR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpCi0gICAgICAgIHVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMobGF5ZXItPm1hc2tMYXllcigpKTsKLSAgICBpZiAobGF5ZXItPnJl
cGxpY2FMYXllcigpKQotICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGxheWVyLT5y
ZXBsaWNhTGF5ZXIoKSk7Ci0KLSAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAg
ICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0KCkpOwotfQotCiBNYW5h
Z2VkVGV4dHVyZSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1
cmUoKQogewogICAgIHJldHVybiBzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbiAmJiByb290
TGF5ZXJJbXBsKCkgPyByb290TGF5ZXJJbXBsKCktPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudHNU
ZXh0dXJlKCkgOiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA2NzMy
MTFkNzNjZjY0MzM5MzRiMDkyYTNmODExZjBhN2YyODNmYTVmLi5mMDUyZWQ2OWI5OGY4MGM1M2U2
N2I1NGZiM2Q3YWY1YTY4NzIxNGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aApAQCAtMTAxLDggKzEwMSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdmlld3BvcnRDaGFuZ2Vk
KCk7CiAKLSAgICAvLyB1cGRhdGVzIGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0
aGUgYmFja2J1ZmZlcgotICAgIHZvaWQgdXBkYXRlTGF5ZXJzKCk7CiAgICAgdm9pZCBkcmF3TGF5
ZXJzKCk7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaApAQCAtMTUwLDIw
ICsxNDgsMTUgQEAgcHVibGljOgogCiAgICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKTsK
IAotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IExheWVyTGlzdDsK
ICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7CiAK
KyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiB0aGUgY29udGVudHMgdGV4dHVyZSBtYW5h
Z2VyIGhhcyBtb3ZlZCB0byBDQ0xheWVyVHJlZUhvc3QuCisgICAgc3RhdGljIHNpemVfdCB0ZXh0
dXJlTWVtb3J5UmVjbGFpbUxpbWl0KCk7CisKIHByaXZhdGU6CiAgICAgTGF5ZXJSZW5kZXJlckNo
cm9taXVtKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPik7CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CiAKLSAgICB2b2lk
IHVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7Ci0gICAgdm9pZCB1cGRhdGVSb290TGF5ZXJD
b250ZW50cygpOwotCi0gICAgdm9pZCBwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0
Jik7Ci0gICAgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnN0IExheWVyTGlzdCYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKExheWVyQ2hyb21pdW0qKTsKLQogICAgIHZvaWQgZHJhd0xheWVyc0ludGVybmFsKCk7CiAg
ICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRlclN1cmZhY2UqKTsKIApAQCAt
MTk3LDggKzE5MCw2IEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9q
ZWN0aW9uTWF0cml4OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fd2luZG93TWF0cml4Owog
Ci0gICAgT3duUHRyPExheWVyTGlzdD4gbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3Q7
Ci0KICAgICBDQ1JlbmRlclN1cmZhY2UqIG1fY3VycmVudFJlbmRlclN1cmZhY2U7CiAgICAgdW5z
aWduZWQgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAK
aW5kZXggOTgzZDRiZTAxNjRkZGQ2OTZiNDJjN2ZkNDk4YmZjZTcxMTQ0ZTdmNy4uMzAwZjQ3MTMz
ZWM4YzA0MjI2YTM0ZWUxZDA1MzMxMjQzNjZlYjJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIHsKQEAgLTIyMCw2ICsyMjEsMTIgQEAgdm9pZCBDQ0xheWVy
SW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29u
c3QKICAgICB0cyA8PCBtX2RyYXdUcmFuc2Zvcm0ubTQxKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFu
c2Zvcm0ubTQyKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTQzKCkgPDwgIiwgIiA8PCBt
X2RyYXdUcmFuc2Zvcm0ubTQ0KCkgPDwgIlxuIjsKIH0KIAordm9pZCBzb3J0TGF5ZXJzKFZlY3Rv
cjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGZpcnN0LCBWZWN0b3I8UmVmUHRyPEND
TGF5ZXJJbXBsPiA+OjppdGVyYXRvciBlbmQsIENDTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVyKQor
eworICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnNvcnRMYXllcnMiLCAw
LCAwKTsKKyAgICBsYXllclNvcnRlci0+c29ydChmaXJzdCwgZW5kKTsKK30KKwogfQogCiAjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5k
ZXggMWNlZTRkMzJhODBhYzdmM2Y4ODU5YjBkZmZlZWY5ZDRjNGU0Zjc0Yy4uYzdkYzQ2OTU0N2Y1
YzE1ZTdhMzc3ZWY5NTdmZTRmMzg5NzVmZGMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0z
OSw2ICszOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NMYXllclNvcnRl
cjsKIGNsYXNzIExheWVyQ2hyb21pdW07CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiAK
QEAgLTI0Nyw2ICsyNDgsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hy
b21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKIH07CiAKK3ZvaWQgc29ydExheWVycyhWZWN0b3I8UmVm
UHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBmaXJzdCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVy
SW1wbD4gPjo6aXRlcmF0b3IgZW5kLCBDQ0xheWVyU29ydGVyKik7CisKIH0KIAogI2VuZGlmIC8v
IENDTGF5ZXJJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDI5ZWUz
ODRkYjIyNTE1ZjBmMmVjN2I1YTRmYmQ1ZThkOGE2NWJkNWIuLjUxOGJiMzliMjU3MzQyZjBkMmU0
MGQ2Nzg5NGFiZjU3ZTQ0YjI4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgog
I2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCisj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKICNp
bmNsdWRlICJjYy9DQ1RocmVhZC5oIgpAQCAtMTAxLDE4ICsxMDIsMjEgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogICAgIG1f
YW5pbWF0aW5nID0gZmFsc2U7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpwcmVDb21taXQo
Q0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCi17Ci0gICAgaG9zdEltcGwtPnNldFZpc2li
bGUobV92aXNpYmxlKTsKLSAgICBob3N0SW1wbC0+c2V0Vmlld3BvcnQodmlld3BvcnRTaXplKCkp
OwotfQotCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1w
bCogaG9zdEltcGwpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyIsIHRoaXMsIDApOwogICAg
IGhvc3RJbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJlcigpKTsKIAorICAgIGNv
bnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChob3N0SW1wbC0+bGF5
ZXJSZW5kZXJlcigpLT50ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0KCkpOworICAgIGNvbnRlbnRz
VGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKGhvc3RJbXBsLT5jb250ZXh0
KCkpOworCisgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhtX3VwZGF0ZUxpc3QsIGhvc3RJ
bXBsLT5jb250ZXh0KCkpOworICAgIG1fdXBkYXRlTGlzdC5jbGVhcigpOworCisgICAgaG9zdElt
cGwtPnNldFZpc2libGUobV92aXNpYmxlKTsKKyAgICBob3N0SW1wbC0+c2V0Vmlld3BvcnQodmll
d3BvcnRTaXplKCkpOworCiAgICAgLy8gU3luY2hyb25pemUgdHJlZXMsIGlmIG9uZSBleGlzdHMg
YXQgYWxsLi4uCiAgICAgaWYgKHJvb3RMYXllcigpKQogICAgICAgICBob3N0SW1wbC0+c2V0Um9v
dExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCktPnBs
YXRmb3JtTGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7CkBAIC0yNDQsNCArMjQ4LDE1
NyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKCkKIH0KICNlbmRpZiAvLyAhVVNF
KFRIUkVBREVEX0NPTVBPU0lUSU5HKQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5
ZXJzKCkKK3sKKyAgICBpZiAoIXJvb3RMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAodmlld3BvcnRTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB1cGRh
dGVMYXllcnMocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7Cit9CisKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQoreworICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyIsIHRoaXMsIDApOwor
CisgICAgaWYgKCFyb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgcm9vdExheWVy
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCkt
PnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIHZpZXdwb3J0U2l6ZSgpKSk7
CisKKyAgICBJbnRSZWN0IHJvb3RTY2lzc29yUmVjdChJbnRQb2ludCgpLCB2aWV3cG9ydFNpemUo
KSk7CisgICAgcm9vdExheWVyLT5zZXRTY2lzc29yUmVjdChyb290U2Npc3NvclJlY3QpOworCisg
ICAgLy8gVGhpcyBhc3NlcnQgZmlyZXMgaWYgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyB3YXNu
J3QgY2FsbGVkIGFmdGVyCisgICAgLy8gdXBkYXRlTGF5ZXJzLiBPbmx5IG9uZSB1cGRhdGUgY2Fu
IGJlIHBlbmRpbmcgYXQgYW55IGdpdmVuIHRpbWUuCisgICAgQVNTRVJUKCFtX3VwZGF0ZUxpc3Qu
c2l6ZSgpKTsKKyAgICBtX3VwZGF0ZUxpc3QuYXBwZW5kKHJvb3RMYXllcik7CisKKyAgICBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0qIHJvb3RSZW5kZXJTdXJmYWNlID0gcm9vdExheWVyLT5yZW5kZXJT
dXJmYWNlKCk7CisgICAgcm9vdFJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7CisKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKworICAgIHsKKyAgICAgICAg
VFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzOjpjYWxjRHJhd0V0YyIs
IHRoaXMsIDApOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21p
dW0sIHZvaWQqPihyb290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBtX3VwZGF0ZUxpc3QsIHJvb3RSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgMCwg
bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKyAgICB9CisKKyAg
ICBwYWludExheWVyQ29udGVudHMobV91cGRhdGVMaXN0KTsKK30KKworc3RhdGljIHZvaWQgcGFp
bnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHZp
c2libGVMYXllclJlY3QpCit7CisgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkgeworICAg
ICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKKyAgICAg
ICAgbGF5ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgfQorfQorCit2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCkKK3sKKyAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5k
ZXgpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVy
U3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOworICAgICAgICBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1
cmZhY2UoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOworCisgICAgICAgIHJlbmRl
clN1cmZhY2VMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKKworICAgICAgICAvLyBSZW5k
ZXIgc3VyZmFjZXMgd2hvc2UgZHJhd2FibGUgYXJlYSBoYXMgemVybyB3aWR0aCBvciBoZWlnaHQK
KyAgICAgICAgLy8gd2lsbCBoYXZlIG5vIGxheWVycyBhc3NvY2lhdGVkIHdpdGggdGhlbSBhbmQg
c2hvdWxkIGJlIHNraXBwZWQuCisgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0
KCkuc2l6ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFyZW5kZXJT
dXJmYWNlLT5kcmF3T3BhY2l0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Y29uc3QgTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsK
KyAgICAgICAgQVNTRVJUKGxheWVyTGlzdC5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllcklu
ZGV4KSB7CisgICAgICAgICAgICBMYXllckNocm9taXVtKiBsYXllciA9IGxheWVyTGlzdFtsYXll
ckluZGV4XS5nZXQoKTsKKworICAgICAgICAgICAgLy8gTGF5ZXJzIHRoYXQgc3RhcnQgYSBuZXcg
cmVuZGVyIHN1cmZhY2Ugd2lsbCBiZSBwYWludGVkIHdoZW4gdGhlIHJlbmRlcgorICAgICAgICAg
ICAgLy8gc3VyZmFjZSdzIGxpc3QgaXMgcHJvY2Vzc2VkLgorICAgICAgICAgICAgaWYgKGxheWVy
LT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSByZW5kZXJTdXJm
YWNlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBsYXllci0+c2V0
TGF5ZXJUcmVlSG9zdCh0aGlzKTsKKworICAgICAgICAgICAgaWYgKCFsYXllci0+b3BhY2l0eSgp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAobGF5ZXItPm1h
c2tMYXllcigpKQorICAgICAgICAgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJU
cmVlSG9zdCh0aGlzKTsKKyAgICAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsK
KyAgICAgICAgICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPnNldExheWVyVHJlZUhvc3Qo
dGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xh
eWVyKCkpCisgICAgICAgICAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xh
eWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBJbnRSZWN0IGRlZmF1bHRDb250ZW50UmVjdCA9IEludFJlY3Qo
cm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKSwgdmlld3BvcnRT
aXplKCkpOworCisgICAgICAgICAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0gbGF5ZXIt
PnRhcmdldFJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNv
bnRlbnRSZWN0KCkgOiBkZWZhdWx0Q29udGVudFJlY3Q7CisgICAgICAgICAgICBpZiAobGF5ZXIt
PnVzZXNMYXllclNjaXNzb3IoKSkKKyAgICAgICAgICAgICAgICB0YXJnZXRTdXJmYWNlUmVjdC5p
bnRlcnNlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOworICAgICAgICAgICAgSW50UmVjdCB2aXNp
YmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5
ZXJSZWN0KHRhcmdldFN1cmZhY2VSZWN0LCBsYXllci0+Ym91bmRzKCksIGxheWVyLT5jb250ZW50
Qm91bmRzKCksIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAgICAgICAgICB2aXNpYmxl
TGF5ZXJSZWN0Lm1vdmUodG9TaXplKGxheWVyLT5zY3JvbGxQb3NpdGlvbigpKSk7CisgICAgICAg
ICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShsYXllciwgdmlzaWJsZUxheWVyUmVjdCk7CisKKyAg
ICAgICAgICAgIGlmIChMYXllckNocm9taXVtKiBtYXNrTGF5ZXIgPSBsYXllci0+bWFza0xheWVy
KCkpCisgICAgICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobWFza0xheWVyLCBJbnRS
ZWN0KEludFBvaW50KCksIG1hc2tMYXllci0+Y29udGVudEJvdW5kcygpKSk7CisKKyAgICAgICAg
ICAgIGlmIChMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSBsYXllci0+cmVwbGljYUxheWVy
KCkpIHsKKyAgICAgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIs
IHZpc2libGVMYXllclJlY3QpOworCisgICAgICAgICAgICAgICAgaWYgKExheWVyQ2hyb21pdW0q
IHJlcGxpY2FNYXNrTGF5ZXIgPSByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICAg
ICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTWFza0xheWVyLCBJbnRSZWN0
KEludFBvaW50KCksIHJlcGxpY2FNYXNrTGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIGZvciAoaW50IHN1cmZh
Y2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4
ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgeworICAgICAgICBMYXllckNocm9taXVtKiByZW5kZXJT
dXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7
CisgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1
cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFj
ZSk7CisKKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkgfHwg
IXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVy
TGlzdCgpOworICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyAr
K2xheWVySW5kZXgpIHsKKyAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJM
aXN0W2xheWVySW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJm
YWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNlKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKGxheWVyLCBjb250ZXh0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIs
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIGlmIChsYXllci0+Ym91bmRzKCku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWxheWVyLT5vcGFjaXR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpCisgICAgICAg
IHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXItPm1hc2tMYXllcigpLCBjb250ZXh0KTsK
KyAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQorICAgICAgICB1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSwgY29udGV4dCk7CisKKyAgICBpZiAobGF5
ZXItPmRyYXdzQ29udGVudCgpKQorICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyhjb250ZXh0KTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBj
NTIwNDcwNjlkOTNkMGJjZTUzNDU3OWNkMDQ5ZjVhNjI4MGMzMGFmLi41NmFjZDZjYmIxMWU2YTA3
N2M3YzRhNGE0YjhiMWM4ZDg4NDhhNzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApA
QCAtOTksNyArOTksNiBAQCBwdWJsaWM6CiAKICAgICAvLyBDQ0xheWVyVHJlZUhvc3QgaW50ZXJm
YWNlIHRvIENDUHJveHkuCiAgICAgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJl
Z2luVGltZSk7Ci0gICAgdm9pZCBwcmVDb21taXQoQ0NMYXllclRyZWVIb3N0SW1wbCopOyAvLyBU
ZW1wb3JhcnkgaGFjayB1bnRpbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMgaXMg
c3BsaXQgYXBhcnQuCiAgICAgdm9pZCBjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKik7CiAg
ICAgUGFzc093blB0cjxDQ1RocmVhZD4gY3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOwogICAgIFBh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0Qo
KTsKQEAgLTE1NSwxMCArMTU0LDE5IEBAIHB1YmxpYzoKIAogICAgIE5vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdCogbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KCkgY29uc3QgeyByZXR1cm4gbV9ub25D
b21wb3NpdGVkQ29udGVudEhvc3QuZ2V0KCk7IH0KIAorICAgIHZvaWQgdXBkYXRlTGF5ZXJzKCk7
CisKIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50
KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogCiBwcml2YXRlOgorICAgIHR5cGVkZWYgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IExheWVyTGlzdDsKKworICAgIHZvaWQgcGFpbnRMYXllckNv
bnRlbnRzKGNvbnN0IExheWVyTGlzdCYpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hy
b21pdW0qKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29uc3QgTGF5ZXJM
aXN0JiwgR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoTGF5ZXJDaHJvbWl1bSosIEdyYXBoaWNzQ29udGV4dDNEKik7CisKICAgICBib29sIGlu
aXRpYWxpemUoKTsKIAogICAgIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVh
dGVMYXllclJlbmRlcmVyKCk7CkBAIC0xNzQsNiArMTgyLDggQEAgcHJpdmF0ZToKICAgICBPd25Q
dHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdD4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Q7CiAKKyAgICBMYXllckxpc3Qg
bV91cGRhdGVMaXN0OworCiAgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwogCiAgICAgSW50U2l6
ZSBtX3ZpZXdwb3J0U2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQwZWQyNWY1MDFiMzYxMmFlMmU1MzcxMzUwODJiYTM4OTdhZTViYTEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtKQoreworICAgIHJldHVybiAhbS5tMTIoKSAmJiAhbS5tMTMoKSAmJiAhbS5tMTQoKQor
ICAgICAgICAgICAmJiAhbS5tMjEoKSAmJiAhbS5tMjMoKSAmJiAhbS5tMjQoKQorICAgICAgICAg
ICAmJiAhbS5tMzEoKSAmJiAhbS5tMzIoKSAmJiAhbS5tNDMoKQorICAgICAgICAgICAmJiBtLm00
NCgpOworCit9CisKK0ludFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNp
YmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50UmVjdCYg
bGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7
CisgICAgLy8gSXMgdGhpcyBsYXllciBmdWxseSBjb250YWluZWQgd2l0aGluIHRoZSB0YXJnZXQg
c3VyZmFjZT8KKyAgICBJbnRSZWN0IGxheWVySW5TdXJmYWNlU3BhY2UgPSB0cmFuc2Zvcm0ubWFw
UmVjdChsYXllckJvdW5kUmVjdCk7CisgICAgaWYgKHRhcmdldFN1cmZhY2VSZWN0LmNvbnRhaW5z
KGxheWVySW5TdXJmYWNlU3BhY2UpKQorICAgICAgICByZXR1cm4gbGF5ZXJCb3VuZFJlY3Q7CisK
KyAgICAvLyBJZiB0aGUgbGF5ZXIgZG9lc24ndCBmaWxsIHVwIHRoZSBlbnRpcmUgc3VyZmFjZSwg
dGhlbiBmaW5kIHRoZSBwYXJ0IG9mCisgICAgLy8gdGhlIHN1cmZhY2UgcmVjdCB3aGVyZSB0aGUg
bGF5ZXIgY291bGQgYmUgdmlzaWJsZS4gVGhpcyBhdm9pZHMgdHJ5aW5nIHRvCisgICAgLy8gcHJv
amVjdCBzdXJmYWNlIHJlY3QgcG9pbnRzIHRoYXQgYXJlIGJlaGluZCB0aGUgcHJvamVjdGlvbiBw
b2ludC4KKyAgICBJbnRSZWN0IG1pbmltYWxTdXJmYWNlUmVjdCA9IHRhcmdldFN1cmZhY2VSZWN0
OworICAgIG1pbmltYWxTdXJmYWNlUmVjdC5pbnRlcnNlY3QobGF5ZXJJblN1cmZhY2VTcGFjZSk7
CisKKyAgICAvLyBQcm9qZWN0IHRoZSBjb3JuZXJzIG9mIHRoZSB0YXJnZXQgc3VyZmFjZSByZWN0
IGludG8gdGhlIGxheWVyIHNwYWNlLgorICAgIC8vIFRoaXMgYm91bmRpbmcgcmVjdGFuZ2xlIG1h
eSBiZSBsYXJnZXIgdGhhbiBpdCBuZWVkcyB0byBiZSAoYmVpbmcKKyAgICAvLyBheGlzLWFsaWdu
ZWQpLCBidXQgaXMgYSByZWFzb25hYmxlIGZpbHRlciBvbiB0aGUgc3BhY2UgdG8gY29uc2lkZXIu
CisgICAgLy8gTm9uLWludmVydGlibGUgdHJhbnNmb3JtcyB3aWxsIGNyZWF0ZSBhbiBlbXB0eSBy
ZWN0IGhlcmUuCisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VyZmFjZVRvTGF5ZXIg
PSB0cmFuc2Zvcm0uaW52ZXJzZSgpOworICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gc3VyZmFjZVRv
TGF5ZXIucHJvamVjdFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChtaW5pbWFsU3VyZmFjZVJlY3Qp
KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICBsYXllclJlY3QuaW50ZXJzZWN0KGxheWVy
Qm91bmRSZWN0KTsKKyAgICByZXR1cm4gbGF5ZXJSZWN0OworfQorCitJbnRSZWN0IENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdChjb25zdCBJbnRSZWN0JiB0
YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBJbnRTaXplJiBj
b250ZW50Qm91bmRzLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdGlsaW5nVHJhbnNmb3Jt
KQoreworICAgIGlmICh0YXJnZXRTdXJmYWNlUmVjdC5pc0VtcHR5KCkgfHwgY29udGVudEJvdW5k
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0YXJnZXRTdXJmYWNlUmVjdDsKKworICAgIGNv
bnN0IEludFJlY3QgbGF5ZXJCb3VuZFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRC
b3VuZHMpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IHRpbGluZ1RyYW5z
Zm9ybTsKKworICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oYm91bmRzLndpZHRoKCkgLyBz
dGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMud2lkdGgoKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib3VuZHMuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNv
bnRlbnRCb3VuZHMuaGVpZ2h0KCkpKTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50
Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKwor
ICAgIHJldHVybiBjYWxjdWxhdGVWaXNpYmxlUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5ZXJC
b3VuZFJlY3QsIHRyYW5zZm9ybSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTA5MjE5NTNmOWEz
NjJjNjM4ZTZiMTFlYjg2MTFiZDlmODVjY2JkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5oCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJUcmVl
SG9zdENvbW1vbl9oCisjZGVmaW5lIENDTGF5ZXJUcmVlSG9zdENvbW1vbl9oCisKKyNpbmNsdWRl
ICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RDb21tb24geworcHVibGljOgorICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2li
bGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFNp
emUmIGJvdW5kcywgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcywgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRpbGluZ1RyYW5zZm9ybSk7CisgICAgc3RhdGljIEludFJlY3QgY2FsY3Vs
YXRlVmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGxheWVyQm91bmRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAg
IHN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4Jik7CisKKyAgICAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFydGlu
ZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQorICAgIC8vIG5lY2Vzc2Fy
eSB0cmFuc2Zvcm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFuZ2xlcywgcmVuZGVyIHN1cmZhY2VzLCBl
dGMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyVHlwZSogbGF5ZXIsIExheWVyVHlwZSog
cm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0
cjxMYXllclR5cGU+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5
ZXJUeXBlPiA+JiBsYXllckxpc3QsIExheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRl
eHR1cmVTaXplKQorICAgIHsKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyVHlw
ZT4gPiBMYXllckxpc3Q7CisgICAgICAgIC8vIENvbXB1dGUgdGhlIG5ldyBtYXRyaXggdHJhbnNm
b3JtYXRpb24gdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhpcyBsYXllciBhbmQKKyAgICAgICAg
Ly8gYWxsIGl0cyBjaGlsZHJlbi4gSXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGUg
bGF5ZXIncyBwb3NpdGlvbgorICAgICAgICAvLyBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGxheWVy
J3MgYW5jaG9yIHBvaW50LiBBbHNvLCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gdXNlZAorICAgICAg
ICAvLyBhc3N1bWVzIHRoYXQgdGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBldmVuIHRo
b3VnaCB0aGUgY29vcmRpbmF0ZXMgdGhlIGJyb3dzZXIKKyAgICAgICAgLy8gZ2l2ZXMgdXMgZm9y
IHRoZSBsYXllcnMgYXJlIGZvciB0aGUgdXBwZXIgbGVmdCBjb3JuZXIuIFRoZSBZIGZsaXAgaGFw
cGVucyB2aWEKKyAgICAgICAgLy8gdGhlIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIGFwcGxpZWQg
YXQgcmVuZGVyIHRpbWUuCisgICAgICAgIC8vIFRoZSB0cmFuc2Zvcm1hdGlvbiBjaGFpbiBmb3Ig
dGhlIGxheWVyIGlzICh1c2luZyB0aGUgTWF0cml4IHggVmVjdG9yIG9yZGVyKToKKyAgICAgICAg
Ly8gTSA9IE1bcF0gKiBUcltsXSAqIE1bbF0gKiBUcltjXQorICAgICAgICAvLyBXaGVyZSBNW3Bd
IGlzIHRoZSBwYXJlbnQgbWF0cml4IHBhc3NlZCBkb3duIHRvIHRoZSBmdW5jdGlvbgorICAgICAg
ICAvLyAgICAgICBUcltsXSBpcyB0aGUgdHJhbnNsYXRpb24gbWF0cml4IGxvY2F0aW5nIHRoZSBs
YXllcidzIGFuY2hvciBwb2ludAorICAgICAgICAvLyAgICAgICBUcltjXSBpcyB0aGUgdHJhbnNs
YXRpb24gb2Zmc2V0IGJldHdlZW4gdGhlIGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0
aGUgbGF5ZXIKKyAgICAgICAgLy8gICAgICAgTVtsXSBpcyB0aGUgbGF5ZXIncyBtYXRyaXggKGFw
cGxpZWQgYXQgdGhlIGFuY2hvciBwb2ludCkKKyAgICAgICAgLy8gVGhpcyB0cmFuc2Zvcm0gY3Jl
YXRlcyBhIGNvb3JkaW5hdGUgc3lzdGVtIHdob3NlIG9yaWdpbiBpcyB0aGUgY2VudGVyIG9mIHRo
ZSBsYXllci4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBmaW5hbCBtYXRyaXggdXNlZCBieSB0
aGUgc2hhZGVyIGZvciB0aGUgbGF5ZXIgaXMgUCAqIE0gKiBTIC4gVGhpcyBmaW5hbCBwcm9kdWN0
CisgICAgICAgIC8vIGlzIGNvbXB1dGVkIGluIGRyYXdUZXh0dXJlZFF1YWQoKS4KKyAgICAgICAg
Ly8gV2hlcmU6IFAgaXMgdGhlIHByb2plY3Rpb24gbWF0cml4CisgICAgICAgIC8vICAgICAgICBN
IGlzIHRoZSBsYXllcidzIG1hdHJpeCBjb21wdXRlZCBhYm92ZQorICAgICAgICAvLyAgICAgICAg
UyBpcyB0aGUgc2NhbGUgYWRqdXN0bWVudCAodG8gc2NhbGUgdXAgdG8gdGhlIGxheWVyIHNpemUp
CisgICAgICAgIEludFNpemUgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOworICAgICAgICBGbG9h
dFBvaW50IGFuY2hvclBvaW50ID0gbGF5ZXItPmFuY2hvclBvaW50KCk7CisgICAgICAgIEZsb2F0
UG9pbnQgcG9zaXRpb24gPSBsYXllci0+cG9zaXRpb24oKTsKKworICAgICAgICAvLyBPZmZzZXQg
YmV0d2VlbiBhbmNob3IgcG9pbnQgYW5kIHRoZSBjZW50ZXIgb2YgdGhlIHF1YWQuCisgICAgICAg
IGZsb2F0IGNlbnRlck9mZnNldFggPSAoMC41IC0gYW5jaG9yUG9pbnQueCgpKSAqIGJvdW5kcy53
aWR0aCgpOworICAgICAgICBmbG9hdCBjZW50ZXJPZmZzZXRZID0gKDAuNSAtIGFuY2hvclBvaW50
LnkoKSkgKiBib3VuZHMuaGVpZ2h0KCk7CisKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJMb2NhbFRyYW5zZm9ybTsKKyAgICAgICAgLy8gTFQgPSBUcltsXQorICAgICAgICBsYXll
ckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpLCBs
YXllci0+YW5jaG9yUG9pbnRaKCkpOworICAgICAgICAvLyBMVCA9IFRyW2xdICogTVtsXQorICAg
ICAgICBsYXllckxvY2FsVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT50cmFuc2Zvcm0oKSk7Cisg
ICAgICAgIC8vIExUID0gVHJbbF0gKiBNW2xdICogVHJbY10KKyAgICAgICAgbGF5ZXJMb2NhbFRy
YW5zZm9ybS50cmFuc2xhdGUzZChjZW50ZXJPZmZzZXRYLCBjZW50ZXJPZmZzZXRZLCAtbGF5ZXIt
PmFuY2hvclBvaW50WigpKTsKKworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5l
ZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJpeDsKKyAgICAgICAgY29tYmluZWRUcmFuc2Zvcm0gPSBj
b21iaW5lZFRyYW5zZm9ybS5tdWx0aXBseShsYXllckxvY2FsVHJhbnNmb3JtKTsKKworICAgICAg
ICBGbG9hdFJlY3QgbGF5ZXJSZWN0KC0wLjUgKiBsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgLTAu
NSAqIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSwgbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIGxh
eWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgICAgIEludFJlY3QgdHJhbnNmb3JtZWRMYXll
clJlY3Q7CisKKyAgICAgICAgLy8gZnVsbEhpZXJhcmNoeU1hdHJpeCBpcyB0aGUgbWF0cml4IHRo
YXQgdHJhbnNmb3JtcyBvYmplY3RzIGJldHdlZW4gc2NyZWVuIHNwYWNlIChleGNlcHQgcHJvamVj
dGlvbiBtYXRyaXgpIGFuZCB0aGUgbW9zdCByZWNlbnQgUmVuZGVyU3VyZmFjZSdzIHNwYWNlLgor
ICAgICAgICAvLyBuZXh0SGllcmFyY2h5TWF0cml4IHdpbGwgb25seSBjaGFuZ2UgaWYgdGhpcyBs
YXllciB1c2VzIGEgbmV3IFJlbmRlclN1cmZhY2UsIG90aGVyd2lzZSByZW1haW5zIHRoZSBzYW1l
LgorICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBuZXh0SGllcmFyY2h5TWF0cml4ID0gZnVs
bEhpZXJhcmNoeU1hdHJpeDsKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyBsaWtlIHRo
ZSB3cm9uZyBwbGFjZSB0byBzZXQgdGhpcworICAgICAgICBsYXllci0+c2V0VXNlc0xheWVyU2Np
c3NvcihmYWxzZSk7CisKKyAgICAgICAgLy8gVGhlIGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMg
cmVuZGVyIG9uIGEgbmV3IFJlbmRlclN1cmZhY2UgaWYgYW55IG9mCisgICAgICAgIC8vIHRoZXNl
IGNvbmRpdGlvbnMgaG9sZDoKKyAgICAgICAgLy8gMS4gVGhlIGxheWVyIGNsaXBzIGl0cyBkZXNj
ZW5kYW50cyBhbmQgaXRzIHRyYW5zZm9ybSBpcyBub3QgYSBzaW1wbGUgdHJhbnNsYXRpb24uCisg
ICAgICAgIC8vIDIuIElmIHRoZSBsYXllciBoYXMgb3BhY2l0eSAhPSAxIGFuZCBkb2VzIG5vdCBo
YXZlIGEgcHJlc2VydmVzLTNkIHRyYW5zZm9ybSBzdHlsZS4KKyAgICAgICAgLy8gMy4gVGhlIGxh
eWVyIHVzZXMgYSBtYXNrCisgICAgICAgIC8vIDQuIFRoZSBsYXllciBoYXMgYSByZXBsaWNhICh1
c2VkIGZvciByZWZsZWN0aW9ucykKKyAgICAgICAgLy8gNS4gVGhlIGxheWVyIGRvZXNuJ3QgcHJl
c2VydmUtM2QgYnV0IGlzIHRoZSBjaGlsZCBvZiBhIGxheWVyIHdoaWNoIGRvZXMuCisgICAgICAg
IC8vIElmIGEgbGF5ZXIgcHJlc2VydmVzLTNkIHRoZW4gd2UgZG9uJ3QgY3JlYXRlIGEgUmVuZGVy
U3VyZmFjZSBmb3IgaXQgdG8gYXZvaWQgZmxhdHRlbmluZworICAgICAgICAvLyBvdXQgaXRzIGNo
aWxkcmVuLiBUaGUgb3BhY2l0eSB2YWx1ZSBvZiB0aGUgY2hpbGRyZW4gbGF5ZXJzIGlzIG11bHRp
cGxpZWQgYnkgdGhlIG9wYWNpdHkKKyAgICAgICAgLy8gb2YgdGhlaXIgcGFyZW50LgorICAgICAg
ICBib29sIHVzZVN1cmZhY2VGb3JDbGlwcGluZyA9IGxheWVyLT5tYXNrc1RvQm91bmRzKCkgJiYg
IWlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbWJpbmVkVHJhbnNmb3JtKTsKKyAgICAgICAgYm9vbCB1
c2VTdXJmYWNlRm9yT3BhY2l0eSA9IGxheWVyLT5vcGFjaXR5KCkgIT0gMSAmJiAhbGF5ZXItPnBy
ZXNlcnZlczNEKCk7CisgICAgICAgIGJvb2wgdXNlU3VyZmFjZUZvck1hc2tpbmcgPSBsYXllci0+
bWFza0xheWVyKCk7CisgICAgICAgIGJvb2wgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gPSBsYXll
ci0+cmVwbGljYUxheWVyKCk7CisgICAgICAgIGJvb2wgdXNlU3VyZmFjZUZvckZsYXREZXNjZW5k
YW50cyA9IGxheWVyLT5wYXJlbnQoKSAmJiBsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkg
JiYgIWxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmIGxheWVyLT5kZXNjZW5kYW50RHJhd3NDb250ZW50
KCk7CisgICAgICAgIGlmICh1c2VTdXJmYWNlRm9yTWFza2luZyB8fCB1c2VTdXJmYWNlRm9yUmVm
bGVjdGlvbiB8fCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzIHx8ICgodXNlU3VyZmFjZUZv
ckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBsYXllci0+ZGVzY2VuZGFudERy
YXdzQ29udGVudCgpKSkgeworICAgICAgICAgICAgaWYgKCFsYXllci0+cmVuZGVyU3VyZmFjZSgp
KQorICAgICAgICAgICAgICAgIGxheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgICAg
ICAgICBSZW5kZXJTdXJmYWNlVHlwZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJm
YWNlKCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIG5ldyBzdXJmYWNlIGlz
IHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIuCisgICAgICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBkcmF3VHJhbnNmb3JtOworICAgICAgICAgICAgZHJhd1RyYW5zZm9ybS50
cmFuc2xhdGUzZCgwLjUgKiBib3VuZHMud2lkdGgoKSwgMC41ICogYm91bmRzLmhlaWdodCgpLCAw
KTsKKyAgICAgICAgICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pOwor
CisgICAgICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IEludFJlY3QoMCwgMCwgYm91bmRz
LndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7CisKKyAgICAgICAgICAgIC8vIExheWVyJ3Mgb3Bh
Y2l0eSB3aWxsIGJlIGFwcGxpZWQgd2hlbiBkcmF3aW5nIHRoZSByZW5kZXIgc3VyZmFjZS4KKyAg
ICAgICAgICAgIGZsb2F0IGRyYXdPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsKKyAgICAgICAg
ICAgIGlmIChsYXllci0+cGFyZW50KCkgJiYgbGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgp
KQorICAgICAgICAgICAgICAgIGRyYXdPcGFjaXR5ICo9IGxheWVyLT5wYXJlbnQoKS0+ZHJhd09w
YWNpdHkoKTsKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldERyYXdPcGFjaXR5KGRyYXdP
cGFjaXR5KTsKKyAgICAgICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eSgxKTsKKworICAgICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSBjb21iaW5l
ZFRyYW5zZm9ybTsKKyAgICAgICAgICAgIGxheWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNk
KC0wLjUgKiBib3VuZHMud2lkdGgoKSwgLTAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7CisgICAg
ICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRPcmlnaW5UcmFuc2Zvcm0obGF5ZXJPcmlnaW5UcmFu
c2Zvcm0pOworCisgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGFnZ3JlZ2F0ZSBoaWVyYXJjaHkg
bWF0cml4IHRvIGluY2x1ZGUgdGhlIHRyYW5zZm9ybSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBSZW5k
ZXJTdXJmYWNlLgorICAgICAgICAgICAgbmV4dEhpZXJhcmNoeU1hdHJpeC5tdWx0aXBseShsYXll
ck9yaWdpblRyYW5zZm9ybSk7CisKKyAgICAgICAgICAgIC8vIFRoZSByZW5kZXIgc3VyZmFjZSBz
Y2lzc29yIHJlY3QgaXMgdGhlIHNjaXNzb3IgcmVjdCB0aGF0IG5lZWRzIHRvCisgICAgICAgICAg
ICAvLyBiZSBhcHBsaWVkIGJlZm9yZSBkcmF3aW5nIHRoZSByZW5kZXIgc3VyZmFjZSBvbnRvIGl0
cyBjb250YWluaW5nCisgICAgICAgICAgICAvLyBzdXJmYWNlIGFuZCBpcyB0aGVyZWZvcmUgZXhw
cmVzc2VkIGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICAgICAgICAgIHJl
bmRlclN1cmZhY2UtPnNldFNjaXNzb3JSZWN0KGxheWVyLT5wYXJlbnQoKSA/IGxheWVyLT5wYXJl
bnQoKS0+c2Npc3NvclJlY3QoKSA6IGxheWVyLT5zY2lzc29yUmVjdCgpKTsKKworICAgICAgICAg
ICAgcmVuZGVyU3VyZmFjZS0+Y2xlYXJMYXllckxpc3QoKTsKKworICAgICAgICAgICAgaWYgKGxh
eWVyLT5tYXNrTGF5ZXIoKSkgeworICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE1h
c2tMYXllcihsYXllci0+bWFza0xheWVyKCkpOworICAgICAgICAgICAgICAgIGxheWVyLT5tYXNr
TGF5ZXIoKS0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXllcigw
KTsKKworICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBsYXllci0+cmVw
bGljYUxheWVyKCktPm1hc2tMYXllcigpKQorICAgICAgICAgICAgICAgIGxheWVyLT5yZXBsaWNh
TGF5ZXIoKS0+bWFza0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFj
ZSk7CisKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKGxheWVyKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIERUID0gTVtwXSAqIExUCisgICAgICAg
ICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShjb21iaW5lZFRyYW5zZm9ybSk7CisgICAgICAg
ICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobGF5ZXItPmRyYXdU
cmFuc2Zvcm0oKS5tYXBSZWN0KGxheWVyUmVjdCkpOworCisgICAgICAgICAgICBsYXllci0+c2V0
RHJhd09wYWNpdHkobGF5ZXItPm9wYWNpdHkoKSk7CisKKyAgICAgICAgICAgIGlmIChsYXllci0+
cGFyZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2
ZXMzRCgpKQorICAgICAgICAgICAgICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eShsYXllci0+
ZHJhd09wYWNpdHkoKSAqIGxheWVyLT5wYXJlbnQoKS0+ZHJhd09wYWNpdHkoKSk7CisKKyAgICAg
ICAgICAgICAgICAvLyBMYXllcnMgaW5oZXJpdCB0aGUgc2Npc3NvciByZWN0IGZyb20gdGhlaXIg
cGFyZW50LgorICAgICAgICAgICAgICAgIGxheWVyLT5zZXRTY2lzc29yUmVjdChsYXllci0+cGFy
ZW50KCktPnNjaXNzb3JSZWN0KCkpOworICAgICAgICAgICAgICAgIGlmIChsYXllci0+cGFyZW50
KCktPnVzZXNMYXllclNjaXNzb3IoKSkKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnNldFVz
ZXNMYXllclNjaXNzb3IodHJ1ZSk7CisKKyAgICAgICAgICAgICAgICBsYXllci0+c2V0VGFyZ2V0
UmVuZGVyU3VyZmFjZShsYXllci0+cGFyZW50KCktPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsYXllciAhPSByb290TGF5ZXIpCisgICAg
ICAgICAgICAgICAgbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOworCisgICAgICAgICAgICBp
ZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIEludFJlY3Qgc2Np
c3NvciA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OworICAgICAgICAgICAgICAgIHNjaXNzb3IuaW50
ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKKyAgICAgICAgICAgICAgICBsYXllci0+c2V0
U2Npc3NvclJlY3Qoc2Npc3Nvcik7CisgICAgICAgICAgICAgICAgbGF5ZXItPnNldFVzZXNMYXll
clNjaXNzb3IodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBO
b3RlIHRoYXQgYXQgdGhpcyBwb2ludCwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSBpcyBub3QgbmVj
ZXNzYXJpbHkgdGhlIHNhbWUgYXMgbG9jYWwgdmFyaWFibGUgZHJhd1RyYW5zZm9ybS4KKyAgICAg
ICAgLy8gbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSByZXByZXNlbnRzIHRoZSB0cmFuc2Zvcm0g
YmV0d2VlbiBsYXllciBzcGFjZSAoaW4gcGl4ZWxzKSBhbmQgc2NyZWVuIHNwYWNlLgorICAgICAg
ICAvLyBTbyB3ZSBkbyBub3QgaW5jbHVkZSBwcm9qZWN0aW9uIFAgb3Igc2NhbGluZyB0cmFuc2Zv
cm0gUyAoc2VlIGNvbW1lbnRzIGFib3ZlIHRoYXQgZGVzY3JpYmUgUCpNKlMpLgorICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtID0gbmV4dEhpZXJh
cmNoeU1hdHJpeDsKKyAgICAgICAgbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybS5tdWx0aXBseShs
YXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICAgICAgbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9y
bS50cmFuc2xhdGUzZCgtMC41ICogYm91bmRzLndpZHRoKCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0
KCksIDApOworICAgICAgICBsYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0obGF5ZXJTY3Jl
ZW5TcGFjZVRyYW5zZm9ybSk7CisKKyAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkp
CisgICAgICAgICAgICBsYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVy
U3VyZmFjZSgpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobGF5ZXItPnBh
cmVudCgpKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVy
LT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIGRyYXdhYmxlQ29udGVudFJlY3QoKSBpcyBhbHdheXMgc3RvcmVkIGluIHRoZSBjb29yZGlu
YXRlIHN5c3RlbSBvZiB0aGUKKyAgICAgICAgLy8gUmVuZGVyU3VyZmFjZSB0aGUgbGF5ZXIgZHJh
d3MgaW50by4KKyAgICAgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkgeworICAgICAgICAg
ICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gdHJhbnNmb3JtZWRMYXllclJlY3Q7Cisg
ICAgICAgICAgICBpZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3IoKSkKKyAgICAgICAgICAgICAg
ICBkcmF3YWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdChsYXllci0+c2Npc3NvclJlY3QoKSk7Cisg
ICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRS
ZWN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250
ZW50UmVjdChJbnRSZWN0KCkpOworCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1Ymxh
eWVyTWF0cml4ID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKworICAgICAgICAvLyBGbGF0dGVu
IHRvIDJEIGlmIHRoZSBsYXllciBkb2Vzbid0IHByZXNlcnZlIDNELgorICAgICAgICBpZiAoIWxh
eWVyLT5wcmVzZXJ2ZXMzRCgpKSB7CisgICAgICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMTMo
MCk7CisgICAgICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMjMoMCk7CisgICAgICAgICAgICBz
dWJsYXllck1hdHJpeC5zZXRNMzEoMCk7CisgICAgICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRN
MzIoMCk7CisgICAgICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzMoMSk7CisgICAgICAgICAg
ICBzdWJsYXllck1hdHJpeC5zZXRNMzQoMCk7CisgICAgICAgICAgICBzdWJsYXllck1hdHJpeC5z
ZXRNNDMoMCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBcHBseSB0aGUgc3VibGF5ZXIgdHJh
bnNmb3JtIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgorICAgICAgICBzdWJsYXllck1hdHJp
eC5tdWx0aXBseShsYXllci0+c3VibGF5ZXJUcmFuc2Zvcm0oKSk7CisKKyAgICAgICAgLy8gVGhl
IG9yaWdpbiBvZiB0aGUgY2hpbGRyZW4gaXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5
ZXIsIG5vdCB0aGUKKyAgICAgICAgLy8gY2VudGVyLiBUaGUgbWF0cml4IHBhc3NlZCBkb3duIHRv
IHRoZSBjaGlsZHJlbiBpcyB0aGVyZWZvcmU6CisgICAgICAgIC8vIE1bc10gPSBNICogVHJbLWNl
bnRlcl0KKyAgICAgICAgc3VibGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53aWR0aCgp
ICogMC41LCAtYm91bmRzLmhlaWdodCgpICogMC41LCAwKTsKKworICAgICAgICBMYXllckxpc3Qm
IGRlc2NlbmRhbnRzID0gKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpLT5sYXllckxpc3QoKSA6IGxheWVyTGlzdCk7CisgICAgICAgIGRlc2NlbmRhbnRzLmFw
cGVuZChsYXllcik7CisKKyAgICAgICAgdW5zaWduZWQgdGhpc0xheWVySW5kZXggPSBkZXNjZW5k
YW50cy5zaXplKCkgLSAxOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXIt
PmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIExheWVyVHlwZSogY2hpbGQg
PSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBMYXll
clNvcnRlcj4oY2hpbGQsIHJvb3RMYXllciwgc3VibGF5ZXJNYXRyaXgsIG5leHRIaWVyYXJjaHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzLCBsYXllclNvcnRlciwg
bWF4VGV4dHVyZVNpemUpOworCisgICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlclN1cmZhY2Uo
KSkgeworICAgICAgICAgICAgICAgIFJlbmRlclN1cmZhY2VUeXBlKiBjaGlsZFJlbmRlclN1cmZh
Y2UgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICAgICAgICAgIEludFJlY3QgZHJh
d2FibGVDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAg
ICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGNoaWxk
UmVuZGVyU3VyZmFjZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpKSk7CisgICAgICAgICAgICAgICAg
bGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CisgICAg
ICAgICAgICAgICAgZGVzY2VuZGFudHMuYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXIt
PmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRS
ZWN0LnVuaXRlKGNoaWxkLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOworICAgICAgICAgICAgICAg
IGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGxheWVyLT5tYXNrc1RvQm91bmRz
KCkgfHwgdXNlU3VyZmFjZUZvck1hc2tpbmcpIHsKKyAgICAgICAgICAgIEludFJlY3QgZHJhd2Fi
bGVDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgICAg
ICBkcmF3YWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7Cisg
ICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRS
ZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYm
IGxheWVyICE9IHJvb3RMYXllcikgeworICAgICAgICAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIHJl
bmRlclN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICAgICAgSW50UmVj
dCBjbGlwcGVkQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOworICAg
ICAgICAgICAgRmxvYXRQb2ludCBzdXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0KGNsaXBwZWRDb250
ZW50UmVjdCkuY2VudGVyKCk7CisKKyAgICAgICAgICAgIC8vIFJlc3RyaWN0IHRoZSBSZW5kZXJT
dXJmYWNlIHNpemUgdG8gdGhlIHBvcnRpb24gdGhhdCdzIHZpc2libGUuCisgICAgICAgICAgICBG
bG9hdFNpemUgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZzsKKworICAgICAgICAgICAgLy8gRG9u
J3QgY2xpcCBpZiB0aGUgbGF5ZXIgaXMgcmVmbGVjdGVkIGFzIHRoZSByZWZsZWN0aW9uIHNob3Vs
ZG4ndCBiZQorICAgICAgICAgICAgLy8gY2xpcHBlZC4KKyAgICAgICAgICAgIGlmICghbGF5ZXIt
PnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5z
Y2lzc29yUmVjdCgpLmlzRW1wdHkoKSAmJiAhY2xpcHBlZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IHN1cmZhY2VTY2lzc29yUmVjdCA9IGNhbGN1
bGF0ZVZpc2libGVSZWN0KHJlbmRlclN1cmZhY2UtPnNjaXNzb3JSZWN0KCksIGNsaXBwZWRDb250
ZW50UmVjdCwgcmVuZGVyU3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgICAgICAgICAg
ICAgICAgICBjbGlwcGVkQ29udGVudFJlY3QuaW50ZXJzZWN0KHN1cmZhY2VTY2lzc29yUmVjdCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1
cmZhY2VDZW50ZXIgPSBGbG9hdFJlY3QoY2xpcHBlZENvbnRlbnRSZWN0KS5jZW50ZXIoKTsKKyAg
ICAgICAgICAgICAgICBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nID0gY2xpcHBlZFN1cmZhY2VD
ZW50ZXIgLSBzdXJmYWNlQ2VudGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBU
aGUgUmVuZGVyU3VyZmFjZSBiYWNraW5nIHRleHR1cmUgY2Fubm90IGV4Y2VlZCB0aGUgbWF4aW11
bSBzdXBwb3J0ZWQKKyAgICAgICAgICAgIC8vIHRleHR1cmUgc2l6ZS4KKyAgICAgICAgICAgIGNs
aXBwZWRDb250ZW50UmVjdC5zZXRXaWR0aChzdGQ6Om1pbihjbGlwcGVkQ29udGVudFJlY3Qud2lk
dGgoKSwgbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAgICAgIGNsaXBwZWRDb250ZW50UmVjdC5z
ZXRIZWlnaHQoc3RkOjptaW4oY2xpcHBlZENvbnRlbnRSZWN0LmhlaWdodCgpLCBtYXhUZXh0dXJl
U2l6ZSkpOworCisgICAgICAgICAgICBpZiAoY2xpcHBlZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgpOworCisgICAg
ICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRDb250ZW50UmVjdChjbGlwcGVkQ29udGVudFJlY3Qp
OworCisgICAgICAgICAgICAvLyBTaW5jZSB0aGUgbGF5ZXIgc3RhcnRzIGEgbmV3IHJlbmRlciBz
dXJmYWNlIHdlIG5lZWQgdG8gYWRqdXN0IGl0cworICAgICAgICAgICAgLy8gc2Npc3NvciByZWN0
IHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbmV3IHN1cmZhY2UncyBjb29yZGluYXRlIHN5c3RlbS4K
KyAgICAgICAgICAgIGxheWVyLT5zZXRTY2lzc29yUmVjdChsYXllci0+ZHJhd2FibGVDb250ZW50
UmVjdCgpKTsKKworICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5z
Zm9ybSB0byBiZSB0aGUgY2VudGVyIG9mIHRoZSByZW5kZXIgc3VyZmFjZS4KKyAgICAgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmln
aW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIGRyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2Qoc3Vy
ZmFjZUNlbnRlci54KCkgKyBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nLndpZHRoKCksIHN1cmZh
Y2VDZW50ZXIueSgpICsgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZy5oZWlnaHQoKSwgMCk7Cisg
ICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXREcmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0p
OworCisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdXNl
ZCB0byBkcmF3IHRoZSByZXBsaWNhIG9mIHRoZSByZW5kZXIKKyAgICAgICAgICAgIC8vIHN1cmZh
Y2UuCisgICAgICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYURyYXdUcmFuc2Zvcm0gPSByZW5kZXJT
dXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgICAgICByZXBsaWNhRHJhd1Ry
YW5zZm9ybS50cmFuc2xhdGUzZChsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgp
LCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpLCAwKTsKKyAgICAgICAgICAg
ICAgICByZXBsaWNhRHJhd1RyYW5zZm9ybS5tdWx0aXBseShsYXllci0+cmVwbGljYUxheWVyKCkt
PnRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgICAgICByZXBsaWNhRHJhd1RyYW5zZm9ybS50cmFu
c2xhdGUzZChzdXJmYWNlQ2VudGVyLngoKSAtIGFuY2hvclBvaW50LngoKSAqIGJvdW5kcy53aWR0
aCgpLCBzdXJmYWNlQ2VudGVyLnkoKSAtIGFuY2hvclBvaW50LnkoKSAqIGJvdW5kcy5oZWlnaHQo
KSwgMCk7CisgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0UmVwbGljYURyYXdUcmFu
c2Zvcm0ocmVwbGljYURyYXdUcmFuc2Zvcm0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgLy8gSWYgcHJlc2VydmVzLTNkIHRoZW4gc29ydCBhbGwgdGhlIGRlc2NlbmRhbnRz
IGluIDNEIHNvIHRoYXQgdGhleSBjYW4gYmUKKyAgICAgICAgLy8gZHJhd24gZnJvbSBiYWNrIHRv
IGZyb250LiBJZiB0aGUgcHJlc2VydmVzLTNkIHByb3BlcnR5IGlzIGFsc28gc2V0IG9uIHRoZSBw
YXJlbnQgdGhlbgorICAgICAgICAvLyBza2lwIHRoZSBzb3J0aW5nIGFzIHRoZSBwYXJlbnQgd2ls
bCBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5LgorICAgICAgICBpZiAobGF5ZXItPnBy
ZXNlcnZlczNEKCkgJiYgKCFsYXllci0+cGFyZW50KCkgfHwgIWxheWVyLT5wYXJlbnQoKS0+cHJl
c2VydmVzM0QoKSkpCisgICAgICAgICAgICBzb3J0TGF5ZXJzKCZkZXNjZW5kYW50cy5hdCh0aGlz
TGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpLCBsYXllclNvcnRlcik7CisgICAgfQorfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNTkzZmFiODU1ZTYwMTM1NjU1NjU5NDRiZDMxMzgwOTU3
ZDMyODQ5OS4uOWRlMjAyOWRlYzdkMjMzZWNlZWFhY2E1NjY2NzM5MTkzMzRlZDNkYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTE0NywxMyArMTQ3LDYgQEAg
Ym9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVy
VHJlZUhvc3QqIGltcGxIYWNrLCBQYXMKICAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyOwogfQog
Ci0vLyBGSVhNRTogbW92ZSBhbGwgdGhpcyBjb2RlIHRvIENDTGF5ZXJUcmVlSG9zdAotdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMoKQotewotICAgIGlmIChtX2xheWVyUmVu
ZGVyZXIpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlTGF5ZXJzKCk7Ci19Ci0KIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3Bv
cnRTaXplKQogewogICAgIGJvb2wgY2hhbmdlZCA9IHZpZXdwb3J0U2l6ZSAhPSBtX3ZpZXdwb3J0
U2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBkNjhiYjhkNjA3
MzM5MGViZDA4NGU5MTRjYWIwMTkyNjFmYTkwNzg4Li41M2E0ZDU1MjRhNTdiODM1ZGU0ZDgzMjBl
YWMwYzY0OWU2NjA2MmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBA
IC03Myw4ICs3Myw2IEBAIHB1YmxpYzoKICAgICBpbnQgc291cmNlRnJhbWVOdW1iZXIoKSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZUZyYW1lTnVtYmVyOyB9CiAgICAgdm9pZCBzZXRTb3VyY2VGcmFt
ZU51bWJlcihpbnQgZnJhbWVOdW1iZXIpIHsgbV9zb3VyY2VGcmFtZU51bWJlciA9IGZyYW1lTnVt
YmVyOyB9CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVycygpOwotCiAgICAgdm9pZCBzZXRWaWV3cG9y
dChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpOwogICAgIGNvbnN0IEludFNpemUmIHZpZXdw
b3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRTaXplOyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5kZXggNGMyNDU2ZThkM2IyMWY5OTZlN2VhZGM1
N2QyMjI5ZmQzZjkzYTY4NS4uYjBmODE0MzE4MDBjMmE0ZDM5ZWY4NmU2MThiMmIxZTliNWQzNjU0
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTIyNSwxOCAr
MjI1LDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCgpCiAgICAg
Ly8gVXBkYXRlCiAgICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKICAg
ICBtX2xheWVyVHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwotCi0g
ICAgLy8gUHJlY29tbWl0IGlzIGEgdGVtcG9yYXJ5IHN0ZXAgd2UgbmVlZCB0byBwZXJmb3JtIHRv
IHB1c2ggdGhpbmdzIGxpa2UKLSAgICAvLyB0aGUgdmlld3BvcnQgdG8gdGhlIExheWVyVHJlZUhv
c3RJbXBsLCBiZWNhdXNlCi0gICAgLy8gTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycygp
IGlzbid0IHNwbGl0IGludG8gaG9zdCBhbmQgaW1wbCBwYXJ0cy4KLSAgICB7Ci0gICAgICAgIFNj
b3BlZFNldEltcGxUaHJlYWQgaW1wbDsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5wcmVDb21t
aXQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBzaG91
bGQgYmVjb21lIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCkgb25jZSB3ZSBzcGxpdCBh
cGFydAotICAgIC8vIExheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMuCi0gICAgbV9sYXll
clRyZWVIb3N0SW1wbC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgbV9sYXllclRyZWVIb3N0LT51cGRh
dGVMYXllcnMoKTsKIAogICAgIC8vIENvbW1pdAogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106153</attachid>
            <date>2011-09-02 10:53:55 -0700</date>
            <delta_ts>2011-09-02 13:40:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67438-20110902105354.patch</filename>
            <type>text/plain</type>
            <size>69315</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ0MzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4MWZjMzQ5OWMwZGE3NjA4
ODIxMWNhMmVjMTc5ZWIwZWRkYTg4OWIyLi5mOGE3NTJlOGM0YmQ3ZTJjOWRmNjQ3YzZlNDBlMDIw
MmRiZDE4N2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMDktMDIgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUg
dXBkYXRlTGF5ZXJzIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIENDTGF5ZXJUcmVlSG9z
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0MzgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVk
IGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgIE1vdmUgZnVuY3Rpb25hbGl0eSB1c2VkIGJ5
IGJvdGggQ0NMYXllclRyZWVIb3N0IGFuZAorICAgICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0g
aW50byBDQ0xheWVyVHJlZUhvc3RDb21tb24uIE1vdmUgdXBkYXRlLCBwYWludCwKKyAgICAgICAg
YW5kIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZSBmdW5jdGlvbnMgaW50byBDQ2xheWVyVHJlZUhv
c3QuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzb3J0TGF5
ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4
dHVyZU1lbW9yeVJlY2xhaW1MaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNv
cnRMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0
VG8pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6aXNT
Y2FsZU9yVHJhbnNsYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCk6CisKIDIwMTEt
MDktMDIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgQmVm
b3JlUHJvY2Vzc0V2ZW50LCBpdCB3YXMgbmV2ZXIgbWVhbnQgdG8gYmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpp
bmRleCAxNDNjNzFjNTI3M2Q2YTdhNzRmODlhNGVjNTcyZGI1NDZjOWI2NGFlLi5jMDE1Y2NiNWFj
MzBjMWZiNzdjOTFjYzllMTFhODI3NDIzMDRhYTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTM3
LDYgKzM1MzcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUaWxpbmdEYXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IGQ2NDg4YjA3NjAwZmMyNjk0YTRmZGMzYTg0ZDIxODFmYmQ1YmEyNzAuLjI1OGVk
YmU5NTA4MDg5YzBhZGQ1ZTRkNWQwYzc2OTdhYzE4OTQ5NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCkBAIC00MzcsNSArNDM3LDEwIEBAIGJvb2wgTGF5ZXJDaHJvbWl1bTo6ZGVzY2VuZGFudERy
YXdzQ29udGVudCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIHNvcnRMYXllcnMoVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopCit7CisgICAgLy8gQ3VycmVudGx5IHdlIGRv
bid0IHVzZSB6LW9yZGVyIHRvIGRlY2lkZSB3aGF0IHRvIHBhaW50LCBzbyB0aGVyZSdzIG5vIG5l
ZWQgdG8gYWN0dWFsbHkgc29ydCBMYXllckNocm9taXVtcy4KK30KKwogfQogI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBhN2ViMjA4
MzUyNjdhMzRhMGE0NTAzOTg2ZjFiMDVjODcyNDdiNTE1Li5iN2Q0YTJjNDg5ZTRkODExYTM2ODY3
NjdlYzhjYTc1ZjNkYWUxYTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0zMDAsNiArMzAwLDgg
QEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogfTsKIAordm9pZCBzb3J0TGF5ZXJzKFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZvaWQqKTsKKwogfQogI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKaW5kZXggOTY4NjYxYTMwMjU2OTA1M2U3MWU1OTViZWQwNmI4MTFhZjMwMTEzOS4uNmE3MjBh
NTU0YmQ2NzBhYjViODQ5NTA1NjU2OWY3YzRkOGI0MTQ5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5
ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRC5oIgpAQCAtNzgsMzI0ICs3OSwxMiBAQCBzdGF0aWMgc2l6ZV90IHRleHR1cmVNZW1v
cnlSZWNsYWltTGltaXRCeXRlcyA9IDY0ICogMTAyNCAqIDEwMjQ7CiAvLyBUaGUgbWF4aW11bSB0
ZXh0dXJlIG1lbW9yeSB1c2FnZSB3aGVuIGFza2VkIHRvIHJlbGVhc2UgdGV4dHVyZXMuCiBzdGF0
aWMgc2l6ZV90IHRleHR1cmVNZW1vcnlMb3dMaW1pdEJ5dGVzID0gMyAqIDEwMjQgKiAxMDI0Owog
Ci1uYW1lc3BhY2UgewotCi1JbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJl
Y3QmIHRhcmdldFN1cmZhY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXllckJvdW5kUmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKLXsKLSAgICAvLyBJcyB0aGlzIGxh
eWVyIGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIHRhcmdldCBzdXJmYWNlPwotICAgIEludFJl
Y3QgbGF5ZXJJblN1cmZhY2VTcGFjZSA9IHRyYW5zZm9ybS5tYXBSZWN0KGxheWVyQm91bmRSZWN0
KTsKLSAgICBpZiAodGFyZ2V0U3VyZmFjZVJlY3QuY29udGFpbnMobGF5ZXJJblN1cmZhY2VTcGFj
ZSkpCi0gICAgICAgIHJldHVybiBsYXllckJvdW5kUmVjdDsKLQotICAgIC8vIElmIHRoZSBsYXll
ciBkb2Vzbid0IGZpbGwgdXAgdGhlIGVudGlyZSBzdXJmYWNlLCB0aGVuIGZpbmQgdGhlIHBhcnQg
b2YKLSAgICAvLyB0aGUgc3VyZmFjZSByZWN0IHdoZXJlIHRoZSBsYXllciBjb3VsZCBiZSB2aXNp
YmxlLiBUaGlzIGF2b2lkcyB0cnlpbmcgdG8KLSAgICAvLyBwcm9qZWN0IHN1cmZhY2UgcmVjdCBw
b2ludHMgdGhhdCBhcmUgYmVoaW5kIHRoZSBwcm9qZWN0aW9uIHBvaW50LgotICAgIEludFJlY3Qg
bWluaW1hbFN1cmZhY2VSZWN0ID0gdGFyZ2V0U3VyZmFjZVJlY3Q7Ci0gICAgbWluaW1hbFN1cmZh
Y2VSZWN0LmludGVyc2VjdChsYXllckluU3VyZmFjZVNwYWNlKTsKLQotICAgIC8vIFByb2plY3Qg
dGhlIGNvcm5lcnMgb2YgdGhlIHRhcmdldCBzdXJmYWNlIHJlY3QgaW50byB0aGUgbGF5ZXIgc3Bh
Y2UuCi0gICAgLy8gVGhpcyBib3VuZGluZyByZWN0YW5nbGUgbWF5IGJlIGxhcmdlciB0aGFuIGl0
IG5lZWRzIHRvIGJlIChiZWluZwotICAgIC8vIGF4aXMtYWxpZ25lZCksIGJ1dCBpcyBhIHJlYXNv
bmFibGUgZmlsdGVyIG9uIHRoZSBzcGFjZSB0byBjb25zaWRlci4KLSAgICAvLyBOb24taW52ZXJ0
aWJsZSB0cmFuc2Zvcm1zIHdpbGwgY3JlYXRlIGFuIGVtcHR5IHJlY3QgaGVyZS4KLSAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlVG9MYXllciA9IHRyYW5zZm9ybS5pbnZlcnNl
KCk7Ci0gICAgSW50UmVjdCBsYXllclJlY3QgPSBzdXJmYWNlVG9MYXllci5wcm9qZWN0UXVhZChG
bG9hdFF1YWQoRmxvYXRSZWN0KG1pbmltYWxTdXJmYWNlUmVjdCkpKS5lbmNsb3NpbmdCb3VuZGlu
Z0JveCgpOwotICAgIGxheWVyUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZFJlY3QpOwotICAgIHJl
dHVybiBsYXllclJlY3Q7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWF0cml4IGhhcyBu
byByb3RhdGlvbiwgc2tldyBvciBwZXJzcGVjdGl2ZSBjb21wb25lbnRzIHRvIGl0LgotYm9vbCBp
c1NjYWxlT3JUcmFuc2xhdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKLXsKLSAg
ICByZXR1cm4gIW0ubTEyKCkgJiYgIW0ubTEzKCkgJiYgIW0ubTE0KCkKLSAgICAgICAgICAgJiYg
IW0ubTIxKCkgJiYgIW0ubTIzKCkgJiYgIW0ubTI0KCkKLSAgICAgICAgICAgJiYgIW0ubTMxKCkg
JiYgIW0ubTMyKCkgJiYgIW0ubTQzKCkKLSAgICAgICAgICAgJiYgbS5tNDQoKTsKLQotfQotCi12
b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopCitzaXplX3Qg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0KCkKIHsKLSAg
ICAvLyBDdXJyZW50bHkgd2UgZG9uJ3QgdXNlIHotb3JkZXIgdG8gZGVjaWRlIHdoYXQgdG8gcGFp
bnQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBhY3R1YWxseSBzb3J0IExheWVyQ2hyb21pdW1zLgot
fQotCi12b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0
b3IgZmlyc3QsIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGVuZCwgQ0NM
YXllclNvcnRlciogbGF5ZXJTb3J0ZXIpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6c29ydExheWVycyIsIDAsIDApOwotICAgIGxheWVyU29ydGVyLT5zb3J0KGZp
cnN0LCBlbmQpOwotfQotCi0vLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFy
dGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQotLy8gbmVjZXNzYXJ5
IHRyYW5zZm9ybWF0aW9ucywgc2Npc3NvciByZWN0YW5nbGVzLCByZW5kZXIgc3VyZmFjZXMsIGV0
Yy4KLXRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGUsIHR5cGVuYW1lIExheWVyU29ydGVyPgotdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5ZXIsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIGxheWVy
TGlzdCwgTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCi17Ci0g
ICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiBMYXllckxpc3Q7Ci0gICAgLy8g
Q29tcHV0ZSB0aGUgbmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGll
ZCB0byB0aGlzIGxheWVyIGFuZAotICAgIC8vIGFsbCBpdHMgY2hpbGRyZW4uIEl0J3MgaW1wb3J0
YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhlIGxheWVyJ3MgcG9zaXRpb24KLSAgICAvLyBpcyB0aGUg
cG9zaXRpb24gb2YgdGhlIGxheWVyJ3MgYW5jaG9yIHBvaW50LiBBbHNvLCB0aGUgY29vcmRpbmF0
ZSBzeXN0ZW0gdXNlZAotICAgIC8vIGFzc3VtZXMgdGhhdCB0aGUgb3JpZ2luIGlzIGF0IHRoZSBs
b3dlciBsZWZ0IGV2ZW4gdGhvdWdoIHRoZSBjb29yZGluYXRlcyB0aGUgYnJvd3NlcgotICAgIC8v
IGdpdmVzIHVzIGZvciB0aGUgbGF5ZXJzIGFyZSBmb3IgdGhlIHVwcGVyIGxlZnQgY29ybmVyLiBU
aGUgWSBmbGlwIGhhcHBlbnMgdmlhCi0gICAgLy8gdGhlIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9u
IGFwcGxpZWQgYXQgcmVuZGVyIHRpbWUuCi0gICAgLy8gVGhlIHRyYW5zZm9ybWF0aW9uIGNoYWlu
IGZvciB0aGUgbGF5ZXIgaXMgKHVzaW5nIHRoZSBNYXRyaXggeCBWZWN0b3Igb3JkZXIpOgotICAg
IC8vIE0gPSBNW3BdICogVHJbbF0gKiBNW2xdICogVHJbY10KLSAgICAvLyBXaGVyZSBNW3BdIGlz
IHRoZSBwYXJlbnQgbWF0cml4IHBhc3NlZCBkb3duIHRvIHRoZSBmdW5jdGlvbgotICAgIC8vICAg
ICAgIFRyW2xdIGlzIHRoZSB0cmFuc2xhdGlvbiBtYXRyaXggbG9jYXRpbmcgdGhlIGxheWVyJ3Mg
YW5jaG9yIHBvaW50Ci0gICAgLy8gICAgICAgVHJbY10gaXMgdGhlIHRyYW5zbGF0aW9uIG9mZnNl
dCBiZXR3ZWVuIHRoZSBhbmNob3IgcG9pbnQgYW5kIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyCi0g
ICAgLy8gICAgICAgTVtsXSBpcyB0aGUgbGF5ZXIncyBtYXRyaXggKGFwcGxpZWQgYXQgdGhlIGFu
Y2hvciBwb2ludCkKLSAgICAvLyBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgY29vcmRpbmF0ZSBz
eXN0ZW0gd2hvc2Ugb3JpZ2luIGlzIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgotICAgIC8vIE5v
dGUgdGhhdCB0aGUgZmluYWwgbWF0cml4IHVzZWQgYnkgdGhlIHNoYWRlciBmb3IgdGhlIGxheWVy
IGlzIFAgKiBNICogUyAuIFRoaXMgZmluYWwgcHJvZHVjdAotICAgIC8vIGlzIGNvbXB1dGVkIGlu
IGRyYXdUZXh0dXJlZFF1YWQoKS4KLSAgICAvLyBXaGVyZTogUCBpcyB0aGUgcHJvamVjdGlvbiBt
YXRyaXgKLSAgICAvLyAgICAgICAgTSBpcyB0aGUgbGF5ZXIncyBtYXRyaXggY29tcHV0ZWQgYWJv
dmUKLSAgICAvLyAgICAgICAgUyBpcyB0aGUgc2NhbGUgYWRqdXN0bWVudCAodG8gc2NhbGUgdXAg
dG8gdGhlIGxheWVyIHNpemUpCi0gICAgSW50U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7
Ci0gICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwotICAg
IEZsb2F0UG9pbnQgcG9zaXRpb24gPSBsYXllci0+cG9zaXRpb24oKTsKLQotICAgIC8vIE9mZnNl
dCBiZXR3ZWVuIGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZC4KLSAgICBm
bG9hdCBjZW50ZXJPZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMud2lk
dGgoKTsKLSAgICBmbG9hdCBjZW50ZXJPZmZzZXRZID0gKDAuNSAtIGFuY2hvclBvaW50LnkoKSkg
KiBib3VuZHMuaGVpZ2h0KCk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllckxvY2Fs
VHJhbnNmb3JtOwotICAgIC8vIExUID0gVHJbbF0KLSAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRy
YW5zbGF0ZTNkKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpLCBsYXllci0+YW5jaG9yUG9pbnRa
KCkpOwotICAgIC8vIExUID0gVHJbbF0gKiBNW2xdCi0gICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS5t
dWx0aXBseShsYXllci0+dHJhbnNmb3JtKCkpOwotICAgIC8vIExUID0gVHJbbF0gKiBNW2xdICog
VHJbY10KLSAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFgs
IGNlbnRlck9mZnNldFksIC1sYXllci0+YW5jaG9yUG9pbnRaKCkpOwotCi0gICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY29tYmluZWRUcmFuc2Zvcm0gPSBwYXJlbnRNYXRyaXg7Ci0gICAgY29tYmlu
ZWRUcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybS5tdWx0aXBseShsYXllckxvY2FsVHJhbnNm
b3JtKTsKLQotICAgIEZsb2F0UmVjdCBsYXllclJlY3QoLTAuNSAqIGxheWVyLT5ib3VuZHMoKS53
aWR0aCgpLCAtMC41ICogbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpLCBsYXllci0+Ym91bmRzKCku
d2lkdGgoKSwgbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsKLSAgICBJbnRSZWN0IHRyYW5zZm9y
bWVkTGF5ZXJSZWN0OwotCi0gICAgLy8gZnVsbEhpZXJhcmNoeU1hdHJpeCBpcyB0aGUgbWF0cml4
IHRoYXQgdHJhbnNmb3JtcyBvYmplY3RzIGJldHdlZW4gc2NyZWVuIHNwYWNlIChleGNlcHQgcHJv
amVjdGlvbiBtYXRyaXgpIGFuZCB0aGUgbW9zdCByZWNlbnQgUmVuZGVyU3VyZmFjZSdzIHNwYWNl
LgotICAgIC8vIG5leHRIaWVyYXJjaHlNYXRyaXggd2lsbCBvbmx5IGNoYW5nZSBpZiB0aGlzIGxh
eWVyIHVzZXMgYSBuZXcgUmVuZGVyU3VyZmFjZSwgb3RoZXJ3aXNlIHJlbWFpbnMgdGhlIHNhbWUu
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbmV4dEhpZXJhcmNoeU1hdHJpeCA9IGZ1bGxIaWVy
YXJjaHlNYXRyaXg7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyBsaWtlIHRoZSB3cm9uZyBw
bGFjZSB0byBzZXQgdGhpcwotICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJTY2lzc29yKGZhbHNlKTsK
LQotICAgIC8vIFRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRhbnRzIHJlbmRlciBvbiBhIG5ldyBS
ZW5kZXJTdXJmYWNlIGlmIGFueSBvZgotICAgIC8vIHRoZXNlIGNvbmRpdGlvbnMgaG9sZDoKLSAg
ICAvLyAxLiBUaGUgbGF5ZXIgY2xpcHMgaXRzIGRlc2NlbmRhbnRzIGFuZCBpdHMgdHJhbnNmb3Jt
IGlzIG5vdCBhIHNpbXBsZSB0cmFuc2xhdGlvbi4KLSAgICAvLyAyLiBJZiB0aGUgbGF5ZXIgaGFz
IG9wYWNpdHkgIT0gMSBhbmQgZG9lcyBub3QgaGF2ZSBhIHByZXNlcnZlcy0zZCB0cmFuc2Zvcm0g
c3R5bGUuCi0gICAgLy8gMy4gVGhlIGxheWVyIHVzZXMgYSBtYXNrCi0gICAgLy8gNC4gVGhlIGxh
eWVyIGhhcyBhIHJlcGxpY2EgKHVzZWQgZm9yIHJlZmxlY3Rpb25zKQotICAgIC8vIDUuIFRoZSBs
YXllciBkb2Vzbid0IHByZXNlcnZlLTNkIGJ1dCBpcyB0aGUgY2hpbGQgb2YgYSBsYXllciB3aGlj
aCBkb2VzLgotICAgIC8vIElmIGEgbGF5ZXIgcHJlc2VydmVzLTNkIHRoZW4gd2UgZG9uJ3QgY3Jl
YXRlIGEgUmVuZGVyU3VyZmFjZSBmb3IgaXQgdG8gYXZvaWQgZmxhdHRlbmluZwotICAgIC8vIG91
dCBpdHMgY2hpbGRyZW4uIFRoZSBvcGFjaXR5IHZhbHVlIG9mIHRoZSBjaGlsZHJlbiBsYXllcnMg
aXMgbXVsdGlwbGllZCBieSB0aGUgb3BhY2l0eQotICAgIC8vIG9mIHRoZWlyIHBhcmVudC4KLSAg
ICBib29sIHVzZVN1cmZhY2VGb3JDbGlwcGluZyA9IGxheWVyLT5tYXNrc1RvQm91bmRzKCkgJiYg
IWlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbWJpbmVkVHJhbnNmb3JtKTsKLSAgICBib29sIHVzZVN1
cmZhY2VGb3JPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFsYXllci0+cHJlc2Vy
dmVzM0QoKTsKLSAgICBib29sIHVzZVN1cmZhY2VGb3JNYXNraW5nID0gbGF5ZXItPm1hc2tMYXll
cigpOwotICAgIGJvb2wgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gPSBsYXllci0+cmVwbGljYUxh
eWVyKCk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzID0gbGF5ZXItPnBh
cmVudCgpICYmIGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSAmJiAhbGF5ZXItPnByZXNl
cnZlczNEKCkgJiYgbGF5ZXItPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKTsKLSAgICBpZiAodXNl
U3VyZmFjZUZvck1hc2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgdXNlU3VyZmFj
ZUZvckZsYXREZXNjZW5kYW50cyB8fCAoKHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJm
YWNlRm9yT3BhY2l0eSkgJiYgbGF5ZXItPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKSkpIHsKLSAg
ICAgICAgaWYgKCFsYXllci0+cmVuZGVyU3VyZmFjZSgpKQotICAgICAgICAgICAgbGF5ZXItPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIHJlbmRlclN1
cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOwotCi0gICAgICAgIC8vIFRoZSBvcmlnaW4g
b2YgdGhlIG5ldyBzdXJmYWNlIGlzIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIu
Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm07Ci0gICAgICAgIGRy
YXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QoMC41ICogYm91bmRzLndpZHRoKCksIDAuNSAqIGJvdW5k
cy5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKGRyYXdUcmFu
c2Zvcm0pOwotCi0gICAgICAgIHRyYW5zZm9ybWVkTGF5ZXJSZWN0ID0gSW50UmVjdCgwLCAwLCBi
b3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKTsKLQotICAgICAgICAvLyBMYXllcidzIG9w
YWNpdHkgd2lsbCBiZSBhcHBsaWVkIHdoZW4gZHJhd2luZyB0aGUgcmVuZGVyIHN1cmZhY2UuCi0g
ICAgICAgIGZsb2F0IGRyYXdPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsKLSAgICAgICAgaWYg
KGxheWVyLT5wYXJlbnQoKSAmJiBsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpCi0gICAg
ICAgICAgICBkcmF3T3BhY2l0eSAqPSBsYXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5KCk7Ci0g
ICAgICAgIHJlbmRlclN1cmZhY2UtPnNldERyYXdPcGFjaXR5KGRyYXdPcGFjaXR5KTsKLSAgICAg
ICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOwotCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gY29tYmluZWRUcmFuc2Zvcm07Ci0gICAgICAgIGxh
eWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC0wLjUgKiBib3VuZHMud2lkdGgoKSwgLTAu
NSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE9yaWdp
blRyYW5zZm9ybShsYXllck9yaWdpblRyYW5zZm9ybSk7Ci0KLSAgICAgICAgLy8gVXBkYXRlIHRo
ZSBhZ2dyZWdhdGUgaGllcmFyY2h5IG1hdHJpeCB0byBpbmNsdWRlIHRoZSB0cmFuc2Zvcm0gb2Yg
dGhlIG5ld2x5IGNyZWF0ZWQgUmVuZGVyU3VyZmFjZS4KLSAgICAgICAgbmV4dEhpZXJhcmNoeU1h
dHJpeC5tdWx0aXBseShsYXllck9yaWdpblRyYW5zZm9ybSk7Ci0KLSAgICAgICAgLy8gVGhlIHJl
bmRlciBzdXJmYWNlIHNjaXNzb3IgcmVjdCBpcyB0aGUgc2Npc3NvciByZWN0IHRoYXQgbmVlZHMg
dG8KLSAgICAgICAgLy8gYmUgYXBwbGllZCBiZWZvcmUgZHJhd2luZyB0aGUgcmVuZGVyIHN1cmZh
Y2Ugb250byBpdHMgY29udGFpbmluZwotICAgICAgICAvLyBzdXJmYWNlIGFuZCBpcyB0aGVyZWZv
cmUgZXhwcmVzc2VkIGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAg
cmVuZGVyU3VyZmFjZS0+c2V0U2Npc3NvclJlY3QobGF5ZXItPnBhcmVudCgpID8gbGF5ZXItPnBh
cmVudCgpLT5zY2lzc29yUmVjdCgpIDogbGF5ZXItPnNjaXNzb3JSZWN0KCkpOwotCi0gICAgICAg
IHJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7Ci0KLSAgICAgICAgaWYgKGxheWVyLT5t
YXNrTGF5ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0TWFza0xheWVyKGxh
eWVyLT5tYXNrTGF5ZXIoKSk7Ci0gICAgICAgICAgICBsYXllci0+bWFza0xheWVyKCktPnNldFRh
cmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0TWFza0xheWVyKDApOwotCi0gICAgICAgIGlmIChsYXll
ci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkK
LSAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldFRhcmdl
dFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7Ci0KLSAgICAgICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5hcHBlbmQobGF5ZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIERUID0gTVtw
XSAqIExUCi0gICAgICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKGNvbWJpbmVkVHJhbnNmb3Jt
KTsKLSAgICAgICAgdHJhbnNmb3JtZWRMYXllclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGxheWVy
LT5kcmF3VHJhbnNmb3JtKCkubWFwUmVjdChsYXllclJlY3QpKTsKLQotICAgICAgICBsYXllci0+
c2V0RHJhd09wYWNpdHkobGF5ZXItPm9wYWNpdHkoKSk7Ci0KLSAgICAgICAgaWYgKGxheWVyLT5w
YXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0Qo
KSkKLSAgICAgICAgICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eShsYXllci0+ZHJhd09wYWNp
dHkoKSAqIGxheWVyLT5wYXJlbnQoKS0+ZHJhd09wYWNpdHkoKSk7Ci0KLSAgICAgICAgICAgIC8v
IExheWVycyBpbmhlcml0IHRoZSBzY2lzc29yIHJlY3QgZnJvbSB0aGVpciBwYXJlbnQuCi0gICAg
ICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3QobGF5ZXItPnBhcmVudCgpLT5zY2lzc29yUmVj
dCgpKTsKLSAgICAgICAgICAgIGlmIChsYXllci0+cGFyZW50KCktPnVzZXNMYXllclNjaXNzb3Io
KSkKLSAgICAgICAgICAgICAgICBsYXllci0+c2V0VXNlc0xheWVyU2Npc3Nvcih0cnVlKTsKLQot
ICAgICAgICAgICAgbGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnBhcmVudCgp
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxheWVy
ICE9IHJvb3RMYXllcikKLSAgICAgICAgICAgIGxheWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsK
LQotICAgICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkgewotICAgICAgICAgICAgSW50
UmVjdCBzY2lzc29yID0gdHJhbnNmb3JtZWRMYXllclJlY3Q7Ci0gICAgICAgICAgICBzY2lzc29y
LmludGVyc2VjdChsYXllci0+c2Npc3NvclJlY3QoKSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0
U2Npc3NvclJlY3Qoc2Npc3Nvcik7Ci0gICAgICAgICAgICBsYXllci0+c2V0VXNlc0xheWVyU2Np
c3Nvcih0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vdGUgdGhhdCBhdCB0aGlz
IHBvaW50LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2Ft
ZSBhcyBsb2NhbCB2YXJpYWJsZSBkcmF3VHJhbnNmb3JtLgotICAgIC8vIGxheWVyU2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0gcmVwcmVzZW50cyB0aGUgdHJhbnNmb3JtIGJldHdlZW4gbGF5ZXIgc3BhY2Ug
KGluIHBpeGVscykgYW5kIHNjcmVlbiBzcGFjZS4KLSAgICAvLyBTbyB3ZSBkbyBub3QgaW5jbHVk
ZSBwcm9qZWN0aW9uIFAgb3Igc2NhbGluZyB0cmFuc2Zvcm0gUyAoc2VlIGNvbW1lbnRzIGFib3Zl
IHRoYXQgZGVzY3JpYmUgUCpNKlMpLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0gPSBuZXh0SGllcmFyY2h5TWF0cml4OwotICAgIGxheWVyU2NyZWVu
U3BhY2VUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgbGF5
ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogYm91bmRzLndpZHRoKCks
IC0wLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOwotICAgIGxheWVyLT5zZXRTY3JlZW5TcGFjZVRy
YW5zZm9ybShsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtKTsKLQotICAgIGlmIChsYXllci0+cmVu
ZGVyU3VyZmFjZSgpKQotICAgICAgICBsYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXll
ci0+cmVuZGVyU3VyZmFjZSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGxheWVyLT5w
YXJlbnQoKSk7Ci0gICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5w
YXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBkcmF3YWJs
ZUNvbnRlbnRSZWN0KCkgaXMgYWx3YXlzIHN0b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0g
b2YgdGhlCi0gICAgLy8gUmVuZGVyU3VyZmFjZSB0aGUgbGF5ZXIgZHJhd3MgaW50by4KLSAgICBp
ZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKSB7Ci0gICAgICAgIEludFJlY3QgZHJhd2FibGVDb250
ZW50UmVjdCA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OwotICAgICAgICBpZiAobGF5ZXItPnVzZXNM
YXllclNjaXNzb3IoKSkKLSAgICAgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QuaW50ZXJzZWN0
KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVu
dFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxheWVyLT5z
ZXREcmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoKSk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBzdWJsYXllck1hdHJpeCA9IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7Ci0KLSAgICAvLyBG
bGF0dGVuIHRvIDJEIGlmIHRoZSBsYXllciBkb2Vzbid0IHByZXNlcnZlIDNELgotICAgIGlmICgh
bGF5ZXItPnByZXNlcnZlczNEKCkpIHsKLSAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTEzKDAp
OwotICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMjMoMCk7Ci0gICAgICAgIHN1YmxheWVyTWF0
cml4LnNldE0zMSgwKTsKLSAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTMyKDApOwotICAgICAg
ICBzdWJsYXllck1hdHJpeC5zZXRNMzMoMSk7Ci0gICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0z
NCgwKTsKLSAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTQzKDApOwotICAgIH0KLQotICAgIC8v
IEFwcGx5IHRoZSBzdWJsYXllciB0cmFuc2Zvcm0gYXQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIu
Ci0gICAgc3VibGF5ZXJNYXRyaXgubXVsdGlwbHkobGF5ZXItPnN1YmxheWVyVHJhbnNmb3JtKCkp
OwotCi0gICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgY2hpbGRyZW4gaXMgdGhlIHRvcCBsZWZ0IGNv
cm5lciBvZiB0aGUgbGF5ZXIsIG5vdCB0aGUKLSAgICAvLyBjZW50ZXIuIFRoZSBtYXRyaXggcGFz
c2VkIGRvd24gdG8gdGhlIGNoaWxkcmVuIGlzIHRoZXJlZm9yZToKLSAgICAvLyBNW3NdID0gTSAq
IFRyWy1jZW50ZXJdCi0gICAgc3VibGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53aWR0
aCgpICogMC41LCAtYm91bmRzLmhlaWdodCgpICogMC41LCAwKTsKLQotICAgIExheWVyTGlzdCYg
ZGVzY2VuZGFudHMgPSAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT5yZW5kZXJTdXJm
YWNlKCktPmxheWVyTGlzdCgpIDogbGF5ZXJMaXN0KTsKLSAgICBkZXNjZW5kYW50cy5hcHBlbmQo
bGF5ZXIpOwotCi0gICAgdW5zaWduZWQgdGhpc0xheWVySW5kZXggPSBkZXNjZW5kYW50cy5zaXpl
KCkgLSAxOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5z
aXplKCk7ICsraSkgewotICAgICAgICBMYXllclR5cGUqIGNoaWxkID0gbGF5ZXItPmNoaWxkcmVu
KClbaV0uZ2V0KCk7Ci0gICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBMYXllclNvcnRlcj4oY2hpbGQsIHJvb3RM
YXllciwgc3VibGF5ZXJNYXRyaXgsIG5leHRIaWVyYXJjaHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGRlc2NlbmRhbnRzLCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOwotCi0g
ICAgICAgIGlmIChjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJT
dXJmYWNlVHlwZSogY2hpbGRSZW5kZXJTdXJmYWNlID0gY2hpbGQtPnJlbmRlclN1cmZhY2UoKTsK
LSAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJs
ZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGVu
Y2xvc2luZ0ludFJlY3QoY2hpbGRSZW5kZXJTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkp
KTsKLSAgICAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29u
dGVudFJlY3QpOwotICAgICAgICAgICAgZGVzY2VuZGFudHMuYXBwZW5kKGNoaWxkKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGxh
eWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRS
ZWN0LnVuaXRlKGNoaWxkLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwotICAgICAgICAgICAgbGF5
ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSB8fCB1c2VTdXJmYWNl
Rm9yTWFza2luZykgewotICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXll
ci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwotICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0Lmlu
dGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3YWJs
ZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOwotICAgIH0KLQotICAgIGlmIChsYXll
ci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyICE9IHJvb3RMYXllcikgewotICAgICAgICBSZW5k
ZXJTdXJmYWNlVHlwZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0g
ICAgICAgIEludFJlY3QgY2xpcHBlZENvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVu
dFJlY3QoKTsKLSAgICAgICAgRmxvYXRQb2ludCBzdXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0KGNs
aXBwZWRDb250ZW50UmVjdCkuY2VudGVyKCk7Ci0KLSAgICAgICAgLy8gUmVzdHJpY3QgdGhlIFJl
bmRlclN1cmZhY2Ugc2l6ZSB0byB0aGUgcG9ydGlvbiB0aGF0J3MgdmlzaWJsZS4KLSAgICAgICAg
RmxvYXRTaXplIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmc7Ci0KLSAgICAgICAgLy8gRG9uJ3Qg
Y2xpcCBpZiB0aGUgbGF5ZXIgaXMgcmVmbGVjdGVkIGFzIHRoZSByZWZsZWN0aW9uIHNob3VsZG4n
dCBiZQotICAgICAgICAvLyBjbGlwcGVkLgotICAgICAgICBpZiAoIWxheWVyLT5yZXBsaWNhTGF5
ZXIoKSkgewotICAgICAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5zY2lzc29yUmVjdCgpLmlz
RW1wdHkoKSAmJiAhY2xpcHBlZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgIEludFJlY3Qgc3VyZmFjZVNjaXNzb3JSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZVJlY3QocmVu
ZGVyU3VyZmFjZS0+c2Npc3NvclJlY3QoKSwgY2xpcHBlZENvbnRlbnRSZWN0LCByZW5kZXJTdXJm
YWNlLT5vcmlnaW5UcmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICAgICAgY2xpcHBlZENvbnRlbnRS
ZWN0LmludGVyc2VjdChzdXJmYWNlU2Npc3NvclJlY3QpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgRmxvYXRQb2ludCBjbGlwcGVkU3VyZmFjZUNlbnRlciA9IEZsb2F0UmVjdChjbGlwcGVk
Q29udGVudFJlY3QpLmNlbnRlcigpOwotICAgICAgICAgICAgY2VudGVyT2Zmc2V0RHVlVG9DbGlw
cGluZyA9IGNsaXBwZWRTdXJmYWNlQ2VudGVyIC0gc3VyZmFjZUNlbnRlcjsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFRoZSBSZW5kZXJTdXJmYWNlIGJhY2tpbmcgdGV4dHVyZSBjYW5ub3QgZXhj
ZWVkIHRoZSBtYXhpbXVtIHN1cHBvcnRlZAotICAgICAgICAvLyB0ZXh0dXJlIHNpemUuCi0gICAg
ICAgIGNsaXBwZWRDb250ZW50UmVjdC5zZXRXaWR0aChtaW4oY2xpcHBlZENvbnRlbnRSZWN0Lndp
ZHRoKCksIG1heFRleHR1cmVTaXplKSk7Ci0gICAgICAgIGNsaXBwZWRDb250ZW50UmVjdC5zZXRI
ZWlnaHQobWluKGNsaXBwZWRDb250ZW50UmVjdC5oZWlnaHQoKSwgbWF4VGV4dHVyZVNpemUpKTsK
LQotICAgICAgICBpZiAoY2xpcHBlZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IHJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7Ci0KLSAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+c2V0Q29udGVudFJlY3QoY2xpcHBlZENvbnRlbnRSZWN0KTsKLQotICAgICAgICAvLyBTaW5j
ZSB0aGUgbGF5ZXIgc3RhcnRzIGEgbmV3IHJlbmRlciBzdXJmYWNlIHdlIG5lZWQgdG8gYWRqdXN0
IGl0cwotICAgICAgICAvLyBzY2lzc29yIHJlY3QgdG8gYmUgZXhwcmVzc2VkIGluIHRoZSBuZXcg
c3VyZmFjZSdzIGNvb3JkaW5hdGUgc3lzdGVtLgotICAgICAgICBsYXllci0+c2V0U2Npc3NvclJl
Y3QobGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7Ci0KLSAgICAgICAgLy8gQWRqdXN0IHRo
ZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybSB0byBiZSB0aGUgY2VudGVyIG9mIHRoZSByZW5kZXIg
c3VyZmFjZS4KLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybSA9IHJl
bmRlclN1cmZhY2UtPm9yaWdpblRyYW5zZm9ybSgpOwotICAgICAgICBkcmF3VHJhbnNmb3JtLnRy
YW5zbGF0ZTNkKHN1cmZhY2VDZW50ZXIueCgpICsgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZy53
aWR0aCgpLCBzdXJmYWNlQ2VudGVyLnkoKSArIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcuaGVp
Z2h0KCksIDApOwotICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXREcmF3VHJhbnNmb3JtKGRyYXdU
cmFuc2Zvcm0pOwotCi0gICAgICAgIC8vIENvbXB1dGUgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJp
eCB1c2VkIHRvIGRyYXcgdGhlIHJlcGxpY2Egb2YgdGhlIHJlbmRlcgotICAgICAgICAvLyBzdXJm
YWNlLgotICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCByZXBsaWNhRHJhd1RyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2Ut
Pm9yaWdpblRyYW5zZm9ybSgpOwotICAgICAgICAgICAgcmVwbGljYURyYXdUcmFuc2Zvcm0udHJh
bnNsYXRlM2QobGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgbGF5ZXItPnJl
cGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7Ci0gICAgICAgICAgICByZXBsaWNhRHJh
d1RyYW5zZm9ybS5tdWx0aXBseShsYXllci0+cmVwbGljYUxheWVyKCktPnRyYW5zZm9ybSgpKTsK
LSAgICAgICAgICAgIHJlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHN1cmZhY2VDZW50
ZXIueCgpIC0gYW5jaG9yUG9pbnQueCgpICogYm91bmRzLndpZHRoKCksIHN1cmZhY2VDZW50ZXIu
eSgpIC0gYW5jaG9yUG9pbnQueSgpICogYm91bmRzLmhlaWdodCgpLCAwKTsKLSAgICAgICAgICAg
IHJlbmRlclN1cmZhY2UtPnNldFJlcGxpY2FEcmF3VHJhbnNmb3JtKHJlcGxpY2FEcmF3VHJhbnNm
b3JtKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHByZXNlcnZlcy0zZCB0aGVuIHNv
cnQgYWxsIHRoZSBkZXNjZW5kYW50cyBpbiAzRCBzbyB0aGF0IHRoZXkgY2FuIGJlCi0gICAgLy8g
ZHJhd24gZnJvbSBiYWNrIHRvIGZyb250LiBJZiB0aGUgcHJlc2VydmVzLTNkIHByb3BlcnR5IGlz
IGFsc28gc2V0IG9uIHRoZSBwYXJlbnQgdGhlbgotICAgIC8vIHNraXAgdGhlIHNvcnRpbmcgYXMg
dGhlIHBhcmVudCB3aWxsIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBhbnl3YXkuCi0gICAgaWYg
KGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5ZXItPnBhcmVudCgpIHx8ICFsYXllci0+cGFy
ZW50KCktPnByZXNlcnZlczNEKCkpKQotICAgICAgICBzb3J0TGF5ZXJzKCZkZXNjZW5kYW50cy5h
dCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpLCBsYXllclNvcnRlcik7CisgICAg
cmV0dXJuIHRleHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRlczsKIH0KIAotfQorbmFtZXNwYWNl
IHsKIAogc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhvTWF0cml4KGZsb2F0IGxlZnQs
IGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkKIHsKQEAgLTQ1Miw2ICsxNDEs
OCBAQCBib29sIGNvbnRleHRTdXBwb3J0c0FjY2VsZXJhdGVkUGFpbnRpbmcoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCiB9CiAjZW5kaWYKIAorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
IFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBvd25l
ckltcGwsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7CiAjaWYgVVNF
KFNLSUEpCkBAIC01NTcsMjcgKzI0OCwxNSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dmlld3BvcnRDaGFuZ2VkKCkKICAgICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gMDsKIH0KIAot
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycygpCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiB7Ci0gICAgaWYgKCFyb290TGF5ZXIoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fb3duZXItPnZpZXdwb3J0U2l6ZSgpLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gRklYTUU6IHVzZSB0aGUgZnJhbWUgYmVnaW4g
dGltZSBmcm9tIHRoZSBvdmVyYWxsIGNvbXBvc2l0b3Igc2NoZWR1bGVyLgogICAgIC8vIFRoaXMg
dmFsdWUgaXMgY3VycmVudGx5IGluYWNjZXNzaWJsZSBiZWNhdXNlIGl0IGlzIHVwIGluIENocm9t
aXVtJ3MKICAgICAvLyBSZW5kZXJXaWRnZXQuCiAgICAgbV9oZWFkc1VwRGlzcGxheS0+b25GcmFt
ZUJlZ2luKGN1cnJlbnRUaW1lKCkpOwogCi0gICAgdXBkYXRlTGF5ZXJzKHJvb3RMYXllcigpLT5w
bGF0Zm9ybUxheWVyKCkpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xh
eWVycygpCi17CiAgICAgaWYgKCFyb290TGF5ZXJJbXBsKCkpCiAgICAgICAgIHJldHVybjsKLQog
ICAgIC8vIEZJWE1FOiBObyBuZWVkIHRvIHdhbGsgdGhlIHRyZWUgaGVyZS4gVGhpcyBjb3VsZCBi
ZSBwYXNzZWQgdmlhIGRyYXcuCiAgICAgcm9vdExheWVySW1wbCgpLT5zZXRMYXllclJlbmRlcmVy
UmVjdXJzaXZlKHRoaXMpOwogCkBAIC01OTYsMTI2ICsyNzUsNiBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9E
aXNwbGF5KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMo
TGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQotewotICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRl
cmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyIsIHRoaXMsIDApOwotCi0gICAgaWYgKCFyb290TGF5
ZXItPnJlbmRlclN1cmZhY2UoKSkKLSAgICAgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJm
YWNlKCk7Ci0gICAgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KElu
dFJlY3QoSW50UG9pbnQoMCwgMCksIHZpZXdwb3J0U2l6ZSgpKSk7Ci0KLSAgICBJbnRSZWN0IHJv
b3RTY2lzc29yUmVjdChJbnRQb2ludCgpLCB2aWV3cG9ydFNpemUoKSk7Ci0gICAgcm9vdExheWVy
LT5zZXRTY2lzc29yUmVjdChyb290U2Npc3NvclJlY3QpOwotCi0gICAgTGF5ZXJMaXN0IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9v
dExheWVyKTsKLQotICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcm9vdFJlbmRlclN1cmZhY2Ug
PSByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICByb290UmVuZGVyU3VyZmFjZS0+Y2xl
YXJMYXllckxpc3QoKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OwotCi0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVMYXllcnM6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7Ci0gICAgICAgIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0sIHZvaWQqPihyb290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5
ZXJMaXN0KCksIDAsIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKLSAgICB9Ci0KLSAg
ICBwYWludExheWVyQ29udGVudHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0KLSAgICBtX2Nv
bnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQodGV4dHVyZU1lbW9yeVJl
Y2xhaW1MaW1pdEJ5dGVzKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2
aWN0ZWRUZXh0dXJlcyhtX2NvbnRleHQuZ2V0KCkpOwotICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci19Ci0KLXN0YXRpYyBJbnRSZWN0IGNhbGN1
bGF0ZVZpc2libGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNv
bnN0IEludFNpemUmIGJvdW5kcywgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcywgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRpbGluZ1RyYW5zZm9ybSkKLXsKLSAgICBpZiAodGFyZ2V0
U3VyZmFjZVJlY3QuaXNFbXB0eSgpIHx8IGNvbnRlbnRCb3VuZHMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gdGFyZ2V0U3VyZmFjZVJlY3Q7Ci0KLSAgICBjb25zdCBJbnRSZWN0IGxheWVyQm91
bmRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKTsKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSB0aWxpbmdUcmFuc2Zvcm07Ci0KLSAgICB0cmFuc2Zv
cm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kcy53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihj
b250ZW50Qm91bmRzLndpZHRoKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91
bmRzLmhlaWdodCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzLmhlaWdodCgp
KSk7Ci0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4w
LCAtY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7Ci0KLSAgICByZXR1cm4gY2FsY3VsYXRl
VmlzaWJsZVJlY3QodGFyZ2V0U3VyZmFjZVJlY3QsIGxheWVyQm91bmRSZWN0LCB0cmFuc2Zvcm0p
OwotfQotCi1zdGF0aWMgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiBs
YXllciwgY29uc3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCkKLXsKLSAgICBpZiAobGF5ZXIt
PmRyYXdzQ29udGVudCgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZp
c2libGVMYXllclJlY3QpOwotICAgICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwYWludExheWVyQ29udGVu
dHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQotewotICAgIGZvciAo
aW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3Vy
ZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewotICAgICAgICBMYXllckNocm9taXVt
KiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRl
eF0uZ2V0KCk7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9
IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICBBU1NFUlQocmVu
ZGVyU3VyZmFjZSk7Ci0KLSAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRMYXllclRyZWVI
b3N0KG93bmVyKCkpOwotCi0gICAgICAgIC8vIFJlbmRlciBzdXJmYWNlcyB3aG9zZSBkcmF3YWJs
ZSBhcmVhIGhhcyB6ZXJvIHdpZHRoIG9yIGhlaWdodAotICAgICAgICAvLyB3aWxsIGhhdmUgbm8g
bGF5ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGVtIGFuZCBzaG91bGQgYmUgc2tpcHBlZC4KLSAgICAg
ICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlz
dCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwotICAgICAgICBBU1NFUlQobGF5ZXJMaXN0
LnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5k
ZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIExheWVy
Q2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwotCi0gICAgICAg
ICAgICAvLyBMYXllcnMgdGhhdCBzdGFydCBhIG5ldyByZW5kZXIgc3VyZmFjZSB3aWxsIGJlIHBh
aW50ZWQgd2hlbiB0aGUgcmVuZGVyCi0gICAgICAgICAgICAvLyBzdXJmYWNlJ3MgbGlzdCBpcyBw
cm9jZXNzZWQuCi0gICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXll
ci0+cmVuZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIGxheWVyLT5zZXRMYXllclRyZWVIb3N0KG93bmVyKCkpOwot
Ci0gICAgICAgICAgICBpZiAoIWxheWVyLT5vcGFjaXR5KCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpCi0gICAgICAgICAg
ICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KG93bmVyKCkpOwotICAg
ICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewotICAgICAgICAgICAgICAgIGxh
eWVyLT5yZXBsaWNhTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdChvd25lcigpKTsKLSAgICAgICAg
ICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAg
ICAgICAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJU
cmVlSG9zdChvd25lcigpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxheWVy
LT5ib3VuZHMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgICAgIEludFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBsYXllci0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpID8gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSA6IG1f
ZGVmYXVsdFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBpZiAobGF5
ZXItPnVzZXNMYXllclNjaXNzb3IoKSkKLSAgICAgICAgICAgICAgICB0YXJnZXRTdXJmYWNlUmVj
dC5pbnRlcnNlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOwotICAgICAgICAgICAgSW50UmVjdCB2
aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNl
UmVjdCwgbGF5ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+ZHJh
d1RyYW5zZm9ybSgpKTsKLQotICAgICAgICAgICAgdmlzaWJsZUxheWVyUmVjdC5tb3ZlKHRvU2l6
ZShsYXllci0+c2Nyb2xsUG9zaXRpb24oKSkpOwotICAgICAgICAgICAgcGFpbnRDb250ZW50c0lm
RGlydHkobGF5ZXIsIHZpc2libGVMYXllclJlY3QpOwotCi0gICAgICAgICAgICBpZiAoTGF5ZXJD
aHJvbWl1bSogbWFza0xheWVyID0gbGF5ZXItPm1hc2tMYXllcigpKSB7Ci0gICAgICAgICAgICAg
ICAgcGFpbnRDb250ZW50c0lmRGlydHkobWFza0xheWVyLCBJbnRSZWN0KEludFBvaW50KCksIG1h
c2tMYXllci0+Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSBsYXllci0+cmVwbGljYUxheWVyKCkp
IHsKLSAgICAgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHZp
c2libGVMYXllclJlY3QpOwotCi0gICAgICAgICAgICAgICAgaWYgKExheWVyQ2hyb21pdW0qIHJl
cGxpY2FNYXNrTGF5ZXIgPSByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FNYXNrTGF5ZXIsIEludFJlY3Qo
SW50UG9pbnQoKSwgcmVwbGljYU1hc2tMYXllci0+Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIHsKICAgICBpZiAodmll
d3BvcnRTaXplKCkuaXNFbXB0eSgpIHx8ICFyb290TGF5ZXIoKSkKQEAgLTc0MCw3ICsyOTksNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIAogICAg
IHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
c0ludGVybmFsOjpjYWxjRHJhd0V0YyIsIHRoaXMsIDApOwotICAgICAgICBjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHk8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgQ0NM
YXllclNvcnRlcj4ocm9vdERyYXdMYXllciwgcm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJT
dXJmYWNlLT5sYXllckxpc3QoKSwgJm1fbGF5ZXJTb3J0ZXIsIG1fY2FwYWJpbGl0aWVzLm1heFRl
eHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHk8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgQ0NM
YXllclNvcnRlcj4ocm9vdERyYXdMYXllciwgcm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJT
dXJmYWNlLT5sYXllckxpc3QoKSwgJm1fbGF5ZXJTb3J0ZXIsIG1fY2FwYWJpbGl0aWVzLm1heFRl
eHR1cmVTaXplKTsKICAgICB9CiAKICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBl
bnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCkBAIC04ODMsNDUg
KzQ0Miw2IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0xheWVyVmlzaWJsZShMYXll
ckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtCiAgICAgcmV0dXJuIG1hcHBlZFJlY3Qu
aW50ZXJzZWN0cyhGbG9hdFJlY3QoLTEsIC0xLCAyLCAyKSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnN0IExheWVyTGlzdCYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKLXsKLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1z
dXJmYWNlSW5kZXgpIHsKLSAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVy
ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAgICBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXIt
PnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwotCi0gICAg
ICAgIGlmICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpIHx8ICFyZW5kZXJTdXJm
YWNlLT5kcmF3T3BhY2l0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY29u
c3QgTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKLSAg
ICAgICAgQVNTRVJUKGxheWVyTGlzdC5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxh
eWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4
KSB7Ci0gICAgICAgICAgICBMYXllckNocm9taXVtKiBsYXllciA9IGxheWVyTGlzdFtsYXllcklu
ZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhsYXllcik7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21pdW0qIGxheWVyKQotewotICAgIGlmIChs
YXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWxh
eWVyLT5vcGFjaXR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsYXllci0+bWFza0xh
eWVyKCkpCi0gICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXItPm1hc2tMYXll
cigpKTsKLSAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQotICAgICAgICB1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSk7Ci0KLSAgICBpZiAobGF5ZXIt
PmRyYXdzQ29udGVudCgpKQotICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNl
cyhjb250ZXh0KCkpOwotfQotCiBNYW5hZ2VkVGV4dHVyZSogTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKQogewogICAgIHJldHVybiBzZXR0aW5ncygpLmNv
bXBvc2l0ZU9mZnNjcmVlbiAmJiByb290TGF5ZXJJbXBsKCkgPyByb290TGF5ZXJJbXBsKCktPnJl
bmRlclN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJlKCkgOiAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uaAppbmRleCA2NzMyMTFkNzNjZjY0MzM5MzRiMDkyYTNmODExZjBhN2YyODNm
YTVmLi5mMDUyZWQ2OWI5OGY4MGM1M2U2N2I1NGZiM2Q3YWY1YTY4NzIxNGZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTAxLDggKzEwMSw2IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgdmlld3BvcnRDaGFuZ2VkKCk7CiAKLSAgICAvLyB1cGRhdGVzIGFuZCBkcmF3cyB0
aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgotICAgIHZvaWQgdXBkYXRlTGF5
ZXJzKCk7CiAgICAgdm9pZCBkcmF3TGF5ZXJzKCk7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVy
aW5nIHRvIGZpbmlzaApAQCAtMTUwLDIwICsxNDgsMTUgQEAgcHVibGljOgogCiAgICAgR0MzRGVu
dW0gYmVzdFRleHR1cmVGb3JtYXQoKTsKIAotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+IExheWVyTGlzdDsKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXll
ckltcGw+ID4gQ0NMYXllckxpc3Q7CiAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiB0
aGUgY29udGVudHMgdGV4dHVyZSBtYW5hZ2VyIGhhcyBtb3ZlZCB0byBDQ0xheWVyVHJlZUhvc3Qu
CisgICAgc3RhdGljIHNpemVfdCB0ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0KCk7CisKIHByaXZh
dGU6CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJU
cmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAgICAgYm9vbCBp
bml0aWFsaXplKCk7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7Ci0g
ICAgdm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cygpOwotCi0gICAgdm9pZCBwYWludExheWVy
Q29udGVudHMoY29uc3QgTGF5ZXJMaXN0Jik7Ci0gICAgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgdm9p
ZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21pdW0qKTsKLQogICAgIHZvaWQg
ZHJhd0xheWVyc0ludGVybmFsKCk7CiAgICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBD
Q1JlbmRlclN1cmZhY2UqKTsKIApAQCAtMTk3LDggKzE5MCw2IEBAIHByaXZhdGU6CiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1fd2luZG93TWF0cml4OwogCi0gICAgT3duUHRyPExheWVyTGlzdD4gbV9jb21wdXRl
ZFJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0KICAgICBDQ1JlbmRlclN1cmZhY2UqIG1fY3VycmVu
dFJlbmRlclN1cmZhY2U7CiAgICAgdW5zaWduZWQgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggOTgzZDRiZTAxNjRkZGQ2OTZiNDJjN2ZkNDk4
YmZjZTcxMTQ0ZTdmNy4uMzAwZjQ3MTMzZWM4YzA0MjI2YTM0ZWUxZDA1MzMxMjQzNjZlYjJjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIHsKQEAgLTIyMCw2
ICsyMjEsMTIgQEAgdm9pZCBDQ0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3Ry
ZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKICAgICB0cyA8PCBtX2RyYXdUcmFuc2Zvcm0ubTQx
KCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTQyKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFu
c2Zvcm0ubTQzKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTQ0KCkgPDwgIlxuIjsKIH0K
IAordm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9y
IGZpcnN0LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBlbmQsIENDTGF5
ZXJTb3J0ZXIqIGxheWVyU29ydGVyKQoreworICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVy
Q2hyb21pdW06OnNvcnRMYXllcnMiLCAwLCAwKTsKKyAgICBsYXllclNvcnRlci0+c29ydChmaXJz
dCwgZW5kKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMWNlZTRkMzJhODBhYzdmM2Y4ODU5YjBkZmZlZWY5
ZDRjNGU0Zjc0Yy4uYzdkYzQ2OTU0N2Y1YzE1ZTdhMzc3ZWY5NTdmZTRmMzg5NzVmZGMwMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0zOSw2ICszOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgQ0NMYXllclNvcnRlcjsKIGNsYXNzIExheWVyQ2hyb21pdW07CiBjbGFzcyBM
YXllclJlbmRlcmVyQ2hyb21pdW07CiAKQEAgLTI0Nyw2ICsyNDgsOCBAQCBwcml2YXRlOgogICAg
IFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKIH07CiAKK3Zv
aWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBmaXJz
dCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0b3IgZW5kLCBDQ0xheWVyU29y
dGVyKik7CisKIH0KIAogI2VuZGlmIC8vIENDTGF5ZXJJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwCmluZGV4IDI5ZWUzODRkYjIyNTE1ZjBmMmVjN2I1YTRmYmQ1ZThkOGE2NWJk
NWIuLjUxOGJiMzliMjU3MzQyZjBkMmU0MGQ2Nzg5NGFiZjU3ZTQ0YjI4YzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk5vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdC5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRl
ICJUcmVlU3luY2hyb25pemVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0ND
U2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgpAQCAtMTAxLDE4
ICsxMDIsMjEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKQogICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7CiB9CiAKLXZvaWQgQ0NM
YXllclRyZWVIb3N0OjpwcmVDb21taXQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCi17
Ci0gICAgaG9zdEltcGwtPnNldFZpc2libGUobV92aXNpYmxlKTsKLSAgICBob3N0SW1wbC0+c2V0
Vmlld3BvcnQodmlld3BvcnRTaXplKCkpOwotfQotCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29t
bWl0VG8oQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiB7CiAgICAgQVNTRVJUKENDUHJv
eHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpj
b21taXRUbyIsIHRoaXMsIDApOwogICAgIGhvc3RJbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJlcihm
cmFtZU51bWJlcigpKTsKIAorICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVt
b3J5VG9MaW1pdChob3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT50ZXh0dXJlTWVtb3J5UmVjbGFp
bUxpbWl0KCkpOworICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRl
eHR1cmVzKGhvc3RJbXBsLT5jb250ZXh0KCkpOworCisgICAgdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyhtX3VwZGF0ZUxpc3QsIGhvc3RJbXBsLT5jb250ZXh0KCkpOworICAgIG1fdXBkYXRlTGlz
dC5jbGVhcigpOworCisgICAgaG9zdEltcGwtPnNldFZpc2libGUobV92aXNpYmxlKTsKKyAgICBo
b3N0SW1wbC0+c2V0Vmlld3BvcnQodmlld3BvcnRTaXplKCkpOworCiAgICAgLy8gU3luY2hyb25p
emUgdHJlZXMsIGlmIG9uZSBleGlzdHMgYXQgYWxsLi4uCiAgICAgaWYgKHJvb3RMYXllcigpKQog
ICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9u
aXplVHJlZXMocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXll
cigpKSk7CkBAIC0yNDQsNCArMjQ4LDE1NyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9z
aXRlKCkKIH0KICNlbmRpZiAvLyAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogCit2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKCkKK3sKKyAgICBpZiAoIXJvb3RMYXllcigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAodmlld3BvcnRTaXplKCkuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICB1cGRhdGVMYXllcnMocm9vdExheWVyKCktPnBsYXRmb3JtTGF5
ZXIoKSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJv
bWl1bSogcm9vdExheWVyKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnVw
ZGF0ZUxheWVycyIsIHRoaXMsIDApOworCisgICAgaWYgKCFyb290TGF5ZXItPnJlbmRlclN1cmZh
Y2UoKSkKKyAgICAgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9v
dExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQo
MCwgMCksIHZpZXdwb3J0U2l6ZSgpKSk7CisKKyAgICBJbnRSZWN0IHJvb3RTY2lzc29yUmVjdChJ
bnRQb2ludCgpLCB2aWV3cG9ydFNpemUoKSk7CisgICAgcm9vdExheWVyLT5zZXRTY2lzc29yUmVj
dChyb290U2Npc3NvclJlY3QpOworCisgICAgLy8gVGhpcyBhc3NlcnQgZmlyZXMgaWYgdXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyB3YXNuJ3QgY2FsbGVkIGFmdGVyCisgICAgLy8gdXBkYXRlTGF5
ZXJzLiBPbmx5IG9uZSB1cGRhdGUgY2FuIGJlIHBlbmRpbmcgYXQgYW55IGdpdmVuIHRpbWUuCisg
ICAgQVNTRVJUKCFtX3VwZGF0ZUxpc3Quc2l6ZSgpKTsKKyAgICBtX3VwZGF0ZUxpc3QuYXBwZW5k
KHJvb3RMYXllcik7CisKKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJvb3RSZW5kZXJTdXJm
YWNlID0gcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdFJlbmRlclN1cmZhY2Ut
PmNsZWFyTGF5ZXJMaXN0KCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1h
dHJpeDsKKworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6dXBk
YXRlTGF5ZXJzOjpjYWxjRHJhd0V0YyIsIHRoaXMsIDApOworICAgICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxMYXllckNocm9t
aXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQqPihyb290TGF5ZXIsIHJvb3RMYXllciwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBtX3VwZGF0ZUxpc3QsIHJvb3RSZW5kZXJT
dXJmYWNlLT5sYXllckxpc3QoKSwgMCwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRl
eHR1cmVTaXplKTsKKyAgICB9CisKKyAgICBwYWludExheWVyQ29udGVudHMobV91cGRhdGVMaXN0
KTsKK30KKworc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSog
bGF5ZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpCit7CisgICAgaWYgKGxheWVy
LT5kcmF3c0NvbnRlbnQoKSkgeworICAgICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2
aXNpYmxlTGF5ZXJSZWN0KTsKKyAgICAgICAgbGF5ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KCk7
CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNv
bnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICBmb3IgKGludCBz
dXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJ
bmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVu
ZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdl
dCgpOworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5k
ZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlclN1
cmZhY2UpOworCisgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0
aGlzKTsKKworICAgICAgICAvLyBSZW5kZXIgc3VyZmFjZXMgd2hvc2UgZHJhd2FibGUgYXJlYSBo
YXMgemVybyB3aWR0aCBvciBoZWlnaHQKKyAgICAgICAgLy8gd2lsbCBoYXZlIG5vIGxheWVycyBh
c3NvY2lhdGVkIHdpdGggdGhlbSBhbmQgc2hvdWxkIGJlIHNraXBwZWQuCisgICAgICAgIGlmICgh
cmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5k
ZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKKyAgICAgICAgQVNTRVJUKGxheWVyTGlzdC5zaXplKCkp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5
ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAgICAgICBMYXllckNocm9taXVt
KiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKKworICAgICAgICAgICAgLy8g
TGF5ZXJzIHRoYXQgc3RhcnQgYSBuZXcgcmVuZGVyIHN1cmZhY2Ugd2lsbCBiZSBwYWludGVkIHdo
ZW4gdGhlIHJlbmRlcgorICAgICAgICAgICAgLy8gc3VyZmFjZSdzIGxpc3QgaXMgcHJvY2Vzc2Vk
LgorICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRl
clN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBsYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKKworICAgICAgICAg
ICAgaWYgKCFsYXllci0+b3BhY2l0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICAgICAgICAgIGxheWVy
LT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKKyAgICAgICAgICAgIGlmIChs
YXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBsYXllci0+cmVwbGljYUxh
eWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGxheWVy
LT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCisgICAgICAgICAgICAgICAgICAgIGxheWVy
LT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBJbnRSZWN0IGRlZmF1
bHRDb250ZW50UmVjdCA9IEludFJlY3Qocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKS0+c2Ny
b2xsUG9zaXRpb24oKSwgdmlld3BvcnRTaXplKCkpOworCisgICAgICAgICAgICBJbnRSZWN0IHRh
cmdldFN1cmZhY2VSZWN0ID0gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkgOiBkZWZhdWx0Q29udGVudFJlY3Q7
CisgICAgICAgICAgICBpZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3IoKSkKKyAgICAgICAgICAg
ICAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOwor
ICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KHRhcmdldFN1cmZhY2VSZWN0LCBsYXllci0+
Ym91bmRzKCksIGxheWVyLT5jb250ZW50Qm91bmRzKCksIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkp
OworCisgICAgICAgICAgICB2aXNpYmxlTGF5ZXJSZWN0Lm1vdmUodG9TaXplKGxheWVyLT5zY3Jv
bGxQb3NpdGlvbigpKSk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShsYXllciwg
dmlzaWJsZUxheWVyUmVjdCk7CisKKyAgICAgICAgICAgIGlmIChMYXllckNocm9taXVtKiBtYXNr
TGF5ZXIgPSBsYXllci0+bWFza0xheWVyKCkpCisgICAgICAgICAgICAgICAgcGFpbnRDb250ZW50
c0lmRGlydHkobWFza0xheWVyLCBJbnRSZWN0KEludFBvaW50KCksIG1hc2tMYXllci0+Y29udGVu
dEJvdW5kcygpKSk7CisKKyAgICAgICAgICAgIGlmIChMYXllckNocm9taXVtKiByZXBsaWNhTGF5
ZXIgPSBsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBwYWludENvbnRl
bnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHZpc2libGVMYXllclJlY3QpOworCisgICAgICAgICAg
ICAgICAgaWYgKExheWVyQ2hyb21pdW0qIHJlcGxpY2FNYXNrTGF5ZXIgPSByZXBsaWNhTGF5ZXIt
Pm1hc2tMYXllcigpKQorICAgICAgICAgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShy
ZXBsaWNhTWFza0xheWVyLCBJbnRSZWN0KEludFBvaW50KCksIHJlcGxpY2FNYXNrTGF5ZXItPmNv
bnRlbnRCb3VuZHMoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb25zdCBMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQoreworICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
c2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgeworICAgICAg
ICBMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSog
cmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAg
ICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CisKKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNl
LT5sYXllckxpc3QoKS5zaXplKCkgfHwgIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlz
dCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOworICAgICAgICBBU1NFUlQobGF5ZXJMaXN0
LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5k
ZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKKyAgICAgICAgICAgIExheWVy
Q2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOworICAgICAgICAg
ICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAh
PSByZW5kZXJTdXJmYWNlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGxheWVyLCBjb250ZXh0KTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorewor
ICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIWxheWVyLT5vcGFjaXR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsYXll
ci0+bWFza0xheWVyKCkpCisgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXIt
Pm1hc2tMYXllcigpLCBjb250ZXh0KTsKKyAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQor
ICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSwg
Y29udGV4dCk7CisKKyAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQorICAgICAgICBsYXll
ci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0KTsKK30KKwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaAppbmRleCBjNTIwNDcwNjlkOTNkMGJjZTUzNDU3OWNkMDQ5ZjVhNjI4
MGMzMGFmLi41NmFjZDZjYmIxMWU2YTA3N2M3YzRhNGE0YjhiMWM4ZDg4NDhhNzQ2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtOTksNyArOTksNiBAQCBwdWJsaWM6CiAKICAgICAv
LyBDQ0xheWVyVHJlZUhvc3QgaW50ZXJmYWNlIHRvIENDUHJveHkuCiAgICAgdm9pZCBhbmltYXRl
QW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0gICAgdm9pZCBwcmVDb21taXQoQ0NM
YXllclRyZWVIb3N0SW1wbCopOyAvLyBUZW1wb3JhcnkgaGFjayB1bnRpbCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjp1cGRhdGVMYXllcnMgaXMgc3BsaXQgYXBhcnQuCiAgICAgdm9pZCBjb21taXRUbyhD
Q0xheWVyVHJlZUhvc3RJbXBsKik7CiAgICAgUGFzc093blB0cjxDQ1RocmVhZD4gY3JlYXRlQ29t
cG9zaXRvclRocmVhZCgpOwogICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0
ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKQEAgLTE1NSwxMCArMTU0LDE5IEBAIHB1YmxpYzoK
IAogICAgIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCogbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0
KCkgY29uc3QgeyByZXR1cm4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QuZ2V0KCk7IH0KIAor
ICAgIHZvaWQgdXBkYXRlTGF5ZXJzKCk7CisKIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhv
c3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogCiBwcml2YXRl
OgorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IExheWVyTGlzdDsK
KworICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYpOworICAgIHZv
aWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoY29uc3QgTGF5ZXJMaXN0JiwgR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICB2
b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSosIEdyYXBoaWNzQ29u
dGV4dDNEKik7CisKICAgICBib29sIGluaXRpYWxpemUoKTsKIAogICAgIFBhc3NSZWZQdHI8TGF5
ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGVMYXllclJlbmRlcmVyKCk7CkBAIC0xNzQsNiArMTgy
LDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CiAg
ICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdD4gbV9ub25Db21wb3NpdGVkQ29udGVu
dEhvc3Q7CiAKKyAgICBMYXllckxpc3QgbV91cGRhdGVMaXN0OworCiAgICAgQ0NTZXR0aW5ncyBt
X3NldHRpbmdzOwogCiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwZWQyNWY1MDFiMzYxMmFl
MmU1MzcxMzUwODJiYTM4OTdhZTViYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
CkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworYm9vbCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmlzU2NhbGVPclRyYW5zbGF0aW9u
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQoreworICAgIHJldHVybiAhbS5tMTIoKSAm
JiAhbS5tMTMoKSAmJiAhbS5tMTQoKQorICAgICAgICAgICAmJiAhbS5tMjEoKSAmJiAhbS5tMjMo
KSAmJiAhbS5tMjQoKQorICAgICAgICAgICAmJiAhbS5tMzEoKSAmJiAhbS5tMzIoKSAmJiAhbS5t
NDMoKQorICAgICAgICAgICAmJiBtLm00NCgpOworCit9CisKK0ludFJlY3QgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJm
YWNlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgLy8gSXMgdGhpcyBsYXllciBmdWxseSBjb250
YWluZWQgd2l0aGluIHRoZSB0YXJnZXQgc3VyZmFjZT8KKyAgICBJbnRSZWN0IGxheWVySW5TdXJm
YWNlU3BhY2UgPSB0cmFuc2Zvcm0ubWFwUmVjdChsYXllckJvdW5kUmVjdCk7CisgICAgaWYgKHRh
cmdldFN1cmZhY2VSZWN0LmNvbnRhaW5zKGxheWVySW5TdXJmYWNlU3BhY2UpKQorICAgICAgICBy
ZXR1cm4gbGF5ZXJCb3VuZFJlY3Q7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgZG9lc24ndCBmaWxs
IHVwIHRoZSBlbnRpcmUgc3VyZmFjZSwgdGhlbiBmaW5kIHRoZSBwYXJ0IG9mCisgICAgLy8gdGhl
IHN1cmZhY2UgcmVjdCB3aGVyZSB0aGUgbGF5ZXIgY291bGQgYmUgdmlzaWJsZS4gVGhpcyBhdm9p
ZHMgdHJ5aW5nIHRvCisgICAgLy8gcHJvamVjdCBzdXJmYWNlIHJlY3QgcG9pbnRzIHRoYXQgYXJl
IGJlaGluZCB0aGUgcHJvamVjdGlvbiBwb2ludC4KKyAgICBJbnRSZWN0IG1pbmltYWxTdXJmYWNl
UmVjdCA9IHRhcmdldFN1cmZhY2VSZWN0OworICAgIG1pbmltYWxTdXJmYWNlUmVjdC5pbnRlcnNl
Y3QobGF5ZXJJblN1cmZhY2VTcGFjZSk7CisKKyAgICAvLyBQcm9qZWN0IHRoZSBjb3JuZXJzIG9m
IHRoZSB0YXJnZXQgc3VyZmFjZSByZWN0IGludG8gdGhlIGxheWVyIHNwYWNlLgorICAgIC8vIFRo
aXMgYm91bmRpbmcgcmVjdGFuZ2xlIG1heSBiZSBsYXJnZXIgdGhhbiBpdCBuZWVkcyB0byBiZSAo
YmVpbmcKKyAgICAvLyBheGlzLWFsaWduZWQpLCBidXQgaXMgYSByZWFzb25hYmxlIGZpbHRlciBv
biB0aGUgc3BhY2UgdG8gY29uc2lkZXIuCisgICAgLy8gTm9uLWludmVydGlibGUgdHJhbnNmb3Jt
cyB3aWxsIGNyZWF0ZSBhbiBlbXB0eSByZWN0IGhlcmUuCisgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXggc3VyZmFjZVRvTGF5ZXIgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOworICAgIEludFJl
Y3QgbGF5ZXJSZWN0ID0gc3VyZmFjZVRvTGF5ZXIucHJvamVjdFF1YWQoRmxvYXRRdWFkKEZsb2F0
UmVjdChtaW5pbWFsU3VyZmFjZVJlY3QpKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICBs
YXllclJlY3QuaW50ZXJzZWN0KGxheWVyQm91bmRSZWN0KTsKKyAgICByZXR1cm4gbGF5ZXJSZWN0
OworfQorCitJbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxh
eWVyUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50U2l6ZSYg
Ym91bmRzLCBjb25zdCBJbnRTaXplJiBjb250ZW50Qm91bmRzLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdGlsaW5nVHJhbnNmb3JtKQoreworICAgIGlmICh0YXJnZXRTdXJmYWNlUmVjdC5p
c0VtcHR5KCkgfHwgY29udGVudEJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0YXJn
ZXRTdXJmYWNlUmVjdDsKKworICAgIGNvbnN0IEludFJlY3QgbGF5ZXJCb3VuZFJlY3QgPSBJbnRS
ZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zZm9ybSA9IHRpbGluZ1RyYW5zZm9ybTsKKworICAgIHRyYW5zZm9ybS5zY2FsZU5vblVu
aWZvcm0oYm91bmRzLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMu
d2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMuaGVpZ2h0KCkg
LyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkpKTsKKyAgICB0cmFu
c2Zvcm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250ZW50Qm91
bmRzLmhlaWdodCgpIC8gMi4wKTsKKworICAgIHJldHVybiBjYWxjdWxhdGVWaXNpYmxlUmVjdCh0
YXJnZXRTdXJmYWNlUmVjdCwgbGF5ZXJCb3VuZFJlY3QsIHRyYW5zZm9ybSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTA5MjE5NTNmOWEzNjJjNjM4ZTZiMTFlYjg2MTFiZDlmODVjY2JkYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdENvbW1vbl9oCisjZGVmaW5lIENDTGF5ZXJUcmVl
SG9zdENvbW1vbl9oCisKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21tb24geworcHVibGljOgorICAgIHN0YXRp
YyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0
U3VyZmFjZVJlY3QsIGNvbnN0IEludFNpemUmIGJvdW5kcywgY29uc3QgSW50U2l6ZSYgY29udGVu
dEJvdW5kcywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRpbGluZ1RyYW5zZm9ybSk7Cisg
ICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRlVmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdGFy
Z2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFJlY3QmIGxheWVyQm91bmRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9u
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKKyAgICAvLyBSZWN1cnNpdmVseSB3YWxr
cyB0aGUgbGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMg
YWxsIHRoZQorICAgIC8vIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFu
Z2xlcywgcmVuZGVyIHN1cmZhY2VzLCBldGMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJU
eXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+Cisg
ICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVy
VHlwZSogbGF5ZXIsIExheWVyVHlwZSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJh
cmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+JiBsYXllckxpc3QsIExheWVyU29ydGVy
KiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXplKQorICAgIHsKKyAgICAgICAgdHlwZWRl
ZiBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiBMYXllckxpc3Q7CisgICAgICAgIC8vIENvbXB1
dGUgdGhlIG5ldyBtYXRyaXggdHJhbnNmb3JtYXRpb24gdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8g
dGhpcyBsYXllciBhbmQKKyAgICAgICAgLy8gYWxsIGl0cyBjaGlsZHJlbi4gSXQncyBpbXBvcnRh
bnQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgbGF5ZXIncyBwb3NpdGlvbgorICAgICAgICAvLyBpcyB0
aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyJ3MgYW5jaG9yIHBvaW50LiBBbHNvLCB0aGUgY29vcmRp
bmF0ZSBzeXN0ZW0gdXNlZAorICAgICAgICAvLyBhc3N1bWVzIHRoYXQgdGhlIG9yaWdpbiBpcyBh
dCB0aGUgbG93ZXIgbGVmdCBldmVuIHRob3VnaCB0aGUgY29vcmRpbmF0ZXMgdGhlIGJyb3dzZXIK
KyAgICAgICAgLy8gZ2l2ZXMgdXMgZm9yIHRoZSBsYXllcnMgYXJlIGZvciB0aGUgdXBwZXIgbGVm
dCBjb3JuZXIuIFRoZSBZIGZsaXAgaGFwcGVucyB2aWEKKyAgICAgICAgLy8gdGhlIG9ydGhvZ3Jh
cGhpYyBwcm9qZWN0aW9uIGFwcGxpZWQgYXQgcmVuZGVyIHRpbWUuCisgICAgICAgIC8vIFRoZSB0
cmFuc2Zvcm1hdGlvbiBjaGFpbiBmb3IgdGhlIGxheWVyIGlzICh1c2luZyB0aGUgTWF0cml4IHgg
VmVjdG9yIG9yZGVyKToKKyAgICAgICAgLy8gTSA9IE1bcF0gKiBUcltsXSAqIE1bbF0gKiBUcltj
XQorICAgICAgICAvLyBXaGVyZSBNW3BdIGlzIHRoZSBwYXJlbnQgbWF0cml4IHBhc3NlZCBkb3du
IHRvIHRoZSBmdW5jdGlvbgorICAgICAgICAvLyAgICAgICBUcltsXSBpcyB0aGUgdHJhbnNsYXRp
b24gbWF0cml4IGxvY2F0aW5nIHRoZSBsYXllcidzIGFuY2hvciBwb2ludAorICAgICAgICAvLyAg
ICAgICBUcltjXSBpcyB0aGUgdHJhbnNsYXRpb24gb2Zmc2V0IGJldHdlZW4gdGhlIGFuY2hvciBw
b2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIKKyAgICAgICAgLy8gICAgICAgTVtsXSBp
cyB0aGUgbGF5ZXIncyBtYXRyaXggKGFwcGxpZWQgYXQgdGhlIGFuY2hvciBwb2ludCkKKyAgICAg
ICAgLy8gVGhpcyB0cmFuc2Zvcm0gY3JlYXRlcyBhIGNvb3JkaW5hdGUgc3lzdGVtIHdob3NlIG9y
aWdpbiBpcyB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRo
ZSBmaW5hbCBtYXRyaXggdXNlZCBieSB0aGUgc2hhZGVyIGZvciB0aGUgbGF5ZXIgaXMgUCAqIE0g
KiBTIC4gVGhpcyBmaW5hbCBwcm9kdWN0CisgICAgICAgIC8vIGlzIGNvbXB1dGVkIGluIGRyYXdU
ZXh0dXJlZFF1YWQoKS4KKyAgICAgICAgLy8gV2hlcmU6IFAgaXMgdGhlIHByb2plY3Rpb24gbWF0
cml4CisgICAgICAgIC8vICAgICAgICBNIGlzIHRoZSBsYXllcidzIG1hdHJpeCBjb21wdXRlZCBh
Ym92ZQorICAgICAgICAvLyAgICAgICAgUyBpcyB0aGUgc2NhbGUgYWRqdXN0bWVudCAodG8gc2Nh
bGUgdXAgdG8gdGhlIGxheWVyIHNpemUpCisgICAgICAgIEludFNpemUgYm91bmRzID0gbGF5ZXIt
PmJvdW5kcygpOworICAgICAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50ID0gbGF5ZXItPmFuY2hv
clBvaW50KCk7CisgICAgICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBsYXllci0+cG9zaXRpb24o
KTsKKworICAgICAgICAvLyBPZmZzZXQgYmV0d2VlbiBhbmNob3IgcG9pbnQgYW5kIHRoZSBjZW50
ZXIgb2YgdGhlIHF1YWQuCisgICAgICAgIGZsb2F0IGNlbnRlck9mZnNldFggPSAoMC41IC0gYW5j
aG9yUG9pbnQueCgpKSAqIGJvdW5kcy53aWR0aCgpOworICAgICAgICBmbG9hdCBjZW50ZXJPZmZz
ZXRZID0gKDAuNSAtIGFuY2hvclBvaW50LnkoKSkgKiBib3VuZHMuaGVpZ2h0KCk7CisKKyAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJMb2NhbFRyYW5zZm9ybTsKKyAgICAgICAgLy8g
TFQgPSBUcltsXQorICAgICAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHBvc2l0
aW9uLngoKSwgcG9zaXRpb24ueSgpLCBsYXllci0+YW5jaG9yUG9pbnRaKCkpOworICAgICAgICAv
LyBMVCA9IFRyW2xdICogTVtsXQorICAgICAgICBsYXllckxvY2FsVHJhbnNmb3JtLm11bHRpcGx5
KGxheWVyLT50cmFuc2Zvcm0oKSk7CisgICAgICAgIC8vIExUID0gVHJbbF0gKiBNW2xdICogVHJb
Y10KKyAgICAgICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChjZW50ZXJPZmZzZXRY
LCBjZW50ZXJPZmZzZXRZLCAtbGF5ZXItPmFuY2hvclBvaW50WigpKTsKKworICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJpeDsKKyAgICAg
ICAgY29tYmluZWRUcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybS5tdWx0aXBseShsYXllckxv
Y2FsVHJhbnNmb3JtKTsKKworICAgICAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0KC0wLjUgKiBsYXll
ci0+Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSwgbGF5
ZXItPmJvdW5kcygpLndpZHRoKCksIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgICAg
IEludFJlY3QgdHJhbnNmb3JtZWRMYXllclJlY3Q7CisKKyAgICAgICAgLy8gZnVsbEhpZXJhcmNo
eU1hdHJpeCBpcyB0aGUgbWF0cml4IHRoYXQgdHJhbnNmb3JtcyBvYmplY3RzIGJldHdlZW4gc2Ny
ZWVuIHNwYWNlIChleGNlcHQgcHJvamVjdGlvbiBtYXRyaXgpIGFuZCB0aGUgbW9zdCByZWNlbnQg
UmVuZGVyU3VyZmFjZSdzIHNwYWNlLgorICAgICAgICAvLyBuZXh0SGllcmFyY2h5TWF0cml4IHdp
bGwgb25seSBjaGFuZ2UgaWYgdGhpcyBsYXllciB1c2VzIGEgbmV3IFJlbmRlclN1cmZhY2UsIG90
aGVyd2lzZSByZW1haW5zIHRoZSBzYW1lLgorICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBu
ZXh0SGllcmFyY2h5TWF0cml4ID0gZnVsbEhpZXJhcmNoeU1hdHJpeDsKKworICAgICAgICAvLyBG
SVhNRTogVGhpcyBzZWVtcyBsaWtlIHRoZSB3cm9uZyBwbGFjZSB0byBzZXQgdGhpcworICAgICAg
ICBsYXllci0+c2V0VXNlc0xheWVyU2Npc3NvcihmYWxzZSk7CisKKyAgICAgICAgLy8gVGhlIGxh
eWVyIGFuZCBpdHMgZGVzY2VuZGFudHMgcmVuZGVyIG9uIGEgbmV3IFJlbmRlclN1cmZhY2UgaWYg
YW55IG9mCisgICAgICAgIC8vIHRoZXNlIGNvbmRpdGlvbnMgaG9sZDoKKyAgICAgICAgLy8gMS4g
VGhlIGxheWVyIGNsaXBzIGl0cyBkZXNjZW5kYW50cyBhbmQgaXRzIHRyYW5zZm9ybSBpcyBub3Qg
YSBzaW1wbGUgdHJhbnNsYXRpb24uCisgICAgICAgIC8vIDIuIElmIHRoZSBsYXllciBoYXMgb3Bh
Y2l0eSAhPSAxIGFuZCBkb2VzIG5vdCBoYXZlIGEgcHJlc2VydmVzLTNkIHRyYW5zZm9ybSBzdHls
ZS4KKyAgICAgICAgLy8gMy4gVGhlIGxheWVyIHVzZXMgYSBtYXNrCisgICAgICAgIC8vIDQuIFRo
ZSBsYXllciBoYXMgYSByZXBsaWNhICh1c2VkIGZvciByZWZsZWN0aW9ucykKKyAgICAgICAgLy8g
NS4gVGhlIGxheWVyIGRvZXNuJ3QgcHJlc2VydmUtM2QgYnV0IGlzIHRoZSBjaGlsZCBvZiBhIGxh
eWVyIHdoaWNoIGRvZXMuCisgICAgICAgIC8vIElmIGEgbGF5ZXIgcHJlc2VydmVzLTNkIHRoZW4g
d2UgZG9uJ3QgY3JlYXRlIGEgUmVuZGVyU3VyZmFjZSBmb3IgaXQgdG8gYXZvaWQgZmxhdHRlbmlu
ZworICAgICAgICAvLyBvdXQgaXRzIGNoaWxkcmVuLiBUaGUgb3BhY2l0eSB2YWx1ZSBvZiB0aGUg
Y2hpbGRyZW4gbGF5ZXJzIGlzIG11bHRpcGxpZWQgYnkgdGhlIG9wYWNpdHkKKyAgICAgICAgLy8g
b2YgdGhlaXIgcGFyZW50LgorICAgICAgICBib29sIHVzZVN1cmZhY2VGb3JDbGlwcGluZyA9IGxh
eWVyLT5tYXNrc1RvQm91bmRzKCkgJiYgIWlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbWJpbmVkVHJh
bnNmb3JtKTsKKyAgICAgICAgYm9vbCB1c2VTdXJmYWNlRm9yT3BhY2l0eSA9IGxheWVyLT5vcGFj
aXR5KCkgIT0gMSAmJiAhbGF5ZXItPnByZXNlcnZlczNEKCk7CisgICAgICAgIGJvb2wgdXNlU3Vy
ZmFjZUZvck1hc2tpbmcgPSBsYXllci0+bWFza0xheWVyKCk7CisgICAgICAgIGJvb2wgdXNlU3Vy
ZmFjZUZvclJlZmxlY3Rpb24gPSBsYXllci0+cmVwbGljYUxheWVyKCk7CisgICAgICAgIGJvb2wg
dXNlU3VyZmFjZUZvckZsYXREZXNjZW5kYW50cyA9IGxheWVyLT5wYXJlbnQoKSAmJiBsYXllci0+
cGFyZW50KCktPnByZXNlcnZlczNEKCkgJiYgIWxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmIGxheWVy
LT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCk7CisgICAgICAgIGlmICh1c2VTdXJmYWNlRm9yTWFz
a2luZyB8fCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiB8fCB1c2VTdXJmYWNlRm9yRmxhdERlc2Nl
bmRhbnRzIHx8ICgodXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5
KSAmJiBsYXllci0+ZGVzY2VuZGFudERyYXdzQ29udGVudCgpKSkgeworICAgICAgICAgICAgaWYg
KCFsYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICAgICAgICAgIGxheWVyLT5jcmVhdGVS
ZW5kZXJTdXJmYWNlKCk7CisgICAgICAgICAgICBSZW5kZXJTdXJmYWNlVHlwZSogcmVuZGVyU3Vy
ZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBvcmln
aW4gb2YgdGhlIG5ldyBzdXJmYWNlIGlzIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5
ZXIuCisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJhbnNmb3JtOworICAg
ICAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZCgwLjUgKiBib3VuZHMud2lkdGgoKSwg
MC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXREcmF3VHJh
bnNmb3JtKGRyYXdUcmFuc2Zvcm0pOworCisgICAgICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVj
dCA9IEludFJlY3QoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7CisKKyAg
ICAgICAgICAgIC8vIExheWVyJ3Mgb3BhY2l0eSB3aWxsIGJlIGFwcGxpZWQgd2hlbiBkcmF3aW5n
IHRoZSByZW5kZXIgc3VyZmFjZS4KKyAgICAgICAgICAgIGZsb2F0IGRyYXdPcGFjaXR5ID0gbGF5
ZXItPm9wYWNpdHkoKTsKKyAgICAgICAgICAgIGlmIChsYXllci0+cGFyZW50KCkgJiYgbGF5ZXIt
PnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKQorICAgICAgICAgICAgICAgIGRyYXdPcGFjaXR5ICo9
IGxheWVyLT5wYXJlbnQoKS0+ZHJhd09wYWNpdHkoKTsKKyAgICAgICAgICAgIHJlbmRlclN1cmZh
Y2UtPnNldERyYXdPcGFjaXR5KGRyYXdPcGFjaXR5KTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRE
cmF3T3BhY2l0eSgxKTsKKworICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJP
cmlnaW5UcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybTsKKyAgICAgICAgICAgIGxheWVyT3Jp
Z2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC0wLjUgKiBib3VuZHMud2lkdGgoKSwgLTAuNSAqIGJv
dW5kcy5oZWlnaHQoKSwgMCk7CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRPcmlnaW5U
cmFuc2Zvcm0obGF5ZXJPcmlnaW5UcmFuc2Zvcm0pOworCisgICAgICAgICAgICAvLyBVcGRhdGUg
dGhlIGFnZ3JlZ2F0ZSBoaWVyYXJjaHkgbWF0cml4IHRvIGluY2x1ZGUgdGhlIHRyYW5zZm9ybSBv
ZiB0aGUgbmV3bHkgY3JlYXRlZCBSZW5kZXJTdXJmYWNlLgorICAgICAgICAgICAgbmV4dEhpZXJh
cmNoeU1hdHJpeC5tdWx0aXBseShsYXllck9yaWdpblRyYW5zZm9ybSk7CisKKyAgICAgICAgICAg
IC8vIFRoZSByZW5kZXIgc3VyZmFjZSBzY2lzc29yIHJlY3QgaXMgdGhlIHNjaXNzb3IgcmVjdCB0
aGF0IG5lZWRzIHRvCisgICAgICAgICAgICAvLyBiZSBhcHBsaWVkIGJlZm9yZSBkcmF3aW5nIHRo
ZSByZW5kZXIgc3VyZmFjZSBvbnRvIGl0cyBjb250YWluaW5nCisgICAgICAgICAgICAvLyBzdXJm
YWNlIGFuZCBpcyB0aGVyZWZvcmUgZXhwcmVzc2VkIGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRl
IHN5c3RlbS4KKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNjaXNzb3JSZWN0KGxheWVy
LT5wYXJlbnQoKSA/IGxheWVyLT5wYXJlbnQoKS0+c2Npc3NvclJlY3QoKSA6IGxheWVyLT5zY2lz
c29yUmVjdCgpKTsKKworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+Y2xlYXJMYXllckxpc3Qo
KTsKKworICAgICAgICAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkgeworICAgICAgICAgICAg
ICAgIHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXllcihsYXllci0+bWFza0xheWVyKCkpOworICAg
ICAgICAgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShy
ZW5kZXJTdXJmYWNlKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlbmRl
clN1cmZhY2UtPnNldE1hc2tMYXllcigwKTsKKworICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBs
aWNhTGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpKQorICAgICAg
ICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldFRhcmdldFJl
bmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CisKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2VM
YXllckxpc3QuYXBwZW5kKGxheWVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IERUID0gTVtwXSAqIExUCisgICAgICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShjb21i
aW5lZFRyYW5zZm9ybSk7CisgICAgICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QobGF5ZXItPmRyYXdUcmFuc2Zvcm0oKS5tYXBSZWN0KGxheWVyUmVjdCkpOwor
CisgICAgICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkobGF5ZXItPm9wYWNpdHkoKSk7CisK
KyAgICAgICAgICAgIGlmIChsYXllci0+cGFyZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKQorICAgICAgICAgICAgICAgICAgIGxheWVy
LT5zZXREcmF3T3BhY2l0eShsYXllci0+ZHJhd09wYWNpdHkoKSAqIGxheWVyLT5wYXJlbnQoKS0+
ZHJhd09wYWNpdHkoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBMYXllcnMgaW5oZXJpdCB0aGUg
c2Npc3NvciByZWN0IGZyb20gdGhlaXIgcGFyZW50LgorICAgICAgICAgICAgICAgIGxheWVyLT5z
ZXRTY2lzc29yUmVjdChsYXllci0+cGFyZW50KCktPnNjaXNzb3JSZWN0KCkpOworICAgICAgICAg
ICAgICAgIGlmIChsYXllci0+cGFyZW50KCktPnVzZXNMYXllclNjaXNzb3IoKSkKKyAgICAgICAg
ICAgICAgICAgICAgbGF5ZXItPnNldFVzZXNMYXllclNjaXNzb3IodHJ1ZSk7CisKKyAgICAgICAg
ICAgICAgICBsYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cGFyZW50KCktPnRh
cmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChs
YXllciAhPSByb290TGF5ZXIpCisgICAgICAgICAgICAgICAgbGF5ZXItPmNsZWFyUmVuZGVyU3Vy
ZmFjZSgpOworCisgICAgICAgICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkgeworICAg
ICAgICAgICAgICAgIEludFJlY3Qgc2Npc3NvciA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OworICAg
ICAgICAgICAgICAgIHNjaXNzb3IuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKKyAg
ICAgICAgICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3Qoc2Npc3Nvcik7CisgICAgICAgICAg
ICAgICAgbGF5ZXItPnNldFVzZXNMYXllclNjaXNzb3IodHJ1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBOb3RlIHRoYXQgYXQgdGhpcyBwb2ludCwgbGF5ZXItPmRy
YXdUcmFuc2Zvcm0oKSBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgbG9jYWwgdmFyaWFi
bGUgZHJhd1RyYW5zZm9ybS4KKyAgICAgICAgLy8gbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSBy
ZXByZXNlbnRzIHRoZSB0cmFuc2Zvcm0gYmV0d2VlbiBsYXllciBzcGFjZSAoaW4gcGl4ZWxzKSBh
bmQgc2NyZWVuIHNwYWNlLgorICAgICAgICAvLyBTbyB3ZSBkbyBub3QgaW5jbHVkZSBwcm9qZWN0
aW9uIFAgb3Igc2NhbGluZyB0cmFuc2Zvcm0gUyAoc2VlIGNvbW1lbnRzIGFib3ZlIHRoYXQgZGVz
Y3JpYmUgUCpNKlMpLgorICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclNjcmVlblNw
YWNlVHJhbnNmb3JtID0gbmV4dEhpZXJhcmNoeU1hdHJpeDsKKyAgICAgICAgbGF5ZXJTY3JlZW5T
cGFjZVRyYW5zZm9ybS5tdWx0aXBseShsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICAgICAg
bGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogYm91bmRzLndpZHRo
KCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOworICAgICAgICBsYXllci0+c2V0U2NyZWVu
U3BhY2VUcmFuc2Zvcm0obGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSk7CisKKyAgICAgICAgaWYg
KGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAgICBsYXllci0+c2V0VGFyZ2V0UmVu
ZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBBU1NFUlQobGF5ZXItPnBhcmVudCgpKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRU
YXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGRyYXdhYmxlQ29udGVudFJlY3QoKSBpcyBhbHdh
eXMgc3RvcmVkIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUKKyAgICAgICAgLy8gUmVu
ZGVyU3VyZmFjZSB0aGUgbGF5ZXIgZHJhd3MgaW50by4KKyAgICAgICAgaWYgKGxheWVyLT5kcmF3
c0NvbnRlbnQoKSkgeworICAgICAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0g
dHJhbnNmb3JtZWRMYXllclJlY3Q7CisgICAgICAgICAgICBpZiAobGF5ZXItPnVzZXNMYXllclNj
aXNzb3IoKSkKKyAgICAgICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdChs
YXllci0+c2Npc3NvclJlY3QoKSk7CisgICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250
ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KCkpOworCisgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0cml4ID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0o
KTsKKworICAgICAgICAvLyBGbGF0dGVuIHRvIDJEIGlmIHRoZSBsYXllciBkb2Vzbid0IHByZXNl
cnZlIDNELgorICAgICAgICBpZiAoIWxheWVyLT5wcmVzZXJ2ZXMzRCgpKSB7CisgICAgICAgICAg
ICBzdWJsYXllck1hdHJpeC5zZXRNMTMoMCk7CisgICAgICAgICAgICBzdWJsYXllck1hdHJpeC5z
ZXRNMjMoMCk7CisgICAgICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzEoMCk7CisgICAgICAg
ICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzIoMCk7CisgICAgICAgICAgICBzdWJsYXllck1hdHJp
eC5zZXRNMzMoMSk7CisgICAgICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzQoMCk7CisgICAg
ICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNNDMoMCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBBcHBseSB0aGUgc3VibGF5ZXIgdHJhbnNmb3JtIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGxheWVy
LgorICAgICAgICBzdWJsYXllck1hdHJpeC5tdWx0aXBseShsYXllci0+c3VibGF5ZXJUcmFuc2Zv
cm0oKSk7CisKKyAgICAgICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgY2hpbGRyZW4gaXMgdGhlIHRv
cCBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIsIG5vdCB0aGUKKyAgICAgICAgLy8gY2VudGVyLiBU
aGUgbWF0cml4IHBhc3NlZCBkb3duIHRvIHRoZSBjaGlsZHJlbiBpcyB0aGVyZWZvcmU6CisgICAg
ICAgIC8vIE1bc10gPSBNICogVHJbLWNlbnRlcl0KKyAgICAgICAgc3VibGF5ZXJNYXRyaXgudHJh
bnNsYXRlM2QoLWJvdW5kcy53aWR0aCgpICogMC41LCAtYm91bmRzLmhlaWdodCgpICogMC41LCAw
KTsKKworICAgICAgICBMYXllckxpc3QmIGRlc2NlbmRhbnRzID0gKGxheWVyLT5yZW5kZXJTdXJm
YWNlKCkgPyBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSA6IGxheWVyTGlzdCk7
CisgICAgICAgIGRlc2NlbmRhbnRzLmFwcGVuZChsYXllcik7CisKKyAgICAgICAgdW5zaWduZWQg
dGhpc0xheWVySW5kZXggPSBkZXNjZW5kYW50cy5zaXplKCkgLSAxOworCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIExheWVyVHlwZSogY2hpbGQgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKKyAg
ICAgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxMYXllclR5cGUs
IFJlbmRlclN1cmZhY2VUeXBlLCBMYXllclNvcnRlcj4oY2hpbGQsIHJvb3RMYXllciwgc3VibGF5
ZXJNYXRyaXgsIG5leHRIaWVyYXJjaHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRl
c2NlbmRhbnRzLCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOworCisgICAgICAgICAgICBp
ZiAoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAgICAgICAgIFJlbmRlclN1cmZh
Y2VUeXBlKiBjaGlsZFJlbmRlclN1cmZhY2UgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpOworICAg
ICAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJs
ZUNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC51bml0
ZShlbmNsb3NpbmdJbnRSZWN0KGNoaWxkUmVuZGVyU3VyZmFjZS0+ZHJhd2FibGVDb250ZW50UmVj
dCgpKSk7CisgICAgICAgICAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJh
d2FibGVDb250ZW50UmVjdCk7CisgICAgICAgICAgICAgICAgZGVzY2VuZGFudHMuYXBwZW5kKGNo
aWxkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgSW50UmVjdCBkcmF3
YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAg
ICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGNoaWxkLT5kcmF3YWJsZUNvbnRlbnRS
ZWN0KCkpOworICAgICAgICAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRy
YXdhYmxlQ29udGVudFJlY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGxheWVyLT5tYXNrc1RvQm91bmRzKCkgfHwgdXNlU3VyZmFjZUZvck1hc2tpbmcpIHsKKyAg
ICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNv
bnRlbnRSZWN0KCk7CisgICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdCh0
cmFuc2Zvcm1lZExheWVyUmVjdCk7CisgICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250
ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChs
YXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyICE9IHJvb3RMYXllcikgeworICAgICAgICAg
ICAgUmVuZGVyU3VyZmFjZVR5cGUqIHJlbmRlclN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFj
ZSgpOworICAgICAgICAgICAgSW50UmVjdCBjbGlwcGVkQ29udGVudFJlY3QgPSBsYXllci0+ZHJh
d2FibGVDb250ZW50UmVjdCgpOworICAgICAgICAgICAgRmxvYXRQb2ludCBzdXJmYWNlQ2VudGVy
ID0gRmxvYXRSZWN0KGNsaXBwZWRDb250ZW50UmVjdCkuY2VudGVyKCk7CisKKyAgICAgICAgICAg
IC8vIFJlc3RyaWN0IHRoZSBSZW5kZXJTdXJmYWNlIHNpemUgdG8gdGhlIHBvcnRpb24gdGhhdCdz
IHZpc2libGUuCisgICAgICAgICAgICBGbG9hdFNpemUgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGlu
ZzsKKworICAgICAgICAgICAgLy8gRG9uJ3QgY2xpcCBpZiB0aGUgbGF5ZXIgaXMgcmVmbGVjdGVk
IGFzIHRoZSByZWZsZWN0aW9uIHNob3VsZG4ndCBiZQorICAgICAgICAgICAgLy8gY2xpcHBlZC4K
KyAgICAgICAgICAgIGlmICghbGF5ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5zY2lzc29yUmVjdCgpLmlzRW1wdHkoKSAmJiAhY2xpcHBl
ZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IHN1
cmZhY2VTY2lzc29yUmVjdCA9IGNhbGN1bGF0ZVZpc2libGVSZWN0KHJlbmRlclN1cmZhY2UtPnNj
aXNzb3JSZWN0KCksIGNsaXBwZWRDb250ZW50UmVjdCwgcmVuZGVyU3VyZmFjZS0+b3JpZ2luVHJh
bnNmb3JtKCkpOworICAgICAgICAgICAgICAgICAgICBjbGlwcGVkQ29udGVudFJlY3QuaW50ZXJz
ZWN0KHN1cmZhY2VTY2lzc29yUmVjdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VDZW50ZXIgPSBGbG9hdFJlY3QoY2xpcHBlZENv
bnRlbnRSZWN0KS5jZW50ZXIoKTsKKyAgICAgICAgICAgICAgICBjZW50ZXJPZmZzZXREdWVUb0Ns
aXBwaW5nID0gY2xpcHBlZFN1cmZhY2VDZW50ZXIgLSBzdXJmYWNlQ2VudGVyOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBUaGUgUmVuZGVyU3VyZmFjZSBiYWNraW5nIHRleHR1cmUg
Y2Fubm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQKKyAgICAgICAgICAgIC8vIHRleHR1
cmUgc2l6ZS4KKyAgICAgICAgICAgIGNsaXBwZWRDb250ZW50UmVjdC5zZXRXaWR0aChzdGQ6Om1p
bihjbGlwcGVkQ29udGVudFJlY3Qud2lkdGgoKSwgbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAg
ICAgIGNsaXBwZWRDb250ZW50UmVjdC5zZXRIZWlnaHQoc3RkOjptaW4oY2xpcHBlZENvbnRlbnRS
ZWN0LmhlaWdodCgpLCBtYXhUZXh0dXJlU2l6ZSkpOworCisgICAgICAgICAgICBpZiAoY2xpcHBl
ZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5j
bGVhckxheWVyTGlzdCgpOworCisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRDb250ZW50
UmVjdChjbGlwcGVkQ29udGVudFJlY3QpOworCisgICAgICAgICAgICAvLyBTaW5jZSB0aGUgbGF5
ZXIgc3RhcnRzIGEgbmV3IHJlbmRlciBzdXJmYWNlIHdlIG5lZWQgdG8gYWRqdXN0IGl0cworICAg
ICAgICAgICAgLy8gc2Npc3NvciByZWN0IHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbmV3IHN1cmZh
Y2UncyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICAgICAgICAgIGxheWVyLT5zZXRTY2lzc29yUmVj
dChsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKKworICAgICAgICAgICAgLy8gQWRqdXN0
IHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybSB0byBiZSB0aGUgY2VudGVyIG9mIHRoZSByZW5k
ZXIgc3VyZmFjZS4KKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zv
cm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIGRyYXdU
cmFuc2Zvcm0udHJhbnNsYXRlM2Qoc3VyZmFjZUNlbnRlci54KCkgKyBjZW50ZXJPZmZzZXREdWVU
b0NsaXBwaW5nLndpZHRoKCksIHN1cmZhY2VDZW50ZXIueSgpICsgY2VudGVyT2Zmc2V0RHVlVG9D
bGlwcGluZy5oZWlnaHQoKSwgMCk7CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXREcmF3
VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pOworCisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSB0
cmFuc2Zvcm1hdGlvbiBtYXRyaXggdXNlZCB0byBkcmF3IHRoZSByZXBsaWNhIG9mIHRoZSByZW5k
ZXIKKyAgICAgICAgICAgIC8vIHN1cmZhY2UuCisgICAgICAgICAgICBpZiAobGF5ZXItPnJlcGxp
Y2FMYXllcigpKSB7CisgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGlj
YURyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAg
ICAgICAgICAgICByZXBsaWNhRHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChsYXllci0+cmVwbGlj
YUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9u
KCkueSgpLCAwKTsKKyAgICAgICAgICAgICAgICByZXBsaWNhRHJhd1RyYW5zZm9ybS5tdWx0aXBs
eShsYXllci0+cmVwbGljYUxheWVyKCktPnRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgICAgICBy
ZXBsaWNhRHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChzdXJmYWNlQ2VudGVyLngoKSAtIGFuY2hv
clBvaW50LngoKSAqIGJvdW5kcy53aWR0aCgpLCBzdXJmYWNlQ2VudGVyLnkoKSAtIGFuY2hvclBv
aW50LnkoKSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7CisgICAgICAgICAgICAgICAgcmVuZGVyU3Vy
ZmFjZS0+c2V0UmVwbGljYURyYXdUcmFuc2Zvcm0ocmVwbGljYURyYXdUcmFuc2Zvcm0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgcHJlc2VydmVzLTNkIHRoZW4g
c29ydCBhbGwgdGhlIGRlc2NlbmRhbnRzIGluIDNEIHNvIHRoYXQgdGhleSBjYW4gYmUKKyAgICAg
ICAgLy8gZHJhd24gZnJvbSBiYWNrIHRvIGZyb250LiBJZiB0aGUgcHJlc2VydmVzLTNkIHByb3Bl
cnR5IGlzIGFsc28gc2V0IG9uIHRoZSBwYXJlbnQgdGhlbgorICAgICAgICAvLyBza2lwIHRoZSBz
b3J0aW5nIGFzIHRoZSBwYXJlbnQgd2lsbCBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5
LgorICAgICAgICBpZiAobGF5ZXItPnByZXNlcnZlczNEKCkgJiYgKCFsYXllci0+cGFyZW50KCkg
fHwgIWxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkpCisgICAgICAgICAgICBzb3J0TGF5
ZXJzKCZkZXNjZW5kYW50cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpLCBs
YXllclNvcnRlcik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNTkzZmFiODU1
ZTYwMTM1NjU1NjU5NDRiZDMxMzgwOTU3ZDMyODQ5OS4uOWRlMjAyOWRlYzdkMjMzZWNlZWFhY2E1
NjY2NzM5MTkzMzRlZDNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAKQEAgLTE0NywxMyArMTQ3LDYgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFs
aXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIGltcGxIYWNrLCBQYXMKICAgICByZXR1
cm4gbV9sYXllclJlbmRlcmVyOwogfQogCi0vLyBGSVhNRTogbW92ZSBhbGwgdGhpcyBjb2RlIHRv
IENDTGF5ZXJUcmVlSG9zdAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMo
KQotewotICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
dXBkYXRlTGF5ZXJzKCk7Ci19Ci0KIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Vmlld3Bv
cnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQogewogICAgIGJvb2wgY2hhbmdlZCA9IHZp
ZXdwb3J0U2l6ZSAhPSBtX3ZpZXdwb3J0U2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaAppbmRleCBkNjhiYjhkNjA3MzM5MGViZDA4NGU5MTRjYWIwMTkyNjFmYTkwNzg4Li41
M2E0ZDU1MjRhNTdiODM1ZGU0ZDgzMjBlYWMwYzY0OWU2NjA2MmJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC03Myw4ICs3Myw2IEBAIHB1YmxpYzoKICAgICBpbnQg
c291cmNlRnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUZyYW1lTnVtYmVyOyB9
CiAgICAgdm9pZCBzZXRTb3VyY2VGcmFtZU51bWJlcihpbnQgZnJhbWVOdW1iZXIpIHsgbV9zb3Vy
Y2VGcmFtZU51bWJlciA9IGZyYW1lTnVtYmVyOyB9CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVycygp
OwotCiAgICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpOwog
ICAgIGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3Bv
cnRTaXplOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5kZXgg
NGMyNDU2ZThkM2IyMWY5OTZlN2VhZGM1N2QyMjI5ZmQzZjkzYTY4NS4uYjBmODE0MzE4MDBjMmE0
ZDM5ZWY4NmU2MThiMmIxZTliNWQzNjU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5jcHAKQEAgLTIyNSwxOCArMjI1LDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5
Ojpjb21taXRJZk5lZWRlZCgpCiAgICAgLy8gVXBkYXRlCiAgICAgZG91YmxlIGZyYW1lQmVnaW5U
aW1lID0gY3VycmVudFRpbWUoKTsKICAgICBtX2xheWVyVHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlv
dXQoZnJhbWVCZWdpblRpbWUpOwotCi0gICAgLy8gUHJlY29tbWl0IGlzIGEgdGVtcG9yYXJ5IHN0
ZXAgd2UgbmVlZCB0byBwZXJmb3JtIHRvIHB1c2ggdGhpbmdzIGxpa2UKLSAgICAvLyB0aGUgdmll
d3BvcnQgdG8gdGhlIExheWVyVHJlZUhvc3RJbXBsLCBiZWNhdXNlCi0gICAgLy8gTGF5ZXJUcmVl
SG9zdEltcGw6OnVwZGF0ZUxheWVycygpIGlzbid0IHNwbGl0IGludG8gaG9zdCBhbmQgaW1wbCBw
YXJ0cy4KLSAgICB7Ci0gICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKLSAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5wcmVDb21taXQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Ci0g
ICAgfQotCi0gICAgLy8gVGhpcyBzaG91bGQgYmVjb21lIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRl
TGF5ZXJzKCkgb25jZSB3ZSBzcGxpdCBhcGFydAotICAgIC8vIExheWVyVHJlZUhvc3RJbXBsOjp1
cGRhdGVMYXllcnMuCi0gICAgbV9sYXllclRyZWVIb3N0SW1wbC0+dXBkYXRlTGF5ZXJzKCk7Cisg
ICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKTsKIAogICAgIC8vIENvbW1pdAogICAg
IHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106185</attachid>
            <date>2011-09-02 13:40:09 -0700</date>
            <delta_ts>2011-09-02 13:47:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67438-20110902134008.patch</filename>
            <type>text/plain</type>
            <size>70364</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ0NDMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4MWZjMzQ5OWMwZGE3NjA4
ODIxMWNhMmVjMTc5ZWIwZWRkYTg4OWIyLi5mOGE3NTJlOGM0YmQ3ZTJjOWRmNjQ3YzZlNDBlMDIw
MmRiZDE4N2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMDktMDIgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUg
dXBkYXRlTGF5ZXJzIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIENDTGF5ZXJUcmVlSG9z
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0MzgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVk
IGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgIE1vdmUgZnVuY3Rpb25hbGl0eSB1c2VkIGJ5
IGJvdGggQ0NMYXllclRyZWVIb3N0IGFuZAorICAgICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0g
aW50byBDQ0xheWVyVHJlZUhvc3RDb21tb24uIE1vdmUgdXBkYXRlLCBwYWludCwKKyAgICAgICAg
YW5kIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZSBmdW5jdGlvbnMgaW50byBDQ2xheWVyVHJlZUhv
c3QuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzb3J0TGF5
ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4
dHVyZU1lbW9yeVJlY2xhaW1MaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNv
cnRMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0
VG8pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6aXNT
Y2FsZU9yVHJhbnNsYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCk6CisKIDIwMTEt
MDktMDIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgQmVm
b3JlUHJvY2Vzc0V2ZW50LCBpdCB3YXMgbmV2ZXIgbWVhbnQgdG8gYmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpp
bmRleCAxNDNjNzFjNTI3M2Q2YTdhNzRmODlhNGVjNTcyZGI1NDZjOWI2NGFlLi5jMDE1Y2NiNWFj
MzBjMWZiNzdjOTFjYzllMTFhODI3NDIzMDRhYTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTM3
LDYgKzM1MzcsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUaWxpbmdEYXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IGQ2NDg4YjA3NjAwZmMyNjk0YTRmZGMzYTg0ZDIxODFmYmQ1YmEyNzAuLjI1OGVk
YmU5NTA4MDg5YzBhZGQ1ZTRkNWQwYzc2OTdhYzE4OTQ5NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCkBAIC00MzcsNSArNDM3LDEwIEBAIGJvb2wgTGF5ZXJDaHJvbWl1bTo6ZGVzY2VuZGFudERy
YXdzQ29udGVudCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIHNvcnRMYXllcnMoVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopCit7CisgICAgLy8gQ3VycmVudGx5IHdlIGRv
bid0IHVzZSB6LW9yZGVyIHRvIGRlY2lkZSB3aGF0IHRvIHBhaW50LCBzbyB0aGVyZSdzIG5vIG5l
ZWQgdG8gYWN0dWFsbHkgc29ydCBMYXllckNocm9taXVtcy4KK30KKwogfQogI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBhN2ViMjA4
MzUyNjdhMzRhMGE0NTAzOTg2ZjFiMDVjODcyNDdiNTE1Li5iN2Q0YTJjNDg5ZTRkODExYTM2ODY3
NjdlYzhjYTc1ZjNkYWUxYTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0zMDAsNiArMzAwLDgg
QEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogfTsKIAordm9pZCBzb3J0TGF5ZXJzKFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZvaWQqKTsKKwogfQogI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKaW5kZXggOTY4NjYxYTMwMjU2OTA1M2U3MWU1OTViZWQwNmI4MTFhZjMwMTEzOS4uNDUxOWRl
ZDIzOWM2ZmQ2ZjEzMTdmYmJlYzZiNTM4OTM5YTNmMWY5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5
ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRC5oIgpAQCAtNzgsMzI0ICs3OSwxMiBAQCBzdGF0aWMgc2l6ZV90IHRleHR1cmVNZW1v
cnlSZWNsYWltTGltaXRCeXRlcyA9IDY0ICogMTAyNCAqIDEwMjQ7CiAvLyBUaGUgbWF4aW11bSB0
ZXh0dXJlIG1lbW9yeSB1c2FnZSB3aGVuIGFza2VkIHRvIHJlbGVhc2UgdGV4dHVyZXMuCiBzdGF0
aWMgc2l6ZV90IHRleHR1cmVNZW1vcnlMb3dMaW1pdEJ5dGVzID0gMyAqIDEwMjQgKiAxMDI0Owog
Ci1uYW1lc3BhY2UgewotCi1JbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJl
Y3QmIHRhcmdldFN1cmZhY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXllckJvdW5kUmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKLXsKLSAgICAvLyBJcyB0aGlzIGxh
eWVyIGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIHRhcmdldCBzdXJmYWNlPwotICAgIEludFJl
Y3QgbGF5ZXJJblN1cmZhY2VTcGFjZSA9IHRyYW5zZm9ybS5tYXBSZWN0KGxheWVyQm91bmRSZWN0
KTsKLSAgICBpZiAodGFyZ2V0U3VyZmFjZVJlY3QuY29udGFpbnMobGF5ZXJJblN1cmZhY2VTcGFj
ZSkpCi0gICAgICAgIHJldHVybiBsYXllckJvdW5kUmVjdDsKLQotICAgIC8vIElmIHRoZSBsYXll
ciBkb2Vzbid0IGZpbGwgdXAgdGhlIGVudGlyZSBzdXJmYWNlLCB0aGVuIGZpbmQgdGhlIHBhcnQg
b2YKLSAgICAvLyB0aGUgc3VyZmFjZSByZWN0IHdoZXJlIHRoZSBsYXllciBjb3VsZCBiZSB2aXNp
YmxlLiBUaGlzIGF2b2lkcyB0cnlpbmcgdG8KLSAgICAvLyBwcm9qZWN0IHN1cmZhY2UgcmVjdCBw
b2ludHMgdGhhdCBhcmUgYmVoaW5kIHRoZSBwcm9qZWN0aW9uIHBvaW50LgotICAgIEludFJlY3Qg
bWluaW1hbFN1cmZhY2VSZWN0ID0gdGFyZ2V0U3VyZmFjZVJlY3Q7Ci0gICAgbWluaW1hbFN1cmZh
Y2VSZWN0LmludGVyc2VjdChsYXllckluU3VyZmFjZVNwYWNlKTsKLQotICAgIC8vIFByb2plY3Qg
dGhlIGNvcm5lcnMgb2YgdGhlIHRhcmdldCBzdXJmYWNlIHJlY3QgaW50byB0aGUgbGF5ZXIgc3Bh
Y2UuCi0gICAgLy8gVGhpcyBib3VuZGluZyByZWN0YW5nbGUgbWF5IGJlIGxhcmdlciB0aGFuIGl0
IG5lZWRzIHRvIGJlIChiZWluZwotICAgIC8vIGF4aXMtYWxpZ25lZCksIGJ1dCBpcyBhIHJlYXNv
bmFibGUgZmlsdGVyIG9uIHRoZSBzcGFjZSB0byBjb25zaWRlci4KLSAgICAvLyBOb24taW52ZXJ0
aWJsZSB0cmFuc2Zvcm1zIHdpbGwgY3JlYXRlIGFuIGVtcHR5IHJlY3QgaGVyZS4KLSAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlVG9MYXllciA9IHRyYW5zZm9ybS5pbnZlcnNl
KCk7Ci0gICAgSW50UmVjdCBsYXllclJlY3QgPSBzdXJmYWNlVG9MYXllci5wcm9qZWN0UXVhZChG
bG9hdFF1YWQoRmxvYXRSZWN0KG1pbmltYWxTdXJmYWNlUmVjdCkpKS5lbmNsb3NpbmdCb3VuZGlu
Z0JveCgpOwotICAgIGxheWVyUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZFJlY3QpOwotICAgIHJl
dHVybiBsYXllclJlY3Q7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWF0cml4IGhhcyBu
byByb3RhdGlvbiwgc2tldyBvciBwZXJzcGVjdGl2ZSBjb21wb25lbnRzIHRvIGl0LgotYm9vbCBp
c1NjYWxlT3JUcmFuc2xhdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKLXsKLSAg
ICByZXR1cm4gIW0ubTEyKCkgJiYgIW0ubTEzKCkgJiYgIW0ubTE0KCkKLSAgICAgICAgICAgJiYg
IW0ubTIxKCkgJiYgIW0ubTIzKCkgJiYgIW0ubTI0KCkKLSAgICAgICAgICAgJiYgIW0ubTMxKCkg
JiYgIW0ubTMyKCkgJiYgIW0ubTQzKCkKLSAgICAgICAgICAgJiYgbS5tNDQoKTsKLQotfQotCi12
b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopCitzaXplX3Qg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0KCkKIHsKLSAg
ICAvLyBDdXJyZW50bHkgd2UgZG9uJ3QgdXNlIHotb3JkZXIgdG8gZGVjaWRlIHdoYXQgdG8gcGFp
bnQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBhY3R1YWxseSBzb3J0IExheWVyQ2hyb21pdW1zLgot
fQotCi12b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0
b3IgZmlyc3QsIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGVuZCwgQ0NM
YXllclNvcnRlciogbGF5ZXJTb3J0ZXIpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6c29ydExheWVycyIsIDAsIDApOwotICAgIGxheWVyU29ydGVyLT5zb3J0KGZp
cnN0LCBlbmQpOwotfQotCi0vLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFy
dGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQotLy8gbmVjZXNzYXJ5
IHRyYW5zZm9ybWF0aW9ucywgc2Npc3NvciByZWN0YW5nbGVzLCByZW5kZXIgc3VyZmFjZXMsIGV0
Yy4KLXRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGUsIHR5cGVuYW1lIExheWVyU29ydGVyPgotdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5ZXIsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIGxheWVy
TGlzdCwgTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCi17Ci0g
ICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiBMYXllckxpc3Q7Ci0gICAgLy8g
Q29tcHV0ZSB0aGUgbmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGll
ZCB0byB0aGlzIGxheWVyIGFuZAotICAgIC8vIGFsbCBpdHMgY2hpbGRyZW4uIEl0J3MgaW1wb3J0
YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhlIGxheWVyJ3MgcG9zaXRpb24KLSAgICAvLyBpcyB0aGUg
cG9zaXRpb24gb2YgdGhlIGxheWVyJ3MgYW5jaG9yIHBvaW50LiBBbHNvLCB0aGUgY29vcmRpbmF0
ZSBzeXN0ZW0gdXNlZAotICAgIC8vIGFzc3VtZXMgdGhhdCB0aGUgb3JpZ2luIGlzIGF0IHRoZSBs
b3dlciBsZWZ0IGV2ZW4gdGhvdWdoIHRoZSBjb29yZGluYXRlcyB0aGUgYnJvd3NlcgotICAgIC8v
IGdpdmVzIHVzIGZvciB0aGUgbGF5ZXJzIGFyZSBmb3IgdGhlIHVwcGVyIGxlZnQgY29ybmVyLiBU
aGUgWSBmbGlwIGhhcHBlbnMgdmlhCi0gICAgLy8gdGhlIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9u
IGFwcGxpZWQgYXQgcmVuZGVyIHRpbWUuCi0gICAgLy8gVGhlIHRyYW5zZm9ybWF0aW9uIGNoYWlu
IGZvciB0aGUgbGF5ZXIgaXMgKHVzaW5nIHRoZSBNYXRyaXggeCBWZWN0b3Igb3JkZXIpOgotICAg
IC8vIE0gPSBNW3BdICogVHJbbF0gKiBNW2xdICogVHJbY10KLSAgICAvLyBXaGVyZSBNW3BdIGlz
IHRoZSBwYXJlbnQgbWF0cml4IHBhc3NlZCBkb3duIHRvIHRoZSBmdW5jdGlvbgotICAgIC8vICAg
ICAgIFRyW2xdIGlzIHRoZSB0cmFuc2xhdGlvbiBtYXRyaXggbG9jYXRpbmcgdGhlIGxheWVyJ3Mg
YW5jaG9yIHBvaW50Ci0gICAgLy8gICAgICAgVHJbY10gaXMgdGhlIHRyYW5zbGF0aW9uIG9mZnNl
dCBiZXR3ZWVuIHRoZSBhbmNob3IgcG9pbnQgYW5kIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyCi0g
ICAgLy8gICAgICAgTVtsXSBpcyB0aGUgbGF5ZXIncyBtYXRyaXggKGFwcGxpZWQgYXQgdGhlIGFu
Y2hvciBwb2ludCkKLSAgICAvLyBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgY29vcmRpbmF0ZSBz
eXN0ZW0gd2hvc2Ugb3JpZ2luIGlzIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgotICAgIC8vIE5v
dGUgdGhhdCB0aGUgZmluYWwgbWF0cml4IHVzZWQgYnkgdGhlIHNoYWRlciBmb3IgdGhlIGxheWVy
IGlzIFAgKiBNICogUyAuIFRoaXMgZmluYWwgcHJvZHVjdAotICAgIC8vIGlzIGNvbXB1dGVkIGlu
IGRyYXdUZXh0dXJlZFF1YWQoKS4KLSAgICAvLyBXaGVyZTogUCBpcyB0aGUgcHJvamVjdGlvbiBt
YXRyaXgKLSAgICAvLyAgICAgICAgTSBpcyB0aGUgbGF5ZXIncyBtYXRyaXggY29tcHV0ZWQgYWJv
dmUKLSAgICAvLyAgICAgICAgUyBpcyB0aGUgc2NhbGUgYWRqdXN0bWVudCAodG8gc2NhbGUgdXAg
dG8gdGhlIGxheWVyIHNpemUpCi0gICAgSW50U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7
Ci0gICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwotICAg
IEZsb2F0UG9pbnQgcG9zaXRpb24gPSBsYXllci0+cG9zaXRpb24oKTsKLQotICAgIC8vIE9mZnNl
dCBiZXR3ZWVuIGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZC4KLSAgICBm
bG9hdCBjZW50ZXJPZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMud2lk
dGgoKTsKLSAgICBmbG9hdCBjZW50ZXJPZmZzZXRZID0gKDAuNSAtIGFuY2hvclBvaW50LnkoKSkg
KiBib3VuZHMuaGVpZ2h0KCk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllckxvY2Fs
VHJhbnNmb3JtOwotICAgIC8vIExUID0gVHJbbF0KLSAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRy
YW5zbGF0ZTNkKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpLCBsYXllci0+YW5jaG9yUG9pbnRa
KCkpOwotICAgIC8vIExUID0gVHJbbF0gKiBNW2xdCi0gICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS5t
dWx0aXBseShsYXllci0+dHJhbnNmb3JtKCkpOwotICAgIC8vIExUID0gVHJbbF0gKiBNW2xdICog
VHJbY10KLSAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFgs
IGNlbnRlck9mZnNldFksIC1sYXllci0+YW5jaG9yUG9pbnRaKCkpOwotCi0gICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY29tYmluZWRUcmFuc2Zvcm0gPSBwYXJlbnRNYXRyaXg7Ci0gICAgY29tYmlu
ZWRUcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybS5tdWx0aXBseShsYXllckxvY2FsVHJhbnNm
b3JtKTsKLQotICAgIEZsb2F0UmVjdCBsYXllclJlY3QoLTAuNSAqIGxheWVyLT5ib3VuZHMoKS53
aWR0aCgpLCAtMC41ICogbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpLCBsYXllci0+Ym91bmRzKCku
d2lkdGgoKSwgbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsKLSAgICBJbnRSZWN0IHRyYW5zZm9y
bWVkTGF5ZXJSZWN0OwotCi0gICAgLy8gZnVsbEhpZXJhcmNoeU1hdHJpeCBpcyB0aGUgbWF0cml4
IHRoYXQgdHJhbnNmb3JtcyBvYmplY3RzIGJldHdlZW4gc2NyZWVuIHNwYWNlIChleGNlcHQgcHJv
amVjdGlvbiBtYXRyaXgpIGFuZCB0aGUgbW9zdCByZWNlbnQgUmVuZGVyU3VyZmFjZSdzIHNwYWNl
LgotICAgIC8vIG5leHRIaWVyYXJjaHlNYXRyaXggd2lsbCBvbmx5IGNoYW5nZSBpZiB0aGlzIGxh
eWVyIHVzZXMgYSBuZXcgUmVuZGVyU3VyZmFjZSwgb3RoZXJ3aXNlIHJlbWFpbnMgdGhlIHNhbWUu
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbmV4dEhpZXJhcmNoeU1hdHJpeCA9IGZ1bGxIaWVy
YXJjaHlNYXRyaXg7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyBsaWtlIHRoZSB3cm9uZyBw
bGFjZSB0byBzZXQgdGhpcwotICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJTY2lzc29yKGZhbHNlKTsK
LQotICAgIC8vIFRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRhbnRzIHJlbmRlciBvbiBhIG5ldyBS
ZW5kZXJTdXJmYWNlIGlmIGFueSBvZgotICAgIC8vIHRoZXNlIGNvbmRpdGlvbnMgaG9sZDoKLSAg
ICAvLyAxLiBUaGUgbGF5ZXIgY2xpcHMgaXRzIGRlc2NlbmRhbnRzIGFuZCBpdHMgdHJhbnNmb3Jt
IGlzIG5vdCBhIHNpbXBsZSB0cmFuc2xhdGlvbi4KLSAgICAvLyAyLiBJZiB0aGUgbGF5ZXIgaGFz
IG9wYWNpdHkgIT0gMSBhbmQgZG9lcyBub3QgaGF2ZSBhIHByZXNlcnZlcy0zZCB0cmFuc2Zvcm0g
c3R5bGUuCi0gICAgLy8gMy4gVGhlIGxheWVyIHVzZXMgYSBtYXNrCi0gICAgLy8gNC4gVGhlIGxh
eWVyIGhhcyBhIHJlcGxpY2EgKHVzZWQgZm9yIHJlZmxlY3Rpb25zKQotICAgIC8vIDUuIFRoZSBs
YXllciBkb2Vzbid0IHByZXNlcnZlLTNkIGJ1dCBpcyB0aGUgY2hpbGQgb2YgYSBsYXllciB3aGlj
aCBkb2VzLgotICAgIC8vIElmIGEgbGF5ZXIgcHJlc2VydmVzLTNkIHRoZW4gd2UgZG9uJ3QgY3Jl
YXRlIGEgUmVuZGVyU3VyZmFjZSBmb3IgaXQgdG8gYXZvaWQgZmxhdHRlbmluZwotICAgIC8vIG91
dCBpdHMgY2hpbGRyZW4uIFRoZSBvcGFjaXR5IHZhbHVlIG9mIHRoZSBjaGlsZHJlbiBsYXllcnMg
aXMgbXVsdGlwbGllZCBieSB0aGUgb3BhY2l0eQotICAgIC8vIG9mIHRoZWlyIHBhcmVudC4KLSAg
ICBib29sIHVzZVN1cmZhY2VGb3JDbGlwcGluZyA9IGxheWVyLT5tYXNrc1RvQm91bmRzKCkgJiYg
IWlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbWJpbmVkVHJhbnNmb3JtKTsKLSAgICBib29sIHVzZVN1
cmZhY2VGb3JPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFsYXllci0+cHJlc2Vy
dmVzM0QoKTsKLSAgICBib29sIHVzZVN1cmZhY2VGb3JNYXNraW5nID0gbGF5ZXItPm1hc2tMYXll
cigpOwotICAgIGJvb2wgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gPSBsYXllci0+cmVwbGljYUxh
eWVyKCk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzID0gbGF5ZXItPnBh
cmVudCgpICYmIGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSAmJiAhbGF5ZXItPnByZXNl
cnZlczNEKCkgJiYgbGF5ZXItPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKTsKLSAgICBpZiAodXNl
U3VyZmFjZUZvck1hc2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgdXNlU3VyZmFj
ZUZvckZsYXREZXNjZW5kYW50cyB8fCAoKHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJm
YWNlRm9yT3BhY2l0eSkgJiYgbGF5ZXItPmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKSkpIHsKLSAg
ICAgICAgaWYgKCFsYXllci0+cmVuZGVyU3VyZmFjZSgpKQotICAgICAgICAgICAgbGF5ZXItPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIHJlbmRlclN1
cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOwotCi0gICAgICAgIC8vIFRoZSBvcmlnaW4g
b2YgdGhlIG5ldyBzdXJmYWNlIGlzIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIu
Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm07Ci0gICAgICAgIGRy
YXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QoMC41ICogYm91bmRzLndpZHRoKCksIDAuNSAqIGJvdW5k
cy5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKGRyYXdUcmFu
c2Zvcm0pOwotCi0gICAgICAgIHRyYW5zZm9ybWVkTGF5ZXJSZWN0ID0gSW50UmVjdCgwLCAwLCBi
b3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKTsKLQotICAgICAgICAvLyBMYXllcidzIG9w
YWNpdHkgd2lsbCBiZSBhcHBsaWVkIHdoZW4gZHJhd2luZyB0aGUgcmVuZGVyIHN1cmZhY2UuCi0g
ICAgICAgIGZsb2F0IGRyYXdPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsKLSAgICAgICAgaWYg
KGxheWVyLT5wYXJlbnQoKSAmJiBsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpCi0gICAg
ICAgICAgICBkcmF3T3BhY2l0eSAqPSBsYXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5KCk7Ci0g
ICAgICAgIHJlbmRlclN1cmZhY2UtPnNldERyYXdPcGFjaXR5KGRyYXdPcGFjaXR5KTsKLSAgICAg
ICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOwotCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gY29tYmluZWRUcmFuc2Zvcm07Ci0gICAgICAgIGxh
eWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC0wLjUgKiBib3VuZHMud2lkdGgoKSwgLTAu
NSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE9yaWdp
blRyYW5zZm9ybShsYXllck9yaWdpblRyYW5zZm9ybSk7Ci0KLSAgICAgICAgLy8gVXBkYXRlIHRo
ZSBhZ2dyZWdhdGUgaGllcmFyY2h5IG1hdHJpeCB0byBpbmNsdWRlIHRoZSB0cmFuc2Zvcm0gb2Yg
dGhlIG5ld2x5IGNyZWF0ZWQgUmVuZGVyU3VyZmFjZS4KLSAgICAgICAgbmV4dEhpZXJhcmNoeU1h
dHJpeC5tdWx0aXBseShsYXllck9yaWdpblRyYW5zZm9ybSk7Ci0KLSAgICAgICAgLy8gVGhlIHJl
bmRlciBzdXJmYWNlIHNjaXNzb3IgcmVjdCBpcyB0aGUgc2Npc3NvciByZWN0IHRoYXQgbmVlZHMg
dG8KLSAgICAgICAgLy8gYmUgYXBwbGllZCBiZWZvcmUgZHJhd2luZyB0aGUgcmVuZGVyIHN1cmZh
Y2Ugb250byBpdHMgY29udGFpbmluZwotICAgICAgICAvLyBzdXJmYWNlIGFuZCBpcyB0aGVyZWZv
cmUgZXhwcmVzc2VkIGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAg
cmVuZGVyU3VyZmFjZS0+c2V0U2Npc3NvclJlY3QobGF5ZXItPnBhcmVudCgpID8gbGF5ZXItPnBh
cmVudCgpLT5zY2lzc29yUmVjdCgpIDogbGF5ZXItPnNjaXNzb3JSZWN0KCkpOwotCi0gICAgICAg
IHJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7Ci0KLSAgICAgICAgaWYgKGxheWVyLT5t
YXNrTGF5ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0TWFza0xheWVyKGxh
eWVyLT5tYXNrTGF5ZXIoKSk7Ci0gICAgICAgICAgICBsYXllci0+bWFza0xheWVyKCktPnNldFRh
cmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0TWFza0xheWVyKDApOwotCi0gICAgICAgIGlmIChsYXll
ci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkK
LSAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldFRhcmdl
dFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7Ci0KLSAgICAgICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5hcHBlbmQobGF5ZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIERUID0gTVtw
XSAqIExUCi0gICAgICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKGNvbWJpbmVkVHJhbnNmb3Jt
KTsKLSAgICAgICAgdHJhbnNmb3JtZWRMYXllclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGxheWVy
LT5kcmF3VHJhbnNmb3JtKCkubWFwUmVjdChsYXllclJlY3QpKTsKLQotICAgICAgICBsYXllci0+
c2V0RHJhd09wYWNpdHkobGF5ZXItPm9wYWNpdHkoKSk7Ci0KLSAgICAgICAgaWYgKGxheWVyLT5w
YXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0Qo
KSkKLSAgICAgICAgICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eShsYXllci0+ZHJhd09wYWNp
dHkoKSAqIGxheWVyLT5wYXJlbnQoKS0+ZHJhd09wYWNpdHkoKSk7Ci0KLSAgICAgICAgICAgIC8v
IExheWVycyBpbmhlcml0IHRoZSBzY2lzc29yIHJlY3QgZnJvbSB0aGVpciBwYXJlbnQuCi0gICAg
ICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3QobGF5ZXItPnBhcmVudCgpLT5zY2lzc29yUmVj
dCgpKTsKLSAgICAgICAgICAgIGlmIChsYXllci0+cGFyZW50KCktPnVzZXNMYXllclNjaXNzb3Io
KSkKLSAgICAgICAgICAgICAgICBsYXllci0+c2V0VXNlc0xheWVyU2Npc3Nvcih0cnVlKTsKLQot
ICAgICAgICAgICAgbGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnBhcmVudCgp
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxheWVy
ICE9IHJvb3RMYXllcikKLSAgICAgICAgICAgIGxheWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsK
LQotICAgICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkgewotICAgICAgICAgICAgSW50
UmVjdCBzY2lzc29yID0gdHJhbnNmb3JtZWRMYXllclJlY3Q7Ci0gICAgICAgICAgICBzY2lzc29y
LmludGVyc2VjdChsYXllci0+c2Npc3NvclJlY3QoKSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0
U2Npc3NvclJlY3Qoc2Npc3Nvcik7Ci0gICAgICAgICAgICBsYXllci0+c2V0VXNlc0xheWVyU2Np
c3Nvcih0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vdGUgdGhhdCBhdCB0aGlz
IHBvaW50LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2Ft
ZSBhcyBsb2NhbCB2YXJpYWJsZSBkcmF3VHJhbnNmb3JtLgotICAgIC8vIGxheWVyU2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0gcmVwcmVzZW50cyB0aGUgdHJhbnNmb3JtIGJldHdlZW4gbGF5ZXIgc3BhY2Ug
KGluIHBpeGVscykgYW5kIHNjcmVlbiBzcGFjZS4KLSAgICAvLyBTbyB3ZSBkbyBub3QgaW5jbHVk
ZSBwcm9qZWN0aW9uIFAgb3Igc2NhbGluZyB0cmFuc2Zvcm0gUyAoc2VlIGNvbW1lbnRzIGFib3Zl
IHRoYXQgZGVzY3JpYmUgUCpNKlMpLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyU2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0gPSBuZXh0SGllcmFyY2h5TWF0cml4OwotICAgIGxheWVyU2NyZWVu
U3BhY2VUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgbGF5
ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogYm91bmRzLndpZHRoKCks
IC0wLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOwotICAgIGxheWVyLT5zZXRTY3JlZW5TcGFjZVRy
YW5zZm9ybShsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtKTsKLQotICAgIGlmIChsYXllci0+cmVu
ZGVyU3VyZmFjZSgpKQotICAgICAgICBsYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXll
ci0+cmVuZGVyU3VyZmFjZSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGxheWVyLT5w
YXJlbnQoKSk7Ci0gICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5w
YXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBkcmF3YWJs
ZUNvbnRlbnRSZWN0KCkgaXMgYWx3YXlzIHN0b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0g
b2YgdGhlCi0gICAgLy8gUmVuZGVyU3VyZmFjZSB0aGUgbGF5ZXIgZHJhd3MgaW50by4KLSAgICBp
ZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKSB7Ci0gICAgICAgIEludFJlY3QgZHJhd2FibGVDb250
ZW50UmVjdCA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OwotICAgICAgICBpZiAobGF5ZXItPnVzZXNM
YXllclNjaXNzb3IoKSkKLSAgICAgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QuaW50ZXJzZWN0
KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVu
dFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxheWVyLT5z
ZXREcmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoKSk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBzdWJsYXllck1hdHJpeCA9IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7Ci0KLSAgICAvLyBG
bGF0dGVuIHRvIDJEIGlmIHRoZSBsYXllciBkb2Vzbid0IHByZXNlcnZlIDNELgotICAgIGlmICgh
bGF5ZXItPnByZXNlcnZlczNEKCkpIHsKLSAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTEzKDAp
OwotICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMjMoMCk7Ci0gICAgICAgIHN1YmxheWVyTWF0
cml4LnNldE0zMSgwKTsKLSAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTMyKDApOwotICAgICAg
ICBzdWJsYXllck1hdHJpeC5zZXRNMzMoMSk7Ci0gICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0z
NCgwKTsKLSAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTQzKDApOwotICAgIH0KLQotICAgIC8v
IEFwcGx5IHRoZSBzdWJsYXllciB0cmFuc2Zvcm0gYXQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIu
Ci0gICAgc3VibGF5ZXJNYXRyaXgubXVsdGlwbHkobGF5ZXItPnN1YmxheWVyVHJhbnNmb3JtKCkp
OwotCi0gICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgY2hpbGRyZW4gaXMgdGhlIHRvcCBsZWZ0IGNv
cm5lciBvZiB0aGUgbGF5ZXIsIG5vdCB0aGUKLSAgICAvLyBjZW50ZXIuIFRoZSBtYXRyaXggcGFz
c2VkIGRvd24gdG8gdGhlIGNoaWxkcmVuIGlzIHRoZXJlZm9yZToKLSAgICAvLyBNW3NdID0gTSAq
IFRyWy1jZW50ZXJdCi0gICAgc3VibGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53aWR0
aCgpICogMC41LCAtYm91bmRzLmhlaWdodCgpICogMC41LCAwKTsKLQotICAgIExheWVyTGlzdCYg
ZGVzY2VuZGFudHMgPSAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT5yZW5kZXJTdXJm
YWNlKCktPmxheWVyTGlzdCgpIDogbGF5ZXJMaXN0KTsKLSAgICBkZXNjZW5kYW50cy5hcHBlbmQo
bGF5ZXIpOwotCi0gICAgdW5zaWduZWQgdGhpc0xheWVySW5kZXggPSBkZXNjZW5kYW50cy5zaXpl
KCkgLSAxOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5z
aXplKCk7ICsraSkgewotICAgICAgICBMYXllclR5cGUqIGNoaWxkID0gbGF5ZXItPmNoaWxkcmVu
KClbaV0uZ2V0KCk7Ci0gICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBMYXllclNvcnRlcj4oY2hpbGQsIHJvb3RM
YXllciwgc3VibGF5ZXJNYXRyaXgsIG5leHRIaWVyYXJjaHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGRlc2NlbmRhbnRzLCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNpemUpOwotCi0g
ICAgICAgIGlmIChjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJT
dXJmYWNlVHlwZSogY2hpbGRSZW5kZXJTdXJmYWNlID0gY2hpbGQtPnJlbmRlclN1cmZhY2UoKTsK
LSAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJs
ZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGVu
Y2xvc2luZ0ludFJlY3QoY2hpbGRSZW5kZXJTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkp
KTsKLSAgICAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29u
dGVudFJlY3QpOwotICAgICAgICAgICAgZGVzY2VuZGFudHMuYXBwZW5kKGNoaWxkKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGxh
eWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRS
ZWN0LnVuaXRlKGNoaWxkLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwotICAgICAgICAgICAgbGF5
ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSB8fCB1c2VTdXJmYWNl
Rm9yTWFza2luZykgewotICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXll
ci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwotICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0Lmlu
dGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3YWJs
ZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOwotICAgIH0KLQotICAgIGlmIChsYXll
ci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyICE9IHJvb3RMYXllcikgewotICAgICAgICBSZW5k
ZXJTdXJmYWNlVHlwZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0g
ICAgICAgIEludFJlY3QgY2xpcHBlZENvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVu
dFJlY3QoKTsKLSAgICAgICAgRmxvYXRQb2ludCBzdXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0KGNs
aXBwZWRDb250ZW50UmVjdCkuY2VudGVyKCk7Ci0KLSAgICAgICAgLy8gUmVzdHJpY3QgdGhlIFJl
bmRlclN1cmZhY2Ugc2l6ZSB0byB0aGUgcG9ydGlvbiB0aGF0J3MgdmlzaWJsZS4KLSAgICAgICAg
RmxvYXRTaXplIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmc7Ci0KLSAgICAgICAgLy8gRG9uJ3Qg
Y2xpcCBpZiB0aGUgbGF5ZXIgaXMgcmVmbGVjdGVkIGFzIHRoZSByZWZsZWN0aW9uIHNob3VsZG4n
dCBiZQotICAgICAgICAvLyBjbGlwcGVkLgotICAgICAgICBpZiAoIWxheWVyLT5yZXBsaWNhTGF5
ZXIoKSkgewotICAgICAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5zY2lzc29yUmVjdCgpLmlz
RW1wdHkoKSAmJiAhY2xpcHBlZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgIEludFJlY3Qgc3VyZmFjZVNjaXNzb3JSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZVJlY3QocmVu
ZGVyU3VyZmFjZS0+c2Npc3NvclJlY3QoKSwgY2xpcHBlZENvbnRlbnRSZWN0LCByZW5kZXJTdXJm
YWNlLT5vcmlnaW5UcmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICAgICAgY2xpcHBlZENvbnRlbnRS
ZWN0LmludGVyc2VjdChzdXJmYWNlU2Npc3NvclJlY3QpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgRmxvYXRQb2ludCBjbGlwcGVkU3VyZmFjZUNlbnRlciA9IEZsb2F0UmVjdChjbGlwcGVk
Q29udGVudFJlY3QpLmNlbnRlcigpOwotICAgICAgICAgICAgY2VudGVyT2Zmc2V0RHVlVG9DbGlw
cGluZyA9IGNsaXBwZWRTdXJmYWNlQ2VudGVyIC0gc3VyZmFjZUNlbnRlcjsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFRoZSBSZW5kZXJTdXJmYWNlIGJhY2tpbmcgdGV4dHVyZSBjYW5ub3QgZXhj
ZWVkIHRoZSBtYXhpbXVtIHN1cHBvcnRlZAotICAgICAgICAvLyB0ZXh0dXJlIHNpemUuCi0gICAg
ICAgIGNsaXBwZWRDb250ZW50UmVjdC5zZXRXaWR0aChtaW4oY2xpcHBlZENvbnRlbnRSZWN0Lndp
ZHRoKCksIG1heFRleHR1cmVTaXplKSk7Ci0gICAgICAgIGNsaXBwZWRDb250ZW50UmVjdC5zZXRI
ZWlnaHQobWluKGNsaXBwZWRDb250ZW50UmVjdC5oZWlnaHQoKSwgbWF4VGV4dHVyZVNpemUpKTsK
LQotICAgICAgICBpZiAoY2xpcHBlZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IHJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7Ci0KLSAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+c2V0Q29udGVudFJlY3QoY2xpcHBlZENvbnRlbnRSZWN0KTsKLQotICAgICAgICAvLyBTaW5j
ZSB0aGUgbGF5ZXIgc3RhcnRzIGEgbmV3IHJlbmRlciBzdXJmYWNlIHdlIG5lZWQgdG8gYWRqdXN0
IGl0cwotICAgICAgICAvLyBzY2lzc29yIHJlY3QgdG8gYmUgZXhwcmVzc2VkIGluIHRoZSBuZXcg
c3VyZmFjZSdzIGNvb3JkaW5hdGUgc3lzdGVtLgotICAgICAgICBsYXllci0+c2V0U2Npc3NvclJl
Y3QobGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7Ci0KLSAgICAgICAgLy8gQWRqdXN0IHRo
ZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybSB0byBiZSB0aGUgY2VudGVyIG9mIHRoZSByZW5kZXIg
c3VyZmFjZS4KLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybSA9IHJl
bmRlclN1cmZhY2UtPm9yaWdpblRyYW5zZm9ybSgpOwotICAgICAgICBkcmF3VHJhbnNmb3JtLnRy
YW5zbGF0ZTNkKHN1cmZhY2VDZW50ZXIueCgpICsgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZy53
aWR0aCgpLCBzdXJmYWNlQ2VudGVyLnkoKSArIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcuaGVp
Z2h0KCksIDApOwotICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXREcmF3VHJhbnNmb3JtKGRyYXdU
cmFuc2Zvcm0pOwotCi0gICAgICAgIC8vIENvbXB1dGUgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJp
eCB1c2VkIHRvIGRyYXcgdGhlIHJlcGxpY2Egb2YgdGhlIHJlbmRlcgotICAgICAgICAvLyBzdXJm
YWNlLgotICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCByZXBsaWNhRHJhd1RyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2Ut
Pm9yaWdpblRyYW5zZm9ybSgpOwotICAgICAgICAgICAgcmVwbGljYURyYXdUcmFuc2Zvcm0udHJh
bnNsYXRlM2QobGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgbGF5ZXItPnJl
cGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7Ci0gICAgICAgICAgICByZXBsaWNhRHJh
d1RyYW5zZm9ybS5tdWx0aXBseShsYXllci0+cmVwbGljYUxheWVyKCktPnRyYW5zZm9ybSgpKTsK
LSAgICAgICAgICAgIHJlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHN1cmZhY2VDZW50
ZXIueCgpIC0gYW5jaG9yUG9pbnQueCgpICogYm91bmRzLndpZHRoKCksIHN1cmZhY2VDZW50ZXIu
eSgpIC0gYW5jaG9yUG9pbnQueSgpICogYm91bmRzLmhlaWdodCgpLCAwKTsKLSAgICAgICAgICAg
IHJlbmRlclN1cmZhY2UtPnNldFJlcGxpY2FEcmF3VHJhbnNmb3JtKHJlcGxpY2FEcmF3VHJhbnNm
b3JtKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHByZXNlcnZlcy0zZCB0aGVuIHNv
cnQgYWxsIHRoZSBkZXNjZW5kYW50cyBpbiAzRCBzbyB0aGF0IHRoZXkgY2FuIGJlCi0gICAgLy8g
ZHJhd24gZnJvbSBiYWNrIHRvIGZyb250LiBJZiB0aGUgcHJlc2VydmVzLTNkIHByb3BlcnR5IGlz
IGFsc28gc2V0IG9uIHRoZSBwYXJlbnQgdGhlbgotICAgIC8vIHNraXAgdGhlIHNvcnRpbmcgYXMg
dGhlIHBhcmVudCB3aWxsIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBhbnl3YXkuCi0gICAgaWYg
KGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5ZXItPnBhcmVudCgpIHx8ICFsYXllci0+cGFy
ZW50KCktPnByZXNlcnZlczNEKCkpKQotICAgICAgICBzb3J0TGF5ZXJzKCZkZXNjZW5kYW50cy5h
dCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpLCBsYXllclNvcnRlcik7CisgICAg
cmV0dXJuIHRleHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRlczsKIH0KIAotfQorbmFtZXNwYWNl
IHsKIAogc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhvTWF0cml4KGZsb2F0IGxlZnQs
IGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkKIHsKQEAgLTQ1Miw2ICsxNDEs
OCBAQCBib29sIGNvbnRleHRTdXBwb3J0c0FjY2VsZXJhdGVkUGFpbnRpbmcoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCiB9CiAjZW5kaWYKIAorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
IFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBvd25l
ckltcGwsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7CiAjaWYgVVNF
KFNLSUEpCkBAIC01NTcsMjcgKzI0OCwxNSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dmlld3BvcnRDaGFuZ2VkKCkKICAgICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gMDsKIH0KIAot
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycygpCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiB7Ci0gICAgaWYgKCFyb290TGF5ZXIoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fb3duZXItPnZpZXdwb3J0U2l6ZSgpLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gRklYTUU6IHVzZSB0aGUgZnJhbWUgYmVnaW4g
dGltZSBmcm9tIHRoZSBvdmVyYWxsIGNvbXBvc2l0b3Igc2NoZWR1bGVyLgogICAgIC8vIFRoaXMg
dmFsdWUgaXMgY3VycmVudGx5IGluYWNjZXNzaWJsZSBiZWNhdXNlIGl0IGlzIHVwIGluIENocm9t
aXVtJ3MKICAgICAvLyBSZW5kZXJXaWRnZXQuCiAgICAgbV9oZWFkc1VwRGlzcGxheS0+b25GcmFt
ZUJlZ2luKGN1cnJlbnRUaW1lKCkpOwogCi0gICAgdXBkYXRlTGF5ZXJzKHJvb3RMYXllcigpLT5w
bGF0Zm9ybUxheWVyKCkpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xh
eWVycygpCi17CiAgICAgaWYgKCFyb290TGF5ZXJJbXBsKCkpCiAgICAgICAgIHJldHVybjsKLQog
ICAgIC8vIEZJWE1FOiBObyBuZWVkIHRvIHdhbGsgdGhlIHRyZWUgaGVyZS4gVGhpcyBjb3VsZCBi
ZSBwYXNzZWQgdmlhIGRyYXcuCiAgICAgcm9vdExheWVySW1wbCgpLT5zZXRMYXllclJlbmRlcmVy
UmVjdXJzaXZlKHRoaXMpOwogCkBAIC01OTYsMTI2ICsyNzUsNiBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9E
aXNwbGF5KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMo
TGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQotewotICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRl
cmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyIsIHRoaXMsIDApOwotCi0gICAgaWYgKCFyb290TGF5
ZXItPnJlbmRlclN1cmZhY2UoKSkKLSAgICAgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJm
YWNlKCk7Ci0gICAgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KElu
dFJlY3QoSW50UG9pbnQoMCwgMCksIHZpZXdwb3J0U2l6ZSgpKSk7Ci0KLSAgICBJbnRSZWN0IHJv
b3RTY2lzc29yUmVjdChJbnRQb2ludCgpLCB2aWV3cG9ydFNpemUoKSk7Ci0gICAgcm9vdExheWVy
LT5zZXRTY2lzc29yUmVjdChyb290U2Npc3NvclJlY3QpOwotCi0gICAgTGF5ZXJMaXN0IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9v
dExheWVyKTsKLQotICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcm9vdFJlbmRlclN1cmZhY2Ug
PSByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICByb290UmVuZGVyU3VyZmFjZS0+Y2xl
YXJMYXllckxpc3QoKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OwotCi0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVMYXllcnM6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7Ci0gICAgICAgIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0sIHZvaWQqPihyb290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5
ZXJMaXN0KCksIDAsIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKLSAgICB9Ci0KLSAg
ICBwYWludExheWVyQ29udGVudHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0KLSAgICBtX2Nv
bnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQodGV4dHVyZU1lbW9yeVJl
Y2xhaW1MaW1pdEJ5dGVzKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2
aWN0ZWRUZXh0dXJlcyhtX2NvbnRleHQuZ2V0KCkpOwotICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci19Ci0KLXN0YXRpYyBJbnRSZWN0IGNhbGN1
bGF0ZVZpc2libGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNv
bnN0IEludFNpemUmIGJvdW5kcywgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcywgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRpbGluZ1RyYW5zZm9ybSkKLXsKLSAgICBpZiAodGFyZ2V0
U3VyZmFjZVJlY3QuaXNFbXB0eSgpIHx8IGNvbnRlbnRCb3VuZHMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gdGFyZ2V0U3VyZmFjZVJlY3Q7Ci0KLSAgICBjb25zdCBJbnRSZWN0IGxheWVyQm91
bmRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKTsKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSB0aWxpbmdUcmFuc2Zvcm07Ci0KLSAgICB0cmFuc2Zv
cm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kcy53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihj
b250ZW50Qm91bmRzLndpZHRoKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91
bmRzLmhlaWdodCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzLmhlaWdodCgp
KSk7Ci0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4w
LCAtY29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7Ci0KLSAgICByZXR1cm4gY2FsY3VsYXRl
VmlzaWJsZVJlY3QodGFyZ2V0U3VyZmFjZVJlY3QsIGxheWVyQm91bmRSZWN0LCB0cmFuc2Zvcm0p
OwotfQotCi1zdGF0aWMgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiBs
YXllciwgY29uc3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCkKLXsKLSAgICBpZiAobGF5ZXIt
PmRyYXdzQ29udGVudCgpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZp
c2libGVMYXllclJlY3QpOwotICAgICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwYWludExheWVyQ29udGVu
dHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQotewotICAgIGZvciAo
aW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3Vy
ZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewotICAgICAgICBMYXllckNocm9taXVt
KiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRl
eF0uZ2V0KCk7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9
IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICBBU1NFUlQocmVu
ZGVyU3VyZmFjZSk7Ci0KLSAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRMYXllclRyZWVI
b3N0KG93bmVyKCkpOwotCi0gICAgICAgIC8vIFJlbmRlciBzdXJmYWNlcyB3aG9zZSBkcmF3YWJs
ZSBhcmVhIGhhcyB6ZXJvIHdpZHRoIG9yIGhlaWdodAotICAgICAgICAvLyB3aWxsIGhhdmUgbm8g
bGF5ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGVtIGFuZCBzaG91bGQgYmUgc2tpcHBlZC4KLSAgICAg
ICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlz
dCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwotICAgICAgICBBU1NFUlQobGF5ZXJMaXN0
LnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5k
ZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIExheWVy
Q2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwotCi0gICAgICAg
ICAgICAvLyBMYXllcnMgdGhhdCBzdGFydCBhIG5ldyByZW5kZXIgc3VyZmFjZSB3aWxsIGJlIHBh
aW50ZWQgd2hlbiB0aGUgcmVuZGVyCi0gICAgICAgICAgICAvLyBzdXJmYWNlJ3MgbGlzdCBpcyBw
cm9jZXNzZWQuCi0gICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXll
ci0+cmVuZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIGxheWVyLT5zZXRMYXllclRyZWVIb3N0KG93bmVyKCkpOwot
Ci0gICAgICAgICAgICBpZiAoIWxheWVyLT5vcGFjaXR5KCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpCi0gICAgICAgICAg
ICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KG93bmVyKCkpOwotICAg
ICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewotICAgICAgICAgICAgICAgIGxh
eWVyLT5yZXBsaWNhTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdChvd25lcigpKTsKLSAgICAgICAg
ICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAg
ICAgICAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJU
cmVlSG9zdChvd25lcigpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxheWVy
LT5ib3VuZHMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgICAgIEludFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBsYXllci0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpID8gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSA6IG1f
ZGVmYXVsdFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBpZiAobGF5
ZXItPnVzZXNMYXllclNjaXNzb3IoKSkKLSAgICAgICAgICAgICAgICB0YXJnZXRTdXJmYWNlUmVj
dC5pbnRlcnNlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOwotICAgICAgICAgICAgSW50UmVjdCB2
aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNl
UmVjdCwgbGF5ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+ZHJh
d1RyYW5zZm9ybSgpKTsKLQotICAgICAgICAgICAgdmlzaWJsZUxheWVyUmVjdC5tb3ZlKHRvU2l6
ZShsYXllci0+c2Nyb2xsUG9zaXRpb24oKSkpOwotICAgICAgICAgICAgcGFpbnRDb250ZW50c0lm
RGlydHkobGF5ZXIsIHZpc2libGVMYXllclJlY3QpOwotCi0gICAgICAgICAgICBpZiAoTGF5ZXJD
aHJvbWl1bSogbWFza0xheWVyID0gbGF5ZXItPm1hc2tMYXllcigpKSB7Ci0gICAgICAgICAgICAg
ICAgcGFpbnRDb250ZW50c0lmRGlydHkobWFza0xheWVyLCBJbnRSZWN0KEludFBvaW50KCksIG1h
c2tMYXllci0+Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSBsYXllci0+cmVwbGljYUxheWVyKCkp
IHsKLSAgICAgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHZp
c2libGVMYXllclJlY3QpOwotCi0gICAgICAgICAgICAgICAgaWYgKExheWVyQ2hyb21pdW0qIHJl
cGxpY2FNYXNrTGF5ZXIgPSByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FNYXNrTGF5ZXIsIEludFJlY3Qo
SW50UG9pbnQoKSwgcmVwbGljYU1hc2tMYXllci0+Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIHsKICAgICBpZiAodmll
d3BvcnRTaXplKCkuaXNFbXB0eSgpIHx8ICFyb290TGF5ZXIoKSkKQEAgLTc0MCw3ICsyOTksNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIAogICAg
IHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
c0ludGVybmFsOjpjYWxjRHJhd0V0YyIsIHRoaXMsIDApOwotICAgICAgICBjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHk8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgQ0NM
YXllclNvcnRlcj4ocm9vdERyYXdMYXllciwgcm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJT
dXJmYWNlLT5sYXllckxpc3QoKSwgJm1fbGF5ZXJTb3J0ZXIsIG1fY2FwYWJpbGl0aWVzLm1heFRl
eHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdERyYXdMYXllciwgcm9vdERyYXdMYXllciwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2Rl
ZmF1bHRSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgJm1fbGF5ZXJTb3J0ZXIsIG1fY2FwYWJp
bGl0aWVzLm1heFRleHR1cmVTaXplKTsKICAgICB9CiAKICAgICAvLyBUaGUgR0wgdmlld3BvcnQg
Y292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMu
CkBAIC04ODMsNDUgKzQ0Miw2IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0xheWVy
VmlzaWJsZShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtCiAgICAgcmV0dXJu
IG1hcHBlZFJlY3QuaW50ZXJzZWN0cyhGbG9hdFJlY3QoLTEsIC0xLCAyLCAyKSk7CiB9CiAKLXZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnN0
IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKLXsKLSAgICBmb3IgKGludCBzdXJm
YWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRl
eCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVy
U3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgp
OwotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJT
dXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZh
Y2UpOwotCi0gICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpIHx8
ICFyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXll
ckxpc3QoKTsKLSAgICAgICAgQVNTRVJUKGxheWVyTGlzdC5zaXplKCkpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsg
KytsYXllckluZGV4KSB7Ci0gICAgICAgICAgICBMYXllckNocm9taXVtKiBsYXllciA9IGxheWVy
TGlzdFtsYXllckluZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyhsYXllcik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21pdW0qIGxheWVyKQot
ewotICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIWxheWVyLT5vcGFjaXR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChs
YXllci0+bWFza0xheWVyKCkpCi0gICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5
ZXItPm1hc2tMYXllcigpKTsKLSAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQotICAgICAg
ICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSk7Ci0KLSAg
ICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcyhjb250ZXh0KCkpOwotfQotCiBNYW5hZ2VkVGV4dHVyZSogTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKQogewogICAgIHJldHVybiBz
ZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbiAmJiByb290TGF5ZXJJbXBsKCkgPyByb290TGF5
ZXJJbXBsKCktPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJlKCkgOiAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA2NzMyMTFkNzNjZjY0MzM5MzRiMDkyYTNm
ODExZjBhN2YyODNmYTVmLi5mMDUyZWQ2OWI5OGY4MGM1M2U2N2I1NGZiM2Q3YWY1YTY4NzIxNGZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTAxLDggKzEwMSw2IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgdmlld3BvcnRDaGFuZ2VkKCk7CiAKLSAgICAvLyB1cGRhdGVz
IGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgotICAgIHZv
aWQgdXBkYXRlTGF5ZXJzKCk7CiAgICAgdm9pZCBkcmF3TGF5ZXJzKCk7CiAKICAgICAvLyB3YWl0
cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaApAQCAtMTUwLDIwICsxNDgsMTUgQEAgcHVibGljOgog
CiAgICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKTsKIAotICAgIHR5cGVkZWYgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IExheWVyTGlzdDsKICAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7CiAKKyAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoaXMgd2hlbiB0aGUgY29udGVudHMgdGV4dHVyZSBtYW5hZ2VyIGhhcyBtb3ZlZCB0byBDQ0xh
eWVyVHJlZUhvc3QuCisgICAgc3RhdGljIHNpemVfdCB0ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0
KCk7CisKIHByaXZhdGU6CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9z
dCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7
CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckNo
cm9taXVtKik7Ci0gICAgdm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cygpOwotCi0gICAgdm9p
ZCBwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0Jik7Ci0gICAgdm9pZCB1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7Ci0gICAgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21pdW0qKTsK
LQogICAgIHZvaWQgZHJhd0xheWVyc0ludGVybmFsKCk7CiAgICAgdm9pZCBkcmF3TGF5ZXIoQ0NM
YXllckltcGwqLCBDQ1JlbmRlclN1cmZhY2UqKTsKIApAQCAtMTk3LDggKzE5MCw2IEBAIHByaXZh
dGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1fd2luZG93TWF0cml4OwogCi0gICAgT3duUHRyPExheWVyTGlz
dD4gbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0KICAgICBDQ1JlbmRlclN1cmZh
Y2UqIG1fY3VycmVudFJlbmRlclN1cmZhY2U7CiAgICAgdW5zaWduZWQgbV9vZmZzY3JlZW5GcmFt
ZWJ1ZmZlcklkOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggOTgzZDRiZTAxNjRkZGQ2
OTZiNDJjN2ZkNDk4YmZjZTcxMTQ0ZTdmNy4uMzAwZjQ3MTMzZWM4YzA0MjI2YTM0ZWUxZDA1MzMx
MjQzNjZlYjJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJTb3J0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IHsKQEAgLTIyMCw2ICsyMjEsMTIgQEAgdm9pZCBDQ0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVy
dGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKICAgICB0cyA8PCBtX2RyYXdU
cmFuc2Zvcm0ubTQxKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTQyKCkgPDwgIiwgIiA8
PCBtX2RyYXdUcmFuc2Zvcm0ubTQzKCkgPDwgIiwgIiA8PCBtX2RyYXdUcmFuc2Zvcm0ubTQ0KCkg
PDwgIlxuIjsKIH0KIAordm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+
ID46Oml0ZXJhdG9yIGZpcnN0LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRv
ciBlbmQsIENDTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVyKQoreworICAgIFRSQUNFX0VWRU5UKCJM
YXllclJlbmRlcmVyQ2hyb21pdW06OnNvcnRMYXllcnMiLCAwLCAwKTsKKyAgICBsYXllclNvcnRl
ci0+c29ydChmaXJzdCwgZW5kKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMWNlZTRkMzJhODBhYzdmM2Y4
ODU5YjBkZmZlZWY5ZDRjNGU0Zjc0Yy4uYzdkYzQ2OTU0N2Y1YzE1ZTdhMzc3ZWY5NTdmZTRmMzg5
NzVmZGMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0zOSw2ICszOSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NMYXllclNvcnRlcjsKIGNsYXNzIExheWVyQ2hyb21p
dW07CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiAKQEAgLTI0Nyw2ICsyNDgsOCBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJl
cjsKIH07CiAKK3ZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+Ojpp
dGVyYXRvciBmaXJzdCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0b3IgZW5k
LCBDQ0xheWVyU29ydGVyKik7CisKIH0KIAogI2VuZGlmIC8vIENDTGF5ZXJJbXBsX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDI5ZWUzODRkYjIyNTE1ZjBmMmVjN2I1YTRm
YmQ1ZThkOGE2NWJkNWIuLmMzYzEzYzg2NDM4ZTYxODdiYjM2N2VlNThhOTk3ZTE3MTExZDRiM2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQu
aCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2lu
Y2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1RocmVhZC5o
IgpAQCAtMTAxLDE4ICsxMDIsMjEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRM
YXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7CiB9
CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpwcmVDb21taXQoQ0NMYXllclRyZWVIb3N0SW1wbCog
aG9zdEltcGwpCi17Ci0gICAgaG9zdEltcGwtPnNldFZpc2libGUobV92aXNpYmxlKTsKLSAgICBo
b3N0SW1wbC0+c2V0Vmlld3BvcnQodmlld3BvcnRTaXplKCkpOwotfQotCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6Y29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiB7CiAgICAg
QVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0Ojpjb21taXRUbyIsIHRoaXMsIDApOwogICAgIGhvc3RJbXBsLT5zZXRTb3VyY2VG
cmFtZU51bWJlcihmcmFtZU51bWJlcigpKTsKIAorICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIo
KS0+cmVkdWNlTWVtb3J5VG9MaW1pdChob3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT50ZXh0dXJl
TWVtb3J5UmVjbGFpbUxpbWl0KCkpOworICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZGVs
ZXRlRXZpY3RlZFRleHR1cmVzKGhvc3RJbXBsLT5jb250ZXh0KCkpOworCisgICAgdXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhtX3VwZGF0ZUxpc3QsIGhvc3RJbXBsLT5jb250ZXh0KCkpOworICAg
IG1fdXBkYXRlTGlzdC5jbGVhcigpOworCisgICAgaG9zdEltcGwtPnNldFZpc2libGUobV92aXNp
YmxlKTsKKyAgICBob3N0SW1wbC0+c2V0Vmlld3BvcnQodmlld3BvcnRTaXplKCkpOworCiAgICAg
Ly8gU3luY2hyb25pemUgdHJlZXMsIGlmIG9uZSBleGlzdHMgYXQgYWxsLi4uCiAgICAgaWYgKHJv
b3RMYXllcigpKQogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6
ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgaG9zdElt
cGwtPnJvb3RMYXllcigpKSk7CkBAIC0yNDQsNCArMjQ4LDE1NyBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6Y29tcG9zaXRlKCkKIH0KICNlbmRpZiAvLyAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKCkKK3sKKyAgICBpZiAoIXJv
b3RMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodmlld3BvcnRTaXplKCkuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB1cGRhdGVMYXllcnMocm9vdExheWVyKCkt
PnBsYXRmb3JtTGF5ZXIoKSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXll
cnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3Q6OnVwZGF0ZUxheWVycyIsIHRoaXMsIDApOworCisgICAgaWYgKCFyb290TGF5ZXIt
PnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CisgICAgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJl
Y3QoSW50UG9pbnQoMCwgMCksIHZpZXdwb3J0U2l6ZSgpKSk7CisKKyAgICBJbnRSZWN0IHJvb3RT
Y2lzc29yUmVjdChJbnRQb2ludCgpLCB2aWV3cG9ydFNpemUoKSk7CisgICAgcm9vdExheWVyLT5z
ZXRTY2lzc29yUmVjdChyb290U2Npc3NvclJlY3QpOworCisgICAgLy8gVGhpcyBhc3NlcnQgZmly
ZXMgaWYgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyB3YXNuJ3QgY2FsbGVkIGFmdGVyCisgICAg
Ly8gdXBkYXRlTGF5ZXJzLiBPbmx5IG9uZSB1cGRhdGUgY2FuIGJlIHBlbmRpbmcgYXQgYW55IGdp
dmVuIHRpbWUuCisgICAgQVNTRVJUKCFtX3VwZGF0ZUxpc3Quc2l6ZSgpKTsKKyAgICBtX3VwZGF0
ZUxpc3QuYXBwZW5kKHJvb3RMYXllcik7CisKKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJv
b3RSZW5kZXJTdXJmYWNlID0gcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdFJl
bmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKKworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdDo6dXBkYXRlTGF5ZXJzOjpjYWxjRHJhd0V0YyIsIHRoaXMsIDApOworICAgICAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShyb290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBt
X3VwZGF0ZUxpc3QsIHJvb3RSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgbGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKyAgICB9CisKKyAgICBwYWludExheWVy
Q29udGVudHMobV91cGRhdGVMaXN0KTsKK30KKworc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lm
RGlydHkoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJl
Y3QpCit7CisgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkgeworICAgICAgICBsYXllci0+
c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKKyAgICAgICAgbGF5ZXItPnBh
aW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCkKK3sKKyAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAg
ICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
IHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAg
ICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOworCisgICAgICAgIHJlbmRlclN1cmZhY2VMYXll
ci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKKworICAgICAgICAvLyBSZW5kZXIgc3VyZmFjZXMg
d2hvc2UgZHJhd2FibGUgYXJlYSBoYXMgemVybyB3aWR0aCBvciBoZWlnaHQKKyAgICAgICAgLy8g
d2lsbCBoYXZlIG5vIGxheWVycyBhc3NvY2lhdGVkIHdpdGggdGhlbSBhbmQgc2hvdWxkIGJlIHNr
aXBwZWQuCisgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5kcmF3
T3BhY2l0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgTGF5ZXJM
aXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKKyAgICAgICAgQVNT
RVJUKGxheWVyTGlzdC5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXgg
PSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAg
ICAgICAgICBMYXllckNocm9taXVtKiBsYXllciA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQo
KTsKKworICAgICAgICAgICAgLy8gTGF5ZXJzIHRoYXQgc3RhcnQgYSBuZXcgcmVuZGVyIHN1cmZh
Y2Ugd2lsbCBiZSBwYWludGVkIHdoZW4gdGhlIHJlbmRlcgorICAgICAgICAgICAgLy8gc3VyZmFj
ZSdzIGxpc3QgaXMgcHJvY2Vzc2VkLgorICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJm
YWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNlKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBsYXllci0+c2V0TGF5ZXJUcmVlSG9z
dCh0aGlzKTsKKworICAgICAgICAgICAgaWYgKCFsYXllci0+b3BhY2l0eSgpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQor
ICAgICAgICAgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlz
KTsKKyAgICAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAgICAg
ICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7CisgICAg
ICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCisgICAg
ICAgICAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldExh
eWVyVHJlZUhvc3QodGhpcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsYXll
ci0+Ym91bmRzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICBJbnRSZWN0IGRlZmF1bHRDb250ZW50UmVjdCA9IEludFJlY3Qocm9vdExheWVyKCkt
PnBsYXRmb3JtTGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKSwgdmlld3BvcnRTaXplKCkpOworCisg
ICAgICAgICAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0gbGF5ZXItPnRhcmdldFJlbmRl
clN1cmZhY2UoKSA/IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkg
OiBkZWZhdWx0Q29udGVudFJlY3Q7CisgICAgICAgICAgICBpZiAobGF5ZXItPnVzZXNMYXllclNj
aXNzb3IoKSkKKyAgICAgICAgICAgICAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNlY3QobGF5
ZXItPnNjaXNzb3JSZWN0KCkpOworICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0
ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KHRhcmdl
dFN1cmZhY2VSZWN0LCBsYXllci0+Ym91bmRzKCksIGxheWVyLT5jb250ZW50Qm91bmRzKCksIGxh
eWVyLT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAgICAgICAgICB2aXNpYmxlTGF5ZXJSZWN0Lm1v
dmUodG9TaXplKGxheWVyLT5zY3JvbGxQb3NpdGlvbigpKSk7CisgICAgICAgICAgICBwYWludENv
bnRlbnRzSWZEaXJ0eShsYXllciwgdmlzaWJsZUxheWVyUmVjdCk7CisKKyAgICAgICAgICAgIGlm
IChMYXllckNocm9taXVtKiBtYXNrTGF5ZXIgPSBsYXllci0+bWFza0xheWVyKCkpCisgICAgICAg
ICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobWFza0xheWVyLCBJbnRSZWN0KEludFBvaW50
KCksIG1hc2tMYXllci0+Y29udGVudEJvdW5kcygpKSk7CisKKyAgICAgICAgICAgIGlmIChMYXll
ckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSBsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAg
ICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHZpc2libGVMYXll
clJlY3QpOworCisgICAgICAgICAgICAgICAgaWYgKExheWVyQ2hyb21pdW0qIHJlcGxpY2FNYXNr
TGF5ZXIgPSByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICAgICAgICAgICAgICBw
YWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTWFza0xheWVyLCBJbnRSZWN0KEludFBvaW50KCks
IHJlcGxpY2FNYXNrTGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJl
bmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1
cmZhY2VJbmRleCkgeworICAgICAgICBMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIg
PSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAgIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+
cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CisKKyAgICAg
ICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkgfHwgIXJlbmRlclN1cmZh
Y2UtPmRyYXdPcGFjaXR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjb25z
dCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOworICAg
ICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgbGF5
ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgp
IHsKKyAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5k
ZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5
ZXItPnJlbmRlclN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNlKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGxheWVyLCBj
b250ZXh0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KQoreworICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWxheWVyLT5vcGFjaXR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpCisgICAgICAgIHVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMobGF5ZXItPm1hc2tMYXllcigpLCBjb250ZXh0KTsKKyAgICBpZiAobGF5
ZXItPnJlcGxpY2FMYXllcigpKQorICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGxh
eWVyLT5yZXBsaWNhTGF5ZXIoKSwgY29udGV4dCk7CisKKyAgICBpZiAobGF5ZXItPmRyYXdzQ29u
dGVudCgpKQorICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0
KTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBjNTIwNDcwNjlkOTNk
MGJjZTUzNDU3OWNkMDQ5ZjVhNjI4MGMzMGFmLi41NmFjZDZjYmIxMWU2YTA3N2M3YzRhNGE0Yjhi
MWM4ZDg4NDhhNzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtOTksNyArOTks
NiBAQCBwdWJsaWM6CiAKICAgICAvLyBDQ0xheWVyVHJlZUhvc3QgaW50ZXJmYWNlIHRvIENDUHJv
eHkuCiAgICAgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0g
ICAgdm9pZCBwcmVDb21taXQoQ0NMYXllclRyZWVIb3N0SW1wbCopOyAvLyBUZW1wb3JhcnkgaGFj
ayB1bnRpbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMgaXMgc3BsaXQgYXBhcnQu
CiAgICAgdm9pZCBjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKik7CiAgICAgUGFzc093blB0
cjxDQ1RocmVhZD4gY3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOwogICAgIFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKQEAgLTE1NSwx
MCArMTU0LDE5IEBAIHB1YmxpYzoKIAogICAgIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCogbm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0KCkgY29uc3QgeyByZXR1cm4gbV9ub25Db21wb3NpdGVkQ29u
dGVudEhvc3QuZ2V0KCk7IH0KIAorICAgIHZvaWQgdXBkYXRlTGF5ZXJzKCk7CisKIHByb3RlY3Rl
ZDoKICAgICBDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgY29uc3QgQ0NT
ZXR0aW5ncyYpOwogCiBwcml2YXRlOgorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IExheWVyTGlzdDsKKworICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0
IExheWVyTGlzdCYpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qKTsKKyAg
ICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29uc3QgTGF5ZXJMaXN0JiwgR3JhcGhp
Y3NDb250ZXh0M0QqKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJD
aHJvbWl1bSosIEdyYXBoaWNzQ29udGV4dDNEKik7CisKICAgICBib29sIGluaXRpYWxpemUoKTsK
IAogICAgIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGVMYXllclJlbmRl
cmVyKCk7CkBAIC0xNzQsNiArMTgyLDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8R3JhcGhpY3NM
YXllcj4gbV9yb290TGF5ZXI7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdD4g
bV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Q7CiAKKyAgICBMYXllckxpc3QgbV91cGRhdGVMaXN0
OworCiAgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwogCiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0
U2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmFkNDU5ODVmMWJmY2Y5M2M2ZGUwMzYzYjQzMDhlNGY3ZWU3NzM1OTEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5oIgorCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0u
aCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgorI2luY2x1ZGUgImNjL0ND
UmVuZGVyU3VyZmFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFJlY3QgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJn
ZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgLy8gSXMgdGhpcyBsYXllciBmdWxs
eSBjb250YWluZWQgd2l0aGluIHRoZSB0YXJnZXQgc3VyZmFjZT8KKyAgICBJbnRSZWN0IGxheWVy
SW5TdXJmYWNlU3BhY2UgPSB0cmFuc2Zvcm0ubWFwUmVjdChsYXllckJvdW5kUmVjdCk7CisgICAg
aWYgKHRhcmdldFN1cmZhY2VSZWN0LmNvbnRhaW5zKGxheWVySW5TdXJmYWNlU3BhY2UpKQorICAg
ICAgICByZXR1cm4gbGF5ZXJCb3VuZFJlY3Q7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgZG9lc24n
dCBmaWxsIHVwIHRoZSBlbnRpcmUgc3VyZmFjZSwgdGhlbiBmaW5kIHRoZSBwYXJ0IG9mCisgICAg
Ly8gdGhlIHN1cmZhY2UgcmVjdCB3aGVyZSB0aGUgbGF5ZXIgY291bGQgYmUgdmlzaWJsZS4gVGhp
cyBhdm9pZHMgdHJ5aW5nIHRvCisgICAgLy8gcHJvamVjdCBzdXJmYWNlIHJlY3QgcG9pbnRzIHRo
YXQgYXJlIGJlaGluZCB0aGUgcHJvamVjdGlvbiBwb2ludC4KKyAgICBJbnRSZWN0IG1pbmltYWxT
dXJmYWNlUmVjdCA9IHRhcmdldFN1cmZhY2VSZWN0OworICAgIG1pbmltYWxTdXJmYWNlUmVjdC5p
bnRlcnNlY3QobGF5ZXJJblN1cmZhY2VTcGFjZSk7CisKKyAgICAvLyBQcm9qZWN0IHRoZSBjb3Ju
ZXJzIG9mIHRoZSB0YXJnZXQgc3VyZmFjZSByZWN0IGludG8gdGhlIGxheWVyIHNwYWNlLgorICAg
IC8vIFRoaXMgYm91bmRpbmcgcmVjdGFuZ2xlIG1heSBiZSBsYXJnZXIgdGhhbiBpdCBuZWVkcyB0
byBiZSAoYmVpbmcKKyAgICAvLyBheGlzLWFsaWduZWQpLCBidXQgaXMgYSByZWFzb25hYmxlIGZp
bHRlciBvbiB0aGUgc3BhY2UgdG8gY29uc2lkZXIuCisgICAgLy8gTm9uLWludmVydGlibGUgdHJh
bnNmb3JtcyB3aWxsIGNyZWF0ZSBhbiBlbXB0eSByZWN0IGhlcmUuCisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggc3VyZmFjZVRvTGF5ZXIgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOworICAg
IEludFJlY3QgbGF5ZXJSZWN0ID0gc3VyZmFjZVRvTGF5ZXIucHJvamVjdFF1YWQoRmxvYXRRdWFk
KEZsb2F0UmVjdChtaW5pbWFsU3VyZmFjZVJlY3QpKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
KyAgICBsYXllclJlY3QuaW50ZXJzZWN0KGxheWVyQm91bmRSZWN0KTsKKyAgICByZXR1cm4gbGF5
ZXJSZWN0OworfQorCitJbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlz
aWJsZUxheWVyUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50
U2l6ZSYgYm91bmRzLCBjb25zdCBJbnRTaXplJiBjb250ZW50Qm91bmRzLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdGlsaW5nVHJhbnNmb3JtKQoreworICAgIGlmICh0YXJnZXRTdXJmYWNl
UmVjdC5pc0VtcHR5KCkgfHwgY29udGVudEJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB0YXJnZXRTdXJmYWNlUmVjdDsKKworICAgIGNvbnN0IEludFJlY3QgbGF5ZXJCb3VuZFJlY3Qg
PSBJbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMpOworICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRyYW5zZm9ybSA9IHRpbGluZ1RyYW5zZm9ybTsKKworICAgIHRyYW5zZm9ybS5zY2Fs
ZU5vblVuaWZvcm0oYm91bmRzLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRC
b3VuZHMud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMuaGVp
Z2h0KCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkpKTsKKyAg
ICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250
ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKworICAgIHJldHVybiBjYWxjdWxhdGVWaXNpYmxl
UmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5ZXJCb3VuZFJlY3QsIHRyYW5zZm9ybSk7Cit9CisK
K3N0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtKQoreworICAgIHJldHVybiAhbS5tMTIoKSAmJiAhbS5tMTMoKSAmJiAhbS5tMTQoKQor
ICAgICAgICAgICAmJiAhbS5tMjEoKSAmJiAhbS5tMjMoKSAmJiAhbS5tMjQoKQorICAgICAgICAg
ICAmJiAhbS5tMzEoKSAmJiAhbS5tMzIoKSAmJiAhbS5tNDMoKQorICAgICAgICAgICAmJiBtLm00
NCgpOworCit9CisKKy8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0YXJ0aW5n
IGF0IHRoZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCisvLyBuZWNlc3NhcnkgdHJh
bnNmb3JtYXRpb25zLCBzY2lzc29yIHJlY3RhbmdsZXMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgor
dGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwg
dHlwZW5hbWUgTGF5ZXJTb3J0ZXI+CitzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RM
YXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5
ZXJUeXBlPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExheWVyVHlw
ZT4gPiYgbGF5ZXJMaXN0LCBMYXllclNvcnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJl
U2l6ZSkKK3sKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+IExheWVyTGlz
dDsKKyAgICAvLyBDb21wdXRlIHRoZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9uIHRoYXQgd2ls
bCBiZSBhcHBsaWVkIHRvIHRoaXMgbGF5ZXIgYW5kCisgICAgLy8gYWxsIGl0cyBjaGlsZHJlbi4g
SXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgbGF5ZXIncyBwb3NpdGlvbgorICAg
IC8vIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIncyBhbmNob3IgcG9pbnQuIEFsc28sIHRo
ZSBjb29yZGluYXRlIHN5c3RlbSB1c2VkCisgICAgLy8gYXNzdW1lcyB0aGF0IHRoZSBvcmlnaW4g
aXMgYXQgdGhlIGxvd2VyIGxlZnQgZXZlbiB0aG91Z2ggdGhlIGNvb3JkaW5hdGVzIHRoZSBicm93
c2VyCisgICAgLy8gZ2l2ZXMgdXMgZm9yIHRoZSBsYXllcnMgYXJlIGZvciB0aGUgdXBwZXIgbGVm
dCBjb3JuZXIuIFRoZSBZIGZsaXAgaGFwcGVucyB2aWEKKyAgICAvLyB0aGUgb3J0aG9ncmFwaGlj
IHByb2plY3Rpb24gYXBwbGllZCBhdCByZW5kZXIgdGltZS4KKyAgICAvLyBUaGUgdHJhbnNmb3Jt
YXRpb24gY2hhaW4gZm9yIHRoZSBsYXllciBpcyAodXNpbmcgdGhlIE1hdHJpeCB4IFZlY3RvciBv
cmRlcik6CisgICAgLy8gTSA9IE1bcF0gKiBUcltsXSAqIE1bbF0gKiBUcltjXQorICAgIC8vIFdo
ZXJlIE1bcF0gaXMgdGhlIHBhcmVudCBtYXRyaXggcGFzc2VkIGRvd24gdG8gdGhlIGZ1bmN0aW9u
CisgICAgLy8gICAgICAgVHJbbF0gaXMgdGhlIHRyYW5zbGF0aW9uIG1hdHJpeCBsb2NhdGluZyB0
aGUgbGF5ZXIncyBhbmNob3IgcG9pbnQKKyAgICAvLyAgICAgICBUcltjXSBpcyB0aGUgdHJhbnNs
YXRpb24gb2Zmc2V0IGJldHdlZW4gdGhlIGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0
aGUgbGF5ZXIKKyAgICAvLyAgICAgICBNW2xdIGlzIHRoZSBsYXllcidzIG1hdHJpeCAoYXBwbGll
ZCBhdCB0aGUgYW5jaG9yIHBvaW50KQorICAgIC8vIFRoaXMgdHJhbnNmb3JtIGNyZWF0ZXMgYSBj
b29yZGluYXRlIHN5c3RlbSB3aG9zZSBvcmlnaW4gaXMgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIu
CisgICAgLy8gTm90ZSB0aGF0IHRoZSBmaW5hbCBtYXRyaXggdXNlZCBieSB0aGUgc2hhZGVyIGZv
ciB0aGUgbGF5ZXIgaXMgUCAqIE0gKiBTIC4gVGhpcyBmaW5hbCBwcm9kdWN0CisgICAgLy8gaXMg
Y29tcHV0ZWQgaW4gZHJhd1RleHR1cmVkUXVhZCgpLgorICAgIC8vIFdoZXJlOiBQIGlzIHRoZSBw
cm9qZWN0aW9uIG1hdHJpeAorICAgIC8vICAgICAgICBNIGlzIHRoZSBsYXllcidzIG1hdHJpeCBj
b21wdXRlZCBhYm92ZQorICAgIC8vICAgICAgICBTIGlzIHRoZSBzY2FsZSBhZGp1c3RtZW50ICh0
byBzY2FsZSB1cCB0byB0aGUgbGF5ZXIgc2l6ZSkKKyAgICBJbnRTaXplIGJvdW5kcyA9IGxheWVy
LT5ib3VuZHMoKTsKKyAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50ID0gbGF5ZXItPmFuY2hvclBv
aW50KCk7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGxheWVyLT5wb3NpdGlvbigpOworCisg
ICAgLy8gT2Zmc2V0IGJldHdlZW4gYW5jaG9yIHBvaW50IGFuZCB0aGUgY2VudGVyIG9mIHRoZSBx
dWFkLgorICAgIGZsb2F0IGNlbnRlck9mZnNldFggPSAoMC41IC0gYW5jaG9yUG9pbnQueCgpKSAq
IGJvdW5kcy53aWR0aCgpOworICAgIGZsb2F0IGNlbnRlck9mZnNldFkgPSAoMC41IC0gYW5jaG9y
UG9pbnQueSgpKSAqIGJvdW5kcy5oZWlnaHQoKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGxheWVyTG9jYWxUcmFuc2Zvcm07CisgICAgLy8gTFQgPSBUcltsXQorICAgIGxheWVyTG9jYWxU
cmFuc2Zvcm0udHJhbnNsYXRlM2QocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCksIGxheWVyLT5h
bmNob3JQb2ludFooKSk7CisgICAgLy8gTFQgPSBUcltsXSAqIE1bbF0KKyAgICBsYXllckxvY2Fs
VHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT50cmFuc2Zvcm0oKSk7CisgICAgLy8gTFQgPSBUclts
XSAqIE1bbF0gKiBUcltjXQorICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2Vu
dGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQb2ludFooKSk7CisKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJpeDsK
KyAgICBjb21iaW5lZFRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtLm11bHRpcGx5KGxheWVy
TG9jYWxUcmFuc2Zvcm0pOworCisgICAgRmxvYXRSZWN0IGxheWVyUmVjdCgtMC41ICogbGF5ZXIt
PmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCksIGxheWVy
LT5ib3VuZHMoKS53aWR0aCgpLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOworICAgIEludFJl
Y3QgdHJhbnNmb3JtZWRMYXllclJlY3Q7CisKKyAgICAvLyBmdWxsSGllcmFyY2h5TWF0cml4IGlz
IHRoZSBtYXRyaXggdGhhdCB0cmFuc2Zvcm1zIG9iamVjdHMgYmV0d2VlbiBzY3JlZW4gc3BhY2Ug
KGV4Y2VwdCBwcm9qZWN0aW9uIG1hdHJpeCkgYW5kIHRoZSBtb3N0IHJlY2VudCBSZW5kZXJTdXJm
YWNlJ3Mgc3BhY2UuCisgICAgLy8gbmV4dEhpZXJhcmNoeU1hdHJpeCB3aWxsIG9ubHkgY2hhbmdl
IGlmIHRoaXMgbGF5ZXIgdXNlcyBhIG5ldyBSZW5kZXJTdXJmYWNlLCBvdGhlcndpc2UgcmVtYWlu
cyB0aGUgc2FtZS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBuZXh0SGllcmFyY2h5TWF0cml4
ID0gZnVsbEhpZXJhcmNoeU1hdHJpeDsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIGxpa2Ug
dGhlIHdyb25nIHBsYWNlIHRvIHNldCB0aGlzCisgICAgbGF5ZXItPnNldFVzZXNMYXllclNjaXNz
b3IoZmFsc2UpOworCisgICAgLy8gVGhlIGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMgcmVuZGVy
IG9uIGEgbmV3IFJlbmRlclN1cmZhY2UgaWYgYW55IG9mCisgICAgLy8gdGhlc2UgY29uZGl0aW9u
cyBob2xkOgorICAgIC8vIDEuIFRoZSBsYXllciBjbGlwcyBpdHMgZGVzY2VuZGFudHMgYW5kIGl0
cyB0cmFuc2Zvcm0gaXMgbm90IGEgc2ltcGxlIHRyYW5zbGF0aW9uLgorICAgIC8vIDIuIElmIHRo
ZSBsYXllciBoYXMgb3BhY2l0eSAhPSAxIGFuZCBkb2VzIG5vdCBoYXZlIGEgcHJlc2VydmVzLTNk
IHRyYW5zZm9ybSBzdHlsZS4KKyAgICAvLyAzLiBUaGUgbGF5ZXIgdXNlcyBhIG1hc2sKKyAgICAv
LyA0LiBUaGUgbGF5ZXIgaGFzIGEgcmVwbGljYSAodXNlZCBmb3IgcmVmbGVjdGlvbnMpCisgICAg
Ly8gNS4gVGhlIGxheWVyIGRvZXNuJ3QgcHJlc2VydmUtM2QgYnV0IGlzIHRoZSBjaGlsZCBvZiBh
IGxheWVyIHdoaWNoIGRvZXMuCisgICAgLy8gSWYgYSBsYXllciBwcmVzZXJ2ZXMtM2QgdGhlbiB3
ZSBkb24ndCBjcmVhdGUgYSBSZW5kZXJTdXJmYWNlIGZvciBpdCB0byBhdm9pZCBmbGF0dGVuaW5n
CisgICAgLy8gb3V0IGl0cyBjaGlsZHJlbi4gVGhlIG9wYWNpdHkgdmFsdWUgb2YgdGhlIGNoaWxk
cmVuIGxheWVycyBpcyBtdWx0aXBsaWVkIGJ5IHRoZSBvcGFjaXR5CisgICAgLy8gb2YgdGhlaXIg
cGFyZW50LgorICAgIGJvb2wgdXNlU3VyZmFjZUZvckNsaXBwaW5nID0gbGF5ZXItPm1hc2tzVG9C
b3VuZHMoKSAmJiAhaXNTY2FsZU9yVHJhbnNsYXRpb24oY29tYmluZWRUcmFuc2Zvcm0pOworICAg
IGJvb2wgdXNlU3VyZmFjZUZvck9wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpICE9IDEgJiYgIWxh
eWVyLT5wcmVzZXJ2ZXMzRCgpOworICAgIGJvb2wgdXNlU3VyZmFjZUZvck1hc2tpbmcgPSBsYXll
ci0+bWFza0xheWVyKCk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGxheWVy
LT5yZXBsaWNhTGF5ZXIoKTsKKyAgICBib29sIHVzZVN1cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMg
PSBsYXllci0+cGFyZW50KCkgJiYgbGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpICYmICFs
YXllci0+cHJlc2VydmVzM0QoKSAmJiBsYXllci0+ZGVzY2VuZGFudERyYXdzQ29udGVudCgpOwor
ICAgIGlmICh1c2VTdXJmYWNlRm9yTWFza2luZyB8fCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiB8
fCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzIHx8ICgodXNlU3VyZmFjZUZvckNsaXBwaW5n
IHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBsYXllci0+ZGVzY2VuZGFudERyYXdzQ29udGVu
dCgpKSkgeworICAgICAgICBpZiAoIWxheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgICAg
ICBsYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgICAgICBSZW5kZXJTdXJmYWNlVHlw
ZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisKKyAgICAgICAgLy8g
VGhlIG9yaWdpbiBvZiB0aGUgbmV3IHN1cmZhY2UgaXMgdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9m
IHRoZSBsYXllci4KKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybTsK
KyAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZCgwLjUgKiBib3VuZHMud2lkdGgoKSwg
MC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdUcmFuc2Zv
cm0oZHJhd1RyYW5zZm9ybSk7CisKKyAgICAgICAgdHJhbnNmb3JtZWRMYXllclJlY3QgPSBJbnRS
ZWN0KDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOworCisgICAgICAgIC8v
IExheWVyJ3Mgb3BhY2l0eSB3aWxsIGJlIGFwcGxpZWQgd2hlbiBkcmF3aW5nIHRoZSByZW5kZXIg
c3VyZmFjZS4KKyAgICAgICAgZmxvYXQgZHJhd09wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpOwor
ICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpICYmIGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVz
M0QoKSkKKyAgICAgICAgICAgIGRyYXdPcGFjaXR5ICo9IGxheWVyLT5wYXJlbnQoKS0+ZHJhd09w
YWNpdHkoKTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0RHJhd09wYWNpdHkoZHJhd09wYWNp
dHkpOworICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7CisKKyAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybTsK
KyAgICAgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcy53
aWR0aCgpLCAtMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKKyAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+c2V0T3JpZ2luVHJhbnNmb3JtKGxheWVyT3JpZ2luVHJhbnNmb3JtKTsKKworICAgICAgICAv
LyBVcGRhdGUgdGhlIGFnZ3JlZ2F0ZSBoaWVyYXJjaHkgbWF0cml4IHRvIGluY2x1ZGUgdGhlIHRy
YW5zZm9ybSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBSZW5kZXJTdXJmYWNlLgorICAgICAgICBuZXh0
SGllcmFyY2h5TWF0cml4Lm11bHRpcGx5KGxheWVyT3JpZ2luVHJhbnNmb3JtKTsKKworICAgICAg
ICAvLyBUaGUgcmVuZGVyIHN1cmZhY2Ugc2Npc3NvciByZWN0IGlzIHRoZSBzY2lzc29yIHJlY3Qg
dGhhdCBuZWVkcyB0bworICAgICAgICAvLyBiZSBhcHBsaWVkIGJlZm9yZSBkcmF3aW5nIHRoZSBy
ZW5kZXIgc3VyZmFjZSBvbnRvIGl0cyBjb250YWluaW5nCisgICAgICAgIC8vIHN1cmZhY2UgYW5k
IGlzIHRoZXJlZm9yZSBleHByZXNzZWQgaW4gdGhlIHBhcmVudCdzIGNvb3JkaW5hdGUgc3lzdGVt
LgorICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTY2lzc29yUmVjdChsYXllci0+cGFyZW50KCkg
PyBsYXllci0+cGFyZW50KCktPnNjaXNzb3JSZWN0KCkgOiBsYXllci0+c2Npc3NvclJlY3QoKSk7
CisKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+Y2xlYXJMYXllckxpc3QoKTsKKworICAgICAgICBp
ZiAobGF5ZXItPm1hc2tMYXllcigpKSB7CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRN
YXNrTGF5ZXIobGF5ZXItPm1hc2tMYXllcigpKTsKKyAgICAgICAgICAgIGxheWVyLT5tYXNrTGF5
ZXIoKS0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRNYXNrTGF5ZXIoMCk7CisKKyAgICAg
ICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPm1h
c2tMYXllcigpKQorICAgICAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIo
KS0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKKworICAgICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChsYXllcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gRFQgPSBNW3BdICogTFQKKyAgICAgICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oY29tYmlu
ZWRUcmFuc2Zvcm0pOworICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QobGF5ZXItPmRyYXdUcmFuc2Zvcm0oKS5tYXBSZWN0KGxheWVyUmVjdCkpOworCisgICAg
ICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eShsYXllci0+b3BhY2l0eSgpKTsKKworICAgICAgICBp
ZiAobGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpLT5w
cmVzZXJ2ZXMzRCgpKQorICAgICAgICAgICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KGxheWVy
LT5kcmF3T3BhY2l0eSgpICogbGF5ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0eSgpKTsKKworICAg
ICAgICAgICAgLy8gTGF5ZXJzIGluaGVyaXQgdGhlIHNjaXNzb3IgcmVjdCBmcm9tIHRoZWlyIHBh
cmVudC4KKyAgICAgICAgICAgIGxheWVyLT5zZXRTY2lzc29yUmVjdChsYXllci0+cGFyZW50KCkt
PnNjaXNzb3JSZWN0KCkpOworICAgICAgICAgICAgaWYgKGxheWVyLT5wYXJlbnQoKS0+dXNlc0xh
eWVyU2Npc3NvcigpKQorICAgICAgICAgICAgICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJTY2lzc29y
KHRydWUpOworCisgICAgICAgICAgICBsYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXll
ci0+cGFyZW50KCktPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobGF5ZXIgIT0gcm9vdExheWVyKQorICAgICAgICAgICAgbGF5ZXItPmNsZWFyUmVuZGVy
U3VyZmFjZSgpOworCisgICAgICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKSB7CisgICAg
ICAgICAgICBJbnRSZWN0IHNjaXNzb3IgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsKKyAgICAgICAg
ICAgIHNjaXNzb3IuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKKyAgICAgICAgICAg
IGxheWVyLT5zZXRTY2lzc29yUmVjdChzY2lzc29yKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRV
c2VzTGF5ZXJTY2lzc29yKHRydWUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm90ZSB0
aGF0IGF0IHRoaXMgcG9pbnQsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkgaXMgbm90IG5lY2Vzc2Fy
aWx5IHRoZSBzYW1lIGFzIGxvY2FsIHZhcmlhYmxlIGRyYXdUcmFuc2Zvcm0uCisgICAgLy8gbGF5
ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSByZXByZXNlbnRzIHRoZSB0cmFuc2Zvcm0gYmV0d2VlbiBs
YXllciBzcGFjZSAoaW4gcGl4ZWxzKSBhbmQgc2NyZWVuIHNwYWNlLgorICAgIC8vIFNvIHdlIGRv
IG5vdCBpbmNsdWRlIHByb2plY3Rpb24gUCBvciBzY2FsaW5nIHRyYW5zZm9ybSBTIChzZWUgY29t
bWVudHMgYWJvdmUgdGhhdCBkZXNjcmliZSBQKk0qUykuCisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IG5leHRIaWVyYXJjaHlNYXRyaXg7CisgICAg
bGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybS5tdWx0aXBseShsYXllci0+ZHJhd1RyYW5zZm9ybSgp
KTsKKyAgICBsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC0wLjUgKiBib3Vu
ZHMud2lkdGgoKSwgLTAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7CisgICAgbGF5ZXItPnNldFNj
cmVlblNwYWNlVHJhbnNmb3JtKGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0pOworCisgICAgaWYg
KGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJT
dXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIGVsc2UgeworICAgICAgICBBU1NF
UlQobGF5ZXItPnBhcmVudCgpKTsKKyAgICAgICAgbGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZh
Y2UobGF5ZXItPnBhcmVudCgpLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworICAgIH0KKworICAg
IC8vIGRyYXdhYmxlQ29udGVudFJlY3QoKSBpcyBhbHdheXMgc3RvcmVkIGluIHRoZSBjb29yZGlu
YXRlIHN5c3RlbSBvZiB0aGUKKyAgICAvLyBSZW5kZXJTdXJmYWNlIHRoZSBsYXllciBkcmF3cyBp
bnRvLgorICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgSW50UmVjdCBk
cmF3YWJsZUNvbnRlbnRSZWN0ID0gdHJhbnNmb3JtZWRMYXllclJlY3Q7CisgICAgICAgIGlmIChs
YXllci0+dXNlc0xheWVyU2Npc3NvcigpKQorICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVj
dC5pbnRlcnNlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOworICAgICAgICBsYXllci0+c2V0RHJh
d2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCgpKTsKKworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0cml4ID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsK
KworICAgIC8vIEZsYXR0ZW4gdG8gMkQgaWYgdGhlIGxheWVyIGRvZXNuJ3QgcHJlc2VydmUgM0Qu
CisgICAgaWYgKCFsYXllci0+cHJlc2VydmVzM0QoKSkgeworICAgICAgICBzdWJsYXllck1hdHJp
eC5zZXRNMTMoMCk7CisgICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0yMygwKTsKKyAgICAgICAg
c3VibGF5ZXJNYXRyaXguc2V0TTMxKDApOworICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzIo
MCk7CisgICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0zMygxKTsKKyAgICAgICAgc3VibGF5ZXJN
YXRyaXguc2V0TTM0KDApOworICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNNDMoMCk7CisgICAg
fQorCisgICAgLy8gQXBwbHkgdGhlIHN1YmxheWVyIHRyYW5zZm9ybSBhdCB0aGUgY2VudGVyIG9m
IHRoZSBsYXllci4KKyAgICBzdWJsYXllck1hdHJpeC5tdWx0aXBseShsYXllci0+c3VibGF5ZXJU
cmFuc2Zvcm0oKSk7CisKKyAgICAvLyBUaGUgb3JpZ2luIG9mIHRoZSBjaGlsZHJlbiBpcyB0aGUg
dG9wIGxlZnQgY29ybmVyIG9mIHRoZSBsYXllciwgbm90IHRoZQorICAgIC8vIGNlbnRlci4gVGhl
IG1hdHJpeCBwYXNzZWQgZG93biB0byB0aGUgY2hpbGRyZW4gaXMgdGhlcmVmb3JlOgorICAgIC8v
IE1bc10gPSBNICogVHJbLWNlbnRlcl0KKyAgICBzdWJsYXllck1hdHJpeC50cmFuc2xhdGUzZCgt
Ym91bmRzLndpZHRoKCkgKiAwLjUsIC1ib3VuZHMuaGVpZ2h0KCkgKiAwLjUsIDApOworCisgICAg
TGF5ZXJMaXN0JiBkZXNjZW5kYW50cyA9IChsYXllci0+cmVuZGVyU3VyZmFjZSgpID8gbGF5ZXIt
PnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkgOiBsYXllckxpc3QpOworICAgIGRlc2NlbmRh
bnRzLmFwcGVuZChsYXllcik7CisKKyAgICB1bnNpZ25lZCB0aGlzTGF5ZXJJbmRleCA9IGRlc2Nl
bmRhbnRzLnNpemUoKSAtIDE7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyLT5j
aGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIExheWVyVHlwZSogY2hpbGQgPSBsYXll
ci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKKyAgICAgICAgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5SW50ZXJuYWw8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJT
b3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1YmxheWVyTWF0cml4LCBuZXh0SGllcmFyY2h5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cywgbGF5ZXJTb3J0ZXIsIG1h
eFRleHR1cmVTaXplKTsKKworICAgICAgICBpZiAoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSkgewor
ICAgICAgICAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIGNoaWxkUmVuZGVyU3VyZmFjZSA9IGNoaWxk
LT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJl
Y3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOworICAgICAgICAgICAgZHJhd2FibGVD
b250ZW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGNoaWxkUmVuZGVyU3VyZmFjZS0+ZHJh
d2FibGVDb250ZW50UmVjdCgpKSk7CisgICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250
ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAgICAgICAgIGRlc2NlbmRhbnRzLmFw
cGVuZChjaGlsZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbnRSZWN0IGRyYXdh
YmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOworICAgICAgICAg
ICAgZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShjaGlsZC0+ZHJhd2FibGVDb250ZW50UmVjdCgp
KTsKKyAgICAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29u
dGVudFJlY3QpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxheWVyLT5tYXNrc1RvQm91
bmRzKCkgfHwgdXNlU3VyZmFjZUZvck1hc2tpbmcpIHsKKyAgICAgICAgSW50UmVjdCBkcmF3YWJs
ZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAgZHJh
d2FibGVDb250ZW50UmVjdC5pbnRlcnNlY3QodHJhbnNmb3JtZWRMYXllclJlY3QpOworICAgICAg
ICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAg
ICB9CisKKyAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllciAhPSByb290TGF5
ZXIpIHsKKyAgICAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIHJlbmRlclN1cmZhY2UgPSBsYXllci0+
cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBJbnRSZWN0IGNsaXBwZWRDb250ZW50UmVjdCA9IGxh
eWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgIEZsb2F0UG9pbnQgc3VyZmFjZUNl
bnRlciA9IEZsb2F0UmVjdChjbGlwcGVkQ29udGVudFJlY3QpLmNlbnRlcigpOworCisgICAgICAg
IC8vIFJlc3RyaWN0IHRoZSBSZW5kZXJTdXJmYWNlIHNpemUgdG8gdGhlIHBvcnRpb24gdGhhdCdz
IHZpc2libGUuCisgICAgICAgIEZsb2F0U2l6ZSBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nOwor
CisgICAgICAgIC8vIERvbid0IGNsaXAgaWYgdGhlIGxheWVyIGlzIHJlZmxlY3RlZCBhcyB0aGUg
cmVmbGVjdGlvbiBzaG91bGRuJ3QgYmUKKyAgICAgICAgLy8gY2xpcHBlZC4KKyAgICAgICAgaWYg
KCFsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmICghcmVuZGVyU3VyZmFj
ZS0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkgJiYgIWNsaXBwZWRDb250ZW50UmVjdC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHN1cmZhY2VTY2lzc29yUmVjdCA9IENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZVJlY3QocmVuZGVyU3VyZmFjZS0+c2Np
c3NvclJlY3QoKSwgY2xpcHBlZENvbnRlbnRSZWN0LCByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFu
c2Zvcm0oKSk7CisgICAgICAgICAgICAgICAgY2xpcHBlZENvbnRlbnRSZWN0LmludGVyc2VjdChz
dXJmYWNlU2Npc3NvclJlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRmxvYXRQb2lu
dCBjbGlwcGVkU3VyZmFjZUNlbnRlciA9IEZsb2F0UmVjdChjbGlwcGVkQ29udGVudFJlY3QpLmNl
bnRlcigpOworICAgICAgICAgICAgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZyA9IGNsaXBwZWRT
dXJmYWNlQ2VudGVyIC0gc3VyZmFjZUNlbnRlcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRo
ZSBSZW5kZXJTdXJmYWNlIGJhY2tpbmcgdGV4dHVyZSBjYW5ub3QgZXhjZWVkIHRoZSBtYXhpbXVt
IHN1cHBvcnRlZAorICAgICAgICAvLyB0ZXh0dXJlIHNpemUuCisgICAgICAgIGNsaXBwZWRDb250
ZW50UmVjdC5zZXRXaWR0aChzdGQ6Om1pbihjbGlwcGVkQ29udGVudFJlY3Qud2lkdGgoKSwgbWF4
VGV4dHVyZVNpemUpKTsKKyAgICAgICAgY2xpcHBlZENvbnRlbnRSZWN0LnNldEhlaWdodChzdGQ6
Om1pbihjbGlwcGVkQ29udGVudFJlY3QuaGVpZ2h0KCksIG1heFRleHR1cmVTaXplKSk7CisKKyAg
ICAgICAgaWYgKGNsaXBwZWRDb250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZW5k
ZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgpOworCisgICAgICAgIHJlbmRlclN1cmZhY2UtPnNl
dENvbnRlbnRSZWN0KGNsaXBwZWRDb250ZW50UmVjdCk7CisKKyAgICAgICAgLy8gU2luY2UgdGhl
IGxheWVyIHN0YXJ0cyBhIG5ldyByZW5kZXIgc3VyZmFjZSB3ZSBuZWVkIHRvIGFkanVzdCBpdHMK
KyAgICAgICAgLy8gc2Npc3NvciByZWN0IHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbmV3IHN1cmZh
Y2UncyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICAgICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KGxh
eWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOworCisgICAgICAgIC8vIEFkanVzdCB0aGUgb3Jp
Z2luIG9mIHRoZSB0cmFuc2Zvcm0gdG8gYmUgdGhlIGNlbnRlciBvZiB0aGUgcmVuZGVyIHN1cmZh
Y2UuCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm0gPSByZW5kZXJT
dXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xh
dGUzZChzdXJmYWNlQ2VudGVyLngoKSArIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcud2lkdGgo
KSwgc3VyZmFjZUNlbnRlci55KCkgKyBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nLmhlaWdodCgp
LCAwKTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNm
b3JtKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdXNl
ZCB0byBkcmF3IHRoZSByZXBsaWNhIG9mIHRoZSByZW5kZXIKKyAgICAgICAgLy8gc3VyZmFjZS4K
KyAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgeworICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggcmVwbGljYURyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmln
aW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIHJlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5zbGF0
ZTNkKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCksIGxheWVyLT5yZXBsaWNh
TGF5ZXIoKS0+cG9zaXRpb24oKS55KCksIDApOworICAgICAgICAgICAgcmVwbGljYURyYXdUcmFu
c2Zvcm0ubXVsdGlwbHkobGF5ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7CisgICAg
ICAgICAgICByZXBsaWNhRHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChzdXJmYWNlQ2VudGVyLngo
KSAtIGFuY2hvclBvaW50LngoKSAqIGJvdW5kcy53aWR0aCgpLCBzdXJmYWNlQ2VudGVyLnkoKSAt
IGFuY2hvclBvaW50LnkoKSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7CisgICAgICAgICAgICByZW5k
ZXJTdXJmYWNlLT5zZXRSZXBsaWNhRHJhd1RyYW5zZm9ybShyZXBsaWNhRHJhd1RyYW5zZm9ybSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiBwcmVzZXJ2ZXMtM2QgdGhlbiBzb3J0IGFs
bCB0aGUgZGVzY2VuZGFudHMgaW4gM0Qgc28gdGhhdCB0aGV5IGNhbiBiZQorICAgIC8vIGRyYXdu
IGZyb20gYmFjayB0byBmcm9udC4gSWYgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNv
IHNldCBvbiB0aGUgcGFyZW50IHRoZW4KKyAgICAvLyBza2lwIHRoZSBzb3J0aW5nIGFzIHRoZSBw
YXJlbnQgd2lsbCBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5LgorICAgIGlmIChsYXll
ci0+cHJlc2VydmVzM0QoKSAmJiAoIWxheWVyLT5wYXJlbnQoKSB8fCAhbGF5ZXItPnBhcmVudCgp
LT5wcmVzZXJ2ZXMzRCgpKSkKKyAgICAgICAgc29ydExheWVycygmZGVzY2VuZGFudHMuYXQodGhp
c0xheWVySW5kZXgpLCBkZXNjZW5kYW50cy5lbmQoKSwgbGF5ZXJTb3J0ZXIpOworfQorCit2b2lk
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBMYXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6
OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsPExheWVyQ2hyb21p
dW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgdm9pZCo+KGxheWVyLCByb290TGF5ZXIsIHBhcmVu
dE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5
ZXJMaXN0LCAwLCBtYXhUZXh0dXJlU2l6ZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIGxh
eWVyLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1h
dHJpeCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVy
KiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXplKQoreworICAgIHJldHVybiBjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbDxDQ0xheWVySW1wbCwgQ0NSZW5k
ZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVyPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgs
IGZ1bGxIaWVyYXJjaHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwg
bGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTZk
MGE3Zjg3NTZjNTYyNjg0ZGU3MDBkOTRiYzYyN2UwY2E4ODgyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xh
eWVyVHJlZUhvc3RDb21tb25faAorI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RDb21tb25faAorCisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVySW1wbDsKK2NsYXNzIENDTGF5ZXJTb3J0ZXI7
CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIExheWVyQ2hyb21pdW07Citj
bGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbW9u
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0
KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0LCBjb25zdCBJbnRTaXplJiBib3VuZHMs
IGNvbnN0IEludFNpemUmIGNvbnRlbnRCb3VuZHMsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0aWxpbmdUcmFuc2Zvcm0pOworICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVS
ZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXll
ckJvdW5kUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKworICAgIHN0YXRpYyB2
b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiwg
TGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFy
ZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJp
eCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1
cmVTaXplKTsKKworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShDQ0xheWVySW1wbCosIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxp
c3QsIENDTGF5ZXJTb3J0ZXIqLCBpbnQgbWF4VGV4dHVyZVNpemUpOworCit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcAppbmRleCA1OTNmYWI4NTVlNjAxMzU2NTU2NTk0NGJkMzEzODA5NTdkMzI4NDk5Li45
ZGUyMDI5ZGVjN2QyMzNlY2VlYWFjYTU2NjY3MzkxOTMzNGVkM2RhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMTQ3LDEzICsxNDcsNiBAQCBib29sIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCog
aW1wbEhhY2ssIFBhcwogICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXI7CiB9CiAKLS8vIEZJWE1F
OiBtb3ZlIGFsbCB0aGlzIGNvZGUgdG8gQ0NMYXllclRyZWVIb3N0Ci12b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnVwZGF0ZUxheWVycygpCi17Ci0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAg
ICAgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVMYXllcnMoKTsKLX0KLQogdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCiB7
CiAgICAgYm9vbCBjaGFuZ2VkID0gdmlld3BvcnRTaXplICE9IG1fdmlld3BvcnRTaXplOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGQ2OGJiOGQ2MDczMzkwZWJkMDg0
ZTkxNGNhYjAxOTI2MWZhOTA3ODguLjUzYTRkNTUyNGE1N2I4MzVkZTRkODMyMGVhYzBjNjQ5ZTY2
MDYyYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTczLDggKzcz
LDYgQEAgcHVibGljOgogICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlRnJhbWVOdW1iZXI7IH0KICAgICB2b2lkIHNldFNvdXJjZUZyYW1lTnVtYmVyKGlu
dCBmcmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7IH0KIAot
ICAgIHZvaWQgdXBkYXRlTGF5ZXJzKCk7Ci0KICAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IElu
dFNpemUmIHZpZXdwb3J0U2l6ZSk7CiAgICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFNpemU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcAppbmRleCA0YzI0NTZlOGQzYjIxZjk5NmU3ZWFkYzU3ZDIyMjlmZDNm
OTNhNjg1Li5iMGY4MTQzMTgwMGMyYTRkMzllZjg2ZTYxOGIyYjFlOWI1ZDM2NTRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMjI1LDE4ICsyMjUsNyBAQCB2
b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbW1pdElmTmVlZGVkKCkKICAgICAvLyBVcGRhdGUK
ICAgICBkb3VibGUgZnJhbWVCZWdpblRpbWUgPSBjdXJyZW50VGltZSgpOwogICAgIG1fbGF5ZXJU
cmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Ci0KLSAgICAvLyBQcmVj
b21taXQgaXMgYSB0ZW1wb3Jhcnkgc3RlcCB3ZSBuZWVkIHRvIHBlcmZvcm0gdG8gcHVzaCB0aGlu
Z3MgbGlrZQotICAgIC8vIHRoZSB2aWV3cG9ydCB0byB0aGUgTGF5ZXJUcmVlSG9zdEltcGwsIGJl
Y2F1c2UKLSAgICAvLyBMYXllclRyZWVIb3N0SW1wbDo6dXBkYXRlTGF5ZXJzKCkgaXNuJ3Qgc3Bs
aXQgaW50byBob3N0IGFuZCBpbXBsIHBhcnRzLgotICAgIHsKLSAgICAgICAgU2NvcGVkU2V0SW1w
bFRocmVhZCBpbXBsOwotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnByZUNvbW1pdChtX2xheWVy
VHJlZUhvc3RJbXBsLmdldCgpKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIHNob3VsZCBiZWNvbWUg
bV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKSBvbmNlIHdlIHNwbGl0IGFwYXJ0Ci0gICAg
Ly8gTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycy4KLSAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsLT51cGRhdGVMYXllcnMoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygp
OwogCiAgICAgLy8gQ29tbWl0CiAgICAgewo=
</data>
<flag name="review"
          id="102550"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>