<?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>91111</bug_id>
          
          <creation_ts>2012-07-12 09:49:59 -0700</creation_ts>
          <short_desc>Move TextureMapperAnimation and texmap/LayerTransform to platform/graphics</short_desc>
          <delta_ts>2012-07-12 11:14:30 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>jturcotte</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>667887</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-12 09:49:59 -0700</bug_when>
    <thetext>Move TextureMapperAnimation and texmap/LayerTransform to platform/graphics</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667898</commentid>
    <comment_count>1</comment_count>
      <attachid>151979</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-12 09:57:37 -0700</bug_when>
    <thetext>Created attachment 151979
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667913</commentid>
    <comment_count>2</comment_count>
      <attachid>151979</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-07-12 10:03:29 -0700</bug_when>
    <thetext>Comment on attachment 151979
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        TextureMapperAnimation and LayerTransform are not specific to TextureMapper, and we want
&gt; +        to use them for other purposes as well. Moving them to platform/graphics would make that
&gt; +        more explicit.

What about a namechange then to the former?

&gt; Source/WebCore/GNUmakefile.list.am:6128
&gt; +	Source/WebCore/platform/graphics/GraphicsLayerTransform.cpp \
&gt; +	Source/WebCore/platform/graphics/GraphicsLayerTransform.h \
&gt; +	Source/WebCore/platform/graphics/GraphicsLayerAnimation.cpp \
&gt; +	Source/WebCore/platform/graphics/GraphicsLayerAnimation.h \

ah you did that :-)

