<?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>159795</bug_id>
          
          <creation_ts>2016-07-14 16:59:23 -0700</creation_ts>
          <short_desc>Make ImageFrame and ImageFrameData be equivalent so ImageFrameData can be removed</short_desc>
          <delta_ts>2017-08-21 12:15:27 -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>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>159819</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>159721</dependson>
          <blocked>155322</blocked>
    
    <blocked>159819</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>beidson</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1211242</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-14 16:59:23 -0700</bug_when>
    <thetext>This step will allow removing ImageFrame from platform/image-decoders/ImageDecoder.h and renaming ImageFrameData to be ImageFrame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211258</commentid>
    <comment_count>1</comment_count>
      <attachid>283714</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-14 17:27:58 -0700</bug_when>
    <thetext>Created attachment 283714
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211276</commentid>
    <comment_count>2</comment_count>
      <attachid>283721</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-14 17:56:35 -0700</bug_when>
    <thetext>Created attachment 283721
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211291</commentid>
    <comment_count>3</comment_count>
      <attachid>283726</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-14 18:28:54 -0700</bug_when>
    <thetext>Created attachment 283726
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211296</commentid>
    <comment_count>4</comment_count>
      <attachid>283729</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-14 18:37:15 -0700</bug_when>
    <thetext>Created attachment 283729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211459</commentid>
    <comment_count>5</comment_count>
      <attachid>283769</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-15 10:15:15 -0700</bug_when>
    <thetext>Created attachment 283769
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230183</commentid>
    <comment_count>6</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-15 14:28:31 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=159819

*** This bug has been marked as a duplicate of bug 159819 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340445</commentid>
    <comment_count>7</comment_count>
      <attachid>283769</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-08-19 16:02:38 -0700</bug_when>
    <thetext>Comment on attachment 283769
Patch for review

r-, as this has been pending review for over a year now. It is near-impossible that this patch still applies to trunk and unlikely to still be relevant in its current form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340693</commentid>
    <comment_count>8</comment_count>
      <attachid>283769</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-21 12:15:27 -0700</bug_when>
    <thetext>Comment on attachment 283769
Patch for review

This bug was marked as s duplicate. I was not aware that duplicate bugs can also appear as requesting-review bugs. I think removing the flags is more appropriate in this case.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283714</attachid>
            <date>2016-07-14 17:27:58 -0700</date>
            <delta_ts>2016-07-14 17:56:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159795-20160714172711.patch</filename>
            <type>text/plain</type>
            <size>210750</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQ0NWVjM2I5YjY1NzYy
OGNlYTM4MTkyYzdkMDJlN2YwMjIyNzRmOS4uYzgwMTMzMGVkNmJmYTQ5NjViMzRkM2Q1NTIzMTAw
NjNhMTIxZjE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwMCBAQAorMjAxNi0wNy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VGcmFtZSBhbmQgSW1hZ2VGcmFtZURhdGEgYmUgZXF1aXZhbGVudCBzbyBJbWFnZUZyYW1l
RGF0YSBjYW4gYmUgcmVtb3ZlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU5Nzk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBzdGVwIHdpbGwgYWxsb3cgcmVtb3ZpbmcgSW1hZ2VGcmFtZSBmcm9t
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisgICAgICAgIGFuZCByZW5h
bWluZyBJbWFnZUZyYW1lRGF0YSB0byBiZSBJbWFnZUZyYW1lLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhl
bHM6OmF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aW5pdFBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y29weVBpeGVscyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVEYXRhOjpzZXREaXNwb3NhbE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
RGF0YTo6ZGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6
OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzUGFydGlhbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXJQaXhlbHMpOgorICAgICAg
ICBBZGQgZnVuY3Rpb25zIHNpbWlsYXIgdG8gZnJvbSB3aGF0IHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oIGhhcy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OkltYWdlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlQaXhlbHMpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6aW5pdFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpzZXRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6Omhhc0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OnNldEhhc0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNl
dFN0YXR1cyk6IERlbGV0ZWQuCisgICAgICAgIENoYW5nZSB0aGUgSW1hZ2VGcmFtZSBjbGFzcyB0
byBiZSBhIHN1YnNldCBvZiBJbWFnZUZyYW1lRGF0YS4KKyAgICAgICAgCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIENhbGwgdGhl
IEltYWdlRnJhbWUgbWV0aG9kcyB3aXRoIHRoZSBuZXcgbmFtZXMuCisgICAgICAgIAorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0RGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6ZGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6c2V0U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnN0YXR1cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6OmlzUGFydGlhbCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpp
c0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0
SGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzQWxwaGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6cGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc1BpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmlzT3ZlclNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmdldEFkZHIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6aGFzUGl4ZWxEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6Om92ZXJSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgQ2hhbmdlIHRoZSBJbWFnZUZyYW1l
IGNsYXNzIHRvIGJlIGEgc3Vic2V0IG9mIEltYWdlRnJhbWVEYXRhIGFuZCBnZXQgcmlkCisgICAg
ICAgIG9mIHRoZSBwaXhlbCBmdW5jdGlvbnMuIFRoZXkgc2hvdWxkIGJlIGFjY2Vzc2VkIGZyb20g
Qml0bWFwUGl4ZWxzIGNsYXNzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUElt
YWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJNUElt
YWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBtZXRob2Rz
IHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJNUCk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpCTVBJ
bWFnZVJlYWRlcjo6c2V0UkdCQSk6CisgICAgICAgIENhbGwgdGhlIEltYWdlRnJhbWUgbWV0aG9k
cyB3aXRoIHRoZSBuZXcgbmFtZXMvcGFyYW1ldGVycy4KKworICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1h
Z2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaDoKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFt
ZSBtZXRob2RzIHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwOgorICAg
ICAgICAoR0lGSW1hZ2VSZWFkZXI6OnBhcnNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6
R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBtZXRob2RzIHdp
dGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFt
ZSBtZXRob2RzIHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFn
ZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VE
ZWNvZGVyOjpqcGVnQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rl
cjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBtZXRob2RzIHdpdGggdGhl
IG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdl
RGVjb2Rlcjo6cG5nQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVy
OjpyZWFkQ2h1bmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6Y2xlYXJG
cmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aW5p
dEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5oOgorICAgICAgICBDYWxsIHRoZSBJbWFnZUZyYW1lIG1ldGhvZHMgd2l0aCB0aGUg
bmV3IG5hbWVzL3BhcmFtZXRlcnMuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
RUJQSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBt
ZXRob2RzIHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorCisyMDE2LTA3LTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisgCisgICAgICAgIEdldCBy
aWQgb2YgdGhlIG1fcHJlbXVsdGlwbHlBbHBoYSBmbGFnIG9mIHRoZSBJbWFnZUZyYW1lIGNsYXNz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk3MjEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGZs
YWcgd2FzIG9ubHkgbmVlZGVkIHdoZW4gY2FsbGluZyBCaXRtYXBQaXhlbHM6OnNldFNpemUoKS4g
SW5zdGVhZAorICAgICAgICB3ZSBjYW4gcGFzcyB0aGUgSW1hZ2VEZWNvZGVyOjptX3ByZW11bHRp
cGx5QWxwaGEgdG8gSW1hZ2VGcmFtZTo6c2V0U2l6ZSgpCisgICAgICAgIHdoaWNoIHdpbGwgcGFz
cyBpdCB0byBCaXRtYXBQaXhlbHM6OnNldFNpemUoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1h
cERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6aXNPdmVyU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
TVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVApOgorICAgICAgICAoV2ViQ29yZTo6
Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURl
Y29kZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVj
dG9yeUVudHJpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09J
bWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6
c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZl
ckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2Nh
bmxpbmVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJlYWRDaHVua3MpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisKKzIwMTYtMDctMTMgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBHZXQg
cmlkIG9mIHRoZSBjb2xvciBwcm9maWxlIGZyb20gSW1hZ2VGcmFtZSBhbmQgSW1hZ2VEZWNvZGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk2OTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpzZXRDb2xvclByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpyZWFkQ29sb3JQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJ
bWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9q
cGVnL0pQRUdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRDb2xvclBy
b2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFk
ZXJBdmFpbGFibGUpOiBEZWxldGVkLgorCisyMDE2LTA3LTEzICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgdGhlIHBpeGVsIGRhdGEg
b2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlv
biBwYXJ0IGluIEltYWdlRnJhbWUgaW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCB0
aGVuIG1ha2UgaXQgb3B0aW9uYWwgKGFsbG9jYXRlZCBvbiBkZW1hbmQpLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICog
UGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwUGl4ZWxzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpC
aXRtYXBQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjp3aWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBQaXhlbHM6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxz
OjphdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFBpeGVsczo6cmVwZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4
ZWxzOjpzZXRSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6b3ZlclJHQkEp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjppbkJvdW5kcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bXVsdGlwbHky
NTUpOgorICAgICAgICAoV2ViQ29yZTo6ZGl2aWRlMjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRp
dmlkZUNlaWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZENoYW5uZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6dW5wcmVtdWx0aXBsaWVkQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3Jl
OjptYWtlUHJlbXVsdGlwbGllZFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVVuUHJlbXVs
dGlwbGllZFJHQkEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVEYXRhOjpwaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZURhdGE6Omhhc1BpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OmdldEFkZHIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzUGl4ZWxEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om92ZXJSR0JBKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWU6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5Um93TlRpbWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmZpeFBvaW50VW5zaWduZWRN
dWx0aXBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpkaXZpZGUy
NTUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6ZGVjb2Rl
Qk1QKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhl
bHNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBQaXhlbHM6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6aGF2ZURlY29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpm
cmFtZUNvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZy
YW1lQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNldFBpeGVsUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUkdCQSk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisKKzIwMTYtMDctMTMgIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCB0aGUgcGl4ZWwg
ZGF0YSBvZiBJbWFnZUZyYW1lIHRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTY3OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhlIHBpeGVsIGRhdGEgbWFuaXB1
bGF0aW9uIHBhcnQgaW4gSW1hZ2VGcmFtZSBpbnRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAg
YW5kIHRoZW4gbWFrZSBpdCBvcHRpb25hbCAoYWxsb2NhdGVkIG9uIGRlbWFuZCkuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAg
ICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtl
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBQaXhlbHMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBQaXhlbHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhl
bHM6OkJpdG1hcFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OndpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6OmF0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwUGl4ZWxzOjpyZXBlYXRGaXJzdFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBQaXhlbHM6OnNldFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpvdmVy
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmluQm91bmRzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptdWx0
aXBseTI1NSk6CisgICAgICAgIChXZWJDb3JlOjpkaXZpZGUyNTUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZGl2aWRlQ2VpbCk6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6
CisgICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5Q
cmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lRGF0YTo6aGFzUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsRnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05U
aW1lcyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6Z2V0QWRkcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoYXNQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3ZlclJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlSb3dOVGlt
ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Zml4UG9pbnRVbnNp
Z25lZE11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmRp
dmlkZTI1NSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpk
ZWNvZGVCTVApOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1h
cFBpeGVsc0NhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpp
bml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcv
SlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxS
R0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEpOgorICAg
ICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKworMjAxNi0wNy0xMSAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIFJlbmFtZSBGcmFt
ZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5kIG1vdmUgaXQgdG8gYSBzZXBhcmF0ZSBmaWxlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU0NDQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIEltYWdl
RnJhbWVEYXRhIHRvIGEgc2VwYXJhdGUgZmlsZSBzbyBpdCBjYW4gYmUgY2FjaGVkIGJ5IEltYWdl
U291cmNlCisgICAgICAgIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnN1bWVkIGJ5IEJpdG1hcEltYWdl
LiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgb2YgSW1hZ2VGcmFtZURhdGEKKyAgICAgICAgYmUgcHJp
dmF0ZSBhbmQgYWRkIGdldHRlcnMgdG8gcmV0dXJuIHRoZWlyIHZhbHVlcy4KKworICAgICAgICBO
byBuZXcgdGVzdHMgLS0gQ29kZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1l
RHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUhh
c0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNpbmdsZVBp
eGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aXNBbG1vc3RT
b2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lRGF0YTo6dXNlZEZyYW1lQnl0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ltYWdlRnJh
bWVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6SW1h
Z2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6On5JbWFnZUZy
YW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXJTdWJJbWFn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xvcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvaW1hZ2VGcmFtZURhdGEuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWVEYXRhOjppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRh
OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpmcmFtZUJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lRGF0YTo6b3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZURhdGE6OnN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZURhdGE6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpo
YXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aGFzSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6Omhhc01ldGFkYXRhKToKKworMjAxNi0w
Ni0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAg
ICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBlciBmb3Ig
TmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBpcyB0byBtb3ZlIHRo
ZSBwbGF0Zm9ybSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9tIEJpdG1hcEltYWdl
IHRvIFBsYXRmb3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2libGUgb2YgCisgICAg
ICAgIGRyYXdpbmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1hZ2VQdHIgcXVlc3Rp
b25zIHdoZW4gYW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFpbGFibGUuIEFwYXJ0
IGZyb20gZHJhd2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMgd2lsbCBiZQorICAg
ICAgICBjYWxsZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0YSBzbyB3ZSB3aWxs
IGtlZXAgZXZlcnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRyLiBCdXQgd2Ugd2ls
bCBjYXN0IHRoZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdoZW4KKyAgICAgICAg
YSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtl
OgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9N
Lm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdEltYWdlOmFuZFJlY3Rz
Ol0pOgorICAgICAgICAqIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW06CisgICAgICAg
ICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dEluZGljYXRvcjptYXJn
aW46b2Zmc2V0Ol0pOgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9m
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUlt
YWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6
OkZyYW1lRGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRpYWxpemVkIHdpdGgg
ZmFsc2UgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAgIEJpdG1hcEltYWdl
OjpmcmFtZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5IG1faGF2ZU1ldGFk
YXRhLgorICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0FscGhhIGFyZSBzZXQg
aW4gQml0bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJpdG1hcEltYWdlOjpj
YWNoZUZyYW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6fkZyYW1lRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
SW1hZ2U6OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
aXNOaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJbWFnZVJlZik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdl
Q2Fpcm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1J
bWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VD
Ry5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNH
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1h
Z2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUlt
YWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZpZXcuY3BwIHNpbmNl
IFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3MgdG8uCisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTogUmV0dXJucyB0aGUg
c3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxpbmcuCisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgorICAgICAgICAoVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6CisgICAgICAgICog
cGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDctMTMgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIHYyOiBXZWJDb250ZW50IGNyYXNoIGR1ZSB0byBSRUxF
QVNFX0FTU0VSVCghbV9pbkxvYWRQZW5kaW5nSW1hZ2VzKSBpbiBTdHlsZVJlc29sdmVyOjp+U3R5
bGVSZXNvbHZlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYTBkZTdjZDJjYTUzNzdkNzZhMDgzYTE4
MzAwZmFkNWYwNWI2MWRiNy4uMjg5OTQ1Y2JjMjc4Zjc2NDJhYjZkOTk4Njg2MWE5ZGVkM2JiZTVh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA3LTEzICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNl
IFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNj
L1dlYkNhY2hlLm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBpbWFnZUZvclVSTDpdKToKKwogMjAx
Ni0wNy0xMyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFVw
ZGF0ZSBzdXBwb3J0ZWQgcGxhdGZvcm1zIGluIHhjY29uZmlnIGZpbGVzIHRvIG1hdGNoIHRoZSBz
ZGsgbmFtZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjk1OGQ5NTllNjgxNTEyOTQ3ZDA4OTIxYjc5YmUwNjhk
MWFmMjQxMS4uOTcxOTEwMTZkNDVlNTM2Njg0YjQ3Mzk5MjNkNDBhNzZiNmQ4ZmJjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA3LTEzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2Ug
YW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cv
V0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1h
Z2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9y
VVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVz
ZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcElt
YWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAor
ICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAg
ICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2
aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRp
bWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29s
aWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0w
Ny0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYktpdDIg
c2hvdWxkbid0IHNpZ25hbCBjdXN0b20gcHJvdG9jb2wgY2xpZW50cyBmcm9tIHRoZSBOU1VSTENv
bm5lY3Rpb24gbG9hZGVyIHRocmVhZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNWFmZWEzYTE0
ZWU4NmU4MzRlMDFmZjU4NTE0M2E4ZjEwZGFhY2MyMC4uYjJiMjc5MGI4NjQxMjdmYmEzNTk3N2Zl
NDg0MTg3MTQ2ZDA3YThlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMjksNiArMjIyOSw3
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JU09WVFRDdWUu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQ
b2ludC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IDVmZjk5MWZm
N2RhMzA4YmI5MTgyZWNlM2JmMTIxNzMwYTU0OGQyODcuLmJhZTMxZWFmODZlN2ZjYTkwNTgyNTA5
MmFhMzhhNzhjMTFlNDIyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBw
bGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpA
QCAtNTUsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcAogCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTc1LDYgKzc0
LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1Ry
YW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXgg
NTE0NTA0ZTZlYzI1YWE1ZTQzYjk5Mzk4ZDVlMzVjZWVlYTc2NmFhNC4uNjRhZTE3MTA4OWRjYmYw
Y2Q0NWI3MGE5YjhmNzBlZmE5ZmZkZWRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTEyMiw3ICsxMjIsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6Tkcu
Y3BwCkBAIC0xMzQsNiArMTMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0
Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Q
YXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWlyby5j
cHAKQEAgLTE3OSw5ICsxNzksOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1l
bmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vaW1hZ2UtZW5jb2Rl
cnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvZWZsL05ldHdv
cmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDY0
NWFkZDFjZTM4ODg4YjA0ZDRhMmQ4OWFkYTBhN2M2ZGUxOTk4NmIuLmQzMWY1NzA2YTY5NTliMjMx
YjViZmIyMmYwN2QxODQzYWU4NjFhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0x
MDEsNyArMTAxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKQEAgLTExNSw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQ
dHJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1h
dHJpeENhaXJvLmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAgICAgcGxhdGZv
cm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nh
aXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nh
aXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3Rr
L1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNt
YWtlCmluZGV4IDlmNmY0OTZiNmNjNGVmNmU0Yjc0ZDg0YWMwYWE5ZGVhNTVhMDIzN2IuLjRkZGVk
MzA4OGY0ZjM5NmZlZjQ0NGU3ZWU2NWM2NDEwNjU4ZjU4NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCkBAIC0zOTcsNyArMzk3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbQog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tCiAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQ
b2ludENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcApAQCAt
NDE3LDYgKzQxNiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW5DYWlyby5jbWFrZQppbmRleCAyYzU1M2IwNTUxZGFkNjlhYTE5OWQ5NjBmNTUyMzQzZDkyMGYw
N2IzLi4zNDJhYTkyNzMyZmQ4ZjkyZTg1Y2ZhNjI2ZDU1NTcwZWY2NmI2YTY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTIxLDcgKzIxLDYgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRmxv
YXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cApAQCAtMzQsNiArMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRm
b3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3Jt
SW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVBhdGhD
YWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcApA
QCAtNDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAogCi0gICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwCiAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0
ZTdjM2EyMjlhMTYzYTVmNWE2MGY2MzJiZWEwZTM3YWQyMzk0MGUwLi5jY2IwNzBiZTA5YmFjMTZm
NWY5ZmQzMTlhODMyYzk3ODA5YjIxMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDg1LDcgKzE0ODUsNyBAQAogCQkzNzVD
RDIzMjExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUNEMjMxMTE5RDQzQzgwMEEyQTg1OSAvKiBI
eXBoZW5hdGlvbi5oICovOyB9OwogCQkzNzZEQ0NFMTEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzZE
Q0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi87IH07CiAJCTM3NzRBQkE1MEZB
MjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NzRBQkEzMEZBMjFFQjQwMEFEN0RF
OSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogQml0
bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgKi87IH07
CisJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5
QTAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgKi87IH07CiAJCTM3OTE5QzIzMEI3RDE4
ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3Np
dGlvbkl0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4IC8qIFBv
c2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3OTE5QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMzc5MjkxN0ExOTg1RUYzOTAw
RjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjMyNCwxMCArMjMyNCwxNCBAQAogCQk1M0VEM0ZERjE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRl
cm5hbFNldHRpbmdzR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRp
bmdzR2VuZXJhdGVkLmggKi87IH07CiAJCTUzRUY3NjZCMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0
aW5nc01hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87IH07CiAJ
CTUzRUY3NjZDMTY1MzE5OTQwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oIGluIENvcHkgR2Vu
ZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRjc2
NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87IH07CisJCTU1MDRFNENC
MUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRt
YXBQaXhlbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4NUY2MDM5
MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1RjYwMzkw
MDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFt
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1
NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQTFDQUFGMEFCMDAzNDk0
MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9OwogCQk1NTVCODdFRDFDQUFGMEFCMDAzNDk0
MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5o
ICovOyB9OworCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU3NEYwODUxRDAy
NzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAgLyogSW1h
Z2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLzsg
fTsKKwkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUNCQTZBMDFEMURGMkUx
MDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxh
dGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovOyB9OwogCQk1
NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2NjAwOUM2
MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAqLzsgfTsKIAkJNTdFRjVFNjAxRDIwQzgzOTAwMTcx
RTYwIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1N0VGNUU1RjFEMjBDODM5MDAxNzFFNjAgLyogVGV4dENvZGVj
UmVwbGFjZW1lbnQuaCAqLzsgfTsKQEAgLTkwNjMsNyArOTA2Nyw3IEBACiAJCTM3NkRDQ0UwMTNC
NEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRSdW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzcy
QjA5NTE2NTM1ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBU
ZXN0UmVxdWVzdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdmVy
bGFwVGVzdFJlcXVlc3RDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzc3
QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFwSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdl
Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZvcm1JbWFn
ZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjEwQjdEMTg4NjAw
QTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9zaXRpb25JdGVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3Jl
ZGVudGlhbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3JlZGVudGlh
bEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5ODksMTAgKzk5OTMsMTQg
QEAKIAkJNTNFRDNGREMxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVy
YXRlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ludGVybmFs
U2V0dGluZ3NHZW5lcmF0ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VE
M0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VGNzY2QTE2NTMwQTYxMDA0Q0JF
NDkgLyogU2V0dGluZ3NNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2V0dGluZ3NNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTUwNEU0Q0Ex
RDM1NTMyRDAwRkU1MDg4IC8qIEJpdG1hcFBpeGVscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaXRtYXBQ
aXhlbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUwQTBCQzcwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBBMEJDODA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTVCODdFQTFD
QUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU3NEYwODUxRDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRm
b3JtSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1NUNCQTY5RjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VGcmFtZURh
dGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTZBMDFEMURGMkUxMDA0
NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VGcmFtZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVENDA4
RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBTaW11bGF0
ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW11bGF0
ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAyOCw3ICsyMjAz
Niw2IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3
IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRCNjc5NSAv
KiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQ
b2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0
Q0cuY3BwICovLApAQCAtMjIwNTUsNiArMjIwNjIsNyBAQAogCQkJCUE4MEEzOEZEMEU1MENDODIw
MEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4MTQwMDJDRTY0
RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUzODE0MDAyQ0U2
NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVD
NyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovLAogCQkJCTFGQzQwRkI4MTY1NUM1OTEwMDQwRjI5
RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLywKIAkJCQkxRkM0MEZCNzE2NTVDNTkx
MDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oICovLAogCQkJCUIyNzUzNTJBMEIw
NTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAqLywKQEAgLTIyMTIy
LDYgKzIyMTMwLDcgQEAKIAkJCQlCRUYyOUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVkaW9UcmFj
a1ByaXZhdGUuaCAqLywKIAkJCQlBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1h
Z2UuY3BwICovLAogCQkJCUE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5o
ICovLAorCQkJCTU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLywK
IAkJCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEgLyogQ0RNU2Vzc2lvbi5oICovLAogCQkJCUIy
NzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3NTM1MzkwQjA1
MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCkBAIC0yMjIwNiw2ICsyMjIxNSw4IEBACiAJCQkJ
NDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlCMkEx
MEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkyMkJEOUY3RDEz
NTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNTVDQkE2OUYxRDFE
RjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLywKKwkJCQk1NUNCQTZBMDFEMURG
MkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLywKIAkJCQlCQzdGNDRBNzBCOUUzMjRF
MDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oICovLAogCQkJCUE4NzQ4RDc0MTJDQzNGODkwMDFG
QkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNwcCAqLywKIAkJCQlBODc0OEQ2NjEyQ0MzNzYzMDAx
RkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovLApAQCAtMjIyNTUsNiArMjIyNjYsNyBAQAog
CQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJ
QThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVC
MEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNTU3NEYwODUxRDAyNzQ0NDAw
QjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNB
MTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAv
KiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIw
MDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI2MDI4LDYgKzI2MDQwLDcg
QEAKIAkJCQk4NUU3MTFCOTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE1hcEVsZW1lbnRJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU3OUYwQzAzQkJEMzAwOEJCMEVFIC8qIERP
TUhUTUxNYXJxdWVlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU2RUEwQzAzQjc0
MTAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkRFQzY2NTUxQzgyRDA0MTAwOTk4NDZBIC8qIERPTUhUTUxNZWRpYUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjUxMUM4MkQwMTYwMDk5ODQ2QSAvKiBE
T01IVE1MTWVkaWFFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QkE0RDEz
MEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MTWVudUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMjY0NjksNiArMjY0ODIsNyBAQAogCQkJCUQzNTlENzhBMTI5Q0EyNzEwMDA2RTVEMiAvKiBI
VE1MRGV0YWlsc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3OUZBMEExOTE2REYw
MEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThF
QTdDQjcwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQk1NUNCQTZBMjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4RUE3OUY3MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERv
Y3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg2NzEyMjg4M0U5MDBCODFGRjggLyog
SFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MzY5LDYgKzI4MzgzLDcg
QEAKIAkJCQlCMjIyNzk5MzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdB
bmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OTgwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTU1MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQzOUQzMzQ1MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRvckZhY3RvcnkuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4RkIzRjg0MTNCQzc1NEMwMDk5RkMxOCAvKiBTVkdBdHRyaWJ1
dGVUb1Byb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5QzBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHQ2lyY2xlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTQyMSw3ICsy
OTQzNiw3IEBACiAJCQkJRkRDNTRGMDQxMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVhZEZpbHRlck5v
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjYxMkIwMjY3NjAwQzFBMzU5IC8qIEJp
cXVhZFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBCNDIzMzg4MDBE
N0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzc3QTNBOTAxNUVG
Q0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzc3
QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NzZENkM3ODEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyRURFRjFGMzEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTFEMzFDREMxOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmlsZVJlZmVy
ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5Nzg0LDYgKzI5Nzk5LDcgQEAKIAkJCQkyRTJE
OTlFODEwRTJCQzFDMDA0OTYzMzcgLyogRE9NQmxvYi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1
MDg5Q0Q4MEE5OEM0MjgwMEEyNzVBQSAvKiBET01DREFUQVNlY3Rpb24ubW0gaW4gU291cmNlcyAq
LywKIAkJCQk4NUFDQTk4NzBBOUI1MjAzMDA2NzFFOTAgLyogRE9NQ2hhcmFjdGVyRGF0YS5tbSBp
biBTb3VyY2VzICovLAorCQkJCTU1Q0JBNkExMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1l
RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTA4OUNEQTBBOThDNDI4MDBBMjc1QUEgLyog
RE9NQ29tbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3OEQwN0JFMTQ1QTBGNkMwMDk2OTA4
RCAvKiBET01Db3JlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1OEMzOEE2MEFB
OEYyMDQwMEIxODdBNCAvKiBET01Db3VudGVyLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDQwMTFlYTNmZDhjMDQ2OTc0YzU1ZDQ4ZTM5NmYxYjgz
YjgxZjMzNWQuLmE1YWM0ZjA1YWUzMzlhOGQ2NDcwNmMxMGZjMGY3YWY0MDQyNTYyM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC02MDYsNyArNjA2LDcgQEAgLSAodm9pZCln
ZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0czooTlNB
cnJheSAqKilyZWN0cwogCiAgICAgaWYgKHRleHRJbmRpY2F0b3IpIHsKICAgICAgICAgaWYgKElt
YWdlKiBpbWFnZSA9IHRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpKQotICAgICAgICAgICAg
KmNnSW1hZ2UgPSAoQ0dJbWFnZVJlZilDRkF1dG9yZWxlYXNlKENHSW1hZ2VSZXRhaW4oaW1hZ2Ut
PmdldENHSW1hZ2VSZWYoKSkpOworICAgICAgICAgICAgKmNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQppbmRl
eCAzNjRhOWE4N2NlNmYwNjYzOTQ4Yjg4NDZlOGUyY2U2ZDE5MGYyNDg5Li5hNzRkYTg1YWNlY2Ez
YzY2OThkZDE1NmFiMzFhNmM5NzFhMzU0ZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0KQEAgLTE2Miw5ICsxNjIsOSBAQCAtIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBhc3NSZWZQ
dHI8VGV4dEluZGljYQogICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgxIC8gX3Rl
eHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOwogICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwogICAgIGlmIChpbmRpY2F0b3JXYW50c0NvbnRlbnRD
cm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0
SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPmdldENHSW1hZ2VSZWYoKTsK
KyAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRo
SGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7CiAgICAgZWxzZQotICAgICAgICBjb250ZW50c0lt
YWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7Cisg
ICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPm5h
dGl2ZUltYWdlKCk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5jZUxheWVy
cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogCkBAIC0yNjUsNyAr
MjY1LDcgQEAgc3RhdGljIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGVCb3Vu
Y2VBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXQKIHN0YXRpYyBSZXRhaW5QdHI8Q0FCYXNp
Y0FuaW1hdGlvbj4gY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbihDRlRpbWVJbnRlcnZh
bCBkdXJhdGlvbiwgVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRvcikKIHsKICAgICBSZXRhaW5Q
dHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRp
b24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJjb250ZW50cyJdOwotICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBjb250ZW50c0ltYWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+Z2V0
Q0dJbWFnZVJlZigpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0g
dGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKTsKICAgICBbY3Jvc3Nm
YWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6KGlkKWNvbnRlbnRzSW1hZ2UuZ2V0KCldOwogICAgIFtj
cm9zc2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CiAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCA0NjBk
MWI4NTZiNzdiN2NmNGVjNjg5NjU4MWI4MzNkM2U3Zjk3MDE0Li5mYzY0OWQxMGFhYjljMTNmZmYy
OTMwNTVhNzA3Y2I3NDUzNzQ2OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC02OCwxNSArNjgsMTMgQEAgQml0bWFwSW1hZ2U6
OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRyJiYgaW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2Vy
dmVyKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQogICAgICwgbV9hbmltYXRpb25GaW5p
c2hlZFdoZW5DYXRjaGluZ1VwKGZhbHNlKQogeworICAgIG1fZnJhbWVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoMSk7CisgICAgbV9mcmFtZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoaW1hZ2Up
KTsKKyAgICAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgZGVjb2Rlciwgd2UgY2FuJ3Qg
ZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRpb24uCiAgICAgLy8gU2V0IG1fc2l6ZVJlc3Bl
Y3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2FtZSBhcyBtX3NpemUgc28gaXQncyBub3QgMHgw
LgotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZSA9IE5hdGl2ZUltYWdl
OjpzaXplKGltYWdlKTsKKyAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUg
PSBtX2ZyYW1lc1swXS5zaXplKCk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS5hcmVhKCkg
KiA0OwotICAgIAotICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0gICAgbV9mcmFtZXNbMF0ubV9oYXNB
bHBoYSA9IE5hdGl2ZUltYWdlOjpoYXNBbHBoYShpbWFnZSk7Ci0gICAgbV9mcmFtZXNbMF0ubV9o
YXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBXVEZNb3ZlKGlt
YWdlKTsKIH0KIAogQml0bWFwSW1hZ2U6On5CaXRtYXBJbWFnZSgpCkBAIC0xMDUsNyArMTAzLDcg
QEAgYm9vbCBCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkK
ICAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7CisgICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5oYXNJbWFnZSgpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpoYXNTaW5nbGVT
ZWN1cml0eU9yaWdpbigpIGNvbnN0CkBAIC0xMjUsOSArMTIzLDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKICAgICAgICAgLy8gVGhlIHVu
ZGVybHlpbmcgZnJhbWUgaXNuJ3QgYWN0dWFsbHkgY2hhbmdpbmcgKHdlJ3JlIGp1c3QgdHJ5aW5n
IHRvCiAgICAgICAgIC8vIHNhdmUgdGhlIG1lbW9yeSBmb3IgdGhlIGZyYW1lYnVmZmVyIGRhdGEp
LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyCiAgICAgICAgIC8vIHRoZSBtZXRhZGF0YS4KLSAg
ICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAg
ICAgICAgaWYgKG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKSkKLSAgICAgICAgICAgIGZyYW1lQnl0
ZXNDbGVhcmVkICs9IGZyYW1lQnl0ZXM7CisgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IG1f
ZnJhbWVzW2ldLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSk7CiAgICAg
fQogCiAgICAgbV9zb3VyY2UuY2xlYXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFtZSwgZGF0
YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CkBAIC0xNTAsOCArMTQ2LDggQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxsKQogICAg
ICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBhbGxGcmFt
ZUJ5dGVzICs9IG1fZnJhbWVzW2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChhdXRvJiBm
cmFtZSA6IG1fZnJhbWVzKQorICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLmZyYW1lQnl0
ZXMoKTsKIAogICAgIGlmIChhbGxGcmFtZUJ5dGVzID4gbGFyZ2VBbmltYXRpb25DdXRvZmYpIHsK
ICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGRlc3Ryb3lEZWNvZGVkRGF0YUlm
TmVjZXNzYXJ5IGRlc3Ryb3lpbmdEYXRhOiBhbGxGcmFtZUJ5dGVzPSV1IGN1dG9mZj0ldSIsIHRo
aXMsIGFsbEZyYW1lQnl0ZXMsIGxhcmdlQW5pbWF0aW9uQ3V0b2ZmKTsKQEAgLTE3Nyw3ICsxNzMs
NyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkodW5zaWduZWQg
ZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTbwogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRl
Y29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50PihmcmFtZUJ5dGVzQ2xlYXJlZCkp
OwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxp
bmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5n
KQogewogICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgQVNTRVJUKG1f
ZGVjb2RlZFNpemUgPT0gMCB8fCBudW1GcmFtZXMgPiAxKTsKQEAgLTE4NSwyNSArMTgxLDEyIEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltCiAgICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8IG51bUZy
YW1lcykKICAgICAgICAgbV9mcmFtZXMuZ3JvdyhudW1GcmFtZXMpOwogCi0gICAgaWYgKGZyYW1l
Q2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpIHsKLSAgICAgICAgbV9mcmFtZXNbaW5k
ZXhdLm1faW1hZ2UgPSBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCk7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2
ZWwgPSBzdWJzYW1wbGluZ0xldmVsOwotICAgIH0KLQotICAgIG1fZnJhbWVzW2luZGV4XS5tX29y
aWVudGF0aW9uID0gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKLSAgICBtX2Zy
YW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzW2luZGV4XS5t
X2lzQ29tcGxldGUgPSBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KTsKKyAg
ICBtX2ZyYW1lc1tpbmRleF0gPSBtX3NvdXJjZS5jcmVhdGVGcmFtZURhdGFBdEluZGV4KGluZGV4
LCBzdWJzYW1wbGluZ0xldmVsLCBjYWNoaW5nKTsKIAotICAgIGlmIChyZXBldGl0aW9uQ291bnQo
ZmFsc2UpICE9IGNBbmltYXRpb25Ob25lKQotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9kdXJh
dGlvbiA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICBMT0coSW1h
Z2VzLCAiQml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNvbXBsZXRl
ICVkKSIsIHRoaXMsIGluZGV4LCBjYWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpN
ZXRhZGF0YSA/ICJtZXRhZGF0YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5mcmFtZUJ5
dGVzKCksIG1fZnJhbWVzW2luZGV4XS5pc0NvbXBsZXRlKCkpOwogCi0gICAgbV9mcmFtZXNbaW5k
ZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7Ci0g
ICAgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlcyA9IG1fc291cmNlLmZyYW1lQnl0ZXNBdElu
ZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKLQotICAgIExPRyhJbWFnZXMsICJCaXRtYXBJ
bWFnZSAlcCBjYWNoZUZyYW1lICVsdSAoJXMldSBieXRlcywgY29tcGxldGUgJWQpIiwgdGhpcywg
aW5kZXgsIGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSA/ICJtZXRhZGF0YSBvbmx5
LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMsIG1fZnJhbWVzW2luZGV4XS5t
X2lzQ29tcGxldGUpOwotCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKSB7Ci0gICAg
ICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0ubV9mcmFt
ZUJ5dGVzKTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpIHsKKyAgICAgICAg
aW50IGRlbHRhQnl0ZXMgPSBzYWZlQ2FzdDxpbnQ+KG1fZnJhbWVzW2luZGV4XS5mcmFtZUJ5dGVz
KCkpOwogICAgICAgICBtX2RlY29kZWRTaXplICs9IGRlbHRhQnl0ZXM7CiAgICAgICAgIC8vIFRo
ZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vic3VtZSB0aGUgcGFydGlhbGx5IGRlY29kZWQg
ZGF0YSB1c2VkCiAgICAgICAgIC8vIHRvIGRldGVybWluZSBpbWFnZSBwcm9wZXJ0aWVzLgpAQCAt
Mjg4LDIxICsyNzEsMTkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCiAgICAgLy8gZnJhbWUgYWZmZWN0ZWQgYnkgYXBwZW5kaW5nIG5ldyBkYXRh
IGhlcmUuIFRodXMgd2UgaGF2ZSB0byBjbGVhciBhbGwgdGhlCiAgICAgLy8gaW5jb21wbGV0ZSBm
cmFtZXMgdG8gYmUgc2FmZS4KICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQ2xlYXJlZCA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkgeworICAgIGZv
ciAoYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykgewogICAgICAgICAvLyBOT1RFOiBEb24ndCBjYWxs
IGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoKSBoZXJlLCB0aGF0IHdpbGwgdHJ5IHRvCiAgICAgICAg
IC8vIGRlY29kZSBhbnkgdW5jYWNoZWQgKGkuZS4gbmV2ZXItZGVjb2RlZCBvcgogICAgICAgICAv
LyBjbGVhcmVkLW9uLWEtcHJldmlvdXMtcGFzcykgZnJhbWVzIQotICAgICAgICB1bnNpZ25lZCBm
cmFtZUJ5dGVzID0gbV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAobV9mcmFt
ZXNbaV0ubV9oYXZlTWV0YWRhdGEgJiYgIW1fZnJhbWVzW2ldLm1faXNDb21wbGV0ZSkKLSAgICAg
ICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IChtX2ZyYW1lc1tpXS5jbGVhcih0cnVlKSA/IGZy
YW1lQnl0ZXMgOiAwKTsKKyAgICAgICAgaWYgKGZyYW1lLmhhc01ldGFkYXRhKCkgJiYgIWZyYW1l
LmlzQ29tcGxldGUoKSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lLmNs
ZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgfQogICAgIGRlc3Ryb3lN
ZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xlYXJlZCwgQ2xlYXJlZFNvdXJjZTo6Tm8pOwog
I2Vsc2UKICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgZGlmZmVyZW50IGZvciBpT1M/CiAgICAg
aW50IGRlbHRhQnl0ZXMgPSAwOwogICAgIGlmICghbV9mcmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGludCBieXRlcyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLm1fZnJhbWVCeXRl
czsKLSAgICAgICAgaWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFyKHRydWUp
KSB7CisgICAgICAgIGlmIChpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAx
XS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpKSB7CiAgICAgICAgICAgICBk
ZWx0YUJ5dGVzICs9IGJ5dGVzOwogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBtX2RlY29kZWRQ
cm9wZXJ0aWVzU2l6ZTsKICAgICAgICAgICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplID0gMDsK
QEAgLTM2NiwxNSArMzQ3LDE1IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWlsYWJsZSgp
CiAgICAgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAotYm9vbCBCaXRtYXBJbWFnZTo6ZW5z
dXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nIGZyYW1lQ2Fj
aGluZykKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5nKQogewogICAgIGlmIChpbmRleCA+PSBm
cmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpbmRleCA+PSBt
X2ZyYW1lcy5zaXplKCkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRh
QW5kRnJhbWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICB8fCAoZnJhbWVD
YWNoaW5nID09IENhY2hlTWV0YWRhdGFPbmx5ICYmICFtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0
YWRhdGEpKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBmcmFtZUNhY2hpbmcpOworICAg
ICAgICB8fCAoY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJ
bWFnZSAmJiAhbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpCisgICAgICAgIHx8IChjYWNoaW5n
ID09IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSAmJiAhbV9mcmFtZXNbaW5kZXhd
Lmhhc01ldGFkYXRhKCkpKQorICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBjYWNoaW5nKTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzg4LDEwICszNjksOSBAQCBOYXRpdmVJbWFnZVB0
ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9hdCBwcmVz
ZW50YXRpb25TYwogCiAgICAgLy8gV2UgbWF5IGhhdmUgY2FjaGVkIGEgZnJhbWUgd2l0aCBhIGhp
Z2hlciBzdWJzYW1wbGluZyBsZXZlbCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvCiAgICAgLy8g
cmUtZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KLSAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5z
aXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZlbCA8IG1f
ZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpIHsKKyAgICBpZiAoaW5kZXggPCBtX2Zy
YW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkgJiYgc3Vic2FtcGxpbmdM
ZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5zdWJzYW1wbGluZ0xldmVsKCkpIHsKICAgICAgICAgLy8g
SWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEgc2l6ZSwg
cmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1f
ZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5jbGVh
cih0cnVlKTsKKyAgICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhdLmNsZWFy
KEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgICAgIGludmFsaWRhdGVQbGF0
Zm9ybURhdGEoKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBzaXplQ2hhbmdlOwogICAgICAg
ICBpZiAoaW1hZ2VPYnNlcnZlcigpKQpAQCAtMzk5LDQwICszNzksNzIgQEAgTmF0aXZlSW1hZ2VQ
dHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgcHJl
c2VudGF0aW9uU2MKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlbid0IGZldGNoZWQgYSBmcmFt
ZSB5ZXQsIGRvIHNvLgotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJh
bWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsLCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIGlmIChpbmRleCA+PSBtX2ZyYW1l
cy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICBjYWNoZUZy
YW1lKGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGFBbmRJbWFnZSk7CisKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmltYWdlKCk7Cit9
CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoKQoreworICAg
IHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdlUHRyIEJp
dG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdElu
ZGV4KGkpOworICAgICAgICBpZiAoaW1hZ2UgJiYgUGxhdGZvcm1JbWFnZShpbWFnZSkuc2l6ZSgp
ID09IHNpemUpCisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQorICAgIAorICAgIC8v
IEZhbGxiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZSBpbWFnZSBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBy
aWdodCBzaXplCisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAgIAorTmF0
aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKK3sK
KyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworfQogCi0gICAg
cmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBC
aXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKCkKK3sKKyAgICBWZWN0b3I8TmF0aXZlSW1h
Z2VQdHI+IGltYWdlczsKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmIChhdXRv
IGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkpCisgICAgICAgICAgICBpbWFnZXMuYXBwZW5k
KGltYWdlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlczsKIH0KIAogYm9vbCBCaXRt
YXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYg
KCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYg
KCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5k
ZXhdLm1faXNDb21wbGV0ZTsKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmlzQ29tcGxldGUo
KTsKIH0KIAogZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBp
bmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIENhY2hlTWV0YWRh
dGFPbmx5KSkKKyAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIEltYWdlRnJhbWVE
YXRhOjpDYWNoaW5nOjpNZXRhZGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5tX2R1cmF0aW9uOwotfQotCi1OYXRpdmVJbWFnZVB0ciBCaXRtYXBJ
bWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQotewotICAgIHJldHVybiBmcmFtZUlt
YWdlQXRJbmRleChjdXJyZW50RnJhbWUoKSk7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5k
dXJhdGlvbigpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNo
ZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiBt
X2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc01l
dGFkYXRhKCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0uaGFzQWxwaGEoKTsKIAog
ICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CiB9CkBAIC00
NDQsMTEgKzQ1NiwxMSBAQCBib29sIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVLbm93blRvQmVP
cGFxdWUoKQogCiBJbWFnZU9yaWVudGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGlu
ZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGlu
ZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4g
SW1hZ2VPcmllbnRhdGlvbigpOwogCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2hhdmVNZXRh
ZGF0YSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX29yaWVudGF0aW9uOworICAg
IGlmIChtX2ZyYW1lc1tpbmRleF0uaGFzTWV0YWRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5vcmllbnRhdGlvbigpOwogCiAgICAgcmV0dXJuIG1fc291cmNlLm9yaWVudGF0
aW9uQXRJbmRleChpbmRleCk7CiB9CkBAIC03MDAsMTcgKzcxMiw1NiBAQCBDb2xvciBCaXRtYXBJ
bWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAg
ICAgCiAgICAgQVNTRVJUKG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENvbG9yID0gTmF0
aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2ltYWdlLmdldCgp
KTsKKyAgICBtX3NvbGlkQ29sb3IgPSBtX2ZyYW1lc1swXS5zaW5nbGVQaXhlbFNvbGlkQ29sb3Io
KTsKICAgICAKICAgICBBU1NFUlQobV9zb2xpZENvbG9yKTsKICAgICByZXR1cm4gbV9zb2xpZENv
bG9yLnZhbHVlKCk7CiB9CiAgICAgCitib29sIEJpdG1hcEltYWdlOjppc0FsbW9zdFNvbGlkQ29s
b3IoKQoreworICAgIGlmIChmcmFtZUNvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIGVuc3VyZUZyYW1lSXNDYWNoZWQoMCkgJiYgbV9mcmFtZXNbMF0uaXNB
bG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCiBib29sIEJpdG1hcEltYWdlOjpjYW5BbmltYXRl
KCkKIHsKICAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+IDE7CiB9
CiAKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9u
IGRlc2NyaXB0aW9uKQoreworICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkgfHwgc3JjUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdGFy
dEFuaW1hdGlvbihEb05vdENhdGNoVXApOworI2Vsc2UKKyAgICBzdGFydEFuaW1hdGlvbigpOwor
I2VuZGlmCisgICAgCisgICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsK
KyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihj
b250ZXh0LCBkZXN0UmVjdCwgY29sb3IsIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIFBs
YXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoY29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3Qp
KTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFu
IGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb24oZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKKyAgICBpZiAoZGVz
Y3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRh
dGlvbikKKyAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1
cnJlbnRGcmFtZSk7CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShpbWFnZSkuZHJhdyhjb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgbV9zaXplLCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworICAg
IAorICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlk
RHJhdyh0aGlzKTsKK30KKyAgICAKIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0cmVhbSYg
dHMpIGNvbnN0CiB7CiAgICAgSW1hZ2U6OmR1bXAodHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggMDc1ODkyOWNkODdmYWRhY2YwMmI2
ZWQ4ZWVhZmU3ZGVmZDY2ZjBjNS4uMjIxOGM4MjRiNTI4ZmQ2MzliYWIxMzhkZWNjOThiOTgxNmEx
NjgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFw
SW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oCkBAIC0yOCwxMSArMjgsMTMgQEAKICNpZm5kZWYgQml0bWFwSW1hZ2VfaAogI2RlZmluZSBC
aXRtYXBJbWFnZV9oCiAKLSNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisj
aW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lRGF0YS5oIgogI2luY2x1ZGUg
IkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUg
IkludFNpemUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCiAKICNpZiBVU0UoQ0cpIHx8
IFVTRShBUFBLSVQpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDcsNjMgKzQ5LDkg
QEAgdHlwZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2UgV1RGIHsK
LSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVEYXRhPiA6
IHB1YmxpYyBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJhbWVEYXRh
IG1lbWJlcnMgaW5pdGlhbGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgVGltZXI7CiAKLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0gICAgSW50U2l6
ZSBzaXplKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0gICAgYm9vbCBoYXNBbHBoYShjb25zdCBO
YXRpdmVJbWFnZVB0ciYpOwotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBO
YXRpdmVJbWFnZVB0ciYpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS8vIEZyYW1lRGF0YSBDbGFzcwotLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0cnVjdCBGcmFtZURhdGEgewot
cHVibGljOgotICAgIEZyYW1lRGF0YSgpCi0gICAgICAgIDogbV9oYXZlTWV0YWRhdGEoZmFsc2Up
Ci0gICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxwaGEodHJ1
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkZyYW1lRGF0YSgpCi0gICAgeyAKLSAgICAgICAgY2xl
YXIodHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBpbWFnZSBkYXRhIG9u
IHRoZSBmcmFtZSwgYW5kIChvcHRpb25hbGx5KSB0aGUgbWV0YWRhdGEuCi0gICAgLy8gUmV0dXJu
cyB3aGV0aGVyIHRoZXJlIHdhcyBjYWNoZWQgaW1hZ2UgZGF0YSB0byBjbGVhci4KLSAgICBib29s
IGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSk7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNlZEZyYW1l
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9mcmFtZUJ5dGVzIDogMDsgfQotCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKLSAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50
YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OwotICAgIFN1YnNhbXBsaW5nTGV2ZWwg
bV9zdWJzYW1wbGluZ0xldmVsIHsgMCB9OwotICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07Ci0g
ICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7Ci0gICAgYm9vbCBtX2lzQ29tcGxldGUgOiAxOwot
ICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7Ci0gICAgdW5zaWduZWQgbV9mcmFtZUJ5dGVzIHsgMCB9
OwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLy8gQml0bWFwSW1hZ2UgQ2xhc3MKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLQogY2xhc3MgQml0bWFwSW1hZ2UgZmluYWwgOiBwdWJs
aWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAgICBmcmllbmQg
Y2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0xNTUsMTIgKzEwMyw2IEBAIHB1Ymxp
YzoKICAgICBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgb3ZlcnJpZGU7CiAjZW5k
aWYKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDR0ltYWdlUmVmIGdldENHSW1h
Z2VSZWYoKSBvdmVycmlkZTsKLSAgICBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6
ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGdl
dENHSW1hZ2VBcnJheSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAg
ICAgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIG92ZXJyaWRlOwogICAgIGJvb2wgZ2V0SEJJVE1B
UE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgb3ZlcnJpZGU7CkBAIC0xNzQsOCArMTE2
LDEzIEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZhc09iamVjdChFdmFzKikgb3Zl
cnJpZGU7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUo
Y29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRh
dGlvbkZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZyYW1lT3JpZW50YXRpb25B
dEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQorICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gZnJh
bWVzTmF0aXZlSW1hZ2VzKCkgb3ZlcnJpZGU7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBpc0FsbW9zdFNvbGlkQ29sb3IoKTsKIAogICAgIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0Jl
T3BhcXVlKCkgb3ZlcnJpZGU7CiAKQEAgLTIxNSw3ICsxNjIsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
c2l6ZV90IGZyYW1lQ291bnQoKTsKIAogICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdElu
ZGV4KHNpemVfdCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50ID0gMSk7Ci0gICAgTmF0aXZl
SW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIAogICAgIGJv
b2wgaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKQEAgLTIyNSwxMSArMTcxLDEwIEBA
IHByb3RlY3RlZDoKICAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4
KHNpemVfdCk7CiAKICAgICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2ZXIgYWNj
ZXNzZWQgZXhjZXB0IGludGVybmFsbHkuCi0gICAgZW51bSBJbWFnZUZyYW1lQ2FjaGluZyB7IENh
Y2hlTWV0YWRhdGFPbmx5LCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUgfTsKLSAgICB2b2lkIGNhY2hl
RnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyA9
IENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7CisgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1l
RGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQgYmVmb3Jl
IGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9yIGluZm8gd2l0aG91dCBkZWNvZGluZy4gUmV0
dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91bmRzLgotICAgIGJvb2wgZW5zdXJlRnJhbWVJ
c0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nID0gQ2FjaGVNZXRhZGF0YUFu
ZEZyYW1lKTsKKyAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YUFu
ZEltYWdlKTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhLiBXaGVu
IHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8vIHRoZSBlbnRpcmUgZnJh
bWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJveQpAQCAt
MjkyLDcgKzIzNyw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6ZVJlc3Bl
Y3RpbmdPcmllbnRhdGlvbjsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZSB7IDAgfTsgLy8g
VGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KLSAgICBWZWN0b3I8
RnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMg
b2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRo
ZSBjYWNoZS4KKyAgICBWZWN0b3I8SW1hZ2VGcmFtZURhdGEsIDE+IG1fZnJhbWVzOyAvLyBBbiBh
cnJheSBvZiB0aGUgY2FjaGVkIGZyYW1lcyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBoYXZlIHRvIHJl
ZiBmcmFtZXMgdG8gcGluIHRoZW0gaW4gdGhlIGNhY2hlLgogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRpbWVyPiBtX2ZyYW1lVGltZXI7CiAgICAgaW50IG1fcmVwZXRpdGlvbkNvdW50IHsgY0FuaW1h
dGlvbk5vbmUgfTsgLy8gSG93IG1hbnkgdG90YWwgYW5pbWF0aW9uIGxvb3BzIHdlIHNob3VsZCBk
by4gVGhpcyB3aWxsIGJlIGNBbmltYXRpb25Ob25lIGlmIHRoaXMgaW1hZ2UgdHlwZSBpcyBpbmNh
cGFibGUgb2YgYW5pbWF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBQaXhlbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YWEyNDAwZjNhZWY3YjY5OWQyYWE0ZGY3ZGE0
NDcyNGRkM2NkNThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDb2xvci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisj
aW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCaXRtYXBQaXhlbHMgeworcHVibGljOgorICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBjcmVhdGUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihzaXplLCBwcmVtdWx0aXBseUFscGhhKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3JlYXRlKGNv
bnN0IEJpdG1hcFBpeGVscyYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxCaXRtYXBQaXhlbHM+KG90aGVyKTsKKyAgICB9CisKKyAgICBCaXRtYXBQaXhlbHMo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZSkKKyAgICAg
ICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAgICBzZXRTaXplKHNpemUpOworICAgIH0K
KworICAgIEJpdG1hcFBpeGVscyhjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKKyAgICAgICAg
bV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IG90aGVy
Lm1fc2l6ZTsKKyAgICAgICAgbV9yZWN0ID0gb3RoZXIubV9yZWN0OworICAgICAgICBtX3ByZW11
bHRpcGx5QWxwaGEgPSBvdGhlci5tX3ByZW11bHRpcGx5QWxwaGE7CisgICAgfQorCisgICAgTmF0
aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdDsKKworICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS50cnlSZXNlcnZl
Q2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUucmVzaXplKHNpemUuYXJlYSgpKTsKKyAgICAgICAg
bV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7
CisgICAgICAgIG1fcmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKTsKKyAgICAgICAg
Y2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemUu
aXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91bmRzKHJlY3QpKTsKKyAgICAgICAgbV9y
ZWN0ID0gcmVjdDsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CisgICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpbkJvdW5kcyhJbnRQb2ludCh4LCB5KSkgPyBtX3BpeGVscyArIHkgKiBtX3NpemUud2lk
dGgoKSArIHggOiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAg
ICAgICAgbWVtc2V0KG1fcGl4ZWxzLCAwLCBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEzMikp
OworICAgIH0KKworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAg
eworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgaW5Cb3VuZHMocmVjdCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9
IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIqIHN0YXJ0ID0g
YXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0
LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbXNldChzdGFydCwgMCwgcmVjdFdpZHRo
SW5CeXRlcyk7CisgICAgICAgICAgICBzdGFydCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgcmVwZWF0Rmlyc3RSb3coY29uc3QgSW50UmVjdCYgcmVjdCkK
KyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCBpbkJvdW5kcyhyZWN0KSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5
dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJHQkEzMiogc3Jj
ID0gYXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgUkdCQTMyKiBkZXN0ID0gc3JjICsg
bV9zaXplLndpZHRoKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcmVjdC5oZWlnaHQo
KTsgKytpKSB7CisgICAgICAgICAgICBtZW1jcHkoZGVzdCwgc3JjLCByZWN0V2lkdGhJbkJ5dGVz
KTsKKyAgICAgICAgICAgIGRlc3QgKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBn
LCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCQShhdCh4LCB5
KSwgciwgZywgYiwgYSk7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwg
dW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhIHx8IGEgPj0gMjU1KQorICAgICAgICAgICAg
KmRlc3QgPSBtYWtlUkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgZWxzZSBpZiAoIWEpCisgICAg
ICAgICAgICAqZGVzdCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpkZXN0ID0gbWFr
ZVByZW11bHRpcGxpZWRSR0JBKHIsIGcsIGIsIGEpOworICAgIH0KKworICAgIHZvaWQgb3ZlclJH
QkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNp
Z25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFhbHBoYUNoYW5uZWwoKmRlc3QpKSB7Cisg
ICAgICAgICAgICBzZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkK
KyAgICAgICAgICAgICpkZXN0ID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwoKmRl
c3QpLCBncmVlbkNoYW5uZWwoKmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhhQ2hhbm5l
bCgqZGVzdCkpOworICAgICAgICAKKyAgICAgICAgUkdCQTMyIHNyYyA9IG1ha2VSR0JBKHIsIGcs
IGIsIGEpOworICAgICAgICAqZGVzdCA9IENvbG9yKCpkZXN0KS5ibGVuZChzcmMpLnJnYigpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICAq
ZGVzdCA9IG1ha2VVblByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwoKmRlc3QpLCBncmVlbkNo
YW5uZWwoKmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhhQ2hhbm5lbCgqZGVzdCkpOwor
ICAgIH0KKworICAgIGJvb2wgaW5Cb3VuZHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKS5jb250YWlu
cyhwb2ludCk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5kcyhjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXpl
KS5jb250YWlucyhyZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFJHQkEzMj4g
bV9iYWNraW5nU3RvcmU7CisgICAgUkdCQTMyKiBtX3BpeGVscyB7IG51bGxwdHIgfTsKKyAgICBJ
bnRTaXplIG1fc2l6ZTsKKyAgICBJbnRSZWN0IG1fcmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5cyBq
dXN0IGJlIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGFuZCBQTkcgZnJhbWVzCisg
ICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGEgeyB0cnVlIH07Cit9OworCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKaW5kZXggNGUyNWFhNmZkNzRkMWU0NmM1
NDE2MTQ5OGJjMTcyYmY2MDA4NzVkMS4uNDM5ZjVhNjNjN2JlYmU1NjA0MmIyNGU3ZDcyZWNjZWNm
MzZjNDBjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcApA
QCAtNDksNiArNDksNDAgQEAgY29uc3QgUkdCQTMyIENvbG9yOjp0cmFuc3BhcmVudDsKIHN0YXRp
YyBjb25zdCBSR0JBMzIgbGlnaHRlbmVkQmxhY2sgPSAweEZGNTQ1NDU0Owogc3RhdGljIGNvbnN0
IFJHQkEzMiBkYXJrZW5lZFdoaXRlID0gMHhGRkFCQUJBQjsKIAorc3RhdGljIGlubGluZSB1bnNp
Z25lZCBtdWx0aXBseTI1NSh1bnNpZ25lZCBjKQoreworICAgIC8vIGMgKiAyNTUKKyAgICAvLyAg
ID0gYyAqICgyNTYgLSAxKQorICAgIC8vICAgPSBjICogMjU2IC0gYworICAgIHJldHVybiAoYyA8
PCA4KSAtIGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZGl2aWRlMjU1KHVuc2lnbmVk
IGMpCit7CisgICAgLy8gYyAvIDI1NQorICAgIC8vICAgPSBjIC8gMjU2ICogKDEgKyAxIC8gMjU1
KQorICAgIC8vICAgPSAoYyArIGMgLyAyNTUpIC8gMjU2CisgICAgLy8gICA9IChjICsgKGMgKyBj
IC8gMjU1KSAvIDI1NikgLyAyNTYKKyAgICAvLyAgID0gKGMgKyBjIC8gMjU2ICsgYyAvICgyNTUg
eCAyNTYpKSAvIDI1NgorICAgIC8vICB+PSAoYyArIGMgLyAyNTYgKyAxKSAvIDI1NgorICAgIHJl
dHVybiAoYyArIChjID4+IDgpICsgMSkgPj4gODsKK30KKyAgICAKK3N0YXRpYyBpbmxpbmUgdW5z
aWduZWQgZGl2aWRlQ2VpbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBkKQoreworICAgIHJldHVybiAo
YyArIGQgLSAxKSAvIGQ7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHByZW11bHRp
cGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0dXJuIGRpdmlk
ZTI1NShjICogYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5wcmVtdWx0aXBsaWVk
Q2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBkaXZpZGVDZWls
KG11bHRpcGx5MjU1KGMpLCBhKTsKK30KKyAgICAKIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQg
ZywgaW50IGIpCiB7CiAgICAgcmV0dXJuIDB4RkYwMDAwMDAgfCBzdGQ6Om1heCgwLCBzdGQ6Om1p
bihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBz
dGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUpKTsKQEAgLTU5LDYgKzkzLDE2IEBAIFJHQkEzMiBt
YWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKICAgICByZXR1cm4gc3RkOjptYXgo
MCwgc3RkOjptaW4oYSwgMjU1KSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUp
KSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgw
LCBzdGQ6Om1pbihiLCAyNTUpKTsKIH0KIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShp
bnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVs
dGlwbGllZENoYW5uZWwociwgYSksIHByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCBwcmVtdWx0
aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7Cit9CisgICAgCitSR0JBMzIgbWFrZVVuUHJlbXVsdGlw
bGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VS
R0JBKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwo
ZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorICAgIAogc3RhdGlj
IGludCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQogewogICAgIC8vIFdlIHVzZSBscm91
bmRmIGFuZCAyNTUgaW5zdGVhZCBvZiBuZXh0YWZ0ZXJmKDI1NiwgMCkgdG8gbWF0Y2ggQ0cncyBy
b3VuZGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKaW5kZXggZGQy
NjI3MGJiNDY2MGIzM2FlMDcwZThjOTQ0NTIwZDcyODQ1NGI4YS4uYTU0NTMyYzc3NTVhN2M4NzY5
MzYyNDBjYWU0ZWMzN2E0ZGEwZDA0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCkBAIC01NCw2ICs1NCw4IEBAIHR5cGVkZWYgdW5zaWduZWQgUkdCQTMyOyAvLyBE
ZXByZWNhdGVkOiBUeXBlIGZvciBhbiBSR0JBIHF1YWRydXBsZXQuIFVzZSBSR0JBIGNsCiAKIFdF
QkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpOwogV0VCQ09S
RV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKK1dF
QkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBp
bnQgYiwgaW50IGEpOworV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRS
R0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAogV0VCQ09SRV9FWFBPUlQgUkdCQTMy
IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhh
KTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBj
b2xvciwgT3B0aW9uYWw8ZmxvYXQ+IG92ZXJyaWRlQWxwaGEpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmgKaW5kZXggN2EyOTk5MmY3NzE4OGUwMzgyOGQ4MGE2NWI4YmUy
Y2Q4ZGMyZGU3Ni4uOGU3YjUyYjFmNGYzMWM3NGEzY2IyYTEzMjE1ZGE3N2EyYjE4YzA3YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCkBAIC0xMzcsOCArMTM3LDEx
IEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwgUm91bmRUaWxl
LCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFn
ZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsg
fQogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBJbWFnZU9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOyB9Cisg
ICAgdmlydHVhbCBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIHsg
cmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0
cy4KIApAQCAtMTUwLDEyICsxNTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDRkRhdGFSZWYg
Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKLSNp
ZiBVU0UoQ0cpCi0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldENHSW1hZ2VSZWYoKSB7IHJldHVy
biBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9m
U2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgUmV0
YWluUHRyPENGQXJyYXlSZWY+IGdldENHSW1hZ2VBcnJheSgpIHsgcmV0dXJuIG51bGxwdHI7IH0K
LSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQ
KEhCSVRNQVApIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGdldEhCSVRNQVBP
ZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xNzks
NiArMTc2LDggQEAgcHVibGljOgogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXJ0dWFsIGJv
b2wgbm90U29saWRDb2xvcigpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgorICAgIAorICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXRJZk5lZWRlZCgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI4ZTNlZDRjOGEzYWJkMmNm
MzdmZmM3ZDFjZjk5NDg4ODBiNDg5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcApAQCAtMCwwICsxLDE1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKKworI2luY2x1ZGUgIkNvbG9y
LmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKKyNlbHNlCisj
aW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIlBsYXRmb3JtSW1h
Z2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZyYW1lRGF0YTo6SW1hZ2VGcmFt
ZURhdGEoKQoreworfQorCitJbWFnZUZyYW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEoTmF0aXZlSW1h
Z2VQdHImJiBpbWFnZSkKKyAgICA6IG1fc3RhdHVzKERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSkK
KyAgICAsIG1faW1hZ2UoV1RGTW92ZShpbWFnZSkpCit7CisgICAgbV9zaXplID0gUGxhdGZvcm1J
bWFnZShtX2ltYWdlKS5zaXplKCk7CisgICAgbV9oYXNBbHBoYSA9IFBsYXRmb3JtSW1hZ2UobV9p
bWFnZSkuaGFzQWxwaGEoKTsKK30KKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKElt
YWdlRGVjb2RlciYgZGVjb2Rlciwgc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWwsIENhY2hpbmcgZnJhbWVDYWNoaW5nKQoreworICAgIEFTU0VSVChmcmFtZUNh
Y2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhQW5kSW1hZ2UpOworICAgIAorICAgIGlmIChmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6
SW1hZ2UgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpIHsKKyAg
ICAgICAgbV9pbWFnZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1
YnNhbXBsaW5nTGV2ZWwpOworICAgICAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBzdWJzYW1wbGlu
Z0xldmVsOworICAgIH0KKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKSB7Cisg
ICAgICAgIG1fb3JpZW50YXRpb24gPSBkZWNvZGVyLm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7
CisgICAgICAgIG1fc3RhdHVzID0gZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4
KSA/IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSA6IERlY29kaW5nU3RhdHVzOjpQYXJ0aWFsOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGRlY29kZXIucmVwZXRpdGlvbkNvdW50KCkgIT0gY0FuaW1h
dGlvbk5vbmUpCisgICAgICAgICAgICBtX2R1cmF0aW9uID0gZGVjb2Rlci5mcmFtZUR1cmF0aW9u
QXRJbmRleChpbmRleCk7CisgICAgICAgIAorICAgICAgICBtX2hhc0FscGhhID0gZGVjb2Rlci5m
cmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CisgICAgICAgIG1fc2l6ZSA9IGRlY29kZXIuZnJh
bWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgfQorfQorICAgIAor
SW1hZ2VGcmFtZURhdGE6On5JbWFnZUZyYW1lRGF0YSgpCit7CisgICAgY2xlYXJTdWJJbWFnZXMo
KTsKK30KKyAgICAKK0ltYWdlRnJhbWVEYXRhJiBJbWFnZUZyYW1lRGF0YTo6b3BlcmF0b3I9KGNv
bnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisg
ICAgICAgIHJldHVybiAqdGhpczsKKworICAgIG1fc3RhdHVzID0gb3RoZXIubV9zdGF0dXM7Cisg
ICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOwor
ICAgIAorICAgIG1fcGl4ZWxzID0gb3RoZXIucGl4ZWxzKCkgPyBCaXRtYXBQaXhlbHM6OmNyZWF0
ZSgqb3RoZXIucGl4ZWxzKCkpIDogbnVsbHB0cjsKKyAgICAKKyAgICBtX29yaWVudGF0aW9uID0g
b3RoZXIubV9vcmllbnRhdGlvbjsKKyAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5tX3N1
YnNhbXBsaW5nTGV2ZWw7CisgICAgbV9kdXJhdGlvbiA9IG90aGVyLm1fZHVyYXRpb247CisgICAg
bV9oYXNBbHBoYSA9IG90aGVyLm1faGFzQWxwaGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2
b2lkIEltYWdlRnJhbWVEYXRhOjpjbGVhclN1YkltYWdlcygpCit7CisgICAgaWYgKCFtX2ltYWdl
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5jbGVh
clN1YkltYWdlcygpOworfQorCit1bnNpZ25lZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXIoQ2FjaGlu
ZyBmcmFtZUNhY2hpbmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpF
bXB0eSB8fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEpOworICAgIAorICAgIHVu
c2lnbmVkIGZyYW1lQnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisgICAgCisgICAgY2xlYXJT
dWJJbWFnZXMoKTsKKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkVtcHR5
KQorICAgICAgICAqdGhpcyA9IEltYWdlRnJhbWVEYXRhKCk7CisgICAgZWxzZQorICAgICAgICBt
X2ltYWdlID0gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gZnJhbWVCeXRlczsKK30KKworYm9v
bCBJbWFnZUZyYW1lRGF0YTo6aW5pdFBpeGVscyhjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEpCit7CisgICAgQVNTRVJUKCFoYXNQaXhlbHMoKSAmJiBtX3NpemUuaXNF
bXB0eSgpKTsKKyAgICBtX3BpeGVscyA9ICFzaXplLmlzRW1wdHkoKSA/IEJpdG1hcFBpeGVsczo6
Y3JlYXRlKHNpemUsIHByZW11bHRpcGx5QWxwaGEpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaGFz
UGl4ZWxzKCk7Cit9CisgICAgCitib29sIEltYWdlRnJhbWVEYXRhOjpjb3B5UGl4ZWxzKGNvbnN0
IEltYWdlRnJhbWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgbV9waXhlbHMgPSBvdGhlci5oYXNQaXhlbHMoKSA/IEJp
dG1hcFBpeGVsczo6Y3JlYXRlKCpvdGhlci5tX3BpeGVscy5nZXQoKSkgOiBudWxscHRyOworICAg
IHJldHVybiBoYXNQaXhlbHMoKSA9PSBvdGhlci5oYXNQaXhlbHMoKTsKK30KKyAgICAKK0NvbG9y
IEltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIGlm
ICghaGFzSW1hZ2UoKSB8fCBtX3NpemUgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJu
IENvbG9yKCk7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuc2luZ2xl
UGl4ZWxTb2xpZENvbG9yKCk7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29s
aWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJbWFnZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuaXNBbG1vc3RT
b2xpZENvbG9yKCk7Cit9CisgICAgCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMDhkNDhiZmQzZTFhNjZjOTE4
MTA2YjEyMGM0NzMyNzUyOTdmYjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApAQCAtMCwwICsxLDExNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24u
aCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEltYWdlRGVjb2RlcjsK
KworLy8gU3Vic2FtcGxpbmdMZXZlbC4gMCBpcyBubyBzdWJzYW1wbGluZywgMSBpcyBoYWxmIGRp
bWVuc2lvbnMgb24gZWFjaCBheGlzIGV0Yy4KK3VzaW5nIFN1YnNhbXBsaW5nTGV2ZWwgPSB1aW50
OF90OworCitlbnVtIDogU3Vic2FtcGxpbmdMZXZlbCB7CisgICAgTWluU3Vic2FtcGxpbmdMZXZl
bCA9IDAsCisgICAgTWF4U3Vic2FtcGxpbmdMZXZlbCA9IDMsCisgICAgRGVmYXVsdFN1YnNhbXBs
aW5nTGV2ZWwgPSBNaW5TdWJzYW1wbGluZ0xldmVsCit9OworCitjbGFzcyBJbWFnZUZyYW1lRGF0
YSB7CisgICAgZnJpZW5kIGNsYXNzIEltYWdlRGVjb2RlcjsKK3B1YmxpYzoKKyAgICBlbnVtIGNs
YXNzIENhY2hpbmcgeyBFbXB0eSwgTWV0YWRhdGEsIEltYWdlLCBNZXRhZGF0YUFuZEltYWdlIH07
CisgICAgZW51bSBjbGFzcyBEZWNvZGluZ1N0YXR1cyB7IEVtcHR5LCBQYXJ0aWFsLCBDb21wbGV0
ZSB9OworICAgIGVudW0gY2xhc3MgRGlzcG9zYWxNZXRob2QgeyBOb3RTcGVjaWZpZWQsIEtlZXAs
IE92ZXJ3cml0ZUJnY29sb3IsIE92ZXJ3cml0ZVByZXZpb3VzIH07CisKKyAgICBJbWFnZUZyYW1l
RGF0YSgpOworICAgIEltYWdlRnJhbWVEYXRhKE5hdGl2ZUltYWdlUHRyJiYpOworICAgIEltYWdl
RnJhbWVEYXRhKEltYWdlRGVjb2RlciYsIHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCA9
IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBDYWNoaW5nID0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJ
bWFnZSk7CisgICAgSW1hZ2VGcmFtZURhdGEoY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKSB7
IG9wZXJhdG9yPShvdGhlcik7IH0KKworICAgIH5JbWFnZUZyYW1lRGF0YSgpOworCisgICAgSW1h
Z2VGcmFtZURhdGEmIG9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpOworICAg
IAorICAgIHVuc2lnbmVkIGNsZWFyKENhY2hpbmcpOworCisgICAgdm9pZCBzZXREaXNwb3NhbE1l
dGhvZChEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0g
ZGlzcG9zYWxNZXRob2Q7IH0KKyAgICBEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KKworICAgIHZvaWQgc2V0U3RhdHVzKERl
Y29kaW5nU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorICAgIERlY29kaW5n
U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkVtcHR5OyB9
CisgICAgYm9vbCBpc1BhcnRpYWwoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1cyA9PSBEZWNvZGlu
Z1N0YXR1czo6UGFydGlhbDsgfQorICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZTsgfQorCisgICAgYm9vbCBpbml0
UGl4ZWxzKGNvbnN0IEludFNpemUmLCBib29sIHByZW11bHRpcGx5QWxwaGEpOworICAgIGJvb2wg
Y29weVBpeGVscyhjb25zdCBJbWFnZUZyYW1lRGF0YSYpOworICAgIHZvaWQgY2xlYXJQaXhlbHMo
KSB7IG1fcGl4ZWxzID0gbnVsbHB0cjsgfQorCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gaGFzUGl4ZWxzKCkgPyBwaXhlbHMoKS0+c2l6ZSgpIDogbV9zaXplOyB9CisgICAgdW5z
aWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc0ltYWdlKCkgPyBtX3NpemUuYXJl
YSgpICogc2l6ZW9mKFJHQkEzMikgOiAwOyB9CisgICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1w
bGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzYW1wbGluZ0xldmVsOyB9CisKKyAgICB2
b2lkIHNldE9yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmll
bnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9OworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRp
b24oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9CisKKyAgICB2b2lkIHNldER1cmF0
aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQorICAgIGZs
b2F0IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQorCisgICAgdm9pZCBz
ZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxwaGEgPSBoYXNBbHBoYTsgfQorICAg
IGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9CisKKyAgICBOYXRp
dmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAgICBCaXRtYXBQ
aXhlbHMqIHBpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkg
OiBudWxscHRyOyB9CisKKyAgICBib29sIGhhc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZTsgfQorICAgIGJvb2wgaGFzTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAhbV9zaXplLmlzRW1w
dHkoKTsgfQorICAgIGJvb2wgaGFzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gcGl4ZWxzKCk7IH0K
KworICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OworICAgIGJvb2wgaXNB
bG1vc3RTb2xpZENvbG9yKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjbGVhclN1Yklt
YWdlcygpOworCisgICAgRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZCB7IERpc3Bvc2Fs
TWV0aG9kOjpOb3RTcGVjaWZpZWQgfTsKKyAgICBEZWNvZGluZ1N0YXR1cyBtX3N0YXR1cyB7IERl
Y29kaW5nU3RhdHVzOjpFbXB0eSB9OworICAgIEludFNpemUgbV9zaXplOworICAgIE5hdGl2ZUlt
YWdlUHRyIG1faW1hZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9waXhl
bHM7CisKKyAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBEZWZhdWx0SW1hZ2VP
cmllbnRhdGlvbiB9OworICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsg
MCB9OworICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07CisgICAgYm9vbCBtX2hhc0FscGhhIHsg
dHJ1ZSB9OworfTsKKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmNwcAppbmRleCBkZGQ4YTU1YmEwOTA2YzU4NjZhMTkyY2Y4ZTQxNGVh
NzA3YjcyOGFjLi44MmY2ZTJkNmU0NTQzM2RhMWE3ZDU2YjM3MGRmYTYxYTRjNDE5MTM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBA
IC0yMjQsNiArMjI0LDExIEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFt
ZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2CiAgICAgcmV0dXJuIGlu
aXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBz
dWJzYW1wbGluZ0xldmVsKSA6IG51bGxwdHI7CiB9CiAKK0ltYWdlRnJhbWVEYXRhIEltYWdlU291
cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZl
bCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5nKQorewor
ICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gSW1hZ2VGcmFtZURhdGEoKm1fZGVjb2RlciwgaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIGNhY2hpbmcpIDogSW1hZ2VGcmFtZURhdGEoKTsKK30KKyAg
ICAKIHZvaWQgSW1hZ2VTb3VyY2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiB7CiAgICAg
aWYgKG1fYWxsb3dTdWJzYW1wbGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDYwMzU3MzliN2U4YjA5NmRjOGRmZTljNTMwYTQyYzZm
MjkxYmRhMDAuLmE0MGM3Y2U5MzA3Y2RhZGYwNzlhYjcwMWE4Mjc5OWI2OTA1MjlkNDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtMjcs
NiArMjcsNyBAQAogI2lmbmRlZiBJbWFnZVNvdXJjZV9oCiAjZGVmaW5lIEltYWdlU291cmNlX2gK
IAorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlv
bi5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIK
QEAgLTYzLDkgKzY0LDYgQEAgY29uc3QgaW50IGNBbmltYXRpb25Mb29wT25jZSA9IDA7CiBjb25z
dCBpbnQgY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSA9IC0xOwogY29uc3QgaW50IGNBbmltYXRpb25O
b25lID0gLTI7CiAKLS8vIFN1YnNhbXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEg
aXMgaGFsZiBkaW1lbnNpb25zIG9uIGVhY2ggYXhpcyBldGMuCi10eXBlZGVmIHNob3J0IFN1YnNh
bXBsaW5nTGV2ZWw7Ci0KIGNsYXNzIEltYWdlU291cmNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbWFnZVNvdXJjZSk7CiAgICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwpAQCAtMTMy
LDE4ICsxMzAsMTkgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09mRnJhbWVB
dEluZGV4KHNpemVfdCkgY29uc3Q7CiAgICAgCiAgICAgLy8gU2l6ZSBvZiBvcHRpb25hbGx5IHN1
YnNhbXBsZWQgZnJhbWUuCi0gICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vi
c2FtcGxpbmdMZXZlbCA9IDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSA9IERvTm90UmVz
cGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRl
eChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCwgUmVz
cGVjdEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikg
Y29uc3Q7CiAgICAgCiAgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRl
Y29kZWQgZnJhbWUuIElmIHRoZSBmcmFtZSBpcyBub3QgeWV0CiAgICAgLy8gZGVjb2RlZCB0aGVu
IHJldHVybiAwLgotICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCwgU3Vic2Ft
cGxpbmdMZXZlbCA9IDApIGNvbnN0OworICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNp
emVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsKSBjb25zdDsK
ICAgICAKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpOwogICAgIEltYWdl
T3JpZW50YXRpb24gb3JpZW50YXRpb25BdEluZGV4KHNpemVfdCkgY29uc3Q7IC8vIEVYSUYgaW1h
Z2Ugb3JpZW50YXRpb24KICAgICAKICAgICAvLyBDYWxsZXJzIHNob3VsZCBub3QgY2FsbCB0aGlz
IGFmdGVyIGNhbGxpbmcgY2xlYXIoKSB3aXRoIGEgaGlnaGVyIGluZGV4OwogICAgIC8vIHNlZSBj
b21tZW50cyBvbiBjbGVhcigpIGFib3ZlLgotICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDApOworICAgIE5hdGl2ZUlt
YWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9
IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsKTsKKyAgICBJbWFnZUZyYW1lRGF0YSBjcmVhdGVGcmFt
ZURhdGFBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGlu
Z0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5n
OjpNZXRhZGF0YUFuZEltYWdlKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckZyYW1l
QnVmZmVyQ2FjaGUoc2l6ZV90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjdhZWE0ODlmM2ViMmE4Mjg3NzFjMjEw
M2U4ZDRkMGJlMTdiZTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2lu
Y2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q29sb3I7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgR3JhcGhpY3ND
b250ZXh0OworCitjbGFzcyBQbGF0Zm9ybUltYWdlIHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybUlt
YWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKKyAgICAgICAgOiBtX2ltYWdlKGltYWdl
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzTmlsKCkgY29uc3QgeyByZXR1cm4gIW1faW1h
Z2U7IH0KKyAgICB2b2lkIGNsZWFyU3ViSW1hZ2VzKCk7CisKKyAgICBJbnRTaXplIHNpemUoKSBj
b25zdDsKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxT
b2xpZENvbG9yKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsK
KyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJikgY29uc3Q7
CisKKyAgICBzdGF0aWMgZmxvYXQgc3Vic2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpOworCitw
cml2YXRlOgorI2lmIFVTRShDRykKKyAgICBDR0ltYWdlUmVmIGNnSW1hZ2VSZWYoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS5nZXQoKSA6IG51bGxwdHI7IH0KKyNlbmRpZgorICAg
IE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMu
bW0KaW5kZXggZjRjMTQ1N2JiYjI1NTc1NGYwMGEwNjI1ZWU4M2UwNGRhN2M2ZWZjZi4uZDUyMGY1
ZDU4NWFjNjBkYmFlZTI1NWUxYjgzYzI0ZGM2ODcyMTBhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQy5tbQpAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSgpCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1h
Z2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1h
Z2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIW1fcGF1c2VkSW1hZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgbV9kaXNwbGF5TW9k
ZSA9IFBhaW50SXRCbGFjazsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNh
aXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcElt
YWdlQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzcyMmJlYzUzYWI4
YTA4YThkYTg1MjhiOWUwZDdjNGQwY2Q0MTM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLQotI2lmIFVTRShDQUlSTykKLQot
I2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNp
bmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBOYXRp
dmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYg
aW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZVNpemUoaW1hZ2UuZ2V0KCkpOwotfQot
Ci1ib29sIGhhc0FscGhhKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsK
LSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChpbWFnZS5nZXQoKSkgIT0gQ0FJ
Uk9fQ09OVEVOVF9DT0xPUjsKLX0KLQotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwot
ICAgIAotICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSkgIT0gSW50U2l6ZSgxLCAxKSkK
LSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlw
ZShpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1
cm4gQ29sb3IoKTsKLQotICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0cjxS
R0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAg
cmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Ci19Ci0KLX0KLQotdm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsCi0g
ICAgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2Ny
aXB0aW9uKQotewotICAgIGlmICghZHN0LndpZHRoKCkgfHwgIWRzdC5oZWlnaHQoKSB8fCAhc3Jj
LndpZHRoKCkgfHwgIXNyYy5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhcnRB
bmltYXRpb24oKTsKLQotICAgIGF1dG8gc3VyZmFjZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3Vy
cmVudEZyYW1lKTsKLSAgICBpZiAoIXN1cmZhY2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdv
bid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0KLSAgICBDb2xvciBjb2xv
ciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdCwgY29sb3IsIG9wKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRleHQuc2F2ZSgpOwotCi0gICAgLy8gU2V0
IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCi0gICAgaWYgKG9wID09IENvbXBvc2l0ZVNvdXJj
ZU92ZXIgJiYgYmxlbmRNb2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAhZnJhbWVIYXNBbHBoYUF0
SW5kZXgobV9jdXJyZW50RnJhbWUpKQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJf
RE9XTl9TQU1QTElORykKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1cmZhY2VTaXpl
KHN1cmZhY2UuZ2V0KCkpOwotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1c3RT
b3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyYywgc2NhbGVkU2l6ZSk7Ci0jZWxzZQotICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qoc3JjKTsKLSNlbmRpZgotCi0gICAgSW1hZ2VPcmllbnRh
dGlvbiBmcmFtZU9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7Ci0g
ICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdElt
YWdlT3JpZW50YXRpb24pCi0gICAgICAgIGZyYW1lT3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0
aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBGbG9hdFJlY3QgZHN0UmVjdCA9IGRz
dDsKLQotICAgIGlmIChmcmFtZU9yaWVudGF0aW9uICE9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9u
KSB7Ci0gICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJl
IGF0ICgwLCAwKS4KLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC54KCksIGRzdFJl
Y3QueSgpKTsKLSAgICAgICAgZHN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwotICAg
ICAgICBjb250ZXh0LmNvbmNhdENUTShmcmFtZU9yaWVudGF0aW9uLnRyYW5zZm9ybUZyb21EZWZh
dWx0KGRzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChmcmFtZU9yaWVudGF0aW9uLnVzZXNX
aWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0YW5n
bGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0
aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5l
ZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUu
Ci0gICAgICAgICAgICBkc3RSZWN0ID0gRmxvYXRSZWN0KGRzdFJlY3QueCgpLCBkc3RSZWN0Lnko
KSwgZHN0UmVjdC5oZWlnaHQoKSwgZHN0UmVjdC53aWR0aCgpKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KHN1
cmZhY2UuZ2V0KCksIGRzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7Ci0KLSAgICBj
b250ZXh0LnJlc3RvcmUoKTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGlt
YWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFy
KGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAg
bV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIG1f
aW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJ
Uk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGFkYWVjMjcwZTMxYjA1
NGFmYzVmNjZkNDgyODhhZWJmMDYxZTNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApAQCAtMCww
ICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYg
VVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7Cit9CisKK0lu
dFNpemUgUGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkg
PyBJbnRTaXplKCkgOiBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2UuZ2V0KCkpOworfQorCitib29s
IFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSB8
fCBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1faW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRF
TlRfQ09MT1I7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xv
cigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgpICE9IEludFNpemUoMSwgMSkp
CisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5
cGUobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQorICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKKworICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0
cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1faW1hZ2UuZ2V0KCkpKTsK
KyAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKK30KKworYm9v
bCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmKQoreworICAg
IHJldHVybiAxOworfQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1v
ZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIGNv
bnRleHQuc2F2ZSgpOworICAgIAorICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9u
LgorICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIG1vZGUgPT0gQmxlbmRNb2Rl
Tm9ybWFsICYmICFoYXNBbHBoYSgpKQorICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG9wLCBtb2RlKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKElNQUdFX0RFQ09E
RVJfRE9XTl9TQU1QTElORykKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1cmZhY2VT
aXplKG1faW1hZ2UuZ2V0KCkpOworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1
c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyY1JlY3QsIHNjYWxlZFNpemUpOworI2Vsc2UK
KyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyY1JlY3QpOworI2VuZGlmCisgICAgICAg
IAorICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisgICAgICAgIAor
ICAgIGlmIChvcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgeworICAgICAg
ICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCku
CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpKTsK
KyAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOworICAg
ICAgICBjb250ZXh0LmNvbmNhdENUTShvcmllbnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChh
ZGp1c3RlZERlc3RSZWN0LnNpemUoKSkpOworICAgICAgICBpZiAob3JpZW50YXRpb24udXNlc1dp
ZHRoQXNIZWlnaHQoKSkgeworICAgICAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3Rhbmds
ZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRo
ZSBvcmllbnRhdGlvbiBvZgorICAgICAgICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVl
ZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4K
KyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShhZGp1c3RlZERlc3RSZWN0LnNp
emUoKS50cmFuc3Bvc2VkU2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KG1faW1hZ2UuZ2V0KCksIGFk
anVzdGVkRGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7CisKKyAgICBjb250ZXh0
LnJlc3RvcmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9C
aXRtYXBJbWFnZUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNjODFhMTcw
YmU3OWFlNmJlNmNhY2RjOTlmNGMzOThjYWFmNDI2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9CaXRtYXBJbWFnZUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotCi0jaWYgVVNFKENH
KQotCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJz
aW9uLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJTdWJp
bWFnZUNhY2hlV2l0aFRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0jaWYg
VVNFKEFQUEtJVCkKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vy
dmljZXMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVk
ZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50
U2l6ZSBzaXplKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNT
RVJUKGltYWdlKTsKLSAgICByZXR1cm4gSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0
KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEo
Y29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JikKLXsKLSAgICAvLyBGSVhNRTogQW5zd2VyIGNv
cnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFu
bm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLUNvbG9yIHNpbmdsZVBpeGVsU29saWRD
b2xvcihjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQotewotICAgIEFTU0VSVChp
bWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdlOjpzaXplKGltYWdlKSAhPSBJbnRTaXpl
KDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBjaGFy
IHBpeGVsWzRdOyAvLyBSR0JBCi0gICAgYXV0byBiaXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIHNSR0JDb2xv
clNwYWNlUmVmKCksCi0gICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtD
R0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0KLSAgICBpZiAoIWJpdG1hcENvbnRleHQpCi0gICAg
ICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRt
YXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICBDR0NvbnRleHREcmF3SW1h
Z2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwgaW1hZ2UuZ2V0
KCkpOwotICAgIAotICAgIGlmICghcGl4ZWxbM10pCi0gICAgICAgIHJldHVybiBDb2xvcigwLCAw
LCAwLCAwKTsKLQotICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBw
aXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhl
bFszXSk7Ci19Ci0KLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0
YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBm
YWxzZTsKLQotICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7Ci0KLSAgICBpZiAobV9pbWFnZSkg
ewotI2lmIENBQ0hFX1NVQklNQUdFUwotICAgICAgICBzdWJpbWFnZUNhY2hlKCkuY2xlYXJJbWFn
ZShtX2ltYWdlLmdldCgpKTsKLSNlbmRpZgotICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQ0dJbWFn
ZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCi17Ci0gICAgcmV0dXJuIGZyYW1lSW1h
Z2VBdEluZGV4KDApLmdldCgpOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRGaXJz
dENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBzaXplX3QgY291
bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdl
dCgpOwotICAgICAgICBpZiAoY2dJbWFnZSAmJiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0lt
YWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKSkgPT0gc2l6ZSkKLSAgICAgICAgICAgIHJl
dHVybiBjZ0ltYWdlOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IENH
SW1hZ2VSZWYgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQotICAgIHJldHVybiBnZXRD
R0ltYWdlUmVmKCk7Ci19Ci0KLVJldGFpblB0cjxDRkFycmF5UmVmPiBCaXRtYXBJbWFnZTo6Z2V0
Q0dJbWFnZUFycmF5KCkKLXsKLSAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAg
aWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgQ0ZNdXRhYmxl
QXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShOVUxMLCBjb3VudCwgJmtDRlR5
cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIGlmIChDR0ltYWdlUmVmIGN1cnJGcmFtZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KGkpLmdldCgpKQotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LCBjdXJyRnJh
bWUpOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihhcnJheSk7Ci19Ci0KLXZvaWQgQml0bWFw
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVz
Y3JpcHRpb24pCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXJ0QW5pbWF0aW9uKERvTm90
Q2F0Y2hVcCk7Ci0jZWxzZQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0jZW5kaWYKLQotICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBp
bWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCi0gICAgaWYgKHdrQ0dDb250ZXh0
SXNQREZDb250ZXh0KGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKQotICAgICAgICBpbWFnZSA9IGNv
cHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlB
ZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShjdHh0LnBsYXRmb3JtQ29u
dGV4dCgpKSk7Ci0gICAgICAgIGZsb2F0IHN1YnNhbXBsaW5nU2NhbGUgPSBzdGQ6Om1pbjxmbG9h
dD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNy
Y1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBz
cmNSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAgICAgaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleCht
X2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2FsZSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFn
ZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBDb2xvciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xv
cigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENv
bG9yKGN0eHQsIGRlc3RSZWN0LCBjb2xvciwgY29tcG9zaXRlT3ApOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gU3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2Ug
dGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgotICAgIEludFNpemUgaW1hZ2VTaXplKENHSW1h
Z2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKTsK
LSAgICAKLSAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJz
YW1wbGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFn
ZS4KLSAgICBGbG9hdFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgaWYgKGltYWdl
U2l6ZSAhPSBtX3NpemUpIHsKLSAgICAgICAgRmxvYXRSZWN0IG9yaWdpbmFsSW1hZ2VCb3VuZHMo
RmxvYXRQb2ludCgpLCBtX3NpemUpOwotICAgICAgICBGbG9hdFJlY3Qgc3Vic2FtcGxlZEltYWdl
Qm91bmRzKEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKTsKLSAgICAgICAgc2NhbGVkU3JjUmVjdCA9
IG1hcFJlY3Qoc3JjUmVjdCwgb3JpZ2luYWxJbWFnZUJvdW5kcywgc3Vic2FtcGxlZEltYWdlQm91
bmRzKTsKLSAgICB9Ci0gICAgCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAg
ICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbikKLSAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJ
bmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBjdHh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc2NhbGVkU3JjUmVjdCwgY29tcG9zaXRlT3AsIGJsZW5kTW9k
ZSwgb3JpZW50YXRpb24pOwotCi0gICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1h
Z2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkK
LXsKLSAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4
XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwKTsKLQotICAgIGlmICghbV9m
cmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVz
W2luZGV4XS5tX2ltYWdlOwotCi0gICAgcmV0dXJuIG1fc291cmNlLmNyZWF0ZUZyYW1lSW1hZ2VB
dEluZGV4KGluZGV4KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKaW5kZXggYjQyOGQ1
MGQ5NGJmOTI0MjgwMzI4N2QyZWVjMTZiZDY5YzUyOGQ5Mi4uM2RhYTEzOWFiN2VhNWI0MjE1Nzc4
ODM1ZDM1M2Q4YWRiNWYwYzc1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC03Miw3ICs3Miw3IEBAIENHUGF0dGVyblJlZiBQ
YXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2Vy
U3BhY2VUcmFuCiAgICAgLy8gSWYgd2UncmUgcmVwZWF0aW5nIGluIGJvdGggZGlyZWN0aW9ucywg
d2UgY2FuIHVzZSBpbWFnZS1iYWNrZWQgcGF0dGVybnMKICAgICAvLyBpbnN0ZWFkIG9mIGN1c3Rv
bSBwYXR0ZXJucywgYW5kIGF2b2lkIHRpbGluZy1lZGdlIHBpeGVsIGNyYWNrcy4KICAgICBpZiAo
bV9yZXBlYXRYICYmIG1fcmVwZWF0WSkKLSAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRl
V2l0aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCksIHBhdHRl
cm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZyk7CisgICAgICAgIHJl
dHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSh0aWxlSW1hZ2UoKS0+
bmF0aXZlSW1hZ2UoKS5nZXQoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGlsaW5nQ29u
c3RhbnRTcGFjaW5nKTsKIAogICAgIC8vIElmIEZMVF9NQVggc2hvdWxkIGFsc28gYmUgdXNlZCBm
b3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMgcmVuZGVyZWQuIFVzaW5nIGZyYWN0aW9ucyBv
ZiBGTFRfTUFYIGFsc28KICAgICAvLyByZXN1bHQgaW4gbm90aGluZyBiZWluZyByZW5kZXJlZC4K
QEAgLTgzLDcgKzgzLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICBDR0Zsb2F0IHlT
dGVwID0gbV9yZXBlYXRZID8gdGlsZVJlY3QuaGVpZ2h0KCkgOiAoMSA8PCAyMik7CiAKICAgICAv
LyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhlIENHSW1hZ2VSZWYgd2hlbiBpdCdzIGRvbmUg
cmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKLSAgICBDR0ltYWdlUmVmIHBsYXRm
b3JtSW1hZ2UgPSBDR0ltYWdlUmV0YWluKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkpOwor
ICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgp
LmxlYWtSZWYoKTsKIAogICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0ZXJuQ2FsbGJh
Y2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sgfTsKICAg
ICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRmb3JtSW1hZ2UsIHRpbGVSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCB4U3RlcCwgeVN0ZXAsIGtDR1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcs
IFRSVUUsICZwYXR0ZXJuQ2FsbGJhY2tzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmYjJk
ZTBlYTEyZGEyMTRmMTA0NmMzOTYyZThlYWI1M2M2NDQxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCkBA
IC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKwor
I2lmIFVTRShDRykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29yZUdyYXBoaWNz
U1BJLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkludFNpemUu
aCIKKyNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCisKKyNpZiBQTEFURk9STShX
SU4pCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3ZvaWQgUGxhdGZvcm1J
bWFnZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworI2lmIENBQ0hFX1NVQklNQUdFUworICAgIGlmICgh
aXNOaWwoKSkKKyAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UoY2dJbWFnZVJlZigp
KTsKKyNlbmRpZgorfQorCitJbnRTaXplIFBsYXRmb3JtSW1hZ2U6OnNpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgo
Y2dJbWFnZVJlZigpKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlUmVmKCkpKTsKK30KKworYm9v
bCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEFuc3dl
ciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEg
Y2hhbm5uZWw/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNp
bmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgp
ICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAorICAgIHVu
c2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKKyAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVs
KSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKKyAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKKyAgICAKKyAgICBpZiAoIWJpdG1h
cENvbnRleHQpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAorICAgIENHQ29udGV4dFNl
dEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBD
R0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAx
LCAxKSwgY2dJbWFnZVJlZigpKTsKKyAgICAKKyAgICBpZiAoIXBpeGVsWzNdKQorICAgICAgICBy
ZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgCisgICAgcmV0dXJuIENvbG9yKHBpeGVsWzBd
ICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICog
MjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKK30KKyAgICAKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6
aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBDR0ltYWdlUmVmIGltYWdlID0gY2dJ
bWFnZVJlZigpOworICAgIEFTU0VSVChDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkg
PT0gOCk7CisgICAgCisgICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5mbyA9IENHSW1hZ2VHZXRCaXRt
YXBJbmZvKGltYWdlKTsKKyAgICBpZiAoIShpbWFnZUluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXIz
MkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhhSW5mb01hc2spICE9IGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKKyAgICAgICAgLy8gRklYTUU6IENvbnNpZGVy
IGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1hdHMuCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IHNpemVfdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7CisgICAgc2l6ZV90IGhlaWdo
dCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENH
SW1hZ2VHZXRCeXRlc1BlclJvdyhpbWFnZSk7CisgICAgCisgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERh
dGFQcm92aWRlcihpbWFnZSkpKTsKKyAgICBjb25zdCBVSW50OCogZGF0YSA9IENGRGF0YUdldEJ5
dGVQdHIocHJvdmlkZXIuZ2V0KCkpOworICAgIAorICAgIC8vIE92ZXJsYXkgYSBncmlkIG9mIHNh
bXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24gb2YgdGhlIGltYWdlLgor
ICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2Ug
aW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKKyAgICAvLyBhbmQgaXRzIHN1cnJv
dW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCisgICAgY29uc3QgdW5zaWduZWQg
c2FtcGxlUm93cyA9IDc7CisgICAgY29uc3QgdW5zaWduZWQgc2FtcGxlQ29scyA9IDc7CisgICAg
Ly8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1wbGVzLCBhbmQgYWNjb21t
b2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCisgICAgaWYgKHdpZHRoIDwgc2FtcGxlQ29s
cyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGxhc3Qgcm93L2NvbHVtbiBsYW5kIG9uIHRoZSBpbWFnZSBw
ZXJpbWV0ZXIuCisgICAgY29uc3QgZmxvYXQgc3RyaWRlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9h
dD4od2lkdGggLSAxKSAvIChzYW1wbGVDb2xzIC0gMSk7CisgICAgY29uc3QgZmxvYXQgc3RyaWRl
SGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCAtIDEpIC8gKHNhbXBsZVJvd3MgLSAx
KTsKKyAgICBmbG9hdCBzYW1wbGVzW3NhbXBsZVJvd3NdW3NhbXBsZUNvbHNdOworICAgIAorICAg
IC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KKyAgICBmbG9hdCB5
ID0gMDsKKyAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7CisgICAgICAgIGZsb2F0IHggPSAwOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7CisgICAgICAgICAg
ICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAqIDQ7
CisgICAgICAgICAgICAvLyBSIEcgQiBBCisgICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0gKDAu
MjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoocDAr
MykgLyAyNTU7CisgICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOworICAgICAgICB9CisgICAg
ICAgIHkgKz0gc3RyaWRlSGVpZ2h0OworICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19jYXN0
PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKKyAgICB9CisgICAgCisgICAgLy8gRGV0ZXJt
aW5lIHRoZSBpbWFnZSBzY29yZS4KKyAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikgeworICAgICAgICAgICAg
ZmxvYXQgZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0gKyBzYW1w
bGVzW2ldW2ogLSAxXSArIHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1bal07Cisg
ICAgICAgICAgICBhY2N1bVNjb3JlICs9IGRpZmYgKiBkaWZmOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIC8vIFRoZSBzY29yZSBmb3IgYSBnaXZlbiBzYW1wbGUgY2FuIGJlIHdpdGhpbiB0
aGUgcmFuZ2Ugb2YgMCBhbmQgMjU1XjIuCisgICAgcmV0dXJuIGFjY3VtU2NvcmUgPCAyNTAwICog
KHNhbXBsZVJvd3MgLSAyKSAqIChzYW1wbGVDb2xzIC0gMik7Cit9CisKK2Zsb2F0IFBsYXRmb3Jt
SW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpCit7CisgICAgLy8g
TmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRz
LgorICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgCisgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVz
dGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29u
dGV4dEdldENUTShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgcmV0dXJuIHN0ZDo6
bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLndp
ZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLmhl
aWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBQbGF0Zm9ybUltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVu
dGF0aW9uKSBjb25zdAoreworICAgIC8vIFN1YnNhbXBsaW5nIG1heSBoYXZlIGdpdmVuIHVzIGFu
IGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KKyAgICBJbnRTaXplIHN1YnNhbXBs
ZWRJbWFnZVNpemUgPSBzaXplKCk7CisgICAgCisgICAgLy8gc3JjUmVjdCBpcyBpbiB0aGUgY29v
cmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28gd2UgaGF2ZSB0byBtYXAgaXQg
dG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9
IHNyY1JlY3Q7CisgICAgaWYgKHN1YnNhbXBsZWRJbWFnZVNpemUgIT0gc3JjU2l6ZSkKKyAgICAg
ICAgYWRqdXN0ZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBGbG9hdFJlY3QoeyB9LCBzcmNT
aXplKSwgRmxvYXRSZWN0KHsgfSwgc3Vic2FtcGxlZEltYWdlU2l6ZSkpOworICAgIAorICAgIGNv
bnRleHQuZHJhd05hdGl2ZUltYWdlKG1faW1hZ2UsIHN1YnNhbXBsZWRJbWFnZVNpemUsIGRlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBtb2RlLCBvcmllbnRhdGlvbik7Cit9CisgICAgCit9
CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYS5tbQppbmRleCA4OTcyMGQxNzM2NWRhN2U4YmE4NDY5ZDUyOTQ1NDhkNTE4NDdhN2ZlLi40
NDc2ZmM1Zjg3YzM0OTg4ZjZkOWFkNTVlZWJkOGQxYjliYjAyMmU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KQEAgLTEyOSw3ICsxMjksNyBAQCBUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkNvY29hOjp+VGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYSgpCiB2
b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6OnVwZGF0ZSgpCiB7CiAgICAgaWYgKGF1
dG8gcmVwcmVzZW50YXRpb24gPSBtX2NsaWVudC5jcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkltYWdlKCkpCi0gICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzOihpZClyZXByZXNl
bnRhdGlvbi0+Z2V0Q0dJbWFnZVJlZigpXTsKKyAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29u
dGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5uYXRpdmVJbWFnZSgpLmdldCgpXTsKIH0KIAogdm9p
ZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjpzZXRDb250ZW50U2NhbGUoZmxvYXQgc2Nh
bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1h
Z2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMu
bW0KaW5kZXggMDFlYjZkZDMwMDQzYTIyNTI5MTc2ZmQ5MTIxMTdkYzU3NzZjMTdiYS4uZGMxYzdj
NzA5NWQ5NDRjNGM2MmYxZmUwOTM1NzAyYTEzYzdjN2E0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQpAQCAtODUsMzEgKzg1LDIyIEBA
IENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkKICAgICBpZiAo
bV90aWZmUmVwKQogICAgICAgICByZXR1cm4gbV90aWZmUmVwLmdldCgpOwogCi0gICAgdW5zaWdu
ZWQgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gdGhp
cy0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CiAKLSAgICAvLyBJZiBudW1GcmFtZXMgaXMgemVybywg
d2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNuJ3QgaGF2ZSB2YWxpZCBkYXRhCisg
ICAgLy8gSWYgZnJhbWVzSW1hZ2VzLnNpemUoKSBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWlu
IHRoaXMgaW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKICAgICAvLyBFdmVuIHRob3VnaCB0
aGUgY2FsbCB0byBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YSB3aWxsIGZhaWwgYW5k
IHdlJ2xsIGhhbmRsZSBpdCBncmFjZWZ1bGx5LAogICAgIC8vIGluIGNlcnRhaW4gY2lyY3Vtc3Rh
bmNlcyB0aGF0IGNhbGwgd2lsbCBzcGFtIHRoZSBjb25zb2xlIHdpdGggYW4gZXJyb3IgbWVzc2Fn
ZQotICAgIGlmICghbnVtRnJhbWVzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFZlY3RvcjxD
R0ltYWdlUmVmPiBpbWFnZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZyYW1l
czsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRl
eChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UpCi0gICAgICAgICAgICBpbWFnZXMuYXBw
ZW5kKGNnSW1hZ2UpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bVZhbGlkRnJhbWVzID0gaW1h
Z2VzLnNpemUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGRhdGEgPSBhZG9w
dENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotICAgIFJldGFpblB0cjxDR0ltYWdlRGVz
dGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVh
dGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbnVtVmFsaWRGcmFtZXMsIDApKTsK
KyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbiA9IGFkb3B0
Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5nZXQoKSwga1VUVHlwZVRJ
RkYsIG5hdGl2ZUltYWdlcy5zaXplKCksIDApKTsKIAogICAgIGlmICghZGVzdGluYXRpb24pCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1WYWxpZEZyYW1lczsgKytpKQotICAgICAgICBDR0ltYWdlRGVz
dGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2VzW2ldLCAwKTsKKyAgICBm
b3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAgICAgIENHSW1hZ2VEZXN0
aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBuYXRpdmVJbWFnZS5nZXQoKSwgMCk7
CiAKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuY3BwCmluZGV4IDIxNzUzYmQwNzhhMWM1NWMzMjcxOWMxNDg0NmYwZjZiOTk3NWY4
ZmQuLjFmZGJhYjNhYzg2YzM5NzYwMWEzNzUyN2I3ZTRjZDEzNjkyMzdkMjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcApAQCAtMTI4LDExICsxMjgsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBJ
bWFnZURlY29kZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYQogfQogCiBJ
bWFnZUZyYW1lOjpJbWFnZUZyYW1lKCkKLSAgICA6IG1faGFzQWxwaGEoZmFsc2UpCi0gICAgLCBt
X3N0YXR1cyhGcmFtZUVtcHR5KQotICAgICwgbV9kdXJhdGlvbigwKQotICAgICwgbV9kaXNwb3Nh
bE1ldGhvZChEaXNwb3NlTm90U3BlY2lmaWVkKQotICAgICwgbV9wcmVtdWx0aXBseUFscGhhKHRy
dWUpCiB7CiB9IAogCkBAIC0xNDEsOTMgKzEzNiwzMSBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1l
OjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgaWYgKHRoaXMgPT0gJm90
aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7
Ci0gICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7Cisg
ICAgY29weVBpeGVscyhvdGhlcik7CisgICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7
CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5k
dXJhdGlvbigpKTsKICAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgp
KTsKLSAgICBzZXRQcmVtdWx0aXBseUFscGhhKG90aGVyLnByZW11bHRpcGx5QWxwaGEoKSk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi12b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkK
LXsKLSAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgIG1fYnl0ZXMgPSAwOwotICAgIG1f
c3RhdHVzID0gRnJhbWVFbXB0eTsKLSAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVt
YmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCi0gICAgLy8gdG8g
ZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJhbWVC
dWZmZXIoKSBhbmQKLSAgICAvLyBmcmFtZUNvbXBsZXRlKCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVh
ZCBvdGhlciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZQotICAgIC8vIGxhdGVyLgotfQotCi12
b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKLXsKLSAgICBtZW1zZXQobV9ieXRl
cywgMCwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRh
KSk7Ci0gICAgbV9oYXNBbHBoYSA9IHRydWU7Ci19Ci0KLXZvaWQgSW1hZ2VGcmFtZTo6emVyb0Zp
bGxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlQoSW50UmVjdChJ
bnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpKTsKLQotICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSBy
ZWN0LndpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICBQaXhlbERhdGEqIHN0YXJ0ID0g
bV9ieXRlcyArIChyZWN0LnkoKSAqIHdpZHRoKCkpICsgcmVjdC54KCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKLSAgICAgICAgbWVtc2V0KHN0YXJ0LCAw
LCByZWN0V2lkdGhJbkJ5dGVzKTsKLSAgICAgICAgc3RhcnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0K
LSAgICBzZXRIYXNBbHBoYSh0cnVlKTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFw
RGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKK2Jvb2wgSW1hZ2VGcmFtZTo6Y29weVBpeGVs
cyhjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKIHsKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tp
bmdTdG9yZTsKLSAgICBtX2J5dGVzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwotICAgIG1fc2l6
ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0
aCwgaW50IG5ld0hlaWdodCkKLXsKLSAgICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgpKTsK
LSAgICBzaXplX3QgYmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVpZ2h0OwotICAg
IGlmICghbV9iYWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdTdG9yZVNpemUp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNraW5nU3RvcmUucmVzaXplKGJhY2tp
bmdTdG9yZVNpemUpOwotICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAg
bV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLQotICAgIHplcm9GaWxsUGl4
ZWxEYXRhKCk7CisgICAgaWYgKG90aGVyLm1fcGl4ZWxzKQorICAgICAgICBtX3BpeGVscyA9IEJp
dG1hcFBpeGVsczo6Y3JlYXRlKCpvdGhlci5tX3BpeGVscy5nZXQoKSk7CisgICAgZWxzZQorICAg
ICAgICBtX3BpeGVscyA9IG51bGxwdHI7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW1h
Z2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdAotewotICAgIHJldHVybiBtX2hhc0FscGhhOwotfQot
Ci12b2lkIEltYWdlRnJhbWU6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEpCi17Ci0gICAgbV9oYXNB
bHBoYSA9IGFscGhhOwotfQotCi12b2lkIEltYWdlRnJhbWU6OnNldENvbG9yUHJvZmlsZShjb25z
dCBDb2xvclByb2ZpbGUmIGNvbG9yUHJvZmlsZSkKLXsKLSAgICBtX2NvbG9yUHJvZmlsZSA9IGNv
bG9yUHJvZmlsZTsKLX0KLQotdm9pZCBJbWFnZUZyYW1lOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMg
c3RhdHVzKQorYm9vbCBJbWFnZUZyYW1lOjppbml0UGl4ZWxzKGNvbnN0IEludFNpemUmIHNpemUs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKLSAgICBtX3N0YXR1cyA9IHN0YXR1czsKKyAgICBB
U1NFUlQoIW1fcGl4ZWxzKTsKKyAgICBtX3BpeGVscyA9IEJpdG1hcFBpeGVsczo6Y3JlYXRlKHNp
emUsIHByZW11bHRpcGx5QWxwaGEpOworICAgIHJldHVybiBtX3BpeGVscyAhPSBudWxscHRyOwog
fQogCiBuYW1lc3BhY2UgewpAQCAtMjc0LDE0ICsyMDcsMTQgQEAgdGVtcGxhdGUgPE1hdGNoVHlw
ZSB0eXBlPiBpbnQgZ2V0U2NhbGVkVmFsdWUoY29uc3QgVmVjdG9yPGludD4mIHNjYWxlZFZhbHVl
cywgaW4KIGJvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBp
bmRleCkKIHsKICAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBmcmFtZUJ1ZmZlckF0SW5kZXgoaW5k
ZXgpOwotICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1l
OjpGcmFtZUNvbXBsZXRlOworICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5pc0NvbXBsZXRl
KCk7CiB9CiAKIGJvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPD0gaW5k
ZXgpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5k
ZXhdLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCisgICAgaWYgKG1fZnJh
bWVCdWZmZXJDYWNoZVtpbmRleF0uaXNDb21wbGV0ZSgpKQogICAgICAgICByZXR1cm4gbV9mcmFt
ZUJ1ZmZlckNhY2hlW2luZGV4XS5oYXNBbHBoYSgpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MjkxLDEzICsyMjQsMTMgQEAgdW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkg
PD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGRpbWVu
c2lvbiBvZiB0aGUgcmVxdWVzdGVkIGZyYW1lLgotICAgIHJldHVybiBtX3NpemUuYXJlYSgpICog
c2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkg
KiBzaXplb2YoUkdCQTMyKTsKIH0KIAogZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9u
QXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gZnJhbWVC
dWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygp
ID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8vIE1hbnkgYW5ub3lpbmcg
YWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2ts
eSBhcyBwb3NzaWJsZS4KQEAgLTMxNywxMiArMjUwLDE4IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdl
RGVjb2Rlcjo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGlu
Z0xlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0g
ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0
YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAgaWYgKCFidWZmZXIgfHwgYnVm
ZmVyLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gUmV0dXJu
IHRoZSBidWZmZXIgY29udGVudHMgYXMgYSBuYXRpdmUgaW1hZ2UuIEZvciBzb21lIHBvcnRzLCB0
aGUgZGF0YQogICAgIC8vIGlzIGFscmVhZHkgaW4gYSBuYXRpdmUgY29udGFpbmVyLCBhbmQgdGhp
cyBqdXN0IGluY3JlbWVudHMgaXRzIHJlZmNvdW50LgotICAgIHJldHVybiBidWZmZXItPmFzTmV3
TmF0aXZlSW1hZ2UoKTsKKyAgICBpZiAoYnVmZmVyLT5oYXNJbWFnZSgpKQorICAgICAgICByZXR1
cm4gYnVmZmVyLT5pbWFnZSgpOworCisgICAgaWYgKGJ1ZmZlci0+aGFzUGl4ZWxzKCkpCisgICAg
ICAgIHJldHVybiBidWZmZXItPnBpeGVscygpLT5pbWFnZSgpOworCisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIHZvaWQgSW1hZ2VEZWNvZGVyOjpwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3Nhcnko
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaAppbmRleCAyZjhlZWUxNzgxZDE2MmQ4NmM0OWZlMWRhYzcyYTJlN2U0MGE1ZDZk
Li5lNDIyMTE0ODUwODljOWQ3ZjQzMjAzYTAxZWRlZThlNGVhNDc1NzBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApA
QCAtMjgsOCArMjgsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU2NyZWVuLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KQEAgLTQwLDI0ICs0MiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKLQogICAgIC8vIEltYWdlRnJhbWUg
cmVwcmVzZW50cyB0aGUgZGVjb2RlZCBpbWFnZSBkYXRhLiAgVGhpcyBidWZmZXIgaXMgd2hhdCBh
bGwKICAgICAvLyBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLgogICAgIGNsYXNz
IEltYWdlRnJhbWUgewogICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBGcmFtZVN0YXR1cyB7IEZy
YW1lRW1wdHksIEZyYW1lUGFydGlhbCwgRnJhbWVDb21wbGV0ZSB9OwotICAgICAgICBlbnVtIEZy
YW1lRGlzcG9zYWxNZXRob2QgewotICAgICAgICAgICAgLy8gSWYgeW91IGNoYW5nZSB0aGUgbnVt
ZXJpYyB2YWx1ZXMgb2YgdGhlc2UsIG1ha2Ugc3VyZSB5b3UgYXVkaXQKLSAgICAgICAgICAgIC8v
IGFsbCB1c2VycywgYXMgc29tZSB1c2VycyBtYXkgY2FzdCByYXcgdmFsdWVzIHRvL2Zyb20gdGhl
c2UKLSAgICAgICAgICAgIC8vIGNvbnN0YW50cy4KLSAgICAgICAgICAgIERpc3Bvc2VOb3RTcGVj
aWZpZWQsICAgICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJhbWVidWZmZXIKLSAgICAgICAgICAgIERp
c3Bvc2VLZWVwLCAgICAgICAgICAgICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJhbWVidWZmZXIKLSAg
ICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yLCAgLy8gQ2xlYXIgZnJhbWUgdG8gdHJh
bnNwYXJlbnQKLSAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyAgLy8gQ2xlYXIg
ZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY29udGVudHMKLSAgICAgICAgfTsKLSAgICAgICAgdHlwZWRlZiB1bnNp
Z25lZCBQaXhlbERhdGE7CisgICAgICAgIGVudW0gY2xhc3MgRGVjb2RpbmdTdGF0dXMgeyBFbXB0
eSwgUGFydGlhbCwgQ29tcGxldGUgfTsKKyAgICAgICAgZW51bSBjbGFzcyBEaXNwb3NhbE1ldGhv
ZCB7IE5vdFNwZWNpZmllZCwgS2VlcCwgT3ZlcndyaXRlQmdjb2xvciwgT3ZlcndyaXRlUHJldmlv
dXMgfTsKIAogICAgICAgICBJbWFnZUZyYW1lKCk7CiAKQEAgLTY3LDE2NCArNTcsNDEgQEAgdXNp
bmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAvLyBjcmVhdGUgYSBuZXcg
Y29weSBvZiB0aGUgaW1hZ2UgZGF0YSwgb25seSBpbmNyZWFzZSB0aGUgcmVmIGNvdW50LgogICAg
ICAgICBJbWFnZUZyYW1lJiBvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpOwogCi0g
ICAgICAgIC8vIFRoZXNlIGRvIG5vdCB0b3VjaCBvdGhlciBtZXRhZGF0YSwgb25seSB0aGUgcmF3
IHBpeGVsIGRhdGEuCi0gICAgICAgIHZvaWQgY2xlYXJQaXhlbERhdGEoKTsKLSAgICAgICAgdm9p
ZCB6ZXJvRmlsbFBpeGVsRGF0YSgpOwotICAgICAgICB2b2lkIHplcm9GaWxsRnJhbWVSZWN0KGNv
bnN0IEludFJlY3QmKTsKLQotICAgICAgICAvLyBNYWtlcyB0aGlzIGZyYW1lIGhhdmUgYW4gaW5k
ZXBlbmRlbnQgY29weSBvZiB0aGUgcHJvdmlkZWQgaW1hZ2UncwotICAgICAgICAvLyBwaXhlbCBk
YXRhLCBzbyB0aGF0IG1vZGlmaWNhdGlvbnMgaW4gb25lIGZyYW1lIGFyZSBub3QgcmVmbGVjdGVk
IGluCi0gICAgICAgIC8vIHRoZSBvdGhlci4gIFJldHVybnMgd2hldGhlciB0aGUgY29weSBzdWNj
ZWVkZWQuCi0gICAgICAgIGJvb2wgY29weUJpdG1hcERhdGEoY29uc3QgSW1hZ2VGcmFtZSYpOwot
Ci0gICAgICAgIC8vIENvcGllcyB0aGUgcGl4ZWwgZGF0YSBhdCBbKHN0YXJ0WCwgc3RhcnRZKSwg
KGVuZFgsIHN0YXJ0WSkpIHRvIHRoZQotICAgICAgICAvLyBzYW1lIFgtY29vcmRpbmF0ZXMgb24g
ZWFjaCBzdWJzZXF1ZW50IHJvdyB1cCB0byBidXQgbm90IGluY2x1ZGluZwotICAgICAgICAvLyBl
bmRZLgotICAgICAgICB2b2lkIGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGlu
dCBzdGFydFksIGludCBlbmRZKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRY
IDwgd2lkdGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWCA8PSB3aWR0aCgpKTsKLSAgICAg
ICAgICAgIEFTU0VSVChzdGFydFkgPCBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5k
WSA8PSBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcm93Qnl0ZXMgPSAoZW5kWCAt
IHN0YXJ0WCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIGNvbnN0IFBpeGVsRGF0
YSogY29uc3Qgc3RhcnRBZGRyID0gZ2V0QWRkcihzdGFydFgsIHN0YXJ0WSk7Ci0gICAgICAgICAg
ICBmb3IgKGludCBkZXN0WSA9IHN0YXJ0WSArIDE7IGRlc3RZIDwgZW5kWTsgKytkZXN0WSkKLSAg
ICAgICAgICAgICAgICBtZW1jcHkoZ2V0QWRkcihzdGFydFgsIGRlc3RZKSwgc3RhcnRBZGRyLCBy
b3dCeXRlcyk7Ci0gICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChEaXNw
b3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQorICAgICAg
ICBEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9z
YWxNZXRob2Q7IH0KIAotICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBk
YXRhLiAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKLSAgICAgICAgLy8gYXJlIHdy
aXR0ZW4uICBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2Nh
dGlvbgotICAgICAgICAvLyBzdWNjZWVkZWQuCi0gICAgICAgIGJvb2wgc2V0U2l6ZShpbnQgbmV3
V2lkdGgsIGludCBuZXdIZWlnaHQpOworICAgICAgICB2b2lkIHNldFN0YXR1cyhEZWNvZGluZ1N0
YXR1cyBzdGF0dXMpIHsgbV9zdGF0dXMgPSBzdGF0dXM7IH0KKyAgICAgICAgRGVjb2RpbmdTdGF0
dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkVtcHR5OyB9
CisgICAgICAgIGJvb2wgaXNQYXJ0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVj
b2RpbmdTdGF0dXM6OlBhcnRpYWw7IH0KKyAgICAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlOyB9CiAKLSAgICAg
ICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIG5h
dGl2ZSBpbWFnZSBkYXRhLgotICAgICAgICAvLyAoQWN0dWFsIHVzZTogVGhpcyBwb2ludGVyIHdp
bGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluCi0gICAgICAgIC8vIEZyYW1l
RGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2Uo
KSBjb25zdDsKKyAgICAgICAgYm9vbCBpbml0UGl4ZWxzKGNvbnN0IEludFNpemUmLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEpOworICAgICAgICBib29sIGNvcHlQaXhlbHMoY29uc3QgSW1hZ2VGcmFt
ZSYpOworICAgICAgICB2b2lkIGNsZWFyUGl4ZWxzKCkgeyBtX3BpeGVscyA9IG51bGxwdHI7IH0K
IAotICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IEludFJlY3Qm
IG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsg
fQotICAgICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsg
fQotICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247
IH0KLSAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KLSAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9wcmVtdWx0aXBseUFscGhhOyB9CisgICAgICAgIEludFNpemUg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzLT5zaXplKCk7IH0KIAotICAgICAgICB2b2lk
IHNldEhhc0FscGhhKGJvb2wgYWxwaGEpOwotICAgICAgICB2b2lkIHNldENvbG9yUHJvZmlsZShj
b25zdCBDb2xvclByb2ZpbGUmKTsKLSAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChj
b25zdCBJbnRSZWN0JiByKSB7IG1fb3JpZ2luYWxGcmFtZVJlY3QgPSByOyB9Ci0gICAgICAgIHZv
aWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cyk7CiAgICAgICAgIHZvaWQgc2V0RHVyYXRp
b24odW5zaWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9Ci0gICAgICAg
IHZvaWQgc2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9k
aXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQotICAgICAgICB2b2lkIHNldFByZW11bHRpcGx5QWxw
aGEoYm9vbCBwcmVtdWx0aXBseUFscGhhKSB7IG1fcHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRp
cGx5QWxwaGE7IH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwg
dW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAg
ewotICAgICAgICAgICAgc2V0UkdCQShnZXRBZGRyKHgsIHkpLCByLCBnLCBiLCBhKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4
OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRhKCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVhZCBvZiBpbnRlZ2VyIGRpdmlz
aW9uIG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8vIFRoaXMgbXVsdGlwbGVyIHBy
b2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwgdmFsdWVzIGluIHJhbmdlIDAg
LSAyNTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludFNoaWZ0ID0gMjQ7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludE11bHQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2ludFNoaWZ0KSkgKyAxOwotICAg
ICAgICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZpeHBvaW50IHZhbHVlIGFuZCBj
b252ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZml4UG9p
bnRVbnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNpZ25lZCB2KQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gIChmaXhlZCAqIHYpID4+IGZpeFBvaW50U2hpZnQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5z
aWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAgICAgICpkZXN0ID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2ludE11bHQ7Ci0gICAgICAgICAgICAg
ICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBhbHBoYU11bHQpOwotICAgICAgICAg
ICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoZywgYWxwaGFNdWx0KTsKLSAgICAg
ICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGIsIGFscGhhTXVsdCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcg
PDwgOCB8IGIpOwotICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9kdXJhdGlvbjsgfQogCi0jaWYgRU5BQkxFKEFQTkcpCi0gICAgICAgIHN0YXRp
YyBpbmxpbmUgdW5zaWduZWQgZGl2aWRlMjU1KHVuc2lnbmVkIGEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiAoYSArIChhID4+IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQorICAgICAg
ICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpIHsgbV9oYXNBbHBoYSA9IGFscGhhOyB9Cisg
ICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9CiAKLSAg
ICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIWEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBOYXRpdmVJbWFnZVB0
ciBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAgICAgICAgaW5saW5lIEJpdG1h
cFBpeGVscyogcGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbHMgPyBtX3BpeGVscy5nZXQo
KSA6IG51bGxwdHI7IH0KIAotICAgICAgICAgICAgaWYgKGEgPCAyNTUpIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBhRGVzdCA9ICgoKmRlc3QpID4+IDI0KSAmIDI1NTsKLSAgICAgICAgICAg
ICAgICBpZiAoYURlc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgckRlc3QgPSAo
KCpkZXN0KSA+PiAxNikgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdEZXN0
ID0gKCgqZGVzdCkgPj4gOCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJE
ZXN0ID0gKCpkZXN0KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYUF1eCA9
IDI1NSAtIGE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByRGVzdCA9IGRpdmlkZTI1NShyRGVzdCAqIGFEZXN0
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdEZXN0ID0gZGl2aWRlMjU1KGdEZXN0ICogYURl
c3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgYkRlc3QgPSBkaXZpZGUyNTUoYkRlc3QgKiBh
RGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgciA9IGRp
dmlkZTI1NShyICogYSArIHJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBk
aXZpZGUyNTUoZyAqIGEgKyBnRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBiID0g
ZGl2aWRlMjU1KGIgKiBhICsgYkRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYSAr
PSBkaXZpZGUyNTUoYURlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3By
ZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAociAqIDI1NSAr
IGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0gKGcgKiAyNTUgKyBhIC0g
MSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICogMjU1ICsgYSAtIDEpIC8g
YTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9w
cmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUyNTUociAq
IGEpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhKTsKLSAgICAgICAg
ICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYgfCBnIDw8
IDggfCBiKTsKLSAgICAgICAgfQotI2VuZGlmCisgICAgICAgIE5hdGl2ZUltYWdlUHRyIGltYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQorICAgICAgICBpbmxpbmUgYm9vbCBoYXNQaXhl
bHMoKSBjb25zdCB7IHJldHVybiBwaXhlbHMoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
aW50IHdpZHRoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS53
aWR0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZCB7IERpc3Bvc2FsTWV0aG9kOjpOb3RT
cGVjaWZpZWQgfTsKKyAgICAgICAgRGVjb2RpbmdTdGF0dXMgbV9zdGF0dXMgeyBEZWNvZGluZ1N0
YXR1czo6RW1wdHkgfTsKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9waXhlbHM7CiAKLSAgICAgICAgVmVjdG9y
PFBpeGVsRGF0YT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgICAgIFBpeGVsRGF0YSogbV9ieXRlczsg
Ly8gVGhlIG1lbW9yeSBpcyBiYWNrZWQgYnkgbV9iYWNraW5nU3RvcmUuCi0gICAgICAgIEludFNp
emUgbV9zaXplOwotICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBtX2NvbG9yUHJvZmlsZSBh
bnltb3JlPwotICAgICAgICBDb2xvclByb2ZpbGUgbV9jb2xvclByb2ZpbGU7Ci0gICAgICAgIGJv
b2wgbV9oYXNBbHBoYTsKLSAgICAgICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBU
aGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBz
bWFsbGVyIHRoYW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
b3ZlcmFsbCBpbWFnZSBzaXplLgotICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKLSAgICAg
ICAgdW5zaWduZWQgbV9kdXJhdGlvbjsKLSAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rp
c3Bvc2FsTWV0aG9kOwotICAgICAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYTsKKyAgICAgICAg
ZmxvYXQgbV9kdXJhdGlvbiB7IDAgfTsKKyAgICAgICAgYm9vbCBtX2hhc0FscGhhIHsgdHJ1ZSB9
OwogICAgIH07CiAKICAgICAvLyBJbWFnZURlY29kZXIgaXMgYSBiYXNlIGZvciBhbGwgZm9ybWF0
LXNwZWNpZmljIGRlY29kZXJzCkBAIC0yNTMsNiArMTIwLDggQEAgdXNpbmcgQ29sb3JQcm9maWxl
ID0gVmVjdG9yPGNoYXI+OwogCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5z
aW9uKCkgY29uc3QgPSAwOwogCisgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlBbHBoYTsgfQorCiAgICAgICAgIGJvb2wgaXNBbGxEYXRh
UmVjZWl2ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQWxsRGF0YVJlY2VpdmVkOyB9CiAKICAgICAg
ICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIGFsbERhdGFS
ZWNlaXZlZCkKQEAgLTI5MCwxMSArMTU5LDExIEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3Rv
cjxjaGFyPjsKIAogICAgICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHNpemUgaXMgbGVnYWwg
KGkuZS4gbm90IGdvaW5nIHRvIHJlc3VsdCBpbgogICAgICAgICAvLyBvdmVyZmxvdyBlbHNld2hl
cmUpLiAgSWYgbm90LCBtYXJrcyBkZWNvZGluZyBhcyBmYWlsZWQuCi0gICAgICAgIHZpcnR1YWwg
Ym9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCisgICAgICAgIHZp
cnR1YWwgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChpc092ZXJTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgaWYgKGlz
T3ZlclNpemUoc2l6ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwotICAg
ICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIG1f
c2l6ZSA9IHNpemU7CiAgICAgICAgICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVlOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTM4MSw4ICsyNTAsNiBAQCB1c2luZyBD
b2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gbV9kYXRhOyAvLyBUaGUgZW5jb2RlZCBkYXRhLgogICAgICAgICBWZWN0b3I8SW1hZ2VGcmFt
ZSwgMT4gbV9mcmFtZUJ1ZmZlckNhY2hlOwotICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBt
X2NvbG9yUHJvZmlsZSBhbnkgbW9yZSwgZm9yIGFueSBwb3J0PwotICAgICAgICBDb2xvclByb2Zp
bGUgbV9jb2xvclByb2ZpbGU7CiAgICAgICAgIGJvb2wgbV9zY2FsZWQgeyBmYWxzZSB9OwogICAg
ICAgICBWZWN0b3I8aW50PiBtX3NjYWxlZENvbHVtbnM7CiAgICAgICAgIFZlY3RvcjxpbnQ+IG1f
c2NhbGVkUm93czsKQEAgLTM5MywxMSArMjYwLDEwIEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZl
Y3RvcjxjaGFyPjsKICAgICBwcml2YXRlOgogICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29t
cHV0ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKICAgICAg
ICAgLy8gYW5kIHJldHVybiBpdCBhcyBhIChzaWduZWQpIGludC4gIEF2b2lkIG92ZXJmbG93Lgot
ICAgICAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQpCisgICAgICAgIHN0YXRpYyBib29sIGlzT3ZlclNpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX3NpemUg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHdpZHRoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxv
bmc+KGhlaWdodCk7Ci0gICAgICAgICAgICByZXR1cm4gdG90YWxfc2l6ZSA+ICgoMSA8PCAyOSkg
LSAxKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBwaXhlbHMgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUud2lkdGgoKSkgKiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nIGxvbmc+KHNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgcmV0dXJuIHBpeGVscyA+
ICgoMSA8PCAyOSkgLSAxKTsKICAgICAgICAgfQogCiAgICAgICAgIEludFNpemUgbV9zaXplOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JN
UEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBjYWYzNWM5N2YxN2VkZDM0YmM5ZGY4OWFi
MDllODcwMGFlZTZjN2RmLi5hMTRkNDM5ZTVkZjMxNzIyMjM2MmFjMjEyNzQ5MDgyZDBkN2NjMGI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAv
Qk1QSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcApAQCAtNzAsMTMgKzcwLDExIEBAIEltYWdl
RnJhbWUqIEJNUEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkK
ICAgICBpZiAoaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKG1fZnJhbWVCdWZm
ZXJDYWNoZS5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHko
KSkKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKLSAgICAgICAgbV9mcmFt
ZUJ1ZmZlckNhY2hlLmZpcnN0KCkuc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxw
aGEpOwotICAgIH0KIAogICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2Fj
aGUuZmlyc3QoKTsKLSAgICBpZiAoYnVmZmVyLT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFt
ZUNvbXBsZXRlKQorICAgIGlmICghYnVmZmVyLT5pc0NvbXBsZXRlKCkpCiAgICAgICAgIGRlY29k
ZShmYWxzZSk7CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KQEAgLTk4LDcgKzk2LDcgQEAgdm9pZCBC
TVBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTaXplKQogICAgICAgICBzZXRGYWlsZWQo
KTsKICAgICAvLyBJZiB3ZSdyZSBkb25lIGRlY29kaW5nIHRoZSBpbWFnZSwgd2UgZG9uJ3QgbmVl
ZCB0aGUgQk1QSW1hZ2VSZWFkZXIKICAgICAvLyBhbnltb3JlLiAgKElmIHdlIGZhaWxlZCwgfG1f
cmVhZGVyfCBoYXMgYWxyZWFkeSBiZWVuIGNsZWFyZWQuKQotICAgIGVsc2UgaWYgKCFtX2ZyYW1l
QnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5zdGF0
dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKSkKKyAgICBlbHNlIGlmICghbV9mcmFt
ZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuaXND
b21wbGV0ZSgpKSkKICAgICAgICAgbV9yZWFkZXIgPSBudWxscHRyOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlUmVhZGVyLmNwcAppbmRleCA1YzAwNTUzNGVjZDkyMTM0YTEzYjMyOTU4OTI3NzkwZjA3YWQw
ZjgxLi4wNTg3ZmM0OWEwZDk4NWYyZWI2NDg4YWQ4Yjc1YjJkMDRjOTVhMTMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9C
TVBJbWFnZVJlYWRlci5jcHAKQEAgLTc3LDE4ICs3NywxNSBAQCBib29sIEJNUEltYWdlUmVhZGVy
OjpkZWNvZGVCTVAoYm9vbCBvbmx5U2l6ZSkKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1l
YnVmZmVyIGlmIG5lZWRlZC4KICAgICBBU1NFUlQobV9idWZmZXIpOyAgLy8gUGFyZW50IHNob3Vs
ZCBzZXQgdGhpcyBiZWZvcmUgYXNraW5nIHVzIHRvIGRlY29kZSEKLSAgICBpZiAobV9idWZmZXIt
PnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFtX2J1
ZmZlci0+c2V0U2l6ZShtX3BhcmVudC0+c2l6ZSgpLndpZHRoKCksIG1fcGFyZW50LT5zaXplKCku
aGVpZ2h0KCkpKQorICAgIGlmIChtX2J1ZmZlci0+aXNFbXB0eSgpKSB7CisgICAgICAgIGlmICgh
bV9idWZmZXItPmluaXRQaXhlbHMobV9wYXJlbnQtPnNpemUoKSwgbV9wYXJlbnQtPnByZW11bHRp
cGx5QWxwaGEoKSkpCiAgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPnNldEZhaWxlZCgpOyAv
LyBVbmFibGUgdG8gYWxsb2NhdGUuCi0gICAgICAgIG1fYnVmZmVyLT5zZXRTdGF0dXMoSW1hZ2VG
cmFtZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICAgICAgbV9idWZmZXItPnNldFN0YXR1cyhJbWFnZUZy
YW1lOjpEZWNvZGluZ1N0YXR1czo6UGFydGlhbCk7CiAgICAgICAgIC8vIHNldFNpemUoKSBjYWxs
cyBlcmFzZUFSR0IoKSwgd2hpY2ggcmVzZXRzIHRoZSBhbHBoYSBmbGFnLCBzbyB3ZSBmb3JjZQog
ICAgICAgICAvLyBpdCBiYWNrIHRvIGZhbHNlIGhlcmUuICBXZSdsbCBzZXQgaXQgdHJ1ZSBiZWxv
dyBpbiBhbGwgY2FzZXMgd2hlcmUKICAgICAgICAgLy8gdGhlc2UgMHMgY291bGQgYWN0dWFsbHkg
c2hvdyB0aHJvdWdoLgogICAgICAgICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEoZmFsc2UpOwogCi0g
ICAgICAgIC8vIEZvciBCTVBzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1h
Z2UuCi0gICAgICAgIG1fYnVmZmVyLT5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBv
aW50KCksIG1fcGFyZW50LT5zaXplKCkpKTsKLQogICAgICAgICBpZiAoIW1faXNUb3BEb3duKQog
ICAgICAgICAgICAgbV9jb29yZC5zZXRZKG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkgLSAxKTsK
ICAgICB9CkBAIC0xMjIsNyArMTE5LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1Q
KGJvb2wgb25seVNpemUpCiAgICAgfQogCiAgICAgLy8gRG9uZSEKLSAgICBtX2J1ZmZlci0+c2V0
U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgIG1fYnVmZmVyLT5zZXRTdGF0
dXMoSW1hZ2VGcmFtZTo6RGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTcxLDcgKzE2OCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJ
bmZvSGVhZGVyKCkKICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKIAogICAg
IC8vIFNldCBvdXIgc2l6ZS4KLSAgICBpZiAoIW1fcGFyZW50LT5zZXRTaXplKG1faW5mb0hlYWRl
ci5iaVdpZHRoLCBtX2luZm9IZWFkZXIuYmlIZWlnaHQpKQorICAgIGlmICghbV9wYXJlbnQtPnNl
dFNpemUoSW50U2l6ZShtX2luZm9IZWFkZXIuYmlXaWR0aCwgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZvciBwYWxldHRlZCBpbWFnZXMs
IGJpdG1hcHMgY2FuIHNldCBiaUNsclVzZWQgdG8gMCB0byBtZWFuICJhbGwKQEAgLTcwNyw3ICs3
MDQsOCBAQCBCTVBJbWFnZVJlYWRlcjo6UHJvY2Vzc2luZ1Jlc3VsdCBCTVBJbWFnZVJlYWRlcjo6
cHJvY2Vzc05vblJMRURhdGEoYm9vbCBpblJMRSwgaQogICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgIG1fc2Vlbk5vblplcm9BbHBoYVBpeGVsID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fc2Vlblplcm9BbHBoYVBpeGVsKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2J1ZmZlci0+emVyb0ZpbGxQaXhlbERhdGEoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fYnVmZmVyLT5waXhlbHMoKS0+Y2xlYXIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fYnVmZmVyLT5zZXRIYXNBbHBoYSh0cnVlKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fc2Vlblplcm9BbHBoYVBpeGVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoYWxwaGEgIT0gMjU1KQogICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZm
ZXItPnNldEhhc0FscGhhKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuaAppbmRleCBiNWNiOTZl
M2Y5Mjk5MmRkNzYyZTUzNzRiNWQ1NWNjZDc4NTNjY2MxLi41NDNiNjJkZWI1YzI0YjNiOTZjNjEy
MDA4MzRlNWUyNmFmMGNhODc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuaApAQCAtMjQ4LDcgKzI0
OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBibHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhh
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2J1ZmZlci0+c2V0UkdCQShtX2Nvb3JkLngoKSwg
bV9jb29yZC55KCksIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIG1fYnVm
ZmVyLT5waXhsZXMoKS0+c2V0UkdCQShtX2Nvb3JkLngoKSwgbV9jb29yZC55KCksIHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKICAgICAgICAgICAgIG1fY29vcmQubW92ZSgxLCAwKTsKICAgICAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWFh
ZjhhMGEzNmIxOGNiZjcyNzdkMmMyZTI2ZWI0MTcxMjU2MDBkNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVs
c0NhaXJvLmNwcApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQml0bWFw
UGl4ZWxzLmgiCisKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K05hdGl2ZUltYWdlUHRyIEJpdG1hcFBpeGVsczo6aW1hZ2UoKSBjb25zdAoreworICAgIHJldHVy
biBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxSR0JBMzIqPihtX3Bp
eGVscykpLAorICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCBzaXplKCkud2lkdGgoKSwgc2l6
ZSgpLmhlaWdodCgpLCBzaXplKCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I0MTI5NWY4NTczNThmYmJmMzVjMWIwNTI1
ZThkNmNjMzUyMGY1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURl
Y29kZXJDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCi0KLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLU5hdGl2ZUltYWdlUHRyIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZl
SW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNl
X2NyZWF0ZV9mb3JfZGF0YSgKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oY29uc3RfY2FzdDxQaXhlbERhdGEqPihtX2J5dGVzKSksCi0gICAgICAgIENBSVJPX0ZPUk1B
VF9BUkdCMzIsIHdpZHRoKCksIGhlaWdodCgpLCB3aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSkp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNw
cAppbmRleCA5Zjk5MmE3YmUxZDY2NzIyNjc1YzJlODU0YWQxODkxZTYwZjg1NzdjLi5mZWU5MDlj
MzZhMWJkNWU2MzQ3MjNmYjAyMjZmYzBmNWEzOTMxZWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmNwcApAQCAtNjAsMTIgKzYwLDEyIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1NpemVB
dmFpbGFibGUoKQogICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwog
fQogCi1ib29sIEdJRkltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0KQorYm9vbCBHSUZJbWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKIHsKLSAgICBpZiAoSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiBzaXpl
KCkgPT0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoSW1hZ2VEZWNvZGVyOjppc1Np
emVBdmFpbGFibGUoKSAmJiB0aGlzLT5zaXplKCkgPT1zaXplKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAg
IGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTExNyw3ICsxMTcsNyBA
QCBJbWFnZUZyYW1lKiBHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qg
aW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2Zy
YW1lQnVmZmVyQ2FjaGVbaW5kZXhdOwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBJbWFnZUZy
YW1lOjpGcmFtZUNvbXBsZXRlKQorICAgIGlmICghZnJhbWUuaXNDb21wbGV0ZSgpKQogICAgICAg
ICBkZWNvZGUoaW5kZXggKyAxLCBHSUZGdWxsUXVlcnkpOwogICAgIHJldHVybiAmZnJhbWU7CiB9
CkBAIC0xNTYsMjUgKzE1NiwyNSBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1
ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQogICAgIC8vIG5vdCB0byBoYXZlIG5v
bi1lbXB0eSBmcmFtZXMgYWZ0ZXIgdGhlIGZyYW1lIHdlJ3JlIGN1cnJlbnRseSBkZWNvZGluZy4K
ICAgICAvLyBTbywgc2NhbiBiYWNrd2FyZHMgZnJvbSB8ZW5kfCBhcyBmb2xsb3dzOgogICAgIC8v
ICAgKiBJZiB0aGUgZnJhbWUgaXMgZW1wdHksIHdlJ3JlIHN0aWxsIHBhc3QgYW55IGZyYW1lcyB3
ZSBjYXJlIGFib3V0LgotICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMgY29tcGxldGUsIGJ1dCBp
cyBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMsIHdlJ2xsCisgICAgLy8gICAqIElmIHRoZSBmcmFt
ZSBpcyBjb21wbGV0ZSwgYnV0IGlzIERpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cywg
d2UnbGwKICAgICAvLyAgICAgc2tpcCBvdmVyIGl0IGluIGZ1dHVyZSBpbml0RnJhbWVCdWZmZXIo
KSBjYWxscy4gIFdlIGNhbiBjbGVhciBpdAogICAgIC8vICAgICB1bmxlc3MgaXQncyB8ZW5kfCwg
YW5kIGtlZXAgc2Nhbm5pbmcuICBGb3IgYW55IG90aGVyIGRpc3Bvc2FsIG1ldGhvZCwKICAgICAv
LyAgICAgc3RvcCBzY2FubmluZywgYXMgd2UndmUgZm91bmQgdGhlIGZyYW1lIGluaXRGcmFtZUJ1
ZmZlcigpIHdpbGwgbmVlZAogICAgIC8vICAgICBuZXh0LgogICAgIC8vICAgKiBJZiB0aGUgZnJh
bWUgaXMgcGFydGlhbCwgd2UncmUgZGVjb2RpbmcgaXQsIHNvIGRvbid0IGNsZWFyIGl0OyBpZiBp
dAotICAgIC8vICAgICBoYXMgYSBkaXNwb3NhbCBtZXRob2Qgb3RoZXIgdGhhbiBEaXNwb3NlT3Zl
cndyaXRlUHJldmlvdXMsIHN0b3AKKyAgICAvLyAgICAgaGFzIGEgZGlzcG9zYWwgbWV0aG9kIG90
aGVyIHRoYW4gRGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZVByZXZpb3VzLCBzdG9wCiAgICAgLy8g
ICAgIHNjYW5uaW5nLCBhcyB3ZSdsbCBvbmx5IG5lZWQgdGhpcyBmcmFtZSB3aGVuIGRlY29kaW5n
IHRoZSBuZXh0IG9uZS4KICAgICBWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsK
LSAgICBmb3IgKDsgKGkgIT0gbV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmICgoaS0+c3Rh
dHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgfHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkg
PT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKSk7IC0taSkgewotICAgICAg
ICBpZiAoKGktPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpICYmIChpICE9
IGVuZCkpCi0gICAgICAgICAgICBpLT5jbGVhclBpeGVsRGF0YSgpOworICAgIGZvciAoOyAoaSAh
PSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSkgJiYgKChpLT5pc0VtcHR5KCkpIHx8IChpLT5k
aXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQ
cmV2aW91cykpOyAtLWkpIHsKKyAgICAgICAgaWYgKChpLT5pc0NvbXBsZXRlKCkpICYmIChpICE9
IGVuZCkpCisgICAgICAgICAgICBpLT5jbGVhclBpeGVscygpOwogICAgIH0KIAogICAgIC8vIE5v
dyB8aXwgaG9sZHMgdGhlIGxhc3QgZnJhbWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsgY2xlYXIgcHJp
b3IgZnJhbWVzLgogICAgIGZvciAoVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBqKG1fZnJh
bWVCdWZmZXJDYWNoZS5iZWdpbigpKTsgaiAhPSBpOyArK2opIHsKLSAgICAgICAgQVNTRVJUKGot
PnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7Ci0gICAgICAgIGlmIChqLT5z
dGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQotICAgICAgICAgICAgai0+Y2xlYXJQ
aXhlbERhdGEoKTsKKyAgICAgICAgQVNTRVJUKCFqLT5pc1BhcnRpYWwoKSk7CisgICAgICAgIGlm
ICghai0+aXNFbXB0eSgpKQorICAgICAgICAgICAgai0+Y2xlYXJQaXhlbHMoKTsKICAgICB9CiAK
ICAgICAvLyBXaGVuIHNvbWUgZnJhbWVzIGFyZSBjbGVhcmVkLCB0aGUgcmVhZGVyIGlzIG91dCBv
ZiBzeW5jLCBzaW5jZSB0aGUgY2FsbGVyIG1pZ2h0IGFzayBmb3IgYW55IGZyYW1lIG5vdApAQCAt
MjEzLDE2ICsyMTMsMTYgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVu
c2lnbmVkIGZyYW1lSW5kZXgsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZAogCiAgICAgLy8gSW5pdGlh
bGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1f
ZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkg
PT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4
KSkgfHwgIWJ1ZmZlci5oYXNQaXhlbERhdGEoKSkKKyAgICBpZiAoKChidWZmZXIuaXNFbXB0eSgp
KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhhc1BpeGVscygp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1
cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoeEJlZ2luLCB5QmVnaW4pOworICAgIFJHQkEz
MiogY3VycmVudEFkZHJlc3MgPSBidWZmZXIucGl4ZWxzKCkuYXQoeEJlZ2luLCB5QmVnaW4pOwog
ICAgIC8vIFdyaXRlIG9uZSByb3cncyB3b3J0aCBvZiBkYXRhIGludG8gdGhlIGZyYW1lLiAgCiAg
ICAgZm9yIChpbnQgeCA9IHhCZWdpbjsgeCA8IHhFbmQ7ICsreCkgewogICAgICAgICBjb25zdCB1
bnNpZ25lZCBjaGFyIHNvdXJjZVZhbHVlID0gcm93QnVmZmVyWyhtX3NjYWxlZCA/IG1fc2NhbGVk
Q29sdW1uc1t4XSA6IHgpIC0gZnJhbWVDb250ZXh0LT54T2Zmc2V0XTsKICAgICAgICAgaWYgKCgh
ZnJhbWVDb250ZXh0LT5pc1RyYW5zcGFyZW50IHx8IChzb3VyY2VWYWx1ZSAhPSBmcmFtZUNvbnRl
eHQtPnRwaXhlbCkpICYmIChzb3VyY2VWYWx1ZSA8IGNvbG9yTWFwU2l6ZSkpIHsKICAgICAgICAg
ICAgIGNvbnN0IHNpemVfdCBjb2xvckluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihzb3VyY2VW
YWx1ZSkgKiAzOwotICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoY3VycmVudEFkZHJlc3MsIGNv
bG9yTWFwW2NvbG9ySW5kZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0sIGNvbG9yTWFwW2Nv
bG9ySW5kZXggKyAyXSwgMjU1KTsKKyAgICAgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdC
QShjdXJyZW50QWRkcmVzcywgY29sb3JNYXBbY29sb3JJbmRleF0sIGNvbG9yTWFwW2NvbG9ySW5k
ZXggKyAxXSwgY29sb3JNYXBbY29sb3JJbmRleCArIDJdLCAyNTUpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgbV9jdXJyZW50QnVmZmVyU2F3QWxwaGEgPSB0cnVlOwogICAgICAgICAg
ICAgLy8gV2UgbWF5IG9yIG1heSBub3QgbmVlZCB0byB3cml0ZSB0cmFuc3BhcmVudCBwaXhlbHMg
dG8gdGhlIGJ1ZmZlci4KQEAgLTIzMywzNCArMjMzLDM0IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVy
OjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCBjb25zdCBWZWN0b3I8dW5zaWdu
ZWQKICAgICAgICAgICAgIC8vIGJleW9uZCB0aGUgZmlyc3QsIG9yIHRoZSBpbml0aWFsIHBhc3Nl
cyB3aWxsICJzaG93IHRocm91Z2giIHRoZQogICAgICAgICAgICAgLy8gbGF0ZXIgb25lcy4KICAg
ICAgICAgICAgIGlmICh3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKQotICAgICAgICAgICAgICAgIGJ1
ZmZlci5zZXRSR0JBKGN1cnJlbnRBZGRyZXNzLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICBidWZmZXIucGl4ZWxzKCktPnNldFJHQkEoY3VycmVudEFkZHJlc3MsIDAsIDAsIDAsIDApOwog
ICAgICAgICB9CiAgICAgICAgICsrY3VycmVudEFkZHJlc3M7CiAgICAgfQogCiAgICAgLy8gVGVs
bCB0aGUgZnJhbWUgdG8gY29weSB0aGUgcm93IGRhdGEgaWYgbmVlZCBiZS4KICAgICBpZiAocmVw
ZWF0Q291bnQgPiAxKQotICAgICAgICBidWZmZXIuY29weVJvd05UaW1lcyh4QmVnaW4sIHhFbmQs
IHlCZWdpbiwgeUVuZCk7CisgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+cmVwZWF0Rmlyc3RSb3co
SW50UmVjdCh4QmVnaW4sIHlCZWdpbiwgeEVuZCAtIHhCZWdpbiwgeUVuZCAtIHlCZWdpbikpOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBs
ZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIEltYWdlRnJh
bWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QpCitib29sIEdJRkltYWdlRGVj
b2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1
cmF0aW9uLCBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkKIHsKICAg
ICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZSBpZiBuZWNlc3NhcnkuICBTb21lIEdJRnMgaW5zZXJ0
IGRvLW5vdGhpbmcgZnJhbWVzLAogICAgIC8vIGluIHdoaWNoIGNhc2Ugd2UgbmV2ZXIgcmVhY2gg
aGF2ZURlY29kZWRSb3coKSBiZWZvcmUgZ2V0dGluZyBoZXJlLgogICAgIEltYWdlRnJhbWUmIGJ1
ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBpZiAoKGJ1ZmZlci5z
dGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZy
YW1lSW5kZXgpKQorICAgIGlmICgoYnVmZmVyLmlzRW1wdHkoKSkgJiYgIWluaXRGcmFtZUJ1ZmZl
cihmcmFtZUluZGV4KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBpbml0RnJhbWVCdWZmZXIo
KSBoYXMgYWxyZWFkeSBjYWxsZWQgc2V0RmFpbGVkKCkuCiAKLSAgICBidWZmZXIuc2V0U3RhdHVz
KEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VG
cmFtZTo6RGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKTsKICAgICBidWZmZXIuc2V0RHVyYXRpb24o
ZnJhbWVEdXJhdGlvbik7CiAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKGRpc3Bvc2FsTWV0
aG9kKTsKIAogICAgIGlmICghbV9jdXJyZW50QnVmZmVyU2F3QWxwaGEpIHsKICAgICAgICAgLy8g
VGhlIHdob2xlIGZyYW1lIHdhcyBub24tdHJhbnNwYXJlbnQsIHNvIGl0J3MgcG9zc2libGUgdGhh
dCB0aGUgZW50aXJlCiAgICAgICAgIC8vIHJlc3VsdGluZyBidWZmZXIgd2FzIG5vbi10cmFuc3Bh
cmVudCwgYW5kIHdlIGNhbiBzZXRIYXNBbHBoYShmYWxzZSkuCi0gICAgICAgIGlmIChidWZmZXIu
b3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNp
emUoKSkpKQorICAgICAgICBpZiAoYnVmZmVyLnBpeGVscygpLT5yZWN0KCkuY29udGFpbnMoSW50
UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkKICAgICAgICAgICAgIGJ1ZmZlci5zZXRI
YXNBbHBoYShmYWxzZSk7CiAgICAgICAgIGVsc2UgaWYgKGZyYW1lSW5kZXgpIHsKICAgICAgICAg
ICAgIC8vIFRyaWNreSBjYXNlLiAgVGhpcyBmcmFtZSBkb2VzIG5vdCBoYXZlIGFscGhhIG9ubHkg
aWYgZXZlcnl3aGVyZQpAQCAtMjY4LDIyICsyNjgsMjIgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6
OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlv
biwKICAgICAgICAgICAgIC8vIHRydWUsIHdlIGNoZWNrIHRoZSBzdGFydCBzdGF0ZSBvZiB0aGUg
ZnJhbWUgLS0gaWYgaXQgZG9lc24ndCBoYXZlCiAgICAgICAgICAgICAvLyBhbHBoYSwgd2UncmUg
c2FmZS4KICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBGaXJzdCBza2lwIG92ZXIgcHJp
b3IgRGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzIGZyYW1lcyAoc2luY2UgdGhleQorICAgICAgICAg
ICAgLy8gRmlyc3Qgc2tpcCBvdmVyIHByaW9yIERpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2
aW91cyBmcmFtZXMgKHNpbmNlIHRoZXkKICAgICAgICAgICAgIC8vIGRvbid0IGFmZmVjdCB0aGUg
c3RhcnQgc3RhdGUgb2YgdGhpcyBmcmFtZSkgdGhlIHNhbWUgd2F5IHdlIGRvIGluCiAgICAgICAg
ICAgICAvLyBpbml0RnJhbWVCdWZmZXIoKS4KICAgICAgICAgICAgIGNvbnN0IEltYWdlRnJhbWUq
IHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAg
ICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9
PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKQorICAgICAgICAgICAgd2hp
bGUgKGZyYW1lSW5kZXggJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VG
cmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZVByZXZpb3VzKSkKICAgICAgICAgICAgICAg
ICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwogCi0gICAg
ICAgICAgICAvLyBOb3csIGlmIHdlJ3JlIGF0IGEgRGlzcG9zZU5vdFNwZWNpZmllZCBvciBEaXNw
b3NlS2VlcCBmcmFtZSwgdGhlbgorICAgICAgICAgICAgLy8gTm93LCBpZiB3ZSdyZSBhdCBhIERp
c3Bvc2FsTWV0aG9kOjpOb3RTcGVjaWZpZWQgb3IgRGlzcG9zYWxNZXRob2Q6OktlZXAgZnJhbWUs
IHRoZW4KICAgICAgICAgICAgIC8vIHdlIGNhbiBzYXkgd2UgaGF2ZSBubyBhbHBoYSBpZiB0aGF0
IGZyYW1lIGhhZCBubyBhbHBoYS4gIEJ1dAogICAgICAgICAgICAgLy8gc2luY2UgaW4gaW5pdEZy
YW1lQnVmZmVyKCkgd2UgYWxyZWFkeSBjb3BpZWQgdGhhdCBmcmFtZSdzIGFscGhhCiAgICAgICAg
ICAgICAvLyBzdGF0ZSBpbnRvIHRoZSBjdXJyZW50IGZyYW1lJ3MsIHdlIG5lZWQgZG8gbm90aGlu
ZyBhdCBhbGwgaGVyZS4KICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGUgb25seSBy
ZW1haW5pbmcgY2FzZSBpcyBhIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGZyYW1lLiAgSWYKKyAg
ICAgICAgICAgIC8vIFRoZSBvbmx5IHJlbWFpbmluZyBjYXNlIGlzIGEgRGlzcG9zYWxNZXRob2Q6
Ok92ZXJ3cml0ZUJnY29sb3IgZnJhbWUuIElmCiAgICAgICAgICAgICAvLyBpdCBoYWQgbm8gYWxw
aGEsIGFuZCBpdHMgcmVjdCBpcyBjb250YWluZWQgaW4gdGhlIGN1cnJlbnQgZnJhbWUncwogICAg
ICAgICAgICAgLy8gcmVjdCwgd2Uga25vdyB0aGUgY3VycmVudCBmcmFtZSBoYXMgbm8gYWxwaGEu
Ci0gICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VG
cmFtZTo6RGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IpICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgp
ICYmIGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPm9yaWdp
bmFsRnJhbWVSZWN0KCkpKQorICAgICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5kaXNwb3NhbE1l
dGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVCZ2NvbG9yKSAm
JiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIucGl4ZWxzKCktPnJlY3QoKS5jb250
YWlucyhwcmV2QnVmZmVyLT5waXhlbHMoKS0+cmVjdCgpKSkKICAgICAgICAgICAgICAgICBidWZm
ZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzIxLDEwICszMjEs
NyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RlKHVuc2lnbmVkIGhhbHRBdEZyYW1lLCBH
SUZRdWVyeSBxdWVyeSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IHNpemVf
dCBvbGRTaXplID0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKICAgICBtX2ZyYW1lQnVmZmVy
Q2FjaGUucmVzaXplKG1fcmVhZGVyLT5pbWFnZXNDb3VudCgpKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gb2xkU2l6ZTsgaSA8IG1fcmVhZGVyLT5pbWFnZXNDb3VudCgpOyArK2kpCi0gICAgICAgIG1f
ZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBo
YSk7CiAKICAgICBpZiAocXVlcnkgPT0gR0lGRnJhbWVDb3VudFF1ZXJ5KQogICAgICAgICByZXR1
cm47CkBAIC0zNTMsNTggKzM1MCw2MCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1l
QnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCiAgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQo
c2l6ZSgpLmhlaWdodCgpIC0gZnJhbWVDb250ZXh0LT55T2Zmc2V0KTsKIAogICAgIEltYWdlRnJh
bWUqIGNvbnN0IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAg
aW50IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKLSAgICBpbnQgcmln
aHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKLSAgICBpbnQg
dG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7Ci0gICAgaW50IGJvdHRvbSA9
IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7Ci0gICAgYnVmZmVyLT5z
ZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0
b20gLSB0b3ApKTsKIAogICAgIGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlz
IHRoZSBmaXJzdCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRh
dGEuCi0gICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBz
Y2FsZWRTaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAoIWJ1ZmZlci0+aW5pdFBpeGVscyhz
Y2FsZWRTaXplKCksIHByZW11bHRpcGx5QWxwaGEoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0
RmFpbGVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZv
ciB0aGlzIGZyYW1lIGRlcGVuZHMgb24gdGhlIHByZXZpb3VzIGZyYW1lJ3MKICAgICAgICAgLy8g
ZGlzcG9zYWwgbWV0aG9kLgogICAgICAgICAvLwotICAgICAgICAvLyBGcmFtZXMgdGhhdCB1c2Ug
dGhlIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyBtZXRob2QgYXJlIGVmZmVjdGl2ZWx5CisgICAg
ICAgIC8vIEZyYW1lcyB0aGF0IHVzZSB0aGUgRGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZVByZXZp
b3VzIG1ldGhvZCBhcmUgZWZmZWN0aXZlbHkKICAgICAgICAgLy8gbm8tb3BzIGluIHRlcm1zIG9m
IGNoYW5naW5nIHRoZSBzdGFydGluZyBzdGF0ZSBvZiBhIGZyYW1lIGNvbXBhcmVkIHRvCiAgICAg
ICAgIC8vIHRoZSBzdGFydGluZyBzdGF0ZSBvZiB0aGUgcHJldmlvdXMgZnJhbWUsIHNvIHNraXAg
b3ZlciB0aGVtLiAgKElmIHRoZQogICAgICAgICAvLyBmaXJzdCBmcmFtZSBzcGVjaWZpZXMgdGhp
cyBtZXRob2QsIGl0IHdpbGwgZ2V0IHRyZWF0ZWQgbGlrZQotICAgICAgICAvLyBEaXNwb3NlT3Zl
cndyaXRlQmdjb2xvciBiZWxvdyBhbmQgcmVzZXQgdG8gYSBjb21wbGV0ZWx5IGVtcHR5IGltYWdl
LikKKyAgICAgICAgLy8gRGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZUJnY29sb3IgYmVsb3cgYW5k
IHJlc2V0IHRvIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4pCiAgICAgICAgIGNvbnN0IEltYWdl
RnJhbWUqIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0g
ICAgICAgIEltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgcHJldk1ldGhvZCA9IHByZXZC
dWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7Ci0gICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChw
cmV2TWV0aG9kID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpIHsKKyAg
ICAgICAgSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2QgcHJldk1ldGhvZCA9IHByZXZCdWZmZXIt
PmRpc3Bvc2FsTWV0aG9kKCk7CisgICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2TWV0
aG9kID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cykpIHsK
ICAgICAgICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRl
eF07CiAgICAgICAgICAgICBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2Qo
KTsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQocHJldkJ1ZmZlci0+c3RhdHVzKCkgPT0gSW1h
Z2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CisgICAgICAgIEFTU0VSVChwcmV2QnVmZmVyLT5pc0Nv
bXBsZXRlKCkpOwogCi0gICAgICAgIGlmICgocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNw
b3NlTm90U3BlY2lmaWVkKSB8fCAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlS2Vl
cCkpIHsKKyAgICAgICAgaWYgKChwcmV2TWV0aG9kID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0
aG9kOjpOb3RTcGVjaWZpZWQpIHx8IChwcmV2TWV0aG9kID09IEltYWdlRnJhbWU6OkRpc3Bvc2Fs
TWV0aG9kOjpLZWVwKSkgewogICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGxhc3QgZnJhbWUg
YXMgdGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lLgotICAgICAgICAgICAgaWYgKCFi
dWZmZXItPmNvcHlCaXRtYXBEYXRhKCpwcmV2QnVmZmVyKSkKKyAgICAgICAgICAgIGlmICghYnVm
ZmVyLT5jb3B5UGl4ZWxzKCpwcmV2QnVmZmVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc2V0
RmFpbGVkKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNs
ZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAg
ICAgLy8gYWZmZWN0aW5nIHBpeGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUu
Ci0gICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPm9yaWdp
bmFsRnJhbWVSZWN0KCk7CisgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHBy
ZXZCdWZmZXItPnBpeGVscygpLT5yZWN0KCk7CiAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBi
dWZmZXJTaXplID0gc2NhbGVkU2l6ZSgpOwogICAgICAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8
IHByZXZSZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUg
dGhlIHNpemUgb2YgdGhlIHdob2xlCiAgICAgICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMg
aW4gYSBjb21wbGV0ZWx5IGVtcHR5IGltYWdlLgotICAgICAgICAgICAgICAgIGlmICghYnVmZmVy
LT5zZXRTaXplKGJ1ZmZlclNpemUud2lkdGgoKSwgYnVmZmVyU2l6ZS5oZWlnaHQoKSkpCisgICAg
ICAgICAgICAgICAgaWYgKCFidWZmZXItPmluaXRQaXhlbHMoYnVmZmVyU2l6ZSwgcHJlbXVsdGlw
bHlBbHBoYSgpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3aG9sZSBwcmV2
aW91cyBidWZmZXIsIHRoZW4gY2xlYXIganVzdCBpdHMgZnJhbWUuCi0gICAgICAgICAgICAgICAg
aWYgKCFidWZmZXItPmNvcHlCaXRtYXBEYXRhKCpwcmV2QnVmZmVyKSkKKyAgICAgICAgICAgICAg
ICBpZiAoIWJ1ZmZlci0+Y29weVBpeGVscygqcHJldkJ1ZmZlcikpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzZXRGYWlsZWQoKTsKLSAgICAgICAgICAgICAgICBidWZmZXItPnplcm9GaWxs
RnJhbWVSZWN0KHByZXZSZWN0KTsKKyAgICAgICAgICAgICAgICBidWZmZXItPnBpeGVscygpLT5j
bGVhclJlY3QocHJldlJlY3QpOworICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0SGFzQWxwaGEo
dHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgaW50IGxl
ZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKKyAgICBpbnQgcmlnaHQgPSBs
b3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKKyAgICBpbnQgdG9wID0g
dXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7CisgICAgaW50IGJvdHRvbSA9IGxvd2Vy
Qm91bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7CisgICAgYnVmZmVyLT5waXhlbHMo
KS0+c2V0UmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3Ap
KTsKIAogICAgIC8vIFVwZGF0ZSBvdXIgc3RhdHVzIHRvIGJlIHBhcnRpYWxseSBjb21wbGV0ZS4K
LSAgICBidWZmZXItPnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworICAgIGJ1
ZmZlci0+c2V0U3RhdHVzKEltYWdlRnJhbWU6OkRlY29kaW5nU3RhdHVzOjpQYXJ0aWFsKTsKIAog
ICAgIC8vIFJlc2V0IHRoZSBhbHBoYSBwaXhlbCB0cmFja2VyIGZvciB0aGlzIGZyYW1lLgogICAg
IG1fY3VycmVudEJ1ZmZlclNhd0FscGhhID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgK
aW5kZXggOTVlYzZkMGE3YjY5NjY1MmM3MDliN2I2MmQ0MWFhNGYzYWI4ZjFlMC4uMTRiMjlhNjhm
Yzc4ZGNmNDg2NzA1YmY1MDI4MDZkNjYzNzhmNWJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIu
aApAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJnaWYiOyB9CiAgICAg
ICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVk
KSBvdmVycmlkZTsKICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlkZTsKLSAg
ICAgICAgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJy
aWRlOworICAgICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAg
ICAgICBzaXplX3QgZnJhbWVDb3VudCgpIG92ZXJyaWRlOwogICAgICAgICBpbnQgcmVwZXRpdGlv
bkNvdW50KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVy
QXRJbmRleChzaXplX3QgaW5kZXgpIG92ZXJyaWRlOwpAQCAtNTYsMTMgKzU2LDEzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBDYWxsYmFja3MgZnJvbSB0aGUgR0lGIHJlYWRl
ci4KICAgICAgICAgYm9vbCBoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCBjb25z
dCBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIHJvd0J1ZmZlciwgc2l6ZV90IHdpZHRoLCBzaXplX3Qg
cm93TnVtYmVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4
ZWxzKTsKLSAgICAgICAgYm9vbCBmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVu
c2lnbmVkIGZyYW1lRHVyYXRpb24sIEltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlz
cG9zYWxNZXRob2QpOworICAgICAgICBib29sIGZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJ
bmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Qp
OwogICAgICAgICB2b2lkIGdpZkNvbXBsZXRlKCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICAv
LyBJZiB0aGUgcXVlcnkgaXMgR0lGRnVsbFF1ZXJ5LCBkZWNvZGVzIHRoZSBpbWFnZSB1cCB0byAo
YnV0IG5vdAotICAgICAgICAvLyBpbmNsdWRpbmcpIHxoYWx0QXRGcmFtZXwuICBPdGhlcndpc2Us
IGRlY29kZXMgYXMgbXVjaCBhcyBpcyBuZWVkZWQgdG8KLSAgICAgICAgLy8gYW5zd2VyIHRoZSBx
dWVyeSwgaWdub3JpbmcgYml0bWFwIGRhdGEuICBJZiBkZWNvZGluZyBmYWlscyBidXQgdGhlcmUK
KyAgICAgICAgLy8gaW5jbHVkaW5nKSB8aGFsdEF0RnJhbWV8LiBPdGhlcndpc2UsIGRlY29kZXMg
YXMgbXVjaCBhcyBpcyBuZWVkZWQgdG8KKyAgICAgICAgLy8gYW5zd2VyIHRoZSBxdWVyeSwgaWdu
b3JpbmcgYml0bWFwIGRhdGEuIElmIGRlY29kaW5nIGZhaWxzIGJ1dCB0aGVyZQogICAgICAgICAv
LyBpcyBubyBtb3JlIGRhdGEgY29taW5nLCBzZXRzIHRoZSAiZGVjb2RlIGZhaWx1cmUiIGZsYWcu
CiAgICAgICAgIHZvaWQgZGVjb2RlKHVuc2lnbmVkIGhhbHRBdEZyYW1lLCBHSUZRdWVyeSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCmluZGV4IDAwZDI1MmNlZmIwNWFhNTFmODRkOGRmOTkw
MjI5MGVmZDcxMDQyMmYuLjViODhhOTVmMzFhMWYwNTE5ZTgzMWE1YmZhYThmNDRhODRhYzRlZTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcApAQCAtNDQ3LDcgKzQ0Nyw3IEBAIGJvb2wgR0lG
SW1hZ2VSZWFkZXI6OnBhcnNlKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIGJvb2wg
cGFyc2VTaXplT25seSkKIAogICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVj
b2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KICAgICAgICAgICAgIC8vIE5vdGU6IEEgc3Vic2VxdWVu
dCBmcmFtZSBtaWdodCBoYXZlIGRpbWVuc2lvbnMgbGFyZ2VyIHRoYW4gdGhlICJzY3JlZW4iIGRp
bWVuc2lvbnMuCi0gICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRTaXpl
KG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkKKyAgICAgICAgICAgIGlmIChtX2NsaWVu
dCAmJiAhbV9jbGllbnQtPnNldFNpemUoV2ViQ29yZTo6SW50U2l6ZShtX3NjcmVlbldpZHRoLCBt
X3NjcmVlbkhlaWdodCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICAgICAgbV9zY3JlZW5CZ2NvbG9yID0gY3VycmVudENvbXBvbmVudFs1XTsKQEAgLTU2OCwxNCAr
NTY4LDE0IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnBhcnNlKHNpemVfdCBkYXRhUG9zaXRpb24s
IHNpemVfdCBsZW4sIGJvb2wgcGFyc2VTaXplT25seSkKIAogICAgICAgICAgICAgLy8gV2UgaWdu
b3JlIHRoZSAidXNlciBpbnB1dCIgYml0LgogCi0gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHJl
bGllcyBvbiB0aGUgdmFsdWVzIGluIHRoZSBGcmFtZURpc3Bvc2FsTWV0aG9kIGVudW0KKyAgICAg
ICAgICAgIC8vIE5PVEU6IFRoaXMgcmVsaWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIERpc3Bvc2Fs
TWV0aG9kIGVudW0KICAgICAgICAgICAgIC8vIG1hdGNoaW5nIHRob3NlIGluIHRoZSBHSUYgc3Bl
YyEKICAgICAgICAgICAgIGludCBkaXNwb3NhbE1ldGhvZCA9ICgoKmN1cnJlbnRDb21wb25lbnQp
ID4+IDIpICYgMHg3OwotICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2Q+KGRp
c3Bvc2FsTWV0aG9kKTsKKyAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2Qg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZD4oZGlzcG9z
YWxNZXRob2QpOwogICAgICAgICAgICAgLy8gU29tZSBzcGVjcyBzYXkgdGhhdCBkaXNwb3NhbCBt
ZXRob2QgMyBpcyAib3ZlcndyaXRlIHByZXZpb3VzIiwgb3RoZXJzIHRoYXQgc2V0dGluZwogICAg
ICAgICAgICAgLy8gdGhlIHRoaXJkIGJpdCBvZiB0aGUgZmllbGQgKGkuZS4gbWV0aG9kIDQpIGlz
LiBXZSBtYXAgYm90aCB0byB0aGUgc2FtZSB2YWx1ZS4KICAgICAgICAgICAgIGlmIChkaXNwb3Nh
bE1ldGhvZCA9PSA0KQotICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRo
b2QgPSBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXM7CisgICAg
ICAgICAgICAgICAgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCA9IFdlYkNvcmU6OkltYWdl
RnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91czsKICAgICAgICAgICAgIGN1
cnJlbnRGcmFtZS0+ZGVsYXlUaW1lID0gR0VUSU5UMTYoY3VycmVudENvbXBvbmVudCArIDEpICog
MTA7CiAgICAgICAgICAgICBHRVROKDEsIEdJRkNvbnN1bWVCbG9jayk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTY2NCw3ICs2NjQsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpwYXJzZShzaXpl
X3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBib29sIHBhcnNlU2l6ZU9ubHkpCiAgICAgICAg
ICAgICAgICAgeU9mZnNldCA9IDA7CiAKICAgICAgICAgICAgICAgICAvLyBDQUxMQkFDSzogSW5m
b3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgotICAgICAgICAgICAgICAgIGlmICht
X2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWln
aHQpKQorICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUo
V2ViQ29yZTo6SW50U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
UmVhZGVyLmgKaW5kZXggZWE0MmIxMWE3OGMzOGViZTY1YzJjMjhiOTFjOGFmYjYyNjM1YTk5OS4u
ZWY1YzFhNGM2M2FmYjIwYTIxYjYzOGI4OWYxMWQ5OTgxYzQxM2NiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
UmVhZGVyLmgKQEAgLTE1NSw3ICsxNTUsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgd2lkdGg7
CiAgICAgdW5zaWduZWQgaGVpZ2h0OwogICAgIGludCB0cGl4ZWw7IC8vIEluZGV4IG9mIHRyYW5z
cGFyZW50IHBpeGVsLgotICAgIFdlYkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRo
b2QgZGlzcG9zYWxNZXRob2Q7IC8vIFJlc3RvcmUgdG8gYmFja2dyb3VuZCwgbGVhdmUgaW4gcGxh
Y2UsIGV0Yy4KKyAgICBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZCBkaXNwb3Nh
bE1ldGhvZDsgLy8gUmVzdG9yZSB0byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwgZXRjLgog
ICAgIHNpemVfdCBsb2NhbENvbG9ybWFwUG9zaXRpb247IC8vIFBlci1pbWFnZSBjb2xvcm1hcC4K
ICAgICBpbnQgbG9jYWxDb2xvcm1hcFNpemU7IC8vIFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJy
YXkuCiAgICAgaW50IGRhdGFzaXplOwpAQCAtMTc0LDcgKzE3NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLCB3aWR0aCgwKQogICAgICAgICAsIGhlaWdodCgwKQogICAgICAgICAsIHRwaXhlbCgwKQot
ICAgICAgICAsIGRpc3Bvc2FsTWV0aG9kKFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2VOb3RT
cGVjaWZpZWQpCisgICAgICAgICwgZGlzcG9zYWxNZXRob2QoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
RGlzcG9zYWxNZXRob2Q6Ok5vdFNwZWNpZmllZCkKICAgICAgICAgLCBsb2NhbENvbG9ybWFwUG9z
aXRpb24oMCkKICAgICAgICAgLCBsb2NhbENvbG9ybWFwU2l6ZSgwKQogICAgICAgICAsIGRhdGFz
aXplKDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCmluZGV4IGE1OTIwMWI1NmU1YjIyZTJh
ODUxYzBjOTkyZWE0YjFmODhjYzNiNGYuLjkzNDUxZDBiYzJiNzRkODc4ODJhOTAzYzJjMWQwMjA3
NTIxNzJkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCkBAIC04OCwyMSArODgsMjAg
QEAgSW50U2l6ZSBJQ09JbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4
LCBTdWJzYW1wbGluZ0xldmVsKQogICAgIHJldHVybiAoaW5kZXggJiYgKGluZGV4IDwgbV9kaXJF
bnRyaWVzLnNpemUoKSkpID8gbV9kaXJFbnRyaWVzW2luZGV4XS5tX3NpemUgOiBzaXplKCk7CiB9
CiAKLWJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQpCitib29sIElDT0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBz
aXplKQogewogICAgIC8vIFRoZSBzaXplIGNhbGN1bGF0ZWQgaW5zaWRlIHRoZSBCTVBJbWFnZVJl
YWRlciBoYWQgYmV0dGVyIG1hdGNoIHRoZSBvbmUgaW4KICAgICAvLyB0aGUgaWNvbiBkaXJlY3Rv
cnkuCi0gICAgcmV0dXJuIG1fZnJhbWVTaXplLmlzRW1wdHkoKSA/IEltYWdlRGVjb2Rlcjo6c2V0
U2l6ZSh3aWR0aCwgaGVpZ2h0KSA6ICgoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSA9PSBtX2ZyYW1l
U2l6ZSkgfHwgc2V0RmFpbGVkKCkpOworICAgIHJldHVybiBtX2ZyYW1lU2l6ZS5pc0VtcHR5KCkg
PyBJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSkgOiAoKHNpemUgPT0gbV9mcmFtZVNpemUpIHx8
IHNldEZhaWxlZCgpKTsKIH0KIAogc2l6ZV90IElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgp
CiB7CiAgICAgZGVjb2RlKDAsIHRydWUpOwotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNF
bXB0eSgpKSB7CisKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKICAgICAg
ICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShtX2RpckVudHJpZXMuc2l6ZSgpKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RpckVudHJpZXMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbaV0uc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11
bHRpcGx5QWxwaGEpOwotICAgIH0KKwogICAgIC8vIENBVVRJT046IFdlIG11c3Qgbm90IHJlc2l6
ZSBtX2ZyYW1lQnVmZmVyQ2FjaGUgYWdhaW4gYWZ0ZXIgdGhpcywgYXMKICAgICAvLyBkZWNvZGVB
dEluZGV4KCkgbWF5IGdpdmUgYSBCTVBJbWFnZVJlYWRlciBhIHBvaW50ZXIgdG8gb25lIG9mIHRo
ZQogICAgIC8vIGVudHJpZXMuCkBAIC0xMTYsNyArMTE1LDcgQEAgSW1hZ2VGcmFtZSogSUNPSW1h
Z2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5k
ZXhdOwotICAgIGlmIChidWZmZXItPnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxl
dGUpCisgICAgaWYgKCFidWZmZXItPmlzQ29tcGxldGUoKSkKICAgICAgICAgZGVjb2RlKGluZGV4
LCBmYWxzZSk7CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KQEAgLTE3OSw3ICsxNzgsNyBAQCB2b2lk
IElDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKHNpemVfdCBpbmRleCwgYm9vbCBvbmx5U2l6ZSkKICAg
ICAvLyBJZiB3ZSdyZSBkb25lIGRlY29kaW5nIHRoaXMgZnJhbWUsIHdlIGRvbid0IG5lZWQgdGhl
IEJNUEltYWdlUmVhZGVyIG9yCiAgICAgLy8gUE5HSW1hZ2VEZWNvZGVyIGFueW1vcmUuICAoSWYg
d2UgZmFpbGVkLCB0aGVzZSBoYXZlIGFscmVhZHkgYmVlbgogICAgIC8vIGNsZWFyZWQuKQotICAg
IGVsc2UgaWYgKChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpID4gaW5kZXgpICYmIChtX2ZyYW1l
QnVmZmVyQ2FjaGVbaW5kZXhdLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUp
KSB7CisgICAgZWxzZSBpZiAoKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPiBpbmRleCkgJiYg
KG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF0uaXNDb21wbGV0ZSgpKSkgewogICAgICAgICBtX2Jt
cFJlYWRlcnNbaW5kZXhdID0gbnVsbHB0cjsKICAgICAgICAgbV9wbmdEZWNvZGVyc1tpbmRleF0g
PSBudWxscHRyOwogICAgIH0KQEAgLTIyMCw3ICsyMTksNyBAQCBib29sIElDT0ltYWdlRGVjb2Rl
cjo6ZGVjb2RlQXRJbmRleChzaXplX3QgaW5kZXgpCiAKICAgICBpZiAoIW1fcG5nRGVjb2RlcnNb
aW5kZXhdKSB7CiAgICAgICAgIG1fcG5nRGVjb2RlcnNbaW5kZXhdID0gc3RkOjptYWtlX3VuaXF1
ZTwKLSAgICAgICAgICAgIFBOR0ltYWdlRGVjb2Rlcj4obV9wcmVtdWx0aXBseUFscGhhID8gSW1h
Z2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCA6IEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11
bHRpcGxpZWQsCisgICAgICAgICAgICBQTkdJbWFnZURlY29kZXI+KHByZW11bHRpcGx5QWxwaGEo
KSA/IEltYWdlU291cmNlOjpBbHBoYVByZW11bHRpcGxpZWQgOiBJbWFnZVNvdXJjZTo6QWxwaGFO
b3RQcmVtdWx0aXBsaWVkLAogICAgICAgICAgICAgICAgIG1faWdub3JlR2FtbWFBbmRDb2xvclBy
b2ZpbGUgPyBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVJZ25vcmVkIDogSW1hZ2VT
b3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCk7CiAgICAgICAgIHNldERhdGFGb3JQ
TkdEZWNvZGVyQXRJbmRleChpbmRleCk7CiAgICAgfQpAQCAtMjc5LDcgKzI3OCw3IEBAIGJvb2wg
SUNPSW1hZ2VEZWNvZGVyOjpwcm9jZXNzRGlyZWN0b3J5RW50cmllcygpCiAgICAgY29uc3QgSWNv
bkRpcmVjdG9yeUVudHJ5JiBkaXJFbnRyeSA9IG1fZGlyRW50cmllcy5maXJzdCgpOwogICAgIC8v
IFRlY2huaWNhbGx5LCB0aGlzIG5leHQgY2FsbCBzaG91bGRuJ3QgYmUgYWJsZSB0byBmYWlsLCBz
aW5jZSB0aGUgd2lkdGgKICAgICAvLyBhbmQgaGVpZ2h0IGhlcmUgYXJlIGVhY2ggPD0gMjU2LCBh
bmQgfG1fZnJhbWVTaXplfCBpcyBlbXB0eS4KLSAgICByZXR1cm4gc2V0U2l6ZShkaXJFbnRyeS5t
X3NpemUud2lkdGgoKSwgZGlyRW50cnkubV9zaXplLmhlaWdodCgpKTsKKyAgICByZXR1cm4gc2V0
U2l6ZShkaXJFbnRyeS5tX3NpemUpOwogfQogCiBJQ09JbWFnZURlY29kZXI6Okljb25EaXJlY3Rv
cnlFbnRyeSBJQ09JbWFnZURlY29kZXI6OnJlYWREaXJlY3RvcnlFbnRyeSgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNv
ZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1h
Z2VEZWNvZGVyLmgKaW5kZXggNTgwYzY3YTg4M2E0MGI2ZTU0MjBmNjVhZTM0NDg4NDU3NDE5Mzhl
Yy4uZDMzZDA1OGExNTk2MDdkZjg5MzljZWExY2Q3YTZmMzE0NGI3MjJlMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09J
bWFnZURlY29kZXIuaApAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgb3ZlcnJpZGU7CiAgICAgICAgIEludFNpemUgc2l6
ZSgpIG92ZXJyaWRlOwogICAgICAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBT
dWJzYW1wbGluZ0xldmVsKSBvdmVycmlkZTsKLSAgICAgICAgYm9vbCBzZXRTaXplKHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlOworICAgICAgICBib29sIHNldFNpemUo
Y29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgICAgICBzaXplX3QgZnJhbWVDb3VudCgpIG92
ZXJyaWRlOwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KSBv
dmVycmlkZTsKICAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVkKCkgZGVsZXRlcyBhbGwgcmVh
ZGVycyBhbmQgZGVjb2RlcnMuICBCZSBjYXJlZnVsIHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmNwcAppbmRleCBlZTY2YWMxNGQ0YmUwN2NhOWFmZmIyYTNhZmY4OWViZmE2MmZiMTJlLi42
MjIyYWUzYjEwYjEzYzg1NmE4NWY4OTVhYzc0ZGEwOTZlMzQ2Y2FiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5jcHAKQEAgLTE5NiwzNiArMTk2LDYgQEAgc3RhdGljIEltYWdlT3JpZW50
YXRpb24gcmVhZEltYWdlT3JpZW50YXRpb24oanBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5mbykK
ICAgICByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOwogfQogCi1zdGF0aWMgQ29sb3JQcm9maWxl
IHJlYWRDb2xvclByb2ZpbGUoanBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5mbykKLXsKLSNpZiBV
U0UoSUNDSlBFRykKLSAgICBKT0NURVQqIHByb2ZpbGU7Ci0gICAgdW5zaWduZWQgaW50IHByb2Zp
bGVMZW5ndGg7Ci0KLSAgICBpZiAoIXJlYWRfaWNjX3Byb2ZpbGUoaW5mbywgJnByb2ZpbGUsICZw
cm9maWxlTGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIENvbG9yUHJvZmlsZSgpOwotCi0gICAgLy8g
T25seSBhY2NlcHQgUkdCIGNvbG9yIHByb2ZpbGVzIGZyb20gaW5wdXQgY2xhc3MgZGV2aWNlcy4K
LSAgICBib29sIGlnbm9yZVByb2ZpbGUgPSBmYWxzZTsKLSAgICBjaGFyKiBwcm9maWxlRGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHByb2ZpbGUpOwotICAgIGlmIChwcm9maWxlTGVuZ3Ro
IDwgSW1hZ2VEZWNvZGVyOjppY2NDb2xvclByb2ZpbGVIZWFkZXJMZW5ndGgpCi0gICAgICAgIGln
bm9yZVByb2ZpbGUgPSB0cnVlOwotICAgIGVsc2UgaWYgKCFJbWFnZURlY29kZXI6OnJnYkNvbG9y
UHJvZmlsZShwcm9maWxlRGF0YSwgcHJvZmlsZUxlbmd0aCkpCi0gICAgICAgIGlnbm9yZVByb2Zp
bGUgPSB0cnVlOwotICAgIGVsc2UgaWYgKCFJbWFnZURlY29kZXI6OmlucHV0RGV2aWNlQ29sb3JQ
cm9maWxlKHByb2ZpbGVEYXRhLCBwcm9maWxlTGVuZ3RoKSkKLSAgICAgICAgaWdub3JlUHJvZmls
ZSA9IHRydWU7Ci0KLSAgICBDb2xvclByb2ZpbGUgY29sb3JQcm9maWxlOwotICAgIGlmICghaWdu
b3JlUHJvZmlsZSkKLSAgICAgICAgY29sb3JQcm9maWxlLmFwcGVuZChwcm9maWxlRGF0YSwgcHJv
ZmlsZUxlbmd0aCk7Ci0gICAgZnJlZShwcm9maWxlKTsKLSAgICByZXR1cm4gY29sb3JQcm9maWxl
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaW5mbyk7Ci0gICAgcmV0dXJuIENvbG9yUHJvZmls
ZSgpOwotI2VuZGlmCi19Ci0KIGNsYXNzIEpQRUdJbWFnZVJlYWRlciB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0zNTIsNyArMzIyLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfU1RBUlRfREVDT01QUkVTUzsKIAogICAgICAgICAgICAg
Ly8gV2UgY2FuIGZpbGwgaW4gdGhlIHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFi
bGUuCi0gICAgICAgICAgICBpZiAoIW1fZGVjb2Rlci0+c2V0U2l6ZShtX2luZm8uaW1hZ2Vfd2lk
dGgsIG1faW5mby5pbWFnZV9oZWlnaHQpKQorICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNl
dFNpemUoSW50U2l6ZShtX2luZm8uaW1hZ2Vfd2lkdGgsIG1faW5mby5pbWFnZV9oZWlnaHQpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIG1fZGVjb2Rlci0+
c2V0T3JpZW50YXRpb24ocmVhZEltYWdlT3JpZW50YXRpb24oaW5mbygpKSk7CkBAIC0zNjMsMTMg
KzMzMyw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChtX2RlY29kZXItPndpbGxEb3duU2Ft
cGxlKCkgJiYgdHVyYm9Td2l6emxlZChtX2luZm8ub3V0X2NvbG9yX3NwYWNlKSkKICAgICAgICAg
ICAgICAgICBtX2luZm8ub3V0X2NvbG9yX3NwYWNlID0gSkNTX1JHQjsKICNlbmRpZgotICAgICAg
ICAgICAgLy8gQWxsb3cgY29sb3IgbWFuYWdlbWVudCBvZiB0aGUgZGVjb2RlZCBSR0JBIHBpeGVs
cyBpZiBwb3NzaWJsZS4KLSAgICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5pZ25vcmVzR2FtbWFB
bmRDb2xvclByb2ZpbGUoKSkgewotICAgICAgICAgICAgICAgIENvbG9yUHJvZmlsZSByZ2JJbnB1
dERldmljZUNvbG9yUHJvZmlsZSA9IHJlYWRDb2xvclByb2ZpbGUoaW5mbygpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXJnYklucHV0RGV2aWNlQ29sb3JQcm9maWxlLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRDb2xvclByb2ZpbGUocmdiSW5wdXREZXZpY2VD
b2xvclByb2ZpbGUpOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAvLyBEb24ndCBhbGxv
Y2F0ZSBhIGdpYW50IGFuZCBzdXBlcmZsdW91cyBtZW1vcnkgYnVmZmVyIHdoZW4gdGhlCiAgICAg
ICAgICAgICAvLyBpbWFnZSBpcyBhIHNlcXVlbnRpYWwgSlBFRy4KICAgICAgICAgICAgIG1faW5m
by5idWZmZXJlZF9pbWFnZSA9IGpwZWdfaGFzX211bHRpcGxlX3NjYW5zKCZtX2luZm8pOwpAQCAt
NTU2LDkgKzUxOSw5IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkK
ICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAotYm9vbCBK
UEVHSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQp
Citib29sIEpQRUdJbWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsK
LSAgICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAo
IUltYWdlRGVjb2Rlcjo6c2V0U2l6ZShzaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC01NzAsMTMgKzUzMywxMSBAQCBJ
bWFnZUZyYW1lKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQogICAgIGlmIChpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobV9mcmFt
ZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkgeworICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNF
bXB0eSgpKQogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwotICAgICAgICBt
X2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxw
aGEpOwotICAgIH0KIAogICAgIEltYWdlRnJhbWUmIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hl
WzBdOwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRl
KQorICAgIGlmICghZnJhbWUuaXNDb21wbGV0ZSgpKQogICAgICAgICBkZWNvZGUoZmFsc2UpOwog
ICAgIHJldHVybiAmZnJhbWU7CiB9CkBAIC01ODgsMTMgKzU0OSwxMyBAQCBib29sIEpQRUdJbWFn
ZURlY29kZXI6OnNldEZhaWxlZCgpCiB9CiAKIHRlbXBsYXRlIDxKX0NPTE9SX1NQQUNFIGNvbG9y
U3BhY2U+Ci12b2lkIHNldFBpeGVsKEltYWdlRnJhbWUmIGJ1ZmZlciwgSW1hZ2VGcmFtZTo6UGl4
ZWxEYXRhKiBjdXJyZW50QWRkcmVzcywgSlNBTVBBUlJBWSBzYW1wbGVzLCBpbnQgY29sdW1uKQor
dm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIFJHQkEzMiogY3VycmVudEFkZHJlc3Ms
IEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKIHsKICAgICBKU0FNUExFKiBqc2FtcGxl
ID0gKnNhbXBsZXMgKyBjb2x1bW4gKiAoY29sb3JTcGFjZSA9PSBKQ1NfUkdCID8gMyA6IDQpOwog
CiAgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7CiAgICAgY2FzZSBKQ1NfUkdCOgotICAgICAgICBi
dWZmZXIuc2V0UkdCQShjdXJyZW50QWRkcmVzcywganNhbXBsZVswXSwganNhbXBsZVsxXSwganNh
bXBsZVsyXSwgMHhGRik7CisgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdCQShjdXJyZW50
QWRkcmVzcywganNhbXBsZVswXSwganNhbXBsZVsxXSwganNhbXBsZVsyXSwgMHhGRik7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSkNTX0NNWUs6CiAgICAgICAgIC8vIFNvdXJjZSBpcyAnSW52
ZXJ0ZWQgQ01ZSycsIG91dHB1dCBpcyBSR0IuCkBAIC02MDcsNyArNTY4LDcgQEAgdm9pZCBzZXRQ
aXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFk
ZHJlc3MsIEpTQU1QQVIKICAgICAgICAgLy8gRnJvbSBDTVkgKDAuLjEpIHRvIFJHQiAoMC4uMSk6
CiAgICAgICAgIC8vIFIgPSAxIC0gQyA9PiAxIC0gKDEgLSBpQyppSykgPT4gaUMqaUsgIFtHIGFu
ZCBCIHNpbWlsYXJdCiAgICAgICAgIHVuc2lnbmVkIGsgPSBqc2FtcGxlWzNdOwotICAgICAgICBi
dWZmZXIuc2V0UkdCQShjdXJyZW50QWRkcmVzcywganNhbXBsZVswXSAqIGsgLyAyNTUsIGpzYW1w
bGVbMV0gKiBrIC8gMjU1LCBqc2FtcGxlWzJdICogayAvIDI1NSwgMHhGRik7CisgICAgICAgIGJ1
ZmZlci5waXhlbHMoKS0+c2V0UkdCQShjdXJyZW50QWRkcmVzcywganNhbXBsZVswXSAqIGsgLyAy
NTUsIGpzYW1wbGVbMV0gKiBrIC8gMjU1LCBqc2FtcGxlWzJdICogayAvIDI1NSwgMHhGRik7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTYzMSw3ICs1OTIsNyBAQCBib29sIEpQRUdJbWFn
ZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyhJbWFnZUZyYW1lJiBidWZmZXIpCiAgICAgICAgIGlm
IChkZXN0WSA8IDApCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBJbWFnZUZyYW1l
OjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgZGVzdFkpOwor
ICAgICAgICBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLnBpeGVscygpLmF0KDAsIGRl
c3RZKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CiAgICAgICAg
ICAgICBzZXRQaXhlbDxjb2xvclNwYWNlPihidWZmZXIsIGN1cnJlbnRBZGRyZXNzLCBzYW1wbGVz
LCBpc1NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpOwogICAgICAgICAgICAgKytjdXJy
ZW50QWRkcmVzczsKQEAgLTY1MywxNyArNjE0LDEzIEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6
b3V0cHV0U2NhbmxpbmVzKCkKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlm
IG5lZWRlZC4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07
Ci0gICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7Ci0g
ICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNp
emUoKS5oZWlnaHQoKSkpCisgICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYg
KCFidWZmZXIuaW5pdFBpeGVscyhzY2FsZWRTaXplKCksIHByZW11bHRpcGx5QWxwaGEoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7Ci0gICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMo
SW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJbWFn
ZUZyYW1lOjpEZWNvZGluZ1N0YXR1czo6UGFydGlhbCk7CiAgICAgICAgIC8vIFRoZSBidWZmZXIg
aXMgdHJhbnNwYXJlbnQgb3V0c2lkZSB0aGUgZGVjb2RlZCBhcmVhIHdoaWxlIHRoZSBpbWFnZSBp
cwogICAgICAgICAvLyBsb2FkaW5nLiBUaGUgY29tcGxldGVkIGltYWdlIHdpbGwgYmUgbWFya2Vk
IGZ1bGx5IG9wYXF1ZSBpbiBqcGVnQ29tcGxldGUoKS4KICAgICAgICAgYnVmZmVyLnNldEhhc0Fs
cGhhKHRydWUpOwotICAgICAgICBidWZmZXIuc2V0Q29sb3JQcm9maWxlKG1fY29sb3JQcm9maWxl
KTsKLQotICAgICAgICAvLyBGb3IgSlBFR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVu
dGlyZSBpbWFnZS4KLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3Qo
SW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAganBlZ19kZWNvbXByZXNzX3N0cnVj
dCogaW5mbyA9IG1fcmVhZGVyLT5pbmZvKCk7CkBAIC02NzEsNyArNjI4LDcgQEAgYm9vbCBKUEVH
SW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogI2lmIGRlZmluZWQoVFVSQk9fSlBFR19S
R0JfU1dJWlpMRSkKICAgICBpZiAoIW1fc2NhbGVkICYmIHR1cmJvU3dpenpsZWQoaW5mby0+b3V0
X2NvbG9yX3NwYWNlKSkgewogICAgICAgICB3aGlsZSAoaW5mby0+b3V0cHV0X3NjYW5saW5lIDwg
aW5mby0+b3V0cHV0X2hlaWdodCkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcm93ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oYnVmZmVyLmdldEFkZHIoMCwgaW5mby0+
b3V0cHV0X3NjYW5saW5lKSk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3cgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihidWZmZXIucGl4ZWxzKCktPmF0KDAsIGluZm8t
Pm91dHB1dF9zY2FubGluZSkpOwogICAgICAgICAgICAgaWYgKGpwZWdfcmVhZF9zY2FubGluZXMo
aW5mbywgJnJvdywgMSkgIT0gMSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICB9CkBAIC03MDQsNyArNjYxLDcgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpqcGVnQ29t
cGxldGUoKQogICAgIC8vIGVtcHR5LgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVC
dWZmZXJDYWNoZVswXTsKICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwotICAgIGJ1ZmZl
ci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CisgICAgYnVmZmVyLnNldFN0
YXR1cyhJbWFnZUZyYW1lOjpEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUpOwogfQogCiB2b2lkIEpQ
RUdJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTaXplKQpAQCAtNzIxLDcgKzY3OCw3IEBA
IHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCiAgICAgICAgIHNl
dEZhaWxlZCgpOwogICAgIC8vIElmIHdlJ3JlIGRvbmUgZGVjb2RpbmcgdGhlIGltYWdlLCB3ZSBk
b24ndCBuZWVkIHRoZSBKUEVHSW1hZ2VSZWFkZXIKICAgICAvLyBhbnltb3JlLiAgKElmIHdlIGZh
aWxlZCwgfG1fcmVhZGVyfCBoYXMgYWxyZWFkeSBiZWVuIGNsZWFyZWQuKQotICAgIGVsc2UgaWYg
KCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0u
c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkpCisgICAgZWxzZSBpZiAoIW1f
ZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgKG1fZnJhbWVCdWZmZXJDYWNoZVswXS5pc0Nv
bXBsZXRlKCkpKQogICAgICAgICBtX3JlYWRlciA9IG51bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmgKaW5kZXggNmMxZmMwNDI3MzIyMDM3NWJjNmEyNWVjMTk4ZjhjOGE1MTAx
NDg2Yy4uZmMyM2ZiZDk2MzdiNTNhZWU2NjUzM2I2YWFiNGY3YjI2OGRjMGVjMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VE
ZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBl
Zy9KUEVHSW1hZ2VEZWNvZGVyLmgKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAvLyBJbWFnZURlY29kZXIKICAgICAgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5z
aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gImpwZyI7IH0KICAgICAgICAgYm9vbCBpc1Np
emVBdmFpbGFibGUoKSBvdmVycmlkZTsKLSAgICAgICAgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlOworICAgICAgICBib29sIHNldFNpemUoY29u
c3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVycmlkZTsKICAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFp
bGVkKCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAogICAgICAgICAv
LyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMg
ZnJvbSBpbnNpZGUKQEAgLTY2LDcgKzY2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIG91dHB1dFNjYW5saW5lcygpOwogICAgICAgICB2b2lkIGpwZWdDb21wbGV0ZSgpOwog
Ci0gICAgICAgIHZvaWQgc2V0Q29sb3JQcm9maWxlKGNvbnN0IENvbG9yUHJvZmlsZSYgY29sb3JQ
cm9maWxlKSB7IG1fY29sb3JQcm9maWxlID0gY29sb3JQcm9maWxlOyB9CiAgICAgICAgIHZvaWQg
c2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0
aW9uID0gb3JpZW50YXRpb247IH0KIAogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuY3BwCmluZGV4IGU2NDRhNzExMGVmY2I1NDBkODljZTFiYTgxMTAwYmM0ODIzYjE4ZjIuLmI5
OGIyYWViMWEwOTMwMjU2YmE0ZGFhNjg0YWQ2OWJhNzJiNmM2Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuY3BwCkBAIC0yMzUsOSArMjM1LDkgQEAgYm9vbCBQTkdJbWFnZURlY29kZXI6Omlz
U2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxl
KCk7CiB9CiAKLWJvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQpCitib29sIFBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWln
aHQpKQorICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTI1Nywx
MyArMjU3LDExIEBAIEltYWdlRnJhbWUqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdElu
ZGV4KHNpemVfdCBpbmRleCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIAotICAg
IGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fZnJhbWVCdWZm
ZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7
Ci0gICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJl
bXVsdGlwbHlBbHBoYSk7Ci0gICAgfQogCiAgICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1l
QnVmZmVyQ2FjaGVbaW5kZXhdOwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBJbWFnZUZyYW1l
OjpGcmFtZUNvbXBsZXRlKQorICAgIGlmICghZnJhbWUuaXNDb21wbGV0ZSgpKQogICAgICAgICBk
ZWNvZGUoZmFsc2UsIGluZGV4KTsKICAgICByZXR1cm4gJmZyYW1lOwogfQpAQCAtMjc2LDM3ICsy
NzQsNiBAQCBib29sIFBOR0ltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKCkKICAgICByZXR1cm4gSW1h
Z2VEZWNvZGVyOjpzZXRGYWlsZWQoKTsKIH0KIAotc3RhdGljIHZvaWQgcmVhZENvbG9yUHJvZmls
ZShwbmdfc3RydWN0cCBwbmcsIHBuZ19pbmZvcCBpbmZvLCBDb2xvclByb2ZpbGUmIGNvbG9yUHJv
ZmlsZSkKLXsKLSAgICBBU1NFUlQoY29sb3JQcm9maWxlLmlzRW1wdHkoKSk7Ci0KLSNpZmRlZiBQ
TkdfaUNDUF9TVVBQT1JURUQKLSAgICBjaGFyKiBwcm9maWxlTmFtZTsKLSAgICBpbnQgY29tcHJl
c3Npb25UeXBlOwotI2lmIChQTkdfTElCUE5HX1ZFUiA8IDEwNTAwKQotICAgIHBuZ19jaGFycCBw
cm9maWxlOwotI2Vsc2UKLSAgICBwbmdfYnl0ZXAgcHJvZmlsZTsKLSNlbmRpZgotICAgIHBuZ191
aW50XzMyIHByb2ZpbGVMZW5ndGg7Ci0gICAgaWYgKCFwbmdfZ2V0X2lDQ1AocG5nLCBpbmZvLCAm
cHJvZmlsZU5hbWUsICZjb21wcmVzc2lvblR5cGUsICZwcm9maWxlLCAmcHJvZmlsZUxlbmd0aCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE9ubHkgYWNjZXB0IFJHQiBjb2xvciBwcm9maWxl
cyBmcm9tIGlucHV0IGNsYXNzIGRldmljZXMuCi0gICAgYm9vbCBpZ25vcmVQcm9maWxlID0gZmFs
c2U7Ci0gICAgY2hhciogcHJvZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihwcm9m
aWxlKTsKLSAgICBpZiAocHJvZmlsZUxlbmd0aCA8IEltYWdlRGVjb2Rlcjo6aWNjQ29sb3JQcm9m
aWxlSGVhZGVyTGVuZ3RoKQotICAgICAgICBpZ25vcmVQcm9maWxlID0gdHJ1ZTsKLSAgICBlbHNl
IGlmICghSW1hZ2VEZWNvZGVyOjpyZ2JDb2xvclByb2ZpbGUocHJvZmlsZURhdGEsIHByb2ZpbGVM
ZW5ndGgpKQotICAgICAgICBpZ25vcmVQcm9maWxlID0gdHJ1ZTsKLSAgICBlbHNlIGlmICghSW1h
Z2VEZWNvZGVyOjppbnB1dERldmljZUNvbG9yUHJvZmlsZShwcm9maWxlRGF0YSwgcHJvZmlsZUxl
bmd0aCkpCi0gICAgICAgIGlnbm9yZVByb2ZpbGUgPSB0cnVlOwotCi0gICAgaWYgKCFpZ25vcmVQ
cm9maWxlKQotICAgICAgICBjb2xvclByb2ZpbGUuYXBwZW5kKHByb2ZpbGVEYXRhLCBwcm9maWxl
TGVuZ3RoKTsKLSNlbmRpZgotfQotCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxh
YmxlKCkKIHsKICAgICBwbmdfc3RydWN0cCBwbmcgPSBtX3JlYWRlci0+cG5nUHRyKCk7CkBAIC0z
MjYsNyArMjkzLDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgpCiAg
ICAgLy8gd2lsbCBjZWFzZSB0byBleGlzdC4gIE5vdGUgdGhhdCB3ZSdsbCBzdGlsbCBwcm9wZXJs
eSBzZXQgdGhlIGZhaWx1cmUgZmxhZwogICAgIC8vIGluIHRoaXMgY2FzZSBhcyBzb29uIGFzIHdl
IGxvbmdqbXAoKS4KICAgICBtX2RvTm90aGluZ09uRmFpbHVyZSA9IHRydWU7Ci0gICAgYm9vbCBy
ZXN1bHQgPSBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIGJvb2wgcmVzdWx0ID0gc2V0U2l6
ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKICAgICBtX2RvTm90aGluZ09uRmFpbHVyZSA9IGZh
bHNlOwogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIGxvbmdqbXAoSk1QQlVGKHBuZyksIDEp
OwpAQCAtNDA1LDE2ICszNzIsNiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxh
YmxlKCkKICAgICBpZiAoY29sb3JUeXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVkgfHwgY29sb3JU
eXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVlfQUxQSEEpCiAgICAgICAgIHBuZ19zZXRfZ3JheV90
b19yZ2IocG5nKTsKIAotICAgIGlmICgoY29sb3JUeXBlICYgUE5HX0NPTE9SX01BU0tfQ09MT1Ip
ICYmICFtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKSB7Ci0gICAgICAgIC8vIFdlIG9ubHkg
c3VwcG9ydCBjb2xvciBwcm9maWxlcyBmb3IgY29sb3IgUEFMRVRURSBhbmQgUkdCW0FdIFBORy4g
U3VwcG9ydGluZwotICAgICAgICAvLyBjb2xvciBwcm9maWxlcyBmb3IgZ3JheS1zY2FsZSBpbWFn
ZXMgaXMgc2xpZ2h0bHkgdHJpY2t5LCBhdCBsZWFzdCB1c2luZyB0aGUKLSAgICAgICAgLy8gQ29y
ZUdyYXBoaWNzIElDQyBsaWJyYXJ5LCBiZWNhdXNlIHdlIGV4cGFuZCBncmF5LXNjYWxlIGltYWdl
cyB0byBSR0IgYnV0IHdlCi0gICAgICAgIC8vIGRvIG5vdCBzaW1pbGFybHkgdHJhbnNmb3JtIHRo
ZSBjb2xvciBwcm9maWxlLiBXZSdkIGVpdGhlciBuZWVkIHRvIHRyYW5zZm9ybQotICAgICAgICAv
LyB0aGUgY29sb3IgcHJvZmlsZSBvciB3ZSdkIG5lZWQgdG8gZGVjb2RlIGludG8gYSBncmF5LXNj
YWxlIGltYWdlIGJ1ZmZlciBhbmQKLSAgICAgICAgLy8gaGFuZCB0aGF0IHRvIENvcmVHcmFwaGlj
cy4KLSAgICAgICAgcmVhZENvbG9yUHJvZmlsZShwbmcsIGluZm8sIG1fY29sb3JQcm9maWxlKTsK
LSAgICB9Ci0KICAgICAvLyBEZWFsIHdpdGggZ2FtbWEgYW5kIGtlZXAgaXQgdW5kZXIgb3VyIGNv
bnRyb2wuCiAgICAgZG91YmxlIGdhbW1hOwogICAgIGlmICghbV9pZ25vcmVHYW1tYUFuZENvbG9y
UHJvZmlsZSAmJiBwbmdfZ2V0X2dBTUEocG5nLCBpbmZvLCAmZ2FtbWEpKSB7CkBAIC00NTIsMTkg
KzQwOSwxOSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICB9
CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihJbWFnZUZyYW1lOjpQaXhlbERh
dGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJH
QihSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKIHsKICAgICAqZGVzdCA9IDB4RkYwMDAw
MDBVIHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0
LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCitz
dGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBp
eGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVk
IGNoYXIgYSA9IHBpeGVsWzNdOwogICAgICpkZXN0ID0gYSA8PCAyNCB8IHBpeGVsWzBdIDw8IDE2
IHwgcGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJdOwogICAgIG5vblRyaXZpYWxBbHBoYU1hc2sgfD0g
KDI1NSAtIGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQcmVtdWx0aXBsaWVk
UkdCQShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWdu
ZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhl
bFByZW11bHRpcGxpZWRSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25l
ZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBp
eGVsWzNdOwogICAgIHVuc2lnbmVkIGNoYXIgciA9IGZhc3REaXZpZGVCeTI1NShwaXhlbFswXSAq
IGEpOwpAQCAtNDg2LDkgKzQ0Myw5IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFi
bGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICAgICAg
cmV0dXJuOwogI2VuZGlmCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNh
Y2hlW21fY3VycmVudEZyYW1lXTsKLSAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJh
bWU6OkZyYW1lRW1wdHkpIHsKKyAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkgewogICAgICAgICBw
bmdfc3RydWN0cCBwbmcgPSBtX3JlYWRlci0+cG5nUHRyKCk7Ci0gICAgICAgIGlmICghYnVmZmVy
LnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpIHsK
KyAgICAgICAgaWYgKCFidWZmZXIuaW5pdFBpeGVscyhzY2FsZWRTaXplKCksIHByZW11bHRpcGx5
QWxwaGEoKSkpIHsKICAgICAgICAgICAgIGxvbmdqbXAoSk1QQlVGKHBuZyksIDEpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01MDQsMTcgKzQ2MSwxMyBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWdu
ZWQgcm93SW5kZXgsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBidWZmZXIu
c2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CisgICAgICAgIGJ1ZmZlci5zZXRT
dGF0dXMoSW1hZ2VGcmFtZTo6RGVjb2RpbmdTdGF0dXM6OlBhcnRpYWwpOwogICAgICAgICBidWZm
ZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwotICAgICAgICBidWZmZXIuc2V0Q29sb3JQcm9maWxlKG1f
Y29sb3JQcm9maWxlKTsKIAogI2lmIEVOQUJMRShBUE5HKQogICAgICAgICBpZiAobV9jdXJyZW50
RnJhbWUpCiAgICAgICAgICAgICBpbml0RnJhbWVCdWZmZXIobV9jdXJyZW50RnJhbWUpOwotICAg
ICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgLy8gRm9yIFBOR3MsIHRoZSBmcmFtZSBhbHdheXMg
ZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVS
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgLyogbGlicG5n
IGNvbW1lbnRzIChoZXJlIHRvIGV4cGxhaW4gd2hhdCBmb2xsb3dzKS4KQEAgLTU3Myw3ICs1MjYs
NyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJv
d0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAgICAgfQogCiAgICAgLy8gV3JpdGUgdGhlIGRl
Y29kZWQgcm93IHBpeGVscyB0byB0aGUgZnJhbWUgYnVmZmVyLgotICAgIEltYWdlRnJhbWU6OlBp
eGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIHkpOworICAgIFJHQkEzMiogYWRk
cmVzcyA9IGJ1ZmZlci5waXhlbHMoKS5hdCgwLCB5KTsKICAgICBpbnQgd2lkdGggPSBzY2FsZWRT
aXplKCkud2lkdGgoKTsKICAgICB1bnNpZ25lZCBjaGFyIG5vblRyaXZpYWxBbHBoYU1hc2sgPSAw
OwogCkBAIC01ODIsNyArNTM1LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJs
ZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCBw
aXhlbCA9IHJvdyArIG1fc2NhbGVkQ29sdW1uc1t4XSAqIGNvbG9yQ2hhbm5lbHM7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBhbHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7Ci0gICAgICAg
ICAgICBidWZmZXIuc2V0UkdCQShhZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxb
Ml0sIGFscGhhKTsKKyAgICAgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdCQShhZGRyZXNz
KyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKICAgICAgICAgICAgIG5v
blRyaXZpYWxBbHBoYU1hc2sgfD0gKDI1NSAtIGFscGhhKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZQpAQCAtNTkwLDcgKzU0Myw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUo
dW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICB7CiAgICAg
ICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdzsKICAgICAgICAgaWYgKGhhc0FscGhhKSB7Ci0gICAg
ICAgICAgICBpZiAoYnVmZmVyLnByZW11bHRpcGx5QWxwaGEoKSkgeworICAgICAgICAgICAgaWYg
KHByZW11bHRpcGx5QWxwaGEoKSkgewogICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7ICsreCwgcGl4ZWwgKz0gNCkKICAgICAgICAgICAgICAgICAgICAgc2V0UGl4ZWxQ
cmVtdWx0aXBsaWVkUkdCQShhZGRyZXNzKyssIHBpeGVsLCBub25Ucml2aWFsQWxwaGFNYXNrKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC02MTksNyArNTcyLDcgQEAgdm9pZCBQTkdJbWFnZURl
Y29kZXI6OnBuZ0NvbXBsZXRlKCkKICAgICB9CiAjZW5kaWYKICAgICBpZiAoIW1fZnJhbWVCdWZm
ZXJDYWNoZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpLnNl
dFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZl
ckNhY2hlLmZpcnN0KCkuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkRlY29kaW5nU3RhdHVzOjpDb21w
bGV0ZSk7CiB9CiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSwg
dW5zaWduZWQgaGFsdEF0RnJhbWUpCkBAIC02NjMsOCArNjE2LDYgQEAgdm9pZCBQTkdJbWFnZURl
Y29kZXI6OnJlYWRDaHVua3MocG5nX3Vua25vd25fY2h1bmtwIGNodW5rKQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUobV9mcmFtZUNvdW50
KTsKLSAgICAgICAgZm9yIChhdXRvJiBpbWFnZUZyYW1lIDogbV9mcmFtZUJ1ZmZlckNhY2hlKQot
ICAgICAgICAgICAgaW1hZ2VGcmFtZS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlB
bHBoYSk7CiAgICAgfSBlbHNlIGlmICghbWVtY21wKGNodW5rLT5uYW1lLCAiZmNUTCIsIDQpICYm
IGNodW5rLT5zaXplID09IDI2KSB7CiAgICAgICAgIGlmIChtX2hhc0luZm8gJiYgIW1faXNBbmlt
YXRlZCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTcwNiwxMCArNjU3LDggQEAgdm9pZCBQTkdJ
bWFnZURlY29kZXI6OnJlYWRDaHVua3MocG5nX3Vua25vd25fY2h1bmtwIGNodW5rKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNo
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwotICAgICAgICAgICAg
bV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFs
cGhhKTsKLSAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSA8IG1fZnJhbWVC
dWZmZXJDYWNoZS5zaXplKCkpIHsKICAgICAgICAgICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1f
ZnJhbWVCdWZmZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07CkBAIC03MjAsMTEgKzY2OSwxMSBAQCB2
b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cmVhZENodW5rcyhwbmdfdW5rbm93bl9jaHVua3AgY2h1bmsp
CiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldER1cmF0aW9uKG1fZGVsYXlOdW1lcmF0b3IgKiAx
MDAwIC8gbV9kZWxheURlbm9taW5hdG9yKTsKIAogICAgICAgICAgICAgaWYgKG1fZGlzcG9zZSA9
PSAyKQotICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJbWFnZUZyYW1l
OjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRE
aXNwb3NhbE1ldGhvZChJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlUHJldmlv
dXMpOwogICAgICAgICAgICAgZWxzZSBpZiAobV9kaXNwb3NlID09IDEpCi0gICAgICAgICAgICAg
ICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVC
Z2NvbG9yKTsKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0RGlzcG9zYWxNZXRob2QoSW1hZ2VG
cmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZUJnY29sb3IpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJbWFnZUZyYW1lOjpE
aXNwb3NlS2VlcCk7CisgICAgICAgICAgICAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKElt
YWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpLZWVwKTsKICAgICAgICAgfQogCiAgICAgICAgIG1f
ZnJhbWVJbmZvID0gdHJ1ZTsKQEAgLTgwNywxNiArNzU2LDE2IEBAIHZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiAgICAg
Y29uc3QgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hl
LmJlZ2luKCkgKyBjbGVhckJlZm9yZUZyYW1lKTsKIAogICAgIFZlY3RvcjxJbWFnZUZyYW1lPjo6
aXRlcmF0b3IgaShlbmQpOwotICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVn
aW4oKSkgJiYgKChpLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB8fCAoaS0+
ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMp
KTsgLS1pKSB7Ci0gICAgICAgIGlmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVD
b21wbGV0ZSkgJiYgKGkgIT0gZW5kKSkKLSAgICAgICAgICAgIGktPmNsZWFyUGl4ZWxEYXRhKCk7
CisgICAgZm9yICg7IChpICE9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoKGktPmlz
RW1wdHkoKSkgfHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxN
ZXRob2Q6Ok92ZXJ3cml0ZVByZXZpb3VzKSk7IC0taSkgeworICAgICAgICBpZiAoKGktPmlzQ29t
cGxldGUoKSkgJiYgKGkgIT0gZW5kKSkKKyAgICAgICAgICAgIGktPmNsZWFyUGl4ZWxzKCk7CiAg
ICAgfQogCiAgICAgLy8gTm93IHxpfCBob2xkcyB0aGUgbGFzdCBmcmFtZSB3ZSBuZWVkIHRvIHBy
ZXNlcnZlOyBjbGVhciBwcmlvciBmcmFtZXMuCiAgICAgZm9yIChWZWN0b3I8SW1hZ2VGcmFtZT46
Oml0ZXJhdG9yIGoobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpOyBqICE9IGk7ICsraikgewot
ICAgICAgICBBU1NFUlQoai0+c3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsK
LSAgICAgICAgaWYgKGotPnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCi0gICAg
ICAgICAgICBqLT5jbGVhclBpeGVsRGF0YSgpOworICAgICAgICBBU1NFUlQoIWlzUGFydGlhbCgp
KTsKKyAgICAgICAgaWYgKCFqLT5pc0VtcHR5KCkpCisgICAgICAgICAgICBqLT5jbGVhclBpeGVs
cygpOwogICAgIH0KIH0KIApAQCAtODM0LDQ1ICs3ODMsNDcgQEAgdm9pZCBQTkdJbWFnZURlY29k
ZXI6OmluaXRGcmFtZUJ1ZmZlcihzaXplX3QgZnJhbWVJbmRleCkKICAgICAgICAgZnJhbWVSZWN0
LnNldEhlaWdodChzaXplKCkuaGVpZ2h0KCkgLSBtX3lPZmZzZXQpOwogCiAgICAgSW1hZ2VGcmFt
ZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGludCBsZWZ0
ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7Ci0gICAgaW50IHJpZ2h0ID0gbG93
ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7Ci0gICAgaW50IHRvcCA9IHVw
cGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOwotICAgIGludCBib3R0b20gPSBsb3dlckJv
dW5kU2NhbGVkWShmcmFtZVJlY3QubWF4WSgpLCB0b3ApOwotICAgIGJ1ZmZlci5zZXRPcmlnaW5h
bEZyYW1lUmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3Ap
KTsKIAogICAgIC8vIFRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRzIG9u
IHRoZSBwcmV2aW91cyBmcmFtZSdzCiAgICAgLy8gZGlzcG9zYWwgbWV0aG9kLgogICAgIC8vCi0g
ICAgLy8gRnJhbWVzIHRoYXQgdXNlIHRoZSBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgbWV0aG9k
IGFyZSBlZmZlY3RpdmVseQorICAgIC8vIEZyYW1lcyB0aGF0IHVzZSB0aGUgRGlzcG9zYWxNZXRo
b2Q6Ok92ZXJ3cml0ZVByZXZpb3VzIG1ldGhvZCBhcmUgZWZmZWN0aXZlbHkKICAgICAvLyBuby1v
cHMgaW4gdGVybXMgb2YgY2hhbmdpbmcgdGhlIHN0YXJ0aW5nIHN0YXRlIG9mIGEgZnJhbWUgY29t
cGFyZWQgdG8KICAgICAvLyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgdGhlIHByZXZpb3VzIGZyYW1l
LCBzbyBza2lwIG92ZXIgdGhlbS4gIChJZiB0aGUKICAgICAvLyBmaXJzdCBmcmFtZSBzcGVjaWZp
ZXMgdGhpcyBtZXRob2QsIGl0IHdpbGwgZ2V0IHRyZWF0ZWQgbGlrZQotICAgIC8vIERpc3Bvc2VP
dmVyd3JpdGVCZ2NvbG9yIGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBsZXRlbHkgZW1wdHkgaW1h
Z2UuKQorICAgIC8vIERpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVCZ2NvbG9yIGJlbG93IGFuZCBy
ZXNldCB0byBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuKQogICAgIGNvbnN0IEltYWdlRnJhbWUq
IHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgSW1h
Z2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlz
cG9zYWxNZXRob2QoKTsKLSAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBJ
bWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKSB7CisgICAgSW1hZ2VGcmFtZTo6
RGlzcG9zYWxNZXRob2QgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7
CisgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZNZXRob2QgPT0gSW1hZ2VGcmFtZTo6RGlz
cG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZVByZXZpb3VzKSkgewogICAgICAgICBwcmV2QnVmZmVyID0g
Jm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwogICAgICAgICBwcmV2TWV0aG9kID0g
cHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKTsKICAgICB9Ci0gICAgQVNTRVJUKHByZXZCdWZm
ZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgIEFTU0VSVChw
cmV2QnVmZmVyLT5pc0NvbXBsZXRlKCkpOwogCi0gICAgaWYgKHByZXZNZXRob2QgPT0gSW1hZ2VG
cmFtZTo6RGlzcG9zZUtlZXApIHsKKyAgICBpZiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpE
aXNwb3NhbE1ldGhvZDo6S2VlcCkgewogICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbGFzdCBmcmFt
ZSBhcyB0aGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUuCi0gICAgICAgIGJ1ZmZlci5j
b3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcik7CisgICAgICAgIGJ1ZmZlci5jb3B5UGl4ZWxzKCpw
cmV2QnVmZmVyKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRo
ZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAvLyBhZmZl
Y3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAg
Y29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgp
OworICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPnBpeGVscygp
LT5yZWN0KCk7CiAgICAgICAgIGlmICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJ
bnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAvLyBDbGVh
cmluZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhlIHNpemUgb2YgdGhlIHdob2xlCiAg
ICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2Uu
Ci0gICAgICAgICAgICBidWZmZXIuemVyb0ZpbGxQaXhlbERhdGEoKTsKKyAgICAgICAgICAgIGJ1
ZmZlci5waXhlbHMoKS0+Y2xlYXIoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8v
IENvcHkgdGhlIHdob2xlIHByZXZpb3VzIGJ1ZmZlciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFt
ZS4KLSAgICAgICAgICAgIGJ1ZmZlci5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcik7Ci0gICAg
ICAgICAgICBidWZmZXIuemVyb0ZpbGxGcmFtZVJlY3QocHJldlJlY3QpOworICAgICAgICAgICAg
YnVmZmVyLmNvcHlQaXhlbHMoKnByZXZCdWZmZXIpOworICAgICAgICAgICAgYnVmZmVyLnBpeGVs
cygpLT5jbGVhclJlY3QocHJldlJlY3QpOwogICAgICAgICB9CisgICAgICAgIGJ1ZmZlci5zZXRI
YXNBbHBoYSh0cnVlKTsKICAgICB9CisgICAgCisgICAgaW50IGxlZnQgPSB1cHBlckJvdW5kU2Nh
bGVkWChmcmFtZVJlY3QueCgpKTsKKyAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5kU2NhbGVkWChm
cmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKKyAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFko
ZnJhbWVSZWN0LnkoKSk7CisgICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1l
UmVjdC5tYXhZKCksIHRvcCk7CisgICAgYnVmZmVyLnBpeGVscygpLT5zZXRSZWN0KEludFJlY3Qo
bGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCkpOwogfQogCiB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCkBAIC04ODEsMTIgKzgzMiwxMiBAQCB2b2lkIFBO
R0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIElt
YWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07Ci0g
ICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBidWZm
ZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkRlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSk7CiAKICAg
ICBwbmdfYnl0ZXAgaW50ZXJsYWNlQnVmZmVyID0gbV9yZWFkZXItPmludGVybGFjZUJ1ZmZlcigp
OwogCiAgICAgaWYgKG1fY3VycmVudEZyYW1lICYmIGludGVybGFjZUJ1ZmZlcikgewotICAgICAg
ICBjb25zdCBJbnRSZWN0JiByZWN0ID0gYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAg
ICAgIGNvbnN0IEludFJlY3QmIHJlY3QgPSBidWZmZXIucGl4ZWxzKCktPnJlY3QoKTsKICAgICAg
ICAgYm9vbCBoYXNBbHBoYSA9IG1fcmVhZGVyLT5oYXNBbHBoYSgpOwogICAgICAgICB1bnNpZ25l
ZCBjb2xvckNoYW5uZWxzID0gaGFzQWxwaGEgPyA0IDogMzsKICAgICAgICAgYm9vbCBub25Ucml2
aWFsQWxwaGEgPSBmYWxzZTsKQEAgLTg5NiwxNSArODQ3LDE1IEBAIHZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvbXBsZXRlKCkKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBM
SU5HKQogICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlY3QubWF4WSgpIC0gcmVjdC55KCk7
ICsreSkgewogICAgICAgICAgICAgcG5nX2J5dGVwIHJvdyA9IGludGVybGFjZUJ1ZmZlciArICht
X3NjYWxlZCA/IG1fc2NhbGVkUm93c1t5XSA6IHkpICogY29sb3JDaGFubmVscyAqIHNpemUoKS53
aWR0aCgpOwotICAgICAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVm
ZmVyLmdldEFkZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7CisgICAgICAgICAgICBSR0JBMzIq
IGFkZHJlc3MgPSBidWZmZXIucGl4ZWxzKCktPmF0KHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOwog
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByZWN0Lm1heFgoKSAtIHJlY3QueCgpOyAr
K3gpIHsKICAgICAgICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3cgKyAobV9zY2FsZWQg
PyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAqIGNvbG9yQ2hhbm5lbHM7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgYWxwaGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAg
ICAgICAgIG5vblRyaXZpYWxBbHBoYSB8PSBhbHBoYSA8IDI1NTsKICAgICAgICAgICAgICAgICBp
ZiAoIW1fYmxlbmQpCi0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKGFkZHJlc3Mr
KywgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOworICAgICAgICAgICAgICAg
ICAgICBidWZmZXIucGl4ZWxzKCktPnNldFJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxb
MV0sIHBpeGVsWzJdLCBhbHBoYSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBidWZmZXIub3ZlclJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBp
eGVsWzJdLCBhbHBoYSk7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+b3Zl
clJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbHNlCkBAIC05MTIsMjggKzg2MywyOCBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgIHBuZ19ieXRlcCByb3cg
PSBpbnRlcmxhY2VCdWZmZXI7CiAgICAgICAgIGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJl
Y3QubWF4WSgpOyArK3ksIHJvdyArPSBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCkpIHsK
ICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdzsKLSAgICAgICAgICAgIEltYWdlRnJh
bWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKKyAg
ICAgICAgICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZlci5waXhlbHMoKS0+KHJlY3QueCgpLCB5
KTsKICAgICAgICAgICAgIGZvciAoaW50IHggPSByZWN0LngoKTsgeCA8IHJlY3QubWF4WCgpOyAr
K3gsIHBpeGVsICs9IGNvbG9yQ2hhbm5lbHMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBh
bHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CiAgICAgICAgICAgICAgICAgbm9uVHJp
dmlhbEFscGhhIHw9IGFscGhhIDwgMjU1OwogICAgICAgICAgICAgICAgIGlmICghbV9ibGVuZCkK
LSAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwg
cGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5w
aXhlbHMoKS0+c2V0UkdCQShhZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0s
IGFscGhhKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJ1ZmZl
ci5vdmVyUkdCQShhZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhh
KTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnBpeGVscygpLT5vdmVyUkdCQShhZGRyZXNz
KyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogI2VuZGlmCiAKICAgICAgICAgaWYgKCFub25Ucml2aWFsQWxwaGEpIHsKLSAg
ICAgICAgICAgIGlmIChidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlucyhJbnRSZWN0
KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQorICAgICAgICAgICAgaWYgKGJ1ZmZlci5waXhl
bHMoKS0+cmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkp
CiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIHNpemVfdCBmcmFtZUluZGV4ID0gbV9jdXJyZW50RnJh
bWU7CiAgICAgICAgICAgICAgICAgY29uc3QgSW1hZ2VGcmFtZSogcHJldkJ1ZmZlciA9ICZtX2Zy
YW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZnJh
bWVJbmRleCAmJiAocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpE
aXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKQorICAgICAgICAgICAgICAgIHdoaWxlIChmcmFtZUlu
ZGV4ICYmIChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bv
c2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cykpCiAgICAgICAgICAgICAgICAgICAgIHByZXZC
dWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgICAgICAg
ICAgaWYgKChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bv
c2VPdmVyd3JpdGVCZ2NvbG9yKQotICAgICAgICAgICAgICAgICAgICAmJiAhcHJldkJ1ZmZlci0+
aGFzQWxwaGEoKSAmJiBidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlucyhwcmV2QnVm
ZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpKSkKKyAgICAgICAgICAgICAgICBpZiAoKHByZXZCdWZm
ZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok92ZXJ3
cml0ZUJnY29sb3IpCisgICAgICAgICAgICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5oYXNBbHBo
YSgpICYmIGJ1ZmZlci5waXhlbHMoKS0+cmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPnBpeGVs
cygpLT5yZWN0KCkpKQogICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFs
c2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCFtX2JsZW5kICYmICFidWZm
ZXIuaGFzQWxwaGEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAppbmRleCAwNWZjNzRiNmRlMjE0
ZDA0MTRhODJiNDE4NjkzNzc2MmQxYTVlNTViLi45NzQxOGEyY2Y0NmY2MjU4ZDcyNmYwOGJmYzY1
ZGM4YWRmODc4YzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCkBAIC00OCw3ICs0OCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxheUNvdW50LTE7IH0KICNlbmRpZgogICAgICAgICBib29s
IGlzU2l6ZUF2YWlsYWJsZSgpIG92ZXJyaWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6
ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVm
ZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBz
ZXRGYWlsZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAg
ICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcg
dGhpcyBmcm9tIGluc2lkZQpAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBmb3IgKGF1dG8mIGlt
YWdlRnJhbWUgOiBtX2ZyYW1lQnVmZmVyQ2FjaGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoaW1h
Z2VGcmFtZS5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgICAgICAg
ICAgICAgIGlmICghaW1hZ2VGcmFtZS5pc0NvbXBsZXRlKCkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIApAQCAtODIsNyArODIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgYm9vbCBpc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5k
ZXgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCBtX2ZyYW1lQnVmZmVy
Q2FjaGUuc2l6ZSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF0uc3RhdHVzKCkgPT0gSW1h
Z2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CisgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgbV9m
cmFtZUJ1ZmZlckNhY2hlLnNpemUoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdLmlzQ29t
cGxldGUoKSk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VE
ZWNvZGVyLmNwcAppbmRleCAxMjRhMWIyZjE5OTdmZTY3OGM2MWI1MmYzMDU4ZGI0ZDZiODg2Nzlh
Li5kMjBiYjZjZTZkYTQ1MDJkODMzZDYxOGZlNzg3OTMzNGIwZDEzMDc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29k
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAv
V0VCUEltYWdlRGVjb2Rlci5jcHAKQEAgLTc4LDEzICs3OCwxMSBAQCBJbWFnZUZyYW1lKiBXRUJQ
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIGlmIChp
bmRleCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlz
RW1wdHkoKSkgeworICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAg
ICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbMF0uc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwotICAgIH0KIAog
ICAgIEltYWdlRnJhbWUmIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwotICAgIGlmIChm
cmFtZS5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgIGlmIChmcmFt
ZS5pc0NvbXBsZXRlKCkpCiAgICAgICAgIGRlY29kZShmYWxzZSk7CiAgICAgcmV0dXJuICZmcmFt
ZTsKIH0KQEAgLTExNSw3ICsxMTMsNyBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29kZShi
b29sIG9ubHlTaXplKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBt
X2hhc0FscGhhID0gZmFsc2U7CiAjZW5kaWYKLSAgICAgICAgaWYgKCFzZXRTaXplKHdpZHRoLCBo
ZWlnaHQpKQorICAgICAgICBpZiAoIXNldFNpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkpCiAg
ICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgfQogCkBAIC0xMjUsMjIgKzEyMywy
MSBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTaXplKQogCiAgICAg
QVNTRVJUKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKTsKICAgICBJbWFnZUZyYW1lJiBi
dWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAgQVNTRVJUKGJ1ZmZlci5zdGF0dXMo
KSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBBU1NFUlQoIWJ1ZmZlci5pc0Nv
bXBsZXRlKCkpOwogCi0gICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFt
ZUVtcHR5KSB7Ci0gICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNp
emUoKS5oZWlnaHQoKSkpCisgICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYg
KCFidWZmZXIuaW5pdFBpeGVscyhzaXplKCksIHByZW11bHRpcGx5QWxwaGEoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gc2V0RmFpbGVkKCk7Ci0gICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VG
cmFtZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1l
OjpEZWNvZGluZ1N0YXR1czo6UGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYSht
X2hhc0FscGhhKTsKLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3Qo
SW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAg
ICAgICAgV0VCUF9DU1BfTU9ERSBtb2RlID0gb3V0cHV0TW9kZShtX2hhc0FscGhhKTsKLSAgICAg
ICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCisgICAgICAgIGlmICghcHJlbXVsdGlwbHlBbHBo
YSgpKQogICAgICAgICAgICAgbW9kZSA9IG91dHB1dE1vZGUoZmFsc2UpOwotICAgICAgICBpbnQg
cm93U3RyaWRlID0gc2l6ZSgpLndpZHRoKCkgKiBzaXplb2YoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRh
KTsKLSAgICAgICAgdWludDhfdCogb3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
YnVmZmVyLmdldEFkZHIoMCwgMCkpOworICAgICAgICBpbnQgcm93U3RyaWRlID0gc2l6ZSgpLndp
ZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKKyAgICAgICAgdWludDhfdCogb3V0cHV0ID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyLnBpeGVscygpLT5hdCgwLCAwKSk7CiAgICAgICAg
IGludCBvdXRwdXRTaXplID0gc2l6ZSgpLmhlaWdodCgpICogcm93U3RyaWRlOwogICAgICAgICBt
X2RlY29kZXIgPSBXZWJQSU5ld1JHQihtb2RlLCBvdXRwdXQsIG91dHB1dFNpemUsIHJvd1N0cmlk
ZSk7CiAgICAgICAgIGlmICghbV9kZWNvZGVyKQpAQCAtMTQ5LDcgKzE0Niw3IEBAIGJvb2wgV0VC
UEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCiAKICAgICBzd2l0Y2ggKFdlYlBJ
VXBkYXRlKG1fZGVjb2RlciwgZGF0YUJ5dGVzLCBkYXRhU2l6ZSkpIHsKICAgICBjYXNlIFZQOF9T
VEFUVVNfT0s6Ci0gICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21w
bGV0ZSk7CisgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RGVjb2RpbmdTdGF0
dXM6OkNvbXBsZXRlKTsKICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgY2FzZSBWUDhfU1RBVFVTX1NVU1BFTkRFRDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZU1hYy5tbQppbmRleCAyMTZjZDA5M2YyNjQ2N2NiYTg4YTQzZjY5M2FiZjRjZjUxZGQx
YTRkLi5kMTE0NTRiMDVlZjg4OTkzYTYyODkzODk2YmMwYzExNzI4YzVlZDUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQg
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIoKSBjb25zdAog
ICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9wcmV2
aWV3SW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBtX3ByZXZpZXdJbWFn
ZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpOwogICAgICAgICBpZiAoIW1fcHJldmlld0ltYWdlKQog
ICAgICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJh
Z0ltYWdlQ0dXaW4uY3BwCmluZGV4IDM2Y2Q2NTE2ZTgwZjE3NDhiZmVhYjc3YTkzMDI3MWMxMjFk
ZTgwMTkuLjRiNGUzNzc5ZTk2Zjc4YzY1NDBhNTNjNDQ3OGMzYmZkOTM1ZjUzZTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcApAQCAtMTM2LDkg
KzEzNiw5IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGlt
ZywgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKQogICAgIENHQ29udGV4dFNjYWxlQ1RNKGRy
YXdDb250ZXh0LCAxLCAtMSk7CiAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGRyYXdDb250ZXh0
LCB3aGl0ZSk7CiAgICAgQ0dDb250ZXh0RmlsbFJlY3QoZHJhd0NvbnRleHQsIHJlY3QpOwotICAg
IGlmIChhdXRvIHNyY0ltYWdlID0gaW1nLT5nZXRDR0ltYWdlUmVmKCkpIHsKKyAgICBpZiAoYXV0
byBzcmNJbWFnZSA9IGltZy0+bmF0aXZlSW1hZ2UoKSkgewogICAgICAgICBDR0NvbnRleHRTZXRC
bGVuZE1vZGUoZHJhd0NvbnRleHQsIGtDR0JsZW5kTW9kZU5vcm1hbCk7Ci0gICAgICAgIENHQ29u
dGV4dERyYXdJbWFnZShkcmF3Q29udGV4dCwgcmVjdCwgc3JjSW1hZ2UpOworICAgICAgICBDR0Nv
bnRleHREcmF3SW1hZ2UoZHJhd0NvbnRleHQsIHJlY3QsIHNyY0ltYWdlLmdldCgpKTsKICAgICB9
CiAgICAgQ0dDb250ZXh0UmVsZWFzZShkcmF3Q29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dl
YkNhY2hlLm1tCmluZGV4IGI2NTlkNmRiZjlhZDY5OTljM2FjOTYyZGU5NTE1NzgwOTdlMWYzYjEu
LjdjNWVkMjEwZGRiMmEzMmE3NjY2NzRjMTIwZDk5NGMyZmE0N2U3ZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMv
TWlzYy9XZWJDYWNoZS5tbQpAQCAtMjA0LDcgKzIwNCw3IEBAICsgKENHSW1hZ2VSZWYpaW1hZ2VG
b3JVUkw6KE5TVVJMICopdXJsCiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UmIGNhY2hlZEltYWdl
ID0gZG93bmNhc3Q8V2ViQ29yZTo6Q2FjaGVkSW1hZ2U+KCpjYWNoZWRSZXNvdXJjZSk7CiAgICAg
aWYgKCFjYWNoZWRJbWFnZS5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIHJldHVy
biBjYWNoZWRJbWFnZS5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpOwogfQogCiAjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCmluZGV4IDBmNmRlN2ExNDZhNjExYTUyYWExZTUz
OTAxOWZhNmMxYzQ2NzI1YWUuLjMwNTYzMzZjYjY2ZmU0YWYxOGJkYzUyOWFjYTJmOGZjODgxZGZl
NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25E
YXRhYmFzZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJ
Y29uRGF0YWJhc2VDRy5jcHAKQEAgLTM3LDEyICszNywyMyBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIENHSW1hZ2VSZWYgV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKFdLSWNv
bkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmLCBXS1NpemUgc2l6
ZSkKIHsKICAgICBJbWFnZSogaW1hZ2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VG
b3JQYWdlVVJMKHRvV1RGU3RyaW5nKHVybFJlZikpOwotICAgIHJldHVybiBpbWFnZSA/IGltYWdl
LT5nZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUu
d2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpIDogMDsKKyAgICByZXR1cm4g
aW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+
KHNpemUud2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpLmdldCgpIDogbnVs
bHB0cjsKIH0KIAogQ0ZBcnJheVJlZiBXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlG
b3JVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYp
CiB7CiAgICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9y
UGFnZVVSTCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+
Z2V0Q0dJbWFnZUFycmF5KCkubGVha1JlZigpIDogMDsKKyAgICBpZiAoIWltYWdlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gaW1hZ2UtPmZyYW1l
c05hdGl2ZUltYWdlcygpOworICAgIGlmICghbmF0aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFy
cmF5Q3JlYXRlTXV0YWJsZShudWxscHRyLCBuYXRpdmVJbWFnZXMuc2l6ZSgpLCAma0NGVHlwZUFy
cmF5Q2FsbEJhY2tzKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMp
CisgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgbmF0aXZlSW1hZ2UuZ2V0KCkpOwor
ICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRlJldGFpbihhcnJheSkp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IGRjNzk4M2FiOTg4YzJkMDRhMTczMGVlMTM3MzAz
YzI0NDE2MTUxOTcuLmZiYzNlNWQ0YzU0MzAxY2U5MjE3YTQwZjhkMDhiZDU4MzUyNzg3YzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLm1tCkBAIC00MDcxLDcgKzQwNzEsNyBAQCAtIChVSUltYWdlICopX3ByZXNl
bnRhdGlvblNuYXBzaG90Rm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29u
dHJvbAogewogICAgIGlmICghX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250
ZW50SW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBbW1tVSUltYWdl
IGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRv
ci5jb250ZW50SW1hZ2UtPmdldENHSW1hZ2VSZWYoKV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVy
biBbW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24u
bGlua0luZGljYXRvci5jb250ZW50SW1hZ2UtPm5hdGl2ZUltYWdlKCkuZ2V0KCldIGF1dG9yZWxl
YXNlXTsKIH0KIAogLSAoTlNBcnJheSAqKV9wcmVzZW50YXRpb25SZWN0c0ZvclByZXZpZXdJdGVt
Q29udHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgKiljb250cm9sbGVyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggOWEz
M2Y3Y2M3ZGM3YzdkNzJmOWRhNzQzMDk4YjdkYmNhODI0MDljZi4uYTUzMjUxMDY3OGI5ZjUzNTE0
NThhMzhhOWY0MjMzNzQ3ZDAzNWY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTcyNyw2OSArMTcyNyw2IEBAIHZvaWQgUGx1
Z2luVmlldzo6d2luZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxl
LCB1aW50NjRfdCB3aW5kCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotc3RhdGlj
IGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKEJpdG1hcEltYWdlKiBiaXRtYXApCi17Ci0gICAgQ0dJ
bWFnZVJlZiBpbWFnZSA9IGJpdG1hcC0+Z2V0Q0dJbWFnZVJlZigpOwotICAgIEFTU0VSVChDR0lt
YWdlR2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkgPT0gOCk7Ci0KLSAgICBDR0JpdG1hcEluZm8g
aW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOwotICAgIGlmICghKGltYWdl
SW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYga0NHQml0
bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkgewot
ICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3RoZXIgcGl4
ZWwgZm9ybWF0cy4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBzaXplX3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1h
Z2UpOwotICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKLSAgICBz
aXplX3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3coaW1hZ2UpOwotCi0gICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29w
eURhdGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKLSAgICBjb25zdCBVSW50OCog
ZGF0YSA9IENGRGF0YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOwotCi0gICAgLy8gT3Zlcmxh
eSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBncmF5c2NhbGUgdmVyc2lvbiBv
ZiB0aGUgaW1hZ2UuCi0gICAgLy8gRm9yIHRoZSBpbnRlcmlvciBwb2ludHMsIGNhbGN1bGF0ZSB0
aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBsZSBwb2ludAotICAgIC8v
IGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRyYW5zcGFyZW5jeS4KLSAgICBj
b25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKLSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVD
b2xzID0gNzsKLSAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9wZXIgbnVtYmVyIG9mIHNhbXBs
ZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvcy4KLSAgICBpZiAod2lk
dGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3MpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0
aGUgaW1hZ2UgcGVyaW1ldGVyLgotICAgIGNvbnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHdpZHRoIC0gMSkgLyAoc2FtcGxlQ29scyAtIDEpOwotICAgIGNvbnN0IGZs
b2F0IHN0cmlkZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1w
bGVSb3dzIC0gMSk7Ci0gICAgZmxvYXQgc2FtcGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsK
LQotICAgIC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KLSAgICBm
bG9hdCB5ID0gMDsKLSAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7Ci0gICAgICAgIGZsb2F0IHggPSAwOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7Ci0gICAg
ICAgICAgICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUp
KSAqIDQ7Ci0gICAgICAgICAgICAvLyBSIEcgQiBBCi0gICAgICAgICAgICBzYW1wbGVzW2ldW2pd
ID0gKDAuMjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAq
ICoocDArMykgLyAyNTU7Ci0gICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOwotICAgICAgICB9
Ci0gICAgICAgIHkgKz0gc3RyaWRlSGVpZ2h0OwotICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRp
Y19jYXN0PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICAvLyBEZXRl
cm1pbmUgdGhlIGltYWdlIHNjb3JlLgotICAgIGZsb2F0IGFjY3VtU2NvcmUgPSAwOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1wbGVSb3dzIC0gMTsgKytpKSB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1wbGVDb2xzIC0gMTsgKytqKSB7Ci0gICAgICAgICAg
ICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0gMV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNh
bXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tpXVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsK
LSAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0gZGlmZiAqIGRpZmY7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBUaGUgc2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4gdGhl
IHJhbmdlIG9mIDAgYW5kIDI1NV4yLgotICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAqIChz
YW1wbGVSb3dzIC0gMikgKiAoc2FtcGxlQ29scyAtIDIpOwotfQotI2VuZGlmCi0KIHZvaWQgUGx1
Z2luVmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIHsKICNpZiBFTkFCTEUoUFJJTUFS
WV9TTkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQpAQCAtMTgwOSw3ICsxNzQ2LDcgQEAgdm9p
ZCBQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQoKQogCiAgICAgICAgIGlmIChz
bmFwc2hvdEltYWdlKSB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hF
VVJJU1RJQykKLSAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBp
c0FsbW9zdFNvbGlkQ29sb3IoZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KHNuYXBzaG90SW1hZ2UuZ2V0
KCkpKTsKKyAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBzdGF0
aWNfcG9pbnRlcl9jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlKS0+aXNBbG1vc3RTb2xp
ZENvbG9yKCk7CiAgICAgICAgICAgICBzbmFwc2hvdEZvdW5kID0gIXNuYXBzaG90SXNBbG1vc3RT
b2xpZENvbG9yOwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283721</attachid>
            <date>2016-07-14 17:56:35 -0700</date>
            <delta_ts>2016-07-14 18:28:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159795-20160714175548.patch</filename>
            <type>text/plain</type>
            <size>210729</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQ0NWVjM2I5YjY1NzYy
OGNlYTM4MTkyYzdkMDJlN2YwMjIyNzRmOS4uYzgwMTMzMGVkNmJmYTQ5NjViMzRkM2Q1NTIzMTAw
NjNhMTIxZjE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwMCBAQAorMjAxNi0wNy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VGcmFtZSBhbmQgSW1hZ2VGcmFtZURhdGEgYmUgZXF1aXZhbGVudCBzbyBJbWFnZUZyYW1l
RGF0YSBjYW4gYmUgcmVtb3ZlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU5Nzk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBzdGVwIHdpbGwgYWxsb3cgcmVtb3ZpbmcgSW1hZ2VGcmFtZSBmcm9t
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisgICAgICAgIGFuZCByZW5h
bWluZyBJbWFnZUZyYW1lRGF0YSB0byBiZSBJbWFnZUZyYW1lLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhl
bHM6OmF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aW5pdFBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y29weVBpeGVscyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVEYXRhOjpzZXREaXNwb3NhbE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
RGF0YTo6ZGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6
OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzUGFydGlhbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXJQaXhlbHMpOgorICAgICAg
ICBBZGQgZnVuY3Rpb25zIHNpbWlsYXIgdG8gZnJvbSB3aGF0IHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oIGhhcy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OkltYWdlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlQaXhlbHMpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6aW5pdFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpzZXRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6Omhhc0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OnNldEhhc0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNl
dFN0YXR1cyk6IERlbGV0ZWQuCisgICAgICAgIENoYW5nZSB0aGUgSW1hZ2VGcmFtZSBjbGFzcyB0
byBiZSBhIHN1YnNldCBvZiBJbWFnZUZyYW1lRGF0YS4KKyAgICAgICAgCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIENhbGwgdGhl
IEltYWdlRnJhbWUgbWV0aG9kcyB3aXRoIHRoZSBuZXcgbmFtZXMuCisgICAgICAgIAorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0RGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6ZGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6c2V0U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnN0YXR1cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6OmlzUGFydGlhbCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpp
c0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0
SGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzQWxwaGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6cGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc1BpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmlzT3ZlclNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmdldEFkZHIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6aGFzUGl4ZWxEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6Om92ZXJSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgQ2hhbmdlIHRoZSBJbWFnZUZyYW1l
IGNsYXNzIHRvIGJlIGEgc3Vic2V0IG9mIEltYWdlRnJhbWVEYXRhIGFuZCBnZXQgcmlkCisgICAg
ICAgIG9mIHRoZSBwaXhlbCBmdW5jdGlvbnMuIFRoZXkgc2hvdWxkIGJlIGFjY2Vzc2VkIGZyb20g
Qml0bWFwUGl4ZWxzIGNsYXNzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUElt
YWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJNUElt
YWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBtZXRob2Rz
IHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJNUCk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpCTVBJ
bWFnZVJlYWRlcjo6c2V0UkdCQSk6CisgICAgICAgIENhbGwgdGhlIEltYWdlRnJhbWUgbWV0aG9k
cyB3aXRoIHRoZSBuZXcgbmFtZXMvcGFyYW1ldGVycy4KKworICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1h
Z2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaDoKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFt
ZSBtZXRob2RzIHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwOgorICAg
ICAgICAoR0lGSW1hZ2VSZWFkZXI6OnBhcnNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6
R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBtZXRob2RzIHdp
dGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFt
ZSBtZXRob2RzIHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFn
ZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VE
ZWNvZGVyOjpqcGVnQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rl
cjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBtZXRob2RzIHdpdGggdGhl
IG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdl
RGVjb2Rlcjo6cG5nQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVy
OjpyZWFkQ2h1bmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6Y2xlYXJG
cmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aW5p
dEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5oOgorICAgICAgICBDYWxsIHRoZSBJbWFnZUZyYW1lIG1ldGhvZHMgd2l0aCB0aGUg
bmV3IG5hbWVzL3BhcmFtZXRlcnMuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
RUJQSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBt
ZXRob2RzIHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorCisyMDE2LTA3LTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisgCisgICAgICAgIEdldCBy
aWQgb2YgdGhlIG1fcHJlbXVsdGlwbHlBbHBoYSBmbGFnIG9mIHRoZSBJbWFnZUZyYW1lIGNsYXNz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk3MjEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGZs
YWcgd2FzIG9ubHkgbmVlZGVkIHdoZW4gY2FsbGluZyBCaXRtYXBQaXhlbHM6OnNldFNpemUoKS4g
SW5zdGVhZAorICAgICAgICB3ZSBjYW4gcGFzcyB0aGUgSW1hZ2VEZWNvZGVyOjptX3ByZW11bHRp
cGx5QWxwaGEgdG8gSW1hZ2VGcmFtZTo6c2V0U2l6ZSgpCisgICAgICAgIHdoaWNoIHdpbGwgcGFz
cyBpdCB0byBCaXRtYXBQaXhlbHM6OnNldFNpemUoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1h
cERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6aXNPdmVyU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
TVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVApOgorICAgICAgICAoV2ViQ29yZTo6
Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURl
Y29kZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVj
dG9yeUVudHJpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09J
bWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6
c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZl
ckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2Nh
bmxpbmVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJlYWRDaHVua3MpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisKKzIwMTYtMDctMTMgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBHZXQg
cmlkIG9mIHRoZSBjb2xvciBwcm9maWxlIGZyb20gSW1hZ2VGcmFtZSBhbmQgSW1hZ2VEZWNvZGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk2OTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpzZXRDb2xvclByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpyZWFkQ29sb3JQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJ
bWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9q
cGVnL0pQRUdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRDb2xvclBy
b2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFk
ZXJBdmFpbGFibGUpOiBEZWxldGVkLgorCisyMDE2LTA3LTEzICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgdGhlIHBpeGVsIGRhdGEg
b2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlv
biBwYXJ0IGluIEltYWdlRnJhbWUgaW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCB0
aGVuIG1ha2UgaXQgb3B0aW9uYWwgKGFsbG9jYXRlZCBvbiBkZW1hbmQpLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICog
UGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwUGl4ZWxzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpC
aXRtYXBQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjp3aWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBQaXhlbHM6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxz
OjphdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFBpeGVsczo6cmVwZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4
ZWxzOjpzZXRSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6b3ZlclJHQkEp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjppbkJvdW5kcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bXVsdGlwbHky
NTUpOgorICAgICAgICAoV2ViQ29yZTo6ZGl2aWRlMjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRp
dmlkZUNlaWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZENoYW5uZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6dW5wcmVtdWx0aXBsaWVkQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3Jl
OjptYWtlUHJlbXVsdGlwbGllZFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVVuUHJlbXVs
dGlwbGllZFJHQkEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVEYXRhOjpwaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZURhdGE6Omhhc1BpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OmdldEFkZHIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzUGl4ZWxEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om92ZXJSR0JBKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWU6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5Um93TlRpbWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmZpeFBvaW50VW5zaWduZWRN
dWx0aXBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpkaXZpZGUy
NTUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6ZGVjb2Rl
Qk1QKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhl
bHNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBQaXhlbHM6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6aGF2ZURlY29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpm
cmFtZUNvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZy
YW1lQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNldFBpeGVsUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUkdCQSk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisKKzIwMTYtMDctMTMgIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCB0aGUgcGl4ZWwg
ZGF0YSBvZiBJbWFnZUZyYW1lIHRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTY3OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhlIHBpeGVsIGRhdGEgbWFuaXB1
bGF0aW9uIHBhcnQgaW4gSW1hZ2VGcmFtZSBpbnRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAg
YW5kIHRoZW4gbWFrZSBpdCBvcHRpb25hbCAoYWxsb2NhdGVkIG9uIGRlbWFuZCkuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAg
ICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtl
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBQaXhlbHMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBQaXhlbHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhl
bHM6OkJpdG1hcFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OndpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6OmF0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwUGl4ZWxzOjpyZXBlYXRGaXJzdFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBQaXhlbHM6OnNldFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpvdmVy
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmluQm91bmRzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptdWx0
aXBseTI1NSk6CisgICAgICAgIChXZWJDb3JlOjpkaXZpZGUyNTUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZGl2aWRlQ2VpbCk6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6
CisgICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5Q
cmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lRGF0YTo6aGFzUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsRnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05U
aW1lcyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6Z2V0QWRkcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoYXNQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3ZlclJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlSb3dOVGlt
ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Zml4UG9pbnRVbnNp
Z25lZE11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmRp
dmlkZTI1NSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpk
ZWNvZGVCTVApOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1h
cFBpeGVsc0NhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpp
bml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcv
SlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxS
R0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEpOgorICAg
ICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKworMjAxNi0wNy0xMSAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIFJlbmFtZSBGcmFt
ZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5kIG1vdmUgaXQgdG8gYSBzZXBhcmF0ZSBmaWxlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU0NDQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIEltYWdl
RnJhbWVEYXRhIHRvIGEgc2VwYXJhdGUgZmlsZSBzbyBpdCBjYW4gYmUgY2FjaGVkIGJ5IEltYWdl
U291cmNlCisgICAgICAgIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnN1bWVkIGJ5IEJpdG1hcEltYWdl
LiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgb2YgSW1hZ2VGcmFtZURhdGEKKyAgICAgICAgYmUgcHJp
dmF0ZSBhbmQgYWRkIGdldHRlcnMgdG8gcmV0dXJuIHRoZWlyIHZhbHVlcy4KKworICAgICAgICBO
byBuZXcgdGVzdHMgLS0gQ29kZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1l
RHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUhh
c0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNpbmdsZVBp
eGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aXNBbG1vc3RT
b2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lRGF0YTo6dXNlZEZyYW1lQnl0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ltYWdlRnJh
bWVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6SW1h
Z2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6On5JbWFnZUZy
YW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXJTdWJJbWFn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xvcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvaW1hZ2VGcmFtZURhdGEuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWVEYXRhOjppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRh
OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpmcmFtZUJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lRGF0YTo6b3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZURhdGE6OnN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZURhdGE6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpo
YXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aGFzSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6Omhhc01ldGFkYXRhKToKKworMjAxNi0w
Ni0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAg
ICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBlciBmb3Ig
TmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBpcyB0byBtb3ZlIHRo
ZSBwbGF0Zm9ybSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9tIEJpdG1hcEltYWdl
IHRvIFBsYXRmb3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2libGUgb2YgCisgICAg
ICAgIGRyYXdpbmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1hZ2VQdHIgcXVlc3Rp
b25zIHdoZW4gYW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFpbGFibGUuIEFwYXJ0
IGZyb20gZHJhd2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMgd2lsbCBiZQorICAg
ICAgICBjYWxsZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0YSBzbyB3ZSB3aWxs
IGtlZXAgZXZlcnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRyLiBCdXQgd2Ugd2ls
bCBjYXN0IHRoZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdoZW4KKyAgICAgICAg
YSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtl
OgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9N
Lm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdEltYWdlOmFuZFJlY3Rz
Ol0pOgorICAgICAgICAqIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW06CisgICAgICAg
ICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dEluZGljYXRvcjptYXJn
aW46b2Zmc2V0Ol0pOgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9m
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUlt
YWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6
OkZyYW1lRGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRpYWxpemVkIHdpdGgg
ZmFsc2UgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAgIEJpdG1hcEltYWdl
OjpmcmFtZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5IG1faGF2ZU1ldGFk
YXRhLgorICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0FscGhhIGFyZSBzZXQg
aW4gQml0bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJpdG1hcEltYWdlOjpj
YWNoZUZyYW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6fkZyYW1lRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
SW1hZ2U6OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
aXNOaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJbWFnZVJlZik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdl
Q2Fpcm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1J
bWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VD
Ry5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNH
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1h
Z2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUlt
YWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZpZXcuY3BwIHNpbmNl
IFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3MgdG8uCisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTogUmV0dXJucyB0aGUg
c3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxpbmcuCisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgorICAgICAgICAoVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6CisgICAgICAgICog
cGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDctMTMgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIHYyOiBXZWJDb250ZW50IGNyYXNoIGR1ZSB0byBSRUxF
QVNFX0FTU0VSVCghbV9pbkxvYWRQZW5kaW5nSW1hZ2VzKSBpbiBTdHlsZVJlc29sdmVyOjp+U3R5
bGVSZXNvbHZlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYTBkZTdjZDJjYTUzNzdkNzZhMDgzYTE4
MzAwZmFkNWYwNWI2MWRiNy4uMjg5OTQ1Y2JjMjc4Zjc2NDJhYjZkOTk4Njg2MWE5ZGVkM2JiZTVh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA3LTEzICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNl
IFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNj
L1dlYkNhY2hlLm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBpbWFnZUZvclVSTDpdKToKKwogMjAx
Ni0wNy0xMyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFVw
ZGF0ZSBzdXBwb3J0ZWQgcGxhdGZvcm1zIGluIHhjY29uZmlnIGZpbGVzIHRvIG1hdGNoIHRoZSBz
ZGsgbmFtZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjk1OGQ5NTllNjgxNTEyOTQ3ZDA4OTIxYjc5YmUwNjhk
MWFmMjQxMS4uOTcxOTEwMTZkNDVlNTM2Njg0YjQ3Mzk5MjNkNDBhNzZiNmQ4ZmJjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA3LTEzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2Ug
YW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cv
V0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1h
Z2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9y
VVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVz
ZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcElt
YWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAor
ICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAg
ICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2
aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRp
bWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29s
aWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0w
Ny0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYktpdDIg
c2hvdWxkbid0IHNpZ25hbCBjdXN0b20gcHJvdG9jb2wgY2xpZW50cyBmcm9tIHRoZSBOU1VSTENv
bm5lY3Rpb24gbG9hZGVyIHRocmVhZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNWFmZWEzYTE0
ZWU4NmU4MzRlMDFmZjU4NTE0M2E4ZjEwZGFhY2MyMC4uYjJiMjc5MGI4NjQxMjdmYmEzNTk3N2Zl
NDg0MTg3MTQ2ZDA3YThlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMjksNiArMjIyOSw3
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JU09WVFRDdWUu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQ
b2ludC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IDVmZjk5MWZm
N2RhMzA4YmI5MTgyZWNlM2JmMTIxNzMwYTU0OGQyODcuLmJhZTMxZWFmODZlN2ZjYTkwNTgyNTA5
MmFhMzhhNzhjMTFlNDIyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBw
bGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpA
QCAtNTUsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcAogCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTc1LDYgKzc0
LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1Ry
YW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXgg
NTE0NTA0ZTZlYzI1YWE1ZTQzYjk5Mzk4ZDVlMzVjZWVlYTc2NmFhNC4uNjRhZTE3MTA4OWRjYmYw
Y2Q0NWI3MGE5YjhmNzBlZmE5ZmZkZWRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTEyMiw3ICsxMjIsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6Tkcu
Y3BwCkBAIC0xMzQsNiArMTMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0
Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Q
YXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWlyby5j
cHAKQEAgLTE3OSw5ICsxNzksOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1l
bmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vaW1hZ2UtZW5jb2Rl
cnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvZWZsL05ldHdv
cmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDY0
NWFkZDFjZTM4ODg4YjA0ZDRhMmQ4OWFkYTBhN2M2ZGUxOTk4NmIuLmQzMWY1NzA2YTY5NTliMjMx
YjViZmIyMmYwN2QxODQzYWU4NjFhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0x
MDEsNyArMTAxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKQEAgLTExNSw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQ
dHJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1h
dHJpeENhaXJvLmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAgICAgcGxhdGZv
cm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nh
aXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nh
aXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3Rr
L1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNt
YWtlCmluZGV4IDlmNmY0OTZiNmNjNGVmNmU0Yjc0ZDg0YWMwYWE5ZGVhNTVhMDIzN2IuLjRkZGVk
MzA4OGY0ZjM5NmZlZjQ0NGU3ZWU2NWM2NDEwNjU4ZjU4NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCkBAIC0zOTcsNyArMzk3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbQog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tCiAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQ
b2ludENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcApAQCAt
NDE3LDYgKzQxNiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW5DYWlyby5jbWFrZQppbmRleCAyYzU1M2IwNTUxZGFkNjlhYTE5OWQ5NjBmNTUyMzQzZDkyMGYw
N2IzLi4zNDJhYTkyNzMyZmQ4ZjkyZTg1Y2ZhNjI2ZDU1NTcwZWY2NmI2YTY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTIxLDcgKzIxLDYgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRmxv
YXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cApAQCAtMzQsNiArMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRm
b3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3Jt
SW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVBhdGhD
YWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcApA
QCAtNDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAogCi0gICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwCiAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0
ZTdjM2EyMjlhMTYzYTVmNWE2MGY2MzJiZWEwZTM3YWQyMzk0MGUwLi5jY2IwNzBiZTA5YmFjMTZm
NWY5ZmQzMTlhODMyYzk3ODA5YjIxMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDg1LDcgKzE0ODUsNyBAQAogCQkzNzVD
RDIzMjExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUNEMjMxMTE5RDQzQzgwMEEyQTg1OSAvKiBI
eXBoZW5hdGlvbi5oICovOyB9OwogCQkzNzZEQ0NFMTEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzZE
Q0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi87IH07CiAJCTM3NzRBQkE1MEZB
MjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NzRBQkEzMEZBMjFFQjQwMEFEN0RF
OSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogQml0
bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgKi87IH07
CisJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5
QTAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgKi87IH07CiAJCTM3OTE5QzIzMEI3RDE4
ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3Np
dGlvbkl0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4IC8qIFBv
c2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3OTE5QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMzc5MjkxN0ExOTg1RUYzOTAw
RjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjMyNCwxMCArMjMyNCwxNCBAQAogCQk1M0VEM0ZERjE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRl
cm5hbFNldHRpbmdzR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRp
bmdzR2VuZXJhdGVkLmggKi87IH07CiAJCTUzRUY3NjZCMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0
aW5nc01hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87IH07CiAJ
CTUzRUY3NjZDMTY1MzE5OTQwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oIGluIENvcHkgR2Vu
ZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRjc2
NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87IH07CisJCTU1MDRFNENC
MUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRt
YXBQaXhlbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4NUY2MDM5
MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1RjYwMzkw
MDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFt
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1
NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQTFDQUFGMEFCMDAzNDk0
MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9OwogCQk1NTVCODdFRDFDQUFGMEFCMDAzNDk0
MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5o
ICovOyB9OworCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU3NEYwODUxRDAy
NzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAgLyogSW1h
Z2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLzsg
fTsKKwkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUNCQTZBMDFEMURGMkUx
MDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxh
dGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovOyB9OwogCQk1
NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2NjAwOUM2
MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAqLzsgfTsKIAkJNTdFRjVFNjAxRDIwQzgzOTAwMTcx
RTYwIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1N0VGNUU1RjFEMjBDODM5MDAxNzFFNjAgLyogVGV4dENvZGVj
UmVwbGFjZW1lbnQuaCAqLzsgfTsKQEAgLTkwNjMsNyArOTA2Nyw3IEBACiAJCTM3NkRDQ0UwMTNC
NEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRSdW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzcy
QjA5NTE2NTM1ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBU
ZXN0UmVxdWVzdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdmVy
bGFwVGVzdFJlcXVlc3RDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzc3
QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFwSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdl
Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZvcm1JbWFn
ZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjEwQjdEMTg4NjAw
QTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9zaXRpb25JdGVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3Jl
ZGVudGlhbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3JlZGVudGlh
bEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5ODksMTAgKzk5OTMsMTQg
QEAKIAkJNTNFRDNGREMxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVy
YXRlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ludGVybmFs
U2V0dGluZ3NHZW5lcmF0ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VE
M0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VGNzY2QTE2NTMwQTYxMDA0Q0JF
NDkgLyogU2V0dGluZ3NNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2V0dGluZ3NNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTUwNEU0Q0Ex
RDM1NTMyRDAwRkU1MDg4IC8qIEJpdG1hcFBpeGVscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaXRtYXBQ
aXhlbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUwQTBCQzcwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBBMEJDODA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTVCODdFQTFD
QUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU3NEYwODUxRDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRm
b3JtSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1NUNCQTY5RjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VGcmFtZURh
dGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTZBMDFEMURGMkUxMDA0
NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VGcmFtZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVENDA4
RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBTaW11bGF0
ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW11bGF0
ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAyOCw3ICsyMjAz
Niw2IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3
IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRCNjc5NSAv
KiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQ
b2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0
Q0cuY3BwICovLApAQCAtMjIwNTUsNiArMjIwNjIsNyBAQAogCQkJCUE4MEEzOEZEMEU1MENDODIw
MEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4MTQwMDJDRTY0
RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUzODE0MDAyQ0U2
NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVD
NyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovLAogCQkJCTFGQzQwRkI4MTY1NUM1OTEwMDQwRjI5
RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLywKIAkJCQkxRkM0MEZCNzE2NTVDNTkx
MDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oICovLAogCQkJCUIyNzUzNTJBMEIw
NTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAqLywKQEAgLTIyMTIy
LDYgKzIyMTMwLDcgQEAKIAkJCQlCRUYyOUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVkaW9UcmFj
a1ByaXZhdGUuaCAqLywKIAkJCQlBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1h
Z2UuY3BwICovLAogCQkJCUE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5o
ICovLAorCQkJCTU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLywK
IAkJCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEgLyogQ0RNU2Vzc2lvbi5oICovLAogCQkJCUIy
NzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3NTM1MzkwQjA1
MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCkBAIC0yMjIwNiw2ICsyMjIxNSw4IEBACiAJCQkJ
NDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlCMkEx
MEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkyMkJEOUY3RDEz
NTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNTVDQkE2OUYxRDFE
RjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLywKKwkJCQk1NUNCQTZBMDFEMURG
MkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLywKIAkJCQlCQzdGNDRBNzBCOUUzMjRF
MDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oICovLAogCQkJCUE4NzQ4RDc0MTJDQzNGODkwMDFG
QkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNwcCAqLywKIAkJCQlBODc0OEQ2NjEyQ0MzNzYzMDAx
RkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovLApAQCAtMjIyNTUsNiArMjIyNjYsNyBAQAog
CQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJ
QThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVC
MEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNTU3NEYwODUxRDAyNzQ0NDAw
QjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNB
MTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAv
KiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIw
MDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI2MDI4LDYgKzI2MDQwLDcg
QEAKIAkJCQk4NUU3MTFCOTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE1hcEVsZW1lbnRJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU3OUYwQzAzQkJEMzAwOEJCMEVFIC8qIERP
TUhUTUxNYXJxdWVlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU2RUEwQzAzQjc0
MTAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkRFQzY2NTUxQzgyRDA0MTAwOTk4NDZBIC8qIERPTUhUTUxNZWRpYUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjUxMUM4MkQwMTYwMDk5ODQ2QSAvKiBE
T01IVE1MTWVkaWFFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QkE0RDEz
MEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MTWVudUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMjY0NjksNiArMjY0ODIsNyBAQAogCQkJCUQzNTlENzhBMTI5Q0EyNzEwMDA2RTVEMiAvKiBI
VE1MRGV0YWlsc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3OUZBMEExOTE2REYw
MEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThF
QTdDQjcwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQk1NUNCQTZBMjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4RUE3OUY3MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERv
Y3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg2NzEyMjg4M0U5MDBCODFGRjggLyog
SFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MzY5LDYgKzI4MzgzLDcg
QEAKIAkJCQlCMjIyNzk5MzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdB
bmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OTgwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTU1MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQzOUQzMzQ1MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRvckZhY3RvcnkuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4RkIzRjg0MTNCQzc1NEMwMDk5RkMxOCAvKiBTVkdBdHRyaWJ1
dGVUb1Byb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5QzBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHQ2lyY2xlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTQyMSw3ICsy
OTQzNiw3IEBACiAJCQkJRkRDNTRGMDQxMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVhZEZpbHRlck5v
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjYxMkIwMjY3NjAwQzFBMzU5IC8qIEJp
cXVhZFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBCNDIzMzg4MDBE
N0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzc3QTNBOTAxNUVG
Q0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzc3
QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NzZENkM3ODEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyRURFRjFGMzEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTFEMzFDREMxOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmlsZVJlZmVy
ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5Nzg0LDYgKzI5Nzk5LDcgQEAKIAkJCQkyRTJE
OTlFODEwRTJCQzFDMDA0OTYzMzcgLyogRE9NQmxvYi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1
MDg5Q0Q4MEE5OEM0MjgwMEEyNzVBQSAvKiBET01DREFUQVNlY3Rpb24ubW0gaW4gU291cmNlcyAq
LywKIAkJCQk4NUFDQTk4NzBBOUI1MjAzMDA2NzFFOTAgLyogRE9NQ2hhcmFjdGVyRGF0YS5tbSBp
biBTb3VyY2VzICovLAorCQkJCTU1Q0JBNkExMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1l
RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTA4OUNEQTBBOThDNDI4MDBBMjc1QUEgLyog
RE9NQ29tbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3OEQwN0JFMTQ1QTBGNkMwMDk2OTA4
RCAvKiBET01Db3JlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1OEMzOEE2MEFB
OEYyMDQwMEIxODdBNCAvKiBET01Db3VudGVyLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDQwMTFlYTNmZDhjMDQ2OTc0YzU1ZDQ4ZTM5NmYxYjgz
YjgxZjMzNWQuLmE1YWM0ZjA1YWUzMzlhOGQ2NDcwNmMxMGZjMGY3YWY0MDQyNTYyM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC02MDYsNyArNjA2LDcgQEAgLSAodm9pZCln
ZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0czooTlNB
cnJheSAqKilyZWN0cwogCiAgICAgaWYgKHRleHRJbmRpY2F0b3IpIHsKICAgICAgICAgaWYgKElt
YWdlKiBpbWFnZSA9IHRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpKQotICAgICAgICAgICAg
KmNnSW1hZ2UgPSAoQ0dJbWFnZVJlZilDRkF1dG9yZWxlYXNlKENHSW1hZ2VSZXRhaW4oaW1hZ2Ut
PmdldENHSW1hZ2VSZWYoKSkpOworICAgICAgICAgICAgKmNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQppbmRl
eCAzNjRhOWE4N2NlNmYwNjYzOTQ4Yjg4NDZlOGUyY2U2ZDE5MGYyNDg5Li5hNzRkYTg1YWNlY2Ez
YzY2OThkZDE1NmFiMzFhNmM5NzFhMzU0ZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0KQEAgLTE2Miw5ICsxNjIsOSBAQCAtIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBhc3NSZWZQ
dHI8VGV4dEluZGljYQogICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgxIC8gX3Rl
eHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOwogICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwogICAgIGlmIChpbmRpY2F0b3JXYW50c0NvbnRlbnRD
cm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0
SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPmdldENHSW1hZ2VSZWYoKTsK
KyAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRo
SGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7CiAgICAgZWxzZQotICAgICAgICBjb250ZW50c0lt
YWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7Cisg
ICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPm5h
dGl2ZUltYWdlKCk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5jZUxheWVy
cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogCkBAIC0yNjUsNyAr
MjY1LDcgQEAgc3RhdGljIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGVCb3Vu
Y2VBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXQKIHN0YXRpYyBSZXRhaW5QdHI8Q0FCYXNp
Y0FuaW1hdGlvbj4gY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbihDRlRpbWVJbnRlcnZh
bCBkdXJhdGlvbiwgVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRvcikKIHsKICAgICBSZXRhaW5Q
dHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRp
b24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJjb250ZW50cyJdOwotICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBjb250ZW50c0ltYWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+Z2V0
Q0dJbWFnZVJlZigpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0g
dGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKTsKICAgICBbY3Jvc3Nm
YWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6KGlkKWNvbnRlbnRzSW1hZ2UuZ2V0KCldOwogICAgIFtj
cm9zc2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CiAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCA0NjBk
MWI4NTZiNzdiN2NmNGVjNjg5NjU4MWI4MzNkM2U3Zjk3MDE0Li5mYzY0OWQxMGFhYjljMTNmZmYy
OTMwNTVhNzA3Y2I3NDUzNzQ2OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC02OCwxNSArNjgsMTMgQEAgQml0bWFwSW1hZ2U6
OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRyJiYgaW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2Vy
dmVyKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQogICAgICwgbV9hbmltYXRpb25GaW5p
c2hlZFdoZW5DYXRjaGluZ1VwKGZhbHNlKQogeworICAgIG1fZnJhbWVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoMSk7CisgICAgbV9mcmFtZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoaW1hZ2Up
KTsKKyAgICAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgZGVjb2Rlciwgd2UgY2FuJ3Qg
ZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRpb24uCiAgICAgLy8gU2V0IG1fc2l6ZVJlc3Bl
Y3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2FtZSBhcyBtX3NpemUgc28gaXQncyBub3QgMHgw
LgotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZSA9IE5hdGl2ZUltYWdl
OjpzaXplKGltYWdlKTsKKyAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUg
PSBtX2ZyYW1lc1swXS5zaXplKCk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS5hcmVhKCkg
KiA0OwotICAgIAotICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0gICAgbV9mcmFtZXNbMF0ubV9oYXNB
bHBoYSA9IE5hdGl2ZUltYWdlOjpoYXNBbHBoYShpbWFnZSk7Ci0gICAgbV9mcmFtZXNbMF0ubV9o
YXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBXVEZNb3ZlKGlt
YWdlKTsKIH0KIAogQml0bWFwSW1hZ2U6On5CaXRtYXBJbWFnZSgpCkBAIC0xMDUsNyArMTAzLDcg
QEAgYm9vbCBCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkK
ICAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7CisgICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5oYXNJbWFnZSgpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpoYXNTaW5nbGVT
ZWN1cml0eU9yaWdpbigpIGNvbnN0CkBAIC0xMjUsOSArMTIzLDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKICAgICAgICAgLy8gVGhlIHVu
ZGVybHlpbmcgZnJhbWUgaXNuJ3QgYWN0dWFsbHkgY2hhbmdpbmcgKHdlJ3JlIGp1c3QgdHJ5aW5n
IHRvCiAgICAgICAgIC8vIHNhdmUgdGhlIG1lbW9yeSBmb3IgdGhlIGZyYW1lYnVmZmVyIGRhdGEp
LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyCiAgICAgICAgIC8vIHRoZSBtZXRhZGF0YS4KLSAg
ICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAg
ICAgICAgaWYgKG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKSkKLSAgICAgICAgICAgIGZyYW1lQnl0
ZXNDbGVhcmVkICs9IGZyYW1lQnl0ZXM7CisgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IG1f
ZnJhbWVzW2ldLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSk7CiAgICAg
fQogCiAgICAgbV9zb3VyY2UuY2xlYXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFtZSwgZGF0
YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CkBAIC0xNTAsOCArMTQ2LDggQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxsKQogICAg
ICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBhbGxGcmFt
ZUJ5dGVzICs9IG1fZnJhbWVzW2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChhdXRvJiBm
cmFtZSA6IG1fZnJhbWVzKQorICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLmZyYW1lQnl0
ZXMoKTsKIAogICAgIGlmIChhbGxGcmFtZUJ5dGVzID4gbGFyZ2VBbmltYXRpb25DdXRvZmYpIHsK
ICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGRlc3Ryb3lEZWNvZGVkRGF0YUlm
TmVjZXNzYXJ5IGRlc3Ryb3lpbmdEYXRhOiBhbGxGcmFtZUJ5dGVzPSV1IGN1dG9mZj0ldSIsIHRo
aXMsIGFsbEZyYW1lQnl0ZXMsIGxhcmdlQW5pbWF0aW9uQ3V0b2ZmKTsKQEAgLTE3Nyw3ICsxNzMs
NyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkodW5zaWduZWQg
ZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTbwogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRl
Y29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50PihmcmFtZUJ5dGVzQ2xlYXJlZCkp
OwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxp
bmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5n
KQogewogICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgQVNTRVJUKG1f
ZGVjb2RlZFNpemUgPT0gMCB8fCBudW1GcmFtZXMgPiAxKTsKQEAgLTE4NSwyNSArMTgxLDEyIEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltCiAgICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8IG51bUZy
YW1lcykKICAgICAgICAgbV9mcmFtZXMuZ3JvdyhudW1GcmFtZXMpOwogCi0gICAgaWYgKGZyYW1l
Q2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpIHsKLSAgICAgICAgbV9mcmFtZXNbaW5k
ZXhdLm1faW1hZ2UgPSBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCk7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2
ZWwgPSBzdWJzYW1wbGluZ0xldmVsOwotICAgIH0KLQotICAgIG1fZnJhbWVzW2luZGV4XS5tX29y
aWVudGF0aW9uID0gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKLSAgICBtX2Zy
YW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzW2luZGV4XS5t
X2lzQ29tcGxldGUgPSBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KTsKKyAg
ICBtX2ZyYW1lc1tpbmRleF0gPSBtX3NvdXJjZS5jcmVhdGVGcmFtZURhdGFBdEluZGV4KGluZGV4
LCBzdWJzYW1wbGluZ0xldmVsLCBjYWNoaW5nKTsKIAotICAgIGlmIChyZXBldGl0aW9uQ291bnQo
ZmFsc2UpICE9IGNBbmltYXRpb25Ob25lKQotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9kdXJh
dGlvbiA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICBMT0coSW1h
Z2VzLCAiQml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNvbXBsZXRl
ICVkKSIsIHRoaXMsIGluZGV4LCBjYWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpN
ZXRhZGF0YSA/ICJtZXRhZGF0YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5mcmFtZUJ5
dGVzKCksIG1fZnJhbWVzW2luZGV4XS5pc0NvbXBsZXRlKCkpOwogCi0gICAgbV9mcmFtZXNbaW5k
ZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7Ci0g
ICAgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlcyA9IG1fc291cmNlLmZyYW1lQnl0ZXNBdElu
ZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKLQotICAgIExPRyhJbWFnZXMsICJCaXRtYXBJ
bWFnZSAlcCBjYWNoZUZyYW1lICVsdSAoJXMldSBieXRlcywgY29tcGxldGUgJWQpIiwgdGhpcywg
aW5kZXgsIGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSA/ICJtZXRhZGF0YSBvbmx5
LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMsIG1fZnJhbWVzW2luZGV4XS5t
X2lzQ29tcGxldGUpOwotCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKSB7Ci0gICAg
ICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0ubV9mcmFt
ZUJ5dGVzKTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpIHsKKyAgICAgICAg
aW50IGRlbHRhQnl0ZXMgPSBzYWZlQ2FzdDxpbnQ+KG1fZnJhbWVzW2luZGV4XS5mcmFtZUJ5dGVz
KCkpOwogICAgICAgICBtX2RlY29kZWRTaXplICs9IGRlbHRhQnl0ZXM7CiAgICAgICAgIC8vIFRo
ZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vic3VtZSB0aGUgcGFydGlhbGx5IGRlY29kZWQg
ZGF0YSB1c2VkCiAgICAgICAgIC8vIHRvIGRldGVybWluZSBpbWFnZSBwcm9wZXJ0aWVzLgpAQCAt
Mjg4LDIxICsyNzEsMTkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCiAgICAgLy8gZnJhbWUgYWZmZWN0ZWQgYnkgYXBwZW5kaW5nIG5ldyBkYXRh
IGhlcmUuIFRodXMgd2UgaGF2ZSB0byBjbGVhciBhbGwgdGhlCiAgICAgLy8gaW5jb21wbGV0ZSBm
cmFtZXMgdG8gYmUgc2FmZS4KICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQ2xlYXJlZCA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkgeworICAgIGZv
ciAoYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykgewogICAgICAgICAvLyBOT1RFOiBEb24ndCBjYWxs
IGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoKSBoZXJlLCB0aGF0IHdpbGwgdHJ5IHRvCiAgICAgICAg
IC8vIGRlY29kZSBhbnkgdW5jYWNoZWQgKGkuZS4gbmV2ZXItZGVjb2RlZCBvcgogICAgICAgICAv
LyBjbGVhcmVkLW9uLWEtcHJldmlvdXMtcGFzcykgZnJhbWVzIQotICAgICAgICB1bnNpZ25lZCBm
cmFtZUJ5dGVzID0gbV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAobV9mcmFt
ZXNbaV0ubV9oYXZlTWV0YWRhdGEgJiYgIW1fZnJhbWVzW2ldLm1faXNDb21wbGV0ZSkKLSAgICAg
ICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IChtX2ZyYW1lc1tpXS5jbGVhcih0cnVlKSA/IGZy
YW1lQnl0ZXMgOiAwKTsKKyAgICAgICAgaWYgKGZyYW1lLmhhc01ldGFkYXRhKCkgJiYgIWZyYW1l
LmlzQ29tcGxldGUoKSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lLmNs
ZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgfQogICAgIGRlc3Ryb3lN
ZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xlYXJlZCwgQ2xlYXJlZFNvdXJjZTo6Tm8pOwog
I2Vsc2UKICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgZGlmZmVyZW50IGZvciBpT1M/CiAgICAg
aW50IGRlbHRhQnl0ZXMgPSAwOwogICAgIGlmICghbV9mcmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGludCBieXRlcyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLm1fZnJhbWVCeXRl
czsKLSAgICAgICAgaWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFyKHRydWUp
KSB7CisgICAgICAgIGlmIChpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAx
XS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpKSB7CiAgICAgICAgICAgICBk
ZWx0YUJ5dGVzICs9IGJ5dGVzOwogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBtX2RlY29kZWRQ
cm9wZXJ0aWVzU2l6ZTsKICAgICAgICAgICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplID0gMDsK
QEAgLTM2NiwxNSArMzQ3LDE1IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWlsYWJsZSgp
CiAgICAgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAotYm9vbCBCaXRtYXBJbWFnZTo6ZW5z
dXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nIGZyYW1lQ2Fj
aGluZykKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5nKQogewogICAgIGlmIChpbmRleCA+PSBm
cmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpbmRleCA+PSBt
X2ZyYW1lcy5zaXplKCkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRh
QW5kRnJhbWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICB8fCAoZnJhbWVD
YWNoaW5nID09IENhY2hlTWV0YWRhdGFPbmx5ICYmICFtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0
YWRhdGEpKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBmcmFtZUNhY2hpbmcpOworICAg
ICAgICB8fCAoY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJ
bWFnZSAmJiAhbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpCisgICAgICAgIHx8IChjYWNoaW5n
ID09IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSAmJiAhbV9mcmFtZXNbaW5kZXhd
Lmhhc01ldGFkYXRhKCkpKQorICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBjYWNoaW5nKTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzg4LDEwICszNjksOSBAQCBOYXRpdmVJbWFnZVB0
ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9hdCBwcmVz
ZW50YXRpb25TYwogCiAgICAgLy8gV2UgbWF5IGhhdmUgY2FjaGVkIGEgZnJhbWUgd2l0aCBhIGhp
Z2hlciBzdWJzYW1wbGluZyBsZXZlbCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvCiAgICAgLy8g
cmUtZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KLSAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5z
aXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZlbCA8IG1f
ZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpIHsKKyAgICBpZiAoaW5kZXggPCBtX2Zy
YW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkgJiYgc3Vic2FtcGxpbmdM
ZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5zdWJzYW1wbGluZ0xldmVsKCkpIHsKICAgICAgICAgLy8g
SWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEgc2l6ZSwg
cmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1f
ZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5jbGVh
cih0cnVlKTsKKyAgICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhdLmNsZWFy
KEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgICAgIGludmFsaWRhdGVQbGF0
Zm9ybURhdGEoKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBzaXplQ2hhbmdlOwogICAgICAg
ICBpZiAoaW1hZ2VPYnNlcnZlcigpKQpAQCAtMzk5LDQwICszNzksNzIgQEAgTmF0aXZlSW1hZ2VQ
dHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgcHJl
c2VudGF0aW9uU2MKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlbid0IGZldGNoZWQgYSBmcmFt
ZSB5ZXQsIGRvIHNvLgotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJh
bWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsLCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIGlmIChpbmRleCA+PSBtX2ZyYW1l
cy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICBjYWNoZUZy
YW1lKGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGFBbmRJbWFnZSk7CisKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmltYWdlKCk7Cit9
CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoKQoreworICAg
IHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdlUHRyIEJp
dG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdElu
ZGV4KGkpOworICAgICAgICBpZiAoaW1hZ2UgJiYgUGxhdGZvcm1JbWFnZShpbWFnZSkuc2l6ZSgp
ID09IHNpemUpCisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQorICAgIAorICAgIC8v
IEZhbGxiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZSBpbWFnZSBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBy
aWdodCBzaXplCisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAgIAorTmF0
aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKK3sK
KyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworfQogCi0gICAg
cmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBC
aXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKCkKK3sKKyAgICBWZWN0b3I8TmF0aXZlSW1h
Z2VQdHI+IGltYWdlczsKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmIChhdXRv
IGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkpCisgICAgICAgICAgICBpbWFnZXMuYXBwZW5k
KGltYWdlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlczsKIH0KIAogYm9vbCBCaXRt
YXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYg
KCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYg
KCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5k
ZXhdLm1faXNDb21wbGV0ZTsKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmlzQ29tcGxldGUo
KTsKIH0KIAogZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBp
bmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIENhY2hlTWV0YWRh
dGFPbmx5KSkKKyAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIEltYWdlRnJhbWVE
YXRhOjpDYWNoaW5nOjpNZXRhZGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5tX2R1cmF0aW9uOwotfQotCi1OYXRpdmVJbWFnZVB0ciBCaXRtYXBJ
bWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQotewotICAgIHJldHVybiBmcmFtZUlt
YWdlQXRJbmRleChjdXJyZW50RnJhbWUoKSk7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5k
dXJhdGlvbigpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNo
ZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiBt
X2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc01l
dGFkYXRhKCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0uaGFzQWxwaGEoKTsKIAog
ICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CiB9CkBAIC00
NDQsMTEgKzQ1NiwxMSBAQCBib29sIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVLbm93blRvQmVP
cGFxdWUoKQogCiBJbWFnZU9yaWVudGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGlu
ZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGlu
ZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4g
SW1hZ2VPcmllbnRhdGlvbigpOwogCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2hhdmVNZXRh
ZGF0YSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX29yaWVudGF0aW9uOworICAg
IGlmIChtX2ZyYW1lc1tpbmRleF0uaGFzTWV0YWRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5vcmllbnRhdGlvbigpOwogCiAgICAgcmV0dXJuIG1fc291cmNlLm9yaWVudGF0
aW9uQXRJbmRleChpbmRleCk7CiB9CkBAIC03MDAsMTcgKzcxMiw1NiBAQCBDb2xvciBCaXRtYXBJ
bWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAg
ICAgCiAgICAgQVNTRVJUKG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENvbG9yID0gTmF0
aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2ltYWdlLmdldCgp
KTsKKyAgICBtX3NvbGlkQ29sb3IgPSBtX2ZyYW1lc1swXS5zaW5nbGVQaXhlbFNvbGlkQ29sb3Io
KTsKICAgICAKICAgICBBU1NFUlQobV9zb2xpZENvbG9yKTsKICAgICByZXR1cm4gbV9zb2xpZENv
bG9yLnZhbHVlKCk7CiB9CiAgICAgCitib29sIEJpdG1hcEltYWdlOjppc0FsbW9zdFNvbGlkQ29s
b3IoKQoreworICAgIGlmIChmcmFtZUNvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIGVuc3VyZUZyYW1lSXNDYWNoZWQoMCkgJiYgbV9mcmFtZXNbMF0uaXNB
bG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCiBib29sIEJpdG1hcEltYWdlOjpjYW5BbmltYXRl
KCkKIHsKICAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+IDE7CiB9
CiAKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9u
IGRlc2NyaXB0aW9uKQoreworICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkgfHwgc3JjUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdGFy
dEFuaW1hdGlvbihEb05vdENhdGNoVXApOworI2Vsc2UKKyAgICBzdGFydEFuaW1hdGlvbigpOwor
I2VuZGlmCisgICAgCisgICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsK
KyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihj
b250ZXh0LCBkZXN0UmVjdCwgY29sb3IsIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIFBs
YXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoY29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3Qp
KTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFu
IGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb24oZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKKyAgICBpZiAoZGVz
Y3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRh
dGlvbikKKyAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1
cnJlbnRGcmFtZSk7CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShpbWFnZSkuZHJhdyhjb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgbV9zaXplLCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworICAg
IAorICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlk
RHJhdyh0aGlzKTsKK30KKyAgICAKIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0cmVhbSYg
dHMpIGNvbnN0CiB7CiAgICAgSW1hZ2U6OmR1bXAodHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggMDc1ODkyOWNkODdmYWRhY2YwMmI2
ZWQ4ZWVhZmU3ZGVmZDY2ZjBjNS4uMjIxOGM4MjRiNTI4ZmQ2MzliYWIxMzhkZWNjOThiOTgxNmEx
NjgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFw
SW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oCkBAIC0yOCwxMSArMjgsMTMgQEAKICNpZm5kZWYgQml0bWFwSW1hZ2VfaAogI2RlZmluZSBC
aXRtYXBJbWFnZV9oCiAKLSNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisj
aW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lRGF0YS5oIgogI2luY2x1ZGUg
IkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUg
IkludFNpemUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCiAKICNpZiBVU0UoQ0cpIHx8
IFVTRShBUFBLSVQpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDcsNjMgKzQ5LDkg
QEAgdHlwZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2UgV1RGIHsK
LSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVEYXRhPiA6
IHB1YmxpYyBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJhbWVEYXRh
IG1lbWJlcnMgaW5pdGlhbGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgVGltZXI7CiAKLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0gICAgSW50U2l6
ZSBzaXplKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0gICAgYm9vbCBoYXNBbHBoYShjb25zdCBO
YXRpdmVJbWFnZVB0ciYpOwotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBO
YXRpdmVJbWFnZVB0ciYpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS8vIEZyYW1lRGF0YSBDbGFzcwotLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0cnVjdCBGcmFtZURhdGEgewot
cHVibGljOgotICAgIEZyYW1lRGF0YSgpCi0gICAgICAgIDogbV9oYXZlTWV0YWRhdGEoZmFsc2Up
Ci0gICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxwaGEodHJ1
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkZyYW1lRGF0YSgpCi0gICAgeyAKLSAgICAgICAgY2xl
YXIodHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBpbWFnZSBkYXRhIG9u
IHRoZSBmcmFtZSwgYW5kIChvcHRpb25hbGx5KSB0aGUgbWV0YWRhdGEuCi0gICAgLy8gUmV0dXJu
cyB3aGV0aGVyIHRoZXJlIHdhcyBjYWNoZWQgaW1hZ2UgZGF0YSB0byBjbGVhci4KLSAgICBib29s
IGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSk7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNlZEZyYW1l
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9mcmFtZUJ5dGVzIDogMDsgfQotCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKLSAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50
YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OwotICAgIFN1YnNhbXBsaW5nTGV2ZWwg
bV9zdWJzYW1wbGluZ0xldmVsIHsgMCB9OwotICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07Ci0g
ICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7Ci0gICAgYm9vbCBtX2lzQ29tcGxldGUgOiAxOwot
ICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7Ci0gICAgdW5zaWduZWQgbV9mcmFtZUJ5dGVzIHsgMCB9
OwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLy8gQml0bWFwSW1hZ2UgQ2xhc3MKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLQogY2xhc3MgQml0bWFwSW1hZ2UgZmluYWwgOiBwdWJs
aWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAgICBmcmllbmQg
Y2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0xNTUsMTIgKzEwMyw2IEBAIHB1Ymxp
YzoKICAgICBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgb3ZlcnJpZGU7CiAjZW5k
aWYKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDR0ltYWdlUmVmIGdldENHSW1h
Z2VSZWYoKSBvdmVycmlkZTsKLSAgICBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6
ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGdl
dENHSW1hZ2VBcnJheSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAg
ICAgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIG92ZXJyaWRlOwogICAgIGJvb2wgZ2V0SEJJVE1B
UE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgb3ZlcnJpZGU7CkBAIC0xNzQsOCArMTE2
LDEzIEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZhc09iamVjdChFdmFzKikgb3Zl
cnJpZGU7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUo
Y29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRh
dGlvbkZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZyYW1lT3JpZW50YXRpb25B
dEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQorICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gZnJh
bWVzTmF0aXZlSW1hZ2VzKCkgb3ZlcnJpZGU7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBpc0FsbW9zdFNvbGlkQ29sb3IoKTsKIAogICAgIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0Jl
T3BhcXVlKCkgb3ZlcnJpZGU7CiAKQEAgLTIxNSw3ICsxNjIsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
c2l6ZV90IGZyYW1lQ291bnQoKTsKIAogICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdElu
ZGV4KHNpemVfdCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50ID0gMSk7Ci0gICAgTmF0aXZl
SW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIAogICAgIGJv
b2wgaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKQEAgLTIyNSwxMSArMTcxLDEwIEBA
IHByb3RlY3RlZDoKICAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4
KHNpemVfdCk7CiAKICAgICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2ZXIgYWNj
ZXNzZWQgZXhjZXB0IGludGVybmFsbHkuCi0gICAgZW51bSBJbWFnZUZyYW1lQ2FjaGluZyB7IENh
Y2hlTWV0YWRhdGFPbmx5LCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUgfTsKLSAgICB2b2lkIGNhY2hl
RnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyA9
IENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7CisgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1l
RGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQgYmVmb3Jl
IGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9yIGluZm8gd2l0aG91dCBkZWNvZGluZy4gUmV0
dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91bmRzLgotICAgIGJvb2wgZW5zdXJlRnJhbWVJ
c0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nID0gQ2FjaGVNZXRhZGF0YUFu
ZEZyYW1lKTsKKyAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YUFu
ZEltYWdlKTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhLiBXaGVu
IHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8vIHRoZSBlbnRpcmUgZnJh
bWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJveQpAQCAt
MjkyLDcgKzIzNyw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6ZVJlc3Bl
Y3RpbmdPcmllbnRhdGlvbjsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZSB7IDAgfTsgLy8g
VGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KLSAgICBWZWN0b3I8
RnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMg
b2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRo
ZSBjYWNoZS4KKyAgICBWZWN0b3I8SW1hZ2VGcmFtZURhdGEsIDE+IG1fZnJhbWVzOyAvLyBBbiBh
cnJheSBvZiB0aGUgY2FjaGVkIGZyYW1lcyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBoYXZlIHRvIHJl
ZiBmcmFtZXMgdG8gcGluIHRoZW0gaW4gdGhlIGNhY2hlLgogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRpbWVyPiBtX2ZyYW1lVGltZXI7CiAgICAgaW50IG1fcmVwZXRpdGlvbkNvdW50IHsgY0FuaW1h
dGlvbk5vbmUgfTsgLy8gSG93IG1hbnkgdG90YWwgYW5pbWF0aW9uIGxvb3BzIHdlIHNob3VsZCBk
by4gVGhpcyB3aWxsIGJlIGNBbmltYXRpb25Ob25lIGlmIHRoaXMgaW1hZ2UgdHlwZSBpcyBpbmNh
cGFibGUgb2YgYW5pbWF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBQaXhlbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YWEyNDAwZjNhZWY3YjY5OWQyYWE0ZGY3ZGE0
NDcyNGRkM2NkNThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDb2xvci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisj
aW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCaXRtYXBQaXhlbHMgeworcHVibGljOgorICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBjcmVhdGUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihzaXplLCBwcmVtdWx0aXBseUFscGhhKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3JlYXRlKGNv
bnN0IEJpdG1hcFBpeGVscyYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxCaXRtYXBQaXhlbHM+KG90aGVyKTsKKyAgICB9CisKKyAgICBCaXRtYXBQaXhlbHMo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZSkKKyAgICAg
ICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAgICBzZXRTaXplKHNpemUpOworICAgIH0K
KworICAgIEJpdG1hcFBpeGVscyhjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKKyAgICAgICAg
bV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IG90aGVy
Lm1fc2l6ZTsKKyAgICAgICAgbV9yZWN0ID0gb3RoZXIubV9yZWN0OworICAgICAgICBtX3ByZW11
bHRpcGx5QWxwaGEgPSBvdGhlci5tX3ByZW11bHRpcGx5QWxwaGE7CisgICAgfQorCisgICAgTmF0
aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdDsKKworICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS50cnlSZXNlcnZl
Q2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUucmVzaXplKHNpemUuYXJlYSgpKTsKKyAgICAgICAg
bV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7
CisgICAgICAgIG1fcmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKTsKKyAgICAgICAg
Y2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemUu
aXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91bmRzKHJlY3QpKTsKKyAgICAgICAgbV9y
ZWN0ID0gcmVjdDsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CisgICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpbkJvdW5kcyhJbnRQb2ludCh4LCB5KSkgPyBtX3BpeGVscyArIHkgKiBtX3NpemUud2lk
dGgoKSArIHggOiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAg
ICAgICAgbWVtc2V0KG1fcGl4ZWxzLCAwLCBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEzMikp
OworICAgIH0KKworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAg
eworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgaW5Cb3VuZHMocmVjdCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9
IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIqIHN0YXJ0ID0g
YXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0
LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbXNldChzdGFydCwgMCwgcmVjdFdpZHRo
SW5CeXRlcyk7CisgICAgICAgICAgICBzdGFydCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgcmVwZWF0Rmlyc3RSb3coY29uc3QgSW50UmVjdCYgcmVjdCkK
KyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCBpbkJvdW5kcyhyZWN0KSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5
dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJHQkEzMiogc3Jj
ID0gYXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgUkdCQTMyKiBkZXN0ID0gc3JjICsg
bV9zaXplLndpZHRoKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcmVjdC5oZWlnaHQo
KTsgKytpKSB7CisgICAgICAgICAgICBtZW1jcHkoZGVzdCwgc3JjLCByZWN0V2lkdGhJbkJ5dGVz
KTsKKyAgICAgICAgICAgIGRlc3QgKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBn
LCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCQShhdCh4LCB5
KSwgciwgZywgYiwgYSk7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwg
dW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhIHx8IGEgPj0gMjU1KQorICAgICAgICAgICAg
KmRlc3QgPSBtYWtlUkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgZWxzZSBpZiAoIWEpCisgICAg
ICAgICAgICAqZGVzdCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpkZXN0ID0gbWFr
ZVByZW11bHRpcGxpZWRSR0JBKHIsIGcsIGIsIGEpOworICAgIH0KKworICAgIHZvaWQgb3ZlclJH
QkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNp
Z25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFhbHBoYUNoYW5uZWwoKmRlc3QpKSB7Cisg
ICAgICAgICAgICBzZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkK
KyAgICAgICAgICAgICpkZXN0ID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwoKmRl
c3QpLCBncmVlbkNoYW5uZWwoKmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhhQ2hhbm5l
bCgqZGVzdCkpOworICAgICAgICAKKyAgICAgICAgUkdCQTMyIHNyYyA9IG1ha2VSR0JBKHIsIGcs
IGIsIGEpOworICAgICAgICAqZGVzdCA9IENvbG9yKCpkZXN0KS5ibGVuZChzcmMpLnJnYigpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICAq
ZGVzdCA9IG1ha2VVblByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwoKmRlc3QpLCBncmVlbkNo
YW5uZWwoKmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhhQ2hhbm5lbCgqZGVzdCkpOwor
ICAgIH0KKworICAgIGJvb2wgaW5Cb3VuZHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKS5jb250YWlu
cyhwb2ludCk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5kcyhjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXpl
KS5jb250YWlucyhyZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFJHQkEzMj4g
bV9iYWNraW5nU3RvcmU7CisgICAgUkdCQTMyKiBtX3BpeGVscyB7IG51bGxwdHIgfTsKKyAgICBJ
bnRTaXplIG1fc2l6ZTsKKyAgICBJbnRSZWN0IG1fcmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5cyBq
dXN0IGJlIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGFuZCBQTkcgZnJhbWVzCisg
ICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGEgeyB0cnVlIH07Cit9OworCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKaW5kZXggNGUyNWFhNmZkNzRkMWU0NmM1
NDE2MTQ5OGJjMTcyYmY2MDA4NzVkMS4uNDM5ZjVhNjNjN2JlYmU1NjA0MmIyNGU3ZDcyZWNjZWNm
MzZjNDBjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcApA
QCAtNDksNiArNDksNDAgQEAgY29uc3QgUkdCQTMyIENvbG9yOjp0cmFuc3BhcmVudDsKIHN0YXRp
YyBjb25zdCBSR0JBMzIgbGlnaHRlbmVkQmxhY2sgPSAweEZGNTQ1NDU0Owogc3RhdGljIGNvbnN0
IFJHQkEzMiBkYXJrZW5lZFdoaXRlID0gMHhGRkFCQUJBQjsKIAorc3RhdGljIGlubGluZSB1bnNp
Z25lZCBtdWx0aXBseTI1NSh1bnNpZ25lZCBjKQoreworICAgIC8vIGMgKiAyNTUKKyAgICAvLyAg
ID0gYyAqICgyNTYgLSAxKQorICAgIC8vICAgPSBjICogMjU2IC0gYworICAgIHJldHVybiAoYyA8
PCA4KSAtIGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZGl2aWRlMjU1KHVuc2lnbmVk
IGMpCit7CisgICAgLy8gYyAvIDI1NQorICAgIC8vICAgPSBjIC8gMjU2ICogKDEgKyAxIC8gMjU1
KQorICAgIC8vICAgPSAoYyArIGMgLyAyNTUpIC8gMjU2CisgICAgLy8gICA9IChjICsgKGMgKyBj
IC8gMjU1KSAvIDI1NikgLyAyNTYKKyAgICAvLyAgID0gKGMgKyBjIC8gMjU2ICsgYyAvICgyNTUg
eCAyNTYpKSAvIDI1NgorICAgIC8vICB+PSAoYyArIGMgLyAyNTYgKyAxKSAvIDI1NgorICAgIHJl
dHVybiAoYyArIChjID4+IDgpICsgMSkgPj4gODsKK30KKyAgICAKK3N0YXRpYyBpbmxpbmUgdW5z
aWduZWQgZGl2aWRlQ2VpbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBkKQoreworICAgIHJldHVybiAo
YyArIGQgLSAxKSAvIGQ7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHByZW11bHRp
cGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0dXJuIGRpdmlk
ZTI1NShjICogYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5wcmVtdWx0aXBsaWVk
Q2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBkaXZpZGVDZWls
KG11bHRpcGx5MjU1KGMpLCBhKTsKK30KKyAgICAKIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQg
ZywgaW50IGIpCiB7CiAgICAgcmV0dXJuIDB4RkYwMDAwMDAgfCBzdGQ6Om1heCgwLCBzdGQ6Om1p
bihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBz
dGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUpKTsKQEAgLTU5LDYgKzkzLDE2IEBAIFJHQkEzMiBt
YWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKICAgICByZXR1cm4gc3RkOjptYXgo
MCwgc3RkOjptaW4oYSwgMjU1KSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUp
KSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgw
LCBzdGQ6Om1pbihiLCAyNTUpKTsKIH0KIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShp
bnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVs
dGlwbGllZENoYW5uZWwociwgYSksIHByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCBwcmVtdWx0
aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7Cit9CisgICAgCitSR0JBMzIgbWFrZVVuUHJlbXVsdGlw
bGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VS
R0JBKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwo
ZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorICAgIAogc3RhdGlj
IGludCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQogewogICAgIC8vIFdlIHVzZSBscm91
bmRmIGFuZCAyNTUgaW5zdGVhZCBvZiBuZXh0YWZ0ZXJmKDI1NiwgMCkgdG8gbWF0Y2ggQ0cncyBy
b3VuZGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKaW5kZXggZGQy
NjI3MGJiNDY2MGIzM2FlMDcwZThjOTQ0NTIwZDcyODQ1NGI4YS4uYTU0NTMyYzc3NTVhN2M4NzY5
MzYyNDBjYWU0ZWMzN2E0ZGEwZDA0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCkBAIC01NCw2ICs1NCw4IEBAIHR5cGVkZWYgdW5zaWduZWQgUkdCQTMyOyAvLyBE
ZXByZWNhdGVkOiBUeXBlIGZvciBhbiBSR0JBIHF1YWRydXBsZXQuIFVzZSBSR0JBIGNsCiAKIFdF
QkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpOwogV0VCQ09S
RV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKK1dF
QkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBp
bnQgYiwgaW50IGEpOworV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRS
R0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAogV0VCQ09SRV9FWFBPUlQgUkdCQTMy
IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhh
KTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBj
b2xvciwgT3B0aW9uYWw8ZmxvYXQ+IG92ZXJyaWRlQWxwaGEpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmgKaW5kZXggN2EyOTk5MmY3NzE4OGUwMzgyOGQ4MGE2NWI4YmUy
Y2Q4ZGMyZGU3Ni4uOGU3YjUyYjFmNGYzMWM3NGEzY2IyYTEzMjE1ZGE3N2EyYjE4YzA3YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCkBAIC0xMzcsOCArMTM3LDEx
IEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwgUm91bmRUaWxl
LCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFn
ZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsg
fQogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBJbWFnZU9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOyB9Cisg
ICAgdmlydHVhbCBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIHsg
cmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0
cy4KIApAQCAtMTUwLDEyICsxNTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDRkRhdGFSZWYg
Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKLSNp
ZiBVU0UoQ0cpCi0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldENHSW1hZ2VSZWYoKSB7IHJldHVy
biBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9m
U2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgUmV0
YWluUHRyPENGQXJyYXlSZWY+IGdldENHSW1hZ2VBcnJheSgpIHsgcmV0dXJuIG51bGxwdHI7IH0K
LSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQ
KEhCSVRNQVApIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGdldEhCSVRNQVBP
ZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xNzks
NiArMTc2LDggQEAgcHVibGljOgogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXJ0dWFsIGJv
b2wgbm90U29saWRDb2xvcigpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgorICAgIAorICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXRJZk5lZWRlZCgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI4ZTNlZDRjOGEzYWJkMmNm
MzdmZmM3ZDFjZjk5NDg4ODBiNDg5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcApAQCAtMCwwICsxLDE1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKKworI2luY2x1ZGUgIkNvbG9y
LmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKKyNlbHNlCisj
aW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIlBsYXRmb3JtSW1h
Z2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZyYW1lRGF0YTo6SW1hZ2VGcmFt
ZURhdGEoKQoreworfQorCitJbWFnZUZyYW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEoTmF0aXZlSW1h
Z2VQdHImJiBpbWFnZSkKKyAgICA6IG1fc3RhdHVzKERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSkK
KyAgICAsIG1faW1hZ2UoV1RGTW92ZShpbWFnZSkpCit7CisgICAgbV9zaXplID0gUGxhdGZvcm1J
bWFnZShtX2ltYWdlKS5zaXplKCk7CisgICAgbV9oYXNBbHBoYSA9IFBsYXRmb3JtSW1hZ2UobV9p
bWFnZSkuaGFzQWxwaGEoKTsKK30KKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKElt
YWdlRGVjb2RlciYgZGVjb2Rlciwgc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWwsIENhY2hpbmcgZnJhbWVDYWNoaW5nKQoreworICAgIEFTU0VSVChmcmFtZUNh
Y2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhQW5kSW1hZ2UpOworICAgIAorICAgIGlmIChmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6
SW1hZ2UgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpIHsKKyAg
ICAgICAgbV9pbWFnZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1
YnNhbXBsaW5nTGV2ZWwpOworICAgICAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBzdWJzYW1wbGlu
Z0xldmVsOworICAgIH0KKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKSB7Cisg
ICAgICAgIG1fb3JpZW50YXRpb24gPSBkZWNvZGVyLm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7
CisgICAgICAgIG1fc3RhdHVzID0gZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4
KSA/IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSA6IERlY29kaW5nU3RhdHVzOjpQYXJ0aWFsOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGRlY29kZXIucmVwZXRpdGlvbkNvdW50KCkgIT0gY0FuaW1h
dGlvbk5vbmUpCisgICAgICAgICAgICBtX2R1cmF0aW9uID0gZGVjb2Rlci5mcmFtZUR1cmF0aW9u
QXRJbmRleChpbmRleCk7CisgICAgICAgIAorICAgICAgICBtX2hhc0FscGhhID0gZGVjb2Rlci5m
cmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CisgICAgICAgIG1fc2l6ZSA9IGRlY29kZXIuZnJh
bWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgfQorfQorICAgIAor
SW1hZ2VGcmFtZURhdGE6On5JbWFnZUZyYW1lRGF0YSgpCit7CisgICAgY2xlYXJTdWJJbWFnZXMo
KTsKK30KKyAgICAKK0ltYWdlRnJhbWVEYXRhJiBJbWFnZUZyYW1lRGF0YTo6b3BlcmF0b3I9KGNv
bnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisg
ICAgICAgIHJldHVybiAqdGhpczsKKworICAgIG1fc3RhdHVzID0gb3RoZXIubV9zdGF0dXM7Cisg
ICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOwor
ICAgIAorICAgIG1fcGl4ZWxzID0gb3RoZXIucGl4ZWxzKCkgPyBCaXRtYXBQaXhlbHM6OmNyZWF0
ZSgqb3RoZXIucGl4ZWxzKCkpIDogbnVsbHB0cjsKKyAgICAKKyAgICBtX29yaWVudGF0aW9uID0g
b3RoZXIubV9vcmllbnRhdGlvbjsKKyAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5tX3N1
YnNhbXBsaW5nTGV2ZWw7CisgICAgbV9kdXJhdGlvbiA9IG90aGVyLm1fZHVyYXRpb247CisgICAg
bV9oYXNBbHBoYSA9IG90aGVyLm1faGFzQWxwaGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2
b2lkIEltYWdlRnJhbWVEYXRhOjpjbGVhclN1YkltYWdlcygpCit7CisgICAgaWYgKCFtX2ltYWdl
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5jbGVh
clN1YkltYWdlcygpOworfQorCit1bnNpZ25lZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXIoQ2FjaGlu
ZyBmcmFtZUNhY2hpbmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpF
bXB0eSB8fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEpOworICAgIAorICAgIHVu
c2lnbmVkIGZyYW1lQnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisgICAgCisgICAgY2xlYXJT
dWJJbWFnZXMoKTsKKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkVtcHR5
KQorICAgICAgICAqdGhpcyA9IEltYWdlRnJhbWVEYXRhKCk7CisgICAgZWxzZQorICAgICAgICBt
X2ltYWdlID0gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gZnJhbWVCeXRlczsKK30KKworYm9v
bCBJbWFnZUZyYW1lRGF0YTo6aW5pdFBpeGVscyhjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEpCit7CisgICAgQVNTRVJUKCFoYXNQaXhlbHMoKSAmJiBtX3NpemUuaXNF
bXB0eSgpKTsKKyAgICBtX3BpeGVscyA9ICFzaXplLmlzRW1wdHkoKSA/IEJpdG1hcFBpeGVsczo6
Y3JlYXRlKHNpemUsIHByZW11bHRpcGx5QWxwaGEpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaGFz
UGl4ZWxzKCk7Cit9CisgICAgCitib29sIEltYWdlRnJhbWVEYXRhOjpjb3B5UGl4ZWxzKGNvbnN0
IEltYWdlRnJhbWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgbV9waXhlbHMgPSBvdGhlci5oYXNQaXhlbHMoKSA/IEJp
dG1hcFBpeGVsczo6Y3JlYXRlKCpvdGhlci5tX3BpeGVscy5nZXQoKSkgOiBudWxscHRyOworICAg
IHJldHVybiBoYXNQaXhlbHMoKSA9PSBvdGhlci5oYXNQaXhlbHMoKTsKK30KKyAgICAKK0NvbG9y
IEltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIGlm
ICghaGFzSW1hZ2UoKSB8fCBtX3NpemUgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJu
IENvbG9yKCk7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuc2luZ2xl
UGl4ZWxTb2xpZENvbG9yKCk7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29s
aWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJbWFnZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuaXNBbG1vc3RT
b2xpZENvbG9yKCk7Cit9CisgICAgCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMDhkNDhiZmQzZTFhNjZjOTE4
MTA2YjEyMGM0NzMyNzUyOTdmYjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApAQCAtMCwwICsxLDExNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24u
aCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEltYWdlRGVjb2RlcjsK
KworLy8gU3Vic2FtcGxpbmdMZXZlbC4gMCBpcyBubyBzdWJzYW1wbGluZywgMSBpcyBoYWxmIGRp
bWVuc2lvbnMgb24gZWFjaCBheGlzIGV0Yy4KK3VzaW5nIFN1YnNhbXBsaW5nTGV2ZWwgPSB1aW50
OF90OworCitlbnVtIDogU3Vic2FtcGxpbmdMZXZlbCB7CisgICAgTWluU3Vic2FtcGxpbmdMZXZl
bCA9IDAsCisgICAgTWF4U3Vic2FtcGxpbmdMZXZlbCA9IDMsCisgICAgRGVmYXVsdFN1YnNhbXBs
aW5nTGV2ZWwgPSBNaW5TdWJzYW1wbGluZ0xldmVsCit9OworCitjbGFzcyBJbWFnZUZyYW1lRGF0
YSB7CisgICAgZnJpZW5kIGNsYXNzIEltYWdlRGVjb2RlcjsKK3B1YmxpYzoKKyAgICBlbnVtIGNs
YXNzIENhY2hpbmcgeyBFbXB0eSwgTWV0YWRhdGEsIEltYWdlLCBNZXRhZGF0YUFuZEltYWdlIH07
CisgICAgZW51bSBjbGFzcyBEZWNvZGluZ1N0YXR1cyB7IEVtcHR5LCBQYXJ0aWFsLCBDb21wbGV0
ZSB9OworICAgIGVudW0gY2xhc3MgRGlzcG9zYWxNZXRob2QgeyBOb3RTcGVjaWZpZWQsIEtlZXAs
IE92ZXJ3cml0ZUJnY29sb3IsIE92ZXJ3cml0ZVByZXZpb3VzIH07CisKKyAgICBJbWFnZUZyYW1l
RGF0YSgpOworICAgIEltYWdlRnJhbWVEYXRhKE5hdGl2ZUltYWdlUHRyJiYpOworICAgIEltYWdl
RnJhbWVEYXRhKEltYWdlRGVjb2RlciYsIHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCA9
IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBDYWNoaW5nID0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJ
bWFnZSk7CisgICAgSW1hZ2VGcmFtZURhdGEoY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKSB7
IG9wZXJhdG9yPShvdGhlcik7IH0KKworICAgIH5JbWFnZUZyYW1lRGF0YSgpOworCisgICAgSW1h
Z2VGcmFtZURhdGEmIG9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpOworICAg
IAorICAgIHVuc2lnbmVkIGNsZWFyKENhY2hpbmcpOworCisgICAgdm9pZCBzZXREaXNwb3NhbE1l
dGhvZChEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0g
ZGlzcG9zYWxNZXRob2Q7IH0KKyAgICBEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KKworICAgIHZvaWQgc2V0U3RhdHVzKERl
Y29kaW5nU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorICAgIERlY29kaW5n
U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkVtcHR5OyB9
CisgICAgYm9vbCBpc1BhcnRpYWwoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1cyA9PSBEZWNvZGlu
Z1N0YXR1czo6UGFydGlhbDsgfQorICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZTsgfQorCisgICAgYm9vbCBpbml0
UGl4ZWxzKGNvbnN0IEludFNpemUmLCBib29sIHByZW11bHRpcGx5QWxwaGEpOworICAgIGJvb2wg
Y29weVBpeGVscyhjb25zdCBJbWFnZUZyYW1lRGF0YSYpOworICAgIHZvaWQgY2xlYXJQaXhlbHMo
KSB7IG1fcGl4ZWxzID0gbnVsbHB0cjsgfQorCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gaGFzUGl4ZWxzKCkgPyBwaXhlbHMoKS0+c2l6ZSgpIDogbV9zaXplOyB9CisgICAgdW5z
aWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc0ltYWdlKCkgPyBtX3NpemUuYXJl
YSgpICogc2l6ZW9mKFJHQkEzMikgOiAwOyB9CisgICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1w
bGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzYW1wbGluZ0xldmVsOyB9CisKKyAgICB2
b2lkIHNldE9yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmll
bnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9OworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRp
b24oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9CisKKyAgICB2b2lkIHNldER1cmF0
aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQorICAgIGZs
b2F0IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQorCisgICAgdm9pZCBz
ZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxwaGEgPSBoYXNBbHBoYTsgfQorICAg
IGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9CisKKyAgICBOYXRp
dmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAgICBCaXRtYXBQ
aXhlbHMqIHBpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkg
OiBudWxscHRyOyB9CisKKyAgICBib29sIGhhc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZTsgfQorICAgIGJvb2wgaGFzTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAhbV9zaXplLmlzRW1w
dHkoKTsgfQorICAgIGJvb2wgaGFzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gcGl4ZWxzKCk7IH0K
KworICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OworICAgIGJvb2wgaXNB
bG1vc3RTb2xpZENvbG9yKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjbGVhclN1Yklt
YWdlcygpOworCisgICAgRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZCB7IERpc3Bvc2Fs
TWV0aG9kOjpOb3RTcGVjaWZpZWQgfTsKKyAgICBEZWNvZGluZ1N0YXR1cyBtX3N0YXR1cyB7IERl
Y29kaW5nU3RhdHVzOjpFbXB0eSB9OworICAgIEludFNpemUgbV9zaXplOworICAgIE5hdGl2ZUlt
YWdlUHRyIG1faW1hZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9waXhl
bHM7CisKKyAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBEZWZhdWx0SW1hZ2VP
cmllbnRhdGlvbiB9OworICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsg
MCB9OworICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07CisgICAgYm9vbCBtX2hhc0FscGhhIHsg
dHJ1ZSB9OworfTsKKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmNwcAppbmRleCBkZGQ4YTU1YmEwOTA2YzU4NjZhMTkyY2Y4ZTQxNGVh
NzA3YjcyOGFjLi44MmY2ZTJkNmU0NTQzM2RhMWE3ZDU2YjM3MGRmYTYxYTRjNDE5MTM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBA
IC0yMjQsNiArMjI0LDExIEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFt
ZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2CiAgICAgcmV0dXJuIGlu
aXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBz
dWJzYW1wbGluZ0xldmVsKSA6IG51bGxwdHI7CiB9CiAKK0ltYWdlRnJhbWVEYXRhIEltYWdlU291
cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZl
bCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5nKQorewor
ICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gSW1hZ2VGcmFtZURhdGEoKm1fZGVjb2RlciwgaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIGNhY2hpbmcpIDogSW1hZ2VGcmFtZURhdGEoKTsKK30KKyAg
ICAKIHZvaWQgSW1hZ2VTb3VyY2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiB7CiAgICAg
aWYgKG1fYWxsb3dTdWJzYW1wbGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDYwMzU3MzliN2U4YjA5NmRjOGRmZTljNTMwYTQyYzZm
MjkxYmRhMDAuLmE0MGM3Y2U5MzA3Y2RhZGYwNzlhYjcwMWE4Mjc5OWI2OTA1MjlkNDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtMjcs
NiArMjcsNyBAQAogI2lmbmRlZiBJbWFnZVNvdXJjZV9oCiAjZGVmaW5lIEltYWdlU291cmNlX2gK
IAorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlv
bi5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIK
QEAgLTYzLDkgKzY0LDYgQEAgY29uc3QgaW50IGNBbmltYXRpb25Mb29wT25jZSA9IDA7CiBjb25z
dCBpbnQgY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSA9IC0xOwogY29uc3QgaW50IGNBbmltYXRpb25O
b25lID0gLTI7CiAKLS8vIFN1YnNhbXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEg
aXMgaGFsZiBkaW1lbnNpb25zIG9uIGVhY2ggYXhpcyBldGMuCi10eXBlZGVmIHNob3J0IFN1YnNh
bXBsaW5nTGV2ZWw7Ci0KIGNsYXNzIEltYWdlU291cmNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbWFnZVNvdXJjZSk7CiAgICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwpAQCAtMTMy
LDE4ICsxMzAsMTkgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09mRnJhbWVB
dEluZGV4KHNpemVfdCkgY29uc3Q7CiAgICAgCiAgICAgLy8gU2l6ZSBvZiBvcHRpb25hbGx5IHN1
YnNhbXBsZWQgZnJhbWUuCi0gICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vi
c2FtcGxpbmdMZXZlbCA9IDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSA9IERvTm90UmVz
cGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRl
eChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCwgUmVz
cGVjdEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikg
Y29uc3Q7CiAgICAgCiAgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRl
Y29kZWQgZnJhbWUuIElmIHRoZSBmcmFtZSBpcyBub3QgeWV0CiAgICAgLy8gZGVjb2RlZCB0aGVu
IHJldHVybiAwLgotICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCwgU3Vic2Ft
cGxpbmdMZXZlbCA9IDApIGNvbnN0OworICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNp
emVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsKSBjb25zdDsK
ICAgICAKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpOwogICAgIEltYWdl
T3JpZW50YXRpb24gb3JpZW50YXRpb25BdEluZGV4KHNpemVfdCkgY29uc3Q7IC8vIEVYSUYgaW1h
Z2Ugb3JpZW50YXRpb24KICAgICAKICAgICAvLyBDYWxsZXJzIHNob3VsZCBub3QgY2FsbCB0aGlz
IGFmdGVyIGNhbGxpbmcgY2xlYXIoKSB3aXRoIGEgaGlnaGVyIGluZGV4OwogICAgIC8vIHNlZSBj
b21tZW50cyBvbiBjbGVhcigpIGFib3ZlLgotICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDApOworICAgIE5hdGl2ZUlt
YWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9
IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsKTsKKyAgICBJbWFnZUZyYW1lRGF0YSBjcmVhdGVGcmFt
ZURhdGFBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGlu
Z0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5n
OjpNZXRhZGF0YUFuZEltYWdlKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckZyYW1l
QnVmZmVyQ2FjaGUoc2l6ZV90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjdhZWE0ODlmM2ViMmE4Mjg3NzFjMjEw
M2U4ZDRkMGJlMTdiZTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2lu
Y2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q29sb3I7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgR3JhcGhpY3ND
b250ZXh0OworCitjbGFzcyBQbGF0Zm9ybUltYWdlIHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybUlt
YWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKKyAgICAgICAgOiBtX2ltYWdlKGltYWdl
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzTmlsKCkgY29uc3QgeyByZXR1cm4gIW1faW1h
Z2U7IH0KKyAgICB2b2lkIGNsZWFyU3ViSW1hZ2VzKCk7CisKKyAgICBJbnRTaXplIHNpemUoKSBj
b25zdDsKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxT
b2xpZENvbG9yKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsK
KyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJikgY29uc3Q7
CisKKyAgICBzdGF0aWMgZmxvYXQgc3Vic2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpOworCitw
cml2YXRlOgorI2lmIFVTRShDRykKKyAgICBDR0ltYWdlUmVmIGNnSW1hZ2VSZWYoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS5nZXQoKSA6IG51bGxwdHI7IH0KKyNlbmRpZgorICAg
IE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMu
bW0KaW5kZXggZjRjMTQ1N2JiYjI1NTc1NGYwMGEwNjI1ZWU4M2UwNGRhN2M2ZWZjZi4uZDUyMGY1
ZDU4NWFjNjBkYmFlZTI1NWUxYjgzYzI0ZGM2ODcyMTBhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQy5tbQpAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSgpCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1h
Z2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1h
Z2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIW1fcGF1c2VkSW1hZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgbV9kaXNwbGF5TW9k
ZSA9IFBhaW50SXRCbGFjazsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNh
aXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcElt
YWdlQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzcyMmJlYzUzYWI4
YTA4YThkYTg1MjhiOWUwZDdjNGQwY2Q0MTM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLQotI2lmIFVTRShDQUlSTykKLQot
I2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNp
bmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBOYXRp
dmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYg
aW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZVNpemUoaW1hZ2UuZ2V0KCkpOwotfQot
Ci1ib29sIGhhc0FscGhhKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsK
LSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChpbWFnZS5nZXQoKSkgIT0gQ0FJ
Uk9fQ09OVEVOVF9DT0xPUjsKLX0KLQotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwot
ICAgIAotICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSkgIT0gSW50U2l6ZSgxLCAxKSkK
LSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlw
ZShpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1
cm4gQ29sb3IoKTsKLQotICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0cjxS
R0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAg
cmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Ci19Ci0KLX0KLQotdm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsCi0g
ICAgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2Ny
aXB0aW9uKQotewotICAgIGlmICghZHN0LndpZHRoKCkgfHwgIWRzdC5oZWlnaHQoKSB8fCAhc3Jj
LndpZHRoKCkgfHwgIXNyYy5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhcnRB
bmltYXRpb24oKTsKLQotICAgIGF1dG8gc3VyZmFjZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3Vy
cmVudEZyYW1lKTsKLSAgICBpZiAoIXN1cmZhY2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdv
bid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0KLSAgICBDb2xvciBjb2xv
ciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdCwgY29sb3IsIG9wKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRleHQuc2F2ZSgpOwotCi0gICAgLy8gU2V0
IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCi0gICAgaWYgKG9wID09IENvbXBvc2l0ZVNvdXJj
ZU92ZXIgJiYgYmxlbmRNb2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAhZnJhbWVIYXNBbHBoYUF0
SW5kZXgobV9jdXJyZW50RnJhbWUpKQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJf
RE9XTl9TQU1QTElORykKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1cmZhY2VTaXpl
KHN1cmZhY2UuZ2V0KCkpOwotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1c3RT
b3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyYywgc2NhbGVkU2l6ZSk7Ci0jZWxzZQotICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qoc3JjKTsKLSNlbmRpZgotCi0gICAgSW1hZ2VPcmllbnRh
dGlvbiBmcmFtZU9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7Ci0g
ICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdElt
YWdlT3JpZW50YXRpb24pCi0gICAgICAgIGZyYW1lT3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0
aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBGbG9hdFJlY3QgZHN0UmVjdCA9IGRz
dDsKLQotICAgIGlmIChmcmFtZU9yaWVudGF0aW9uICE9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9u
KSB7Ci0gICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJl
IGF0ICgwLCAwKS4KLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC54KCksIGRzdFJl
Y3QueSgpKTsKLSAgICAgICAgZHN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwotICAg
ICAgICBjb250ZXh0LmNvbmNhdENUTShmcmFtZU9yaWVudGF0aW9uLnRyYW5zZm9ybUZyb21EZWZh
dWx0KGRzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChmcmFtZU9yaWVudGF0aW9uLnVzZXNX
aWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0YW5n
bGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0
aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5l
ZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUu
Ci0gICAgICAgICAgICBkc3RSZWN0ID0gRmxvYXRSZWN0KGRzdFJlY3QueCgpLCBkc3RSZWN0Lnko
KSwgZHN0UmVjdC5oZWlnaHQoKSwgZHN0UmVjdC53aWR0aCgpKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KHN1
cmZhY2UuZ2V0KCksIGRzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7Ci0KLSAgICBj
b250ZXh0LnJlc3RvcmUoKTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGlt
YWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFy
KGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAg
bV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIG1f
aW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJ
Uk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGFkYWVjMjcwZTMxYjA1
NGFmYzVmNjZkNDgyODhhZWJmMDYxZTNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApAQCAtMCww
ICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYg
VVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7Cit9CisKK0lu
dFNpemUgUGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkg
PyBJbnRTaXplKCkgOiBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2UuZ2V0KCkpOworfQorCitib29s
IFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSB8
fCBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1faW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRF
TlRfQ09MT1I7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xv
cigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgpICE9IEludFNpemUoMSwgMSkp
CisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5
cGUobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQorICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKKworICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0
cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1faW1hZ2UuZ2V0KCkpKTsK
KyAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKK30KKworYm9v
bCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmKQoreworICAg
IHJldHVybiAxOworfQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1v
ZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIGNv
bnRleHQuc2F2ZSgpOworICAgIAorICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9u
LgorICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIG1vZGUgPT0gQmxlbmRNb2Rl
Tm9ybWFsICYmICFoYXNBbHBoYSgpKQorICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG9wLCBtb2RlKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKElNQUdFX0RFQ09E
RVJfRE9XTl9TQU1QTElORykKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1cmZhY2VT
aXplKG1faW1hZ2UuZ2V0KCkpOworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1
c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyY1JlY3QsIHNjYWxlZFNpemUpOworI2Vsc2UK
KyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyY1JlY3QpOworI2VuZGlmCisgICAgICAg
IAorICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisgICAgICAgIAor
ICAgIGlmIChvcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgeworICAgICAg
ICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCku
CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpKTsK
KyAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOworICAg
ICAgICBjb250ZXh0LmNvbmNhdENUTShvcmllbnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChh
ZGp1c3RlZERlc3RSZWN0LnNpemUoKSkpOworICAgICAgICBpZiAob3JpZW50YXRpb24udXNlc1dp
ZHRoQXNIZWlnaHQoKSkgeworICAgICAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3Rhbmds
ZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRo
ZSBvcmllbnRhdGlvbiBvZgorICAgICAgICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVl
ZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4K
KyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShhZGp1c3RlZERlc3RSZWN0LnNp
emUoKS50cmFuc3Bvc2VkU2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KG1faW1hZ2UuZ2V0KCksIGFk
anVzdGVkRGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7CisKKyAgICBjb250ZXh0
LnJlc3RvcmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9C
aXRtYXBJbWFnZUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNjODFhMTcw
YmU3OWFlNmJlNmNhY2RjOTlmNGMzOThjYWFmNDI2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9CaXRtYXBJbWFnZUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotCi0jaWYgVVNFKENH
KQotCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJz
aW9uLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJTdWJp
bWFnZUNhY2hlV2l0aFRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0jaWYg
VVNFKEFQUEtJVCkKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vy
dmljZXMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVk
ZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50
U2l6ZSBzaXplKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNT
RVJUKGltYWdlKTsKLSAgICByZXR1cm4gSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0
KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEo
Y29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JikKLXsKLSAgICAvLyBGSVhNRTogQW5zd2VyIGNv
cnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFu
bm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLUNvbG9yIHNpbmdsZVBpeGVsU29saWRD
b2xvcihjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQotewotICAgIEFTU0VSVChp
bWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdlOjpzaXplKGltYWdlKSAhPSBJbnRTaXpl
KDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBjaGFy
IHBpeGVsWzRdOyAvLyBSR0JBCi0gICAgYXV0byBiaXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIHNSR0JDb2xv
clNwYWNlUmVmKCksCi0gICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtD
R0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0KLSAgICBpZiAoIWJpdG1hcENvbnRleHQpCi0gICAg
ICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRt
YXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICBDR0NvbnRleHREcmF3SW1h
Z2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwgaW1hZ2UuZ2V0
KCkpOwotICAgIAotICAgIGlmICghcGl4ZWxbM10pCi0gICAgICAgIHJldHVybiBDb2xvcigwLCAw
LCAwLCAwKTsKLQotICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBw
aXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhl
bFszXSk7Ci19Ci0KLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0
YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBm
YWxzZTsKLQotICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7Ci0KLSAgICBpZiAobV9pbWFnZSkg
ewotI2lmIENBQ0hFX1NVQklNQUdFUwotICAgICAgICBzdWJpbWFnZUNhY2hlKCkuY2xlYXJJbWFn
ZShtX2ltYWdlLmdldCgpKTsKLSNlbmRpZgotICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQ0dJbWFn
ZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCi17Ci0gICAgcmV0dXJuIGZyYW1lSW1h
Z2VBdEluZGV4KDApLmdldCgpOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRGaXJz
dENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBzaXplX3QgY291
bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdl
dCgpOwotICAgICAgICBpZiAoY2dJbWFnZSAmJiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0lt
YWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKSkgPT0gc2l6ZSkKLSAgICAgICAgICAgIHJl
dHVybiBjZ0ltYWdlOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IENH
SW1hZ2VSZWYgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQotICAgIHJldHVybiBnZXRD
R0ltYWdlUmVmKCk7Ci19Ci0KLVJldGFpblB0cjxDRkFycmF5UmVmPiBCaXRtYXBJbWFnZTo6Z2V0
Q0dJbWFnZUFycmF5KCkKLXsKLSAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAg
aWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgQ0ZNdXRhYmxl
QXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShOVUxMLCBjb3VudCwgJmtDRlR5
cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIGlmIChDR0ltYWdlUmVmIGN1cnJGcmFtZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KGkpLmdldCgpKQotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LCBjdXJyRnJh
bWUpOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihhcnJheSk7Ci19Ci0KLXZvaWQgQml0bWFw
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVz
Y3JpcHRpb24pCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXJ0QW5pbWF0aW9uKERvTm90
Q2F0Y2hVcCk7Ci0jZWxzZQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0jZW5kaWYKLQotICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBp
bWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCi0gICAgaWYgKHdrQ0dDb250ZXh0
SXNQREZDb250ZXh0KGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKQotICAgICAgICBpbWFnZSA9IGNv
cHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlB
ZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShjdHh0LnBsYXRmb3JtQ29u
dGV4dCgpKSk7Ci0gICAgICAgIGZsb2F0IHN1YnNhbXBsaW5nU2NhbGUgPSBzdGQ6Om1pbjxmbG9h
dD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNy
Y1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBz
cmNSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAgICAgaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleCht
X2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2FsZSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFn
ZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBDb2xvciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xv
cigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENv
bG9yKGN0eHQsIGRlc3RSZWN0LCBjb2xvciwgY29tcG9zaXRlT3ApOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gU3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2Ug
dGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgotICAgIEludFNpemUgaW1hZ2VTaXplKENHSW1h
Z2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKTsK
LSAgICAKLSAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJz
YW1wbGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFn
ZS4KLSAgICBGbG9hdFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgaWYgKGltYWdl
U2l6ZSAhPSBtX3NpemUpIHsKLSAgICAgICAgRmxvYXRSZWN0IG9yaWdpbmFsSW1hZ2VCb3VuZHMo
RmxvYXRQb2ludCgpLCBtX3NpemUpOwotICAgICAgICBGbG9hdFJlY3Qgc3Vic2FtcGxlZEltYWdl
Qm91bmRzKEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKTsKLSAgICAgICAgc2NhbGVkU3JjUmVjdCA9
IG1hcFJlY3Qoc3JjUmVjdCwgb3JpZ2luYWxJbWFnZUJvdW5kcywgc3Vic2FtcGxlZEltYWdlQm91
bmRzKTsKLSAgICB9Ci0gICAgCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAg
ICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbikKLSAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJ
bmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBjdHh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc2NhbGVkU3JjUmVjdCwgY29tcG9zaXRlT3AsIGJsZW5kTW9k
ZSwgb3JpZW50YXRpb24pOwotCi0gICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1h
Z2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkK
LXsKLSAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4
XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwKTsKLQotICAgIGlmICghbV9m
cmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVz
W2luZGV4XS5tX2ltYWdlOwotCi0gICAgcmV0dXJuIG1fc291cmNlLmNyZWF0ZUZyYW1lSW1hZ2VB
dEluZGV4KGluZGV4KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKaW5kZXggYjQyOGQ1
MGQ5NGJmOTI0MjgwMzI4N2QyZWVjMTZiZDY5YzUyOGQ5Mi4uM2RhYTEzOWFiN2VhNWI0MjE1Nzc4
ODM1ZDM1M2Q4YWRiNWYwYzc1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC03Miw3ICs3Miw3IEBAIENHUGF0dGVyblJlZiBQ
YXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2Vy
U3BhY2VUcmFuCiAgICAgLy8gSWYgd2UncmUgcmVwZWF0aW5nIGluIGJvdGggZGlyZWN0aW9ucywg
d2UgY2FuIHVzZSBpbWFnZS1iYWNrZWQgcGF0dGVybnMKICAgICAvLyBpbnN0ZWFkIG9mIGN1c3Rv
bSBwYXR0ZXJucywgYW5kIGF2b2lkIHRpbGluZy1lZGdlIHBpeGVsIGNyYWNrcy4KICAgICBpZiAo
bV9yZXBlYXRYICYmIG1fcmVwZWF0WSkKLSAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRl
V2l0aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCksIHBhdHRl
cm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZyk7CisgICAgICAgIHJl
dHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSh0aWxlSW1hZ2UoKS0+
bmF0aXZlSW1hZ2UoKS5nZXQoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGlsaW5nQ29u
c3RhbnRTcGFjaW5nKTsKIAogICAgIC8vIElmIEZMVF9NQVggc2hvdWxkIGFsc28gYmUgdXNlZCBm
b3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMgcmVuZGVyZWQuIFVzaW5nIGZyYWN0aW9ucyBv
ZiBGTFRfTUFYIGFsc28KICAgICAvLyByZXN1bHQgaW4gbm90aGluZyBiZWluZyByZW5kZXJlZC4K
QEAgLTgzLDcgKzgzLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICBDR0Zsb2F0IHlT
dGVwID0gbV9yZXBlYXRZID8gdGlsZVJlY3QuaGVpZ2h0KCkgOiAoMSA8PCAyMik7CiAKICAgICAv
LyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhlIENHSW1hZ2VSZWYgd2hlbiBpdCdzIGRvbmUg
cmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKLSAgICBDR0ltYWdlUmVmIHBsYXRm
b3JtSW1hZ2UgPSBDR0ltYWdlUmV0YWluKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkpOwor
ICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgp
LmxlYWtSZWYoKTsKIAogICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0ZXJuQ2FsbGJh
Y2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sgfTsKICAg
ICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRmb3JtSW1hZ2UsIHRpbGVSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCB4U3RlcCwgeVN0ZXAsIGtDR1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcs
IFRSVUUsICZwYXR0ZXJuQ2FsbGJhY2tzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmYjJk
ZTBlYTEyZGEyMTRmMTA0NmMzOTYyZThlYWI1M2M2NDQxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCkBA
IC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKwor
I2lmIFVTRShDRykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29yZUdyYXBoaWNz
U1BJLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkludFNpemUu
aCIKKyNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCisKKyNpZiBQTEFURk9STShX
SU4pCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3ZvaWQgUGxhdGZvcm1J
bWFnZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworI2lmIENBQ0hFX1NVQklNQUdFUworICAgIGlmICgh
aXNOaWwoKSkKKyAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UoY2dJbWFnZVJlZigp
KTsKKyNlbmRpZgorfQorCitJbnRTaXplIFBsYXRmb3JtSW1hZ2U6OnNpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgo
Y2dJbWFnZVJlZigpKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlUmVmKCkpKTsKK30KKworYm9v
bCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEFuc3dl
ciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEg
Y2hhbm5uZWw/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNp
bmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgp
ICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAorICAgIHVu
c2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKKyAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVs
KSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKKyAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKKyAgICAKKyAgICBpZiAoIWJpdG1h
cENvbnRleHQpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAorICAgIENHQ29udGV4dFNl
dEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBD
R0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAx
LCAxKSwgY2dJbWFnZVJlZigpKTsKKyAgICAKKyAgICBpZiAoIXBpeGVsWzNdKQorICAgICAgICBy
ZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgCisgICAgcmV0dXJuIENvbG9yKHBpeGVsWzBd
ICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICog
MjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKK30KKyAgICAKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6
aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBDR0ltYWdlUmVmIGltYWdlID0gY2dJ
bWFnZVJlZigpOworICAgIEFTU0VSVChDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkg
PT0gOCk7CisgICAgCisgICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5mbyA9IENHSW1hZ2VHZXRCaXRt
YXBJbmZvKGltYWdlKTsKKyAgICBpZiAoIShpbWFnZUluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXIz
MkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhhSW5mb01hc2spICE9IGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKKyAgICAgICAgLy8gRklYTUU6IENvbnNpZGVy
IGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1hdHMuCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IHNpemVfdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7CisgICAgc2l6ZV90IGhlaWdo
dCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENH
SW1hZ2VHZXRCeXRlc1BlclJvdyhpbWFnZSk7CisgICAgCisgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERh
dGFQcm92aWRlcihpbWFnZSkpKTsKKyAgICBjb25zdCBVSW50OCogZGF0YSA9IENGRGF0YUdldEJ5
dGVQdHIocHJvdmlkZXIuZ2V0KCkpOworICAgIAorICAgIC8vIE92ZXJsYXkgYSBncmlkIG9mIHNh
bXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24gb2YgdGhlIGltYWdlLgor
ICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2Ug
aW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKKyAgICAvLyBhbmQgaXRzIHN1cnJv
dW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCisgICAgY29uc3QgdW5zaWduZWQg
c2FtcGxlUm93cyA9IDc7CisgICAgY29uc3QgdW5zaWduZWQgc2FtcGxlQ29scyA9IDc7CisgICAg
Ly8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1wbGVzLCBhbmQgYWNjb21t
b2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCisgICAgaWYgKHdpZHRoIDwgc2FtcGxlQ29s
cyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGxhc3Qgcm93L2NvbHVtbiBsYW5kIG9uIHRoZSBpbWFnZSBw
ZXJpbWV0ZXIuCisgICAgY29uc3QgZmxvYXQgc3RyaWRlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9h
dD4od2lkdGggLSAxKSAvIChzYW1wbGVDb2xzIC0gMSk7CisgICAgY29uc3QgZmxvYXQgc3RyaWRl
SGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCAtIDEpIC8gKHNhbXBsZVJvd3MgLSAx
KTsKKyAgICBmbG9hdCBzYW1wbGVzW3NhbXBsZVJvd3NdW3NhbXBsZUNvbHNdOworICAgIAorICAg
IC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KKyAgICBmbG9hdCB5
ID0gMDsKKyAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7CisgICAgICAgIGZsb2F0IHggPSAwOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7CisgICAgICAgICAg
ICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAqIDQ7
CisgICAgICAgICAgICAvLyBSIEcgQiBBCisgICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0gKDAu
MjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoocDAr
MykgLyAyNTU7CisgICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOworICAgICAgICB9CisgICAg
ICAgIHkgKz0gc3RyaWRlSGVpZ2h0OworICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19jYXN0
PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKKyAgICB9CisgICAgCisgICAgLy8gRGV0ZXJt
aW5lIHRoZSBpbWFnZSBzY29yZS4KKyAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikgeworICAgICAgICAgICAg
ZmxvYXQgZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0gKyBzYW1w
bGVzW2ldW2ogLSAxXSArIHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1bal07Cisg
ICAgICAgICAgICBhY2N1bVNjb3JlICs9IGRpZmYgKiBkaWZmOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIC8vIFRoZSBzY29yZSBmb3IgYSBnaXZlbiBzYW1wbGUgY2FuIGJlIHdpdGhpbiB0
aGUgcmFuZ2Ugb2YgMCBhbmQgMjU1XjIuCisgICAgcmV0dXJuIGFjY3VtU2NvcmUgPCAyNTAwICog
KHNhbXBsZVJvd3MgLSAyKSAqIChzYW1wbGVDb2xzIC0gMik7Cit9CisKK2Zsb2F0IFBsYXRmb3Jt
SW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpCit7CisgICAgLy8g
TmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRz
LgorICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgCisgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVz
dGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29u
dGV4dEdldENUTShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgcmV0dXJuIHN0ZDo6
bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLndp
ZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLmhl
aWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBQbGF0Zm9ybUltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVu
dGF0aW9uKSBjb25zdAoreworICAgIC8vIFN1YnNhbXBsaW5nIG1heSBoYXZlIGdpdmVuIHVzIGFu
IGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KKyAgICBJbnRTaXplIHN1YnNhbXBs
ZWRJbWFnZVNpemUgPSBzaXplKCk7CisgICAgCisgICAgLy8gc3JjUmVjdCBpcyBpbiB0aGUgY29v
cmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28gd2UgaGF2ZSB0byBtYXAgaXQg
dG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9
IHNyY1JlY3Q7CisgICAgaWYgKHN1YnNhbXBsZWRJbWFnZVNpemUgIT0gc3JjU2l6ZSkKKyAgICAg
ICAgYWRqdXN0ZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBGbG9hdFJlY3QoeyB9LCBzcmNT
aXplKSwgRmxvYXRSZWN0KHsgfSwgc3Vic2FtcGxlZEltYWdlU2l6ZSkpOworICAgIAorICAgIGNv
bnRleHQuZHJhd05hdGl2ZUltYWdlKG1faW1hZ2UsIHN1YnNhbXBsZWRJbWFnZVNpemUsIGRlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBtb2RlLCBvcmllbnRhdGlvbik7Cit9CisgICAgCit9
CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYS5tbQppbmRleCA4OTcyMGQxNzM2NWRhN2U4YmE4NDY5ZDUyOTQ1NDhkNTE4NDdhN2ZlLi40
NDc2ZmM1Zjg3YzM0OTg4ZjZkOWFkNTVlZWJkOGQxYjliYjAyMmU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KQEAgLTEyOSw3ICsxMjksNyBAQCBUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkNvY29hOjp+VGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYSgpCiB2
b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6OnVwZGF0ZSgpCiB7CiAgICAgaWYgKGF1
dG8gcmVwcmVzZW50YXRpb24gPSBtX2NsaWVudC5jcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkltYWdlKCkpCi0gICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzOihpZClyZXByZXNl
bnRhdGlvbi0+Z2V0Q0dJbWFnZVJlZigpXTsKKyAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29u
dGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5uYXRpdmVJbWFnZSgpLmdldCgpXTsKIH0KIAogdm9p
ZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjpzZXRDb250ZW50U2NhbGUoZmxvYXQgc2Nh
bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1h
Z2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMu
bW0KaW5kZXggMDFlYjZkZDMwMDQzYTIyNTI5MTc2ZmQ5MTIxMTdkYzU3NzZjMTdiYS4uZGMxYzdj
NzA5NWQ5NDRjNGM2MmYxZmUwOTM1NzAyYTEzYzdjN2E0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQpAQCAtODUsMzEgKzg1LDIyIEBA
IENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkKICAgICBpZiAo
bV90aWZmUmVwKQogICAgICAgICByZXR1cm4gbV90aWZmUmVwLmdldCgpOwogCi0gICAgdW5zaWdu
ZWQgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gdGhp
cy0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CiAKLSAgICAvLyBJZiBudW1GcmFtZXMgaXMgemVybywg
d2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNuJ3QgaGF2ZSB2YWxpZCBkYXRhCisg
ICAgLy8gSWYgZnJhbWVzSW1hZ2VzLnNpemUoKSBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWlu
IHRoaXMgaW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKICAgICAvLyBFdmVuIHRob3VnaCB0
aGUgY2FsbCB0byBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YSB3aWxsIGZhaWwgYW5k
IHdlJ2xsIGhhbmRsZSBpdCBncmFjZWZ1bGx5LAogICAgIC8vIGluIGNlcnRhaW4gY2lyY3Vtc3Rh
bmNlcyB0aGF0IGNhbGwgd2lsbCBzcGFtIHRoZSBjb25zb2xlIHdpdGggYW4gZXJyb3IgbWVzc2Fn
ZQotICAgIGlmICghbnVtRnJhbWVzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFZlY3RvcjxD
R0ltYWdlUmVmPiBpbWFnZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZyYW1l
czsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRl
eChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UpCi0gICAgICAgICAgICBpbWFnZXMuYXBw
ZW5kKGNnSW1hZ2UpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bVZhbGlkRnJhbWVzID0gaW1h
Z2VzLnNpemUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGRhdGEgPSBhZG9w
dENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotICAgIFJldGFpblB0cjxDR0ltYWdlRGVz
dGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVh
dGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbnVtVmFsaWRGcmFtZXMsIDApKTsK
KyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbiA9IGFkb3B0
Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5nZXQoKSwga1VUVHlwZVRJ
RkYsIG5hdGl2ZUltYWdlcy5zaXplKCksIDApKTsKIAogICAgIGlmICghZGVzdGluYXRpb24pCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1WYWxpZEZyYW1lczsgKytpKQotICAgICAgICBDR0ltYWdlRGVz
dGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2VzW2ldLCAwKTsKKyAgICBm
b3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAgICAgIENHSW1hZ2VEZXN0
aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBuYXRpdmVJbWFnZS5nZXQoKSwgMCk7
CiAKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuY3BwCmluZGV4IDIxNzUzYmQwNzhhMWM1NWMzMjcxOWMxNDg0NmYwZjZiOTk3NWY4
ZmQuLjFmZGJhYjNhYzg2YzM5NzYwMWEzNzUyN2I3ZTRjZDEzNjkyMzdkMjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcApAQCAtMTI4LDExICsxMjgsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBJ
bWFnZURlY29kZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYQogfQogCiBJ
bWFnZUZyYW1lOjpJbWFnZUZyYW1lKCkKLSAgICA6IG1faGFzQWxwaGEoZmFsc2UpCi0gICAgLCBt
X3N0YXR1cyhGcmFtZUVtcHR5KQotICAgICwgbV9kdXJhdGlvbigwKQotICAgICwgbV9kaXNwb3Nh
bE1ldGhvZChEaXNwb3NlTm90U3BlY2lmaWVkKQotICAgICwgbV9wcmVtdWx0aXBseUFscGhhKHRy
dWUpCiB7CiB9IAogCkBAIC0xNDEsOTMgKzEzNiwzMSBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1l
OjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgaWYgKHRoaXMgPT0gJm90
aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7
Ci0gICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7Cisg
ICAgY29weVBpeGVscyhvdGhlcik7CisgICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7
CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5k
dXJhdGlvbigpKTsKICAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgp
KTsKLSAgICBzZXRQcmVtdWx0aXBseUFscGhhKG90aGVyLnByZW11bHRpcGx5QWxwaGEoKSk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi12b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkK
LXsKLSAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgIG1fYnl0ZXMgPSAwOwotICAgIG1f
c3RhdHVzID0gRnJhbWVFbXB0eTsKLSAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVt
YmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCi0gICAgLy8gdG8g
ZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJhbWVC
dWZmZXIoKSBhbmQKLSAgICAvLyBmcmFtZUNvbXBsZXRlKCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVh
ZCBvdGhlciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZQotICAgIC8vIGxhdGVyLgotfQotCi12
b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKLXsKLSAgICBtZW1zZXQobV9ieXRl
cywgMCwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRh
KSk7Ci0gICAgbV9oYXNBbHBoYSA9IHRydWU7Ci19Ci0KLXZvaWQgSW1hZ2VGcmFtZTo6emVyb0Zp
bGxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlQoSW50UmVjdChJ
bnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpKTsKLQotICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSBy
ZWN0LndpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICBQaXhlbERhdGEqIHN0YXJ0ID0g
bV9ieXRlcyArIChyZWN0LnkoKSAqIHdpZHRoKCkpICsgcmVjdC54KCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKLSAgICAgICAgbWVtc2V0KHN0YXJ0LCAw
LCByZWN0V2lkdGhJbkJ5dGVzKTsKLSAgICAgICAgc3RhcnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0K
LSAgICBzZXRIYXNBbHBoYSh0cnVlKTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFw
RGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKK2Jvb2wgSW1hZ2VGcmFtZTo6Y29weVBpeGVs
cyhjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKIHsKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tp
bmdTdG9yZTsKLSAgICBtX2J5dGVzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwotICAgIG1fc2l6
ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0
aCwgaW50IG5ld0hlaWdodCkKLXsKLSAgICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgpKTsK
LSAgICBzaXplX3QgYmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVpZ2h0OwotICAg
IGlmICghbV9iYWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdTdG9yZVNpemUp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNraW5nU3RvcmUucmVzaXplKGJhY2tp
bmdTdG9yZVNpemUpOwotICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAg
bV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLQotICAgIHplcm9GaWxsUGl4
ZWxEYXRhKCk7CisgICAgaWYgKG90aGVyLm1fcGl4ZWxzKQorICAgICAgICBtX3BpeGVscyA9IEJp
dG1hcFBpeGVsczo6Y3JlYXRlKCpvdGhlci5tX3BpeGVscy5nZXQoKSk7CisgICAgZWxzZQorICAg
ICAgICBtX3BpeGVscyA9IG51bGxwdHI7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW1h
Z2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdAotewotICAgIHJldHVybiBtX2hhc0FscGhhOwotfQot
Ci12b2lkIEltYWdlRnJhbWU6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEpCi17Ci0gICAgbV9oYXNB
bHBoYSA9IGFscGhhOwotfQotCi12b2lkIEltYWdlRnJhbWU6OnNldENvbG9yUHJvZmlsZShjb25z
dCBDb2xvclByb2ZpbGUmIGNvbG9yUHJvZmlsZSkKLXsKLSAgICBtX2NvbG9yUHJvZmlsZSA9IGNv
bG9yUHJvZmlsZTsKLX0KLQotdm9pZCBJbWFnZUZyYW1lOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMg
c3RhdHVzKQorYm9vbCBJbWFnZUZyYW1lOjppbml0UGl4ZWxzKGNvbnN0IEludFNpemUmIHNpemUs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKLSAgICBtX3N0YXR1cyA9IHN0YXR1czsKKyAgICBB
U1NFUlQoIW1fcGl4ZWxzKTsKKyAgICBtX3BpeGVscyA9IEJpdG1hcFBpeGVsczo6Y3JlYXRlKHNp
emUsIHByZW11bHRpcGx5QWxwaGEpOworICAgIHJldHVybiBtX3BpeGVscyAhPSBudWxscHRyOwog
fQogCiBuYW1lc3BhY2UgewpAQCAtMjc0LDE0ICsyMDcsMTQgQEAgdGVtcGxhdGUgPE1hdGNoVHlw
ZSB0eXBlPiBpbnQgZ2V0U2NhbGVkVmFsdWUoY29uc3QgVmVjdG9yPGludD4mIHNjYWxlZFZhbHVl
cywgaW4KIGJvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBp
bmRleCkKIHsKICAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBmcmFtZUJ1ZmZlckF0SW5kZXgoaW5k
ZXgpOwotICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1l
OjpGcmFtZUNvbXBsZXRlOworICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5pc0NvbXBsZXRl
KCk7CiB9CiAKIGJvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPD0gaW5k
ZXgpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5k
ZXhdLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCisgICAgaWYgKG1fZnJh
bWVCdWZmZXJDYWNoZVtpbmRleF0uaXNDb21wbGV0ZSgpKQogICAgICAgICByZXR1cm4gbV9mcmFt
ZUJ1ZmZlckNhY2hlW2luZGV4XS5oYXNBbHBoYSgpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MjkxLDEzICsyMjQsMTMgQEAgdW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkg
PD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGRpbWVu
c2lvbiBvZiB0aGUgcmVxdWVzdGVkIGZyYW1lLgotICAgIHJldHVybiBtX3NpemUuYXJlYSgpICog
c2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkg
KiBzaXplb2YoUkdCQTMyKTsKIH0KIAogZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9u
QXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gZnJhbWVC
dWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygp
ID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8vIE1hbnkgYW5ub3lpbmcg
YWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2ts
eSBhcyBwb3NzaWJsZS4KQEAgLTMxNywxMiArMjUwLDE4IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdl
RGVjb2Rlcjo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGlu
Z0xlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0g
ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0
YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAgaWYgKCFidWZmZXIgfHwgYnVm
ZmVyLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gUmV0dXJu
IHRoZSBidWZmZXIgY29udGVudHMgYXMgYSBuYXRpdmUgaW1hZ2UuIEZvciBzb21lIHBvcnRzLCB0
aGUgZGF0YQogICAgIC8vIGlzIGFscmVhZHkgaW4gYSBuYXRpdmUgY29udGFpbmVyLCBhbmQgdGhp
cyBqdXN0IGluY3JlbWVudHMgaXRzIHJlZmNvdW50LgotICAgIHJldHVybiBidWZmZXItPmFzTmV3
TmF0aXZlSW1hZ2UoKTsKKyAgICBpZiAoYnVmZmVyLT5oYXNJbWFnZSgpKQorICAgICAgICByZXR1
cm4gYnVmZmVyLT5pbWFnZSgpOworCisgICAgaWYgKGJ1ZmZlci0+aGFzUGl4ZWxzKCkpCisgICAg
ICAgIHJldHVybiBidWZmZXItPnBpeGVscygpLT5pbWFnZSgpOworCisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIHZvaWQgSW1hZ2VEZWNvZGVyOjpwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3Nhcnko
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaAppbmRleCAyZjhlZWUxNzgxZDE2MmQ4NmM0OWZlMWRhYzcyYTJlN2U0MGE1ZDZk
Li5hZGQzOWZlODZmNTA4MjNlZjJjYjI0OTk2OGM1MWI4NTg3OTdhYmY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApA
QCAtMjgsOCArMjgsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU2NyZWVuLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KQEAgLTQwLDI0ICs0MiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKLQogICAgIC8vIEltYWdlRnJhbWUg
cmVwcmVzZW50cyB0aGUgZGVjb2RlZCBpbWFnZSBkYXRhLiAgVGhpcyBidWZmZXIgaXMgd2hhdCBh
bGwKICAgICAvLyBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLgogICAgIGNsYXNz
IEltYWdlRnJhbWUgewogICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBGcmFtZVN0YXR1cyB7IEZy
YW1lRW1wdHksIEZyYW1lUGFydGlhbCwgRnJhbWVDb21wbGV0ZSB9OwotICAgICAgICBlbnVtIEZy
YW1lRGlzcG9zYWxNZXRob2QgewotICAgICAgICAgICAgLy8gSWYgeW91IGNoYW5nZSB0aGUgbnVt
ZXJpYyB2YWx1ZXMgb2YgdGhlc2UsIG1ha2Ugc3VyZSB5b3UgYXVkaXQKLSAgICAgICAgICAgIC8v
IGFsbCB1c2VycywgYXMgc29tZSB1c2VycyBtYXkgY2FzdCByYXcgdmFsdWVzIHRvL2Zyb20gdGhl
c2UKLSAgICAgICAgICAgIC8vIGNvbnN0YW50cy4KLSAgICAgICAgICAgIERpc3Bvc2VOb3RTcGVj
aWZpZWQsICAgICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJhbWVidWZmZXIKLSAgICAgICAgICAgIERp
c3Bvc2VLZWVwLCAgICAgICAgICAgICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJhbWVidWZmZXIKLSAg
ICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yLCAgLy8gQ2xlYXIgZnJhbWUgdG8gdHJh
bnNwYXJlbnQKLSAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyAgLy8gQ2xlYXIg
ZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY29udGVudHMKLSAgICAgICAgfTsKLSAgICAgICAgdHlwZWRlZiB1bnNp
Z25lZCBQaXhlbERhdGE7CisgICAgICAgIGVudW0gY2xhc3MgRGVjb2RpbmdTdGF0dXMgeyBFbXB0
eSwgUGFydGlhbCwgQ29tcGxldGUgfTsKKyAgICAgICAgZW51bSBjbGFzcyBEaXNwb3NhbE1ldGhv
ZCB7IE5vdFNwZWNpZmllZCwgS2VlcCwgT3ZlcndyaXRlQmdjb2xvciwgT3ZlcndyaXRlUHJldmlv
dXMgfTsKIAogICAgICAgICBJbWFnZUZyYW1lKCk7CiAKQEAgLTY3LDE2NCArNTcsNDEgQEAgdXNp
bmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAvLyBjcmVhdGUgYSBuZXcg
Y29weSBvZiB0aGUgaW1hZ2UgZGF0YSwgb25seSBpbmNyZWFzZSB0aGUgcmVmIGNvdW50LgogICAg
ICAgICBJbWFnZUZyYW1lJiBvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpOwogCi0g
ICAgICAgIC8vIFRoZXNlIGRvIG5vdCB0b3VjaCBvdGhlciBtZXRhZGF0YSwgb25seSB0aGUgcmF3
IHBpeGVsIGRhdGEuCi0gICAgICAgIHZvaWQgY2xlYXJQaXhlbERhdGEoKTsKLSAgICAgICAgdm9p
ZCB6ZXJvRmlsbFBpeGVsRGF0YSgpOwotICAgICAgICB2b2lkIHplcm9GaWxsRnJhbWVSZWN0KGNv
bnN0IEludFJlY3QmKTsKLQotICAgICAgICAvLyBNYWtlcyB0aGlzIGZyYW1lIGhhdmUgYW4gaW5k
ZXBlbmRlbnQgY29weSBvZiB0aGUgcHJvdmlkZWQgaW1hZ2UncwotICAgICAgICAvLyBwaXhlbCBk
YXRhLCBzbyB0aGF0IG1vZGlmaWNhdGlvbnMgaW4gb25lIGZyYW1lIGFyZSBub3QgcmVmbGVjdGVk
IGluCi0gICAgICAgIC8vIHRoZSBvdGhlci4gIFJldHVybnMgd2hldGhlciB0aGUgY29weSBzdWNj
ZWVkZWQuCi0gICAgICAgIGJvb2wgY29weUJpdG1hcERhdGEoY29uc3QgSW1hZ2VGcmFtZSYpOwot
Ci0gICAgICAgIC8vIENvcGllcyB0aGUgcGl4ZWwgZGF0YSBhdCBbKHN0YXJ0WCwgc3RhcnRZKSwg
KGVuZFgsIHN0YXJ0WSkpIHRvIHRoZQotICAgICAgICAvLyBzYW1lIFgtY29vcmRpbmF0ZXMgb24g
ZWFjaCBzdWJzZXF1ZW50IHJvdyB1cCB0byBidXQgbm90IGluY2x1ZGluZwotICAgICAgICAvLyBl
bmRZLgotICAgICAgICB2b2lkIGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGlu
dCBzdGFydFksIGludCBlbmRZKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRY
IDwgd2lkdGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWCA8PSB3aWR0aCgpKTsKLSAgICAg
ICAgICAgIEFTU0VSVChzdGFydFkgPCBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5k
WSA8PSBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcm93Qnl0ZXMgPSAoZW5kWCAt
IHN0YXJ0WCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIGNvbnN0IFBpeGVsRGF0
YSogY29uc3Qgc3RhcnRBZGRyID0gZ2V0QWRkcihzdGFydFgsIHN0YXJ0WSk7Ci0gICAgICAgICAg
ICBmb3IgKGludCBkZXN0WSA9IHN0YXJ0WSArIDE7IGRlc3RZIDwgZW5kWTsgKytkZXN0WSkKLSAg
ICAgICAgICAgICAgICBtZW1jcHkoZ2V0QWRkcihzdGFydFgsIGRlc3RZKSwgc3RhcnRBZGRyLCBy
b3dCeXRlcyk7Ci0gICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChEaXNw
b3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQorICAgICAg
ICBEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9z
YWxNZXRob2Q7IH0KIAotICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBk
YXRhLiAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKLSAgICAgICAgLy8gYXJlIHdy
aXR0ZW4uICBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2Nh
dGlvbgotICAgICAgICAvLyBzdWNjZWVkZWQuCi0gICAgICAgIGJvb2wgc2V0U2l6ZShpbnQgbmV3
V2lkdGgsIGludCBuZXdIZWlnaHQpOworICAgICAgICB2b2lkIHNldFN0YXR1cyhEZWNvZGluZ1N0
YXR1cyBzdGF0dXMpIHsgbV9zdGF0dXMgPSBzdGF0dXM7IH0KKyAgICAgICAgRGVjb2RpbmdTdGF0
dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkVtcHR5OyB9
CisgICAgICAgIGJvb2wgaXNQYXJ0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVj
b2RpbmdTdGF0dXM6OlBhcnRpYWw7IH0KKyAgICAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlOyB9CiAKLSAgICAg
ICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIG5h
dGl2ZSBpbWFnZSBkYXRhLgotICAgICAgICAvLyAoQWN0dWFsIHVzZTogVGhpcyBwb2ludGVyIHdp
bGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluCi0gICAgICAgIC8vIEZyYW1l
RGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2Uo
KSBjb25zdDsKKyAgICAgICAgYm9vbCBpbml0UGl4ZWxzKGNvbnN0IEludFNpemUmLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEpOworICAgICAgICBib29sIGNvcHlQaXhlbHMoY29uc3QgSW1hZ2VGcmFt
ZSYpOworICAgICAgICB2b2lkIGNsZWFyUGl4ZWxzKCkgeyBtX3BpeGVscyA9IG51bGxwdHI7IH0K
IAotICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IEludFJlY3Qm
IG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsg
fQotICAgICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsg
fQotICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247
IH0KLSAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KLSAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9wcmVtdWx0aXBseUFscGhhOyB9CisgICAgICAgIEludFNpemUg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzLT5zaXplKCk7IH0KIAotICAgICAgICB2b2lk
IHNldEhhc0FscGhhKGJvb2wgYWxwaGEpOwotICAgICAgICB2b2lkIHNldENvbG9yUHJvZmlsZShj
b25zdCBDb2xvclByb2ZpbGUmKTsKLSAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChj
b25zdCBJbnRSZWN0JiByKSB7IG1fb3JpZ2luYWxGcmFtZVJlY3QgPSByOyB9Ci0gICAgICAgIHZv
aWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cyk7CiAgICAgICAgIHZvaWQgc2V0RHVyYXRp
b24odW5zaWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9Ci0gICAgICAg
IHZvaWQgc2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9k
aXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQotICAgICAgICB2b2lkIHNldFByZW11bHRpcGx5QWxw
aGEoYm9vbCBwcmVtdWx0aXBseUFscGhhKSB7IG1fcHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRp
cGx5QWxwaGE7IH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwg
dW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAg
ewotICAgICAgICAgICAgc2V0UkdCQShnZXRBZGRyKHgsIHkpLCByLCBnLCBiLCBhKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4
OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRhKCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVhZCBvZiBpbnRlZ2VyIGRpdmlz
aW9uIG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8vIFRoaXMgbXVsdGlwbGVyIHBy
b2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwgdmFsdWVzIGluIHJhbmdlIDAg
LSAyNTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludFNoaWZ0ID0gMjQ7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludE11bHQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2ludFNoaWZ0KSkgKyAxOwotICAg
ICAgICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZpeHBvaW50IHZhbHVlIGFuZCBj
b252ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZml4UG9p
bnRVbnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNpZ25lZCB2KQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gIChmaXhlZCAqIHYpID4+IGZpeFBvaW50U2hpZnQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5z
aWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAgICAgICpkZXN0ID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2ludE11bHQ7Ci0gICAgICAgICAgICAg
ICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBhbHBoYU11bHQpOwotICAgICAgICAg
ICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoZywgYWxwaGFNdWx0KTsKLSAgICAg
ICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGIsIGFscGhhTXVsdCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcg
PDwgOCB8IGIpOwotICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9kdXJhdGlvbjsgfQogCi0jaWYgRU5BQkxFKEFQTkcpCi0gICAgICAgIHN0YXRp
YyBpbmxpbmUgdW5zaWduZWQgZGl2aWRlMjU1KHVuc2lnbmVkIGEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiAoYSArIChhID4+IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQorICAgICAg
ICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpIHsgbV9oYXNBbHBoYSA9IGFscGhhOyB9Cisg
ICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9CiAKLSAg
ICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIWEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBOYXRpdmVJbWFnZVB0
ciBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAgICAgICAgQml0bWFwUGl4ZWxz
KiBwaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscyA/IG1fcGl4ZWxzLmdldCgpIDogbnVs
bHB0cjsgfQogCi0gICAgICAgICAgICBpZiAoYSA8IDI1NSkgewotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGFEZXN0ID0gKCgqZGVzdCkgPj4gMjQpICYgMjU1OwotICAgICAgICAgICAgICAgIGlm
IChhRGVzdCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByRGVzdCA9ICgoKmRlc3Qp
ID4+IDE2KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZ0Rlc3QgPSAoKCpk
ZXN0KSA+PiA4KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYkRlc3QgPSAo
KmRlc3QpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhQXV4ID0gMjU1IC0g
YTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJEZXN0ID0gZGl2aWRlMjU1KHJEZXN0ICogYURlc3QpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZ0Rlc3QgPSBkaXZpZGUyNTUoZ0Rlc3QgKiBhRGVzdCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBiRGVzdCA9IGRpdmlkZTI1NShiRGVzdCAqIGFEZXN0KTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1
KHIgKiBhICsgckRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1
NShnICogYSArIGdEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBkaXZpZGUy
NTUoYiAqIGEgKyBiRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBhICs9IGRpdmlk
ZTI1NShhRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlw
bHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgciA9IChyICogMjU1ICsgYSAtIDEp
IC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoZyAqIDI1NSArIGEgLSAxKSAvIGE7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBiID0gKGIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ByZW11bHRp
cGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgciA9IGRpdmlkZTI1NShyICogYSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGcgPSBkaXZpZGUyNTUoZyAqIGEpOwotICAgICAgICAgICAgICAg
ICAgICBiID0gZGl2aWRlMjU1KGIgKiBhKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIp
OwotICAgICAgICB9Ci0jZW5kaWYKKyAgICAgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2U7IH0KKyAgICAgICAgYm9vbCBoYXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBw
aXhlbHMoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50IHdpZHRoKCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgRGlzcG9zYWxNZXRob2QgbV9k
aXNwb3NhbE1ldGhvZCB7IERpc3Bvc2FsTWV0aG9kOjpOb3RTcGVjaWZpZWQgfTsKKyAgICAgICAg
RGVjb2RpbmdTdGF0dXMgbV9zdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6RW1wdHkgfTsKKyAgICAg
ICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1h
cFBpeGVscz4gbV9waXhlbHM7CiAKLSAgICAgICAgVmVjdG9yPFBpeGVsRGF0YT4gbV9iYWNraW5n
U3RvcmU7Ci0gICAgICAgIFBpeGVsRGF0YSogbV9ieXRlczsgLy8gVGhlIG1lbW9yeSBpcyBiYWNr
ZWQgYnkgbV9iYWNraW5nU3RvcmUuCi0gICAgICAgIEludFNpemUgbV9zaXplOwotICAgICAgICAv
LyBGSVhNRTogRG8gd2UgbmVlZCBtX2NvbG9yUHJvZmlsZSBhbnltb3JlPwotICAgICAgICBDb2xv
clByb2ZpbGUgbV9jb2xvclByb2ZpbGU7Ci0gICAgICAgIGJvb2wgbV9oYXNBbHBoYTsKLSAgICAg
ICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3Qg
YmUgdGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1
ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmFsbCBpbWFnZSBzaXplLgot
ICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKLSAgICAgICAgdW5zaWduZWQgbV9kdXJhdGlv
bjsKLSAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwotICAgICAg
ICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYTsKKyAgICAgICAgZmxvYXQgbV9kdXJhdGlvbiB7IDAg
fTsKKyAgICAgICAgYm9vbCBtX2hhc0FscGhhIHsgdHJ1ZSB9OwogICAgIH07CiAKICAgICAvLyBJ
bWFnZURlY29kZXIgaXMgYSBiYXNlIGZvciBhbGwgZm9ybWF0LXNwZWNpZmljIGRlY29kZXJzCkBA
IC0yNTMsNiArMTIwLDggQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogCiAg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgPSAwOwogCisg
ICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlw
bHlBbHBoYTsgfQorCiAgICAgICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25zdCB7IHJl
dHVybiBtX2lzQWxsRGF0YVJlY2VpdmVkOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldERh
dGEoU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKQEAgLTI5MCwxMSAr
MTU5LDExIEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKIAogICAgICAgICAv
LyBSZXR1cm5zIHdoZXRoZXIgdGhlIHNpemUgaXMgbGVnYWwgKGkuZS4gbm90IGdvaW5nIHRvIHJl
c3VsdCBpbgogICAgICAgICAvLyBvdmVyZmxvdyBlbHNld2hlcmUpLiAgSWYgbm90LCBtYXJrcyBk
ZWNvZGluZyBhcyBmYWlsZWQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCisgICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKGNv
bnN0IEludFNpemUmIHNpemUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc092ZXJTaXpl
KHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgaWYgKGlzT3ZlclNpemUoc2l6ZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwotICAgICAgICAgICAgbV9zaXplID0gSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgICAg
ICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KQEAgLTM4MSw4ICsyNTAsNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8
Y2hhcj47CiAKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOyAvLyBUaGUgZW5j
b2RlZCBkYXRhLgogICAgICAgICBWZWN0b3I8SW1hZ2VGcmFtZSwgMT4gbV9mcmFtZUJ1ZmZlckNh
Y2hlOwotICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBtX2NvbG9yUHJvZmlsZSBhbnkgbW9y
ZSwgZm9yIGFueSBwb3J0PwotICAgICAgICBDb2xvclByb2ZpbGUgbV9jb2xvclByb2ZpbGU7CiAg
ICAgICAgIGJvb2wgbV9zY2FsZWQgeyBmYWxzZSB9OwogICAgICAgICBWZWN0b3I8aW50PiBtX3Nj
YWxlZENvbHVtbnM7CiAgICAgICAgIFZlY3RvcjxpbnQ+IG1fc2NhbGVkUm93czsKQEAgLTM5Mywx
MSArMjYwLDEwIEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICBwcml2
YXRlOgogICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUg
aW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKICAgICAgICAgLy8gYW5kIHJldHVybiBpdCBh
cyBhIChzaWduZWQpIGludC4gIEF2b2lkIG92ZXJmbG93LgotICAgICAgICBzdGF0aWMgYm9vbCBp
c092ZXJTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCisgICAgICAgIHN0YXRp
YyBib29sIGlzT3ZlclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX3NpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nIGxvbmc+KHdpZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGhlaWdodCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdG90YWxfc2l6ZSA+ICgoMSA8PCAyOSkgLSAxKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KHNpemUud2lkdGgoKSkgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUuaGVp
Z2h0KCkpOworICAgICAgICAgICAgcmV0dXJuIHBpeGVscyA+ICgoMSA8PCAyOSkgLSAxKTsKICAg
ICAgICAgfQogCiAgICAgICAgIEludFNpemUgbV9zaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVy
LmNwcAppbmRleCBjYWYzNWM5N2YxN2VkZDM0YmM5ZGY4OWFiMDllODcwMGFlZTZjN2RmLi5hMTRk
NDM5ZTVkZjMxNzIyMjM2MmFjMjEyNzQ5MDgyZDBkN2NjMGI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VE
ZWNvZGVyLmNwcApAQCAtNzAsMTMgKzcwLDExIEBAIEltYWdlRnJhbWUqIEJNUEltYWdlRGVjb2Rl
cjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICBpZiAoaW5kZXgpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpIHsK
KyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKICAgICAgICAgbV9mcmFtZUJ1
ZmZlckNhY2hlLnJlc2l6ZSgxKTsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCku
c2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwotICAgIH0KIAogICAgIElt
YWdlRnJhbWUqIGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKTsKLSAgICBpZiAo
YnVmZmVyLT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgIGlmICgh
YnVmZmVyLT5pc0NvbXBsZXRlKCkpCiAgICAgICAgIGRlY29kZShmYWxzZSk7CiAgICAgcmV0dXJu
IGJ1ZmZlcjsKIH0KQEAgLTk4LDcgKzk2LDcgQEAgdm9pZCBCTVBJbWFnZURlY29kZXI6OmRlY29k
ZShib29sIG9ubHlTaXplKQogICAgICAgICBzZXRGYWlsZWQoKTsKICAgICAvLyBJZiB3ZSdyZSBk
b25lIGRlY29kaW5nIHRoZSBpbWFnZSwgd2UgZG9uJ3QgbmVlZCB0aGUgQk1QSW1hZ2VSZWFkZXIK
ICAgICAvLyBhbnltb3JlLiAgKElmIHdlIGZhaWxlZCwgfG1fcmVhZGVyfCBoYXMgYWxyZWFkeSBi
ZWVuIGNsZWFyZWQuKQotICAgIGVsc2UgaWYgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgp
ICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUNvbXBsZXRlKSkKKyAgICBlbHNlIGlmICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHko
KSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuaXNDb21wbGV0ZSgpKSkKICAgICAgICAg
bV9yZWFkZXIgPSBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAppbmRleCA1
YzAwNTUzNGVjZDkyMTM0YTEzYjMyOTU4OTI3NzkwZjA3YWQwZjgxLi4wNTg3ZmM0OWEwZDk4NWYy
ZWI2NDg4YWQ4Yjc1YjJkMDRjOTVhMTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKQEAg
LTc3LDE4ICs3NywxNSBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5
U2l6ZSkKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KICAg
ICBBU1NFUlQobV9idWZmZXIpOyAgLy8gUGFyZW50IHNob3VsZCBzZXQgdGhpcyBiZWZvcmUgYXNr
aW5nIHVzIHRvIGRlY29kZSEKLSAgICBpZiAobV9idWZmZXItPnN0YXR1cygpID09IEltYWdlRnJh
bWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFtX2J1ZmZlci0+c2V0U2l6ZShtX3BhcmVu
dC0+c2l6ZSgpLndpZHRoKCksIG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkpKQorICAgIGlmICht
X2J1ZmZlci0+aXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghbV9idWZmZXItPmluaXRQaXhlbHMo
bV9wYXJlbnQtPnNpemUoKSwgbV9wYXJlbnQtPnByZW11bHRpcGx5QWxwaGEoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gbV9wYXJlbnQtPnNldEZhaWxlZCgpOyAvLyBVbmFibGUgdG8gYWxsb2NhdGUu
Ci0gICAgICAgIG1fYnVmZmVyLT5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsK
KyAgICAgICAgbV9idWZmZXItPnNldFN0YXR1cyhJbWFnZUZyYW1lOjpEZWNvZGluZ1N0YXR1czo6
UGFydGlhbCk7CiAgICAgICAgIC8vIHNldFNpemUoKSBjYWxscyBlcmFzZUFSR0IoKSwgd2hpY2gg
cmVzZXRzIHRoZSBhbHBoYSBmbGFnLCBzbyB3ZSBmb3JjZQogICAgICAgICAvLyBpdCBiYWNrIHRv
IGZhbHNlIGhlcmUuICBXZSdsbCBzZXQgaXQgdHJ1ZSBiZWxvdyBpbiBhbGwgY2FzZXMgd2hlcmUK
ICAgICAgICAgLy8gdGhlc2UgMHMgY291bGQgYWN0dWFsbHkgc2hvdyB0aHJvdWdoLgogICAgICAg
ICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEoZmFsc2UpOwogCi0gICAgICAgIC8vIEZvciBCTVBzLCB0
aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIG1fYnVmZmVy
LT5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fcGFyZW50LT5zaXpl
KCkpKTsKLQogICAgICAgICBpZiAoIW1faXNUb3BEb3duKQogICAgICAgICAgICAgbV9jb29yZC5z
ZXRZKG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkgLSAxKTsKICAgICB9CkBAIC0xMjIsNyArMTE5
LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seVNpemUpCiAgICAg
fQogCiAgICAgLy8gRG9uZSEKLSAgICBtX2J1ZmZlci0+c2V0U3RhdHVzKEltYWdlRnJhbWU6OkZy
YW1lQ29tcGxldGUpOworICAgIG1fYnVmZmVyLT5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RGVjb2Rp
bmdTdGF0dXM6OkNvbXBsZXRlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTcxLDcgKzE2
OCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKCkKICAgICAgICAg
cmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKIAogICAgIC8vIFNldCBvdXIgc2l6ZS4KLSAg
ICBpZiAoIW1fcGFyZW50LT5zZXRTaXplKG1faW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFk
ZXIuYmlIZWlnaHQpKQorICAgIGlmICghbV9wYXJlbnQtPnNldFNpemUoSW50U2l6ZShtX2luZm9I
ZWFkZXIuYmlXaWR0aCwgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0KSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIEZvciBwYWxldHRlZCBpbWFnZXMsIGJpdG1hcHMgY2FuIHNldCBiaUNs
clVzZWQgdG8gMCB0byBtZWFuICJhbGwKQEAgLTcwNyw3ICs3MDQsOCBAQCBCTVBJbWFnZVJlYWRl
cjo6UHJvY2Vzc2luZ1Jlc3VsdCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEoYm9v
bCBpblJMRSwgaQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IG1fc2Vlbk5vblplcm9BbHBoYVBpeGVsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KG1fc2Vlblplcm9BbHBoYVBpeGVsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZl
ci0+emVyb0ZpbGxQaXhlbERhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVy
LT5waXhlbHMoKS0+Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLT5z
ZXRIYXNBbHBoYSh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2Vlblplcm9BbHBo
YVBpeGVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxwaGEgIT0g
MjU1KQogICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXItPnNldEhhc0FscGhhKHRydWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlUmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VSZWFkZXIuaAppbmRleCBiNWNiOTZlM2Y5Mjk5MmRkNzYyZTUzNzRiNWQ1
NWNjZDc4NTNjY2MxLi41NDNiNjJkZWI1YzI0YjNiOTZjNjEyMDA4MzRlNWUyNmFmMGNhODc0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1Q
SW1hZ2VSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VSZWFkZXIuaApAQCAtMjQ4LDcgKzI0OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBibHVlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBtX2J1ZmZlci0+c2V0UkdCQShtX2Nvb3JkLngoKSwgbV9jb29yZC55KCksIHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLT5waXhsZXMoKS0+c2V0UkdC
QShtX2Nvb3JkLngoKSwgbV9jb29yZC55KCksIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAg
ICAgICAgICAgIG1fY29vcmQubW92ZSgxLCAwKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHND
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9C
aXRtYXBQaXhlbHNDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWFhZjhhMGEzNmIxOGNiZjcyNzdkMmMy
ZTI2ZWI0MTcxMjU2MDBkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcApAQCAtMCwwICsx
LDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCisKKyNpbmNsdWRl
IDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdGl2ZUltYWdlUHRyIEJpdG1h
cFBpeGVsczo6aW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFn
ZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyKj4oY29uc3RfY2FzdDxSR0JBMzIqPihtX3BpeGVscykpLAorICAgICAgICBDQUlS
T19GT1JNQVRfQVJHQjMyLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCBzaXplKCku
d2lkdGgoKSAqIHNpemVvZihSR0JBMzIpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJv
L0ltYWdlRGVjb2RlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggN2I0MTI5NWY4NTczNThmYmJmMzVjMWIwNTI1ZThkNmNjMzUyMGY1OC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNv
ZGVyLmgiCi0KLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU5h
dGl2ZUltYWdlUHRyIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAg
IHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKLSAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxQaXhlbERh
dGEqPihtX2J5dGVzKSksCi0gICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoKCksIGhl
aWdodCgpLCB3aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA5Zjk5MmE3YmUxZDY2
NzIyNjc1YzJlODU0YWQxODkxZTYwZjg1NzdjLi5mZWU5MDljMzZhMWJkNWU2MzQ3MjNmYjAyMjZm
YzBmNWEzOTMxZWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtNjAsMTIgKzYw
LDEyIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVy
biBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1ib29sIEdJRkltYWdlRGVj
b2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9vbCBHSUZJ
bWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAoSW1h
Z2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiBzaXplKCkgPT0gSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSkKKyAgICBpZiAoSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiB0aGlz
LT5zaXplKCkgPT1zaXplKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghSW1hZ2VE
ZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICghSW1hZ2VEZWNvZGVyOjpz
ZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBwcmVwYXJlU2NhbGVE
YXRhSWZOZWNlc3NhcnkoKTsKQEAgLTExNyw3ICsxMTcsNyBAQCBJbWFnZUZyYW1lKiBHSUZJbWFn
ZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhd
OwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQor
ICAgIGlmICghZnJhbWUuaXNDb21wbGV0ZSgpKQogICAgICAgICBkZWNvZGUoaW5kZXggKyAxLCBH
SUZGdWxsUXVlcnkpOwogICAgIHJldHVybiAmZnJhbWU7CiB9CkBAIC0xNTYsMjUgKzE1NiwyNSBA
QCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVh
ckJlZm9yZUZyYW1lKQogICAgIC8vIG5vdCB0byBoYXZlIG5vbi1lbXB0eSBmcmFtZXMgYWZ0ZXIg
dGhlIGZyYW1lIHdlJ3JlIGN1cnJlbnRseSBkZWNvZGluZy4KICAgICAvLyBTbywgc2NhbiBiYWNr
d2FyZHMgZnJvbSB8ZW5kfCBhcyBmb2xsb3dzOgogICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMg
ZW1wdHksIHdlJ3JlIHN0aWxsIHBhc3QgYW55IGZyYW1lcyB3ZSBjYXJlIGFib3V0LgotICAgIC8v
ICAgKiBJZiB0aGUgZnJhbWUgaXMgY29tcGxldGUsIGJ1dCBpcyBEaXNwb3NlT3ZlcndyaXRlUHJl
dmlvdXMsIHdlJ2xsCisgICAgLy8gICAqIElmIHRoZSBmcmFtZSBpcyBjb21wbGV0ZSwgYnV0IGlz
IERpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cywgd2UnbGwKICAgICAvLyAgICAgc2tp
cCBvdmVyIGl0IGluIGZ1dHVyZSBpbml0RnJhbWVCdWZmZXIoKSBjYWxscy4gIFdlIGNhbiBjbGVh
ciBpdAogICAgIC8vICAgICB1bmxlc3MgaXQncyB8ZW5kfCwgYW5kIGtlZXAgc2Nhbm5pbmcuICBG
b3IgYW55IG90aGVyIGRpc3Bvc2FsIG1ldGhvZCwKICAgICAvLyAgICAgc3RvcCBzY2FubmluZywg
YXMgd2UndmUgZm91bmQgdGhlIGZyYW1lIGluaXRGcmFtZUJ1ZmZlcigpIHdpbGwgbmVlZAogICAg
IC8vICAgICBuZXh0LgogICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMgcGFydGlhbCwgd2UncmUg
ZGVjb2RpbmcgaXQsIHNvIGRvbid0IGNsZWFyIGl0OyBpZiBpdAotICAgIC8vICAgICBoYXMgYSBk
aXNwb3NhbCBtZXRob2Qgb3RoZXIgdGhhbiBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMsIHN0b3AK
KyAgICAvLyAgICAgaGFzIGEgZGlzcG9zYWwgbWV0aG9kIG90aGVyIHRoYW4gRGlzcG9zYWxNZXRo
b2Q6Ok92ZXJ3cml0ZVByZXZpb3VzLCBzdG9wCiAgICAgLy8gICAgIHNjYW5uaW5nLCBhcyB3ZSds
bCBvbmx5IG5lZWQgdGhpcyBmcmFtZSB3aGVuIGRlY29kaW5nIHRoZSBuZXh0IG9uZS4KICAgICBW
ZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKLSAgICBmb3IgKDsgKGkgIT0gbV9m
cmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6
RnJhbWVFbXB0eSkgfHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9z
ZU92ZXJ3cml0ZVByZXZpb3VzKSk7IC0taSkgewotICAgICAgICBpZiAoKGktPnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpICYmIChpICE9IGVuZCkpCi0gICAgICAgICAgICBp
LT5jbGVhclBpeGVsRGF0YSgpOworICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUu
YmVnaW4oKSkgJiYgKChpLT5pc0VtcHR5KCkpIHx8IChpLT5kaXNwb3NhbE1ldGhvZCgpID09IElt
YWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cykpOyAtLWkpIHsKKyAg
ICAgICAgaWYgKChpLT5pc0NvbXBsZXRlKCkpICYmIChpICE9IGVuZCkpCisgICAgICAgICAgICBp
LT5jbGVhclBpeGVscygpOwogICAgIH0KIAogICAgIC8vIE5vdyB8aXwgaG9sZHMgdGhlIGxhc3Qg
ZnJhbWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsgY2xlYXIgcHJpb3IgZnJhbWVzLgogICAgIGZvciAo
VmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBqKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigp
KTsgaiAhPSBpOyArK2opIHsKLSAgICAgICAgQVNTRVJUKGotPnN0YXR1cygpICE9IEltYWdlRnJh
bWU6OkZyYW1lUGFydGlhbCk7Ci0gICAgICAgIGlmIChqLT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1l
OjpGcmFtZUVtcHR5KQotICAgICAgICAgICAgai0+Y2xlYXJQaXhlbERhdGEoKTsKKyAgICAgICAg
QVNTRVJUKCFqLT5pc1BhcnRpYWwoKSk7CisgICAgICAgIGlmICghai0+aXNFbXB0eSgpKQorICAg
ICAgICAgICAgai0+Y2xlYXJQaXhlbHMoKTsKICAgICB9CiAKICAgICAvLyBXaGVuIHNvbWUgZnJh
bWVzIGFyZSBjbGVhcmVkLCB0aGUgcmVhZGVyIGlzIG91dCBvZiBzeW5jLCBzaW5jZSB0aGUgY2Fs
bGVyIG1pZ2h0IGFzayBmb3IgYW55IGZyYW1lIG5vdApAQCAtMjEzLDE2ICsyMTMsMTYgQEAgYm9v
bCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIGNv
bnN0IFZlY3Rvcjx1bnNpZ25lZAogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVj
ZXNzYXJ5LgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFt
ZUluZGV4XTsKLSAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVF
bXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNQaXhl
bERhdGEoKSkKKyAgICBpZiAoKChidWZmZXIuaXNFbXB0eSgpKSAmJiAhaW5pdEZyYW1lQnVmZmVy
KGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhhc1BpeGVscygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVy
LmdldEFkZHIoeEJlZ2luLCB5QmVnaW4pOworICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBi
dWZmZXIucGl4ZWxzKCkuYXQoeEJlZ2luLCB5QmVnaW4pOwogICAgIC8vIFdyaXRlIG9uZSByb3cn
cyB3b3J0aCBvZiBkYXRhIGludG8gdGhlIGZyYW1lLiAgCiAgICAgZm9yIChpbnQgeCA9IHhCZWdp
bjsgeCA8IHhFbmQ7ICsreCkgewogICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHNvdXJjZVZh
bHVlID0gcm93QnVmZmVyWyhtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpIC0gZnJh
bWVDb250ZXh0LT54T2Zmc2V0XTsKICAgICAgICAgaWYgKCghZnJhbWVDb250ZXh0LT5pc1RyYW5z
cGFyZW50IHx8IChzb3VyY2VWYWx1ZSAhPSBmcmFtZUNvbnRleHQtPnRwaXhlbCkpICYmIChzb3Vy
Y2VWYWx1ZSA8IGNvbG9yTWFwU2l6ZSkpIHsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBjb2xv
ckluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihzb3VyY2VWYWx1ZSkgKiAzOwotICAgICAgICAg
ICAgYnVmZmVyLnNldFJHQkEoY3VycmVudEFkZHJlc3MsIGNvbG9yTWFwW2NvbG9ySW5kZXhdLCBj
b2xvck1hcFtjb2xvckluZGV4ICsgMV0sIGNvbG9yTWFwW2NvbG9ySW5kZXggKyAyXSwgMjU1KTsK
KyAgICAgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdCQShjdXJyZW50QWRkcmVzcywgY29s
b3JNYXBbY29sb3JJbmRleF0sIGNvbG9yTWFwW2NvbG9ySW5kZXggKyAxXSwgY29sb3JNYXBbY29s
b3JJbmRleCArIDJdLCAyNTUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9jdXJy
ZW50QnVmZmVyU2F3QWxwaGEgPSB0cnVlOwogICAgICAgICAgICAgLy8gV2UgbWF5IG9yIG1heSBu
b3QgbmVlZCB0byB3cml0ZSB0cmFuc3BhcmVudCBwaXhlbHMgdG8gdGhlIGJ1ZmZlci4KQEAgLTIz
MywzNCArMjMzLDM0IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNp
Z25lZCBmcmFtZUluZGV4LCBjb25zdCBWZWN0b3I8dW5zaWduZWQKICAgICAgICAgICAgIC8vIGJl
eW9uZCB0aGUgZmlyc3QsIG9yIHRoZSBpbml0aWFsIHBhc3NlcyB3aWxsICJzaG93IHRocm91Z2gi
IHRoZQogICAgICAgICAgICAgLy8gbGF0ZXIgb25lcy4KICAgICAgICAgICAgIGlmICh3cml0ZVRy
YW5zcGFyZW50UGl4ZWxzKQotICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKGN1cnJlbnRB
ZGRyZXNzLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBidWZmZXIucGl4ZWxzKCktPnNl
dFJHQkEoY3VycmVudEFkZHJlc3MsIDAsIDAsIDAsIDApOwogICAgICAgICB9CiAgICAgICAgICsr
Y3VycmVudEFkZHJlc3M7CiAgICAgfQogCiAgICAgLy8gVGVsbCB0aGUgZnJhbWUgdG8gY29weSB0
aGUgcm93IGRhdGEgaWYgbmVlZCBiZS4KICAgICBpZiAocmVwZWF0Q291bnQgPiAxKQotICAgICAg
ICBidWZmZXIuY29weVJvd05UaW1lcyh4QmVnaW4sIHhFbmQsIHlCZWdpbiwgeUVuZCk7CisgICAg
ICAgIGJ1ZmZlci5waXhlbHMoKS0+cmVwZWF0Rmlyc3RSb3coSW50UmVjdCh4QmVnaW4sIHlCZWdp
biwgeEVuZCAtIHhCZWdpbiwgeUVuZCAtIHlCZWdpbikpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5k
ZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIEltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRo
b2QgZGlzcG9zYWxNZXRob2QpCitib29sIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1
bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLCBJbWFnZUZyYW1lOjpE
aXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkKIHsKICAgICAvLyBJbml0aWFsaXplIHRoZSBm
cmFtZSBpZiBuZWNlc3NhcnkuICBTb21lIEdJRnMgaW5zZXJ0IGRvLW5vdGhpbmcgZnJhbWVzLAog
ICAgIC8vIGluIHdoaWNoIGNhc2Ugd2UgbmV2ZXIgcmVhY2ggaGF2ZURlY29kZWRSb3coKSBiZWZv
cmUgZ2V0dGluZyBoZXJlLgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJD
YWNoZVtmcmFtZUluZGV4XTsKLSAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1l
OjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKQorICAgIGlmICgo
YnVmZmVyLmlzRW1wdHkoKSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBpbml0RnJhbWVCdWZmZXIoKSBoYXMgYWxyZWFkeSBjYWxsZWQg
c2V0RmFpbGVkKCkuCiAKLSAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29t
cGxldGUpOworICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RGVjb2RpbmdTdGF0dXM6
OkNvbXBsZXRlKTsKICAgICBidWZmZXIuc2V0RHVyYXRpb24oZnJhbWVEdXJhdGlvbik7CiAgICAg
YnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKGRpc3Bvc2FsTWV0aG9kKTsKIAogICAgIGlmICghbV9j
dXJyZW50QnVmZmVyU2F3QWxwaGEpIHsKICAgICAgICAgLy8gVGhlIHdob2xlIGZyYW1lIHdhcyBu
b24tdHJhbnNwYXJlbnQsIHNvIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZW50aXJlCiAgICAgICAg
IC8vIHJlc3VsdGluZyBidWZmZXIgd2FzIG5vbi10cmFuc3BhcmVudCwgYW5kIHdlIGNhbiBzZXRI
YXNBbHBoYShmYWxzZSkuCi0gICAgICAgIGlmIChidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKS5j
b250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQorICAgICAgICBpZiAo
YnVmZmVyLnBpeGVscygpLT5yZWN0KCkuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2Fs
ZWRTaXplKCkpKSkKICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAg
ICAgIGVsc2UgaWYgKGZyYW1lSW5kZXgpIHsKICAgICAgICAgICAgIC8vIFRyaWNreSBjYXNlLiAg
VGhpcyBmcmFtZSBkb2VzIG5vdCBoYXZlIGFscGhhIG9ubHkgaWYgZXZlcnl3aGVyZQpAQCAtMjY4
LDIyICsyNjgsMjIgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWdu
ZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwKICAgICAgICAgICAgIC8vIHRy
dWUsIHdlIGNoZWNrIHRoZSBzdGFydCBzdGF0ZSBvZiB0aGUgZnJhbWUgLS0gaWYgaXQgZG9lc24n
dCBoYXZlCiAgICAgICAgICAgICAvLyBhbHBoYSwgd2UncmUgc2FmZS4KICAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAvLyBGaXJzdCBza2lwIG92ZXIgcHJpb3IgRGlzcG9zZU92ZXJ3cml0ZVBy
ZXZpb3VzIGZyYW1lcyAoc2luY2UgdGhleQorICAgICAgICAgICAgLy8gRmlyc3Qgc2tpcCBvdmVy
IHByaW9yIERpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cyBmcmFtZXMgKHNpbmNlIHRo
ZXkKICAgICAgICAgICAgIC8vIGRvbid0IGFmZmVjdCB0aGUgc3RhcnQgc3RhdGUgb2YgdGhpcyBm
cmFtZSkgdGhlIHNhbWUgd2F5IHdlIGRvIGluCiAgICAgICAgICAgICAvLyBpbml0RnJhbWVCdWZm
ZXIoKS4KICAgICAgICAgICAgIGNvbnN0IEltYWdlRnJhbWUqIHByZXZCdWZmZXIgPSAmbV9mcmFt
ZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgICAgICB3aGlsZSAoZnJhbWVJbmRl
eCAmJiAocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3Nl
T3ZlcndyaXRlUHJldmlvdXMpKQorICAgICAgICAgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYgKHBy
ZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6
Ok92ZXJ3cml0ZVByZXZpb3VzKSkKICAgICAgICAgICAgICAgICBwcmV2QnVmZmVyID0gJm1fZnJh
bWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwogCi0gICAgICAgICAgICAvLyBOb3csIGlmIHdl
J3JlIGF0IGEgRGlzcG9zZU5vdFNwZWNpZmllZCBvciBEaXNwb3NlS2VlcCBmcmFtZSwgdGhlbgor
ICAgICAgICAgICAgLy8gTm93LCBpZiB3ZSdyZSBhdCBhIERpc3Bvc2FsTWV0aG9kOjpOb3RTcGVj
aWZpZWQgb3IgRGlzcG9zYWxNZXRob2Q6OktlZXAgZnJhbWUsIHRoZW4KICAgICAgICAgICAgIC8v
IHdlIGNhbiBzYXkgd2UgaGF2ZSBubyBhbHBoYSBpZiB0aGF0IGZyYW1lIGhhZCBubyBhbHBoYS4g
IEJ1dAogICAgICAgICAgICAgLy8gc2luY2UgaW4gaW5pdEZyYW1lQnVmZmVyKCkgd2UgYWxyZWFk
eSBjb3BpZWQgdGhhdCBmcmFtZSdzIGFscGhhCiAgICAgICAgICAgICAvLyBzdGF0ZSBpbnRvIHRo
ZSBjdXJyZW50IGZyYW1lJ3MsIHdlIG5lZWQgZG8gbm90aGluZyBhdCBhbGwgaGVyZS4KICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGUgb25seSByZW1haW5pbmcgY2FzZSBpcyBhIERp
c3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGZyYW1lLiAgSWYKKyAgICAgICAgICAgIC8vIFRoZSBvbmx5
IHJlbWFpbmluZyBjYXNlIGlzIGEgRGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZUJnY29sb3IgZnJh
bWUuIElmCiAgICAgICAgICAgICAvLyBpdCBoYWQgbm8gYWxwaGEsIGFuZCBpdHMgcmVjdCBpcyBj
b250YWluZWQgaW4gdGhlIGN1cnJlbnQgZnJhbWUncwogICAgICAgICAgICAgLy8gcmVjdCwgd2Ug
a25vdyB0aGUgY3VycmVudCBmcmFtZSBoYXMgbm8gYWxwaGEuCi0gICAgICAgICAgICBpZiAoKHBy
ZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0
ZUJnY29sb3IpICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1ZmZlci5vcmlnaW5hbEZy
YW1lUmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVSZWN0KCkpKQorICAg
ICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6
OkRpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVCZ2NvbG9yKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxw
aGEoKSAmJiBidWZmZXIucGl4ZWxzKCktPnJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5waXhl
bHMoKS0+cmVjdCgpKSkKICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2Up
OwogICAgICAgICB9CiAgICAgfQpAQCAtMzIxLDEwICszMjEsNyBAQCB2b2lkIEdJRkltYWdlRGVj
b2Rlcjo6ZGVjb2RlKHVuc2lnbmVkIGhhbHRBdEZyYW1lLCBHSUZRdWVyeSBxdWVyeSkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IHNpemVfdCBvbGRTaXplID0gbV9mcmFtZUJ1
ZmZlckNhY2hlLnNpemUoKTsKICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKG1fcmVhZGVy
LT5pbWFnZXNDb3VudCgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fcmVh
ZGVyLT5pbWFnZXNDb3VudCgpOyArK2kpCi0gICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5z
ZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CiAKICAgICBpZiAocXVlcnkg
PT0gR0lGRnJhbWVDb3VudFF1ZXJ5KQogICAgICAgICByZXR1cm47CkBAIC0zNTMsNTggKzM1MCw2
MCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1l
SW5kZXgpCiAgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgpIC0gZnJh
bWVDb250ZXh0LT55T2Zmc2V0KTsKIAogICAgIEltYWdlRnJhbWUqIGNvbnN0IGJ1ZmZlciA9ICZt
X2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaW50IGxlZnQgPSB1cHBlckJvdW5k
U2NhbGVkWChmcmFtZVJlY3QueCgpKTsKLSAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5kU2NhbGVk
WChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKLSAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxl
ZFkoZnJhbWVSZWN0LnkoKSk7Ci0gICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZy
YW1lUmVjdC5tYXhZKCksIHRvcCk7Ci0gICAgYnVmZmVyLT5zZXRPcmlnaW5hbEZyYW1lUmVjdChJ
bnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKIAogICAgIGlm
ICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBmcmFtZSwgc28g
d2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEuCi0gICAgICAgIGlmICghYnVm
ZmVyLT5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXplKCkuaGVpZ2h0KCkp
KQorICAgICAgICBpZiAoIWJ1ZmZlci0+aW5pdFBpeGVscyhzY2FsZWRTaXplKCksIHByZW11bHRp
cGx5QWxwaGEoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lIGRlcGVuZHMg
b24gdGhlIHByZXZpb3VzIGZyYW1lJ3MKICAgICAgICAgLy8gZGlzcG9zYWwgbWV0aG9kLgogICAg
ICAgICAvLwotICAgICAgICAvLyBGcmFtZXMgdGhhdCB1c2UgdGhlIERpc3Bvc2VPdmVyd3JpdGVQ
cmV2aW91cyBtZXRob2QgYXJlIGVmZmVjdGl2ZWx5CisgICAgICAgIC8vIEZyYW1lcyB0aGF0IHVz
ZSB0aGUgRGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZVByZXZpb3VzIG1ldGhvZCBhcmUgZWZmZWN0
aXZlbHkKICAgICAgICAgLy8gbm8tb3BzIGluIHRlcm1zIG9mIGNoYW5naW5nIHRoZSBzdGFydGlu
ZyBzdGF0ZSBvZiBhIGZyYW1lIGNvbXBhcmVkIHRvCiAgICAgICAgIC8vIHRoZSBzdGFydGluZyBz
dGF0ZSBvZiB0aGUgcHJldmlvdXMgZnJhbWUsIHNvIHNraXAgb3ZlciB0aGVtLiAgKElmIHRoZQog
ICAgICAgICAvLyBmaXJzdCBmcmFtZSBzcGVjaWZpZXMgdGhpcyBtZXRob2QsIGl0IHdpbGwgZ2V0
IHRyZWF0ZWQgbGlrZQotICAgICAgICAvLyBEaXNwb3NlT3ZlcndyaXRlQmdjb2xvciBiZWxvdyBh
bmQgcmVzZXQgdG8gYSBjb21wbGV0ZWx5IGVtcHR5IGltYWdlLikKKyAgICAgICAgLy8gRGlzcG9z
YWxNZXRob2Q6Ok92ZXJ3cml0ZUJnY29sb3IgYmVsb3cgYW5kIHJlc2V0IHRvIGEgY29tcGxldGVs
eSBlbXB0eSBpbWFnZS4pCiAgICAgICAgIGNvbnN0IEltYWdlRnJhbWUqIHByZXZCdWZmZXIgPSAm
bV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgIEltYWdlRnJhbWU6OkZy
YW1lRGlzcG9zYWxNZXRob2QgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9k
KCk7Ci0gICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2TWV0aG9kID09IEltYWdlRnJh
bWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpIHsKKyAgICAgICAgSW1hZ2VGcmFtZTo6RGlz
cG9zYWxNZXRob2QgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7Cisg
ICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2TWV0aG9kID09IEltYWdlRnJhbWU6OkRp
c3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cykpIHsKICAgICAgICAgICAgIHByZXZCdWZm
ZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CiAgICAgICAgICAgICBwcmV2
TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKTsKICAgICAgICAgfQotICAgICAg
ICBBU1NFUlQocHJldkJ1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0
ZSk7CisgICAgICAgIEFTU0VSVChwcmV2QnVmZmVyLT5pc0NvbXBsZXRlKCkpOwogCi0gICAgICAg
IGlmICgocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlTm90U3BlY2lmaWVkKSB8fCAo
cHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlS2VlcCkpIHsKKyAgICAgICAgaWYgKChw
cmV2TWV0aG9kID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpOb3RTcGVjaWZpZWQpIHx8
IChwcmV2TWV0aG9kID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpLZWVwKSkgewogICAg
ICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGxhc3QgZnJhbWUgYXMgdGhlIHN0YXJ0aW5nIHN0YXRl
IGZvciB0aGlzIGZyYW1lLgotICAgICAgICAgICAgaWYgKCFidWZmZXItPmNvcHlCaXRtYXBEYXRh
KCpwcmV2QnVmZmVyKSkKKyAgICAgICAgICAgIGlmICghYnVmZmVyLT5jb3B5UGl4ZWxzKCpwcmV2
QnVmZmVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFt
ZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAgICAgLy8gYWZmZWN0aW5nIHBpeGVs
cyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCi0gICAgICAgICAgICBjb25zdCBJ
bnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAg
ICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPnBpeGVscygpLT5y
ZWN0KCk7CiAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBidWZmZXJTaXplID0gc2NhbGVkU2l6
ZSgpOwogICAgICAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8IHByZXZSZWN0LmNvbnRhaW5zKElu
dFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsKICAgICAgICAgICAgICAgICAvLyBD
bGVhcmluZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhlIHNpemUgb2YgdGhlIHdob2xl
CiAgICAgICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21wbGV0ZWx5IGVtcHR5
IGltYWdlLgotICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKGJ1ZmZlclNpemUu
d2lkdGgoKSwgYnVmZmVyU2l6ZS5oZWlnaHQoKSkpCisgICAgICAgICAgICAgICAgaWYgKCFidWZm
ZXItPmluaXRQaXhlbHMoYnVmZmVyU2l6ZSwgcHJlbXVsdGlwbHlBbHBoYSgpKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3aG9sZSBwcmV2aW91cyBidWZmZXIsIHRoZW4gY2xl
YXIganVzdCBpdHMgZnJhbWUuCi0gICAgICAgICAgICAgICAgaWYgKCFidWZmZXItPmNvcHlCaXRt
YXBEYXRhKCpwcmV2QnVmZmVyKSkKKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+Y29weVBp
eGVscygqcHJldkJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQo
KTsKLSAgICAgICAgICAgICAgICBidWZmZXItPnplcm9GaWxsRnJhbWVSZWN0KHByZXZSZWN0KTsK
KyAgICAgICAgICAgICAgICBidWZmZXItPnBpeGVscygpLT5jbGVhclJlY3QocHJldlJlY3QpOwor
ICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0SGFzQWxwaGEodHJ1ZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgaW50IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVk
WChmcmFtZVJlY3QueCgpKTsKKyAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFt
ZVJlY3QubWF4WCgpLCBsZWZ0KTsKKyAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJh
bWVSZWN0LnkoKSk7CisgICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVj
dC5tYXhZKCksIHRvcCk7CisgICAgYnVmZmVyLT5waXhlbHMoKS0+c2V0UmVjdChJbnRSZWN0KGxl
ZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKIAogICAgIC8vIFVwZGF0ZSBv
dXIgc3RhdHVzIHRvIGJlIHBhcnRpYWxseSBjb21wbGV0ZS4KLSAgICBidWZmZXItPnNldFN0YXR1
cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworICAgIGJ1ZmZlci0+c2V0U3RhdHVzKEltYWdl
RnJhbWU6OkRlY29kaW5nU3RhdHVzOjpQYXJ0aWFsKTsKIAogICAgIC8vIFJlc2V0IHRoZSBhbHBo
YSBwaXhlbCB0cmFja2VyIGZvciB0aGlzIGZyYW1lLgogICAgIG1fY3VycmVudEJ1ZmZlclNhd0Fs
cGhhID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKaW5kZXggOTVlYzZkMGE3YjY5NjY1
MmM3MDliN2I2MmQ0MWFhNGYzYWI4ZjFlMC4uMTRiMjlhNjhmYzc4ZGNmNDg2NzA1YmY1MDI4MDZk
NjYzNzhmNWJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaApAQCAtNDQsNyArNDQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuICJnaWYiOyB9CiAgICAgICAgIHZvaWQgc2V0RGF0YShTaGFy
ZWRCdWZmZXImIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSBvdmVycmlkZTsKICAgICAgICAg
Ym9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlkZTsKLSAgICAgICAgYm9vbCBzZXRTaXplKHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlOworICAgICAgICBib29sIHNl
dFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgICAgICBzaXplX3QgZnJhbWVDb3Vu
dCgpIG92ZXJyaWRlOwogICAgICAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
IG92ZXJyaWRlOwpAQCAtNTYsMTMgKzU2LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICAvLyBDYWxsYmFja3MgZnJvbSB0aGUgR0lGIHJlYWRlci4KICAgICAgICAgYm9vbCBoYXZl
RGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCBjb25zdCBWZWN0b3I8dW5zaWduZWQgY2hh
cj4mIHJvd0J1ZmZlciwgc2l6ZV90IHdpZHRoLCBzaXplX3Qgcm93TnVtYmVyLCB1bnNpZ25lZCBy
ZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKTsKLSAgICAgICAgYm9vbCBm
cmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24s
IEltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QpOworICAgICAg
ICBib29sIGZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVE
dXJhdGlvbiwgSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2QpOwogICAgICAgICB2b2lkIGdpZkNv
bXBsZXRlKCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBJZiB0aGUgcXVlcnkgaXMgR0lG
RnVsbFF1ZXJ5LCBkZWNvZGVzIHRoZSBpbWFnZSB1cCB0byAoYnV0IG5vdAotICAgICAgICAvLyBp
bmNsdWRpbmcpIHxoYWx0QXRGcmFtZXwuICBPdGhlcndpc2UsIGRlY29kZXMgYXMgbXVjaCBhcyBp
cyBuZWVkZWQgdG8KLSAgICAgICAgLy8gYW5zd2VyIHRoZSBxdWVyeSwgaWdub3JpbmcgYml0bWFw
IGRhdGEuICBJZiBkZWNvZGluZyBmYWlscyBidXQgdGhlcmUKKyAgICAgICAgLy8gaW5jbHVkaW5n
KSB8aGFsdEF0RnJhbWV8LiBPdGhlcndpc2UsIGRlY29kZXMgYXMgbXVjaCBhcyBpcyBuZWVkZWQg
dG8KKyAgICAgICAgLy8gYW5zd2VyIHRoZSBxdWVyeSwgaWdub3JpbmcgYml0bWFwIGRhdGEuIElm
IGRlY29kaW5nIGZhaWxzIGJ1dCB0aGVyZQogICAgICAgICAvLyBpcyBubyBtb3JlIGRhdGEgY29t
aW5nLCBzZXRzIHRoZSAiZGVjb2RlIGZhaWx1cmUiIGZsYWcuCiAgICAgICAgIHZvaWQgZGVjb2Rl
KHVuc2lnbmVkIGhhbHRBdEZyYW1lLCBHSUZRdWVyeSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIu
Y3BwCmluZGV4IDAwZDI1MmNlZmIwNWFhNTFmODRkOGRmOTkwMjI5MGVmZDcxMDQyMmYuLjViODhh
OTVmMzFhMWYwNTE5ZTgzMWE1YmZhYThmNDRhODRhYzRlZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVh
ZGVyLmNwcApAQCAtNDQ3LDcgKzQ0Nyw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnBhcnNlKHNp
emVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIGJvb2wgcGFyc2VTaXplT25seSkKIAogICAg
ICAgICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6
ZS4KICAgICAgICAgICAgIC8vIE5vdGU6IEEgc3Vic2VxdWVudCBmcmFtZSBtaWdodCBoYXZlIGRp
bWVuc2lvbnMgbGFyZ2VyIHRoYW4gdGhlICJzY3JlZW4iIGRpbWVuc2lvbnMuCi0gICAgICAgICAg
ICBpZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2Ny
ZWVuSGVpZ2h0KSkKKyAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNp
emUoV2ViQ29yZTo6SW50U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgbV9zY3JlZW5CZ2NvbG9y
ID0gY3VycmVudENvbXBvbmVudFs1XTsKQEAgLTU2OCwxNCArNTY4LDE0IEBAIGJvb2wgR0lGSW1h
Z2VSZWFkZXI6OnBhcnNlKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIGJvb2wgcGFy
c2VTaXplT25seSkKIAogICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSAidXNlciBpbnB1dCIg
Yml0LgogCi0gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHJlbGllcyBvbiB0aGUgdmFsdWVzIGlu
IHRoZSBGcmFtZURpc3Bvc2FsTWV0aG9kIGVudW0KKyAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMg
cmVsaWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIERpc3Bvc2FsTWV0aG9kIGVudW0KICAgICAgICAg
ICAgIC8vIG1hdGNoaW5nIHRob3NlIGluIHRoZSBHSUYgc3BlYyEKICAgICAgICAgICAgIGludCBk
aXNwb3NhbE1ldGhvZCA9ICgoKmN1cnJlbnRDb21wb25lbnQpID4+IDIpICYgMHg3OwotICAgICAg
ICAgICAgY3VycmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2Q+KGRpc3Bvc2FsTWV0aG9kKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZD4oZGlzcG9zYWxNZXRob2QpOwogICAgICAgICAg
ICAgLy8gU29tZSBzcGVjcyBzYXkgdGhhdCBkaXNwb3NhbCBtZXRob2QgMyBpcyAib3ZlcndyaXRl
IHByZXZpb3VzIiwgb3RoZXJzIHRoYXQgc2V0dGluZwogICAgICAgICAgICAgLy8gdGhlIHRoaXJk
IGJpdCBvZiB0aGUgZmllbGQgKGkuZS4gbWV0aG9kIDQpIGlzLiBXZSBtYXAgYm90aCB0byB0aGUg
c2FtZSB2YWx1ZS4KICAgICAgICAgICAgIGlmIChkaXNwb3NhbE1ldGhvZCA9PSA0KQotICAgICAg
ICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBXZWJDb3JlOjpJbWFnZUZy
YW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXM7CisgICAgICAgICAgICAgICAgY3VycmVudEZy
YW1lLT5kaXNwb3NhbE1ldGhvZCA9IFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9k
OjpPdmVyd3JpdGVQcmV2aW91czsKICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGVsYXlUaW1l
ID0gR0VUSU5UMTYoY3VycmVudENvbXBvbmVudCArIDEpICogMTA7CiAgICAgICAgICAgICBHRVRO
KDEsIEdJRkNvbnN1bWVCbG9jayk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTY2NCw3ICs2NjQs
NyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpwYXJzZShzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXpl
X3QgbGVuLCBib29sIHBhcnNlU2l6ZU9ubHkpCiAgICAgICAgICAgICAgICAgeU9mZnNldCA9IDA7
CiAKICAgICAgICAgICAgICAgICAvLyBDQUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2lu
IG9mIG91ciBzaXplLgotICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiAhbV9jbGllbnQt
PnNldFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQpKQorICAgICAgICAgICAgICAg
IGlmIChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUoV2ViQ29yZTo6SW50U2l6ZShtX3Nj
cmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgKaW5kZXggZWE0MmIx
MWE3OGMzOGViZTY1YzJjMjhiOTFjOGFmYjYyNjM1YTk5OS4uZWY1YzFhNGM2M2FmYjIwYTIxYjYz
OGI4OWYxMWQ5OTgxYzQxM2NiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgKQEAgLTE1NSw3ICsx
NTUsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgd2lkdGg7CiAgICAgdW5zaWduZWQgaGVpZ2h0
OwogICAgIGludCB0cGl4ZWw7IC8vIEluZGV4IG9mIHRyYW5zcGFyZW50IHBpeGVsLgotICAgIFdl
YkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2Q7IC8v
IFJlc3RvcmUgdG8gYmFja2dyb3VuZCwgbGVhdmUgaW4gcGxhY2UsIGV0Yy4KKyAgICBXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZDsgLy8gUmVzdG9yZSB0
byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwgZXRjLgogICAgIHNpemVfdCBsb2NhbENvbG9y
bWFwUG9zaXRpb247IC8vIFBlci1pbWFnZSBjb2xvcm1hcC4KICAgICBpbnQgbG9jYWxDb2xvcm1h
cFNpemU7IC8vIFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuCiAgICAgaW50IGRhdGFzaXpl
OwpAQCAtMTc0LDcgKzE3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCB3aWR0aCgwKQogICAgICAg
ICAsIGhlaWdodCgwKQogICAgICAgICAsIHRwaXhlbCgwKQotICAgICAgICAsIGRpc3Bvc2FsTWV0
aG9kKFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2VOb3RTcGVjaWZpZWQpCisgICAgICAgICwg
ZGlzcG9zYWxNZXRob2QoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok5vdFNw
ZWNpZmllZCkKICAgICAgICAgLCBsb2NhbENvbG9ybWFwUG9zaXRpb24oMCkKICAgICAgICAgLCBs
b2NhbENvbG9ybWFwU2l6ZSgwKQogICAgICAgICAsIGRhdGFzaXplKDApCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFn
ZURlY29kZXIuY3BwCmluZGV4IGE1OTIwMWI1NmU1YjIyZTJhODUxYzBjOTkyZWE0YjFmODhjYzNi
NGYuLjkzNDUxZDBiYzJiNzRkODc4ODJhOTAzYzJjMWQwMjA3NTIxNzJkOWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29k
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9J
Q09JbWFnZURlY29kZXIuY3BwCkBAIC04OCwyMSArODgsMjAgQEAgSW50U2l6ZSBJQ09JbWFnZURl
Y29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsKQog
ICAgIHJldHVybiAoaW5kZXggJiYgKGluZGV4IDwgbV9kaXJFbnRyaWVzLnNpemUoKSkpID8gbV9k
aXJFbnRyaWVzW2luZGV4XS5tX3NpemUgOiBzaXplKCk7CiB9CiAKLWJvb2wgSUNPSW1hZ2VEZWNv
ZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29sIElDT0lt
YWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIC8vIFRoZSBz
aXplIGNhbGN1bGF0ZWQgaW5zaWRlIHRoZSBCTVBJbWFnZVJlYWRlciBoYWQgYmV0dGVyIG1hdGNo
IHRoZSBvbmUgaW4KICAgICAvLyB0aGUgaWNvbiBkaXJlY3RvcnkuCi0gICAgcmV0dXJuIG1fZnJh
bWVTaXplLmlzRW1wdHkoKSA/IEltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSA6
ICgoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSA9PSBtX2ZyYW1lU2l6ZSkgfHwgc2V0RmFpbGVkKCkp
OworICAgIHJldHVybiBtX2ZyYW1lU2l6ZS5pc0VtcHR5KCkgPyBJbWFnZURlY29kZXI6OnNldFNp
emUoc2l6ZSkgOiAoKHNpemUgPT0gbV9mcmFtZVNpemUpIHx8IHNldEZhaWxlZCgpKTsKIH0KIAog
c2l6ZV90IElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCiB7CiAgICAgZGVjb2RlKDAsIHRy
dWUpOwotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKSB7CisKKyAgICBpZiAo
bV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hl
LnJlc2l6ZShtX2RpckVudHJpZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2RpckVudHJpZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2ZyYW1lQnVmZmVy
Q2FjaGVbaV0uc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwotICAgIH0K
KwogICAgIC8vIENBVVRJT046IFdlIG11c3Qgbm90IHJlc2l6ZSBtX2ZyYW1lQnVmZmVyQ2FjaGUg
YWdhaW4gYWZ0ZXIgdGhpcywgYXMKICAgICAvLyBkZWNvZGVBdEluZGV4KCkgbWF5IGdpdmUgYSBC
TVBJbWFnZVJlYWRlciBhIHBvaW50ZXIgdG8gb25lIG9mIHRoZQogICAgIC8vIGVudHJpZXMuCkBA
IC0xMTYsNyArMTE1LDcgQEAgSW1hZ2VGcmFtZSogSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZl
ckF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEltYWdlRnJh
bWUqIGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOwotICAgIGlmIChidWZmZXIt
PnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCisgICAgaWYgKCFidWZmZXIt
PmlzQ29tcGxldGUoKSkKICAgICAgICAgZGVjb2RlKGluZGV4LCBmYWxzZSk7CiAgICAgcmV0dXJu
IGJ1ZmZlcjsKIH0KQEAgLTE3OSw3ICsxNzgsNyBAQCB2b2lkIElDT0ltYWdlRGVjb2Rlcjo6ZGVj
b2RlKHNpemVfdCBpbmRleCwgYm9vbCBvbmx5U2l6ZSkKICAgICAvLyBJZiB3ZSdyZSBkb25lIGRl
Y29kaW5nIHRoaXMgZnJhbWUsIHdlIGRvbid0IG5lZWQgdGhlIEJNUEltYWdlUmVhZGVyIG9yCiAg
ICAgLy8gUE5HSW1hZ2VEZWNvZGVyIGFueW1vcmUuICAoSWYgd2UgZmFpbGVkLCB0aGVzZSBoYXZl
IGFscmVhZHkgYmVlbgogICAgIC8vIGNsZWFyZWQuKQotICAgIGVsc2UgaWYgKChtX2ZyYW1lQnVm
ZmVyQ2FjaGUuc2l6ZSgpID4gaW5kZXgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdLnN0
YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpKSB7CisgICAgZWxzZSBpZiAoKG1f
ZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPiBpbmRleCkgJiYgKG1fZnJhbWVCdWZmZXJDYWNoZVtp
bmRleF0uaXNDb21wbGV0ZSgpKSkgewogICAgICAgICBtX2JtcFJlYWRlcnNbaW5kZXhdID0gbnVs
bHB0cjsKICAgICAgICAgbV9wbmdEZWNvZGVyc1tpbmRleF0gPSBudWxscHRyOwogICAgIH0KQEAg
LTIyMCw3ICsyMTksNyBAQCBib29sIElDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlQXRJbmRleChzaXpl
X3QgaW5kZXgpCiAKICAgICBpZiAoIW1fcG5nRGVjb2RlcnNbaW5kZXhdKSB7CiAgICAgICAgIG1f
cG5nRGVjb2RlcnNbaW5kZXhdID0gc3RkOjptYWtlX3VuaXF1ZTwKLSAgICAgICAgICAgIFBOR0lt
YWdlRGVjb2Rlcj4obV9wcmVtdWx0aXBseUFscGhhID8gSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVs
dGlwbGllZCA6IEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsCisgICAgICAgICAg
ICBQTkdJbWFnZURlY29kZXI+KHByZW11bHRpcGx5QWxwaGEoKSA/IEltYWdlU291cmNlOjpBbHBo
YVByZW11bHRpcGxpZWQgOiBJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLAogICAg
ICAgICAgICAgICAgIG1faWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgPyBJbWFnZVNvdXJjZTo6
R2FtbWFBbmRDb2xvclByb2ZpbGVJZ25vcmVkIDogSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQ
cm9maWxlQXBwbGllZCk7CiAgICAgICAgIHNldERhdGFGb3JQTkdEZWNvZGVyQXRJbmRleChpbmRl
eCk7CiAgICAgfQpAQCAtMjc5LDcgKzI3OCw3IEBAIGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpwcm9j
ZXNzRGlyZWN0b3J5RW50cmllcygpCiAgICAgY29uc3QgSWNvbkRpcmVjdG9yeUVudHJ5JiBkaXJF
bnRyeSA9IG1fZGlyRW50cmllcy5maXJzdCgpOwogICAgIC8vIFRlY2huaWNhbGx5LCB0aGlzIG5l
eHQgY2FsbCBzaG91bGRuJ3QgYmUgYWJsZSB0byBmYWlsLCBzaW5jZSB0aGUgd2lkdGgKICAgICAv
LyBhbmQgaGVpZ2h0IGhlcmUgYXJlIGVhY2ggPD0gMjU2LCBhbmQgfG1fZnJhbWVTaXplfCBpcyBl
bXB0eS4KLSAgICByZXR1cm4gc2V0U2l6ZShkaXJFbnRyeS5tX3NpemUud2lkdGgoKSwgZGlyRW50
cnkubV9zaXplLmhlaWdodCgpKTsKKyAgICByZXR1cm4gc2V0U2l6ZShkaXJFbnRyeS5tX3NpemUp
OwogfQogCiBJQ09JbWFnZURlY29kZXI6Okljb25EaXJlY3RvcnlFbnRyeSBJQ09JbWFnZURlY29k
ZXI6OnJlYWREaXJlY3RvcnlFbnRyeSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgKaW5kZXggNTgw
YzY3YTg4M2E0MGI2ZTU0MjBmNjVhZTM0NDg4NDU3NDE5MzhlYy4uZDMzZDA1OGExNTk2MDdkZjg5
MzljZWExY2Q3YTZmMzE0NGI3MjJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaApAQCAtNDks
NyArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaXNTaXplQXZhaWxh
YmxlKCkgb3ZlcnJpZGU7CiAgICAgICAgIEludFNpemUgc2l6ZSgpIG92ZXJyaWRlOwogICAgICAg
ICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKSBvdmVy
cmlkZTsKLSAgICAgICAgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQpIG92ZXJyaWRlOworICAgICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJy
aWRlOwogICAgICAgICBzaXplX3QgZnJhbWVDb3VudCgpIG92ZXJyaWRlOwogICAgICAgICBJbWFn
ZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KSBvdmVycmlkZTsKICAgICAgICAgLy8g
Q0FVVElPTjogc2V0RmFpbGVkKCkgZGVsZXRlcyBhbGwgcmVhZGVycyBhbmQgZGVjb2RlcnMuICBC
ZSBjYXJlZnVsIHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBlZTY2YWMx
NGQ0YmUwN2NhOWFmZmIyYTNhZmY4OWViZmE2MmZiMTJlLi42MjIyYWUzYjEwYjEzYzg1NmE4NWY4
OTVhYzc0ZGEwOTZlMzQ2Y2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKQEAg
LTE5NiwzNiArMTk2LDYgQEAgc3RhdGljIEltYWdlT3JpZW50YXRpb24gcmVhZEltYWdlT3JpZW50
YXRpb24oanBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5mbykKICAgICByZXR1cm4gSW1hZ2VPcmll
bnRhdGlvbigpOwogfQogCi1zdGF0aWMgQ29sb3JQcm9maWxlIHJlYWRDb2xvclByb2ZpbGUoanBl
Z19kZWNvbXByZXNzX3N0cnVjdCogaW5mbykKLXsKLSNpZiBVU0UoSUNDSlBFRykKLSAgICBKT0NU
RVQqIHByb2ZpbGU7Ci0gICAgdW5zaWduZWQgaW50IHByb2ZpbGVMZW5ndGg7Ci0KLSAgICBpZiAo
IXJlYWRfaWNjX3Byb2ZpbGUoaW5mbywgJnByb2ZpbGUsICZwcm9maWxlTGVuZ3RoKSkKLSAgICAg
ICAgcmV0dXJuIENvbG9yUHJvZmlsZSgpOwotCi0gICAgLy8gT25seSBhY2NlcHQgUkdCIGNvbG9y
IHByb2ZpbGVzIGZyb20gaW5wdXQgY2xhc3MgZGV2aWNlcy4KLSAgICBib29sIGlnbm9yZVByb2Zp
bGUgPSBmYWxzZTsKLSAgICBjaGFyKiBwcm9maWxlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHByb2ZpbGUpOwotICAgIGlmIChwcm9maWxlTGVuZ3RoIDwgSW1hZ2VEZWNvZGVyOjppY2ND
b2xvclByb2ZpbGVIZWFkZXJMZW5ndGgpCi0gICAgICAgIGlnbm9yZVByb2ZpbGUgPSB0cnVlOwot
ICAgIGVsc2UgaWYgKCFJbWFnZURlY29kZXI6OnJnYkNvbG9yUHJvZmlsZShwcm9maWxlRGF0YSwg
cHJvZmlsZUxlbmd0aCkpCi0gICAgICAgIGlnbm9yZVByb2ZpbGUgPSB0cnVlOwotICAgIGVsc2Ug
aWYgKCFJbWFnZURlY29kZXI6OmlucHV0RGV2aWNlQ29sb3JQcm9maWxlKHByb2ZpbGVEYXRhLCBw
cm9maWxlTGVuZ3RoKSkKLSAgICAgICAgaWdub3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICBDb2xv
clByb2ZpbGUgY29sb3JQcm9maWxlOwotICAgIGlmICghaWdub3JlUHJvZmlsZSkKLSAgICAgICAg
Y29sb3JQcm9maWxlLmFwcGVuZChwcm9maWxlRGF0YSwgcHJvZmlsZUxlbmd0aCk7Ci0gICAgZnJl
ZShwcm9maWxlKTsKLSAgICByZXR1cm4gY29sb3JQcm9maWxlOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oaW5mbyk7Ci0gICAgcmV0dXJuIENvbG9yUHJvZmlsZSgpOwotI2VuZGlmCi19Ci0KIGNs
YXNzIEpQRUdJbWFnZVJlYWRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CkBAIC0zNTIsNyArMzIyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9zdGF0ZSA9IEpQ
RUdfU1RBUlRfREVDT01QUkVTUzsKIAogICAgICAgICAgICAgLy8gV2UgY2FuIGZpbGwgaW4gdGhl
IHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFibGUuCi0gICAgICAgICAgICBpZiAo
IW1fZGVjb2Rlci0+c2V0U2l6ZShtX2luZm8uaW1hZ2Vfd2lkdGgsIG1faW5mby5pbWFnZV9oZWln
aHQpKQorICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUoSW50U2l6ZShtX2luZm8u
aW1hZ2Vfd2lkdGgsIG1faW5mby5pbWFnZV9oZWlnaHQpKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0T3JpZW50YXRpb24ocmVhZElt
YWdlT3JpZW50YXRpb24oaW5mbygpKSk7CkBAIC0zNjMsMTMgKzMzMyw2IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGlmIChtX2RlY29kZXItPndpbGxEb3duU2FtcGxlKCkgJiYgdHVyYm9Td2l6emxl
ZChtX2luZm8ub3V0X2NvbG9yX3NwYWNlKSkKICAgICAgICAgICAgICAgICBtX2luZm8ub3V0X2Nv
bG9yX3NwYWNlID0gSkNTX1JHQjsKICNlbmRpZgotICAgICAgICAgICAgLy8gQWxsb3cgY29sb3Ig
bWFuYWdlbWVudCBvZiB0aGUgZGVjb2RlZCBSR0JBIHBpeGVscyBpZiBwb3NzaWJsZS4KLSAgICAg
ICAgICAgIGlmICghbV9kZWNvZGVyLT5pZ25vcmVzR2FtbWFBbmRDb2xvclByb2ZpbGUoKSkgewot
ICAgICAgICAgICAgICAgIENvbG9yUHJvZmlsZSByZ2JJbnB1dERldmljZUNvbG9yUHJvZmlsZSA9
IHJlYWRDb2xvclByb2ZpbGUoaW5mbygpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJnYklucHV0
RGV2aWNlQ29sb3JQcm9maWxlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9kZWNv
ZGVyLT5zZXRDb2xvclByb2ZpbGUocmdiSW5wdXREZXZpY2VDb2xvclByb2ZpbGUpOwotICAgICAg
ICAgICAgfQotCiAgICAgICAgICAgICAvLyBEb24ndCBhbGxvY2F0ZSBhIGdpYW50IGFuZCBzdXBl
cmZsdW91cyBtZW1vcnkgYnVmZmVyIHdoZW4gdGhlCiAgICAgICAgICAgICAvLyBpbWFnZSBpcyBh
IHNlcXVlbnRpYWwgSlBFRy4KICAgICAgICAgICAgIG1faW5mby5idWZmZXJlZF9pbWFnZSA9IGpw
ZWdfaGFzX211bHRpcGxlX3NjYW5zKCZtX2luZm8pOwpAQCAtNTU2LDkgKzUxOSw5IEBAIGJvb2wg
SlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAgICByZXR1cm4gSW1hZ2VEZWNv
ZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAotYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXRT
aXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29sIEpQRUdJbWFnZURlY29k
ZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAoIUltYWdlRGVjb2Rl
cjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6
ZShzaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcHJlcGFyZVNjYWxlRGF0YUlm
TmVjZXNzYXJ5KCk7CkBAIC01NzAsMTMgKzUzMywxMSBAQCBJbWFnZUZyYW1lKiBKUEVHSW1hZ2VE
ZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIGlmIChpbmRleCkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHko
KSkgeworICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICBtX2Zy
YW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0u
c2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwotICAgIH0KIAogICAgIElt
YWdlRnJhbWUmIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwotICAgIGlmIChmcmFtZS5z
dGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgIGlmICghZnJhbWUuaXND
b21wbGV0ZSgpKQogICAgICAgICBkZWNvZGUoZmFsc2UpOwogICAgIHJldHVybiAmZnJhbWU7CiB9
CkBAIC01ODgsMTMgKzU0OSwxMyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6OnNldEZhaWxlZCgp
CiB9CiAKIHRlbXBsYXRlIDxKX0NPTE9SX1NQQUNFIGNvbG9yU3BhY2U+Ci12b2lkIHNldFBpeGVs
KEltYWdlRnJhbWUmIGJ1ZmZlciwgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50QWRkcmVz
cywgSlNBTVBBUlJBWSBzYW1wbGVzLCBpbnQgY29sdW1uKQordm9pZCBzZXRQaXhlbChJbWFnZUZy
YW1lJiBidWZmZXIsIFJHQkEzMiogY3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywg
aW50IGNvbHVtbikKIHsKICAgICBKU0FNUExFKiBqc2FtcGxlID0gKnNhbXBsZXMgKyBjb2x1bW4g
KiAoY29sb3JTcGFjZSA9PSBKQ1NfUkdCID8gMyA6IDQpOwogCiAgICAgc3dpdGNoIChjb2xvclNw
YWNlKSB7CiAgICAgY2FzZSBKQ1NfUkdCOgotICAgICAgICBidWZmZXIuc2V0UkdCQShjdXJyZW50
QWRkcmVzcywganNhbXBsZVswXSwganNhbXBsZVsxXSwganNhbXBsZVsyXSwgMHhGRik7CisgICAg
ICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdCQShjdXJyZW50QWRkcmVzcywganNhbXBsZVswXSwg
anNhbXBsZVsxXSwganNhbXBsZVsyXSwgMHhGRik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SkNTX0NNWUs6CiAgICAgICAgIC8vIFNvdXJjZSBpcyAnSW52ZXJ0ZWQgQ01ZSycsIG91dHB1dCBp
cyBSR0IuCkBAIC02MDcsNyArNTY4LDcgQEAgdm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZm
ZXIsIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MsIEpTQU1QQVIKICAgICAg
ICAgLy8gRnJvbSBDTVkgKDAuLjEpIHRvIFJHQiAoMC4uMSk6CiAgICAgICAgIC8vIFIgPSAxIC0g
QyA9PiAxIC0gKDEgLSBpQyppSykgPT4gaUMqaUsgIFtHIGFuZCBCIHNpbWlsYXJdCiAgICAgICAg
IHVuc2lnbmVkIGsgPSBqc2FtcGxlWzNdOwotICAgICAgICBidWZmZXIuc2V0UkdCQShjdXJyZW50
QWRkcmVzcywganNhbXBsZVswXSAqIGsgLyAyNTUsIGpzYW1wbGVbMV0gKiBrIC8gMjU1LCBqc2Ft
cGxlWzJdICogayAvIDI1NSwgMHhGRik7CisgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdC
QShjdXJyZW50QWRkcmVzcywganNhbXBsZVswXSAqIGsgLyAyNTUsIGpzYW1wbGVbMV0gKiBrIC8g
MjU1LCBqc2FtcGxlWzJdICogayAvIDI1NSwgMHhGRik7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IH0KQEAgLTYzMSw3ICs1OTIsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5s
aW5lcyhJbWFnZUZyYW1lJiBidWZmZXIpCiAgICAgICAgIGlmIChkZXN0WSA8IDApCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRB
ZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgZGVzdFkpOworICAgICAgICBSR0JBMzIqIGN1cnJl
bnRBZGRyZXNzID0gYnVmZmVyLnBpeGVscygpLmF0KDAsIGRlc3RZKTsKICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CiAgICAgICAgICAgICBzZXRQaXhlbDxjb2xvclNw
YWNlPihidWZmZXIsIGN1cnJlbnRBZGRyZXNzLCBzYW1wbGVzLCBpc1NjYWxlZCA/IG1fc2NhbGVk
Q29sdW1uc1t4XSA6IHgpOwogICAgICAgICAgICAgKytjdXJyZW50QWRkcmVzczsKQEAgLTY1Mywx
NyArNjE0LDEzIEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKIAog
ICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KICAgICBJbWFnZUZy
YW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAgaWYgKGJ1ZmZlci5zdGF0
dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7Ci0gICAgICAgIGlmICghYnVmZmVyLnNl
dFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpCisgICAg
aWYgKGJ1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXIuaW5pdFBpeGVscyhz
Y2FsZWRTaXplKCksIHByZW11bHRpcGx5QWxwaGEoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0
RmFpbGVkKCk7Ci0gICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0
aWFsKTsKKyAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpEZWNvZGluZ1N0YXR1
czo6UGFydGlhbCk7CiAgICAgICAgIC8vIFRoZSBidWZmZXIgaXMgdHJhbnNwYXJlbnQgb3V0c2lk
ZSB0aGUgZGVjb2RlZCBhcmVhIHdoaWxlIHRoZSBpbWFnZSBpcwogICAgICAgICAvLyBsb2FkaW5n
LiBUaGUgY29tcGxldGVkIGltYWdlIHdpbGwgYmUgbWFya2VkIGZ1bGx5IG9wYXF1ZSBpbiBqcGVn
Q29tcGxldGUoKS4KICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwotICAgICAgICBi
dWZmZXIuc2V0Q29sb3JQcm9maWxlKG1fY29sb3JQcm9maWxlKTsKLQotICAgICAgICAvLyBGb3Ig
SlBFR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KLSAgICAgICAg
YnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7
CiAgICAgfQogCiAgICAganBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5mbyA9IG1fcmVhZGVyLT5p
bmZvKCk7CkBAIC02NzEsNyArNjI4LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRT
Y2FubGluZXMoKQogI2lmIGRlZmluZWQoVFVSQk9fSlBFR19SR0JfU1dJWlpMRSkKICAgICBpZiAo
IW1fc2NhbGVkICYmIHR1cmJvU3dpenpsZWQoaW5mby0+b3V0X2NvbG9yX3NwYWNlKSkgewogICAg
ICAgICB3aGlsZSAoaW5mby0+b3V0cHV0X3NjYW5saW5lIDwgaW5mby0+b3V0cHV0X2hlaWdodCkg
ewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcm93ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyKj4oYnVmZmVyLmdldEFkZHIoMCwgaW5mby0+b3V0cHV0X3NjYW5saW5lKSk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3cgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGNoYXIqPihidWZmZXIucGl4ZWxzKCktPmF0KDAsIGluZm8tPm91dHB1dF9zY2FubGluZSkpOwog
ICAgICAgICAgICAgaWYgKGpwZWdfcmVhZF9zY2FubGluZXMoaW5mbywgJnJvdywgMSkgIT0gMSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CkBAIC03MDQsNyArNjYx
LDcgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpqcGVnQ29tcGxldGUoKQogICAgIC8vIGVtcHR5
LgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICBi
dWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwotICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFt
ZTo6RnJhbWVDb21wbGV0ZSk7CisgICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpEZWNv
ZGluZ1N0YXR1czo6Q29tcGxldGUpOwogfQogCiB2b2lkIEpQRUdJbWFnZURlY29kZXI6OmRlY29k
ZShib29sIG9ubHlTaXplKQpAQCAtNzIxLDcgKzY3OCw3IEBAIHZvaWQgSlBFR0ltYWdlRGVjb2Rl
cjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCiAgICAgICAgIHNldEZhaWxlZCgpOwogICAgIC8vIElm
IHdlJ3JlIGRvbmUgZGVjb2RpbmcgdGhlIGltYWdlLCB3ZSBkb24ndCBuZWVkIHRoZSBKUEVHSW1h
Z2VSZWFkZXIKICAgICAvLyBhbnltb3JlLiAgKElmIHdlIGZhaWxlZCwgfG1fcmVhZGVyfCBoYXMg
YWxyZWFkeSBiZWVuIGNsZWFyZWQuKQotICAgIGVsc2UgaWYgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUu
aXNFbXB0eSgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0gSW1hZ2VGcmFt
ZTo6RnJhbWVDb21wbGV0ZSkpCisgICAgZWxzZSBpZiAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0Vt
cHR5KCkgJiYgKG1fZnJhbWVCdWZmZXJDYWNoZVswXS5pc0NvbXBsZXRlKCkpKQogICAgICAgICBt
X3JlYWRlciA9IG51bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKaW5kZXgg
NmMxZmMwNDI3MzIyMDM3NWJjNmEyNWVjMTk4ZjhjOGE1MTAxNDg2Yy4uZmMyM2ZiZDk2MzdiNTNh
ZWU2NjUzM2I2YWFiNGY3YjI2OGRjMGVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgK
QEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBJbWFnZURl
Y29kZXIKICAgICAgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gImpwZyI7IH0KICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlk
ZTsKLSAgICAgICAgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQp
IG92ZXJyaWRlOworICAgICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRl
OwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSBv
dmVycmlkZTsKICAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVkKCkgZGVsZXRlcyB8bV9yZWFk
ZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAogICAgICAgICAvLyBhY2Nlc3NpbmcgZGVsZXRlZCBt
ZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMgZnJvbSBpbnNpZGUKQEAgLTY2LDcg
KzY2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG91dHB1dFNjYW5saW5l
cygpOwogICAgICAgICB2b2lkIGpwZWdDb21wbGV0ZSgpOwogCi0gICAgICAgIHZvaWQgc2V0Q29s
b3JQcm9maWxlKGNvbnN0IENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxlKSB7IG1fY29sb3JQcm9m
aWxlID0gY29sb3JQcm9maWxlOyB9CiAgICAgICAgIHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH0K
IAogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCmluZGV4IGU2NDRhNzEx
MGVmY2I1NDBkODljZTFiYTgxMTAwYmM0ODIzYjE4ZjIuLmI5OGIyYWViMWEwOTMwMjU2YmE0ZGFh
Njg0YWQ2OWJhNzJiNmM2Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCkBAIC0yMzUs
OSArMjM1LDkgQEAgYm9vbCBQTkdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAg
cmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKLWJvb2wgUE5HSW1h
Z2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29s
IFBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlm
ICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICghSW1hZ2VE
ZWNvZGVyOjpzZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBwcmVw
YXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTI1NywxMyArMjU3LDExIEBAIEltYWdlRnJh
bWUqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIAotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2Fj
aGUuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAg
ICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7Ci0gICAgICAgIG1fZnJhbWVCdWZm
ZXJDYWNoZVswXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAg
fQogCiAgICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOwot
ICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAg
IGlmICghZnJhbWUuaXNDb21wbGV0ZSgpKQogICAgICAgICBkZWNvZGUoZmFsc2UsIGluZGV4KTsK
ICAgICByZXR1cm4gJmZyYW1lOwogfQpAQCAtMjc2LDM3ICsyNzQsNiBAQCBib29sIFBOR0ltYWdl
RGVjb2Rlcjo6c2V0RmFpbGVkKCkKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQo
KTsKIH0KIAotc3RhdGljIHZvaWQgcmVhZENvbG9yUHJvZmlsZShwbmdfc3RydWN0cCBwbmcsIHBu
Z19pbmZvcCBpbmZvLCBDb2xvclByb2ZpbGUmIGNvbG9yUHJvZmlsZSkKLXsKLSAgICBBU1NFUlQo
Y29sb3JQcm9maWxlLmlzRW1wdHkoKSk7Ci0KLSNpZmRlZiBQTkdfaUNDUF9TVVBQT1JURUQKLSAg
ICBjaGFyKiBwcm9maWxlTmFtZTsKLSAgICBpbnQgY29tcHJlc3Npb25UeXBlOwotI2lmIChQTkdf
TElCUE5HX1ZFUiA8IDEwNTAwKQotICAgIHBuZ19jaGFycCBwcm9maWxlOwotI2Vsc2UKLSAgICBw
bmdfYnl0ZXAgcHJvZmlsZTsKLSNlbmRpZgotICAgIHBuZ191aW50XzMyIHByb2ZpbGVMZW5ndGg7
Ci0gICAgaWYgKCFwbmdfZ2V0X2lDQ1AocG5nLCBpbmZvLCAmcHJvZmlsZU5hbWUsICZjb21wcmVz
c2lvblR5cGUsICZwcm9maWxlLCAmcHJvZmlsZUxlbmd0aCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIE9ubHkgYWNjZXB0IFJHQiBjb2xvciBwcm9maWxlcyBmcm9tIGlucHV0IGNsYXNzIGRl
dmljZXMuCi0gICAgYm9vbCBpZ25vcmVQcm9maWxlID0gZmFsc2U7Ci0gICAgY2hhciogcHJvZmls
ZURhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihwcm9maWxlKTsKLSAgICBpZiAocHJvZmls
ZUxlbmd0aCA8IEltYWdlRGVjb2Rlcjo6aWNjQ29sb3JQcm9maWxlSGVhZGVyTGVuZ3RoKQotICAg
ICAgICBpZ25vcmVQcm9maWxlID0gdHJ1ZTsKLSAgICBlbHNlIGlmICghSW1hZ2VEZWNvZGVyOjpy
Z2JDb2xvclByb2ZpbGUocHJvZmlsZURhdGEsIHByb2ZpbGVMZW5ndGgpKQotICAgICAgICBpZ25v
cmVQcm9maWxlID0gdHJ1ZTsKLSAgICBlbHNlIGlmICghSW1hZ2VEZWNvZGVyOjppbnB1dERldmlj
ZUNvbG9yUHJvZmlsZShwcm9maWxlRGF0YSwgcHJvZmlsZUxlbmd0aCkpCi0gICAgICAgIGlnbm9y
ZVByb2ZpbGUgPSB0cnVlOwotCi0gICAgaWYgKCFpZ25vcmVQcm9maWxlKQotICAgICAgICBjb2xv
clByb2ZpbGUuYXBwZW5kKHByb2ZpbGVEYXRhLCBwcm9maWxlTGVuZ3RoKTsKLSNlbmRpZgotfQot
CiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKIHsKICAgICBwbmdfc3Ry
dWN0cCBwbmcgPSBtX3JlYWRlci0+cG5nUHRyKCk7CkBAIC0zMjYsNyArMjkzLDcgQEAgdm9pZCBQ
TkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgpCiAgICAgLy8gd2lsbCBjZWFzZSB0byBl
eGlzdC4gIE5vdGUgdGhhdCB3ZSdsbCBzdGlsbCBwcm9wZXJseSBzZXQgdGhlIGZhaWx1cmUgZmxh
ZwogICAgIC8vIGluIHRoaXMgY2FzZSBhcyBzb29uIGFzIHdlIGxvbmdqbXAoKS4KICAgICBtX2Rv
Tm90aGluZ09uRmFpbHVyZSA9IHRydWU7Ci0gICAgYm9vbCByZXN1bHQgPSBzZXRTaXplKHdpZHRo
LCBoZWlnaHQpOworICAgIGJvb2wgcmVzdWx0ID0gc2V0U2l6ZShJbnRTaXplKHdpZHRoLCBoZWln
aHQpKTsKICAgICBtX2RvTm90aGluZ09uRmFpbHVyZSA9IGZhbHNlOwogICAgIGlmICghcmVzdWx0
KSB7CiAgICAgICAgIGxvbmdqbXAoSk1QQlVGKHBuZyksIDEpOwpAQCAtNDA1LDE2ICszNzIsNiBA
QCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICBpZiAoY29sb3JU
eXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVkgfHwgY29sb3JUeXBlID09IFBOR19DT0xPUl9UWVBF
X0dSQVlfQUxQSEEpCiAgICAgICAgIHBuZ19zZXRfZ3JheV90b19yZ2IocG5nKTsKIAotICAgIGlm
ICgoY29sb3JUeXBlICYgUE5HX0NPTE9SX01BU0tfQ09MT1IpICYmICFtX2lnbm9yZUdhbW1hQW5k
Q29sb3JQcm9maWxlKSB7Ci0gICAgICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBjb2xvciBwcm9maWxl
cyBmb3IgY29sb3IgUEFMRVRURSBhbmQgUkdCW0FdIFBORy4gU3VwcG9ydGluZwotICAgICAgICAv
LyBjb2xvciBwcm9maWxlcyBmb3IgZ3JheS1zY2FsZSBpbWFnZXMgaXMgc2xpZ2h0bHkgdHJpY2t5
LCBhdCBsZWFzdCB1c2luZyB0aGUKLSAgICAgICAgLy8gQ29yZUdyYXBoaWNzIElDQyBsaWJyYXJ5
LCBiZWNhdXNlIHdlIGV4cGFuZCBncmF5LXNjYWxlIGltYWdlcyB0byBSR0IgYnV0IHdlCi0gICAg
ICAgIC8vIGRvIG5vdCBzaW1pbGFybHkgdHJhbnNmb3JtIHRoZSBjb2xvciBwcm9maWxlLiBXZSdk
IGVpdGhlciBuZWVkIHRvIHRyYW5zZm9ybQotICAgICAgICAvLyB0aGUgY29sb3IgcHJvZmlsZSBv
ciB3ZSdkIG5lZWQgdG8gZGVjb2RlIGludG8gYSBncmF5LXNjYWxlIGltYWdlIGJ1ZmZlciBhbmQK
LSAgICAgICAgLy8gaGFuZCB0aGF0IHRvIENvcmVHcmFwaGljcy4KLSAgICAgICAgcmVhZENvbG9y
UHJvZmlsZShwbmcsIGluZm8sIG1fY29sb3JQcm9maWxlKTsKLSAgICB9Ci0KICAgICAvLyBEZWFs
IHdpdGggZ2FtbWEgYW5kIGtlZXAgaXQgdW5kZXIgb3VyIGNvbnRyb2wuCiAgICAgZG91YmxlIGdh
bW1hOwogICAgIGlmICghbV9pZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSAmJiBwbmdfZ2V0X2dB
TUEocG5nLCBpbmZvLCAmZ2FtbWEpKSB7CkBAIC00NTIsMTkgKzQwOSwxOSBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBzZXRQaXhlbFJHQihJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBw
aXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihSR0JBMzIqIGRlc3QsIHBuZ19i
eXRlcCBwaXhlbCkKIHsKICAgICAqZGVzdCA9IDB4RkYwMDAwMDBVIHwgcGl4ZWxbMF0gPDwgMTYg
fCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQ
aXhlbFJHQkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVu
c2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0
UGl4ZWxSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBu
b25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwog
ICAgICpkZXN0ID0gYSA8PCAyNCB8IHBpeGVsWzBdIDw8IDE2IHwgcGl4ZWxbMV0gPDwgOCB8IHBp
eGVsWzJdOwogICAgIG5vblRyaXZpYWxBbHBoYU1hc2sgfD0gKDI1NSAtIGEpOwogfQogCi1zdGF0
aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShJbWFnZUZyYW1lOjpQaXhl
bERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFs
cGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKFJH
QkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxw
aGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwogICAgIHVuc2lnbmVk
IGNoYXIgciA9IGZhc3REaXZpZGVCeTI1NShwaXhlbFswXSAqIGEpOwpAQCAtNDg2LDkgKzQ0Myw5
IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93
QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAg
SW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW21fY3VycmVudEZyYW1lXTsK
LSAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKKyAg
ICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkgewogICAgICAgICBwbmdfc3RydWN0cCBwbmcgPSBtX3Jl
YWRlci0+cG5nUHRyKCk7Ci0gICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2NhbGVkU2l6ZSgp
LndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpIHsKKyAgICAgICAgaWYgKCFidWZmZXIu
aW5pdFBpeGVscyhzY2FsZWRTaXplKCksIHByZW11bHRpcGx5QWxwaGEoKSkpIHsKICAgICAgICAg
ICAgIGxvbmdqbXAoSk1QQlVGKHBuZyksIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC01MDQsMTcgKzQ2MSwxMyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxh
YmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6
OkZyYW1lUGFydGlhbCk7CisgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RGVj
b2RpbmdTdGF0dXM6OlBhcnRpYWwpOwogICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2Up
OwotICAgICAgICBidWZmZXIuc2V0Q29sb3JQcm9maWxlKG1fY29sb3JQcm9maWxlKTsKIAogI2lm
IEVOQUJMRShBUE5HKQogICAgICAgICBpZiAobV9jdXJyZW50RnJhbWUpCiAgICAgICAgICAgICBp
bml0RnJhbWVCdWZmZXIobV9jdXJyZW50RnJhbWUpOwotICAgICAgICBlbHNlCiAjZW5kaWYKLSAg
ICAgICAgLy8gRm9yIFBOR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFn
ZS4KLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgLyogbGlicG5nIGNvbW1lbnRzIChoZXJlIHRvIGV4
cGxhaW4gd2hhdCBmb2xsb3dzKS4KQEAgLTU3Myw3ICs1MjYsNyBAQCB2b2lkIFBOR0ltYWdlRGVj
b2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93
SW5kZXgsCiAgICAgfQogCiAgICAgLy8gV3JpdGUgdGhlIGRlY29kZWQgcm93IHBpeGVscyB0byB0
aGUgZnJhbWUgYnVmZmVyLgotICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1
ZmZlci5nZXRBZGRyKDAsIHkpOworICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZlci5waXhlbHMo
KS5hdCgwLCB5KTsKICAgICBpbnQgd2lkdGggPSBzY2FsZWRTaXplKCkud2lkdGgoKTsKICAgICB1
bnNpZ25lZCBjaGFyIG5vblRyaXZpYWxBbHBoYU1hc2sgPSAwOwogCkBAIC01ODIsNyArNTM1LDcg
QEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dC
dWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyArK3gpIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIG1fc2NhbGVk
Q29sdW1uc1t4XSAqIGNvbG9yQ2hhbm5lbHM7CiAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9
IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7Ci0gICAgICAgICAgICBidWZmZXIuc2V0UkdCQShh
ZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKKyAgICAgICAg
ICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdCQShhZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhlbFsx
XSwgcGl4ZWxbMl0sIGFscGhhKTsKICAgICAgICAgICAgIG5vblRyaXZpYWxBbHBoYU1hc2sgfD0g
KDI1NSAtIGFscGhhKTsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAtNTkwLDcgKzU0Myw3IEBA
IHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVm
ZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICB7CiAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9
IHJvdzsKICAgICAgICAgaWYgKGhhc0FscGhhKSB7Ci0gICAgICAgICAgICBpZiAoYnVmZmVyLnBy
ZW11bHRpcGx5QWxwaGEoKSkgeworICAgICAgICAgICAgaWYgKHByZW11bHRpcGx5QWxwaGEoKSkg
ewogICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCwgcGl4ZWwg
Kz0gNCkKICAgICAgICAgICAgICAgICAgICAgc2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShhZGRy
ZXNzKyssIHBpeGVsLCBub25Ucml2aWFsQWxwaGFNYXNrKTsKICAgICAgICAgICAgIH0gZWxzZSB7
CkBAIC02MTksNyArNTcyLDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnBuZ0NvbXBsZXRlKCkK
ICAgICB9CiAjZW5kaWYKICAgICBpZiAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCi0g
ICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpG
cmFtZUNvbXBsZXRlKTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuc2V0U3Rh
dHVzKEltYWdlRnJhbWU6OkRlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSk7CiB9CiAKIHZvaWQgUE5H
SW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSwgdW5zaWduZWQgaGFsdEF0RnJhbWUp
CkBAIC02NjMsOCArNjE2LDYgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJlYWRDaHVua3MocG5n
X3Vua25vd25fY2h1bmtwIGNodW5rKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIG1f
ZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUobV9mcmFtZUNvdW50KTsKLSAgICAgICAgZm9yIChhdXRv
JiBpbWFnZUZyYW1lIDogbV9mcmFtZUJ1ZmZlckNhY2hlKQotICAgICAgICAgICAgaW1hZ2VGcmFt
ZS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgfSBlbHNlIGlm
ICghbWVtY21wKGNodW5rLT5uYW1lLCAiZmNUTCIsIDQpICYmIGNodW5rLT5zaXplID09IDI2KSB7
CiAgICAgICAgIGlmIChtX2hhc0luZm8gJiYgIW1faXNBbmltYXRlZCkKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTcwNiwxMCArNjU3LDggQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJlYWRDaHVu
a3MocG5nX3Vua25vd25fY2h1bmtwIGNodW5rKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2ZyYW1l
QnVmZmVyQ2FjaGUucmVzaXplKDEpOwotICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBd
LnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKLSAgICAgICAgfQogCiAg
ICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSA8IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkpIHsK
ICAgICAgICAgICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVttX2N1
cnJlbnRGcmFtZV07CkBAIC03MjAsMTEgKzY2OSwxMSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
cmVhZENodW5rcyhwbmdfdW5rbm93bl9jaHVua3AgY2h1bmspCiAgICAgICAgICAgICAgICAgYnVm
ZmVyLnNldER1cmF0aW9uKG1fZGVsYXlOdW1lcmF0b3IgKiAxMDAwIC8gbV9kZWxheURlbm9taW5h
dG9yKTsKIAogICAgICAgICAgICAgaWYgKG1fZGlzcG9zZSA9PSAyKQotICAgICAgICAgICAgICAg
IGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJl
dmlvdXMpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJbWFnZUZy
YW1lOjpEaXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlUHJldmlvdXMpOwogICAgICAgICAgICAgZWxz
ZSBpZiAobV9kaXNwb3NlID09IDEpCi0gICAgICAgICAgICAgICAgYnVmZmVyLnNldERpc3Bvc2Fs
TWV0aG9kKEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yKTsKKyAgICAgICAgICAg
ICAgICBidWZmZXIuc2V0RGlzcG9zYWxNZXRob2QoSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6
Ok92ZXJ3cml0ZUJnY29sb3IpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJ1
ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJbWFnZUZyYW1lOjpEaXNwb3NlS2VlcCk7CisgICAgICAg
ICAgICAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0
aG9kOjpLZWVwKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fZnJhbWVJbmZvID0gdHJ1ZTsKQEAg
LTgwNywxNiArNzU2LDE2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVy
Q2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiAgICAgY29uc3QgVmVjdG9yPEltYWdlRnJh
bWU+OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9y
ZUZyYW1lKTsKIAogICAgIFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaShlbmQpOwotICAg
IGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSkgJiYgKChpLT5zdGF0dXMo
KSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB8fCAoaS0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJ
bWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKTsgLS1pKSB7Ci0gICAgICAgIGlm
ICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkgJiYgKGkgIT0gZW5k
KSkKLSAgICAgICAgICAgIGktPmNsZWFyUGl4ZWxEYXRhKCk7CisgICAgZm9yICg7IChpICE9IG1f
ZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoKGktPmlzRW1wdHkoKSkgfHwgKGktPmRpc3Bv
c2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZVByZXZp
b3VzKSk7IC0taSkgeworICAgICAgICBpZiAoKGktPmlzQ29tcGxldGUoKSkgJiYgKGkgIT0gZW5k
KSkKKyAgICAgICAgICAgIGktPmNsZWFyUGl4ZWxzKCk7CiAgICAgfQogCiAgICAgLy8gTm93IHxp
fCBob2xkcyB0aGUgbGFzdCBmcmFtZSB3ZSBuZWVkIHRvIHByZXNlcnZlOyBjbGVhciBwcmlvciBm
cmFtZXMuCiAgICAgZm9yIChWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGoobV9mcmFtZUJ1
ZmZlckNhY2hlLmJlZ2luKCkpOyBqICE9IGk7ICsraikgewotICAgICAgICBBU1NFUlQoai0+c3Rh
dHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKLSAgICAgICAgaWYgKGotPnN0YXR1
cygpICE9IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCi0gICAgICAgICAgICBqLT5jbGVhclBpeGVs
RGF0YSgpOworICAgICAgICBBU1NFUlQoIWlzUGFydGlhbCgpKTsKKyAgICAgICAgaWYgKCFqLT5p
c0VtcHR5KCkpCisgICAgICAgICAgICBqLT5jbGVhclBpeGVscygpOwogICAgIH0KIH0KIApAQCAt
ODM0LDQ1ICs3ODMsNDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcihz
aXplX3QgZnJhbWVJbmRleCkKICAgICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChzaXplKCkuaGVp
Z2h0KCkgLSBtX3lPZmZzZXQpOwogCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1
ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgo
ZnJhbWVSZWN0LngoKSk7Ci0gICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVS
ZWN0Lm1heFgoKSwgbGVmdCk7Ci0gICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1l
UmVjdC55KCkpOwotICAgIGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3Qu
bWF4WSgpLCB0b3ApOwotICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KGxl
ZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKIAogICAgIC8vIFRoZSBzdGFy
dGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBmcmFtZSdz
CiAgICAgLy8gZGlzcG9zYWwgbWV0aG9kLgogICAgIC8vCi0gICAgLy8gRnJhbWVzIHRoYXQgdXNl
IHRoZSBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgbWV0aG9kIGFyZSBlZmZlY3RpdmVseQorICAg
IC8vIEZyYW1lcyB0aGF0IHVzZSB0aGUgRGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZVByZXZpb3Vz
IG1ldGhvZCBhcmUgZWZmZWN0aXZlbHkKICAgICAvLyBuby1vcHMgaW4gdGVybXMgb2YgY2hhbmdp
bmcgdGhlIHN0YXJ0aW5nIHN0YXRlIG9mIGEgZnJhbWUgY29tcGFyZWQgdG8KICAgICAvLyB0aGUg
c3RhcnRpbmcgc3RhdGUgb2YgdGhlIHByZXZpb3VzIGZyYW1lLCBzbyBza2lwIG92ZXIgdGhlbS4g
IChJZiB0aGUKICAgICAvLyBmaXJzdCBmcmFtZSBzcGVjaWZpZXMgdGhpcyBtZXRob2QsIGl0IHdp
bGwgZ2V0IHRyZWF0ZWQgbGlrZQotICAgIC8vIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGJlbG93
IGFuZCByZXNldCB0byBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuKQorICAgIC8vIERpc3Bvc2Fs
TWV0aG9kOjpPdmVyd3JpdGVCZ2NvbG9yIGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBsZXRlbHkg
ZW1wdHkgaW1hZ2UuKQogICAgIGNvbnN0IEltYWdlRnJhbWUqIHByZXZCdWZmZXIgPSAmbV9mcmFt
ZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgSW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3Nh
bE1ldGhvZCBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKTsKLSAgICB3
aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3Zl
cndyaXRlUHJldmlvdXMpKSB7CisgICAgSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2QgcHJldk1l
dGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7CisgICAgd2hpbGUgKGZyYW1lSW5k
ZXggJiYgKHByZXZNZXRob2QgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0
ZVByZXZpb3VzKSkgewogICAgICAgICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVst
LWZyYW1lSW5kZXhdOwogICAgICAgICBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxN
ZXRob2QoKTsKICAgICB9Ci0gICAgQVNTRVJUKHByZXZCdWZmZXItPnN0YXR1cygpID09IEltYWdl
RnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgIEFTU0VSVChwcmV2QnVmZmVyLT5pc0NvbXBsZXRl
KCkpOwogCi0gICAgaWYgKHByZXZNZXRob2QgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZUtlZXApIHsK
KyAgICBpZiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6S2VlcCkg
ewogICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbGFzdCBmcmFtZSBhcyB0aGUgc3RhcnRpbmcgc3Rh
dGUgZm9yIHRoaXMgZnJhbWUuCi0gICAgICAgIGJ1ZmZlci5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1
ZmZlcik7CisgICAgICAgIGJ1ZmZlci5jb3B5UGl4ZWxzKCpwcmV2QnVmZmVyKTsKICAgICB9IGVs
c2UgewogICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0
cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBp
bWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJl
Y3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBjb25zdCBJbnRS
ZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPnBpeGVscygpLT5yZWN0KCk7CiAgICAgICAgIGlm
ICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNj
YWxlZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJhbWUs
IG9yIGEgZnJhbWUgdGhlIHNpemUgb2YgdGhlIHdob2xlCiAgICAgICAgICAgICAvLyBpbWFnZSwg
cmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCi0gICAgICAgICAgICBidWZmZXIu
emVyb0ZpbGxQaXhlbERhdGEoKTsKKyAgICAgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+Y2xlYXIo
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHByZXZp
b3VzIGJ1ZmZlciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFtZS4KLSAgICAgICAgICAgIGJ1ZmZl
ci5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcik7Ci0gICAgICAgICAgICBidWZmZXIuemVyb0Zp
bGxGcmFtZVJlY3QocHJldlJlY3QpOworICAgICAgICAgICAgYnVmZmVyLmNvcHlQaXhlbHMoKnBy
ZXZCdWZmZXIpOworICAgICAgICAgICAgYnVmZmVyLnBpeGVscygpLT5jbGVhclJlY3QocHJldlJl
Y3QpOwogICAgICAgICB9CisgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYSh0cnVlKTsKICAgICB9
CisgICAgCisgICAgaW50IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsK
KyAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0
KTsKKyAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7CisgICAg
aW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7Cisg
ICAgYnVmZmVyLnBpeGVscygpLT5zZXRSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxl
ZnQsIGJvdHRvbSAtIHRvcCkpOwogfQogCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21w
bGV0ZSgpCkBAIC04ODEsMTIgKzgzMiwxMiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1f
ZnJhbWVCdWZmZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07Ci0gICAgYnVmZmVyLnNldFN0YXR1cyhJ
bWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJh
bWU6OkRlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSk7CiAKICAgICBwbmdfYnl0ZXAgaW50ZXJsYWNl
QnVmZmVyID0gbV9yZWFkZXItPmludGVybGFjZUJ1ZmZlcigpOwogCiAgICAgaWYgKG1fY3VycmVu
dEZyYW1lICYmIGludGVybGFjZUJ1ZmZlcikgewotICAgICAgICBjb25zdCBJbnRSZWN0JiByZWN0
ID0gYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAgIGNvbnN0IEludFJlY3QmIHJl
Y3QgPSBidWZmZXIucGl4ZWxzKCktPnJlY3QoKTsKICAgICAgICAgYm9vbCBoYXNBbHBoYSA9IG1f
cmVhZGVyLT5oYXNBbHBoYSgpOwogICAgICAgICB1bnNpZ25lZCBjb2xvckNoYW5uZWxzID0gaGFz
QWxwaGEgPyA0IDogMzsKICAgICAgICAgYm9vbCBub25Ucml2aWFsQWxwaGEgPSBmYWxzZTsKQEAg
LTg5NiwxNSArODQ3LDE1IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkK
ICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IHJlY3QubWF4WSgpIC0gcmVjdC55KCk7ICsreSkgewogICAgICAgICAgICAg
cG5nX2J5dGVwIHJvdyA9IGludGVybGFjZUJ1ZmZlciArIChtX3NjYWxlZCA/IG1fc2NhbGVkUm93
c1t5XSA6IHkpICogY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpOwotICAgICAgICAgICAg
SW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCks
IHkgKyByZWN0LnkoKSk7CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIucGl4
ZWxzKCktPmF0KHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOwogICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCByZWN0Lm1heFgoKSAtIHJlY3QueCgpOyArK3gpIHsKICAgICAgICAgICAgICAg
ICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3cgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0g
OiB4KSAqIGNvbG9yQ2hhbm5lbHM7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBo
YXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAgICAgICAgIG5vblRyaXZpYWxBbHBo
YSB8PSBhbHBoYSA8IDI1NTsKICAgICAgICAgICAgICAgICBpZiAoIW1fYmxlbmQpCi0gICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBpeGVsWzFd
LCBwaXhlbFsyXSwgYWxwaGEpOworICAgICAgICAgICAgICAgICAgICBidWZmZXIucGl4ZWxzKCkt
PnNldFJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7
CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBidWZmZXIub3ZlclJH
QkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CisgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+b3ZlclJHQkEoYWRkcmVzcysrLCBwaXhl
bFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICNlbHNlCkBAIC05MTIsMjggKzg2MywyOCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJh
bWVDb21wbGV0ZSgpCiAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXI7CiAg
ICAgICAgIGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyArK3ksIHJvdyAr
PSBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCkpIHsKICAgICAgICAgICAgIHBuZ19ieXRl
cCBwaXhlbCA9IHJvdzsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVz
cyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKKyAgICAgICAgICAgIFJHQkEzMiogYWRk
cmVzcyA9IGJ1ZmZlci5waXhlbHMoKS0+KHJlY3QueCgpLCB5KTsKICAgICAgICAgICAgIGZvciAo
aW50IHggPSByZWN0LngoKTsgeCA8IHJlY3QubWF4WCgpOyArK3gsIHBpeGVsICs9IGNvbG9yQ2hh
bm5lbHMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGhhc0FscGhhID8gcGl4
ZWxbM10gOiAyNTU7CiAgICAgICAgICAgICAgICAgbm9uVHJpdmlhbEFscGhhIHw9IGFscGhhIDwg
MjU1OwogICAgICAgICAgICAgICAgIGlmICghbV9ibGVuZCkKLSAgICAgICAgICAgICAgICAgICAg
YnVmZmVyLnNldFJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBh
bHBoYSk7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdCQShhZGRy
ZXNzKyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5vdmVyUkdCQShhZGRyZXNzKyss
IHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyLnBpeGVscygpLT5vdmVyUkdCQShhZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhlbFsx
XSwgcGl4ZWxbMl0sIGFscGhhKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCiAK
ICAgICAgICAgaWYgKCFub25Ucml2aWFsQWxwaGEpIHsKLSAgICAgICAgICAgIGlmIChidWZmZXIu
b3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNp
emUoKSkpKQorICAgICAgICAgICAgaWYgKGJ1ZmZlci5waXhlbHMoKS0+cmVjdCgpLmNvbnRhaW5z
KEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCiAgICAgICAgICAgICAgICAgYnVm
ZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgIHNpemVfdCBmcmFtZUluZGV4ID0gbV9jdXJyZW50RnJhbWU7CiAgICAgICAgICAgICAgICAg
Y29uc3QgSW1hZ2VGcmFtZSogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFt
ZUluZGV4XTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldkJ1ZmZl
ci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlv
dXMpKQorICAgICAgICAgICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2QnVmZmVyLT5k
aXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQ
cmV2aW91cykpCiAgICAgICAgICAgICAgICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZl
ckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5k
aXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yKQot
ICAgICAgICAgICAgICAgICAgICAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIu
b3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVj
dCgpKSkKKyAgICAgICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkg
PT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZUJnY29sb3IpCisgICAgICAg
ICAgICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1ZmZlci5waXhlbHMo
KS0+cmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPnBpeGVscygpLT5yZWN0KCkpKQogICAgICAg
ICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgaWYgKCFtX2JsZW5kICYmICFidWZmZXIuaGFzQWxwaGEoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9Q
TkdJbWFnZURlY29kZXIuaAppbmRleCAwNWZjNzRiNmRlMjE0ZDA0MTRhODJiNDE4NjkzNzc2MmQx
YTVlNTViLi45NzQxOGEyY2Y0NmY2MjU4ZDcyNmYwOGJmYzY1ZGM4YWRmODc4YzI2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VE
ZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5oCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
cGxheUNvdW50LTE7IH0KICNlbmRpZgogICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIG92
ZXJyaWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl
aWdodCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3Zl
cnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5k
ZXgpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIHxt
X3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBkZWxl
dGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQpAQCAt
NzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgICAgICBmb3IgKGF1dG8mIGltYWdlRnJhbWUgOiBtX2ZyYW1lQnVm
ZmVyQ2FjaGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoaW1hZ2VGcmFtZS5zdGF0dXMoKSAhPSBJ
bWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgICAgICAgICAgICAgIGlmICghaW1hZ2VGcmFt
ZS5pc0NvbXBsZXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KIApAQCAtODIsNyArODIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgYm9vbCBpc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiAoaW5kZXggPCBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpICYmIG1fZnJh
bWVCdWZmZXJDYWNoZVtpbmRleF0uc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0
ZSk7CisgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUo
KSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdLmlzQ29tcGxldGUoKSk7CiAgICAgICAgIH0K
IAogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAppbmRleCAxMjRh
MWIyZjE5OTdmZTY3OGM2MWI1MmYzMDU4ZGI0ZDZiODg2NzlhLi5kMjBiYjZjZTZkYTQ1MDJkODMz
ZDYxOGZlNzg3OTMzNGIwZDEzMDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAK
QEAgLTc4LDEzICs3OCwxMSBAQCBJbWFnZUZyYW1lKiBXRUJQSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIGlmIChpbmRleCkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkgeworICAgIGlmICht
X2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUu
cmVzaXplKDEpOwotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0UHJlbXVsdGlwbHlB
bHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwotICAgIH0KIAogICAgIEltYWdlRnJhbWUmIGZyYW1l
ID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBJbWFn
ZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgIGlmIChmcmFtZS5pc0NvbXBsZXRlKCkpCiAgICAg
ICAgIGRlY29kZShmYWxzZSk7CiAgICAgcmV0dXJuICZmcmFtZTsKIH0KQEAgLTExNSw3ICsxMTMs
NyBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTaXplKQogICAgICAg
ICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBtX2hhc0FscGhhID0gZmFsc2U7CiAj
ZW5kaWYKLSAgICAgICAgaWYgKCFzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgICAgICBpZiAo
IXNldFNpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0
RmFpbGVkKCk7CiAgICAgfQogCkBAIC0xMjUsMjIgKzEyMywyMSBAQCBib29sIFdFQlBJbWFnZURl
Y29kZXI6OmRlY29kZShib29sIG9ubHlTaXplKQogCiAgICAgQVNTRVJUKCFtX2ZyYW1lQnVmZmVy
Q2FjaGUuaXNFbXB0eSgpKTsKICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVy
Q2FjaGVbMF07Ci0gICAgQVNTRVJUKGJ1ZmZlci5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFt
ZUNvbXBsZXRlKTsKKyAgICBBU1NFUlQoIWJ1ZmZlci5pc0NvbXBsZXRlKCkpOwogCi0gICAgaWYg
KGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7Ci0gICAgICAgIGlm
ICghYnVmZmVyLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpCisgICAg
aWYgKGJ1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXIuaW5pdFBpeGVscyhz
aXplKCksIHByZW11bHRpcGx5QWxwaGEoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVk
KCk7Ci0gICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsK
KyAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpEZWNvZGluZ1N0YXR1czo6UGFy
dGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShtX2hhc0FscGhhKTsKLSAgICAgICAg
YnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7
CiAgICAgfQogCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAgV0VCUF9DU1BfTU9ERSBt
b2RlID0gb3V0cHV0TW9kZShtX2hhc0FscGhhKTsKLSAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5
QWxwaGEpCisgICAgICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSgpKQogICAgICAgICAgICAgbW9k
ZSA9IG91dHB1dE1vZGUoZmFsc2UpOwotICAgICAgICBpbnQgcm93U3RyaWRlID0gc2l6ZSgpLndp
ZHRoKCkgKiBzaXplb2YoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKTsKLSAgICAgICAgdWludDhfdCog
b3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyLmdldEFkZHIoMCwgMCkp
OworICAgICAgICBpbnQgcm93U3RyaWRlID0gc2l6ZSgpLndpZHRoKCkgKiBzaXplb2YoUkdCQTMy
KTsKKyAgICAgICAgdWludDhfdCogb3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
YnVmZmVyLnBpeGVscygpLT5hdCgwLCAwKSk7CiAgICAgICAgIGludCBvdXRwdXRTaXplID0gc2l6
ZSgpLmhlaWdodCgpICogcm93U3RyaWRlOwogICAgICAgICBtX2RlY29kZXIgPSBXZWJQSU5ld1JH
Qihtb2RlLCBvdXRwdXQsIG91dHB1dFNpemUsIHJvd1N0cmlkZSk7CiAgICAgICAgIGlmICghbV9k
ZWNvZGVyKQpAQCAtMTQ5LDcgKzE0Niw3IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2Rl
KGJvb2wgb25seVNpemUpCiAKICAgICBzd2l0Y2ggKFdlYlBJVXBkYXRlKG1fZGVjb2RlciwgZGF0
YUJ5dGVzLCBkYXRhU2l6ZSkpIHsKICAgICBjYXNlIFZQOF9TVEFUVVNfT0s6Ci0gICAgICAgIGJ1
ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CisgICAgICAgIGJ1ZmZl
ci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKTsKICAgICAg
ICAgY2xlYXIoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBWUDhfU1RBVFVTX1NV
U1BFTkRFRDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQppbmRleCAy
MTZjZDA5M2YyNjQ2N2NiYTg4YTQzZjY5M2FiZjRjZjUxZGQxYTRkLi5kMTE0NTRiMDVlZjg4OTkz
YTYyODkzODk2YmMwYzExNzI4YzVlZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVv
U291cmNlTWFjLm1tCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIoKSBjb25zdAogICAgICAgICBpZiAoIWltYWdlKQog
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+Z2V0
Q0dJbWFnZVJlZigpOworICAgICAgICBtX3ByZXZpZXdJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFn
ZSgpOwogICAgICAgICBpZiAoIW1fcHJldmlld0ltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCmluZGV4
IDM2Y2Q2NTE2ZTgwZjE3NDhiZmVhYjc3YTkzMDI3MWMxMjFkZTgwMTkuLjRiNGUzNzc5ZTk2Zjc4
YzY1NDBhNTNjNDQ3OGMzYmZkOTM1ZjUzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcApAQCAtMTM2LDkgKzEzNiw5IEBAIERyYWdJbWFnZVJl
ZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltZywgSW1hZ2VPcmllbnRhdGlvbkRl
c2NyaXB0aW9uKQogICAgIENHQ29udGV4dFNjYWxlQ1RNKGRyYXdDb250ZXh0LCAxLCAtMSk7CiAg
ICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGRyYXdDb250ZXh0LCB3aGl0ZSk7CiAgICAgQ0dDb250
ZXh0RmlsbFJlY3QoZHJhd0NvbnRleHQsIHJlY3QpOwotICAgIGlmIChhdXRvIHNyY0ltYWdlID0g
aW1nLT5nZXRDR0ltYWdlUmVmKCkpIHsKKyAgICBpZiAoYXV0byBzcmNJbWFnZSA9IGltZy0+bmF0
aXZlSW1hZ2UoKSkgewogICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoZHJhd0NvbnRleHQs
IGtDR0JsZW5kTW9kZU5vcm1hbCk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShkcmF3Q29u
dGV4dCwgcmVjdCwgc3JjSW1hZ2UpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZHJhd0Nv
bnRleHQsIHJlY3QsIHNyY0ltYWdlLmdldCgpKTsKICAgICB9CiAgICAgQ0dDb250ZXh0UmVsZWFz
ZShkcmF3Q29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2Vi
Q2FjaGUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCmluZGV4IGI2NTlk
NmRiZjlhZDY5OTljM2FjOTYyZGU5NTE1NzgwOTdlMWYzYjEuLjdjNWVkMjEwZGRiMmEzMmE3NjY2
NzRjMTIwZDk5NGMyZmE0N2U3ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2Mv
V2ViQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQpAQCAt
MjA0LDcgKzIwNCw3IEBAICsgKENHSW1hZ2VSZWYpaW1hZ2VGb3JVUkw6KE5TVVJMICopdXJsCiAg
ICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UmIGNhY2hlZEltYWdlID0gZG93bmNhc3Q8V2ViQ29yZTo6
Q2FjaGVkSW1hZ2U+KCpjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYgKCFjYWNoZWRJbWFnZS5oYXNJ
bWFnZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gY2FjaGVkSW1hZ2Uu
aW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIHJldHVybiBjYWNoZWRJbWFnZS5pbWFnZSgp
LT5uYXRpdmVJbWFnZSgpLmdldCgpOwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNl
Q0cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNl
Q0cuY3BwCmluZGV4IDBmNmRlN2ExNDZhNjExYTUyYWExZTUzOTAxOWZhNmMxYzQ2NzI1YWUuLjMw
NTYzMzZjYjY2ZmU0YWYxOGJkYzUyOWFjYTJmOGZjODgxZGZlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAKQEAg
LTM3LDEyICszNywyMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIENHSW1hZ2VSZWYgV0tJ
Y29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRh
YmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmLCBXS1NpemUgc2l6ZSkKIHsKICAgICBJbWFnZSogaW1h
Z2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VGb3JQYWdlVVJMKHRvV1RGU3RyaW5n
KHVybFJlZikpOwotICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5nZXRGaXJzdENHSW1hZ2VSZWZP
ZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGgpLCBzdGF0aWNfY2FzdDxp
bnQ+KHNpemUuaGVpZ2h0KSkpIDogMDsKKyAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+bmF0aXZl
SW1hZ2VPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGgpLCBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpLmdldCgpIDogbnVsbHB0cjsKIH0KIAogQ0ZBcnJheVJl
ZiBXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JVUkwoV0tJY29uRGF0YWJhc2VS
ZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7CiAgICAgSW1hZ2UqIGltYWdl
ID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVSTCh0b1dURlN0cmluZyh1
cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Q0dJbWFnZUFycmF5KCkubGVh
a1JlZigpIDogMDsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gaW1hZ2UtPmZyYW1lc05hdGl2ZUltYWdlcygpOworICAg
IGlmICghbmF0aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
CisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShudWxs
cHRyLCBuYXRpdmVJbWFnZXMuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKKyAgICBm
b3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAgICAgIENGQXJyYXlBcHBl
bmRWYWx1ZShhcnJheSwgbmF0aXZlSW1hZ2UuZ2V0KCkpOworICAgIAorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDRkFycmF5UmVmPihDRlJldGFpbihhcnJheSkpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
CmluZGV4IGRjNzk4M2FiOTg4YzJkMDRhMTczMGVlMTM3MzAzYzI0NDE2MTUxOTcuLmZiYzNlNWQ0
YzU0MzAxY2U5MjE3YTQwZjhkMDhiZDU4MzUyNzg3YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC00
MDcxLDcgKzQwNzEsNyBAQCAtIChVSUltYWdlICopX3ByZXNlbnRhdGlvblNuYXBzaG90Rm9yUHJl
dmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29udHJvbAogewogICAgIGlmICghX3Bv
c2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiBbW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1h
Z2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UtPmdldENH
SW1hZ2VSZWYoKV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tVSUltYWdlIGFsbG9jXSBp
bml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50
SW1hZ2UtPm5hdGl2ZUltYWdlKCkuZ2V0KCldIGF1dG9yZWxlYXNlXTsKIH0KIAogLSAoTlNBcnJh
eSAqKV9wcmVzZW50YXRpb25SZWN0c0ZvclByZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3
SXRlbUNvbnRyb2xsZXIgKiljb250cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggOWEzM2Y3Y2M3ZGM3YzdkNzJmOWRhNzQz
MDk4YjdkYmNhODI0MDljZi4uYTUzMjUxMDY3OGI5ZjUzNTE0NThhMzhhOWY0MjMzNzQ3ZDAzNWY1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcApAQCAtMTcyNyw2OSArMTcyNyw2IEBAIHZvaWQgUGx1Z2luVmlldzo6d2luZG93ZWRQbHVn
aW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxlLCB1aW50NjRfdCB3aW5kCiB9CiAj
ZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotc3RhdGljIGJvb2wgaXNBbG1vc3RTb2xpZENv
bG9yKEJpdG1hcEltYWdlKiBiaXRtYXApCi17Ci0gICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGJpdG1h
cC0+Z2V0Q0dJbWFnZVJlZigpOwotICAgIEFTU0VSVChDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVu
dChpbWFnZSkgPT0gOCk7Ci0KLSAgICBDR0JpdG1hcEluZm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdl
dEJpdG1hcEluZm8oaW1hZ2UpOwotICAgIGlmICghKGltYWdlSW5mbyAmIGtDR0JpdG1hcEJ5dGVP
cmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYga0NHQml0bWFwQWxwaGFJbmZvTWFzaykgIT0g
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkgewotICAgICAgICAvLyBGSVhNRTogQ29u
c2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3RoZXIgcGl4ZWwgZm9ybWF0cy4KLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBzaXplX3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpOwotICAgIHNpemVfdCBoZWln
aHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKLSAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBD
R0ltYWdlR2V0Qnl0ZXNQZXJSb3coaW1hZ2UpOwotCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4g
cHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERhdGFQ
cm92aWRlcihpbWFnZSkpKTsKLSAgICBjb25zdCBVSW50OCogZGF0YSA9IENGRGF0YUdldEJ5dGVQ
dHIocHJvdmlkZXIuZ2V0KCkpOwotCi0gICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcg
ZG90cyBvbiB0b3Agb2YgYSBncmF5c2NhbGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UuCi0gICAgLy8g
Rm9yIHRoZSBpbnRlcmlvciBwb2ludHMsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1p
bmFuY2UgYW1vbmcgdGhlIHNhbXBsZSBwb2ludAotICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBv
aW50cywgc2NhbGVkIGJ5IHRyYW5zcGFyZW5jeS4KLSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVS
b3dzID0gNzsKLSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVDb2xzID0gNzsKLSAgICAvLyBGSVhN
RTogUmVmaW5lIHRoZSBwcm9wZXIgbnVtYmVyIG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBk
aWZmZXJlbnQgYXNwZWN0IHJhdGlvcy4KLSAgICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhl
aWdodCA8IHNhbXBsZVJvd3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEVuc3Vy
ZSB0aGF0IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0aGUgaW1hZ2UgcGVyaW1ldGVyLgot
ICAgIGNvbnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoIC0g
MSkgLyAoc2FtcGxlQ29scyAtIDEpOwotICAgIGNvbnN0IGZsb2F0IHN0cmlkZUhlaWdodCA9IHN0
YXRpY19jYXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1wbGVSb3dzIC0gMSk7Ci0gICAgZmxv
YXQgc2FtcGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsKLQotICAgIC8vIEZpbmQgdGhlIGx1
bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KLSAgICBmbG9hdCB5ID0gMDsKLSAgICBjb25z
dCBVSW50OCogcm93ID0gZGF0YTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2FtcGxl
Um93czsgKytpKSB7Ci0gICAgICAgIGZsb2F0IHggPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBVSW50OCog
cDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAqIDQ7Ci0gICAgICAgICAgICAv
LyBSIEcgQiBBCi0gICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0gKDAuMjEyNSAqICpwMCArIDAu
NzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoocDArMykgLyAyNTU7Ci0gICAg
ICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOwotICAgICAgICB9Ci0gICAgICAgIHkgKz0gc3RyaWRl
SGVpZ2h0OwotICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19jYXN0PGludD4oeSArIC41KSkg
KiBieXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3Jl
LgotICAgIGZsb2F0IGFjY3VtU2NvcmUgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCBzYW1wbGVSb3dzIC0gMTsgKytpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGog
PCBzYW1wbGVDb2xzIC0gMTsgKytqKSB7Ci0gICAgICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxl
c1tpIC0gMV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2Ft
cGxlc1tpXVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKLSAgICAgICAgICAgIGFjY3VtU2Nv
cmUgKz0gZGlmZiAqIGRpZmY7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgc2NvcmUg
Zm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4gdGhlIHJhbmdlIG9mIDAgYW5kIDI1NV4y
LgotICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAqIChzYW1wbGVSb3dzIC0gMikgKiAoc2Ft
cGxlQ29scyAtIDIpOwotfQotI2VuZGlmCi0KIHZvaWQgUGx1Z2luVmlldzo6cGx1Z2luU25hcHNo
b3RUaW1lckZpcmVkKCkKIHsKICNpZiBFTkFCTEUoUFJJTUFSWV9TTkFQU0hPVFRFRF9QTFVHSU5f
SEVVUklTVElDKQpAQCAtMTgwOSw3ICsxNzQ2LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5T
bmFwc2hvdFRpbWVyRmlyZWQoKQogCiAgICAgICAgIGlmIChzbmFwc2hvdEltYWdlKSB7CiAjaWYg
RU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJU1RJQykKLSAgICAgICAgICAg
IGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBpc0FsbW9zdFNvbGlkQ29sb3IoZG93
bmNhc3Q8Qml0bWFwSW1hZ2U+KHNuYXBzaG90SW1hZ2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJv
b2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEJpdG1h
cEltYWdlPihzbmFwc2hvdEltYWdlKS0+aXNBbG1vc3RTb2xpZENvbG9yKCk7CiAgICAgICAgICAg
ICBzbmFwc2hvdEZvdW5kID0gIXNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yOwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283726</attachid>
            <date>2016-07-14 18:28:54 -0700</date>
            <delta_ts>2016-07-14 18:37:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159795-20160714182807.patch</filename>
            <type>text/plain</type>
            <size>210732</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQ0NWVjM2I5YjY1NzYy
OGNlYTM4MTkyYzdkMDJlN2YwMjIyNzRmOS4uYzgwMTMzMGVkNmJmYTQ5NjViMzRkM2Q1NTIzMTAw
NjNhMTIxZjE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwMCBAQAorMjAxNi0wNy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VGcmFtZSBhbmQgSW1hZ2VGcmFtZURhdGEgYmUgZXF1aXZhbGVudCBzbyBJbWFnZUZyYW1l
RGF0YSBjYW4gYmUgcmVtb3ZlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU5Nzk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBzdGVwIHdpbGwgYWxsb3cgcmVtb3ZpbmcgSW1hZ2VGcmFtZSBmcm9t
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisgICAgICAgIGFuZCByZW5h
bWluZyBJbWFnZUZyYW1lRGF0YSB0byBiZSBJbWFnZUZyYW1lLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhl
bHM6OmF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aW5pdFBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y29weVBpeGVscyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVEYXRhOjpzZXREaXNwb3NhbE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
RGF0YTo6ZGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6
OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzUGFydGlhbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXJQaXhlbHMpOgorICAgICAg
ICBBZGQgZnVuY3Rpb25zIHNpbWlsYXIgdG8gZnJvbSB3aGF0IHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oIGhhcy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OkltYWdlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlQaXhlbHMpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6aW5pdFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpzZXRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6Omhhc0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OnNldEhhc0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNl
dFN0YXR1cyk6IERlbGV0ZWQuCisgICAgICAgIENoYW5nZSB0aGUgSW1hZ2VGcmFtZSBjbGFzcyB0
byBiZSBhIHN1YnNldCBvZiBJbWFnZUZyYW1lRGF0YS4KKyAgICAgICAgCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIENhbGwgdGhl
IEltYWdlRnJhbWUgbWV0aG9kcyB3aXRoIHRoZSBuZXcgbmFtZXMuCisgICAgICAgIAorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0RGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6ZGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6c2V0U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnN0YXR1cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6OmlzUGFydGlhbCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpp
c0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0
SGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzQWxwaGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6cGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc1BpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmlzT3ZlclNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmdldEFkZHIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6aGFzUGl4ZWxEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6Om92ZXJSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgQ2hhbmdlIHRoZSBJbWFnZUZyYW1l
IGNsYXNzIHRvIGJlIGEgc3Vic2V0IG9mIEltYWdlRnJhbWVEYXRhIGFuZCBnZXQgcmlkCisgICAg
ICAgIG9mIHRoZSBwaXhlbCBmdW5jdGlvbnMuIFRoZXkgc2hvdWxkIGJlIGFjY2Vzc2VkIGZyb20g
Qml0bWFwUGl4ZWxzIGNsYXNzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUElt
YWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJNUElt
YWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBtZXRob2Rz
IHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJNUCk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpCTVBJ
bWFnZVJlYWRlcjo6c2V0UkdCQSk6CisgICAgICAgIENhbGwgdGhlIEltYWdlRnJhbWUgbWV0aG9k
cyB3aXRoIHRoZSBuZXcgbmFtZXMvcGFyYW1ldGVycy4KKworICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1h
Z2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaDoKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFt
ZSBtZXRob2RzIHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwOgorICAg
ICAgICAoR0lGSW1hZ2VSZWFkZXI6OnBhcnNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6
R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBtZXRob2RzIHdp
dGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFt
ZSBtZXRob2RzIHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFn
ZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VE
ZWNvZGVyOjpqcGVnQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rl
cjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBtZXRob2RzIHdpdGggdGhl
IG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdl
RGVjb2Rlcjo6cG5nQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVy
OjpyZWFkQ2h1bmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6Y2xlYXJG
cmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aW5p
dEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5oOgorICAgICAgICBDYWxsIHRoZSBJbWFnZUZyYW1lIG1ldGhvZHMgd2l0aCB0aGUg
bmV3IG5hbWVzL3BhcmFtZXRlcnMuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
RUJQSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBt
ZXRob2RzIHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorCisyMDE2LTA3LTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisgCisgICAgICAgIEdldCBy
aWQgb2YgdGhlIG1fcHJlbXVsdGlwbHlBbHBoYSBmbGFnIG9mIHRoZSBJbWFnZUZyYW1lIGNsYXNz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk3MjEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGZs
YWcgd2FzIG9ubHkgbmVlZGVkIHdoZW4gY2FsbGluZyBCaXRtYXBQaXhlbHM6OnNldFNpemUoKS4g
SW5zdGVhZAorICAgICAgICB3ZSBjYW4gcGFzcyB0aGUgSW1hZ2VEZWNvZGVyOjptX3ByZW11bHRp
cGx5QWxwaGEgdG8gSW1hZ2VGcmFtZTo6c2V0U2l6ZSgpCisgICAgICAgIHdoaWNoIHdpbGwgcGFz
cyBpdCB0byBCaXRtYXBQaXhlbHM6OnNldFNpemUoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1h
cERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6aXNPdmVyU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
TVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVApOgorICAgICAgICAoV2ViQ29yZTo6
Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURl
Y29kZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVj
dG9yeUVudHJpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09J
bWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6
c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZl
ckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2Nh
bmxpbmVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJlYWRDaHVua3MpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisKKzIwMTYtMDctMTMgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBHZXQg
cmlkIG9mIHRoZSBjb2xvciBwcm9maWxlIGZyb20gSW1hZ2VGcmFtZSBhbmQgSW1hZ2VEZWNvZGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk2OTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpzZXRDb2xvclByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpyZWFkQ29sb3JQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJ
bWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9q
cGVnL0pQRUdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRDb2xvclBy
b2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFk
ZXJBdmFpbGFibGUpOiBEZWxldGVkLgorCisyMDE2LTA3LTEzICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgdGhlIHBpeGVsIGRhdGEg
b2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlv
biBwYXJ0IGluIEltYWdlRnJhbWUgaW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCB0
aGVuIG1ha2UgaXQgb3B0aW9uYWwgKGFsbG9jYXRlZCBvbiBkZW1hbmQpLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICog
UGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwUGl4ZWxzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpC
aXRtYXBQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjp3aWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBQaXhlbHM6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxz
OjphdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFBpeGVsczo6cmVwZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4
ZWxzOjpzZXRSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6b3ZlclJHQkEp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjppbkJvdW5kcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bXVsdGlwbHky
NTUpOgorICAgICAgICAoV2ViQ29yZTo6ZGl2aWRlMjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRp
dmlkZUNlaWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZENoYW5uZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6dW5wcmVtdWx0aXBsaWVkQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3Jl
OjptYWtlUHJlbXVsdGlwbGllZFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVVuUHJlbXVs
dGlwbGllZFJHQkEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVEYXRhOjpwaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZURhdGE6Omhhc1BpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OmdldEFkZHIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzUGl4ZWxEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om92ZXJSR0JBKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWU6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5Um93TlRpbWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmZpeFBvaW50VW5zaWduZWRN
dWx0aXBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpkaXZpZGUy
NTUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6ZGVjb2Rl
Qk1QKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhl
bHNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBQaXhlbHM6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6aGF2ZURlY29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpm
cmFtZUNvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZy
YW1lQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNldFBpeGVsUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUkdCQSk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisKKzIwMTYtMDctMTMgIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCB0aGUgcGl4ZWwg
ZGF0YSBvZiBJbWFnZUZyYW1lIHRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTY3OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhlIHBpeGVsIGRhdGEgbWFuaXB1
bGF0aW9uIHBhcnQgaW4gSW1hZ2VGcmFtZSBpbnRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAg
YW5kIHRoZW4gbWFrZSBpdCBvcHRpb25hbCAoYWxsb2NhdGVkIG9uIGRlbWFuZCkuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAg
ICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtl
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBQaXhlbHMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBQaXhlbHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhl
bHM6OkJpdG1hcFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OndpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6OmF0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwUGl4ZWxzOjpyZXBlYXRGaXJzdFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBQaXhlbHM6OnNldFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpvdmVy
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmluQm91bmRzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptdWx0
aXBseTI1NSk6CisgICAgICAgIChXZWJDb3JlOjpkaXZpZGUyNTUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZGl2aWRlQ2VpbCk6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6
CisgICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5Q
cmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lRGF0YTo6aGFzUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsRnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05U
aW1lcyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6Z2V0QWRkcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoYXNQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3ZlclJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlSb3dOVGlt
ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Zml4UG9pbnRVbnNp
Z25lZE11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmRp
dmlkZTI1NSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpk
ZWNvZGVCTVApOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1h
cFBpeGVsc0NhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpp
bml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcv
SlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxS
R0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEpOgorICAg
ICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKworMjAxNi0wNy0xMSAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIFJlbmFtZSBGcmFt
ZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5kIG1vdmUgaXQgdG8gYSBzZXBhcmF0ZSBmaWxlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU0NDQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIEltYWdl
RnJhbWVEYXRhIHRvIGEgc2VwYXJhdGUgZmlsZSBzbyBpdCBjYW4gYmUgY2FjaGVkIGJ5IEltYWdl
U291cmNlCisgICAgICAgIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnN1bWVkIGJ5IEJpdG1hcEltYWdl
LiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgb2YgSW1hZ2VGcmFtZURhdGEKKyAgICAgICAgYmUgcHJp
dmF0ZSBhbmQgYWRkIGdldHRlcnMgdG8gcmV0dXJuIHRoZWlyIHZhbHVlcy4KKworICAgICAgICBO
byBuZXcgdGVzdHMgLS0gQ29kZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1l
RHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUhh
c0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNpbmdsZVBp
eGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aXNBbG1vc3RT
b2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lRGF0YTo6dXNlZEZyYW1lQnl0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ltYWdlRnJh
bWVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6SW1h
Z2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6On5JbWFnZUZy
YW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXJTdWJJbWFn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xvcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvaW1hZ2VGcmFtZURhdGEuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWVEYXRhOjppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRh
OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpmcmFtZUJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lRGF0YTo6b3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZURhdGE6OnN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZURhdGE6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpo
YXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aGFzSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6Omhhc01ldGFkYXRhKToKKworMjAxNi0w
Ni0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAg
ICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBlciBmb3Ig
TmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBpcyB0byBtb3ZlIHRo
ZSBwbGF0Zm9ybSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9tIEJpdG1hcEltYWdl
IHRvIFBsYXRmb3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2libGUgb2YgCisgICAg
ICAgIGRyYXdpbmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1hZ2VQdHIgcXVlc3Rp
b25zIHdoZW4gYW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFpbGFibGUuIEFwYXJ0
IGZyb20gZHJhd2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMgd2lsbCBiZQorICAg
ICAgICBjYWxsZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0YSBzbyB3ZSB3aWxs
IGtlZXAgZXZlcnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRyLiBCdXQgd2Ugd2ls
bCBjYXN0IHRoZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdoZW4KKyAgICAgICAg
YSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtl
OgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9N
Lm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdEltYWdlOmFuZFJlY3Rz
Ol0pOgorICAgICAgICAqIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW06CisgICAgICAg
ICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dEluZGljYXRvcjptYXJn
aW46b2Zmc2V0Ol0pOgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9m
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUlt
YWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6
OkZyYW1lRGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRpYWxpemVkIHdpdGgg
ZmFsc2UgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAgIEJpdG1hcEltYWdl
OjpmcmFtZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5IG1faGF2ZU1ldGFk
YXRhLgorICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0FscGhhIGFyZSBzZXQg
aW4gQml0bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJpdG1hcEltYWdlOjpj
YWNoZUZyYW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6fkZyYW1lRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
SW1hZ2U6OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
aXNOaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJbWFnZVJlZik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdl
Q2Fpcm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1J
bWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VD
Ry5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNH
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1h
Z2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUlt
YWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZpZXcuY3BwIHNpbmNl
IFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3MgdG8uCisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTogUmV0dXJucyB0aGUg
c3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxpbmcuCisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgorICAgICAgICAoVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6CisgICAgICAgICog
cGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDctMTMgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIHYyOiBXZWJDb250ZW50IGNyYXNoIGR1ZSB0byBSRUxF
QVNFX0FTU0VSVCghbV9pbkxvYWRQZW5kaW5nSW1hZ2VzKSBpbiBTdHlsZVJlc29sdmVyOjp+U3R5
bGVSZXNvbHZlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYTBkZTdjZDJjYTUzNzdkNzZhMDgzYTE4
MzAwZmFkNWYwNWI2MWRiNy4uMjg5OTQ1Y2JjMjc4Zjc2NDJhYjZkOTk4Njg2MWE5ZGVkM2JiZTVh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA3LTEzICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNl
IFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNj
L1dlYkNhY2hlLm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBpbWFnZUZvclVSTDpdKToKKwogMjAx
Ni0wNy0xMyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFVw
ZGF0ZSBzdXBwb3J0ZWQgcGxhdGZvcm1zIGluIHhjY29uZmlnIGZpbGVzIHRvIG1hdGNoIHRoZSBz
ZGsgbmFtZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjk1OGQ5NTllNjgxNTEyOTQ3ZDA4OTIxYjc5YmUwNjhk
MWFmMjQxMS4uOTcxOTEwMTZkNDVlNTM2Njg0YjQ3Mzk5MjNkNDBhNzZiNmQ4ZmJjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA3LTEzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2Ug
YW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cv
V0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1h
Z2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9y
VVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVz
ZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcElt
YWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAor
ICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAg
ICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2
aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRp
bWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29s
aWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0w
Ny0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYktpdDIg
c2hvdWxkbid0IHNpZ25hbCBjdXN0b20gcHJvdG9jb2wgY2xpZW50cyBmcm9tIHRoZSBOU1VSTENv
bm5lY3Rpb24gbG9hZGVyIHRocmVhZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNWFmZWEzYTE0
ZWU4NmU4MzRlMDFmZjU4NTE0M2E4ZjEwZGFhY2MyMC4uYjJiMjc5MGI4NjQxMjdmYmEzNTk3N2Zl
NDg0MTg3MTQ2ZDA3YThlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMjksNiArMjIyOSw3
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JU09WVFRDdWUu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQ
b2ludC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IDVmZjk5MWZm
N2RhMzA4YmI5MTgyZWNlM2JmMTIxNzMwYTU0OGQyODcuLmJhZTMxZWFmODZlN2ZjYTkwNTgyNTA5
MmFhMzhhNzhjMTFlNDIyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBw
bGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpA
QCAtNTUsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcAogCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTc1LDYgKzc0
LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1Ry
YW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXgg
NTE0NTA0ZTZlYzI1YWE1ZTQzYjk5Mzk4ZDVlMzVjZWVlYTc2NmFhNC4uNjRhZTE3MTA4OWRjYmYw
Y2Q0NWI3MGE5YjhmNzBlZmE5ZmZkZWRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTEyMiw3ICsxMjIsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6Tkcu
Y3BwCkBAIC0xMzQsNiArMTMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0
Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Q
YXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWlyby5j
cHAKQEAgLTE3OSw5ICsxNzksOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1l
bmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vaW1hZ2UtZW5jb2Rl
cnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvZWZsL05ldHdv
cmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDY0
NWFkZDFjZTM4ODg4YjA0ZDRhMmQ4OWFkYTBhN2M2ZGUxOTk4NmIuLmQzMWY1NzA2YTY5NTliMjMx
YjViZmIyMmYwN2QxODQzYWU4NjFhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0x
MDEsNyArMTAxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKQEAgLTExNSw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQ
dHJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1h
dHJpeENhaXJvLmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAgICAgcGxhdGZv
cm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nh
aXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nh
aXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3Rr
L1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNt
YWtlCmluZGV4IDlmNmY0OTZiNmNjNGVmNmU0Yjc0ZDg0YWMwYWE5ZGVhNTVhMDIzN2IuLjRkZGVk
MzA4OGY0ZjM5NmZlZjQ0NGU3ZWU2NWM2NDEwNjU4ZjU4NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCkBAIC0zOTcsNyArMzk3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbQog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tCiAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQ
b2ludENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcApAQCAt
NDE3LDYgKzQxNiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW5DYWlyby5jbWFrZQppbmRleCAyYzU1M2IwNTUxZGFkNjlhYTE5OWQ5NjBmNTUyMzQzZDkyMGYw
N2IzLi4zNDJhYTkyNzMyZmQ4ZjkyZTg1Y2ZhNjI2ZDU1NTcwZWY2NmI2YTY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTIxLDcgKzIxLDYgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRmxv
YXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cApAQCAtMzQsNiArMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRm
b3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3Jt
SW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVBhdGhD
YWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcApA
QCAtNDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAogCi0gICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwCiAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0
ZTdjM2EyMjlhMTYzYTVmNWE2MGY2MzJiZWEwZTM3YWQyMzk0MGUwLi5jY2IwNzBiZTA5YmFjMTZm
NWY5ZmQzMTlhODMyYzk3ODA5YjIxMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDg1LDcgKzE0ODUsNyBAQAogCQkzNzVD
RDIzMjExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUNEMjMxMTE5RDQzQzgwMEEyQTg1OSAvKiBI
eXBoZW5hdGlvbi5oICovOyB9OwogCQkzNzZEQ0NFMTEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzZE
Q0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi87IH07CiAJCTM3NzRBQkE1MEZB
MjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NzRBQkEzMEZBMjFFQjQwMEFEN0RF
OSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogQml0
bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgKi87IH07
CisJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5
QTAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgKi87IH07CiAJCTM3OTE5QzIzMEI3RDE4
ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3Np
dGlvbkl0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4IC8qIFBv
c2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3OTE5QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMzc5MjkxN0ExOTg1RUYzOTAw
RjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjMyNCwxMCArMjMyNCwxNCBAQAogCQk1M0VEM0ZERjE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRl
cm5hbFNldHRpbmdzR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRp
bmdzR2VuZXJhdGVkLmggKi87IH07CiAJCTUzRUY3NjZCMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0
aW5nc01hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87IH07CiAJ
CTUzRUY3NjZDMTY1MzE5OTQwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oIGluIENvcHkgR2Vu
ZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRjc2
NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87IH07CisJCTU1MDRFNENC
MUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRt
YXBQaXhlbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4NUY2MDM5
MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1RjYwMzkw
MDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFt
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1
NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQTFDQUFGMEFCMDAzNDk0
MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9OwogCQk1NTVCODdFRDFDQUFGMEFCMDAzNDk0
MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5o
ICovOyB9OworCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU3NEYwODUxRDAy
NzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAgLyogSW1h
Z2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLzsg
fTsKKwkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUNCQTZBMDFEMURGMkUx
MDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxh
dGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovOyB9OwogCQk1
NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2NjAwOUM2
MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAqLzsgfTsKIAkJNTdFRjVFNjAxRDIwQzgzOTAwMTcx
RTYwIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1N0VGNUU1RjFEMjBDODM5MDAxNzFFNjAgLyogVGV4dENvZGVj
UmVwbGFjZW1lbnQuaCAqLzsgfTsKQEAgLTkwNjMsNyArOTA2Nyw3IEBACiAJCTM3NkRDQ0UwMTNC
NEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRSdW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzcy
QjA5NTE2NTM1ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBU
ZXN0UmVxdWVzdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdmVy
bGFwVGVzdFJlcXVlc3RDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzc3
QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFwSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdl
Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZvcm1JbWFn
ZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjEwQjdEMTg4NjAw
QTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9zaXRpb25JdGVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3Jl
ZGVudGlhbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3JlZGVudGlh
bEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5ODksMTAgKzk5OTMsMTQg
QEAKIAkJNTNFRDNGREMxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVy
YXRlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ludGVybmFs
U2V0dGluZ3NHZW5lcmF0ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VE
M0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VGNzY2QTE2NTMwQTYxMDA0Q0JF
NDkgLyogU2V0dGluZ3NNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2V0dGluZ3NNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTUwNEU0Q0Ex
RDM1NTMyRDAwRkU1MDg4IC8qIEJpdG1hcFBpeGVscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaXRtYXBQ
aXhlbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUwQTBCQzcwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBBMEJDODA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTVCODdFQTFD
QUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU3NEYwODUxRDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRm
b3JtSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1NUNCQTY5RjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VGcmFtZURh
dGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTZBMDFEMURGMkUxMDA0
NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VGcmFtZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVENDA4
RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBTaW11bGF0
ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW11bGF0
ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAyOCw3ICsyMjAz
Niw2IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3
IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRCNjc5NSAv
KiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQ
b2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0
Q0cuY3BwICovLApAQCAtMjIwNTUsNiArMjIwNjIsNyBAQAogCQkJCUE4MEEzOEZEMEU1MENDODIw
MEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4MTQwMDJDRTY0
RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUzODE0MDAyQ0U2
NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVD
NyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovLAogCQkJCTFGQzQwRkI4MTY1NUM1OTEwMDQwRjI5
RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLywKIAkJCQkxRkM0MEZCNzE2NTVDNTkx
MDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oICovLAogCQkJCUIyNzUzNTJBMEIw
NTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAqLywKQEAgLTIyMTIy
LDYgKzIyMTMwLDcgQEAKIAkJCQlCRUYyOUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVkaW9UcmFj
a1ByaXZhdGUuaCAqLywKIAkJCQlBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1h
Z2UuY3BwICovLAogCQkJCUE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5o
ICovLAorCQkJCTU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLywK
IAkJCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEgLyogQ0RNU2Vzc2lvbi5oICovLAogCQkJCUIy
NzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3NTM1MzkwQjA1
MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCkBAIC0yMjIwNiw2ICsyMjIxNSw4IEBACiAJCQkJ
NDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlCMkEx
MEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkyMkJEOUY3RDEz
NTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNTVDQkE2OUYxRDFE
RjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLywKKwkJCQk1NUNCQTZBMDFEMURG
MkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLywKIAkJCQlCQzdGNDRBNzBCOUUzMjRF
MDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oICovLAogCQkJCUE4NzQ4RDc0MTJDQzNGODkwMDFG
QkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNwcCAqLywKIAkJCQlBODc0OEQ2NjEyQ0MzNzYzMDAx
RkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovLApAQCAtMjIyNTUsNiArMjIyNjYsNyBAQAog
CQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJ
QThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVC
MEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNTU3NEYwODUxRDAyNzQ0NDAw
QjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNB
MTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAv
KiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIw
MDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI2MDI4LDYgKzI2MDQwLDcg
QEAKIAkJCQk4NUU3MTFCOTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE1hcEVsZW1lbnRJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU3OUYwQzAzQkJEMzAwOEJCMEVFIC8qIERP
TUhUTUxNYXJxdWVlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU2RUEwQzAzQjc0
MTAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkRFQzY2NTUxQzgyRDA0MTAwOTk4NDZBIC8qIERPTUhUTUxNZWRpYUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjUxMUM4MkQwMTYwMDk5ODQ2QSAvKiBE
T01IVE1MTWVkaWFFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QkE0RDEz
MEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MTWVudUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMjY0NjksNiArMjY0ODIsNyBAQAogCQkJCUQzNTlENzhBMTI5Q0EyNzEwMDA2RTVEMiAvKiBI
VE1MRGV0YWlsc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3OUZBMEExOTE2REYw
MEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThF
QTdDQjcwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQk1NUNCQTZBMjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4RUE3OUY3MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERv
Y3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg2NzEyMjg4M0U5MDBCODFGRjggLyog
SFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MzY5LDYgKzI4MzgzLDcg
QEAKIAkJCQlCMjIyNzk5MzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdB
bmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OTgwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTU1MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQzOUQzMzQ1MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRvckZhY3RvcnkuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4RkIzRjg0MTNCQzc1NEMwMDk5RkMxOCAvKiBTVkdBdHRyaWJ1
dGVUb1Byb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5QzBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHQ2lyY2xlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTQyMSw3ICsy
OTQzNiw3IEBACiAJCQkJRkRDNTRGMDQxMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVhZEZpbHRlck5v
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjYxMkIwMjY3NjAwQzFBMzU5IC8qIEJp
cXVhZFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBCNDIzMzg4MDBE
N0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzc3QTNBOTAxNUVG
Q0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzc3
QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NzZENkM3ODEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyRURFRjFGMzEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTFEMzFDREMxOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmlsZVJlZmVy
ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5Nzg0LDYgKzI5Nzk5LDcgQEAKIAkJCQkyRTJE
OTlFODEwRTJCQzFDMDA0OTYzMzcgLyogRE9NQmxvYi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1
MDg5Q0Q4MEE5OEM0MjgwMEEyNzVBQSAvKiBET01DREFUQVNlY3Rpb24ubW0gaW4gU291cmNlcyAq
LywKIAkJCQk4NUFDQTk4NzBBOUI1MjAzMDA2NzFFOTAgLyogRE9NQ2hhcmFjdGVyRGF0YS5tbSBp
biBTb3VyY2VzICovLAorCQkJCTU1Q0JBNkExMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1l
RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTA4OUNEQTBBOThDNDI4MDBBMjc1QUEgLyog
RE9NQ29tbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3OEQwN0JFMTQ1QTBGNkMwMDk2OTA4
RCAvKiBET01Db3JlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1OEMzOEE2MEFB
OEYyMDQwMEIxODdBNCAvKiBET01Db3VudGVyLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDQwMTFlYTNmZDhjMDQ2OTc0YzU1ZDQ4ZTM5NmYxYjgz
YjgxZjMzNWQuLmE1YWM0ZjA1YWUzMzlhOGQ2NDcwNmMxMGZjMGY3YWY0MDQyNTYyM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC02MDYsNyArNjA2LDcgQEAgLSAodm9pZCln
ZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0czooTlNB
cnJheSAqKilyZWN0cwogCiAgICAgaWYgKHRleHRJbmRpY2F0b3IpIHsKICAgICAgICAgaWYgKElt
YWdlKiBpbWFnZSA9IHRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpKQotICAgICAgICAgICAg
KmNnSW1hZ2UgPSAoQ0dJbWFnZVJlZilDRkF1dG9yZWxlYXNlKENHSW1hZ2VSZXRhaW4oaW1hZ2Ut
PmdldENHSW1hZ2VSZWYoKSkpOworICAgICAgICAgICAgKmNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQppbmRl
eCAzNjRhOWE4N2NlNmYwNjYzOTQ4Yjg4NDZlOGUyY2U2ZDE5MGYyNDg5Li5hNzRkYTg1YWNlY2Ez
YzY2OThkZDE1NmFiMzFhNmM5NzFhMzU0ZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0KQEAgLTE2Miw5ICsxNjIsOSBAQCAtIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBhc3NSZWZQ
dHI8VGV4dEluZGljYQogICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgxIC8gX3Rl
eHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOwogICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwogICAgIGlmIChpbmRpY2F0b3JXYW50c0NvbnRlbnRD
cm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0
SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPmdldENHSW1hZ2VSZWYoKTsK
KyAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRo
SGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7CiAgICAgZWxzZQotICAgICAgICBjb250ZW50c0lt
YWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7Cisg
ICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPm5h
dGl2ZUltYWdlKCk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5jZUxheWVy
cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogCkBAIC0yNjUsNyAr
MjY1LDcgQEAgc3RhdGljIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGVCb3Vu
Y2VBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXQKIHN0YXRpYyBSZXRhaW5QdHI8Q0FCYXNp
Y0FuaW1hdGlvbj4gY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbihDRlRpbWVJbnRlcnZh
bCBkdXJhdGlvbiwgVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRvcikKIHsKICAgICBSZXRhaW5Q
dHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRp
b24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJjb250ZW50cyJdOwotICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBjb250ZW50c0ltYWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+Z2V0
Q0dJbWFnZVJlZigpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0g
dGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKTsKICAgICBbY3Jvc3Nm
YWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6KGlkKWNvbnRlbnRzSW1hZ2UuZ2V0KCldOwogICAgIFtj
cm9zc2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CiAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCA0NjBk
MWI4NTZiNzdiN2NmNGVjNjg5NjU4MWI4MzNkM2U3Zjk3MDE0Li5mYzY0OWQxMGFhYjljMTNmZmYy
OTMwNTVhNzA3Y2I3NDUzNzQ2OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC02OCwxNSArNjgsMTMgQEAgQml0bWFwSW1hZ2U6
OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRyJiYgaW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2Vy
dmVyKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQogICAgICwgbV9hbmltYXRpb25GaW5p
c2hlZFdoZW5DYXRjaGluZ1VwKGZhbHNlKQogeworICAgIG1fZnJhbWVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoMSk7CisgICAgbV9mcmFtZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoaW1hZ2Up
KTsKKyAgICAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgZGVjb2Rlciwgd2UgY2FuJ3Qg
ZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRpb24uCiAgICAgLy8gU2V0IG1fc2l6ZVJlc3Bl
Y3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2FtZSBhcyBtX3NpemUgc28gaXQncyBub3QgMHgw
LgotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZSA9IE5hdGl2ZUltYWdl
OjpzaXplKGltYWdlKTsKKyAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUg
PSBtX2ZyYW1lc1swXS5zaXplKCk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS5hcmVhKCkg
KiA0OwotICAgIAotICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0gICAgbV9mcmFtZXNbMF0ubV9oYXNB
bHBoYSA9IE5hdGl2ZUltYWdlOjpoYXNBbHBoYShpbWFnZSk7Ci0gICAgbV9mcmFtZXNbMF0ubV9o
YXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBXVEZNb3ZlKGlt
YWdlKTsKIH0KIAogQml0bWFwSW1hZ2U6On5CaXRtYXBJbWFnZSgpCkBAIC0xMDUsNyArMTAzLDcg
QEAgYm9vbCBCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkK
ICAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7CisgICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5oYXNJbWFnZSgpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpoYXNTaW5nbGVT
ZWN1cml0eU9yaWdpbigpIGNvbnN0CkBAIC0xMjUsOSArMTIzLDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKICAgICAgICAgLy8gVGhlIHVu
ZGVybHlpbmcgZnJhbWUgaXNuJ3QgYWN0dWFsbHkgY2hhbmdpbmcgKHdlJ3JlIGp1c3QgdHJ5aW5n
IHRvCiAgICAgICAgIC8vIHNhdmUgdGhlIG1lbW9yeSBmb3IgdGhlIGZyYW1lYnVmZmVyIGRhdGEp
LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyCiAgICAgICAgIC8vIHRoZSBtZXRhZGF0YS4KLSAg
ICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAg
ICAgICAgaWYgKG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKSkKLSAgICAgICAgICAgIGZyYW1lQnl0
ZXNDbGVhcmVkICs9IGZyYW1lQnl0ZXM7CisgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IG1f
ZnJhbWVzW2ldLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSk7CiAgICAg
fQogCiAgICAgbV9zb3VyY2UuY2xlYXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFtZSwgZGF0
YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CkBAIC0xNTAsOCArMTQ2LDggQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxsKQogICAg
ICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBhbGxGcmFt
ZUJ5dGVzICs9IG1fZnJhbWVzW2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChhdXRvJiBm
cmFtZSA6IG1fZnJhbWVzKQorICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLmZyYW1lQnl0
ZXMoKTsKIAogICAgIGlmIChhbGxGcmFtZUJ5dGVzID4gbGFyZ2VBbmltYXRpb25DdXRvZmYpIHsK
ICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGRlc3Ryb3lEZWNvZGVkRGF0YUlm
TmVjZXNzYXJ5IGRlc3Ryb3lpbmdEYXRhOiBhbGxGcmFtZUJ5dGVzPSV1IGN1dG9mZj0ldSIsIHRo
aXMsIGFsbEZyYW1lQnl0ZXMsIGxhcmdlQW5pbWF0aW9uQ3V0b2ZmKTsKQEAgLTE3Nyw3ICsxNzMs
NyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkodW5zaWduZWQg
ZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTbwogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRl
Y29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50PihmcmFtZUJ5dGVzQ2xlYXJlZCkp
OwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxp
bmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5n
KQogewogICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgQVNTRVJUKG1f
ZGVjb2RlZFNpemUgPT0gMCB8fCBudW1GcmFtZXMgPiAxKTsKQEAgLTE4NSwyNSArMTgxLDEyIEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltCiAgICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8IG51bUZy
YW1lcykKICAgICAgICAgbV9mcmFtZXMuZ3JvdyhudW1GcmFtZXMpOwogCi0gICAgaWYgKGZyYW1l
Q2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpIHsKLSAgICAgICAgbV9mcmFtZXNbaW5k
ZXhdLm1faW1hZ2UgPSBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCk7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2
ZWwgPSBzdWJzYW1wbGluZ0xldmVsOwotICAgIH0KLQotICAgIG1fZnJhbWVzW2luZGV4XS5tX29y
aWVudGF0aW9uID0gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKLSAgICBtX2Zy
YW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzW2luZGV4XS5t
X2lzQ29tcGxldGUgPSBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KTsKKyAg
ICBtX2ZyYW1lc1tpbmRleF0gPSBtX3NvdXJjZS5jcmVhdGVGcmFtZURhdGFBdEluZGV4KGluZGV4
LCBzdWJzYW1wbGluZ0xldmVsLCBjYWNoaW5nKTsKIAotICAgIGlmIChyZXBldGl0aW9uQ291bnQo
ZmFsc2UpICE9IGNBbmltYXRpb25Ob25lKQotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9kdXJh
dGlvbiA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICBMT0coSW1h
Z2VzLCAiQml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNvbXBsZXRl
ICVkKSIsIHRoaXMsIGluZGV4LCBjYWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpN
ZXRhZGF0YSA/ICJtZXRhZGF0YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5mcmFtZUJ5
dGVzKCksIG1fZnJhbWVzW2luZGV4XS5pc0NvbXBsZXRlKCkpOwogCi0gICAgbV9mcmFtZXNbaW5k
ZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7Ci0g
ICAgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlcyA9IG1fc291cmNlLmZyYW1lQnl0ZXNBdElu
ZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKLQotICAgIExPRyhJbWFnZXMsICJCaXRtYXBJ
bWFnZSAlcCBjYWNoZUZyYW1lICVsdSAoJXMldSBieXRlcywgY29tcGxldGUgJWQpIiwgdGhpcywg
aW5kZXgsIGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSA/ICJtZXRhZGF0YSBvbmx5
LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMsIG1fZnJhbWVzW2luZGV4XS5t
X2lzQ29tcGxldGUpOwotCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKSB7Ci0gICAg
ICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0ubV9mcmFt
ZUJ5dGVzKTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpIHsKKyAgICAgICAg
aW50IGRlbHRhQnl0ZXMgPSBzYWZlQ2FzdDxpbnQ+KG1fZnJhbWVzW2luZGV4XS5mcmFtZUJ5dGVz
KCkpOwogICAgICAgICBtX2RlY29kZWRTaXplICs9IGRlbHRhQnl0ZXM7CiAgICAgICAgIC8vIFRo
ZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vic3VtZSB0aGUgcGFydGlhbGx5IGRlY29kZWQg
ZGF0YSB1c2VkCiAgICAgICAgIC8vIHRvIGRldGVybWluZSBpbWFnZSBwcm9wZXJ0aWVzLgpAQCAt
Mjg4LDIxICsyNzEsMTkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCiAgICAgLy8gZnJhbWUgYWZmZWN0ZWQgYnkgYXBwZW5kaW5nIG5ldyBkYXRh
IGhlcmUuIFRodXMgd2UgaGF2ZSB0byBjbGVhciBhbGwgdGhlCiAgICAgLy8gaW5jb21wbGV0ZSBm
cmFtZXMgdG8gYmUgc2FmZS4KICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQ2xlYXJlZCA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkgeworICAgIGZv
ciAoYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykgewogICAgICAgICAvLyBOT1RFOiBEb24ndCBjYWxs
IGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoKSBoZXJlLCB0aGF0IHdpbGwgdHJ5IHRvCiAgICAgICAg
IC8vIGRlY29kZSBhbnkgdW5jYWNoZWQgKGkuZS4gbmV2ZXItZGVjb2RlZCBvcgogICAgICAgICAv
LyBjbGVhcmVkLW9uLWEtcHJldmlvdXMtcGFzcykgZnJhbWVzIQotICAgICAgICB1bnNpZ25lZCBm
cmFtZUJ5dGVzID0gbV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAobV9mcmFt
ZXNbaV0ubV9oYXZlTWV0YWRhdGEgJiYgIW1fZnJhbWVzW2ldLm1faXNDb21wbGV0ZSkKLSAgICAg
ICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IChtX2ZyYW1lc1tpXS5jbGVhcih0cnVlKSA/IGZy
YW1lQnl0ZXMgOiAwKTsKKyAgICAgICAgaWYgKGZyYW1lLmhhc01ldGFkYXRhKCkgJiYgIWZyYW1l
LmlzQ29tcGxldGUoKSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lLmNs
ZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgfQogICAgIGRlc3Ryb3lN
ZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xlYXJlZCwgQ2xlYXJlZFNvdXJjZTo6Tm8pOwog
I2Vsc2UKICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgZGlmZmVyZW50IGZvciBpT1M/CiAgICAg
aW50IGRlbHRhQnl0ZXMgPSAwOwogICAgIGlmICghbV9mcmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGludCBieXRlcyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLm1fZnJhbWVCeXRl
czsKLSAgICAgICAgaWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFyKHRydWUp
KSB7CisgICAgICAgIGlmIChpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAx
XS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpKSB7CiAgICAgICAgICAgICBk
ZWx0YUJ5dGVzICs9IGJ5dGVzOwogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBtX2RlY29kZWRQ
cm9wZXJ0aWVzU2l6ZTsKICAgICAgICAgICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplID0gMDsK
QEAgLTM2NiwxNSArMzQ3LDE1IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWlsYWJsZSgp
CiAgICAgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAotYm9vbCBCaXRtYXBJbWFnZTo6ZW5z
dXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nIGZyYW1lQ2Fj
aGluZykKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5nKQogewogICAgIGlmIChpbmRleCA+PSBm
cmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpbmRleCA+PSBt
X2ZyYW1lcy5zaXplKCkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRh
QW5kRnJhbWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICB8fCAoZnJhbWVD
YWNoaW5nID09IENhY2hlTWV0YWRhdGFPbmx5ICYmICFtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0
YWRhdGEpKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBmcmFtZUNhY2hpbmcpOworICAg
ICAgICB8fCAoY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJ
bWFnZSAmJiAhbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpCisgICAgICAgIHx8IChjYWNoaW5n
ID09IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSAmJiAhbV9mcmFtZXNbaW5kZXhd
Lmhhc01ldGFkYXRhKCkpKQorICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBjYWNoaW5nKTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzg4LDEwICszNjksOSBAQCBOYXRpdmVJbWFnZVB0
ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9hdCBwcmVz
ZW50YXRpb25TYwogCiAgICAgLy8gV2UgbWF5IGhhdmUgY2FjaGVkIGEgZnJhbWUgd2l0aCBhIGhp
Z2hlciBzdWJzYW1wbGluZyBsZXZlbCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvCiAgICAgLy8g
cmUtZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KLSAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5z
aXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZlbCA8IG1f
ZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpIHsKKyAgICBpZiAoaW5kZXggPCBtX2Zy
YW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkgJiYgc3Vic2FtcGxpbmdM
ZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5zdWJzYW1wbGluZ0xldmVsKCkpIHsKICAgICAgICAgLy8g
SWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEgc2l6ZSwg
cmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1f
ZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5jbGVh
cih0cnVlKTsKKyAgICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhdLmNsZWFy
KEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgICAgIGludmFsaWRhdGVQbGF0
Zm9ybURhdGEoKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBzaXplQ2hhbmdlOwogICAgICAg
ICBpZiAoaW1hZ2VPYnNlcnZlcigpKQpAQCAtMzk5LDQwICszNzksNzIgQEAgTmF0aXZlSW1hZ2VQ
dHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgcHJl
c2VudGF0aW9uU2MKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlbid0IGZldGNoZWQgYSBmcmFt
ZSB5ZXQsIGRvIHNvLgotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJh
bWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsLCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIGlmIChpbmRleCA+PSBtX2ZyYW1l
cy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICBjYWNoZUZy
YW1lKGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGFBbmRJbWFnZSk7CisKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmltYWdlKCk7Cit9
CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoKQoreworICAg
IHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdlUHRyIEJp
dG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdElu
ZGV4KGkpOworICAgICAgICBpZiAoaW1hZ2UgJiYgUGxhdGZvcm1JbWFnZShpbWFnZSkuc2l6ZSgp
ID09IHNpemUpCisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQorICAgIAorICAgIC8v
IEZhbGxiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZSBpbWFnZSBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBy
aWdodCBzaXplCisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAgIAorTmF0
aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKK3sK
KyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworfQogCi0gICAg
cmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBC
aXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKCkKK3sKKyAgICBWZWN0b3I8TmF0aXZlSW1h
Z2VQdHI+IGltYWdlczsKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmIChhdXRv
IGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkpCisgICAgICAgICAgICBpbWFnZXMuYXBwZW5k
KGltYWdlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlczsKIH0KIAogYm9vbCBCaXRt
YXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYg
KCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYg
KCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5k
ZXhdLm1faXNDb21wbGV0ZTsKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmlzQ29tcGxldGUo
KTsKIH0KIAogZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBp
bmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIENhY2hlTWV0YWRh
dGFPbmx5KSkKKyAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIEltYWdlRnJhbWVE
YXRhOjpDYWNoaW5nOjpNZXRhZGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5tX2R1cmF0aW9uOwotfQotCi1OYXRpdmVJbWFnZVB0ciBCaXRtYXBJ
bWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQotewotICAgIHJldHVybiBmcmFtZUlt
YWdlQXRJbmRleChjdXJyZW50RnJhbWUoKSk7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5k
dXJhdGlvbigpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNo
ZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiBt
X2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc01l
dGFkYXRhKCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0uaGFzQWxwaGEoKTsKIAog
ICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CiB9CkBAIC00
NDQsMTEgKzQ1NiwxMSBAQCBib29sIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVLbm93blRvQmVP
cGFxdWUoKQogCiBJbWFnZU9yaWVudGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGlu
ZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGlu
ZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4g
SW1hZ2VPcmllbnRhdGlvbigpOwogCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2hhdmVNZXRh
ZGF0YSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX29yaWVudGF0aW9uOworICAg
IGlmIChtX2ZyYW1lc1tpbmRleF0uaGFzTWV0YWRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5vcmllbnRhdGlvbigpOwogCiAgICAgcmV0dXJuIG1fc291cmNlLm9yaWVudGF0
aW9uQXRJbmRleChpbmRleCk7CiB9CkBAIC03MDAsMTcgKzcxMiw1NiBAQCBDb2xvciBCaXRtYXBJ
bWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAg
ICAgCiAgICAgQVNTRVJUKG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENvbG9yID0gTmF0
aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2ltYWdlLmdldCgp
KTsKKyAgICBtX3NvbGlkQ29sb3IgPSBtX2ZyYW1lc1swXS5zaW5nbGVQaXhlbFNvbGlkQ29sb3Io
KTsKICAgICAKICAgICBBU1NFUlQobV9zb2xpZENvbG9yKTsKICAgICByZXR1cm4gbV9zb2xpZENv
bG9yLnZhbHVlKCk7CiB9CiAgICAgCitib29sIEJpdG1hcEltYWdlOjppc0FsbW9zdFNvbGlkQ29s
b3IoKQoreworICAgIGlmIChmcmFtZUNvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIGVuc3VyZUZyYW1lSXNDYWNoZWQoMCkgJiYgbV9mcmFtZXNbMF0uaXNB
bG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCiBib29sIEJpdG1hcEltYWdlOjpjYW5BbmltYXRl
KCkKIHsKICAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+IDE7CiB9
CiAKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9u
IGRlc2NyaXB0aW9uKQoreworICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkgfHwgc3JjUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdGFy
dEFuaW1hdGlvbihEb05vdENhdGNoVXApOworI2Vsc2UKKyAgICBzdGFydEFuaW1hdGlvbigpOwor
I2VuZGlmCisgICAgCisgICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsK
KyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihj
b250ZXh0LCBkZXN0UmVjdCwgY29sb3IsIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIFBs
YXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoY29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3Qp
KTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFu
IGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb24oZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKKyAgICBpZiAoZGVz
Y3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRh
dGlvbikKKyAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1
cnJlbnRGcmFtZSk7CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShpbWFnZSkuZHJhdyhjb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgbV9zaXplLCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworICAg
IAorICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlk
RHJhdyh0aGlzKTsKK30KKyAgICAKIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0cmVhbSYg
dHMpIGNvbnN0CiB7CiAgICAgSW1hZ2U6OmR1bXAodHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggMDc1ODkyOWNkODdmYWRhY2YwMmI2
ZWQ4ZWVhZmU3ZGVmZDY2ZjBjNS4uMjIxOGM4MjRiNTI4ZmQ2MzliYWIxMzhkZWNjOThiOTgxNmEx
NjgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFw
SW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oCkBAIC0yOCwxMSArMjgsMTMgQEAKICNpZm5kZWYgQml0bWFwSW1hZ2VfaAogI2RlZmluZSBC
aXRtYXBJbWFnZV9oCiAKLSNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisj
aW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lRGF0YS5oIgogI2luY2x1ZGUg
IkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUg
IkludFNpemUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCiAKICNpZiBVU0UoQ0cpIHx8
IFVTRShBUFBLSVQpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDcsNjMgKzQ5LDkg
QEAgdHlwZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2UgV1RGIHsK
LSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVEYXRhPiA6
IHB1YmxpYyBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJhbWVEYXRh
IG1lbWJlcnMgaW5pdGlhbGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgVGltZXI7CiAKLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0gICAgSW50U2l6
ZSBzaXplKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0gICAgYm9vbCBoYXNBbHBoYShjb25zdCBO
YXRpdmVJbWFnZVB0ciYpOwotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBO
YXRpdmVJbWFnZVB0ciYpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS8vIEZyYW1lRGF0YSBDbGFzcwotLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0cnVjdCBGcmFtZURhdGEgewot
cHVibGljOgotICAgIEZyYW1lRGF0YSgpCi0gICAgICAgIDogbV9oYXZlTWV0YWRhdGEoZmFsc2Up
Ci0gICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxwaGEodHJ1
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkZyYW1lRGF0YSgpCi0gICAgeyAKLSAgICAgICAgY2xl
YXIodHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBpbWFnZSBkYXRhIG9u
IHRoZSBmcmFtZSwgYW5kIChvcHRpb25hbGx5KSB0aGUgbWV0YWRhdGEuCi0gICAgLy8gUmV0dXJu
cyB3aGV0aGVyIHRoZXJlIHdhcyBjYWNoZWQgaW1hZ2UgZGF0YSB0byBjbGVhci4KLSAgICBib29s
IGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSk7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNlZEZyYW1l
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9mcmFtZUJ5dGVzIDogMDsgfQotCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKLSAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50
YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OwotICAgIFN1YnNhbXBsaW5nTGV2ZWwg
bV9zdWJzYW1wbGluZ0xldmVsIHsgMCB9OwotICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07Ci0g
ICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7Ci0gICAgYm9vbCBtX2lzQ29tcGxldGUgOiAxOwot
ICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7Ci0gICAgdW5zaWduZWQgbV9mcmFtZUJ5dGVzIHsgMCB9
OwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLy8gQml0bWFwSW1hZ2UgQ2xhc3MKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLQogY2xhc3MgQml0bWFwSW1hZ2UgZmluYWwgOiBwdWJs
aWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAgICBmcmllbmQg
Y2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0xNTUsMTIgKzEwMyw2IEBAIHB1Ymxp
YzoKICAgICBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgb3ZlcnJpZGU7CiAjZW5k
aWYKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDR0ltYWdlUmVmIGdldENHSW1h
Z2VSZWYoKSBvdmVycmlkZTsKLSAgICBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6
ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGdl
dENHSW1hZ2VBcnJheSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAg
ICAgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIG92ZXJyaWRlOwogICAgIGJvb2wgZ2V0SEJJVE1B
UE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgb3ZlcnJpZGU7CkBAIC0xNzQsOCArMTE2
LDEzIEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZhc09iamVjdChFdmFzKikgb3Zl
cnJpZGU7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUo
Y29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRh
dGlvbkZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZyYW1lT3JpZW50YXRpb25B
dEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQorICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gZnJh
bWVzTmF0aXZlSW1hZ2VzKCkgb3ZlcnJpZGU7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBpc0FsbW9zdFNvbGlkQ29sb3IoKTsKIAogICAgIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0Jl
T3BhcXVlKCkgb3ZlcnJpZGU7CiAKQEAgLTIxNSw3ICsxNjIsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
c2l6ZV90IGZyYW1lQ291bnQoKTsKIAogICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdElu
ZGV4KHNpemVfdCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50ID0gMSk7Ci0gICAgTmF0aXZl
SW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIAogICAgIGJv
b2wgaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKQEAgLTIyNSwxMSArMTcxLDEwIEBA
IHByb3RlY3RlZDoKICAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4
KHNpemVfdCk7CiAKICAgICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2ZXIgYWNj
ZXNzZWQgZXhjZXB0IGludGVybmFsbHkuCi0gICAgZW51bSBJbWFnZUZyYW1lQ2FjaGluZyB7IENh
Y2hlTWV0YWRhdGFPbmx5LCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUgfTsKLSAgICB2b2lkIGNhY2hl
RnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyA9
IENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7CisgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1l
RGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQgYmVmb3Jl
IGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9yIGluZm8gd2l0aG91dCBkZWNvZGluZy4gUmV0
dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91bmRzLgotICAgIGJvb2wgZW5zdXJlRnJhbWVJ
c0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nID0gQ2FjaGVNZXRhZGF0YUFu
ZEZyYW1lKTsKKyAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YUFu
ZEltYWdlKTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhLiBXaGVu
IHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8vIHRoZSBlbnRpcmUgZnJh
bWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJveQpAQCAt
MjkyLDcgKzIzNyw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6ZVJlc3Bl
Y3RpbmdPcmllbnRhdGlvbjsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZSB7IDAgfTsgLy8g
VGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KLSAgICBWZWN0b3I8
RnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMg
b2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRo
ZSBjYWNoZS4KKyAgICBWZWN0b3I8SW1hZ2VGcmFtZURhdGEsIDE+IG1fZnJhbWVzOyAvLyBBbiBh
cnJheSBvZiB0aGUgY2FjaGVkIGZyYW1lcyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBoYXZlIHRvIHJl
ZiBmcmFtZXMgdG8gcGluIHRoZW0gaW4gdGhlIGNhY2hlLgogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRpbWVyPiBtX2ZyYW1lVGltZXI7CiAgICAgaW50IG1fcmVwZXRpdGlvbkNvdW50IHsgY0FuaW1h
dGlvbk5vbmUgfTsgLy8gSG93IG1hbnkgdG90YWwgYW5pbWF0aW9uIGxvb3BzIHdlIHNob3VsZCBk
by4gVGhpcyB3aWxsIGJlIGNBbmltYXRpb25Ob25lIGlmIHRoaXMgaW1hZ2UgdHlwZSBpcyBpbmNh
cGFibGUgb2YgYW5pbWF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBQaXhlbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YWEyNDAwZjNhZWY3YjY5OWQyYWE0ZGY3ZGE0
NDcyNGRkM2NkNThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDb2xvci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisj
aW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCaXRtYXBQaXhlbHMgeworcHVibGljOgorICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBjcmVhdGUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihzaXplLCBwcmVtdWx0aXBseUFscGhhKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3JlYXRlKGNv
bnN0IEJpdG1hcFBpeGVscyYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxCaXRtYXBQaXhlbHM+KG90aGVyKTsKKyAgICB9CisKKyAgICBCaXRtYXBQaXhlbHMo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZSkKKyAgICAg
ICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAgICBzZXRTaXplKHNpemUpOworICAgIH0K
KworICAgIEJpdG1hcFBpeGVscyhjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKKyAgICAgICAg
bV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IG90aGVy
Lm1fc2l6ZTsKKyAgICAgICAgbV9yZWN0ID0gb3RoZXIubV9yZWN0OworICAgICAgICBtX3ByZW11
bHRpcGx5QWxwaGEgPSBvdGhlci5tX3ByZW11bHRpcGx5QWxwaGE7CisgICAgfQorCisgICAgTmF0
aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdDsKKworICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS50cnlSZXNlcnZl
Q2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUucmVzaXplKHNpemUuYXJlYSgpKTsKKyAgICAgICAg
bV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7
CisgICAgICAgIG1fcmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKTsKKyAgICAgICAg
Y2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemUu
aXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91bmRzKHJlY3QpKTsKKyAgICAgICAgbV9y
ZWN0ID0gcmVjdDsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CisgICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpbkJvdW5kcyhJbnRQb2ludCh4LCB5KSkgPyBtX3BpeGVscyArIHkgKiBtX3NpemUud2lk
dGgoKSArIHggOiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAg
ICAgICAgbWVtc2V0KG1fcGl4ZWxzLCAwLCBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEzMikp
OworICAgIH0KKworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAg
eworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgaW5Cb3VuZHMocmVjdCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9
IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIqIHN0YXJ0ID0g
YXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0
LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbXNldChzdGFydCwgMCwgcmVjdFdpZHRo
SW5CeXRlcyk7CisgICAgICAgICAgICBzdGFydCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgcmVwZWF0Rmlyc3RSb3coY29uc3QgSW50UmVjdCYgcmVjdCkK
KyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCBpbkJvdW5kcyhyZWN0KSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5
dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJHQkEzMiogc3Jj
ID0gYXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgUkdCQTMyKiBkZXN0ID0gc3JjICsg
bV9zaXplLndpZHRoKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcmVjdC5oZWlnaHQo
KTsgKytpKSB7CisgICAgICAgICAgICBtZW1jcHkoZGVzdCwgc3JjLCByZWN0V2lkdGhJbkJ5dGVz
KTsKKyAgICAgICAgICAgIGRlc3QgKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBn
LCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCQShhdCh4LCB5
KSwgciwgZywgYiwgYSk7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwg
dW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhIHx8IGEgPj0gMjU1KQorICAgICAgICAgICAg
KmRlc3QgPSBtYWtlUkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgZWxzZSBpZiAoIWEpCisgICAg
ICAgICAgICAqZGVzdCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpkZXN0ID0gbWFr
ZVByZW11bHRpcGxpZWRSR0JBKHIsIGcsIGIsIGEpOworICAgIH0KKworICAgIHZvaWQgb3ZlclJH
QkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNp
Z25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFhbHBoYUNoYW5uZWwoKmRlc3QpKSB7Cisg
ICAgICAgICAgICBzZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkK
KyAgICAgICAgICAgICpkZXN0ID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwoKmRl
c3QpLCBncmVlbkNoYW5uZWwoKmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhhQ2hhbm5l
bCgqZGVzdCkpOworICAgICAgICAKKyAgICAgICAgUkdCQTMyIHNyYyA9IG1ha2VSR0JBKHIsIGcs
IGIsIGEpOworICAgICAgICAqZGVzdCA9IENvbG9yKCpkZXN0KS5ibGVuZChzcmMpLnJnYigpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICAq
ZGVzdCA9IG1ha2VVblByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwoKmRlc3QpLCBncmVlbkNo
YW5uZWwoKmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhhQ2hhbm5lbCgqZGVzdCkpOwor
ICAgIH0KKworICAgIGJvb2wgaW5Cb3VuZHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKS5jb250YWlu
cyhwb2ludCk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5kcyhjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXpl
KS5jb250YWlucyhyZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFJHQkEzMj4g
bV9iYWNraW5nU3RvcmU7CisgICAgUkdCQTMyKiBtX3BpeGVscyB7IG51bGxwdHIgfTsKKyAgICBJ
bnRTaXplIG1fc2l6ZTsKKyAgICBJbnRSZWN0IG1fcmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5cyBq
dXN0IGJlIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGFuZCBQTkcgZnJhbWVzCisg
ICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGEgeyB0cnVlIH07Cit9OworCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKaW5kZXggNGUyNWFhNmZkNzRkMWU0NmM1
NDE2MTQ5OGJjMTcyYmY2MDA4NzVkMS4uNDM5ZjVhNjNjN2JlYmU1NjA0MmIyNGU3ZDcyZWNjZWNm
MzZjNDBjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcApA
QCAtNDksNiArNDksNDAgQEAgY29uc3QgUkdCQTMyIENvbG9yOjp0cmFuc3BhcmVudDsKIHN0YXRp
YyBjb25zdCBSR0JBMzIgbGlnaHRlbmVkQmxhY2sgPSAweEZGNTQ1NDU0Owogc3RhdGljIGNvbnN0
IFJHQkEzMiBkYXJrZW5lZFdoaXRlID0gMHhGRkFCQUJBQjsKIAorc3RhdGljIGlubGluZSB1bnNp
Z25lZCBtdWx0aXBseTI1NSh1bnNpZ25lZCBjKQoreworICAgIC8vIGMgKiAyNTUKKyAgICAvLyAg
ID0gYyAqICgyNTYgLSAxKQorICAgIC8vICAgPSBjICogMjU2IC0gYworICAgIHJldHVybiAoYyA8
PCA4KSAtIGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZGl2aWRlMjU1KHVuc2lnbmVk
IGMpCit7CisgICAgLy8gYyAvIDI1NQorICAgIC8vICAgPSBjIC8gMjU2ICogKDEgKyAxIC8gMjU1
KQorICAgIC8vICAgPSAoYyArIGMgLyAyNTUpIC8gMjU2CisgICAgLy8gICA9IChjICsgKGMgKyBj
IC8gMjU1KSAvIDI1NikgLyAyNTYKKyAgICAvLyAgID0gKGMgKyBjIC8gMjU2ICsgYyAvICgyNTUg
eCAyNTYpKSAvIDI1NgorICAgIC8vICB+PSAoYyArIGMgLyAyNTYgKyAxKSAvIDI1NgorICAgIHJl
dHVybiAoYyArIChjID4+IDgpICsgMSkgPj4gODsKK30KKyAgICAKK3N0YXRpYyBpbmxpbmUgdW5z
aWduZWQgZGl2aWRlQ2VpbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBkKQoreworICAgIHJldHVybiAo
YyArIGQgLSAxKSAvIGQ7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHByZW11bHRp
cGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0dXJuIGRpdmlk
ZTI1NShjICogYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5wcmVtdWx0aXBsaWVk
Q2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBkaXZpZGVDZWls
KG11bHRpcGx5MjU1KGMpLCBhKTsKK30KKyAgICAKIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQg
ZywgaW50IGIpCiB7CiAgICAgcmV0dXJuIDB4RkYwMDAwMDAgfCBzdGQ6Om1heCgwLCBzdGQ6Om1p
bihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBz
dGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUpKTsKQEAgLTU5LDYgKzkzLDE2IEBAIFJHQkEzMiBt
YWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKICAgICByZXR1cm4gc3RkOjptYXgo
MCwgc3RkOjptaW4oYSwgMjU1KSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUp
KSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgw
LCBzdGQ6Om1pbihiLCAyNTUpKTsKIH0KIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShp
bnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVs
dGlwbGllZENoYW5uZWwociwgYSksIHByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCBwcmVtdWx0
aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7Cit9CisgICAgCitSR0JBMzIgbWFrZVVuUHJlbXVsdGlw
bGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VS
R0JBKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwo
ZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorICAgIAogc3RhdGlj
IGludCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQogewogICAgIC8vIFdlIHVzZSBscm91
bmRmIGFuZCAyNTUgaW5zdGVhZCBvZiBuZXh0YWZ0ZXJmKDI1NiwgMCkgdG8gbWF0Y2ggQ0cncyBy
b3VuZGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKaW5kZXggZGQy
NjI3MGJiNDY2MGIzM2FlMDcwZThjOTQ0NTIwZDcyODQ1NGI4YS4uYTU0NTMyYzc3NTVhN2M4NzY5
MzYyNDBjYWU0ZWMzN2E0ZGEwZDA0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCkBAIC01NCw2ICs1NCw4IEBAIHR5cGVkZWYgdW5zaWduZWQgUkdCQTMyOyAvLyBE
ZXByZWNhdGVkOiBUeXBlIGZvciBhbiBSR0JBIHF1YWRydXBsZXQuIFVzZSBSR0JBIGNsCiAKIFdF
QkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpOwogV0VCQ09S
RV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKK1dF
QkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBp
bnQgYiwgaW50IGEpOworV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRS
R0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAogV0VCQ09SRV9FWFBPUlQgUkdCQTMy
IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhh
KTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBj
b2xvciwgT3B0aW9uYWw8ZmxvYXQ+IG92ZXJyaWRlQWxwaGEpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmgKaW5kZXggN2EyOTk5MmY3NzE4OGUwMzgyOGQ4MGE2NWI4YmUy
Y2Q4ZGMyZGU3Ni4uOGU3YjUyYjFmNGYzMWM3NGEzY2IyYTEzMjE1ZGE3N2EyYjE4YzA3YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCkBAIC0xMzcsOCArMTM3LDEx
IEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwgUm91bmRUaWxl
LCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFn
ZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsg
fQogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBJbWFnZU9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOyB9Cisg
ICAgdmlydHVhbCBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIHsg
cmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0
cy4KIApAQCAtMTUwLDEyICsxNTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDRkRhdGFSZWYg
Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKLSNp
ZiBVU0UoQ0cpCi0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldENHSW1hZ2VSZWYoKSB7IHJldHVy
biBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9m
U2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgUmV0
YWluUHRyPENGQXJyYXlSZWY+IGdldENHSW1hZ2VBcnJheSgpIHsgcmV0dXJuIG51bGxwdHI7IH0K
LSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQ
KEhCSVRNQVApIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGdldEhCSVRNQVBP
ZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xNzks
NiArMTc2LDggQEAgcHVibGljOgogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXJ0dWFsIGJv
b2wgbm90U29saWRDb2xvcigpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgorICAgIAorICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXRJZk5lZWRlZCgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI4ZTNlZDRjOGEzYWJkMmNm
MzdmZmM3ZDFjZjk5NDg4ODBiNDg5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcApAQCAtMCwwICsxLDE1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKKworI2luY2x1ZGUgIkNvbG9y
LmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKKyNlbHNlCisj
aW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIlBsYXRmb3JtSW1h
Z2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZyYW1lRGF0YTo6SW1hZ2VGcmFt
ZURhdGEoKQoreworfQorCitJbWFnZUZyYW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEoTmF0aXZlSW1h
Z2VQdHImJiBpbWFnZSkKKyAgICA6IG1fc3RhdHVzKERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSkK
KyAgICAsIG1faW1hZ2UoV1RGTW92ZShpbWFnZSkpCit7CisgICAgbV9zaXplID0gUGxhdGZvcm1J
bWFnZShtX2ltYWdlKS5zaXplKCk7CisgICAgbV9oYXNBbHBoYSA9IFBsYXRmb3JtSW1hZ2UobV9p
bWFnZSkuaGFzQWxwaGEoKTsKK30KKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKElt
YWdlRGVjb2RlciYgZGVjb2Rlciwgc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWwsIENhY2hpbmcgZnJhbWVDYWNoaW5nKQoreworICAgIEFTU0VSVChmcmFtZUNh
Y2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhQW5kSW1hZ2UpOworICAgIAorICAgIGlmIChmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6
SW1hZ2UgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpIHsKKyAg
ICAgICAgbV9pbWFnZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1
YnNhbXBsaW5nTGV2ZWwpOworICAgICAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBzdWJzYW1wbGlu
Z0xldmVsOworICAgIH0KKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKSB7Cisg
ICAgICAgIG1fb3JpZW50YXRpb24gPSBkZWNvZGVyLm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7
CisgICAgICAgIG1fc3RhdHVzID0gZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4
KSA/IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSA6IERlY29kaW5nU3RhdHVzOjpQYXJ0aWFsOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGRlY29kZXIucmVwZXRpdGlvbkNvdW50KCkgIT0gY0FuaW1h
dGlvbk5vbmUpCisgICAgICAgICAgICBtX2R1cmF0aW9uID0gZGVjb2Rlci5mcmFtZUR1cmF0aW9u
QXRJbmRleChpbmRleCk7CisgICAgICAgIAorICAgICAgICBtX2hhc0FscGhhID0gZGVjb2Rlci5m
cmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CisgICAgICAgIG1fc2l6ZSA9IGRlY29kZXIuZnJh
bWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgfQorfQorICAgIAor
SW1hZ2VGcmFtZURhdGE6On5JbWFnZUZyYW1lRGF0YSgpCit7CisgICAgY2xlYXJTdWJJbWFnZXMo
KTsKK30KKyAgICAKK0ltYWdlRnJhbWVEYXRhJiBJbWFnZUZyYW1lRGF0YTo6b3BlcmF0b3I9KGNv
bnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisg
ICAgICAgIHJldHVybiAqdGhpczsKKworICAgIG1fc3RhdHVzID0gb3RoZXIubV9zdGF0dXM7Cisg
ICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOwor
ICAgIAorICAgIG1fcGl4ZWxzID0gb3RoZXIucGl4ZWxzKCkgPyBCaXRtYXBQaXhlbHM6OmNyZWF0
ZSgqb3RoZXIucGl4ZWxzKCkpIDogbnVsbHB0cjsKKyAgICAKKyAgICBtX29yaWVudGF0aW9uID0g
b3RoZXIubV9vcmllbnRhdGlvbjsKKyAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5tX3N1
YnNhbXBsaW5nTGV2ZWw7CisgICAgbV9kdXJhdGlvbiA9IG90aGVyLm1fZHVyYXRpb247CisgICAg
bV9oYXNBbHBoYSA9IG90aGVyLm1faGFzQWxwaGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2
b2lkIEltYWdlRnJhbWVEYXRhOjpjbGVhclN1YkltYWdlcygpCit7CisgICAgaWYgKCFtX2ltYWdl
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5jbGVh
clN1YkltYWdlcygpOworfQorCit1bnNpZ25lZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXIoQ2FjaGlu
ZyBmcmFtZUNhY2hpbmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpF
bXB0eSB8fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEpOworICAgIAorICAgIHVu
c2lnbmVkIGZyYW1lQnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisgICAgCisgICAgY2xlYXJT
dWJJbWFnZXMoKTsKKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkVtcHR5
KQorICAgICAgICAqdGhpcyA9IEltYWdlRnJhbWVEYXRhKCk7CisgICAgZWxzZQorICAgICAgICBt
X2ltYWdlID0gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gZnJhbWVCeXRlczsKK30KKworYm9v
bCBJbWFnZUZyYW1lRGF0YTo6aW5pdFBpeGVscyhjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEpCit7CisgICAgQVNTRVJUKCFoYXNQaXhlbHMoKSAmJiBtX3NpemUuaXNF
bXB0eSgpKTsKKyAgICBtX3BpeGVscyA9ICFzaXplLmlzRW1wdHkoKSA/IEJpdG1hcFBpeGVsczo6
Y3JlYXRlKHNpemUsIHByZW11bHRpcGx5QWxwaGEpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaGFz
UGl4ZWxzKCk7Cit9CisgICAgCitib29sIEltYWdlRnJhbWVEYXRhOjpjb3B5UGl4ZWxzKGNvbnN0
IEltYWdlRnJhbWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgbV9waXhlbHMgPSBvdGhlci5oYXNQaXhlbHMoKSA/IEJp
dG1hcFBpeGVsczo6Y3JlYXRlKCpvdGhlci5tX3BpeGVscy5nZXQoKSkgOiBudWxscHRyOworICAg
IHJldHVybiBoYXNQaXhlbHMoKSA9PSBvdGhlci5oYXNQaXhlbHMoKTsKK30KKyAgICAKK0NvbG9y
IEltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIGlm
ICghaGFzSW1hZ2UoKSB8fCBtX3NpemUgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJu
IENvbG9yKCk7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuc2luZ2xl
UGl4ZWxTb2xpZENvbG9yKCk7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29s
aWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJbWFnZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuaXNBbG1vc3RT
b2xpZENvbG9yKCk7Cit9CisgICAgCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMDhkNDhiZmQzZTFhNjZjOTE4
MTA2YjEyMGM0NzMyNzUyOTdmYjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApAQCAtMCwwICsxLDExNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24u
aCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEltYWdlRGVjb2RlcjsK
KworLy8gU3Vic2FtcGxpbmdMZXZlbC4gMCBpcyBubyBzdWJzYW1wbGluZywgMSBpcyBoYWxmIGRp
bWVuc2lvbnMgb24gZWFjaCBheGlzIGV0Yy4KK3VzaW5nIFN1YnNhbXBsaW5nTGV2ZWwgPSB1aW50
OF90OworCitlbnVtIDogU3Vic2FtcGxpbmdMZXZlbCB7CisgICAgTWluU3Vic2FtcGxpbmdMZXZl
bCA9IDAsCisgICAgTWF4U3Vic2FtcGxpbmdMZXZlbCA9IDMsCisgICAgRGVmYXVsdFN1YnNhbXBs
aW5nTGV2ZWwgPSBNaW5TdWJzYW1wbGluZ0xldmVsCit9OworCitjbGFzcyBJbWFnZUZyYW1lRGF0
YSB7CisgICAgZnJpZW5kIGNsYXNzIEltYWdlRGVjb2RlcjsKK3B1YmxpYzoKKyAgICBlbnVtIGNs
YXNzIENhY2hpbmcgeyBFbXB0eSwgTWV0YWRhdGEsIEltYWdlLCBNZXRhZGF0YUFuZEltYWdlIH07
CisgICAgZW51bSBjbGFzcyBEZWNvZGluZ1N0YXR1cyB7IEVtcHR5LCBQYXJ0aWFsLCBDb21wbGV0
ZSB9OworICAgIGVudW0gY2xhc3MgRGlzcG9zYWxNZXRob2QgeyBOb3RTcGVjaWZpZWQsIEtlZXAs
IE92ZXJ3cml0ZUJnY29sb3IsIE92ZXJ3cml0ZVByZXZpb3VzIH07CisKKyAgICBJbWFnZUZyYW1l
RGF0YSgpOworICAgIEltYWdlRnJhbWVEYXRhKE5hdGl2ZUltYWdlUHRyJiYpOworICAgIEltYWdl
RnJhbWVEYXRhKEltYWdlRGVjb2RlciYsIHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCA9
IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBDYWNoaW5nID0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJ
bWFnZSk7CisgICAgSW1hZ2VGcmFtZURhdGEoY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKSB7
IG9wZXJhdG9yPShvdGhlcik7IH0KKworICAgIH5JbWFnZUZyYW1lRGF0YSgpOworCisgICAgSW1h
Z2VGcmFtZURhdGEmIG9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpOworICAg
IAorICAgIHVuc2lnbmVkIGNsZWFyKENhY2hpbmcpOworCisgICAgdm9pZCBzZXREaXNwb3NhbE1l
dGhvZChEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0g
ZGlzcG9zYWxNZXRob2Q7IH0KKyAgICBEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KKworICAgIHZvaWQgc2V0U3RhdHVzKERl
Y29kaW5nU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorICAgIERlY29kaW5n
U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkVtcHR5OyB9
CisgICAgYm9vbCBpc1BhcnRpYWwoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1cyA9PSBEZWNvZGlu
Z1N0YXR1czo6UGFydGlhbDsgfQorICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZTsgfQorCisgICAgYm9vbCBpbml0
UGl4ZWxzKGNvbnN0IEludFNpemUmLCBib29sIHByZW11bHRpcGx5QWxwaGEpOworICAgIGJvb2wg
Y29weVBpeGVscyhjb25zdCBJbWFnZUZyYW1lRGF0YSYpOworICAgIHZvaWQgY2xlYXJQaXhlbHMo
KSB7IG1fcGl4ZWxzID0gbnVsbHB0cjsgfQorCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gaGFzUGl4ZWxzKCkgPyBwaXhlbHMoKS0+c2l6ZSgpIDogbV9zaXplOyB9CisgICAgdW5z
aWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc0ltYWdlKCkgPyBtX3NpemUuYXJl
YSgpICogc2l6ZW9mKFJHQkEzMikgOiAwOyB9CisgICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1w
bGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzYW1wbGluZ0xldmVsOyB9CisKKyAgICB2
b2lkIHNldE9yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmll
bnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9OworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRp
b24oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9CisKKyAgICB2b2lkIHNldER1cmF0
aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQorICAgIGZs
b2F0IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQorCisgICAgdm9pZCBz
ZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxwaGEgPSBoYXNBbHBoYTsgfQorICAg
IGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9CisKKyAgICBOYXRp
dmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAgICBCaXRtYXBQ
aXhlbHMqIHBpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkg
OiBudWxscHRyOyB9CisKKyAgICBib29sIGhhc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZTsgfQorICAgIGJvb2wgaGFzTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAhbV9zaXplLmlzRW1w
dHkoKTsgfQorICAgIGJvb2wgaGFzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gcGl4ZWxzKCk7IH0K
KworICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OworICAgIGJvb2wgaXNB
bG1vc3RTb2xpZENvbG9yKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjbGVhclN1Yklt
YWdlcygpOworCisgICAgRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZCB7IERpc3Bvc2Fs
TWV0aG9kOjpOb3RTcGVjaWZpZWQgfTsKKyAgICBEZWNvZGluZ1N0YXR1cyBtX3N0YXR1cyB7IERl
Y29kaW5nU3RhdHVzOjpFbXB0eSB9OworICAgIEludFNpemUgbV9zaXplOworICAgIE5hdGl2ZUlt
YWdlUHRyIG1faW1hZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9waXhl
bHM7CisKKyAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBEZWZhdWx0SW1hZ2VP
cmllbnRhdGlvbiB9OworICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsg
MCB9OworICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07CisgICAgYm9vbCBtX2hhc0FscGhhIHsg
dHJ1ZSB9OworfTsKKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmNwcAppbmRleCBkZGQ4YTU1YmEwOTA2YzU4NjZhMTkyY2Y4ZTQxNGVh
NzA3YjcyOGFjLi44MmY2ZTJkNmU0NTQzM2RhMWE3ZDU2YjM3MGRmYTYxYTRjNDE5MTM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBA
IC0yMjQsNiArMjI0LDExIEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFt
ZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2CiAgICAgcmV0dXJuIGlu
aXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBz
dWJzYW1wbGluZ0xldmVsKSA6IG51bGxwdHI7CiB9CiAKK0ltYWdlRnJhbWVEYXRhIEltYWdlU291
cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZl
bCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5nKQorewor
ICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gSW1hZ2VGcmFtZURhdGEoKm1fZGVjb2RlciwgaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIGNhY2hpbmcpIDogSW1hZ2VGcmFtZURhdGEoKTsKK30KKyAg
ICAKIHZvaWQgSW1hZ2VTb3VyY2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiB7CiAgICAg
aWYgKG1fYWxsb3dTdWJzYW1wbGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDYwMzU3MzliN2U4YjA5NmRjOGRmZTljNTMwYTQyYzZm
MjkxYmRhMDAuLmE0MGM3Y2U5MzA3Y2RhZGYwNzlhYjcwMWE4Mjc5OWI2OTA1MjlkNDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtMjcs
NiArMjcsNyBAQAogI2lmbmRlZiBJbWFnZVNvdXJjZV9oCiAjZGVmaW5lIEltYWdlU291cmNlX2gK
IAorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlv
bi5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIK
QEAgLTYzLDkgKzY0LDYgQEAgY29uc3QgaW50IGNBbmltYXRpb25Mb29wT25jZSA9IDA7CiBjb25z
dCBpbnQgY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSA9IC0xOwogY29uc3QgaW50IGNBbmltYXRpb25O
b25lID0gLTI7CiAKLS8vIFN1YnNhbXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEg
aXMgaGFsZiBkaW1lbnNpb25zIG9uIGVhY2ggYXhpcyBldGMuCi10eXBlZGVmIHNob3J0IFN1YnNh
bXBsaW5nTGV2ZWw7Ci0KIGNsYXNzIEltYWdlU291cmNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbWFnZVNvdXJjZSk7CiAgICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwpAQCAtMTMy
LDE4ICsxMzAsMTkgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09mRnJhbWVB
dEluZGV4KHNpemVfdCkgY29uc3Q7CiAgICAgCiAgICAgLy8gU2l6ZSBvZiBvcHRpb25hbGx5IHN1
YnNhbXBsZWQgZnJhbWUuCi0gICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vi
c2FtcGxpbmdMZXZlbCA9IDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSA9IERvTm90UmVz
cGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRl
eChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCwgUmVz
cGVjdEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikg
Y29uc3Q7CiAgICAgCiAgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRl
Y29kZWQgZnJhbWUuIElmIHRoZSBmcmFtZSBpcyBub3QgeWV0CiAgICAgLy8gZGVjb2RlZCB0aGVu
IHJldHVybiAwLgotICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCwgU3Vic2Ft
cGxpbmdMZXZlbCA9IDApIGNvbnN0OworICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNp
emVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsKSBjb25zdDsK
ICAgICAKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpOwogICAgIEltYWdl
T3JpZW50YXRpb24gb3JpZW50YXRpb25BdEluZGV4KHNpemVfdCkgY29uc3Q7IC8vIEVYSUYgaW1h
Z2Ugb3JpZW50YXRpb24KICAgICAKICAgICAvLyBDYWxsZXJzIHNob3VsZCBub3QgY2FsbCB0aGlz
IGFmdGVyIGNhbGxpbmcgY2xlYXIoKSB3aXRoIGEgaGlnaGVyIGluZGV4OwogICAgIC8vIHNlZSBj
b21tZW50cyBvbiBjbGVhcigpIGFib3ZlLgotICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDApOworICAgIE5hdGl2ZUlt
YWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9
IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsKTsKKyAgICBJbWFnZUZyYW1lRGF0YSBjcmVhdGVGcmFt
ZURhdGFBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGlu
Z0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5n
OjpNZXRhZGF0YUFuZEltYWdlKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckZyYW1l
QnVmZmVyQ2FjaGUoc2l6ZV90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjdhZWE0ODlmM2ViMmE4Mjg3NzFjMjEw
M2U4ZDRkMGJlMTdiZTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2lu
Y2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q29sb3I7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgR3JhcGhpY3ND
b250ZXh0OworCitjbGFzcyBQbGF0Zm9ybUltYWdlIHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybUlt
YWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKKyAgICAgICAgOiBtX2ltYWdlKGltYWdl
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzTmlsKCkgY29uc3QgeyByZXR1cm4gIW1faW1h
Z2U7IH0KKyAgICB2b2lkIGNsZWFyU3ViSW1hZ2VzKCk7CisKKyAgICBJbnRTaXplIHNpemUoKSBj
b25zdDsKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxT
b2xpZENvbG9yKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsK
KyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJikgY29uc3Q7
CisKKyAgICBzdGF0aWMgZmxvYXQgc3Vic2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpOworCitw
cml2YXRlOgorI2lmIFVTRShDRykKKyAgICBDR0ltYWdlUmVmIGNnSW1hZ2VSZWYoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS5nZXQoKSA6IG51bGxwdHI7IH0KKyNlbmRpZgorICAg
IE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMu
bW0KaW5kZXggZjRjMTQ1N2JiYjI1NTc1NGYwMGEwNjI1ZWU4M2UwNGRhN2M2ZWZjZi4uZDUyMGY1
ZDU4NWFjNjBkYmFlZTI1NWUxYjgzYzI0ZGM2ODcyMTBhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQy5tbQpAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSgpCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1h
Z2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1h
Z2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIW1fcGF1c2VkSW1hZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgbV9kaXNwbGF5TW9k
ZSA9IFBhaW50SXRCbGFjazsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNh
aXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcElt
YWdlQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzcyMmJlYzUzYWI4
YTA4YThkYTg1MjhiOWUwZDdjNGQwY2Q0MTM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLQotI2lmIFVTRShDQUlSTykKLQot
I2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNp
bmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBOYXRp
dmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYg
aW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZVNpemUoaW1hZ2UuZ2V0KCkpOwotfQot
Ci1ib29sIGhhc0FscGhhKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsK
LSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChpbWFnZS5nZXQoKSkgIT0gQ0FJ
Uk9fQ09OVEVOVF9DT0xPUjsKLX0KLQotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwot
ICAgIAotICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSkgIT0gSW50U2l6ZSgxLCAxKSkK
LSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlw
ZShpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1
cm4gQ29sb3IoKTsKLQotICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0cjxS
R0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAg
cmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Ci19Ci0KLX0KLQotdm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsCi0g
ICAgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2Ny
aXB0aW9uKQotewotICAgIGlmICghZHN0LndpZHRoKCkgfHwgIWRzdC5oZWlnaHQoKSB8fCAhc3Jj
LndpZHRoKCkgfHwgIXNyYy5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhcnRB
bmltYXRpb24oKTsKLQotICAgIGF1dG8gc3VyZmFjZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3Vy
cmVudEZyYW1lKTsKLSAgICBpZiAoIXN1cmZhY2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdv
bid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0KLSAgICBDb2xvciBjb2xv
ciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdCwgY29sb3IsIG9wKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRleHQuc2F2ZSgpOwotCi0gICAgLy8gU2V0
IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCi0gICAgaWYgKG9wID09IENvbXBvc2l0ZVNvdXJj
ZU92ZXIgJiYgYmxlbmRNb2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAhZnJhbWVIYXNBbHBoYUF0
SW5kZXgobV9jdXJyZW50RnJhbWUpKQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJf
RE9XTl9TQU1QTElORykKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1cmZhY2VTaXpl
KHN1cmZhY2UuZ2V0KCkpOwotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1c3RT
b3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyYywgc2NhbGVkU2l6ZSk7Ci0jZWxzZQotICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qoc3JjKTsKLSNlbmRpZgotCi0gICAgSW1hZ2VPcmllbnRh
dGlvbiBmcmFtZU9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7Ci0g
ICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdElt
YWdlT3JpZW50YXRpb24pCi0gICAgICAgIGZyYW1lT3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0
aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBGbG9hdFJlY3QgZHN0UmVjdCA9IGRz
dDsKLQotICAgIGlmIChmcmFtZU9yaWVudGF0aW9uICE9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9u
KSB7Ci0gICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJl
IGF0ICgwLCAwKS4KLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC54KCksIGRzdFJl
Y3QueSgpKTsKLSAgICAgICAgZHN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwotICAg
ICAgICBjb250ZXh0LmNvbmNhdENUTShmcmFtZU9yaWVudGF0aW9uLnRyYW5zZm9ybUZyb21EZWZh
dWx0KGRzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChmcmFtZU9yaWVudGF0aW9uLnVzZXNX
aWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0YW5n
bGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0
aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5l
ZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUu
Ci0gICAgICAgICAgICBkc3RSZWN0ID0gRmxvYXRSZWN0KGRzdFJlY3QueCgpLCBkc3RSZWN0Lnko
KSwgZHN0UmVjdC5oZWlnaHQoKSwgZHN0UmVjdC53aWR0aCgpKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KHN1
cmZhY2UuZ2V0KCksIGRzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7Ci0KLSAgICBj
b250ZXh0LnJlc3RvcmUoKTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGlt
YWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFy
KGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAg
bV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIG1f
aW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJ
Uk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGFkYWVjMjcwZTMxYjA1
NGFmYzVmNjZkNDgyODhhZWJmMDYxZTNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApAQCAtMCww
ICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYg
VVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7Cit9CisKK0lu
dFNpemUgUGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkg
PyBJbnRTaXplKCkgOiBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2UuZ2V0KCkpOworfQorCitib29s
IFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSB8
fCBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1faW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRF
TlRfQ09MT1I7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xv
cigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgpICE9IEludFNpemUoMSwgMSkp
CisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5
cGUobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQorICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKKworICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0
cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1faW1hZ2UuZ2V0KCkpKTsK
KyAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKK30KKworYm9v
bCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmKQoreworICAg
IHJldHVybiAxOworfQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1v
ZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIGNv
bnRleHQuc2F2ZSgpOworICAgIAorICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9u
LgorICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIG1vZGUgPT0gQmxlbmRNb2Rl
Tm9ybWFsICYmICFoYXNBbHBoYSgpKQorICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG9wLCBtb2RlKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKElNQUdFX0RFQ09E
RVJfRE9XTl9TQU1QTElORykKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1cmZhY2VT
aXplKG1faW1hZ2UuZ2V0KCkpOworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1
c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyY1JlY3QsIHNjYWxlZFNpemUpOworI2Vsc2UK
KyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyY1JlY3QpOworI2VuZGlmCisgICAgICAg
IAorICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisgICAgICAgIAor
ICAgIGlmIChvcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgeworICAgICAg
ICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCku
CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpKTsK
KyAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOworICAg
ICAgICBjb250ZXh0LmNvbmNhdENUTShvcmllbnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChh
ZGp1c3RlZERlc3RSZWN0LnNpemUoKSkpOworICAgICAgICBpZiAob3JpZW50YXRpb24udXNlc1dp
ZHRoQXNIZWlnaHQoKSkgeworICAgICAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3Rhbmds
ZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRo
ZSBvcmllbnRhdGlvbiBvZgorICAgICAgICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVl
ZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4K
KyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShhZGp1c3RlZERlc3RSZWN0LnNp
emUoKS50cmFuc3Bvc2VkU2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KG1faW1hZ2UuZ2V0KCksIGFk
anVzdGVkRGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7CisKKyAgICBjb250ZXh0
LnJlc3RvcmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9C
aXRtYXBJbWFnZUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNjODFhMTcw
YmU3OWFlNmJlNmNhY2RjOTlmNGMzOThjYWFmNDI2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9CaXRtYXBJbWFnZUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotCi0jaWYgVVNFKENH
KQotCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJz
aW9uLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJTdWJp
bWFnZUNhY2hlV2l0aFRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0jaWYg
VVNFKEFQUEtJVCkKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vy
dmljZXMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVk
ZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50
U2l6ZSBzaXplKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNT
RVJUKGltYWdlKTsKLSAgICByZXR1cm4gSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0
KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEo
Y29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JikKLXsKLSAgICAvLyBGSVhNRTogQW5zd2VyIGNv
cnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFu
bm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLUNvbG9yIHNpbmdsZVBpeGVsU29saWRD
b2xvcihjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQotewotICAgIEFTU0VSVChp
bWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdlOjpzaXplKGltYWdlKSAhPSBJbnRTaXpl
KDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBjaGFy
IHBpeGVsWzRdOyAvLyBSR0JBCi0gICAgYXV0byBiaXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIHNSR0JDb2xv
clNwYWNlUmVmKCksCi0gICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtD
R0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0KLSAgICBpZiAoIWJpdG1hcENvbnRleHQpCi0gICAg
ICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRt
YXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICBDR0NvbnRleHREcmF3SW1h
Z2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwgaW1hZ2UuZ2V0
KCkpOwotICAgIAotICAgIGlmICghcGl4ZWxbM10pCi0gICAgICAgIHJldHVybiBDb2xvcigwLCAw
LCAwLCAwKTsKLQotICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBw
aXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhl
bFszXSk7Ci19Ci0KLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0
YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBm
YWxzZTsKLQotICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7Ci0KLSAgICBpZiAobV9pbWFnZSkg
ewotI2lmIENBQ0hFX1NVQklNQUdFUwotICAgICAgICBzdWJpbWFnZUNhY2hlKCkuY2xlYXJJbWFn
ZShtX2ltYWdlLmdldCgpKTsKLSNlbmRpZgotICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQ0dJbWFn
ZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCi17Ci0gICAgcmV0dXJuIGZyYW1lSW1h
Z2VBdEluZGV4KDApLmdldCgpOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRGaXJz
dENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBzaXplX3QgY291
bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdl
dCgpOwotICAgICAgICBpZiAoY2dJbWFnZSAmJiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0lt
YWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKSkgPT0gc2l6ZSkKLSAgICAgICAgICAgIHJl
dHVybiBjZ0ltYWdlOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IENH
SW1hZ2VSZWYgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQotICAgIHJldHVybiBnZXRD
R0ltYWdlUmVmKCk7Ci19Ci0KLVJldGFpblB0cjxDRkFycmF5UmVmPiBCaXRtYXBJbWFnZTo6Z2V0
Q0dJbWFnZUFycmF5KCkKLXsKLSAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAg
aWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgQ0ZNdXRhYmxl
QXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShOVUxMLCBjb3VudCwgJmtDRlR5
cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIGlmIChDR0ltYWdlUmVmIGN1cnJGcmFtZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KGkpLmdldCgpKQotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LCBjdXJyRnJh
bWUpOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihhcnJheSk7Ci19Ci0KLXZvaWQgQml0bWFw
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVz
Y3JpcHRpb24pCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXJ0QW5pbWF0aW9uKERvTm90
Q2F0Y2hVcCk7Ci0jZWxzZQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0jZW5kaWYKLQotICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBp
bWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCi0gICAgaWYgKHdrQ0dDb250ZXh0
SXNQREZDb250ZXh0KGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKQotICAgICAgICBpbWFnZSA9IGNv
cHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlB
ZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShjdHh0LnBsYXRmb3JtQ29u
dGV4dCgpKSk7Ci0gICAgICAgIGZsb2F0IHN1YnNhbXBsaW5nU2NhbGUgPSBzdGQ6Om1pbjxmbG9h
dD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNy
Y1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBz
cmNSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAgICAgaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleCht
X2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2FsZSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFn
ZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBDb2xvciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xv
cigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENv
bG9yKGN0eHQsIGRlc3RSZWN0LCBjb2xvciwgY29tcG9zaXRlT3ApOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gU3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2Ug
dGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgotICAgIEludFNpemUgaW1hZ2VTaXplKENHSW1h
Z2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKTsK
LSAgICAKLSAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJz
YW1wbGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFn
ZS4KLSAgICBGbG9hdFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgaWYgKGltYWdl
U2l6ZSAhPSBtX3NpemUpIHsKLSAgICAgICAgRmxvYXRSZWN0IG9yaWdpbmFsSW1hZ2VCb3VuZHMo
RmxvYXRQb2ludCgpLCBtX3NpemUpOwotICAgICAgICBGbG9hdFJlY3Qgc3Vic2FtcGxlZEltYWdl
Qm91bmRzKEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKTsKLSAgICAgICAgc2NhbGVkU3JjUmVjdCA9
IG1hcFJlY3Qoc3JjUmVjdCwgb3JpZ2luYWxJbWFnZUJvdW5kcywgc3Vic2FtcGxlZEltYWdlQm91
bmRzKTsKLSAgICB9Ci0gICAgCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAg
ICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbikKLSAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJ
bmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBjdHh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc2NhbGVkU3JjUmVjdCwgY29tcG9zaXRlT3AsIGJsZW5kTW9k
ZSwgb3JpZW50YXRpb24pOwotCi0gICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1h
Z2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkK
LXsKLSAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4
XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwKTsKLQotICAgIGlmICghbV9m
cmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVz
W2luZGV4XS5tX2ltYWdlOwotCi0gICAgcmV0dXJuIG1fc291cmNlLmNyZWF0ZUZyYW1lSW1hZ2VB
dEluZGV4KGluZGV4KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKaW5kZXggYjQyOGQ1
MGQ5NGJmOTI0MjgwMzI4N2QyZWVjMTZiZDY5YzUyOGQ5Mi4uM2RhYTEzOWFiN2VhNWI0MjE1Nzc4
ODM1ZDM1M2Q4YWRiNWYwYzc1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC03Miw3ICs3Miw3IEBAIENHUGF0dGVyblJlZiBQ
YXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2Vy
U3BhY2VUcmFuCiAgICAgLy8gSWYgd2UncmUgcmVwZWF0aW5nIGluIGJvdGggZGlyZWN0aW9ucywg
d2UgY2FuIHVzZSBpbWFnZS1iYWNrZWQgcGF0dGVybnMKICAgICAvLyBpbnN0ZWFkIG9mIGN1c3Rv
bSBwYXR0ZXJucywgYW5kIGF2b2lkIHRpbGluZy1lZGdlIHBpeGVsIGNyYWNrcy4KICAgICBpZiAo
bV9yZXBlYXRYICYmIG1fcmVwZWF0WSkKLSAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRl
V2l0aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCksIHBhdHRl
cm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZyk7CisgICAgICAgIHJl
dHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSh0aWxlSW1hZ2UoKS0+
bmF0aXZlSW1hZ2UoKS5nZXQoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGlsaW5nQ29u
c3RhbnRTcGFjaW5nKTsKIAogICAgIC8vIElmIEZMVF9NQVggc2hvdWxkIGFsc28gYmUgdXNlZCBm
b3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMgcmVuZGVyZWQuIFVzaW5nIGZyYWN0aW9ucyBv
ZiBGTFRfTUFYIGFsc28KICAgICAvLyByZXN1bHQgaW4gbm90aGluZyBiZWluZyByZW5kZXJlZC4K
QEAgLTgzLDcgKzgzLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICBDR0Zsb2F0IHlT
dGVwID0gbV9yZXBlYXRZID8gdGlsZVJlY3QuaGVpZ2h0KCkgOiAoMSA8PCAyMik7CiAKICAgICAv
LyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhlIENHSW1hZ2VSZWYgd2hlbiBpdCdzIGRvbmUg
cmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKLSAgICBDR0ltYWdlUmVmIHBsYXRm
b3JtSW1hZ2UgPSBDR0ltYWdlUmV0YWluKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkpOwor
ICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgp
LmxlYWtSZWYoKTsKIAogICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0ZXJuQ2FsbGJh
Y2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sgfTsKICAg
ICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRmb3JtSW1hZ2UsIHRpbGVSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCB4U3RlcCwgeVN0ZXAsIGtDR1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcs
IFRSVUUsICZwYXR0ZXJuQ2FsbGJhY2tzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmYjJk
ZTBlYTEyZGEyMTRmMTA0NmMzOTYyZThlYWI1M2M2NDQxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCkBA
IC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKwor
I2lmIFVTRShDRykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29yZUdyYXBoaWNz
U1BJLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkludFNpemUu
aCIKKyNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCisKKyNpZiBQTEFURk9STShX
SU4pCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3ZvaWQgUGxhdGZvcm1J
bWFnZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworI2lmIENBQ0hFX1NVQklNQUdFUworICAgIGlmICgh
aXNOaWwoKSkKKyAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UoY2dJbWFnZVJlZigp
KTsKKyNlbmRpZgorfQorCitJbnRTaXplIFBsYXRmb3JtSW1hZ2U6OnNpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgo
Y2dJbWFnZVJlZigpKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlUmVmKCkpKTsKK30KKworYm9v
bCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEFuc3dl
ciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEg
Y2hhbm5uZWw/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNp
bmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgp
ICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAorICAgIHVu
c2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKKyAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVs
KSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKKyAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKKyAgICAKKyAgICBpZiAoIWJpdG1h
cENvbnRleHQpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAorICAgIENHQ29udGV4dFNl
dEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBD
R0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAx
LCAxKSwgY2dJbWFnZVJlZigpKTsKKyAgICAKKyAgICBpZiAoIXBpeGVsWzNdKQorICAgICAgICBy
ZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgCisgICAgcmV0dXJuIENvbG9yKHBpeGVsWzBd
ICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICog
MjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKK30KKyAgICAKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6
aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBDR0ltYWdlUmVmIGltYWdlID0gY2dJ
bWFnZVJlZigpOworICAgIEFTU0VSVChDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkg
PT0gOCk7CisgICAgCisgICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5mbyA9IENHSW1hZ2VHZXRCaXRt
YXBJbmZvKGltYWdlKTsKKyAgICBpZiAoIShpbWFnZUluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXIz
MkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhhSW5mb01hc2spICE9IGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKKyAgICAgICAgLy8gRklYTUU6IENvbnNpZGVy
IGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1hdHMuCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IHNpemVfdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7CisgICAgc2l6ZV90IGhlaWdo
dCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENH
SW1hZ2VHZXRCeXRlc1BlclJvdyhpbWFnZSk7CisgICAgCisgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERh
dGFQcm92aWRlcihpbWFnZSkpKTsKKyAgICBjb25zdCBVSW50OCogZGF0YSA9IENGRGF0YUdldEJ5
dGVQdHIocHJvdmlkZXIuZ2V0KCkpOworICAgIAorICAgIC8vIE92ZXJsYXkgYSBncmlkIG9mIHNh
bXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24gb2YgdGhlIGltYWdlLgor
ICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2Ug
aW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKKyAgICAvLyBhbmQgaXRzIHN1cnJv
dW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCisgICAgY29uc3QgdW5zaWduZWQg
c2FtcGxlUm93cyA9IDc7CisgICAgY29uc3QgdW5zaWduZWQgc2FtcGxlQ29scyA9IDc7CisgICAg
Ly8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1wbGVzLCBhbmQgYWNjb21t
b2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCisgICAgaWYgKHdpZHRoIDwgc2FtcGxlQ29s
cyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGxhc3Qgcm93L2NvbHVtbiBsYW5kIG9uIHRoZSBpbWFnZSBw
ZXJpbWV0ZXIuCisgICAgY29uc3QgZmxvYXQgc3RyaWRlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9h
dD4od2lkdGggLSAxKSAvIChzYW1wbGVDb2xzIC0gMSk7CisgICAgY29uc3QgZmxvYXQgc3RyaWRl
SGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCAtIDEpIC8gKHNhbXBsZVJvd3MgLSAx
KTsKKyAgICBmbG9hdCBzYW1wbGVzW3NhbXBsZVJvd3NdW3NhbXBsZUNvbHNdOworICAgIAorICAg
IC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KKyAgICBmbG9hdCB5
ID0gMDsKKyAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7CisgICAgICAgIGZsb2F0IHggPSAwOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7CisgICAgICAgICAg
ICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAqIDQ7
CisgICAgICAgICAgICAvLyBSIEcgQiBBCisgICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0gKDAu
MjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoocDAr
MykgLyAyNTU7CisgICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOworICAgICAgICB9CisgICAg
ICAgIHkgKz0gc3RyaWRlSGVpZ2h0OworICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19jYXN0
PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKKyAgICB9CisgICAgCisgICAgLy8gRGV0ZXJt
aW5lIHRoZSBpbWFnZSBzY29yZS4KKyAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikgeworICAgICAgICAgICAg
ZmxvYXQgZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0gKyBzYW1w
bGVzW2ldW2ogLSAxXSArIHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1bal07Cisg
ICAgICAgICAgICBhY2N1bVNjb3JlICs9IGRpZmYgKiBkaWZmOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIC8vIFRoZSBzY29yZSBmb3IgYSBnaXZlbiBzYW1wbGUgY2FuIGJlIHdpdGhpbiB0
aGUgcmFuZ2Ugb2YgMCBhbmQgMjU1XjIuCisgICAgcmV0dXJuIGFjY3VtU2NvcmUgPCAyNTAwICog
KHNhbXBsZVJvd3MgLSAyKSAqIChzYW1wbGVDb2xzIC0gMik7Cit9CisKK2Zsb2F0IFBsYXRmb3Jt
SW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpCit7CisgICAgLy8g
TmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRz
LgorICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgCisgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVz
dGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29u
dGV4dEdldENUTShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgcmV0dXJuIHN0ZDo6
bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLndp
ZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLmhl
aWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBQbGF0Zm9ybUltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVu
dGF0aW9uKSBjb25zdAoreworICAgIC8vIFN1YnNhbXBsaW5nIG1heSBoYXZlIGdpdmVuIHVzIGFu
IGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KKyAgICBJbnRTaXplIHN1YnNhbXBs
ZWRJbWFnZVNpemUgPSBzaXplKCk7CisgICAgCisgICAgLy8gc3JjUmVjdCBpcyBpbiB0aGUgY29v
cmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28gd2UgaGF2ZSB0byBtYXAgaXQg
dG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9
IHNyY1JlY3Q7CisgICAgaWYgKHN1YnNhbXBsZWRJbWFnZVNpemUgIT0gc3JjU2l6ZSkKKyAgICAg
ICAgYWRqdXN0ZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBGbG9hdFJlY3QoeyB9LCBzcmNT
aXplKSwgRmxvYXRSZWN0KHsgfSwgc3Vic2FtcGxlZEltYWdlU2l6ZSkpOworICAgIAorICAgIGNv
bnRleHQuZHJhd05hdGl2ZUltYWdlKG1faW1hZ2UsIHN1YnNhbXBsZWRJbWFnZVNpemUsIGRlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBtb2RlLCBvcmllbnRhdGlvbik7Cit9CisgICAgCit9
CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYS5tbQppbmRleCA4OTcyMGQxNzM2NWRhN2U4YmE4NDY5ZDUyOTQ1NDhkNTE4NDdhN2ZlLi40
NDc2ZmM1Zjg3YzM0OTg4ZjZkOWFkNTVlZWJkOGQxYjliYjAyMmU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KQEAgLTEyOSw3ICsxMjksNyBAQCBUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkNvY29hOjp+VGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYSgpCiB2
b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6OnVwZGF0ZSgpCiB7CiAgICAgaWYgKGF1
dG8gcmVwcmVzZW50YXRpb24gPSBtX2NsaWVudC5jcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkltYWdlKCkpCi0gICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzOihpZClyZXByZXNl
bnRhdGlvbi0+Z2V0Q0dJbWFnZVJlZigpXTsKKyAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29u
dGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5uYXRpdmVJbWFnZSgpLmdldCgpXTsKIH0KIAogdm9p
ZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjpzZXRDb250ZW50U2NhbGUoZmxvYXQgc2Nh
bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1h
Z2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMu
bW0KaW5kZXggMDFlYjZkZDMwMDQzYTIyNTI5MTc2ZmQ5MTIxMTdkYzU3NzZjMTdiYS4uZGMxYzdj
NzA5NWQ5NDRjNGM2MmYxZmUwOTM1NzAyYTEzYzdjN2E0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQpAQCAtODUsMzEgKzg1LDIyIEBA
IENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkKICAgICBpZiAo
bV90aWZmUmVwKQogICAgICAgICByZXR1cm4gbV90aWZmUmVwLmdldCgpOwogCi0gICAgdW5zaWdu
ZWQgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gdGhp
cy0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CiAKLSAgICAvLyBJZiBudW1GcmFtZXMgaXMgemVybywg
d2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNuJ3QgaGF2ZSB2YWxpZCBkYXRhCisg
ICAgLy8gSWYgZnJhbWVzSW1hZ2VzLnNpemUoKSBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWlu
IHRoaXMgaW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKICAgICAvLyBFdmVuIHRob3VnaCB0
aGUgY2FsbCB0byBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YSB3aWxsIGZhaWwgYW5k
IHdlJ2xsIGhhbmRsZSBpdCBncmFjZWZ1bGx5LAogICAgIC8vIGluIGNlcnRhaW4gY2lyY3Vtc3Rh
bmNlcyB0aGF0IGNhbGwgd2lsbCBzcGFtIHRoZSBjb25zb2xlIHdpdGggYW4gZXJyb3IgbWVzc2Fn
ZQotICAgIGlmICghbnVtRnJhbWVzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFZlY3RvcjxD
R0ltYWdlUmVmPiBpbWFnZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZyYW1l
czsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRl
eChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UpCi0gICAgICAgICAgICBpbWFnZXMuYXBw
ZW5kKGNnSW1hZ2UpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bVZhbGlkRnJhbWVzID0gaW1h
Z2VzLnNpemUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGRhdGEgPSBhZG9w
dENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotICAgIFJldGFpblB0cjxDR0ltYWdlRGVz
dGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVh
dGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbnVtVmFsaWRGcmFtZXMsIDApKTsK
KyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbiA9IGFkb3B0
Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5nZXQoKSwga1VUVHlwZVRJ
RkYsIG5hdGl2ZUltYWdlcy5zaXplKCksIDApKTsKIAogICAgIGlmICghZGVzdGluYXRpb24pCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1WYWxpZEZyYW1lczsgKytpKQotICAgICAgICBDR0ltYWdlRGVz
dGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2VzW2ldLCAwKTsKKyAgICBm
b3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAgICAgIENHSW1hZ2VEZXN0
aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBuYXRpdmVJbWFnZS5nZXQoKSwgMCk7
CiAKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuY3BwCmluZGV4IDIxNzUzYmQwNzhhMWM1NWMzMjcxOWMxNDg0NmYwZjZiOTk3NWY4
ZmQuLjFmZGJhYjNhYzg2YzM5NzYwMWEzNzUyN2I3ZTRjZDEzNjkyMzdkMjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcApAQCAtMTI4LDExICsxMjgsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBJ
bWFnZURlY29kZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYQogfQogCiBJ
bWFnZUZyYW1lOjpJbWFnZUZyYW1lKCkKLSAgICA6IG1faGFzQWxwaGEoZmFsc2UpCi0gICAgLCBt
X3N0YXR1cyhGcmFtZUVtcHR5KQotICAgICwgbV9kdXJhdGlvbigwKQotICAgICwgbV9kaXNwb3Nh
bE1ldGhvZChEaXNwb3NlTm90U3BlY2lmaWVkKQotICAgICwgbV9wcmVtdWx0aXBseUFscGhhKHRy
dWUpCiB7CiB9IAogCkBAIC0xNDEsOTMgKzEzNiwzMSBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1l
OjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgaWYgKHRoaXMgPT0gJm90
aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7
Ci0gICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7Cisg
ICAgY29weVBpeGVscyhvdGhlcik7CisgICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7
CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5k
dXJhdGlvbigpKTsKICAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgp
KTsKLSAgICBzZXRQcmVtdWx0aXBseUFscGhhKG90aGVyLnByZW11bHRpcGx5QWxwaGEoKSk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi12b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkK
LXsKLSAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgIG1fYnl0ZXMgPSAwOwotICAgIG1f
c3RhdHVzID0gRnJhbWVFbXB0eTsKLSAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVt
YmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCi0gICAgLy8gdG8g
ZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJhbWVC
dWZmZXIoKSBhbmQKLSAgICAvLyBmcmFtZUNvbXBsZXRlKCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVh
ZCBvdGhlciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZQotICAgIC8vIGxhdGVyLgotfQotCi12
b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKLXsKLSAgICBtZW1zZXQobV9ieXRl
cywgMCwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRh
KSk7Ci0gICAgbV9oYXNBbHBoYSA9IHRydWU7Ci19Ci0KLXZvaWQgSW1hZ2VGcmFtZTo6emVyb0Zp
bGxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlQoSW50UmVjdChJ
bnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpKTsKLQotICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSBy
ZWN0LndpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICBQaXhlbERhdGEqIHN0YXJ0ID0g
bV9ieXRlcyArIChyZWN0LnkoKSAqIHdpZHRoKCkpICsgcmVjdC54KCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKLSAgICAgICAgbWVtc2V0KHN0YXJ0LCAw
LCByZWN0V2lkdGhJbkJ5dGVzKTsKLSAgICAgICAgc3RhcnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0K
LSAgICBzZXRIYXNBbHBoYSh0cnVlKTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFw
RGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKK2Jvb2wgSW1hZ2VGcmFtZTo6Y29weVBpeGVs
cyhjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKIHsKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tp
bmdTdG9yZTsKLSAgICBtX2J5dGVzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwotICAgIG1fc2l6
ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0
aCwgaW50IG5ld0hlaWdodCkKLXsKLSAgICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgpKTsK
LSAgICBzaXplX3QgYmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVpZ2h0OwotICAg
IGlmICghbV9iYWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdTdG9yZVNpemUp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNraW5nU3RvcmUucmVzaXplKGJhY2tp
bmdTdG9yZVNpemUpOwotICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAg
bV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLQotICAgIHplcm9GaWxsUGl4
ZWxEYXRhKCk7CisgICAgaWYgKG90aGVyLm1fcGl4ZWxzKQorICAgICAgICBtX3BpeGVscyA9IEJp
dG1hcFBpeGVsczo6Y3JlYXRlKCpvdGhlci5tX3BpeGVscy5nZXQoKSk7CisgICAgZWxzZQorICAg
ICAgICBtX3BpeGVscyA9IG51bGxwdHI7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW1h
Z2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdAotewotICAgIHJldHVybiBtX2hhc0FscGhhOwotfQot
Ci12b2lkIEltYWdlRnJhbWU6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEpCi17Ci0gICAgbV9oYXNB
bHBoYSA9IGFscGhhOwotfQotCi12b2lkIEltYWdlRnJhbWU6OnNldENvbG9yUHJvZmlsZShjb25z
dCBDb2xvclByb2ZpbGUmIGNvbG9yUHJvZmlsZSkKLXsKLSAgICBtX2NvbG9yUHJvZmlsZSA9IGNv
bG9yUHJvZmlsZTsKLX0KLQotdm9pZCBJbWFnZUZyYW1lOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMg
c3RhdHVzKQorYm9vbCBJbWFnZUZyYW1lOjppbml0UGl4ZWxzKGNvbnN0IEludFNpemUmIHNpemUs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKLSAgICBtX3N0YXR1cyA9IHN0YXR1czsKKyAgICBB
U1NFUlQoIW1fcGl4ZWxzKTsKKyAgICBtX3BpeGVscyA9IEJpdG1hcFBpeGVsczo6Y3JlYXRlKHNp
emUsIHByZW11bHRpcGx5QWxwaGEpOworICAgIHJldHVybiBtX3BpeGVscyAhPSBudWxscHRyOwog
fQogCiBuYW1lc3BhY2UgewpAQCAtMjc0LDE0ICsyMDcsMTQgQEAgdGVtcGxhdGUgPE1hdGNoVHlw
ZSB0eXBlPiBpbnQgZ2V0U2NhbGVkVmFsdWUoY29uc3QgVmVjdG9yPGludD4mIHNjYWxlZFZhbHVl
cywgaW4KIGJvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBp
bmRleCkKIHsKICAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBmcmFtZUJ1ZmZlckF0SW5kZXgoaW5k
ZXgpOwotICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1l
OjpGcmFtZUNvbXBsZXRlOworICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5pc0NvbXBsZXRl
KCk7CiB9CiAKIGJvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPD0gaW5k
ZXgpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5k
ZXhdLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCisgICAgaWYgKG1fZnJh
bWVCdWZmZXJDYWNoZVtpbmRleF0uaXNDb21wbGV0ZSgpKQogICAgICAgICByZXR1cm4gbV9mcmFt
ZUJ1ZmZlckNhY2hlW2luZGV4XS5oYXNBbHBoYSgpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MjkxLDEzICsyMjQsMTMgQEAgdW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkg
PD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGRpbWVu
c2lvbiBvZiB0aGUgcmVxdWVzdGVkIGZyYW1lLgotICAgIHJldHVybiBtX3NpemUuYXJlYSgpICog
c2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkg
KiBzaXplb2YoUkdCQTMyKTsKIH0KIAogZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9u
QXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gZnJhbWVC
dWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygp
ID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8vIE1hbnkgYW5ub3lpbmcg
YWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2ts
eSBhcyBwb3NzaWJsZS4KQEAgLTMxNywxMiArMjUwLDE4IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdl
RGVjb2Rlcjo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGlu
Z0xlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0g
ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0
YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAgaWYgKCFidWZmZXIgfHwgYnVm
ZmVyLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gUmV0dXJu
IHRoZSBidWZmZXIgY29udGVudHMgYXMgYSBuYXRpdmUgaW1hZ2UuIEZvciBzb21lIHBvcnRzLCB0
aGUgZGF0YQogICAgIC8vIGlzIGFscmVhZHkgaW4gYSBuYXRpdmUgY29udGFpbmVyLCBhbmQgdGhp
cyBqdXN0IGluY3JlbWVudHMgaXRzIHJlZmNvdW50LgotICAgIHJldHVybiBidWZmZXItPmFzTmV3
TmF0aXZlSW1hZ2UoKTsKKyAgICBpZiAoYnVmZmVyLT5oYXNJbWFnZSgpKQorICAgICAgICByZXR1
cm4gYnVmZmVyLT5pbWFnZSgpOworCisgICAgaWYgKGJ1ZmZlci0+aGFzUGl4ZWxzKCkpCisgICAg
ICAgIHJldHVybiBidWZmZXItPnBpeGVscygpLT5pbWFnZSgpOworCisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIHZvaWQgSW1hZ2VEZWNvZGVyOjpwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3Nhcnko
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaAppbmRleCAyZjhlZWUxNzgxZDE2MmQ4NmM0OWZlMWRhYzcyYTJlN2U0MGE1ZDZk
Li5hZGQzOWZlODZmNTA4MjNlZjJjYjI0OTk2OGM1MWI4NTg3OTdhYmY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApA
QCAtMjgsOCArMjgsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU2NyZWVuLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KQEAgLTQwLDI0ICs0MiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKLQogICAgIC8vIEltYWdlRnJhbWUg
cmVwcmVzZW50cyB0aGUgZGVjb2RlZCBpbWFnZSBkYXRhLiAgVGhpcyBidWZmZXIgaXMgd2hhdCBh
bGwKICAgICAvLyBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLgogICAgIGNsYXNz
IEltYWdlRnJhbWUgewogICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBGcmFtZVN0YXR1cyB7IEZy
YW1lRW1wdHksIEZyYW1lUGFydGlhbCwgRnJhbWVDb21wbGV0ZSB9OwotICAgICAgICBlbnVtIEZy
YW1lRGlzcG9zYWxNZXRob2QgewotICAgICAgICAgICAgLy8gSWYgeW91IGNoYW5nZSB0aGUgbnVt
ZXJpYyB2YWx1ZXMgb2YgdGhlc2UsIG1ha2Ugc3VyZSB5b3UgYXVkaXQKLSAgICAgICAgICAgIC8v
IGFsbCB1c2VycywgYXMgc29tZSB1c2VycyBtYXkgY2FzdCByYXcgdmFsdWVzIHRvL2Zyb20gdGhl
c2UKLSAgICAgICAgICAgIC8vIGNvbnN0YW50cy4KLSAgICAgICAgICAgIERpc3Bvc2VOb3RTcGVj
aWZpZWQsICAgICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJhbWVidWZmZXIKLSAgICAgICAgICAgIERp
c3Bvc2VLZWVwLCAgICAgICAgICAgICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJhbWVidWZmZXIKLSAg
ICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yLCAgLy8gQ2xlYXIgZnJhbWUgdG8gdHJh
bnNwYXJlbnQKLSAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyAgLy8gQ2xlYXIg
ZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY29udGVudHMKLSAgICAgICAgfTsKLSAgICAgICAgdHlwZWRlZiB1bnNp
Z25lZCBQaXhlbERhdGE7CisgICAgICAgIGVudW0gY2xhc3MgRGVjb2RpbmdTdGF0dXMgeyBFbXB0
eSwgUGFydGlhbCwgQ29tcGxldGUgfTsKKyAgICAgICAgZW51bSBjbGFzcyBEaXNwb3NhbE1ldGhv
ZCB7IE5vdFNwZWNpZmllZCwgS2VlcCwgT3ZlcndyaXRlQmdjb2xvciwgT3ZlcndyaXRlUHJldmlv
dXMgfTsKIAogICAgICAgICBJbWFnZUZyYW1lKCk7CiAKQEAgLTY3LDE2NCArNTcsNDEgQEAgdXNp
bmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAvLyBjcmVhdGUgYSBuZXcg
Y29weSBvZiB0aGUgaW1hZ2UgZGF0YSwgb25seSBpbmNyZWFzZSB0aGUgcmVmIGNvdW50LgogICAg
ICAgICBJbWFnZUZyYW1lJiBvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpOwogCi0g
ICAgICAgIC8vIFRoZXNlIGRvIG5vdCB0b3VjaCBvdGhlciBtZXRhZGF0YSwgb25seSB0aGUgcmF3
IHBpeGVsIGRhdGEuCi0gICAgICAgIHZvaWQgY2xlYXJQaXhlbERhdGEoKTsKLSAgICAgICAgdm9p
ZCB6ZXJvRmlsbFBpeGVsRGF0YSgpOwotICAgICAgICB2b2lkIHplcm9GaWxsRnJhbWVSZWN0KGNv
bnN0IEludFJlY3QmKTsKLQotICAgICAgICAvLyBNYWtlcyB0aGlzIGZyYW1lIGhhdmUgYW4gaW5k
ZXBlbmRlbnQgY29weSBvZiB0aGUgcHJvdmlkZWQgaW1hZ2UncwotICAgICAgICAvLyBwaXhlbCBk
YXRhLCBzbyB0aGF0IG1vZGlmaWNhdGlvbnMgaW4gb25lIGZyYW1lIGFyZSBub3QgcmVmbGVjdGVk
IGluCi0gICAgICAgIC8vIHRoZSBvdGhlci4gIFJldHVybnMgd2hldGhlciB0aGUgY29weSBzdWNj
ZWVkZWQuCi0gICAgICAgIGJvb2wgY29weUJpdG1hcERhdGEoY29uc3QgSW1hZ2VGcmFtZSYpOwot
Ci0gICAgICAgIC8vIENvcGllcyB0aGUgcGl4ZWwgZGF0YSBhdCBbKHN0YXJ0WCwgc3RhcnRZKSwg
KGVuZFgsIHN0YXJ0WSkpIHRvIHRoZQotICAgICAgICAvLyBzYW1lIFgtY29vcmRpbmF0ZXMgb24g
ZWFjaCBzdWJzZXF1ZW50IHJvdyB1cCB0byBidXQgbm90IGluY2x1ZGluZwotICAgICAgICAvLyBl
bmRZLgotICAgICAgICB2b2lkIGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGlu
dCBzdGFydFksIGludCBlbmRZKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRY
IDwgd2lkdGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWCA8PSB3aWR0aCgpKTsKLSAgICAg
ICAgICAgIEFTU0VSVChzdGFydFkgPCBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5k
WSA8PSBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcm93Qnl0ZXMgPSAoZW5kWCAt
IHN0YXJ0WCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIGNvbnN0IFBpeGVsRGF0
YSogY29uc3Qgc3RhcnRBZGRyID0gZ2V0QWRkcihzdGFydFgsIHN0YXJ0WSk7Ci0gICAgICAgICAg
ICBmb3IgKGludCBkZXN0WSA9IHN0YXJ0WSArIDE7IGRlc3RZIDwgZW5kWTsgKytkZXN0WSkKLSAg
ICAgICAgICAgICAgICBtZW1jcHkoZ2V0QWRkcihzdGFydFgsIGRlc3RZKSwgc3RhcnRBZGRyLCBy
b3dCeXRlcyk7Ci0gICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChEaXNw
b3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQorICAgICAg
ICBEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9z
YWxNZXRob2Q7IH0KIAotICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBk
YXRhLiAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKLSAgICAgICAgLy8gYXJlIHdy
aXR0ZW4uICBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2Nh
dGlvbgotICAgICAgICAvLyBzdWNjZWVkZWQuCi0gICAgICAgIGJvb2wgc2V0U2l6ZShpbnQgbmV3
V2lkdGgsIGludCBuZXdIZWlnaHQpOworICAgICAgICB2b2lkIHNldFN0YXR1cyhEZWNvZGluZ1N0
YXR1cyBzdGF0dXMpIHsgbV9zdGF0dXMgPSBzdGF0dXM7IH0KKyAgICAgICAgRGVjb2RpbmdTdGF0
dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkVtcHR5OyB9
CisgICAgICAgIGJvb2wgaXNQYXJ0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVj
b2RpbmdTdGF0dXM6OlBhcnRpYWw7IH0KKyAgICAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlOyB9CiAKLSAgICAg
ICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIG5h
dGl2ZSBpbWFnZSBkYXRhLgotICAgICAgICAvLyAoQWN0dWFsIHVzZTogVGhpcyBwb2ludGVyIHdp
bGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluCi0gICAgICAgIC8vIEZyYW1l
RGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2Uo
KSBjb25zdDsKKyAgICAgICAgYm9vbCBpbml0UGl4ZWxzKGNvbnN0IEludFNpemUmLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEpOworICAgICAgICBib29sIGNvcHlQaXhlbHMoY29uc3QgSW1hZ2VGcmFt
ZSYpOworICAgICAgICB2b2lkIGNsZWFyUGl4ZWxzKCkgeyBtX3BpeGVscyA9IG51bGxwdHI7IH0K
IAotICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IEludFJlY3Qm
IG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsg
fQotICAgICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsg
fQotICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247
IH0KLSAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KLSAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9wcmVtdWx0aXBseUFscGhhOyB9CisgICAgICAgIEludFNpemUg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzLT5zaXplKCk7IH0KIAotICAgICAgICB2b2lk
IHNldEhhc0FscGhhKGJvb2wgYWxwaGEpOwotICAgICAgICB2b2lkIHNldENvbG9yUHJvZmlsZShj
b25zdCBDb2xvclByb2ZpbGUmKTsKLSAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChj
b25zdCBJbnRSZWN0JiByKSB7IG1fb3JpZ2luYWxGcmFtZVJlY3QgPSByOyB9Ci0gICAgICAgIHZv
aWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cyk7CiAgICAgICAgIHZvaWQgc2V0RHVyYXRp
b24odW5zaWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9Ci0gICAgICAg
IHZvaWQgc2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9k
aXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQotICAgICAgICB2b2lkIHNldFByZW11bHRpcGx5QWxw
aGEoYm9vbCBwcmVtdWx0aXBseUFscGhhKSB7IG1fcHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRp
cGx5QWxwaGE7IH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwg
dW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAg
ewotICAgICAgICAgICAgc2V0UkdCQShnZXRBZGRyKHgsIHkpLCByLCBnLCBiLCBhKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4
OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRhKCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVhZCBvZiBpbnRlZ2VyIGRpdmlz
aW9uIG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8vIFRoaXMgbXVsdGlwbGVyIHBy
b2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwgdmFsdWVzIGluIHJhbmdlIDAg
LSAyNTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludFNoaWZ0ID0gMjQ7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludE11bHQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2ludFNoaWZ0KSkgKyAxOwotICAg
ICAgICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZpeHBvaW50IHZhbHVlIGFuZCBj
b252ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZml4UG9p
bnRVbnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNpZ25lZCB2KQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gIChmaXhlZCAqIHYpID4+IGZpeFBvaW50U2hpZnQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5z
aWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAgICAgICpkZXN0ID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2ludE11bHQ7Ci0gICAgICAgICAgICAg
ICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBhbHBoYU11bHQpOwotICAgICAgICAg
ICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoZywgYWxwaGFNdWx0KTsKLSAgICAg
ICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGIsIGFscGhhTXVsdCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcg
PDwgOCB8IGIpOwotICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9kdXJhdGlvbjsgfQogCi0jaWYgRU5BQkxFKEFQTkcpCi0gICAgICAgIHN0YXRp
YyBpbmxpbmUgdW5zaWduZWQgZGl2aWRlMjU1KHVuc2lnbmVkIGEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiAoYSArIChhID4+IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQorICAgICAg
ICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpIHsgbV9oYXNBbHBoYSA9IGFscGhhOyB9Cisg
ICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9CiAKLSAg
ICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIWEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBOYXRpdmVJbWFnZVB0
ciBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAgICAgICAgQml0bWFwUGl4ZWxz
KiBwaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscyA/IG1fcGl4ZWxzLmdldCgpIDogbnVs
bHB0cjsgfQogCi0gICAgICAgICAgICBpZiAoYSA8IDI1NSkgewotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGFEZXN0ID0gKCgqZGVzdCkgPj4gMjQpICYgMjU1OwotICAgICAgICAgICAgICAgIGlm
IChhRGVzdCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByRGVzdCA9ICgoKmRlc3Qp
ID4+IDE2KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZ0Rlc3QgPSAoKCpk
ZXN0KSA+PiA4KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYkRlc3QgPSAo
KmRlc3QpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhQXV4ID0gMjU1IC0g
YTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJEZXN0ID0gZGl2aWRlMjU1KHJEZXN0ICogYURlc3QpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZ0Rlc3QgPSBkaXZpZGUyNTUoZ0Rlc3QgKiBhRGVzdCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBiRGVzdCA9IGRpdmlkZTI1NShiRGVzdCAqIGFEZXN0KTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1
KHIgKiBhICsgckRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1
NShnICogYSArIGdEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBkaXZpZGUy
NTUoYiAqIGEgKyBiRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBhICs9IGRpdmlk
ZTI1NShhRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlw
bHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgciA9IChyICogMjU1ICsgYSAtIDEp
IC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoZyAqIDI1NSArIGEgLSAxKSAvIGE7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBiID0gKGIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ByZW11bHRp
cGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgciA9IGRpdmlkZTI1NShyICogYSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGcgPSBkaXZpZGUyNTUoZyAqIGEpOwotICAgICAgICAgICAgICAg
ICAgICBiID0gZGl2aWRlMjU1KGIgKiBhKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIp
OwotICAgICAgICB9Ci0jZW5kaWYKKyAgICAgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2U7IH0KKyAgICAgICAgYm9vbCBoYXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBw
aXhlbHMoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50IHdpZHRoKCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgRGlzcG9zYWxNZXRob2QgbV9k
aXNwb3NhbE1ldGhvZCB7IERpc3Bvc2FsTWV0aG9kOjpOb3RTcGVjaWZpZWQgfTsKKyAgICAgICAg
RGVjb2RpbmdTdGF0dXMgbV9zdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6RW1wdHkgfTsKKyAgICAg
ICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1h
cFBpeGVscz4gbV9waXhlbHM7CiAKLSAgICAgICAgVmVjdG9yPFBpeGVsRGF0YT4gbV9iYWNraW5n
U3RvcmU7Ci0gICAgICAgIFBpeGVsRGF0YSogbV9ieXRlczsgLy8gVGhlIG1lbW9yeSBpcyBiYWNr
ZWQgYnkgbV9iYWNraW5nU3RvcmUuCi0gICAgICAgIEludFNpemUgbV9zaXplOwotICAgICAgICAv
LyBGSVhNRTogRG8gd2UgbmVlZCBtX2NvbG9yUHJvZmlsZSBhbnltb3JlPwotICAgICAgICBDb2xv
clByb2ZpbGUgbV9jb2xvclByb2ZpbGU7Ci0gICAgICAgIGJvb2wgbV9oYXNBbHBoYTsKLSAgICAg
ICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3Qg
YmUgdGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1
ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmFsbCBpbWFnZSBzaXplLgot
ICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKLSAgICAgICAgdW5zaWduZWQgbV9kdXJhdGlv
bjsKLSAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwotICAgICAg
ICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYTsKKyAgICAgICAgZmxvYXQgbV9kdXJhdGlvbiB7IDAg
fTsKKyAgICAgICAgYm9vbCBtX2hhc0FscGhhIHsgdHJ1ZSB9OwogICAgIH07CiAKICAgICAvLyBJ
bWFnZURlY29kZXIgaXMgYSBiYXNlIGZvciBhbGwgZm9ybWF0LXNwZWNpZmljIGRlY29kZXJzCkBA
IC0yNTMsNiArMTIwLDggQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogCiAg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgPSAwOwogCisg
ICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlw
bHlBbHBoYTsgfQorCiAgICAgICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25zdCB7IHJl
dHVybiBtX2lzQWxsRGF0YVJlY2VpdmVkOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldERh
dGEoU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKQEAgLTI5MCwxMSAr
MTU5LDExIEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKIAogICAgICAgICAv
LyBSZXR1cm5zIHdoZXRoZXIgdGhlIHNpemUgaXMgbGVnYWwgKGkuZS4gbm90IGdvaW5nIHRvIHJl
c3VsdCBpbgogICAgICAgICAvLyBvdmVyZmxvdyBlbHNld2hlcmUpLiAgSWYgbm90LCBtYXJrcyBk
ZWNvZGluZyBhcyBmYWlsZWQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCisgICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKGNv
bnN0IEludFNpemUmIHNpemUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc092ZXJTaXpl
KHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgaWYgKGlzT3ZlclNpemUoc2l6ZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwotICAgICAgICAgICAgbV9zaXplID0gSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgICAg
ICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KQEAgLTM4MSw4ICsyNTAsNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8
Y2hhcj47CiAKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOyAvLyBUaGUgZW5j
b2RlZCBkYXRhLgogICAgICAgICBWZWN0b3I8SW1hZ2VGcmFtZSwgMT4gbV9mcmFtZUJ1ZmZlckNh
Y2hlOwotICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBtX2NvbG9yUHJvZmlsZSBhbnkgbW9y
ZSwgZm9yIGFueSBwb3J0PwotICAgICAgICBDb2xvclByb2ZpbGUgbV9jb2xvclByb2ZpbGU7CiAg
ICAgICAgIGJvb2wgbV9zY2FsZWQgeyBmYWxzZSB9OwogICAgICAgICBWZWN0b3I8aW50PiBtX3Nj
YWxlZENvbHVtbnM7CiAgICAgICAgIFZlY3RvcjxpbnQ+IG1fc2NhbGVkUm93czsKQEAgLTM5Mywx
MSArMjYwLDEwIEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICBwcml2
YXRlOgogICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUg
aW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKICAgICAgICAgLy8gYW5kIHJldHVybiBpdCBh
cyBhIChzaWduZWQpIGludC4gIEF2b2lkIG92ZXJmbG93LgotICAgICAgICBzdGF0aWMgYm9vbCBp
c092ZXJTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCisgICAgICAgIHN0YXRp
YyBib29sIGlzT3ZlclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX3NpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nIGxvbmc+KHdpZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGhlaWdodCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdG90YWxfc2l6ZSA+ICgoMSA8PCAyOSkgLSAxKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KHNpemUud2lkdGgoKSkgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUuaGVp
Z2h0KCkpOworICAgICAgICAgICAgcmV0dXJuIHBpeGVscyA+ICgoMSA8PCAyOSkgLSAxKTsKICAg
ICAgICAgfQogCiAgICAgICAgIEludFNpemUgbV9zaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVy
LmNwcAppbmRleCBjYWYzNWM5N2YxN2VkZDM0YmM5ZGY4OWFiMDllODcwMGFlZTZjN2RmLi5hMTRk
NDM5ZTVkZjMxNzIyMjM2MmFjMjEyNzQ5MDgyZDBkN2NjMGI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VE
ZWNvZGVyLmNwcApAQCAtNzAsMTMgKzcwLDExIEBAIEltYWdlRnJhbWUqIEJNUEltYWdlRGVjb2Rl
cjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICBpZiAoaW5kZXgpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpIHsK
KyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKICAgICAgICAgbV9mcmFtZUJ1
ZmZlckNhY2hlLnJlc2l6ZSgxKTsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCku
c2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwotICAgIH0KIAogICAgIElt
YWdlRnJhbWUqIGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKTsKLSAgICBpZiAo
YnVmZmVyLT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgIGlmICgh
YnVmZmVyLT5pc0NvbXBsZXRlKCkpCiAgICAgICAgIGRlY29kZShmYWxzZSk7CiAgICAgcmV0dXJu
IGJ1ZmZlcjsKIH0KQEAgLTk4LDcgKzk2LDcgQEAgdm9pZCBCTVBJbWFnZURlY29kZXI6OmRlY29k
ZShib29sIG9ubHlTaXplKQogICAgICAgICBzZXRGYWlsZWQoKTsKICAgICAvLyBJZiB3ZSdyZSBk
b25lIGRlY29kaW5nIHRoZSBpbWFnZSwgd2UgZG9uJ3QgbmVlZCB0aGUgQk1QSW1hZ2VSZWFkZXIK
ICAgICAvLyBhbnltb3JlLiAgKElmIHdlIGZhaWxlZCwgfG1fcmVhZGVyfCBoYXMgYWxyZWFkeSBi
ZWVuIGNsZWFyZWQuKQotICAgIGVsc2UgaWYgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgp
ICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUNvbXBsZXRlKSkKKyAgICBlbHNlIGlmICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHko
KSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuaXNDb21wbGV0ZSgpKSkKICAgICAgICAg
bV9yZWFkZXIgPSBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAppbmRleCA1
YzAwNTUzNGVjZDkyMTM0YTEzYjMyOTU4OTI3NzkwZjA3YWQwZjgxLi4wNTg3ZmM0OWEwZDk4NWYy
ZWI2NDg4YWQ4Yjc1YjJkMDRjOTVhMTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKQEAg
LTc3LDE4ICs3NywxNSBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5
U2l6ZSkKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KICAg
ICBBU1NFUlQobV9idWZmZXIpOyAgLy8gUGFyZW50IHNob3VsZCBzZXQgdGhpcyBiZWZvcmUgYXNr
aW5nIHVzIHRvIGRlY29kZSEKLSAgICBpZiAobV9idWZmZXItPnN0YXR1cygpID09IEltYWdlRnJh
bWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFtX2J1ZmZlci0+c2V0U2l6ZShtX3BhcmVu
dC0+c2l6ZSgpLndpZHRoKCksIG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkpKQorICAgIGlmICht
X2J1ZmZlci0+aXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghbV9idWZmZXItPmluaXRQaXhlbHMo
bV9wYXJlbnQtPnNpemUoKSwgbV9wYXJlbnQtPnByZW11bHRpcGx5QWxwaGEoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gbV9wYXJlbnQtPnNldEZhaWxlZCgpOyAvLyBVbmFibGUgdG8gYWxsb2NhdGUu
Ci0gICAgICAgIG1fYnVmZmVyLT5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsK
KyAgICAgICAgbV9idWZmZXItPnNldFN0YXR1cyhJbWFnZUZyYW1lOjpEZWNvZGluZ1N0YXR1czo6
UGFydGlhbCk7CiAgICAgICAgIC8vIHNldFNpemUoKSBjYWxscyBlcmFzZUFSR0IoKSwgd2hpY2gg
cmVzZXRzIHRoZSBhbHBoYSBmbGFnLCBzbyB3ZSBmb3JjZQogICAgICAgICAvLyBpdCBiYWNrIHRv
IGZhbHNlIGhlcmUuICBXZSdsbCBzZXQgaXQgdHJ1ZSBiZWxvdyBpbiBhbGwgY2FzZXMgd2hlcmUK
ICAgICAgICAgLy8gdGhlc2UgMHMgY291bGQgYWN0dWFsbHkgc2hvdyB0aHJvdWdoLgogICAgICAg
ICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEoZmFsc2UpOwogCi0gICAgICAgIC8vIEZvciBCTVBzLCB0
aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIG1fYnVmZmVy
LT5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fcGFyZW50LT5zaXpl
KCkpKTsKLQogICAgICAgICBpZiAoIW1faXNUb3BEb3duKQogICAgICAgICAgICAgbV9jb29yZC5z
ZXRZKG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkgLSAxKTsKICAgICB9CkBAIC0xMjIsNyArMTE5
LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seVNpemUpCiAgICAg
fQogCiAgICAgLy8gRG9uZSEKLSAgICBtX2J1ZmZlci0+c2V0U3RhdHVzKEltYWdlRnJhbWU6OkZy
YW1lQ29tcGxldGUpOworICAgIG1fYnVmZmVyLT5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RGVjb2Rp
bmdTdGF0dXM6OkNvbXBsZXRlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTcxLDcgKzE2
OCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKCkKICAgICAgICAg
cmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKIAogICAgIC8vIFNldCBvdXIgc2l6ZS4KLSAg
ICBpZiAoIW1fcGFyZW50LT5zZXRTaXplKG1faW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFk
ZXIuYmlIZWlnaHQpKQorICAgIGlmICghbV9wYXJlbnQtPnNldFNpemUoSW50U2l6ZShtX2luZm9I
ZWFkZXIuYmlXaWR0aCwgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0KSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIEZvciBwYWxldHRlZCBpbWFnZXMsIGJpdG1hcHMgY2FuIHNldCBiaUNs
clVzZWQgdG8gMCB0byBtZWFuICJhbGwKQEAgLTcwNyw3ICs3MDQsOCBAQCBCTVBJbWFnZVJlYWRl
cjo6UHJvY2Vzc2luZ1Jlc3VsdCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEoYm9v
bCBpblJMRSwgaQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IG1fc2Vlbk5vblplcm9BbHBoYVBpeGVsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KG1fc2Vlblplcm9BbHBoYVBpeGVsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZl
ci0+emVyb0ZpbGxQaXhlbERhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVy
LT5waXhlbHMoKS0+Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLT5z
ZXRIYXNBbHBoYSh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2Vlblplcm9BbHBo
YVBpeGVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxwaGEgIT0g
MjU1KQogICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXItPnNldEhhc0FscGhhKHRydWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlUmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VSZWFkZXIuaAppbmRleCBiNWNiOTZlM2Y5Mjk5MmRkNzYyZTUzNzRiNWQ1
NWNjZDc4NTNjY2MxLi41NDNiNjJkZWI1YzI0YjNiOTZjNjEyMDA4MzRlNWUyNmFmMGNhODc0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1Q
SW1hZ2VSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VSZWFkZXIuaApAQCAtMjQ4LDcgKzI0OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBibHVlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBtX2J1ZmZlci0+c2V0UkdCQShtX2Nvb3JkLngoKSwgbV9jb29yZC55KCksIHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLT5waXhsZXMoKS0+c2V0UkdC
QShtX2Nvb3JkLngoKSwgbV9jb29yZC55KCksIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAg
ICAgICAgICAgIG1fY29vcmQubW92ZSgxLCAwKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHND
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9C
aXRtYXBQaXhlbHNDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWFhZjhhMGEzNmIxOGNiZjcyNzdkMmMy
ZTI2ZWI0MTcxMjU2MDBkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcApAQCAtMCwwICsx
LDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCisKKyNpbmNsdWRl
IDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdGl2ZUltYWdlUHRyIEJpdG1h
cFBpeGVsczo6aW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFn
ZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyKj4oY29uc3RfY2FzdDxSR0JBMzIqPihtX3BpeGVscykpLAorICAgICAgICBDQUlS
T19GT1JNQVRfQVJHQjMyLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCBzaXplKCku
d2lkdGgoKSAqIHNpemVvZihSR0JBMzIpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJv
L0ltYWdlRGVjb2RlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggN2I0MTI5NWY4NTczNThmYmJmMzVjMWIwNTI1ZThkNmNjMzUyMGY1OC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNv
ZGVyLmgiCi0KLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU5h
dGl2ZUltYWdlUHRyIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAg
IHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKLSAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxQaXhlbERh
dGEqPihtX2J5dGVzKSksCi0gICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoKCksIGhl
aWdodCgpLCB3aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA5Zjk5MmE3YmUxZDY2
NzIyNjc1YzJlODU0YWQxODkxZTYwZjg1NzdjLi44YzgxNDA0ZWE5ZWQ3MjgxN2MxZGRjNjhkY2I0
ZmI3NGNjYjk1MWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtNjAsMTIgKzYw
LDEyIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVy
biBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1ib29sIEdJRkltYWdlRGVj
b2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9vbCBHSUZJ
bWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAoSW1h
Z2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiBzaXplKCkgPT0gSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSkKKyAgICBpZiAoSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiB0aGlz
LT5zaXplKCkgPT1zaXplKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghSW1hZ2VE
ZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICghSW1hZ2VEZWNvZGVyOjpz
ZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBwcmVwYXJlU2NhbGVE
YXRhSWZOZWNlc3NhcnkoKTsKQEAgLTExNyw3ICsxMTcsNyBAQCBJbWFnZUZyYW1lKiBHSUZJbWFn
ZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhd
OwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQor
ICAgIGlmICghZnJhbWUuaXNDb21wbGV0ZSgpKQogICAgICAgICBkZWNvZGUoaW5kZXggKyAxLCBH
SUZGdWxsUXVlcnkpOwogICAgIHJldHVybiAmZnJhbWU7CiB9CkBAIC0xNTYsMjUgKzE1NiwyNSBA
QCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVh
ckJlZm9yZUZyYW1lKQogICAgIC8vIG5vdCB0byBoYXZlIG5vbi1lbXB0eSBmcmFtZXMgYWZ0ZXIg
dGhlIGZyYW1lIHdlJ3JlIGN1cnJlbnRseSBkZWNvZGluZy4KICAgICAvLyBTbywgc2NhbiBiYWNr
d2FyZHMgZnJvbSB8ZW5kfCBhcyBmb2xsb3dzOgogICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMg
ZW1wdHksIHdlJ3JlIHN0aWxsIHBhc3QgYW55IGZyYW1lcyB3ZSBjYXJlIGFib3V0LgotICAgIC8v
ICAgKiBJZiB0aGUgZnJhbWUgaXMgY29tcGxldGUsIGJ1dCBpcyBEaXNwb3NlT3ZlcndyaXRlUHJl
dmlvdXMsIHdlJ2xsCisgICAgLy8gICAqIElmIHRoZSBmcmFtZSBpcyBjb21wbGV0ZSwgYnV0IGlz
IERpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cywgd2UnbGwKICAgICAvLyAgICAgc2tp
cCBvdmVyIGl0IGluIGZ1dHVyZSBpbml0RnJhbWVCdWZmZXIoKSBjYWxscy4gIFdlIGNhbiBjbGVh
ciBpdAogICAgIC8vICAgICB1bmxlc3MgaXQncyB8ZW5kfCwgYW5kIGtlZXAgc2Nhbm5pbmcuICBG
b3IgYW55IG90aGVyIGRpc3Bvc2FsIG1ldGhvZCwKICAgICAvLyAgICAgc3RvcCBzY2FubmluZywg
YXMgd2UndmUgZm91bmQgdGhlIGZyYW1lIGluaXRGcmFtZUJ1ZmZlcigpIHdpbGwgbmVlZAogICAg
IC8vICAgICBuZXh0LgogICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMgcGFydGlhbCwgd2UncmUg
ZGVjb2RpbmcgaXQsIHNvIGRvbid0IGNsZWFyIGl0OyBpZiBpdAotICAgIC8vICAgICBoYXMgYSBk
aXNwb3NhbCBtZXRob2Qgb3RoZXIgdGhhbiBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMsIHN0b3AK
KyAgICAvLyAgICAgaGFzIGEgZGlzcG9zYWwgbWV0aG9kIG90aGVyIHRoYW4gRGlzcG9zYWxNZXRo
b2Q6Ok92ZXJ3cml0ZVByZXZpb3VzLCBzdG9wCiAgICAgLy8gICAgIHNjYW5uaW5nLCBhcyB3ZSds
bCBvbmx5IG5lZWQgdGhpcyBmcmFtZSB3aGVuIGRlY29kaW5nIHRoZSBuZXh0IG9uZS4KICAgICBW
ZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKLSAgICBmb3IgKDsgKGkgIT0gbV9m
cmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6
RnJhbWVFbXB0eSkgfHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9z
ZU92ZXJ3cml0ZVByZXZpb3VzKSk7IC0taSkgewotICAgICAgICBpZiAoKGktPnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpICYmIChpICE9IGVuZCkpCi0gICAgICAgICAgICBp
LT5jbGVhclBpeGVsRGF0YSgpOworICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUu
YmVnaW4oKSkgJiYgKChpLT5pc0VtcHR5KCkpIHx8IChpLT5kaXNwb3NhbE1ldGhvZCgpID09IElt
YWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cykpOyAtLWkpIHsKKyAg
ICAgICAgaWYgKChpLT5pc0NvbXBsZXRlKCkpICYmIChpICE9IGVuZCkpCisgICAgICAgICAgICBp
LT5jbGVhclBpeGVscygpOwogICAgIH0KIAogICAgIC8vIE5vdyB8aXwgaG9sZHMgdGhlIGxhc3Qg
ZnJhbWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsgY2xlYXIgcHJpb3IgZnJhbWVzLgogICAgIGZvciAo
VmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBqKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigp
KTsgaiAhPSBpOyArK2opIHsKLSAgICAgICAgQVNTRVJUKGotPnN0YXR1cygpICE9IEltYWdlRnJh
bWU6OkZyYW1lUGFydGlhbCk7Ci0gICAgICAgIGlmIChqLT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1l
OjpGcmFtZUVtcHR5KQotICAgICAgICAgICAgai0+Y2xlYXJQaXhlbERhdGEoKTsKKyAgICAgICAg
QVNTRVJUKCFqLT5pc1BhcnRpYWwoKSk7CisgICAgICAgIGlmICghai0+aXNFbXB0eSgpKQorICAg
ICAgICAgICAgai0+Y2xlYXJQaXhlbHMoKTsKICAgICB9CiAKICAgICAvLyBXaGVuIHNvbWUgZnJh
bWVzIGFyZSBjbGVhcmVkLCB0aGUgcmVhZGVyIGlzIG91dCBvZiBzeW5jLCBzaW5jZSB0aGUgY2Fs
bGVyIG1pZ2h0IGFzayBmb3IgYW55IGZyYW1lIG5vdApAQCAtMjEzLDE2ICsyMTMsMTYgQEAgYm9v
bCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIGNv
bnN0IFZlY3Rvcjx1bnNpZ25lZAogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVj
ZXNzYXJ5LgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFt
ZUluZGV4XTsKLSAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVF
bXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNQaXhl
bERhdGEoKSkKKyAgICBpZiAoKChidWZmZXIuaXNFbXB0eSgpKSAmJiAhaW5pdEZyYW1lQnVmZmVy
KGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhhc1BpeGVscygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVy
LmdldEFkZHIoeEJlZ2luLCB5QmVnaW4pOworICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBi
dWZmZXIucGl4ZWxzKCktPmF0KHhCZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUgcm93
J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4QmVn
aW47IHggPCB4RW5kOyArK3gpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VW
YWx1ZSA9IHJvd0J1ZmZlclsobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZy
YW1lQ29udGV4dC0+eE9mZnNldF07CiAgICAgICAgIGlmICgoIWZyYW1lQ29udGV4dC0+aXNUcmFu
c3BhcmVudCB8fCAoc291cmNlVmFsdWUgIT0gZnJhbWVDb250ZXh0LT50cGl4ZWwpKSAmJiAoc291
cmNlVmFsdWUgPCBjb2xvck1hcFNpemUpKSB7CiAgICAgICAgICAgICBjb25zdCBzaXplX3QgY29s
b3JJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc291cmNlVmFsdWUpICogMzsKLSAgICAgICAg
ICAgIGJ1ZmZlci5zZXRSR0JBKGN1cnJlbnRBZGRyZXNzLCBjb2xvck1hcFtjb2xvckluZGV4XSwg
Y29sb3JNYXBbY29sb3JJbmRleCArIDFdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMl0sIDI1NSk7
CisgICAgICAgICAgICBidWZmZXIucGl4ZWxzKCktPnNldFJHQkEoY3VycmVudEFkZHJlc3MsIGNv
bG9yTWFwW2NvbG9ySW5kZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0sIGNvbG9yTWFwW2Nv
bG9ySW5kZXggKyAyXSwgMjU1KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fY3Vy
cmVudEJ1ZmZlclNhd0FscGhhID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIFdlIG1heSBvciBtYXkg
bm90IG5lZWQgdG8gd3JpdGUgdHJhbnNwYXJlbnQgcGl4ZWxzIHRvIHRoZSBidWZmZXIuCkBAIC0y
MzMsMzQgKzIzMywzNCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5z
aWduZWQgZnJhbWVJbmRleCwgY29uc3QgVmVjdG9yPHVuc2lnbmVkCiAgICAgICAgICAgICAvLyBi
ZXlvbmQgdGhlIGZpcnN0LCBvciB0aGUgaW5pdGlhbCBwYXNzZXMgd2lsbCAic2hvdyB0aHJvdWdo
IiB0aGUKICAgICAgICAgICAgIC8vIGxhdGVyIG9uZXMuCiAgICAgICAgICAgICBpZiAod3JpdGVU
cmFuc3BhcmVudFBpeGVscykKLSAgICAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQShjdXJyZW50
QWRkcmVzcywgMCwgMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgYnVmZmVyLnBpeGVscygpLT5z
ZXRSR0JBKGN1cnJlbnRBZGRyZXNzLCAwLCAwLCAwLCAwKTsKICAgICAgICAgfQogICAgICAgICAr
K2N1cnJlbnRBZGRyZXNzOwogICAgIH0KIAogICAgIC8vIFRlbGwgdGhlIGZyYW1lIHRvIGNvcHkg
dGhlIHJvdyBkYXRhIGlmIG5lZWQgYmUuCiAgICAgaWYgKHJlcGVhdENvdW50ID4gMSkKLSAgICAg
ICAgYnVmZmVyLmNvcHlSb3dOVGltZXMoeEJlZ2luLCB4RW5kLCB5QmVnaW4sIHlFbmQpOworICAg
ICAgICBidWZmZXIucGl4ZWxzKCktPnJlcGVhdEZpcnN0Um93KEludFJlY3QoeEJlZ2luLCB5QmVn
aW4sIHhFbmQgLSB4QmVnaW4sIHlFbmQgLSB5QmVnaW4pKTsKIAogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUlu
ZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLCBJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0
aG9kIGRpc3Bvc2FsTWV0aG9kKQorYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUo
dW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VGcmFtZTo6
RGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUg
ZnJhbWUgaWYgbmVjZXNzYXJ5LiAgU29tZSBHSUZzIGluc2VydCBkby1ub3RoaW5nIGZyYW1lcywK
ICAgICAvLyBpbiB3aGljaCBjYXNlIHdlIG5ldmVyIHJlYWNoIGhhdmVEZWNvZGVkUm93KCkgYmVm
b3JlIGdldHRpbmcgaGVyZS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVy
Q2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFt
ZTo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAgICBpZiAo
KGJ1ZmZlci5pc0VtcHR5KCkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gaW5pdEZyYW1lQnVmZmVyKCkgaGFzIGFscmVhZHkgY2FsbGVk
IHNldEZhaWxlZCgpLgogCi0gICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNv
bXBsZXRlKTsKKyAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkRlY29kaW5nU3RhdHVz
OjpDb21wbGV0ZSk7CiAgICAgYnVmZmVyLnNldER1cmF0aW9uKGZyYW1lRHVyYXRpb24pOwogICAg
IGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChkaXNwb3NhbE1ldGhvZCk7CiAKICAgICBpZiAoIW1f
Y3VycmVudEJ1ZmZlclNhd0FscGhhKSB7CiAgICAgICAgIC8vIFRoZSB3aG9sZSBmcmFtZSB3YXMg
bm9uLXRyYW5zcGFyZW50LCBzbyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGVudGlyZQogICAgICAg
ICAvLyByZXN1bHRpbmcgYnVmZmVyIHdhcyBub24tdHJhbnNwYXJlbnQsIGFuZCB3ZSBjYW4gc2V0
SGFzQWxwaGEoZmFsc2UpLgotICAgICAgICBpZiAoYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCku
Y29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkKKyAgICAgICAgaWYg
KGJ1ZmZlci5waXhlbHMoKS0+cmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2Nh
bGVkU2l6ZSgpKSkpCiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAg
ICAgICBlbHNlIGlmIChmcmFtZUluZGV4KSB7CiAgICAgICAgICAgICAvLyBUcmlja3kgY2FzZS4g
IFRoaXMgZnJhbWUgZG9lcyBub3QgaGF2ZSBhbHBoYSBvbmx5IGlmIGV2ZXJ5d2hlcmUKQEAgLTI2
OCwyMiArMjY4LDIyIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2ln
bmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sCiAgICAgICAgICAgICAvLyB0
cnVlLCB3ZSBjaGVjayB0aGUgc3RhcnQgc3RhdGUgb2YgdGhlIGZyYW1lIC0tIGlmIGl0IGRvZXNu
J3QgaGF2ZQogICAgICAgICAgICAgLy8gYWxwaGEsIHdlJ3JlIHNhZmUuCiAgICAgICAgICAgICAv
LwotICAgICAgICAgICAgLy8gRmlyc3Qgc2tpcCBvdmVyIHByaW9yIERpc3Bvc2VPdmVyd3JpdGVQ
cmV2aW91cyBmcmFtZXMgKHNpbmNlIHRoZXkKKyAgICAgICAgICAgIC8vIEZpcnN0IHNraXAgb3Zl
ciBwcmlvciBEaXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlUHJldmlvdXMgZnJhbWVzIChzaW5jZSB0
aGV5CiAgICAgICAgICAgICAvLyBkb24ndCBhZmZlY3QgdGhlIHN0YXJ0IHN0YXRlIG9mIHRoaXMg
ZnJhbWUpIHRoZSBzYW1lIHdheSB3ZSBkbyBpbgogICAgICAgICAgICAgLy8gaW5pdEZyYW1lQnVm
ZmVyKCkuCiAgICAgICAgICAgICBjb25zdCBJbWFnZUZyYW1lKiBwcmV2QnVmZmVyID0gJm1fZnJh
bWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwotICAgICAgICAgICAgd2hpbGUgKGZyYW1lSW5k
ZXggJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9z
ZU92ZXJ3cml0ZVByZXZpb3VzKSkKKyAgICAgICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChw
cmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9k
OjpPdmVyd3JpdGVQcmV2aW91cykpCiAgICAgICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2Zy
YW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKIAotICAgICAgICAgICAgLy8gTm93LCBpZiB3
ZSdyZSBhdCBhIERpc3Bvc2VOb3RTcGVjaWZpZWQgb3IgRGlzcG9zZUtlZXAgZnJhbWUsIHRoZW4K
KyAgICAgICAgICAgIC8vIE5vdywgaWYgd2UncmUgYXQgYSBEaXNwb3NhbE1ldGhvZDo6Tm90U3Bl
Y2lmaWVkIG9yIERpc3Bvc2FsTWV0aG9kOjpLZWVwIGZyYW1lLCB0aGVuCiAgICAgICAgICAgICAv
LyB3ZSBjYW4gc2F5IHdlIGhhdmUgbm8gYWxwaGEgaWYgdGhhdCBmcmFtZSBoYWQgbm8gYWxwaGEu
ICBCdXQKICAgICAgICAgICAgIC8vIHNpbmNlIGluIGluaXRGcmFtZUJ1ZmZlcigpIHdlIGFscmVh
ZHkgY29waWVkIHRoYXQgZnJhbWUncyBhbHBoYQogICAgICAgICAgICAgLy8gc3RhdGUgaW50byB0
aGUgY3VycmVudCBmcmFtZSdzLCB3ZSBuZWVkIGRvIG5vdGhpbmcgYXQgYWxsIGhlcmUuCiAgICAg
ICAgICAgICAvLwotICAgICAgICAgICAgLy8gVGhlIG9ubHkgcmVtYWluaW5nIGNhc2UgaXMgYSBE
aXNwb3NlT3ZlcndyaXRlQmdjb2xvciBmcmFtZS4gIElmCisgICAgICAgICAgICAvLyBUaGUgb25s
eSByZW1haW5pbmcgY2FzZSBpcyBhIERpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVCZ2NvbG9yIGZy
YW1lLiBJZgogICAgICAgICAgICAgLy8gaXQgaGFkIG5vIGFscGhhLCBhbmQgaXRzIHJlY3QgaXMg
Y29udGFpbmVkIGluIHRoZSBjdXJyZW50IGZyYW1lJ3MKICAgICAgICAgICAgIC8vIHJlY3QsIHdl
IGtub3cgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIG5vIGFscGhhLgotICAgICAgICAgICAgaWYgKChw
cmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3Jp
dGVCZ2NvbG9yKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIub3JpZ2luYWxG
cmFtZVJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpKSkKKyAg
ICAgICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1l
OjpEaXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlQmdjb2xvcikgJiYgIXByZXZCdWZmZXItPmhhc0Fs
cGhhKCkgJiYgYnVmZmVyLnBpeGVscygpLT5yZWN0KCkuY29udGFpbnMocHJldkJ1ZmZlci0+cGl4
ZWxzKCktPnJlY3QoKSkpCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNl
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTMyMSwxMCArMzIxLDcgQEAgdm9pZCBHSUZJbWFnZURl
Y29kZXI6OmRlY29kZSh1bnNpZ25lZCBoYWx0QXRGcmFtZSwgR0lGUXVlcnkgcXVlcnkpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBzaXplX3Qgb2xkU2l6ZSA9IG1fZnJhbWVC
dWZmZXJDYWNoZS5zaXplKCk7CiAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShtX3JlYWRl
ci0+aW1hZ2VzQ291bnQoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3Jl
YWRlci0+aW1hZ2VzQ291bnQoKTsgKytpKQotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbaV0u
c2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwogCiAgICAgaWYgKHF1ZXJ5
ID09IEdJRkZyYW1lQ291bnRRdWVyeSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzUzLDU4ICszNTAs
NjAgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFt
ZUluZGV4KQogICAgICAgICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIGZy
YW1lQ29udGV4dC0+eU9mZnNldCk7CiAKICAgICBJbWFnZUZyYW1lKiBjb25zdCBidWZmZXIgPSAm
bV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGludCBsZWZ0ID0gdXBwZXJCb3Vu
ZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7Ci0gICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxl
ZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7Ci0gICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2Fs
ZWRZKGZyYW1lUmVjdC55KCkpOwotICAgIGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShm
cmFtZVJlY3QubWF4WSgpLCB0b3ApOwotICAgIGJ1ZmZlci0+c2V0T3JpZ2luYWxGcmFtZVJlY3Qo
SW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAKICAgICBp
ZiAoIWZyYW1lSW5kZXgpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUsIHNv
IHdlJ3JlIG5vdCByZWx5aW5nIG9uIGFueSBwcmV2aW91cyBkYXRhLgotICAgICAgICBpZiAoIWJ1
ZmZlci0+c2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgp
KSkKKyAgICAgICAgaWYgKCFidWZmZXItPmluaXRQaXhlbHMoc2NhbGVkU2l6ZSgpLCBwcmVtdWx0
aXBseUFscGhhKCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIC8vIFRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRz
IG9uIHRoZSBwcmV2aW91cyBmcmFtZSdzCiAgICAgICAgIC8vIGRpc3Bvc2FsIG1ldGhvZC4KICAg
ICAgICAgLy8KLSAgICAgICAgLy8gRnJhbWVzIHRoYXQgdXNlIHRoZSBEaXNwb3NlT3ZlcndyaXRl
UHJldmlvdXMgbWV0aG9kIGFyZSBlZmZlY3RpdmVseQorICAgICAgICAvLyBGcmFtZXMgdGhhdCB1
c2UgdGhlIERpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cyBtZXRob2QgYXJlIGVmZmVj
dGl2ZWx5CiAgICAgICAgIC8vIG5vLW9wcyBpbiB0ZXJtcyBvZiBjaGFuZ2luZyB0aGUgc3RhcnRp
bmcgc3RhdGUgb2YgYSBmcmFtZSBjb21wYXJlZCB0bwogICAgICAgICAvLyB0aGUgc3RhcnRpbmcg
c3RhdGUgb2YgdGhlIHByZXZpb3VzIGZyYW1lLCBzbyBza2lwIG92ZXIgdGhlbS4gIChJZiB0aGUK
ICAgICAgICAgLy8gZmlyc3QgZnJhbWUgc3BlY2lmaWVzIHRoaXMgbWV0aG9kLCBpdCB3aWxsIGdl
dCB0cmVhdGVkIGxpa2UKLSAgICAgICAgLy8gRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IgYmVsb3cg
YW5kIHJlc2V0IHRvIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4pCisgICAgICAgIC8vIERpc3Bv
c2FsTWV0aG9kOjpPdmVyd3JpdGVCZ2NvbG9yIGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBsZXRl
bHkgZW1wdHkgaW1hZ2UuKQogICAgICAgICBjb25zdCBJbWFnZUZyYW1lKiBwcmV2QnVmZmVyID0g
Jm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwotICAgICAgICBJbWFnZUZyYW1lOjpG
cmFtZURpc3Bvc2FsTWV0aG9kIHByZXZNZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhv
ZCgpOwotICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBJbWFnZUZy
YW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKSB7CisgICAgICAgIEltYWdlRnJhbWU6OkRp
c3Bvc2FsTWV0aG9kIHByZXZNZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOwor
ICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpE
aXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlUHJldmlvdXMpKSB7CiAgICAgICAgICAgICBwcmV2QnVm
ZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwogICAgICAgICAgICAgcHJl
dk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgQVNTRVJUKHByZXZCdWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxl
dGUpOworICAgICAgICBBU1NFUlQocHJldkJ1ZmZlci0+aXNDb21wbGV0ZSgpKTsKIAotICAgICAg
ICBpZiAoKHByZXZNZXRob2QgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU5vdFNwZWNpZmllZCkgfHwg
KHByZXZNZXRob2QgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZUtlZXApKSB7CisgICAgICAgIGlmICgo
cHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6Tm90U3BlY2lmaWVkKSB8
fCAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6S2VlcCkpIHsKICAg
ICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBsYXN0IGZyYW1lIGFzIHRoZSBzdGFydGluZyBzdGF0
ZSBmb3IgdGhpcyBmcmFtZS4KLSAgICAgICAgICAgIGlmICghYnVmZmVyLT5jb3B5Qml0bWFwRGF0
YSgqcHJldkJ1ZmZlcikpCisgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+Y29weVBpeGVscygqcHJl
dkJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJh
bWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQKICAgICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhl
bHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1lLgotICAgICAgICAgICAgY29uc3Qg
SW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5waXhlbHMoKS0+
cmVjdCgpOwogICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNp
emUoKTsKICAgICAgICAgICAgIGlmICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJ
bnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAgICAgLy8g
Q2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9s
ZQogICAgICAgICAgICAgICAgIC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0
eSBpbWFnZS4KLSAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShidWZmZXJTaXpl
LndpZHRoKCksIGJ1ZmZlclNpemUuaGVpZ2h0KCkpKQorICAgICAgICAgICAgICAgIGlmICghYnVm
ZmVyLT5pbml0UGl4ZWxzKGJ1ZmZlclNpemUsIHByZW11bHRpcGx5QWxwaGEoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgd2hvbGUgcHJldmlvdXMgYnVmZmVyLCB0aGVuIGNs
ZWFyIGp1c3QgaXRzIGZyYW1lLgotICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5jb3B5Qml0
bWFwRGF0YSgqcHJldkJ1ZmZlcikpCisgICAgICAgICAgICAgICAgaWYgKCFidWZmZXItPmNvcHlQ
aXhlbHMoKnByZXZCdWZmZXIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVk
KCk7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLT56ZXJvRmlsbEZyYW1lUmVjdChwcmV2UmVjdCk7
CisgICAgICAgICAgICAgICAgYnVmZmVyLT5waXhlbHMoKS0+Y2xlYXJSZWN0KHByZXZSZWN0KTsK
KyAgICAgICAgICAgICAgICBidWZmZXItPnNldEhhc0FscGhhKHRydWUpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxl
ZFgoZnJhbWVSZWN0LngoKSk7CisgICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJh
bWVSZWN0Lm1heFgoKSwgbGVmdCk7CisgICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZy
YW1lUmVjdC55KCkpOworICAgIGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJl
Y3QubWF4WSgpLCB0b3ApOworICAgIGJ1ZmZlci0+cGl4ZWxzKCktPnNldFJlY3QoSW50UmVjdChs
ZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAKICAgICAvLyBVcGRhdGUg
b3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCi0gICAgYnVmZmVyLT5zZXRTdGF0
dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICBidWZmZXItPnNldFN0YXR1cyhJbWFn
ZUZyYW1lOjpEZWNvZGluZ1N0YXR1czo6UGFydGlhbCk7CiAKICAgICAvLyBSZXNldCB0aGUgYWxw
aGEgcGl4ZWwgdHJhY2tlciBmb3IgdGhpcyBmcmFtZS4KICAgICBtX2N1cnJlbnRCdWZmZXJTYXdB
bHBoYSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCmluZGV4IDk1ZWM2ZDBhN2I2OTY2
NTJjNzA5YjdiNjJkNDFhYTRmM2FiOGYxZTAuLjE0YjI5YTY4ZmM3OGRjZjQ4NjcwNWJmNTAyODA2
ZDY2Mzc4ZjViZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKQEAgLTQ0LDcgKzQ0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiAiZ2lmIjsgfQogICAgICAgICB2b2lkIHNldERhdGEoU2hh
cmVkQnVmZmVyJiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkgb3ZlcnJpZGU7CiAgICAgICAg
IGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgb3ZlcnJpZGU7Ci0gICAgICAgIGJvb2wgc2V0U2l6ZSh1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBz
ZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAgICAgc2l6ZV90IGZyYW1lQ291
bnQoKSBvdmVycmlkZTsKICAgICAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IG92ZXJy
aWRlOwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4
KSBvdmVycmlkZTsKQEAgLTU2LDEzICs1NiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhlIEdJRiByZWFkZXIuCiAgICAgICAgIGJvb2wgaGF2
ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgY29uc3QgVmVjdG9yPHVuc2lnbmVkIGNo
YXI+JiByb3dCdWZmZXIsIHNpemVfdCB3aWR0aCwgc2l6ZV90IHJvd051bWJlciwgdW5zaWduZWQg
cmVwZWF0Q291bnQsIGJvb2wgd3JpdGVUcmFuc3BhcmVudFBpeGVscyk7Ci0gICAgICAgIGJvb2wg
ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9u
LCBJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKTsKKyAgICAg
ICAgYm9vbCBmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1l
RHVyYXRpb24sIEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kKTsKICAgICAgICAgdm9pZCBnaWZD
b21wbGV0ZSgpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gSWYgdGhlIHF1ZXJ5IGlzIEdJ
RkZ1bGxRdWVyeSwgZGVjb2RlcyB0aGUgaW1hZ2UgdXAgdG8gKGJ1dCBub3QKLSAgICAgICAgLy8g
aW5jbHVkaW5nKSB8aGFsdEF0RnJhbWV8LiAgT3RoZXJ3aXNlLCBkZWNvZGVzIGFzIG11Y2ggYXMg
aXMgbmVlZGVkIHRvCi0gICAgICAgIC8vIGFuc3dlciB0aGUgcXVlcnksIGlnbm9yaW5nIGJpdG1h
cCBkYXRhLiAgSWYgZGVjb2RpbmcgZmFpbHMgYnV0IHRoZXJlCisgICAgICAgIC8vIGluY2x1ZGlu
ZykgfGhhbHRBdEZyYW1lfC4gT3RoZXJ3aXNlLCBkZWNvZGVzIGFzIG11Y2ggYXMgaXMgbmVlZGVk
IHRvCisgICAgICAgIC8vIGFuc3dlciB0aGUgcXVlcnksIGlnbm9yaW5nIGJpdG1hcCBkYXRhLiBJ
ZiBkZWNvZGluZyBmYWlscyBidXQgdGhlcmUKICAgICAgICAgLy8gaXMgbm8gbW9yZSBkYXRhIGNv
bWluZywgc2V0cyB0aGUgImRlY29kZSBmYWlsdXJlIiBmbGFnLgogICAgICAgICB2b2lkIGRlY29k
ZSh1bnNpZ25lZCBoYWx0QXRGcmFtZSwgR0lGUXVlcnkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVy
LmNwcAppbmRleCAwMGQyNTJjZWZiMDVhYTUxZjg0ZDhkZjk5MDIyOTBlZmQ3MTA0MjJmLi41Yjg4
YTk1ZjMxYTFmMDUxOWU4MzFhNWJmYWE4ZjQ0YTg0YWM0ZWUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJl
YWRlci5jcHAKQEAgLTQ0Nyw3ICs0NDcsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpwYXJzZShz
aXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBib29sIHBhcnNlU2l6ZU9ubHkpCiAKICAg
ICAgICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNp
emUuCiAgICAgICAgICAgICAvLyBOb3RlOiBBIHN1YnNlcXVlbnQgZnJhbWUgbWlnaHQgaGF2ZSBk
aW1lbnNpb25zIGxhcmdlciB0aGFuIHRoZSAic2NyZWVuIiBkaW1lbnNpb25zLgotICAgICAgICAg
ICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShtX3NjcmVlbldpZHRoLCBtX3Nj
cmVlbkhlaWdodCkpCisgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRT
aXplKFdlYkNvcmU6OkludFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIG1fc2NyZWVuQmdjb2xv
ciA9IGN1cnJlbnRDb21wb25lbnRbNV07CkBAIC01NjgsMTQgKzU2OCwxNCBAQCBib29sIEdJRklt
YWdlUmVhZGVyOjpwYXJzZShzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBib29sIHBh
cnNlU2l6ZU9ubHkpCiAKICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgInVzZXIgaW5wdXQi
IGJpdC4KIAotICAgICAgICAgICAgLy8gTk9URTogVGhpcyByZWxpZXMgb24gdGhlIHZhbHVlcyBp
biB0aGUgRnJhbWVEaXNwb3NhbE1ldGhvZCBlbnVtCisgICAgICAgICAgICAvLyBOT1RFOiBUaGlz
IHJlbGllcyBvbiB0aGUgdmFsdWVzIGluIHRoZSBEaXNwb3NhbE1ldGhvZCBlbnVtCiAgICAgICAg
ICAgICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgR0lGIHNwZWMhCiAgICAgICAgICAgICBpbnQg
ZGlzcG9zYWxNZXRob2QgPSAoKCpjdXJyZW50Q29tcG9uZW50KSA+PiAyKSAmIDB4NzsKLSAgICAg
ICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kPihkaXNwb3NhbE1ldGhvZCk7CisgICAg
ICAgICAgICBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9kID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q+KGRpc3Bvc2FsTWV0aG9kKTsKICAgICAgICAg
ICAgIC8vIFNvbWUgc3BlY3Mgc2F5IHRoYXQgZGlzcG9zYWwgbWV0aG9kIDMgaXMgIm92ZXJ3cml0
ZSBwcmV2aW91cyIsIG90aGVycyB0aGF0IHNldHRpbmcKICAgICAgICAgICAgIC8vIHRoZSB0aGly
ZCBiaXQgb2YgdGhlIGZpZWxkIChpLmUuIG1ldGhvZCA0KSBpcy4gV2UgbWFwIGJvdGggdG8gdGhl
IHNhbWUgdmFsdWUuCiAgICAgICAgICAgICBpZiAoZGlzcG9zYWxNZXRob2QgPT0gNCkKLSAgICAg
ICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9kID0gV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzOworICAgICAgICAgICAgICAgIGN1cnJlbnRG
cmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhv
ZDo6T3ZlcndyaXRlUHJldmlvdXM7CiAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRlbGF5VGlt
ZSA9IEdFVElOVDE2KGN1cnJlbnRDb21wb25lbnQgKyAxKSAqIDEwOwogICAgICAgICAgICAgR0VU
TigxLCBHSUZDb25zdW1lQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkBAIC02NjQsNyArNjY0
LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cGFyc2Uoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6
ZV90IGxlbiwgYm9vbCBwYXJzZVNpemVPbmx5KQogICAgICAgICAgICAgICAgIHlPZmZzZXQgPSAw
OwogCiAgICAgICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdp
biBvZiBvdXIgc2l6ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgIW1fY2xpZW50
LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkKKyAgICAgICAgICAgICAg
ICBpZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRTaXplKFdlYkNvcmU6OkludFNpemUobV9z
Y3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCmluZGV4IGVhNDJi
MTFhNzhjMzhlYmU2NWMyYzI4YjkxYzhhZmI2MjYzNWE5OTkuLmVmNWMxYTRjNjNhZmIyMGEyMWI2
MzhiODlmMTFkOTk4MWM0MTNjYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCkBAIC0xNTUsNyAr
MTU1LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHdpZHRoOwogICAgIHVuc2lnbmVkIGhlaWdo
dDsKICAgICBpbnQgdHBpeGVsOyAvLyBJbmRleCBvZiB0cmFuc3BhcmVudCBwaXhlbC4KLSAgICBX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kOyAv
LyBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBldGMuCisgICAgV2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2Q7IC8vIFJlc3RvcmUg
dG8gYmFja2dyb3VuZCwgbGVhdmUgaW4gcGxhY2UsIGV0Yy4KICAgICBzaXplX3QgbG9jYWxDb2xv
cm1hcFBvc2l0aW9uOyAvLyBQZXItaW1hZ2UgY29sb3JtYXAuCiAgICAgaW50IGxvY2FsQ29sb3Jt
YXBTaXplOyAvLyBTaXplIG9mIGxvY2FsIGNvbG9ybWFwIGFycmF5LgogICAgIGludCBkYXRhc2l6
ZTsKQEAgLTE3NCw3ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgd2lkdGgoMCkKICAgICAg
ICAgLCBoZWlnaHQoMCkKICAgICAgICAgLCB0cGl4ZWwoMCkKLSAgICAgICAgLCBkaXNwb3NhbE1l
dGhvZChXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlTm90U3BlY2lmaWVkKQorICAgICAgICAs
IGRpc3Bvc2FsTWV0aG9kKFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpOb3RT
cGVjaWZpZWQpCiAgICAgICAgICwgbG9jYWxDb2xvcm1hcFBvc2l0aW9uKDApCiAgICAgICAgICwg
bG9jYWxDb2xvcm1hcFNpemUoMCkKICAgICAgICAgLCBkYXRhc2l6ZSgwKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1h
Z2VEZWNvZGVyLmNwcAppbmRleCBhNTkyMDFiNTZlNWIyMmUyYTg1MWMwYzk5MmVhNGIxZjg4Y2Mz
YjRmLi45MzQ1MWQwYmMyYjc0ZDg3ODgyYTkwM2MyYzFkMDIwNzUyMTcyZDlmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNv
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28v
SUNPSW1hZ2VEZWNvZGVyLmNwcApAQCAtODgsMjEgKzg4LDIwIEBAIEludFNpemUgSUNPSW1hZ2VE
ZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCkK
ICAgICByZXR1cm4gKGluZGV4ICYmIChpbmRleCA8IG1fZGlyRW50cmllcy5zaXplKCkpKSA/IG1f
ZGlyRW50cmllc1tpbmRleF0ubV9zaXplIDogc2l6ZSgpOwogfQogCi1ib29sIElDT0ltYWdlRGVj
b2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9vbCBJQ09J
bWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICAvLyBUaGUg
c2l6ZSBjYWxjdWxhdGVkIGluc2lkZSB0aGUgQk1QSW1hZ2VSZWFkZXIgaGFkIGJldHRlciBtYXRj
aCB0aGUgb25lIGluCiAgICAgLy8gdGhlIGljb24gZGlyZWN0b3J5LgotICAgIHJldHVybiBtX2Zy
YW1lU2l6ZS5pc0VtcHR5KCkgPyBJbWFnZURlY29kZXI6OnNldFNpemUod2lkdGgsIGhlaWdodCkg
OiAoKEludFNpemUod2lkdGgsIGhlaWdodCkgPT0gbV9mcmFtZVNpemUpIHx8IHNldEZhaWxlZCgp
KTsKKyAgICByZXR1cm4gbV9mcmFtZVNpemUuaXNFbXB0eSgpID8gSW1hZ2VEZWNvZGVyOjpzZXRT
aXplKHNpemUpIDogKChzaXplID09IG1fZnJhbWVTaXplKSB8fCBzZXRGYWlsZWQoKSk7CiB9CiAK
IHNpemVfdCBJQ09JbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogewogICAgIGRlY29kZSgwLCB0
cnVlKTsKLSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkgeworCisgICAgaWYg
KG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNo
ZS5yZXNpemUobV9kaXJFbnRyaWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9kaXJFbnRyaWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9mcmFtZUJ1ZmZl
ckNhY2hlW2ldLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKLSAgICB9
CisKICAgICAvLyBDQVVUSU9OOiBXZSBtdXN0IG5vdCByZXNpemUgbV9mcmFtZUJ1ZmZlckNhY2hl
IGFnYWluIGFmdGVyIHRoaXMsIGFzCiAgICAgLy8gZGVjb2RlQXRJbmRleCgpIG1heSBnaXZlIGEg
Qk1QSW1hZ2VSZWFkZXIgYSBwb2ludGVyIHRvIG9uZSBvZiB0aGUKICAgICAvLyBlbnRyaWVzLgpA
QCAtMTE2LDcgKzExNSw3IEBAIEltYWdlRnJhbWUqIElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZm
ZXJBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBJbWFnZUZy
YW1lKiBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKLSAgICBpZiAoYnVmZmVy
LT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgIGlmICghYnVmZmVy
LT5pc0NvbXBsZXRlKCkpCiAgICAgICAgIGRlY29kZShpbmRleCwgZmFsc2UpOwogICAgIHJldHVy
biBidWZmZXI7CiB9CkBAIC0xNzksNyArMTc4LDcgQEAgdm9pZCBJQ09JbWFnZURlY29kZXI6OmRl
Y29kZShzaXplX3QgaW5kZXgsIGJvb2wgb25seVNpemUpCiAgICAgLy8gSWYgd2UncmUgZG9uZSBk
ZWNvZGluZyB0aGlzIGZyYW1lLCB3ZSBkb24ndCBuZWVkIHRoZSBCTVBJbWFnZVJlYWRlciBvcgog
ICAgIC8vIFBOR0ltYWdlRGVjb2RlciBhbnltb3JlLiAgKElmIHdlIGZhaWxlZCwgdGhlc2UgaGF2
ZSBhbHJlYWR5IGJlZW4KICAgICAvLyBjbGVhcmVkLikKLSAgICBlbHNlIGlmICgobV9mcmFtZUJ1
ZmZlckNhY2hlLnNpemUoKSA+IGluZGV4KSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XS5z
dGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKSkgeworICAgIGVsc2UgaWYgKCht
X2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpID4gaW5kZXgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGVb
aW5kZXhdLmlzQ29tcGxldGUoKSkpIHsKICAgICAgICAgbV9ibXBSZWFkZXJzW2luZGV4XSA9IG51
bGxwdHI7CiAgICAgICAgIG1fcG5nRGVjb2RlcnNbaW5kZXhdID0gbnVsbHB0cjsKICAgICB9CkBA
IC0yMjAsNyArMjE5LDcgQEAgYm9vbCBJQ09JbWFnZURlY29kZXI6OmRlY29kZUF0SW5kZXgoc2l6
ZV90IGluZGV4KQogCiAgICAgaWYgKCFtX3BuZ0RlY29kZXJzW2luZGV4XSkgewogICAgICAgICBt
X3BuZ0RlY29kZXJzW2luZGV4XSA9IHN0ZDo6bWFrZV91bmlxdWU8Ci0gICAgICAgICAgICBQTkdJ
bWFnZURlY29kZXI+KG1fcHJlbXVsdGlwbHlBbHBoYSA/IEltYWdlU291cmNlOjpBbHBoYVByZW11
bHRpcGxpZWQgOiBJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLAorICAgICAgICAg
ICAgUE5HSW1hZ2VEZWNvZGVyPihwcmVtdWx0aXBseUFscGhhKCkgPyBJbWFnZVNvdXJjZTo6QWxw
aGFQcmVtdWx0aXBsaWVkIDogSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwKICAg
ICAgICAgICAgICAgICBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8gSW1hZ2VTb3VyY2U6
OkdhbW1hQW5kQ29sb3JQcm9maWxlSWdub3JlZCA6IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9y
UHJvZmlsZUFwcGxpZWQpOwogICAgICAgICBzZXREYXRhRm9yUE5HRGVjb2RlckF0SW5kZXgoaW5k
ZXgpOwogICAgIH0KQEAgLTI3OSw3ICsyNzgsNyBAQCBib29sIElDT0ltYWdlRGVjb2Rlcjo6cHJv
Y2Vzc0RpcmVjdG9yeUVudHJpZXMoKQogICAgIGNvbnN0IEljb25EaXJlY3RvcnlFbnRyeSYgZGly
RW50cnkgPSBtX2RpckVudHJpZXMuZmlyc3QoKTsKICAgICAvLyBUZWNobmljYWxseSwgdGhpcyBu
ZXh0IGNhbGwgc2hvdWxkbid0IGJlIGFibGUgdG8gZmFpbCwgc2luY2UgdGhlIHdpZHRoCiAgICAg
Ly8gYW5kIGhlaWdodCBoZXJlIGFyZSBlYWNoIDw9IDI1NiwgYW5kIHxtX2ZyYW1lU2l6ZXwgaXMg
ZW1wdHkuCi0gICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXplLndpZHRoKCksIGRpckVu
dHJ5Lm1fc2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXpl
KTsKIH0KIAogSUNPSW1hZ2VEZWNvZGVyOjpJY29uRGlyZWN0b3J5RW50cnkgSUNPSW1hZ2VEZWNv
ZGVyOjpyZWFkRGlyZWN0b3J5RW50cnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCmluZGV4IDU4
MGM2N2E4ODNhNDBiNmU1NDIwZjY1YWUzNDQ4ODQ1NzQxOTM4ZWMuLmQzM2QwNThhMTU5NjA3ZGY4
OTM5Y2VhMWNkN2E2ZjMxNDRiNzIyZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgKQEAgLTQ5
LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGlzU2l6ZUF2YWls
YWJsZSgpIG92ZXJyaWRlOwogICAgICAgICBJbnRTaXplIHNpemUoKSBvdmVycmlkZTsKICAgICAg
ICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCkgb3Zl
cnJpZGU7Ci0gICAgICAgIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVp
Z2h0KSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVy
cmlkZTsKICAgICAgICAgc2l6ZV90IGZyYW1lQ291bnQoKSBvdmVycmlkZTsKICAgICAgICAgSW1h
Z2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkgb3ZlcnJpZGU7CiAgICAgICAgIC8v
IENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgYWxsIHJlYWRlcnMgYW5kIGRlY29kZXJzLiAg
QmUgY2FyZWZ1bCB0bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggZWU2NmFj
MTRkNGJlMDdjYTlhZmZiMmEzYWZmODllYmZhNjJmYjEyZS4uYzE3NDAxNjBhMTI0OTU0OWFhZGIw
YTljNDAyYzhkN2U5OGZiOTVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCkBA
IC0xOTYsMzYgKzE5Niw2IEBAIHN0YXRpYyBJbWFnZU9yaWVudGF0aW9uIHJlYWRJbWFnZU9yaWVu
dGF0aW9uKGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8pCiAgICAgcmV0dXJuIEltYWdlT3Jp
ZW50YXRpb24oKTsKIH0KIAotc3RhdGljIENvbG9yUHJvZmlsZSByZWFkQ29sb3JQcm9maWxlKGpw
ZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8pCi17Ci0jaWYgVVNFKElDQ0pQRUcpCi0gICAgSk9D
VEVUKiBwcm9maWxlOwotICAgIHVuc2lnbmVkIGludCBwcm9maWxlTGVuZ3RoOwotCi0gICAgaWYg
KCFyZWFkX2ljY19wcm9maWxlKGluZm8sICZwcm9maWxlLCAmcHJvZmlsZUxlbmd0aCkpCi0gICAg
ICAgIHJldHVybiBDb2xvclByb2ZpbGUoKTsKLQotICAgIC8vIE9ubHkgYWNjZXB0IFJHQiBjb2xv
ciBwcm9maWxlcyBmcm9tIGlucHV0IGNsYXNzIGRldmljZXMuCi0gICAgYm9vbCBpZ25vcmVQcm9m
aWxlID0gZmFsc2U7Ci0gICAgY2hhciogcHJvZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNo
YXIqPihwcm9maWxlKTsKLSAgICBpZiAocHJvZmlsZUxlbmd0aCA8IEltYWdlRGVjb2Rlcjo6aWNj
Q29sb3JQcm9maWxlSGVhZGVyTGVuZ3RoKQotICAgICAgICBpZ25vcmVQcm9maWxlID0gdHJ1ZTsK
LSAgICBlbHNlIGlmICghSW1hZ2VEZWNvZGVyOjpyZ2JDb2xvclByb2ZpbGUocHJvZmlsZURhdGEs
IHByb2ZpbGVMZW5ndGgpKQotICAgICAgICBpZ25vcmVQcm9maWxlID0gdHJ1ZTsKLSAgICBlbHNl
IGlmICghSW1hZ2VEZWNvZGVyOjppbnB1dERldmljZUNvbG9yUHJvZmlsZShwcm9maWxlRGF0YSwg
cHJvZmlsZUxlbmd0aCkpCi0gICAgICAgIGlnbm9yZVByb2ZpbGUgPSB0cnVlOwotCi0gICAgQ29s
b3JQcm9maWxlIGNvbG9yUHJvZmlsZTsKLSAgICBpZiAoIWlnbm9yZVByb2ZpbGUpCi0gICAgICAg
IGNvbG9yUHJvZmlsZS5hcHBlbmQocHJvZmlsZURhdGEsIHByb2ZpbGVMZW5ndGgpOwotICAgIGZy
ZWUocHJvZmlsZSk7Ci0gICAgcmV0dXJuIGNvbG9yUHJvZmlsZTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGluZm8pOwotICAgIHJldHVybiBDb2xvclByb2ZpbGUoKTsKLSNlbmRpZgotfQotCiBj
bGFzcyBKUEVHSW1hZ2VSZWFkZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgpAQCAtMzUyLDcgKzMyMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fc3RhdGUgPSBK
UEVHX1NUQVJUX0RFQ09NUFJFU1M7CiAKICAgICAgICAgICAgIC8vIFdlIGNhbiBmaWxsIGluIHRo
ZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZhaWxhYmxlLgotICAgICAgICAgICAgaWYg
KCFtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVp
Z2h0KSkKKyAgICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5zZXRTaXplKEludFNpemUobV9pbmZv
LmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX2RlY29kZXItPnNldE9yaWVudGF0aW9uKHJlYWRJ
bWFnZU9yaWVudGF0aW9uKGluZm8oKSkpOwpAQCAtMzYzLDEzICszMzMsNiBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBpZiAobV9kZWNvZGVyLT53aWxsRG93blNhbXBsZSgpICYmIHR1cmJvU3dpenps
ZWQobV9pbmZvLm91dF9jb2xvcl9zcGFjZSkpCiAgICAgICAgICAgICAgICAgbV9pbmZvLm91dF9j
b2xvcl9zcGFjZSA9IEpDU19SR0I7CiAjZW5kaWYKLSAgICAgICAgICAgIC8vIEFsbG93IGNvbG9y
IG1hbmFnZW1lbnQgb2YgdGhlIGRlY29kZWQgUkdCQSBwaXhlbHMgaWYgcG9zc2libGUuCi0gICAg
ICAgICAgICBpZiAoIW1fZGVjb2Rlci0+aWdub3Jlc0dhbW1hQW5kQ29sb3JQcm9maWxlKCkpIHsK
LSAgICAgICAgICAgICAgICBDb2xvclByb2ZpbGUgcmdiSW5wdXREZXZpY2VDb2xvclByb2ZpbGUg
PSByZWFkQ29sb3JQcm9maWxlKGluZm8oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZ2JJbnB1
dERldmljZUNvbG9yUHJvZmlsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZGVj
b2Rlci0+c2V0Q29sb3JQcm9maWxlKHJnYklucHV0RGV2aWNlQ29sb3JQcm9maWxlKTsKLSAgICAg
ICAgICAgIH0KLQogICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb2NhdGUgYSBnaWFudCBhbmQgc3Vw
ZXJmbHVvdXMgbWVtb3J5IGJ1ZmZlciB3aGVuIHRoZQogICAgICAgICAgICAgLy8gaW1hZ2UgaXMg
YSBzZXF1ZW50aWFsIEpQRUcuCiAgICAgICAgICAgICBtX2luZm8uYnVmZmVyZWRfaW1hZ2UgPSBq
cGVnX2hhc19tdWx0aXBsZV9zY2FucygmbV9pbmZvKTsKQEAgLTU1Niw5ICs1MTksOSBAQCBib29s
IEpQRUdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJuIEltYWdlRGVj
b2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKLWJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0
U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9vbCBKUEVHSW1hZ2VEZWNv
ZGVyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKCFJbWFnZURlY29k
ZXI6OnNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAgaWYgKCFJbWFnZURlY29kZXI6OnNldFNp
emUoc2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHByZXBhcmVTY2FsZURhdGFJ
Zk5lY2Vzc2FyeSgpOwpAQCAtNTcwLDEzICs1MzMsMTEgQEAgSW1hZ2VGcmFtZSogSlBFR0ltYWdl
RGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICBpZiAoaW5kZXgp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5
KCkpIHsKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKICAgICAgICAgbV9m
cmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBd
LnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKLSAgICB9CiAKICAgICBJ
bWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKLSAgICBpZiAoZnJhbWUu
c3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkKKyAgICBpZiAoIWZyYW1lLmlz
Q29tcGxldGUoKSkKICAgICAgICAgZGVjb2RlKGZhbHNlKTsKICAgICByZXR1cm4gJmZyYW1lOwog
fQpAQCAtNTg4LDEzICs1NDksMTMgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQo
KQogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlPgotdm9pZCBzZXRQaXhl
bChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJl
c3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKK3ZvaWQgc2V0UGl4ZWwoSW1hZ2VG
cmFtZSYgYnVmZmVyLCBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzLCBKU0FNUEFSUkFZIHNhbXBsZXMs
IGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBMRSoganNhbXBsZSA9ICpzYW1wbGVzICsgY29sdW1u
ICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMgOiA0KTsKIAogICAgIHN3aXRjaCAoY29sb3JT
cGFjZSkgewogICAgIGNhc2UgSkNTX1JHQjoKLSAgICAgICAgYnVmZmVyLnNldFJHQkEoY3VycmVu
dEFkZHJlc3MsIGpzYW1wbGVbMF0sIGpzYW1wbGVbMV0sIGpzYW1wbGVbMl0sIDB4RkYpOworICAg
ICAgICBidWZmZXIucGl4ZWxzKCktPnNldFJHQkEoY3VycmVudEFkZHJlc3MsIGpzYW1wbGVbMF0s
IGpzYW1wbGVbMV0sIGpzYW1wbGVbMl0sIDB4RkYpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEpDU19DTVlLOgogICAgICAgICAvLyBTb3VyY2UgaXMgJ0ludmVydGVkIENNWUsnLCBvdXRwdXQg
aXMgUkdCLgpAQCAtNjA3LDcgKzU2OCw3IEBAIHZvaWQgc2V0UGl4ZWwoSW1hZ2VGcmFtZSYgYnVm
ZmVyLCBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNzLCBKU0FNUEFSCiAgICAg
ICAgIC8vIEZyb20gQ01ZICgwLi4xKSB0byBSR0IgKDAuLjEpOgogICAgICAgICAvLyBSID0gMSAt
IEMgPT4gMSAtICgxIC0gaUMqaUspID0+IGlDKmlLICBbRyBhbmQgQiBzaW1pbGFyXQogICAgICAg
ICB1bnNpZ25lZCBrID0ganNhbXBsZVszXTsKLSAgICAgICAgYnVmZmVyLnNldFJHQkEoY3VycmVu
dEFkZHJlc3MsIGpzYW1wbGVbMF0gKiBrIC8gMjU1LCBqc2FtcGxlWzFdICogayAvIDI1NSwganNh
bXBsZVsyXSAqIGsgLyAyNTUsIDB4RkYpOworICAgICAgICBidWZmZXIucGl4ZWxzKCktPnNldFJH
QkEoY3VycmVudEFkZHJlc3MsIGpzYW1wbGVbMF0gKiBrIC8gMjU1LCBqc2FtcGxlWzFdICogayAv
IDI1NSwganNhbXBsZVsyXSAqIGsgLyAyNTUsIDB4RkYpOwogICAgICAgICBicmVhazsKICAgICB9
CiB9CkBAIC02MzEsNyArNTkyLDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2Fu
bGluZXMoSW1hZ2VGcmFtZSYgYnVmZmVyKQogICAgICAgICBpZiAoZGVzdFkgPCAwKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50
QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIGRlc3RZKTsKKyAgICAgICAgUkdCQTMyKiBjdXJy
ZW50QWRkcmVzcyA9IGJ1ZmZlci5waXhlbHMoKS0+YXQoMCwgZGVzdFkpOwogICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKICAgICAgICAgICAgIHNldFBpeGVsPGNvbG9y
U3BhY2U+KGJ1ZmZlciwgY3VycmVudEFkZHJlc3MsIHNhbXBsZXMsIGlzU2NhbGVkID8gbV9zY2Fs
ZWRDb2x1bW5zW3hdIDogeCk7CiAgICAgICAgICAgICArK2N1cnJlbnRBZGRyZXNzOwpAQCAtNjUz
LDE3ICs2MTQsMTMgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQog
CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIEltYWdl
RnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKLSAgICBpZiAoYnVmZmVyLnN0
YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFidWZmZXIu
c2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkKKyAg
ICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci5pbml0UGl4ZWxz
KHNjYWxlZFNpemUoKSwgcHJlbXVsdGlwbHlBbHBoYSgpKSkKICAgICAgICAgICAgIHJldHVybiBz
ZXRGYWlsZWQoKTsKLSAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBh
cnRpYWwpOworICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkRlY29kaW5nU3Rh
dHVzOjpQYXJ0aWFsKTsKICAgICAgICAgLy8gVGhlIGJ1ZmZlciBpcyB0cmFuc3BhcmVudCBvdXRz
aWRlIHRoZSBkZWNvZGVkIGFyZWEgd2hpbGUgdGhlIGltYWdlIGlzCiAgICAgICAgIC8vIGxvYWRp
bmcuIFRoZSBjb21wbGV0ZWQgaW1hZ2Ugd2lsbCBiZSBtYXJrZWQgZnVsbHkgb3BhcXVlIGluIGpw
ZWdDb21wbGV0ZSgpLgogICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7Ci0gICAgICAg
IGJ1ZmZlci5zZXRDb2xvclByb2ZpbGUobV9jb2xvclByb2ZpbGUpOwotCi0gICAgICAgIC8vIEZv
ciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAg
ICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkp
KTsKICAgICB9CiAKICAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvID0gbV9yZWFkZXIt
PmluZm8oKTsKQEAgLTY3MSw3ICs2MjgsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1
dFNjYW5saW5lcygpCiAjaWYgZGVmaW5lZChUVVJCT19KUEVHX1JHQl9TV0laWkxFKQogICAgIGlm
ICghbV9zY2FsZWQgJiYgdHVyYm9Td2l6emxlZChpbmZvLT5vdXRfY29sb3Jfc3BhY2UpKSB7CiAg
ICAgICAgIHdoaWxlIChpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPCBpbmZvLT5vdXRwdXRfaGVpZ2h0
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3cgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGNoYXIqPihidWZmZXIuZ2V0QWRkcigwLCBpbmZvLT5vdXRwdXRfc2NhbmxpbmUpKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KGJ1ZmZlci5waXhlbHMoKS0+YXQoMCwgaW5mby0+b3V0cHV0X3NjYW5saW5lKSk7
CiAgICAgICAgICAgICBpZiAoanBlZ19yZWFkX3NjYW5saW5lcyhpbmZvLCAmcm93LCAxKSAhPSAx
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KQEAgLTcwNCw3ICs2
NjEsNyBAQCB2b2lkIEpQRUdJbWFnZURlY29kZXI6OmpwZWdDb21wbGV0ZSgpCiAgICAgLy8gZW1w
dHkuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAg
IGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7Ci0gICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZy
YW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkRl
Y29kaW5nU3RhdHVzOjpDb21wbGV0ZSk7CiB9CiAKIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6ZGVj
b2RlKGJvb2wgb25seVNpemUpCkBAIC03MjEsNyArNjc4LDcgQEAgdm9pZCBKUEVHSW1hZ2VEZWNv
ZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSkKICAgICAgICAgc2V0RmFpbGVkKCk7CiAgICAgLy8g
SWYgd2UncmUgZG9uZSBkZWNvZGluZyB0aGUgaW1hZ2UsIHdlIGRvbid0IG5lZWQgdGhlIEpQRUdJ
bWFnZVJlYWRlcgogICAgIC8vIGFueW1vcmUuICAoSWYgd2UgZmFpbGVkLCB8bV9yZWFkZXJ8IGhh
cyBhbHJlYWR5IGJlZW4gY2xlYXJlZC4pCi0gICAgZWxzZSBpZiAoIW1fZnJhbWVCdWZmZXJDYWNo
ZS5pc0VtcHR5KCkgJiYgKG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBJbWFnZUZy
YW1lOjpGcmFtZUNvbXBsZXRlKSkKKyAgICBlbHNlIGlmICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlz
RW1wdHkoKSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlWzBdLmlzQ29tcGxldGUoKSkpCiAgICAgICAg
IG1fcmVhZGVyID0gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAppbmRl
eCA2YzFmYzA0MjczMjIwMzc1YmM2YTI1ZWMxOThmOGM4YTUxMDE0ODZjLi5mYzIzZmJkOTYzN2I1
M2FlZTY2NTMzYjZhYWI0ZjdiMjY4ZGMwZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIu
aApAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEltYWdl
RGVjb2RlcgogICAgICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiAianBnIjsgfQogICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIG92ZXJy
aWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJp
ZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
IG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIHxtX3Jl
YWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBkZWxldGVk
IG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQpAQCAtNjYs
NyArNjYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgb3V0cHV0U2Nhbmxp
bmVzKCk7CiAgICAgICAgIHZvaWQganBlZ0NvbXBsZXRlKCk7CiAKLSAgICAgICAgdm9pZCBzZXRD
b2xvclByb2ZpbGUoY29uc3QgQ29sb3JQcm9maWxlJiBjb2xvclByb2ZpbGUpIHsgbV9jb2xvclBy
b2ZpbGUgPSBjb2xvclByb2ZpbGU7IH0KICAgICAgICAgdm9pZCBzZXRPcmllbnRhdGlvbihJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsg
fQogCiAgICAgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggZTY0NGE3
MTEwZWZjYjU0MGQ4OWNlMWJhODExMDBiYzQ4MjNiMThmMi4uYzg4ODA5NzQ2MDkwZmM5M2RkOTk5
OGJiMzM1YWEwMmU5ZmU4NWI1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTIz
NSw5ICsyMzUsOSBAQCBib29sIFBOR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAotYm9vbCBQTkdJ
bWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK2Jv
b2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAg
aWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAgaWYgKCFJbWFn
ZURlY29kZXI6OnNldFNpemUoc2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHBy
ZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMjU3LDEzICsyNTcsMTEgQEAgSW1hZ2VG
cmFtZSogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogCi0gICAgaWYgKG1fZnJhbWVCdWZmZXJD
YWNoZS5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkK
ICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKLSAgICAgICAgbV9mcmFtZUJ1
ZmZlckNhY2hlWzBdLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKLSAg
ICB9CiAKICAgICBJbWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07
Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCisg
ICAgaWYgKCFmcmFtZS5pc0NvbXBsZXRlKCkpCiAgICAgICAgIGRlY29kZShmYWxzZSwgaW5kZXgp
OwogICAgIHJldHVybiAmZnJhbWU7CiB9CkBAIC0yNzYsMzcgKzI3NCw2IEBAIGJvb2wgUE5HSW1h
Z2VEZWNvZGVyOjpzZXRGYWlsZWQoKQogICAgIHJldHVybiBJbWFnZURlY29kZXI6OnNldEZhaWxl
ZCgpOwogfQogCi1zdGF0aWMgdm9pZCByZWFkQ29sb3JQcm9maWxlKHBuZ19zdHJ1Y3RwIHBuZywg
cG5nX2luZm9wIGluZm8sIENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxlKQotewotICAgIEFTU0VS
VChjb2xvclByb2ZpbGUuaXNFbXB0eSgpKTsKLQotI2lmZGVmIFBOR19pQ0NQX1NVUFBPUlRFRAot
ICAgIGNoYXIqIHByb2ZpbGVOYW1lOwotICAgIGludCBjb21wcmVzc2lvblR5cGU7Ci0jaWYgKFBO
R19MSUJQTkdfVkVSIDwgMTA1MDApCi0gICAgcG5nX2NoYXJwIHByb2ZpbGU7Ci0jZWxzZQotICAg
IHBuZ19ieXRlcCBwcm9maWxlOwotI2VuZGlmCi0gICAgcG5nX3VpbnRfMzIgcHJvZmlsZUxlbmd0
aDsKLSAgICBpZiAoIXBuZ19nZXRfaUNDUChwbmcsIGluZm8sICZwcm9maWxlTmFtZSwgJmNvbXBy
ZXNzaW9uVHlwZSwgJnByb2ZpbGUsICZwcm9maWxlTGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gT25seSBhY2NlcHQgUkdCIGNvbG9yIHByb2ZpbGVzIGZyb20gaW5wdXQgY2xhc3Mg
ZGV2aWNlcy4KLSAgICBib29sIGlnbm9yZVByb2ZpbGUgPSBmYWxzZTsKLSAgICBjaGFyKiBwcm9m
aWxlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHByb2ZpbGUpOwotICAgIGlmIChwcm9m
aWxlTGVuZ3RoIDwgSW1hZ2VEZWNvZGVyOjppY2NDb2xvclByb2ZpbGVIZWFkZXJMZW5ndGgpCi0g
ICAgICAgIGlnbm9yZVByb2ZpbGUgPSB0cnVlOwotICAgIGVsc2UgaWYgKCFJbWFnZURlY29kZXI6
OnJnYkNvbG9yUHJvZmlsZShwcm9maWxlRGF0YSwgcHJvZmlsZUxlbmd0aCkpCi0gICAgICAgIGln
bm9yZVByb2ZpbGUgPSB0cnVlOwotICAgIGVsc2UgaWYgKCFJbWFnZURlY29kZXI6OmlucHV0RGV2
aWNlQ29sb3JQcm9maWxlKHByb2ZpbGVEYXRhLCBwcm9maWxlTGVuZ3RoKSkKLSAgICAgICAgaWdu
b3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICBpZiAoIWlnbm9yZVByb2ZpbGUpCi0gICAgICAgIGNv
bG9yUHJvZmlsZS5hcHBlbmQocHJvZmlsZURhdGEsIHByb2ZpbGVMZW5ndGgpOwotI2VuZGlmCi19
Ci0KIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogewogICAgIHBuZ19z
dHJ1Y3RwIHBuZyA9IG1fcmVhZGVyLT5wbmdQdHIoKTsKQEAgLTMyNiw3ICsyOTMsNyBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICAvLyB3aWxsIGNlYXNlIHRv
IGV4aXN0LiAgTm90ZSB0aGF0IHdlJ2xsIHN0aWxsIHByb3Blcmx5IHNldCB0aGUgZmFpbHVyZSBm
bGFnCiAgICAgLy8gaW4gdGhpcyBjYXNlIGFzIHNvb24gYXMgd2UgbG9uZ2ptcCgpLgogICAgIG1f
ZG9Ob3RoaW5nT25GYWlsdXJlID0gdHJ1ZTsKLSAgICBib29sIHJlc3VsdCA9IHNldFNpemUod2lk
dGgsIGhlaWdodCk7CisgICAgYm9vbCByZXN1bHQgPSBzZXRTaXplKEludFNpemUod2lkdGgsIGhl
aWdodCkpOwogICAgIG1fZG9Ob3RoaW5nT25GYWlsdXJlID0gZmFsc2U7CiAgICAgaWYgKCFyZXN1
bHQpIHsKICAgICAgICAgbG9uZ2ptcChKTVBCVUYocG5nKSwgMSk7CkBAIC00MDUsMTYgKzM3Miw2
IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogICAgIGlmIChjb2xv
clR5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWSB8fCBjb2xvclR5cGUgPT0gUE5HX0NPTE9SX1RZ
UEVfR1JBWV9BTFBIQSkKICAgICAgICAgcG5nX3NldF9ncmF5X3RvX3JnYihwbmcpOwogCi0gICAg
aWYgKChjb2xvclR5cGUgJiBQTkdfQ09MT1JfTUFTS19DT0xPUikgJiYgIW1faWdub3JlR2FtbWFB
bmRDb2xvclByb2ZpbGUpIHsKLSAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGNvbG9yIHByb2Zp
bGVzIGZvciBjb2xvciBQQUxFVFRFIGFuZCBSR0JbQV0gUE5HLiBTdXBwb3J0aW5nCi0gICAgICAg
IC8vIGNvbG9yIHByb2ZpbGVzIGZvciBncmF5LXNjYWxlIGltYWdlcyBpcyBzbGlnaHRseSB0cmlj
a3ksIGF0IGxlYXN0IHVzaW5nIHRoZQotICAgICAgICAvLyBDb3JlR3JhcGhpY3MgSUNDIGxpYnJh
cnksIGJlY2F1c2Ugd2UgZXhwYW5kIGdyYXktc2NhbGUgaW1hZ2VzIHRvIFJHQiBidXQgd2UKLSAg
ICAgICAgLy8gZG8gbm90IHNpbWlsYXJseSB0cmFuc2Zvcm0gdGhlIGNvbG9yIHByb2ZpbGUuIFdl
J2QgZWl0aGVyIG5lZWQgdG8gdHJhbnNmb3JtCi0gICAgICAgIC8vIHRoZSBjb2xvciBwcm9maWxl
IG9yIHdlJ2QgbmVlZCB0byBkZWNvZGUgaW50byBhIGdyYXktc2NhbGUgaW1hZ2UgYnVmZmVyIGFu
ZAotICAgICAgICAvLyBoYW5kIHRoYXQgdG8gQ29yZUdyYXBoaWNzLgotICAgICAgICByZWFkQ29s
b3JQcm9maWxlKHBuZywgaW5mbywgbV9jb2xvclByb2ZpbGUpOwotICAgIH0KLQogICAgIC8vIERl
YWwgd2l0aCBnYW1tYSBhbmQga2VlcCBpdCB1bmRlciBvdXIgY29udHJvbC4KICAgICBkb3VibGUg
Z2FtbWE7CiAgICAgaWYgKCFtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlICYmIHBuZ19nZXRf
Z0FNQShwbmcsIGluZm8sICZnYW1tYSkpIHsKQEAgLTQ1MiwxOSArNDA5LDE5IEBAIHZvaWQgUE5H
SW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogICAgIH0KIH0KIAotc3RhdGljIGlubGlu
ZSB2b2lkIHNldFBpeGVsUkdCKEltYWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdCwgcG5nX2J5dGVw
IHBpeGVsKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCKFJHQkEzMiogZGVzdCwgcG5n
X2J5dGVwIHBpeGVsKQogewogICAgICpkZXN0ID0gMHhGRjAwMDAwMFUgfCBwaXhlbFswXSA8PCAx
NiB8IHBpeGVsWzFdIDw8IDggfCBwaXhlbFsyXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNl
dFBpeGVsUkdCQShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwg
dW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBz
ZXRQaXhlbFJHQkEoUkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXIm
IG5vblRyaXZpYWxBbHBoYU1hc2spCiB7CiAgICAgdW5zaWduZWQgY2hhciBhID0gcGl4ZWxbM107
CiAgICAgKmRlc3QgPSBhIDw8IDI0IHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4IHwg
cGl4ZWxbMl07CiAgICAgbm9uVHJpdmlhbEFscGhhTWFzayB8PSAoMjU1IC0gYSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKEltYWdlRnJhbWU6OlBp
eGVsRGF0YSogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFs
QWxwaGFNYXNrKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEo
UkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxB
bHBoYU1hc2spCiB7CiAgICAgdW5zaWduZWQgY2hhciBhID0gcGl4ZWxbM107CiAgICAgdW5zaWdu
ZWQgY2hhciByID0gZmFzdERpdmlkZUJ5MjU1KHBpeGVsWzBdICogYSk7CkBAIC00ODYsOSArNDQz
LDkgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiBy
b3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAg
ICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbbV9jdXJyZW50RnJhbWVd
OwotICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgewor
ICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKSB7CiAgICAgICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IG1f
cmVhZGVyLT5wbmdQdHIoKTsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXpl
KCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkgeworICAgICAgICBpZiAoIWJ1ZmZl
ci5pbml0UGl4ZWxzKHNjYWxlZFNpemUoKSwgcHJlbXVsdGlwbHlBbHBoYSgpKSkgewogICAgICAg
ICAgICAgbG9uZ2ptcChKTVBCVUYocG5nKSwgMSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTUwNCwxNyArNDYxLDEzIEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFp
bGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFt
ZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpE
ZWNvZGluZ1N0YXR1czo6UGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxz
ZSk7Ci0gICAgICAgIGJ1ZmZlci5zZXRDb2xvclByb2ZpbGUobV9jb2xvclByb2ZpbGUpOwogCiAj
aWYgRU5BQkxFKEFQTkcpCiAgICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSkKICAgICAgICAgICAg
IGluaXRGcmFtZUJ1ZmZlcihtX2N1cnJlbnRGcmFtZSk7Ci0gICAgICAgIGVsc2UKICNlbmRpZgot
ICAgICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGlt
YWdlLgotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICAvKiBsaWJwbmcgY29tbWVudHMgKGhlcmUgdG8g
ZXhwbGFpbiB3aGF0IGZvbGxvd3MpLgpAQCAtNTczLDcgKzUyNiw3IEBAIHZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCBy
b3dJbmRleCwKICAgICB9CiAKICAgICAvLyBXcml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRv
IHRoZSBmcmFtZSBidWZmZXIuCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0g
YnVmZmVyLmdldEFkZHIoMCwgeSk7CisgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLnBpeGVs
cygpLT5hdCgwLCB5KTsKICAgICBpbnQgd2lkdGggPSBzY2FsZWRTaXplKCkud2lkdGgoKTsKICAg
ICB1bnNpZ25lZCBjaGFyIG5vblRyaXZpYWxBbHBoYU1hc2sgPSAwOwogCkBAIC01ODIsNyArNTM1
LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiBy
b3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyArK3gpIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIG1fc2Nh
bGVkQ29sdW1uc1t4XSAqIGNvbG9yQ2hhbm5lbHM7CiAgICAgICAgICAgICB1bnNpZ25lZCBhbHBo
YSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7Ci0gICAgICAgICAgICBidWZmZXIuc2V0UkdC
QShhZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKKyAgICAg
ICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdCQShhZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhl
bFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKICAgICAgICAgICAgIG5vblRyaXZpYWxBbHBoYU1hc2sg
fD0gKDI1NSAtIGFscGhhKTsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAtNTkwLDcgKzU0Myw3
IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93
QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICB7CiAgICAgICAgIHBuZ19ieXRlcCBwaXhl
bCA9IHJvdzsKICAgICAgICAgaWYgKGhhc0FscGhhKSB7Ci0gICAgICAgICAgICBpZiAoYnVmZmVy
LnByZW11bHRpcGx5QWxwaGEoKSkgeworICAgICAgICAgICAgaWYgKHByZW11bHRpcGx5QWxwaGEo
KSkgewogICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCwgcGl4
ZWwgKz0gNCkKICAgICAgICAgICAgICAgICAgICAgc2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShh
ZGRyZXNzKyssIHBpeGVsLCBub25Ucml2aWFsQWxwaGFNYXNrKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CkBAIC02MTksNyArNTcyLDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnBuZ0NvbXBsZXRl
KCkKICAgICB9CiAjZW5kaWYKICAgICBpZiAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkp
Ci0gICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpLnNldFN0YXR1cyhJbWFnZUZyYW1l
OjpGcmFtZUNvbXBsZXRlKTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuc2V0
U3RhdHVzKEltYWdlRnJhbWU6OkRlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSk7CiB9CiAKIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSwgdW5zaWduZWQgaGFsdEF0RnJh
bWUpCkBAIC02NjMsOCArNjE2LDYgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJlYWRDaHVua3Mo
cG5nX3Vua25vd25fY2h1bmtwIGNodW5rKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUobV9mcmFtZUNvdW50KTsKLSAgICAgICAgZm9yIChh
dXRvJiBpbWFnZUZyYW1lIDogbV9mcmFtZUJ1ZmZlckNhY2hlKQotICAgICAgICAgICAgaW1hZ2VG
cmFtZS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgfSBlbHNl
IGlmICghbWVtY21wKGNodW5rLT5uYW1lLCAiZmNUTCIsIDQpICYmIGNodW5rLT5zaXplID09IDI2
KSB7CiAgICAgICAgIGlmIChtX2hhc0luZm8gJiYgIW1faXNBbmltYXRlZCkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTcwNiwxMCArNjU3LDggQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJlYWRD
aHVua3MocG5nX3Vua25vd25fY2h1bmtwIGNodW5rKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2Zy
YW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwotICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hl
WzBdLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKLSAgICAgICAgfQog
CiAgICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSA8IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkp
IHsKICAgICAgICAgICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtt
X2N1cnJlbnRGcmFtZV07CkBAIC03MjAsMTEgKzY2OSwxMSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rl
cjo6cmVhZENodW5rcyhwbmdfdW5rbm93bl9jaHVua3AgY2h1bmspCiAgICAgICAgICAgICAgICAg
YnVmZmVyLnNldER1cmF0aW9uKG1fZGVsYXlOdW1lcmF0b3IgKiAxMDAwIC8gbV9kZWxheURlbm9t
aW5hdG9yKTsKIAogICAgICAgICAgICAgaWYgKG1fZGlzcG9zZSA9PSAyKQotICAgICAgICAgICAg
ICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRl
UHJldmlvdXMpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJbWFn
ZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlUHJldmlvdXMpOwogICAgICAgICAgICAg
ZWxzZSBpZiAobV9kaXNwb3NlID09IDEpCi0gICAgICAgICAgICAgICAgYnVmZmVyLnNldERpc3Bv
c2FsTWV0aG9kKEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yKTsKKyAgICAgICAg
ICAgICAgICBidWZmZXIuc2V0RGlzcG9zYWxNZXRob2QoSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRo
b2Q6Ok92ZXJ3cml0ZUJnY29sb3IpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJbWFnZUZyYW1lOjpEaXNwb3NlS2VlcCk7CisgICAg
ICAgICAgICAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKEltYWdlRnJhbWU6OkRpc3Bvc2Fs
TWV0aG9kOjpLZWVwKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fZnJhbWVJbmZvID0gdHJ1ZTsK
QEAgLTgwNywxNiArNzU2LDE2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVm
ZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiAgICAgY29uc3QgVmVjdG9yPEltYWdl
RnJhbWU+OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJl
Zm9yZUZyYW1lKTsKIAogICAgIFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaShlbmQpOwot
ICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSkgJiYgKChpLT5zdGF0
dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB8fCAoaS0+ZGlzcG9zYWxNZXRob2QoKSA9
PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKTsgLS1pKSB7Ci0gICAgICAg
IGlmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkgJiYgKGkgIT0g
ZW5kKSkKLSAgICAgICAgICAgIGktPmNsZWFyUGl4ZWxEYXRhKCk7CisgICAgZm9yICg7IChpICE9
IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoKGktPmlzRW1wdHkoKSkgfHwgKGktPmRp
c3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZVBy
ZXZpb3VzKSk7IC0taSkgeworICAgICAgICBpZiAoKGktPmlzQ29tcGxldGUoKSkgJiYgKGkgIT0g
ZW5kKSkKKyAgICAgICAgICAgIGktPmNsZWFyUGl4ZWxzKCk7CiAgICAgfQogCiAgICAgLy8gTm93
IHxpfCBob2xkcyB0aGUgbGFzdCBmcmFtZSB3ZSBuZWVkIHRvIHByZXNlcnZlOyBjbGVhciBwcmlv
ciBmcmFtZXMuCiAgICAgZm9yIChWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGoobV9mcmFt
ZUJ1ZmZlckNhY2hlLmJlZ2luKCkpOyBqICE9IGk7ICsraikgewotICAgICAgICBBU1NFUlQoai0+
c3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKLSAgICAgICAgaWYgKGotPnN0
YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCi0gICAgICAgICAgICBqLT5jbGVhclBp
eGVsRGF0YSgpOworICAgICAgICBBU1NFUlQoIWlzUGFydGlhbCgpKTsKKyAgICAgICAgaWYgKCFq
LT5pc0VtcHR5KCkpCisgICAgICAgICAgICBqLT5jbGVhclBpeGVscygpOwogICAgIH0KIH0KIApA
QCAtODM0LDQ1ICs3ODMsNDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZl
cihzaXplX3QgZnJhbWVJbmRleCkKICAgICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChzaXplKCku
aGVpZ2h0KCkgLSBtX3lPZmZzZXQpOwogCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFt
ZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxl
ZFgoZnJhbWVSZWN0LngoKSk7Ci0gICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJh
bWVSZWN0Lm1heFgoKSwgbGVmdCk7Ci0gICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZy
YW1lUmVjdC55KCkpOwotICAgIGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJl
Y3QubWF4WSgpLCB0b3ApOwotICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0
KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKIAogICAgIC8vIFRoZSBz
dGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBmcmFt
ZSdzCiAgICAgLy8gZGlzcG9zYWwgbWV0aG9kLgogICAgIC8vCi0gICAgLy8gRnJhbWVzIHRoYXQg
dXNlIHRoZSBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgbWV0aG9kIGFyZSBlZmZlY3RpdmVseQor
ICAgIC8vIEZyYW1lcyB0aGF0IHVzZSB0aGUgRGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZVByZXZp
b3VzIG1ldGhvZCBhcmUgZWZmZWN0aXZlbHkKICAgICAvLyBuby1vcHMgaW4gdGVybXMgb2YgY2hh
bmdpbmcgdGhlIHN0YXJ0aW5nIHN0YXRlIG9mIGEgZnJhbWUgY29tcGFyZWQgdG8KICAgICAvLyB0
aGUgc3RhcnRpbmcgc3RhdGUgb2YgdGhlIHByZXZpb3VzIGZyYW1lLCBzbyBza2lwIG92ZXIgdGhl
bS4gIChJZiB0aGUKICAgICAvLyBmaXJzdCBmcmFtZSBzcGVjaWZpZXMgdGhpcyBtZXRob2QsIGl0
IHdpbGwgZ2V0IHRyZWF0ZWQgbGlrZQotICAgIC8vIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGJl
bG93IGFuZCByZXNldCB0byBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuKQorICAgIC8vIERpc3Bv
c2FsTWV0aG9kOjpPdmVyd3JpdGVCZ2NvbG9yIGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBsZXRl
bHkgZW1wdHkgaW1hZ2UuKQogICAgIGNvbnN0IEltYWdlRnJhbWUqIHByZXZCdWZmZXIgPSAmbV9m
cmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgSW1hZ2VGcmFtZTo6RnJhbWVEaXNw
b3NhbE1ldGhvZCBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKTsKLSAg
ICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3Nl
T3ZlcndyaXRlUHJldmlvdXMpKSB7CisgICAgSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2QgcHJl
dk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7CisgICAgd2hpbGUgKGZyYW1l
SW5kZXggJiYgKHByZXZNZXRob2QgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok92ZXJ3
cml0ZVByZXZpb3VzKSkgewogICAgICAgICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNo
ZVstLWZyYW1lSW5kZXhdOwogICAgICAgICBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9z
YWxNZXRob2QoKTsKICAgICB9Ci0gICAgQVNTRVJUKHByZXZCdWZmZXItPnN0YXR1cygpID09IElt
YWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgIEFTU0VSVChwcmV2QnVmZmVyLT5pc0NvbXBs
ZXRlKCkpOwogCi0gICAgaWYgKHByZXZNZXRob2QgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZUtlZXAp
IHsKKyAgICBpZiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6S2Vl
cCkgewogICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbGFzdCBmcmFtZSBhcyB0aGUgc3RhcnRpbmcg
c3RhdGUgZm9yIHRoaXMgZnJhbWUuCi0gICAgICAgIGJ1ZmZlci5jb3B5Qml0bWFwRGF0YSgqcHJl
dkJ1ZmZlcik7CisgICAgICAgIGJ1ZmZlci5jb3B5UGl4ZWxzKCpwcmV2QnVmZmVyKTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0
byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRo
ZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgY29uc3QgSW50UmVjdCYgcHJl
dlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBjb25zdCBJ
bnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPnBpeGVscygpLT5yZWN0KCk7CiAgICAgICAg
IGlmICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCks
IHNjYWxlZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJh
bWUsIG9yIGEgZnJhbWUgdGhlIHNpemUgb2YgdGhlIHdob2xlCiAgICAgICAgICAgICAvLyBpbWFn
ZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCi0gICAgICAgICAgICBidWZm
ZXIuemVyb0ZpbGxQaXhlbERhdGEoKTsKKyAgICAgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+Y2xl
YXIoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHBy
ZXZpb3VzIGJ1ZmZlciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFtZS4KLSAgICAgICAgICAgIGJ1
ZmZlci5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcik7Ci0gICAgICAgICAgICBidWZmZXIuemVy
b0ZpbGxGcmFtZVJlY3QocHJldlJlY3QpOworICAgICAgICAgICAgYnVmZmVyLmNvcHlQaXhlbHMo
KnByZXZCdWZmZXIpOworICAgICAgICAgICAgYnVmZmVyLnBpeGVscygpLT5jbGVhclJlY3QocHJl
dlJlY3QpOwogICAgICAgICB9CisgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYSh0cnVlKTsKICAg
ICB9CisgICAgCisgICAgaW50IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgp
KTsKKyAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBs
ZWZ0KTsKKyAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7Cisg
ICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7
CisgICAgYnVmZmVyLnBpeGVscygpLT5zZXRSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAt
IGxlZnQsIGJvdHRvbSAtIHRvcCkpOwogfQogCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSgpCkBAIC04ODEsMTIgKzgzMiwxMiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJh
bWVDb21wbGV0ZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9
IG1fZnJhbWVCdWZmZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07Ci0gICAgYnVmZmVyLnNldFN0YXR1
cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdl
RnJhbWU6OkRlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSk7CiAKICAgICBwbmdfYnl0ZXAgaW50ZXJs
YWNlQnVmZmVyID0gbV9yZWFkZXItPmludGVybGFjZUJ1ZmZlcigpOwogCiAgICAgaWYgKG1fY3Vy
cmVudEZyYW1lICYmIGludGVybGFjZUJ1ZmZlcikgewotICAgICAgICBjb25zdCBJbnRSZWN0JiBy
ZWN0ID0gYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAgIGNvbnN0IEludFJlY3Qm
IHJlY3QgPSBidWZmZXIucGl4ZWxzKCktPnJlY3QoKTsKICAgICAgICAgYm9vbCBoYXNBbHBoYSA9
IG1fcmVhZGVyLT5oYXNBbHBoYSgpOwogICAgICAgICB1bnNpZ25lZCBjb2xvckNoYW5uZWxzID0g
aGFzQWxwaGEgPyA0IDogMzsKICAgICAgICAgYm9vbCBub25Ucml2aWFsQWxwaGEgPSBmYWxzZTsK
QEAgLTg5NiwxNSArODQ3LDE1IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRl
KCkKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IHJlY3QubWF4WSgpIC0gcmVjdC55KCk7ICsreSkgewogICAgICAgICAg
ICAgcG5nX2J5dGVwIHJvdyA9IGludGVybGFjZUJ1ZmZlciArIChtX3NjYWxlZCA/IG1fc2NhbGVk
Um93c1t5XSA6IHkpICogY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpOwotICAgICAgICAg
ICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54
KCksIHkgKyByZWN0LnkoKSk7CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIu
cGl4ZWxzKCktPmF0KHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOwogICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCByZWN0Lm1heFgoKSAtIHJlY3QueCgpOyArK3gpIHsKICAgICAgICAgICAg
ICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3cgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNb
eF0gOiB4KSAqIGNvbG9yQ2hhbm5lbHM7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEg
PSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAgICAgICAgIG5vblRyaXZpYWxB
bHBoYSB8PSBhbHBoYSA8IDI1NTsKICAgICAgICAgICAgICAgICBpZiAoIW1fYmxlbmQpCi0gICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBpeGVs
WzFdLCBwaXhlbFsyXSwgYWxwaGEpOworICAgICAgICAgICAgICAgICAgICBidWZmZXIucGl4ZWxz
KCktPnNldFJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBo
YSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBidWZmZXIub3Zl
clJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+b3ZlclJHQkEoYWRkcmVzcysrLCBw
aXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICNlbHNlCkBAIC05MTIsMjggKzg2MywyOCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXI7
CiAgICAgICAgIGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyArK3ksIHJv
dyArPSBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCkpIHsKICAgICAgICAgICAgIHBuZ19i
eXRlcCBwaXhlbCA9IHJvdzsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRk
cmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKKyAgICAgICAgICAgIFJHQkEzMiog
YWRkcmVzcyA9IGJ1ZmZlci5waXhlbHMoKS0+KHJlY3QueCgpLCB5KTsKICAgICAgICAgICAgIGZv
ciAoaW50IHggPSByZWN0LngoKTsgeCA8IHJlY3QubWF4WCgpOyArK3gsIHBpeGVsICs9IGNvbG9y
Q2hhbm5lbHMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGhhc0FscGhhID8g
cGl4ZWxbM10gOiAyNTU7CiAgICAgICAgICAgICAgICAgbm9uVHJpdmlhbEFscGhhIHw9IGFscGhh
IDwgMjU1OwogICAgICAgICAgICAgICAgIGlmICghbV9ibGVuZCkKLSAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyLnNldFJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJd
LCBhbHBoYSk7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdCQShh
ZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5vdmVyUkdCQShhZGRyZXNz
KyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnVmZmVyLnBpeGVscygpLT5vdmVyUkdCQShhZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhl
bFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlm
CiAKICAgICAgICAgaWYgKCFub25Ucml2aWFsQWxwaGEpIHsKLSAgICAgICAgICAgIGlmIChidWZm
ZXIub3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxl
ZFNpemUoKSkpKQorICAgICAgICAgICAgaWYgKGJ1ZmZlci5waXhlbHMoKS0+cmVjdCgpLmNvbnRh
aW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCiAgICAgICAgICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgIHNpemVfdCBmcmFtZUluZGV4ID0gbV9jdXJyZW50RnJhbWU7CiAgICAgICAgICAgICAg
ICAgY29uc3QgSW1hZ2VGcmFtZSogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1m
cmFtZUluZGV4XTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldkJ1
ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJl
dmlvdXMpKQorICAgICAgICAgICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2QnVmZmVy
LT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpPdmVyd3Jp
dGVQcmV2aW91cykpCiAgICAgICAgICAgICAgICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1
ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKChwcmV2QnVmZmVy
LT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9y
KQotICAgICAgICAgICAgICAgICAgICAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZm
ZXIub3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1l
UmVjdCgpKSkKKyAgICAgICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9k
KCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZUJnY29sb3IpCisgICAg
ICAgICAgICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1ZmZlci5waXhl
bHMoKS0+cmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPnBpeGVscygpLT5yZWN0KCkpKQogICAg
ICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKCFtX2JsZW5kICYmICFidWZmZXIuaGFzQWxwaGEoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJ
bWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuaAppbmRleCAwNWZjNzRiNmRlMjE0ZDA0MTRhODJiNDE4NjkzNzc2
MmQxYTVlNTViLi45NzQxOGEyY2Y0NmY2MjU4ZDcyNmYwOGJmYzY1ZGM4YWRmODc4YzI2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5oCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fcGxheUNvdW50LTE7IH0KICNlbmRpZgogICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgp
IG92ZXJyaWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikg
b3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qg
aW5kZXgpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVz
IHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBk
ZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQpA
QCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBmb3IgKGF1dG8mIGltYWdlRnJhbWUgOiBtX2ZyYW1l
QnVmZmVyQ2FjaGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoaW1hZ2VGcmFtZS5zdGF0dXMoKSAh
PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgICAgICAgICAgICAgIGlmICghaW1hZ2VG
cmFtZS5pc0NvbXBsZXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIH0KIApAQCAtODIsNyArODIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgYm9vbCBpc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAoaW5kZXggPCBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpICYmIG1f
ZnJhbWVCdWZmZXJDYWNoZVtpbmRleF0uc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21w
bGV0ZSk7CisgICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgbV9mcmFtZUJ1ZmZlckNhY2hlLnNp
emUoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdLmlzQ29tcGxldGUoKSk7CiAgICAgICAg
IH0KIAogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAppbmRleCAx
MjRhMWIyZjE5OTdmZTY3OGM2MWI1MmYzMDU4ZGI0ZDZiODg2NzlhLi5kMjBiYjZjZTZkYTQ1MDJk
ODMzZDYxOGZlNzg3OTMzNGIwZDEzMDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5j
cHAKQEAgLTc4LDEzICs3OCwxMSBAQCBJbWFnZUZyYW1lKiBXRUJQSW1hZ2VEZWNvZGVyOjpmcmFt
ZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIGlmIChpbmRleCkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkgeworICAgIGlm
IChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2Fj
aGUucmVzaXplKDEpOwotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0UHJlbXVsdGlw
bHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwotICAgIH0KIAogICAgIEltYWdlRnJhbWUmIGZy
YW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBJ
bWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgIGlmIChmcmFtZS5pc0NvbXBsZXRlKCkpCiAg
ICAgICAgIGRlY29kZShmYWxzZSk7CiAgICAgcmV0dXJuICZmcmFtZTsKIH0KQEAgLTExNSw3ICsx
MTMsNyBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTaXplKQogICAg
ICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBtX2hhc0FscGhhID0gZmFsc2U7
CiAjZW5kaWYKLSAgICAgICAgaWYgKCFzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgICAgICBp
ZiAoIXNldFNpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkpCiAgICAgICAgICAgICByZXR1cm4g
c2V0RmFpbGVkKCk7CiAgICAgfQogCkBAIC0xMjUsMjIgKzEyMywyMSBAQCBib29sIFdFQlBJbWFn
ZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTaXplKQogCiAgICAgQVNTRVJUKCFtX2ZyYW1lQnVm
ZmVyQ2FjaGUuaXNFbXB0eSgpKTsKICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVm
ZmVyQ2FjaGVbMF07Ci0gICAgQVNTRVJUKGJ1ZmZlci5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpG
cmFtZUNvbXBsZXRlKTsKKyAgICBBU1NFUlQoIWJ1ZmZlci5pc0NvbXBsZXRlKCkpOwogCi0gICAg
aWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7Ci0gICAgICAg
IGlmICghYnVmZmVyLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpCisg
ICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXIuaW5pdFBpeGVs
cyhzaXplKCksIHByZW11bHRpcGx5QWxwaGEoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFp
bGVkKCk7Ci0gICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFs
KTsKKyAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpEZWNvZGluZ1N0YXR1czo6
UGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShtX2hhc0FscGhhKTsKLSAgICAg
ICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgp
KSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAgV0VCUF9DU1BfTU9E
RSBtb2RlID0gb3V0cHV0TW9kZShtX2hhc0FscGhhKTsKLSAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGx5QWxwaGEpCisgICAgICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSgpKQogICAgICAgICAgICAg
bW9kZSA9IG91dHB1dE1vZGUoZmFsc2UpOwotICAgICAgICBpbnQgcm93U3RyaWRlID0gc2l6ZSgp
LndpZHRoKCkgKiBzaXplb2YoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKTsKLSAgICAgICAgdWludDhf
dCogb3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyLmdldEFkZHIoMCwg
MCkpOworICAgICAgICBpbnQgcm93U3RyaWRlID0gc2l6ZSgpLndpZHRoKCkgKiBzaXplb2YoUkdC
QTMyKTsKKyAgICAgICAgdWludDhfdCogb3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oYnVmZmVyLnBpeGVscygpLT5hdCgwLCAwKSk7CiAgICAgICAgIGludCBvdXRwdXRTaXplID0g
c2l6ZSgpLmhlaWdodCgpICogcm93U3RyaWRlOwogICAgICAgICBtX2RlY29kZXIgPSBXZWJQSU5l
d1JHQihtb2RlLCBvdXRwdXQsIG91dHB1dFNpemUsIHJvd1N0cmlkZSk7CiAgICAgICAgIGlmICgh
bV9kZWNvZGVyKQpAQCAtMTQ5LDcgKzE0Niw3IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVj
b2RlKGJvb2wgb25seVNpemUpCiAKICAgICBzd2l0Y2ggKFdlYlBJVXBkYXRlKG1fZGVjb2Rlciwg
ZGF0YUJ5dGVzLCBkYXRhU2l6ZSkpIHsKICAgICBjYXNlIFZQOF9TVEFUVVNfT0s6Ci0gICAgICAg
IGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CisgICAgICAgIGJ1
ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKTsKICAg
ICAgICAgY2xlYXIoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBWUDhfU1RBVFVT
X1NVU1BFTkRFRDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQppbmRl
eCAyMTZjZDA5M2YyNjQ2N2NiYTg4YTQzZjY5M2FiZjRjZjUxZGQxYTRkLi5kMTE0NTRiMDVlZjg4
OTkzYTYyODkzODk2YmMwYzExNzI4YzVlZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZp
ZGVvU291cmNlTWFjLm1tCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIoKSBjb25zdAogICAgICAgICBpZiAoIWltYWdl
KQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+
Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBtX3ByZXZpZXdJbWFnZSA9IGltYWdlLT5uYXRpdmVJ
bWFnZSgpOwogICAgICAgICBpZiAoIW1fcHJldmlld0ltYWdlKQogICAgICAgICAgICAgYnJlYWs7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCmlu
ZGV4IDM2Y2Q2NTE2ZTgwZjE3NDhiZmVhYjc3YTkzMDI3MWMxMjFkZTgwMTkuLjRiNGUzNzc5ZTk2
Zjc4YzY1NDBhNTNjNDQ3OGMzYmZkOTM1ZjUzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcApAQCAtMTM2LDkgKzEzNiw5IEBAIERyYWdJbWFn
ZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltZywgSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uKQogICAgIENHQ29udGV4dFNjYWxlQ1RNKGRyYXdDb250ZXh0LCAxLCAtMSk7
CiAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGRyYXdDb250ZXh0LCB3aGl0ZSk7CiAgICAgQ0dD
b250ZXh0RmlsbFJlY3QoZHJhd0NvbnRleHQsIHJlY3QpOwotICAgIGlmIChhdXRvIHNyY0ltYWdl
ID0gaW1nLT5nZXRDR0ltYWdlUmVmKCkpIHsKKyAgICBpZiAoYXV0byBzcmNJbWFnZSA9IGltZy0+
bmF0aXZlSW1hZ2UoKSkgewogICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoZHJhd0NvbnRl
eHQsIGtDR0JsZW5kTW9kZU5vcm1hbCk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShkcmF3
Q29udGV4dCwgcmVjdCwgc3JjSW1hZ2UpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZHJh
d0NvbnRleHQsIHJlY3QsIHNyY0ltYWdlLmdldCgpKTsKICAgICB9CiAgICAgQ0dDb250ZXh0UmVs
ZWFzZShkcmF3Q29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2Mv
V2ViQ2FjaGUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCmluZGV4IGI2
NTlkNmRiZjlhZDY5OTljM2FjOTYyZGU5NTE1NzgwOTdlMWYzYjEuLjdjNWVkMjEwZGRiMmEzMmE3
NjY2NzRjMTIwZDk5NGMyZmE0N2U3ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01p
c2MvV2ViQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQpA
QCAtMjA0LDcgKzIwNCw3IEBAICsgKENHSW1hZ2VSZWYpaW1hZ2VGb3JVUkw6KE5TVVJMICopdXJs
CiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UmIGNhY2hlZEltYWdlID0gZG93bmNhc3Q8V2ViQ29y
ZTo6Q2FjaGVkSW1hZ2U+KCpjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYgKCFjYWNoZWRJbWFnZS5o
YXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gY2FjaGVkSW1h
Z2UuaW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIHJldHVybiBjYWNoZWRJbWFnZS5pbWFn
ZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpOwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFi
YXNlQ0cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFi
YXNlQ0cuY3BwCmluZGV4IDBmNmRlN2ExNDZhNjExYTUyYWExZTUzOTAxOWZhNmMxYzQ2NzI1YWUu
LjMwNTYzMzZjYjY2ZmU0YWYxOGJkYzUyOWFjYTJmOGZjODgxZGZlNTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAK
QEAgLTM3LDEyICszNywyMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIENHSW1hZ2VSZWYg
V0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25E
YXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmLCBXS1NpemUgc2l6ZSkKIHsKICAgICBJbWFnZSog
aW1hZ2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VGb3JQYWdlVVJMKHRvV1RGU3Ry
aW5nKHVybFJlZikpOwotICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5nZXRGaXJzdENHSW1hZ2VS
ZWZPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGgpLCBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemUuaGVpZ2h0KSkpIDogMDsKKyAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+bmF0
aXZlSW1hZ2VPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGgpLCBzdGF0
aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpLmdldCgpIDogbnVsbHB0cjsKIH0KIAogQ0ZBcnJh
eVJlZiBXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JVUkwoV0tJY29uRGF0YWJh
c2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7CiAgICAgSW1hZ2UqIGlt
YWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVSTCh0b1dURlN0cmlu
Zyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Q0dJbWFnZUFycmF5KCku
bGVha1JlZigpIDogMDsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gaW1hZ2UtPmZyYW1lc05hdGl2ZUltYWdlcygpOwor
ICAgIGlmICghbmF0aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgCisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShu
dWxscHRyLCBuYXRpdmVJbWFnZXMuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKKyAg
ICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAgICAgIENGQXJyYXlB
cHBlbmRWYWx1ZShhcnJheSwgbmF0aXZlSW1hZ2UuZ2V0KCkpOworICAgIAorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRlJldGFpbihhcnJheSkpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lm1tCmluZGV4IGRjNzk4M2FiOTg4YzJkMDRhMTczMGVlMTM3MzAzYzI0NDE2MTUxOTcuLmZiYzNl
NWQ0YzU0MzAxY2U5MjE3YTQwZjhkMDhiZDU4MzUyNzg3YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBA
IC00MDcxLDcgKzQwNzEsNyBAQCAtIChVSUltYWdlICopX3ByZXNlbnRhdGlvblNuYXBzaG90Rm9y
UHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29udHJvbAogewogICAgIGlmICgh
X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBbW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENH
SW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UtPmdl
dENHSW1hZ2VSZWYoKV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tVSUltYWdlIGFsbG9j
XSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250
ZW50SW1hZ2UtPm5hdGl2ZUltYWdlKCkuZ2V0KCldIGF1dG9yZWxlYXNlXTsKIH0KIAogLSAoTlNB
cnJheSAqKV9wcmVzZW50YXRpb25SZWN0c0ZvclByZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2
aWV3SXRlbUNvbnRyb2xsZXIgKiljb250cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggOWEzM2Y3Y2M3ZGM3YzdkNzJmOWRh
NzQzMDk4YjdkYmNhODI0MDljZi4uYTUzMjUxMDY3OGI5ZjUzNTE0NThhMzhhOWY0MjMzNzQ3ZDAz
NWY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcApAQCAtMTcyNyw2OSArMTcyNyw2IEBAIHZvaWQgUGx1Z2luVmlldzo6d2luZG93ZWRQ
bHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxlLCB1aW50NjRfdCB3aW5kCiB9
CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotc3RhdGljIGJvb2wgaXNBbG1vc3RTb2xp
ZENvbG9yKEJpdG1hcEltYWdlKiBiaXRtYXApCi17Ci0gICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGJp
dG1hcC0+Z2V0Q0dJbWFnZVJlZigpOwotICAgIEFTU0VSVChDR0ltYWdlR2V0Qml0c1BlckNvbXBv
bmVudChpbWFnZSkgPT0gOCk7Ci0KLSAgICBDR0JpdG1hcEluZm8gaW1hZ2VJbmZvID0gQ0dJbWFn
ZUdldEJpdG1hcEluZm8oaW1hZ2UpOwotICAgIGlmICghKGltYWdlSW5mbyAmIGtDR0JpdG1hcEJ5
dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYga0NHQml0bWFwQWxwaGFJbmZvTWFzaykg
IT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkgewotICAgICAgICAvLyBGSVhNRTog
Q29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3RoZXIgcGl4ZWwgZm9ybWF0cy4KLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBzaXplX3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpOwotICAgIHNpemVfdCBo
ZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKLSAgICBzaXplX3QgYnl0ZXNQZXJSb3cg
PSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3coaW1hZ2UpOwotCi0gICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERh
dGFQcm92aWRlcihpbWFnZSkpKTsKLSAgICBjb25zdCBVSW50OCogZGF0YSA9IENGRGF0YUdldEJ5
dGVQdHIocHJvdmlkZXIuZ2V0KCkpOwotCi0gICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxp
bmcgZG90cyBvbiB0b3Agb2YgYSBncmF5c2NhbGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UuCi0gICAg
Ly8gRm9yIHRoZSBpbnRlcmlvciBwb2ludHMsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBs
dW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBsZSBwb2ludAotICAgIC8vIGFuZCBpdHMgc3Vycm91bmRz
IHBvaW50cywgc2NhbGVkIGJ5IHRyYW5zcGFyZW5jeS4KLSAgICBjb25zdCB1bnNpZ25lZCBzYW1w
bGVSb3dzID0gNzsKLSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVDb2xzID0gNzsKLSAgICAvLyBG
SVhNRTogUmVmaW5lIHRoZSBwcm9wZXIgbnVtYmVyIG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0
ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvcy4KLSAgICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8
IGhlaWdodCA8IHNhbXBsZVJvd3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEVu
c3VyZSB0aGF0IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0aGUgaW1hZ2UgcGVyaW1ldGVy
LgotICAgIGNvbnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRo
IC0gMSkgLyAoc2FtcGxlQ29scyAtIDEpOwotICAgIGNvbnN0IGZsb2F0IHN0cmlkZUhlaWdodCA9
IHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1wbGVSb3dzIC0gMSk7Ci0gICAg
ZmxvYXQgc2FtcGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsKLQotICAgIC8vIEZpbmQgdGhl
IGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KLSAgICBmbG9hdCB5ID0gMDsKLSAgICBj
b25zdCBVSW50OCogcm93ID0gZGF0YTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2Ft
cGxlUm93czsgKytpKSB7Ci0gICAgICAgIGZsb2F0IHggPSAwOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBVSW50
OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAqIDQ7Ci0gICAgICAgICAg
ICAvLyBSIEcgQiBBCi0gICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0gKDAuMjEyNSAqICpwMCAr
IDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoocDArMykgLyAyNTU7Ci0g
ICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOwotICAgICAgICB9Ci0gICAgICAgIHkgKz0gc3Ry
aWRlSGVpZ2h0OwotICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19jYXN0PGludD4oeSArIC41
KSkgKiBieXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNj
b3JlLgotICAgIGZsb2F0IGFjY3VtU2NvcmUgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDE7
IGkgPCBzYW1wbGVSb3dzIC0gMTsgKytpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7
IGogPCBzYW1wbGVDb2xzIC0gMTsgKytqKSB7Ci0gICAgICAgICAgICBmbG9hdCBkaWZmID0gc2Ft
cGxlc1tpIC0gMV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsg
c2FtcGxlc1tpXVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKLSAgICAgICAgICAgIGFjY3Vt
U2NvcmUgKz0gZGlmZiAqIGRpZmY7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgc2Nv
cmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4gdGhlIHJhbmdlIG9mIDAgYW5kIDI1
NV4yLgotICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAqIChzYW1wbGVSb3dzIC0gMikgKiAo
c2FtcGxlQ29scyAtIDIpOwotfQotI2VuZGlmCi0KIHZvaWQgUGx1Z2luVmlldzo6cGx1Z2luU25h
cHNob3RUaW1lckZpcmVkKCkKIHsKICNpZiBFTkFCTEUoUFJJTUFSWV9TTkFQU0hPVFRFRF9QTFVH
SU5fSEVVUklTVElDKQpAQCAtMTgwOSw3ICsxNzQ2LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVn
aW5TbmFwc2hvdFRpbWVyRmlyZWQoKQogCiAgICAgICAgIGlmIChzbmFwc2hvdEltYWdlKSB7CiAj
aWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJU1RJQykKLSAgICAgICAg
ICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBpc0FsbW9zdFNvbGlkQ29sb3Io
ZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KHNuYXBzaG90SW1hZ2UuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEJp
dG1hcEltYWdlPihzbmFwc2hvdEltYWdlKS0+aXNBbG1vc3RTb2xpZENvbG9yKCk7CiAgICAgICAg
ICAgICBzbmFwc2hvdEZvdW5kID0gIXNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yOwogI2VuZGlm
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283729</attachid>
            <date>2016-07-14 18:37:15 -0700</date>
            <delta_ts>2016-07-14 18:37:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159795-20160714183628.patch</filename>
            <type>text/plain</type>
            <size>210734</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQ0NWVjM2I5YjY1NzYy
OGNlYTM4MTkyYzdkMDJlN2YwMjIyNzRmOS4uYzgwMTMzMGVkNmJmYTQ5NjViMzRkM2Q1NTIzMTAw
NjNhMTIxZjE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwMCBAQAorMjAxNi0wNy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SW1hZ2VGcmFtZSBhbmQgSW1hZ2VGcmFtZURhdGEgYmUgZXF1aXZhbGVudCBzbyBJbWFnZUZyYW1l
RGF0YSBjYW4gYmUgcmVtb3ZlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU5Nzk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBzdGVwIHdpbGwgYWxsb3cgcmVtb3ZpbmcgSW1hZ2VGcmFtZSBmcm9t
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisgICAgICAgIGFuZCByZW5h
bWluZyBJbWFnZUZyYW1lRGF0YSB0byBiZSBJbWFnZUZyYW1lLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhl
bHM6OmF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aW5pdFBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y29weVBpeGVscyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVEYXRhOjpzZXREaXNwb3NhbE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
RGF0YTo6ZGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6
OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzUGFydGlhbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXJQaXhlbHMpOgorICAgICAg
ICBBZGQgZnVuY3Rpb25zIHNpbWlsYXIgdG8gZnJvbSB3aGF0IHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oIGhhcy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OkltYWdlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlQaXhlbHMpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6aW5pdFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpzZXRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6Omhhc0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OnNldEhhc0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNl
dFN0YXR1cyk6IERlbGV0ZWQuCisgICAgICAgIENoYW5nZSB0aGUgSW1hZ2VGcmFtZSBjbGFzcyB0
byBiZSBhIHN1YnNldCBvZiBJbWFnZUZyYW1lRGF0YS4KKyAgICAgICAgCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIENhbGwgdGhl
IEltYWdlRnJhbWUgbWV0aG9kcyB3aXRoIHRoZSBuZXcgbmFtZXMuCisgICAgICAgIAorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0RGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6ZGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6c2V0U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnN0YXR1cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6OmlzUGFydGlhbCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpp
c0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0
SGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzQWxwaGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6cGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc1BpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmlzT3ZlclNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmdldEFkZHIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6aGFzUGl4ZWxEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6Om92ZXJSR0JBKTogRGVsZXRlZC4KKyAgICAgICAgQ2hhbmdlIHRoZSBJbWFnZUZyYW1l
IGNsYXNzIHRvIGJlIGEgc3Vic2V0IG9mIEltYWdlRnJhbWVEYXRhIGFuZCBnZXQgcmlkCisgICAg
ICAgIG9mIHRoZSBwaXhlbCBmdW5jdGlvbnMuIFRoZXkgc2hvdWxkIGJlIGFjY2Vzc2VkIGZyb20g
Qml0bWFwUGl4ZWxzIGNsYXNzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUElt
YWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJNUElt
YWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBtZXRob2Rz
IHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJNUCk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpCTVBJ
bWFnZVJlYWRlcjo6c2V0UkdCQSk6CisgICAgICAgIENhbGwgdGhlIEltYWdlRnJhbWUgbWV0aG9k
cyB3aXRoIHRoZSBuZXcgbmFtZXMvcGFyYW1ldGVycy4KKworICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1h
Z2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaDoKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFt
ZSBtZXRob2RzIHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwOgorICAg
ICAgICAoR0lGSW1hZ2VSZWFkZXI6OnBhcnNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6
R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBtZXRob2RzIHdp
dGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFt
ZSBtZXRob2RzIHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFn
ZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VE
ZWNvZGVyOjpqcGVnQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rl
cjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBtZXRob2RzIHdpdGggdGhl
IG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdl
RGVjb2Rlcjo6cG5nQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVy
OjpyZWFkQ2h1bmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6Y2xlYXJG
cmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aW5p
dEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5oOgorICAgICAgICBDYWxsIHRoZSBJbWFnZUZyYW1lIG1ldGhvZHMgd2l0aCB0aGUg
bmV3IG5hbWVzL3BhcmFtZXRlcnMuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
RUJQSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBt
ZXRob2RzIHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorCisyMDE2LTA3LTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisgCisgICAgICAgIEdldCBy
aWQgb2YgdGhlIG1fcHJlbXVsdGlwbHlBbHBoYSBmbGFnIG9mIHRoZSBJbWFnZUZyYW1lIGNsYXNz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk3MjEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGZs
YWcgd2FzIG9ubHkgbmVlZGVkIHdoZW4gY2FsbGluZyBCaXRtYXBQaXhlbHM6OnNldFNpemUoKS4g
SW5zdGVhZAorICAgICAgICB3ZSBjYW4gcGFzcyB0aGUgSW1hZ2VEZWNvZGVyOjptX3ByZW11bHRp
cGx5QWxwaGEgdG8gSW1hZ2VGcmFtZTo6c2V0U2l6ZSgpCisgICAgICAgIHdoaWNoIHdpbGwgcGFz
cyBpdCB0byBCaXRtYXBQaXhlbHM6OnNldFNpemUoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1h
cERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6aXNPdmVyU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
TVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVApOgorICAgICAgICAoV2ViQ29yZTo6
Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURl
Y29kZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVj
dG9yeUVudHJpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09J
bWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6
c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZl
ckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2Nh
bmxpbmVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJlYWRDaHVua3MpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisKKzIwMTYtMDctMTMgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBHZXQg
cmlkIG9mIHRoZSBjb2xvciBwcm9maWxlIGZyb20gSW1hZ2VGcmFtZSBhbmQgSW1hZ2VEZWNvZGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk2OTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpzZXRDb2xvclByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpyZWFkQ29sb3JQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJ
bWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9q
cGVnL0pQRUdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRDb2xvclBy
b2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFk
ZXJBdmFpbGFibGUpOiBEZWxldGVkLgorCisyMDE2LTA3LTEzICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgdGhlIHBpeGVsIGRhdGEg
b2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlv
biBwYXJ0IGluIEltYWdlRnJhbWUgaW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCB0
aGVuIG1ha2UgaXQgb3B0aW9uYWwgKGFsbG9jYXRlZCBvbiBkZW1hbmQpLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICog
UGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwUGl4ZWxzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpC
aXRtYXBQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjp3aWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBQaXhlbHM6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxz
OjphdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFBpeGVsczo6cmVwZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4
ZWxzOjpzZXRSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6b3ZlclJHQkEp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjppbkJvdW5kcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bXVsdGlwbHky
NTUpOgorICAgICAgICAoV2ViQ29yZTo6ZGl2aWRlMjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRp
dmlkZUNlaWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZENoYW5uZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6dW5wcmVtdWx0aXBsaWVkQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3Jl
OjptYWtlUHJlbXVsdGlwbGllZFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVVuUHJlbXVs
dGlwbGllZFJHQkEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVEYXRhOjpwaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZURhdGE6Omhhc1BpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OmdldEFkZHIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzUGl4ZWxEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om92ZXJSR0JBKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWU6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5Um93TlRpbWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmZpeFBvaW50VW5zaWduZWRN
dWx0aXBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpkaXZpZGUy
NTUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6ZGVjb2Rl
Qk1QKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhl
bHNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBQaXhlbHM6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6aGF2ZURlY29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpm
cmFtZUNvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZy
YW1lQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNldFBpeGVsUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUkdCQSk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisKKzIwMTYtMDctMTMgIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCB0aGUgcGl4ZWwg
ZGF0YSBvZiBJbWFnZUZyYW1lIHRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTY3OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhlIHBpeGVsIGRhdGEgbWFuaXB1
bGF0aW9uIHBhcnQgaW4gSW1hZ2VGcmFtZSBpbnRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAg
YW5kIHRoZW4gbWFrZSBpdCBvcHRpb25hbCAoYWxsb2NhdGVkIG9uIGRlbWFuZCkuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAg
ICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtl
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBQaXhlbHMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBQaXhlbHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhl
bHM6OkJpdG1hcFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OndpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6OmF0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwUGl4ZWxzOjpyZXBlYXRGaXJzdFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBQaXhlbHM6OnNldFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpvdmVy
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmluQm91bmRzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptdWx0
aXBseTI1NSk6CisgICAgICAgIChXZWJDb3JlOjpkaXZpZGUyNTUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZGl2aWRlQ2VpbCk6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6
CisgICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5Q
cmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lRGF0YTo6aGFzUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsRnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05U
aW1lcyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6Z2V0QWRkcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoYXNQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3ZlclJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlSb3dOVGlt
ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Zml4UG9pbnRVbnNp
Z25lZE11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmRp
dmlkZTI1NSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpk
ZWNvZGVCTVApOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1h
cFBpeGVsc0NhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpp
bml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcv
SlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxS
R0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEpOgorICAg
ICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKworMjAxNi0wNy0xMSAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIFJlbmFtZSBGcmFt
ZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5kIG1vdmUgaXQgdG8gYSBzZXBhcmF0ZSBmaWxlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU0NDQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIEltYWdl
RnJhbWVEYXRhIHRvIGEgc2VwYXJhdGUgZmlsZSBzbyBpdCBjYW4gYmUgY2FjaGVkIGJ5IEltYWdl
U291cmNlCisgICAgICAgIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnN1bWVkIGJ5IEJpdG1hcEltYWdl
LiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgb2YgSW1hZ2VGcmFtZURhdGEKKyAgICAgICAgYmUgcHJp
dmF0ZSBhbmQgYWRkIGdldHRlcnMgdG8gcmV0dXJuIHRoZWlyIHZhbHVlcy4KKworICAgICAgICBO
byBuZXcgdGVzdHMgLS0gQ29kZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1l
RHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUhh
c0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNpbmdsZVBp
eGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aXNBbG1vc3RT
b2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lRGF0YTo6dXNlZEZyYW1lQnl0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ltYWdlRnJh
bWVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6SW1h
Z2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6On5JbWFnZUZy
YW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXJTdWJJbWFn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xvcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvaW1hZ2VGcmFtZURhdGEuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWVEYXRhOjppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRh
OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpmcmFtZUJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lRGF0YTo6b3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZURhdGE6OnN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZURhdGE6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpo
YXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aGFzSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6Omhhc01ldGFkYXRhKToKKworMjAxNi0w
Ni0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAg
ICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBlciBmb3Ig
TmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBpcyB0byBtb3ZlIHRo
ZSBwbGF0Zm9ybSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9tIEJpdG1hcEltYWdl
IHRvIFBsYXRmb3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2libGUgb2YgCisgICAg
ICAgIGRyYXdpbmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1hZ2VQdHIgcXVlc3Rp
b25zIHdoZW4gYW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFpbGFibGUuIEFwYXJ0
IGZyb20gZHJhd2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMgd2lsbCBiZQorICAg
ICAgICBjYWxsZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0YSBzbyB3ZSB3aWxs
IGtlZXAgZXZlcnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRyLiBCdXQgd2Ugd2ls
bCBjYXN0IHRoZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdoZW4KKyAgICAgICAg
YSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtl
OgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9N
Lm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdEltYWdlOmFuZFJlY3Rz
Ol0pOgorICAgICAgICAqIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW06CisgICAgICAg
ICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dEluZGljYXRvcjptYXJn
aW46b2Zmc2V0Ol0pOgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9m
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUlt
YWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6
OkZyYW1lRGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRpYWxpemVkIHdpdGgg
ZmFsc2UgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAgIEJpdG1hcEltYWdl
OjpmcmFtZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5IG1faGF2ZU1ldGFk
YXRhLgorICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0FscGhhIGFyZSBzZXQg
aW4gQml0bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJpdG1hcEltYWdlOjpj
YWNoZUZyYW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6fkZyYW1lRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
SW1hZ2U6OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
aXNOaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJbWFnZVJlZik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdl
Q2Fpcm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1J
bWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VD
Ry5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNH
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1h
Z2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUlt
YWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZpZXcuY3BwIHNpbmNl
IFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3MgdG8uCisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTogUmV0dXJucyB0aGUg
c3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxpbmcuCisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgorICAgICAgICAoVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6CisgICAgICAgICog
cGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDctMTMgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIHYyOiBXZWJDb250ZW50IGNyYXNoIGR1ZSB0byBSRUxF
QVNFX0FTU0VSVCghbV9pbkxvYWRQZW5kaW5nSW1hZ2VzKSBpbiBTdHlsZVJlc29sdmVyOjp+U3R5
bGVSZXNvbHZlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYTBkZTdjZDJjYTUzNzdkNzZhMDgzYTE4
MzAwZmFkNWYwNWI2MWRiNy4uMjg5OTQ1Y2JjMjc4Zjc2NDJhYjZkOTk4Njg2MWE5ZGVkM2JiZTVh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA3LTEzICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNl
IFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNj
L1dlYkNhY2hlLm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBpbWFnZUZvclVSTDpdKToKKwogMjAx
Ni0wNy0xMyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFVw
ZGF0ZSBzdXBwb3J0ZWQgcGxhdGZvcm1zIGluIHhjY29uZmlnIGZpbGVzIHRvIG1hdGNoIHRoZSBz
ZGsgbmFtZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjk1OGQ5NTllNjgxNTEyOTQ3ZDA4OTIxYjc5YmUwNjhk
MWFmMjQxMS4uOTcxOTEwMTZkNDVlNTM2Njg0YjQ3Mzk5MjNkNDBhNzZiNmQ4ZmJjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA3LTEzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2Ug
YW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cv
V0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1h
Z2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9y
VVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVz
ZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcElt
YWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAor
ICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAg
ICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2
aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRp
bWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29s
aWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0w
Ny0xMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYktpdDIg
c2hvdWxkbid0IHNpZ25hbCBjdXN0b20gcHJvdG9jb2wgY2xpZW50cyBmcm9tIHRoZSBOU1VSTENv
bm5lY3Rpb24gbG9hZGVyIHRocmVhZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNWFmZWEzYTE0
ZWU4NmU4MzRlMDFmZjU4NTE0M2E4ZjEwZGFhY2MyMC4uYjJiMjc5MGI4NjQxMjdmYmEzNTk3N2Zl
NDg0MTg3MTQ2ZDA3YThlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMjksNiArMjIyOSw3
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JU09WVFRDdWUu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQ
b2ludC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IDVmZjk5MWZm
N2RhMzA4YmI5MTgyZWNlM2JmMTIxNzMwYTU0OGQyODcuLmJhZTMxZWFmODZlN2ZjYTkwNTgyNTA5
MmFhMzhhNzhjMTFlNDIyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBw
bGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpA
QCAtNTUsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcAogCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTc1LDYgKzc0
LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1Ry
YW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXgg
NTE0NTA0ZTZlYzI1YWE1ZTQzYjk5Mzk4ZDVlMzVjZWVlYTc2NmFhNC4uNjRhZTE3MTA4OWRjYmYw
Y2Q0NWI3MGE5YjhmNzBlZmE5ZmZkZWRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTEyMiw3ICsxMjIsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6Tkcu
Y3BwCkBAIC0xMzQsNiArMTMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0
Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Q
YXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWlyby5j
cHAKQEAgLTE3OSw5ICsxNzksOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1l
bmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vaW1hZ2UtZW5jb2Rl
cnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvZWZsL05ldHdv
cmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDY0
NWFkZDFjZTM4ODg4YjA0ZDRhMmQ4OWFkYTBhN2M2ZGUxOTk4NmIuLmQzMWY1NzA2YTY5NTliMjMx
YjViZmIyMmYwN2QxODQzYWU4NjFhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0x
MDEsNyArMTAxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKQEAgLTExNSw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQ
dHJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1h
dHJpeENhaXJvLmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAgICAgcGxhdGZv
cm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nh
aXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nh
aXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3Rr
L1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNt
YWtlCmluZGV4IDlmNmY0OTZiNmNjNGVmNmU0Yjc0ZDg0YWMwYWE5ZGVhNTVhMDIzN2IuLjRkZGVk
MzA4OGY0ZjM5NmZlZjQ0NGU3ZWU2NWM2NDEwNjU4ZjU4NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCkBAIC0zOTcsNyArMzk3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbQog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tCiAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQ
b2ludENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcApAQCAt
NDE3LDYgKzQxNiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW5DYWlyby5jbWFrZQppbmRleCAyYzU1M2IwNTUxZGFkNjlhYTE5OWQ5NjBmNTUyMzQzZDkyMGYw
N2IzLi4zNDJhYTkyNzMyZmQ4ZjkyZTg1Y2ZhNjI2ZDU1NTcwZWY2NmI2YTY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTIxLDcgKzIxLDYgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRmxv
YXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cApAQCAtMzQsNiArMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRm
b3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3Jt
SW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybVBhdGhD
YWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcApA
QCAtNDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAogCi0gICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwCiAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0
ZTdjM2EyMjlhMTYzYTVmNWE2MGY2MzJiZWEwZTM3YWQyMzk0MGUwLi5jY2IwNzBiZTA5YmFjMTZm
NWY5ZmQzMTlhODMyYzk3ODA5YjIxMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDg1LDcgKzE0ODUsNyBAQAogCQkzNzVD
RDIzMjExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUNEMjMxMTE5RDQzQzgwMEEyQTg1OSAvKiBI
eXBoZW5hdGlvbi5oICovOyB9OwogCQkzNzZEQ0NFMTEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzZE
Q0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi87IH07CiAJCTM3NzRBQkE1MEZB
MjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NzRBQkEzMEZBMjFFQjQwMEFEN0RF
OSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogQml0
bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgKi87IH07
CisJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5
QTAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgKi87IH07CiAJCTM3OTE5QzIzMEI3RDE4
ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3Np
dGlvbkl0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4IC8qIFBv
c2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3OTE5QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMzc5MjkxN0ExOTg1RUYzOTAw
RjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVudGlhbEJh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjMyNCwxMCArMjMyNCwxNCBAQAogCQk1M0VEM0ZERjE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRl
cm5hbFNldHRpbmdzR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRp
bmdzR2VuZXJhdGVkLmggKi87IH07CiAJCTUzRUY3NjZCMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0
aW5nc01hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87IH07CiAJ
CTUzRUY3NjZDMTY1MzE5OTQwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oIGluIENvcHkgR2Vu
ZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRjc2
NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87IH07CisJCTU1MDRFNENC
MUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRt
YXBQaXhlbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4NUY2MDM5
MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1RjYwMzkw
MDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFt
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1
NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQTFDQUFGMEFCMDAzNDk0
MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9OwogCQk1NTVCODdFRDFDQUFGMEFCMDAzNDk0
MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5o
ICovOyB9OworCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU3NEYwODUxRDAy
NzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAgLyogSW1h
Z2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLzsg
fTsKKwkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUNCQTZBMDFEMURGMkUx
MDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxh
dGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovOyB9OwogCQk1
NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2NjAwOUM2
MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAqLzsgfTsKIAkJNTdFRjVFNjAxRDIwQzgzOTAwMTcx
RTYwIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1N0VGNUU1RjFEMjBDODM5MDAxNzFFNjAgLyogVGV4dENvZGVj
UmVwbGFjZW1lbnQuaCAqLzsgfTsKQEAgLTkwNjMsNyArOTA2Nyw3IEBACiAJCTM3NkRDQ0UwMTNC
NEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRSdW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzcy
QjA5NTE2NTM1ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBU
ZXN0UmVxdWVzdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPdmVy
bGFwVGVzdFJlcXVlc3RDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzc3
QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFwSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdl
Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZvcm1JbWFn
ZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjEwQjdEMTg4NjAw
QTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9zaXRpb25JdGVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3Jl
ZGVudGlhbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3JlZGVudGlh
bEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5ODksMTAgKzk5OTMsMTQg
QEAKIAkJNTNFRDNGREMxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVy
YXRlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ludGVybmFs
U2V0dGluZ3NHZW5lcmF0ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VE
M0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VGNzY2QTE2NTMwQTYxMDA0Q0JF
NDkgLyogU2V0dGluZ3NNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2V0dGluZ3NNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTUwNEU0Q0Ex
RDM1NTMyRDAwRkU1MDg4IC8qIEJpdG1hcFBpeGVscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaXRtYXBQ
aXhlbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUwQTBCQzcwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBBMEJDODA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTVCODdFQTFD
QUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU3NEYwODUxRDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRm
b3JtSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1NUNCQTY5RjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VGcmFtZURh
dGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTZBMDFEMURGMkUxMDA0
NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VGcmFtZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVENDA4
RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBTaW11bGF0
ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW11bGF0
ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAyOCw3ICsyMjAz
Niw2IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3
IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRCNjc5NSAv
KiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQ
b2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0
Q0cuY3BwICovLApAQCAtMjIwNTUsNiArMjIwNjIsNyBAQAogCQkJCUE4MEEzOEZEMEU1MENDODIw
MEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4MTQwMDJDRTY0
RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUzODE0MDAyQ0U2
NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVD
NyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovLAogCQkJCTFGQzQwRkI4MTY1NUM1OTEwMDQwRjI5
RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLywKIAkJCQkxRkM0MEZCNzE2NTVDNTkx
MDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oICovLAogCQkJCUIyNzUzNTJBMEIw
NTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAqLywKQEAgLTIyMTIy
LDYgKzIyMTMwLDcgQEAKIAkJCQlCRUYyOUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVkaW9UcmFj
a1ByaXZhdGUuaCAqLywKIAkJCQlBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1h
Z2UuY3BwICovLAogCQkJCUE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5o
ICovLAorCQkJCTU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLywK
IAkJCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEgLyogQ0RNU2Vzc2lvbi5oICovLAogCQkJCUIy
NzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3NTM1MzkwQjA1
MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCkBAIC0yMjIwNiw2ICsyMjIxNSw4IEBACiAJCQkJ
NDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlCMkEx
MEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkyMkJEOUY3RDEz
NTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNTVDQkE2OUYxRDFE
RjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLywKKwkJCQk1NUNCQTZBMDFEMURG
MkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLywKIAkJCQlCQzdGNDRBNzBCOUUzMjRF
MDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oICovLAogCQkJCUE4NzQ4RDc0MTJDQzNGODkwMDFG
QkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNwcCAqLywKIAkJCQlBODc0OEQ2NjEyQ0MzNzYzMDAx
RkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovLApAQCAtMjIyNTUsNiArMjIyNjYsNyBAQAog
CQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJ
QThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVC
MEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNTU3NEYwODUxRDAyNzQ0NDAw
QjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNB
MTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAv
KiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIw
MDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI2MDI4LDYgKzI2MDQwLDcg
QEAKIAkJCQk4NUU3MTFCOTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE1hcEVsZW1lbnRJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU3OUYwQzAzQkJEMzAwOEJCMEVFIC8qIERP
TUhUTUxNYXJxdWVlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU2RUEwQzAzQjc0
MTAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkRFQzY2NTUxQzgyRDA0MTAwOTk4NDZBIC8qIERPTUhUTUxNZWRpYUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjUxMUM4MkQwMTYwMDk5ODQ2QSAvKiBE
T01IVE1MTWVkaWFFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QkE0RDEz
MEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MTWVudUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMjY0NjksNiArMjY0ODIsNyBAQAogCQkJCUQzNTlENzhBMTI5Q0EyNzEwMDA2RTVEMiAvKiBI
VE1MRGV0YWlsc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3OUZBMEExOTE2REYw
MEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThF
QTdDQjcwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQk1NUNCQTZBMjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4RUE3OUY3MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERv
Y3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg2NzEyMjg4M0U5MDBCODFGRjggLyog
SFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MzY5LDYgKzI4MzgzLDcg
QEAKIAkJCQlCMjIyNzk5MzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdB
bmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OTgwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTU1MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQzOUQzMzQ1MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRvckZhY3RvcnkuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4RkIzRjg0MTNCQzc1NEMwMDk5RkMxOCAvKiBTVkdBdHRyaWJ1
dGVUb1Byb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5QzBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHQ2lyY2xlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTQyMSw3ICsy
OTQzNiw3IEBACiAJCQkJRkRDNTRGMDQxMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVhZEZpbHRlck5v
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjYxMkIwMjY3NjAwQzFBMzU5IC8qIEJp
cXVhZFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBCNDIzMzg4MDBE
N0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzc3QTNBOTAxNUVG
Q0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzc3
QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NzZENkM3ODEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyRURFRjFGMzEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTFEMzFDREMxOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmlsZVJlZmVy
ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5Nzg0LDYgKzI5Nzk5LDcgQEAKIAkJCQkyRTJE
OTlFODEwRTJCQzFDMDA0OTYzMzcgLyogRE9NQmxvYi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1
MDg5Q0Q4MEE5OEM0MjgwMEEyNzVBQSAvKiBET01DREFUQVNlY3Rpb24ubW0gaW4gU291cmNlcyAq
LywKIAkJCQk4NUFDQTk4NzBBOUI1MjAzMDA2NzFFOTAgLyogRE9NQ2hhcmFjdGVyRGF0YS5tbSBp
biBTb3VyY2VzICovLAorCQkJCTU1Q0JBNkExMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1l
RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTA4OUNEQTBBOThDNDI4MDBBMjc1QUEgLyog
RE9NQ29tbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3OEQwN0JFMTQ1QTBGNkMwMDk2OTA4
RCAvKiBET01Db3JlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1OEMzOEE2MEFB
OEYyMDQwMEIxODdBNCAvKiBET01Db3VudGVyLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDQwMTFlYTNmZDhjMDQ2OTc0YzU1ZDQ4ZTM5NmYxYjgz
YjgxZjMzNWQuLmE1YWM0ZjA1YWUzMzlhOGQ2NDcwNmMxMGZjMGY3YWY0MDQyNTYyM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC02MDYsNyArNjA2LDcgQEAgLSAodm9pZCln
ZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0czooTlNB
cnJheSAqKilyZWN0cwogCiAgICAgaWYgKHRleHRJbmRpY2F0b3IpIHsKICAgICAgICAgaWYgKElt
YWdlKiBpbWFnZSA9IHRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpKQotICAgICAgICAgICAg
KmNnSW1hZ2UgPSAoQ0dJbWFnZVJlZilDRkF1dG9yZWxlYXNlKENHSW1hZ2VSZXRhaW4oaW1hZ2Ut
PmdldENHSW1hZ2VSZWYoKSkpOworICAgICAgICAgICAgKmNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQppbmRl
eCAzNjRhOWE4N2NlNmYwNjYzOTQ4Yjg4NDZlOGUyY2U2ZDE5MGYyNDg5Li5hNzRkYTg1YWNlY2Ez
YzY2OThkZDE1NmFiMzFhNmM5NzFhMzU0ZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0KQEAgLTE2Miw5ICsxNjIsOSBAQCAtIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBhc3NSZWZQ
dHI8VGV4dEluZGljYQogICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgxIC8gX3Rl
eHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOwogICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwogICAgIGlmIChpbmRpY2F0b3JXYW50c0NvbnRlbnRD
cm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0
SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPmdldENHSW1hZ2VSZWYoKTsK
KyAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRo
SGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7CiAgICAgZWxzZQotICAgICAgICBjb250ZW50c0lt
YWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7Cisg
ICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCktPm5h
dGl2ZUltYWdlKCk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5jZUxheWVy
cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogCkBAIC0yNjUsNyAr
MjY1LDcgQEAgc3RhdGljIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGVCb3Vu
Y2VBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXQKIHN0YXRpYyBSZXRhaW5QdHI8Q0FCYXNp
Y0FuaW1hdGlvbj4gY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbihDRlRpbWVJbnRlcnZh
bCBkdXJhdGlvbiwgVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRvcikKIHsKICAgICBSZXRhaW5Q
dHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRp
b24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJjb250ZW50cyJdOwotICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBjb250ZW50c0ltYWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+Z2V0
Q0dJbWFnZVJlZigpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0g
dGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKTsKICAgICBbY3Jvc3Nm
YWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6KGlkKWNvbnRlbnRzSW1hZ2UuZ2V0KCldOwogICAgIFtj
cm9zc2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107CiAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCA0NjBk
MWI4NTZiNzdiN2NmNGVjNjg5NjU4MWI4MzNkM2U3Zjk3MDE0Li5mYzY0OWQxMGFhYjljMTNmZmYy
OTMwNTVhNzA3Y2I3NDUzNzQ2OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC02OCwxNSArNjgsMTMgQEAgQml0bWFwSW1hZ2U6
OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRyJiYgaW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2Vy
dmVyKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQogICAgICwgbV9hbmltYXRpb25GaW5p
c2hlZFdoZW5DYXRjaGluZ1VwKGZhbHNlKQogeworICAgIG1fZnJhbWVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoMSk7CisgICAgbV9mcmFtZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoaW1hZ2Up
KTsKKyAgICAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgZGVjb2Rlciwgd2UgY2FuJ3Qg
ZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRpb24uCiAgICAgLy8gU2V0IG1fc2l6ZVJlc3Bl
Y3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2FtZSBhcyBtX3NpemUgc28gaXQncyBub3QgMHgw
LgotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZSA9IE5hdGl2ZUltYWdl
OjpzaXplKGltYWdlKTsKKyAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUg
PSBtX2ZyYW1lc1swXS5zaXplKCk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS5hcmVhKCkg
KiA0OwotICAgIAotICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0gICAgbV9mcmFtZXNbMF0ubV9oYXNB
bHBoYSA9IE5hdGl2ZUltYWdlOjpoYXNBbHBoYShpbWFnZSk7Ci0gICAgbV9mcmFtZXNbMF0ubV9o
YXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBXVEZNb3ZlKGlt
YWdlKTsKIH0KIAogQml0bWFwSW1hZ2U6On5CaXRtYXBJbWFnZSgpCkBAIC0xMDUsNyArMTAzLDcg
QEAgYm9vbCBCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkK
ICAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7CisgICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5oYXNJbWFnZSgpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpoYXNTaW5nbGVT
ZWN1cml0eU9yaWdpbigpIGNvbnN0CkBAIC0xMjUsOSArMTIzLDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKICAgICAgICAgLy8gVGhlIHVu
ZGVybHlpbmcgZnJhbWUgaXNuJ3QgYWN0dWFsbHkgY2hhbmdpbmcgKHdlJ3JlIGp1c3QgdHJ5aW5n
IHRvCiAgICAgICAgIC8vIHNhdmUgdGhlIG1lbW9yeSBmb3IgdGhlIGZyYW1lYnVmZmVyIGRhdGEp
LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyCiAgICAgICAgIC8vIHRoZSBtZXRhZGF0YS4KLSAg
ICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAg
ICAgICAgaWYgKG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKSkKLSAgICAgICAgICAgIGZyYW1lQnl0
ZXNDbGVhcmVkICs9IGZyYW1lQnl0ZXM7CisgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IG1f
ZnJhbWVzW2ldLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSk7CiAgICAg
fQogCiAgICAgbV9zb3VyY2UuY2xlYXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFtZSwgZGF0
YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CkBAIC0xNTAsOCArMTQ2LDggQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxsKQogICAg
ICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBhbGxGcmFt
ZUJ5dGVzICs9IG1fZnJhbWVzW2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChhdXRvJiBm
cmFtZSA6IG1fZnJhbWVzKQorICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLmZyYW1lQnl0
ZXMoKTsKIAogICAgIGlmIChhbGxGcmFtZUJ5dGVzID4gbGFyZ2VBbmltYXRpb25DdXRvZmYpIHsK
ICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGRlc3Ryb3lEZWNvZGVkRGF0YUlm
TmVjZXNzYXJ5IGRlc3Ryb3lpbmdEYXRhOiBhbGxGcmFtZUJ5dGVzPSV1IGN1dG9mZj0ldSIsIHRo
aXMsIGFsbEZyYW1lQnl0ZXMsIGxhcmdlQW5pbWF0aW9uQ3V0b2ZmKTsKQEAgLTE3Nyw3ICsxNzMs
NyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkodW5zaWduZWQg
ZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTbwogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRl
Y29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50PihmcmFtZUJ5dGVzQ2xlYXJlZCkp
OwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxp
bmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5n
KQogewogICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgQVNTRVJUKG1f
ZGVjb2RlZFNpemUgPT0gMCB8fCBudW1GcmFtZXMgPiAxKTsKQEAgLTE4NSwyNSArMTgxLDEyIEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltCiAgICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8IG51bUZy
YW1lcykKICAgICAgICAgbV9mcmFtZXMuZ3JvdyhudW1GcmFtZXMpOwogCi0gICAgaWYgKGZyYW1l
Q2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpIHsKLSAgICAgICAgbV9mcmFtZXNbaW5k
ZXhdLm1faW1hZ2UgPSBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCk7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2
ZWwgPSBzdWJzYW1wbGluZ0xldmVsOwotICAgIH0KLQotICAgIG1fZnJhbWVzW2luZGV4XS5tX29y
aWVudGF0aW9uID0gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKLSAgICBtX2Zy
YW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzW2luZGV4XS5t
X2lzQ29tcGxldGUgPSBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KTsKKyAg
ICBtX2ZyYW1lc1tpbmRleF0gPSBtX3NvdXJjZS5jcmVhdGVGcmFtZURhdGFBdEluZGV4KGluZGV4
LCBzdWJzYW1wbGluZ0xldmVsLCBjYWNoaW5nKTsKIAotICAgIGlmIChyZXBldGl0aW9uQ291bnQo
ZmFsc2UpICE9IGNBbmltYXRpb25Ob25lKQotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9kdXJh
dGlvbiA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICBMT0coSW1h
Z2VzLCAiQml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNvbXBsZXRl
ICVkKSIsIHRoaXMsIGluZGV4LCBjYWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpN
ZXRhZGF0YSA/ICJtZXRhZGF0YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5mcmFtZUJ5
dGVzKCksIG1fZnJhbWVzW2luZGV4XS5pc0NvbXBsZXRlKCkpOwogCi0gICAgbV9mcmFtZXNbaW5k
ZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7Ci0g
ICAgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlcyA9IG1fc291cmNlLmZyYW1lQnl0ZXNBdElu
ZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKLQotICAgIExPRyhJbWFnZXMsICJCaXRtYXBJ
bWFnZSAlcCBjYWNoZUZyYW1lICVsdSAoJXMldSBieXRlcywgY29tcGxldGUgJWQpIiwgdGhpcywg
aW5kZXgsIGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSA/ICJtZXRhZGF0YSBvbmx5
LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMsIG1fZnJhbWVzW2luZGV4XS5t
X2lzQ29tcGxldGUpOwotCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKSB7Ci0gICAg
ICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0ubV9mcmFt
ZUJ5dGVzKTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpIHsKKyAgICAgICAg
aW50IGRlbHRhQnl0ZXMgPSBzYWZlQ2FzdDxpbnQ+KG1fZnJhbWVzW2luZGV4XS5mcmFtZUJ5dGVz
KCkpOwogICAgICAgICBtX2RlY29kZWRTaXplICs9IGRlbHRhQnl0ZXM7CiAgICAgICAgIC8vIFRo
ZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vic3VtZSB0aGUgcGFydGlhbGx5IGRlY29kZWQg
ZGF0YSB1c2VkCiAgICAgICAgIC8vIHRvIGRldGVybWluZSBpbWFnZSBwcm9wZXJ0aWVzLgpAQCAt
Mjg4LDIxICsyNzEsMTkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCiAgICAgLy8gZnJhbWUgYWZmZWN0ZWQgYnkgYXBwZW5kaW5nIG5ldyBkYXRh
IGhlcmUuIFRodXMgd2UgaGF2ZSB0byBjbGVhciBhbGwgdGhlCiAgICAgLy8gaW5jb21wbGV0ZSBm
cmFtZXMgdG8gYmUgc2FmZS4KICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQ2xlYXJlZCA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkgeworICAgIGZv
ciAoYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykgewogICAgICAgICAvLyBOT1RFOiBEb24ndCBjYWxs
IGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoKSBoZXJlLCB0aGF0IHdpbGwgdHJ5IHRvCiAgICAgICAg
IC8vIGRlY29kZSBhbnkgdW5jYWNoZWQgKGkuZS4gbmV2ZXItZGVjb2RlZCBvcgogICAgICAgICAv
LyBjbGVhcmVkLW9uLWEtcHJldmlvdXMtcGFzcykgZnJhbWVzIQotICAgICAgICB1bnNpZ25lZCBm
cmFtZUJ5dGVzID0gbV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAobV9mcmFt
ZXNbaV0ubV9oYXZlTWV0YWRhdGEgJiYgIW1fZnJhbWVzW2ldLm1faXNDb21wbGV0ZSkKLSAgICAg
ICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IChtX2ZyYW1lc1tpXS5jbGVhcih0cnVlKSA/IGZy
YW1lQnl0ZXMgOiAwKTsKKyAgICAgICAgaWYgKGZyYW1lLmhhc01ldGFkYXRhKCkgJiYgIWZyYW1l
LmlzQ29tcGxldGUoKSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lLmNs
ZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgfQogICAgIGRlc3Ryb3lN
ZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xlYXJlZCwgQ2xlYXJlZFNvdXJjZTo6Tm8pOwog
I2Vsc2UKICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgZGlmZmVyZW50IGZvciBpT1M/CiAgICAg
aW50IGRlbHRhQnl0ZXMgPSAwOwogICAgIGlmICghbV9mcmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGludCBieXRlcyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLm1fZnJhbWVCeXRl
czsKLSAgICAgICAgaWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFyKHRydWUp
KSB7CisgICAgICAgIGlmIChpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAx
XS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpKSB7CiAgICAgICAgICAgICBk
ZWx0YUJ5dGVzICs9IGJ5dGVzOwogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBtX2RlY29kZWRQ
cm9wZXJ0aWVzU2l6ZTsKICAgICAgICAgICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplID0gMDsK
QEAgLTM2NiwxNSArMzQ3LDE1IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWlsYWJsZSgp
CiAgICAgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAotYm9vbCBCaXRtYXBJbWFnZTo6ZW5z
dXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nIGZyYW1lQ2Fj
aGluZykKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5nKQogewogICAgIGlmIChpbmRleCA+PSBm
cmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpbmRleCA+PSBt
X2ZyYW1lcy5zaXplKCkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRh
QW5kRnJhbWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICB8fCAoZnJhbWVD
YWNoaW5nID09IENhY2hlTWV0YWRhdGFPbmx5ICYmICFtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0
YWRhdGEpKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBmcmFtZUNhY2hpbmcpOworICAg
ICAgICB8fCAoY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJ
bWFnZSAmJiAhbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpCisgICAgICAgIHx8IChjYWNoaW5n
ID09IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSAmJiAhbV9mcmFtZXNbaW5kZXhd
Lmhhc01ldGFkYXRhKCkpKQorICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBjYWNoaW5nKTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzg4LDEwICszNjksOSBAQCBOYXRpdmVJbWFnZVB0
ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9hdCBwcmVz
ZW50YXRpb25TYwogCiAgICAgLy8gV2UgbWF5IGhhdmUgY2FjaGVkIGEgZnJhbWUgd2l0aCBhIGhp
Z2hlciBzdWJzYW1wbGluZyBsZXZlbCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvCiAgICAgLy8g
cmUtZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KLSAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5z
aXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZlbCA8IG1f
ZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpIHsKKyAgICBpZiAoaW5kZXggPCBtX2Zy
YW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkgJiYgc3Vic2FtcGxpbmdM
ZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5zdWJzYW1wbGluZ0xldmVsKCkpIHsKICAgICAgICAgLy8g
SWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEgc2l6ZSwg
cmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1f
ZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5jbGVh
cih0cnVlKTsKKyAgICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhdLmNsZWFy
KEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgICAgIGludmFsaWRhdGVQbGF0
Zm9ybURhdGEoKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBzaXplQ2hhbmdlOwogICAgICAg
ICBpZiAoaW1hZ2VPYnNlcnZlcigpKQpAQCAtMzk5LDQwICszNzksNzIgQEAgTmF0aXZlSW1hZ2VQ
dHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgcHJl
c2VudGF0aW9uU2MKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlbid0IGZldGNoZWQgYSBmcmFt
ZSB5ZXQsIGRvIHNvLgotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJh
bWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsLCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIGlmIChpbmRleCA+PSBtX2ZyYW1l
cy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICBjYWNoZUZy
YW1lKGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGFBbmRJbWFnZSk7CisKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmltYWdlKCk7Cit9
CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoKQoreworICAg
IHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdlUHRyIEJp
dG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdElu
ZGV4KGkpOworICAgICAgICBpZiAoaW1hZ2UgJiYgUGxhdGZvcm1JbWFnZShpbWFnZSkuc2l6ZSgp
ID09IHNpemUpCisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQorICAgIAorICAgIC8v
IEZhbGxiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZSBpbWFnZSBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBy
aWdodCBzaXplCisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAgIAorTmF0
aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKK3sK
KyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworfQogCi0gICAg
cmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBC
aXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKCkKK3sKKyAgICBWZWN0b3I8TmF0aXZlSW1h
Z2VQdHI+IGltYWdlczsKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmIChhdXRv
IGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkpCisgICAgICAgICAgICBpbWFnZXMuYXBwZW5k
KGltYWdlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlczsKIH0KIAogYm9vbCBCaXRt
YXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYg
KCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYg
KCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5k
ZXhdLm1faXNDb21wbGV0ZTsKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmlzQ29tcGxldGUo
KTsKIH0KIAogZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBp
bmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIENhY2hlTWV0YWRh
dGFPbmx5KSkKKyAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIEltYWdlRnJhbWVE
YXRhOjpDYWNoaW5nOjpNZXRhZGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5tX2R1cmF0aW9uOwotfQotCi1OYXRpdmVJbWFnZVB0ciBCaXRtYXBJ
bWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQotewotICAgIHJldHVybiBmcmFtZUlt
YWdlQXRJbmRleChjdXJyZW50RnJhbWUoKSk7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5k
dXJhdGlvbigpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNo
ZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiBt
X2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc01l
dGFkYXRhKCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0uaGFzQWxwaGEoKTsKIAog
ICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CiB9CkBAIC00
NDQsMTEgKzQ1NiwxMSBAQCBib29sIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVLbm93blRvQmVP
cGFxdWUoKQogCiBJbWFnZU9yaWVudGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGlu
ZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGlu
ZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4g
SW1hZ2VPcmllbnRhdGlvbigpOwogCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2hhdmVNZXRh
ZGF0YSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX29yaWVudGF0aW9uOworICAg
IGlmIChtX2ZyYW1lc1tpbmRleF0uaGFzTWV0YWRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5vcmllbnRhdGlvbigpOwogCiAgICAgcmV0dXJuIG1fc291cmNlLm9yaWVudGF0
aW9uQXRJbmRleChpbmRleCk7CiB9CkBAIC03MDAsMTcgKzcxMiw1NiBAQCBDb2xvciBCaXRtYXBJ
bWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAg
ICAgCiAgICAgQVNTRVJUKG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENvbG9yID0gTmF0
aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2ltYWdlLmdldCgp
KTsKKyAgICBtX3NvbGlkQ29sb3IgPSBtX2ZyYW1lc1swXS5zaW5nbGVQaXhlbFNvbGlkQ29sb3Io
KTsKICAgICAKICAgICBBU1NFUlQobV9zb2xpZENvbG9yKTsKICAgICByZXR1cm4gbV9zb2xpZENv
bG9yLnZhbHVlKCk7CiB9CiAgICAgCitib29sIEJpdG1hcEltYWdlOjppc0FsbW9zdFNvbGlkQ29s
b3IoKQoreworICAgIGlmIChmcmFtZUNvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIGVuc3VyZUZyYW1lSXNDYWNoZWQoMCkgJiYgbV9mcmFtZXNbMF0uaXNB
bG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCiBib29sIEJpdG1hcEltYWdlOjpjYW5BbmltYXRl
KCkKIHsKICAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+IDE7CiB9
CiAKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9u
IGRlc2NyaXB0aW9uKQoreworICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkgfHwgc3JjUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdGFy
dEFuaW1hdGlvbihEb05vdENhdGNoVXApOworI2Vsc2UKKyAgICBzdGFydEFuaW1hdGlvbigpOwor
I2VuZGlmCisgICAgCisgICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsK
KyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihj
b250ZXh0LCBkZXN0UmVjdCwgY29sb3IsIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIFBs
YXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoY29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3Qp
KTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFu
IGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb24oZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKKyAgICBpZiAoZGVz
Y3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRh
dGlvbikKKyAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1
cnJlbnRGcmFtZSk7CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShpbWFnZSkuZHJhdyhjb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgbV9zaXplLCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworICAg
IAorICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlk
RHJhdyh0aGlzKTsKK30KKyAgICAKIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0cmVhbSYg
dHMpIGNvbnN0CiB7CiAgICAgSW1hZ2U6OmR1bXAodHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggMDc1ODkyOWNkODdmYWRhY2YwMmI2
ZWQ4ZWVhZmU3ZGVmZDY2ZjBjNS4uMjIxOGM4MjRiNTI4ZmQ2MzliYWIxMzhkZWNjOThiOTgxNmEx
NjgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFw
SW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oCkBAIC0yOCwxMSArMjgsMTMgQEAKICNpZm5kZWYgQml0bWFwSW1hZ2VfaAogI2RlZmluZSBC
aXRtYXBJbWFnZV9oCiAKLSNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisj
aW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lRGF0YS5oIgogI2luY2x1ZGUg
IkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUg
IkludFNpemUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCiAKICNpZiBVU0UoQ0cpIHx8
IFVTRShBUFBLSVQpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDcsNjMgKzQ5LDkg
QEAgdHlwZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2UgV1RGIHsK
LSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVEYXRhPiA6
IHB1YmxpYyBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJhbWVEYXRh
IG1lbWJlcnMgaW5pdGlhbGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgVGltZXI7CiAKLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0gICAgSW50U2l6
ZSBzaXplKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0gICAgYm9vbCBoYXNBbHBoYShjb25zdCBO
YXRpdmVJbWFnZVB0ciYpOwotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBO
YXRpdmVJbWFnZVB0ciYpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS8vIEZyYW1lRGF0YSBDbGFzcwotLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0cnVjdCBGcmFtZURhdGEgewot
cHVibGljOgotICAgIEZyYW1lRGF0YSgpCi0gICAgICAgIDogbV9oYXZlTWV0YWRhdGEoZmFsc2Up
Ci0gICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxwaGEodHJ1
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkZyYW1lRGF0YSgpCi0gICAgeyAKLSAgICAgICAgY2xl
YXIodHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBpbWFnZSBkYXRhIG9u
IHRoZSBmcmFtZSwgYW5kIChvcHRpb25hbGx5KSB0aGUgbWV0YWRhdGEuCi0gICAgLy8gUmV0dXJu
cyB3aGV0aGVyIHRoZXJlIHdhcyBjYWNoZWQgaW1hZ2UgZGF0YSB0byBjbGVhci4KLSAgICBib29s
IGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSk7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNlZEZyYW1l
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9mcmFtZUJ5dGVzIDogMDsgfQotCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKLSAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50
YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OwotICAgIFN1YnNhbXBsaW5nTGV2ZWwg
bV9zdWJzYW1wbGluZ0xldmVsIHsgMCB9OwotICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07Ci0g
ICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7Ci0gICAgYm9vbCBtX2lzQ29tcGxldGUgOiAxOwot
ICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7Ci0gICAgdW5zaWduZWQgbV9mcmFtZUJ5dGVzIHsgMCB9
OwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLy8gQml0bWFwSW1hZ2UgQ2xhc3MKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLQogY2xhc3MgQml0bWFwSW1hZ2UgZmluYWwgOiBwdWJs
aWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAgICBmcmllbmQg
Y2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0xNTUsMTIgKzEwMyw2IEBAIHB1Ymxp
YzoKICAgICBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgb3ZlcnJpZGU7CiAjZW5k
aWYKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDR0ltYWdlUmVmIGdldENHSW1h
Z2VSZWYoKSBvdmVycmlkZTsKLSAgICBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6
ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGdl
dENHSW1hZ2VBcnJheSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAg
ICAgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIG92ZXJyaWRlOwogICAgIGJvb2wgZ2V0SEJJVE1B
UE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgb3ZlcnJpZGU7CkBAIC0xNzQsOCArMTE2
LDEzIEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZhc09iamVjdChFdmFzKikgb3Zl
cnJpZGU7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUo
Y29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRh
dGlvbkZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZyYW1lT3JpZW50YXRpb25B
dEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQorICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gZnJh
bWVzTmF0aXZlSW1hZ2VzKCkgb3ZlcnJpZGU7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBpc0FsbW9zdFNvbGlkQ29sb3IoKTsKIAogICAgIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0Jl
T3BhcXVlKCkgb3ZlcnJpZGU7CiAKQEAgLTIxNSw3ICsxNjIsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
c2l6ZV90IGZyYW1lQ291bnQoKTsKIAogICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdElu
ZGV4KHNpemVfdCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50ID0gMSk7Ci0gICAgTmF0aXZl
SW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIAogICAgIGJv
b2wgaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKQEAgLTIyNSwxMSArMTcxLDEwIEBA
IHByb3RlY3RlZDoKICAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4
KHNpemVfdCk7CiAKICAgICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2ZXIgYWNj
ZXNzZWQgZXhjZXB0IGludGVybmFsbHkuCi0gICAgZW51bSBJbWFnZUZyYW1lQ2FjaGluZyB7IENh
Y2hlTWV0YWRhdGFPbmx5LCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUgfTsKLSAgICB2b2lkIGNhY2hl
RnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyA9
IENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7CisgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1l
RGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQgYmVmb3Jl
IGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9yIGluZm8gd2l0aG91dCBkZWNvZGluZy4gUmV0
dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91bmRzLgotICAgIGJvb2wgZW5zdXJlRnJhbWVJ
c0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nID0gQ2FjaGVNZXRhZGF0YUFu
ZEZyYW1lKTsKKyAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YUFu
ZEltYWdlKTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhLiBXaGVu
IHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8vIHRoZSBlbnRpcmUgZnJh
bWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJveQpAQCAt
MjkyLDcgKzIzNyw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6ZVJlc3Bl
Y3RpbmdPcmllbnRhdGlvbjsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZSB7IDAgfTsgLy8g
VGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KLSAgICBWZWN0b3I8
RnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMg
b2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRo
ZSBjYWNoZS4KKyAgICBWZWN0b3I8SW1hZ2VGcmFtZURhdGEsIDE+IG1fZnJhbWVzOyAvLyBBbiBh
cnJheSBvZiB0aGUgY2FjaGVkIGZyYW1lcyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBoYXZlIHRvIHJl
ZiBmcmFtZXMgdG8gcGluIHRoZW0gaW4gdGhlIGNhY2hlLgogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRpbWVyPiBtX2ZyYW1lVGltZXI7CiAgICAgaW50IG1fcmVwZXRpdGlvbkNvdW50IHsgY0FuaW1h
dGlvbk5vbmUgfTsgLy8gSG93IG1hbnkgdG90YWwgYW5pbWF0aW9uIGxvb3BzIHdlIHNob3VsZCBk
by4gVGhpcyB3aWxsIGJlIGNBbmltYXRpb25Ob25lIGlmIHRoaXMgaW1hZ2UgdHlwZSBpcyBpbmNh
cGFibGUgb2YgYW5pbWF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBQaXhlbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YWEyNDAwZjNhZWY3YjY5OWQyYWE0ZGY3ZGE0
NDcyNGRkM2NkNThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDb2xvci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisj
aW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCaXRtYXBQaXhlbHMgeworcHVibGljOgorICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBjcmVhdGUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihzaXplLCBwcmVtdWx0aXBseUFscGhhKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3JlYXRlKGNv
bnN0IEJpdG1hcFBpeGVscyYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxCaXRtYXBQaXhlbHM+KG90aGVyKTsKKyAgICB9CisKKyAgICBCaXRtYXBQaXhlbHMo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZSkKKyAgICAg
ICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAgICBzZXRTaXplKHNpemUpOworICAgIH0K
KworICAgIEJpdG1hcFBpeGVscyhjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKKyAgICAgICAg
bV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IG90aGVy
Lm1fc2l6ZTsKKyAgICAgICAgbV9yZWN0ID0gb3RoZXIubV9yZWN0OworICAgICAgICBtX3ByZW11
bHRpcGx5QWxwaGEgPSBvdGhlci5tX3ByZW11bHRpcGx5QWxwaGE7CisgICAgfQorCisgICAgTmF0
aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdDsKKworICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS50cnlSZXNlcnZl
Q2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUucmVzaXplKHNpemUuYXJlYSgpKTsKKyAgICAgICAg
bV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7
CisgICAgICAgIG1fcmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKTsKKyAgICAgICAg
Y2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemUu
aXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91bmRzKHJlY3QpKTsKKyAgICAgICAgbV9y
ZWN0ID0gcmVjdDsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CisgICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpbkJvdW5kcyhJbnRQb2ludCh4LCB5KSkgPyBtX3BpeGVscyArIHkgKiBtX3NpemUud2lk
dGgoKSArIHggOiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAg
ICAgICAgbWVtc2V0KG1fcGl4ZWxzLCAwLCBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEzMikp
OworICAgIH0KKworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAg
eworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgaW5Cb3VuZHMocmVjdCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9
IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIqIHN0YXJ0ID0g
YXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0
LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbXNldChzdGFydCwgMCwgcmVjdFdpZHRo
SW5CeXRlcyk7CisgICAgICAgICAgICBzdGFydCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgcmVwZWF0Rmlyc3RSb3coY29uc3QgSW50UmVjdCYgcmVjdCkK
KyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCBpbkJvdW5kcyhyZWN0KSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5
dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJHQkEzMiogc3Jj
ID0gYXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgUkdCQTMyKiBkZXN0ID0gc3JjICsg
bV9zaXplLndpZHRoKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcmVjdC5oZWlnaHQo
KTsgKytpKSB7CisgICAgICAgICAgICBtZW1jcHkoZGVzdCwgc3JjLCByZWN0V2lkdGhJbkJ5dGVz
KTsKKyAgICAgICAgICAgIGRlc3QgKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBn
LCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCQShhdCh4LCB5
KSwgciwgZywgYiwgYSk7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwg
dW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhIHx8IGEgPj0gMjU1KQorICAgICAgICAgICAg
KmRlc3QgPSBtYWtlUkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgZWxzZSBpZiAoIWEpCisgICAg
ICAgICAgICAqZGVzdCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpkZXN0ID0gbWFr
ZVByZW11bHRpcGxpZWRSR0JBKHIsIGcsIGIsIGEpOworICAgIH0KKworICAgIHZvaWQgb3ZlclJH
QkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNp
Z25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFhbHBoYUNoYW5uZWwoKmRlc3QpKSB7Cisg
ICAgICAgICAgICBzZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkK
KyAgICAgICAgICAgICpkZXN0ID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwoKmRl
c3QpLCBncmVlbkNoYW5uZWwoKmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhhQ2hhbm5l
bCgqZGVzdCkpOworICAgICAgICAKKyAgICAgICAgUkdCQTMyIHNyYyA9IG1ha2VSR0JBKHIsIGcs
IGIsIGEpOworICAgICAgICAqZGVzdCA9IENvbG9yKCpkZXN0KS5ibGVuZChzcmMpLnJnYigpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICAq
ZGVzdCA9IG1ha2VVblByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwoKmRlc3QpLCBncmVlbkNo
YW5uZWwoKmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhhQ2hhbm5lbCgqZGVzdCkpOwor
ICAgIH0KKworICAgIGJvb2wgaW5Cb3VuZHMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKS5jb250YWlu
cyhwb2ludCk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5kcyhjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXpl
KS5jb250YWlucyhyZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFJHQkEzMj4g
bV9iYWNraW5nU3RvcmU7CisgICAgUkdCQTMyKiBtX3BpeGVscyB7IG51bGxwdHIgfTsKKyAgICBJ
bnRTaXplIG1fc2l6ZTsKKyAgICBJbnRSZWN0IG1fcmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5cyBq
dXN0IGJlIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGFuZCBQTkcgZnJhbWVzCisg
ICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGEgeyB0cnVlIH07Cit9OworCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKaW5kZXggNGUyNWFhNmZkNzRkMWU0NmM1
NDE2MTQ5OGJjMTcyYmY2MDA4NzVkMS4uNDM5ZjVhNjNjN2JlYmU1NjA0MmIyNGU3ZDcyZWNjZWNm
MzZjNDBjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcApA
QCAtNDksNiArNDksNDAgQEAgY29uc3QgUkdCQTMyIENvbG9yOjp0cmFuc3BhcmVudDsKIHN0YXRp
YyBjb25zdCBSR0JBMzIgbGlnaHRlbmVkQmxhY2sgPSAweEZGNTQ1NDU0Owogc3RhdGljIGNvbnN0
IFJHQkEzMiBkYXJrZW5lZFdoaXRlID0gMHhGRkFCQUJBQjsKIAorc3RhdGljIGlubGluZSB1bnNp
Z25lZCBtdWx0aXBseTI1NSh1bnNpZ25lZCBjKQoreworICAgIC8vIGMgKiAyNTUKKyAgICAvLyAg
ID0gYyAqICgyNTYgLSAxKQorICAgIC8vICAgPSBjICogMjU2IC0gYworICAgIHJldHVybiAoYyA8
PCA4KSAtIGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZGl2aWRlMjU1KHVuc2lnbmVk
IGMpCit7CisgICAgLy8gYyAvIDI1NQorICAgIC8vICAgPSBjIC8gMjU2ICogKDEgKyAxIC8gMjU1
KQorICAgIC8vICAgPSAoYyArIGMgLyAyNTUpIC8gMjU2CisgICAgLy8gICA9IChjICsgKGMgKyBj
IC8gMjU1KSAvIDI1NikgLyAyNTYKKyAgICAvLyAgID0gKGMgKyBjIC8gMjU2ICsgYyAvICgyNTUg
eCAyNTYpKSAvIDI1NgorICAgIC8vICB+PSAoYyArIGMgLyAyNTYgKyAxKSAvIDI1NgorICAgIHJl
dHVybiAoYyArIChjID4+IDgpICsgMSkgPj4gODsKK30KKyAgICAKK3N0YXRpYyBpbmxpbmUgdW5z
aWduZWQgZGl2aWRlQ2VpbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBkKQoreworICAgIHJldHVybiAo
YyArIGQgLSAxKSAvIGQ7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHByZW11bHRp
cGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0dXJuIGRpdmlk
ZTI1NShjICogYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5wcmVtdWx0aXBsaWVk
Q2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBkaXZpZGVDZWls
KG11bHRpcGx5MjU1KGMpLCBhKTsKK30KKyAgICAKIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQg
ZywgaW50IGIpCiB7CiAgICAgcmV0dXJuIDB4RkYwMDAwMDAgfCBzdGQ6Om1heCgwLCBzdGQ6Om1p
bihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBz
dGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUpKTsKQEAgLTU5LDYgKzkzLDE2IEBAIFJHQkEzMiBt
YWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKICAgICByZXR1cm4gc3RkOjptYXgo
MCwgc3RkOjptaW4oYSwgMjU1KSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUp
KSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgw
LCBzdGQ6Om1pbihiLCAyNTUpKTsKIH0KIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShp
bnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVs
dGlwbGllZENoYW5uZWwociwgYSksIHByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCBwcmVtdWx0
aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7Cit9CisgICAgCitSR0JBMzIgbWFrZVVuUHJlbXVsdGlw
bGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VS
R0JBKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwo
ZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorICAgIAogc3RhdGlj
IGludCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQogewogICAgIC8vIFdlIHVzZSBscm91
bmRmIGFuZCAyNTUgaW5zdGVhZCBvZiBuZXh0YWZ0ZXJmKDI1NiwgMCkgdG8gbWF0Y2ggQ0cncyBy
b3VuZGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKaW5kZXggZGQy
NjI3MGJiNDY2MGIzM2FlMDcwZThjOTQ0NTIwZDcyODQ1NGI4YS4uYTU0NTMyYzc3NTVhN2M4NzY5
MzYyNDBjYWU0ZWMzN2E0ZGEwZDA0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCkBAIC01NCw2ICs1NCw4IEBAIHR5cGVkZWYgdW5zaWduZWQgUkdCQTMyOyAvLyBE
ZXByZWNhdGVkOiBUeXBlIGZvciBhbiBSR0JBIHF1YWRydXBsZXQuIFVzZSBSR0JBIGNsCiAKIFdF
QkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpOwogV0VCQ09S
RV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKK1dF
QkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBp
bnQgYiwgaW50IGEpOworV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRS
R0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAogV0VCQ09SRV9FWFBPUlQgUkdCQTMy
IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhh
KTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBj
b2xvciwgT3B0aW9uYWw8ZmxvYXQ+IG92ZXJyaWRlQWxwaGEpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmgKaW5kZXggN2EyOTk5MmY3NzE4OGUwMzgyOGQ4MGE2NWI4YmUy
Y2Q4ZGMyZGU3Ni4uOGU3YjUyYjFmNGYzMWM3NGEzY2IyYTEzMjE1ZGE3N2EyYjE4YzA3YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCkBAIC0xMzcsOCArMTM3LDEx
IEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwgUm91bmRUaWxl
LCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBOYXRpdmVJbWFn
ZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsg
fQogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBJbWFnZU9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOyB9Cisg
ICAgdmlydHVhbCBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIHsg
cmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0
cy4KIApAQCAtMTUwLDEyICsxNTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDRkRhdGFSZWYg
Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKLSNp
ZiBVU0UoQ0cpCi0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldENHSW1hZ2VSZWYoKSB7IHJldHVy
biBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJlZk9m
U2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgUmV0
YWluUHRyPENGQXJyYXlSZWY+IGdldENHSW1hZ2VBcnJheSgpIHsgcmV0dXJuIG51bGxwdHI7IH0K
LSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQ
KEhCSVRNQVApIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGdldEhCSVRNQVBP
ZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xNzks
NiArMTc2LDggQEAgcHVibGljOgogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXJ0dWFsIGJv
b2wgbm90U29saWRDb2xvcigpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgorICAgIAorICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXRJZk5lZWRlZCgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI4ZTNlZDRjOGEzYWJkMmNm
MzdmZmM3ZDFjZjk5NDg4ODBiNDg5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcApAQCAtMCwwICsxLDE1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKKworI2luY2x1ZGUgIkNvbG9y
LmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKKyNlbHNlCisj
aW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIlBsYXRmb3JtSW1h
Z2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZyYW1lRGF0YTo6SW1hZ2VGcmFt
ZURhdGEoKQoreworfQorCitJbWFnZUZyYW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEoTmF0aXZlSW1h
Z2VQdHImJiBpbWFnZSkKKyAgICA6IG1fc3RhdHVzKERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSkK
KyAgICAsIG1faW1hZ2UoV1RGTW92ZShpbWFnZSkpCit7CisgICAgbV9zaXplID0gUGxhdGZvcm1J
bWFnZShtX2ltYWdlKS5zaXplKCk7CisgICAgbV9oYXNBbHBoYSA9IFBsYXRmb3JtSW1hZ2UobV9p
bWFnZSkuaGFzQWxwaGEoKTsKK30KKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKElt
YWdlRGVjb2RlciYgZGVjb2Rlciwgc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWwsIENhY2hpbmcgZnJhbWVDYWNoaW5nKQoreworICAgIEFTU0VSVChmcmFtZUNh
Y2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhQW5kSW1hZ2UpOworICAgIAorICAgIGlmIChmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6
SW1hZ2UgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpIHsKKyAg
ICAgICAgbV9pbWFnZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1
YnNhbXBsaW5nTGV2ZWwpOworICAgICAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBzdWJzYW1wbGlu
Z0xldmVsOworICAgIH0KKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKSB7Cisg
ICAgICAgIG1fb3JpZW50YXRpb24gPSBkZWNvZGVyLm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7
CisgICAgICAgIG1fc3RhdHVzID0gZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4
KSA/IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSA6IERlY29kaW5nU3RhdHVzOjpQYXJ0aWFsOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGRlY29kZXIucmVwZXRpdGlvbkNvdW50KCkgIT0gY0FuaW1h
dGlvbk5vbmUpCisgICAgICAgICAgICBtX2R1cmF0aW9uID0gZGVjb2Rlci5mcmFtZUR1cmF0aW9u
QXRJbmRleChpbmRleCk7CisgICAgICAgIAorICAgICAgICBtX2hhc0FscGhhID0gZGVjb2Rlci5m
cmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CisgICAgICAgIG1fc2l6ZSA9IGRlY29kZXIuZnJh
bWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgfQorfQorICAgIAor
SW1hZ2VGcmFtZURhdGE6On5JbWFnZUZyYW1lRGF0YSgpCit7CisgICAgY2xlYXJTdWJJbWFnZXMo
KTsKK30KKyAgICAKK0ltYWdlRnJhbWVEYXRhJiBJbWFnZUZyYW1lRGF0YTo6b3BlcmF0b3I9KGNv
bnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisg
ICAgICAgIHJldHVybiAqdGhpczsKKworICAgIG1fc3RhdHVzID0gb3RoZXIubV9zdGF0dXM7Cisg
ICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOwor
ICAgIAorICAgIG1fcGl4ZWxzID0gb3RoZXIucGl4ZWxzKCkgPyBCaXRtYXBQaXhlbHM6OmNyZWF0
ZSgqb3RoZXIucGl4ZWxzKCkpIDogbnVsbHB0cjsKKyAgICAKKyAgICBtX29yaWVudGF0aW9uID0g
b3RoZXIubV9vcmllbnRhdGlvbjsKKyAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5tX3N1
YnNhbXBsaW5nTGV2ZWw7CisgICAgbV9kdXJhdGlvbiA9IG90aGVyLm1fZHVyYXRpb247CisgICAg
bV9oYXNBbHBoYSA9IG90aGVyLm1faGFzQWxwaGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2
b2lkIEltYWdlRnJhbWVEYXRhOjpjbGVhclN1YkltYWdlcygpCit7CisgICAgaWYgKCFtX2ltYWdl
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5jbGVh
clN1YkltYWdlcygpOworfQorCit1bnNpZ25lZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXIoQ2FjaGlu
ZyBmcmFtZUNhY2hpbmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpF
bXB0eSB8fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEpOworICAgIAorICAgIHVu
c2lnbmVkIGZyYW1lQnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisgICAgCisgICAgY2xlYXJT
dWJJbWFnZXMoKTsKKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkVtcHR5
KQorICAgICAgICAqdGhpcyA9IEltYWdlRnJhbWVEYXRhKCk7CisgICAgZWxzZQorICAgICAgICBt
X2ltYWdlID0gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gZnJhbWVCeXRlczsKK30KKworYm9v
bCBJbWFnZUZyYW1lRGF0YTo6aW5pdFBpeGVscyhjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEpCit7CisgICAgQVNTRVJUKCFoYXNQaXhlbHMoKSAmJiBtX3NpemUuaXNF
bXB0eSgpKTsKKyAgICBtX3BpeGVscyA9ICFzaXplLmlzRW1wdHkoKSA/IEJpdG1hcFBpeGVsczo6
Y3JlYXRlKHNpemUsIHByZW11bHRpcGx5QWxwaGEpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaGFz
UGl4ZWxzKCk7Cit9CisgICAgCitib29sIEltYWdlRnJhbWVEYXRhOjpjb3B5UGl4ZWxzKGNvbnN0
IEltYWdlRnJhbWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgbV9waXhlbHMgPSBvdGhlci5oYXNQaXhlbHMoKSA/IEJp
dG1hcFBpeGVsczo6Y3JlYXRlKCpvdGhlci5tX3BpeGVscy5nZXQoKSkgOiBudWxscHRyOworICAg
IHJldHVybiBoYXNQaXhlbHMoKSA9PSBvdGhlci5oYXNQaXhlbHMoKTsKK30KKyAgICAKK0NvbG9y
IEltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIGlm
ICghaGFzSW1hZ2UoKSB8fCBtX3NpemUgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJu
IENvbG9yKCk7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuc2luZ2xl
UGl4ZWxTb2xpZENvbG9yKCk7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29s
aWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJbWFnZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuaXNBbG1vc3RT
b2xpZENvbG9yKCk7Cit9CisgICAgCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMDhkNDhiZmQzZTFhNjZjOTE4
MTA2YjEyMGM0NzMyNzUyOTdmYjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApAQCAtMCwwICsxLDExNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24u
aCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEltYWdlRGVjb2RlcjsK
KworLy8gU3Vic2FtcGxpbmdMZXZlbC4gMCBpcyBubyBzdWJzYW1wbGluZywgMSBpcyBoYWxmIGRp
bWVuc2lvbnMgb24gZWFjaCBheGlzIGV0Yy4KK3VzaW5nIFN1YnNhbXBsaW5nTGV2ZWwgPSB1aW50
OF90OworCitlbnVtIDogU3Vic2FtcGxpbmdMZXZlbCB7CisgICAgTWluU3Vic2FtcGxpbmdMZXZl
bCA9IDAsCisgICAgTWF4U3Vic2FtcGxpbmdMZXZlbCA9IDMsCisgICAgRGVmYXVsdFN1YnNhbXBs
aW5nTGV2ZWwgPSBNaW5TdWJzYW1wbGluZ0xldmVsCit9OworCitjbGFzcyBJbWFnZUZyYW1lRGF0
YSB7CisgICAgZnJpZW5kIGNsYXNzIEltYWdlRGVjb2RlcjsKK3B1YmxpYzoKKyAgICBlbnVtIGNs
YXNzIENhY2hpbmcgeyBFbXB0eSwgTWV0YWRhdGEsIEltYWdlLCBNZXRhZGF0YUFuZEltYWdlIH07
CisgICAgZW51bSBjbGFzcyBEZWNvZGluZ1N0YXR1cyB7IEVtcHR5LCBQYXJ0aWFsLCBDb21wbGV0
ZSB9OworICAgIGVudW0gY2xhc3MgRGlzcG9zYWxNZXRob2QgeyBOb3RTcGVjaWZpZWQsIEtlZXAs
IE92ZXJ3cml0ZUJnY29sb3IsIE92ZXJ3cml0ZVByZXZpb3VzIH07CisKKyAgICBJbWFnZUZyYW1l
RGF0YSgpOworICAgIEltYWdlRnJhbWVEYXRhKE5hdGl2ZUltYWdlUHRyJiYpOworICAgIEltYWdl
RnJhbWVEYXRhKEltYWdlRGVjb2RlciYsIHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCA9
IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBDYWNoaW5nID0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJ
bWFnZSk7CisgICAgSW1hZ2VGcmFtZURhdGEoY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKSB7
IG9wZXJhdG9yPShvdGhlcik7IH0KKworICAgIH5JbWFnZUZyYW1lRGF0YSgpOworCisgICAgSW1h
Z2VGcmFtZURhdGEmIG9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpOworICAg
IAorICAgIHVuc2lnbmVkIGNsZWFyKENhY2hpbmcpOworCisgICAgdm9pZCBzZXREaXNwb3NhbE1l
dGhvZChEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0g
ZGlzcG9zYWxNZXRob2Q7IH0KKyAgICBEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KKworICAgIHZvaWQgc2V0U3RhdHVzKERl
Y29kaW5nU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorICAgIERlY29kaW5n
U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkVtcHR5OyB9
CisgICAgYm9vbCBpc1BhcnRpYWwoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1cyA9PSBEZWNvZGlu
Z1N0YXR1czo6UGFydGlhbDsgfQorICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZTsgfQorCisgICAgYm9vbCBpbml0
UGl4ZWxzKGNvbnN0IEludFNpemUmLCBib29sIHByZW11bHRpcGx5QWxwaGEpOworICAgIGJvb2wg
Y29weVBpeGVscyhjb25zdCBJbWFnZUZyYW1lRGF0YSYpOworICAgIHZvaWQgY2xlYXJQaXhlbHMo
KSB7IG1fcGl4ZWxzID0gbnVsbHB0cjsgfQorCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gaGFzUGl4ZWxzKCkgPyBwaXhlbHMoKS0+c2l6ZSgpIDogbV9zaXplOyB9CisgICAgdW5z
aWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc0ltYWdlKCkgPyBtX3NpemUuYXJl
YSgpICogc2l6ZW9mKFJHQkEzMikgOiAwOyB9CisgICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1w
bGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzYW1wbGluZ0xldmVsOyB9CisKKyAgICB2
b2lkIHNldE9yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmll
bnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9OworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRp
b24oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9CisKKyAgICB2b2lkIHNldER1cmF0
aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQorICAgIGZs
b2F0IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQorCisgICAgdm9pZCBz
ZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxwaGEgPSBoYXNBbHBoYTsgfQorICAg
IGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9CisKKyAgICBOYXRp
dmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAgICBCaXRtYXBQ
aXhlbHMqIHBpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkg
OiBudWxscHRyOyB9CisKKyAgICBib29sIGhhc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZTsgfQorICAgIGJvb2wgaGFzTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAhbV9zaXplLmlzRW1w
dHkoKTsgfQorICAgIGJvb2wgaGFzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gcGl4ZWxzKCk7IH0K
KworICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OworICAgIGJvb2wgaXNB
bG1vc3RTb2xpZENvbG9yKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjbGVhclN1Yklt
YWdlcygpOworCisgICAgRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZCB7IERpc3Bvc2Fs
TWV0aG9kOjpOb3RTcGVjaWZpZWQgfTsKKyAgICBEZWNvZGluZ1N0YXR1cyBtX3N0YXR1cyB7IERl
Y29kaW5nU3RhdHVzOjpFbXB0eSB9OworICAgIEludFNpemUgbV9zaXplOworICAgIE5hdGl2ZUlt
YWdlUHRyIG1faW1hZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9waXhl
bHM7CisKKyAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBEZWZhdWx0SW1hZ2VP
cmllbnRhdGlvbiB9OworICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsg
MCB9OworICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07CisgICAgYm9vbCBtX2hhc0FscGhhIHsg
dHJ1ZSB9OworfTsKKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmNwcAppbmRleCBkZGQ4YTU1YmEwOTA2YzU4NjZhMTkyY2Y4ZTQxNGVh
NzA3YjcyOGFjLi44MmY2ZTJkNmU0NTQzM2RhMWE3ZDU2YjM3MGRmYTYxYTRjNDE5MTM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBA
IC0yMjQsNiArMjI0LDExIEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFt
ZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2CiAgICAgcmV0dXJuIGlu
aXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBz
dWJzYW1wbGluZ0xldmVsKSA6IG51bGxwdHI7CiB9CiAKK0ltYWdlRnJhbWVEYXRhIEltYWdlU291
cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZl
bCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5nKQorewor
ICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gSW1hZ2VGcmFtZURhdGEoKm1fZGVjb2RlciwgaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIGNhY2hpbmcpIDogSW1hZ2VGcmFtZURhdGEoKTsKK30KKyAg
ICAKIHZvaWQgSW1hZ2VTb3VyY2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiB7CiAgICAg
aWYgKG1fYWxsb3dTdWJzYW1wbGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDYwMzU3MzliN2U4YjA5NmRjOGRmZTljNTMwYTQyYzZm
MjkxYmRhMDAuLmE0MGM3Y2U5MzA3Y2RhZGYwNzlhYjcwMWE4Mjc5OWI2OTA1MjlkNDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtMjcs
NiArMjcsNyBAQAogI2lmbmRlZiBJbWFnZVNvdXJjZV9oCiAjZGVmaW5lIEltYWdlU291cmNlX2gK
IAorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlv
bi5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIK
QEAgLTYzLDkgKzY0LDYgQEAgY29uc3QgaW50IGNBbmltYXRpb25Mb29wT25jZSA9IDA7CiBjb25z
dCBpbnQgY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSA9IC0xOwogY29uc3QgaW50IGNBbmltYXRpb25O
b25lID0gLTI7CiAKLS8vIFN1YnNhbXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEg
aXMgaGFsZiBkaW1lbnNpb25zIG9uIGVhY2ggYXhpcyBldGMuCi10eXBlZGVmIHNob3J0IFN1YnNh
bXBsaW5nTGV2ZWw7Ci0KIGNsYXNzIEltYWdlU291cmNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbWFnZVNvdXJjZSk7CiAgICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwpAQCAtMTMy
LDE4ICsxMzAsMTkgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09mRnJhbWVB
dEluZGV4KHNpemVfdCkgY29uc3Q7CiAgICAgCiAgICAgLy8gU2l6ZSBvZiBvcHRpb25hbGx5IHN1
YnNhbXBsZWQgZnJhbWUuCi0gICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vi
c2FtcGxpbmdMZXZlbCA9IDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSA9IERvTm90UmVz
cGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRl
eChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCwgUmVz
cGVjdEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikg
Y29uc3Q7CiAgICAgCiAgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRl
Y29kZWQgZnJhbWUuIElmIHRoZSBmcmFtZSBpcyBub3QgeWV0CiAgICAgLy8gZGVjb2RlZCB0aGVu
IHJldHVybiAwLgotICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCwgU3Vic2Ft
cGxpbmdMZXZlbCA9IDApIGNvbnN0OworICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNp
emVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsKSBjb25zdDsK
ICAgICAKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpOwogICAgIEltYWdl
T3JpZW50YXRpb24gb3JpZW50YXRpb25BdEluZGV4KHNpemVfdCkgY29uc3Q7IC8vIEVYSUYgaW1h
Z2Ugb3JpZW50YXRpb24KICAgICAKICAgICAvLyBDYWxsZXJzIHNob3VsZCBub3QgY2FsbCB0aGlz
IGFmdGVyIGNhbGxpbmcgY2xlYXIoKSB3aXRoIGEgaGlnaGVyIGluZGV4OwogICAgIC8vIHNlZSBj
b21tZW50cyBvbiBjbGVhcigpIGFib3ZlLgotICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDApOworICAgIE5hdGl2ZUlt
YWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9
IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsKTsKKyAgICBJbWFnZUZyYW1lRGF0YSBjcmVhdGVGcmFt
ZURhdGFBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGlu
Z0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5n
OjpNZXRhZGF0YUFuZEltYWdlKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckZyYW1l
QnVmZmVyQ2FjaGUoc2l6ZV90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjdhZWE0ODlmM2ViMmE4Mjg3NzFjMjEw
M2U4ZDRkMGJlMTdiZTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2lu
Y2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q29sb3I7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgR3JhcGhpY3ND
b250ZXh0OworCitjbGFzcyBQbGF0Zm9ybUltYWdlIHsKK3B1YmxpYzoKKyAgICBQbGF0Zm9ybUlt
YWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKKyAgICAgICAgOiBtX2ltYWdlKGltYWdl
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzTmlsKCkgY29uc3QgeyByZXR1cm4gIW1faW1h
Z2U7IH0KKyAgICB2b2lkIGNsZWFyU3ViSW1hZ2VzKCk7CisKKyAgICBJbnRTaXplIHNpemUoKSBj
b25zdDsKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxT
b2xpZENvbG9yKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsK
KyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJikgY29uc3Q7
CisKKyAgICBzdGF0aWMgZmxvYXQgc3Vic2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpOworCitw
cml2YXRlOgorI2lmIFVTRShDRykKKyAgICBDR0ltYWdlUmVmIGNnSW1hZ2VSZWYoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS5nZXQoKSA6IG51bGxwdHI7IH0KKyNlbmRpZgorICAg
IE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVN0cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMu
bW0KaW5kZXggZjRjMTQ1N2JiYjI1NTc1NGYwMGEwNjI1ZWU4M2UwNGRhN2M2ZWZjZi4uZDUyMGY1
ZDU4NWFjNjBkYmFlZTI1NWUxYjgzYzI0ZGM2ODcyMTBhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQy5tbQpAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSgpCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1h
Z2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICAgICAgICAgIG1fcGF1c2VkSW1h
Z2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIW1fcGF1c2VkSW1hZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgbV9kaXNwbGF5TW9k
ZSA9IFBhaW50SXRCbGFjazsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNh
aXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcElt
YWdlQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzcyMmJlYzUzYWI4
YTA4YThkYTg1MjhiOWUwZDdjNGQwY2Q0MTM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLQotI2lmIFVTRShDQUlSTykKLQot
I2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNp
bmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBOYXRp
dmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYg
aW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZVNpemUoaW1hZ2UuZ2V0KCkpOwotfQot
Ci1ib29sIGhhc0FscGhhKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsK
LSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChpbWFnZS5nZXQoKSkgIT0gQ0FJ
Uk9fQ09OVEVOVF9DT0xPUjsKLX0KLQotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwot
ICAgIAotICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSkgIT0gSW50U2l6ZSgxLCAxKSkK
LSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlw
ZShpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1
cm4gQ29sb3IoKTsKLQotICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0cjxS
R0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAg
cmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Ci19Ci0KLX0KLQotdm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsCi0g
ICAgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2Ny
aXB0aW9uKQotewotICAgIGlmICghZHN0LndpZHRoKCkgfHwgIWRzdC5oZWlnaHQoKSB8fCAhc3Jj
LndpZHRoKCkgfHwgIXNyYy5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhcnRB
bmltYXRpb24oKTsKLQotICAgIGF1dG8gc3VyZmFjZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3Vy
cmVudEZyYW1lKTsKLSAgICBpZiAoIXN1cmZhY2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdv
bid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0KLSAgICBDb2xvciBjb2xv
ciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdCwgY29sb3IsIG9wKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRleHQuc2F2ZSgpOwotCi0gICAgLy8gU2V0
IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCi0gICAgaWYgKG9wID09IENvbXBvc2l0ZVNvdXJj
ZU92ZXIgJiYgYmxlbmRNb2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAhZnJhbWVIYXNBbHBoYUF0
SW5kZXgobV9jdXJyZW50RnJhbWUpKQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJf
RE9XTl9TQU1QTElORykKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1cmZhY2VTaXpl
KHN1cmZhY2UuZ2V0KCkpOwotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1c3RT
b3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyYywgc2NhbGVkU2l6ZSk7Ci0jZWxzZQotICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qoc3JjKTsKLSNlbmRpZgotCi0gICAgSW1hZ2VPcmllbnRh
dGlvbiBmcmFtZU9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7Ci0g
ICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdElt
YWdlT3JpZW50YXRpb24pCi0gICAgICAgIGZyYW1lT3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0
aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBGbG9hdFJlY3QgZHN0UmVjdCA9IGRz
dDsKLQotICAgIGlmIChmcmFtZU9yaWVudGF0aW9uICE9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9u
KSB7Ci0gICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJl
IGF0ICgwLCAwKS4KLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC54KCksIGRzdFJl
Y3QueSgpKTsKLSAgICAgICAgZHN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwotICAg
ICAgICBjb250ZXh0LmNvbmNhdENUTShmcmFtZU9yaWVudGF0aW9uLnRyYW5zZm9ybUZyb21EZWZh
dWx0KGRzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChmcmFtZU9yaWVudGF0aW9uLnVzZXNX
aWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0YW5n
bGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0
aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5l
ZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUu
Ci0gICAgICAgICAgICBkc3RSZWN0ID0gRmxvYXRSZWN0KGRzdFJlY3QueCgpLCBkc3RSZWN0Lnko
KSwgZHN0UmVjdC5oZWlnaHQoKSwgZHN0UmVjdC53aWR0aCgpKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KHN1
cmZhY2UuZ2V0KCksIGRzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7Ci0KLSAgICBj
b250ZXh0LnJlc3RvcmUoKTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGlt
YWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFy
KGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAg
bV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIG1f
aW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJ
Uk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGFkYWVjMjcwZTMxYjA1
NGFmYzVmNjZkNDgyODhhZWJmMDYxZTNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApAQCAtMCww
ICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYg
VVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7Cit9CisKK0lu
dFNpemUgUGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkg
PyBJbnRTaXplKCkgOiBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2UuZ2V0KCkpOworfQorCitib29s
IFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSB8
fCBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1faW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRF
TlRfQ09MT1I7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xv
cigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgpICE9IEludFNpemUoMSwgMSkp
CisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5
cGUobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQorICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKKworICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0X3B0
cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1faW1hZ2UuZ2V0KCkpKTsK
KyAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKK30KKworYm9v
bCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmKQoreworICAg
IHJldHVybiAxOworfQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1v
ZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIGNv
bnRleHQuc2F2ZSgpOworICAgIAorICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9u
LgorICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIG1vZGUgPT0gQmxlbmRNb2Rl
Tm9ybWFsICYmICFoYXNBbHBoYSgpKQorICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG9wLCBtb2RlKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKElNQUdFX0RFQ09E
RVJfRE9XTl9TQU1QTElORykKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1cmZhY2VT
aXplKG1faW1hZ2UuZ2V0KCkpOworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBhZGp1
c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyY1JlY3QsIHNjYWxlZFNpemUpOworI2Vsc2UK
KyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyY1JlY3QpOworI2VuZGlmCisgICAgICAg
IAorICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisgICAgICAgIAor
ICAgIGlmIChvcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgeworICAgICAg
ICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCku
CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpKTsK
KyAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOworICAg
ICAgICBjb250ZXh0LmNvbmNhdENUTShvcmllbnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChh
ZGp1c3RlZERlc3RSZWN0LnNpemUoKSkpOworICAgICAgICBpZiAob3JpZW50YXRpb24udXNlc1dp
ZHRoQXNIZWlnaHQoKSkgeworICAgICAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3Rhbmds
ZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRo
ZSBvcmllbnRhdGlvbiBvZgorICAgICAgICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVl
ZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4K
KyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShhZGp1c3RlZERlc3RSZWN0LnNp
emUoKS50cmFuc3Bvc2VkU2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KG1faW1hZ2UuZ2V0KCksIGFk
anVzdGVkRGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7CisKKyAgICBjb250ZXh0
LnJlc3RvcmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9C
aXRtYXBJbWFnZUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNjODFhMTcw
YmU3OWFlNmJlNmNhY2RjOTlmNGMzOThjYWFmNDI2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9CaXRtYXBJbWFnZUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotCi0jaWYgVVNFKENH
KQotCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJz
aW9uLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJTdWJp
bWFnZUNhY2hlV2l0aFRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0jaWYg
VVNFKEFQUEtJVCkKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vy
dmljZXMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVk
ZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50
U2l6ZSBzaXplKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNT
RVJUKGltYWdlKTsKLSAgICByZXR1cm4gSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0
KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEo
Y29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JikKLXsKLSAgICAvLyBGSVhNRTogQW5zd2VyIGNv
cnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFu
bm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLUNvbG9yIHNpbmdsZVBpeGVsU29saWRD
b2xvcihjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQotewotICAgIEFTU0VSVChp
bWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdlOjpzaXplKGltYWdlKSAhPSBJbnRTaXpl
KDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBjaGFy
IHBpeGVsWzRdOyAvLyBSR0JBCi0gICAgYXV0byBiaXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIHNSR0JDb2xv
clNwYWNlUmVmKCksCi0gICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtD
R0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0KLSAgICBpZiAoIWJpdG1hcENvbnRleHQpCi0gICAg
ICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRt
YXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICBDR0NvbnRleHREcmF3SW1h
Z2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwgaW1hZ2UuZ2V0
KCkpOwotICAgIAotICAgIGlmICghcGl4ZWxbM10pCi0gICAgICAgIHJldHVybiBDb2xvcigwLCAw
LCAwLCAwKTsKLQotICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBw
aXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhl
bFszXSk7Ci19Ci0KLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0
YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBm
YWxzZTsKLQotICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7Ci0KLSAgICBpZiAobV9pbWFnZSkg
ewotI2lmIENBQ0hFX1NVQklNQUdFUwotICAgICAgICBzdWJpbWFnZUNhY2hlKCkuY2xlYXJJbWFn
ZShtX2ltYWdlLmdldCgpKTsKLSNlbmRpZgotICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQ0dJbWFn
ZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCi17Ci0gICAgcmV0dXJuIGZyYW1lSW1h
Z2VBdEluZGV4KDApLmdldCgpOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRGaXJz
dENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBzaXplX3QgY291
bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdl
dCgpOwotICAgICAgICBpZiAoY2dJbWFnZSAmJiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0lt
YWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKSkgPT0gc2l6ZSkKLSAgICAgICAgICAgIHJl
dHVybiBjZ0ltYWdlOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IENH
SW1hZ2VSZWYgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQotICAgIHJldHVybiBnZXRD
R0ltYWdlUmVmKCk7Ci19Ci0KLVJldGFpblB0cjxDRkFycmF5UmVmPiBCaXRtYXBJbWFnZTo6Z2V0
Q0dJbWFnZUFycmF5KCkKLXsKLSAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAg
aWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgQ0ZNdXRhYmxl
QXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShOVUxMLCBjb3VudCwgJmtDRlR5
cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIGlmIChDR0ltYWdlUmVmIGN1cnJGcmFtZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KGkpLmdldCgpKQotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LCBjdXJyRnJh
bWUpOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihhcnJheSk7Ci19Ci0KLXZvaWQgQml0bWFw
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVz
Y3JpcHRpb24pCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXJ0QW5pbWF0aW9uKERvTm90
Q2F0Y2hVcCk7Ci0jZWxzZQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0jZW5kaWYKLQotICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBp
bWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCi0gICAgaWYgKHdrQ0dDb250ZXh0
SXNQREZDb250ZXh0KGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKQotICAgICAgICBpbWFnZSA9IGNv
cHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlB
ZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShjdHh0LnBsYXRmb3JtQ29u
dGV4dCgpKSk7Ci0gICAgICAgIGZsb2F0IHN1YnNhbXBsaW5nU2NhbGUgPSBzdGQ6Om1pbjxmbG9h
dD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNy
Y1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBz
cmNSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAgICAgaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleCht
X2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2FsZSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFn
ZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBDb2xvciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xv
cigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENv
bG9yKGN0eHQsIGRlc3RSZWN0LCBjb2xvciwgY29tcG9zaXRlT3ApOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gU3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2Ug
dGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgotICAgIEludFNpemUgaW1hZ2VTaXplKENHSW1h
Z2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKTsK
LSAgICAKLSAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJz
YW1wbGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFn
ZS4KLSAgICBGbG9hdFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgaWYgKGltYWdl
U2l6ZSAhPSBtX3NpemUpIHsKLSAgICAgICAgRmxvYXRSZWN0IG9yaWdpbmFsSW1hZ2VCb3VuZHMo
RmxvYXRQb2ludCgpLCBtX3NpemUpOwotICAgICAgICBGbG9hdFJlY3Qgc3Vic2FtcGxlZEltYWdl
Qm91bmRzKEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKTsKLSAgICAgICAgc2NhbGVkU3JjUmVjdCA9
IG1hcFJlY3Qoc3JjUmVjdCwgb3JpZ2luYWxJbWFnZUJvdW5kcywgc3Vic2FtcGxlZEltYWdlQm91
bmRzKTsKLSAgICB9Ci0gICAgCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAg
ICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbikKLSAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJ
bmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBjdHh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc2NhbGVkU3JjUmVjdCwgY29tcG9zaXRlT3AsIGJsZW5kTW9k
ZSwgb3JpZW50YXRpb24pOwotCi0gICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1h
Z2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkK
LXsKLSAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4
XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwKTsKLQotICAgIGlmICghbV9m
cmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVz
W2luZGV4XS5tX2ltYWdlOwotCi0gICAgcmV0dXJuIG1fc291cmNlLmNyZWF0ZUZyYW1lSW1hZ2VB
dEluZGV4KGluZGV4KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKaW5kZXggYjQyOGQ1
MGQ5NGJmOTI0MjgwMzI4N2QyZWVjMTZiZDY5YzUyOGQ5Mi4uM2RhYTEzOWFiN2VhNWI0MjE1Nzc4
ODM1ZDM1M2Q4YWRiNWYwYzc1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC03Miw3ICs3Miw3IEBAIENHUGF0dGVyblJlZiBQ
YXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2Vy
U3BhY2VUcmFuCiAgICAgLy8gSWYgd2UncmUgcmVwZWF0aW5nIGluIGJvdGggZGlyZWN0aW9ucywg
d2UgY2FuIHVzZSBpbWFnZS1iYWNrZWQgcGF0dGVybnMKICAgICAvLyBpbnN0ZWFkIG9mIGN1c3Rv
bSBwYXR0ZXJucywgYW5kIGF2b2lkIHRpbGluZy1lZGdlIHBpeGVsIGNyYWNrcy4KICAgICBpZiAo
bV9yZXBlYXRYICYmIG1fcmVwZWF0WSkKLSAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRl
V2l0aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCksIHBhdHRl
cm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZyk7CisgICAgICAgIHJl
dHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSh0aWxlSW1hZ2UoKS0+
bmF0aXZlSW1hZ2UoKS5nZXQoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGlsaW5nQ29u
c3RhbnRTcGFjaW5nKTsKIAogICAgIC8vIElmIEZMVF9NQVggc2hvdWxkIGFsc28gYmUgdXNlZCBm
b3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMgcmVuZGVyZWQuIFVzaW5nIGZyYWN0aW9ucyBv
ZiBGTFRfTUFYIGFsc28KICAgICAvLyByZXN1bHQgaW4gbm90aGluZyBiZWluZyByZW5kZXJlZC4K
QEAgLTgzLDcgKzgzLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICBDR0Zsb2F0IHlT
dGVwID0gbV9yZXBlYXRZID8gdGlsZVJlY3QuaGVpZ2h0KCkgOiAoMSA8PCAyMik7CiAKICAgICAv
LyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhlIENHSW1hZ2VSZWYgd2hlbiBpdCdzIGRvbmUg
cmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKLSAgICBDR0ltYWdlUmVmIHBsYXRm
b3JtSW1hZ2UgPSBDR0ltYWdlUmV0YWluKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCkpOwor
ICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgp
LmxlYWtSZWYoKTsKIAogICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0ZXJuQ2FsbGJh
Y2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sgfTsKICAg
ICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRmb3JtSW1hZ2UsIHRpbGVSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCB4U3RlcCwgeVN0ZXAsIGtDR1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcs
IFRSVUUsICZwYXR0ZXJuQ2FsbGJhY2tzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmYjJk
ZTBlYTEyZGEyMTRmMTA0NmMzOTYyZThlYWI1M2M2NDQxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCkBA
IC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKwor
I2lmIFVTRShDRykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29yZUdyYXBoaWNz
U1BJLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkludFNpemUu
aCIKKyNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCisKKyNpZiBQTEFURk9STShX
SU4pCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3ZvaWQgUGxhdGZvcm1J
bWFnZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworI2lmIENBQ0hFX1NVQklNQUdFUworICAgIGlmICgh
aXNOaWwoKSkKKyAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UoY2dJbWFnZVJlZigp
KTsKKyNlbmRpZgorfQorCitJbnRTaXplIFBsYXRmb3JtSW1hZ2U6OnNpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgo
Y2dJbWFnZVJlZigpKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlUmVmKCkpKTsKK30KKworYm9v
bCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEFuc3dl
ciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEg
Y2hhbm5uZWw/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNp
bmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgp
ICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAorICAgIHVu
c2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKKyAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVs
KSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKKyAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKKyAgICAKKyAgICBpZiAoIWJpdG1h
cENvbnRleHQpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAorICAgIENHQ29udGV4dFNl
dEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBD
R0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAx
LCAxKSwgY2dJbWFnZVJlZigpKTsKKyAgICAKKyAgICBpZiAoIXBpeGVsWzNdKQorICAgICAgICBy
ZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgCisgICAgcmV0dXJuIENvbG9yKHBpeGVsWzBd
ICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICog
MjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKK30KKyAgICAKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6
aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBDR0ltYWdlUmVmIGltYWdlID0gY2dJ
bWFnZVJlZigpOworICAgIEFTU0VSVChDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkg
PT0gOCk7CisgICAgCisgICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5mbyA9IENHSW1hZ2VHZXRCaXRt
YXBJbmZvKGltYWdlKTsKKyAgICBpZiAoIShpbWFnZUluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXIz
MkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhhSW5mb01hc2spICE9IGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKKyAgICAgICAgLy8gRklYTUU6IENvbnNpZGVy
IGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1hdHMuCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IHNpemVfdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7CisgICAgc2l6ZV90IGhlaWdo
dCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENH
SW1hZ2VHZXRCeXRlc1BlclJvdyhpbWFnZSk7CisgICAgCisgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERh
dGFQcm92aWRlcihpbWFnZSkpKTsKKyAgICBjb25zdCBVSW50OCogZGF0YSA9IENGRGF0YUdldEJ5
dGVQdHIocHJvdmlkZXIuZ2V0KCkpOworICAgIAorICAgIC8vIE92ZXJsYXkgYSBncmlkIG9mIHNh
bXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24gb2YgdGhlIGltYWdlLgor
ICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2Ug
aW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKKyAgICAvLyBhbmQgaXRzIHN1cnJv
dW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCisgICAgY29uc3QgdW5zaWduZWQg
c2FtcGxlUm93cyA9IDc7CisgICAgY29uc3QgdW5zaWduZWQgc2FtcGxlQ29scyA9IDc7CisgICAg
Ly8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1wbGVzLCBhbmQgYWNjb21t
b2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCisgICAgaWYgKHdpZHRoIDwgc2FtcGxlQ29s
cyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGxhc3Qgcm93L2NvbHVtbiBsYW5kIG9uIHRoZSBpbWFnZSBw
ZXJpbWV0ZXIuCisgICAgY29uc3QgZmxvYXQgc3RyaWRlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9h
dD4od2lkdGggLSAxKSAvIChzYW1wbGVDb2xzIC0gMSk7CisgICAgY29uc3QgZmxvYXQgc3RyaWRl
SGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCAtIDEpIC8gKHNhbXBsZVJvd3MgLSAx
KTsKKyAgICBmbG9hdCBzYW1wbGVzW3NhbXBsZVJvd3NdW3NhbXBsZUNvbHNdOworICAgIAorICAg
IC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KKyAgICBmbG9hdCB5
ID0gMDsKKyAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7CisgICAgICAgIGZsb2F0IHggPSAwOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7CisgICAgICAgICAg
ICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAqIDQ7
CisgICAgICAgICAgICAvLyBSIEcgQiBBCisgICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0gKDAu
MjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoocDAr
MykgLyAyNTU7CisgICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOworICAgICAgICB9CisgICAg
ICAgIHkgKz0gc3RyaWRlSGVpZ2h0OworICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19jYXN0
PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKKyAgICB9CisgICAgCisgICAgLy8gRGV0ZXJt
aW5lIHRoZSBpbWFnZSBzY29yZS4KKyAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikgeworICAgICAgICAgICAg
ZmxvYXQgZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0gKyBzYW1w
bGVzW2ldW2ogLSAxXSArIHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1bal07Cisg
ICAgICAgICAgICBhY2N1bVNjb3JlICs9IGRpZmYgKiBkaWZmOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIC8vIFRoZSBzY29yZSBmb3IgYSBnaXZlbiBzYW1wbGUgY2FuIGJlIHdpdGhpbiB0
aGUgcmFuZ2Ugb2YgMCBhbmQgMjU1XjIuCisgICAgcmV0dXJuIGFjY3VtU2NvcmUgPCAyNTAwICog
KHNhbXBsZVJvd3MgLSAyKSAqIChzYW1wbGVDb2xzIC0gMik7Cit9CisKK2Zsb2F0IFBsYXRmb3Jt
SW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpCit7CisgICAgLy8g
TmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRz
LgorICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgCisgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVz
dGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29u
dGV4dEdldENUTShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgcmV0dXJuIHN0ZDo6
bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLndp
ZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLmhl
aWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBQbGF0Zm9ybUltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVu
dGF0aW9uKSBjb25zdAoreworICAgIC8vIFN1YnNhbXBsaW5nIG1heSBoYXZlIGdpdmVuIHVzIGFu
IGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KKyAgICBJbnRTaXplIHN1YnNhbXBs
ZWRJbWFnZVNpemUgPSBzaXplKCk7CisgICAgCisgICAgLy8gc3JjUmVjdCBpcyBpbiB0aGUgY29v
cmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28gd2UgaGF2ZSB0byBtYXAgaXQg
dG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9
IHNyY1JlY3Q7CisgICAgaWYgKHN1YnNhbXBsZWRJbWFnZVNpemUgIT0gc3JjU2l6ZSkKKyAgICAg
ICAgYWRqdXN0ZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBGbG9hdFJlY3QoeyB9LCBzcmNT
aXplKSwgRmxvYXRSZWN0KHsgfSwgc3Vic2FtcGxlZEltYWdlU2l6ZSkpOworICAgIAorICAgIGNv
bnRleHQuZHJhd05hdGl2ZUltYWdlKG1faW1hZ2UsIHN1YnNhbXBsZWRJbWFnZVNpemUsIGRlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBtb2RlLCBvcmllbnRhdGlvbik7Cit9CisgICAgCit9
CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYS5tbQppbmRleCA4OTcyMGQxNzM2NWRhN2U4YmE4NDY5ZDUyOTQ1NDhkNTE4NDdhN2ZlLi40
NDc2ZmM1Zjg3YzM0OTg4ZjZkOWFkNTVlZWJkOGQxYjliYjAyMmU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1Rl
eHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KQEAgLTEyOSw3ICsxMjksNyBAQCBUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkNvY29hOjp+VGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYSgpCiB2
b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6OnVwZGF0ZSgpCiB7CiAgICAgaWYgKGF1
dG8gcmVwcmVzZW50YXRpb24gPSBtX2NsaWVudC5jcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkltYWdlKCkpCi0gICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzOihpZClyZXByZXNl
bnRhdGlvbi0+Z2V0Q0dJbWFnZVJlZigpXTsKKyAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Q29u
dGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5uYXRpdmVJbWFnZSgpLmdldCgpXTsKIH0KIAogdm9p
ZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjpzZXRDb250ZW50U2NhbGUoZmxvYXQgc2Nh
bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1h
Z2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMu
bW0KaW5kZXggMDFlYjZkZDMwMDQzYTIyNTI5MTc2ZmQ5MTIxMTdkYzU3NzZjMTdiYS4uZGMxYzdj
NzA5NWQ5NDRjNGM2MmYxZmUwOTM1NzAyYTEzYzdjN2E0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQpAQCAtODUsMzEgKzg1LDIyIEBA
IENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkKICAgICBpZiAo
bV90aWZmUmVwKQogICAgICAgICByZXR1cm4gbV90aWZmUmVwLmdldCgpOwogCi0gICAgdW5zaWdu
ZWQgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gdGhp
cy0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CiAKLSAgICAvLyBJZiBudW1GcmFtZXMgaXMgemVybywg
d2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNuJ3QgaGF2ZSB2YWxpZCBkYXRhCisg
ICAgLy8gSWYgZnJhbWVzSW1hZ2VzLnNpemUoKSBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWlu
IHRoaXMgaW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKICAgICAvLyBFdmVuIHRob3VnaCB0
aGUgY2FsbCB0byBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YSB3aWxsIGZhaWwgYW5k
IHdlJ2xsIGhhbmRsZSBpdCBncmFjZWZ1bGx5LAogICAgIC8vIGluIGNlcnRhaW4gY2lyY3Vtc3Rh
bmNlcyB0aGF0IGNhbGwgd2lsbCBzcGFtIHRoZSBjb25zb2xlIHdpdGggYW4gZXJyb3IgbWVzc2Fn
ZQotICAgIGlmICghbnVtRnJhbWVzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFZlY3RvcjxD
R0ltYWdlUmVmPiBpbWFnZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZyYW1l
czsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRl
eChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UpCi0gICAgICAgICAgICBpbWFnZXMuYXBw
ZW5kKGNnSW1hZ2UpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bVZhbGlkRnJhbWVzID0gaW1h
Z2VzLnNpemUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGRhdGEgPSBhZG9w
dENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotICAgIFJldGFpblB0cjxDR0ltYWdlRGVz
dGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVh
dGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbnVtVmFsaWRGcmFtZXMsIDApKTsK
KyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbiA9IGFkb3B0
Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5nZXQoKSwga1VUVHlwZVRJ
RkYsIG5hdGl2ZUltYWdlcy5zaXplKCksIDApKTsKIAogICAgIGlmICghZGVzdGluYXRpb24pCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1WYWxpZEZyYW1lczsgKytpKQotICAgICAgICBDR0ltYWdlRGVz
dGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2VzW2ldLCAwKTsKKyAgICBm
b3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAgICAgIENHSW1hZ2VEZXN0
aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBuYXRpdmVJbWFnZS5nZXQoKSwgMCk7
CiAKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuY3BwCmluZGV4IDIxNzUzYmQwNzhhMWM1NWMzMjcxOWMxNDg0NmYwZjZiOTk3NWY4
ZmQuLjFmZGJhYjNhYzg2YzM5NzYwMWEzNzUyN2I3ZTRjZDEzNjkyMzdkMjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcApAQCAtMTI4LDExICsxMjgsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBJ
bWFnZURlY29kZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYQogfQogCiBJ
bWFnZUZyYW1lOjpJbWFnZUZyYW1lKCkKLSAgICA6IG1faGFzQWxwaGEoZmFsc2UpCi0gICAgLCBt
X3N0YXR1cyhGcmFtZUVtcHR5KQotICAgICwgbV9kdXJhdGlvbigwKQotICAgICwgbV9kaXNwb3Nh
bE1ldGhvZChEaXNwb3NlTm90U3BlY2lmaWVkKQotICAgICwgbV9wcmVtdWx0aXBseUFscGhhKHRy
dWUpCiB7CiB9IAogCkBAIC0xNDEsOTMgKzEzNiwzMSBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1l
OjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgaWYgKHRoaXMgPT0gJm90
aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7
Ci0gICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7Cisg
ICAgY29weVBpeGVscyhvdGhlcik7CisgICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7
CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5k
dXJhdGlvbigpKTsKICAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgp
KTsKLSAgICBzZXRQcmVtdWx0aXBseUFscGhhKG90aGVyLnByZW11bHRpcGx5QWxwaGEoKSk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi12b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkK
LXsKLSAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgIG1fYnl0ZXMgPSAwOwotICAgIG1f
c3RhdHVzID0gRnJhbWVFbXB0eTsKLSAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVt
YmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCi0gICAgLy8gdG8g
ZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJhbWVC
dWZmZXIoKSBhbmQKLSAgICAvLyBmcmFtZUNvbXBsZXRlKCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVh
ZCBvdGhlciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZQotICAgIC8vIGxhdGVyLgotfQotCi12
b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKLXsKLSAgICBtZW1zZXQobV9ieXRl
cywgMCwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRh
KSk7Ci0gICAgbV9oYXNBbHBoYSA9IHRydWU7Ci19Ci0KLXZvaWQgSW1hZ2VGcmFtZTo6emVyb0Zp
bGxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlQoSW50UmVjdChJ
bnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpKTsKLQotICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSBy
ZWN0LndpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICBQaXhlbERhdGEqIHN0YXJ0ID0g
bV9ieXRlcyArIChyZWN0LnkoKSAqIHdpZHRoKCkpICsgcmVjdC54KCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKLSAgICAgICAgbWVtc2V0KHN0YXJ0LCAw
LCByZWN0V2lkdGhJbkJ5dGVzKTsKLSAgICAgICAgc3RhcnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0K
LSAgICBzZXRIYXNBbHBoYSh0cnVlKTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFw
RGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKK2Jvb2wgSW1hZ2VGcmFtZTo6Y29weVBpeGVs
cyhjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKIHsKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tp
bmdTdG9yZTsKLSAgICBtX2J5dGVzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwotICAgIG1fc2l6
ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0
aCwgaW50IG5ld0hlaWdodCkKLXsKLSAgICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgpKTsK
LSAgICBzaXplX3QgYmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVpZ2h0OwotICAg
IGlmICghbV9iYWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdTdG9yZVNpemUp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNraW5nU3RvcmUucmVzaXplKGJhY2tp
bmdTdG9yZVNpemUpOwotICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAg
bV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLQotICAgIHplcm9GaWxsUGl4
ZWxEYXRhKCk7CisgICAgaWYgKG90aGVyLm1fcGl4ZWxzKQorICAgICAgICBtX3BpeGVscyA9IEJp
dG1hcFBpeGVsczo6Y3JlYXRlKCpvdGhlci5tX3BpeGVscy5nZXQoKSk7CisgICAgZWxzZQorICAg
ICAgICBtX3BpeGVscyA9IG51bGxwdHI7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW1h
Z2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdAotewotICAgIHJldHVybiBtX2hhc0FscGhhOwotfQot
Ci12b2lkIEltYWdlRnJhbWU6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEpCi17Ci0gICAgbV9oYXNB
bHBoYSA9IGFscGhhOwotfQotCi12b2lkIEltYWdlRnJhbWU6OnNldENvbG9yUHJvZmlsZShjb25z
dCBDb2xvclByb2ZpbGUmIGNvbG9yUHJvZmlsZSkKLXsKLSAgICBtX2NvbG9yUHJvZmlsZSA9IGNv
bG9yUHJvZmlsZTsKLX0KLQotdm9pZCBJbWFnZUZyYW1lOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMg
c3RhdHVzKQorYm9vbCBJbWFnZUZyYW1lOjppbml0UGl4ZWxzKGNvbnN0IEludFNpemUmIHNpemUs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKLSAgICBtX3N0YXR1cyA9IHN0YXR1czsKKyAgICBB
U1NFUlQoIW1fcGl4ZWxzKTsKKyAgICBtX3BpeGVscyA9IEJpdG1hcFBpeGVsczo6Y3JlYXRlKHNp
emUsIHByZW11bHRpcGx5QWxwaGEpOworICAgIHJldHVybiBtX3BpeGVscyAhPSBudWxscHRyOwog
fQogCiBuYW1lc3BhY2UgewpAQCAtMjc0LDE0ICsyMDcsMTQgQEAgdGVtcGxhdGUgPE1hdGNoVHlw
ZSB0eXBlPiBpbnQgZ2V0U2NhbGVkVmFsdWUoY29uc3QgVmVjdG9yPGludD4mIHNjYWxlZFZhbHVl
cywgaW4KIGJvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBp
bmRleCkKIHsKICAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBmcmFtZUJ1ZmZlckF0SW5kZXgoaW5k
ZXgpOwotICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1l
OjpGcmFtZUNvbXBsZXRlOworICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5pc0NvbXBsZXRl
KCk7CiB9CiAKIGJvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPD0gaW5k
ZXgpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5k
ZXhdLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCisgICAgaWYgKG1fZnJh
bWVCdWZmZXJDYWNoZVtpbmRleF0uaXNDb21wbGV0ZSgpKQogICAgICAgICByZXR1cm4gbV9mcmFt
ZUJ1ZmZlckNhY2hlW2luZGV4XS5oYXNBbHBoYSgpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MjkxLDEzICsyMjQsMTMgQEAgdW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkg
PD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGRpbWVu
c2lvbiBvZiB0aGUgcmVxdWVzdGVkIGZyYW1lLgotICAgIHJldHVybiBtX3NpemUuYXJlYSgpICog
c2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkg
KiBzaXplb2YoUkdCQTMyKTsKIH0KIAogZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9u
QXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gZnJhbWVC
dWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygp
ID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8vIE1hbnkgYW5ub3lpbmcg
YWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2ts
eSBhcyBwb3NzaWJsZS4KQEAgLTMxNywxMiArMjUwLDE4IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdl
RGVjb2Rlcjo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGlu
Z0xlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0g
ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0
YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAgaWYgKCFidWZmZXIgfHwgYnVm
ZmVyLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gUmV0dXJu
IHRoZSBidWZmZXIgY29udGVudHMgYXMgYSBuYXRpdmUgaW1hZ2UuIEZvciBzb21lIHBvcnRzLCB0
aGUgZGF0YQogICAgIC8vIGlzIGFscmVhZHkgaW4gYSBuYXRpdmUgY29udGFpbmVyLCBhbmQgdGhp
cyBqdXN0IGluY3JlbWVudHMgaXRzIHJlZmNvdW50LgotICAgIHJldHVybiBidWZmZXItPmFzTmV3
TmF0aXZlSW1hZ2UoKTsKKyAgICBpZiAoYnVmZmVyLT5oYXNJbWFnZSgpKQorICAgICAgICByZXR1
cm4gYnVmZmVyLT5pbWFnZSgpOworCisgICAgaWYgKGJ1ZmZlci0+aGFzUGl4ZWxzKCkpCisgICAg
ICAgIHJldHVybiBidWZmZXItPnBpeGVscygpLT5pbWFnZSgpOworCisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIHZvaWQgSW1hZ2VEZWNvZGVyOjpwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3Nhcnko
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaAppbmRleCAyZjhlZWUxNzgxZDE2MmQ4NmM0OWZlMWRhYzcyYTJlN2U0MGE1ZDZk
Li5hZGQzOWZlODZmNTA4MjNlZjJjYjI0OTk2OGM1MWI4NTg3OTdhYmY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApA
QCAtMjgsOCArMjgsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU2NyZWVuLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KQEAgLTQwLDI0ICs0MiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKLQogICAgIC8vIEltYWdlRnJhbWUg
cmVwcmVzZW50cyB0aGUgZGVjb2RlZCBpbWFnZSBkYXRhLiAgVGhpcyBidWZmZXIgaXMgd2hhdCBh
bGwKICAgICAvLyBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLgogICAgIGNsYXNz
IEltYWdlRnJhbWUgewogICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBGcmFtZVN0YXR1cyB7IEZy
YW1lRW1wdHksIEZyYW1lUGFydGlhbCwgRnJhbWVDb21wbGV0ZSB9OwotICAgICAgICBlbnVtIEZy
YW1lRGlzcG9zYWxNZXRob2QgewotICAgICAgICAgICAgLy8gSWYgeW91IGNoYW5nZSB0aGUgbnVt
ZXJpYyB2YWx1ZXMgb2YgdGhlc2UsIG1ha2Ugc3VyZSB5b3UgYXVkaXQKLSAgICAgICAgICAgIC8v
IGFsbCB1c2VycywgYXMgc29tZSB1c2VycyBtYXkgY2FzdCByYXcgdmFsdWVzIHRvL2Zyb20gdGhl
c2UKLSAgICAgICAgICAgIC8vIGNvbnN0YW50cy4KLSAgICAgICAgICAgIERpc3Bvc2VOb3RTcGVj
aWZpZWQsICAgICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJhbWVidWZmZXIKLSAgICAgICAgICAgIERp
c3Bvc2VLZWVwLCAgICAgICAgICAgICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJhbWVidWZmZXIKLSAg
ICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yLCAgLy8gQ2xlYXIgZnJhbWUgdG8gdHJh
bnNwYXJlbnQKLSAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyAgLy8gQ2xlYXIg
ZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY29udGVudHMKLSAgICAgICAgfTsKLSAgICAgICAgdHlwZWRlZiB1bnNp
Z25lZCBQaXhlbERhdGE7CisgICAgICAgIGVudW0gY2xhc3MgRGVjb2RpbmdTdGF0dXMgeyBFbXB0
eSwgUGFydGlhbCwgQ29tcGxldGUgfTsKKyAgICAgICAgZW51bSBjbGFzcyBEaXNwb3NhbE1ldGhv
ZCB7IE5vdFNwZWNpZmllZCwgS2VlcCwgT3ZlcndyaXRlQmdjb2xvciwgT3ZlcndyaXRlUHJldmlv
dXMgfTsKIAogICAgICAgICBJbWFnZUZyYW1lKCk7CiAKQEAgLTY3LDE2NCArNTcsNDEgQEAgdXNp
bmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAvLyBjcmVhdGUgYSBuZXcg
Y29weSBvZiB0aGUgaW1hZ2UgZGF0YSwgb25seSBpbmNyZWFzZSB0aGUgcmVmIGNvdW50LgogICAg
ICAgICBJbWFnZUZyYW1lJiBvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpOwogCi0g
ICAgICAgIC8vIFRoZXNlIGRvIG5vdCB0b3VjaCBvdGhlciBtZXRhZGF0YSwgb25seSB0aGUgcmF3
IHBpeGVsIGRhdGEuCi0gICAgICAgIHZvaWQgY2xlYXJQaXhlbERhdGEoKTsKLSAgICAgICAgdm9p
ZCB6ZXJvRmlsbFBpeGVsRGF0YSgpOwotICAgICAgICB2b2lkIHplcm9GaWxsRnJhbWVSZWN0KGNv
bnN0IEludFJlY3QmKTsKLQotICAgICAgICAvLyBNYWtlcyB0aGlzIGZyYW1lIGhhdmUgYW4gaW5k
ZXBlbmRlbnQgY29weSBvZiB0aGUgcHJvdmlkZWQgaW1hZ2UncwotICAgICAgICAvLyBwaXhlbCBk
YXRhLCBzbyB0aGF0IG1vZGlmaWNhdGlvbnMgaW4gb25lIGZyYW1lIGFyZSBub3QgcmVmbGVjdGVk
IGluCi0gICAgICAgIC8vIHRoZSBvdGhlci4gIFJldHVybnMgd2hldGhlciB0aGUgY29weSBzdWNj
ZWVkZWQuCi0gICAgICAgIGJvb2wgY29weUJpdG1hcERhdGEoY29uc3QgSW1hZ2VGcmFtZSYpOwot
Ci0gICAgICAgIC8vIENvcGllcyB0aGUgcGl4ZWwgZGF0YSBhdCBbKHN0YXJ0WCwgc3RhcnRZKSwg
KGVuZFgsIHN0YXJ0WSkpIHRvIHRoZQotICAgICAgICAvLyBzYW1lIFgtY29vcmRpbmF0ZXMgb24g
ZWFjaCBzdWJzZXF1ZW50IHJvdyB1cCB0byBidXQgbm90IGluY2x1ZGluZwotICAgICAgICAvLyBl
bmRZLgotICAgICAgICB2b2lkIGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGlu
dCBzdGFydFksIGludCBlbmRZKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRY
IDwgd2lkdGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWCA8PSB3aWR0aCgpKTsKLSAgICAg
ICAgICAgIEFTU0VSVChzdGFydFkgPCBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5k
WSA8PSBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcm93Qnl0ZXMgPSAoZW5kWCAt
IHN0YXJ0WCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIGNvbnN0IFBpeGVsRGF0
YSogY29uc3Qgc3RhcnRBZGRyID0gZ2V0QWRkcihzdGFydFgsIHN0YXJ0WSk7Ci0gICAgICAgICAg
ICBmb3IgKGludCBkZXN0WSA9IHN0YXJ0WSArIDE7IGRlc3RZIDwgZW5kWTsgKytkZXN0WSkKLSAg
ICAgICAgICAgICAgICBtZW1jcHkoZ2V0QWRkcihzdGFydFgsIGRlc3RZKSwgc3RhcnRBZGRyLCBy
b3dCeXRlcyk7Ci0gICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChEaXNw
b3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQorICAgICAg
ICBEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9z
YWxNZXRob2Q7IH0KIAotICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBk
YXRhLiAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKLSAgICAgICAgLy8gYXJlIHdy
aXR0ZW4uICBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2Nh
dGlvbgotICAgICAgICAvLyBzdWNjZWVkZWQuCi0gICAgICAgIGJvb2wgc2V0U2l6ZShpbnQgbmV3
V2lkdGgsIGludCBuZXdIZWlnaHQpOworICAgICAgICB2b2lkIHNldFN0YXR1cyhEZWNvZGluZ1N0
YXR1cyBzdGF0dXMpIHsgbV9zdGF0dXMgPSBzdGF0dXM7IH0KKyAgICAgICAgRGVjb2RpbmdTdGF0
dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkVtcHR5OyB9
CisgICAgICAgIGJvb2wgaXNQYXJ0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVj
b2RpbmdTdGF0dXM6OlBhcnRpYWw7IH0KKyAgICAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlOyB9CiAKLSAgICAg
ICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIG5h
dGl2ZSBpbWFnZSBkYXRhLgotICAgICAgICAvLyAoQWN0dWFsIHVzZTogVGhpcyBwb2ludGVyIHdp
bGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluCi0gICAgICAgIC8vIEZyYW1l
RGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2Uo
KSBjb25zdDsKKyAgICAgICAgYm9vbCBpbml0UGl4ZWxzKGNvbnN0IEludFNpemUmLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEpOworICAgICAgICBib29sIGNvcHlQaXhlbHMoY29uc3QgSW1hZ2VGcmFt
ZSYpOworICAgICAgICB2b2lkIGNsZWFyUGl4ZWxzKCkgeyBtX3BpeGVscyA9IG51bGxwdHI7IH0K
IAotICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IEludFJlY3Qm
IG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsg
fQotICAgICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsg
fQotICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247
IH0KLSAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KLSAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9wcmVtdWx0aXBseUFscGhhOyB9CisgICAgICAgIEludFNpemUg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzLT5zaXplKCk7IH0KIAotICAgICAgICB2b2lk
IHNldEhhc0FscGhhKGJvb2wgYWxwaGEpOwotICAgICAgICB2b2lkIHNldENvbG9yUHJvZmlsZShj
b25zdCBDb2xvclByb2ZpbGUmKTsKLSAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChj
b25zdCBJbnRSZWN0JiByKSB7IG1fb3JpZ2luYWxGcmFtZVJlY3QgPSByOyB9Ci0gICAgICAgIHZv
aWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cyk7CiAgICAgICAgIHZvaWQgc2V0RHVyYXRp
b24odW5zaWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9Ci0gICAgICAg
IHZvaWQgc2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9k
aXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQotICAgICAgICB2b2lkIHNldFByZW11bHRpcGx5QWxw
aGEoYm9vbCBwcmVtdWx0aXBseUFscGhhKSB7IG1fcHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRp
cGx5QWxwaGE7IH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwg
dW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAg
ewotICAgICAgICAgICAgc2V0UkdCQShnZXRBZGRyKHgsIHkpLCByLCBnLCBiLCBhKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4
OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRhKCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVhZCBvZiBpbnRlZ2VyIGRpdmlz
aW9uIG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8vIFRoaXMgbXVsdGlwbGVyIHBy
b2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwgdmFsdWVzIGluIHJhbmdlIDAg
LSAyNTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludFNoaWZ0ID0gMjQ7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludE11bHQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2ludFNoaWZ0KSkgKyAxOwotICAg
ICAgICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZpeHBvaW50IHZhbHVlIGFuZCBj
b252ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZml4UG9p
bnRVbnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNpZ25lZCB2KQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gIChmaXhlZCAqIHYpID4+IGZpeFBvaW50U2hpZnQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5z
aWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAgICAgICpkZXN0ID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2ludE11bHQ7Ci0gICAgICAgICAgICAg
ICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBhbHBoYU11bHQpOwotICAgICAgICAg
ICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoZywgYWxwaGFNdWx0KTsKLSAgICAg
ICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGIsIGFscGhhTXVsdCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcg
PDwgOCB8IGIpOwotICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9kdXJhdGlvbjsgfQogCi0jaWYgRU5BQkxFKEFQTkcpCi0gICAgICAgIHN0YXRp
YyBpbmxpbmUgdW5zaWduZWQgZGl2aWRlMjU1KHVuc2lnbmVkIGEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiAoYSArIChhID4+IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQorICAgICAg
ICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpIHsgbV9oYXNBbHBoYSA9IGFscGhhOyB9Cisg
ICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9CiAKLSAg
ICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIWEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBOYXRpdmVJbWFnZVB0
ciBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAgICAgICAgQml0bWFwUGl4ZWxz
KiBwaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscyA/IG1fcGl4ZWxzLmdldCgpIDogbnVs
bHB0cjsgfQogCi0gICAgICAgICAgICBpZiAoYSA8IDI1NSkgewotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGFEZXN0ID0gKCgqZGVzdCkgPj4gMjQpICYgMjU1OwotICAgICAgICAgICAgICAgIGlm
IChhRGVzdCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByRGVzdCA9ICgoKmRlc3Qp
ID4+IDE2KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZ0Rlc3QgPSAoKCpk
ZXN0KSA+PiA4KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYkRlc3QgPSAo
KmRlc3QpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhQXV4ID0gMjU1IC0g
YTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJEZXN0ID0gZGl2aWRlMjU1KHJEZXN0ICogYURlc3QpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZ0Rlc3QgPSBkaXZpZGUyNTUoZ0Rlc3QgKiBhRGVzdCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBiRGVzdCA9IGRpdmlkZTI1NShiRGVzdCAqIGFEZXN0KTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1
KHIgKiBhICsgckRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1
NShnICogYSArIGdEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBkaXZpZGUy
NTUoYiAqIGEgKyBiRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBhICs9IGRpdmlk
ZTI1NShhRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlw
bHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgciA9IChyICogMjU1ICsgYSAtIDEp
IC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoZyAqIDI1NSArIGEgLSAxKSAvIGE7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBiID0gKGIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ByZW11bHRp
cGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgciA9IGRpdmlkZTI1NShyICogYSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGcgPSBkaXZpZGUyNTUoZyAqIGEpOwotICAgICAgICAgICAgICAg
ICAgICBiID0gZGl2aWRlMjU1KGIgKiBhKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIp
OwotICAgICAgICB9Ci0jZW5kaWYKKyAgICAgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2U7IH0KKyAgICAgICAgYm9vbCBoYXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBw
aXhlbHMoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50IHdpZHRoKCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgRGlzcG9zYWxNZXRob2QgbV9k
aXNwb3NhbE1ldGhvZCB7IERpc3Bvc2FsTWV0aG9kOjpOb3RTcGVjaWZpZWQgfTsKKyAgICAgICAg
RGVjb2RpbmdTdGF0dXMgbV9zdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6RW1wdHkgfTsKKyAgICAg
ICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1h
cFBpeGVscz4gbV9waXhlbHM7CiAKLSAgICAgICAgVmVjdG9yPFBpeGVsRGF0YT4gbV9iYWNraW5n
U3RvcmU7Ci0gICAgICAgIFBpeGVsRGF0YSogbV9ieXRlczsgLy8gVGhlIG1lbW9yeSBpcyBiYWNr
ZWQgYnkgbV9iYWNraW5nU3RvcmUuCi0gICAgICAgIEludFNpemUgbV9zaXplOwotICAgICAgICAv
LyBGSVhNRTogRG8gd2UgbmVlZCBtX2NvbG9yUHJvZmlsZSBhbnltb3JlPwotICAgICAgICBDb2xv
clByb2ZpbGUgbV9jb2xvclByb2ZpbGU7Ci0gICAgICAgIGJvb2wgbV9oYXNBbHBoYTsKLSAgICAg
ICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3Qg
YmUgdGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1
ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmFsbCBpbWFnZSBzaXplLgot
ICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKLSAgICAgICAgdW5zaWduZWQgbV9kdXJhdGlv
bjsKLSAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwotICAgICAg
ICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYTsKKyAgICAgICAgZmxvYXQgbV9kdXJhdGlvbiB7IDAg
fTsKKyAgICAgICAgYm9vbCBtX2hhc0FscGhhIHsgdHJ1ZSB9OwogICAgIH07CiAKICAgICAvLyBJ
bWFnZURlY29kZXIgaXMgYSBiYXNlIGZvciBhbGwgZm9ybWF0LXNwZWNpZmljIGRlY29kZXJzCkBA
IC0yNTMsNiArMTIwLDggQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogCiAg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgPSAwOwogCisg
ICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlw
bHlBbHBoYTsgfQorCiAgICAgICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25zdCB7IHJl
dHVybiBtX2lzQWxsRGF0YVJlY2VpdmVkOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldERh
dGEoU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKQEAgLTI5MCwxMSAr
MTU5LDExIEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKIAogICAgICAgICAv
LyBSZXR1cm5zIHdoZXRoZXIgdGhlIHNpemUgaXMgbGVnYWwgKGkuZS4gbm90IGdvaW5nIHRvIHJl
c3VsdCBpbgogICAgICAgICAvLyBvdmVyZmxvdyBlbHNld2hlcmUpLiAgSWYgbm90LCBtYXJrcyBk
ZWNvZGluZyBhcyBmYWlsZWQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCisgICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKGNv
bnN0IEludFNpemUmIHNpemUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc092ZXJTaXpl
KHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgaWYgKGlzT3ZlclNpemUoc2l6ZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwotICAgICAgICAgICAgbV9zaXplID0gSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgICAg
ICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KQEAgLTM4MSw4ICsyNTAsNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8
Y2hhcj47CiAKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOyAvLyBUaGUgZW5j
b2RlZCBkYXRhLgogICAgICAgICBWZWN0b3I8SW1hZ2VGcmFtZSwgMT4gbV9mcmFtZUJ1ZmZlckNh
Y2hlOwotICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBtX2NvbG9yUHJvZmlsZSBhbnkgbW9y
ZSwgZm9yIGFueSBwb3J0PwotICAgICAgICBDb2xvclByb2ZpbGUgbV9jb2xvclByb2ZpbGU7CiAg
ICAgICAgIGJvb2wgbV9zY2FsZWQgeyBmYWxzZSB9OwogICAgICAgICBWZWN0b3I8aW50PiBtX3Nj
YWxlZENvbHVtbnM7CiAgICAgICAgIFZlY3RvcjxpbnQ+IG1fc2NhbGVkUm93czsKQEAgLTM5Mywx
MSArMjYwLDEwIEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICBwcml2
YXRlOgogICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUg
aW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKICAgICAgICAgLy8gYW5kIHJldHVybiBpdCBh
cyBhIChzaWduZWQpIGludC4gIEF2b2lkIG92ZXJmbG93LgotICAgICAgICBzdGF0aWMgYm9vbCBp
c092ZXJTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCisgICAgICAgIHN0YXRp
YyBib29sIGlzT3ZlclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX3NpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nIGxvbmc+KHdpZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGhlaWdodCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdG90YWxfc2l6ZSA+ICgoMSA8PCAyOSkgLSAxKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KHNpemUud2lkdGgoKSkgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUuaGVp
Z2h0KCkpOworICAgICAgICAgICAgcmV0dXJuIHBpeGVscyA+ICgoMSA8PCAyOSkgLSAxKTsKICAg
ICAgICAgfQogCiAgICAgICAgIEludFNpemUgbV9zaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVy
LmNwcAppbmRleCBjYWYzNWM5N2YxN2VkZDM0YmM5ZGY4OWFiMDllODcwMGFlZTZjN2RmLi5hMTRk
NDM5ZTVkZjMxNzIyMjM2MmFjMjEyNzQ5MDgyZDBkN2NjMGI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VE
ZWNvZGVyLmNwcApAQCAtNzAsMTMgKzcwLDExIEBAIEltYWdlRnJhbWUqIEJNUEltYWdlRGVjb2Rl
cjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICBpZiAoaW5kZXgpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpIHsK
KyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKICAgICAgICAgbV9mcmFtZUJ1
ZmZlckNhY2hlLnJlc2l6ZSgxKTsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCku
c2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwotICAgIH0KIAogICAgIElt
YWdlRnJhbWUqIGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKTsKLSAgICBpZiAo
YnVmZmVyLT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgIGlmICgh
YnVmZmVyLT5pc0NvbXBsZXRlKCkpCiAgICAgICAgIGRlY29kZShmYWxzZSk7CiAgICAgcmV0dXJu
IGJ1ZmZlcjsKIH0KQEAgLTk4LDcgKzk2LDcgQEAgdm9pZCBCTVBJbWFnZURlY29kZXI6OmRlY29k
ZShib29sIG9ubHlTaXplKQogICAgICAgICBzZXRGYWlsZWQoKTsKICAgICAvLyBJZiB3ZSdyZSBk
b25lIGRlY29kaW5nIHRoZSBpbWFnZSwgd2UgZG9uJ3QgbmVlZCB0aGUgQk1QSW1hZ2VSZWFkZXIK
ICAgICAvLyBhbnltb3JlLiAgKElmIHdlIGZhaWxlZCwgfG1fcmVhZGVyfCBoYXMgYWxyZWFkeSBi
ZWVuIGNsZWFyZWQuKQotICAgIGVsc2UgaWYgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgp
ICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUNvbXBsZXRlKSkKKyAgICBlbHNlIGlmICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHko
KSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuaXNDb21wbGV0ZSgpKSkKICAgICAgICAg
bV9yZWFkZXIgPSBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAppbmRleCA1
YzAwNTUzNGVjZDkyMTM0YTEzYjMyOTU4OTI3NzkwZjA3YWQwZjgxLi4wNTg3ZmM0OWEwZDk4NWYy
ZWI2NDg4YWQ4Yjc1YjJkMDRjOTVhMTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKQEAg
LTc3LDE4ICs3NywxNSBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5
U2l6ZSkKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KICAg
ICBBU1NFUlQobV9idWZmZXIpOyAgLy8gUGFyZW50IHNob3VsZCBzZXQgdGhpcyBiZWZvcmUgYXNr
aW5nIHVzIHRvIGRlY29kZSEKLSAgICBpZiAobV9idWZmZXItPnN0YXR1cygpID09IEltYWdlRnJh
bWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFtX2J1ZmZlci0+c2V0U2l6ZShtX3BhcmVu
dC0+c2l6ZSgpLndpZHRoKCksIG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkpKQorICAgIGlmICht
X2J1ZmZlci0+aXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghbV9idWZmZXItPmluaXRQaXhlbHMo
bV9wYXJlbnQtPnNpemUoKSwgbV9wYXJlbnQtPnByZW11bHRpcGx5QWxwaGEoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gbV9wYXJlbnQtPnNldEZhaWxlZCgpOyAvLyBVbmFibGUgdG8gYWxsb2NhdGUu
Ci0gICAgICAgIG1fYnVmZmVyLT5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsK
KyAgICAgICAgbV9idWZmZXItPnNldFN0YXR1cyhJbWFnZUZyYW1lOjpEZWNvZGluZ1N0YXR1czo6
UGFydGlhbCk7CiAgICAgICAgIC8vIHNldFNpemUoKSBjYWxscyBlcmFzZUFSR0IoKSwgd2hpY2gg
cmVzZXRzIHRoZSBhbHBoYSBmbGFnLCBzbyB3ZSBmb3JjZQogICAgICAgICAvLyBpdCBiYWNrIHRv
IGZhbHNlIGhlcmUuICBXZSdsbCBzZXQgaXQgdHJ1ZSBiZWxvdyBpbiBhbGwgY2FzZXMgd2hlcmUK
ICAgICAgICAgLy8gdGhlc2UgMHMgY291bGQgYWN0dWFsbHkgc2hvdyB0aHJvdWdoLgogICAgICAg
ICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEoZmFsc2UpOwogCi0gICAgICAgIC8vIEZvciBCTVBzLCB0
aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIG1fYnVmZmVy
LT5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fcGFyZW50LT5zaXpl
KCkpKTsKLQogICAgICAgICBpZiAoIW1faXNUb3BEb3duKQogICAgICAgICAgICAgbV9jb29yZC5z
ZXRZKG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkgLSAxKTsKICAgICB9CkBAIC0xMjIsNyArMTE5
LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seVNpemUpCiAgICAg
fQogCiAgICAgLy8gRG9uZSEKLSAgICBtX2J1ZmZlci0+c2V0U3RhdHVzKEltYWdlRnJhbWU6OkZy
YW1lQ29tcGxldGUpOworICAgIG1fYnVmZmVyLT5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RGVjb2Rp
bmdTdGF0dXM6OkNvbXBsZXRlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTcxLDcgKzE2
OCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKCkKICAgICAgICAg
cmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKIAogICAgIC8vIFNldCBvdXIgc2l6ZS4KLSAg
ICBpZiAoIW1fcGFyZW50LT5zZXRTaXplKG1faW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFk
ZXIuYmlIZWlnaHQpKQorICAgIGlmICghbV9wYXJlbnQtPnNldFNpemUoSW50U2l6ZShtX2luZm9I
ZWFkZXIuYmlXaWR0aCwgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0KSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIEZvciBwYWxldHRlZCBpbWFnZXMsIGJpdG1hcHMgY2FuIHNldCBiaUNs
clVzZWQgdG8gMCB0byBtZWFuICJhbGwKQEAgLTcwNyw3ICs3MDQsOCBAQCBCTVBJbWFnZVJlYWRl
cjo6UHJvY2Vzc2luZ1Jlc3VsdCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEoYm9v
bCBpblJMRSwgaQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IG1fc2Vlbk5vblplcm9BbHBoYVBpeGVsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KG1fc2Vlblplcm9BbHBoYVBpeGVsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZl
ci0+emVyb0ZpbGxQaXhlbERhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVy
LT5waXhlbHMoKS0+Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLT5z
ZXRIYXNBbHBoYSh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2Vlblplcm9BbHBo
YVBpeGVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxwaGEgIT0g
MjU1KQogICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXItPnNldEhhc0FscGhhKHRydWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlUmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VSZWFkZXIuaAppbmRleCBiNWNiOTZlM2Y5Mjk5MmRkNzYyZTUzNzRiNWQ1
NWNjZDc4NTNjY2MxLi4wZThlZjBlYWU2YTg5MWUyMGUzM2E1NTQyN2FmMTlkMTQxZWVhYWM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1Q
SW1hZ2VSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VSZWFkZXIuaApAQCAtMjQ4LDcgKzI0OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBibHVlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBtX2J1ZmZlci0+c2V0UkdCQShtX2Nvb3JkLngoKSwgbV9jb29yZC55KCksIHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLT5waXhlbHMoKS0+c2V0UkdC
QShtX2Nvb3JkLngoKSwgbV9jb29yZC55KCksIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAg
ICAgICAgICAgIG1fY29vcmQubW92ZSgxLCAwKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHND
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9C
aXRtYXBQaXhlbHNDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWFhZjhhMGEzNmIxOGNiZjcyNzdkMmMy
ZTI2ZWI0MTcxMjU2MDBkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcApAQCAtMCwwICsx
LDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCisKKyNpbmNsdWRl
IDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdGl2ZUltYWdlUHRyIEJpdG1h
cFBpeGVsczo6aW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFn
ZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyKj4oY29uc3RfY2FzdDxSR0JBMzIqPihtX3BpeGVscykpLAorICAgICAgICBDQUlS
T19GT1JNQVRfQVJHQjMyLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCBzaXplKCku
d2lkdGgoKSAqIHNpemVvZihSR0JBMzIpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJv
L0ltYWdlRGVjb2RlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggN2I0MTI5NWY4NTczNThmYmJmMzVjMWIwNTI1ZThkNmNjMzUyMGY1OC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNv
ZGVyLmgiCi0KLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU5h
dGl2ZUltYWdlUHRyIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAg
IHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKLSAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxQaXhlbERh
dGEqPihtX2J5dGVzKSksCi0gICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoKCksIGhl
aWdodCgpLCB3aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA5Zjk5MmE3YmUxZDY2
NzIyNjc1YzJlODU0YWQxODkxZTYwZjg1NzdjLi44YzgxNDA0ZWE5ZWQ3MjgxN2MxZGRjNjhkY2I0
ZmI3NGNjYjk1MWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtNjAsMTIgKzYw
LDEyIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVy
biBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1ib29sIEdJRkltYWdlRGVj
b2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9vbCBHSUZJ
bWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAoSW1h
Z2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiBzaXplKCkgPT0gSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSkKKyAgICBpZiAoSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiB0aGlz
LT5zaXplKCkgPT1zaXplKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghSW1hZ2VE
ZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICghSW1hZ2VEZWNvZGVyOjpz
ZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBwcmVwYXJlU2NhbGVE
YXRhSWZOZWNlc3NhcnkoKTsKQEAgLTExNyw3ICsxMTcsNyBAQCBJbWFnZUZyYW1lKiBHSUZJbWFn
ZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhd
OwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQor
ICAgIGlmICghZnJhbWUuaXNDb21wbGV0ZSgpKQogICAgICAgICBkZWNvZGUoaW5kZXggKyAxLCBH
SUZGdWxsUXVlcnkpOwogICAgIHJldHVybiAmZnJhbWU7CiB9CkBAIC0xNTYsMjUgKzE1NiwyNSBA
QCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVh
ckJlZm9yZUZyYW1lKQogICAgIC8vIG5vdCB0byBoYXZlIG5vbi1lbXB0eSBmcmFtZXMgYWZ0ZXIg
dGhlIGZyYW1lIHdlJ3JlIGN1cnJlbnRseSBkZWNvZGluZy4KICAgICAvLyBTbywgc2NhbiBiYWNr
d2FyZHMgZnJvbSB8ZW5kfCBhcyBmb2xsb3dzOgogICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMg
ZW1wdHksIHdlJ3JlIHN0aWxsIHBhc3QgYW55IGZyYW1lcyB3ZSBjYXJlIGFib3V0LgotICAgIC8v
ICAgKiBJZiB0aGUgZnJhbWUgaXMgY29tcGxldGUsIGJ1dCBpcyBEaXNwb3NlT3ZlcndyaXRlUHJl
dmlvdXMsIHdlJ2xsCisgICAgLy8gICAqIElmIHRoZSBmcmFtZSBpcyBjb21wbGV0ZSwgYnV0IGlz
IERpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cywgd2UnbGwKICAgICAvLyAgICAgc2tp
cCBvdmVyIGl0IGluIGZ1dHVyZSBpbml0RnJhbWVCdWZmZXIoKSBjYWxscy4gIFdlIGNhbiBjbGVh
ciBpdAogICAgIC8vICAgICB1bmxlc3MgaXQncyB8ZW5kfCwgYW5kIGtlZXAgc2Nhbm5pbmcuICBG
b3IgYW55IG90aGVyIGRpc3Bvc2FsIG1ldGhvZCwKICAgICAvLyAgICAgc3RvcCBzY2FubmluZywg
YXMgd2UndmUgZm91bmQgdGhlIGZyYW1lIGluaXRGcmFtZUJ1ZmZlcigpIHdpbGwgbmVlZAogICAg
IC8vICAgICBuZXh0LgogICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMgcGFydGlhbCwgd2UncmUg
ZGVjb2RpbmcgaXQsIHNvIGRvbid0IGNsZWFyIGl0OyBpZiBpdAotICAgIC8vICAgICBoYXMgYSBk
aXNwb3NhbCBtZXRob2Qgb3RoZXIgdGhhbiBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMsIHN0b3AK
KyAgICAvLyAgICAgaGFzIGEgZGlzcG9zYWwgbWV0aG9kIG90aGVyIHRoYW4gRGlzcG9zYWxNZXRo
b2Q6Ok92ZXJ3cml0ZVByZXZpb3VzLCBzdG9wCiAgICAgLy8gICAgIHNjYW5uaW5nLCBhcyB3ZSds
bCBvbmx5IG5lZWQgdGhpcyBmcmFtZSB3aGVuIGRlY29kaW5nIHRoZSBuZXh0IG9uZS4KICAgICBW
ZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKLSAgICBmb3IgKDsgKGkgIT0gbV9m
cmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6
RnJhbWVFbXB0eSkgfHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9z
ZU92ZXJ3cml0ZVByZXZpb3VzKSk7IC0taSkgewotICAgICAgICBpZiAoKGktPnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpICYmIChpICE9IGVuZCkpCi0gICAgICAgICAgICBp
LT5jbGVhclBpeGVsRGF0YSgpOworICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUu
YmVnaW4oKSkgJiYgKChpLT5pc0VtcHR5KCkpIHx8IChpLT5kaXNwb3NhbE1ldGhvZCgpID09IElt
YWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cykpOyAtLWkpIHsKKyAg
ICAgICAgaWYgKChpLT5pc0NvbXBsZXRlKCkpICYmIChpICE9IGVuZCkpCisgICAgICAgICAgICBp
LT5jbGVhclBpeGVscygpOwogICAgIH0KIAogICAgIC8vIE5vdyB8aXwgaG9sZHMgdGhlIGxhc3Qg
ZnJhbWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsgY2xlYXIgcHJpb3IgZnJhbWVzLgogICAgIGZvciAo
VmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBqKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigp
KTsgaiAhPSBpOyArK2opIHsKLSAgICAgICAgQVNTRVJUKGotPnN0YXR1cygpICE9IEltYWdlRnJh
bWU6OkZyYW1lUGFydGlhbCk7Ci0gICAgICAgIGlmIChqLT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1l
OjpGcmFtZUVtcHR5KQotICAgICAgICAgICAgai0+Y2xlYXJQaXhlbERhdGEoKTsKKyAgICAgICAg
QVNTRVJUKCFqLT5pc1BhcnRpYWwoKSk7CisgICAgICAgIGlmICghai0+aXNFbXB0eSgpKQorICAg
ICAgICAgICAgai0+Y2xlYXJQaXhlbHMoKTsKICAgICB9CiAKICAgICAvLyBXaGVuIHNvbWUgZnJh
bWVzIGFyZSBjbGVhcmVkLCB0aGUgcmVhZGVyIGlzIG91dCBvZiBzeW5jLCBzaW5jZSB0aGUgY2Fs
bGVyIG1pZ2h0IGFzayBmb3IgYW55IGZyYW1lIG5vdApAQCAtMjEzLDE2ICsyMTMsMTYgQEAgYm9v
bCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIGNv
bnN0IFZlY3Rvcjx1bnNpZ25lZAogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVj
ZXNzYXJ5LgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFt
ZUluZGV4XTsKLSAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVF
bXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNQaXhl
bERhdGEoKSkKKyAgICBpZiAoKChidWZmZXIuaXNFbXB0eSgpKSAmJiAhaW5pdEZyYW1lQnVmZmVy
KGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhhc1BpeGVscygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVy
LmdldEFkZHIoeEJlZ2luLCB5QmVnaW4pOworICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBi
dWZmZXIucGl4ZWxzKCktPmF0KHhCZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUgcm93
J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4QmVn
aW47IHggPCB4RW5kOyArK3gpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VW
YWx1ZSA9IHJvd0J1ZmZlclsobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZy
YW1lQ29udGV4dC0+eE9mZnNldF07CiAgICAgICAgIGlmICgoIWZyYW1lQ29udGV4dC0+aXNUcmFu
c3BhcmVudCB8fCAoc291cmNlVmFsdWUgIT0gZnJhbWVDb250ZXh0LT50cGl4ZWwpKSAmJiAoc291
cmNlVmFsdWUgPCBjb2xvck1hcFNpemUpKSB7CiAgICAgICAgICAgICBjb25zdCBzaXplX3QgY29s
b3JJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc291cmNlVmFsdWUpICogMzsKLSAgICAgICAg
ICAgIGJ1ZmZlci5zZXRSR0JBKGN1cnJlbnRBZGRyZXNzLCBjb2xvck1hcFtjb2xvckluZGV4XSwg
Y29sb3JNYXBbY29sb3JJbmRleCArIDFdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMl0sIDI1NSk7
CisgICAgICAgICAgICBidWZmZXIucGl4ZWxzKCktPnNldFJHQkEoY3VycmVudEFkZHJlc3MsIGNv
bG9yTWFwW2NvbG9ySW5kZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0sIGNvbG9yTWFwW2Nv
bG9ySW5kZXggKyAyXSwgMjU1KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fY3Vy
cmVudEJ1ZmZlclNhd0FscGhhID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIFdlIG1heSBvciBtYXkg
bm90IG5lZWQgdG8gd3JpdGUgdHJhbnNwYXJlbnQgcGl4ZWxzIHRvIHRoZSBidWZmZXIuCkBAIC0y
MzMsMzQgKzIzMywzNCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5z
aWduZWQgZnJhbWVJbmRleCwgY29uc3QgVmVjdG9yPHVuc2lnbmVkCiAgICAgICAgICAgICAvLyBi
ZXlvbmQgdGhlIGZpcnN0LCBvciB0aGUgaW5pdGlhbCBwYXNzZXMgd2lsbCAic2hvdyB0aHJvdWdo
IiB0aGUKICAgICAgICAgICAgIC8vIGxhdGVyIG9uZXMuCiAgICAgICAgICAgICBpZiAod3JpdGVU
cmFuc3BhcmVudFBpeGVscykKLSAgICAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQShjdXJyZW50
QWRkcmVzcywgMCwgMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgYnVmZmVyLnBpeGVscygpLT5z
ZXRSR0JBKGN1cnJlbnRBZGRyZXNzLCAwLCAwLCAwLCAwKTsKICAgICAgICAgfQogICAgICAgICAr
K2N1cnJlbnRBZGRyZXNzOwogICAgIH0KIAogICAgIC8vIFRlbGwgdGhlIGZyYW1lIHRvIGNvcHkg
dGhlIHJvdyBkYXRhIGlmIG5lZWQgYmUuCiAgICAgaWYgKHJlcGVhdENvdW50ID4gMSkKLSAgICAg
ICAgYnVmZmVyLmNvcHlSb3dOVGltZXMoeEJlZ2luLCB4RW5kLCB5QmVnaW4sIHlFbmQpOworICAg
ICAgICBidWZmZXIucGl4ZWxzKCktPnJlcGVhdEZpcnN0Um93KEludFJlY3QoeEJlZ2luLCB5QmVn
aW4sIHhFbmQgLSB4QmVnaW4sIHlFbmQgLSB5QmVnaW4pKTsKIAogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUlu
ZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLCBJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0
aG9kIGRpc3Bvc2FsTWV0aG9kKQorYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUo
dW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VGcmFtZTo6
RGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUg
ZnJhbWUgaWYgbmVjZXNzYXJ5LiAgU29tZSBHSUZzIGluc2VydCBkby1ub3RoaW5nIGZyYW1lcywK
ICAgICAvLyBpbiB3aGljaCBjYXNlIHdlIG5ldmVyIHJlYWNoIGhhdmVEZWNvZGVkUm93KCkgYmVm
b3JlIGdldHRpbmcgaGVyZS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVy
Q2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFt
ZTo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAgICBpZiAo
KGJ1ZmZlci5pc0VtcHR5KCkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gaW5pdEZyYW1lQnVmZmVyKCkgaGFzIGFscmVhZHkgY2FsbGVk
IHNldEZhaWxlZCgpLgogCi0gICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNv
bXBsZXRlKTsKKyAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkRlY29kaW5nU3RhdHVz
OjpDb21wbGV0ZSk7CiAgICAgYnVmZmVyLnNldER1cmF0aW9uKGZyYW1lRHVyYXRpb24pOwogICAg
IGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChkaXNwb3NhbE1ldGhvZCk7CiAKICAgICBpZiAoIW1f
Y3VycmVudEJ1ZmZlclNhd0FscGhhKSB7CiAgICAgICAgIC8vIFRoZSB3aG9sZSBmcmFtZSB3YXMg
bm9uLXRyYW5zcGFyZW50LCBzbyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGVudGlyZQogICAgICAg
ICAvLyByZXN1bHRpbmcgYnVmZmVyIHdhcyBub24tdHJhbnNwYXJlbnQsIGFuZCB3ZSBjYW4gc2V0
SGFzQWxwaGEoZmFsc2UpLgotICAgICAgICBpZiAoYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCku
Y29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkKKyAgICAgICAgaWYg
KGJ1ZmZlci5waXhlbHMoKS0+cmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2Nh
bGVkU2l6ZSgpKSkpCiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAg
ICAgICBlbHNlIGlmIChmcmFtZUluZGV4KSB7CiAgICAgICAgICAgICAvLyBUcmlja3kgY2FzZS4g
IFRoaXMgZnJhbWUgZG9lcyBub3QgaGF2ZSBhbHBoYSBvbmx5IGlmIGV2ZXJ5d2hlcmUKQEAgLTI2
OCwyMiArMjY4LDIyIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2ln
bmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sCiAgICAgICAgICAgICAvLyB0
cnVlLCB3ZSBjaGVjayB0aGUgc3RhcnQgc3RhdGUgb2YgdGhlIGZyYW1lIC0tIGlmIGl0IGRvZXNu
J3QgaGF2ZQogICAgICAgICAgICAgLy8gYWxwaGEsIHdlJ3JlIHNhZmUuCiAgICAgICAgICAgICAv
LwotICAgICAgICAgICAgLy8gRmlyc3Qgc2tpcCBvdmVyIHByaW9yIERpc3Bvc2VPdmVyd3JpdGVQ
cmV2aW91cyBmcmFtZXMgKHNpbmNlIHRoZXkKKyAgICAgICAgICAgIC8vIEZpcnN0IHNraXAgb3Zl
ciBwcmlvciBEaXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlUHJldmlvdXMgZnJhbWVzIChzaW5jZSB0
aGV5CiAgICAgICAgICAgICAvLyBkb24ndCBhZmZlY3QgdGhlIHN0YXJ0IHN0YXRlIG9mIHRoaXMg
ZnJhbWUpIHRoZSBzYW1lIHdheSB3ZSBkbyBpbgogICAgICAgICAgICAgLy8gaW5pdEZyYW1lQnVm
ZmVyKCkuCiAgICAgICAgICAgICBjb25zdCBJbWFnZUZyYW1lKiBwcmV2QnVmZmVyID0gJm1fZnJh
bWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwotICAgICAgICAgICAgd2hpbGUgKGZyYW1lSW5k
ZXggJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9z
ZU92ZXJ3cml0ZVByZXZpb3VzKSkKKyAgICAgICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChw
cmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9k
OjpPdmVyd3JpdGVQcmV2aW91cykpCiAgICAgICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2Zy
YW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKIAotICAgICAgICAgICAgLy8gTm93LCBpZiB3
ZSdyZSBhdCBhIERpc3Bvc2VOb3RTcGVjaWZpZWQgb3IgRGlzcG9zZUtlZXAgZnJhbWUsIHRoZW4K
KyAgICAgICAgICAgIC8vIE5vdywgaWYgd2UncmUgYXQgYSBEaXNwb3NhbE1ldGhvZDo6Tm90U3Bl
Y2lmaWVkIG9yIERpc3Bvc2FsTWV0aG9kOjpLZWVwIGZyYW1lLCB0aGVuCiAgICAgICAgICAgICAv
LyB3ZSBjYW4gc2F5IHdlIGhhdmUgbm8gYWxwaGEgaWYgdGhhdCBmcmFtZSBoYWQgbm8gYWxwaGEu
ICBCdXQKICAgICAgICAgICAgIC8vIHNpbmNlIGluIGluaXRGcmFtZUJ1ZmZlcigpIHdlIGFscmVh
ZHkgY29waWVkIHRoYXQgZnJhbWUncyBhbHBoYQogICAgICAgICAgICAgLy8gc3RhdGUgaW50byB0
aGUgY3VycmVudCBmcmFtZSdzLCB3ZSBuZWVkIGRvIG5vdGhpbmcgYXQgYWxsIGhlcmUuCiAgICAg
ICAgICAgICAvLwotICAgICAgICAgICAgLy8gVGhlIG9ubHkgcmVtYWluaW5nIGNhc2UgaXMgYSBE
aXNwb3NlT3ZlcndyaXRlQmdjb2xvciBmcmFtZS4gIElmCisgICAgICAgICAgICAvLyBUaGUgb25s
eSByZW1haW5pbmcgY2FzZSBpcyBhIERpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVCZ2NvbG9yIGZy
YW1lLiBJZgogICAgICAgICAgICAgLy8gaXQgaGFkIG5vIGFscGhhLCBhbmQgaXRzIHJlY3QgaXMg
Y29udGFpbmVkIGluIHRoZSBjdXJyZW50IGZyYW1lJ3MKICAgICAgICAgICAgIC8vIHJlY3QsIHdl
IGtub3cgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIG5vIGFscGhhLgotICAgICAgICAgICAgaWYgKChw
cmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3Jp
dGVCZ2NvbG9yKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIub3JpZ2luYWxG
cmFtZVJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpKSkKKyAg
ICAgICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1l
OjpEaXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlQmdjb2xvcikgJiYgIXByZXZCdWZmZXItPmhhc0Fs
cGhhKCkgJiYgYnVmZmVyLnBpeGVscygpLT5yZWN0KCkuY29udGFpbnMocHJldkJ1ZmZlci0+cGl4
ZWxzKCktPnJlY3QoKSkpCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNl
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTMyMSwxMCArMzIxLDcgQEAgdm9pZCBHSUZJbWFnZURl
Y29kZXI6OmRlY29kZSh1bnNpZ25lZCBoYWx0QXRGcmFtZSwgR0lGUXVlcnkgcXVlcnkpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBzaXplX3Qgb2xkU2l6ZSA9IG1fZnJhbWVC
dWZmZXJDYWNoZS5zaXplKCk7CiAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShtX3JlYWRl
ci0+aW1hZ2VzQ291bnQoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3Jl
YWRlci0+aW1hZ2VzQ291bnQoKTsgKytpKQotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbaV0u
c2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwogCiAgICAgaWYgKHF1ZXJ5
ID09IEdJRkZyYW1lQ291bnRRdWVyeSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzUzLDU4ICszNTAs
NjAgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFt
ZUluZGV4KQogICAgICAgICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIGZy
YW1lQ29udGV4dC0+eU9mZnNldCk7CiAKICAgICBJbWFnZUZyYW1lKiBjb25zdCBidWZmZXIgPSAm
bV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGludCBsZWZ0ID0gdXBwZXJCb3Vu
ZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7Ci0gICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxl
ZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7Ci0gICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2Fs
ZWRZKGZyYW1lUmVjdC55KCkpOwotICAgIGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShm
cmFtZVJlY3QubWF4WSgpLCB0b3ApOwotICAgIGJ1ZmZlci0+c2V0T3JpZ2luYWxGcmFtZVJlY3Qo
SW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAKICAgICBp
ZiAoIWZyYW1lSW5kZXgpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUsIHNv
IHdlJ3JlIG5vdCByZWx5aW5nIG9uIGFueSBwcmV2aW91cyBkYXRhLgotICAgICAgICBpZiAoIWJ1
ZmZlci0+c2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgp
KSkKKyAgICAgICAgaWYgKCFidWZmZXItPmluaXRQaXhlbHMoc2NhbGVkU2l6ZSgpLCBwcmVtdWx0
aXBseUFscGhhKCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIC8vIFRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRz
IG9uIHRoZSBwcmV2aW91cyBmcmFtZSdzCiAgICAgICAgIC8vIGRpc3Bvc2FsIG1ldGhvZC4KICAg
ICAgICAgLy8KLSAgICAgICAgLy8gRnJhbWVzIHRoYXQgdXNlIHRoZSBEaXNwb3NlT3ZlcndyaXRl
UHJldmlvdXMgbWV0aG9kIGFyZSBlZmZlY3RpdmVseQorICAgICAgICAvLyBGcmFtZXMgdGhhdCB1
c2UgdGhlIERpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cyBtZXRob2QgYXJlIGVmZmVj
dGl2ZWx5CiAgICAgICAgIC8vIG5vLW9wcyBpbiB0ZXJtcyBvZiBjaGFuZ2luZyB0aGUgc3RhcnRp
bmcgc3RhdGUgb2YgYSBmcmFtZSBjb21wYXJlZCB0bwogICAgICAgICAvLyB0aGUgc3RhcnRpbmcg
c3RhdGUgb2YgdGhlIHByZXZpb3VzIGZyYW1lLCBzbyBza2lwIG92ZXIgdGhlbS4gIChJZiB0aGUK
ICAgICAgICAgLy8gZmlyc3QgZnJhbWUgc3BlY2lmaWVzIHRoaXMgbWV0aG9kLCBpdCB3aWxsIGdl
dCB0cmVhdGVkIGxpa2UKLSAgICAgICAgLy8gRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IgYmVsb3cg
YW5kIHJlc2V0IHRvIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4pCisgICAgICAgIC8vIERpc3Bv
c2FsTWV0aG9kOjpPdmVyd3JpdGVCZ2NvbG9yIGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBsZXRl
bHkgZW1wdHkgaW1hZ2UuKQogICAgICAgICBjb25zdCBJbWFnZUZyYW1lKiBwcmV2QnVmZmVyID0g
Jm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwotICAgICAgICBJbWFnZUZyYW1lOjpG
cmFtZURpc3Bvc2FsTWV0aG9kIHByZXZNZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhv
ZCgpOwotICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBJbWFnZUZy
YW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKSB7CisgICAgICAgIEltYWdlRnJhbWU6OkRp
c3Bvc2FsTWV0aG9kIHByZXZNZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOwor
ICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpE
aXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlUHJldmlvdXMpKSB7CiAgICAgICAgICAgICBwcmV2QnVm
ZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwogICAgICAgICAgICAgcHJl
dk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgQVNTRVJUKHByZXZCdWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxl
dGUpOworICAgICAgICBBU1NFUlQocHJldkJ1ZmZlci0+aXNDb21wbGV0ZSgpKTsKIAotICAgICAg
ICBpZiAoKHByZXZNZXRob2QgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU5vdFNwZWNpZmllZCkgfHwg
KHByZXZNZXRob2QgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZUtlZXApKSB7CisgICAgICAgIGlmICgo
cHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6Tm90U3BlY2lmaWVkKSB8
fCAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6S2VlcCkpIHsKICAg
ICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBsYXN0IGZyYW1lIGFzIHRoZSBzdGFydGluZyBzdGF0
ZSBmb3IgdGhpcyBmcmFtZS4KLSAgICAgICAgICAgIGlmICghYnVmZmVyLT5jb3B5Qml0bWFwRGF0
YSgqcHJldkJ1ZmZlcikpCisgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+Y29weVBpeGVscygqcHJl
dkJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJh
bWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQKICAgICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhl
bHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1lLgotICAgICAgICAgICAgY29uc3Qg
SW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5waXhlbHMoKS0+
cmVjdCgpOwogICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNp
emUoKTsKICAgICAgICAgICAgIGlmICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJ
bnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAgICAgLy8g
Q2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9s
ZQogICAgICAgICAgICAgICAgIC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0
eSBpbWFnZS4KLSAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShidWZmZXJTaXpl
LndpZHRoKCksIGJ1ZmZlclNpemUuaGVpZ2h0KCkpKQorICAgICAgICAgICAgICAgIGlmICghYnVm
ZmVyLT5pbml0UGl4ZWxzKGJ1ZmZlclNpemUsIHByZW11bHRpcGx5QWxwaGEoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgd2hvbGUgcHJldmlvdXMgYnVmZmVyLCB0aGVuIGNs
ZWFyIGp1c3QgaXRzIGZyYW1lLgotICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5jb3B5Qml0
bWFwRGF0YSgqcHJldkJ1ZmZlcikpCisgICAgICAgICAgICAgICAgaWYgKCFidWZmZXItPmNvcHlQ
aXhlbHMoKnByZXZCdWZmZXIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVk
KCk7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLT56ZXJvRmlsbEZyYW1lUmVjdChwcmV2UmVjdCk7
CisgICAgICAgICAgICAgICAgYnVmZmVyLT5waXhlbHMoKS0+Y2xlYXJSZWN0KHByZXZSZWN0KTsK
KyAgICAgICAgICAgICAgICBidWZmZXItPnNldEhhc0FscGhhKHRydWUpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxl
ZFgoZnJhbWVSZWN0LngoKSk7CisgICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJh
bWVSZWN0Lm1heFgoKSwgbGVmdCk7CisgICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZy
YW1lUmVjdC55KCkpOworICAgIGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJl
Y3QubWF4WSgpLCB0b3ApOworICAgIGJ1ZmZlci0+cGl4ZWxzKCktPnNldFJlY3QoSW50UmVjdChs
ZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAKICAgICAvLyBVcGRhdGUg
b3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCi0gICAgYnVmZmVyLT5zZXRTdGF0
dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICBidWZmZXItPnNldFN0YXR1cyhJbWFn
ZUZyYW1lOjpEZWNvZGluZ1N0YXR1czo6UGFydGlhbCk7CiAKICAgICAvLyBSZXNldCB0aGUgYWxw
aGEgcGl4ZWwgdHJhY2tlciBmb3IgdGhpcyBmcmFtZS4KICAgICBtX2N1cnJlbnRCdWZmZXJTYXdB
bHBoYSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCmluZGV4IDk1ZWM2ZDBhN2I2OTY2
NTJjNzA5YjdiNjJkNDFhYTRmM2FiOGYxZTAuLjE0YjI5YTY4ZmM3OGRjZjQ4NjcwNWJmNTAyODA2
ZDY2Mzc4ZjViZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKQEAgLTQ0LDcgKzQ0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiAiZ2lmIjsgfQogICAgICAgICB2b2lkIHNldERhdGEoU2hh
cmVkQnVmZmVyJiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkgb3ZlcnJpZGU7CiAgICAgICAg
IGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgb3ZlcnJpZGU7Ci0gICAgICAgIGJvb2wgc2V0U2l6ZSh1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBz
ZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAgICAgc2l6ZV90IGZyYW1lQ291
bnQoKSBvdmVycmlkZTsKICAgICAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IG92ZXJy
aWRlOwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4
KSBvdmVycmlkZTsKQEAgLTU2LDEzICs1NiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhlIEdJRiByZWFkZXIuCiAgICAgICAgIGJvb2wgaGF2
ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgY29uc3QgVmVjdG9yPHVuc2lnbmVkIGNo
YXI+JiByb3dCdWZmZXIsIHNpemVfdCB3aWR0aCwgc2l6ZV90IHJvd051bWJlciwgdW5zaWduZWQg
cmVwZWF0Q291bnQsIGJvb2wgd3JpdGVUcmFuc3BhcmVudFBpeGVscyk7Ci0gICAgICAgIGJvb2wg
ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9u
LCBJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKTsKKyAgICAg
ICAgYm9vbCBmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1l
RHVyYXRpb24sIEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kKTsKICAgICAgICAgdm9pZCBnaWZD
b21wbGV0ZSgpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gSWYgdGhlIHF1ZXJ5IGlzIEdJ
RkZ1bGxRdWVyeSwgZGVjb2RlcyB0aGUgaW1hZ2UgdXAgdG8gKGJ1dCBub3QKLSAgICAgICAgLy8g
aW5jbHVkaW5nKSB8aGFsdEF0RnJhbWV8LiAgT3RoZXJ3aXNlLCBkZWNvZGVzIGFzIG11Y2ggYXMg
aXMgbmVlZGVkIHRvCi0gICAgICAgIC8vIGFuc3dlciB0aGUgcXVlcnksIGlnbm9yaW5nIGJpdG1h
cCBkYXRhLiAgSWYgZGVjb2RpbmcgZmFpbHMgYnV0IHRoZXJlCisgICAgICAgIC8vIGluY2x1ZGlu
ZykgfGhhbHRBdEZyYW1lfC4gT3RoZXJ3aXNlLCBkZWNvZGVzIGFzIG11Y2ggYXMgaXMgbmVlZGVk
IHRvCisgICAgICAgIC8vIGFuc3dlciB0aGUgcXVlcnksIGlnbm9yaW5nIGJpdG1hcCBkYXRhLiBJ
ZiBkZWNvZGluZyBmYWlscyBidXQgdGhlcmUKICAgICAgICAgLy8gaXMgbm8gbW9yZSBkYXRhIGNv
bWluZywgc2V0cyB0aGUgImRlY29kZSBmYWlsdXJlIiBmbGFnLgogICAgICAgICB2b2lkIGRlY29k
ZSh1bnNpZ25lZCBoYWx0QXRGcmFtZSwgR0lGUXVlcnkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVy
LmNwcAppbmRleCAwMGQyNTJjZWZiMDVhYTUxZjg0ZDhkZjk5MDIyOTBlZmQ3MTA0MjJmLi41Yjg4
YTk1ZjMxYTFmMDUxOWU4MzFhNWJmYWE4ZjQ0YTg0YWM0ZWUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJl
YWRlci5jcHAKQEAgLTQ0Nyw3ICs0NDcsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpwYXJzZShz
aXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBib29sIHBhcnNlU2l6ZU9ubHkpCiAKICAg
ICAgICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNp
emUuCiAgICAgICAgICAgICAvLyBOb3RlOiBBIHN1YnNlcXVlbnQgZnJhbWUgbWlnaHQgaGF2ZSBk
aW1lbnNpb25zIGxhcmdlciB0aGFuIHRoZSAic2NyZWVuIiBkaW1lbnNpb25zLgotICAgICAgICAg
ICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShtX3NjcmVlbldpZHRoLCBtX3Nj
cmVlbkhlaWdodCkpCisgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRT
aXplKFdlYkNvcmU6OkludFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIG1fc2NyZWVuQmdjb2xv
ciA9IGN1cnJlbnRDb21wb25lbnRbNV07CkBAIC01NjgsMTQgKzU2OCwxNCBAQCBib29sIEdJRklt
YWdlUmVhZGVyOjpwYXJzZShzaXplX3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBib29sIHBh
cnNlU2l6ZU9ubHkpCiAKICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgInVzZXIgaW5wdXQi
IGJpdC4KIAotICAgICAgICAgICAgLy8gTk9URTogVGhpcyByZWxpZXMgb24gdGhlIHZhbHVlcyBp
biB0aGUgRnJhbWVEaXNwb3NhbE1ldGhvZCBlbnVtCisgICAgICAgICAgICAvLyBOT1RFOiBUaGlz
IHJlbGllcyBvbiB0aGUgdmFsdWVzIGluIHRoZSBEaXNwb3NhbE1ldGhvZCBlbnVtCiAgICAgICAg
ICAgICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgR0lGIHNwZWMhCiAgICAgICAgICAgICBpbnQg
ZGlzcG9zYWxNZXRob2QgPSAoKCpjdXJyZW50Q29tcG9uZW50KSA+PiAyKSAmIDB4NzsKLSAgICAg
ICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kPihkaXNwb3NhbE1ldGhvZCk7CisgICAg
ICAgICAgICBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9kID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q+KGRpc3Bvc2FsTWV0aG9kKTsKICAgICAgICAg
ICAgIC8vIFNvbWUgc3BlY3Mgc2F5IHRoYXQgZGlzcG9zYWwgbWV0aG9kIDMgaXMgIm92ZXJ3cml0
ZSBwcmV2aW91cyIsIG90aGVycyB0aGF0IHNldHRpbmcKICAgICAgICAgICAgIC8vIHRoZSB0aGly
ZCBiaXQgb2YgdGhlIGZpZWxkIChpLmUuIG1ldGhvZCA0KSBpcy4gV2UgbWFwIGJvdGggdG8gdGhl
IHNhbWUgdmFsdWUuCiAgICAgICAgICAgICBpZiAoZGlzcG9zYWxNZXRob2QgPT0gNCkKLSAgICAg
ICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9kID0gV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzOworICAgICAgICAgICAgICAgIGN1cnJlbnRG
cmFtZS0+ZGlzcG9zYWxNZXRob2QgPSBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhv
ZDo6T3ZlcndyaXRlUHJldmlvdXM7CiAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRlbGF5VGlt
ZSA9IEdFVElOVDE2KGN1cnJlbnRDb21wb25lbnQgKyAxKSAqIDEwOwogICAgICAgICAgICAgR0VU
TigxLCBHSUZDb25zdW1lQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkBAIC02NjQsNyArNjY0
LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cGFyc2Uoc2l6ZV90IGRhdGFQb3NpdGlvbiwgc2l6
ZV90IGxlbiwgYm9vbCBwYXJzZVNpemVPbmx5KQogICAgICAgICAgICAgICAgIHlPZmZzZXQgPSAw
OwogCiAgICAgICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdp
biBvZiBvdXIgc2l6ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgIW1fY2xpZW50
LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkKKyAgICAgICAgICAgICAg
ICBpZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRTaXplKFdlYkNvcmU6OkludFNpemUobV9z
Y3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCmluZGV4IGVhNDJi
MTFhNzhjMzhlYmU2NWMyYzI4YjkxYzhhZmI2MjYzNWE5OTkuLmVmNWMxYTRjNjNhZmIyMGEyMWI2
MzhiODlmMTFkOTk4MWM0MTNjYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCkBAIC0xNTUsNyAr
MTU1LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHdpZHRoOwogICAgIHVuc2lnbmVkIGhlaWdo
dDsKICAgICBpbnQgdHBpeGVsOyAvLyBJbmRleCBvZiB0cmFuc3BhcmVudCBwaXhlbC4KLSAgICBX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kOyAv
LyBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBldGMuCisgICAgV2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2Q7IC8vIFJlc3RvcmUg
dG8gYmFja2dyb3VuZCwgbGVhdmUgaW4gcGxhY2UsIGV0Yy4KICAgICBzaXplX3QgbG9jYWxDb2xv
cm1hcFBvc2l0aW9uOyAvLyBQZXItaW1hZ2UgY29sb3JtYXAuCiAgICAgaW50IGxvY2FsQ29sb3Jt
YXBTaXplOyAvLyBTaXplIG9mIGxvY2FsIGNvbG9ybWFwIGFycmF5LgogICAgIGludCBkYXRhc2l6
ZTsKQEAgLTE3NCw3ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgd2lkdGgoMCkKICAgICAg
ICAgLCBoZWlnaHQoMCkKICAgICAgICAgLCB0cGl4ZWwoMCkKLSAgICAgICAgLCBkaXNwb3NhbE1l
dGhvZChXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlTm90U3BlY2lmaWVkKQorICAgICAgICAs
IGRpc3Bvc2FsTWV0aG9kKFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpOb3RT
cGVjaWZpZWQpCiAgICAgICAgICwgbG9jYWxDb2xvcm1hcFBvc2l0aW9uKDApCiAgICAgICAgICwg
bG9jYWxDb2xvcm1hcFNpemUoMCkKICAgICAgICAgLCBkYXRhc2l6ZSgwKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1h
Z2VEZWNvZGVyLmNwcAppbmRleCBhNTkyMDFiNTZlNWIyMmUyYTg1MWMwYzk5MmVhNGIxZjg4Y2Mz
YjRmLi45MzQ1MWQwYmMyYjc0ZDg3ODgyYTkwM2MyYzFkMDIwNzUyMTcyZDlmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNv
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28v
SUNPSW1hZ2VEZWNvZGVyLmNwcApAQCAtODgsMjEgKzg4LDIwIEBAIEludFNpemUgSUNPSW1hZ2VE
ZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCkK
ICAgICByZXR1cm4gKGluZGV4ICYmIChpbmRleCA8IG1fZGlyRW50cmllcy5zaXplKCkpKSA/IG1f
ZGlyRW50cmllc1tpbmRleF0ubV9zaXplIDogc2l6ZSgpOwogfQogCi1ib29sIElDT0ltYWdlRGVj
b2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9vbCBJQ09J
bWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICAvLyBUaGUg
c2l6ZSBjYWxjdWxhdGVkIGluc2lkZSB0aGUgQk1QSW1hZ2VSZWFkZXIgaGFkIGJldHRlciBtYXRj
aCB0aGUgb25lIGluCiAgICAgLy8gdGhlIGljb24gZGlyZWN0b3J5LgotICAgIHJldHVybiBtX2Zy
YW1lU2l6ZS5pc0VtcHR5KCkgPyBJbWFnZURlY29kZXI6OnNldFNpemUod2lkdGgsIGhlaWdodCkg
OiAoKEludFNpemUod2lkdGgsIGhlaWdodCkgPT0gbV9mcmFtZVNpemUpIHx8IHNldEZhaWxlZCgp
KTsKKyAgICByZXR1cm4gbV9mcmFtZVNpemUuaXNFbXB0eSgpID8gSW1hZ2VEZWNvZGVyOjpzZXRT
aXplKHNpemUpIDogKChzaXplID09IG1fZnJhbWVTaXplKSB8fCBzZXRGYWlsZWQoKSk7CiB9CiAK
IHNpemVfdCBJQ09JbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogewogICAgIGRlY29kZSgwLCB0
cnVlKTsKLSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkgeworCisgICAgaWYg
KG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNo
ZS5yZXNpemUobV9kaXJFbnRyaWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9kaXJFbnRyaWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9mcmFtZUJ1ZmZl
ckNhY2hlW2ldLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKLSAgICB9
CisKICAgICAvLyBDQVVUSU9OOiBXZSBtdXN0IG5vdCByZXNpemUgbV9mcmFtZUJ1ZmZlckNhY2hl
IGFnYWluIGFmdGVyIHRoaXMsIGFzCiAgICAgLy8gZGVjb2RlQXRJbmRleCgpIG1heSBnaXZlIGEg
Qk1QSW1hZ2VSZWFkZXIgYSBwb2ludGVyIHRvIG9uZSBvZiB0aGUKICAgICAvLyBlbnRyaWVzLgpA
QCAtMTE2LDcgKzExNSw3IEBAIEltYWdlRnJhbWUqIElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZm
ZXJBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBJbWFnZUZy
YW1lKiBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKLSAgICBpZiAoYnVmZmVy
LT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgIGlmICghYnVmZmVy
LT5pc0NvbXBsZXRlKCkpCiAgICAgICAgIGRlY29kZShpbmRleCwgZmFsc2UpOwogICAgIHJldHVy
biBidWZmZXI7CiB9CkBAIC0xNzksNyArMTc4LDcgQEAgdm9pZCBJQ09JbWFnZURlY29kZXI6OmRl
Y29kZShzaXplX3QgaW5kZXgsIGJvb2wgb25seVNpemUpCiAgICAgLy8gSWYgd2UncmUgZG9uZSBk
ZWNvZGluZyB0aGlzIGZyYW1lLCB3ZSBkb24ndCBuZWVkIHRoZSBCTVBJbWFnZVJlYWRlciBvcgog
ICAgIC8vIFBOR0ltYWdlRGVjb2RlciBhbnltb3JlLiAgKElmIHdlIGZhaWxlZCwgdGhlc2UgaGF2
ZSBhbHJlYWR5IGJlZW4KICAgICAvLyBjbGVhcmVkLikKLSAgICBlbHNlIGlmICgobV9mcmFtZUJ1
ZmZlckNhY2hlLnNpemUoKSA+IGluZGV4KSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XS5z
dGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKSkgeworICAgIGVsc2UgaWYgKCht
X2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpID4gaW5kZXgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGVb
aW5kZXhdLmlzQ29tcGxldGUoKSkpIHsKICAgICAgICAgbV9ibXBSZWFkZXJzW2luZGV4XSA9IG51
bGxwdHI7CiAgICAgICAgIG1fcG5nRGVjb2RlcnNbaW5kZXhdID0gbnVsbHB0cjsKICAgICB9CkBA
IC0yMjAsNyArMjE5LDcgQEAgYm9vbCBJQ09JbWFnZURlY29kZXI6OmRlY29kZUF0SW5kZXgoc2l6
ZV90IGluZGV4KQogCiAgICAgaWYgKCFtX3BuZ0RlY29kZXJzW2luZGV4XSkgewogICAgICAgICBt
X3BuZ0RlY29kZXJzW2luZGV4XSA9IHN0ZDo6bWFrZV91bmlxdWU8Ci0gICAgICAgICAgICBQTkdJ
bWFnZURlY29kZXI+KG1fcHJlbXVsdGlwbHlBbHBoYSA/IEltYWdlU291cmNlOjpBbHBoYVByZW11
bHRpcGxpZWQgOiBJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLAorICAgICAgICAg
ICAgUE5HSW1hZ2VEZWNvZGVyPihwcmVtdWx0aXBseUFscGhhKCkgPyBJbWFnZVNvdXJjZTo6QWxw
aGFQcmVtdWx0aXBsaWVkIDogSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwKICAg
ICAgICAgICAgICAgICBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8gSW1hZ2VTb3VyY2U6
OkdhbW1hQW5kQ29sb3JQcm9maWxlSWdub3JlZCA6IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9y
UHJvZmlsZUFwcGxpZWQpOwogICAgICAgICBzZXREYXRhRm9yUE5HRGVjb2RlckF0SW5kZXgoaW5k
ZXgpOwogICAgIH0KQEAgLTI3OSw3ICsyNzgsNyBAQCBib29sIElDT0ltYWdlRGVjb2Rlcjo6cHJv
Y2Vzc0RpcmVjdG9yeUVudHJpZXMoKQogICAgIGNvbnN0IEljb25EaXJlY3RvcnlFbnRyeSYgZGly
RW50cnkgPSBtX2RpckVudHJpZXMuZmlyc3QoKTsKICAgICAvLyBUZWNobmljYWxseSwgdGhpcyBu
ZXh0IGNhbGwgc2hvdWxkbid0IGJlIGFibGUgdG8gZmFpbCwgc2luY2UgdGhlIHdpZHRoCiAgICAg
Ly8gYW5kIGhlaWdodCBoZXJlIGFyZSBlYWNoIDw9IDI1NiwgYW5kIHxtX2ZyYW1lU2l6ZXwgaXMg
ZW1wdHkuCi0gICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXplLndpZHRoKCksIGRpckVu
dHJ5Lm1fc2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXpl
KTsKIH0KIAogSUNPSW1hZ2VEZWNvZGVyOjpJY29uRGlyZWN0b3J5RW50cnkgSUNPSW1hZ2VEZWNv
ZGVyOjpyZWFkRGlyZWN0b3J5RW50cnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCmluZGV4IDU4
MGM2N2E4ODNhNDBiNmU1NDIwZjY1YWUzNDQ4ODQ1NzQxOTM4ZWMuLmQzM2QwNThhMTU5NjA3ZGY4
OTM5Y2VhMWNkN2E2ZjMxNDRiNzIyZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgKQEAgLTQ5
LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGlzU2l6ZUF2YWls
YWJsZSgpIG92ZXJyaWRlOwogICAgICAgICBJbnRTaXplIHNpemUoKSBvdmVycmlkZTsKICAgICAg
ICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCkgb3Zl
cnJpZGU7Ci0gICAgICAgIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVp
Z2h0KSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVy
cmlkZTsKICAgICAgICAgc2l6ZV90IGZyYW1lQ291bnQoKSBvdmVycmlkZTsKICAgICAgICAgSW1h
Z2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkgb3ZlcnJpZGU7CiAgICAgICAgIC8v
IENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgYWxsIHJlYWRlcnMgYW5kIGRlY29kZXJzLiAg
QmUgY2FyZWZ1bCB0bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggZWU2NmFj
MTRkNGJlMDdjYTlhZmZiMmEzYWZmODllYmZhNjJmYjEyZS4uYzE3NDAxNjBhMTI0OTU0OWFhZGIw
YTljNDAyYzhkN2U5OGZiOTVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCkBA
IC0xOTYsMzYgKzE5Niw2IEBAIHN0YXRpYyBJbWFnZU9yaWVudGF0aW9uIHJlYWRJbWFnZU9yaWVu
dGF0aW9uKGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8pCiAgICAgcmV0dXJuIEltYWdlT3Jp
ZW50YXRpb24oKTsKIH0KIAotc3RhdGljIENvbG9yUHJvZmlsZSByZWFkQ29sb3JQcm9maWxlKGpw
ZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8pCi17Ci0jaWYgVVNFKElDQ0pQRUcpCi0gICAgSk9D
VEVUKiBwcm9maWxlOwotICAgIHVuc2lnbmVkIGludCBwcm9maWxlTGVuZ3RoOwotCi0gICAgaWYg
KCFyZWFkX2ljY19wcm9maWxlKGluZm8sICZwcm9maWxlLCAmcHJvZmlsZUxlbmd0aCkpCi0gICAg
ICAgIHJldHVybiBDb2xvclByb2ZpbGUoKTsKLQotICAgIC8vIE9ubHkgYWNjZXB0IFJHQiBjb2xv
ciBwcm9maWxlcyBmcm9tIGlucHV0IGNsYXNzIGRldmljZXMuCi0gICAgYm9vbCBpZ25vcmVQcm9m
aWxlID0gZmFsc2U7Ci0gICAgY2hhciogcHJvZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNo
YXIqPihwcm9maWxlKTsKLSAgICBpZiAocHJvZmlsZUxlbmd0aCA8IEltYWdlRGVjb2Rlcjo6aWNj
Q29sb3JQcm9maWxlSGVhZGVyTGVuZ3RoKQotICAgICAgICBpZ25vcmVQcm9maWxlID0gdHJ1ZTsK
LSAgICBlbHNlIGlmICghSW1hZ2VEZWNvZGVyOjpyZ2JDb2xvclByb2ZpbGUocHJvZmlsZURhdGEs
IHByb2ZpbGVMZW5ndGgpKQotICAgICAgICBpZ25vcmVQcm9maWxlID0gdHJ1ZTsKLSAgICBlbHNl
IGlmICghSW1hZ2VEZWNvZGVyOjppbnB1dERldmljZUNvbG9yUHJvZmlsZShwcm9maWxlRGF0YSwg
cHJvZmlsZUxlbmd0aCkpCi0gICAgICAgIGlnbm9yZVByb2ZpbGUgPSB0cnVlOwotCi0gICAgQ29s
b3JQcm9maWxlIGNvbG9yUHJvZmlsZTsKLSAgICBpZiAoIWlnbm9yZVByb2ZpbGUpCi0gICAgICAg
IGNvbG9yUHJvZmlsZS5hcHBlbmQocHJvZmlsZURhdGEsIHByb2ZpbGVMZW5ndGgpOwotICAgIGZy
ZWUocHJvZmlsZSk7Ci0gICAgcmV0dXJuIGNvbG9yUHJvZmlsZTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGluZm8pOwotICAgIHJldHVybiBDb2xvclByb2ZpbGUoKTsKLSNlbmRpZgotfQotCiBj
bGFzcyBKUEVHSW1hZ2VSZWFkZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgpAQCAtMzUyLDcgKzMyMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fc3RhdGUgPSBK
UEVHX1NUQVJUX0RFQ09NUFJFU1M7CiAKICAgICAgICAgICAgIC8vIFdlIGNhbiBmaWxsIGluIHRo
ZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZhaWxhYmxlLgotICAgICAgICAgICAgaWYg
KCFtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVp
Z2h0KSkKKyAgICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5zZXRTaXplKEludFNpemUobV9pbmZv
LmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX2RlY29kZXItPnNldE9yaWVudGF0aW9uKHJlYWRJ
bWFnZU9yaWVudGF0aW9uKGluZm8oKSkpOwpAQCAtMzYzLDEzICszMzMsNiBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBpZiAobV9kZWNvZGVyLT53aWxsRG93blNhbXBsZSgpICYmIHR1cmJvU3dpenps
ZWQobV9pbmZvLm91dF9jb2xvcl9zcGFjZSkpCiAgICAgICAgICAgICAgICAgbV9pbmZvLm91dF9j
b2xvcl9zcGFjZSA9IEpDU19SR0I7CiAjZW5kaWYKLSAgICAgICAgICAgIC8vIEFsbG93IGNvbG9y
IG1hbmFnZW1lbnQgb2YgdGhlIGRlY29kZWQgUkdCQSBwaXhlbHMgaWYgcG9zc2libGUuCi0gICAg
ICAgICAgICBpZiAoIW1fZGVjb2Rlci0+aWdub3Jlc0dhbW1hQW5kQ29sb3JQcm9maWxlKCkpIHsK
LSAgICAgICAgICAgICAgICBDb2xvclByb2ZpbGUgcmdiSW5wdXREZXZpY2VDb2xvclByb2ZpbGUg
PSByZWFkQ29sb3JQcm9maWxlKGluZm8oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZ2JJbnB1
dERldmljZUNvbG9yUHJvZmlsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZGVj
b2Rlci0+c2V0Q29sb3JQcm9maWxlKHJnYklucHV0RGV2aWNlQ29sb3JQcm9maWxlKTsKLSAgICAg
ICAgICAgIH0KLQogICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb2NhdGUgYSBnaWFudCBhbmQgc3Vw
ZXJmbHVvdXMgbWVtb3J5IGJ1ZmZlciB3aGVuIHRoZQogICAgICAgICAgICAgLy8gaW1hZ2UgaXMg
YSBzZXF1ZW50aWFsIEpQRUcuCiAgICAgICAgICAgICBtX2luZm8uYnVmZmVyZWRfaW1hZ2UgPSBq
cGVnX2hhc19tdWx0aXBsZV9zY2FucygmbV9pbmZvKTsKQEAgLTU1Niw5ICs1MTksOSBAQCBib29s
IEpQRUdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJuIEltYWdlRGVj
b2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKLWJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0
U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9vbCBKUEVHSW1hZ2VEZWNv
ZGVyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKCFJbWFnZURlY29k
ZXI6OnNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAgaWYgKCFJbWFnZURlY29kZXI6OnNldFNp
emUoc2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHByZXBhcmVTY2FsZURhdGFJ
Zk5lY2Vzc2FyeSgpOwpAQCAtNTcwLDEzICs1MzMsMTEgQEAgSW1hZ2VGcmFtZSogSlBFR0ltYWdl
RGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICBpZiAoaW5kZXgp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5
KCkpIHsKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKICAgICAgICAgbV9m
cmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBd
LnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKLSAgICB9CiAKICAgICBJ
bWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKLSAgICBpZiAoZnJhbWUu
c3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkKKyAgICBpZiAoIWZyYW1lLmlz
Q29tcGxldGUoKSkKICAgICAgICAgZGVjb2RlKGZhbHNlKTsKICAgICByZXR1cm4gJmZyYW1lOwog
fQpAQCAtNTg4LDEzICs1NDksMTMgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQo
KQogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlPgotdm9pZCBzZXRQaXhl
bChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJl
c3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKK3ZvaWQgc2V0UGl4ZWwoSW1hZ2VG
cmFtZSYgYnVmZmVyLCBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzLCBKU0FNUEFSUkFZIHNhbXBsZXMs
IGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBMRSoganNhbXBsZSA9ICpzYW1wbGVzICsgY29sdW1u
ICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMgOiA0KTsKIAogICAgIHN3aXRjaCAoY29sb3JT
cGFjZSkgewogICAgIGNhc2UgSkNTX1JHQjoKLSAgICAgICAgYnVmZmVyLnNldFJHQkEoY3VycmVu
dEFkZHJlc3MsIGpzYW1wbGVbMF0sIGpzYW1wbGVbMV0sIGpzYW1wbGVbMl0sIDB4RkYpOworICAg
ICAgICBidWZmZXIucGl4ZWxzKCktPnNldFJHQkEoY3VycmVudEFkZHJlc3MsIGpzYW1wbGVbMF0s
IGpzYW1wbGVbMV0sIGpzYW1wbGVbMl0sIDB4RkYpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEpDU19DTVlLOgogICAgICAgICAvLyBTb3VyY2UgaXMgJ0ludmVydGVkIENNWUsnLCBvdXRwdXQg
aXMgUkdCLgpAQCAtNjA3LDcgKzU2OCw3IEBAIHZvaWQgc2V0UGl4ZWwoSW1hZ2VGcmFtZSYgYnVm
ZmVyLCBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNzLCBKU0FNUEFSCiAgICAg
ICAgIC8vIEZyb20gQ01ZICgwLi4xKSB0byBSR0IgKDAuLjEpOgogICAgICAgICAvLyBSID0gMSAt
IEMgPT4gMSAtICgxIC0gaUMqaUspID0+IGlDKmlLICBbRyBhbmQgQiBzaW1pbGFyXQogICAgICAg
ICB1bnNpZ25lZCBrID0ganNhbXBsZVszXTsKLSAgICAgICAgYnVmZmVyLnNldFJHQkEoY3VycmVu
dEFkZHJlc3MsIGpzYW1wbGVbMF0gKiBrIC8gMjU1LCBqc2FtcGxlWzFdICogayAvIDI1NSwganNh
bXBsZVsyXSAqIGsgLyAyNTUsIDB4RkYpOworICAgICAgICBidWZmZXIucGl4ZWxzKCktPnNldFJH
QkEoY3VycmVudEFkZHJlc3MsIGpzYW1wbGVbMF0gKiBrIC8gMjU1LCBqc2FtcGxlWzFdICogayAv
IDI1NSwganNhbXBsZVsyXSAqIGsgLyAyNTUsIDB4RkYpOwogICAgICAgICBicmVhazsKICAgICB9
CiB9CkBAIC02MzEsNyArNTkyLDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2Fu
bGluZXMoSW1hZ2VGcmFtZSYgYnVmZmVyKQogICAgICAgICBpZiAoZGVzdFkgPCAwKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50
QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIGRlc3RZKTsKKyAgICAgICAgUkdCQTMyKiBjdXJy
ZW50QWRkcmVzcyA9IGJ1ZmZlci5waXhlbHMoKS0+YXQoMCwgZGVzdFkpOwogICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKICAgICAgICAgICAgIHNldFBpeGVsPGNvbG9y
U3BhY2U+KGJ1ZmZlciwgY3VycmVudEFkZHJlc3MsIHNhbXBsZXMsIGlzU2NhbGVkID8gbV9zY2Fs
ZWRDb2x1bW5zW3hdIDogeCk7CiAgICAgICAgICAgICArK2N1cnJlbnRBZGRyZXNzOwpAQCAtNjUz
LDE3ICs2MTQsMTMgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQog
CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIEltYWdl
RnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKLSAgICBpZiAoYnVmZmVyLnN0
YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFidWZmZXIu
c2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkKKyAg
ICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci5pbml0UGl4ZWxz
KHNjYWxlZFNpemUoKSwgcHJlbXVsdGlwbHlBbHBoYSgpKSkKICAgICAgICAgICAgIHJldHVybiBz
ZXRGYWlsZWQoKTsKLSAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBh
cnRpYWwpOworICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkRlY29kaW5nU3Rh
dHVzOjpQYXJ0aWFsKTsKICAgICAgICAgLy8gVGhlIGJ1ZmZlciBpcyB0cmFuc3BhcmVudCBvdXRz
aWRlIHRoZSBkZWNvZGVkIGFyZWEgd2hpbGUgdGhlIGltYWdlIGlzCiAgICAgICAgIC8vIGxvYWRp
bmcuIFRoZSBjb21wbGV0ZWQgaW1hZ2Ugd2lsbCBiZSBtYXJrZWQgZnVsbHkgb3BhcXVlIGluIGpw
ZWdDb21wbGV0ZSgpLgogICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7Ci0gICAgICAg
IGJ1ZmZlci5zZXRDb2xvclByb2ZpbGUobV9jb2xvclByb2ZpbGUpOwotCi0gICAgICAgIC8vIEZv
ciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAg
ICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkp
KTsKICAgICB9CiAKICAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvID0gbV9yZWFkZXIt
PmluZm8oKTsKQEAgLTY3MSw3ICs2MjgsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1
dFNjYW5saW5lcygpCiAjaWYgZGVmaW5lZChUVVJCT19KUEVHX1JHQl9TV0laWkxFKQogICAgIGlm
ICghbV9zY2FsZWQgJiYgdHVyYm9Td2l6emxlZChpbmZvLT5vdXRfY29sb3Jfc3BhY2UpKSB7CiAg
ICAgICAgIHdoaWxlIChpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPCBpbmZvLT5vdXRwdXRfaGVpZ2h0
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3cgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGNoYXIqPihidWZmZXIuZ2V0QWRkcigwLCBpbmZvLT5vdXRwdXRfc2NhbmxpbmUpKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KGJ1ZmZlci5waXhlbHMoKS0+YXQoMCwgaW5mby0+b3V0cHV0X3NjYW5saW5lKSk7
CiAgICAgICAgICAgICBpZiAoanBlZ19yZWFkX3NjYW5saW5lcyhpbmZvLCAmcm93LCAxKSAhPSAx
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KQEAgLTcwNCw3ICs2
NjEsNyBAQCB2b2lkIEpQRUdJbWFnZURlY29kZXI6OmpwZWdDb21wbGV0ZSgpCiAgICAgLy8gZW1w
dHkuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAg
IGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7Ci0gICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZy
YW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkRl
Y29kaW5nU3RhdHVzOjpDb21wbGV0ZSk7CiB9CiAKIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6ZGVj
b2RlKGJvb2wgb25seVNpemUpCkBAIC03MjEsNyArNjc4LDcgQEAgdm9pZCBKUEVHSW1hZ2VEZWNv
ZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSkKICAgICAgICAgc2V0RmFpbGVkKCk7CiAgICAgLy8g
SWYgd2UncmUgZG9uZSBkZWNvZGluZyB0aGUgaW1hZ2UsIHdlIGRvbid0IG5lZWQgdGhlIEpQRUdJ
bWFnZVJlYWRlcgogICAgIC8vIGFueW1vcmUuICAoSWYgd2UgZmFpbGVkLCB8bV9yZWFkZXJ8IGhh
cyBhbHJlYWR5IGJlZW4gY2xlYXJlZC4pCi0gICAgZWxzZSBpZiAoIW1fZnJhbWVCdWZmZXJDYWNo
ZS5pc0VtcHR5KCkgJiYgKG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBJbWFnZUZy
YW1lOjpGcmFtZUNvbXBsZXRlKSkKKyAgICBlbHNlIGlmICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlz
RW1wdHkoKSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlWzBdLmlzQ29tcGxldGUoKSkpCiAgICAgICAg
IG1fcmVhZGVyID0gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAppbmRl
eCA2YzFmYzA0MjczMjIwMzc1YmM2YTI1ZWMxOThmOGM4YTUxMDE0ODZjLi5mYzIzZmJkOTYzN2I1
M2FlZTY2NTMzYjZhYWI0ZjdiMjY4ZGMwZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIu
aApAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEltYWdl
RGVjb2RlcgogICAgICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiAianBnIjsgfQogICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIG92ZXJy
aWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJp
ZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
IG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIHxtX3Jl
YWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBkZWxldGVk
IG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQpAQCAtNjYs
NyArNjYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgb3V0cHV0U2Nhbmxp
bmVzKCk7CiAgICAgICAgIHZvaWQganBlZ0NvbXBsZXRlKCk7CiAKLSAgICAgICAgdm9pZCBzZXRD
b2xvclByb2ZpbGUoY29uc3QgQ29sb3JQcm9maWxlJiBjb2xvclByb2ZpbGUpIHsgbV9jb2xvclBy
b2ZpbGUgPSBjb2xvclByb2ZpbGU7IH0KICAgICAgICAgdm9pZCBzZXRPcmllbnRhdGlvbihJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsg
fQogCiAgICAgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggZTY0NGE3
MTEwZWZjYjU0MGQ4OWNlMWJhODExMDBiYzQ4MjNiMThmMi4uZjU3ZjAxNjRkZGU4YzZhY2I4OWE4
NGJiNmVkYmZhMTM0NTZiNzkzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTIz
NSw5ICsyMzUsOSBAQCBib29sIFBOR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAotYm9vbCBQTkdJ
bWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK2Jv
b2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAg
aWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAgaWYgKCFJbWFn
ZURlY29kZXI6OnNldFNpemUoc2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHBy
ZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMjU3LDEzICsyNTcsMTEgQEAgSW1hZ2VG
cmFtZSogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogCi0gICAgaWYgKG1fZnJhbWVCdWZmZXJD
YWNoZS5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkK
ICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKLSAgICAgICAgbV9mcmFtZUJ1
ZmZlckNhY2hlWzBdLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKLSAg
ICB9CiAKICAgICBJbWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07
Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCisg
ICAgaWYgKCFmcmFtZS5pc0NvbXBsZXRlKCkpCiAgICAgICAgIGRlY29kZShmYWxzZSwgaW5kZXgp
OwogICAgIHJldHVybiAmZnJhbWU7CiB9CkBAIC0yNzYsMzcgKzI3NCw2IEBAIGJvb2wgUE5HSW1h
Z2VEZWNvZGVyOjpzZXRGYWlsZWQoKQogICAgIHJldHVybiBJbWFnZURlY29kZXI6OnNldEZhaWxl
ZCgpOwogfQogCi1zdGF0aWMgdm9pZCByZWFkQ29sb3JQcm9maWxlKHBuZ19zdHJ1Y3RwIHBuZywg
cG5nX2luZm9wIGluZm8sIENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxlKQotewotICAgIEFTU0VS
VChjb2xvclByb2ZpbGUuaXNFbXB0eSgpKTsKLQotI2lmZGVmIFBOR19pQ0NQX1NVUFBPUlRFRAot
ICAgIGNoYXIqIHByb2ZpbGVOYW1lOwotICAgIGludCBjb21wcmVzc2lvblR5cGU7Ci0jaWYgKFBO
R19MSUJQTkdfVkVSIDwgMTA1MDApCi0gICAgcG5nX2NoYXJwIHByb2ZpbGU7Ci0jZWxzZQotICAg
IHBuZ19ieXRlcCBwcm9maWxlOwotI2VuZGlmCi0gICAgcG5nX3VpbnRfMzIgcHJvZmlsZUxlbmd0
aDsKLSAgICBpZiAoIXBuZ19nZXRfaUNDUChwbmcsIGluZm8sICZwcm9maWxlTmFtZSwgJmNvbXBy
ZXNzaW9uVHlwZSwgJnByb2ZpbGUsICZwcm9maWxlTGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gT25seSBhY2NlcHQgUkdCIGNvbG9yIHByb2ZpbGVzIGZyb20gaW5wdXQgY2xhc3Mg
ZGV2aWNlcy4KLSAgICBib29sIGlnbm9yZVByb2ZpbGUgPSBmYWxzZTsKLSAgICBjaGFyKiBwcm9m
aWxlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHByb2ZpbGUpOwotICAgIGlmIChwcm9m
aWxlTGVuZ3RoIDwgSW1hZ2VEZWNvZGVyOjppY2NDb2xvclByb2ZpbGVIZWFkZXJMZW5ndGgpCi0g
ICAgICAgIGlnbm9yZVByb2ZpbGUgPSB0cnVlOwotICAgIGVsc2UgaWYgKCFJbWFnZURlY29kZXI6
OnJnYkNvbG9yUHJvZmlsZShwcm9maWxlRGF0YSwgcHJvZmlsZUxlbmd0aCkpCi0gICAgICAgIGln
bm9yZVByb2ZpbGUgPSB0cnVlOwotICAgIGVsc2UgaWYgKCFJbWFnZURlY29kZXI6OmlucHV0RGV2
aWNlQ29sb3JQcm9maWxlKHByb2ZpbGVEYXRhLCBwcm9maWxlTGVuZ3RoKSkKLSAgICAgICAgaWdu
b3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICBpZiAoIWlnbm9yZVByb2ZpbGUpCi0gICAgICAgIGNv
bG9yUHJvZmlsZS5hcHBlbmQocHJvZmlsZURhdGEsIHByb2ZpbGVMZW5ndGgpOwotI2VuZGlmCi19
Ci0KIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogewogICAgIHBuZ19z
dHJ1Y3RwIHBuZyA9IG1fcmVhZGVyLT5wbmdQdHIoKTsKQEAgLTMyNiw3ICsyOTMsNyBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICAvLyB3aWxsIGNlYXNlIHRv
IGV4aXN0LiAgTm90ZSB0aGF0IHdlJ2xsIHN0aWxsIHByb3Blcmx5IHNldCB0aGUgZmFpbHVyZSBm
bGFnCiAgICAgLy8gaW4gdGhpcyBjYXNlIGFzIHNvb24gYXMgd2UgbG9uZ2ptcCgpLgogICAgIG1f
ZG9Ob3RoaW5nT25GYWlsdXJlID0gdHJ1ZTsKLSAgICBib29sIHJlc3VsdCA9IHNldFNpemUod2lk
dGgsIGhlaWdodCk7CisgICAgYm9vbCByZXN1bHQgPSBzZXRTaXplKEludFNpemUod2lkdGgsIGhl
aWdodCkpOwogICAgIG1fZG9Ob3RoaW5nT25GYWlsdXJlID0gZmFsc2U7CiAgICAgaWYgKCFyZXN1
bHQpIHsKICAgICAgICAgbG9uZ2ptcChKTVBCVUYocG5nKSwgMSk7CkBAIC00MDUsMTYgKzM3Miw2
IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogICAgIGlmIChjb2xv
clR5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWSB8fCBjb2xvclR5cGUgPT0gUE5HX0NPTE9SX1RZ
UEVfR1JBWV9BTFBIQSkKICAgICAgICAgcG5nX3NldF9ncmF5X3RvX3JnYihwbmcpOwogCi0gICAg
aWYgKChjb2xvclR5cGUgJiBQTkdfQ09MT1JfTUFTS19DT0xPUikgJiYgIW1faWdub3JlR2FtbWFB
bmRDb2xvclByb2ZpbGUpIHsKLSAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGNvbG9yIHByb2Zp
bGVzIGZvciBjb2xvciBQQUxFVFRFIGFuZCBSR0JbQV0gUE5HLiBTdXBwb3J0aW5nCi0gICAgICAg
IC8vIGNvbG9yIHByb2ZpbGVzIGZvciBncmF5LXNjYWxlIGltYWdlcyBpcyBzbGlnaHRseSB0cmlj
a3ksIGF0IGxlYXN0IHVzaW5nIHRoZQotICAgICAgICAvLyBDb3JlR3JhcGhpY3MgSUNDIGxpYnJh
cnksIGJlY2F1c2Ugd2UgZXhwYW5kIGdyYXktc2NhbGUgaW1hZ2VzIHRvIFJHQiBidXQgd2UKLSAg
ICAgICAgLy8gZG8gbm90IHNpbWlsYXJseSB0cmFuc2Zvcm0gdGhlIGNvbG9yIHByb2ZpbGUuIFdl
J2QgZWl0aGVyIG5lZWQgdG8gdHJhbnNmb3JtCi0gICAgICAgIC8vIHRoZSBjb2xvciBwcm9maWxl
IG9yIHdlJ2QgbmVlZCB0byBkZWNvZGUgaW50byBhIGdyYXktc2NhbGUgaW1hZ2UgYnVmZmVyIGFu
ZAotICAgICAgICAvLyBoYW5kIHRoYXQgdG8gQ29yZUdyYXBoaWNzLgotICAgICAgICByZWFkQ29s
b3JQcm9maWxlKHBuZywgaW5mbywgbV9jb2xvclByb2ZpbGUpOwotICAgIH0KLQogICAgIC8vIERl
YWwgd2l0aCBnYW1tYSBhbmQga2VlcCBpdCB1bmRlciBvdXIgY29udHJvbC4KICAgICBkb3VibGUg
Z2FtbWE7CiAgICAgaWYgKCFtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlICYmIHBuZ19nZXRf
Z0FNQShwbmcsIGluZm8sICZnYW1tYSkpIHsKQEAgLTQ1MiwxOSArNDA5LDE5IEBAIHZvaWQgUE5H
SW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogICAgIH0KIH0KIAotc3RhdGljIGlubGlu
ZSB2b2lkIHNldFBpeGVsUkdCKEltYWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdCwgcG5nX2J5dGVw
IHBpeGVsKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCKFJHQkEzMiogZGVzdCwgcG5n
X2J5dGVwIHBpeGVsKQogewogICAgICpkZXN0ID0gMHhGRjAwMDAwMFUgfCBwaXhlbFswXSA8PCAx
NiB8IHBpeGVsWzFdIDw8IDggfCBwaXhlbFsyXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNl
dFBpeGVsUkdCQShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwg
dW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBz
ZXRQaXhlbFJHQkEoUkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXIm
IG5vblRyaXZpYWxBbHBoYU1hc2spCiB7CiAgICAgdW5zaWduZWQgY2hhciBhID0gcGl4ZWxbM107
CiAgICAgKmRlc3QgPSBhIDw8IDI0IHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4IHwg
cGl4ZWxbMl07CiAgICAgbm9uVHJpdmlhbEFscGhhTWFzayB8PSAoMjU1IC0gYSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKEltYWdlRnJhbWU6OlBp
eGVsRGF0YSogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFs
QWxwaGFNYXNrKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEo
UkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxB
bHBoYU1hc2spCiB7CiAgICAgdW5zaWduZWQgY2hhciBhID0gcGl4ZWxbM107CiAgICAgdW5zaWdu
ZWQgY2hhciByID0gZmFzdERpdmlkZUJ5MjU1KHBpeGVsWzBdICogYSk7CkBAIC00ODYsOSArNDQz
LDkgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiBy
b3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAg
ICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbbV9jdXJyZW50RnJhbWVd
OwotICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgewor
ICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKSB7CiAgICAgICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IG1f
cmVhZGVyLT5wbmdQdHIoKTsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXpl
KCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkgeworICAgICAgICBpZiAoIWJ1ZmZl
ci5pbml0UGl4ZWxzKHNjYWxlZFNpemUoKSwgcHJlbXVsdGlwbHlBbHBoYSgpKSkgewogICAgICAg
ICAgICAgbG9uZ2ptcChKTVBCVUYocG5nKSwgMSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTUwNCwxNyArNDYxLDEzIEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFp
bGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFt
ZTo6RnJhbWVQYXJ0aWFsKTsKKyAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpE
ZWNvZGluZ1N0YXR1czo6UGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxz
ZSk7Ci0gICAgICAgIGJ1ZmZlci5zZXRDb2xvclByb2ZpbGUobV9jb2xvclByb2ZpbGUpOwogCiAj
aWYgRU5BQkxFKEFQTkcpCiAgICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSkKICAgICAgICAgICAg
IGluaXRGcmFtZUJ1ZmZlcihtX2N1cnJlbnRGcmFtZSk7Ci0gICAgICAgIGVsc2UKICNlbmRpZgot
ICAgICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGlt
YWdlLgotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICAvKiBsaWJwbmcgY29tbWVudHMgKGhlcmUgdG8g
ZXhwbGFpbiB3aGF0IGZvbGxvd3MpLgpAQCAtNTczLDcgKzUyNiw3IEBAIHZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCBy
b3dJbmRleCwKICAgICB9CiAKICAgICAvLyBXcml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRv
IHRoZSBmcmFtZSBidWZmZXIuCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0g
YnVmZmVyLmdldEFkZHIoMCwgeSk7CisgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLnBpeGVs
cygpLT5hdCgwLCB5KTsKICAgICBpbnQgd2lkdGggPSBzY2FsZWRTaXplKCkud2lkdGgoKTsKICAg
ICB1bnNpZ25lZCBjaGFyIG5vblRyaXZpYWxBbHBoYU1hc2sgPSAwOwogCkBAIC01ODIsNyArNTM1
LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiBy
b3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyArK3gpIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIG1fc2Nh
bGVkQ29sdW1uc1t4XSAqIGNvbG9yQ2hhbm5lbHM7CiAgICAgICAgICAgICB1bnNpZ25lZCBhbHBo
YSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7Ci0gICAgICAgICAgICBidWZmZXIuc2V0UkdC
QShhZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKKyAgICAg
ICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdCQShhZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhl
bFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKICAgICAgICAgICAgIG5vblRyaXZpYWxBbHBoYU1hc2sg
fD0gKDI1NSAtIGFscGhhKTsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAtNTkwLDcgKzU0Myw3
IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93
QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICB7CiAgICAgICAgIHBuZ19ieXRlcCBwaXhl
bCA9IHJvdzsKICAgICAgICAgaWYgKGhhc0FscGhhKSB7Ci0gICAgICAgICAgICBpZiAoYnVmZmVy
LnByZW11bHRpcGx5QWxwaGEoKSkgeworICAgICAgICAgICAgaWYgKHByZW11bHRpcGx5QWxwaGEo
KSkgewogICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCwgcGl4
ZWwgKz0gNCkKICAgICAgICAgICAgICAgICAgICAgc2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShh
ZGRyZXNzKyssIHBpeGVsLCBub25Ucml2aWFsQWxwaGFNYXNrKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CkBAIC02MTksNyArNTcyLDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnBuZ0NvbXBsZXRl
KCkKICAgICB9CiAjZW5kaWYKICAgICBpZiAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkp
Ci0gICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpLnNldFN0YXR1cyhJbWFnZUZyYW1l
OjpGcmFtZUNvbXBsZXRlKTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuc2V0
U3RhdHVzKEltYWdlRnJhbWU6OkRlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSk7CiB9CiAKIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSwgdW5zaWduZWQgaGFsdEF0RnJh
bWUpCkBAIC02NjMsOCArNjE2LDYgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJlYWRDaHVua3Mo
cG5nX3Vua25vd25fY2h1bmtwIGNodW5rKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUobV9mcmFtZUNvdW50KTsKLSAgICAgICAgZm9yIChh
dXRvJiBpbWFnZUZyYW1lIDogbV9mcmFtZUJ1ZmZlckNhY2hlKQotICAgICAgICAgICAgaW1hZ2VG
cmFtZS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgfSBlbHNl
IGlmICghbWVtY21wKGNodW5rLT5uYW1lLCAiZmNUTCIsIDQpICYmIGNodW5rLT5zaXplID09IDI2
KSB7CiAgICAgICAgIGlmIChtX2hhc0luZm8gJiYgIW1faXNBbmltYXRlZCkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTcwNiwxMCArNjU3LDggQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJlYWRD
aHVua3MocG5nX3Vua25vd25fY2h1bmtwIGNodW5rKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2Zy
YW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwotICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hl
WzBdLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKLSAgICAgICAgfQog
CiAgICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSA8IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkp
IHsKICAgICAgICAgICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtt
X2N1cnJlbnRGcmFtZV07CkBAIC03MjAsMTEgKzY2OSwxMSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rl
cjo6cmVhZENodW5rcyhwbmdfdW5rbm93bl9jaHVua3AgY2h1bmspCiAgICAgICAgICAgICAgICAg
YnVmZmVyLnNldER1cmF0aW9uKG1fZGVsYXlOdW1lcmF0b3IgKiAxMDAwIC8gbV9kZWxheURlbm9t
aW5hdG9yKTsKIAogICAgICAgICAgICAgaWYgKG1fZGlzcG9zZSA9PSAyKQotICAgICAgICAgICAg
ICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRl
UHJldmlvdXMpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJbWFn
ZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlUHJldmlvdXMpOwogICAgICAgICAgICAg
ZWxzZSBpZiAobV9kaXNwb3NlID09IDEpCi0gICAgICAgICAgICAgICAgYnVmZmVyLnNldERpc3Bv
c2FsTWV0aG9kKEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yKTsKKyAgICAgICAg
ICAgICAgICBidWZmZXIuc2V0RGlzcG9zYWxNZXRob2QoSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRo
b2Q6Ok92ZXJ3cml0ZUJnY29sb3IpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJbWFnZUZyYW1lOjpEaXNwb3NlS2VlcCk7CisgICAg
ICAgICAgICAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKEltYWdlRnJhbWU6OkRpc3Bvc2Fs
TWV0aG9kOjpLZWVwKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fZnJhbWVJbmZvID0gdHJ1ZTsK
QEAgLTgwNywxNiArNzU2LDE2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVm
ZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiAgICAgY29uc3QgVmVjdG9yPEltYWdl
RnJhbWU+OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJl
Zm9yZUZyYW1lKTsKIAogICAgIFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaShlbmQpOwot
ICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSkgJiYgKChpLT5zdGF0
dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB8fCAoaS0+ZGlzcG9zYWxNZXRob2QoKSA9
PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKTsgLS1pKSB7Ci0gICAgICAg
IGlmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkgJiYgKGkgIT0g
ZW5kKSkKLSAgICAgICAgICAgIGktPmNsZWFyUGl4ZWxEYXRhKCk7CisgICAgZm9yICg7IChpICE9
IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoKGktPmlzRW1wdHkoKSkgfHwgKGktPmRp
c3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZVBy
ZXZpb3VzKSk7IC0taSkgeworICAgICAgICBpZiAoKGktPmlzQ29tcGxldGUoKSkgJiYgKGkgIT0g
ZW5kKSkKKyAgICAgICAgICAgIGktPmNsZWFyUGl4ZWxzKCk7CiAgICAgfQogCiAgICAgLy8gTm93
IHxpfCBob2xkcyB0aGUgbGFzdCBmcmFtZSB3ZSBuZWVkIHRvIHByZXNlcnZlOyBjbGVhciBwcmlv
ciBmcmFtZXMuCiAgICAgZm9yIChWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGoobV9mcmFt
ZUJ1ZmZlckNhY2hlLmJlZ2luKCkpOyBqICE9IGk7ICsraikgewotICAgICAgICBBU1NFUlQoai0+
c3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKLSAgICAgICAgaWYgKGotPnN0
YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCi0gICAgICAgICAgICBqLT5jbGVhclBp
eGVsRGF0YSgpOworICAgICAgICBBU1NFUlQoIWlzUGFydGlhbCgpKTsKKyAgICAgICAgaWYgKCFq
LT5pc0VtcHR5KCkpCisgICAgICAgICAgICBqLT5jbGVhclBpeGVscygpOwogICAgIH0KIH0KIApA
QCAtODM0LDQ1ICs3ODMsNDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZl
cihzaXplX3QgZnJhbWVJbmRleCkKICAgICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChzaXplKCku
aGVpZ2h0KCkgLSBtX3lPZmZzZXQpOwogCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFt
ZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxl
ZFgoZnJhbWVSZWN0LngoKSk7Ci0gICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJh
bWVSZWN0Lm1heFgoKSwgbGVmdCk7Ci0gICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZy
YW1lUmVjdC55KCkpOwotICAgIGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJl
Y3QubWF4WSgpLCB0b3ApOwotICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0
KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKIAogICAgIC8vIFRoZSBz
dGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBmcmFt
ZSdzCiAgICAgLy8gZGlzcG9zYWwgbWV0aG9kLgogICAgIC8vCi0gICAgLy8gRnJhbWVzIHRoYXQg
dXNlIHRoZSBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgbWV0aG9kIGFyZSBlZmZlY3RpdmVseQor
ICAgIC8vIEZyYW1lcyB0aGF0IHVzZSB0aGUgRGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZVByZXZp
b3VzIG1ldGhvZCBhcmUgZWZmZWN0aXZlbHkKICAgICAvLyBuby1vcHMgaW4gdGVybXMgb2YgY2hh
bmdpbmcgdGhlIHN0YXJ0aW5nIHN0YXRlIG9mIGEgZnJhbWUgY29tcGFyZWQgdG8KICAgICAvLyB0
aGUgc3RhcnRpbmcgc3RhdGUgb2YgdGhlIHByZXZpb3VzIGZyYW1lLCBzbyBza2lwIG92ZXIgdGhl
bS4gIChJZiB0aGUKICAgICAvLyBmaXJzdCBmcmFtZSBzcGVjaWZpZXMgdGhpcyBtZXRob2QsIGl0
IHdpbGwgZ2V0IHRyZWF0ZWQgbGlrZQotICAgIC8vIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGJl
bG93IGFuZCByZXNldCB0byBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuKQorICAgIC8vIERpc3Bv
c2FsTWV0aG9kOjpPdmVyd3JpdGVCZ2NvbG9yIGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBsZXRl
bHkgZW1wdHkgaW1hZ2UuKQogICAgIGNvbnN0IEltYWdlRnJhbWUqIHByZXZCdWZmZXIgPSAmbV9m
cmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgSW1hZ2VGcmFtZTo6RnJhbWVEaXNw
b3NhbE1ldGhvZCBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKTsKLSAg
ICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3Nl
T3ZlcndyaXRlUHJldmlvdXMpKSB7CisgICAgSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2QgcHJl
dk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7CisgICAgd2hpbGUgKGZyYW1l
SW5kZXggJiYgKHByZXZNZXRob2QgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok92ZXJ3
cml0ZVByZXZpb3VzKSkgewogICAgICAgICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNo
ZVstLWZyYW1lSW5kZXhdOwogICAgICAgICBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9z
YWxNZXRob2QoKTsKICAgICB9Ci0gICAgQVNTRVJUKHByZXZCdWZmZXItPnN0YXR1cygpID09IElt
YWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgIEFTU0VSVChwcmV2QnVmZmVyLT5pc0NvbXBs
ZXRlKCkpOwogCi0gICAgaWYgKHByZXZNZXRob2QgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZUtlZXAp
IHsKKyAgICBpZiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6S2Vl
cCkgewogICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbGFzdCBmcmFtZSBhcyB0aGUgc3RhcnRpbmcg
c3RhdGUgZm9yIHRoaXMgZnJhbWUuCi0gICAgICAgIGJ1ZmZlci5jb3B5Qml0bWFwRGF0YSgqcHJl
dkJ1ZmZlcik7CisgICAgICAgIGJ1ZmZlci5jb3B5UGl4ZWxzKCpwcmV2QnVmZmVyKTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0
byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRo
ZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgY29uc3QgSW50UmVjdCYgcHJl
dlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBjb25zdCBJ
bnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPnBpeGVscygpLT5yZWN0KCk7CiAgICAgICAg
IGlmICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCks
IHNjYWxlZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJh
bWUsIG9yIGEgZnJhbWUgdGhlIHNpemUgb2YgdGhlIHdob2xlCiAgICAgICAgICAgICAvLyBpbWFn
ZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCi0gICAgICAgICAgICBidWZm
ZXIuemVyb0ZpbGxQaXhlbERhdGEoKTsKKyAgICAgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+Y2xl
YXIoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHBy
ZXZpb3VzIGJ1ZmZlciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFtZS4KLSAgICAgICAgICAgIGJ1
ZmZlci5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcik7Ci0gICAgICAgICAgICBidWZmZXIuemVy
b0ZpbGxGcmFtZVJlY3QocHJldlJlY3QpOworICAgICAgICAgICAgYnVmZmVyLmNvcHlQaXhlbHMo
KnByZXZCdWZmZXIpOworICAgICAgICAgICAgYnVmZmVyLnBpeGVscygpLT5jbGVhclJlY3QocHJl
dlJlY3QpOwogICAgICAgICB9CisgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYSh0cnVlKTsKICAg
ICB9CisgICAgCisgICAgaW50IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgp
KTsKKyAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBs
ZWZ0KTsKKyAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7Cisg
ICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7
CisgICAgYnVmZmVyLnBpeGVscygpLT5zZXRSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAt
IGxlZnQsIGJvdHRvbSAtIHRvcCkpOwogfQogCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSgpCkBAIC04ODEsMTIgKzgzMiwxMiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJh
bWVDb21wbGV0ZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9
IG1fZnJhbWVCdWZmZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07Ci0gICAgYnVmZmVyLnNldFN0YXR1
cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdl
RnJhbWU6OkRlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSk7CiAKICAgICBwbmdfYnl0ZXAgaW50ZXJs
YWNlQnVmZmVyID0gbV9yZWFkZXItPmludGVybGFjZUJ1ZmZlcigpOwogCiAgICAgaWYgKG1fY3Vy
cmVudEZyYW1lICYmIGludGVybGFjZUJ1ZmZlcikgewotICAgICAgICBjb25zdCBJbnRSZWN0JiBy
ZWN0ID0gYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAgIGNvbnN0IEludFJlY3Qm
IHJlY3QgPSBidWZmZXIucGl4ZWxzKCktPnJlY3QoKTsKICAgICAgICAgYm9vbCBoYXNBbHBoYSA9
IG1fcmVhZGVyLT5oYXNBbHBoYSgpOwogICAgICAgICB1bnNpZ25lZCBjb2xvckNoYW5uZWxzID0g
aGFzQWxwaGEgPyA0IDogMzsKICAgICAgICAgYm9vbCBub25Ucml2aWFsQWxwaGEgPSBmYWxzZTsK
QEAgLTg5NiwxNSArODQ3LDE1IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRl
KCkKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IHJlY3QubWF4WSgpIC0gcmVjdC55KCk7ICsreSkgewogICAgICAgICAg
ICAgcG5nX2J5dGVwIHJvdyA9IGludGVybGFjZUJ1ZmZlciArIChtX3NjYWxlZCA/IG1fc2NhbGVk
Um93c1t5XSA6IHkpICogY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpOwotICAgICAgICAg
ICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54
KCksIHkgKyByZWN0LnkoKSk7CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIu
cGl4ZWxzKCktPmF0KHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOwogICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCByZWN0Lm1heFgoKSAtIHJlY3QueCgpOyArK3gpIHsKICAgICAgICAgICAg
ICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3cgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNb
eF0gOiB4KSAqIGNvbG9yQ2hhbm5lbHM7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEg
PSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAgICAgICAgIG5vblRyaXZpYWxB
bHBoYSB8PSBhbHBoYSA8IDI1NTsKICAgICAgICAgICAgICAgICBpZiAoIW1fYmxlbmQpCi0gICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBpeGVs
WzFdLCBwaXhlbFsyXSwgYWxwaGEpOworICAgICAgICAgICAgICAgICAgICBidWZmZXIucGl4ZWxz
KCktPnNldFJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBo
YSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBidWZmZXIub3Zl
clJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+b3ZlclJHQkEoYWRkcmVzcysrLCBw
aXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICNlbHNlCkBAIC05MTIsMjggKzg2MywyOCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXI7
CiAgICAgICAgIGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyArK3ksIHJv
dyArPSBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCkpIHsKICAgICAgICAgICAgIHBuZ19i
eXRlcCBwaXhlbCA9IHJvdzsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRk
cmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKKyAgICAgICAgICAgIFJHQkEzMiog
YWRkcmVzcyA9IGJ1ZmZlci5waXhlbHMoKS0+YXQocmVjdC54KCksIHkpOwogICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7ICsreCwgcGl4ZWwgKz0gY29s
b3JDaGFubmVscykgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gaGFzQWxwaGEg
PyBwaXhlbFszXSA6IDI1NTsKICAgICAgICAgICAgICAgICBub25Ucml2aWFsQWxwaGEgfD0gYWxw
aGEgPCAyNTU7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2JsZW5kKQotICAgICAgICAgICAgICAg
ICAgICBidWZmZXIuc2V0UkdCQShhZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxb
Ml0sIGFscGhhKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnBpeGVscygpLT5zZXRSR0JB
KGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOwogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyLm92ZXJSR0JBKGFkZHJl
c3MrKywgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOworICAgICAgICAgICAg
ICAgICAgICBidWZmZXIucGl4ZWxzKCktPm92ZXJSR0JBKGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBp
eGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZW5k
aWYKIAogICAgICAgICBpZiAoIW5vblRyaXZpYWxBbHBoYSkgewotICAgICAgICAgICAgaWYgKGJ1
ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2Nh
bGVkU2l6ZSgpKSkpCisgICAgICAgICAgICBpZiAoYnVmZmVyLnBpeGVscygpLT5yZWN0KCkuY29u
dGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkKICAgICAgICAgICAgICAg
ICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgc2l6ZV90IGZyYW1lSW5kZXggPSBtX2N1cnJlbnRGcmFtZTsKICAgICAgICAgICAg
ICAgICBjb25zdCBJbWFnZUZyYW1lKiBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVst
LWZyYW1lSW5kZXhdOwotICAgICAgICAgICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2
QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQ
cmV2aW91cykpCisgICAgICAgICAgICAgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZCdWZm
ZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok92ZXJ3
cml0ZVByZXZpb3VzKSkKICAgICAgICAgICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1l
QnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoKHByZXZCdWZm
ZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZUJnY29s
b3IpCi0gICAgICAgICAgICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1
ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPm9yaWdpbmFsRnJh
bWVSZWN0KCkpKQorICAgICAgICAgICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRo
b2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlQmdjb2xvcikKKyAg
ICAgICAgICAgICAgICAgICAgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgYnVmZmVyLnBp
eGVscygpLT5yZWN0KCkuY29udGFpbnMocHJldkJ1ZmZlci0+cGl4ZWxzKCktPnJlY3QoKSkpCiAg
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSBpZiAoIW1fYmxlbmQgJiYgIWJ1ZmZlci5oYXNBbHBoYSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5oCmluZGV4IDA1ZmM3NGI2ZGUyMTRkMDQxNGE4MmI0MTg2OTM3
NzYyZDFhNWU1NWIuLjk3NDE4YTJjZjQ2ZjYyNThkNzI2ZjA4YmZjNjVkYzhhZGY4NzhjMjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJ
bWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9wbGF5Q291bnQtMTsgfQogI2VuZGlmCiAgICAgICAgIGJvb2wgaXNTaXplQXZhaWxhYmxl
KCkgb3ZlcnJpZGU7Ci0gICAgICAgIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUm
KSBvdmVycmlkZTsKICAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVf
dCBpbmRleCkgb3ZlcnJpZGU7CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0
ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVmdWwgdG8gYXZvaWQKICAgICAgICAgLy8gYWNjZXNzaW5n
IGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRl
CkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGZvciAoYXV0byYgaW1hZ2VGcmFtZSA6IG1fZnJh
bWVCdWZmZXJDYWNoZSkgewotICAgICAgICAgICAgICAgIGlmIChpbWFnZUZyYW1lLnN0YXR1cygp
ICE9IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCisgICAgICAgICAgICAgICAgaWYgKCFpbWFn
ZUZyYW1lLmlzQ29tcGxldGUoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgfQogCkBAIC04Miw3ICs4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICBib29sIGlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgJiYg
bV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XS5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNv
bXBsZXRlKTsKKyAgICAgICAgICAgIHJldHVybiAoaW5kZXggPCBtX2ZyYW1lQnVmZmVyQ2FjaGUu
c2l6ZSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF0uaXNDb21wbGV0ZSgpKTsKICAgICAg
ICAgfQogCiAgICAgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCmluZGV4
IDEyNGExYjJmMTk5N2ZlNjc4YzYxYjUyZjMwNThkYjRkNmI4ODY3OWEuLmQyMGJiNmNlNmRhNDUw
MmQ4MzNkNjE4ZmU3ODc5MzM0YjBkMTMwNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVy
LmNwcApAQCAtNzgsMTMgKzc4LDExIEBAIEltYWdlRnJhbWUqIFdFQlBJbWFnZURlY29kZXI6OmZy
YW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgaWYgKGluZGV4KQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKSB7CisgICAg
aWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fZnJhbWVCdWZmZXJD
YWNoZS5yZXNpemUoMSk7Ci0gICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRQcmVtdWx0
aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgfQogCiAgICAgSW1hZ2VGcmFtZSYg
ZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9
IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCisgICAgaWYgKGZyYW1lLmlzQ29tcGxldGUoKSkK
ICAgICAgICAgZGVjb2RlKGZhbHNlKTsKICAgICByZXR1cm4gJmZyYW1lOwogfQpAQCAtMTE1LDcg
KzExMyw3IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCiAg
ICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgIG1faGFzQWxwaGEgPSBmYWxz
ZTsKICNlbmRpZgotICAgICAgICBpZiAoIXNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAgICAg
IGlmICghc2V0U2l6ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKSkKICAgICAgICAgICAgIHJldHVy
biBzZXRGYWlsZWQoKTsKICAgICB9CiAKQEAgLTEyNSwyMiArMTIzLDIxIEBAIGJvb2wgV0VCUElt
YWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCiAKICAgICBBU1NFUlQoIW1fZnJhbWVC
dWZmZXJDYWNoZS5pc0VtcHR5KCkpOwogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVC
dWZmZXJDYWNoZVswXTsKLSAgICBBU1NFUlQoYnVmZmVyLnN0YXR1cygpICE9IEltYWdlRnJhbWU6
OkZyYW1lQ29tcGxldGUpOworICAgIEFTU0VSVCghYnVmZmVyLmlzQ29tcGxldGUoKSk7CiAKLSAg
ICBpZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAg
ICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkK
KyAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci5pbml0UGl4
ZWxzKHNpemUoKSwgcHJlbXVsdGlwbHlBbHBoYSgpKSkKICAgICAgICAgICAgIHJldHVybiBzZXRG
YWlsZWQoKTsKLSAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRp
YWwpOworICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkRlY29kaW5nU3RhdHVz
OjpQYXJ0aWFsKTsKICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKG1faGFzQWxwaGEpOwotICAg
ICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXpl
KCkpKTsKICAgICB9CiAKICAgICBpZiAoIW1fZGVjb2RlcikgewogICAgICAgICBXRUJQX0NTUF9N
T0RFIG1vZGUgPSBvdXRwdXRNb2RlKG1faGFzQWxwaGEpOwotICAgICAgICBpZiAoIW1fcHJlbXVs
dGlwbHlBbHBoYSkKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKCkpCiAgICAgICAgICAg
ICBtb2RlID0gb3V0cHV0TW9kZShmYWxzZSk7Ci0gICAgICAgIGludCByb3dTdHJpZGUgPSBzaXpl
KCkud2lkdGgoKSAqIHNpemVvZihJbWFnZUZyYW1lOjpQaXhlbERhdGEpOwotICAgICAgICB1aW50
OF90KiBvdXRwdXQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIuZ2V0QWRkcigw
LCAwKSk7CisgICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgoKSAqIHNpemVvZihS
R0JBMzIpOworICAgICAgICB1aW50OF90KiBvdXRwdXQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihidWZmZXIucGl4ZWxzKCktPmF0KDAsIDApKTsKICAgICAgICAgaW50IG91dHB1dFNpemUg
PSBzaXplKCkuaGVpZ2h0KCkgKiByb3dTdHJpZGU7CiAgICAgICAgIG1fZGVjb2RlciA9IFdlYlBJ
TmV3UkdCKG1vZGUsIG91dHB1dCwgb3V0cHV0U2l6ZSwgcm93U3RyaWRlKTsKICAgICAgICAgaWYg
KCFtX2RlY29kZXIpCkBAIC0xNDksNyArMTQ2LDcgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpk
ZWNvZGUoYm9vbCBvbmx5U2l6ZSkKIAogICAgIHN3aXRjaCAoV2ViUElVcGRhdGUobV9kZWNvZGVy
LCBkYXRhQnl0ZXMsIGRhdGFTaXplKSkgewogICAgIGNhc2UgVlA4X1NUQVRVU19PSzoKLSAgICAg
ICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICAgICAg
YnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUpOwog
ICAgICAgICBjbGVhcigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFZQOF9TVEFU
VVNfU1VTUEVOREVEOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCmlu
ZGV4IDIxNmNkMDkzZjI2NDY3Y2JhODhhNDNmNjkzYWJmNGNmNTFkZDFhNGQuLmQxMTQ1NGIwNWVm
ODg5OTNhNjI4OTM4OTZiYzBjMTE3MjhjNWVkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2VNYWMubW0KQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcigpIGNvbnN0CiAgICAgICAgIGlmICghaW1h
Z2UpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBtX3ByZXZpZXdJbWFnZSA9IGltYWdl
LT5nZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIG1fcHJldmlld0ltYWdlID0gaW1hZ2UtPm5hdGl2
ZUltYWdlKCk7CiAgICAgICAgIGlmICghbV9wcmV2aWV3SW1hZ2UpCiAgICAgICAgICAgICBicmVh
azsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNH
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAK
aW5kZXggMzZjZDY1MTZlODBmMTc0OGJmZWFiNzdhOTMwMjcxYzEyMWRlODAxOS4uNGI0ZTM3Nzll
OTZmNzhjNjU0MGE1M2M0NDc4YzNiZmQ5MzVmNTNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCkBAIC0xMzYsOSArMTM2LDkgQEAgRHJhZ0lt
YWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1nLCBJbWFnZU9yaWVudGF0
aW9uRGVzY3JpcHRpb24pCiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oZHJhd0NvbnRleHQsIDEsIC0x
KTsKICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3IoZHJhd0NvbnRleHQsIHdoaXRlKTsKICAgICBD
R0NvbnRleHRGaWxsUmVjdChkcmF3Q29udGV4dCwgcmVjdCk7Ci0gICAgaWYgKGF1dG8gc3JjSW1h
Z2UgPSBpbWctPmdldENHSW1hZ2VSZWYoKSkgeworICAgIGlmIChhdXRvIHNyY0ltYWdlID0gaW1n
LT5uYXRpdmVJbWFnZSgpKSB7CiAgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShkcmF3Q29u
dGV4dCwga0NHQmxlbmRNb2RlTm9ybWFsKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRy
YXdDb250ZXh0LCByZWN0LCBzcmNJbWFnZSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShk
cmF3Q29udGV4dCwgcmVjdCwgc3JjSW1hZ2UuZ2V0KCkpOwogICAgIH0KICAgICBDR0NvbnRleHRS
ZWxlYXNlKGRyYXdDb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlz
Yy9XZWJDYWNoZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KaW5kZXgg
YjY1OWQ2ZGJmOWFkNjk5OWMzYWM5NjJkZTk1MTU3ODA5N2UxZjNiMS4uN2M1ZWQyMTBkZGIyYTMy
YTc2NjY3NGMxMjBkOTk0YzJmYTQ3ZTdmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMv
TWlzYy9XZWJDYWNoZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1t
CkBAIC0yMDQsNyArMjA0LDcgQEAgKyAoQ0dJbWFnZVJlZilpbWFnZUZvclVSTDooTlNVUkwgKil1
cmwKICAgICBXZWJDb3JlOjpDYWNoZWRJbWFnZSYgY2FjaGVkSW1hZ2UgPSBkb3duY2FzdDxXZWJD
b3JlOjpDYWNoZWRJbWFnZT4oKmNhY2hlZFJlc291cmNlKTsKICAgICBpZiAoIWNhY2hlZEltYWdl
Lmhhc0ltYWdlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBjYWNoZWRJ
bWFnZS5pbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgcmV0dXJuIGNhY2hlZEltYWdlLmlt
YWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCk7CiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0
YWJhc2VDRy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0
YWJhc2VDRy5jcHAKaW5kZXggMGY2ZGU3YTE0NmE2MTFhNTJhYTFlNTM5MDE5ZmE2YzFjNDY3MjVh
ZS4uMzA1NjMzNmNiNjZmZTRhZjE4YmRjNTI5YWNhMmY4ZmM4ODFkZmU1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNw
cApAQCAtMzcsMTIgKzM3LDIzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogQ0dJbWFnZVJl
ZiBXS0ljb25EYXRhYmFzZVRyeUdldENHSW1hZ2VGb3JVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNv
bkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYsIFdLU2l6ZSBzaXplKQogewogICAgIEltYWdl
KiBpbWFnZSA9IHRvSW1wbChpY29uRGF0YWJhc2VSZWYpLT5pbWFnZUZvclBhZ2VVUkwodG9XVEZT
dHJpbmcodXJsUmVmKSk7Ci0gICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPmdldEZpcnN0Q0dJbWFn
ZVJlZk9mU2l6ZShJbnRTaXplKHN0YXRpY19jYXN0PGludD4oc2l6ZS53aWR0aCksIHN0YXRpY19j
YXN0PGludD4oc2l6ZS5oZWlnaHQpKSkgOiAwOworICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5u
YXRpdmVJbWFnZU9mU2l6ZShJbnRTaXplKHN0YXRpY19jYXN0PGludD4oc2l6ZS53aWR0aCksIHN0
YXRpY19jYXN0PGludD4oc2l6ZS5oZWlnaHQpKSkuZ2V0KCkgOiBudWxscHRyOwogfQogCiBDRkFy
cmF5UmVmIFdLSWNvbkRhdGFiYXNlVHJ5Q29weUNHSW1hZ2VBcnJheUZvclVSTChXS0ljb25EYXRh
YmFzZVJlZiBpY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJlZikKIHsKICAgICBJbWFnZSog
aW1hZ2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VGb3JQYWdlVVJMKHRvV1RGU3Ry
aW5nKHVybFJlZikpOwotICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5nZXRDR0ltYWdlQXJyYXko
KS5sZWFrUmVmKCkgOiAwOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgYXV0byBuYXRpdmVJbWFnZXMgPSBpbWFnZS0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7
CisgICAgaWYgKCFuYXRpdmVJbWFnZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAKKyAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlDcmVhdGVNdXRhYmxl
KG51bGxwdHIsIG5hdGl2ZUltYWdlcy5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOwor
ICAgIGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5hdGl2ZUltYWdlcykKKyAgICAgICAgQ0ZBcnJh
eUFwcGVuZFZhbHVlKGFycmF5LCBuYXRpdmVJbWFnZS5nZXQoKSk7CisgICAgCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENGUmV0YWluKGFycmF5KSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW0KaW5kZXggZGM3OTgzYWI5ODhjMmQwNGExNzMwZWUxMzczMDNjMjQ0MTYxNTE5Ny4uZmJj
M2U1ZDRjNTQzMDFjZTkyMTdhNDBmOGQwOGJkNTgzNTI3ODdjNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0K
QEAgLTQwNzEsNyArNDA3MSw3IEBAIC0gKFVJSW1hZ2UgKilfcHJlc2VudGF0aW9uU25hcHNob3RG
b3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6KFVJUHJldmlld0l0ZW1Db250cm9sCiB7CiAgICAgaWYg
KCFfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRo
Q0dJbWFnZTpfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZS0+
Z2V0Q0dJbWFnZVJlZigpXSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxs
b2NdIGluaXRXaXRoQ0dJbWFnZTpfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNv
bnRlbnRJbWFnZS0+bmF0aXZlSW1hZ2UoKS5nZXQoKV0gYXV0b3JlbGVhc2VdOwogfQogCiAtIChO
U0FycmF5ICopX3ByZXNlbnRhdGlvblJlY3RzRm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVBy
ZXZpZXdJdGVtQ29udHJvbGxlciAqKWNvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCA5YTMzZjdjYzdkYzdjN2Q3MmY5
ZGE3NDMwOThiN2RiY2E4MjQwOWNmLi5hNTMyNTEwNjc4YjlmNTM1MTQ1OGEzOGE5ZjQyMzM3NDdk
MDM1ZjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwCkBAIC0xNzI3LDY5ICsxNzI3LDYgQEAgdm9pZCBQbHVnaW5WaWV3Ojp3aW5kb3dl
ZFBsdWdpblZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUsIHVpbnQ2NF90IHdpbmQK
IH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi1zdGF0aWMgYm9vbCBpc0FsbW9zdFNv
bGlkQ29sb3IoQml0bWFwSW1hZ2UqIGJpdG1hcCkKLXsKLSAgICBDR0ltYWdlUmVmIGltYWdlID0g
Yml0bWFwLT5nZXRDR0ltYWdlUmVmKCk7Ci0gICAgQVNTRVJUKENHSW1hZ2VHZXRCaXRzUGVyQ29t
cG9uZW50KGltYWdlKSA9PSA4KTsKLQotICAgIENHQml0bWFwSW5mbyBpbWFnZUluZm8gPSBDR0lt
YWdlR2V0Qml0bWFwSW5mbyhpbWFnZSk7Ci0gICAgaWYgKCEoaW1hZ2VJbmZvICYga0NHQml0bWFw
Qnl0ZU9yZGVyMzJMaXR0bGUpIHx8IChpbWFnZUluZm8gJiBrQ0dCaXRtYXBBbHBoYUluZm9NYXNr
KSAhPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0KSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBDb25zaWRlciBiZWluZyBhYmxlIHRvIGhhbmRsZSBvdGhlciBwaXhlbCBmb3JtYXRzLgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHNpemVfdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90
IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOwotICAgIHNpemVfdCBieXRlc1BlclJv
dyA9IENHSW1hZ2VHZXRCeXRlc1BlclJvdyhpbWFnZSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBwcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0
RGF0YVByb3ZpZGVyKGltYWdlKSkpOwotICAgIGNvbnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0
Qnl0ZVB0cihwcm92aWRlci5nZXQoKSk7Ci0KLSAgICAvLyBPdmVybGF5IGEgZ3JpZCBvZiBzYW1w
bGluZyBkb3RzIG9uIHRvcCBvZiBhIGdyYXlzY2FsZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZS4KLSAg
ICAvLyBGb3IgdGhlIGludGVyaW9yIHBvaW50cywgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGlu
IGx1bWluYW5jZSBhbW9uZyB0aGUgc2FtcGxlIHBvaW50Ci0gICAgLy8gYW5kIGl0cyBzdXJyb3Vu
ZHMgcG9pbnRzLCBzY2FsZWQgYnkgdHJhbnNwYXJlbmN5LgotICAgIGNvbnN0IHVuc2lnbmVkIHNh
bXBsZVJvd3MgPSA3OwotICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZUNvbHMgPSA3OwotICAgIC8v
IEZJWE1FOiBSZWZpbmUgdGhlIHByb3BlciBudW1iZXIgb2Ygc2FtcGxlcywgYW5kIGFjY29tbW9k
YXRlIGRpZmZlcmVudCBhc3BlY3QgcmF0aW9zLgotICAgIGlmICh3aWR0aCA8IHNhbXBsZUNvbHMg
fHwgaGVpZ2h0IDwgc2FtcGxlUm93cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
RW5zdXJlIHRoYXQgdGhlIGxhc3Qgcm93L2NvbHVtbiBsYW5kIG9uIHRoZSBpbWFnZSBwZXJpbWV0
ZXIuCi0gICAgY29uc3QgZmxvYXQgc3RyaWRlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4od2lk
dGggLSAxKSAvIChzYW1wbGVDb2xzIC0gMSk7Ci0gICAgY29uc3QgZmxvYXQgc3RyaWRlSGVpZ2h0
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCAtIDEpIC8gKHNhbXBsZVJvd3MgLSAxKTsKLSAg
ICBmbG9hdCBzYW1wbGVzW3NhbXBsZVJvd3NdW3NhbXBsZUNvbHNdOwotCi0gICAgLy8gRmluZCB0
aGUgbHVtaW5hbmNlIG9mIHRoZSBzYW1wbGUgcG9pbnRzLgotICAgIGZsb2F0IHkgPSAwOwotICAg
IGNvbnN0IFVJbnQ4KiByb3cgPSBkYXRhOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
YW1wbGVSb3dzOyArK2kpIHsKLSAgICAgICAgZmxvYXQgeCA9IDA7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCBzYW1wbGVDb2xzOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IFVJ
bnQ4KiBwMCA9IHJvdyArIChzdGF0aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKLSAgICAgICAg
ICAgIC8vIFIgRyBCIEEKLSAgICAgICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAw
ICsgMC43MTU0ICogKihwMCsxKSArIDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsK
LSAgICAgICAgICAgIHggKz0gc3RyaWRlV2lkdGg7Ci0gICAgICAgIH0KLSAgICAgICAgeSArPSBz
dHJpZGVIZWlnaHQ7Ci0gICAgICAgIHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsg
LjUpKSAqIGJ5dGVzUGVyUm93OwotICAgIH0KLQotICAgIC8vIERldGVybWluZSB0aGUgaW1hZ2Ug
c2NvcmUuCi0gICAgZmxvYXQgYWNjdW1TY29yZSA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IHNhbXBsZVJvd3MgLSAxOyArK2kpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MTsgaiA8IHNhbXBsZUNvbHMgLSAxOyArK2opIHsKLSAgICAgICAgICAgIGZsb2F0IGRpZmYgPSBz
YW1wbGVzW2kgLSAxXVtqXSArIHNhbXBsZXNbaSArIDFdW2pdICsgc2FtcGxlc1tpXVtqIC0gMV0g
KyBzYW1wbGVzW2ldW2ogKyAxXSAtIDQgKiBzYW1wbGVzW2ldW2pdOwotICAgICAgICAgICAgYWNj
dW1TY29yZSArPSBkaWZmICogZGlmZjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBz
Y29yZSBmb3IgYSBnaXZlbiBzYW1wbGUgY2FuIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgMCBhbmQg
MjU1XjIuCi0gICAgcmV0dXJuIGFjY3VtU2NvcmUgPCAyNTAwICogKHNhbXBsZVJvd3MgLSAyKSAq
IChzYW1wbGVDb2xzIC0gMik7Ci19Ci0jZW5kaWYKLQogdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5T
bmFwc2hvdFRpbWVyRmlyZWQoKQogewogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BM
VUdJTl9IRVVSSVNUSUMpCkBAIC0xODA5LDcgKzE3NDYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBs
dWdpblNuYXBzaG90VGltZXJGaXJlZCgpCiAKICAgICAgICAgaWYgKHNuYXBzaG90SW1hZ2UpIHsK
ICNpZiBFTkFCTEUoUFJJTUFSWV9TTkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQotICAgICAg
ICAgICAgYm9vbCBzbmFwc2hvdElzQWxtb3N0U29saWRDb2xvciA9IGlzQWxtb3N0U29saWRDb2xv
cihkb3duY2FzdDxCaXRtYXBJbWFnZT4oc25hcHNob3RJbWFnZS5nZXQoKSkpOworICAgICAgICAg
ICAgYm9vbCBzbmFwc2hvdElzQWxtb3N0U29saWRDb2xvciA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8
Qml0bWFwSW1hZ2U+KHNuYXBzaG90SW1hZ2UpLT5pc0FsbW9zdFNvbGlkQ29sb3IoKTsKICAgICAg
ICAgICAgIHNuYXBzaG90Rm91bmQgPSAhc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3I7CiAjZW5k
aWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283769</attachid>
            <date>2016-07-15 10:15:15 -0700</date>
            <delta_ts>2017-08-21 12:15:27 -0700</delta_ts>
            <desc>Patch for review</desc>
            <filename>wk159795.patch</filename>
            <type>text/plain</type>
            <size>59164</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxYTc2NWE4Li5jODAxMzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI4
IEBACisyMDE2LTA3LTE0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5j
b20+CisKKyAgICAgICAgTWFrZSBJbWFnZUZyYW1lIGFuZCBJbWFnZUZyYW1lRGF0YSBiZSBlcXVp
dmFsZW50IHNvIEltYWdlRnJhbWVEYXRhIGNhbiBiZSByZW1vdmVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk3OTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHN0ZXAgd2lsbCBhbGxvdyByZW1v
dmluZyBJbWFnZUZyYW1lIGZyb20gcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmgKKyAgICAgICAgYW5kIHJlbmFtaW5nIEltYWdlRnJhbWVEYXRhIHRvIGJlIEltYWdlRnJhbWUu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBQaXhlbHMuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlRnJhbWVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpp
bml0UGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpjb3B5UGl4ZWxz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnNldERpc3Bvc2FsTWV0aG9kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpkaXNwb3NhbE1ldGhvZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lRGF0YTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lRGF0YTo6aXNQYXJ0aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpj
bGVhclBpeGVscyk6CisgICAgICAgIEFkZCBmdW5jdGlvbnMgc2ltaWxhciB0byBmcm9tIHdoYXQg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggaGFzLgorICAgICAgICAKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29w
eVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjppbml0UGl4ZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsRnJhbWVSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNpemUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0SGFzQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U3RhdHVzKTogRGVsZXRlZC4KKyAgICAgICAgQ2hhbmdlIHRo
ZSBJbWFnZUZyYW1lIGNsYXNzIHRvIGJlIGEgc3Vic2V0IG9mIEltYWdlRnJhbWVEYXRhLgorICAg
ICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRlQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFBdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4
KToKKyAgICAgICAgQ2FsbCB0aGUgSW1hZ2VGcmFtZSBtZXRob2RzIHdpdGggdGhlIG5ldyBuYW1l
cy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXREaXNwb3NhbE1ldGhvZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpkaXNwb3NhbE1ldGhvZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmlzRW1wdHkp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aXNQYXJ0aWFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWU6OmlzQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6Y2xlYXJQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpzZXRIYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjppbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpwaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6aGFzUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
aXNPdmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5Um93TlRpbWVz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFJHQkEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Z2V0QWRkcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoYXNQaXhlbERhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3ZlclJHQkEpOiBEZWxldGVkLgorICAgICAgICBD
aGFuZ2UgdGhlIEltYWdlRnJhbWUgY2xhc3MgdG8gYmUgYSBzdWJzZXQgb2YgSW1hZ2VGcmFtZURh
dGEgYW5kIGdldCByaWQKKyAgICAgICAgb2YgdGhlIHBpeGVsIGZ1bmN0aW9ucy4gVGhleSBzaG91
bGQgYmUgYWNjZXNzZWQgZnJvbSBCaXRtYXBQaXhlbHMgY2xhc3MuCisgICAgICAgIAorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICBDYWxsIHRo
ZSBJbWFnZUZyYW1lIG1ldGhvZHMgd2l0aCB0aGUgbmV3IG5hbWVzL3BhcmFtZXRlcnMuCisgICAg
ICAgIAorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpzZXRSR0JBKToKKyAgICAgICAgQ2FsbCB0
aGUgSW1hZ2VGcmFtZSBtZXRob2RzIHdpdGggdGhlIG5ldyBuYW1lcy9wYXJhbWV0ZXJzLgorCisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToK
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oOgorICAgICAg
ICBDYWxsIHRoZSBJbWFnZUZyYW1lIG1ldGhvZHMgd2l0aCB0aGUgbmV3IG5hbWVzL3BhcmFtZXRl
cnMuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZVJlYWRlci5jcHA6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cGFyc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oOgorICAgICAg
ICAoR0lGRnJhbWVDb250ZXh0OjpHSUZGcmFtZUNvbnRleHQpOgorICAgICAgICBDYWxsIHRoZSBJ
bWFnZUZyYW1lIG1ldGhvZHMgd2l0aCB0aGUgbmV3IG5hbWVzL3BhcmFtZXRlcnMuCisgICAgICAg
IAorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAg
ICBDYWxsIHRoZSBJbWFnZUZyYW1lIG1ldGhvZHMgd2l0aCB0aGUgbmV3IG5hbWVzL3BhcmFtZXRl
cnMuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpm
cmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmpwZWdDb21wbGV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICBDYWxsIHRoZSBJbWFnZUZy
YW1lIG1ldGhvZHMgd2l0aCB0aGUgbmV3IG5hbWVzL3BhcmFtZXRlcnMuCisgICAgICAgIAorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpwbmdDb21wbGV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpQTkdJbWFnZURlY29kZXI6OnJlYWRDaHVua3MpOgorICAgICAgICAoV2ViQ29yZTo6UE5H
SW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6
UE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UE5H
SW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIENhbGwgdGhlIEltYWdlRnJh
bWUgbWV0aG9kcyB3aXRoIHRoZSBuZXcgbmFtZXMvcGFyYW1ldGVycy4KKyAgICAgICAgCisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldFQlBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICBD
YWxsIHRoZSBJbWFnZUZyYW1lIG1ldGhvZHMgd2l0aCB0aGUgbmV3IG5hbWVzL3BhcmFtZXRlcnMu
CisKIDIwMTYtMDctMTMgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNv
bT4KICAKICAgICAgICAgR2V0IHJpZCBvZiB0aGUgbV9wcmVtdWx0aXBseUFscGhhIGZsYWcgb2Yg
dGhlIEltYWdlRnJhbWUgY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwUGl4ZWxzLmgKaW5kZXggMWZhZTNkMi4uOWFhMjQwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKQEAgLTkyLDcgKzkyLDcg
QEAgcHVibGljOgogCiAgICAgUkdCQTMyKiBhdChpbnQgeCwgaW50IHkpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gbV9waXhlbHMgKyB5ICogbV9zaXplLndpZHRoKCkgKyB4OworICAgICAg
ICByZXR1cm4gaW5Cb3VuZHMoSW50UG9pbnQoeCwgeSkpID8gbV9waXhlbHMgKyB5ICogbV9zaXpl
LndpZHRoKCkgKyB4IDogbnVsbHB0cjsKICAgICB9CiAKICAgICB2b2lkIGNsZWFyKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcApp
bmRleCBmMzc0ZjhkLi42YjhlM2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuY3BwCkBAIC0xMTgsNiArMTE4LDIyIEBAIHVuc2ln
bmVkIEltYWdlRnJhbWVEYXRhOjpjbGVhcihDYWNoaW5nIGZyYW1lQ2FjaGluZykKICAgICByZXR1
cm4gZnJhbWVCeXRlczsKIH0KIAorYm9vbCBJbWFnZUZyYW1lRGF0YTo6aW5pdFBpeGVscyhjb25z
dCBJbnRTaXplJiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEpCit7CisgICAgQVNTRVJUKCFo
YXNQaXhlbHMoKSAmJiBtX3NpemUuaXNFbXB0eSgpKTsKKyAgICBtX3BpeGVscyA9ICFzaXplLmlz
RW1wdHkoKSA/IEJpdG1hcFBpeGVsczo6Y3JlYXRlKHNpemUsIHByZW11bHRpcGx5QWxwaGEpIDog
bnVsbHB0cjsKKyAgICByZXR1cm4gaGFzUGl4ZWxzKCk7Cit9CisgICAgCitib29sIEltYWdlRnJh
bWVEYXRhOjpjb3B5UGl4ZWxzKGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcikKK3sKKyAgICBp
ZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9waXhlbHMg
PSBvdGhlci5oYXNQaXhlbHMoKSA/IEJpdG1hcFBpeGVsczo6Y3JlYXRlKCpvdGhlci5tX3BpeGVs
cy5nZXQoKSkgOiBudWxscHRyOworICAgIHJldHVybiBoYXNQaXhlbHMoKSA9PSBvdGhlci5oYXNQ
aXhlbHMoKTsKK30KKyAgICAKIENvbG9yIEltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKSBjb25zdAogewogICAgIGlmICghaGFzSW1hZ2UoKSB8fCBtX3NpemUgIT0gSW50U2l6
ZSgxLCAxKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlRnJhbWVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZy
YW1lRGF0YS5oCmluZGV4IGY2ZmI3NTguLmYwOGQ0OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApAQCAtNDksNyArNDksOCBAQCBj
bGFzcyBJbWFnZUZyYW1lRGF0YSB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBDYWNoaW5nIHsg
RW1wdHksIE1ldGFkYXRhLCBJbWFnZSwgTWV0YWRhdGFBbmRJbWFnZSB9OwogICAgIGVudW0gY2xh
c3MgRGVjb2RpbmdTdGF0dXMgeyBFbXB0eSwgUGFydGlhbCwgQ29tcGxldGUgfTsKLSAgICAKKyAg
ICBlbnVtIGNsYXNzIERpc3Bvc2FsTWV0aG9kIHsgTm90U3BlY2lmaWVkLCBLZWVwLCBPdmVyd3Jp
dGVCZ2NvbG9yLCBPdmVyd3JpdGVQcmV2aW91cyB9OworCiAgICAgSW1hZ2VGcmFtZURhdGEoKTsK
ICAgICBJbWFnZUZyYW1lRGF0YShOYXRpdmVJbWFnZVB0ciYmKTsKICAgICBJbWFnZUZyYW1lRGF0
YShJbWFnZURlY29kZXImLCBzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0
U3Vic2FtcGxpbmdMZXZlbCwgQ2FjaGluZyA9IENhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwpA
QCAtNjAsMzggKzYxLDUyIEBAIHB1YmxpYzoKICAgICBJbWFnZUZyYW1lRGF0YSYgb3BlcmF0b3I9
KGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcik7CiAgICAgCiAgICAgdW5zaWduZWQgY2xlYXIo
Q2FjaGluZyk7Ci0gICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsKLSAgICAKKworICAgIHZvaWQgc2V0RGlz
cG9zYWxNZXRob2QoRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QpIHsgbV9kaXNwb3NhbE1l
dGhvZCA9IGRpc3Bvc2FsTWV0aG9kOyB9CisgICAgRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRo
b2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CisKKyAgICB2b2lkIHNldFN0
YXR1cyhEZWNvZGluZ1N0YXR1cyBzdGF0dXMpIHsgbV9zdGF0dXMgPSBzdGF0dXM7IH0KICAgICBE
ZWNvZGluZ1N0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpF
bXB0eTsgfQorICAgIGJvb2wgaXNQYXJ0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0g
RGVjb2RpbmdTdGF0dXM6OlBhcnRpYWw7IH0KICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXR1cyA9PSBEZWNvZGluZ1N0YXR1czo6Q29tcGxldGU7IH0KKworICAgIGJv
b2wgaW5pdFBpeGVscyhjb25zdCBJbnRTaXplJiwgYm9vbCBwcmVtdWx0aXBseUFscGhhKTsKKyAg
ICBib29sIGNvcHlQaXhlbHMoY29uc3QgSW1hZ2VGcmFtZURhdGEmKTsKKyAgICB2b2lkIGNsZWFy
UGl4ZWxzKCkgeyBtX3BpeGVscyA9IG51bGxwdHI7IH0KKwogICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIGhhc1BpeGVscygpID8gcGl4ZWxzKCktPnNpemUoKSA6IG1fc2l6ZTsgfQog
ICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMoKSBjb25zdCB7IHJldHVybiBoYXNJbWFnZSgpID8gbV9z
aXplLmFyZWEoKSAqIHNpemVvZihSR0JBMzIpIDogMDsgfQotICAgIE5hdGl2ZUltYWdlUHRyIGlt
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQotICAgIEJpdG1hcFBpeGVscyogcGl4ZWxz
KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbHMgPyBtX3BpeGVscy5nZXQoKSA6IG51bGxwdHI7IH0K
LSAgICAKLSAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9vcmllbnRhdGlvbjsgfQogICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3Vic2FtcGxpbmdMZXZlbDsgfQorCisgICAgdm9pZCBzZXRPcmll
bnRhdGlvbihJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBv
cmllbnRhdGlvbjsgfTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQorCisgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25l
ZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KICAgICBmbG9hdCBkdXJhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICAKKworICAgIHZvaWQgc2V0SGFz
QWxwaGEoYm9vbCBoYXNBbHBoYSkgeyBtX2hhc0FscGhhID0gaGFzQWxwaGE7IH0KICAgICBib29s
IGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbHBoYTsgfQorCisgICAgTmF0aXZlSW1h
Z2VQdHIgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgQml0bWFwUGl4ZWxz
KiBwaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscyA/IG1fcGl4ZWxzLmdldCgpIDogbnVs
bHB0cjsgfQorCiAgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0K
ICAgICBib29sIGhhc01ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZS5pc0VtcHR5KCk7
IH0KICAgICBib29sIGhhc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIHBpeGVscygpOyB9Ci0gICAg
CisKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICBib29sIGlz
QWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworCiBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJTdWJJ
bWFnZXMoKTsKIAotICAgIHZvaWQgc2V0U3RhdHVzKERlY29kaW5nU3RhdHVzIHN0YXR1cykgeyBt
X3N0YXR1cyA9IHN0YXR1czsgfQotICAgIHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH07Ci0gICAg
dm9pZCBzZXREdXJhdGlvbih1bnNpZ25lZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRp
b247IH0KLSAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgaGFzQWxwaGEpIHsgbV9oYXNBbHBoYSA9
IGhhc0FscGhhOyB9Ci0gICAgCisgICAgRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZCB7
IERpc3Bvc2FsTWV0aG9kOjpOb3RTcGVjaWZpZWQgfTsKICAgICBEZWNvZGluZ1N0YXR1cyBtX3N0
YXR1cyB7IERlY29kaW5nU3RhdHVzOjpFbXB0eSB9OwogICAgIEludFNpemUgbV9zaXplOwogICAg
IE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVs
cz4gbV9waXhlbHM7Ci0gICAgCisKICAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24g
eyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OwogICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJz
YW1wbGluZ0xldmVsIHsgMCB9OwogICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcAppbmRleCBhOWJmYmQ5Li4xZmRiYWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKQEAgLTEyOCwxMCAr
MTI4LDYgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4gSW1hZ2VEZWNvZGVyOjpjcmVh
dGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWEKIH0KIAogSW1hZ2VGcmFtZTo6SW1hZ2VG
cmFtZSgpCi0gICAgOiBtX2hhc0FscGhhKGZhbHNlKQotICAgICwgbV9zdGF0dXMoRnJhbWVFbXB0
eSkKLSAgICAsIG1fZHVyYXRpb24oMCkKLSAgICAsIG1fZGlzcG9zYWxNZXRob2QoRGlzcG9zZU5v
dFNwZWNpZmllZCkKIHsKIH0gCiAKQEAgLTE0MCw3ICsxMzYsNyBAQCBJbWFnZUZyYW1lJiBJbWFn
ZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgaWYgKHRoaXMg
PT0gJm90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBjb3B5Qml0bWFwRGF0YShv
dGhlcik7CisgICAgY29weVBpeGVscyhvdGhlcik7CiAgICAgc2V0SGFzQWxwaGEob3RoZXIubV9o
YXNBbHBoYSk7CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBzZXREdXJhdGlv
bihvdGhlci5kdXJhdGlvbigpKTsKQEAgLTE0OCwzMiArMTQ0LDcgQEAgSW1hZ2VGcmFtZSYgSW1h
Z2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQogICAgIHJldHVybiAq
dGhpczsKIH0KIAotdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCi17Ci0gICAgbV9w
aXhlbHMgPSBudWxscHRyOwotICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKLSAgICAvLyBOT1RF
OiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUo
KSBjYWxscyB0aGlzCi0gICAgLy8gdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBm
dW5jdGlvbnMgbGlrZSBpbml0RnJhbWVCdWZmZXIoKSBhbmQKLSAgICAvLyBmcmFtZUNvbXBsZXRl
KCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVhZCBvdGhlciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFt
ZQotICAgIC8vIGxhdGVyLgotfQotCi12b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRh
KCkKLXsKLSAgICBtX3BpeGVscy0+Y2xlYXIoKTsKLSAgICBtX2hhc0FscGhhID0gdHJ1ZTsKLX0K
LQotdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9w
aXhlbHMtPmNsZWFyUmVjdChyZWN0KTsKLSAgICBzZXRIYXNBbHBoYSh0cnVlKTsKLX0KLQotYm9v
bCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKK2Jv
b2wgSW1hZ2VGcmFtZTo6Y29weVBpeGVscyhjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKIHsKICAg
ICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTg1LDMzICsx
NTYsMTMgQEAgYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1l
JiBvdGhlcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXpl
KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKK2Jvb2wgSW1hZ2VG
cmFtZTo6aW5pdFBpeGVscyhjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHByZW11bHRpcGx5QWxw
aGEpCiB7CiAgICAgQVNTRVJUKCFtX3BpeGVscyk7CiAgICAgbV9waXhlbHMgPSBCaXRtYXBQaXhl
bHM6OmNyZWF0ZShzaXplLCBwcmVtdWx0aXBseUFscGhhKTsKICAgICByZXR1cm4gbV9waXhlbHMg
IT0gbnVsbHB0cjsKIH0KIAotdm9pZCBJbWFnZUZyYW1lOjpjb3B5Um93TlRpbWVzKGludCBzdGFy
dFgsIGludCBlbmRYLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKLXsKLSAgICBtX3BpeGVscy0+cmVw
ZWF0Rmlyc3RSb3coSW50UmVjdChzdGFydFgsIHN0YXJ0WSwgZW5kWCAtc3RhcnRYICwgZW5kWSAt
IHN0YXJ0WSkpOwotfQotCi1ib29sIEltYWdlRnJhbWU6Omhhc0FscGhhKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9oYXNBbHBoYTsKLX0KLQotdm9pZCBJbWFnZUZyYW1lOjpzZXRIYXNBbHBoYShi
b29sIGFscGhhKQotewotICAgIG1faGFzQWxwaGEgPSBhbHBoYTsKLX0KLQotdm9pZCBJbWFnZUZy
YW1lOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQotewotICAgIG1fc3RhdHVzID0gc3Rh
dHVzOwotfQotCiBuYW1lc3BhY2UgewogCiBlbnVtIE1hdGNoVHlwZSB7CkBAIC0yNTYsMTQgKzIw
NywxNCBAQCB0ZW1wbGF0ZSA8TWF0Y2hUeXBlIHR5cGU+IGludCBnZXRTY2FsZWRWYWx1ZShjb25z
dCBWZWN0b3I8aW50PiYgc2NhbGVkVmFsdWVzLCBpbgogYm9vbCBJbWFnZURlY29kZXI6OmZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIEltYWdlRnJhbWUqIGJ1ZmZl
ciA9IGZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7Ci0gICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZm
ZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGU7CisgICAgcmV0dXJuIGJ1
ZmZlciAmJiBidWZmZXItPmlzQ29tcGxldGUoKTsKIH0KIAogYm9vbCBJbWFnZURlY29kZXI6OmZy
YW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAobV9mcmFt
ZUJ1ZmZlckNhY2hlLnNpemUoKSA8PSBpbmRleCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
aWYgKG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF0uc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJh
bWVDb21wbGV0ZSkKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XS5pc0NvbXBsZXRl
KCkpCiAgICAgICAgIHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdLmhhc0FscGhhKCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yNzksNyArMjMwLDcgQEAgdW5zaWduZWQgSW1hZ2VE
ZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiBmbG9hdCBJbWFn
ZURlY29kZXI6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBJbWFn
ZUZyYW1lKiBidWZmZXIgPSBmcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwotICAgIGlmICghYnVm
ZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkKKyAgICBp
ZiAoIWJ1ZmZlciB8fCBidWZmZXItPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
CiAgICAgLy8gTWFueSBhbm5veWluZyBhZHMgc3BlY2lmeSBhIDAgZHVyYXRpb24gdG8gbWFrZSBh
biBpbWFnZSBmbGFzaCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLgpAQCAtMjk5LDEyICsyNTAsMTgg
QEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChz
aXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGUKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBJbWFnZUZyYW1lKiBidWZmZXIgPSBmcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwotICAgIGlm
ICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkK
KyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICAvLyBSZXR1cm4gdGhlIGJ1ZmZlciBjb250ZW50cyBhcyBhIG5hdGl2ZSBp
bWFnZS4gRm9yIHNvbWUgcG9ydHMsIHRoZSBkYXRhCiAgICAgLy8gaXMgYWxyZWFkeSBpbiBhIG5h
dGl2ZSBjb250YWluZXIsIGFuZCB0aGlzIGp1c3QgaW5jcmVtZW50cyBpdHMgcmVmY291bnQuCi0g
ICAgcmV0dXJuIGJ1ZmZlci0+YXNOZXdOYXRpdmVJbWFnZSgpOworICAgIGlmIChidWZmZXItPmhh
c0ltYWdlKCkpCisgICAgICAgIHJldHVybiBidWZmZXItPmltYWdlKCk7CisKKyAgICBpZiAoYnVm
ZmVyLT5oYXNQaXhlbHMoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci0+cGl4ZWxzKCktPmltYWdl
KCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBJbWFnZURlY29kZXI6OnByZXBh
cmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IGI3MmYyYmUuLmFkZDM5ZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oCkBAIC00MiwyMyArNDIsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci11c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47Ci0KICAgICAvLyBJbWFnZUZyYW1l
IHJlcHJlc2VudHMgdGhlIGRlY29kZWQgaW1hZ2UgZGF0YS4gIFRoaXMgYnVmZmVyIGlzIHdoYXQg
YWxsCiAgICAgLy8gZGVjb2RlcnMgd3JpdGUgYSBzaW5nbGUgZnJhbWUgaW50by4KICAgICBjbGFz
cyBJbWFnZUZyYW1lIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gRnJhbWVTdGF0dXMgeyBG
cmFtZUVtcHR5LCBGcmFtZVBhcnRpYWwsIEZyYW1lQ29tcGxldGUgfTsKLSAgICAgICAgZW51bSBG
cmFtZURpc3Bvc2FsTWV0aG9kIHsKLSAgICAgICAgICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhlIG51
bWVyaWMgdmFsdWVzIG9mIHRoZXNlLCBtYWtlIHN1cmUgeW91IGF1ZGl0Ci0gICAgICAgICAgICAv
LyBhbGwgdXNlcnMsIGFzIHNvbWUgdXNlcnMgbWF5IGNhc3QgcmF3IHZhbHVlcyB0by9mcm9tIHRo
ZXNlCi0gICAgICAgICAgICAvLyBjb25zdGFudHMuCi0gICAgICAgICAgICBEaXNwb3NlTm90U3Bl
Y2lmaWVkLCAgICAgIC8vIExlYXZlIGZyYW1lIGluIGZyYW1lYnVmZmVyCi0gICAgICAgICAgICBE
aXNwb3NlS2VlcCwgICAgICAgICAgICAgIC8vIExlYXZlIGZyYW1lIGluIGZyYW1lYnVmZmVyCi0g
ICAgICAgICAgICBEaXNwb3NlT3ZlcndyaXRlQmdjb2xvciwgIC8vIENsZWFyIGZyYW1lIHRvIHRy
YW5zcGFyZW50Ci0gICAgICAgICAgICBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgIC8vIENsZWFy
IGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNvbnRlbnRzCi0gICAgICAgIH07CisgICAgICAgIGVudW0gY2xhc3Mg
RGVjb2RpbmdTdGF0dXMgeyBFbXB0eSwgUGFydGlhbCwgQ29tcGxldGUgfTsKKyAgICAgICAgZW51
bSBjbGFzcyBEaXNwb3NhbE1ldGhvZCB7IE5vdFNwZWNpZmllZCwgS2VlcCwgT3ZlcndyaXRlQmdj
b2xvciwgT3ZlcndyaXRlUHJldmlvdXMgfTsKIAogICAgICAgICBJbWFnZUZyYW1lKCk7CiAKQEAg
LTY4LDc0ICs1Nyw0MSBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAgICAg
ICAgIC8vIGNyZWF0ZSBhIG5ldyBjb3B5IG9mIHRoZSBpbWFnZSBkYXRhLCBvbmx5IGluY3JlYXNl
IHRoZSByZWYgY291bnQuCiAgICAgICAgIEltYWdlRnJhbWUmIG9wZXJhdG9yPShjb25zdCBJbWFn
ZUZyYW1lJiBvdGhlcik7CiAKLSAgICAgICAgLy8gVGhlc2UgZG8gbm90IHRvdWNoIG90aGVyIG1l
dGFkYXRhLCBvbmx5IHRoZSByYXcgcGl4ZWwgZGF0YS4KLSAgICAgICAgdm9pZCBjbGVhclBpeGVs
RGF0YSgpOwotICAgICAgICB2b2lkIHplcm9GaWxsUGl4ZWxEYXRhKCk7Ci0gICAgICAgIHZvaWQg
emVyb0ZpbGxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIC8vIE1ha2VzIHRo
aXMgZnJhbWUgaGF2ZSBhbiBpbmRlcGVuZGVudCBjb3B5IG9mIHRoZSBwcm92aWRlZCBpbWFnZSdz
Ci0gICAgICAgIC8vIHBpeGVsIGRhdGEsIHNvIHRoYXQgbW9kaWZpY2F0aW9ucyBpbiBvbmUgZnJh
bWUgYXJlIG5vdCByZWZsZWN0ZWQgaW4KLSAgICAgICAgLy8gdGhlIG90aGVyLiAgUmV0dXJucyB3
aGV0aGVyIHRoZSBjb3B5IHN1Y2NlZWRlZC4KLSAgICAgICAgYm9vbCBjb3B5Qml0bWFwRGF0YShj
b25zdCBJbWFnZUZyYW1lJik7Ci0KLSAgICAgICAgLy8gQ29waWVzIHRoZSBwaXhlbCBkYXRhIGF0
IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhlCi0gICAgICAgIC8vIHNh
bWUgWC1jb29yZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1dCBub3QgaW5j
bHVkaW5nCi0gICAgICAgIC8vIGVuZFkuCi0gICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhpbnQg
c3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwotCi0gICAgICAgIC8vIEFs
bG9jYXRlcyBzcGFjZSBmb3IgdGhlIHBpeGVsIGRhdGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUg
YW55IHBpeGVscwotICAgICAgICAvLyBhcmUgd3JpdHRlbi4gIE11c3Qgb25seSBiZSBjYWxsZWQg
b25jZS4gIFJldHVybnMgd2hldGhlciBhbGxvY2F0aW9uCi0gICAgICAgIC8vIHN1Y2NlZWRlZC4K
LSAgICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmLCBib29sIHByZW11bHRpcGx5QWxw
aGEpOwotICAgICAgICAKLSAgICAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9w
aXhlbHMtPnNpemUoKTsgfQorICAgICAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKERpc3Bvc2Fs
TWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9CisgICAgICAgIERp
c3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1l
dGhvZDsgfQogCi0gICAgICAgIC8vIFJldHVybnMgYSBjYWxsZXItb3duZWQgcG9pbnRlciB0byB0
aGUgdW5kZXJseWluZyBuYXRpdmUgaW1hZ2UgZGF0YS4KLSAgICAgICAgLy8gKEFjdHVhbCB1c2U6
IFRoaXMgcG9pbnRlciB3aWxsIGJlIG93bmVkIGJ5IEJpdG1hcEltYWdlIGFuZCBmcmVlZCBpbgot
ICAgICAgICAvLyBGcmFtZURhdGE6OmNsZWFyKCkpLgotICAgICAgICBOYXRpdmVJbWFnZVB0ciBh
c05ld05hdGl2ZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbHMtPmltYWdlKCk7IH0KKyAg
ICAgICAgdm9pZCBzZXRTdGF0dXMoRGVjb2RpbmdTdGF0dXMgc3RhdHVzKSB7IG1fc3RhdHVzID0g
c3RhdHVzOyB9CisgICAgICAgIERlY29kaW5nU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdHVzOyB9CisgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dHVzID09IERlY29kaW5nU3RhdHVzOjpFbXB0eTsgfQorICAgICAgICBib29sIGlzUGFydGlhbCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpQYXJ0aWFsOyB9Cisg
ICAgICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzID09IERlY29k
aW5nU3RhdHVzOjpDb21wbGV0ZTsgfQogCi0gICAgICAgIGlubGluZSBCaXRtYXBQaXhlbHMqIHBp
eGVscygpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkgOiBudWxscHRy
OyB9Ci0gICAgICAgIGlubGluZSBib29sIGhhc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIHBpeGVs
cygpOyB9CisgICAgICAgIGJvb2wgaW5pdFBpeGVscyhjb25zdCBJbnRTaXplJiwgYm9vbCBwcmVt
dWx0aXBseUFscGhhKTsKKyAgICAgICAgYm9vbCBjb3B5UGl4ZWxzKGNvbnN0IEltYWdlRnJhbWUm
KTsKKyAgICAgICAgdm9pZCBjbGVhclBpeGVscygpIHsgbV9waXhlbHMgPSBudWxscHRyOyB9CiAK
LSAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OwotICAgICAgICBGcmFtZVN0YXR1cyBzdGF0
dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQotICAgICAgICB1bnNpZ25lZCBkdXJhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICAgICAgRnJhbWVEaXNwb3NhbE1l
dGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0K
KyAgICAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbHMtPnNpemUoKTsg
fQogCi0gICAgICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBhbHBoYSk7Ci0gICAgICAgIHZvaWQg
c2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cyk7CiAgICAgICAgIHZvaWQgc2V0RHVyYXRpb24o
dW5zaWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9Ci0gICAgICAgIHZv
aWQgc2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNw
b3NhbE1ldGhvZCA9IG1ldGhvZDsgfQorICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KIAotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGlu
dCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQg
YSkKLSAgICAgICAgewotICAgICAgICAgICAgbV9waXhlbHMtPnNldFJHQkEoeCwgeSwgciwgZywg
YiwgYSk7Ci0gICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKSB7
IG1faGFzQWxwaGEgPSBhbHBoYTsgfQorICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNBbHBoYTsgfQogCi0gICAgICAgIGlubGluZSBSR0JBMzIqIGdldEFkZHIoaW50
IHgsIGludCB5KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9waXhlbHMtPmF0KHgs
IHkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShSR0JBMzIqIGRl
c3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1fcGl4ZWxzLT5zZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOwot
ICAgICAgICB9CisgICAgICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9pbWFnZTsgfQorICAgICAgICBCaXRtYXBQaXhlbHMqIHBpeGVscygpIGNvbnN0IHsgcmV0dXJu
IG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkgOiBudWxscHRyOyB9CiAKLSNpZiBFTkFCTEUoQVBO
RykKLSAgICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCBy
LCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtX3BpeGVscy0+b3ZlclJHQkEoZGVzdCwgciwgZywgYiwgYSk7Ci0gICAgICAgIH0KLSNl
bmRpZgorICAgICAgICBib29sIGhhc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQor
ICAgICAgICBib29sIGhhc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIHBpeGVscygpOyB9CiAKICAg
ICBwcml2YXRlOgorICAgICAgICBEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kIHsgRGlz
cG9zYWxNZXRob2Q6Ok5vdFNwZWNpZmllZCB9OworICAgICAgICBEZWNvZGluZ1N0YXR1cyBtX3N0
YXR1cyB7IERlY29kaW5nU3RhdHVzOjpFbXB0eSB9OworICAgICAgICBOYXRpdmVJbWFnZVB0ciBt
X2ltYWdlOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBtX3BpeGVsczsK
LSAgICAgICAgYm9vbCBtX2hhc0FscGhhOwotICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsK
LSAgICAgICAgdW5zaWduZWQgbV9kdXJhdGlvbjsKLSAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhv
ZCBtX2Rpc3Bvc2FsTWV0aG9kOworCisgICAgICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07Cisg
ICAgICAgIGJvb2wgbV9oYXNBbHBoYSB7IHRydWUgfTsKICAgICB9OwogCiAgICAgLy8gSW1hZ2VE
ZWNvZGVyIGlzIGEgYmFzZSBmb3IgYWxsIGZvcm1hdC1zcGVjaWZpYyBkZWNvZGVycwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdl
RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAv
Qk1QSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA0NTdhZWYwLi5hMTRkNDM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1Q
SW1hZ2VEZWNvZGVyLmNwcApAQCAtNzQsNyArNzQsNyBAQCBJbWFnZUZyYW1lKiBCTVBJbWFnZURl
Y29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgICAgIG1fZnJhbWVC
dWZmZXJDYWNoZS5yZXNpemUoMSk7CiAKICAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSAmbV9mcmFt
ZUJ1ZmZlckNhY2hlLmZpcnN0KCk7Ci0gICAgaWYgKGJ1ZmZlci0+c3RhdHVzKCkgIT0gSW1hZ2VG
cmFtZTo6RnJhbWVDb21wbGV0ZSkKKyAgICBpZiAoIWJ1ZmZlci0+aXNDb21wbGV0ZSgpKQogICAg
ICAgICBkZWNvZGUoZmFsc2UpOwogICAgIHJldHVybiBidWZmZXI7CiB9CkBAIC05Niw3ICs5Niw3
IEBAIHZvaWQgQk1QSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSkKICAgICAgICAg
c2V0RmFpbGVkKCk7CiAgICAgLy8gSWYgd2UncmUgZG9uZSBkZWNvZGluZyB0aGUgaW1hZ2UsIHdl
IGRvbid0IG5lZWQgdGhlIEJNUEltYWdlUmVhZGVyCiAgICAgLy8gYW55bW9yZS4gIChJZiB3ZSBm
YWlsZWQsIHxtX3JlYWRlcnwgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkLikKLSAgICBlbHNlIGlm
ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlLmZp
cnN0KCkuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkpCisgICAgZWxzZSBp
ZiAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgKG1fZnJhbWVCdWZmZXJDYWNoZS5m
aXJzdCgpLmlzQ29tcGxldGUoKSkpCiAgICAgICAgIG1fcmVhZGVyID0gbnVsbHB0cjsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JN
UEltYWdlUmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKaW5kZXggOTgxYzExZi4uMDU4N2ZjNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVh
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAv
Qk1QSW1hZ2VSZWFkZXIuY3BwCkBAIC03NywxMCArNzcsMTAgQEAgYm9vbCBCTVBJbWFnZVJlYWRl
cjo6ZGVjb2RlQk1QKGJvb2wgb25seVNpemUpCiAKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFt
ZWJ1ZmZlciBpZiBuZWVkZWQuCiAgICAgQVNTRVJUKG1fYnVmZmVyKTsgIC8vIFBhcmVudCBzaG91
bGQgc2V0IHRoaXMgYmVmb3JlIGFza2luZyB1cyB0byBkZWNvZGUhCi0gICAgaWYgKG1fYnVmZmVy
LT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7Ci0gICAgICAgIGlmICghbV9i
dWZmZXItPnNldFNpemUobV9wYXJlbnQtPnNpemUoKSwgbV9wYXJlbnQtPnByZW11bHRpcGx5QWxw
aGEoKSkpCisgICAgaWYgKG1fYnVmZmVyLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFtX2J1
ZmZlci0+aW5pdFBpeGVscyhtX3BhcmVudC0+c2l6ZSgpLCBtX3BhcmVudC0+cHJlbXVsdGlwbHlB
bHBoYSgpKSkKICAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+c2V0RmFpbGVkKCk7IC8vIFVu
YWJsZSB0byBhbGxvY2F0ZS4KLSAgICAgICAgbV9idWZmZXItPnNldFN0YXR1cyhJbWFnZUZyYW1l
OjpGcmFtZVBhcnRpYWwpOworICAgICAgICBtX2J1ZmZlci0+c2V0U3RhdHVzKEltYWdlRnJhbWU6
OkRlY29kaW5nU3RhdHVzOjpQYXJ0aWFsKTsKICAgICAgICAgLy8gc2V0U2l6ZSgpIGNhbGxzIGVy
YXNlQVJHQigpLCB3aGljaCByZXNldHMgdGhlIGFscGhhIGZsYWcsIHNvIHdlIGZvcmNlCiAgICAg
ICAgIC8vIGl0IGJhY2sgdG8gZmFsc2UgaGVyZS4gIFdlJ2xsIHNldCBpdCB0cnVlIGJlbG93IGlu
IGFsbCBjYXNlcyB3aGVyZQogICAgICAgICAvLyB0aGVzZSAwcyBjb3VsZCBhY3R1YWxseSBzaG93
IHRocm91Z2guCkBAIC0xMTksNyArMTE5LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2Rl
Qk1QKGJvb2wgb25seVNpemUpCiAgICAgfQogCiAgICAgLy8gRG9uZSEKLSAgICBtX2J1ZmZlci0+
c2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgIG1fYnVmZmVyLT5zZXRT
dGF0dXMoSW1hZ2VGcmFtZTo6RGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtNzA0LDcgKzcwNCw4IEBAIEJNUEltYWdlUmVhZGVyOjpQcm9jZXNzaW5n
UmVzdWx0IEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzTm9uUkxFRGF0YShib29sIGluUkxFLCBpCiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbV9zZWVuTm9uWmVy
b0FscGhhUGl4ZWwgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBpZiAobV9zZWVuWmVyb0Fs
cGhhUGl4ZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLT56ZXJvRmlsbFBp
eGVsRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXItPnBpeGVscygpLT5j
bGVhcigpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXItPnNldEhhc0FscGhhKHRy
dWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWVuWmVyb0FscGhhUGl4ZWwgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbHBoYSAhPSAyNTUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEodHJ1ZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFn
ZVJlYWRlci5oCmluZGV4IGI1Y2I5NmUuLjBlOGVmMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5o
CkBAIC0yNDgsNyArMjQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgYWxwaGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fYnVmZmVyLT5zZXRSR0JB
KG1fY29vcmQueCgpLCBtX2Nvb3JkLnkoKSwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAg
ICAgICAgICAgbV9idWZmZXItPnBpeGVscygpLT5zZXRSR0JBKG1fY29vcmQueCgpLCBtX2Nvb3Jk
LnkoKSwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgICAgICAgICAgbV9jb29yZC5tb3Zl
KDEsIDApOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXggMjVh
NzQ4Yy4uOGM4MTQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKQEAgLTExNyw3ICsx
MTcsNyBAQCBJbWFnZUZyYW1lKiBHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChz
aXplX3QgaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgSW1hZ2VGcmFtZSYgZnJhbWUg
PSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBJ
bWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgIGlmICghZnJhbWUuaXNDb21wbGV0ZSgpKQog
ICAgICAgICBkZWNvZGUoaW5kZXggKyAxLCBHSUZGdWxsUXVlcnkpOwogICAgIHJldHVybiAmZnJh
bWU7CiB9CkBAIC0xNTYsMjUgKzE1NiwyNSBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJG
cmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQogICAgIC8vIG5vdCB0byBo
YXZlIG5vbi1lbXB0eSBmcmFtZXMgYWZ0ZXIgdGhlIGZyYW1lIHdlJ3JlIGN1cnJlbnRseSBkZWNv
ZGluZy4KICAgICAvLyBTbywgc2NhbiBiYWNrd2FyZHMgZnJvbSB8ZW5kfCBhcyBmb2xsb3dzOgog
ICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMgZW1wdHksIHdlJ3JlIHN0aWxsIHBhc3QgYW55IGZy
YW1lcyB3ZSBjYXJlIGFib3V0LgotICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMgY29tcGxldGUs
IGJ1dCBpcyBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMsIHdlJ2xsCisgICAgLy8gICAqIElmIHRo
ZSBmcmFtZSBpcyBjb21wbGV0ZSwgYnV0IGlzIERpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2
aW91cywgd2UnbGwKICAgICAvLyAgICAgc2tpcCBvdmVyIGl0IGluIGZ1dHVyZSBpbml0RnJhbWVC
dWZmZXIoKSBjYWxscy4gIFdlIGNhbiBjbGVhciBpdAogICAgIC8vICAgICB1bmxlc3MgaXQncyB8
ZW5kfCwgYW5kIGtlZXAgc2Nhbm5pbmcuICBGb3IgYW55IG90aGVyIGRpc3Bvc2FsIG1ldGhvZCwK
ICAgICAvLyAgICAgc3RvcCBzY2FubmluZywgYXMgd2UndmUgZm91bmQgdGhlIGZyYW1lIGluaXRG
cmFtZUJ1ZmZlcigpIHdpbGwgbmVlZAogICAgIC8vICAgICBuZXh0LgogICAgIC8vICAgKiBJZiB0
aGUgZnJhbWUgaXMgcGFydGlhbCwgd2UncmUgZGVjb2RpbmcgaXQsIHNvIGRvbid0IGNsZWFyIGl0
OyBpZiBpdAotICAgIC8vICAgICBoYXMgYSBkaXNwb3NhbCBtZXRob2Qgb3RoZXIgdGhhbiBEaXNw
b3NlT3ZlcndyaXRlUHJldmlvdXMsIHN0b3AKKyAgICAvLyAgICAgaGFzIGEgZGlzcG9zYWwgbWV0
aG9kIG90aGVyIHRoYW4gRGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZVByZXZpb3VzLCBzdG9wCiAg
ICAgLy8gICAgIHNjYW5uaW5nLCBhcyB3ZSdsbCBvbmx5IG5lZWQgdGhpcyBmcmFtZSB3aGVuIGRl
Y29kaW5nIHRoZSBuZXh0IG9uZS4KICAgICBWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGko
ZW5kKTsKLSAgICBmb3IgKDsgKGkgIT0gbV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmICgo
aS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgfHwgKGktPmRpc3Bvc2FsTWV0
aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKSk7IC0taSkgewot
ICAgICAgICBpZiAoKGktPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpICYm
IChpICE9IGVuZCkpCi0gICAgICAgICAgICBpLT5jbGVhclBpeGVsRGF0YSgpOworICAgIGZvciAo
OyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSkgJiYgKChpLT5pc0VtcHR5KCkpIHx8
IChpLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpPdmVy
d3JpdGVQcmV2aW91cykpOyAtLWkpIHsKKyAgICAgICAgaWYgKChpLT5pc0NvbXBsZXRlKCkpICYm
IChpICE9IGVuZCkpCisgICAgICAgICAgICBpLT5jbGVhclBpeGVscygpOwogICAgIH0KIAogICAg
IC8vIE5vdyB8aXwgaG9sZHMgdGhlIGxhc3QgZnJhbWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsgY2xl
YXIgcHJpb3IgZnJhbWVzLgogICAgIGZvciAoVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBq
KG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKTsgaiAhPSBpOyArK2opIHsKLSAgICAgICAgQVNT
RVJUKGotPnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7Ci0gICAgICAgIGlm
IChqLT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQotICAgICAgICAgICAgai0+
Y2xlYXJQaXhlbERhdGEoKTsKKyAgICAgICAgQVNTRVJUKCFqLT5pc1BhcnRpYWwoKSk7CisgICAg
ICAgIGlmICghai0+aXNFbXB0eSgpKQorICAgICAgICAgICAgai0+Y2xlYXJQaXhlbHMoKTsKICAg
ICB9CiAKICAgICAvLyBXaGVuIHNvbWUgZnJhbWVzIGFyZSBjbGVhcmVkLCB0aGUgcmVhZGVyIGlz
IG91dCBvZiBzeW5jLCBzaW5jZSB0aGUgY2FsbGVyIG1pZ2h0IGFzayBmb3IgYW55IGZyYW1lIG5v
dApAQCAtMjEzLDE2ICsyMTMsMTYgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVk
Um93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZAogCiAgICAgLy8g
SW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LgogICAgIEltYWdlRnJhbWUmIGJ1ZmZl
ciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBpZiAoKChidWZmZXIuc3Rh
dHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFt
ZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNQaXhlbHMoKSkKKyAgICBpZiAoKChidWZmZXIuaXNFbXB0
eSgpKSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhhc1BpeGVs
cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSR0JBMzIqIGN1cnJlbnRBZGRyZXNz
ID0gYnVmZmVyLmdldEFkZHIoeEJlZ2luLCB5QmVnaW4pOworICAgIFJHQkEzMiogY3VycmVudEFk
ZHJlc3MgPSBidWZmZXIucGl4ZWxzKCktPmF0KHhCZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0
ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50
IHggPSB4QmVnaW47IHggPCB4RW5kOyArK3gpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hh
ciBzb3VyY2VWYWx1ZSA9IHJvd0J1ZmZlclsobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0g
OiB4KSAtIGZyYW1lQ29udGV4dC0+eE9mZnNldF07CiAgICAgICAgIGlmICgoIWZyYW1lQ29udGV4
dC0+aXNUcmFuc3BhcmVudCB8fCAoc291cmNlVmFsdWUgIT0gZnJhbWVDb250ZXh0LT50cGl4ZWwp
KSAmJiAoc291cmNlVmFsdWUgPCBjb2xvck1hcFNpemUpKSB7CiAgICAgICAgICAgICBjb25zdCBz
aXplX3QgY29sb3JJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc291cmNlVmFsdWUpICogMzsK
LSAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKGN1cnJlbnRBZGRyZXNzLCBjb2xvck1hcFtjb2xv
ckluZGV4XSwgY29sb3JNYXBbY29sb3JJbmRleCArIDFdLCBjb2xvck1hcFtjb2xvckluZGV4ICsg
Ml0sIDI1NSk7CisgICAgICAgICAgICBidWZmZXIucGl4ZWxzKCktPnNldFJHQkEoY3VycmVudEFk
ZHJlc3MsIGNvbG9yTWFwW2NvbG9ySW5kZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0sIGNv
bG9yTWFwW2NvbG9ySW5kZXggKyAyXSwgMjU1KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIFdlIG1h
eSBvciBtYXkgbm90IG5lZWQgdG8gd3JpdGUgdHJhbnNwYXJlbnQgcGl4ZWxzIHRvIHRoZSBidWZm
ZXIuCkBAIC0yMzMsMjcgKzIzMywyNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29k
ZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgY29uc3QgVmVjdG9yPHVuc2lnbmVkCiAgICAgICAg
ICAgICAvLyBiZXlvbmQgdGhlIGZpcnN0LCBvciB0aGUgaW5pdGlhbCBwYXNzZXMgd2lsbCAic2hv
dyB0aHJvdWdoIiB0aGUKICAgICAgICAgICAgIC8vIGxhdGVyIG9uZXMuCiAgICAgICAgICAgICBp
ZiAod3JpdGVUcmFuc3BhcmVudFBpeGVscykKLSAgICAgICAgICAgICAgICBidWZmZXIuc2V0UkdC
QShjdXJyZW50QWRkcmVzcywgMCwgMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgYnVmZmVyLnBp
eGVscygpLT5zZXRSR0JBKGN1cnJlbnRBZGRyZXNzLCAwLCAwLCAwLCAwKTsKICAgICAgICAgfQog
ICAgICAgICArK2N1cnJlbnRBZGRyZXNzOwogICAgIH0KIAogICAgIC8vIFRlbGwgdGhlIGZyYW1l
IHRvIGNvcHkgdGhlIHJvdyBkYXRhIGlmIG5lZWQgYmUuCiAgICAgaWYgKHJlcGVhdENvdW50ID4g
MSkKLSAgICAgICAgYnVmZmVyLmNvcHlSb3dOVGltZXMoeEJlZ2luLCB4RW5kLCB5QmVnaW4sIHlF
bmQpOworICAgICAgICBidWZmZXIucGl4ZWxzKCktPnJlcGVhdEZpcnN0Um93KEludFJlY3QoeEJl
Z2luLCB5QmVnaW4sIHhFbmQgLSB4QmVnaW4sIHlFbmQgLSB5QmVnaW4pKTsKIAogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25l
ZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLCBJbWFnZUZyYW1lOjpGcmFtZURp
c3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQorYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1l
Q29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1h
Z2VGcmFtZTo6RGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QpCiB7CiAgICAgLy8gSW5pdGlh
bGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LiAgU29tZSBHSUZzIGluc2VydCBkby1ub3RoaW5n
IGZyYW1lcywKICAgICAvLyBpbiB3aGljaCBjYXNlIHdlIG5ldmVyIHJlYWNoIGhhdmVEZWNvZGVk
Um93KCkgYmVmb3JlIGdldHRpbmcgaGVyZS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2Zy
YW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKChidWZmZXIuc3RhdHVzKCkgPT0g
SW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkK
KyAgICBpZiAoKGJ1ZmZlci5pc0VtcHR5KCkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRl
eCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gaW5pdEZyYW1lQnVmZmVyKCkgaGFzIGFscmVh
ZHkgY2FsbGVkIHNldEZhaWxlZCgpLgogCi0gICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1l
OjpGcmFtZUNvbXBsZXRlKTsKKyAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkRlY29k
aW5nU3RhdHVzOjpDb21wbGV0ZSk7CiAgICAgYnVmZmVyLnNldER1cmF0aW9uKGZyYW1lRHVyYXRp
b24pOwogICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChkaXNwb3NhbE1ldGhvZCk7CiAKQEAg
LTI2OCwyMiArMjY4LDIyIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVu
c2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sCiAgICAgICAgICAgICAv
LyB0cnVlLCB3ZSBjaGVjayB0aGUgc3RhcnQgc3RhdGUgb2YgdGhlIGZyYW1lIC0tIGlmIGl0IGRv
ZXNuJ3QgaGF2ZQogICAgICAgICAgICAgLy8gYWxwaGEsIHdlJ3JlIHNhZmUuCiAgICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gRmlyc3Qgc2tpcCBvdmVyIHByaW9yIERpc3Bvc2VPdmVyd3Jp
dGVQcmV2aW91cyBmcmFtZXMgKHNpbmNlIHRoZXkKKyAgICAgICAgICAgIC8vIEZpcnN0IHNraXAg
b3ZlciBwcmlvciBEaXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlUHJldmlvdXMgZnJhbWVzIChzaW5j
ZSB0aGV5CiAgICAgICAgICAgICAvLyBkb24ndCBhZmZlY3QgdGhlIHN0YXJ0IHN0YXRlIG9mIHRo
aXMgZnJhbWUpIHRoZSBzYW1lIHdheSB3ZSBkbyBpbgogICAgICAgICAgICAgLy8gaW5pdEZyYW1l
QnVmZmVyKCkuCiAgICAgICAgICAgICBjb25zdCBJbWFnZUZyYW1lKiBwcmV2QnVmZmVyID0gJm1f
ZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwotICAgICAgICAgICAgd2hpbGUgKGZyYW1l
SW5kZXggJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlz
cG9zZU92ZXJ3cml0ZVByZXZpb3VzKSkKKyAgICAgICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYm
IChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0
aG9kOjpPdmVyd3JpdGVQcmV2aW91cykpCiAgICAgICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZt
X2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKIAotICAgICAgICAgICAgLy8gTm93LCBp
ZiB3ZSdyZSBhdCBhIERpc3Bvc2VOb3RTcGVjaWZpZWQgb3IgRGlzcG9zZUtlZXAgZnJhbWUsIHRo
ZW4KKyAgICAgICAgICAgIC8vIE5vdywgaWYgd2UncmUgYXQgYSBEaXNwb3NhbE1ldGhvZDo6Tm90
U3BlY2lmaWVkIG9yIERpc3Bvc2FsTWV0aG9kOjpLZWVwIGZyYW1lLCB0aGVuCiAgICAgICAgICAg
ICAvLyB3ZSBjYW4gc2F5IHdlIGhhdmUgbm8gYWxwaGEgaWYgdGhhdCBmcmFtZSBoYWQgbm8gYWxw
aGEuICBCdXQKICAgICAgICAgICAgIC8vIHNpbmNlIGluIGluaXRGcmFtZUJ1ZmZlcigpIHdlIGFs
cmVhZHkgY29waWVkIHRoYXQgZnJhbWUncyBhbHBoYQogICAgICAgICAgICAgLy8gc3RhdGUgaW50
byB0aGUgY3VycmVudCBmcmFtZSdzLCB3ZSBuZWVkIGRvIG5vdGhpbmcgYXQgYWxsIGhlcmUuCiAg
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gVGhlIG9ubHkgcmVtYWluaW5nIGNhc2UgaXMg
YSBEaXNwb3NlT3ZlcndyaXRlQmdjb2xvciBmcmFtZS4gIElmCisgICAgICAgICAgICAvLyBUaGUg
b25seSByZW1haW5pbmcgY2FzZSBpcyBhIERpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVCZ2NvbG9y
IGZyYW1lLiBJZgogICAgICAgICAgICAgLy8gaXQgaGFkIG5vIGFscGhhLCBhbmQgaXRzIHJlY3Qg
aXMgY29udGFpbmVkIGluIHRoZSBjdXJyZW50IGZyYW1lJ3MKICAgICAgICAgICAgIC8vIHJlY3Qs
IHdlIGtub3cgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIG5vIGFscGhhLgotICAgICAgICAgICAgaWYg
KChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVy
d3JpdGVCZ2NvbG9yKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIucGl4ZWxz
KCktPnJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5waXhlbHMoKS0+cmVjdCgpKSkKKyAgICAg
ICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpE
aXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlQmdjb2xvcikgJiYgIXByZXZCdWZmZXItPmhhc0FscGhh
KCkgJiYgYnVmZmVyLnBpeGVscygpLT5yZWN0KCkuY29udGFpbnMocHJldkJ1ZmZlci0+cGl4ZWxz
KCktPnJlY3QoKSkpCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTM1MywyOCArMzUzLDI4IEBAIGJvb2wgR0lGSW1hZ2VEZWNv
ZGVyOjppbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKIAogICAgIGlmICghZnJh
bWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBmcmFtZSwgc28gd2UncmUg
bm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEuCi0gICAgICAgIGlmICghYnVmZmVyLT5z
ZXRTaXplKHNjYWxlZFNpemUoKSwgcHJlbXVsdGlwbHlBbHBoYSgpKSkKKyAgICAgICAgaWYgKCFi
dWZmZXItPmluaXRQaXhlbHMoc2NhbGVkU2l6ZSgpLCBwcmVtdWx0aXBseUFscGhhKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRo
ZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBm
cmFtZSdzCiAgICAgICAgIC8vIGRpc3Bvc2FsIG1ldGhvZC4KICAgICAgICAgLy8KLSAgICAgICAg
Ly8gRnJhbWVzIHRoYXQgdXNlIHRoZSBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgbWV0aG9kIGFy
ZSBlZmZlY3RpdmVseQorICAgICAgICAvLyBGcmFtZXMgdGhhdCB1c2UgdGhlIERpc3Bvc2FsTWV0
aG9kOjpPdmVyd3JpdGVQcmV2aW91cyBtZXRob2QgYXJlIGVmZmVjdGl2ZWx5CiAgICAgICAgIC8v
IG5vLW9wcyBpbiB0ZXJtcyBvZiBjaGFuZ2luZyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgYSBmcmFt
ZSBjb21wYXJlZCB0bwogICAgICAgICAvLyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgdGhlIHByZXZp
b3VzIGZyYW1lLCBzbyBza2lwIG92ZXIgdGhlbS4gIChJZiB0aGUKICAgICAgICAgLy8gZmlyc3Qg
ZnJhbWUgc3BlY2lmaWVzIHRoaXMgbWV0aG9kLCBpdCB3aWxsIGdldCB0cmVhdGVkIGxpa2UKLSAg
ICAgICAgLy8gRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IgYmVsb3cgYW5kIHJlc2V0IHRvIGEgY29t
cGxldGVseSBlbXB0eSBpbWFnZS4pCisgICAgICAgIC8vIERpc3Bvc2FsTWV0aG9kOjpPdmVyd3Jp
dGVCZ2NvbG9yIGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuKQog
ICAgICAgICBjb25zdCBJbWFnZUZyYW1lKiBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNo
ZVstLWZyYW1lSW5kZXhdOwotICAgICAgICBJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9k
IHByZXZNZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOwotICAgICAgICB3aGls
ZSAoZnJhbWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3Zlcndy
aXRlUHJldmlvdXMpKSB7CisgICAgICAgIEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kIHByZXZN
ZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOworICAgICAgICB3aGlsZSAoZnJh
bWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6T3Zl
cndyaXRlUHJldmlvdXMpKSB7CiAgICAgICAgICAgICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZm
ZXJDYWNoZVstLWZyYW1lSW5kZXhdOwogICAgICAgICAgICAgcHJldk1ldGhvZCA9IHByZXZCdWZm
ZXItPmRpc3Bvc2FsTWV0aG9kKCk7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHByZXZCdWZm
ZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgICAgICBBU1NF
UlQocHJldkJ1ZmZlci0+aXNDb21wbGV0ZSgpKTsKIAotICAgICAgICBpZiAoKHByZXZNZXRob2Qg
PT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU5vdFNwZWNpZmllZCkgfHwgKHByZXZNZXRob2QgPT0gSW1h
Z2VGcmFtZTo6RGlzcG9zZUtlZXApKSB7CisgICAgICAgIGlmICgocHJldk1ldGhvZCA9PSBJbWFn
ZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6Tm90U3BlY2lmaWVkKSB8fCAocHJldk1ldGhvZCA9PSBJ
bWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6S2VlcCkpIHsKICAgICAgICAgICAgIC8vIFByZXNl
cnZlIHRoZSBsYXN0IGZyYW1lIGFzIHRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZS4K
LSAgICAgICAgICAgIGlmICghYnVmZmVyLT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcikpCisg
ICAgICAgICAgICBpZiAoIWJ1ZmZlci0+Y29weVBpeGVscygqcHJldkJ1ZmZlcikpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gV2Ugd2FudCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQs
IHdpdGhvdXQKQEAgLTM4NCwxMyArMzg0LDE0IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0
RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKICAgICAgICAgICAgIGlmICghZnJhbWVJ
bmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUo
KSkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBh
IGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQogICAgICAgICAgICAgICAgIC8vIGltYWdlLCBy
ZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KLSAgICAgICAgICAgICAgICBpZiAo
IWJ1ZmZlci0+c2V0U2l6ZShidWZmZXJTaXplLCBwcmVtdWx0aXBseUFscGhhKCkpKQorICAgICAg
ICAgICAgICAgIGlmICghYnVmZmVyLT5pbml0UGl4ZWxzKGJ1ZmZlclNpemUsIHByZW11bHRpcGx5
QWxwaGEoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgd2hvbGUgcHJldmlv
dXMgYnVmZmVyLCB0aGVuIGNsZWFyIGp1c3QgaXRzIGZyYW1lLgotICAgICAgICAgICAgICAgIGlm
ICghYnVmZmVyLT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcikpCisgICAgICAgICAgICAgICAg
aWYgKCFidWZmZXItPmNvcHlQaXhlbHMoKnByZXZCdWZmZXIpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc2V0RmFpbGVkKCk7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLT56ZXJvRmlsbEZy
YW1lUmVjdChwcmV2UmVjdCk7CisgICAgICAgICAgICAgICAgYnVmZmVyLT5waXhlbHMoKS0+Y2xl
YXJSZWN0KHByZXZSZWN0KTsKKyAgICAgICAgICAgICAgICBidWZmZXItPnNldEhhc0FscGhhKHRy
dWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNDAyLDcgKzQwMyw3IEBA
IGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRl
eCkKICAgICBidWZmZXItPnBpeGVscygpLT5zZXRSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdo
dCAtIGxlZnQsIGJvdHRvbSAtIHRvcCkpOwogCiAgICAgLy8gVXBkYXRlIG91ciBzdGF0dXMgdG8g
YmUgcGFydGlhbGx5IGNvbXBsZXRlLgotICAgIGJ1ZmZlci0+c2V0U3RhdHVzKEltYWdlRnJhbWU6
OkZyYW1lUGFydGlhbCk7CisgICAgYnVmZmVyLT5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RGVjb2Rp
bmdTdGF0dXM6OlBhcnRpYWwpOwogCiAgICAgLy8gUmVzZXQgdGhlIGFscGhhIHBpeGVsIHRyYWNr
ZXIgZm9yIHRoaXMgZnJhbWUuCiAgICAgbV9jdXJyZW50QnVmZmVyU2F3QWxwaGEgPSBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuaAppbmRleCA3YjhkODdjLi4xNGIyOWE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJ
RkltYWdlRGVjb2Rlci5oCkBAIC01NiwxMyArNTYsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVhZGVyLgogICAgICAgICBib29s
IGhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIGNvbnN0IFZlY3Rvcjx1bnNpZ25l
ZCBjaGFyPiYgcm93QnVmZmVyLCBzaXplX3Qgd2lkdGgsIHNpemVfdCByb3dOdW1iZXIsIHVuc2ln
bmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpOwotICAgICAgICBi
b29sIGZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJh
dGlvbiwgSW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCk7Cisg
ICAgICAgIGJvb2wgZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBm
cmFtZUR1cmF0aW9uLCBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZCk7CiAgICAgICAgIHZvaWQg
Z2lmQ29tcGxldGUoKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIElmIHRoZSBxdWVyeSBp
cyBHSUZGdWxsUXVlcnksIGRlY29kZXMgdGhlIGltYWdlIHVwIHRvIChidXQgbm90Ci0gICAgICAg
IC8vIGluY2x1ZGluZykgfGhhbHRBdEZyYW1lfC4gIE90aGVyd2lzZSwgZGVjb2RlcyBhcyBtdWNo
IGFzIGlzIG5lZWRlZCB0bwotICAgICAgICAvLyBhbnN3ZXIgdGhlIHF1ZXJ5LCBpZ25vcmluZyBi
aXRtYXAgZGF0YS4gIElmIGRlY29kaW5nIGZhaWxzIGJ1dCB0aGVyZQorICAgICAgICAvLyBpbmNs
dWRpbmcpIHxoYWx0QXRGcmFtZXwuIE90aGVyd2lzZSwgZGVjb2RlcyBhcyBtdWNoIGFzIGlzIG5l
ZWRlZCB0bworICAgICAgICAvLyBhbnN3ZXIgdGhlIHF1ZXJ5LCBpZ25vcmluZyBiaXRtYXAgZGF0
YS4gSWYgZGVjb2RpbmcgZmFpbHMgYnV0IHRoZXJlCiAgICAgICAgIC8vIGlzIG5vIG1vcmUgZGF0
YSBjb21pbmcsIHNldHMgdGhlICJkZWNvZGUgZmFpbHVyZSIgZmxhZy4KICAgICAgICAgdm9pZCBk
ZWNvZGUodW5zaWduZWQgaGFsdEF0RnJhbWUsIEdJRlF1ZXJ5KTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJl
YWRlci5jcHAKaW5kZXggNTU4ZDk3OS4uNWI4OGE5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIu
Y3BwCkBAIC01NjgsMTQgKzU2OCwxNCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpwYXJzZShzaXpl
X3QgZGF0YVBvc2l0aW9uLCBzaXplX3QgbGVuLCBib29sIHBhcnNlU2l6ZU9ubHkpCiAKICAgICAg
ICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgInVzZXIgaW5wdXQiIGJpdC4KIAotICAgICAgICAgICAg
Ly8gTk9URTogVGhpcyByZWxpZXMgb24gdGhlIHZhbHVlcyBpbiB0aGUgRnJhbWVEaXNwb3NhbE1l
dGhvZCBlbnVtCisgICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHJlbGllcyBvbiB0aGUgdmFsdWVz
IGluIHRoZSBEaXNwb3NhbE1ldGhvZCBlbnVtCiAgICAgICAgICAgICAvLyBtYXRjaGluZyB0aG9z
ZSBpbiB0aGUgR0lGIHNwZWMhCiAgICAgICAgICAgICBpbnQgZGlzcG9zYWxNZXRob2QgPSAoKCpj
dXJyZW50Q29tcG9uZW50KSA+PiAyKSAmIDB4NzsKLSAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+
ZGlzcG9zYWxNZXRob2QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURp
c3Bvc2FsTWV0aG9kPihkaXNwb3NhbE1ldGhvZCk7CisgICAgICAgICAgICBjdXJyZW50RnJhbWUt
PmRpc3Bvc2FsTWV0aG9kID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9z
YWxNZXRob2Q+KGRpc3Bvc2FsTWV0aG9kKTsKICAgICAgICAgICAgIC8vIFNvbWUgc3BlY3Mgc2F5
IHRoYXQgZGlzcG9zYWwgbWV0aG9kIDMgaXMgIm92ZXJ3cml0ZSBwcmV2aW91cyIsIG90aGVycyB0
aGF0IHNldHRpbmcKICAgICAgICAgICAgIC8vIHRoZSB0aGlyZCBiaXQgb2YgdGhlIGZpZWxkIChp
LmUuIG1ldGhvZCA0KSBpcy4gV2UgbWFwIGJvdGggdG8gdGhlIHNhbWUgdmFsdWUuCiAgICAgICAg
ICAgICBpZiAoZGlzcG9zYWxNZXRob2QgPT0gNCkKLSAgICAgICAgICAgICAgICBjdXJyZW50RnJh
bWUtPmRpc3Bvc2FsTWV0aG9kID0gV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0
ZVByZXZpb3VzOworICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2Qg
PSBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlUHJldmlvdXM7
CiAgICAgICAgICAgICBjdXJyZW50RnJhbWUtPmRlbGF5VGltZSA9IEdFVElOVDE2KGN1cnJlbnRD
b21wb25lbnQgKyAxKSAqIDEwOwogICAgICAgICAgICAgR0VUTigxLCBHSUZDb25zdW1lQmxvY2sp
OwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCmluZGV4IGVhNDJiMTEu
LmVmNWMxYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCkBAIC0xNTUsNyArMTU1LDcgQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIHdpZHRoOwogICAgIHVuc2lnbmVkIGhlaWdodDsKICAgICBpbnQg
dHBpeGVsOyAvLyBJbmRleCBvZiB0cmFuc3BhcmVudCBwaXhlbC4KLSAgICBXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kOyAvLyBSZXN0b3JlIHRv
IGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBldGMuCisgICAgV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6RGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2Q7IC8vIFJlc3RvcmUgdG8gYmFja2dyb3Vu
ZCwgbGVhdmUgaW4gcGxhY2UsIGV0Yy4KICAgICBzaXplX3QgbG9jYWxDb2xvcm1hcFBvc2l0aW9u
OyAvLyBQZXItaW1hZ2UgY29sb3JtYXAuCiAgICAgaW50IGxvY2FsQ29sb3JtYXBTaXplOyAvLyBT
aXplIG9mIGxvY2FsIGNvbG9ybWFwIGFycmF5LgogICAgIGludCBkYXRhc2l6ZTsKQEAgLTE3NCw3
ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgd2lkdGgoMCkKICAgICAgICAgLCBoZWlnaHQo
MCkKICAgICAgICAgLCB0cGl4ZWwoMCkKLSAgICAgICAgLCBkaXNwb3NhbE1ldGhvZChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpEaXNwb3NlTm90U3BlY2lmaWVkKQorICAgICAgICAsIGRpc3Bvc2FsTWV0
aG9kKFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpOb3RTcGVjaWZpZWQpCiAg
ICAgICAgICwgbG9jYWxDb2xvcm1hcFBvc2l0aW9uKDApCiAgICAgICAgICwgbG9jYWxDb2xvcm1h
cFNpemUoMCkKICAgICAgICAgLCBkYXRhc2l6ZSgwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNw
cAppbmRleCAzY2I0YTEzLi45MzQ1MWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcApA
QCAtMTE1LDcgKzExNSw3IEBAIEltYWdlRnJhbWUqIElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZm
ZXJBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBJbWFnZUZy
YW1lKiBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKLSAgICBpZiAoYnVmZmVy
LT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgIGlmICghYnVmZmVy
LT5pc0NvbXBsZXRlKCkpCiAgICAgICAgIGRlY29kZShpbmRleCwgZmFsc2UpOwogICAgIHJldHVy
biBidWZmZXI7CiB9CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBJQ09JbWFnZURlY29kZXI6OmRl
Y29kZShzaXplX3QgaW5kZXgsIGJvb2wgb25seVNpemUpCiAgICAgLy8gSWYgd2UncmUgZG9uZSBk
ZWNvZGluZyB0aGlzIGZyYW1lLCB3ZSBkb24ndCBuZWVkIHRoZSBCTVBJbWFnZVJlYWRlciBvcgog
ICAgIC8vIFBOR0ltYWdlRGVjb2RlciBhbnltb3JlLiAgKElmIHdlIGZhaWxlZCwgdGhlc2UgaGF2
ZSBhbHJlYWR5IGJlZW4KICAgICAvLyBjbGVhcmVkLikKLSAgICBlbHNlIGlmICgobV9mcmFtZUJ1
ZmZlckNhY2hlLnNpemUoKSA+IGluZGV4KSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XS5z
dGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKSkgeworICAgIGVsc2UgaWYgKCht
X2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpID4gaW5kZXgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGVb
aW5kZXhdLmlzQ29tcGxldGUoKSkpIHsKICAgICAgICAgbV9ibXBSZWFkZXJzW2luZGV4XSA9IG51
bGxwdHI7CiAgICAgICAgIG1fcG5nRGVjb2RlcnNbaW5kZXhdID0gbnVsbHB0cjsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAppbmRleCAwOTM1NzBlLi5jMTc0MDE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTUzNyw3ICs1MzcsNyBAQCBJbWFnZUZy
YW1lKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQog
ICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwogCiAgICAgSW1hZ2VGcmFtZSYg
ZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9
IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCisgICAgaWYgKCFmcmFtZS5pc0NvbXBsZXRlKCkp
CiAgICAgICAgIGRlY29kZShmYWxzZSk7CiAgICAgcmV0dXJuICZmcmFtZTsKIH0KQEAgLTU1NSw3
ICs1NTUsNyBAQCB2b2lkIHNldFBpeGVsKEltYWdlRnJhbWUmIGJ1ZmZlciwgUkdCQTMyKiBjdXJy
ZW50QWRkcmVzcywgSlNBTVBBUlJBWSBzYW1wbGVzLCBpbgogCiAgICAgc3dpdGNoIChjb2xvclNw
YWNlKSB7CiAgICAgY2FzZSBKQ1NfUkdCOgotICAgICAgICBidWZmZXIuc2V0UkdCQShjdXJyZW50
QWRkcmVzcywganNhbXBsZVswXSwganNhbXBsZVsxXSwganNhbXBsZVsyXSwgMHhGRik7CisgICAg
ICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdCQShjdXJyZW50QWRkcmVzcywganNhbXBsZVswXSwg
anNhbXBsZVsxXSwganNhbXBsZVsyXSwgMHhGRik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SkNTX0NNWUs6CiAgICAgICAgIC8vIFNvdXJjZSBpcyAnSW52ZXJ0ZWQgQ01ZSycsIG91dHB1dCBp
cyBSR0IuCkBAIC01NjgsNyArNTY4LDcgQEAgdm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZm
ZXIsIFJHQkEzMiogY3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW4KICAgICAg
ICAgLy8gRnJvbSBDTVkgKDAuLjEpIHRvIFJHQiAoMC4uMSk6CiAgICAgICAgIC8vIFIgPSAxIC0g
QyA9PiAxIC0gKDEgLSBpQyppSykgPT4gaUMqaUsgIFtHIGFuZCBCIHNpbWlsYXJdCiAgICAgICAg
IHVuc2lnbmVkIGsgPSBqc2FtcGxlWzNdOwotICAgICAgICBidWZmZXIuc2V0UkdCQShjdXJyZW50
QWRkcmVzcywganNhbXBsZVswXSAqIGsgLyAyNTUsIGpzYW1wbGVbMV0gKiBrIC8gMjU1LCBqc2Ft
cGxlWzJdICogayAvIDI1NSwgMHhGRik7CisgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdC
QShjdXJyZW50QWRkcmVzcywganNhbXBsZVswXSAqIGsgLyAyNTUsIGpzYW1wbGVbMV0gKiBrIC8g
MjU1LCBqc2FtcGxlWzJdICogayAvIDI1NSwgMHhGRik7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IH0KQEAgLTU5Miw3ICs1OTIsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5s
aW5lcyhJbWFnZUZyYW1lJiBidWZmZXIpCiAgICAgICAgIGlmIChkZXN0WSA8IDApCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVy
LmdldEFkZHIoMCwgZGVzdFkpOworICAgICAgICBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzID0gYnVm
ZmVyLnBpeGVscygpLT5hdCgwLCBkZXN0WSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7ICsreCkgewogICAgICAgICAgICAgc2V0UGl4ZWw8Y29sb3JTcGFjZT4oYnVmZmVyLCBj
dXJyZW50QWRkcmVzcywgc2FtcGxlcywgaXNTY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4
KTsKICAgICAgICAgICAgICsrY3VycmVudEFkZHJlc3M7CkBAIC02MTQsMTAgKzYxNCwxMCBAQCBi
b29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAKICAgICAvLyBJbml0aWFs
aXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0g
bV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwotICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VG
cmFtZTo6RnJhbWVFbXB0eSkgewotICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNp
emUoKSwgcHJlbXVsdGlwbHlBbHBoYSgpKSkKKyAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAoIWJ1ZmZlci5pbml0UGl4ZWxzKHNjYWxlZFNpemUoKSwgcHJlbXVsdGlwbHlB
bHBoYSgpKSkKICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKLSAgICAgICAgYnVmZmVy
LnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworICAgICAgICBidWZmZXIuc2V0
U3RhdHVzKEltYWdlRnJhbWU6OkRlY29kaW5nU3RhdHVzOjpQYXJ0aWFsKTsKICAgICAgICAgLy8g
VGhlIGJ1ZmZlciBpcyB0cmFuc3BhcmVudCBvdXRzaWRlIHRoZSBkZWNvZGVkIGFyZWEgd2hpbGUg
dGhlIGltYWdlIGlzCiAgICAgICAgIC8vIGxvYWRpbmcuIFRoZSBjb21wbGV0ZWQgaW1hZ2Ugd2ls
bCBiZSBtYXJrZWQgZnVsbHkgb3BhcXVlIGluIGpwZWdDb21wbGV0ZSgpLgogICAgICAgICBidWZm
ZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CkBAIC02MjgsNyArNjI4LDcgQEAgYm9vbCBKUEVHSW1hZ2VE
ZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogI2lmIGRlZmluZWQoVFVSQk9fSlBFR19SR0JfU1dJ
WlpMRSkKICAgICBpZiAoIW1fc2NhbGVkICYmIHR1cmJvU3dpenpsZWQoaW5mby0+b3V0X2NvbG9y
X3NwYWNlKSkgewogICAgICAgICB3aGlsZSAoaW5mby0+b3V0cHV0X3NjYW5saW5lIDwgaW5mby0+
b3V0cHV0X2hlaWdodCkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcm93ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oYnVmZmVyLmdldEFkZHIoMCwgaW5mby0+b3V0cHV0
X3NjYW5saW5lKSk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3cgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIGNoYXIqPihidWZmZXIucGl4ZWxzKCktPmF0KDAsIGluZm8tPm91dHB1
dF9zY2FubGluZSkpOwogICAgICAgICAgICAgaWYgKGpwZWdfcmVhZF9zY2FubGluZXMoaW5mbywg
JnJvdywgMSkgIT0gMSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9
CkBAIC02NjEsNyArNjYxLDcgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpqcGVnQ29tcGxldGUo
KQogICAgIC8vIGVtcHR5LgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJD
YWNoZVswXTsKICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwotICAgIGJ1ZmZlci5zZXRT
dGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CisgICAgYnVmZmVyLnNldFN0YXR1cyhJ
bWFnZUZyYW1lOjpEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUpOwogfQogCiB2b2lkIEpQRUdJbWFn
ZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTaXplKQpAQCAtNjc4LDcgKzY3OCw3IEBAIHZvaWQg
SlBFR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCiAgICAgICAgIHNldEZhaWxl
ZCgpOwogICAgIC8vIElmIHdlJ3JlIGRvbmUgZGVjb2RpbmcgdGhlIGltYWdlLCB3ZSBkb24ndCBu
ZWVkIHRoZSBKUEVHSW1hZ2VSZWFkZXIKICAgICAvLyBhbnltb3JlLiAgKElmIHdlIGZhaWxlZCwg
fG1fcmVhZGVyfCBoYXMgYWxyZWFkeSBiZWVuIGNsZWFyZWQuKQotICAgIGVsc2UgaWYgKCFtX2Zy
YW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVz
KCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkpCisgICAgZWxzZSBpZiAoIW1fZnJhbWVC
dWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgKG1fZnJhbWVCdWZmZXJDYWNoZVswXS5pc0NvbXBsZXRl
KCkpKQogICAgICAgICBtX3JlYWRlciA9IG51bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVj
b2Rlci5jcHAKaW5kZXggNjIzODYyOC4uZjU3ZjAxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5jcHAKQEAgLTI2MSw3ICsyNjEsNyBAQCBJbWFnZUZyYW1lKiBQTkdJbWFnZURlY29kZXI6OmZy
YW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNo
ZS5yZXNpemUoMSk7CiAKICAgICBJbWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNo
ZVtpbmRleF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lQ29t
cGxldGUpCisgICAgaWYgKCFmcmFtZS5pc0NvbXBsZXRlKCkpCiAgICAgICAgIGRlY29kZShmYWxz
ZSwgaW5kZXgpOwogICAgIHJldHVybiAmZnJhbWU7CiB9CkBAIC00NDMsOSArNDQzLDkgQEAgdm9p
ZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIs
IHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICBJbWFnZUZy
YW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbbV9jdXJyZW50RnJhbWVdOwotICAgIGlm
IChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgeworICAgIGlmIChi
dWZmZXIuaXNFbXB0eSgpKSB7CiAgICAgICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IG1fcmVhZGVyLT5w
bmdQdHIoKTsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCksIHByZW11
bHRpcGx5QWxwaGEoKSkpIHsKKyAgICAgICAgaWYgKCFidWZmZXIuaW5pdFBpeGVscyhzY2FsZWRT
aXplKCksIHByZW11bHRpcGx5QWxwaGEoKSkpIHsKICAgICAgICAgICAgIGxvbmdqbXAoSk1QQlVG
KHBuZyksIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00NjEsNyArNDYx
LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiBy
b3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
LSAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworICAg
ICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkRlY29kaW5nU3RhdHVzOjpQYXJ0aWFs
KTsKICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKIAogI2lmIEVOQUJMRShBUE5H
KQpAQCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUo
dW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICB9CiAKICAg
ICAvLyBXcml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRvIHRoZSBmcmFtZSBidWZmZXIuCi0g
ICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CisgICAgUkdCQTMyKiBh
ZGRyZXNzID0gYnVmZmVyLnBpeGVscygpLT5hdCgwLCB5KTsKICAgICBpbnQgd2lkdGggPSBzY2Fs
ZWRTaXplKCkud2lkdGgoKTsKICAgICB1bnNpZ25lZCBjaGFyIG5vblRyaXZpYWxBbHBoYU1hc2sg
PSAwOwogCkBAIC01MzUsNyArNTM1LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWls
YWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKICAgICAgICAgICAgIHBuZ19ieXRl
cCBwaXhlbCA9IHJvdyArIG1fc2NhbGVkQ29sdW1uc1t4XSAqIGNvbG9yQ2hhbm5lbHM7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7Ci0gICAg
ICAgICAgICBidWZmZXIuc2V0UkdCQShhZGRyZXNzKyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4
ZWxbMl0sIGFscGhhKTsKKyAgICAgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UkdCQShhZGRy
ZXNzKyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKICAgICAgICAgICAg
IG5vblRyaXZpYWxBbHBoYU1hc2sgfD0gKDI1NSAtIGFscGhhKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZQpAQCAtNTcyLDcgKzU3Miw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpwbmdDb21wbGV0
ZSgpCiAgICAgfQogI2VuZGlmCiAgICAgaWYgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgp
KQotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5zZXRTdGF0dXMoSW1hZ2VGcmFt
ZTo6RnJhbWVDb21wbGV0ZSk7CisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpLnNl
dFN0YXR1cyhJbWFnZUZyYW1lOjpEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUpOwogfQogCiB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUsIHVuc2lnbmVkIGhhbHRBdEZy
YW1lKQpAQCAtNjY5LDExICs2NjksMTEgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJlYWRDaHVu
a3MocG5nX3Vua25vd25fY2h1bmtwIGNodW5rKQogICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRE
dXJhdGlvbihtX2RlbGF5TnVtZXJhdG9yICogMTAwMCAvIG1fZGVsYXlEZW5vbWluYXRvcik7CiAK
ICAgICAgICAgICAgIGlmIChtX2Rpc3Bvc2UgPT0gMikKLSAgICAgICAgICAgICAgICBidWZmZXIu
c2V0RGlzcG9zYWxNZXRob2QoSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKTsK
KyAgICAgICAgICAgICAgICBidWZmZXIuc2V0RGlzcG9zYWxNZXRob2QoSW1hZ2VGcmFtZTo6RGlz
cG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZVByZXZpb3VzKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG1f
ZGlzcG9zZSA9PSAxKQotICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJ
bWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlQmdjb2xvcik7CisgICAgICAgICAgICAgICAgYnVm
ZmVyLnNldERpc3Bvc2FsTWV0aG9kKEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpPdmVyd3Jp
dGVCZ2NvbG9yKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBidWZmZXIuc2V0
RGlzcG9zYWxNZXRob2QoSW1hZ2VGcmFtZTo6RGlzcG9zZUtlZXApOworICAgICAgICAgICAgICAg
IGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6S2Vl
cCk7CiAgICAgICAgIH0KIAogICAgICAgICBtX2ZyYW1lSW5mbyA9IHRydWU7CkBAIC03NTYsMTYg
Kzc1NiwxNiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNp
emVfdCBjbGVhckJlZm9yZUZyYW1lKQogICAgIGNvbnN0IFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRl
cmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgY2xlYXJCZWZvcmVGcmFtZSk7
CiAKICAgICBWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKLSAgICBmb3IgKDsg
KGkgIT0gbV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmICgoaS0+c3RhdHVzKCkgPT0gSW1h
Z2VGcmFtZTo6RnJhbWVFbXB0eSkgfHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFt
ZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKSk7IC0taSkgewotICAgICAgICBpZiAoKGktPnN0
YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpICYmIChpICE9IGVuZCkpCi0gICAg
ICAgICAgICBpLT5jbGVhclBpeGVsRGF0YSgpOworICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVm
ZmVyQ2FjaGUuYmVnaW4oKSkgJiYgKChpLT5pc0VtcHR5KCkpIHx8IChpLT5kaXNwb3NhbE1ldGhv
ZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2FsTWV0aG9kOjpPdmVyd3JpdGVQcmV2aW91cykpOyAt
LWkpIHsKKyAgICAgICAgaWYgKChpLT5pc0NvbXBsZXRlKCkpICYmIChpICE9IGVuZCkpCisgICAg
ICAgICAgICBpLT5jbGVhclBpeGVscygpOwogICAgIH0KIAogICAgIC8vIE5vdyB8aXwgaG9sZHMg
dGhlIGxhc3QgZnJhbWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsgY2xlYXIgcHJpb3IgZnJhbWVzLgog
ICAgIGZvciAoVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBqKG1fZnJhbWVCdWZmZXJDYWNo
ZS5iZWdpbigpKTsgaiAhPSBpOyArK2opIHsKLSAgICAgICAgQVNTRVJUKGotPnN0YXR1cygpICE9
IEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7Ci0gICAgICAgIGlmIChqLT5zdGF0dXMoKSAhPSBJ
bWFnZUZyYW1lOjpGcmFtZUVtcHR5KQotICAgICAgICAgICAgai0+Y2xlYXJQaXhlbERhdGEoKTsK
KyAgICAgICAgQVNTRVJUKCFpc1BhcnRpYWwoKSk7CisgICAgICAgIGlmICghai0+aXNFbXB0eSgp
KQorICAgICAgICAgICAgai0+Y2xlYXJQaXhlbHMoKTsKICAgICB9CiB9CiAKQEAgLTc4NywyMiAr
Nzg3LDIyIEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIoc2l6ZV90IGZy
YW1lSW5kZXgpCiAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lIGRlcGVu
ZHMgb24gdGhlIHByZXZpb3VzIGZyYW1lJ3MKICAgICAvLyBkaXNwb3NhbCBtZXRob2QuCiAgICAg
Ly8KLSAgICAvLyBGcmFtZXMgdGhhdCB1c2UgdGhlIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyBt
ZXRob2QgYXJlIGVmZmVjdGl2ZWx5CisgICAgLy8gRnJhbWVzIHRoYXQgdXNlIHRoZSBEaXNwb3Nh
bE1ldGhvZDo6T3ZlcndyaXRlUHJldmlvdXMgbWV0aG9kIGFyZSBlZmZlY3RpdmVseQogICAgIC8v
IG5vLW9wcyBpbiB0ZXJtcyBvZiBjaGFuZ2luZyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgYSBmcmFt
ZSBjb21wYXJlZCB0bwogICAgIC8vIHRoZSBzdGFydGluZyBzdGF0ZSBvZiB0aGUgcHJldmlvdXMg
ZnJhbWUsIHNvIHNraXAgb3ZlciB0aGVtLiAgKElmIHRoZQogICAgIC8vIGZpcnN0IGZyYW1lIHNw
ZWNpZmllcyB0aGlzIG1ldGhvZCwgaXQgd2lsbCBnZXQgdHJlYXRlZCBsaWtlCi0gICAgLy8gRGlz
cG9zZU92ZXJ3cml0ZUJnY29sb3IgYmVsb3cgYW5kIHJlc2V0IHRvIGEgY29tcGxldGVseSBlbXB0
eSBpbWFnZS4pCisgICAgLy8gRGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZUJnY29sb3IgYmVsb3cg
YW5kIHJlc2V0IHRvIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4pCiAgICAgY29uc3QgSW1hZ2VG
cmFtZSogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKLSAg
ICBJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIHByZXZNZXRob2QgPSBwcmV2QnVmZmVy
LT5kaXNwb3NhbE1ldGhvZCgpOwotICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2TWV0aG9k
ID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpIHsKKyAgICBJbWFnZUZy
YW1lOjpEaXNwb3NhbE1ldGhvZCBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRo
b2QoKTsKKyAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBJbWFnZUZyYW1l
OjpEaXNwb3NhbE1ldGhvZDo6T3ZlcndyaXRlUHJldmlvdXMpKSB7CiAgICAgICAgIHByZXZCdWZm
ZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CiAgICAgICAgIHByZXZNZXRo
b2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOwogICAgIH0KLSAgICBBU1NFUlQocHJl
dkJ1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CisgICAgQVNT
RVJUKHByZXZCdWZmZXItPmlzQ29tcGxldGUoKSk7CiAKLSAgICBpZiAocHJldk1ldGhvZCA9PSBJ
bWFnZUZyYW1lOjpEaXNwb3NlS2VlcCkgeworICAgIGlmIChwcmV2TWV0aG9kID09IEltYWdlRnJh
bWU6OkRpc3Bvc2FsTWV0aG9kOjpLZWVwKSB7CiAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBsYXN0
IGZyYW1lIGFzIHRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZS4KLSAgICAgICAgYnVm
ZmVyLmNvcHlCaXRtYXBEYXRhKCpwcmV2QnVmZmVyKTsKKyAgICAgICAgYnVmZmVyLmNvcHlQaXhl
bHMoKnByZXZCdWZmZXIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xl
YXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgIC8v
IGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1lLgpAQCAt
ODEwLDEyICs4MTAsMTMgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcihz
aXplX3QgZnJhbWVJbmRleCkKICAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8IHByZXZSZWN0LmNv
bnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsKICAgICAgICAgICAg
IC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUg
d2hvbGUKICAgICAgICAgICAgIC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0
eSBpbWFnZS4KLSAgICAgICAgICAgIGJ1ZmZlci56ZXJvRmlsbFBpeGVsRGF0YSgpOworICAgICAg
ICAgICAgYnVmZmVyLnBpeGVscygpLT5jbGVhcigpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgLy8gQ29weSB0aGUgd2hvbGUgcHJldmlvdXMgYnVmZmVyLCB0aGVuIGNsZWFyIGp1c3Qg
aXRzIGZyYW1lLgotICAgICAgICAgICAgYnVmZmVyLmNvcHlCaXRtYXBEYXRhKCpwcmV2QnVmZmVy
KTsKLSAgICAgICAgICAgIGJ1ZmZlci56ZXJvRmlsbEZyYW1lUmVjdChwcmV2UmVjdCk7CisgICAg
ICAgICAgICBidWZmZXIuY29weVBpeGVscygqcHJldkJ1ZmZlcik7CisgICAgICAgICAgICBidWZm
ZXIucGl4ZWxzKCktPmNsZWFyUmVjdChwcmV2UmVjdCk7CiAgICAgICAgIH0KKyAgICAgICAgYnVm
ZmVyLnNldEhhc0FscGhhKHRydWUpOwogICAgIH0KICAgICAKICAgICBpbnQgbGVmdCA9IHVwcGVy
Qm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkpOwpAQCAtODMxLDcgKzgzMiw3IEBAIHZvaWQgUE5H
SW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW1h
Z2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW21fY3VycmVudEZyYW1lXTsKLSAg
ICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgIGJ1ZmZl
ci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKTsKIAogICAg
IHBuZ19ieXRlcCBpbnRlcmxhY2VCdWZmZXIgPSBtX3JlYWRlci0+aW50ZXJsYWNlQnVmZmVyKCk7
CiAKQEAgLTg0NiwxNSArODQ3LDE1IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBs
ZXRlKCkKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IHJlY3QubWF4WSgpIC0gcmVjdC55KCk7ICsreSkgewogICAgICAg
ICAgICAgcG5nX2J5dGVwIHJvdyA9IGludGVybGFjZUJ1ZmZlciArIChtX3NjYWxlZCA/IG1fc2Nh
bGVkUm93c1t5XSA6IHkpICogY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpOwotICAgICAg
ICAgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkgKyByZWN0
LnkoKSk7CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIucGl4ZWxzKCktPmF0
KHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOwogICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCByZWN0Lm1heFgoKSAtIHJlY3QueCgpOyArK3gpIHsKICAgICAgICAgICAgICAgICBwbmdfYnl0
ZXAgcGl4ZWwgPSByb3cgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAqIGNv
bG9yQ2hhbm5lbHM7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBoYXNBbHBoYSA/
IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAgICAgICAgIG5vblRyaXZpYWxBbHBoYSB8PSBhbHBo
YSA8IDI1NTsKICAgICAgICAgICAgICAgICBpZiAoIW1fYmxlbmQpCi0gICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlci5zZXRSR0JBKGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsy
XSwgYWxwaGEpOworICAgICAgICAgICAgICAgICAgICBidWZmZXIucGl4ZWxzKCktPnNldFJHQkEo
YWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CiAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBidWZmZXIub3ZlclJHQkEoYWRkcmVz
cysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CisgICAgICAgICAgICAg
ICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+b3ZlclJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4
ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbHNl
CkBAIC04NjIsMTQgKzg2MywxNCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0
ZSgpCiAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXI7CiAgICAgICAgIGZv
ciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyArK3ksIHJvdyArPSBjb2xvckNo
YW5uZWxzICogc2l6ZSgpLndpZHRoKCkpIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9
IHJvdzsKLSAgICAgICAgICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3Qu
eCgpLCB5KTsKKyAgICAgICAgICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZlci5waXhlbHMoKS0+
YXQocmVjdC54KCksIHkpOwogICAgICAgICAgICAgZm9yIChpbnQgeCA9IHJlY3QueCgpOyB4IDwg
cmVjdC5tYXhYKCk7ICsreCwgcGl4ZWwgKz0gY29sb3JDaGFubmVscykgewogICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGFscGhhID0gaGFzQWxwaGEgPyBwaXhlbFszXSA6IDI1NTsKICAgICAgICAg
ICAgICAgICBub25Ucml2aWFsQWxwaGEgfD0gYWxwaGEgPCAyNTU7CiAgICAgICAgICAgICAgICAg
aWYgKCFtX2JsZW5kKQotICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQShhZGRyZXNz
KyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnVmZmVyLnBpeGVscygpLT5zZXRSR0JBKGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBpeGVs
WzFdLCBwaXhlbFsyXSwgYWxwaGEpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgYnVmZmVyLm92ZXJSR0JBKGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBpeGVsWzFdLCBw
aXhlbFsyXSwgYWxwaGEpOworICAgICAgICAgICAgICAgICAgICBidWZmZXIucGl4ZWxzKCktPm92
ZXJSR0JBKGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAjZW5kaWYKQEAgLTg4MCw5ICs4ODEsOSBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICBzaXplX3QgZnJhbWVJbmRleCA9IG1fY3VycmVudEZyYW1lOwogICAgICAg
ICAgICAgICAgIGNvbnN0IEltYWdlRnJhbWUqIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNh
Y2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYg
KHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3
cml0ZVByZXZpb3VzKSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJl
dkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6
T3ZlcndyaXRlUHJldmlvdXMpKQogICAgICAgICAgICAgICAgICAgICBwcmV2QnVmZmVyID0gJm1f
ZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICgocHJl
dkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRl
Qmdjb2xvcikKKyAgICAgICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9k
KCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6Ok92ZXJ3cml0ZUJnY29sb3IpCiAgICAg
ICAgICAgICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1ZmZlci5waXhl
bHMoKS0+cmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPnBpeGVscygpLT5yZWN0KCkpKQogICAg
ICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCmluZGV4IDk4NzQyNDYuLjk3NDE4YTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcv
UE5HSW1hZ2VEZWNvZGVyLmgKQEAgLTczLDcgKzczLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgZm9yIChhdXRvJiBp
bWFnZUZyYW1lIDogbV9mcmFtZUJ1ZmZlckNhY2hlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlt
YWdlRnJhbWUuc3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkKKyAgICAgICAg
ICAgICAgICBpZiAoIWltYWdlRnJhbWUuaXNDb21wbGV0ZSgpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKQEAgLTgyLDcgKzgyLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgaXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKGluZGV4IDwgbV9mcmFtZUJ1ZmZl
ckNhY2hlLnNpemUoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdLnN0YXR1cygpID09IElt
YWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgICAgICAgICAgcmV0dXJuIChpbmRleCA8IG1f
ZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XS5pc0Nv
bXBsZXRlKCkpOwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdl
RGVjb2Rlci5jcHAKaW5kZXggMTU5NjA0Yy4uZDIwYmI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFn
ZURlY29kZXIuY3BwCkBAIC04Miw3ICs4Miw3IEBAIEltYWdlRnJhbWUqIFdFQlBJbWFnZURlY29k
ZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgICAgIG1fZnJhbWVCdWZm
ZXJDYWNoZS5yZXNpemUoMSk7CiAKICAgICBJbWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVCdWZm
ZXJDYWNoZVswXTsKLSAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVD
b21wbGV0ZSkKKyAgICBpZiAoZnJhbWUuaXNDb21wbGV0ZSgpKQogICAgICAgICBkZWNvZGUoZmFs
c2UpOwogICAgIHJldHVybiAmZnJhbWU7CiB9CkBAIC0xMjMsMTIgKzEyMywxMiBAQCBib29sIFdF
QlBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTaXplKQogCiAgICAgQVNTRVJUKCFtX2Zy
YW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKTsKICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2Zy
YW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAgQVNTRVJUKGJ1ZmZlci5zdGF0dXMoKSAhPSBJbWFnZUZy
YW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBBU1NFUlQoIWJ1ZmZlci5pc0NvbXBsZXRlKCkpOwog
Ci0gICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7Ci0g
ICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2l6ZSgpLCBwcmVtdWx0aXBseUFscGhhKCkpKQor
ICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghYnVmZmVyLmluaXRQaXhl
bHMoc2l6ZSgpLCBwcmVtdWx0aXBseUFscGhhKCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZh
aWxlZCgpOwotICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlh
bCk7CisgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RGVjb2RpbmdTdGF0dXM6
OlBhcnRpYWwpOwogICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEobV9oYXNBbHBoYSk7CiAgICAg
fQogCkBAIC0xMzcsNyArMTM3LDcgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9v
bCBvbmx5U2l6ZSkKICAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKCkpCiAgICAgICAgICAg
ICBtb2RlID0gb3V0cHV0TW9kZShmYWxzZSk7CiAgICAgICAgIGludCByb3dTdHJpZGUgPSBzaXpl
KCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOwotICAgICAgICB1aW50OF90KiBvdXRwdXQgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIuZ2V0QWRkcigwLCAwKSk7CisgICAgICAg
IHVpbnQ4X3QqIG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlci5waXhl
bHMoKS0+YXQoMCwgMCkpOwogICAgICAgICBpbnQgb3V0cHV0U2l6ZSA9IHNpemUoKS5oZWlnaHQo
KSAqIHJvd1N0cmlkZTsKICAgICAgICAgbV9kZWNvZGVyID0gV2ViUElOZXdSR0IobW9kZSwgb3V0
cHV0LCBvdXRwdXRTaXplLCByb3dTdHJpZGUpOwogICAgICAgICBpZiAoIW1fZGVjb2RlcikKQEAg
LTE0Niw3ICsxNDYsNyBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlT
aXplKQogCiAgICAgc3dpdGNoIChXZWJQSVVwZGF0ZShtX2RlY29kZXIsIGRhdGFCeXRlcywgZGF0
YVNpemUpKSB7CiAgICAgY2FzZSBWUDhfU1RBVFVTX09LOgotICAgICAgICBidWZmZXIuc2V0U3Rh
dHVzKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgICAgICBidWZmZXIuc2V0U3RhdHVz
KEltYWdlRnJhbWU6OkRlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSk7CiAgICAgICAgIGNsZWFyKCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgVlA4X1NUQVRVU19TVVNQRU5ERUQ6Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>