&gt; Source/WebCore/platform/graphics/GraphicsLayerAnimation.cpp:27
&gt; +#if USE(TEXTURE_MAPPER)
&gt; +namespace WebCore {

You still want this guard?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667937</commentid>
    <comment_count>3</comment_count>
      <attachid>151987</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-12 10:23:01 -0700</bug_when>
    <thetext>Created attachment 151987
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668006</commentid>
    <comment_count>4</comment_count>
      <attachid>151987</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-12 11:14:25 -0700</bug_when>
    <thetext>Comment on attachment 151987
Patch for landing

Clearing flags on attachment: 151987

Committed r122484: &lt;http://trac.webkit.org/changeset/122484&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668007</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-12 11:14:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151979</attachid>
            <date>2012-07-12 09:57:37 -0700</date>
            <delta_ts>2012-07-12 10:22:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91111-20120712095722.patch</filename>
            <type>text/plain</type>
            <size>53852</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmM4MTQ0MmNmNmZlOTQ2
OGNmZGU5YTQ1NjVkOThjY2RkMDQzNjVjNy4uY2QwYTBjODJhYzQ4MzBhZWYzMDM5MTkwMDdhMzFk
NmVkY2E3MjY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA3LTEyICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgTW92ZSBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uIGFuZCB0ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0gdG8gcGxhdGZv
cm0vZ3JhcGhpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkxMTExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiBhbmQgTGF5ZXJUcmFuc2Zvcm0gYXJlIG5vdCBzcGVj
aWZpYyB0byBUZXh0dXJlTWFwcGVyLCBhbmQgd2Ugd2FudAorICAgICAgICB0byB1c2UgdGhlbSBm
b3Igb3RoZXIgcHVycG9zZXMgYXMgd2VsbC4gTW92aW5nIHRoZW0gdG8gcGxhdGZvcm0vZ3JhcGhp
Y3Mgd291bGQgbWFrZSB0aGF0CisgICAgICAgIG1vcmUgZXhwbGljaXQuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBtb3ZpbmcgZmlsZXMgYXJvdW5kLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyQW5pbWF0aW9uLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyQW5pbWF0aW9uLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNw
cC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5
ZXJUcmFuc2Zvcm0uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJMYXllci5oOgorICAgICAgICAoVGV4dHVyZU1hcHBlckxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c2V0QW5pbWF0ZWRUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRBbmltYXRlZE9wYWNp
dHkpOgorCiAyMDEyLTA3LTExICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tp
YS5jb20+CiAKICAgICAgICAgQ29tcGlsYXRpb24gZXJyb3Igd2l0aCBHTEVTMiB3aGVuIHVzaW5n
IGdsMmV4dC5oIGZyb20gQU5HTEUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGZmZGFiMTcyZjE2ZDk3Y2UwZTJi
YjNjMTlhMTk2ZmEzMTY4MjM4ZS4uNWVjYjU0NTQ2ZmM0MjZkZmEzN2IyMWY1NmNmZjExOTM5OGQ0
MmVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA3LTEyICBObydhbSBSb3Nl
bnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgTW92ZSBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uIGFuZCB0ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0gdG8gcGxhdGZvcm0vZ3Jh
cGhpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkx
MTExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5j
bHVkZSB0aGUgbmV3IGZpbGVuYW1lcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmg6CisgICAgICAgIChXZWJHcmFw
aGljc0xheWVyKToKKwogMjAxMi0wNy0xMiAgU3VkYXJzYW5hIE5hZ2luZW5pICA8c3VkYXJzYW5h
Lm5hZ2luZW5pQGxpbnV4LmludGVsLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIEJyb3dzZXIg
Y3Jhc2hlcyBydW5uaW5nIEJhdHRlcnlTdGF0dXMgdGVzdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQppbmRleCA4ZjQzZGI4MDJkOTZlYjFiMGM5MmJkZTYwYTgyNDYzMDdmZTBlNDRiLi42
M2IxNzBhMDcxMTBjOTI3YTQ3ZDcwZWI4ZjU0OWYyOTAzNGU5ZGM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KQEAgLTYxMjIsMTAgKzYxMjIsMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9y
bS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckFuaW1hdGlvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmggXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKQEAgLTYxNDUsMTAgKzYxNDUsMTAg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9MYXllclRyYW5zZm9ybS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9MYXllclRyYW5zZm9ybS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3Bw
IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNm
b3JtLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJB
bmltYXRpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyQW5pbWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCmluZGV4IGZjNDJjMTFiNWY4NTY5ZDgwOGQ4MGNhY2VmZjZiZTcyYmViMjQ3NzUu
Ljk0OTQxYjEyMGMyMzk5YjFmNWQ0NThhZjI1MTgzMmIyZDBkZmI1OWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpA
QCAtMTExOSw2ICsxMTE5LDggQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcCBcCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5jcHAgXAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1R5cGVzLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgXApAQCAtMjI5NCw3ICsyMjk2
LDkgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllckFuaW1hdGlvbi5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xp
ZW50LmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uaCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc1R5cGVzM0QuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2Uu
aCBcCkBAIC0yMzE4LDkgKzIzMjIsNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9H
cmFwaGljc1N1cmZhY2UuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmggXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXll
clRyYW5zZm9ybS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdl
QnVmZmVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5
ZXIuaCBcCkBAIC0yOTM2LDkgKzI5MzgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9QYXR0ZXJuUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGls
bEltYWdlUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJU
cmFuc2Zvcm0uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0
aW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckltYWdlQnVmZmVyLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGY4MzJmYzVhMzBiNGRlMTIxZjE3
M2E1YjVlN2U3MDM5YzdhOTY0YzIuLjYwOGRiYmE0NDA5M2EwMTRhMmFjNzgyMDdkYjI3NmE5M2Qy
YjFmMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM0OTIsNiArMzQ5MiwxMCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmNwcCcsCkBAIC0zOTA2LDEyICszOTEwLDggQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1RyYW5zZm9ybWF0aW9uTWF0cml4U2tpYS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAnLAotICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJCYWNraW5nU3RvcmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45NTdmN2Q2MTVkMzk5N2EzZjk3Y2JlMmYzM2VhNjcyZGE4MjNkZGM0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFu
aW1hdGlvbi5jcHAKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ckFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSAiVW5pdEJlemllci5oIgorI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgorCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorbmFtZXNwYWNlIFdlYkNv
cmUgeworCisKK3N0YXRpYyBib29sIHNob3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZShBbmltYXRp
b246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIGludCBsb29wQ291bnQpCit7CisgICAg
aWYgKCgoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRl
KSAmJiAobG9vcENvdW50ICYgMSkpCisgICAgICAgIHx8ICgoZGlyZWN0aW9uID09IEFuaW1hdGlv
bjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkgJiYgIShsb29wQ291bnQgJiAx
KSkKKyAgICAgICAgfHwgZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9u
UmV2ZXJzZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitz
dGF0aWMgZG91YmxlIG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZShkb3VibGUgcnVubmluZ1RpbWUs
IGRvdWJsZSBkdXJhdGlvbiwgQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9u
KQoreworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3Qg
aW50IGxvb3BDb3VudCA9IHJ1bm5pbmdUaW1lIC8gZHVyYXRpb247CisgICAgY29uc3QgZG91Ymxl
IGxhc3RGdWxsTG9vcCA9IGR1cmF0aW9uICogZG91YmxlKGxvb3BDb3VudCk7CisgICAgY29uc3Qg
ZG91YmxlIHJlbWFpbmRlciA9IHJ1bm5pbmdUaW1lIC0gbGFzdEZ1bGxMb29wOworICAgIGNvbnN0
IGRvdWJsZSBub3JtYWxpemVkID0gcmVtYWluZGVyIC8gZHVyYXRpb247CisKKyAgICByZXR1cm4g
c2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZhbHVlKGRpcmVjdGlvbiwgbG9vcENvdW50KSA/IDEgLSBu
b3JtYWxpemVkIDogbm9ybWFsaXplZDsKK30KKworc3RhdGljIGZsb2F0IGFwcGx5T3BhY2l0eUFu
aW1hdGlvbihmbG9hdCBmcm9tT3BhY2l0eSwgZmxvYXQgdG9PcGFjaXR5LCBkb3VibGUgcHJvZ3Jl
c3MpCit7CisgICAgLy8gT3B0aW1pemF0aW9uOiBzcGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFsdWVz
ICgwIGFuZCAxKS4KKyAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wKQorICAgICAgICByZXR1cm4gdG9P
cGFjaXR5OworCisgICAgaWYgKCFwcm9ncmVzcykKKyAgICAgICAgcmV0dXJuIGZyb21PcGFjaXR5
OworCisgICAgcmV0dXJuIGZyb21PcGFjaXR5ICsgcHJvZ3Jlc3MgKiAodG9PcGFjaXR5IC0gZnJv
bU9wYWNpdHkpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVwc2lsb24oZG91Ymxl
IGR1cmF0aW9uKQoreworICAgIHJldHVybiAxLjAgLyAoMjAwLjAgKiBkdXJhdGlvbik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihkb3VibGUgcDF4
LCBkb3VibGUgcDF5LCBkb3VibGUgcDJ4LCBkb3VibGUgcDJ5LCBkb3VibGUgdCwgZG91YmxlIGR1
cmF0aW9uKQoreworICAgIHJldHVybiBVbml0QmV6aWVyKHAxeCwgcDF5LCBwMngsIHAyeSkuc29s
dmUodCwgc29sdmVFcHNpbG9uKGR1cmF0aW9uKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91Ymxl
IHNvbHZlU3RlcHNGdW5jdGlvbihpbnQgbnVtU3RlcHMsIGJvb2wgc3RlcEF0U3RhcnQsIGRvdWJs
ZSB0KQoreworICAgIGlmIChzdGVwQXRTdGFydCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWluKDEu
MCwgKGZsb29yKG51bVN0ZXBzICogdCkgKyAxKSAvIG51bVN0ZXBzKTsKKyAgICByZXR1cm4gZmxv
b3IobnVtU3RlcHMgKiB0KSAvIG51bVN0ZXBzOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGFw
cGx5VGltaW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uLCBm
bG9hdCBwcm9ncmVzcywgZG91YmxlIGR1cmF0aW9uKQoreworICAgIGlmICghdGltaW5nRnVuY3Rp
b24pCisgICAgICAgIHJldHVybiBwcm9ncmVzczsKKworICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+
aXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgY29uc3QgQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbiogY3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNC
ZXppZXJGdW5jdGlvbihjdGYtPngxKCksIGN0Zi0+eTEoKSwgY3RmLT54MigpLCBjdGYtPnkyKCks
IHByb2dyZXNzLCBkdXJhdGlvbik7CisgICAgfQorCisgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5p
c1N0ZXBzVGltaW5nRnVuY3Rpb24oKSkgeworICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0
aW9uKiBzdGYgPSBzdGF0aWNfY2FzdDxjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKj4odGltaW5n
RnVuY3Rpb24pOworICAgICAgICByZXR1cm4gc29sdmVTdGVwc0Z1bmN0aW9uKHN0Zi0+bnVtYmVy
T2ZTdGVwcygpLCBzdGYtPnN0ZXBBdFN0YXJ0KCksIGRvdWJsZShwcm9ncmVzcykpOworICAgIH0K
KworICAgIHJldHVybiBwcm9ncmVzczsKK30KKworc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZyb20s
IGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IElu
dFNpemUmIGJveFNpemUsIGJvb2wgbGlzdHNNYXRjaCkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtYXRyaXg7CisKKyAgICAvLyBGaXJzdCBmcmFtZSBvZiBhbiBhbmltYXRpb24uCisgICAg
aWYgKCFwcm9ncmVzcykgeworICAgICAgICBmcm9tLT5hcHBseShib3hTaXplLCBtYXRyaXgpOwor
ICAgICAgICByZXR1cm4gbWF0cml4OworICAgIH0KKworICAgIC8vIExhc3QgZnJhbWUgb2YgYW4g
YW5pbWF0aW9uLgorICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7CisgICAgICAgIHRvLT5hcHBseShi
b3hTaXplLCBtYXRyaXgpOworICAgICAgICByZXR1cm4gbWF0cml4OworICAgIH0KKworICAgIC8v
IElmIHdlIGhhdmUgaW5jb21wYXRpYmxlIG9wZXJhdGlvbiBsaXN0cywgd2UgYmxlbmQgdGhlIHJl
c3VsdGluZyBtYXRyaWNlcy4KKyAgICBpZiAoIWxpc3RzTWF0Y2gpIHsKKyAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggZnJvbU1hdHJpeDsKKyAgICAgICAgdG8tPmFwcGx5KGJveFNpemUsIG1h
dHJpeCk7CisgICAgICAgIGZyb20tPmFwcGx5KGJveFNpemUsIGZyb21NYXRyaXgpOworICAgICAg
ICBtYXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gbWF0
cml4OworICAgIH0KKworICAgIC8vIEFuaW1hdGlvbiB0byAiLXdlYmtpdC10cmFuc2Zvcm06IG5v
bmUiLgorICAgIGlmICghdG8tPnNpemUoKSkgeworICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IGJsZW5kZWQoKmZyb20pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsZW5kZWQu
b3BlcmF0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25z
KClbaV0tPmJsZW5kKDAsIHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsK
KyAgICAgICAgcmV0dXJuIG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBBbmltYXRpb24gZnJvbSAi
LXdlYmtpdC10cmFuc2Zvcm06IG5vbmUiLgorICAgIGlmICghZnJvbS0+c2l6ZSgpKSB7CisgICAg
ICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZCgqdG8pOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGJsZW5kZWQub3BlcmF0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5kKDAsIDEuIC0gcHJvZ3Jlc3MsIHRydWUp
LT5hcHBseShtYXRyaXgsIGJveFNpemUpOworICAgICAgICByZXR1cm4gbWF0cml4OworICAgIH0K
KworICAgIC8vIE5vcm1hbCBhbmltYXRpb24gd2l0aCBhIG1hdGNoaW5nIG9wZXJhdGlvbiBsaXN0
LgorICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZCgqdG8pOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYmxlbmRlZC5vcGVyYXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGJs
ZW5kZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZChmcm9tLT5hdChpKSwgcHJvZ3Jlc3MsICFmcm9t
LT5hdChpKSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7CisgICAgcmV0dXJuIG1hdHJpeDsKK30K
KworCitHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uKGNvbnN0
IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNv
bnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCBsaXN0c01h
dGNoKQorICAgIDogbV9rZXlmcmFtZXMoa2V5ZnJhbWVzKQorICAgICwgbV9ib3hTaXplKGJveFNp
emUpCisgICAgLCBtX2FuaW1hdGlvbihBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24pKQorICAg
ICwgbV9saXN0c01hdGNoKGxpc3RzTWF0Y2gpCisgICAgLCBtX3N0YXJ0VGltZShXVEY6OmN1cnJl
bnRUaW1lKCkgLSB0aW1lT2Zmc2V0KQorICAgICwgbV9wYXVzZVRpbWUoMCkKKyAgICAsIG1fc3Rh
dGUoUGxheWluZ1N0YXRlKQoreworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OmFw
cGx5SW50ZXJuYWwoQ2xpZW50KiBjbGllbnQsIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBmcm9tLCBj
b25zdCBBbmltYXRpb25WYWx1ZSogdG8sIGZsb2F0IHByb2dyZXNzKQoreworICAgIHN3aXRjaCAo
bV9rZXlmcmFtZXMucHJvcGVydHkoKSkgeworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNp
dHk6CisgICAgICAgIGNsaWVudC0+c2V0QW5pbWF0ZWRPcGFjaXR5KGFwcGx5T3BhY2l0eUFuaW1h
dGlvbigoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSo+KGZyb20pLT52YWx1
ZSgpKSwgKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPih0byktPnZhbHVl
KCkpLCBwcm9ncmVzcykpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBbmltYXRlZFByb3Bl
cnR5V2Via2l0VHJhbnNmb3JtOgorICAgICAgICBjbGllbnQtPnNldEFuaW1hdGVkVHJhbnNmb3Jt
KGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlKj4oZnJvbSktPnZhbHVlKCksIHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFu
aW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpLCBwcm9ncmVzcywgbV9ib3hTaXplLCBtX2xpc3Rz
TWF0Y2gpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpp
c0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKHN0YXRlKCkgIT0gU3RvcHBlZFN0YXRlKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBtX2FuaW1hdGlvbi0+ZmlsbHNGb3J3YXJk
cygpOworfQorCitib29sIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOjpoYXNBY3RpdmVBbmltYXRp
b25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0eXBlKSBjb25zdAoreworICAgIEhhc2hNYXA8
U3RyaW5nLCBWZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFZlY3Rv
cjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgVmVjdG9yPEdy
YXBoaWNzTGF5ZXJBbmltYXRpb24+JiBhbmltYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoYW5pbWF0aW9uc1tpXS5pc0FjdGl2ZSgpICYmIGFuaW1hdGlvbnNbaV0ucHJvcGVy
dHkoKSA9PSB0eXBlKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHcmFwaGljc0xheWVyQW5pbWF0aW9u
czo6aGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAoreworICAgIEhhc2hNYXA8U3RyaW5nLCBW
ZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9h
bmltYXRpb25zLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxHcmFwaGlj
c0xheWVyQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5
ZXJBbmltYXRpb24+JiBhbmltYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBhbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAo
YW5pbWF0aW9uc1tpXS5zdGF0ZSgpID09IEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OlBsYXlpbmdT
dGF0ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjphcHBs
eShDbGllbnQqIGNsaWVudCkKK3sKKyAgICBpZiAoc3RhdGUoKSA9PSBTdG9wcGVkU3RhdGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGRvdWJsZSB0b3RhbFJ1bm5pbmdUaW1lID0gbV9zdGF0ZSA9
PSBQYXVzZWRTdGF0ZSA/IG1fcGF1c2VUaW1lIDogV1RGOjpjdXJyZW50VGltZSgpIC0gbV9zdGFy
dFRpbWU7CisgICAgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRBbmltYXRpb25W
YWx1ZSh0b3RhbFJ1bm5pbmdUaW1lLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSwgbV9hbmltYXRp
b24tPmRpcmVjdGlvbigpKTsKKworICAgIGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQo
KSAhPSBBbmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUgJiYgdG90YWxSdW5uaW5nVGlt
ZSA+PSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3Vu
dCgpKQorICAgICAgICBzZXRTdGF0ZShTdG9wcGVkU3RhdGUpOworCisgICAgaWYgKCFub3JtYWxp
emVkVmFsdWUpIHsKKyAgICAgICAgYXBwbHlJbnRlcm5hbChjbGllbnQsIG1fa2V5ZnJhbWVzLmF0
KDApLCBtX2tleWZyYW1lcy5hdCgxKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobm9ybWFsaXplZFZhbHVlID09IDEuMCkgeworICAgICAgICBhcHBseUludGVybmFsKGNs
aWVudCwgbV9rZXlmcmFtZXMuYXQobV9rZXlmcmFtZXMuc2l6ZSgpIC0gMiksIG1fa2V5ZnJhbWVz
LmF0KG1fa2V5ZnJhbWVzLnNpemUoKSAtIDEpLCAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAobV9rZXlmcmFtZXMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAgbm9ybWFsaXplZFZh
bHVlID0gYXBwbHlUaW1pbmdGdW5jdGlvbihtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS5n
ZXQoKSwgbm9ybWFsaXplZFZhbHVlLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CisgICAgICAg
IGFwcGx5SW50ZXJuYWwoY2xpZW50LCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQo
MSksIG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAg
ICBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSA9IG1fa2V5ZnJhbWVzLmF0KGkpOworICAgICAg
ICBjb25zdCBBbmltYXRpb25WYWx1ZSogdG8gPSBtX2tleWZyYW1lcy5hdChpICsgMSk7CisgICAg
ICAgIGlmIChmcm9tLT5rZXlUaW1lKCkgPiBub3JtYWxpemVkVmFsdWUgfHwgdG8tPmtleVRpbWUo
KSA8IG5vcm1hbGl6ZWRWYWx1ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG5v
cm1hbGl6ZWRWYWx1ZSA9IChub3JtYWxpemVkVmFsdWUgLSBmcm9tLT5rZXlUaW1lKCkpIC8gKHRv
LT5rZXlUaW1lKCkgLSBmcm9tLT5rZXlUaW1lKCkpOworICAgICAgICBub3JtYWxpemVkVmFsdWUg
PSBhcHBseVRpbWluZ0Z1bmN0aW9uKGZyb20tPnRpbWluZ0Z1bmN0aW9uKCksIG5vcm1hbGl6ZWRW
YWx1ZSwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAgICAgICBhcHBseUludGVybmFsKGNs
aWVudCwgZnJvbSwgdG8sIG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKwordm9pZCBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpwYXVzZShkb3VibGUgb2Zmc2V0KQor
eworICAgIC8vIEZJWE1FOiBzaG91bGQgYXBwbHkgb2Zmc2V0IGhlcmUuCisgICAgc2V0U3RhdGUo
UGF1c2VkU3RhdGUpOworICAgIG1fcGF1c2VUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0gb2Zm
c2V0OworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOjphZGQoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9uJiBhbmltYXRpb24pCit7CisgICAg
SGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiA+OjppdGVyYXRv
ciBpdCA9IG1fYW5pbWF0aW9ucy5maW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX2FuaW1hdGlv
bnMuZW5kKCkpIHsKKyAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoYW5pbWF0aW9uKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiBh
bmltYXRpb25zOworICAgIGFuaW1hdGlvbnMuYXBwZW5kKGFuaW1hdGlvbik7CisgICAgbV9hbmlt
YXRpb25zLmFkZChuYW1lLCBhbmltYXRpb25zKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQW5p
bWF0aW9uczo6cGF1c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgb2Zmc2V0KQoreworICAg
IEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4gPjo6aXRlcmF0
b3IgaXQgPSBtX2FuaW1hdGlvbnMuZmluZChuYW1lKTsKKyAgICBpZiAoaXQgPT0gbV9hbmltYXRp
b25zLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGl0LT5zZWNvbmQuc2l6ZSgpOyBpKyspIAorICAgICAgICBpdC0+c2Vjb25kW2ldLnBhdXNlKG9m
ZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM6OmFwcGx5KEdyYXBoaWNz
TGF5ZXJBbmltYXRpb246OkNsaWVudCogY2xpZW50KQoreworICAgIEhhc2hNYXA8U3RyaW5nLCBW
ZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4gPjo6aXRlcmF0b3IgZW5kID0gbV9hbmltYXRp
b25zLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxHcmFwaGljc0xheWVy
QW5pbWF0aW9uPiA+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdC0+c2Vjb25kLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgaXQtPnNlY29uZFtpXS5hcHBseShjbGllbnQpOworICAg
IH0KK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmZiYzA1YTEy
ZTg5ZGEwMDU2YTYzN2UwYTFlNmZjM2I5ZmY0MDRiZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaApAQCAt
MCwwICsxLDgxIEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBHcmFwaGljc0xheWVyQW5pbWF0aW9uX2gKKyNkZWZpbmUgR3JhcGhpY3NMYXllckFuaW1h
dGlvbl9oCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGlj
c0xheWVyQW5pbWF0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIEFuaW1hdGlvblN0YXRlIHsgUGxh
eWluZ1N0YXRlLCBQYXVzZWRTdGF0ZSwgU3RvcHBlZFN0YXRlIH07CisgICAgY2xhc3MgQ2xpZW50
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRlZFRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHNldEFuaW1hdGVkT3BhY2l0eShmbG9hdCkgPSAwOworICAgIH07CisKKyAgICBHcmFwaGljc0xh
eWVyQW5pbWF0aW9uKCkKKyAgICAgICAgOiBtX2tleWZyYW1lcyhBbmltYXRlZFByb3BlcnR5SW52
YWxpZCkKKyAgICB7IH0KKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1l
VmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEFuaW1hdGlvbiosIGRvdWJsZSwgYm9v
bCk7CisgICAgdm9pZCBhcHBseShDbGllbnQqKTsKKyAgICB2b2lkIHBhdXNlKGRvdWJsZSk7Cisg
ICAgQW5pbWF0aW9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAg
dm9pZCBzZXRTdGF0ZShBbmltYXRpb25TdGF0ZSBzKSB7IG1fc3RhdGUgPSBzOyB9CisgICAgQW5p
bWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXMucHJv
cGVydHkoKTsgfQorICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2
b2lkIGFwcGx5SW50ZXJuYWwoQ2xpZW50KiwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20sIGNv
bnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQgcHJvZ3Jlc3MpOworICAgIEtleWZyYW1lVmFs
dWVMaXN0IG1fa2V5ZnJhbWVzOworICAgIEludFNpemUgbV9ib3hTaXplOworICAgIFJlZlB0cjxB
bmltYXRpb24+IG1fYW5pbWF0aW9uOworICAgIFN0cmluZyBtX25hbWU7CisgICAgYm9vbCBtX2xp
c3RzTWF0Y2g7CisgICAgYm9vbCBtX2hhc0JpZ1JvdGF0aW9uOworICAgIGRvdWJsZSBtX3N0YXJ0
VGltZTsKKyAgICBkb3VibGUgbV9wYXVzZVRpbWU7CisgICAgQW5pbWF0aW9uU3RhdGUgbV9zdGF0
ZTsKK307CisKK2NsYXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIHsKK3B1YmxpYzoKKyAgICBH
cmFwaGljc0xheWVyQW5pbWF0aW9ucygpIHsgfQorCisgICAgdm9pZCBhZGQoY29uc3QgU3RyaW5n
JiwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbiYpOworICAgIHZvaWQgcmVtb3ZlKGNvbnN0
IFN0cmluZyYgbmFtZSkgeyBtX2FuaW1hdGlvbnMucmVtb3ZlKG5hbWUpOyB9CisgICAgdm9pZCBw
YXVzZShjb25zdCBTdHJpbmcmLCBkb3VibGUpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NMYXll
ckFuaW1hdGlvbjo6Q2xpZW50Kik7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb25zLmlzRW1wdHkoKTsgfQorCisgICAgYm9vbCBoYXNSdW5uaW5nQW5pbWF0aW9u
cygpIGNvbnN0OworICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFBy
b3BlcnR5SUQgdHlwZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxTdHJpbmcsIFZl
Y3RvcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiA+IG1fYW5pbWF0aW9uczsKK307CisKK30KKyNl
bmRpZiAvLyBHcmFwaGljc0xheWVyQW5pbWF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclRyYW5zZm9ybS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzdjYWM4N2Q2NzUyMzRjOGM5MDY2ZTA4NzAzODhkM2NiMTI0NjI3NgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXJUcmFuc2Zvcm0uY3BwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJUcmFuc2Zvcm0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGljc0xheWVy
VHJhbnNmb3JtOjpHcmFwaGljc0xheWVyVHJhbnNmb3JtKCkKKyAgICA6IG1fZmxhdHRlbmluZyhm
YWxzZSkKKyAgICAsIG1fZGlydHkoZmFsc2UpIC8vIGZhbHNlIGJ5IGRlZmF1bHQgc2luY2UgYWxs
IGRlZmF1bHQgdmFsdWVzIHdvdWxkIGJlIGNvbWJpbmVkIGFzIHRoZSBpZGVudGl0eSBtYXRyaXgK
KyAgICAsIG1fY2hpbGRyZW5EaXJ0eShmYWxzZSkKK3sKK30KKwordm9pZCBHcmFwaGljc0xheWVy
VHJhbnNmb3JtOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sKKyAg
ICBtX3Bvc2l0aW9uID0gcG9zaXRpb247CisgICAgbV9kaXJ0eSA9IHRydWU7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllclRyYW5zZm9ybTo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7
CisgICAgbV9zaXplID0gc2l6ZTsKKyAgICBtX2RpcnR5ID0gdHJ1ZTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyVHJhbnNmb3JtOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIGFu
Y2hvclBvaW50KQoreworICAgIG1fYW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludDsKKyAgICBtX2Rp
cnR5ID0gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyVHJhbnNmb3JtOjpzZXRGbGF0dGVu
aW5nKGJvb2wgZmxhdHRlbmluZykKK3sKKyAgICBtX2ZsYXR0ZW5pbmcgPSBmbGF0dGVuaW5nOwor
ICAgIG1fZGlydHkgPSB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJUcmFuc2Zvcm06OnNl
dExvY2FsVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7
CisgICAgbV9sb2NhbCA9IHRyYW5zZm9ybTsKKyAgICBtX2RpcnR5ID0gdHJ1ZTsKK30KKwordm9p
ZCBHcmFwaGljc0xheWVyVHJhbnNmb3JtOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIG1fY2hpbGRyZW4gPSB0cmFuc2Zv
cm07CisgICAgbV9kaXJ0eSA9IHRydWU7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBo
aWNzTGF5ZXJUcmFuc2Zvcm06OmNvbWJpbmVkKCkKK3sKKyAgICBBU1NFUlQoIW1fZGlydHkpOwor
ICAgIHJldHVybiBtX2NvbWJpbmVkOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGlj
c0xheWVyVHJhbnNmb3JtOjpjb21iaW5lZEZvckNoaWxkcmVuKCkKK3sKKyAgICBBU1NFUlQoIW1f
ZGlydHkpOworICAgIGlmIChtX2NoaWxkcmVuRGlydHkpCisgICAgICAgIGNvbWJpbmVUcmFuc2Zv
cm1zRm9yQ2hpbGRyZW4oKTsKKyAgICByZXR1cm4gbV9jb21iaW5lZEZvckNoaWxkcmVuOworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXJUcmFuc2Zvcm06OmNvbWJpbmVUcmFuc2Zvcm1zKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRUcmFuc2Zvcm0pCit7CisgICAgZmxvYXQgb3JpZ2lu
WCA9IG1fYW5jaG9yUG9pbnQueCgpICogbV9zaXplLndpZHRoKCk7CisgICAgZmxvYXQgb3JpZ2lu
WSA9IG1fYW5jaG9yUG9pbnQueSgpICogbV9zaXplLmhlaWdodCgpOworICAgIG1fY29tYmluZWQg
PQorICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChwYXJlbnRUcmFuc2Zvcm0pCisgICAgICAg
ICAgICAudHJhbnNsYXRlM2Qob3JpZ2luWCArIG1fcG9zaXRpb24ueCgpLCBvcmlnaW5ZICsgbV9w
b3NpdGlvbi55KCksIG1fYW5jaG9yUG9pbnQueigpICkKKyAgICAgICAgICAgIC5tdWx0aXBseSht
X2xvY2FsKTsKKworICAgIC8vIFRoZSBjaGlsZHJlbiB0cmFuc2Zvcm0gd2lsbCB0YWtlIGl0IGZy
b20gaGVyZSwgaWYgaXQgZ2V0cyB1c2VkLgorICAgIG1fY29tYmluZWRGb3JDaGlsZHJlbiA9IG1f
Y29tYmluZWQ7CisgICAgbV9jb21iaW5lZC50cmFuc2xhdGUzZCgtb3JpZ2luWCwgLW9yaWdpblks
IC1tX2FuY2hvclBvaW50LnooKSk7CisKKyAgICBtX2RpcnR5ID0gZmFsc2U7CisgICAgbV9jaGls
ZHJlbkRpcnR5ID0gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyVHJhbnNmb3JtOjpjb21i
aW5lVHJhbnNmb3Jtc0ZvckNoaWxkcmVuKCkKK3sKKyAgICBBU1NFUlQoIW1fZGlydHkpOworICAg
IEFTU0VSVChtX2NoaWxkcmVuRGlydHkpOworCisgICAgZmxvYXQgb3JpZ2luWCA9IG1fYW5jaG9y
UG9pbnQueCgpICogbV9zaXplLndpZHRoKCk7CisgICAgZmxvYXQgb3JpZ2luWSA9IG1fYW5jaG9y
UG9pbnQueSgpICogbV9zaXplLmhlaWdodCgpOworCisgICAgLy8gSW4gY2FzZSBhIHBhcmVudCBo
YWQgcHJlc2VydmVzM0QgYW5kIHRoaXMgbGF5ZXIgaGFzIG5vdCwgZmxhdHRlbiBvdXIgY2hpbGRy
ZW4uCisgICAgaWYgKG1fZmxhdHRlbmluZykKKyAgICAgICAgbV9jb21iaW5lZEZvckNoaWxkcmVu
ID0gbV9jb21iaW5lZEZvckNoaWxkcmVuLnRvMmRUcmFuc2Zvcm0oKTsKKyAgICBtX2NvbWJpbmVk
Rm9yQ2hpbGRyZW4ubXVsdGlwbHkobV9jaGlsZHJlbik7CisgICAgbV9jb21iaW5lZEZvckNoaWxk
cmVuLnRyYW5zbGF0ZTNkKC1vcmlnaW5YLCAtb3JpZ2luWSwgLW1fYW5jaG9yUG9pbnQueigpKTsK
KworICAgIG1fY2hpbGRyZW5EaXJ0eSA9IGZhbHNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWRhMjViNGQ4MzVlYTU0Y2QxN2EyMWExMzU0ODQxOWE4MzVlN2RiNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXJUcmFuc2Zvcm0uaApAQCAtMCwwICsxLDYyIEBACisvKgorIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBHcmFwaGljc0xheWVyVHJhbnNmb3JtX2gKKyNkZWZp
bmUgR3JhcGhpY3NMYXllclRyYW5zZm9ybV9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisj
aW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBHcmFwaGljc0xheWVyVHJhbnNmb3JtIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0xheWVyVHJh
bnNmb3JtKCk7CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CisgICAg
dm9pZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQo
Y29uc3QgRmxvYXRQb2ludDNEJik7CisgICAgdm9pZCBzZXRGbGF0dGVuaW5nKGJvb2wpOworICAg
IHZvaWQgc2V0TG9jYWxUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAg
ICB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tYmluZWQoKTsKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBjb21iaW5lZEZvckNoaWxkcmVuKCk7CisKKyAgICB2b2lkIGNvbWJpbmVUcmFuc2Zv
cm1zKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRUcmFuc2Zvcm0pOworCitwcml2
YXRlOgorICAgIHZvaWQgY29tYmluZVRyYW5zZm9ybXNGb3JDaGlsZHJlbigpOworCisgICAgRmxv
YXRQb2ludDNEIG1fYW5jaG9yUG9pbnQ7CisgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOworICAg
IEZsb2F0U2l6ZSBtX3NpemU7CisgICAgYm9vbCBtX2ZsYXR0ZW5pbmc7CisgICAgYm9vbCBtX2Rp
cnR5OworICAgIGJvb2wgbV9jaGlsZHJlbkRpcnR5OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbV9sb2NhbDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2NoaWxkcmVuOworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1fY29tYmluZWQ7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9jb21iaW5lZEZvckNoaWxkcmVuOworfTsKKworfQorCisjZW5kaWYgLy8gR3JhcGhpY3NMYXll
clRyYW5zZm9ybV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApp
bmRleCA0Y2E1NmM2YzE0ZTg5NWNkMDYxNWRjMWU5MTlhNzUzYzQwYTUzNmM4Li4yODAyOTMzYTk5
NmM1M2MzODcxMmQ0ZGQ3MTE4N2IzYTY1NWQ5MGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTM2OCw3ICszNjgsNyBAQCBib29sIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZh
bHVlTGlzdAogICAgIGlmICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5
V2Via2l0VHJhbnNmb3JtKQogICAgICAgICBsaXN0c01hdGNoID0gdmFsaWRhdGVUcmFuc2Zvcm1P
cGVyYXRpb25zKHZhbHVlTGlzdCwgaGFzQmlnUm90YXRpb24pID49IDA7CiAKLSAgICBtX2FuaW1h
dGlvbnMuYWRkKGtleWZyYW1lc05hbWUsIFRleHR1cmVNYXBwZXJBbmltYXRpb24odmFsdWVMaXN0
LCBib3hTaXplLCBhbmltLCB0aW1lT2Zmc2V0LCBsaXN0c01hdGNoKSk7CisgICAgbV9hbmltYXRp
b25zLmFkZChrZXlmcmFtZXNOYW1lLCBHcmFwaGljc0xheWVyQW5pbWF0aW9uKHZhbHVlTGlzdCwg
Ym94U2l6ZSwgYW5pbSwgdGltZU9mZnNldCwgbGlzdHNNYXRjaCkpOwogICAgIG5vdGlmeUNoYW5n
ZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkFuaW1hdGlvbkNoYW5nZSk7CiAgICAgbV9hbmltYXRpb25T
dGFydGVkVGltZXIuc3RhcnRPbmVTaG90KDApOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAppbmRleCA0MDNlNTQ5MmI4NDFmYTRkYzBhNGRj
MDY4OGRjZGNmNzBkZTczYjA0Li5jNWNiYmFjMDQ2ZGZlZWRlYTFkYjIxNjdiODU5MDRkOWZhYzll
YTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtMTA2LDcg
KzEwNiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9ydDsKICAgICBUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbV9jb250ZW50c0xheWVyOwogICAgIEZsb2F0UmVjdCBt
X25lZWRzRGlzcGxheVJlY3Q7Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9hbmltYXRp
b25zOworICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsKICAgICB2b2lk
IGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyPiopOwogICAgIFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiBtX2FuaW1hdGlv
blN0YXJ0ZWRUaW1lcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMWMzYzAyZTU3ODFmZWU3MGU4OTMwYjE0YjQ2ZmI3MzY4MmNkODgwYi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmFuc2Zvcm0uaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1MYXllclRyYW5zZm9ybTo6TGF5ZXJUcmFuc2Zvcm0oKQot
OiBtX2ZsYXR0ZW5pbmcoZmFsc2UpCi0sIG1fZGlydHkoZmFsc2UpIC8vIGZhbHNlIGJ5IGRlZmF1
bHQgc2luY2UgYWxsIGRlZmF1bHQgdmFsdWVzIHdvdWxkIGJlIGNvbWJpbmVkIGFzIHRoZSBpZGVu
dGl0eSBtYXRyaXgKLSwgbV9jaGlsZHJlbkRpcnR5KGZhbHNlKQotewotfQotCi12b2lkIExheWVy
VHJhbnNmb3JtOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKLXsKLSAg
ICBtX3Bvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgbV9kaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmFuc2Zvcm06OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIG1f
c2l6ZSA9IHNpemU7Ci0gICAgbV9kaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgTGF5ZXJUcmFuc2Zv
cm06OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgYW5jaG9yUG9pbnQpCi17Ci0g
ICAgbV9hbmNob3JQb2ludCA9IGFuY2hvclBvaW50OwotICAgIG1fZGlydHkgPSB0cnVlOwotfQot
Ci12b2lkIExheWVyVHJhbnNmb3JtOjpzZXRGbGF0dGVuaW5nKGJvb2wgZmxhdHRlbmluZykKLXsK
LSAgICBtX2ZsYXR0ZW5pbmcgPSBmbGF0dGVuaW5nOwotICAgIG1fZGlydHkgPSB0cnVlOwotfQot
Ci12b2lkIExheWVyVHJhbnNmb3JtOjpzZXRMb2NhbFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIG1fbG9jYWwgPSB0cmFuc2Zvcm07Ci0gICAg
bV9kaXJ0eSA9IHRydWU7Ci19Ci0KLXZvaWQgTGF5ZXJUcmFuc2Zvcm06OnNldENoaWxkcmVuVHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCi17Ci0gICAgbV9j
aGlsZHJlbiA9IHRyYW5zZm9ybTsKLSAgICBtX2RpcnR5ID0gdHJ1ZTsKLX0KLQotVHJhbnNmb3Jt
YXRpb25NYXRyaXggTGF5ZXJUcmFuc2Zvcm06OmNvbWJpbmVkKCkKLXsKLSAgICBBU1NFUlQoIW1f
ZGlydHkpOwotICAgIHJldHVybiBtX2NvbWJpbmVkOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJp
eCBMYXllclRyYW5zZm9ybTo6Y29tYmluZWRGb3JDaGlsZHJlbigpCi17Ci0gICAgQVNTRVJUKCFt
X2RpcnR5KTsKLSAgICBpZiAobV9jaGlsZHJlbkRpcnR5KQotICAgICAgICBjb21iaW5lVHJhbnNm
b3Jtc0ZvckNoaWxkcmVuKCk7Ci0gICAgcmV0dXJuIG1fY29tYmluZWRGb3JDaGlsZHJlbjsKLX0K
LQotdm9pZCBMYXllclRyYW5zZm9ybTo6Y29tYmluZVRyYW5zZm9ybXMoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHBhcmVudFRyYW5zZm9ybSkKLXsKLSAgICBmbG9hdCBvcmlnaW5YID0gbV9h
bmNob3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgoKTsKLSAgICBmbG9hdCBvcmlnaW5ZID0gbV9h
bmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgbV9jb21iaW5lZCA9Ci0gICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KHBhcmVudFRyYW5zZm9ybSkKLSAgICAgICAgICAgIC50
cmFuc2xhdGUzZChvcmlnaW5YICsgbV9wb3NpdGlvbi54KCksIG9yaWdpblkgKyBtX3Bvc2l0aW9u
LnkoKSwgbV9hbmNob3JQb2ludC56KCkgKQotICAgICAgICAgICAgLm11bHRpcGx5KG1fbG9jYWwp
OwotCi0gICAgLy8gVGhlIGNoaWxkcmVuIHRyYW5zZm9ybSB3aWxsIHRha2UgaXQgZnJvbSBoZXJl
LCBpZiBpdCBnZXRzIHVzZWQuCi0gICAgbV9jb21iaW5lZEZvckNoaWxkcmVuID0gbV9jb21iaW5l
ZDsKLSAgICBtX2NvbWJpbmVkLnRyYW5zbGF0ZTNkKC1vcmlnaW5YLCAtb3JpZ2luWSwgLW1fYW5j
aG9yUG9pbnQueigpKTsKLQotICAgIG1fZGlydHkgPSBmYWxzZTsKLSAgICBtX2NoaWxkcmVuRGly
dHkgPSB0cnVlOwotfQotCi12b2lkIExheWVyVHJhbnNmb3JtOjpjb21iaW5lVHJhbnNmb3Jtc0Zv
ckNoaWxkcmVuKCkKLXsKLSAgICBBU1NFUlQoIW1fZGlydHkpOwotICAgIEFTU0VSVChtX2NoaWxk
cmVuRGlydHkpOwotCi0gICAgZmxvYXQgb3JpZ2luWCA9IG1fYW5jaG9yUG9pbnQueCgpICogbV9z
aXplLndpZHRoKCk7Ci0gICAgZmxvYXQgb3JpZ2luWSA9IG1fYW5jaG9yUG9pbnQueSgpICogbV9z
aXplLmhlaWdodCgpOwotCi0gICAgLy8gSW4gY2FzZSBhIHBhcmVudCBoYWQgcHJlc2VydmVzM0Qg
YW5kIHRoaXMgbGF5ZXIgaGFzIG5vdCwgZmxhdHRlbiBvdXIgY2hpbGRyZW4uCi0gICAgaWYgKG1f
ZmxhdHRlbmluZykKLSAgICAgICAgbV9jb21iaW5lZEZvckNoaWxkcmVuID0gbV9jb21iaW5lZEZv
ckNoaWxkcmVuLnRvMmRUcmFuc2Zvcm0oKTsKLSAgICBtX2NvbWJpbmVkRm9yQ2hpbGRyZW4ubXVs
dGlwbHkobV9jaGlsZHJlbik7Ci0gICAgbV9jb21iaW5lZEZvckNoaWxkcmVuLnRyYW5zbGF0ZTNk
KC1vcmlnaW5YLCAtb3JpZ2luWSwgLW1fYW5jaG9yUG9pbnQueigpKTsKLQotICAgIG1fY2hpbGRy
ZW5EaXJ0eSA9IGZhbHNlOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiNzM4MTg1MDE3ODAxYTc5OWIxZGM5NDNkZDU2M2UyYjkzZGViMGViLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpZm5kZWYgTGF5ZXJUcmFuc2Zvcm1faAotI2RlZmluZSBMYXllclRyYW5zZm9ybV9oCi0K
LSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCi0jaW5j
bHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBMYXllclRyYW5zZm9ybSB7Ci1wdWJsaWM6Ci0g
ICAgTGF5ZXJUcmFuc2Zvcm0oKTsKLSAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmKTsKLSAgICB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgdm9pZCBzZXRB
bmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKTsKLSAgICB2b2lkIHNldEZsYXR0ZW5pbmco
Ym9vbCk7Ci0gICAgdm9pZCBzZXRMb2NhbFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYpOwotICAgIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZCgpOwotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGNvbWJpbmVkRm9yQ2hpbGRyZW4oKTsKLQotICAgIHZvaWQgY29t
YmluZVRyYW5zZm9ybXMoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudFRyYW5zZm9y
bSk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjb21iaW5lVHJhbnNmb3Jtc0ZvckNoaWxkcmVuKCk7
Ci0KLSAgICBGbG9hdFBvaW50M0QgbV9hbmNob3JQb2ludDsKLSAgICBGbG9hdFBvaW50IG1fcG9z
aXRpb247Ci0gICAgRmxvYXRTaXplIG1fc2l6ZTsKLSAgICBib29sIG1fZmxhdHRlbmluZzsKLSAg
ICBib29sIG1fZGlydHk7Ci0gICAgYm9vbCBtX2NoaWxkcmVuRGlydHk7Ci0KLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtX2xvY2FsOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fY2hpbGRy
ZW47Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9jb21iaW5lZDsKLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtX2NvbWJpbmVkRm9yQ2hpbGRyZW47Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBM
YXllclRyYW5zZm9ybV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMDIyYTI0ZTI0ZWU1NGQxNTE2ZWI0Y2U2ZjIzY2Q2
OTQyMWE4MzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmlt
YXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjg3ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0
IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
Ci0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0g
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIgotCi0jaW5jbHVkZSAiVW5pdEJlemllci5oIgotI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi0KLXN0YXRpYyBib29sIHNob3VsZFJldmVyc2VBbmltYXRpb25W
YWx1ZShBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIGludCBsb29wQ291
bnQpCi17Ci0gICAgaWYgKCgoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0
aW9uQWx0ZXJuYXRlKSAmJiAobG9vcENvdW50ICYgMSkpCi0gICAgICAgIHx8ICgoZGlyZWN0aW9u
ID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkgJiYgIShs
b29wQ291bnQgJiAxKSkKLSAgICAgICAgfHwgZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0
aW9uRGlyZWN0aW9uUmV2ZXJzZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1zdGF0aWMgZG91YmxlIG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZShkb3VibGUg
cnVubmluZ1RpbWUsIGRvdWJsZSBkdXJhdGlvbiwgQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rp
b24gZGlyZWN0aW9uKQotewotICAgIGlmICghZHVyYXRpb24pCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgY29uc3QgaW50IGxvb3BDb3VudCA9IHJ1bm5pbmdUaW1lIC8gZHVyYXRpb247Ci0gICAg
Y29uc3QgZG91YmxlIGxhc3RGdWxsTG9vcCA9IGR1cmF0aW9uICogZG91YmxlKGxvb3BDb3VudCk7
Ci0gICAgY29uc3QgZG91YmxlIHJlbWFpbmRlciA9IHJ1bm5pbmdUaW1lIC0gbGFzdEZ1bGxMb29w
OwotICAgIGNvbnN0IGRvdWJsZSBub3JtYWxpemVkID0gcmVtYWluZGVyIC8gZHVyYXRpb247Ci0K
LSAgICByZXR1cm4gc2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZhbHVlKGRpcmVjdGlvbiwgbG9vcENv
dW50KSA/IDEgLSBub3JtYWxpemVkIDogbm9ybWFsaXplZDsKLX0KLQotc3RhdGljIGZsb2F0IGFw
cGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBmcm9tT3BhY2l0eSwgZmxvYXQgdG9PcGFjaXR5LCBk
b3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gT3B0aW1pemF0aW9uOiBzcGVjaWFsIGNhc2UgdGhl
IGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KLSAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wKQotICAgICAg
ICByZXR1cm4gdG9PcGFjaXR5OwotCi0gICAgaWYgKCFwcm9ncmVzcykKLSAgICAgICAgcmV0dXJu
IGZyb21PcGFjaXR5OwotCi0gICAgcmV0dXJuIGZyb21PcGFjaXR5ICsgcHJvZ3Jlc3MgKiAodG9P
cGFjaXR5IC0gZnJvbU9wYWNpdHkpOwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVw
c2lsb24oZG91YmxlIGR1cmF0aW9uKQotewotICAgIHJldHVybiAxLjAgLyAoMjAwLjAgKiBkdXJh
dGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlv
bihkb3VibGUgcDF4LCBkb3VibGUgcDF5LCBkb3VibGUgcDJ4LCBkb3VibGUgcDJ5LCBkb3VibGUg
dCwgZG91YmxlIGR1cmF0aW9uKQotewotICAgIHJldHVybiBVbml0QmV6aWVyKHAxeCwgcDF5LCBw
MngsIHAyeSkuc29sdmUodCwgc29sdmVFcHNpbG9uKGR1cmF0aW9uKSk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlvbihpbnQgbnVtU3RlcHMsIGJvb2wgc3RlcEF0
U3RhcnQsIGRvdWJsZSB0KQotewotICAgIGlmIChzdGVwQXRTdGFydCkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bWluKDEuMCwgKGZsb29yKG51bVN0ZXBzICogdCkgKyAxKSAvIG51bVN0ZXBzKTsKLSAg
ICByZXR1cm4gZmxvb3IobnVtU3RlcHMgKiB0KSAvIG51bVN0ZXBzOwotfQotCi1zdGF0aWMgaW5s
aW5lIGZsb2F0IGFwcGx5VGltaW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWlu
Z0Z1bmN0aW9uLCBmbG9hdCBwcm9ncmVzcywgZG91YmxlIGR1cmF0aW9uKQotewotICAgIGlmICgh
dGltaW5nRnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBwcm9ncmVzczsKLQotICAgIGlmICh0aW1p
bmdGdW5jdGlvbi0+aXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgY29u
c3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiogY3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3Vi
aWNCZXppZXJUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJu
IHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihjdGYtPngxKCksIGN0Zi0+eTEoKSwgY3RmLT54Migp
LCBjdGYtPnkyKCksIHByb2dyZXNzLCBkdXJhdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKHRpbWlu
Z0Z1bmN0aW9uLT5pc1N0ZXBzVGltaW5nRnVuY3Rpb24oKSkgewotICAgICAgICBjb25zdCBTdGVw
c1RpbWluZ0Z1bmN0aW9uKiBzdGYgPSBzdGF0aWNfY2FzdDxjb25zdCBTdGVwc1RpbWluZ0Z1bmN0
aW9uKj4odGltaW5nRnVuY3Rpb24pOwotICAgICAgICByZXR1cm4gc29sdmVTdGVwc0Z1bmN0aW9u
KHN0Zi0+bnVtYmVyT2ZTdGVwcygpLCBzdGYtPnN0ZXBBdFN0YXJ0KCksIGRvdWJsZShwcm9ncmVz
cykpOwotICAgIH0KLQotICAgIHJldHVybiBwcm9ncmVzczsKLX0KLQotc3RhdGljIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbnMqIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHRvLCBkb3VibGUgcHJvZ3Jl
c3MsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGJvb2wgbGlzdHNNYXRjaCkKLXsKLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7Ci0KLSAgICAvLyBGaXJzdCBmcmFtZSBvZiBhbiBhbmlt
YXRpb24uCi0gICAgaWYgKCFwcm9ncmVzcykgewotICAgICAgICBmcm9tLT5hcHBseShib3hTaXpl
LCBtYXRyaXgpOwotICAgICAgICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAgIC8vIExhc3Qg
ZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgotICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7Ci0gICAgICAg
IHRvLT5hcHBseShib3hTaXplLCBtYXRyaXgpOwotICAgICAgICByZXR1cm4gbWF0cml4OwotICAg
IH0KLQotICAgIC8vIElmIHdlIGhhdmUgaW5jb21wYXRpYmxlIG9wZXJhdGlvbiBsaXN0cywgd2Ug
YmxlbmQgdGhlIHJlc3VsdGluZyBtYXRyaWNlcy4KLSAgICBpZiAoIWxpc3RzTWF0Y2gpIHsKLSAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbU1hdHJpeDsKLSAgICAgICAgdG8tPmFwcGx5
KGJveFNpemUsIG1hdHJpeCk7Ci0gICAgICAgIGZyb20tPmFwcGx5KGJveFNpemUsIGZyb21NYXRy
aXgpOwotICAgICAgICBtYXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpOwotICAgICAg
ICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAgIC8vIEFuaW1hdGlvbiB0byAiLXdlYmtpdC10
cmFuc2Zvcm06IG5vbmUiLgotICAgIGlmICghdG8tPnNpemUoKSkgewotICAgICAgICBUcmFuc2Zv
cm1PcGVyYXRpb25zIGJsZW5kZWQoKmZyb20pOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsZW5kZWQub3BlcmF0aW9ucygpLnNpemUoKTsgKytpKQotICAgICAgICAgICAgYmxlbmRl
ZC5vcGVyYXRpb25zKClbaV0tPmJsZW5kKDAsIHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0cml4
LCBib3hTaXplKTsKLSAgICAgICAgcmV0dXJuIG1hdHJpeDsKLSAgICB9Ci0KLSAgICAvLyBBbmlt
YXRpb24gZnJvbSAiLXdlYmtpdC10cmFuc2Zvcm06IG5vbmUiLgotICAgIGlmICghZnJvbS0+c2l6
ZSgpKSB7Ci0gICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZCgqdG8pOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsZW5kZWQub3BlcmF0aW9ucygpLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5kKDAsIDEuIC0gcHJv
Z3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOwotICAgICAgICByZXR1cm4gbWF0
cml4OwotICAgIH0KLQotICAgIC8vIE5vcm1hbCBhbmltYXRpb24gd2l0aCBhIG1hdGNoaW5nIG9w
ZXJhdGlvbiBsaXN0LgotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZCgqdG8pOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxlbmRlZC5vcGVyYXRpb25zKCkuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZChmcm9tLT5hdChpKSwgcHJv
Z3Jlc3MsICFmcm9tLT5hdChpKSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7Ci0gICAgcmV0dXJu
IG1hdHJpeDsKLX0KLQotCi1UZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMsIGNvbnN0IEludFNpemUm
IGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBkb3VibGUgdGltZU9mZnNldCwg
Ym9vbCBsaXN0c01hdGNoKQotICAgIDogbV9rZXlmcmFtZXMoa2V5ZnJhbWVzKQotICAgICwgbV9i
b3hTaXplKGJveFNpemUpCi0gICAgLCBtX2FuaW1hdGlvbihBbmltYXRpb246OmNyZWF0ZShhbmlt
YXRpb24pKQotICAgICwgbV9saXN0c01hdGNoKGxpc3RzTWF0Y2gpCi0gICAgLCBtX3N0YXJ0VGlt
ZShXVEY6OmN1cnJlbnRUaW1lKCkgLSB0aW1lT2Zmc2V0KQotICAgICwgbV9wYXVzZVRpbWUoMCkK
LSAgICAsIG1fc3RhdGUoUGxheWluZ1N0YXRlKQotewotfQotCi12b2lkIFRleHR1cmVNYXBwZXJB
bmltYXRpb246OmFwcGx5SW50ZXJuYWwoVGV4dHVyZU1hcHBlckFuaW1hdGlvbkNsaWVudCogY2xp
ZW50LCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHRv
LCBmbG9hdCBwcm9ncmVzcykKLXsKLSAgICBzd2l0Y2ggKG1fa2V5ZnJhbWVzLnByb3BlcnR5KCkp
IHsKLSAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5OgotICAgICAgICBjbGllbnQtPnNl
dE9wYWNpdHkoYXBwbHlPcGFjaXR5QW5pbWF0aW9uKChzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFu
aW1hdGlvblZhbHVlKj4oZnJvbSktPnZhbHVlKCkpLCAoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRB
bmltYXRpb25WYWx1ZSo+KHRvKS0+dmFsdWUoKSksIHByb2dyZXNzKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06Ci0gICAgICAgIGNs
aWVudC0+c2V0VHJhbnNmb3JtKGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKHN0YXRpY19jYXN0PGNv
bnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4oZnJvbSktPnZhbHVlKCksIHN0YXRpY19jYXN0
PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpLCBwcm9ncmVzcywg
bV9ib3hTaXplLCBtX2xpc3RzTWF0Y2gpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotYm9vbCBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKHN0YXRlKCkgIT0g
U3RvcHBlZFN0YXRlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX2FuaW1h
dGlvbi0+ZmlsbHNGb3J3YXJkcygpOwotfQotCi1ib29sIFRleHR1cmVNYXBwZXJBbmltYXRpb25z
OjpoYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0eXBlKSBjb25z
dAotewotICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4g
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoSGFz
aE1hcDxTdHJpbmcsIFZlY3RvcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgY29uc3QgVmVjdG9yPFRleHR1cmVNYXBwZXJBbmltYXRpb24+JiBhbmltYXRpb25zID0gaXQt
PnNlY29uZDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb25zLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uc1tpXS5pc0FjdGl2ZSgpICYmIGFu
aW1hdGlvbnNbaV0ucHJvcGVydHkoKSA9PSB0eXBlKQotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAotewotICAg
IEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxTdHJp
bmcsIFZlY3RvcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3Qg
VmVjdG9yPFRleHR1cmVNYXBwZXJBbmltYXRpb24+JiBhbmltYXRpb25zID0gaXQtPnNlY29uZDsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb25zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uc1tpXS5zdGF0ZSgpID09IFRleHR1cmVNYXBwZXJB
bmltYXRpb246OlBsYXlpbmdTdGF0ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uOjphcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50KiBjbGllbnQp
Ci17Ci0gICAgaWYgKHN0YXRlKCkgPT0gU3RvcHBlZFN0YXRlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBkb3VibGUgdG90YWxSdW5uaW5nVGltZSA9IG1fc3RhdGUgPT0gUGF1c2VkU3RhdGUgPyBt
X3BhdXNlVGltZSA6IFdURjo6Y3VycmVudFRpbWUoKSAtIG1fc3RhcnRUaW1lOwotICAgIGRvdWJs
ZSBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUodG90YWxSdW5uaW5n
VGltZSwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCksIG1fYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSk7
Ci0KLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgIT0gQW5pbWF0aW9uOjpJ
dGVyYXRpb25Db3VudEluZmluaXRlICYmIHRvdGFsUnVubmluZ1RpbWUgPj0gbV9hbmltYXRpb24t
PmR1cmF0aW9uKCkgKiBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSkKLSAgICAgICAgc2V0
U3RhdGUoU3RvcHBlZFN0YXRlKTsKLQotICAgIGlmICghbm9ybWFsaXplZFZhbHVlKSB7Ci0gICAg
ICAgIGFwcGx5SW50ZXJuYWwoY2xpZW50LCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMu
YXQoMSksIDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG5vcm1hbGl6ZWRW
YWx1ZSA9PSAxLjApIHsKLSAgICAgICAgYXBwbHlJbnRlcm5hbChjbGllbnQsIG1fa2V5ZnJhbWVz
LmF0KG1fa2V5ZnJhbWVzLnNpemUoKSAtIDIpLCBtX2tleWZyYW1lcy5hdChtX2tleWZyYW1lcy5z
aXplKCkgLSAxKSwgMSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1fa2V5ZnJh
bWVzLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IGFwcGx5VGltaW5n
RnVuY3Rpb24obV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCksIG5vcm1hbGl6ZWRW
YWx1ZSwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOwotICAgICAgICBhcHBseUludGVybmFsKGNs
aWVudCwgbV9rZXlmcmFtZXMuYXQoMCksIG1fa2V5ZnJhbWVzLmF0KDEpLCBub3JtYWxpemVkVmFs
dWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2tleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9u
VmFsdWUqIGZyb20gPSBtX2tleWZyYW1lcy5hdChpKTsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9u
VmFsdWUqIHRvID0gbV9rZXlmcmFtZXMuYXQoaSArIDEpOwotICAgICAgICBpZiAoZnJvbS0+a2V5
VGltZSgpID4gbm9ybWFsaXplZFZhbHVlIHx8IHRvLT5rZXlUaW1lKCkgPCBub3JtYWxpemVkVmFs
dWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBub3JtYWxpemVkVmFsdWUgPSAo
bm9ybWFsaXplZFZhbHVlIC0gZnJvbS0+a2V5VGltZSgpKSAvICh0by0+a2V5VGltZSgpIC0gZnJv
bS0+a2V5VGltZSgpKTsKLSAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gYXBwbHlUaW1pbmdGdW5j
dGlvbihmcm9tLT50aW1pbmdGdW5jdGlvbigpLCBub3JtYWxpemVkVmFsdWUsIG1fYW5pbWF0aW9u
LT5kdXJhdGlvbigpKTsKLSAgICAgICAgYXBwbHlJbnRlcm5hbChjbGllbnQsIGZyb20sIHRvLCBu
b3JtYWxpemVkVmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbjo6cGF1c2UoZG91YmxlIG9mZnNldCkKLXsKLSAgICAvLyBGSVhNRTog
c2hvdWxkIGFwcGx5IG9mZnNldCBoZXJlLgotICAgIHNldFN0YXRlKFBhdXNlZFN0YXRlKTsKLSAg
ICBtX3BhdXNlVGltZSA9IFdURjo6Y3VycmVudFRpbWUoKSAtIG9mZnNldDsKLX0KLQotdm9pZCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6YWRkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKQotewotICAgIEhhc2hNYXA8U3RyaW5nLCBW
ZWN0b3I8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlv
bnMuZmluZChuYW1lKTsKLSAgICBpZiAoaXQgIT0gbV9hbmltYXRpb25zLmVuZCgpKSB7Ci0gICAg
ICAgIGl0LT5zZWNvbmQuYXBwZW5kKGFuaW1hdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBWZWN0b3I8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gYW5pbWF0aW9uczsKLSAgICBh
bmltYXRpb25zLmFwcGVuZChhbmltYXRpb24pOwotICAgIG1fYW5pbWF0aW9ucy5hZGQobmFtZSwg
YW5pbWF0aW9ucyk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnBhdXNlKGNv
bnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIG9mZnNldCkKLXsKLSAgICBIYXNoTWFwPFN0cmluZywg
VmVjdG9yPFRleHR1cmVNYXBwZXJBbmltYXRpb24+ID46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRp
b25zLmZpbmQobmFtZSk7Ci0gICAgaWYgKGl0ID09IG1fYW5pbWF0aW9ucy5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdC0+c2Vjb25kLnNpemUo
KTsgaSsrKSAKLSAgICAgICAgaXQtPnNlY29uZFtpXS5wYXVzZShvZmZzZXQpOwotfQotCi12b2lk
IFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xp
ZW50KiBjbGllbnQpCi17Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uPiA+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9y
IChIYXNoTWFwPFN0cmluZywgVmVjdG9yPFRleHR1cmVNYXBwZXJBbmltYXRpb24+ID46Oml0ZXJh
dG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0LT5zZWNvbmQuc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICBpdC0+c2Vjb25kW2ldLmFwcGx5KGNsaWVudCk7Ci0gICAgfQotfQotCi19Ci0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkMGU5MGI1MTg3ZmM3Mjc5MjM0OTM3YzJmYzk0YTJmNmMyMzM0MzUzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4NSArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2lmbmRlZiBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKLSNkZWZpbmUgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbl9oCi0KLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikKLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVGV4dHVyZU1hcHBlckFuaW1hdGlvbkNsaWVudCB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAwOwot
fTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBB
bmltYXRpb25TdGF0ZSB7IFBsYXlpbmdTdGF0ZSwgUGF1c2VkU3RhdGUsIFN0b3BwZWRTdGF0ZSB9
OwotCi0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbigpCi0gICAgICAgIDogbV9rZXlmcmFtZXMo
QW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQpCi0gICAgeyB9Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmLCBjb25zdCBBbmlt
YXRpb24qLCBkb3VibGUsIGJvb2wpOwotICAgIHZvaWQgYXBwbHkoVGV4dHVyZU1hcHBlckFuaW1h
dGlvbkNsaWVudCopOwotICAgIHZvaWQgcGF1c2UoZG91YmxlKTsKLSAgICBBbmltYXRpb25TdGF0
ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KLSAgICB2b2lkIHNldFN0YXRlKEFu
aW1hdGlvblN0YXRlIHMpIHsgbV9zdGF0ZSA9IHM7IH0KLSAgICBBbmltYXRlZFByb3BlcnR5SUQg
cHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5wcm9wZXJ0eSgpOyB9Ci0gICAg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZvaWQgYXBwbHlJbnRlcm5h
bChUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50KiwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGZy
b20sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQgcHJvZ3Jlc3MpOwotICAgIEtleWZy
YW1lVmFsdWVMaXN0IG1fa2V5ZnJhbWVzOwotICAgIEludFNpemUgbV9ib3hTaXplOwotICAgIFJl
ZlB0cjxBbmltYXRpb24+IG1fYW5pbWF0aW9uOwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgYm9v
bCBtX2xpc3RzTWF0Y2g7Ci0gICAgYm9vbCBtX2hhc0JpZ1JvdGF0aW9uOwotICAgIGRvdWJsZSBt
X3N0YXJ0VGltZTsKLSAgICBkb3VibGUgbV9wYXVzZVRpbWU7Ci0gICAgQW5pbWF0aW9uU3RhdGUg
bV9zdGF0ZTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIHsKLXB1YmxpYzoK
LSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucygpIHsgfQotCi0gICAgdm9pZCBhZGQoY29uc3Qg
U3RyaW5nJiwgY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYpOwotICAgIHZvaWQgcmVtb3Zl
KGNvbnN0IFN0cmluZyYgbmFtZSkgeyBtX2FuaW1hdGlvbnMucmVtb3ZlKG5hbWUpOyB9Ci0gICAg
dm9pZCBwYXVzZShjb25zdCBTdHJpbmcmLCBkb3VibGUpOwotICAgIHZvaWQgYXBwbHkoVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbkNsaWVudCopOwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0KLQotICAgIGJvb2wgaGFzUnVubmluZ0FuaW1h
dGlvbnMoKSBjb25zdDsKLSAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0
ZWRQcm9wZXJ0eUlEIHR5cGUpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEhhc2hNYXA8U3RyaW5n
LCBWZWN0b3I8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7Ci19OwotCi19
Ci0jZW5kaWYgLy8gVVNFKFRFWFRVUkVfTUFQUEVSKQotCi0jZW5kaWYgLy8gVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKaW5kZXggZGUyZDY3ZjczODljN2Vm
MTQ2ODNlMWY0OTY4NjIwZDI4MjgxZmRlNi4uNDUwNDJjYThkZmU1NzZjZDdjNmE0MmM3YTExOWFh
NmQwODE3NjdmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaApAQCAtMjQsMTEgKzI0LDExIEBA
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmltYXRp
b24uaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiSW1h
Z2UuaCIKICNpbmNsdWRlICJJbnRQb2ludEhhc2guaCIKLSNpbmNsdWRlICJMYXllclRyYW5zZm9y
bS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgpAQCAtNTYs
NyArNTYsNyBAQCBwdWJsaWM6CiAgICAgeyB9CiB9OwogCi1jbGFzcyBUZXh0dXJlTWFwcGVyTGF5
ZXIgOiBwdWJsaWMgVGV4dHVyZU1hcHBlckFuaW1hdGlvbkNsaWVudCB7CitjbGFzcyBUZXh0dXJl
TWFwcGVyTGF5ZXIgOiBwdWJsaWMgR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6Q2xpZW50IHsKIAog
cHVibGljOgogICAgIC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIgd2hpY2ggcHJv
cGVydGllcyBvZiB0aGUgbGF5ZXIgaGF2ZSBiZWVuCkBAIC0xNTcsNiArMTU3LDEwIEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIGRyYXdSZXBhaW50Q291bnRlcihHcmFwaGljc0NvbnRleHQqLCBHcmFw
aGljc0xheWVyKik7CiAKKyAgICAvLyBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpDbGllbnQKKyAg
ICB2b2lkIHNldEFuaW1hdGVkVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgpIHsgc2V0VHJhbnNmb3JtKG1hdHJpeCk7IH0KKyAgICB2b2lkIHNldEFuaW1hdGVkT3Bh
Y2l0eShmbG9hdCBvcGFjaXR5KSB7IHNldE9wYWNpdHkob3BhY2l0eSk7IH0KKwogICAgIHZvaWQg
c3luY0FuaW1hdGlvbnMoKTsKICAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OwogICAgIGVudW0g
Q29udGVudHNMYXllckNvdW50IHsKQEAgLTE2OCw3ICsxNzIsNyBAQCBwcml2YXRlOgogICAgIENv
bnRlbnRzTGF5ZXJDb3VudCBjb3VudFBvdGVudGlhbExheWVyc1dpdGhDb250ZW50cygpIGNvbnN0
OwogICAgIGJvb2wgc2hvdWxkUGFpbnRUb0ludGVybWVkaWF0ZVN1cmZhY2UoKSBjb25zdDsKIAot
ICAgIExheWVyVHJhbnNmb3JtIG1fdHJhbnNmb3JtOworICAgIEdyYXBoaWNzTGF5ZXJUcmFuc2Zv
cm0gbV90cmFuc2Zvcm07CiAKICAgICBpbmxpbmUgRmxvYXRSZWN0IGxheWVyUmVjdCgpIGNvbnN0
CiAgICAgewpAQCAtMjMwLDcgKzIzNCw3IEBAIHByaXZhdGU6CiAKICAgICBTdGF0ZSBtX3N0YXRl
OwogICAgIFRleHR1cmVNYXBwZXIqIG1fdGV4dHVyZU1hcHBlcjsKLSAgICBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CisgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgbV9h
bmltYXRpb25zOwogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb25EZWx0YTsKICAgICBib29s
IG1fZml4ZWRUb1ZpZXdwb3J0OwogICAgIENvbG9yIG1fZGVidWdCb3JkZXJDb2xvcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGlu
YXRvci9XZWJHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5oCmluZGV4IDY0OWM5YTk1
MGM3YzEzODBkMjQxZmIyNWU5YmIxOTNhNGZmZDZkNGEuLjljZThlY2RhZDdkMWE1MzJhYzMxNzFj
YzllMGNmMDliYzU3NzFhNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdy
YXBoaWNzTGF5ZXIuaApAQCAtMjMsOSArMjMsOSBAQAogCiAjaW5jbHVkZSAiRmxvYXRQb2ludDNE
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJU
cmFuc2Zvcm0uaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNp
bmNsdWRlICJMYXllclRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgog
I2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3Rv
cmVDbGllbnQuaCIKQEAgLTE2NSw3ICsxNjUsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJbWFn
ZT4gbV9pbWFnZTsKICAgICBHcmFwaGljc0xheWVyKiBtX21hc2tUYXJnZXQ7CiAgICAgRmxvYXRS
ZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKLSAgICBMYXllclRyYW5zZm9ybSBtX2xheWVyVHJhbnNm
b3JtOworICAgIEdyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0gbV9sYXllclRyYW5zZm9ybTsKICAgICBi
b29sIG1faW5VcGRhdGVNb2RlIDogMTsKICAgICBib29sIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJl
Y3Q6IDE7CiAgICAgYm9vbCBtX3Nob3VsZFN5bmNMYXllclN0YXRlOiAxOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151987</attachid>
            <date>2012-07-12 10:23:01 -0700</date>
            <delta_ts>2012-07-12 11:14:25 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-91111-20120712102246.patch</filename>
            <type>text/plain</type>
            <size>53841</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTk1NDdiMDQ4ZDlhM2E2
M2NhMmNkNTVjYjJlNGI1ZjljMDUzZWRkYS4uMmJmZjNiZWFkMDNlYWM5MDlhYmU3ZGFiMzlmNjM4
MmNiMzFmMjM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA3LTEyICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgTW92ZSBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uIGFuZCB0ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0gdG8gcGxhdGZv
cm0vZ3JhcGhpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkxMTExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5z
ZW4uCisKKyAgICAgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiBhbmQgTGF5ZXJUcmFuc2Zvcm0g
YXJlIG5vdCBzcGVjaWZpYyB0byBUZXh0dXJlTWFwcGVyLCBhbmQgd2Ugd2FudAorICAgICAgICB0
byB1c2UgdGhlbSBmb3Igb3RoZXIgcHVycG9zZXMgYXMgd2VsbC4gTW92aW5nIHRoZW0gdG8gcGxh
dGZvcm0vZ3JhcGhpY3Mgd291bGQgbWFrZSB0aGF0CisgICAgICAgIG1vcmUgZXhwbGljaXQuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBtb3ZpbmcgZmlsZXMgYXJvdW5kLgorCisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5p
bWF0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVy
VHJhbnNmb3JtLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
VHJhbnNmb3JtLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6CisgICAg
ICAgIChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oOgorICAgICAgICAoVGV4dHVyZU1hcHBl
ckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c2V0QW5pbWF0
ZWRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRB
bmltYXRlZE9wYWNpdHkpOgorCiAyMDEyLTA3LTEyICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgcjEyMjQ2MCBpbnNwZWN0b3IgY2xv
c3VyZSBjb21waWxhdGlvbiBmaXggZm9sbG93IHVwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDhmZmRhYjE3MmYx
NmQ5N2NlMGUyYmIzYzE5YTE5NmZhMzE2ODIzOGUuLjUzM2NmYWY1OTRlMjVkZjg2YWI5OGM2NGI0
MTM4MWQ3ZjBlYTYzMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNy0xMiAg
Tm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIE1v
dmUgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiBhbmQgdGV4bWFwL0xheWVyVHJhbnNmb3JtIHRvIHBs
YXRmb3JtL2dyYXBoaWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MTExMQorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuLgorCisgICAgICAgIEluY2x1ZGUgdGhlIG5ldyBmaWxlbmFtZXMuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXll
ci5oOgorICAgICAgICAoV2ViR3JhcGhpY3NMYXllcik6CisKIDIwMTItMDctMTIgIFN1ZGFyc2Fu
YSBOYWdpbmVuaSAgPHN1ZGFyc2FuYS5uYWdpbmVuaUBsaW51eC5pbnRlbC5jb20+CiAKICAgICAg
ICAgW0VGTF1bV0syXSBCcm93c2VyIGNyYXNoZXMgcnVubmluZyBCYXR0ZXJ5U3RhdHVzIHRlc3Rz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggOGY0M2RiODAyZDk2ZWIxYjBjOTJi
ZGU2MGE4MjQ2MzA3ZmUwZTQ0Yi4uNjNiMTcwYTA3MTEwYzkyN2E0N2Q3MGViOGY1NDlmMjkwMzRl
OWRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC02MTIyLDEwICs2MTIyLDEw
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclRyYW5z
Zm9ybS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
QW5pbWF0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllckFuaW1hdGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBc
CkBAIC02MTQ1LDEwICs2MTQ1LDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCi0JU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24u
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckFuaW1hdGlvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyVHJhbnNmb3JtLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NMYXllclRyYW5zZm9ybS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
QmFja2luZ1N0b3JlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBmYzQyYzExYjVmODU2OWQ4MDhk
ODBjYWNlZmY2YmU3MmJlYjI0Nzc1Li45NDk0MWIxMjBjMjM5OWIxZjVkNDU4YWYyNTE4MzJiMmQw
ZGZiNTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTExMTksNiArMTExOSw4IEBAIFNPVVJDRVMgKz0gXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24u
Y3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwIFwKQEAgLTIyOTQsNyArMjI5Niw5IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmggXAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyVHJhbnNmb3JtLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlczNELmggXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggXApAQCAtMjMxOCw5ICsyMzIyLDcgQEAgSEVBREVSUyAr
PSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmggXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIFwKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmggXApAQCAtMjkzNiw5ICsyOTM4LDcgQEAgU09VUkNF
UyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0LmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBcCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCBmODMyZmM1YTMwYjRkZTEyMWYxNzNhNWI1ZTdlNzAzOWM3YTk2NGMyLi42MDhkYmJhNDQwOTNh
MDE0YTJhYzc4MjA3ZGIyNzZhOTNkMmIxZjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNDkyLDYg
KzM0OTIsMTAgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9u
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckFuaW1h
dGlvbi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJh
bnNmb3JtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
clRyYW5zZm9ybS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5
cGVzLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAnLApAQCAtMzkwNiwx
MiArMzkxMCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9UcmFuc2Zv
cm1hdGlvbk1hdHJpeFNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcCcsCi0g
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCcs
Ci0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmlt
YXRpb24uY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmlt
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ckFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWY4MjMyYzVkNTU0NzgzYTQ0MWU0YjE3OGE5Yjkw
NmNlYmZiMWY1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMjg1IEBACisvKgor
IENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmltYXRpb24uaCIKKworI2luY2x1ZGUgIlVuaXRCZXpp
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisKK3N0YXRpYyBib29sIHNob3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZShBbmltYXRpb246
OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIGludCBsb29wQ291bnQpCit7CisgICAgaWYg
KCgoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlKSAm
JiAobG9vcENvdW50ICYgMSkpCisgICAgICAgIHx8ICgoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6
QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkgJiYgIShsb29wQ291bnQgJiAxKSkK
KyAgICAgICAgfHwgZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2
ZXJzZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0
aWMgZG91YmxlIG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZShkb3VibGUgcnVubmluZ1RpbWUsIGRv
dWJsZSBkdXJhdGlvbiwgQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQor
eworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgaW50
IGxvb3BDb3VudCA9IHJ1bm5pbmdUaW1lIC8gZHVyYXRpb247CisgICAgY29uc3QgZG91YmxlIGxh
c3RGdWxsTG9vcCA9IGR1cmF0aW9uICogZG91YmxlKGxvb3BDb3VudCk7CisgICAgY29uc3QgZG91
YmxlIHJlbWFpbmRlciA9IHJ1bm5pbmdUaW1lIC0gbGFzdEZ1bGxMb29wOworICAgIGNvbnN0IGRv
dWJsZSBub3JtYWxpemVkID0gcmVtYWluZGVyIC8gZHVyYXRpb247CisKKyAgICByZXR1cm4gc2hv
dWxkUmV2ZXJzZUFuaW1hdGlvblZhbHVlKGRpcmVjdGlvbiwgbG9vcENvdW50KSA/IDEgLSBub3Jt
YWxpemVkIDogbm9ybWFsaXplZDsKK30KKworc3RhdGljIGZsb2F0IGFwcGx5T3BhY2l0eUFuaW1h
dGlvbihmbG9hdCBmcm9tT3BhY2l0eSwgZmxvYXQgdG9PcGFjaXR5LCBkb3VibGUgcHJvZ3Jlc3Mp
Cit7CisgICAgLy8gT3B0aW1pemF0aW9uOiBzcGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFsdWVzICgw
IGFuZCAxKS4KKyAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wKQorICAgICAgICByZXR1cm4gdG9PcGFj
aXR5OworCisgICAgaWYgKCFwcm9ncmVzcykKKyAgICAgICAgcmV0dXJuIGZyb21PcGFjaXR5Owor
CisgICAgcmV0dXJuIGZyb21PcGFjaXR5ICsgcHJvZ3Jlc3MgKiAodG9PcGFjaXR5IC0gZnJvbU9w
YWNpdHkpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVwc2lsb24oZG91YmxlIGR1
cmF0aW9uKQoreworICAgIHJldHVybiAxLjAgLyAoMjAwLjAgKiBkdXJhdGlvbik7Cit9CisKK3N0
YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihkb3VibGUgcDF4LCBk
b3VibGUgcDF5LCBkb3VibGUgcDJ4LCBkb3VibGUgcDJ5LCBkb3VibGUgdCwgZG91YmxlIGR1cmF0
aW9uKQoreworICAgIHJldHVybiBVbml0QmV6aWVyKHAxeCwgcDF5LCBwMngsIHAyeSkuc29sdmUo
dCwgc29sdmVFcHNpbG9uKGR1cmF0aW9uKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHNv
bHZlU3RlcHNGdW5jdGlvbihpbnQgbnVtU3RlcHMsIGJvb2wgc3RlcEF0U3RhcnQsIGRvdWJsZSB0
KQoreworICAgIGlmIChzdGVwQXRTdGFydCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWluKDEuMCwg
KGZsb29yKG51bVN0ZXBzICogdCkgKyAxKSAvIG51bVN0ZXBzKTsKKyAgICByZXR1cm4gZmxvb3Io
bnVtU3RlcHMgKiB0KSAvIG51bVN0ZXBzOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5
VGltaW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uLCBmbG9h
dCBwcm9ncmVzcywgZG91YmxlIGR1cmF0aW9uKQoreworICAgIGlmICghdGltaW5nRnVuY3Rpb24p
CisgICAgICAgIHJldHVybiBwcm9ncmVzczsKKworICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+aXND
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvbiogY3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXpp
ZXJGdW5jdGlvbihjdGYtPngxKCksIGN0Zi0+eTEoKSwgY3RmLT54MigpLCBjdGYtPnkyKCksIHBy
b2dyZXNzLCBkdXJhdGlvbik7CisgICAgfQorCisgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc1N0
ZXBzVGltaW5nRnVuY3Rpb24oKSkgeworICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9u
KiBzdGYgPSBzdGF0aWNfY2FzdDxjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVu
Y3Rpb24pOworICAgICAgICByZXR1cm4gc29sdmVTdGVwc0Z1bmN0aW9uKHN0Zi0+bnVtYmVyT2ZT
dGVwcygpLCBzdGYtPnN0ZXBBdFN0YXJ0KCksIGRvdWJsZShwcm9ncmVzcykpOworICAgIH0KKwor
ICAgIHJldHVybiBwcm9ncmVzczsKK30KKworc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFw
cGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZyb20sIGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IEludFNp
emUmIGJveFNpemUsIGJvb2wgbGlzdHNNYXRjaCkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtYXRyaXg7CisKKyAgICAvLyBGaXJzdCBmcmFtZSBvZiBhbiBhbmltYXRpb24uCisgICAgaWYg
KCFwcm9ncmVzcykgeworICAgICAgICBmcm9tLT5hcHBseShib3hTaXplLCBtYXRyaXgpOworICAg
ICAgICByZXR1cm4gbWF0cml4OworICAgIH0KKworICAgIC8vIExhc3QgZnJhbWUgb2YgYW4gYW5p
bWF0aW9uLgorICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7CisgICAgICAgIHRvLT5hcHBseShib3hT
aXplLCBtYXRyaXgpOworICAgICAgICByZXR1cm4gbWF0cml4OworICAgIH0KKworICAgIC8vIElm
IHdlIGhhdmUgaW5jb21wYXRpYmxlIG9wZXJhdGlvbiBsaXN0cywgd2UgYmxlbmQgdGhlIHJlc3Vs
dGluZyBtYXRyaWNlcy4KKyAgICBpZiAoIWxpc3RzTWF0Y2gpIHsKKyAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggZnJvbU1hdHJpeDsKKyAgICAgICAgdG8tPmFwcGx5KGJveFNpemUsIG1hdHJp
eCk7CisgICAgICAgIGZyb20tPmFwcGx5KGJveFNpemUsIGZyb21NYXRyaXgpOworICAgICAgICBt
YXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gbWF0cml4
OworICAgIH0KKworICAgIC8vIEFuaW1hdGlvbiB0byAiLXdlYmtpdC10cmFuc2Zvcm06IG5vbmUi
LgorICAgIGlmICghdG8tPnNpemUoKSkgeworICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJs
ZW5kZWQoKmZyb20pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsZW5kZWQub3Bl
cmF0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClb
aV0tPmJsZW5kKDAsIHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKKyAg
ICAgICAgcmV0dXJuIG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBBbmltYXRpb24gZnJvbSAiLXdl
YmtpdC10cmFuc2Zvcm06IG5vbmUiLgorICAgIGlmICghZnJvbS0+c2l6ZSgpKSB7CisgICAgICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZCgqdG8pOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsZW5kZWQub3BlcmF0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
YmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5kKDAsIDEuIC0gcHJvZ3Jlc3MsIHRydWUpLT5h
cHBseShtYXRyaXgsIGJveFNpemUpOworICAgICAgICByZXR1cm4gbWF0cml4OworICAgIH0KKwor
ICAgIC8vIE5vcm1hbCBhbmltYXRpb24gd2l0aCBhIG1hdGNoaW5nIG9wZXJhdGlvbiBsaXN0Lgor
ICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZCgqdG8pOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmxlbmRlZC5vcGVyYXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGJsZW5k
ZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZChmcm9tLT5hdChpKSwgcHJvZ3Jlc3MsICFmcm9tLT5h
dChpKSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7CisgICAgcmV0dXJuIG1hdHJpeDsKK30KKwor
CitHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uKGNvbnN0IEtl
eWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0
IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCBsaXN0c01hdGNo
KQorICAgIDogbV9rZXlmcmFtZXMoa2V5ZnJhbWVzKQorICAgICwgbV9ib3hTaXplKGJveFNpemUp
CisgICAgLCBtX2FuaW1hdGlvbihBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24pKQorICAgICwg
bV9saXN0c01hdGNoKGxpc3RzTWF0Y2gpCisgICAgLCBtX3N0YXJ0VGltZShXVEY6OmN1cnJlbnRU
aW1lKCkgLSB0aW1lT2Zmc2V0KQorICAgICwgbV9wYXVzZVRpbWUoMCkKKyAgICAsIG1fc3RhdGUo
UGxheWluZ1N0YXRlKQoreworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OmFwcGx5
SW50ZXJuYWwoQ2xpZW50KiBjbGllbnQsIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBmcm9tLCBjb25z
dCBBbmltYXRpb25WYWx1ZSogdG8sIGZsb2F0IHByb2dyZXNzKQoreworICAgIHN3aXRjaCAobV9r
ZXlmcmFtZXMucHJvcGVydHkoKSkgeworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6
CisgICAgICAgIGNsaWVudC0+c2V0QW5pbWF0ZWRPcGFjaXR5KGFwcGx5T3BhY2l0eUFuaW1hdGlv
bigoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSo+KGZyb20pLT52YWx1ZSgp
KSwgKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPih0byktPnZhbHVlKCkp
LCBwcm9ncmVzcykpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5
V2Via2l0VHJhbnNmb3JtOgorICAgICAgICBjbGllbnQtPnNldEFuaW1hdGVkVHJhbnNmb3JtKGFw
cGx5VHJhbnNmb3JtQW5pbWF0aW9uKHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKj4oZnJvbSktPnZhbHVlKCksIHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlKj4odG8pLT52YWx1ZSgpLCBwcm9ncmVzcywgbV9ib3hTaXplLCBtX2xpc3RzTWF0
Y2gpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjppc0Fj
dGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKHN0YXRlKCkgIT0gU3RvcHBlZFN0YXRlKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBtX2FuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygp
OworfQorCitib29sIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOjpoYXNBY3RpdmVBbmltYXRpb25z
T2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0eXBlKSBjb25zdAoreworICAgIEhhc2hNYXA8U3Ry
aW5nLCBWZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9hbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxH
cmFwaGljc0xheWVyQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9u
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgVmVjdG9yPEdyYXBo
aWNzTGF5ZXJBbmltYXRpb24+JiBhbmltYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBpZiAoYW5pbWF0aW9uc1tpXS5pc0FjdGl2ZSgpICYmIGFuaW1hdGlvbnNbaV0ucHJvcGVydHko
KSA9PSB0eXBlKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHcmFwaGljc0xheWVyQW5pbWF0aW9uczo6
aGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAoreworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0
b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmlt
YXRpb25zLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxHcmFwaGljc0xh
eWVyQW5pbWF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXJB
bmltYXRpb24+JiBhbmltYXRpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoYW5p
bWF0aW9uc1tpXS5zdGF0ZSgpID09IEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OlBsYXlpbmdTdGF0
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjphcHBseShD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBpZiAoc3RhdGUoKSA9PSBTdG9wcGVkU3RhdGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGRvdWJsZSB0b3RhbFJ1bm5pbmdUaW1lID0gbV9zdGF0ZSA9PSBQ
YXVzZWRTdGF0ZSA/IG1fcGF1c2VUaW1lIDogV1RGOjpjdXJyZW50VGltZSgpIC0gbV9zdGFydFRp
bWU7CisgICAgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1
ZSh0b3RhbFJ1bm5pbmdUaW1lLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSwgbV9hbmltYXRpb24t
PmRpcmVjdGlvbigpKTsKKworICAgIGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAh
PSBBbmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUgJiYgdG90YWxSdW5uaW5nVGltZSA+
PSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgp
KQorICAgICAgICBzZXRTdGF0ZShTdG9wcGVkU3RhdGUpOworCisgICAgaWYgKCFub3JtYWxpemVk
VmFsdWUpIHsKKyAgICAgICAgYXBwbHlJbnRlcm5hbChjbGllbnQsIG1fa2V5ZnJhbWVzLmF0KDAp
LCBtX2tleWZyYW1lcy5hdCgxKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobm9ybWFsaXplZFZhbHVlID09IDEuMCkgeworICAgICAgICBhcHBseUludGVybmFsKGNsaWVu
dCwgbV9rZXlmcmFtZXMuYXQobV9rZXlmcmFtZXMuc2l6ZSgpIC0gMiksIG1fa2V5ZnJhbWVzLmF0
KG1fa2V5ZnJhbWVzLnNpemUoKSAtIDEpLCAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAobV9rZXlmcmFtZXMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAgbm9ybWFsaXplZFZhbHVl
ID0gYXBwbHlUaW1pbmdGdW5jdGlvbihtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS5nZXQo
KSwgbm9ybWFsaXplZFZhbHVlLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CisgICAgICAgIGFw
cGx5SW50ZXJuYWwoY2xpZW50LCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSks
IG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBj
b25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSA9IG1fa2V5ZnJhbWVzLmF0KGkpOworICAgICAgICBj
b25zdCBBbmltYXRpb25WYWx1ZSogdG8gPSBtX2tleWZyYW1lcy5hdChpICsgMSk7CisgICAgICAg
IGlmIChmcm9tLT5rZXlUaW1lKCkgPiBub3JtYWxpemVkVmFsdWUgfHwgdG8tPmtleVRpbWUoKSA8
IG5vcm1hbGl6ZWRWYWx1ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG5vcm1h
bGl6ZWRWYWx1ZSA9IChub3JtYWxpemVkVmFsdWUgLSBmcm9tLT5rZXlUaW1lKCkpIC8gKHRvLT5r
ZXlUaW1lKCkgLSBmcm9tLT5rZXlUaW1lKCkpOworICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBh
cHBseVRpbWluZ0Z1bmN0aW9uKGZyb20tPnRpbWluZ0Z1bmN0aW9uKCksIG5vcm1hbGl6ZWRWYWx1
ZSwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAgICAgICBhcHBseUludGVybmFsKGNsaWVu
dCwgZnJvbSwgdG8sIG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kwordm9pZCBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpwYXVzZShkb3VibGUgb2Zmc2V0KQorewor
ICAgIC8vIEZJWE1FOiBzaG91bGQgYXBwbHkgb2Zmc2V0IGhlcmUuCisgICAgc2V0U3RhdGUoUGF1
c2VkU3RhdGUpOworICAgIG1fcGF1c2VUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0gb2Zmc2V0
OworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOjphZGQoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9uJiBhbmltYXRpb24pCit7CisgICAgSGFz
aE1hcDxTdHJpbmcsIFZlY3RvcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiA+OjppdGVyYXRvciBp
dCA9IG1fYW5pbWF0aW9ucy5maW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX2FuaW1hdGlvbnMu
ZW5kKCkpIHsKKyAgICAgICAgaXQtPnNlY29uZC5hcHBlbmQoYW5pbWF0aW9uKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiBhbmlt
YXRpb25zOworICAgIGFuaW1hdGlvbnMuYXBwZW5kKGFuaW1hdGlvbik7CisgICAgbV9hbmltYXRp
b25zLmFkZChuYW1lLCBhbmltYXRpb25zKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQW5pbWF0
aW9uczo6cGF1c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgb2Zmc2V0KQoreworICAgIEhh
c2hNYXA8U3RyaW5nLCBWZWN0b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4gPjo6aXRlcmF0b3Ig
aXQgPSBtX2FuaW1hdGlvbnMuZmluZChuYW1lKTsKKyAgICBpZiAoaXQgPT0gbV9hbmltYXRpb25z
LmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0
LT5zZWNvbmQuc2l6ZSgpOyBpKyspIAorICAgICAgICBpdC0+c2Vjb25kW2ldLnBhdXNlKG9mZnNl
dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM6OmFwcGx5KEdyYXBoaWNzTGF5
ZXJBbmltYXRpb246OkNsaWVudCogY2xpZW50KQoreworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0
b3I8R3JhcGhpY3NMYXllckFuaW1hdGlvbj4gPjo6aXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25z
LmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxHcmFwaGljc0xheWVyQW5p
bWF0aW9uPiA+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdC0+c2Vjb25kLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgaXQtPnNlY29uZFtpXS5hcHBseShjbGllbnQpOworICAgIH0K
K30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllckFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllckFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmYmMwNWExMmU4OWRhMDA1NmE2
MzdlMGExZTZmYzNiOWZmNDA0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmgKQEAgLTAsMCArMSw4MSBA
QAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR3JhcGhp
Y3NMYXllckFuaW1hdGlvbl9oCisjZGVmaW5lIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25faAorCisj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NMYXllckFuaW1h
dGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBBbmltYXRpb25TdGF0ZSB7IFBsYXlpbmdTdGF0ZSwg
UGF1c2VkU3RhdGUsIFN0b3BwZWRTdGF0ZSB9OworICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVi
bGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0ZWRUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRl
ZE9wYWNpdHkoZmxvYXQpID0gMDsKKyAgICB9OworCisgICAgR3JhcGhpY3NMYXllckFuaW1hdGlv
bigpCisgICAgICAgIDogbV9rZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQpCisgICAg
eyB9CisgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYs
IGNvbnN0IEludFNpemUmLCBjb25zdCBBbmltYXRpb24qLCBkb3VibGUsIGJvb2wpOworICAgIHZv
aWQgYXBwbHkoQ2xpZW50Kik7CisgICAgdm9pZCBwYXVzZShkb3VibGUpOworICAgIEFuaW1hdGlv
blN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0U3Rh
dGUoQW5pbWF0aW9uU3RhdGUgcykgeyBtX3N0YXRlID0gczsgfQorICAgIEFuaW1hdGVkUHJvcGVy
dHlJRCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLnByb3BlcnR5KCk7IH0K
KyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhcHBseUlu
dGVybmFsKENsaWVudCosIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBmcm9tLCBjb25zdCBBbmltYXRp
b25WYWx1ZSogdG8sIGZsb2F0IHByb2dyZXNzKTsKKyAgICBLZXlmcmFtZVZhbHVlTGlzdCBtX2tl
eWZyYW1lczsKKyAgICBJbnRTaXplIG1fYm94U2l6ZTsKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBt
X2FuaW1hdGlvbjsKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIGJvb2wgbV9saXN0c01hdGNoOwor
ICAgIGJvb2wgbV9oYXNCaWdSb3RhdGlvbjsKKyAgICBkb3VibGUgbV9zdGFydFRpbWU7CisgICAg
ZG91YmxlIG1fcGF1c2VUaW1lOworICAgIEFuaW1hdGlvblN0YXRlIG1fc3RhdGU7Cit9OworCitj
bGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NMYXll
ckFuaW1hdGlvbnMoKSB7IH0KKworICAgIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYsIGNvbnN0IEdy
YXBoaWNzTGF5ZXJBbmltYXRpb24mKTsKKyAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5h
bWUpIHsgbV9hbmltYXRpb25zLnJlbW92ZShuYW1lKTsgfQorICAgIHZvaWQgcGF1c2UoY29uc3Qg
U3RyaW5nJiwgZG91YmxlKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzTGF5ZXJBbmltYXRpb246
OkNsaWVudCopOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9u
cy5pc0VtcHR5KCk7IH0KKworICAgIGJvb2wgaGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdDsK
KyAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eUlEIHR5
cGUpIGNvbnN0OworCitwcml2YXRlOgorICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8R3JhcGhp
Y3NMYXllckFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7Cit9OworCit9CisjZW5kaWYgLy8gR3Jh
cGhpY3NMYXllckFuaW1hdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3
Y2FjODdkNjc1MjM0YzhjOTA2NmUwODcwMzg4ZDNjYjEyNDYyNzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3Jt
LmNwcApAQCAtMCwwICsxLDExNiBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyVHJhbnNm
b3JtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NMYXllclRyYW5zZm9ybTo6
R3JhcGhpY3NMYXllclRyYW5zZm9ybSgpCisgICAgOiBtX2ZsYXR0ZW5pbmcoZmFsc2UpCisgICAg
LCBtX2RpcnR5KGZhbHNlKSAvLyBmYWxzZSBieSBkZWZhdWx0IHNpbmNlIGFsbCBkZWZhdWx0IHZh
bHVlcyB3b3VsZCBiZSBjb21iaW5lZCBhcyB0aGUgaWRlbnRpdHkgbWF0cml4CisgICAgLCBtX2No
aWxkcmVuRGlydHkoZmFsc2UpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllclRyYW5zZm9ybTo6
c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgbV9wb3NpdGlv
biA9IHBvc2l0aW9uOworICAgIG1fZGlydHkgPSB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzTGF5
ZXJUcmFuc2Zvcm06OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIG1fc2l6
ZSA9IHNpemU7CisgICAgbV9kaXJ0eSA9IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllclRy
YW5zZm9ybTo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBhbmNob3JQb2ludCkK
K3sKKyAgICBtX2FuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQ7CisgICAgbV9kaXJ0eSA9IHRydWU7
Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllclRyYW5zZm9ybTo6c2V0RmxhdHRlbmluZyhib29sIGZs
YXR0ZW5pbmcpCit7CisgICAgbV9mbGF0dGVuaW5nID0gZmxhdHRlbmluZzsKKyAgICBtX2RpcnR5
ID0gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyVHJhbnNmb3JtOjpzZXRMb2NhbFRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIG1fbG9j
YWwgPSB0cmFuc2Zvcm07CisgICAgbV9kaXJ0eSA9IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NM
YXllclRyYW5zZm9ybTo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBtX2NoaWxkcmVuID0gdHJhbnNmb3JtOworICAgIG1f
ZGlydHkgPSB0cnVlOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0xheWVyVHJh
bnNmb3JtOjpjb21iaW5lZCgpCit7CisgICAgQVNTRVJUKCFtX2RpcnR5KTsKKyAgICByZXR1cm4g
bV9jb21iaW5lZDsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NMYXllclRyYW5z
Zm9ybTo6Y29tYmluZWRGb3JDaGlsZHJlbigpCit7CisgICAgQVNTRVJUKCFtX2RpcnR5KTsKKyAg
ICBpZiAobV9jaGlsZHJlbkRpcnR5KQorICAgICAgICBjb21iaW5lVHJhbnNmb3Jtc0ZvckNoaWxk
cmVuKCk7CisgICAgcmV0dXJuIG1fY29tYmluZWRGb3JDaGlsZHJlbjsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyVHJhbnNmb3JtOjpjb21iaW5lVHJhbnNmb3Jtcyhjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcGFyZW50VHJhbnNmb3JtKQoreworICAgIGZsb2F0IG9yaWdpblggPSBtX2FuY2hv
clBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpOworICAgIGZsb2F0IG9yaWdpblkgPSBtX2FuY2hv
clBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICBtX2NvbWJpbmVkID0KKyAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXgocGFyZW50VHJhbnNmb3JtKQorICAgICAgICAgICAgLnRyYW5z
bGF0ZTNkKG9yaWdpblggKyBtX3Bvc2l0aW9uLngoKSwgb3JpZ2luWSArIG1fcG9zaXRpb24ueSgp
LCBtX2FuY2hvclBvaW50LnooKSApCisgICAgICAgICAgICAubXVsdGlwbHkobV9sb2NhbCk7CisK
KyAgICAvLyBUaGUgY2hpbGRyZW4gdHJhbnNmb3JtIHdpbGwgdGFrZSBpdCBmcm9tIGhlcmUsIGlm
IGl0IGdldHMgdXNlZC4KKyAgICBtX2NvbWJpbmVkRm9yQ2hpbGRyZW4gPSBtX2NvbWJpbmVkOwor
ICAgIG1fY29tYmluZWQudHJhbnNsYXRlM2QoLW9yaWdpblgsIC1vcmlnaW5ZLCAtbV9hbmNob3JQ
b2ludC56KCkpOworCisgICAgbV9kaXJ0eSA9IGZhbHNlOworICAgIG1fY2hpbGRyZW5EaXJ0eSA9
IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllclRyYW5zZm9ybTo6Y29tYmluZVRyYW5zZm9y
bXNGb3JDaGlsZHJlbigpCit7CisgICAgQVNTRVJUKCFtX2RpcnR5KTsKKyAgICBBU1NFUlQobV9j
aGlsZHJlbkRpcnR5KTsKKworICAgIGZsb2F0IG9yaWdpblggPSBtX2FuY2hvclBvaW50LngoKSAq
IG1fc2l6ZS53aWR0aCgpOworICAgIGZsb2F0IG9yaWdpblkgPSBtX2FuY2hvclBvaW50LnkoKSAq
IG1fc2l6ZS5oZWlnaHQoKTsKKworICAgIC8vIEluIGNhc2UgYSBwYXJlbnQgaGFkIHByZXNlcnZl
czNEIGFuZCB0aGlzIGxheWVyIGhhcyBub3QsIGZsYXR0ZW4gb3VyIGNoaWxkcmVuLgorICAgIGlm
IChtX2ZsYXR0ZW5pbmcpCisgICAgICAgIG1fY29tYmluZWRGb3JDaGlsZHJlbiA9IG1fY29tYmlu
ZWRGb3JDaGlsZHJlbi50bzJkVHJhbnNmb3JtKCk7CisgICAgbV9jb21iaW5lZEZvckNoaWxkcmVu
Lm11bHRpcGx5KG1fY2hpbGRyZW4pOworICAgIG1fY29tYmluZWRGb3JDaGlsZHJlbi50cmFuc2xh
dGUzZCgtb3JpZ2luWCwgLW9yaWdpblksIC1tX2FuY2hvclBvaW50LnooKSk7CisKKyAgICBtX2No
aWxkcmVuRGlydHkgPSBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclRyYW5zZm9ybS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclRyYW5zZm9ybS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjVkYTI1YjRkODM1ZWE1NGNkMTdhMjFhMTM1NDg0MTlhODM1ZTdkYjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNm
b3JtLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgR3JhcGhpY3NMYXllclRyYW5zZm9ybV9oCisjZGVmaW5lIEdyYXBoaWNz
TGF5ZXJUcmFuc2Zvcm1faAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZs
b2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NM
YXllclRyYW5zZm9ybSB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NMYXllclRyYW5zZm9ybSgpOwor
ICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0
UG9pbnQzRCYpOworICAgIHZvaWQgc2V0RmxhdHRlbmluZyhib29sKTsKKyAgICB2b2lkIHNldExv
Y2FsVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRD
aGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGNvbWJpbmVkKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29t
YmluZWRGb3JDaGlsZHJlbigpOworCisgICAgdm9pZCBjb21iaW5lVHJhbnNmb3Jtcyhjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50VHJhbnNmb3JtKTsKKworcHJpdmF0ZToKKyAgICB2
b2lkIGNvbWJpbmVUcmFuc2Zvcm1zRm9yQ2hpbGRyZW4oKTsKKworICAgIEZsb2F0UG9pbnQzRCBt
X2FuY2hvclBvaW50OworICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBGbG9hdFNpemUg
bV9zaXplOworICAgIGJvb2wgbV9mbGF0dGVuaW5nOworICAgIGJvb2wgbV9kaXJ0eTsKKyAgICBi
b29sIG1fY2hpbGRyZW5EaXJ0eTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbG9jYWw7
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9jaGlsZHJlbjsKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtX2NvbWJpbmVkOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fY29tYmluZWRG
b3JDaGlsZHJlbjsKK307CisKK30KKworI2VuZGlmIC8vIEdyYXBoaWNzTGF5ZXJUcmFuc2Zvcm1f
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggNGNhNTZj
NmMxNGU4OTVjZDA2MTVkYzFlOTE5YTc1M2M0MGE1MzZjOC4uMjgwMjkzM2E5OTZjNTNjMzg3MTJk
NGRkNzExODdiM2E2NTVkOTBmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwCkBAIC0zNjgsNyArMzY4LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QKICAg
ICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5z
Zm9ybSkKICAgICAgICAgbGlzdHNNYXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2
YWx1ZUxpc3QsIGhhc0JpZ1JvdGF0aW9uKSA+PSAwOwogCi0gICAgbV9hbmltYXRpb25zLmFkZChr
ZXlmcmFtZXNOYW1lLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKHZhbHVlTGlzdCwgYm94U2l6ZSwg
YW5pbSwgdGltZU9mZnNldCwgbGlzdHNNYXRjaCkpOworICAgIG1fYW5pbWF0aW9ucy5hZGQoa2V5
ZnJhbWVzTmFtZSwgR3JhcGhpY3NMYXllckFuaW1hdGlvbih2YWx1ZUxpc3QsIGJveFNpemUsIGFu
aW0sIHRpbWVPZmZzZXQsIGxpc3RzTWF0Y2gpKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlckxheWVyOjpBbmltYXRpb25DaGFuZ2UpOwogICAgIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyLmgKaW5kZXggNDAzZTU0OTJiODQxZmE0ZGMwYTRkYzA2ODhkY2RjZjcw
ZGU3M2IwNC4uYzVjYmJhYzA0NmRmZWVkZWExZGIyMTY3Yjg1OTA0ZDlmYWM5ZWE3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9maXhlZFRvVmlld3BvcnQ7CiAgICAgVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIqIG1fY29udGVudHNMYXllcjsKICAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3Bs
YXlSZWN0OwotICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsKKyAgICBH
cmFwaGljc0xheWVyQW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CiAgICAgdm9pZCBhbmltYXRpb25T
dGFydGVkVGltZXJGaXJlZChUaW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKTsKICAg
ICBUaW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4gbV9hbmltYXRpb25TdGFydGVkVGlt
ZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0xheWVyVHJhbnNmb3JtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9MYXllclRyYW5zZm9ybS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDFjM2MwMmU1NzgxZmVlNzBlODkzMGIxNGI0NmZiNzM2ODJjZDg4MGIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEx
NiArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheWVyVHJhbnNmb3JtLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotTGF5ZXJUcmFuc2Zvcm06OkxheWVyVHJhbnNmb3JtKCkKLTogbV9mbGF0dGVu
aW5nKGZhbHNlKQotLCBtX2RpcnR5KGZhbHNlKSAvLyBmYWxzZSBieSBkZWZhdWx0IHNpbmNlIGFs
bCBkZWZhdWx0IHZhbHVlcyB3b3VsZCBiZSBjb21iaW5lZCBhcyB0aGUgaWRlbnRpdHkgbWF0cml4
Ci0sIG1fY2hpbGRyZW5EaXJ0eShmYWxzZSkKLXsKLX0KLQotdm9pZCBMYXllclRyYW5zZm9ybTo6
c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCi17Ci0gICAgbV9wb3NpdGlv
biA9IHBvc2l0aW9uOwotICAgIG1fZGlydHkgPSB0cnVlOwotfQotCi12b2lkIExheWVyVHJhbnNm
b3JtOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3NpemUgPSBzaXpl
OwotICAgIG1fZGlydHkgPSB0cnVlOwotfQotCi12b2lkIExheWVyVHJhbnNmb3JtOjpzZXRBbmNo
b3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIGFuY2hvclBvaW50KQotewotICAgIG1fYW5jaG9y
UG9pbnQgPSBhbmNob3JQb2ludDsKLSAgICBtX2RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBMYXll
clRyYW5zZm9ybTo6c2V0RmxhdHRlbmluZyhib29sIGZsYXR0ZW5pbmcpCi17Ci0gICAgbV9mbGF0
dGVuaW5nID0gZmxhdHRlbmluZzsKLSAgICBtX2RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBMYXll
clRyYW5zZm9ybTo6c2V0TG9jYWxUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSkKLXsKLSAgICBtX2xvY2FsID0gdHJhbnNmb3JtOwotICAgIG1fZGlydHkgPSB0
cnVlOwotfQotCi12b2lkIExheWVyVHJhbnNmb3JtOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIG1fY2hpbGRyZW4gPSB0
cmFuc2Zvcm07Ci0gICAgbV9kaXJ0eSA9IHRydWU7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4
IExheWVyVHJhbnNmb3JtOjpjb21iaW5lZCgpCi17Ci0gICAgQVNTRVJUKCFtX2RpcnR5KTsKLSAg
ICByZXR1cm4gbV9jb21iaW5lZDsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXggTGF5ZXJUcmFu
c2Zvcm06OmNvbWJpbmVkRm9yQ2hpbGRyZW4oKQotewotICAgIEFTU0VSVCghbV9kaXJ0eSk7Ci0g
ICAgaWYgKG1fY2hpbGRyZW5EaXJ0eSkKLSAgICAgICAgY29tYmluZVRyYW5zZm9ybXNGb3JDaGls
ZHJlbigpOwotICAgIHJldHVybiBtX2NvbWJpbmVkRm9yQ2hpbGRyZW47Ci19Ci0KLXZvaWQgTGF5
ZXJUcmFuc2Zvcm06OmNvbWJpbmVUcmFuc2Zvcm1zKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBwYXJlbnRUcmFuc2Zvcm0pCi17Ci0gICAgZmxvYXQgb3JpZ2luWCA9IG1fYW5jaG9yUG9pbnQu
eCgpICogbV9zaXplLndpZHRoKCk7Ci0gICAgZmxvYXQgb3JpZ2luWSA9IG1fYW5jaG9yUG9pbnQu
eSgpICogbV9zaXplLmhlaWdodCgpOwotICAgIG1fY29tYmluZWQgPQotICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChwYXJlbnRUcmFuc2Zvcm0pCi0gICAgICAgICAgICAudHJhbnNsYXRlM2Qo
b3JpZ2luWCArIG1fcG9zaXRpb24ueCgpLCBvcmlnaW5ZICsgbV9wb3NpdGlvbi55KCksIG1fYW5j
aG9yUG9pbnQueigpICkKLSAgICAgICAgICAgIC5tdWx0aXBseShtX2xvY2FsKTsKLQotICAgIC8v
IFRoZSBjaGlsZHJlbiB0cmFuc2Zvcm0gd2lsbCB0YWtlIGl0IGZyb20gaGVyZSwgaWYgaXQgZ2V0
cyB1c2VkLgotICAgIG1fY29tYmluZWRGb3JDaGlsZHJlbiA9IG1fY29tYmluZWQ7Ci0gICAgbV9j
b21iaW5lZC50cmFuc2xhdGUzZCgtb3JpZ2luWCwgLW9yaWdpblksIC1tX2FuY2hvclBvaW50Lnoo
KSk7Ci0KLSAgICBtX2RpcnR5ID0gZmFsc2U7Ci0gICAgbV9jaGlsZHJlbkRpcnR5ID0gdHJ1ZTsK
LX0KLQotdm9pZCBMYXllclRyYW5zZm9ybTo6Y29tYmluZVRyYW5zZm9ybXNGb3JDaGlsZHJlbigp
Ci17Ci0gICAgQVNTRVJUKCFtX2RpcnR5KTsKLSAgICBBU1NFUlQobV9jaGlsZHJlbkRpcnR5KTsK
LQotICAgIGZsb2F0IG9yaWdpblggPSBtX2FuY2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgp
OwotICAgIGZsb2F0IG9yaWdpblkgPSBtX2FuY2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQo
KTsKLQotICAgIC8vIEluIGNhc2UgYSBwYXJlbnQgaGFkIHByZXNlcnZlczNEIGFuZCB0aGlzIGxh
eWVyIGhhcyBub3QsIGZsYXR0ZW4gb3VyIGNoaWxkcmVuLgotICAgIGlmIChtX2ZsYXR0ZW5pbmcp
Ci0gICAgICAgIG1fY29tYmluZWRGb3JDaGlsZHJlbiA9IG1fY29tYmluZWRGb3JDaGlsZHJlbi50
bzJkVHJhbnNmb3JtKCk7Ci0gICAgbV9jb21iaW5lZEZvckNoaWxkcmVuLm11bHRpcGx5KG1fY2hp
bGRyZW4pOwotICAgIG1fY29tYmluZWRGb3JDaGlsZHJlbi50cmFuc2xhdGUzZCgtb3JpZ2luWCwg
LW9yaWdpblksIC1tX2FuY2hvclBvaW50LnooKSk7Ci0KLSAgICBtX2NoaWxkcmVuRGlydHkgPSBm
YWxzZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYjczODE4NTAxNzgwMWE3OTliMWRjOTQzZGQ1NjNlMmI5M2RlYjBlYi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDYy
ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVm
IExheWVyVHJhbnNmb3JtX2gKLSNkZWZpbmUgTGF5ZXJUcmFuc2Zvcm1faAotCi0jaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgotI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgTGF5ZXJUcmFuc2Zvcm0gewotcHVibGljOgotICAgIExheWVyVHJh
bnNmb3JtKCk7Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAg
dm9pZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQo
Y29uc3QgRmxvYXRQb2ludDNEJik7Ci0gICAgdm9pZCBzZXRGbGF0dGVuaW5nKGJvb2wpOwotICAg
IHZvaWQgc2V0TG9jYWxUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAg
ICB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tYmluZWQoKTsKLSAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBjb21iaW5lZEZvckNoaWxkcmVuKCk7Ci0KLSAgICB2b2lkIGNvbWJpbmVUcmFuc2Zv
cm1zKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRUcmFuc2Zvcm0pOwotCi1wcml2
YXRlOgotICAgIHZvaWQgY29tYmluZVRyYW5zZm9ybXNGb3JDaGlsZHJlbigpOwotCi0gICAgRmxv
YXRQb2ludDNEIG1fYW5jaG9yUG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwotICAg
IEZsb2F0U2l6ZSBtX3NpemU7Ci0gICAgYm9vbCBtX2ZsYXR0ZW5pbmc7Ci0gICAgYm9vbCBtX2Rp
cnR5OwotICAgIGJvb2wgbV9jaGlsZHJlbkRpcnR5OwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbV9sb2NhbDsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2NoaWxkcmVuOwotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1fY29tYmluZWQ7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9jb21iaW5lZEZvckNoaWxkcmVuOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTGF5ZXJUcmFuc2Zv
cm1faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhYTAyMmEyNGUyNGVlNTRkMTUxNmViNGNlNmYyM2NkNjk0MjFhODMzLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDI4NyArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJBbmltYXRpb24uaCIKLQotI2luY2x1ZGUgIlVuaXRCZXppZXIuaCIKLSNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikKLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotCi1zdGF0aWMgYm9vbCBzaG91bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUoQW5pbWF0
aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbG9vcENvdW50KQotewotICAg
IGlmICgoKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0
ZSkgJiYgKGxvb3BDb3VudCAmIDEpKQotICAgICAgICB8fCAoKGRpcmVjdGlvbiA9PSBBbmltYXRp
b246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpICYmICEobG9vcENvdW50ICYg
MSkpCi0gICAgICAgIHx8IGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlv
blJldmVyc2UpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
c3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUoZG91YmxlIHJ1bm5pbmdUaW1l
LCBkb3VibGUgZHVyYXRpb24sIEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
bikKLXsKLSAgICBpZiAoIWR1cmF0aW9uKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNvbnN0
IGludCBsb29wQ291bnQgPSBydW5uaW5nVGltZSAvIGR1cmF0aW9uOwotICAgIGNvbnN0IGRvdWJs
ZSBsYXN0RnVsbExvb3AgPSBkdXJhdGlvbiAqIGRvdWJsZShsb29wQ291bnQpOwotICAgIGNvbnN0
IGRvdWJsZSByZW1haW5kZXIgPSBydW5uaW5nVGltZSAtIGxhc3RGdWxsTG9vcDsKLSAgICBjb25z
dCBkb3VibGUgbm9ybWFsaXplZCA9IHJlbWFpbmRlciAvIGR1cmF0aW9uOwotCi0gICAgcmV0dXJu
IHNob3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZShkaXJlY3Rpb24sIGxvb3BDb3VudCkgPyAxIC0g
bm9ybWFsaXplZCA6IG5vcm1hbGl6ZWQ7Ci19Ci0KLXN0YXRpYyBmbG9hdCBhcHBseU9wYWNpdHlB
bmltYXRpb24oZmxvYXQgZnJvbU9wYWNpdHksIGZsb2F0IHRvT3BhY2l0eSwgZG91YmxlIHByb2dy
ZXNzKQotewotICAgIC8vIE9wdGltaXphdGlvbjogc3BlY2lhbCBjYXNlIHRoZSBlZGdlIHZhbHVl
cyAoMCBhbmQgMSkuCi0gICAgaWYgKHByb2dyZXNzID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHRv
T3BhY2l0eTsKLQotICAgIGlmICghcHJvZ3Jlc3MpCi0gICAgICAgIHJldHVybiBmcm9tT3BhY2l0
eTsKLQotICAgIHJldHVybiBmcm9tT3BhY2l0eSArIHByb2dyZXNzICogKHRvT3BhY2l0eSAtIGZy
b21PcGFjaXR5KTsKLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNpbG9uKGRvdWJs
ZSBkdXJhdGlvbikKLXsKLSAgICByZXR1cm4gMS4wIC8gKDIwMC4wICogZHVyYXRpb24pOwotfQot
Ci1zdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24oZG91YmxlIHAx
eCwgZG91YmxlIHAxeSwgZG91YmxlIHAyeCwgZG91YmxlIHAyeSwgZG91YmxlIHQsIGRvdWJsZSBk
dXJhdGlvbikKLXsKLSAgICByZXR1cm4gVW5pdEJlemllcihwMXgsIHAxeSwgcDJ4LCBwMnkpLnNv
bHZlKHQsIHNvbHZlRXBzaWxvbihkdXJhdGlvbikpOwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJs
ZSBzb2x2ZVN0ZXBzRnVuY3Rpb24oaW50IG51bVN0ZXBzLCBib29sIHN0ZXBBdFN0YXJ0LCBkb3Vi
bGUgdCkKLXsKLSAgICBpZiAoc3RlcEF0U3RhcnQpCi0gICAgICAgIHJldHVybiBzdGQ6Om1pbigx
LjAsIChmbG9vcihudW1TdGVwcyAqIHQpICsgMSkgLyBudW1TdGVwcyk7Ci0gICAgcmV0dXJuIGZs
b29yKG51bVN0ZXBzICogdCkgLyBudW1TdGVwczsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCBh
cHBseVRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiwg
ZmxvYXQgcHJvZ3Jlc3MsIGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBpZiAoIXRpbWluZ0Z1bmN0
aW9uKQotICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7Ci0KLSAgICBpZiAodGltaW5nRnVuY3Rpb24t
PmlzQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbigpKSB7Ci0gICAgICAgIGNvbnN0IEN1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb24qIGN0ZiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBzb2x2ZUN1Ymlj
QmV6aWVyRnVuY3Rpb24oY3RmLT54MSgpLCBjdGYtPnkxKCksIGN0Zi0+eDIoKSwgY3RmLT55Migp
LCBwcm9ncmVzcywgZHVyYXRpb24pOwotICAgIH0KLQotICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+
aXNTdGVwc1RpbWluZ0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgY29uc3QgU3RlcHNUaW1pbmdGdW5j
dGlvbiogc3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRpbWlu
Z0Z1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHNvbHZlU3RlcHNGdW5jdGlvbihzdGYtPm51bWJl
ck9mU3RlcHMoKSwgc3RmLT5zdGVwQXRTdGFydCgpLCBkb3VibGUocHJvZ3Jlc3MpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcHJvZ3Jlc3M7Ci19Ci0KLXN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmcm9t
LCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB0bywgZG91YmxlIHByb2dyZXNzLCBjb25zdCBJ
bnRTaXplJiBib3hTaXplLCBib29sIGxpc3RzTWF0Y2gpCi17Ci0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4OwotCi0gICAgLy8gRmlyc3QgZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgotICAg
IGlmICghcHJvZ3Jlc3MpIHsKLSAgICAgICAgZnJvbS0+YXBwbHkoYm94U2l6ZSwgbWF0cml4KTsK
LSAgICAgICAgcmV0dXJuIG1hdHJpeDsKLSAgICB9Ci0KLSAgICAvLyBMYXN0IGZyYW1lIG9mIGFu
IGFuaW1hdGlvbi4KLSAgICBpZiAocHJvZ3Jlc3MgPT0gMSkgewotICAgICAgICB0by0+YXBwbHko
Ym94U2l6ZSwgbWF0cml4KTsKLSAgICAgICAgcmV0dXJuIG1hdHJpeDsKLSAgICB9Ci0KLSAgICAv
LyBJZiB3ZSBoYXZlIGluY29tcGF0aWJsZSBvcGVyYXRpb24gbGlzdHMsIHdlIGJsZW5kIHRoZSBy
ZXN1bHRpbmcgbWF0cmljZXMuCi0gICAgaWYgKCFsaXN0c01hdGNoKSB7Ci0gICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGZyb21NYXRyaXg7Ci0gICAgICAgIHRvLT5hcHBseShib3hTaXplLCBt
YXRyaXgpOwotICAgICAgICBmcm9tLT5hcHBseShib3hTaXplLCBmcm9tTWF0cml4KTsKLSAgICAg
ICAgbWF0cml4LmJsZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsKLSAgICAgICAgcmV0dXJuIG1h
dHJpeDsKLSAgICB9Ci0KLSAgICAvLyBBbmltYXRpb24gdG8gIi13ZWJraXQtdHJhbnNmb3JtOiBu
b25lIi4KLSAgICBpZiAoIXRvLT5zaXplKCkpIHsKLSAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9u
cyBibGVuZGVkKCpmcm9tKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibGVuZGVk
Lm9wZXJhdGlvbnMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGJsZW5kZWQub3BlcmF0aW9u
cygpW2ldLT5ibGVuZCgwLCBwcm9ncmVzcywgdHJ1ZSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7
Ci0gICAgICAgIHJldHVybiBtYXRyaXg7Ci0gICAgfQotCi0gICAgLy8gQW5pbWF0aW9uIGZyb20g
Ii13ZWJraXQtdHJhbnNmb3JtOiBub25lIi4KLSAgICBpZiAoIWZyb20tPnNpemUoKSkgewotICAg
ICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQoKnRvKTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBibGVuZGVkLm9wZXJhdGlvbnMoKS5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZCgwLCAxLiAtIHByb2dyZXNzLCB0cnVl
KS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKLSAgICAgICAgcmV0dXJuIG1hdHJpeDsKLSAgICB9
Ci0KLSAgICAvLyBOb3JtYWwgYW5pbWF0aW9uIHdpdGggYSBtYXRjaGluZyBvcGVyYXRpb24gbGlz
dC4KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQoKnRvKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGJsZW5kZWQub3BlcmF0aW9ucygpLnNpemUoKTsgKytpKQotICAgICAgICBi
bGVuZGVkLm9wZXJhdGlvbnMoKVtpXS0+YmxlbmQoZnJvbS0+YXQoaSksIHByb2dyZXNzLCAhZnJv
bS0+YXQoaSkpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOwotICAgIHJldHVybiBtYXRyaXg7Ci19
Ci0KLQotVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBj
b25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wgbGlzdHNN
YXRjaCkKLSAgICA6IG1fa2V5ZnJhbWVzKGtleWZyYW1lcykKLSAgICAsIG1fYm94U2l6ZShib3hT
aXplKQotICAgICwgbV9hbmltYXRpb24oQW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9uKSkKLSAg
ICAsIG1fbGlzdHNNYXRjaChsaXN0c01hdGNoKQotICAgICwgbV9zdGFydFRpbWUoV1RGOjpjdXJy
ZW50VGltZSgpIC0gdGltZU9mZnNldCkKLSAgICAsIG1fcGF1c2VUaW1lKDApCi0gICAgLCBtX3N0
YXRlKFBsYXlpbmdTdGF0ZSkKLXsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjph
cHBseUludGVybmFsKFRleHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQqIGNsaWVudCwgY29uc3Qg
QW5pbWF0aW9uVmFsdWUqIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQgcHJv
Z3Jlc3MpCi17Ci0gICAgc3dpdGNoIChtX2tleWZyYW1lcy5wcm9wZXJ0eSgpKSB7Ci0gICAgY2Fz
ZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eToKLSAgICAgICAgY2xpZW50LT5zZXRPcGFjaXR5KGFw
cGx5T3BhY2l0eUFuaW1hdGlvbigoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1
ZSo+KGZyb20pLT52YWx1ZSgpKSwgKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFs
dWUqPih0byktPnZhbHVlKCkpLCBwcm9ncmVzcykpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOgotICAgICAgICBjbGllbnQtPnNldFRy
YW5zZm9ybShhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zv
cm1BbmltYXRpb25WYWx1ZSo+KGZyb20pLT52YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBUcmFu
c2Zvcm1BbmltYXRpb25WYWx1ZSo+KHRvKS0+dmFsdWUoKSwgcHJvZ3Jlc3MsIG1fYm94U2l6ZSwg
bV9saXN0c01hdGNoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbjo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIGlmIChzdGF0ZSgpICE9IFN0b3BwZWRTdGF0
ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gbV9hbmltYXRpb24tPmZpbGxz
Rm9yd2FyZHMoKTsKLX0KLQotYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZl
QW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkgY29uc3QKLXsKLSAgICBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPFRleHR1cmVNYXBwZXJBbmltYXRpb24+ID46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8U3RyaW5n
LCBWZWN0b3I8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZl
Y3RvcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGl0LT5zZWNvbmQ7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgaWYgKGFuaW1hdGlvbnNbaV0uaXNBY3RpdmUoKSAmJiBhbmltYXRpb25zW2ld
LnByb3BlcnR5KCkgPT0gdHlwZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbnM6Omhhc1J1bm5pbmdBbmltYXRpb25zKCkgY29uc3QKLXsKLSAgICBIYXNoTWFwPFN0
cmluZywgVmVjdG9yPFRleHR1cmVNYXBwZXJBbmltYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8
VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlv
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uPiYgYW5pbWF0aW9ucyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKGFuaW1hdGlvbnNbaV0uc3RhdGUoKSA9PSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpQ
bGF5aW5nU3RhdGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlv
bjo6YXBwbHkoVGV4dHVyZU1hcHBlckFuaW1hdGlvbkNsaWVudCogY2xpZW50KQotewotICAgIGlm
IChzdGF0ZSgpID09IFN0b3BwZWRTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZG91Ymxl
IHRvdGFsUnVubmluZ1RpbWUgPSBtX3N0YXRlID09IFBhdXNlZFN0YXRlID8gbV9wYXVzZVRpbWUg
OiBXVEY6OmN1cnJlbnRUaW1lKCkgLSBtX3N0YXJ0VGltZTsKLSAgICBkb3VibGUgbm9ybWFsaXpl
ZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKHRvdGFsUnVubmluZ1RpbWUsIG1fYW5p
bWF0aW9uLT5kdXJhdGlvbigpLCBtX2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCkpOwotCi0gICAgaWYg
KG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpICE9IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291
bnRJbmZpbml0ZSAmJiB0b3RhbFJ1bm5pbmdUaW1lID49IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigp
ICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkpCi0gICAgICAgIHNldFN0YXRlKFN0b3Bw
ZWRTdGF0ZSk7Ci0KLSAgICBpZiAoIW5vcm1hbGl6ZWRWYWx1ZSkgewotICAgICAgICBhcHBseUlu
dGVybmFsKGNsaWVudCwgbV9rZXlmcmFtZXMuYXQoMCksIG1fa2V5ZnJhbWVzLmF0KDEpLCAwKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChub3JtYWxpemVkVmFsdWUgPT0gMS4w
KSB7Ci0gICAgICAgIGFwcGx5SW50ZXJuYWwoY2xpZW50LCBtX2tleWZyYW1lcy5hdChtX2tleWZy
YW1lcy5zaXplKCkgLSAyKSwgbV9rZXlmcmFtZXMuYXQobV9rZXlmcmFtZXMuc2l6ZSgpIC0gMSks
IDEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX2tleWZyYW1lcy5zaXplKCkg
PT0gMikgewotICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBhcHBseVRpbWluZ0Z1bmN0aW9uKG1f
YW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigpLmdldCgpLCBub3JtYWxpemVkVmFsdWUsIG1fYW5p
bWF0aW9uLT5kdXJhdGlvbigpKTsKLSAgICAgICAgYXBwbHlJbnRlcm5hbChjbGllbnQsIG1fa2V5
ZnJhbWVzLmF0KDApLCBtX2tleWZyYW1lcy5hdCgxKSwgbm9ybWFsaXplZFZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9rZXlmcmFt
ZXMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBmcm9t
ID0gbV9rZXlmcmFtZXMuYXQoaSk7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0byA9
IG1fa2V5ZnJhbWVzLmF0KGkgKyAxKTsKLSAgICAgICAgaWYgKGZyb20tPmtleVRpbWUoKSA+IG5v
cm1hbGl6ZWRWYWx1ZSB8fCB0by0+a2V5VGltZSgpIDwgbm9ybWFsaXplZFZhbHVlKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gKG5vcm1hbGl6ZWRW
YWx1ZSAtIGZyb20tPmtleVRpbWUoKSkgLyAodG8tPmtleVRpbWUoKSAtIGZyb20tPmtleVRpbWUo
KSk7Ci0gICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IGFwcGx5VGltaW5nRnVuY3Rpb24oZnJvbS0+
dGltaW5nRnVuY3Rpb24oKSwgbm9ybWFsaXplZFZhbHVlLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24o
KSk7Ci0gICAgICAgIGFwcGx5SW50ZXJuYWwoY2xpZW50LCBmcm9tLCB0bywgbm9ybWFsaXplZFZh
bHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJBbmlt
YXRpb246OnBhdXNlKGRvdWJsZSBvZmZzZXQpCi17Ci0gICAgLy8gRklYTUU6IHNob3VsZCBhcHBs
eSBvZmZzZXQgaGVyZS4KLSAgICBzZXRTdGF0ZShQYXVzZWRTdGF0ZSk7Ci0gICAgbV9wYXVzZVRp
bWUgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSBvZmZzZXQ7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbnM6OmFkZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFRleHR1cmVNYXBwZXJB
bmltYXRpb24mIGFuaW1hdGlvbikKLXsKLSAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFRleHR1
cmVNYXBwZXJBbmltYXRpb24+ID46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmZpbmQobmFt
ZSk7Ci0gICAgaWYgKGl0ICE9IG1fYW5pbWF0aW9ucy5lbmQoKSkgewotICAgICAgICBpdC0+c2Vj
b25kLmFwcGVuZChhbmltYXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVj
dG9yPFRleHR1cmVNYXBwZXJBbmltYXRpb24+IGFuaW1hdGlvbnM7Ci0gICAgYW5pbWF0aW9ucy5h
cHBlbmQoYW5pbWF0aW9uKTsKLSAgICBtX2FuaW1hdGlvbnMuYWRkKG5hbWUsIGFuaW1hdGlvbnMp
OwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpwYXVzZShjb25zdCBTdHJpbmcm
IG5hbWUsIGRvdWJsZSBvZmZzZXQpCi17Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uPiA+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5maW5kKG5h
bWUpOwotICAgIGlmIChpdCA9PSBtX2FuaW1hdGlvbnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXQtPnNlY29uZC5zaXplKCk7IGkrKykgCi0g
ICAgICAgIGl0LT5zZWNvbmRbaV0ucGF1c2Uob2Zmc2V0KTsKLX0KLQotdm9pZCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uczo6YXBwbHkoVGV4dHVyZU1hcHBlckFuaW1hdGlvbkNsaWVudCogY2xpZW50
KQotewotICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4g
Pjo6aXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxT
dHJpbmcsIFZlY3RvcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiA+OjppdGVyYXRvciBpdCA9IG1f
YW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpdC0+c2Vjb25kLnNpemUoKTsgKytpKQotICAgICAgICAgICAgaXQtPnNl
Y29uZFtpXS5hcHBseShjbGllbnQpOwotICAgIH0KLX0KLQotfQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFu
aW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJBbmltYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBlOTBi
NTE4N2ZjNzI3OTIzNDkzN2MyZmM5NGEyZjZjMjMzNDM1My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsODUg
KzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYg
VGV4dHVyZU1hcHBlckFuaW1hdGlvbl9oCi0jZGVmaW5lIFRleHR1cmVNYXBwZXJBbmltYXRpb25f
aAotCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQgewotcHVibGljOgotICAg
IHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpID0gMDsKLX07Ci0KLWNsYXNz
IFRleHR1cmVNYXBwZXJBbmltYXRpb24gewotcHVibGljOgotICAgIGVudW0gQW5pbWF0aW9uU3Rh
dGUgeyBQbGF5aW5nU3RhdGUsIFBhdXNlZFN0YXRlLCBTdG9wcGVkU3RhdGUgfTsKLQotICAgIFRl
eHR1cmVNYXBwZXJBbmltYXRpb24oKQotICAgICAgICA6IG1fa2V5ZnJhbWVzKEFuaW1hdGVkUHJv
cGVydHlJbnZhbGlkKQotICAgIHsgfQotICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgQW5pbWF0aW9uKiwgZG91
YmxlLCBib29sKTsKLSAgICB2b2lkIGFwcGx5KFRleHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQq
KTsKLSAgICB2b2lkIHBhdXNlKGRvdWJsZSk7Ci0gICAgQW5pbWF0aW9uU3RhdGUgc3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0gICAgdm9pZCBzZXRTdGF0ZShBbmltYXRpb25TdGF0
ZSBzKSB7IG1fc3RhdGUgPSBzOyB9Ci0gICAgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KCkg
Y29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXMucHJvcGVydHkoKTsgfQotICAgIGJvb2wgaXNBY3Rp
dmUoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFwcGx5SW50ZXJuYWwoVGV4dHVyZU1h
cHBlckFuaW1hdGlvbkNsaWVudCosIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBmcm9tLCBjb25zdCBB
bmltYXRpb25WYWx1ZSogdG8sIGZsb2F0IHByb2dyZXNzKTsKLSAgICBLZXlmcmFtZVZhbHVlTGlz
dCBtX2tleWZyYW1lczsKLSAgICBJbnRTaXplIG1fYm94U2l6ZTsKLSAgICBSZWZQdHI8QW5pbWF0
aW9uPiBtX2FuaW1hdGlvbjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIGJvb2wgbV9saXN0c01h
dGNoOwotICAgIGJvb2wgbV9oYXNCaWdSb3RhdGlvbjsKLSAgICBkb3VibGUgbV9zdGFydFRpbWU7
Ci0gICAgZG91YmxlIG1fcGF1c2VUaW1lOwotICAgIEFuaW1hdGlvblN0YXRlIG1fc3RhdGU7Ci19
OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbnMoKSB7IH0KLQotICAgIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mKTsKLSAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJp
bmcmIG5hbWUpIHsgbV9hbmltYXRpb25zLnJlbW92ZShuYW1lKTsgfQotICAgIHZvaWQgcGF1c2Uo
Y29uc3QgU3RyaW5nJiwgZG91YmxlKTsKLSAgICB2b2lkIGFwcGx5KFRleHR1cmVNYXBwZXJBbmlt
YXRpb25DbGllbnQqKTsKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2FuaW1h
dGlvbnMuaXNFbXB0eSgpOyB9Ci0KLSAgICBib29sIGhhc1J1bm5pbmdBbmltYXRpb25zKCkgY29u
c3Q7Ci0gICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJ
RCB0eXBlKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFRl
eHR1cmVNYXBwZXJBbmltYXRpb24+ID4gbV9hbmltYXRpb25zOwotfTsKLQotfQotI2VuZGlmIC8v
IFVTRShURVhUVVJFX01BUFBFUikKLQotI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJBbmltYXRpb25f
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCmluZGV4IGRlMmQ2N2Y3Mzg5YzdlZjE0NjgzZTFmNDk2
ODYyMGQyODI4MWZkZTYuLjQ1MDQyY2E4ZGZlNTc2Y2Q3YzZhNDJjN2ExMTlhYTZkMDgxNzY3ZmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKQEAgLTI0LDExICsyNCwxMSBAQAogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQW5pbWF0aW9uLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NMYXllclRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5j
bHVkZSAiSW50UG9pbnRIYXNoLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKQEAgLTU2LDcgKzU2LDcgQEAg
cHVibGljOgogICAgIHsgfQogfTsKIAotY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyIDogcHVibGlj
IFRleHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQgeworY2xhc3MgVGV4dHVyZU1hcHBlckxheWVy
IDogcHVibGljIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkNsaWVudCB7CiAKIHB1YmxpYzoKICAg
ICAvLyBUaGlzIHNldCBvZiBmbGFncyBoZWxwIHVzIGRlZmVyIHdoaWNoIHByb3BlcnRpZXMgb2Yg
dGhlIGxheWVyIGhhdmUgYmVlbgpAQCAtMTU3LDYgKzE1NywxMCBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBkcmF3UmVwYWludENvdW50ZXIoR3JhcGhpY3NDb250ZXh0KiwgR3JhcGhpY3NMYXllciop
OwogCisgICAgLy8gR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6Q2xpZW50CisgICAgdm9pZCBzZXRB
bmltYXRlZFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IHNl
dFRyYW5zZm9ybShtYXRyaXgpOyB9CisgICAgdm9pZCBzZXRBbmltYXRlZE9wYWNpdHkoZmxvYXQg
b3BhY2l0eSkgeyBzZXRPcGFjaXR5KG9wYWNpdHkpOyB9CisKICAgICB2b2lkIHN5bmNBbmltYXRp
b25zKCk7CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKICAgICBlbnVtIENvbnRlbnRzTGF5
ZXJDb3VudCB7CkBAIC0xNjgsNyArMTcyLDcgQEAgcHJpdmF0ZToKICAgICBDb250ZW50c0xheWVy
Q291bnQgY291bnRQb3RlbnRpYWxMYXllcnNXaXRoQ29udGVudHMoKSBjb25zdDsKICAgICBib29s
IHNob3VsZFBhaW50VG9JbnRlcm1lZGlhdGVTdXJmYWNlKCkgY29uc3Q7CiAKLSAgICBMYXllclRy
YW5zZm9ybSBtX3RyYW5zZm9ybTsKKyAgICBHcmFwaGljc0xheWVyVHJhbnNmb3JtIG1fdHJhbnNm
b3JtOwogCiAgICAgaW5saW5lIEZsb2F0UmVjdCBsYXllclJlY3QoKSBjb25zdAogICAgIHsKQEAg
LTIzMCw3ICsyMzQsNyBAQCBwcml2YXRlOgogCiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBUZXh0
dXJlTWFwcGVyKiBtX3RleHR1cmVNYXBwZXI7Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMg
bV9hbmltYXRpb25zOworICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsK
ICAgICBJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uRGVsdGE7CiAgICAgYm9vbCBtX2ZpeGVkVG9W
aWV3cG9ydDsKICAgICBDb2xvciBtX2RlYnVnQm9yZGVyQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3Jh
cGhpY3NMYXllci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUNvb3JkaW5hdG9yL1dlYkdyYXBoaWNzTGF5ZXIuaAppbmRleCA2NDljOWE5NTBjN2MxMzgwZDI0
MWZiMjVlOWJiMTkzYTRmZmQ2ZDRhLi45Y2U4ZWNkYWQ3ZDFhNTMyYWMzMTcxY2M5ZTBjZjA5YmM1
NzcxYTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVy
LmgKQEAgLTIzLDkgKzIzLDkgQEAKIAogI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyVHJhbnNmb3JtLmgi
CiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTGF5
ZXJUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJU
aWxlZEJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50Lmgi
CkBAIC0xNjUsNyArMTY1LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7
CiAgICAgR3JhcGhpY3NMYXllciogbV9tYXNrVGFyZ2V0OwogICAgIEZsb2F0UmVjdCBtX25lZWRz
RGlzcGxheVJlY3Q7Ci0gICAgTGF5ZXJUcmFuc2Zvcm0gbV9sYXllclRyYW5zZm9ybTsKKyAgICBH
cmFwaGljc0xheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07CiAgICAgYm9vbCBtX2luVXBk
YXRlTW9kZSA6IDE7CiAgICAgYm9vbCBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0OiAxOwogICAg
IGJvb2wgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZTogMTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>