<?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>233666</bug_id>
          
          <creation_ts>2021-11-30 15:33:18 -0800</creation_ts>
          <short_desc>[LBSE] Rename RenderSVGRoot -&gt; LegacyRenderSVGRoot</short_desc>
          <delta_ts>2022-01-05 04:41:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>233211</dependson>
          <blocked>90738</blocked>
    
    <blocked>233863</blocked>
    
    <blocked>233870</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pangle</cc>
    
    <cc>pdr</cc>
    
    <cc>rbuis</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1818973</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-11-30 15:33:18 -0800</bug_when>
    <thetext>Let&apos;s start with moving RenderSVGRoot -&gt; LegacyRenderSVGRoot.
A follow-up patch will introduce the new RenderSVGRoot stub implementation. After that switching from LBSE to legacy engine and back has a visual effect (LBSE enabled == nothing renderered).

After some experimentation on how to upstream, I found that starting from a clean RenderSVGRoot is the easiest approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818980</commentid>
    <comment_count>1</comment_count>
      <attachid>445481</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-11-30 15:45:01 -0800</bug_when>
    <thetext>Created attachment 445481
Patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819448</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-01 15:52:37 -0800</bug_when>
    <thetext>Committed r286392 (244748@main): &lt;https://commits.webkit.org/244748@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819449</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-01 15:53:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/85943424&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445481</attachid>
            <date>2021-11-30 15:45:01 -0800</date>
            <delta_ts>2021-12-01 03:54:55 -0800</delta_ts>
            <desc>Patch, v1</desc>
            <filename>bug-233666-20211130154459.patch</filename>
            <type>text/plain</type>
            <size>114207</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWRlNDYyN2I5OTJhMTMz
YWM4NTAzZWY3MmE1ZmJmZGE1MGJhNTdiYi4uM2M5ZWQ3ZWY2MzA2ZjUzYzQ4YjIyN2Y0MzM1M2Zl
NWNiMjJhNjYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOCBAQAorMjAyMS0xMS0zMCAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gUmVuYW1lIFJlbmRlclNWR1Jvb3QgLT4gTGVnYWN5UmVuZGVyU1ZHUm9vdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNjY2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuZGVyU1ZHUm9vdCBsb29r
cyByYXRoZXIgZGlmZmVyZW50IGluIHRoZSBsYXllci1iYXNlZCBTVkcgZW5naW5lLCB0aGVyZWZv
cmUKKyAgICAgICAgaXQgbWFrZXMgbW9zdCBzZW5zZSwgdG8gcmVuYW1lIFJlbmRlclNWR1Jvb3Qg
LT4gTGVnYWN5UmVuZGVyU1ZHUm9vdCwgYW5kIGJyaW5nIGJhY2sKKyAgICAgICAgUmVuZGVyU1ZH
Um9vdCBieSBhIG5ldyBpbXBsZW1lbnRhdGlvbiwgaW4gc21hbGwgcGF0Y2hlcyB0aGF0IGltcGxl
bWVudCB0aGUgZGlmZmVyZW50CisgICAgICAgIHBpZWNlcyBsYXlvdXQgLyBwYWludGluZyAvIGV0
Yy4KKworICAgICAgICBUaGlzIHBhdGNoZXMgcmVuYW1lcyBSZW5kZXJTVkdSb290IC0+IExlZ2Fj
eVJlbmRlclNWR1Jvb3QgYW5kIGFkYXB0cyBhbGwgY2FsbHNpdGVzLgorCisgICAgICAgIFNob3Vs
ZCBub3QgYWZmZWN0IGFueSBsYXlvdXQgdGVzdHMsIGFzIHRoZSByZW5kZXJOYW1lKCkgc3RheWVk
ICdSZW5kZXJTVkdSb290JyBhZnRlcgorICAgICAgICB0aGUgcmVuYW1lLCB0byBhdm9pZCBoYXZp
bmcgdG8gcmViYXNlbGluZSBhbGwgU1ZHIGxheW91dCB0ZXN0IGV4cGVjdGF0aW9ucy4KKworICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJvbVJlbmRlcmVyKToKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZWxlbWVudFBhdGggY29uc3QpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkUmVu
ZGVyZXJIaWdobGlnaHQpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lVmlldzo6YXBwbHlPdmVyZmxvd1RvVmlld3BvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVWaWV3Ojpmb3JjZUxheW91dFBhcmVudFZpZXdJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmVtYmVkZGVkQ29udGVudEJveCBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVw
Q2xpcFBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondy
aXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR1Jvb3QuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR1Jvb3Q6OkxlZ2FjeVJlbmRlclNW
R1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZHUm9vdDo6c3ZnU1ZHRWxl
bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZW5kZXJTVkdSb290Ojpjb21w
dXRlSW50cmluc2ljUmF0aW9JbmZvcm1hdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
ZWdhY3lSZW5kZXJTVkdSb290Ojppc0VtYmVkZGVkVGhyb3VnaFNWR0ltYWdlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR1Jvb3Q6OmlzRW1iZWRkZWRUaHJvdWdoRnJh
bWVDb250YWluaW5nU1ZHRG9jdW1lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxI
ZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZHUm9vdDo6bGF5
b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR1Jvb3Q6OnNob3VsZEFwcGx5
Vmlld3BvcnRDbGlwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR1Jv
b3Q6OnBhaW50UmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZHUm9v
dDo6d2lsbEJlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR1Jv
b3Q6Omluc2VydGVkSW50b1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZH
Um9vdDo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJl
bmRlclNWR1Jvb3Q6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJl
bmRlclNWR1Jvb3Q6OmJ1aWxkTG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpMZWdhY3lSZW5kZXJTVkdSb290Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR1Jvb3Q6OmNsaXBwZWRPdmVyZmxv
d1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZHUm9vdDo6Y29t
cHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lSZW5kZXJTVkdSb290OjptYXBMb2NhbFRvQ29udGFpbmVyIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeVJlbmRlclNWR1Jvb3Q6OnB1c2hNYXBwaW5nVG9Db250YWluZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVyU1ZHUm9vdDo6dXBkYXRlQ2Fj
aGVkQm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZW5kZXJTVkdSb290Ojpu
b2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lSZW5kZXJTVkdSb290OjpoYXNS
ZWxhdGl2ZURpbWVuc2lvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5UmVuZGVy
U1ZHUm9vdDo6YWRkUmVzb3VyY2VGb3JDbGllbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHUm9vdC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmguCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdCbG9j
azo6dXBkYXRlRnJvbVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Nv
bnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OmxheW91
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6OmxheW91dCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRp
b24pOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OmxheW91
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bGF5b3V0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1RleHQ6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OmxvY2Fs
VG9QYXJlbnRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6
ZmluZFRyZWVSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmxheW91dFNpemVPZk5lYXJl
c3RWaWV3cG9ydENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6
dHJhbnNmb3JtVG9Sb290Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBw
b3J0Ojppc092ZXJmbG93SGlkZGVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clN1cHBvcnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVzb3Vy
Y2VzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jlc291cmNlczo6bGF5b3V0RGlmZmVyZW50
Um9vdElmTmVlZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5oOgor
ICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6YXR0YWNoSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OmRldGFjaCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUcmVlQnVpbGRlcjo6cmVwb3J0VmlzdWFsbHlOb25FbXB0eUNvbnRlbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlclNWRy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6U1ZHOjphdHRhY2gpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OlNWRzo6ZGV0YWNoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJTVkcuaDoKKyAgICAgICAgKiBzdHlsZS9T
dHlsZUFkanVzdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpBZGp1c3Rlcjo6YWRq
dXN0U1ZHRWxlbWVudFN0eWxlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5j
cHA6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcpOgorICAgICAgICAqIHN2Zy9TVkdTVkdF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6bG9jYWxDb29yZGlu
YXRlU3BhY2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVu
dDo6cmVuZGVyZXJJc05lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojpj
cmVhdGVFbGVtZW50UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6
Y3VycmVudFZpZXdCb3hSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1l
bnQ6OmN1cnJlbnRWaWV3cG9ydFNpemUgY29uc3QpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9T
VkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6c2V0Q29udGFpbmVyU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6Y29udGFpbmVyU2l6ZSBjb25zdCk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwOgorCiAyMDIxLTExLTMwICBH
YWJyaWVsIE5hdmEgTWFyaW5vICA8Z25hdmFtYXJpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIG51
bGxwdHIgZGVyZWYgaW4gSW5iYW5kQ2hhcHRlclRyYWNrUHJpdmF0ZUFWRk9iakM6OnByb2Nlc3ND
aGFwdGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA3YWY1ZWI0Nzc3NDYxYjNlNGM3MmM1ZTczMWVjZGEw
MTRmOTczODU5Li40N2RhZmIzNDA0YmIyYmZiOTRhOTM3OWExYzMxMzUxOGJhNTJiMTM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dApAQCAtMjQ2Nyw2ICsyNDY3LDcgQEAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlVHJh
bnNmb3JtRGF0YS5jcHAKIHJlbmRlcmluZy9zdHlsZS9TdHlsZVZpc3VhbERhdGEuY3BwCiByZW5k
ZXJpbmcvc3R5bGUvVGV4dFNpemVBZGp1c3RtZW50LmNwcAogcmVuZGVyaW5nL3N0eWxlL1dpbGxD
aGFuZ2VEYXRhLmNwcAorcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdSb290LmNwcAogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdFbGxpcHNlLmNwcApAQCAtMjQ5MSw3
ICsyNDkyLDYgQEAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCi1yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3Bw
CiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUU3Bhbi5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MGU0Mjg4
Mzk3NTY4ZDQ1MGQxMmYxODViOGY2ZmVhNjA2NjRlMTc4Li5kYjdiYjMyNzZkZjZiNWQxYjQ3MzBl
YzE5NTRjYmQ0N2FiMWI3ZmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjUxLDcgKzEyNTEsNyBAQAogCQk0MzY3MDhERjEy
RDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhBMDEyRDlDQTRCMDAwNDQy
MzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggKi87IH07CiAJCTQzNjcwOEUxMTJEOUNB
NEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhBMjEyRDlDQTRCMDAw
NDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oICovOyB9OwogCQk0MzY3
MDhFMzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhBNDEyRDlD
QTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggKi87IH07Ci0JCTQz
NjcwOEU1MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhBNjEyRDlDQTRCMDAwNDQyMzQg
LyogUmVuZGVyU1ZHUm9vdC5oICovOyB9OworCQk0MzY3MDhFNTEyRDlDQTRCMDAwNDQyMzQgLyog
TGVnYWN5UmVuZGVyU1ZHUm9vdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDM2NzA4QTYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR1Jv
b3QuaCAqLzsgfTsKIAkJNDM2NzA4RTkxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQzNjcwOEFBMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmggKi87IH07CiAJCTQzNjcwOEVCMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5k
ZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDM2NzA4QUMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1ZpZXdw
b3J0Q29udGFpbmVyLmggKi87IH07CiAJCTQzNjcwOEVFMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdN
YXJrZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MzY3MDhBRjEyRDlDQTRCMDAwNDQyMzQgLyogU1ZHTWFya2VyRGF0YS5oICovOyB9OwpAQCAt
ODk2MCw4ICs4OTYwLDggQEAKIAkJNDM2NzA4QTIxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNW
R1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MzY3MDhBMzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQzNjcwOEE0MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQzNjcwOEE1MTJEOUNBNEIw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlclNWR1Jvb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0MzY3MDhBNjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSb290Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQzNjcwOEE1MTJEOUNBNEIwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdS
b290LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeVJlbmRl
clNWR1Jvb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDhBNjEyRDlD
QTRCMDAwNDQyMzQgLyogTGVnYWN5UmVuZGVyU1ZHUm9vdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMZWdhY3lSZW5kZXJTVkdSb290Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQzNjcwOEE5MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MzY3MDhBQTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQz
NjcwOEFCMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODc3OCw2ICsxODc3
OCw4IEBACiAJCTA4OEMyRjc0MTIzOTAwODAwMDNENjVDRSAvKiBzdmcgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTQzNjcwOEE1MTJEOUNBNEIwMDA0NDIz
NCAvKiBMZWdhY3lSZW5kZXJTVkdSb290LmNwcCAqLywKKwkJCQk0MzY3MDhBNjEyRDlDQTRCMDAw
NDQyMzQgLyogTGVnYWN5UmVuZGVyU1ZHUm9vdC5oICovLAogCQkJCTQzNjcwODgxMTJEOUNBNEEw
MDA0NDIzNCAvKiBSZW5kZXJTVkdCbG9jay5jcHAgKi8sCiAJCQkJNDM2NzA4ODIxMkQ5Q0E0QTAw
MDQ0MjM0IC8qIFJlbmRlclNWR0Jsb2NrLmggKi8sCiAJCQkJQ0RGNzQ3RUEyNzBGNkQ4ODAwOEZF
RUVDIC8qIFJlbmRlclNWR0Jsb2NrSW5saW5lcy5oICovLApAQCAtMTg4MzUsOCArMTg4MzcsNiBA
QAogCQkJCUNERjc0N0Y4MjcwRjg3Q0IwMDhGRUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlh
bEdyYWRpZW50SW5saW5lcy5oICovLAogCQkJCTQzNjcwOEEzMTJEOUNBNEIwMDA0NDIzNCAvKiBS
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwICovLAogCQkJCTQzNjcwOEE0MTJEOUNBNEIw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCAqLywKLQkJCQk0MzY3MDhB
NTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5jcHAgKi8sCi0JCQkJNDM2NzA4QTYx
MkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCAqLywKIAkJCQlBMTBCQjU4ODE0ODRF
M0IzMDBCMkU4N0EgLyogUmVuZGVyU1ZHU2hhcGUuY3BwICovLAogCQkJCUExMEJCNTg5MTQ4NEUz
QjMwMEIyRTg3QSAvKiBSZW5kZXJTVkdTaGFwZS5oICovLAogCQkJCUNERjc0N0Y2MjcwRjg2QTQw
MDhGRUVFQyAvKiBSZW5kZXJTVkdTaGFwZUlubGluZXMuaCAqLywKQEAgLTM1NjQ0LDYgKzM1NjQ0
LDcgQEAKIAkJCQlGNDRBNUY1OTFGRUQzOEYyMDA3RjU5NDQgLyogTGVnYWN5TlNQYXN0ZWJvYXJk
VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExODVCNDJBMUU4MjExQTEwMERDOTExOCAvKiBM
ZWdhY3lQcmV2aWV3TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBEQkY0NzE4RjkyMzE3
MDAwRDcwQzYgLyogTGVnYWN5UHJldmlld0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDM2NzA4RTUxMkQ5Q0E0QjAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR1Jvb3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4Q0ZGNUUxMEExNTVBMDUwMDBBNDIzNCAvKiBMZWdhY3lSb290SW5s
aW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTYyQzdGNTExRjc3RUZCMDA2MTJFRkUgLyog
TGVnYWN5U2NoZW1lUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QzNCMUZBMEYwRTQx
NjEwMDk2OTNGNiAvKiBMZWdhY3lUaWxlQ2FjaGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzY0NjAs
NyArMzY0NjEsNiBAQAogCQkJCTQzNjcwOEUxMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdS
ZXNvdXJjZVJhZGlhbEdyYWRpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREY3NDdGOTI3MEY4
N0NCMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudElubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTQzNjcwOEUzMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTQzNjcwOEU1MTJEOUNBNEIw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBCQjU4QjE0
ODRFM0IzMDBCMkU4N0EgLyogUmVuZGVyU1ZHU2hhcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
Rjc0N0Y3MjcwRjg2QTQwMDhGRUVFQyAvKiBSZW5kZXJTVkdTaGFwZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA4NTRCMDE5MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0Lmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCmluZGV4IDJiNmVhZjgxN2M2ZmUzYjlmNTA2MjRkNjFhOTNmOWM4MjhiZjk2ZmIu
LmE1MDM0ZjZlOTI5ZTZjMzRiMDkwYmNmZDkxYTcxNmU2ZGQwYWM5YzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtODcsNiArODcsNyBA
QAogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJJbmxpbmVSdW5BbmRPZmZzZXQuaCIKKyNpbmNs
dWRlICJMZWdhY3lSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiTWF0aE1MRWxlbWVudC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgpAQCAtOTksNyArMTAwLDYgQEAK
ICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlck1ldGVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAj
aW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKICNpbmNs
dWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTU0Nyw3ICs1NDcsNyBAQCBzdGF0aWMgUmVmPEFj
Y2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZUZyb21SZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0OjpjcmVhdGUocmVu
ZGVyZXIpOwogI2VuZGlmCiAKLSAgICBpZiAoaXM8UmVuZGVyU1ZHUm9vdD4oKnJlbmRlcmVyKSkK
KyAgICBpZiAoaXM8TGVnYWN5UmVuZGVyU1ZHUm9vdD4oKnJlbmRlcmVyKSkKICAgICAgICAgcmV0
dXJuIEFjY2Vzc2liaWxpdHlTVkdSb290OjpjcmVhdGUocmVuZGVyZXIpOwogICAgIAogICAgIGlm
IChpczxTVkdFbGVtZW50Pihub2RlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IGM0ZTI2YTFi
NzIyYTE4OWU4YzMwYTZlZjA2NjAxYWE4NzdiZDY4OWQuLjkxMjNmNmJhOGRlMGYyZWM4MzQ5YjBi
YzU2NGYyMzdkNjI4ZWIyOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtNzIsNiArNzIsNyBA
QAogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZHUm9vdC5oIgog
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKQEAgLTkzLDcgKzk0LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFy
a2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJN
ZW51TGlzdC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRl
clRleHQuaCIKQEAgLTk1MSw3ICs5NTEsNyBAQCBQYXRoIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmVsZW1lbnRQYXRoKCkgY29uc3QKICAgICAgICAgUGF0aCBwYXRoID0gZG93bmNhc3Q8UmVu
ZGVyU1ZHU2hhcGU+KCptX3JlbmRlcmVyKS5wYXRoKCk7CiAKICAgICAgICAgLy8gVGhlIFNWRyBw
YXRoIGlzIGluIHRlcm1zIG9mIHRoZSBwYXJlbnQncyBib3VuZGluZyBib3guIFRoZSBwYXRoIG5l
ZWRzIHRvIGJlIG9mZnNldCB0byBmcmFtZSBjb29yZGluYXRlcy4KLSAgICAgICAgaWYgKGF1dG8g
c3ZnUm9vdCA9IGFuY2VzdG9yc09mVHlwZTxSZW5kZXJTVkdSb290PigqbV9yZW5kZXJlcikuZmly
c3QoKSkgeworICAgICAgICBpZiAoYXV0byBzdmdSb290ID0gYW5jZXN0b3JzT2ZUeXBlPExlZ2Fj
eVJlbmRlclNWR1Jvb3Q+KCptX3JlbmRlcmVyKS5maXJzdCgpKSB7CiAgICAgICAgICAgICBMYXlv
dXRQb2ludCBwYXJlbnRPZmZzZXQgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCYqc3Zn
Um9vdCktPmVsZW1lbnRSZWN0KCkubG9jYXRpb24oKTsKICAgICAgICAgICAgIHBhdGgudHJhbnNm
b3JtKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShwYXJlbnRPZmZzZXQueCgpLCBwYXJlbnRP
ZmZzZXQueSgpKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JPdmVybGF5LmNwcAppbmRleCA3ZDJhNWZmYmNjM2E4YTgxNDFmZmNmYmIyZTVhYmRiNjU4
YTg1Yzc1Li5jNDZlM2U3NDhmNTkxNWRiYWY1NGI1NDJlMTRiYTIzZWZkM2NmNmQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCkBAIC0xNDMsNyAr
MTQzLDcgQEAgc3RhdGljIHZvaWQgYnVpbGRSZW5kZXJlckhpZ2hsaWdodChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyLCBjb25zdCBJbnNwZWN0b3JPdmVybGEKICAgICBGcmFtZVZpZXcqIGNvbnRhaW5p
bmdWaWV3ID0gY29udGFpbmluZ0ZyYW1lLT52aWV3KCk7CiAgICAgRnJhbWVWaWV3KiBtYWluVmll
dyA9IGNvbnRhaW5pbmdGcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCk7CiAKLSAgICAv
LyBSZW5kZXJTVkdSb290IHNob3VsZCBiZSBoaWdobGlnaHRlZCB0aHJvdWdoIHRoZSBpc0JveCgp
IGNvZGUgcGF0aCwgYWxsIG90aGVyIFNWRyBlbGVtZW50cyBzaG91bGQganVzdCBkdW1wIHRoZWly
IGFic29sdXRlUXVhZHMoKS4KKyAgICAvLyBMZWdhY3lSZW5kZXJTVkdSb290IHNob3VsZCBiZSBo
aWdobGlnaHRlZCB0aHJvdWdoIHRoZSBpc0JveCgpIGNvZGUgcGF0aCwgYWxsIG90aGVyIFNWRyBl
bGVtZW50cyBzaG91bGQganVzdCBkdW1wIHRoZWlyIGFic29sdXRlUXVhZHMoKS4KICAgICBib29s
IGlzU1ZHUmVuZGVyZXIgPSByZW5kZXJlci0+bm9kZSgpICYmIHJlbmRlcmVyLT5ub2RlKCktPmlz
U1ZHRWxlbWVudCgpICYmICFyZW5kZXJlci0+aXNTVkdSb290KCk7CiAKICAgICBpZiAoaXNTVkdS
ZW5kZXJlcikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDg4YzE1NTRmMWU2OTM4
NTY5ZDg2ODc1MTg4OWVkZjVmOTBhNmI5MDAuLjEwNGU3YWQ3ZjJlNGZiYTk0M2RlNGY4ZmRkYWYz
ZGNlNjE0OTFiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTY5LDYgKzY5LDcg
QEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVk
ZSAiTGVnYWN5UmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRleHQuaCIKQEAgLTg2
LDcgKzg3LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9s
bGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKICNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgpAQCAtNjQ3LDEwICs2NDcsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OmFwcGx5T3Zl
cmZsb3dUb1ZpZXdwb3J0KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBTY3JvbGxiYXIK
ICAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSByZW5kZXJlci5lZmZlY3RpdmVPdmVyZmxvd1goKTsK
ICAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSByZW5kZXJlci5lZmZlY3RpdmVPdmVyZmxvd1koKTsK
IAotICAgIGlmIChpczxSZW5kZXJTVkdSb290PihyZW5kZXJlcikpIHsKKyAgICBpZiAoaXM8TGVn
YWN5UmVuZGVyU1ZHUm9vdD4ocmVuZGVyZXIpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBldmFsdWF0
ZSBpZiB3ZSBjYW4gYWxsb3cgb3ZlcmZsb3cgZm9yIHRoZXNlIGNhc2VzIHRvby4KICAgICAgICAg
Ly8gT3ZlcmZsb3cgaXMgYWx3YXlzIGhpZGRlbiB3aGVuIHN0YW5kLWFsb25lIFNWRyBkb2N1bWVu
dHMgYXJlIGVtYmVkZGVkLgotICAgICAgICBpZiAoZG93bmNhc3Q8UmVuZGVyU1ZHUm9vdD4ocmVu
ZGVyZXIpLmlzRW1iZWRkZWRUaHJvdWdoRnJhbWVDb250YWluaW5nU1ZHRG9jdW1lbnQoKSkgewor
ICAgICAgICBpZiAoZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHUm9vdD4ocmVuZGVyZXIpLmlzRW1i
ZWRkZWRUaHJvdWdoRnJhbWVDb250YWluaW5nU1ZHRG9jdW1lbnQoKSkgewogICAgICAgICAgICAg
b3ZlcmZsb3dYID0gT3ZlcmZsb3c6OkhpZGRlbjsKICAgICAgICAgICAgIG92ZXJmbG93WSA9IE92
ZXJmbG93OjpIaWRkZW47CiAgICAgICAgIH0KQEAgLTEyMTcsNyArMTIxNyw3IEBAIHZvaWQgRnJh
bWVWaWV3Ojpmb3JjZUxheW91dFBhcmVudFZpZXdJZk5lZWRlZCgpCiAgICAgaWYgKCFjb250ZW50
Qm94KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBzdmdSb290ID0gZG93bmNhc3Q8UmVu
ZGVyU1ZHUm9vdD4oKmNvbnRlbnRCb3gpOworICAgIGF1dG8mIHN2Z1Jvb3QgPSBkb3duY2FzdDxM
ZWdhY3lSZW5kZXJTVkdSb290PigqY29udGVudEJveCk7CiAgICAgaWYgKHN2Z1Jvb3QuZXZlckhh
ZExheW91dCgpICYmICFzdmdSb290Lm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMTIyOCw4ICsxMjI4LDggQEAgdm9pZCBGcmFtZVZpZXc6OmZvcmNlTGF5b3V0UGFyZW50Vmll
d0lmTmVlZGVkKCkKICAgICAvLyBlbWJlZGRlZENvbnRlbnRCb3goKSByZXR1cm5zIG51bGxwdHIs
IGFzIGxvbmcgYXMgdGhlIGVtYmVkZGVkIGRvY3VtZW50IGlzbid0IGxvYWRlZCB5ZXQuIEJlZm9y
ZQogICAgIC8vIGJvdGhlcmluZyB0byBsYXkgb3V0IHRoZSBTVkcgZG9jdW1lbnQsIG1hcmsgdGhl
IG93bmVyUmVuZGVyZXIgbmVlZGluZyBsYXlvdXQgYW5kIGFzayBpdHMKICAgICAvLyBGcmFtZVZp
ZXcgZm9yIGEgbGF5b3V0LiBBZnRlciB0aGF0IHRoZSBSZW5kZXJFbWJlZGRlZE9iamVjdCAob3du
ZXJSZW5kZXJlcikgY2FycmllcyB0aGUKLSAgICAvLyBjb3JyZWN0IHNpemUsIHdoaWNoIFJlbmRl
clNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aC9IZWlnaHQgcmVseSBvbiwgd2hl
biBsYXlpbmcKLSAgICAvLyBvdXQgZm9yIHRoZSBmaXJzdCB0aW1lLCBvciB3aGVuIHRoZSBSZW5k
ZXJTVkdSb290IHNpemUgaGFzIGNoYW5nZWQgZHluYW1pY2FsbHkgKGVnLiB2aWEgPHNjcmlwdD4p
LgorICAgIC8vIGNvcnJlY3Qgc2l6ZSwgd2hpY2ggTGVnYWN5UmVuZGVyU1ZHUm9vdDo6Y29tcHV0
ZVJlcGxhY2VkTG9naWNhbFdpZHRoL0hlaWdodCByZWx5IG9uLCB3aGVuIGxheWluZworICAgIC8v
IG91dCBmb3IgdGhlIGZpcnN0IHRpbWUsIG9yIHdoZW4gdGhlIExlZ2FjeVJlbmRlclNWR1Jvb3Qg
c2l6ZSBoYXMgY2hhbmdlZCBkeW5hbWljYWxseSAoZWcuIHZpYSA8c2NyaXB0PikuCiAKICAgICBv
d25lclJlbmRlcmVyLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICBv
d25lclJlbmRlcmVyLT52aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLnNjaGVkdWxl
TGF5b3V0KCk7CkBAIC0xMzQ0LDggKzEzNDQsOCBAQCBSZW5kZXJCb3gqIEZyYW1lVmlldzo6ZW1i
ZWRkZWRDb250ZW50Qm94KCkgY29uc3QKICAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQgPSBy
ZW5kZXJWaWV3LT5maXJzdENoaWxkKCk7CiAKICAgICAvLyBDdXJlbnRseSBvbmx5IGVtYmVkZGVk
IFNWRyBkb2N1bWVudHMgcGFydGljaXBhdGUgaW4gdGhlIHNpemUtbmVnb3RpYXRpb24gbG9naWMu
Ci0gICAgaWYgKGlzPFJlbmRlclNWR1Jvb3Q+KGZpcnN0Q2hpbGQpKQotICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyU1ZHUm9vdD4oZmlyc3RDaGlsZCk7CisgICAgaWYgKGlzPExlZ2FjeVJl
bmRlclNWR1Jvb3Q+KGZpcnN0Q2hpbGQpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8TGVnYWN5
UmVuZGVyU1ZHUm9vdD4oZmlyc3RDaGlsZCk7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCmluZGV4IDYx
ZjIxMzU2YTJlYzY0ODcyMzE2MDM2ZTY5ODA1ZWZhMDc1NjEzYzEuLmE1ZDEyMWM4MGFjMDFjMWFl
NTZlYzExYTRhZDRiZDE2YjE2ZDUxZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsZXhpYmxlQm94LmNwcApAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgIlJlbmRl
ck9iamVjdEVudW1zLmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGFjZWQuaCIKICNpbmNsdWRlICJS
ZW5kZXJTdHlsZUNvbnN0YW50cy5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKICNpbmNsdWRlIDxs
aW1pdHM+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAwOTI1
ZDgyOGY4YWE1YTViMGNiNGYyZDI3ODY4YjBmYTI5NTJiYWVmLi5hYzZmZTVkYjYyZmIxYTA3YTcy
YzZjNWJmMWE2N2Q1OTE3YzY0N2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKQEAgLTgzLDYgKzgzLDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgog
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIaXRUZXN0aW5nVHJhbnNmb3Jt
U3RhdGUuaCIKKyNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk92ZXJmbG93RXZlbnQuaCIKICNpbmNsdWRlICJPdmVybGFwVGVz
dFJlcXVlc3RDbGllbnQuaCIKQEAgLTEwNiw3ICsxMDcsNiBAQAogI2luY2x1ZGUgIlJlbmRlclJl
cGxpY2EuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdGb3JlaWduT2JqZWN0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgog
I2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBh
cnQuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTMxNzgsNyArMzE3OCw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNWRyBl
bGVtZW50cyBnZXQgY2xpcHBlZCBpbiBTVkcgY29kZS4KLSAgICBpZiAoaXM8UmVuZGVyU1ZHUm9v
dD4ocmVuZGVyZXIoKSkpCisgICAgaWYgKGlzPExlZ2FjeVJlbmRlclNWR1Jvb3Q+KHJlbmRlcmVy
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGNsaXBwZWRDb250ZW50Qm91bmRzID0g
Y2FsY3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgb2Zmc2V0RnJvbVJv
b3QsIHsgVXNlTG9jYWxDbGlwUmVjdElmUG9zc2libGUgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGQ2MWFjZDNjZDg2ZTcxYzc0YjAxODcxMjQxNmUz
NzExZmZkYzQwNzguLjE2ODNmODVjODc2ZmNlOWYyMzUyYWE3ZGE2MmFmNWY1MTY5MTNhYjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC00Myw2ICs0Myw3
IEBACiAjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCIKKyNpbmNsdWRl
ICJMZWdhY3lSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiTG9naWNhbFNlbGVjdGlvbk9mZnNl
dENhY2hlcy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50Lmgi
CkBAIC02NCw3ICs2NSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJT
Y3JvbGxiYXJQYXJ0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKICNpbmNsdWRlICJS
ZW5kZXJUaGVtZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCmluZGV4IGIzMTM3MzcyZjVkNTEwOTU1YzkxMzg0MTU4ZGJkOWUyNmRjMzMzYjIuLmI5
MGYxYjY1ZDk2Yzg5YTdjMTk3MzFjYjQ3ZmE5NzU0MTBiOTA3ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNp
bmNsdWRlICJIVE1MU3BhbkVsZW1lbnQuaCIKICNpbmNsdWRlICJJbmxpbmVJdGVyYXRvclRleHRC
b3guaCIKICNpbmNsdWRlICJMZWdhY3lJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTGVnYWN5
UmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQcmludENv
bnRleHQuaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCkBAIC02Miw3ICs2Myw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGgu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlJl
bmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtNTczLDggKzU3Myw4
IEBAIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywgT3B0
aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+IGJlCiAgICAgICAgIHdyaXRlU1ZHQ29udGFpbmVyKHRz
LCBkb3duY2FzdDxSZW5kZXJTVkdDb250YWluZXI+KG8pLCBiZWhhdmlvcik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKGlzPFJlbmRlclNWR1Jvb3Q+KG8pKSB7Ci0gICAgICAgIHdy
aXRlKHRzLCBkb3duY2FzdDxSZW5kZXJTVkdSb290PihvKSwgYmVoYXZpb3IpOworICAgIGlmIChp
czxMZWdhY3lSZW5kZXJTVkdSb290PihvKSkgeworICAgICAgICB3cml0ZSh0cywgZG93bmNhc3Q8
TGVnYWN5UmVuZGVyU1ZHUm9vdD4obyksIGJlaGF2aW9yKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAoaXM8UmVuZGVyU1ZHVGV4dD4obykpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvTGVnYWN5UmVuZGVyU1ZHUm9vdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR1Jvb3QuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4
MDgyNjU5YjJmNDAyMGUyMTI3YWI0OWU0ODc5ZTYxMjA5YmM0MTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR1Jvb3QuY3BwCkBA
IC0wLDAgKzEsNDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1Jvb3QuaCIKKworI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgorI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3Iu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRl
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgi
CisjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CisjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCisjaW5jbHVkZSAiU1ZHSW1hZ2Uu
aCIKKyNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3Vy
Y2VzLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKKyNpbmNsdWRlICJTVkdTVkdF
bGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVmlld1NwZWMuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1T
dGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3Rm
L1NldEZvclNjb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoTGVnYWN5UmVuZGVyU1ZH
Um9vdCk7CisKK0xlZ2FjeVJlbmRlclNWR1Jvb3Q6OkxlZ2FjeVJlbmRlclNWR1Jvb3QoU1ZHU1ZH
RWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKKyAgICA6IFJlbmRlclJlcGxh
Y2VkKGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQorICAgICwgbV9pc0xheW91dFNpemVDaGFuZ2Vk
KGZhbHNlKQorICAgICwgbV9uZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSh0cnVlKQor
ICAgICwgbV9oYXNCb3hEZWNvcmF0aW9ucyhmYWxzZSkKK3sKK30KKworTGVnYWN5UmVuZGVyU1ZH
Um9vdDo6fkxlZ2FjeVJlbmRlclNWR1Jvb3QoKSA9IGRlZmF1bHQ7CisKK1NWR1NWR0VsZW1lbnQm
IExlZ2FjeVJlbmRlclNWR1Jvb3Q6OnN2Z1NWR0VsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVy
biBkb3duY2FzdDxTVkdTVkdFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOworfQorCit2
b2lkIExlZ2FjeVJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9u
KEZsb2F0U2l6ZSYgaW50cmluc2ljU2l6ZSwgZG91YmxlJiBpbnRyaW5zaWNSYXRpbykgY29uc3QK
K3sKKyAgICBBU1NFUlQoIXNob3VsZEFwcGx5U2l6ZUNvbnRhaW5tZW50KCp0aGlzKSk7CisKKyAg
ICAvLyBTcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjSW50cmluc2lj
U2l6aW5nCisgICAgLy8gU1ZHIG5lZWRzIHRvIHNwZWNpZnkgaG93IHRvIGNhbGN1bGF0ZSBzb21l
IGludHJpbnNpYyBzaXppbmcgcHJvcGVydGllcyB0byBlbmFibGUgaW5jbHVzaW9uIHdpdGhpbiBv
dGhlciBsYW5ndWFnZXMuCisKKyAgICAvLyBUaGUgaW50cmluc2ljIGFzcGVjdCByYXRpbyBvZiB0
aGUgdmlld3BvcnQgb2YgU1ZHIGNvbnRlbnQgaXMgbmVjZXNzYXJ5IGZvciBleGFtcGxlLCB3aGVu
IGluY2x1ZGluZyBTVkcgZnJvbSBhbiDigJhvYmplY3TigJkKKyAgICAvLyBlbGVtZW50IGluIEhU
TUwgc3R5bGVkIHdpdGggQ1NTLiBJdCBpcyBwb3NzaWJsZSAoaW5kZWVkLCBjb21tb24pIGZvciBh
biBTVkcgZ3JhcGhpYyB0byBoYXZlIGFuIGludHJpbnNpYyBhc3BlY3QgcmF0aW8gYnV0CisgICAg
Ly8gbm90IHRvIGhhdmUgYW4gaW50cmluc2ljIHdpZHRoIG9yIGhlaWdodC4gVGhlIGludHJpbnNp
YyBhc3BlY3QgcmF0aW8gbXVzdCBiZSBjYWxjdWxhdGVkIGJhc2VkIHVwb24gdGhlIGZvbGxvd2lu
ZyBydWxlczoKKyAgICAvLyAtIFRoZSBhc3BlY3QgcmF0aW8gaXMgY2FsY3VsYXRlZCBieSBkaXZp
ZGluZyBhIHdpZHRoIGJ5IGEgaGVpZ2h0LgorICAgIC8vIC0gSWYgdGhlIOKAmHdpZHRo4oCZIGFu
ZCDigJhoZWlnaHTigJkgb2YgdGhlIHJvb3Rtb3N0IOKAmHN2Z+KAmSBlbGVtZW50IGFyZSBib3Ro
IHNwZWNpZmllZCB3aXRoIHVuaXQgaWRlbnRpZmllcnMgKGluLCBtbSwgY20sIHB0LCBwYywKKyAg
ICAvLyAgIHB4LCBlbSwgZXgpIG9yIGluIHVzZXIgdW5pdHMsIHRoZW4gdGhlIGFzcGVjdCByYXRp
byBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIOKAmHdpZHRo4oCZIGFuZCDigJhoZWlnaHTigJkgYXR0
cmlidXRlcyBhZnRlcgorICAgIC8vICAgcmVzb2x2aW5nIGJvdGggdmFsdWVzIHRvIHVzZXIgdW5p
dHMuCisgICAgaW50cmluc2ljU2l6ZS5oYXNJbnRyaW5zaWNXaWR0aCA9IHN2Z1NWR0VsZW1lbnQo
KS5oYXNJbnRyaW5zaWNXaWR0aCgpOworICAgIGludHJpbnNpY1NpemUuaGFzSW50cmluc2ljSGVp
Z2h0ID0gc3ZnU1ZHRWxlbWVudCgpLmhhc0ludHJpbnNpY0hlaWdodCgpOworICAgIGludHJpbnNp
Y1NpemUuc2V0V2lkdGgoZmxvYXRWYWx1ZUZvckxlbmd0aChzdmdTVkdFbGVtZW50KCkuaW50cmlu
c2ljV2lkdGgoKSwgMCkpOworICAgIGludHJpbnNpY1NpemUuc2V0SGVpZ2h0KGZsb2F0VmFsdWVG
b3JMZW5ndGgoc3ZnU1ZHRWxlbWVudCgpLmludHJpbnNpY0hlaWdodCgpLCAwKSk7CisKKyAgICBp
ZiAoc3R5bGUoKS5hc3BlY3RSYXRpb1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5cGU6OlJhdGlvKSB7
CisgICAgICAgIGludHJpbnNpY1JhdGlvID0gc3R5bGUoKS5sb2dpY2FsQXNwZWN0UmF0aW8oKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBpbnRy
aW5zaWNSYXRpb1ZhbHVlOworICAgIGlmICghaW50cmluc2ljU2l6ZS5pc0VtcHR5KCkpCisgICAg
ICAgIGludHJpbnNpY1JhdGlvVmFsdWUgPSBpbnRyaW5zaWNTaXplLndpZHRoKCkgLyBzdGF0aWNf
Y2FzdDxkb3VibGU+KGludHJpbnNpY1NpemUuaGVpZ2h0KCkpOworICAgIGVsc2UgeworICAgICAg
ICAvLyAtIElmIGVpdGhlci9ib3RoIG9mIHRoZSDigJh3aWR0aOKAmSBhbmQg4oCYaGVpZ2h04oCZ
IG9mIHRoZSByb290bW9zdCDigJhzdmfigJkgZWxlbWVudCBhcmUgaW4gcGVyY2VudGFnZSB1bml0
cyAob3Igb21pdHRlZCksIHRoZQorICAgICAgICAvLyAgIGFzcGVjdCByYXRpbyBpcyBjYWxjdWxh
dGVkIGZyb20gdGhlIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIG9mIHRoZSDigJh2aWV3Qm944oCZ
IHNwZWNpZmllZCBmb3IgdGhlIGN1cnJlbnQgU1ZHIGRvY3VtZW50CisgICAgICAgIC8vICAgZnJh
Z21lbnQuIElmIHRoZSDigJh2aWV3Qm944oCZIGlzIG5vdCBjb3JyZWN0bHkgc3BlY2lmaWVkLCBv
ciBzZXQgdG8gJ25vbmUnLCB0aGUgaW50cmluc2ljIGFzcGVjdCByYXRpbyBjYW5ub3QgYmUKKyAg
ICAgICAgLy8gICBjYWxjdWxhdGVkIGFuZCBpcyBjb25zaWRlcmVkIHVuc3BlY2lmaWVkLgorICAg
ICAgICBGbG9hdFNpemUgdmlld0JveFNpemUgPSBzdmdTVkdFbGVtZW50KCkudmlld0JveCgpLnNp
emUoKTsKKyAgICAgICAgaWYgKCF2aWV3Qm94U2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IC8vIFRoZSB2aWV3Qm94IGNhbiBvbmx5IHlpZWxkIGFuIGludHJpbnNpYyByYXRpbywgbm90IGFu
IGludHJpbnNpYyBzaXplLgorICAgICAgICAgICAgaW50cmluc2ljUmF0aW9WYWx1ZSA9IHZpZXdC
b3hTaXplLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KHZpZXdCb3hTaXplLmhlaWdodCgp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpbnRyaW5zaWNSYXRpb1ZhbHVlKQorICAg
ICAgICBpbnRyaW5zaWNSYXRpbyA9ICppbnRyaW5zaWNSYXRpb1ZhbHVlOworICAgIGVsc2UgaWYg
KHN0eWxlKCkuYXNwZWN0UmF0aW9UeXBlKCkgPT0gQXNwZWN0UmF0aW9UeXBlOjpBdXRvQW5kUmF0
aW8pCisgICAgICAgIGludHJpbnNpY1JhdGlvID0gc3R5bGUoKS5sb2dpY2FsQXNwZWN0UmF0aW8o
KTsKK30KKworYm9vbCBMZWdhY3lSZW5kZXJTVkdSb290Ojppc0VtYmVkZGVkVGhyb3VnaFNWR0lt
YWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNJblNWR0ltYWdlKCZzdmdTVkdFbGVtZW50KCkp
OworfQorCitib29sIExlZ2FjeVJlbmRlclNWR1Jvb3Q6OmlzRW1iZWRkZWRUaHJvdWdoRnJhbWVD
b250YWluaW5nU1ZHRG9jdW1lbnQoKSBjb25zdAoreworICAgIC8vIElmIG91ciBmcmFtZSBoYXMg
YW4gb3duZXIgcmVuZGVyZXIsIHdlJ3JlIGVtYmVkZGVkIHRocm91Z2ggZWcuIG9iamVjdC9lbWJl
ZC9pZnJhbWUsCisgICAgLy8gYnV0IHdlIG9ubHkgbmVnb3RpYXRlIGlmIHdlJ3JlIGluIGFuIFNW
RyBkb2N1bWVudC4KKyAgICBpZiAoIWZyYW1lKCkub3duZXJSZW5kZXJlcigpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGZyYW1lKCkuZG9jdW1lbnQoKS0+aXNTVkdEb2N1bWVu
dCgpOworfQorCitMYXlvdXRVbml0IExlZ2FjeVJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNl
ZExvZ2ljYWxXaWR0aChTaG91bGRDb21wdXRlUHJlZmVycmVkIHNob3VsZENvbXB1dGVQcmVmZXJy
ZWQpIGNvbnN0Cit7CisgICAgLy8gV2hlbiB3ZSdyZSBlbWJlZGRlZCB0aHJvdWdoIFNWR0ltYWdl
IChib3JkZXItaW1hZ2UvYmFja2dyb3VuZC1pbWFnZS88aHRtbDppbWc+Ly4uLikgd2UncmUgZm9y
Y2VkIHRvIHJlc2l6ZSB0byBhIHNwZWNpZmljIHNpemUuCisgICAgaWYgKCFtX2NvbnRhaW5lclNp
emUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9jb250YWluZXJTaXplLndpZHRoKCk7CisK
KyAgICBpZiAoaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5pbmdTVkdEb2N1bWVudCgpKQor
ICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgp
OworCisgICAgLy8gU1ZHIGVtYmVkZGVkIHZpYSBTVkdJbWFnZSAoYmFja2dyb3VuZC1pbWFnZS9i
b3JkZXItaW1hZ2UvZXRjKSAvIElubGluZSBTVkcuCisgICAgcmV0dXJuIFJlbmRlclJlcGxhY2Vk
Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoc2hvdWxkQ29tcHV0ZVByZWZlcnJlZCk7Cit9
CisKK0xheW91dFVuaXQgTGVnYWN5UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNh
bEhlaWdodChzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGVzdGltYXRlZFVzZWRXaWR0aCkgY29u
c3QKK3sKKyAgICAvLyBXaGVuIHdlJ3JlIGVtYmVkZGVkIHRocm91Z2ggU1ZHSW1hZ2UgKGJvcmRl
ci1pbWFnZS9iYWNrZ3JvdW5kLWltYWdlLzxodG1sOmltZz4vLi4uKSB3ZSdyZSBmb3JjZWQgdG8g
cmVzaXplIHRvIGEgc3BlY2lmaWMgc2l6ZS4KKyAgICBpZiAoIW1fY29udGFpbmVyU2l6ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBtX2NvbnRhaW5lclNpemUuaGVpZ2h0KCk7CisKKyAgICBp
ZiAoaXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5pbmdTVkdEb2N1bWVudCgpKQorICAgICAg
ICByZXR1cm4gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoSW5jbHVk
ZU1hcmdpbkJvcmRlclBhZGRpbmcpOworCisgICAgLy8gU1ZHIGVtYmVkZGVkIHZpYSBTVkdJbWFn
ZSAoYmFja2dyb3VuZC1pbWFnZS9ib3JkZXItaW1hZ2UvZXRjKSAvIElubGluZSBTVkcuCisgICAg
cmV0dXJuIFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KGVzdGlt
YXRlZFVzZWRXaWR0aCk7Cit9CisKK3ZvaWQgTGVnYWN5UmVuZGVyU1ZHUm9vdDo6bGF5b3V0KCkK
K3sKKyAgICBTZXRGb3JTY29wZTxib29sPiBjaGFuZ2UobV9pbkxheW91dCwgdHJ1ZSk7CisgICAg
U3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50OworICAgIEFTU0VS
VChuZWVkc0xheW91dCgpKTsKKworICAgIG1fcmVzb3VyY2VzTmVlZGluZ1RvSW52YWxpZGF0ZUNs
aWVudHMuY2xlYXIoKTsKKworICAgIC8vIEFyYml0cmFyeSBhZmZpbmUgdHJhbnNmb3JtcyBhcmUg
aW5jb21wYXRpYmxlIHdpdGggUmVuZGVyTGF5b3V0U3RhdGUuCisgICAgTGF5b3V0U3RhdGVEaXNh
YmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0
KCkpOworCisgICAgYm9vbCBuZWVkc0xheW91dCA9IHNlbGZOZWVkc0xheW91dCgpOworICAgIExh
eW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91
dCgpICYmIG5lZWRzTGF5b3V0KTsKKworICAgIExheW91dFNpemUgb2xkU2l6ZSA9IHNpemUoKTsK
KyAgICB1cGRhdGVMb2dpY2FsV2lkdGgoKTsKKyAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7Cisg
ICAgYnVpbGRMb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCk7CisKKyAgICBtX2lzTGF5b3V0U2l6
ZUNoYW5nZWQgPSBuZWVkc0xheW91dCB8fCAoc3ZnU1ZHRWxlbWVudCgpLmhhc1JlbGF0aXZlTGVu
Z3RocygpICYmIG9sZFNpemUgIT0gc2l6ZSgpKTsKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjpsYXlv
dXRDaGlsZHJlbigqdGhpcywgbmVlZHNMYXlvdXQgfHwgU1ZHUmVuZGVyU3VwcG9ydDo6ZmlsdGVy
c0ZvcmNlQ29udGFpbmVyTGF5b3V0KCp0aGlzKSk7CisKKyAgICBpZiAoIW1fcmVzb3VyY2VzTmVl
ZGluZ1RvSW52YWxpZGF0ZUNsaWVudHMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEludmFsaWRh
dGUgcmVzb3VyY2UgY2xpZW50cywgd2hpY2ggbWF5IG1hcmsgc29tZSBub2RlcyBmb3IgbGF5b3V0
LgorICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogIG1fcmVzb3VyY2VzTmVlZGluZ1RvSW52
YWxpZGF0ZUNsaWVudHMpIHsKKyAgICAgICAgICAgIHJlc291cmNlLT5yZW1vdmVBbGxDbGllbnRz
RnJvbUNhY2hlKCk7CisgICAgICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVD
aGFuZ2VkKCpyZXNvdXJjZSwgU3R5bGVEaWZmZXJlbmNlOjpMYXlvdXQsIHJlc291cmNlLT5zdHls
ZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZhbHNl
OworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbigqdGhpcywgZmFsc2Up
OworICAgIH0KKworICAgIC8vIEF0IHRoaXMgcG9pbnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkg
Z3JhYmJlZCB0aGUgb2xkIGJvdW5kcywKKyAgICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyBy
ZXBhaW50QWZ0ZXJMYXlvdXQoKSB1c2VzIHRoZSBuZXcgYm91bmRzLgorICAgIGlmIChtX25lZWRz
Qm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRlKSB7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5k
YXJpZXMoKTsKKyAgICAgICAgbV9uZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA9IGZh
bHNlOworICAgIH0KKworICAgIGNsZWFyT3ZlcmZsb3coKTsKKyAgICBpZiAoIXNob3VsZEFwcGx5
Vmlld3BvcnRDbGlwKCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IGNvbnRlbnRSZXBhaW50UmVjdCA9
IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisgICAgICAgIGNvbnRlbnRSZXBhaW50
UmVjdCA9IG1fbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybS5tYXBSZWN0KGNvbnRlbnRSZXBhaW50
UmVjdCk7CisgICAgICAgIGFkZFZpc3VhbE92ZXJmbG93KGVuY2xvc2luZ0xheW91dFJlY3QoY29u
dGVudFJlcGFpbnRSZWN0KSk7CisgICAgfQorCisgICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsK
KyAgICBtX2hhc0JveERlY29yYXRpb25zID0gaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpID8g
aGFzVmlzaWJsZUJveERlY29yYXRpb25TdHlsZSgpIDogaGFzVmlzaWJsZUJveERlY29yYXRpb25z
KCk7CisgICAgaW52YWxpZGF0ZUJhY2tncm91bmRPYnNjdXJhdGlvblN0YXR1cygpOworCisgICAg
cmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOworCisgICAgY2xlYXJOZWVkc0xheW91dCgp
OworfQorCitib29sIExlZ2FjeVJlbmRlclNWR1Jvb3Q6OnNob3VsZEFwcGx5Vmlld3BvcnRDbGlw
KCkgY29uc3QKK3sKKyAgICAvLyB0aGUgb3V0ZXJtb3N0IHN2ZyBpcyBjbGlwcGVkIGlmIGF1dG8s
IGFuZCBzdmcgZG9jdW1lbnQgcm9vdHMgYXJlIGFsd2F5cyBjbGlwcGVkCisgICAgLy8gV2hlbiB0
aGUgc3ZnIGlzIHN0YW5kLWFsb25lIChpc0RvY3VtZW50RWxlbWVudCgpID09IHRydWUpIHRoZSB2
aWV3cG9ydCBjbGlwcGluZyBzaG91bGQgYWx3YXlzCisgICAgLy8gYmUgYXBwbGllZCwgbm90aW5n
IHRoYXQgdGhlIHdpbmRvdyBzY3JvbGxiYXJzIHNob3VsZCBiZSBoaWRkZW4gaWYgb3ZlcmZsb3c9
aGlkZGVuLgorICAgIHJldHVybiBlZmZlY3RpdmVPdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6SGlk
ZGVuCisgICAgICAgIHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8KKyAg
ICAgICAgfHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsCisgICAgICAg
IHx8IHRoaXMtPmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKTsKK30KKwordm9pZCBMZWdhY3lS
ZW5kZXJTVkdSb290OjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCit7CisgICAgLy8gQW4gZW1wdHkgdmlld3BvcnQgZGlz
YWJsZXMgcmVuZGVyaW5nLgorICAgIGlmIChib3JkZXJCb3hSZWN0KCkuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBEb24ndCBwYWludCwgaWYgdGhlIGNvbnRleHQgZXhwbGlj
aXRseSBkaXNhYmxlZCBpdC4KKyAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQoKS5wYWludGluZ0Rp
c2FibGVkKCkgJiYgIXBhaW50SW5mby5jb250ZXh0KCkuZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNWRyBvdXRsaW5lcyBhcmUgcGFpbnRlZCBk
dXJpbmcgUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZC4KKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2U6Ok91dGxpbmUgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OlNl
bGZPdXRsaW5lKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBbiBlbXB0eSB2aWV3Qm94IGFs
c28gZGlzYWJsZXMgcmVuZGVyaW5nLgorICAgIC8vIChodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcv
Y29vcmRzLmh0bWwjVmlld0JveEF0dHJpYnV0ZSkKKyAgICBpZiAoc3ZnU1ZHRWxlbWVudCgpLmhh
c0VtcHR5Vmlld0JveCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOworICAgIGlmIChjb250ZXh0LmRldGVjdGlu
Z0NvbnRlbnRmdWxQYWludCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgY3VycmVudCA6IGNoaWxk
cmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oKnRoaXMpKSB7CisgICAgICAgICAgICBpZiAoIWN1cnJl
bnQuaXNTVkdIaWRkZW5Db250YWluZXIoKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0
Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERv
bid0IHBhaW50IGlmIHdlIGRvbid0IGhhdmUga2lkcywgZXhjZXB0IGlmIHdlIGhhdmUgZmlsdGVy
cyB3ZSBzaG91bGQgcGFpbnQgdGhvc2UuCisgICAgaWYgKCFmaXJzdENoaWxkKCkpIHsKKyAgICAg
ICAgYXV0byogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0Zv
clJlbmRlcmVyKCp0aGlzKTsKKyAgICAgICAgaWYgKCFyZXNvdXJjZXMgfHwgIXJlc291cmNlcy0+
ZmlsdGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZTo6Rm9yZWdyb3VuZCkKKyAgICAgICAgICAgICAgICBwYWdlKCkuYWRkUmVsZXZhbnRVbnBhaW50
ZWRPYmplY3QodGhpcywgdmlzdWFsT3ZlcmZsb3dSZWN0KCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBo
YXNlOjpGb3JlZ3JvdW5kKQorICAgICAgICBwYWdlKCkuYWRkUmVsZXZhbnRSZXBhaW50ZWRPYmpl
Y3QodGhpcywgdmlzdWFsT3ZlcmZsb3dSZWN0KCkpOworCisgICAgLy8gTWFrZSBhIGNvcHkgb2Yg
dGhlIFBhaW50SW5mbyBiZWNhdXNlIGFwcGx5VHJhbnNmb3JtIHdpbGwgbW9kaWZ5IHRoZSBkYW1h
Z2UgcmVjdC4KKyAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKKyAgICBj
aGlsZFBhaW50SW5mby5jb250ZXh0KCkuc2F2ZSgpOworCisgICAgLy8gQXBwbHkgaW5pdGlhbCB2
aWV3cG9ydCBjbGlwCisgICAgaWYgKHNob3VsZEFwcGx5Vmlld3BvcnRDbGlwKCkpCisgICAgICAg
IGNoaWxkUGFpbnRJbmZvLmNvbnRleHQoKS5jbGlwKHNuYXBwZWRJbnRSZWN0KG92ZXJmbG93Q2xp
cFJlY3QocGFpbnRPZmZzZXQpKSk7CisKKyAgICAvLyBDb252ZXJ0IGZyb20gY29udGFpbmVyIG9m
ZnNldHMgKGh0bWwgcmVuZGVyZXJzKSB0byBhIHJlbGF0aXZlIHRyYW5zZm9ybSAoc3ZnIHJlbmRl
cmVycykuCisgICAgLy8gVHJhbnNmb3JtIGZyb20gb3VyIHBhaW50IGNvbnRhaW5lcidzIGNvb3Jk
aW5hdGUgc3lzdGVtIHRvIG91ciBsb2NhbCBjb29yZHMuCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQ
YWludE9mZnNldCA9IHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCk7CisgICAgY2hpbGRQYWlu
dEluZm8uYXBwbHlUcmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtOjp0cmFuc2xhdGlvbihhZGp1c3Rl
ZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpICogbG9jYWxUb0JvcmRl
ckJveFRyYW5zZm9ybSgpKTsKKworICAgIC8vIFNWR1JlbmRlcmluZ0NvbnRleHQgbXVzdCBiZSBk
ZXN0cm95ZWQgYmVmb3JlIHdlIHJlc3RvcmUgdGhlIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQoKSwg
YmVjYXVzZSBhIGZpbHRlciBtYXkgaGF2ZQorICAgIC8vIGNoYW5nZWQgdGhlIGNvbnRleHQgYW5k
IGl0IGlzIG9ubHkgcmV2ZXJ0ZWQgd2hlbiB0aGUgU1ZHUmVuZGVyaW5nQ29udGV4dCBkZXN0cnVj
dG9yIGZpbmlzaGVzIGFwcGx5aW5nIHRoZSBmaWx0ZXIuCisgICAgeworICAgICAgICBTVkdSZW5k
ZXJpbmdDb250ZXh0IHJlbmRlcmluZ0NvbnRleHQ7CisgICAgICAgIGJvb2wgY29udGludWVSZW5k
ZXJpbmcgPSB0cnVlOworICAgICAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZTo6Rm9yZWdyb3VuZCkgeworICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4dC5wcmVwYXJl
VG9SZW5kZXJTVkdDb250ZW50KCp0aGlzLCBjaGlsZFBhaW50SW5mbyk7CisgICAgICAgICAgICBj
b250aW51ZVJlbmRlcmluZyA9IHJlbmRlcmluZ0NvbnRleHQuaXNSZW5kZXJpbmdQcmVwYXJlZCgp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbnRpbnVlUmVuZGVyaW5nKSB7CisgICAgICAg
ICAgICBjaGlsZFBhaW50SW5mby51cGRhdGVTdWJ0cmVlUGFpbnRSb290Rm9yQ2hpbGRyZW4odGhp
cyk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVy
RWxlbWVudD4oKnRoaXMpKQorICAgICAgICAgICAgICAgIGNoaWxkLnBhaW50KGNoaWxkUGFpbnRJ
bmZvLCBsb2NhdGlvbigpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNoaWxkUGFpbnRJbmZv
LmNvbnRleHQoKS5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgTGVnYWN5UmVuZGVyU1ZHUm9vdDo6d2ls
bEJlRGVzdHJveWVkKCkKK3sKKyAgICBSZW5kZXJCbG9jazo6cmVtb3ZlUGVyY2VudEhlaWdodERl
c2NlbmRhbnQoY29uc3RfY2FzdDxMZWdhY3lSZW5kZXJTVkdSb290Jj4oKnRoaXMpKTsKKworICAg
IFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQoKnRoaXMpOworICAgIFJlbmRlclJl
cGxhY2VkOjp3aWxsQmVEZXN0cm95ZWQoKTsKK30KKwordm9pZCBMZWdhY3lSZW5kZXJTVkdSb290
OjppbnNlcnRlZEludG9UcmVlKElzSW50ZXJuYWxNb3ZlIGlzSW50ZXJuYWxNb3ZlKQoreworICAg
IFJlbmRlclJlcGxhY2VkOjppbnNlcnRlZEludG9UcmVlKGlzSW50ZXJuYWxNb3ZlKTsKKyAgICBT
VkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoKnRoaXMpOworfQorCit2b2lk
IExlZ2FjeVJlbmRlclNWR1Jvb3Q6OndpbGxCZVJlbW92ZWRGcm9tVHJlZShJc0ludGVybmFsTW92
ZSBpc0ludGVybmFsTW92ZSkKK3sKKyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2lsbEJl
UmVtb3ZlZEZyb21UcmVlKCp0aGlzKTsKKyAgICBSZW5kZXJSZXBsYWNlZDo6d2lsbEJlUmVtb3Zl
ZEZyb21UcmVlKGlzSW50ZXJuYWxNb3ZlKTsKK30KKwordm9pZCBMZWdhY3lSZW5kZXJTVkdSb290
OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKQoreworICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZTo6TGF5b3V0KQor
ICAgICAgICBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKKworICAgIC8vIEJveCBkZWNvcmF0
aW9ucyBtYXkgaGF2ZSBhcHBlYXJlZC9kaXNhcHBlYXJlZCAtIHJlY29tcHV0ZSBzdGF0dXMuCisg
ICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlOjpSZXBhaW50KQorICAgICAgICBtX2hhc0Jv
eERlY29yYXRpb25zID0gaGFzVmlzaWJsZUJveERlY29yYXRpb25TdHlsZSgpOworCisgICAgUmVu
ZGVyUmVwbGFjZWQ6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKCp0aGlzLCBkaWZmLCBzdHlsZSgpKTsKK30K
KworLy8gUmVuZGVyQm94IG1ldGhvZHMgd2lsbCBleHBlY3QgY29vcmRpbmF0ZXMgdy9vIGFueSB0
cmFuc2Zvcm1zIGluIGNvb3JkaW5hdGVzCisvLyByZWxhdGl2ZSB0byBvdXIgYm9yZGVyQm94IG9y
aWdpbi4gVGhpcyBtZXRob2QgZ2l2ZXMgdXMgZXhhY3RseSB0aGF0Lgordm9pZCBMZWdhY3lSZW5k
ZXJTVkdSb290OjpidWlsZExvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKQoreworICAgIGZsb2F0
IHNjYWxlID0gc3R5bGUoKS5lZmZlY3RpdmVab29tKCk7CisgICAgRmxvYXRQb2ludCB0cmFuc2xh
dGUgPSBzdmdTVkdFbGVtZW50KCkuY3VycmVudFRyYW5zbGF0ZVZhbHVlKCk7CisgICAgTGF5b3V0
U2l6ZSBib3JkZXJBbmRQYWRkaW5nKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRl
clRvcCgpICsgcGFkZGluZ1RvcCgpKTsKKyAgICBtX2xvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0g
PSBzdmdTVkdFbGVtZW50KCkudmlld0JveFRvVmlld1RyYW5zZm9ybShjb250ZW50V2lkdGgoKSAv
IHNjYWxlLCBjb250ZW50SGVpZ2h0KCkgLyBzY2FsZSk7CisgICAgaWYgKGJvcmRlckFuZFBhZGRp
bmcuaXNaZXJvKCkgJiYgc2NhbGUgPT0gMSAmJiB0cmFuc2xhdGUgPT0gRmxvYXRQb2ludDo6emVy
bygpKQorICAgICAgICByZXR1cm47CisgICAgbV9sb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtID0g
QWZmaW5lVHJhbnNmb3JtKHNjYWxlLCAwLCAwLCBzY2FsZSwgYm9yZGVyQW5kUGFkZGluZy53aWR0
aCgpICsgdHJhbnNsYXRlLngoKSwgYm9yZGVyQW5kUGFkZGluZy5oZWlnaHQoKSArIHRyYW5zbGF0
ZS55KCkpICogbV9sb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtOworfQorCitjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIExlZ2FjeVJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBj
b25zdAoreworICAgIC8vIFNsaWdodGx5IG9wdGltaXplZCB2ZXJzaW9uIG9mIG1fbG9jYWxUb1Bh
cmVudFRyYW5zZm9ybSA9IEFmZmluZVRyYW5zZm9ybTo6dHJhbnNsYXRpb24oeCgpLCB5KCkpICog
bV9sb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtOworICAgIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9y
bSA9IG1fbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybTsKKyAgICBpZiAoeCgpKQorICAgICAgICBt
X2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0uc2V0RShtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0uZSgp
ICsgcm91bmRUb0ludCh4KCkpKTsKKyAgICBpZiAoeSgpKQorICAgICAgICBtX2xvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0uc2V0RihtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0uZigpICsgcm91bmRUb0lu
dCh5KCkpKTsKKyAgICByZXR1cm4gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOworfQorCitMYXlv
dXRSZWN0IExlZ2FjeVJlbmRlclNWR1Jvb3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2li
aWxpdHk6OlZpc2libGUgJiYgIWVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkp
CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisKKyAgICBGbG9hdFJlY3QgY29udGVudFJl
cGFpbnRSZWN0ID0gbV9sb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtLm1hcFJlY3QocmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgY29udGVudFJlcGFpbnRSZWN0LmludGVyc2Vj
dChzbmFwcGVkSW50UmVjdChib3JkZXJCb3hSZWN0KCkpKTsKKworICAgIExheW91dFJlY3QgcmVw
YWludFJlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KGNvbnRlbnRSZXBhaW50UmVjdCk7CisgICAg
aWYgKG1faGFzQm94RGVjb3JhdGlvbnMgfHwgaGFzUmVuZGVyT3ZlcmZsb3coKSkKKyAgICAgICAg
cmVwYWludFJlY3QudW5pdGUodW5pb25SZWN0KGxvY2FsU2VsZWN0aW9uUmVjdChmYWxzZSksIHZp
c3VhbE92ZXJmbG93UmVjdCgpKSk7CisKKyAgICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6OmNvbXB1
dGVSZWN0KGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJlY3QpLCByZXBhaW50Q29udGFpbmVyLCBj
b250ZXh0KTsKK30KKworc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IExlZ2FjeVJlbmRlclNWR1Jv
b3Q6OmNvbXB1dGVGbG9hdFZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0
Q29udGV4dCBjb250ZXh0KSBjb25zdAoreworICAgIC8vIEFwcGx5IG91ciBsb2NhbCB0cmFuc2Zv
cm1zIChleGNlcHQgZm9yIHgveSB0cmFuc2xhdGlvbikgYW5kIHRoZW4gY2FsbAorICAgIC8vIFJl
bmRlckJveCdzIG1ldGhvZCB0byBoYW5kbGUgYWxsIHRoZSBub3JtYWwgQ1NTIEJveCBtb2RlbCBi
aXRzCisgICAgRmxvYXRSZWN0IGFkanVzdGVkUmVjdCA9IG1fbG9jYWxUb0JvcmRlckJveFRyYW5z
Zm9ybS5tYXBSZWN0KHJlY3QpOworCisgICAgLy8gQXBwbHkgaW5pdGlhbCB2aWV3cG9ydCBjbGlw
CisgICAgaWYgKHNob3VsZEFwcGx5Vmlld3BvcnRDbGlwKCkpIHsKKyAgICAgICAgaWYgKGNvbnRl
eHQub3B0aW9ucy5jb250YWlucyhWaXNpYmxlUmVjdENvbnRleHRPcHRpb246OlVzZUVkZ2VJbmNs
dXNpdmVJbnRlcnNlY3Rpb24pKSB7CisgICAgICAgICAgICBpZiAoIWFkanVzdGVkUmVjdC5lZGdl
SW5jbHVzaXZlSW50ZXJzZWN0KHNuYXBwZWRJbnRSZWN0KGJvcmRlckJveFJlY3QoKSkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgYWRqdXN0ZWRSZWN0LmludGVyc2VjdChzbmFwcGVkSW50UmVjdChib3JkZXJCb3hSZWN0
KCkpKTsKKyAgICB9CisKKyAgICBpZiAobV9oYXNCb3hEZWNvcmF0aW9ucyB8fCBoYXNSZW5kZXJP
dmVyZmxvdygpKSB7CisgICAgICAgIC8vIFRoZSBzZWxlY3Rpb25SZWN0IGNhbiBwcm9qZWN0IG91
dHNpZGUgb2YgdGhlIG92ZXJmbG93UmVjdCwgc28gdGFrZSB0aGVpciB1bmlvbgorICAgICAgICAv
LyBmb3IgcmVwYWludGluZyB0byBhdm9pZCBzZWxlY3Rpb24gcGFpbnRpbmcgZ2xpdGNoZXMuCisg
ICAgICAgIExheW91dFJlY3QgZGVjb3JhdGVkUmVwYWludFJlY3QgPSB1bmlvblJlY3QobG9jYWxT
ZWxlY3Rpb25SZWN0KGZhbHNlKSwgdmlzdWFsT3ZlcmZsb3dSZWN0KCkpOworICAgICAgICBhZGp1
c3RlZFJlY3QudW5pdGUoZGVjb3JhdGVkUmVwYWludFJlY3QpOworICAgIH0KKworICAgIGlmIChz
dGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IHJlY3RJbkNvbnRhaW5lciA9IFJlbmRlclJlcGxhY2Vk
Ojpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lcihlbmNsb3NpbmdJbnRSZWN0KGFkanVzdGVk
UmVjdCksIGNvbnRhaW5lciwgY29udGV4dCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKnJl
Y3RJbkNvbnRhaW5lcik7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworLy8gVGhpcyBt
ZXRob2QgZXhwZWN0cyBsb2NhbCBDU1MgYm94IGNvb3JkaW5hdGVzLgorLy8gQ2FsbGVycyB3aXRo
IGxvY2FsIFNWRyB2aWV3cG9ydCBjb29yZGluYXRlcyBzaG91bGQgZmlyc3QgYXBwbHkgdGhlIGxv
Y2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0KKy8vIHRvIGNvbnZlcnQgZnJvbSBTVkcgdmlld3BvcnQg
Y29vcmRpbmF0ZXMgdG8gbG9jYWwgQ1NTIGJveCBjb29yZGluYXRlcy4KK3ZvaWQgTGVnYWN5UmVu
ZGVyU1ZHUm9vdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlLCBP
cHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiBtb2RlLCBib29sKiB3YXNGaXhlZCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIW1vZGUuY29udGFpbnMoSXNGaXhlZCkpOyAvLyBXZSBzaG91bGQgaGF2
ZSBubyBmaXhlZCBjb250ZW50IGluIHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUuCisgICAgQVNTRVJU
KG1vZGUuY29udGFpbnMoVXNlVHJhbnNmb3JtcykpOyAvLyBtYXBwaW5nIGEgcG9pbnQgdGhyb3Vn
aCBTVkcgdy9vIHJlc3BlY3RpbmcgdHJhbnNmb3JtcyBpcyB1c2VsZXNzLgorCisgICAgUmVuZGVy
UmVwbGFjZWQ6Om1hcExvY2FsVG9Db250YWluZXIoYW5jZXN0b3JDb250YWluZXIsIHRyYW5zZm9y
bVN0YXRlLCBtb2RlIHwgQXBwbHlDb250YWluZXJGbGlwLCB3YXNGaXhlZCk7Cit9CisKK2NvbnN0
IFJlbmRlck9iamVjdCogTGVnYWN5UmVuZGVyU1ZHUm9vdDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5l
cihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJH
ZW9tZXRyeU1hcCYgZ2VvbWV0cnlNYXApIGNvbnN0Cit7CisgICAgcmV0dXJuIFJlbmRlclJlcGxh
Y2VkOjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGFuY2VzdG9yVG9TdG9wQXQsIGdlb21ldHJ5TWFw
KTsKK30KKwordm9pZCBMZWdhY3lSZW5kZXJTVkdSb290Ojp1cGRhdGVDYWNoZWRCb3VuZGFyaWVz
KCkKK3sKKyAgICBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hl
cygqdGhpcywgbV9vYmplY3RCb3VuZGluZ0JveCwgbV9vYmplY3RCb3VuZGluZ0JveFZhbGlkLCBt
X3N0cm9rZUJvdW5kaW5nQm94LCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgU1ZHUmVuZGVy
U3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKCp0aGlzLCBtX3JlcGFp
bnRCb3VuZGluZ0JveCk7CisgICAgbV9yZXBhaW50Qm91bmRpbmdCb3guaW5mbGF0ZShob3Jpem9u
dGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKK30KKworYm9vbCBMZWdhY3lSZW5kZXJTVkdS
b290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRU
ZXN0QWN0aW9uKQoreworICAgIExheW91dFBvaW50IHBvaW50SW5QYXJlbnQgPSBsb2NhdGlvbklu
Q29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpOworICAg
IExheW91dFBvaW50IHBvaW50SW5Cb3JkZXJCb3ggPSBwb2ludEluUGFyZW50IC0gdG9MYXlvdXRT
aXplKGxvY2F0aW9uKCkpOworCisgICAgQVNTRVJUKFNWR0hpdFRlc3RDeWNsZURldGVjdGlvblNj
b3BlOjppc0VtcHR5KCkpOworCisgICAgLy8gVGVzdCBTVkcgY29udGVudCBpZiB0aGUgcG9pbnQg
aXMgaW4gb3VyIGNvbnRlbnQgYm94IG9yIGl0IGlzIGluc2lkZSB0aGUgdmlzdWFsT3ZlcmZsb3dS
ZWN0IGFuZCB0aGUgb3ZlcmZsb3cgaXMgdmlzaWJsZS4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgYW4gaW50ZXJzZWN0aW9uIHdoZW4gcmVjdC1iYXNlZCBoaXQgdGVzdHMgYXJlIHN1cHBv
cnRlZCBieSBub2RlQXRGbG9hdFBvaW50LgorICAgIGlmIChjb250ZW50Qm94UmVjdCgpLmNvbnRh
aW5zKHBvaW50SW5Cb3JkZXJCb3gpIHx8ICghc2hvdWxkQXBwbHlWaWV3cG9ydENsaXAoKSAmJiB2
aXN1YWxPdmVyZmxvd1JlY3QoKS5jb250YWlucyhwb2ludEluUGFyZW50KSkpIHsKKyAgICAgICAg
RmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2Uo
KS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUG9pbnQoRmxvYXRQb2ludChwb2ludElu
UGFyZW50KSk7CisKKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgeworICAgICAgICAg
ICAgLy8gRklYTUU6IG5vZGVBdEZsb2F0UG9pbnQoKSBkb2Vzbid0IGhhbmRsZSByZWN0LWJhc2Vk
IGhpdCB0ZXN0cyB5ZXQuCisgICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0UG9pbnQo
cmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgeworICAgICAgICAg
ICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQm9yZGVyQm94KTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQoY2hp
bGQtPm5vZGUoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lcikgPT0gSGl0VGVzdFByb2dy
ZXNzOjpTdG9wKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVkdIaXRUZXN0Q3ljbGVE
ZXRlY3Rpb25TY29wZTo6aXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLy8gSWYgd2UgZGlkbid0IGVhcmx5IGV4aXQgYWJvdmUsIHdlJ3ZlIGp1c3QgaGl0IHRo
ZSBjb250YWluZXIgPHN2Zz4gZWxlbWVudC4gVW5saWtlIFNWRyAxLjEsIDJuZCBFZGl0aW9uIGFs
bG93cyBjb250YWluZXIgZWxlbWVudHMgdG8gYmUgaGl0LgorICAgIGlmICgoaGl0VGVzdEFjdGlv
biA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENo
aWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKHJlcXVlc3QpKSB7Cisg
ICAgICAgIC8vIE9ubHkgcmV0dXJuIHRydWUgaGVyZSwgaWYgdGhlIGxhc3QgaGl0IHRlc3Rpbmcg
cGhhc2UgJ0Jsb2NrQmFja2dyb3VuZCcgaXMgZXhlY3V0ZWQuIElmIHdlJ2QgcmV0dXJuIHRydWUg
aW4gdGhlICdGb3JlZ3JvdW5kJyBwaGFzZSwKKyAgICAgICAgLy8gaGl0IHRlc3Rpbmcgd291bGQg
c3RvcCBpbW1lZGlhdGVseS4gRm9yIFNWRyBvbmx5IHRyZWVzIHRoaXMgZG9lc24ndCBtYXR0ZXIu
IFRob3VnaCB3aGVuIHdlIGhhdmUgYSA8Zm9yZWlnbk9iamVjdD4gc3VidHJlZSB3ZSBuZWVkCisg
ICAgICAgIC8vIHRvIGJlIGFibGUgdG8gZGV0ZWN0IGhpdHMgb24gdGhlIGJhY2tncm91bmQgb2Yg
YSA8ZGl2PiBlbGVtZW50LiBJZiB3ZSdkIHJldHVybiB0cnVlIGhlcmUgaW4gdGhlICdGb3JlZ3Jv
dW5kJyBwaGFzZSwgd2UgYXJlIG5vdCBhYmxlIAorICAgICAgICAvLyB0byBkZXRlY3QgdGhlc2Ug
aGl0cyBhbnltb3JlLgorICAgICAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QoYWNjdW11bGF0ZWRP
ZmZzZXQgKyBsb2NhdGlvbigpLCBzaXplKCkpOworICAgICAgICBpZiAobG9jYXRpb25JbkNvbnRh
aW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkJvcmRlckJveCk7CisgICAgICAgICAgICBpZiAocmVzdWx0
LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQobm9kZUZvckhpdFRlc3QoKSwgcmVxdWVzdCwg
bG9jYXRpb25JbkNvbnRhaW5lciwgYm91bmRzUmVjdCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9w
KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
QVNTRVJUKFNWR0hpdFRlc3RDeWNsZURldGVjdGlvblNjb3BlOjppc0VtcHR5KCkpOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIExlZ2FjeVJlbmRlclNWR1Jvb3Q6Omhhc1JlbGF0aXZl
RGltZW5zaW9ucygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN2Z1NWR0VsZW1lbnQoKS5pbnRyaW5z
aWNIZWlnaHQoKS5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKSB8fCBzdmdTVkdFbGVtZW50KCkuaW50
cmluc2ljV2lkdGgoKS5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKTsKK30KKwordm9pZCBMZWdhY3lS
ZW5kZXJTVkdSb290OjphZGRSZXNvdXJjZUZvckNsaWVudEludmFsaWRhdGlvbihSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lciogcmVzb3VyY2UpCit7CisgICAgTGVnYWN5UmVuZGVyU1ZHUm9vdCog
c3ZnUm9vdCA9IFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRUcmVlUm9vdE9iamVjdCgqcmVzb3VyY2Up
OworICAgIGlmICghc3ZnUm9vdCkKKyAgICAgICAgcmV0dXJuOworICAgIHN2Z1Jvb3QtPm1fcmVz
b3VyY2VzTmVlZGluZ1RvSW52YWxpZGF0ZUNsaWVudHMuYWRkKHJlc291cmNlKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5kZXJTVkdS
b290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL0xlZ2FjeVJlbmRlclNWR1Jvb3Qu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yMDg2YTU2YTkwYzJkOGU4NDIxODUyMmY2YWY4ZTg1YTZkOTJjNDAzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9MZWdhY3lSZW5k
ZXJTVkdSb290LmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclJlcGxh
Y2VkLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyOworY2xhc3MgU1ZHU1ZHRWxlbWVudDsKKworY2xhc3MgTGVnYWN5UmVuZGVyU1ZHUm9v
dCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJSZXBsYWNlZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9D
QVRFRChMZWdhY3lSZW5kZXJTVkdSb290KTsKK3B1YmxpYzoKKyAgICBMZWdhY3lSZW5kZXJTVkdS
b290KFNWR1NWR0VsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKKyAgICB2aXJ0dWFsIH5MZWdhY3lS
ZW5kZXJTVkdSb290KCk7CisKKyAgICBTVkdTVkdFbGVtZW50JiBzdmdTVkdFbGVtZW50KCkgY29u
c3Q7CisKKyAgICBib29sIGlzRW1iZWRkZWRUaHJvdWdoU1ZHSW1hZ2UoKSBjb25zdDsKKyAgICBi
b29sIGlzRW1iZWRkZWRUaHJvdWdoRnJhbWVDb250YWluaW5nU1ZHRG9jdW1lbnQoKSBjb25zdDsK
KworICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY1JhdGlvSW5mb3JtYXRpb24oRmxvYXRTaXplJiBp
bnRyaW5zaWNTaXplLCBkb3VibGUmIGludHJpbnNpY1JhdGlvKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIGJvb2wgaXNMYXlvdXRTaXplQ2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNMYXlvdXRT
aXplQ2hhbmdlZDsgfQorICAgIGJvb2wgaXNJbkxheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5M
YXlvdXQ7IH0KKyAgICB2b2lkIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpIG92ZXJyaWRlIHsg
bV9uZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KKyAgICBib29sIG5l
ZWRzQm91bmRhcmllc1VwZGF0ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fbmVlZHNCb3VuZGFyaWVz
T3JUcmFuc2Zvcm1VcGRhdGU7IH0KKyAgICB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkg
b3ZlcnJpZGUgeyBtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQor
CisgICAgSW50U2l6ZSBjb250YWluZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluZXJT
aXplOyB9CisgICAgdm9pZCBzZXRDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIGNvbnRhaW5l
clNpemUpIHsgbV9jb250YWluZXJTaXplID0gY29udGFpbmVyU2l6ZTsgfQorCisgICAgYm9vbCBo
YXNSZWxhdGl2ZURpbWVuc2lvbnMoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIGxvY2FsVG9C
b3JkZXJCb3hUcmFuc2Zvcm0gbWFwcyBsb2NhbCBTVkcgdmlld3BvcnQgY29vcmRpbmF0ZXMgdG8g
bG9jYWwgQ1NTIGJveCBjb29yZGluYXRlcy4gIAorICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
bG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUb0JvcmRl
ckJveFRyYW5zZm9ybTsgfQorCisgICAgLy8gVGhlIGZsYWcgaXMgY2xlYXJlZCBhdCB0aGUgYmVn
aW5uaW5nIG9mIGVhY2ggbGF5b3V0KCkgcGFzcy4gRWxlbWVudHMgdGhlbiBjYWxsIHRoaXMKKyAg
ICAvLyBtZXRob2QgZHVyaW5nIGxheW91dCB3aGVuIHRoZXkgYXJlIGludmFsaWRhdGVkIGJ5IGEg
ZmlsdGVyLgorICAgIHN0YXRpYyB2b2lkIGFkZFJlc291cmNlRm9yQ2xpZW50SW52YWxpZGF0aW9u
KFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBlbGVt
ZW50KCkgY29uc3QgPSBkZWxldGU7CisKKyAgICBib29sIGlzU1ZHUm9vdCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIEludGVudGlhbGx5IGxlZnQgJ1JlbmRlclNW
R1Jvb3QnIGluc3RlYWQgb2YgJ0xlZ2FjeVJlbmRlclNWR1Jvb3QnLCB0byBhdm9pZCBicmVha2lu
ZyBsYXlvdXQgdGVzdHMuCisgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuICJSZW5kZXJTVkdSb290IjsgfQorCisgICAgTGF5b3V0VW5pdCBjb21wdXRl
UmVwbGFjZWRMb2dpY2FsV2lkdGgoU2hvdWxkQ29tcHV0ZVByZWZlcnJlZCAgPSBDb21wdXRlQWN0
dWFsKSBjb25zdCBvdmVycmlkZTsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxIZWlnaHQoc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBlc3RpbWF0ZWRVc2VkV2lkdGggPSBz
dGQ6Om51bGxvcHQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jikg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIG92ZXJyaWRlOworCisgICAg
dm9pZCBpbnNlcnRlZEludG9UcmVlKElzSW50ZXJuYWxNb3ZlKSBvdmVycmlkZTsKKyAgICB2b2lk
IHdpbGxCZVJlbW92ZWRGcm9tVHJlZShJc0ludGVybmFsTW92ZSkgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKSBvdmVycmlkZTsKKworICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1Bh
cmVudFRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBmaWxsQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQorICAgIEZsb2F0
UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3Ryb2tl
Qm91bmRpbmdCb3g7IH0KKyAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQorCisg
ICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGU7CisKKyAg
ICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBvdmVycmlk
ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gY29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJ
bkNvbnRhaW5lcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIG1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5j
ZXN0b3JDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVz
TW9kZT4sIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBSZW5kZXJP
YmplY3QqIHB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmKSBjb25zdCBvdmVycmlkZTsK
KworICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KKworICAgIGJvb2wgc2hvdWxkQXBwbHlWaWV3cG9ydENsaXAoKSBjb25zdDsK
KyAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKKyAgICB2b2lkIGJ1aWxkTG9jYWxU
b0JvcmRlckJveFRyYW5zZm9ybSgpOworCisgICAgSW50U2l6ZSBtX2NvbnRhaW5lclNpemU7Cisg
ICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgYm9vbCBtX29iamVjdEJvdW5k
aW5nQm94VmFsaWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pbkxheW91dCB7IGZhbHNlIH07Cisg
ICAgRmxvYXRSZWN0IG1fc3Ryb2tlQm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fcmVwYWlu
dEJvdW5kaW5nQm94OworICAgIG11dGFibGUgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVu
dFRyYW5zZm9ybTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRvQm9yZGVyQm94VHJhbnNm
b3JtOworICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPiBtX3Jlc291cmNl
c05lZWRpbmdUb0ludmFsaWRhdGVDbGllbnRzOworICAgIGJvb2wgbV9pc0xheW91dFNpemVDaGFu
Z2VkIDogMTsKKyAgICBib29sIG1fbmVlZHNCb3VuZGFyaWVzT3JUcmFuc2Zvcm1VcGRhdGUgOiAx
OworICAgIGJvb2wgbV9oYXNCb3hEZWNvcmF0aW9ucyA6IDE7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChMZWdhY3lS
ZW5kZXJTVkdSb290LCBpc1NWR1Jvb3QoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAKaW5kZXggYjg1NGNkZDFlZmIxMjU3NjYzODhmNTk0ZTE5
YTRiZjA4Yzc0NzM2ZS4uM2NkYWRlOGM3MjJkMGE5ZWQwMjM3Y2M4NWJmODA0NTMzMDliMzhiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAK
QEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBSZW5kZXJTVkdCbG9jazo6dXBkYXRlRnJvbVN0eWxlKCkK
ICAgICAvLyBVbnRpbCB0aGlzIGlzIHJlc29sdmVkLCBkaXNhYmxlIG92ZXJmbG93IHN1cHBvcnQu
IE9wZXJhL0ZGIGRvbid0IHN1cHBvcnQgaXQgYXMgd2VsbCBhdCB0aGUgbW9tZW50IChGZWIgMjAx
MCkuCiAgICAgLy8KICAgICAvLyBOb3RlOiBUaGlzIGRvZXMgTk9UIGFmZmVjdCBvdmVyZmxvdyBo
YW5kbGluZyBvbiBvdXRlci9pbm5lciA8c3ZnPiBlbGVtZW50cyAtIHRoaXMgaXMgaGFuZGxlZAot
ICAgIC8vIG1hbnVhbGx5IGJ5IFJlbmRlclNWR1Jvb3QgLSB3aGljaCBvd25zIHRoZSBkb2N1bWVu
dHMgZW5jbG9zaW5nIHJvb3QgbGF5ZXIgYW5kIHRodXMgd29ya3MgZmluZS4KKyAgICAvLyBtYW51
YWxseSBieSBMZWdhY3lSZW5kZXJTVkdSb290IC0gd2hpY2ggb3ducyB0aGUgZG9jdW1lbnRzIGVu
Y2xvc2luZyByb290IGxheWVyIGFuZCB0aHVzIHdvcmtzIGZpbmUuCiAgICAgc2V0SGFzTm9uVmlz
aWJsZU92ZXJmbG93KGZhbHNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCmluZGV4IGJhNjcyMjNmMjgxZmMzNGFiNzEy
MTY3YzZkOWFjZTc3MmU2MTc4MWQuLmUxNDMxY2I2YmI2Yjg2N2E5MTA1N2VjYTJlZjg3M2UwZmE3
NDhmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0NvbnRhaW5lci5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6
OmxheW91dCgpCiAgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1Bv
aW50OwogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIAotICAgIC8vIFJlbmRlclNWR1Jvb3Qg
ZGlzYWJsZXMgcGFpbnQgb2Zmc2V0IGNhY2hlIGZvciB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlLgor
ICAgIC8vIExlZ2FjeVJlbmRlclNWR1Jvb3QgZGlzYWJsZXMgcGFpbnQgb2Zmc2V0IGNhY2hlIGZv
ciB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlLgogICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmlldygp
LmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOwogCiAgICAgTGF5
b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgU1ZHUmVuZGVyU3VwcG9ydDo6Y2hlY2tGb3JT
VkdSZXBhaW50RHVyaW5nTGF5b3V0KCp0aGlzKSB8fCBzZWxmV2lsbFBhaW50KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVj
dC5jcHAKaW5kZXggNTgyMmM4ZDMxOTg0NTMzYWNiZmFjOWI4MDQ4OTZjYTcyZjg2Y2MxOC4uYTVk
YjFiZTI2OTk0NzMyYTdjNjkwZTZlYjQ4ZmE2YTFjOTIyOTFhZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCkBA
IC0xMjEsNyArMTIxLDcgQEAgdm9pZCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0OjpsYXlvdXQoKQog
ewogICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAg
ICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKCF2aWV3KCkuZnJhbWVWaWV3KCku
bGF5b3V0Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7IC8vIFJlbmRlclNW
R1Jvb3QgZGlzYWJsZXMgcGFpbnQgb2Zmc2V0IGNhY2hlIGZvciB0aGUgU1ZHIHJlbmRlcmluZyB0
cmVlLgorICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc1Bh
aW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOyAvLyBMZWdhY3lSZW5kZXJTVkdSb290IGRpc2FibGVz
IHBhaW50IG9mZnNldCBjYWNoZSBmb3IgdGhlIFNWRyByZW5kZXJpbmcgdHJlZS4KIAogICAgIExh
eW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIFNWR1JlbmRlclN1cHBvcnQ6OmNoZWNrRm9y
U1ZHUmVwYWludER1cmluZ0xheW91dCgqdGhpcykpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAppbmRleCA1MTNmNWFkNGJm
ZDlhODk0MjE0NGM0YTZlMDdmODcwMDhmMWFmYjUyLi45YTM5YmQxYjRlM2ZjZWQ3YzE5MzMxYWM3
ODEyNDk0YWYyMzE5NzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTI4LDggKzI4LDggQEAKICNpbmNsdWRlICJG
bG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJJbmxp
bmVSdW5BbmRPZmZzZXQuaCIKKyNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdSb290LmgiCiAjaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVycy5oIgog
I2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3hJbmxpbmVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCmluZGV4IDlmZDMzZjNjMGI5
MWY3MTQ1NmJhMjVhMmVmZDA2ZGQwMmQzOWE2YWQuLjJhMjU3ZjVjMjM5ODg5NWZlZGYwYWFiMmQ0
MzhiN2IzNTg3NjhhYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2UuY3BwCkBAIC0yNSwxMSArMjUsMTEgQEAKIAogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZH
Um9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKLSNpbmNs
dWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUg
IlNWR1Jlc291cmNlRWxlbWVudENsaWVudC5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgpA
QCAtMTk4LDkgKzE5OCw5IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRB
bmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihSZW5kZXJPYmplY3QmCiAgICAgQVNTRVJUKG9i
amVjdC5ub2RlKCkpOwogCiAgICAgaWYgKG5lZWRzTGF5b3V0ICYmICFvYmplY3QucmVuZGVyVHJl
ZUJlaW5nRGVzdHJveWVkKCkpIHsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGluc2lkZSB0aGUgbGF5
b3V0IG9mIGFuIFJlbmRlclNWR1Jvb3QsIGRvIG5vdCBjcm9zcyB0aGUgU1ZHIGJvdW5kYXJ5IHRv
CisgICAgICAgIC8vIElmIHdlIGFyZSBpbnNpZGUgdGhlIGxheW91dCBvZiBhbiBMZWdhY3lSZW5k
ZXJTVkdSb290LCBkbyBub3QgY3Jvc3MgdGhlIFNWRyBib3VuZGFyeSB0bwogICAgICAgICAvLyBp
bnZhbGlkYXRlIHRoZSBhbmNlc3RvciByZW5kZXJlciBiZWNhdXNlIGl0IG1heSBoYXZlIGZpbmlz
aGVkIGl0cyBsYXlvdXQgYWxyZWFkeS4KLSAgICAgICAgaWYgKGlzPFJlbmRlclNWR1Jvb3Q+KG9i
amVjdCkgJiYgZG93bmNhc3Q8UmVuZGVyU1ZHUm9vdD4ob2JqZWN0KS5pc0luTGF5b3V0KCkpCisg
ICAgICAgIGlmIChpczxMZWdhY3lSZW5kZXJTVkdSb290PihvYmplY3QpICYmIGRvd25jYXN0PExl
Z2FjeVJlbmRlclNWR1Jvb3Q+KG9iamVjdCkuaXNJbkxheW91dCgpKQogICAgICAgICAgICAgb2Jq
ZWN0LnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIG9iamVjdC5zZXROZWVkc0xheW91dChNYXJrQ29udGFpbmluZ0Jsb2NrQ2hhaW4pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmNwcAppbmRleCA3ZmZmZWU5MTMyYmU3NWRiNzdhNjcyNjJjMGE0ZmEwMmEx
ZmNhMWQ5Li43YTgwMGIwYTU2ODIzMDA0NjcxNWIxM2Q3OGU5MzI5ZTM1MmEwM2ZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmNwcApAQCAtMjAsOCArMjAsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCiAKKyNpbmNsdWRlICJMZWdh
Y3lSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJS
ZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR0Vs
ZW1lbnRUeXBlSGVscGVycy5oIgogI2luY2x1ZGUgIlNWR0dyYXBoaWNzRWxlbWVudC5oIgpAQCAt
NTMsNyArNTMsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpsYXlvdXQoKQog
ICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICAv
LyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgogICAgIGlm
IChzZWxmTmVlZHNDbGllbnRJbnZhbGlkYXRpb24oKSkKLSAgICAgICAgUmVuZGVyU1ZHUm9vdDo6
YWRkUmVzb3VyY2VGb3JDbGllbnRJbnZhbGlkYXRpb24odGhpcyk7CisgICAgICAgIExlZ2FjeVJl
bmRlclNWR1Jvb3Q6OmFkZFJlc291cmNlRm9yQ2xpZW50SW52YWxpZGF0aW9uKHRoaXMpOwogCiAg
ICAgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpsYXlvdXQoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAK
aW5kZXggZmE2OWQwOTA5MDk1MzBjMmQ5ZWVlYzQ5MDMxZTViZGNmYjcxNjIyYy4uOTFkYTAxMzIy
ZTk1ZTEwYzdhMGE3ZTE5MGM2NzM1NzZhOTQzNjA3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAKQEAgLTIz
LDggKzIzLDggQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgogCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZHUm9vdC5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFya2VySW5saW5lcy5oIgotI2luY2x1ZGUg
IlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlcjo6bGF5b3V0KCkKICAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1Bv
aW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIGlm
IG91ciBsYXlvdXQgY2hhbmdlZC4KICAgICBpZiAoZXZlckhhZExheW91dCgpICYmIHNlbGZOZWVk
c0xheW91dCgpKQotICAgICAgICBSZW5kZXJTVkdSb290OjphZGRSZXNvdXJjZUZvckNsaWVudElu
dmFsaWRhdGlvbih0aGlzKTsKKyAgICAgICAgTGVnYWN5UmVuZGVyU1ZHUm9vdDo6YWRkUmVzb3Vy
Y2VGb3JDbGllbnRJbnZhbGlkYXRpb24odGhpcyk7CiAKICAgICAvLyBSZW5kZXJTVkdIaWRkZW5D
b250YWluZXIgb3ZlcndyaXRlcyBsYXlvdXQoKS4gV2UgbmVlZCB0aGUKICAgICAvLyBsYXlvdXRp
bmcgb2YgUmVuZGVyU1ZHQ29udGFpbmVyIGZvciBjYWxjdWxhdGluZyAgbG9jYWwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmNwcAppbmRleCAyYzYwNTU5MGRiNDAzZWY0NGJmMTc4YmMwN2M4NDE2MDQ5YzA5NTFiLi5i
MzZhMzlmNDVlNmZiMDhlYjk2MzIxYTRlYmM1OGVjOThmZWFhNTlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
Y3BwCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1Jvb3QuaCIKICNp
bmNsdWRlICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIKICNpbmNsdWRlICJTVkdGaXRUb1ZpZXdC
b3guaCIKICNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDQ1MTA5MDIxY2U3MWZlMzhlOGIxNjY5NDk2YjQ2MjU4YTgyZDk3MC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDc4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDcsIDIwMDgsIDIwMDkgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSwgSW5jLgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgotCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCi0jaW5jbHVkZSAi
TGF5b3V0UmVwYWludGVyLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckNo
aWxkSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJSZW5k
ZXJUcmVlQnVpbGRlci5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTVkdF
bGVtZW50VHlwZUhlbHBlcnMuaCIKLSNpbmNsdWRlICJTVkdJbWFnZS5oIgotI2luY2x1ZGUgIlNW
R1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKLSNpbmNsdWRl
ICJTVkdSZXNvdXJjZXNDYWNoZS5oIgotI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJTVkdWaWV3U3BlYy5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCi0jaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4K
LSNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJTVkdSb290KTsKLQotUmVuZGVyU1ZHUm9v
dDo6UmVuZGVyU1ZHUm9vdChTVkdTVkdFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0
eWxlKQotICAgIDogUmVuZGVyUmVwbGFjZWQoZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCi0gICAg
LCBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQoZmFsc2UpCi0gICAgLCBtX25lZWRzQm91bmRhcmllc09y
VHJhbnNmb3JtVXBkYXRlKHRydWUpCi0gICAgLCBtX2hhc0JveERlY29yYXRpb25zKGZhbHNlKQot
ewotfQotCi1SZW5kZXJTVkdSb290Ojp+UmVuZGVyU1ZHUm9vdCgpID0gZGVmYXVsdDsKLQotU1ZH
U1ZHRWxlbWVudCYgUmVuZGVyU1ZHUm9vdDo6c3ZnU1ZHRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGRvd25jYXN0PFNWR1NWR0VsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7Ci19
Ci0KLXZvaWQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZUludHJpbnNpY1JhdGlvSW5mb3JtYXRpb24o
RmxvYXRTaXplJiBpbnRyaW5zaWNTaXplLCBkb3VibGUmIGludHJpbnNpY1JhdGlvKSBjb25zdAot
ewotICAgIEFTU0VSVCghc2hvdWxkQXBwbHlTaXplQ29udGFpbm1lbnQoKnRoaXMpKTsKLQotICAg
IC8vIFNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNJbnRyaW5zaWNT
aXppbmcKLSAgICAvLyBTVkcgbmVlZHMgdG8gc3BlY2lmeSBob3cgdG8gY2FsY3VsYXRlIHNvbWUg
aW50cmluc2ljIHNpemluZyBwcm9wZXJ0aWVzIHRvIGVuYWJsZSBpbmNsdXNpb24gd2l0aGluIG90
aGVyIGxhbmd1YWdlcy4KLQotICAgIC8vIFRoZSBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvIG9mIHRo
ZSB2aWV3cG9ydCBvZiBTVkcgY29udGVudCBpcyBuZWNlc3NhcnkgZm9yIGV4YW1wbGUsIHdoZW4g
aW5jbHVkaW5nIFNWRyBmcm9tIGFuIOKAmG9iamVjdOKAmQotICAgIC8vIGVsZW1lbnQgaW4gSFRN
TCBzdHlsZWQgd2l0aCBDU1MuIEl0IGlzIHBvc3NpYmxlIChpbmRlZWQsIGNvbW1vbikgZm9yIGFu
IFNWRyBncmFwaGljIHRvIGhhdmUgYW4gaW50cmluc2ljIGFzcGVjdCByYXRpbyBidXQKLSAgICAv
LyBub3QgdG8gaGF2ZSBhbiBpbnRyaW5zaWMgd2lkdGggb3IgaGVpZ2h0LiBUaGUgaW50cmluc2lj
IGFzcGVjdCByYXRpbyBtdXN0IGJlIGNhbGN1bGF0ZWQgYmFzZWQgdXBvbiB0aGUgZm9sbG93aW5n
IHJ1bGVzOgotICAgIC8vIC0gVGhlIGFzcGVjdCByYXRpbyBpcyBjYWxjdWxhdGVkIGJ5IGRpdmlk
aW5nIGEgd2lkdGggYnkgYSBoZWlnaHQuCi0gICAgLy8gLSBJZiB0aGUg4oCYd2lkdGjigJkgYW5k
IOKAmGhlaWdodOKAmSBvZiB0aGUgcm9vdG1vc3Qg4oCYc3Zn4oCZIGVsZW1lbnQgYXJlIGJvdGgg
c3BlY2lmaWVkIHdpdGggdW5pdCBpZGVudGlmaWVycyAoaW4sIG1tLCBjbSwgcHQsIHBjLAotICAg
IC8vICAgcHgsIGVtLCBleCkgb3IgaW4gdXNlciB1bml0cywgdGhlbiB0aGUgYXNwZWN0IHJhdGlv
IGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUg4oCYd2lkdGjigJkgYW5kIOKAmGhlaWdodOKAmSBhdHRy
aWJ1dGVzIGFmdGVyCi0gICAgLy8gICByZXNvbHZpbmcgYm90aCB2YWx1ZXMgdG8gdXNlciB1bml0
cy4KLSAgICBpbnRyaW5zaWNTaXplLmhhc0ludHJpbnNpY1dpZHRoID0gc3ZnU1ZHRWxlbWVudCgp
Lmhhc0ludHJpbnNpY1dpZHRoKCk7Ci0gICAgaW50cmluc2ljU2l6ZS5oYXNJbnRyaW5zaWNIZWln
aHQgPSBzdmdTVkdFbGVtZW50KCkuaGFzSW50cmluc2ljSGVpZ2h0KCk7Ci0gICAgaW50cmluc2lj
U2l6ZS5zZXRXaWR0aChmbG9hdFZhbHVlRm9yTGVuZ3RoKHN2Z1NWR0VsZW1lbnQoKS5pbnRyaW5z
aWNXaWR0aCgpLCAwKSk7Ci0gICAgaW50cmluc2ljU2l6ZS5zZXRIZWlnaHQoZmxvYXRWYWx1ZUZv
ckxlbmd0aChzdmdTVkdFbGVtZW50KCkuaW50cmluc2ljSGVpZ2h0KCksIDApKTsKLQotICAgIGlm
IChzdHlsZSgpLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJhdGlvVHlwZTo6UmF0aW8pIHsK
LSAgICAgICAgaW50cmluc2ljUmF0aW8gPSBzdHlsZSgpLmxvZ2ljYWxBc3BlY3RSYXRpbygpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDxkb3VibGU+IGludHJp
bnNpY1JhdGlvVmFsdWU7Ci0gICAgaWYgKCFpbnRyaW5zaWNTaXplLmlzRW1wdHkoKSkKLSAgICAg
ICAgaW50cmluc2ljUmF0aW9WYWx1ZSA9IGludHJpbnNpY1NpemUud2lkdGgoKSAvIHN0YXRpY19j
YXN0PGRvdWJsZT4oaW50cmluc2ljU2l6ZS5oZWlnaHQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IC8vIC0gSWYgZWl0aGVyL2JvdGggb2YgdGhlIOKAmHdpZHRo4oCZIGFuZCDigJhoZWlnaHTigJkg
b2YgdGhlIHJvb3Rtb3N0IOKAmHN2Z+KAmSBlbGVtZW50IGFyZSBpbiBwZXJjZW50YWdlIHVuaXRz
IChvciBvbWl0dGVkKSwgdGhlCi0gICAgICAgIC8vICAgYXNwZWN0IHJhdGlvIGlzIGNhbGN1bGF0
ZWQgZnJvbSB0aGUgd2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgb2YgdGhlIOKAmHZpZXdCb3jigJkg
c3BlY2lmaWVkIGZvciB0aGUgY3VycmVudCBTVkcgZG9jdW1lbnQKLSAgICAgICAgLy8gICBmcmFn
bWVudC4gSWYgdGhlIOKAmHZpZXdCb3jigJkgaXMgbm90IGNvcnJlY3RseSBzcGVjaWZpZWQsIG9y
IHNldCB0byAnbm9uZScsIHRoZSBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvIGNhbm5vdCBiZQotICAg
ICAgICAvLyAgIGNhbGN1bGF0ZWQgYW5kIGlzIGNvbnNpZGVyZWQgdW5zcGVjaWZpZWQuCi0gICAg
ICAgIEZsb2F0U2l6ZSB2aWV3Qm94U2l6ZSA9IHN2Z1NWR0VsZW1lbnQoKS52aWV3Qm94KCkuc2l6
ZSgpOwotICAgICAgICBpZiAoIXZpZXdCb3hTaXplLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
Ly8gVGhlIHZpZXdCb3ggY2FuIG9ubHkgeWllbGQgYW4gaW50cmluc2ljIHJhdGlvLCBub3QgYW4g
aW50cmluc2ljIHNpemUuCi0gICAgICAgICAgICBpbnRyaW5zaWNSYXRpb1ZhbHVlID0gdmlld0Jv
eFNpemUud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4odmlld0JveFNpemUuaGVpZ2h0KCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGludHJpbnNpY1JhdGlvVmFsdWUpCi0gICAg
ICAgIGludHJpbnNpY1JhdGlvID0gKmludHJpbnNpY1JhdGlvVmFsdWU7Ci0gICAgZWxzZSBpZiAo
c3R5bGUoKS5hc3BlY3RSYXRpb1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5cGU6OkF1dG9BbmRSYXRp
bykKLSAgICAgICAgaW50cmluc2ljUmF0aW8gPSBzdHlsZSgpLmxvZ2ljYWxBc3BlY3RSYXRpbygp
OwotfQotCi1ib29sIFJlbmRlclNWR1Jvb3Q6OmlzRW1iZWRkZWRUaHJvdWdoU1ZHSW1hZ2UoKSBj
b25zdAotewotICAgIHJldHVybiBpc0luU1ZHSW1hZ2UoJnN2Z1NWR0VsZW1lbnQoKSk7Ci19Ci0K
LWJvb2wgUmVuZGVyU1ZHUm9vdDo6aXNFbWJlZGRlZFRocm91Z2hGcmFtZUNvbnRhaW5pbmdTVkdE
b2N1bWVudCgpIGNvbnN0Ci17Ci0gICAgLy8gSWYgb3VyIGZyYW1lIGhhcyBhbiBvd25lciByZW5k
ZXJlciwgd2UncmUgZW1iZWRkZWQgdGhyb3VnaCBlZy4gb2JqZWN0L2VtYmVkL2lmcmFtZSwKLSAg
ICAvLyBidXQgd2Ugb25seSBuZWdvdGlhdGUgaWYgd2UncmUgaW4gYW4gU1ZHIGRvY3VtZW50Lgot
ICAgIGlmICghZnJhbWUoKS5vd25lclJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gZnJhbWUoKS5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCk7Ci19Ci0KLUxh
eW91dFVuaXQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKFNob3Vs
ZENvbXB1dGVQcmVmZXJyZWQgc2hvdWxkQ29tcHV0ZVByZWZlcnJlZCkgY29uc3QKLXsKLSAgICAv
LyBXaGVuIHdlJ3JlIGVtYmVkZGVkIHRocm91Z2ggU1ZHSW1hZ2UgKGJvcmRlci1pbWFnZS9iYWNr
Z3JvdW5kLWltYWdlLzxodG1sOmltZz4vLi4uKSB3ZSdyZSBmb3JjZWQgdG8gcmVzaXplIHRvIGEg
c3BlY2lmaWMgc2l6ZS4KLSAgICBpZiAoIW1fY29udGFpbmVyU2l6ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBtX2NvbnRhaW5lclNpemUud2lkdGgoKTsKLQotICAgIGlmIChpc0VtYmVkZGVk
VGhyb3VnaEZyYW1lQ29udGFpbmluZ1NWR0RvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBjb250
YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7Ci0KLSAgICAvLyBTVkcgZW1i
ZWRkZWQgdmlhIFNWR0ltYWdlIChiYWNrZ3JvdW5kLWltYWdlL2JvcmRlci1pbWFnZS9ldGMpIC8g
SW5saW5lIFNWRy4KLSAgICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxXaWR0aChzaG91bGRDb21wdXRlUHJlZmVycmVkKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5k
ZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KHN0ZDo6b3B0aW9uYWw8TGF5
b3V0VW5pdD4gZXN0aW1hdGVkVXNlZFdpZHRoKSBjb25zdAotewotICAgIC8vIFdoZW4gd2UncmUg
ZW1iZWRkZWQgdGhyb3VnaCBTVkdJbWFnZSAoYm9yZGVyLWltYWdlL2JhY2tncm91bmQtaW1hZ2Uv
PGh0bWw6aW1nPi8uLi4pIHdlJ3JlIGZvcmNlZCB0byByZXNpemUgdG8gYSBzcGVjaWZpYyBzaXpl
LgotICAgIGlmICghbV9jb250YWluZXJTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1f
Y29udGFpbmVyU2l6ZS5oZWlnaHQoKTsKLQotICAgIGlmIChpc0VtYmVkZGVkVGhyb3VnaEZyYW1l
Q29udGFpbmluZ1NWR0RvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2so
KS0+YXZhaWxhYmxlTG9naWNhbEhlaWdodChJbmNsdWRlTWFyZ2luQm9yZGVyUGFkZGluZyk7Ci0K
LSAgICAvLyBTVkcgZW1iZWRkZWQgdmlhIFNWR0ltYWdlIChiYWNrZ3JvdW5kLWltYWdlL2JvcmRl
ci1pbWFnZS9ldGMpIC8gSW5saW5lIFNWRy4KLSAgICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6OmNv
bXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoZXN0aW1hdGVkVXNlZFdpZHRoKTsKLX0KLQotdm9p
ZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQotewotICAgIFNldEZvclNjb3BlPGJvb2w+IGNoYW5n
ZShtX2luTGF5b3V0LCB0cnVlKTsKLSAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxh
eW91dENoZWNrUG9pbnQ7Ci0gICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotCi0gICAgbV9yZXNv
dXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cy5jbGVhcigpOwotCi0gICAgLy8gQXJiaXRy
YXJ5IGFmZmluZSB0cmFuc2Zvcm1zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBSZW5kZXJMYXlvdXRT
dGF0ZS4KLSAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIodmlldygp
LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKSk7Ci0KLSAgICBib29sIG5lZWRzTGF5b3V0ID0g
c2VsZk5lZWRzTGF5b3V0KCk7Ci0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywg
Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgbmVlZHNMYXlvdXQpOwotCi0gICAgTGF5
b3V0U2l6ZSBvbGRTaXplID0gc2l6ZSgpOwotICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aCgpOwotICAg
IHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICBidWlsZExvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zv
cm0oKTsKLQotICAgIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9IG5lZWRzTGF5b3V0IHx8IChzdmdT
VkdFbGVtZW50KCkuaGFzUmVsYXRpdmVMZW5ndGhzKCkgJiYgb2xkU2l6ZSAhPSBzaXplKCkpOwot
ICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKCp0aGlzLCBuZWVkc0xheW91dCB8
fCBTVkdSZW5kZXJTdXBwb3J0OjpmaWx0ZXJzRm9yY2VDb250YWluZXJMYXlvdXQoKnRoaXMpKTsK
LQotICAgIGlmICghbV9yZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgLy8gSW52YWxpZGF0ZSByZXNvdXJjZSBjbGllbnRzLCB3aGljaCBtYXkg
bWFyayBzb21lIG5vZGVzIGZvciBsYXlvdXQuCi0gICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2Ug
OiAgbV9yZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cykgewotICAgICAgICAgICAg
cmVzb3VyY2UtPnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKTsKLSAgICAgICAgICAgIFNWR1Jl
c291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQoKnJlc291cmNlLCBTdHlsZURpZmZlcmVu
Y2U6OkxheW91dCwgcmVzb3VyY2UtPnN0eWxlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9p
c0xheW91dFNpemVDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6Omxh
eW91dENoaWxkcmVuKCp0aGlzLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gQXQgdGhpcyBwb2lu
dCBMYXlvdXRSZXBhaW50ZXIgYWxyZWFkeSBncmFiYmVkIHRoZSBvbGQgYm91bmRzLAotICAgIC8v
IHJlY2FsY3VsYXRlIHRoZW0gbm93IHNvIHJlcGFpbnRBZnRlckxheW91dCgpIHVzZXMgdGhlIG5l
dyBib3VuZHMuCi0gICAgaWYgKG1fbmVlZHNCb3VuZGFyaWVzT3JUcmFuc2Zvcm1VcGRhdGUpIHsK
LSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwotICAgICAgICBtX25lZWRzQm91bmRh
cmllc09yVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgY2xlYXJPdmVyZmxv
dygpOwotICAgIGlmICghc2hvdWxkQXBwbHlWaWV3cG9ydENsaXAoKSkgewotICAgICAgICBGbG9h
dFJlY3QgY29udGVudFJlcGFpbnRSZWN0ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KTsKLSAgICAgICAgY29udGVudFJlcGFpbnRSZWN0ID0gbV9sb2NhbFRvQm9yZGVyQm94VHJhbnNm
b3JtLm1hcFJlY3QoY29udGVudFJlcGFpbnRSZWN0KTsKLSAgICAgICAgYWRkVmlzdWFsT3ZlcmZs
b3coZW5jbG9zaW5nTGF5b3V0UmVjdChjb250ZW50UmVwYWludFJlY3QpKTsKLSAgICB9Ci0KLSAg
ICB1cGRhdGVMYXllclRyYW5zZm9ybSgpOwotICAgIG1faGFzQm94RGVjb3JhdGlvbnMgPSBpc0Rv
Y3VtZW50RWxlbWVudFJlbmRlcmVyKCkgPyBoYXNWaXNpYmxlQm94RGVjb3JhdGlvblN0eWxlKCkg
OiBoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKTsKLSAgICBpbnZhbGlkYXRlQmFja2dyb3VuZE9i
c2N1cmF0aW9uU3RhdHVzKCk7Ci0KLSAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7
Ci0KLSAgICBjbGVhck5lZWRzTGF5b3V0KCk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUm9vdDo6c2hv
dWxkQXBwbHlWaWV3cG9ydENsaXAoKSBjb25zdAotewotICAgIC8vIHRoZSBvdXRlcm1vc3Qgc3Zn
IGlzIGNsaXBwZWQgaWYgYXV0bywgYW5kIHN2ZyBkb2N1bWVudCByb290cyBhcmUgYWx3YXlzIGNs
aXBwZWQKLSAgICAvLyBXaGVuIHRoZSBzdmcgaXMgc3RhbmQtYWxvbmUgKGlzRG9jdW1lbnRFbGVt
ZW50KCkgPT0gdHJ1ZSkgdGhlIHZpZXdwb3J0IGNsaXBwaW5nIHNob3VsZCBhbHdheXMKLSAgICAv
LyBiZSBhcHBsaWVkLCBub3RpbmcgdGhhdCB0aGUgd2luZG93IHNjcm9sbGJhcnMgc2hvdWxkIGJl
IGhpZGRlbiBpZiBvdmVyZmxvdz1oaWRkZW4uCi0gICAgcmV0dXJuIGVmZmVjdGl2ZU92ZXJmbG93
WCgpID09IE92ZXJmbG93OjpIaWRkZW4KLSAgICAgICAgfHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9
PSBPdmVyZmxvdzo6QXV0bwotICAgICAgICB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJm
bG93OjpTY3JvbGwKLSAgICAgICAgfHwgdGhpcy0+aXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigp
OwotfQotCi12b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKLXsKLSAgICAvLyBBbiBlbXB0
eSB2aWV3cG9ydCBkaXNhYmxlcyByZW5kZXJpbmcuCi0gICAgaWYgKGJvcmRlckJveFJlY3QoKS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIERvbid0IHBhaW50LCBpZiB0aGUg
Y29udGV4dCBleHBsaWNpdGx5IGRpc2FibGVkIGl0LgotICAgIGlmIChwYWludEluZm8uY29udGV4
dCgpLnBhaW50aW5nRGlzYWJsZWQoKSAmJiAhcGFpbnRJbmZvLmNvbnRleHQoKS5kZXRlY3RpbmdD
b250ZW50ZnVsUGFpbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU1ZHIG91dGxpbmVz
IGFyZSBwYWludGVkIGR1cmluZyBQYWludFBoYXNlOjpGb3JlZ3JvdW5kLgotICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6T3V0bGluZSB8fCBwYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZTo6U2VsZk91dGxpbmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEFuIGVt
cHR5IHZpZXdCb3ggYWxzbyBkaXNhYmxlcyByZW5kZXJpbmcuCi0gICAgLy8gKGh0dHA6Ly93d3cu
dzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNWaWV3Qm94QXR0cmlidXRlKQotICAgIGlmIChzdmdT
VkdFbGVtZW50KCkuaGFzRW1wdHlWaWV3Qm94KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgaWYgKGNv
bnRleHQuZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBj
dXJyZW50IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PigqdGhpcykpIHsKLSAgICAgICAg
ICAgIGlmICghY3VycmVudC5pc1NWR0hpZGRlbkNvbnRhaW5lcigpKSB7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC5zZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gRG9uJ3QgcGFpbnQgaWYgd2UgZG9uJ3QgaGF2ZSBraWRzLCBleGNlcHQgaWYg
d2UgaGF2ZSBmaWx0ZXJzIHdlIHNob3VsZCBwYWludCB0aG9zZS4KLSAgICBpZiAoIWZpcnN0Q2hp
bGQoKSkgewotICAgICAgICBhdXRvKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2Fj
aGVkUmVzb3VyY2VzRm9yUmVuZGVyZXIoKnRoaXMpOwotICAgICAgICBpZiAoIXJlc291cmNlcyB8
fCAhcmVzb3VyY2VzLT5maWx0ZXIoKSkgewotICAgICAgICAgICAgaWYgKHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kKQotICAgICAgICAgICAgICAgIHBhZ2UoKS5hZGRS
ZWxldmFudFVucGFpbnRlZE9iamVjdCh0aGlzLCB2aXN1YWxPdmVyZmxvd1JlY3QoKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2U6OkZvcmVncm91bmQpCi0gICAgICAgIHBhZ2UoKS5hZGRSZWxldmFu
dFJlcGFpbnRlZE9iamVjdCh0aGlzLCB2aXN1YWxPdmVyZmxvd1JlY3QoKSk7Ci0KLSAgICAvLyBN
YWtlIGEgY29weSBvZiB0aGUgUGFpbnRJbmZvIGJlY2F1c2UgYXBwbHlUcmFuc2Zvcm0gd2lsbCBt
b2RpZnkgdGhlIGRhbWFnZSByZWN0LgotICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWlu
dEluZm8pOwotICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQoKS5zYXZlKCk7Ci0KLSAgICAvLyBB
cHBseSBpbml0aWFsIHZpZXdwb3J0IGNsaXAKLSAgICBpZiAoc2hvdWxkQXBwbHlWaWV3cG9ydENs
aXAoKSkKLSAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dCgpLmNsaXAoc25hcHBlZEludFJl
Y3Qob3ZlcmZsb3dDbGlwUmVjdChwYWludE9mZnNldCkpKTsKLQotICAgIC8vIENvbnZlcnQgZnJv
bSBjb250YWluZXIgb2Zmc2V0cyAoaHRtbCByZW5kZXJlcnMpIHRvIGEgcmVsYXRpdmUgdHJhbnNm
b3JtIChzdmcgcmVuZGVyZXJzKS4KLSAgICAvLyBUcmFuc2Zvcm0gZnJvbSBvdXIgcGFpbnQgY29u
dGFpbmVyJ3MgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gb3VyIGxvY2FsIGNvb3Jkcy4KLSAgICBJbnRQ
b2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcm91bmRlZEludFBvaW50KHBhaW50T2Zmc2V0KTsK
LSAgICBjaGlsZFBhaW50SW5mby5hcHBseVRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm06OnRyYW5z
bGF0aW9uKGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSkg
KiBsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkpOwotCi0gICAgLy8gU1ZHUmVuZGVyaW5nQ29u
dGV4dCBtdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgd2UgcmVzdG9yZSB0aGUgY2hpbGRQYWludElu
Zm8uY29udGV4dCgpLCBiZWNhdXNlIGEgZmlsdGVyIG1heSBoYXZlCi0gICAgLy8gY2hhbmdlZCB0
aGUgY29udGV4dCBhbmQgaXQgaXMgb25seSByZXZlcnRlZCB3aGVuIHRoZSBTVkdSZW5kZXJpbmdD
b250ZXh0IGRlc3RydWN0b3IgZmluaXNoZXMgYXBwbHlpbmcgdGhlIGZpbHRlci4KLSAgICB7Ci0g
ICAgICAgIFNWR1JlbmRlcmluZ0NvbnRleHQgcmVuZGVyaW5nQ29udGV4dDsKLSAgICAgICAgYm9v
bCBjb250aW51ZVJlbmRlcmluZyA9IHRydWU7Ci0gICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kKSB7Ci0gICAgICAgICAgICByZW5kZXJpbmdD
b250ZXh0LnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoKnRoaXMsIGNoaWxkUGFpbnRJbmZvKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlUmVuZGVyaW5nID0gcmVuZGVyaW5nQ29udGV4dC5pc1JlbmRl
cmluZ1ByZXBhcmVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY29udGludWVSZW5kZXJp
bmcpIHsKLSAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLnVwZGF0ZVN1YnRyZWVQYWludFJvb3RG
b3JDaGlsZHJlbih0aGlzKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJl
bk9mVHlwZTxSZW5kZXJFbGVtZW50PigqdGhpcykpCi0gICAgICAgICAgICAgICAgY2hpbGQucGFp
bnQoY2hpbGRQYWludEluZm8sIGxvY2F0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Y2hpbGRQYWludEluZm8uY29udGV4dCgpLnJlc3RvcmUoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdS
b290Ojp3aWxsQmVEZXN0cm95ZWQoKQotewotICAgIFJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50
SGVpZ2h0RGVzY2VuZGFudChjb25zdF9jYXN0PFJlbmRlclNWR1Jvb3QmPigqdGhpcykpOwotCi0g
ICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudERlc3Ryb3llZCgqdGhpcyk7Ci0gICAgUmVuZGVy
UmVwbGFjZWQ6OndpbGxCZURlc3Ryb3llZCgpOwotfQotCi12b2lkIFJlbmRlclNWR1Jvb3Q6Omlu
c2VydGVkSW50b1RyZWUoSXNJbnRlcm5hbE1vdmUgaXNJbnRlcm5hbE1vdmUpCi17Ci0gICAgUmVu
ZGVyUmVwbGFjZWQ6Omluc2VydGVkSW50b1RyZWUoaXNJbnRlcm5hbE1vdmUpOwotICAgIFNWR1Jl
c291cmNlc0NhY2hlOjpjbGllbnRXYXNBZGRlZFRvVHJlZSgqdGhpcyk7Ci19Ci0KLXZvaWQgUmVu
ZGVyU1ZHUm9vdDo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKElzSW50ZXJuYWxNb3ZlIGlzSW50ZXJu
YWxNb3ZlKQotewotICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRXaWxsQmVSZW1vdmVkRnJv
bVRyZWUoKnRoaXMpOwotICAgIFJlbmRlclJlcGxhY2VkOjp3aWxsQmVSZW1vdmVkRnJvbVRyZWUo
aXNJbnRlcm5hbE1vdmUpOwotfQotCi12b2lkIFJlbmRlclNWR1Jvb3Q6OnN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0g
ICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlOjpMYXlvdXQpCi0gICAgICAgIHNldE5lZWRz
Qm91bmRhcmllc1VwZGF0ZSgpOwotCi0gICAgLy8gQm94IGRlY29yYXRpb25zIG1heSBoYXZlIGFw
cGVhcmVkL2Rpc2FwcGVhcmVkIC0gcmVjb21wdXRlIHN0YXR1cy4KLSAgICBpZiAoZGlmZiA9PSBT
dHlsZURpZmZlcmVuY2U6OlJlcGFpbnQpCi0gICAgICAgIG1faGFzQm94RGVjb3JhdGlvbnMgPSBo
YXNWaXNpYmxlQm94RGVjb3JhdGlvblN0eWxlKCk7Ci0KLSAgICBSZW5kZXJSZXBsYWNlZDo6c3R5
bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwotICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGll
bnRTdHlsZUNoYW5nZWQoKnRoaXMsIGRpZmYsIHN0eWxlKCkpOwotfQotCi0vLyBSZW5kZXJCb3gg
bWV0aG9kcyB3aWxsIGV4cGVjdCBjb29yZGluYXRlcyB3L28gYW55IHRyYW5zZm9ybXMgaW4gY29v
cmRpbmF0ZXMKLS8vIHJlbGF0aXZlIHRvIG91ciBib3JkZXJCb3ggb3JpZ2luLiAgVGhpcyBtZXRo
b2QgZ2l2ZXMgdXMgZXhhY3RseSB0aGF0Lgotdm9pZCBSZW5kZXJTVkdSb290OjpidWlsZExvY2Fs
VG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKQotewotICAgIGZsb2F0IHNjYWxlID0gc3R5bGUoKS5lZmZl
Y3RpdmVab29tKCk7Ci0gICAgRmxvYXRQb2ludCB0cmFuc2xhdGUgPSBzdmdTVkdFbGVtZW50KCku
Y3VycmVudFRyYW5zbGF0ZVZhbHVlKCk7Ci0gICAgTGF5b3V0U2l6ZSBib3JkZXJBbmRQYWRkaW5n
KGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgp
KTsKLSAgICBtX2xvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0gPSBzdmdTVkdFbGVtZW50KCkudmll
d0JveFRvVmlld1RyYW5zZm9ybShjb250ZW50V2lkdGgoKSAvIHNjYWxlLCBjb250ZW50SGVpZ2h0
KCkgLyBzY2FsZSk7Ci0gICAgaWYgKGJvcmRlckFuZFBhZGRpbmcuaXNaZXJvKCkgJiYgc2NhbGUg
PT0gMSAmJiB0cmFuc2xhdGUgPT0gRmxvYXRQb2ludDo6emVybygpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9sb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKHNjYWxl
LCAwLCAwLCBzY2FsZSwgYm9yZGVyQW5kUGFkZGluZy53aWR0aCgpICsgdHJhbnNsYXRlLngoKSwg
Ym9yZGVyQW5kUGFkZGluZy5oZWlnaHQoKSArIHRyYW5zbGF0ZS55KCkpICogbV9sb2NhbFRvQm9y
ZGVyQm94VHJhbnNmb3JtOwotfQotCi1jb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlbmRlclNWR1Jv
b3Q6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIC8vIFNsaWdodGx5IG9w
dGltaXplZCB2ZXJzaW9uIG9mIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybSA9IEFmZmluZVRyYW5z
Zm9ybTo6dHJhbnNsYXRpb24oeCgpLCB5KCkpICogbV9sb2NhbFRvQm9yZGVyQm94VHJhbnNmb3Jt
OwotICAgIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybSA9IG1fbG9jYWxUb0JvcmRlckJveFRyYW5z
Zm9ybTsKLSAgICBpZiAoeCgpKQotICAgICAgICBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0uc2V0
RShtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0uZSgpICsgcm91bmRUb0ludCh4KCkpKTsKLSAgICBp
ZiAoeSgpKQotICAgICAgICBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0uc2V0RihtX2xvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm0uZigpICsgcm91bmRUb0ludCh5KCkpKTsKLSAgICByZXR1cm4gbV9sb2Nh
bFRvUGFyZW50VHJhbnNmb3JtOwotfQotCi1MYXlvdXRSZWN0IFJlbmRlclNWR1Jvb3Q6OmNsaXBw
ZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciwgVmlzaWJsZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgaWYgKHN0eWxl
KCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUgJiYgIWVuY2xvc2luZ0xheWVy
KCktPmhhc1Zpc2libGVDb250ZW50KCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Ci0K
LSAgICBGbG9hdFJlY3QgY29udGVudFJlcGFpbnRSZWN0ID0gbV9sb2NhbFRvQm9yZGVyQm94VHJh
bnNmb3JtLm1hcFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgY29u
dGVudFJlcGFpbnRSZWN0LmludGVyc2VjdChzbmFwcGVkSW50UmVjdChib3JkZXJCb3hSZWN0KCkp
KTsKLQotICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KGNv
bnRlbnRSZXBhaW50UmVjdCk7Ci0gICAgaWYgKG1faGFzQm94RGVjb3JhdGlvbnMgfHwgaGFzUmVu
ZGVyT3ZlcmZsb3coKSkKLSAgICAgICAgcmVwYWludFJlY3QudW5pdGUodW5pb25SZWN0KGxvY2Fs
U2VsZWN0aW9uUmVjdChmYWxzZSksIHZpc3VhbE92ZXJmbG93UmVjdCgpKSk7Ci0KLSAgICByZXR1
cm4gUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZWN0KGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJl
Y3QpLCByZXBhaW50Q29udGFpbmVyLCBjb250ZXh0KTsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVGbG9hdFZpc2libGVSZWN0SW5Db250YWluZXIo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250
YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCBjb250ZXh0KSBjb25zdAotewotICAgIC8vIEFwcGx5
IG91ciBsb2NhbCB0cmFuc2Zvcm1zIChleGNlcHQgZm9yIHgveSB0cmFuc2xhdGlvbikgYW5kIHRo
ZW4gY2FsbAotICAgIC8vIFJlbmRlckJveCdzIG1ldGhvZCB0byBoYW5kbGUgYWxsIHRoZSBub3Jt
YWwgQ1NTIEJveCBtb2RlbCBiaXRzCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkUmVjdCA9IG1fbG9j
YWxUb0JvcmRlckJveFRyYW5zZm9ybS5tYXBSZWN0KHJlY3QpOwotCi0gICAgLy8gQXBwbHkgaW5p
dGlhbCB2aWV3cG9ydCBjbGlwCi0gICAgaWYgKHNob3VsZEFwcGx5Vmlld3BvcnRDbGlwKCkpIHsK
LSAgICAgICAgaWYgKGNvbnRleHQub3B0aW9ucy5jb250YWlucyhWaXNpYmxlUmVjdENvbnRleHRP
cHRpb246OlVzZUVkZ2VJbmNsdXNpdmVJbnRlcnNlY3Rpb24pKSB7Ci0gICAgICAgICAgICBpZiAo
IWFkanVzdGVkUmVjdC5lZGdlSW5jbHVzaXZlSW50ZXJzZWN0KHNuYXBwZWRJbnRSZWN0KGJvcmRl
ckJveFJlY3QoKSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgYWRqdXN0ZWRSZWN0LmludGVyc2VjdChzbmFwcGVkSW50
UmVjdChib3JkZXJCb3hSZWN0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9oYXNCb3hEZWNvcmF0
aW9ucyB8fCBoYXNSZW5kZXJPdmVyZmxvdygpKSB7Ci0gICAgICAgIC8vIFRoZSBzZWxlY3Rpb25S
ZWN0IGNhbiBwcm9qZWN0IG91dHNpZGUgb2YgdGhlIG92ZXJmbG93UmVjdCwgc28gdGFrZSB0aGVp
ciB1bmlvbgotICAgICAgICAvLyBmb3IgcmVwYWludGluZyB0byBhdm9pZCBzZWxlY3Rpb24gcGFp
bnRpbmcgZ2xpdGNoZXMuCi0gICAgICAgIExheW91dFJlY3QgZGVjb3JhdGVkUmVwYWludFJlY3Qg
PSB1bmlvblJlY3QobG9jYWxTZWxlY3Rpb25SZWN0KGZhbHNlKSwgdmlzdWFsT3ZlcmZsb3dSZWN0
KCkpOwotICAgICAgICBhZGp1c3RlZFJlY3QudW5pdGUoZGVjb3JhdGVkUmVwYWludFJlY3QpOwot
ICAgIH0KLQotICAgIGlmIChzdGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IHJlY3RJbkNvbnRhaW5l
ciA9IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lcihlbmNsb3Np
bmdJbnRSZWN0KGFkanVzdGVkUmVjdCksIGNvbnRhaW5lciwgY29udGV4dCkpCi0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKnJlY3RJbkNvbnRhaW5lcik7Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLX0KLQotLy8gVGhpcyBtZXRob2QgZXhwZWN0cyBsb2NhbCBDU1MgYm94IGNvb3JkaW5hdGVz
LgotLy8gQ2FsbGVycyB3aXRoIGxvY2FsIFNWRyB2aWV3cG9ydCBjb29yZGluYXRlcyBzaG91bGQg
Zmlyc3QgYXBwbHkgdGhlIGxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0KLS8vIHRvIGNvbnZlcnQg
ZnJvbSBTVkcgdmlld3BvcnQgY29vcmRpbmF0ZXMgdG8gbG9jYWwgQ1NTIGJveCBjb29yZGluYXRl
cy4KLXZvaWQgUmVuZGVyU1ZHUm9vdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmIHRyYW5z
Zm9ybVN0YXRlLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiBtb2RlLCBib29sKiB3YXNG
aXhlZCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1vZGUuY29udGFpbnMoSXNGaXhlZCkpOyAvLyBX
ZSBzaG91bGQgaGF2ZSBubyBmaXhlZCBjb250ZW50IGluIHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUu
Ci0gICAgQVNTRVJUKG1vZGUuY29udGFpbnMoVXNlVHJhbnNmb3JtcykpOyAvLyBtYXBwaW5nIGEg
cG9pbnQgdGhyb3VnaCBTVkcgdy9vIHJlc3BlY3RpbmcgdHJhbnNmb3JtcyBpcyB1c2VsZXNzLgot
Ci0gICAgUmVuZGVyUmVwbGFjZWQ6Om1hcExvY2FsVG9Db250YWluZXIoYW5jZXN0b3JDb250YWlu
ZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2RlIHwgQXBwbHlDb250YWluZXJGbGlwLCB3YXNGaXhlZCk7
Ci19Ci0KLWNvbnN0IFJlbmRlck9iamVjdCogUmVuZGVyU1ZHUm9vdDo6cHVzaE1hcHBpbmdUb0Nv
bnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBS
ZW5kZXJHZW9tZXRyeU1hcCYgZ2VvbWV0cnlNYXApIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFJlbmRl
clJlcGxhY2VkOjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGFuY2VzdG9yVG9TdG9wQXQsIGdlb21l
dHJ5TWFwKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVDYWNoZWRCb3VuZGFyaWVz
KCkKLXsKLSAgICBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hl
cygqdGhpcywgbV9vYmplY3RCb3VuZGluZ0JveCwgbV9vYmplY3RCb3VuZGluZ0JveFZhbGlkLCBt
X3N0cm9rZUJvdW5kaW5nQm94LCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7Ci0gICAgU1ZHUmVuZGVy
U3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKCp0aGlzLCBtX3JlcGFp
bnRCb3VuZGluZ0JveCk7Ci0gICAgbV9yZXBhaW50Qm91bmRpbmdCb3guaW5mbGF0ZShob3Jpem9u
dGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdSb290Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQotewotICAgIExheW91dFBvaW50IHBvaW50SW5QYXJlbnQgPSBsb2NhdGlvbkluQ29udGFp
bmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgIExheW91
dFBvaW50IHBvaW50SW5Cb3JkZXJCb3ggPSBwb2ludEluUGFyZW50IC0gdG9MYXlvdXRTaXplKGxv
Y2F0aW9uKCkpOwotCi0gICAgQVNTRVJUKFNWR0hpdFRlc3RDeWNsZURldGVjdGlvblNjb3BlOjpp
c0VtcHR5KCkpOwotCi0gICAgLy8gVGVzdCBTVkcgY29udGVudCBpZiB0aGUgcG9pbnQgaXMgaW4g
b3VyIGNvbnRlbnQgYm94IG9yIGl0IGlzIGluc2lkZSB0aGUgdmlzdWFsT3ZlcmZsb3dSZWN0IGFu
ZCB0aGUgb3ZlcmZsb3cgaXMgdmlzaWJsZS4KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUg
YW4gaW50ZXJzZWN0aW9uIHdoZW4gcmVjdC1iYXNlZCBoaXQgdGVzdHMgYXJlIHN1cHBvcnRlZCBi
eSBub2RlQXRGbG9hdFBvaW50LgotICAgIGlmIChjb250ZW50Qm94UmVjdCgpLmNvbnRhaW5zKHBv
aW50SW5Cb3JkZXJCb3gpIHx8ICghc2hvdWxkQXBwbHlWaWV3cG9ydENsaXAoKSAmJiB2aXN1YWxP
dmVyZmxvd1JlY3QoKS5jb250YWlucyhwb2ludEluUGFyZW50KSkpIHsKLSAgICAgICAgRmxvYXRQ
b2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS52YWx1
ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUG9pbnQoRmxvYXRQb2ludChwb2ludEluUGFyZW50
KSk7Ci0KLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICAgICAgLy8g
RklYTUU6IG5vZGVBdEZsb2F0UG9pbnQoKSBkb2Vzbid0IGhhbmRsZSByZWN0LWJhc2VkIGhpdCB0
ZXN0cyB5ZXQuCi0gICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0UG9pbnQocmVxdWVz
dCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgewotICAgICAgICAgICAgICAg
IHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQm9yZGVyQm94KTsKLSAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQoY2hpbGQtPm5v
ZGUoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lcikgPT0gSGl0VGVzdFByb2dyZXNzOjpT
dG9wKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChTVkdIaXRUZXN0Q3ljbGVEZXRlY3Rp
b25TY29wZTo6aXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gSWYgd2UgZGlkbid0IGVhcmx5IGV4aXQgYWJvdmUsIHdlJ3ZlIGp1c3QgaGl0IHRoZSBjb250
YWluZXIgPHN2Zz4gZWxlbWVudC4gVW5saWtlIFNWRyAxLjEsIDJuZCBFZGl0aW9uIGFsbG93cyBj
b250YWluZXIgZWxlbWVudHMgdG8gYmUgaGl0LgotICAgIGlmICgoaGl0VGVzdEFjdGlvbiA9PSBI
aXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxv
Y2tCYWNrZ3JvdW5kKSAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKHJlcXVlc3QpKSB7Ci0gICAgICAg
IC8vIE9ubHkgcmV0dXJuIHRydWUgaGVyZSwgaWYgdGhlIGxhc3QgaGl0IHRlc3RpbmcgcGhhc2Ug
J0Jsb2NrQmFja2dyb3VuZCcgaXMgZXhlY3V0ZWQuIElmIHdlJ2QgcmV0dXJuIHRydWUgaW4gdGhl
ICdGb3JlZ3JvdW5kJyBwaGFzZSwKLSAgICAgICAgLy8gaGl0IHRlc3Rpbmcgd291bGQgc3RvcCBp
bW1lZGlhdGVseS4gRm9yIFNWRyBvbmx5IHRyZWVzIHRoaXMgZG9lc24ndCBtYXR0ZXIuIFRob3Vn
aCB3aGVuIHdlIGhhdmUgYSA8Zm9yZWlnbk9iamVjdD4gc3VidHJlZSB3ZSBuZWVkCi0gICAgICAg
IC8vIHRvIGJlIGFibGUgdG8gZGV0ZWN0IGhpdHMgb24gdGhlIGJhY2tncm91bmQgb2YgYSA8ZGl2
PiBlbGVtZW50LiBJZiB3ZSdkIHJldHVybiB0cnVlIGhlcmUgaW4gdGhlICdGb3JlZ3JvdW5kJyBw
aGFzZSwgd2UgYXJlIG5vdCBhYmxlIAotICAgICAgICAvLyB0byBkZXRlY3QgdGhlc2UgaGl0cyBh
bnltb3JlLgotICAgICAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QoYWNjdW11bGF0ZWRPZmZzZXQg
KyBsb2NhdGlvbigpLCBzaXplKCkpOwotICAgICAgICBpZiAobG9jYXRpb25JbkNvbnRhaW5lci5p
bnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0
KHJlc3VsdCwgcG9pbnRJbkJvcmRlckJveCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmFkZE5v
ZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQobm9kZUZvckhpdFRlc3QoKSwgcmVxdWVzdCwgbG9jYXRp
b25JbkNvbnRhaW5lciwgYm91bmRzUmVjdCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJU
KFNWR0hpdFRlc3RDeWNsZURldGVjdGlvblNjb3BlOjppc0VtcHR5KCkpOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFJlbmRlclNWR1Jvb3Q6Omhhc1JlbGF0aXZlRGltZW5zaW9ucygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN2Z1NWR0VsZW1lbnQoKS5pbnRyaW5zaWNIZWlnaHQoKS5p
c1BlcmNlbnRPckNhbGN1bGF0ZWQoKSB8fCBzdmdTVkdFbGVtZW50KCkuaW50cmluc2ljV2lkdGgo
KS5pc1BlcmNlbnRPckNhbGN1bGF0ZWQoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSb290OjphZGRS
ZXNvdXJjZUZvckNsaWVudEludmFsaWRhdGlvbihSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciog
cmVzb3VyY2UpCi17Ci0gICAgUmVuZGVyU1ZHUm9vdCogc3ZnUm9vdCA9IFNWR1JlbmRlclN1cHBv
cnQ6OmZpbmRUcmVlUm9vdE9iamVjdCgqcmVzb3VyY2UpOwotICAgIGlmICghc3ZnUm9vdCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHN2Z1Jvb3QtPm1fcmVzb3VyY2VzTmVlZGluZ1RvSW52YWxpZGF0
ZUNsaWVudHMuYWRkKHJlc291cmNlKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jvb3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE5
NWFiODgwMmNkMjk4MDQxY2I5MGMwNTAwYTc2YjFlMmMxYTZhYi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jvb3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNp
bmNsdWRlICJSZW5kZXJSZXBsYWNlZC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFzcyBS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjsKLWNsYXNzIFNWR1NWR0VsZW1lbnQ7Ci0KLWNsYXNz
IFJlbmRlclNWR1Jvb3QgZmluYWwgOiBwdWJsaWMgUmVuZGVyUmVwbGFjZWQgewotICAgIFdURl9N
QUtFX0lTT19BTExPQ0FURUQoUmVuZGVyU1ZHUm9vdCk7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyU1ZH
Um9vdChTVkdTVkdFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7Ci0gICAgdmlydHVhbCB+UmVuZGVy
U1ZHUm9vdCgpOwotCi0gICAgU1ZHU1ZHRWxlbWVudCYgc3ZnU1ZHRWxlbWVudCgpIGNvbnN0Owot
Ci0gICAgYm9vbCBpc0VtYmVkZGVkVGhyb3VnaFNWR0ltYWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBp
c0VtYmVkZGVkVGhyb3VnaEZyYW1lQ29udGFpbmluZ1NWR0RvY3VtZW50KCkgY29uc3Q7Ci0KLSAg
ICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKEZsb2F0U2l6ZSYgaW50cmlu
c2ljU2l6ZSwgZG91YmxlJiBpbnRyaW5zaWNSYXRpbykgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBi
b29sIGlzTGF5b3V0U2l6ZUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX2lzTGF5b3V0U2l6ZUNo
YW5nZWQ7IH0KLSAgICBib29sIGlzSW5MYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2luTGF5b3V0
OyB9Ci0gICAgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSBvdmVycmlkZSB7IG1fbmVl
ZHNCb3VuZGFyaWVzT3JUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9Ci0gICAgYm9vbCBuZWVkc0Jv
dW5kYXJpZXNVcGRhdGUoKSBvdmVycmlkZSB7IHJldHVybiBtX25lZWRzQm91bmRhcmllc09yVHJh
bnNmb3JtVXBkYXRlOyB9Ci0gICAgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIG92ZXJy
aWRlIHsgbV9uZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLQotICAg
IEludFNpemUgY29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbmVyU2l6ZTsg
fQotICAgIHZvaWQgc2V0Q29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBjb250YWluZXJTaXpl
KSB7IG1fY29udGFpbmVyU2l6ZSA9IGNvbnRhaW5lclNpemU7IH0KLQotICAgIGJvb2wgaGFzUmVs
YXRpdmVEaW1lbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICAvLyBsb2NhbFRvQm9yZGVy
Qm94VHJhbnNmb3JtIG1hcHMgbG9jYWwgU1ZHIHZpZXdwb3J0IGNvb3JkaW5hdGVzIHRvIGxvY2Fs
IENTUyBib3ggY29vcmRpbmF0ZXMuICAKLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2Fs
VG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVG9Cb3JkZXJCb3hU
cmFuc2Zvcm07IH0KLQotICAgIC8vIFRoZSBmbGFnIGlzIGNsZWFyZWQgYXQgdGhlIGJlZ2lubmlu
ZyBvZiBlYWNoIGxheW91dCgpIHBhc3MuIEVsZW1lbnRzIHRoZW4gY2FsbCB0aGlzCi0gICAgLy8g
bWV0aG9kIGR1cmluZyBsYXlvdXQgd2hlbiB0aGV5IGFyZSBpbnZhbGlkYXRlZCBieSBhIGZpbHRl
ci4KLSAgICBzdGF0aWMgdm9pZCBhZGRSZXNvdXJjZUZvckNsaWVudEludmFsaWRhdGlvbihSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lciopOwotCi1wcml2YXRlOgotICAgIHZvaWQgZWxlbWVudCgp
IGNvbnN0ID0gZGVsZXRlOwotCi0gICAgYm9vbCBpc1NWR1Jvb3QoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9Ci0gICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuICJSZW5kZXJTVkdSb290IjsgfQotCi0gICAgTGF5b3V0VW5pdCBjb21wdXRl
UmVwbGFjZWRMb2dpY2FsV2lkdGgoU2hvdWxkQ29tcHV0ZVByZWZlcnJlZCAgPSBDb21wdXRlQWN0
dWFsKSBjb25zdCBvdmVycmlkZTsKLSAgICBMYXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxIZWlnaHQoc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBlc3RpbWF0ZWRVc2VkV2lkdGggPSBz
dGQ6Om51bGxvcHQpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jikg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBpbnNlcnRlZEludG9UcmVlKElzSW50ZXJuYWxNb3ZlKSBvdmVycmlkZTsKLSAgICB2b2lk
IHdpbGxCZVJlbW92ZWRGcm9tVHJlZShJc0ludGVybmFsTW92ZSkgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKSBvdmVycmlkZTsKLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1Bh
cmVudFRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9vbCBmaWxsQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OwotCi0gICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQotICAgIEZsb2F0
UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3Ryb2tl
Qm91bmRpbmdCb3g7IH0KLSAgICBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQotCi0g
ICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGU7Ci0KLSAg
ICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBvdmVycmlk
ZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gY29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJ
bkNvbnRhaW5lcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIG1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5j
ZXN0b3JDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVz
TW9kZT4sIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBvdmVycmlkZTsKLSAgICBjb25zdCBSZW5kZXJP
YmplY3QqIHB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLQotICAgIGJvb2wgc2hvdWxkQXBwbHlWaWV3cG9ydENsaXAoKSBjb25zdDsK
LSAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKLSAgICB2b2lkIGJ1aWxkTG9jYWxU
b0JvcmRlckJveFRyYW5zZm9ybSgpOwotCi0gICAgSW50U2l6ZSBtX2NvbnRhaW5lclNpemU7Ci0g
ICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7Ci0gICAgYm9vbCBtX29iamVjdEJvdW5k
aW5nQm94VmFsaWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pbkxheW91dCB7IGZhbHNlIH07Ci0g
ICAgRmxvYXRSZWN0IG1fc3Ryb2tlQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWlu
dEJvdW5kaW5nQm94OwotICAgIG11dGFibGUgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVu
dFRyYW5zZm9ybTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRvQm9yZGVyQm94VHJhbnNm
b3JtOwotICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPiBtX3Jlc291cmNl
c05lZWRpbmdUb0ludmFsaWRhdGVDbGllbnRzOwotICAgIGJvb2wgbV9pc0xheW91dFNpemVDaGFu
Z2VkIDogMTsKLSAgICBib29sIG1fbmVlZHNCb3VuZGFyaWVzT3JUcmFuc2Zvcm1VcGRhdGUgOiAx
OwotICAgIGJvb2wgbV9oYXNCb3hEZWNvcmF0aW9ucyA6IDE7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJT
VkdSb290LCBpc1NWR1Jvb3QoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHQuY3BwCmluZGV4IDAxNmNiNWE5MTgxMmY4ZDNmMzNkMTA0ZTk3ZGViNzg5MDIz
NjkxYmYuLjYzYWNhZWNmOTU2NzQzY2VlYjYxMjAwNWQ2ZDc5NzI2YTgyOTkzZjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcApAQCAtMzMsMTMg
KzMzLDEzIEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCisjaW5jbHVkZSAiTGVnYWN5
UmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIgogI2lu
Y2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5s
aW5lVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVycy5oIgogI2luY2x1
ZGUgIlNWR0xlbmd0aExpc3QuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgpAQCAt
MzQ3LDcgKzM0Nyw3IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKICAgICAgICAgbV9u
ZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlID0gZmFsc2U7CiAgICAgICAgIHVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlbmRl
clNWR1Jvb3QqIHJvb3RPYmogPSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVHJlZVJvb3RPYmplY3Qo
KnRoaXMpOworICAgICAgICBMZWdhY3lSZW5kZXJTVkdSb290KiByb290T2JqID0gU1ZHUmVuZGVy
U3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KCp0aGlzKTsKICAgICAgICAgaWYgKG1fbmVlZHNU
ZXh0TWV0cmljc1VwZGF0ZSB8fCAocm9vdE9iaiAmJiByb290T2JqLT5pc0xheW91dFNpemVDaGFu
Z2VkKCkpKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcm9vdCBsYXlvdXQgc2l6ZSBjaGFuZ2Vk
IChlZy4gd2luZG93IHNpemUgY2hhbmdlcykgb3IgdGhlIHRyYW5zZm9ybSB0byB0aGUgcm9vdAog
ICAgICAgICAgICAgLy8gY29udGV4dCBoYXMgY2hhbmdlZCB0aGVuIHJlY29tcHV0ZSB0aGUgb24t
c2NyZWVuIGZvbnQgc2l6ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IGQzMjk4MzUyZWZlNWU4Mjg0ODllNmQwMDM1ZjgyYzNi
N2I5ZjgwYWMuLmE0ZjY0Y2FmNjE5OTBlMzc2OTNiOGJjNjg1ZDgyYTQ1Zjk1YzkxYWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIAogI2luY2x1
ZGUgIkVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZH
Um9vdC5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlckNo
aWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCkBAIC0zOSw3ICs0MCw2
IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCIKQEAgLTg1LDEwICs4NSwxMCBAQCBjb25z
dCBSZW5kZXJFbGVtZW50JiBTVkdSZW5kZXJTdXBwb3J0Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KGNvbnN0IFJlbmRlckVsZW1lbgogICAgIEFTU0VSVChyZW5kZXJlci5wYXJlbnQoKSk7CiAgICAg
YXV0byYgcGFyZW50ID0gKnJlbmRlcmVyLnBhcmVudCgpOwogCi0gICAgLy8gQXQgdGhlIFNWRy9I
VE1MIGJvdW5kYXJ5IChha2EgUmVuZGVyU1ZHUm9vdCksIHdlIGFwcGx5IHRoZSBsb2NhbFRvQm9y
ZGVyQm94VHJhbnNmb3JtCisgICAgLy8gQXQgdGhlIFNWRy9IVE1MIGJvdW5kYXJ5IChha2EgTGVn
YWN5UmVuZGVyU1ZHUm9vdCksIHdlIGFwcGx5IHRoZSBsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3Jt
CiAgICAgLy8gdG8gbWFwIGFuIGVsZW1lbnQgZnJvbSBTVkcgdmlld3BvcnQgY29vcmRpbmF0ZXMg
dG8gQ1NTIGJveCBjb29yZGluYXRlcy4KLSAgICBpZiAoaXM8UmVuZGVyU1ZHUm9vdD4ocGFyZW50
KSkKLSAgICAgICAgdHJhbnNmb3JtID0gZG93bmNhc3Q8UmVuZGVyU1ZHUm9vdD4ocGFyZW50KS5s
b2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkgKiByZW5kZXJlci5sb2NhbFRvUGFyZW50VHJhbnNm
b3JtKCk7CisgICAgaWYgKGlzPExlZ2FjeVJlbmRlclNWR1Jvb3Q+KHBhcmVudCkpCisgICAgICAg
IHRyYW5zZm9ybSA9IGRvd25jYXN0PExlZ2FjeVJlbmRlclNWR1Jvb3Q+KHBhcmVudCkubG9jYWxU
b0JvcmRlckJveFRyYW5zZm9ybSgpICogcmVuZGVyZXIubG9jYWxUb1BhcmVudFRyYW5zZm9ybSgp
OwogICAgIGVsc2UKICAgICAgICAgdHJhbnNmb3JtID0gcmVuZGVyZXIubG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpOwogCkBAIC0xODEsMTQgKzE4MSwxNCBAQCBib29sIFNWR1JlbmRlclN1cHBvcnQ6
OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIGxvY2FsUmVw
YQogICAgIHJldHVybiBsb2NhbFRyYW5zZm9ybS5tYXBSZWN0KGxvY2FsUmVwYWludFJlY3QpLmlu
dGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpOwogfQogCi1SZW5kZXJTVkdSb290KiBTVkdSZW5kZXJT
dXBwb3J0OjpmaW5kVHJlZVJvb3RPYmplY3QoUmVuZGVyRWxlbWVudCYgc3RhcnQpCitMZWdhY3lS
ZW5kZXJTVkdSb290KiBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVHJlZVJvb3RPYmplY3QoUmVuZGVy
RWxlbWVudCYgc3RhcnQpCiB7Ci0gICAgcmV0dXJuIGxpbmVhZ2VPZlR5cGU8UmVuZGVyU1ZHUm9v
dD4oc3RhcnQpLmZpcnN0KCk7CisgICAgcmV0dXJuIGxpbmVhZ2VPZlR5cGU8TGVnYWN5UmVuZGVy
U1ZHUm9vdD4oc3RhcnQpLmZpcnN0KCk7CiB9CiAKLWNvbnN0IFJlbmRlclNWR1Jvb3QqIFNWR1Jl
bmRlclN1cHBvcnQ6OmZpbmRUcmVlUm9vdE9iamVjdChjb25zdCBSZW5kZXJFbGVtZW50JiBzdGFy
dCkKK2NvbnN0IExlZ2FjeVJlbmRlclNWR1Jvb3QqIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRUcmVl
Um9vdE9iamVjdChjb25zdCBSZW5kZXJFbGVtZW50JiBzdGFydCkKIHsKLSAgICByZXR1cm4gbGlu
ZWFnZU9mVHlwZTxSZW5kZXJTVkdSb290PihzdGFydCkuZmlyc3QoKTsKKyAgICByZXR1cm4gbGlu
ZWFnZU9mVHlwZTxMZWdhY3lSZW5kZXJTVkdSb290PihzdGFydCkuZmlyc3QoKTsKIH0KIAogc3Rh
dGljIGlubGluZSB2b2lkIGludmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyKQpAQCAtMjA0LDE5ICsyMDQsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIGlu
dmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQogc3Rh
dGljIGlubGluZSBib29sIGxheW91dFNpemVPZk5lYXJlc3RWaWV3cG9ydENoYW5nZWQoY29uc3Qg
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7CiAgICAgY29uc3QgUmVuZGVyRWxlbWVudCogc3Rh
cnQgPSAmcmVuZGVyZXI7Ci0gICAgd2hpbGUgKHN0YXJ0ICYmICFpczxSZW5kZXJTVkdSb290Pigq
c3RhcnQpICYmICFpczxSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcj4oKnN0YXJ0KSkKKyAgICB3
aGlsZSAoc3RhcnQgJiYgIWlzPExlZ2FjeVJlbmRlclNWR1Jvb3Q+KCpzdGFydCkgJiYgIWlzPFJl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyPigqc3RhcnQpKQogICAgICAgICBzdGFydCA9IHN0YXJ0
LT5wYXJlbnQoKTsKIAogICAgIEFTU0VSVChzdGFydCk7CiAgICAgaWYgKGlzPFJlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyPigqc3RhcnQpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXI+KCpzdGFydCkuaXNMYXlvdXRTaXplQ2hhbmdlZCgpOwogCi0g
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclNWR1Jvb3Q+KCpzdGFydCkuaXNMYXlvdXRTaXplQ2hh
bmdlZCgpOworICAgIHJldHVybiBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdSb290Pigqc3RhcnQp
LmlzTGF5b3V0U2l6ZUNoYW5nZWQoKTsKIH0KIAogYm9vbCBTVkdSZW5kZXJTdXBwb3J0Ojp0cmFu
c2Zvcm1Ub1Jvb3RDaGFuZ2VkKFJlbmRlckVsZW1lbnQqIGFuY2VzdG9yKQogewotICAgIHdoaWxl
IChhbmNlc3RvciAmJiAhaXM8UmVuZGVyU1ZHUm9vdD4oKmFuY2VzdG9yKSkgeworICAgIHdoaWxl
IChhbmNlc3RvciAmJiAhaXM8TGVnYWN5UmVuZGVyU1ZHUm9vdD4oKmFuY2VzdG9yKSkgewogICAg
ICAgICBpZiAoaXM8UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcj4oKmFuY2VzdG9yKSkK
ICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFp
bmVyPigqYW5jZXN0b3IpLmRpZFRyYW5zZm9ybVRvUm9vdFVwZGF0ZSgpOwogICAgICAgICBpZiAo
aXM8UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI+KCphbmNlc3RvcikpCkBAIC0zMDAsNyArMzAw
LDcgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbihSZW5kZXJFbGVtZW50
JiBzdGFydCwgYm9vbCBzZWxmTmVlZHNMYXlvdXQKIAogYm9vbCBTVkdSZW5kZXJTdXBwb3J0Ojpp
c092ZXJmbG93SGlkZGVuKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQogewotICAgIC8v
IFJlbmRlclNWR1Jvb3Qgc2hvdWxkIG5ldmVyIHF1ZXJ5IGZvciBvdmVyZmxvdyBzdGF0ZSAtIGl0
IHNob3VsZCBhbHdheXMgY2xpcCBpdHNlbGYgdG8gdGhlIGluaXRpYWwgdmlld3BvcnQgc2l6ZS4K
KyAgICAvLyBMZWdhY3lSZW5kZXJTVkdSb290IHNob3VsZCBuZXZlciBxdWVyeSBmb3Igb3ZlcmZs
b3cgc3RhdGUgLSBpdCBzaG91bGQgYWx3YXlzIGNsaXAgaXRzZWxmIHRvIHRoZSBpbml0aWFsIHZp
ZXdwb3J0IHNpemUuCiAgICAgQVNTRVJUKCFyZW5kZXJlci5pc0RvY3VtZW50RWxlbWVudFJlbmRl
cmVyKCkpOwogCiAgICAgcmV0dXJuIHJlbmRlcmVyLnN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3Zl
cmZsb3c6OkhpZGRlbiB8fCByZW5kZXJlci5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93
OjpTY3JvbGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3Vw
cG9ydC5oCmluZGV4IGYzZjgzZGEzNWEyYTE1NDQ3MTU4MTc2ZmFkZjU3MGM1M2M2YWJjOTQuLjlj
Y2ZjYmViNTc3YTc3M2RjODgwN2Q5NTM5ZDYyYTgxZTU2MTliODkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCkBAIC0zNyw3ICszNyw3IEBA
IGNsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNsYXNzIFJl
bmRlckxheWVyTW9kZWxPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsKLWNsYXNzIFJlbmRlclNW
R1Jvb3Q7CitjbGFzcyBMZWdhY3lSZW5kZXJTVkdSb290OwogY2xhc3MgU1ZHRWxlbWVudDsKIGNs
YXNzIFRyYW5zZm9ybVN0YXRlOwogCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIFNWR1JlbmRlclN1
cHBvcnQgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGxheW91dERpZmZlcmVudFJvb3RJZk5l
ZWRlZChjb25zdCBSZW5kZXJFbGVtZW50Jik7CiAKLSAgICAvLyBTaGFyZXMgY2hpbGQgbGF5b3V0
aW5nIGNvZGUgYmV0d2VlbiBSZW5kZXJTVkdSb290L1JlbmRlclNWRyhIaWRkZW4pQ29udGFpbmVy
CisgICAgLy8gU2hhcmVzIGNoaWxkIGxheW91dGluZyBjb2RlIGJldHdlZW4gTGVnYWN5UmVuZGVy
U1ZHUm9vdC9SZW5kZXJTVkcoSGlkZGVuKUNvbnRhaW5lcgogICAgIHN0YXRpYyB2b2lkIGxheW91
dENoaWxkcmVuKFJlbmRlckVsZW1lbnQmLCBib29sIHNlbGZOZWVkc0xheW91dCk7CiAKICAgICAv
LyBIZWxwZXIgZnVuY3Rpb24gZGV0ZXJtaW5pbmcgd2hldGVyIG92ZXJmbG93IGlzIGhpZGRlbgpA
QCAtODksOCArODksOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlTWFza2VkQW5j
ZXN0b3JTaG91bGRJc29sYXRlQmxlbmRpbmcoY29uc3QgUmVuZGVyRWxlbWVudCYpOwogI2VuZGlm
CiAKLSAgICBzdGF0aWMgUmVuZGVyU1ZHUm9vdCogZmluZFRyZWVSb290T2JqZWN0KFJlbmRlckVs
ZW1lbnQmKTsKLSAgICBzdGF0aWMgY29uc3QgUmVuZGVyU1ZHUm9vdCogZmluZFRyZWVSb290T2Jq
ZWN0KGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKKyAgICBzdGF0aWMgTGVnYWN5UmVuZGVyU1ZHUm9v
dCogZmluZFRyZWVSb290T2JqZWN0KFJlbmRlckVsZW1lbnQmKTsKKyAgICBzdGF0aWMgY29uc3Qg
TGVnYWN5UmVuZGVyU1ZHUm9vdCogZmluZFRyZWVSb290T2JqZWN0KGNvbnN0IFJlbmRlckVsZW1l
bnQmKTsKIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIGNsYXNzIGlzIG5vdCBjb25zdHJ1Y3RhYmxl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHAKaW5kZXggNDk2NmEwYTYzNmIzMzUzOTk5MGRhODc5NjNhY2U5YjJhMzNhODRiYS4u
MWM0Y2RkNWEyMjViODQwZTQwYjM3NDBjMDgwM2IzMWIyY2I3ZjQ2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRl
ICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZHUm9vdC5oIgogI2lu
Y2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKQEAgLTQ2LDcgKzQ3LDYgQEAKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlh
bEdyYWRpZW50SW5saW5lcy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdTaGFw
ZUlubGluZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHQ2ly
Y2xlRWxlbWVudC5oIgpAQCAtNTA4LDcgKzUwOCw3IEBAIHZvaWQgd3JpdGVTVkdDb250YWluZXIo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0NvbnRhaW5lciYgY29udGFpbmVyLCBPcHRp
CiAgICAgd3JpdGVDaGlsZHJlbih0cywgY29udGFpbmVyLCBiZWhhdmlvcik7CiB9CiAKLXZvaWQg
d3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jvb3QmIHJvb3QsIE9wdGlvblNl
dDxSZW5kZXJBc1RleHRGbGFnPiBiZWhhdmlvcikKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IExlZ2FjeVJlbmRlclNWR1Jvb3QmIHJvb3QsIE9wdGlvblNldDxSZW5kZXJBc1RleHRG
bGFnPiBiZWhhdmlvcikKIHsKICAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRzLCByb290LCBiZWhh
dmlvcik7CiAgICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCByb290LCBiZWhhdmlvcik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5o
CmluZGV4IGVmN2MzOTYyMzk5N2E0NzFlYWFjZDVhNjFmMWNmNWYwYjhlOWU0YjUuLjg1OTY5NGE0
YmEwYjRhNjg1ODFiNWEyNjM3ODkwYzkzMDRiODE4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCkBAIC00MiwxNCArNDIsMTQg
QEAgY2xhc3MgUmVuZGVyU1ZHSW1hZ2U7CiBjbGFzcyBSZW5kZXJTVkdJbmxpbmVUZXh0OwogY2xh
c3MgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI7CiBjbGFzcyBSZW5kZXJTVkdTaGFwZTsKLWNs
YXNzIFJlbmRlclNWR1Jvb3Q7CitjbGFzcyBMZWdhY3lSZW5kZXJTVkdSb290OwogY2xhc3MgUmVu
ZGVyU1ZHVGV4dDsKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIFNWR1VuaXRUeXBlczsK
IAogLy8gZnVuY3Rpb25zIHVzZWQgYnkgdGhlIG1haW4gUmVuZGVyVHJlZUFzVGV4dCBjb2RlCiB2
b2lkIHdyaXRlKFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1NoYXBlJiwgT3B0aW9u
U2V0PFJlbmRlckFzVGV4dEZsYWc+KTsKLXZvaWQgd3JpdGUoV1RGOjpUZXh0U3RyZWFtJiwgY29u
c3QgUmVuZGVyU1ZHUm9vdCYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7Cit2b2lkIHdy
aXRlKFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1Jvb3QmLCBPcHRpb25T
ZXQ8UmVuZGVyQXNUZXh0RmxhZz4pOwogdm9pZCB3cml0ZVNWR0dyYWRpZW50U3RvcChXVEY6OlRl
eHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AmLCBPcHRpb25TZXQ8UmVuZGVy
QXNUZXh0RmxhZz4pOwogdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFdURjo6VGV4dFN0
cmVhbSYsIGNvbnN0IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJiwgT3B0aW9uU2V0PFJlbmRl
ckFzVGV4dEZsYWc+KTsKIHZvaWQgd3JpdGVTVkdDb250YWluZXIoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgUmVuZGVyU1ZHQ29udGFpbmVyJiwgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAppbmRleCA3
ZTE4MTQ2ZTc3Y2ZjMmZlNjc1OTNhZWY2Nzk5ZmQ1MWI1NzQxZmE3Li5kNGJiZGQxNDQwMDk1Njgw
ZTczY2NmMWNmYzNiNmMzMWIyYWQ3NzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZXNvdXJjZXMuY3BwCkBAIC0yMSwxMiArMjEsMTIgQEAKICNpbmNsdWRlICJTVkdS
ZXNvdXJjZXMuaCIKIAogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkxl
Z2FjeVJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJQYXRoT3BlcmF0aW9uLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcklubGluZXMuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcklubGluZXMuaCIKLSNpbmNsdWRlICJS
ZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCiAjaW5j
bHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5o
IgpAQCAtMzA4LDcgKzMwOCw3IEBAIGJvb2wgU1ZHUmVzb3VyY2VzOjpidWlsZENhY2hlZFJlc291
cmNlcyhjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuCiAgICAgcmV0dXJu
IGZvdW5kUmVzb3VyY2VzOwogfQogCi12b2lkIFNWR1Jlc291cmNlczo6bGF5b3V0RGlmZmVyZW50
Um9vdElmTmVlZGVkKGNvbnN0IFJlbmRlclNWR1Jvb3QqIHN2Z1Jvb3QpCit2b2lkIFNWR1Jlc291
cmNlczo6bGF5b3V0RGlmZmVyZW50Um9vdElmTmVlZGVkKGNvbnN0IExlZ2FjeVJlbmRlclNWR1Jv
b3QqIHN2Z1Jvb3QpCiB7CiAgICAgaWYgKGNsaXBwZXIoKSAmJiBzdmdSb290ICE9IFNWR1JlbmRl
clN1cHBvcnQ6OmZpbmRUcmVlUm9vdE9iamVjdCgqY2xpcHBlcigpKSkKICAgICAgICAgY2xpcHBl
cigpLT5sYXlvdXRJZk5lZWRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZXNvdXJjZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVzb3VyY2VzLmgKaW5kZXggYzhiNDczNGIzY2QzYWNkYTRkNjg3OGNjODg4MjJlY2U4MjcyY2U1
MS4uZDk5NzUzNWQzMjk0MjZkYTkzYmFmNGMwZWI1NDA1MmQ5YWUwOWYzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5oCkBAIC0zNSw3ICszNSw3IEBAIGNs
YXNzIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOwogY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI7CiBjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjsKIGNsYXNzIFJlbmRlclNWR1Jl
c291cmNlTWFza2VyOwotY2xhc3MgUmVuZGVyU1ZHUm9vdDsKK2NsYXNzIExlZ2FjeVJlbmRlclNW
R1Jvb3Q7CiBjbGFzcyBTVkdSZW5kZXJTdHlsZTsKIAogLy8gSG9sZHMgYSBzZXQgb2YgcmVzb3Vy
Y2VzIGFzc29jaWF0ZWQgd2l0aCBhIFJlbmRlck9iamVjdApAQCAtNDUsNyArNDUsNyBAQCBwdWJs
aWM6CiAgICAgU1ZHUmVzb3VyY2VzKCk7CiAKICAgICBib29sIGJ1aWxkQ2FjaGVkUmVzb3VyY2Vz
KGNvbnN0IFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYpOwotICAgIHZvaWQgbGF5
b3V0RGlmZmVyZW50Um9vdElmTmVlZGVkKGNvbnN0IFJlbmRlclNWR1Jvb3QqKTsKKyAgICB2b2lk
IGxheW91dERpZmZlcmVudFJvb3RJZk5lZWRlZChjb25zdCBMZWdhY3lSZW5kZXJTVkdSb290Kik7
CiAKICAgICAvLyBPcmRpbmFyeSByZXNvdXJjZXMKICAgICBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIqIGNsaXBwZXIoKSBjb25zdCB7IHJldHVybiBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhID8g
bV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlciA6IG51bGxwdHI7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIu
Y3BwCmluZGV4IDY0MTNiYWFlNGJmM2Y3NmJhM2U2MDU3Y2Q5MWRmNThlMjExMzBjYTAuLjk3YzEw
ODcxYjM5NjVmNmExZWFjZmM2YWVhYzcwYjdhMGU0YmM5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcApAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50SW5saW5lcy5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJMZWdhY3lSZW5k
ZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyQnV0dG9uLmgiCiAjaW5jbHVkZSAiUmVuZGVy
Q291bnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckRlc2NlbmRhbnRJdGVyYXRvci5oIgpAQCAtNDks
NyArNTAsNiBAQAogI2luY2x1ZGUgIlJlbmRlclJ1YnlSdW4uaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlJl
bmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCkBAIC0yOTAsOCArMjkw
LDggQEAgdm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6YXR0YWNoSW50ZXJuYWwoUmVuZGVyRWxlbWVu
dCYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2IKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChpczxSZW5kZXJTVkdSb290PihwYXJlbnQpKSB7Ci0gICAgICAgIHN2Z0J1aWxkZXIo
KS5hdHRhY2goZG93bmNhc3Q8UmVuZGVyU1ZHUm9vdD4ocGFyZW50KSwgV1RGTW92ZShjaGlsZCks
IGJlZm9yZUNoaWxkKTsKKyAgICBpZiAoaXM8TGVnYWN5UmVuZGVyU1ZHUm9vdD4ocGFyZW50KSkg
eworICAgICAgICBzdmdCdWlsZGVyKCkuYXR0YWNoKGRvd25jYXN0PExlZ2FjeVJlbmRlclNWR1Jv
b3Q+KHBhcmVudCksIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTM3NCw4ICszNzQsOCBAQCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBS
ZW5kZXJUcmVlQnVpbGRlcjo6ZGV0YWNoKFJlbmRlckVsZW1lbnQmIHBhcmVudCwgUmVuZGVyTwog
ICAgIGlmIChpczxSZW5kZXJTVkdDb250YWluZXI+KHBhcmVudCkpCiAgICAgICAgIHJldHVybiBz
dmdCdWlsZGVyKCkuZGV0YWNoKGRvd25jYXN0PFJlbmRlclNWR0NvbnRhaW5lcj4ocGFyZW50KSwg
Y2hpbGQpOwogCi0gICAgaWYgKGlzPFJlbmRlclNWR1Jvb3Q+KHBhcmVudCkpCi0gICAgICAgIHJl
dHVybiBzdmdCdWlsZGVyKCkuZGV0YWNoKGRvd25jYXN0PFJlbmRlclNWR1Jvb3Q+KHBhcmVudCks
IGNoaWxkKTsKKyAgICBpZiAoaXM8TGVnYWN5UmVuZGVyU1ZHUm9vdD4ocGFyZW50KSkKKyAgICAg
ICAgcmV0dXJuIHN2Z0J1aWxkZXIoKS5kZXRhY2goZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHUm9v
dD4ocGFyZW50KSwgY2hpbGQpOwogCiAgICAgaWYgKGlzPFJlbmRlckJsb2NrRmxvdz4ocGFyZW50
KSkKICAgICAgICAgcmV0dXJuIGJsb2NrQnVpbGRlcigpLmRldGFjaChkb3duY2FzdDxSZW5kZXJC
bG9ja0Zsb3c+KHBhcmVudCksIGNoaWxkLCBjYW5Db2xsYXBzZUFub255bW91c0Jsb2NrKTsKQEAg
LTk5NSw3ICs5OTUsNyBAQCB2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpyZXBvcnRWaXN1YWxseU5v
bkVtcHR5Q29udGVudChjb25zdCBSZW5kZXJFbGVtZW50JiBwYXJlbgogICAgICAgICBtX3ZpZXcu
ZnJhbWVWaWV3KCkuaW5jcmVtZW50VmlzdWFsbHlOb25FbXB0eVBpeGVsQ291bnQocm91bmRlZElu
dFNpemUocmVwbGFjZWRSZW5kZXJlci5pbnRyaW5zaWNTaXplKCkpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAoaXM8UmVuZGVyU1ZHUm9vdD4oY2hpbGQpKSB7CisgICAgaWYgKGlz
PExlZ2FjeVJlbmRlclNWR1Jvb3Q+KGNoaWxkKSkgewogICAgICAgICBhdXRvIGZpeGVkU2l6ZSA9
IFtdIChjb25zdCBhdXRvJiByZW5kZXJlcikgLT4gc3RkOjpvcHRpb25hbDxJbnRTaXplPiB7CiAg
ICAgICAgICAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLnN0eWxlKCk7CiAgICAgICAgICAgICBp
ZiAoIXN0eWxlLndpZHRoKCkuaXNGaXhlZCgpIHx8ICFzdHlsZS5oZWlnaHQoKS5pc0ZpeGVkKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJl
ZUJ1aWxkZXJTVkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVCdWlsZGVyU1ZHLmNwcAppbmRleCA4MmIyYzExNmJmN2IwMGRhYzE3ZmUzODQ5Mzc1OTMy
NDBmNjY3ZjhhLi5jNzZjNzYyNmVjZDgxMDljODYzMWQwYWY4NDhmMmNhNTRjZDBmZDBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXJTVkcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJU
cmVlQnVpbGRlclNWRy5jcHAKQEAgLTI2LDkgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlclNWRy5oIgogCisjaW5jbHVkZSAiTGVnYWN5UmVu
ZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR0lubGluZS5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5oIgog
I2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyQmxvY2tGbG93LmgiCkBAIC01OSw3ICs1OSw3IEBA
IHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OlNWRzo6YXR0YWNoKFJlbmRlclNWR0lubGluZSYgcGFy
ZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqCiAgICAgICAgIHRleHRBbmNlc3Rvci0+c3VidHJlZUNo
aWxkV2FzQWRkZWQoJmNoaWxkVG9BZGQpOwogfQogCi12b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpT
Vkc6OmF0dGFjaChSZW5kZXJTVkdSb290JiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJUcmVlQnVpbGRl
cjo6U1ZHOjphdHRhY2goTGVnYWN5UmVuZGVyU1ZHUm9vdCYgcGFyZW50LCBSZW5kZXJQdHI8UmVu
ZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBhdXRv
JiBjaGlsZFRvQWRkID0gKmNoaWxkOwogICAgIG1fYnVpbGRlci5hdHRhY2hUb1JlbmRlckVsZW1l
bnQocGFyZW50LCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwpAQCAtMTA3LDcgKzEwNyw3
IEBAIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclRyZWVCdWlsZGVyOjpTVkc6OmRldGFj
aChSZW5kZXJTVkdDb250YWluZXImIHBhcmVuCiAgICAgcmV0dXJuIG1fYnVpbGRlci5kZXRhY2hG
cm9tUmVuZGVyRWxlbWVudChwYXJlbnQsIGNoaWxkKTsKIH0KIAotUmVuZGVyUHRyPFJlbmRlck9i
amVjdD4gUmVuZGVyVHJlZUJ1aWxkZXI6OlNWRzo6ZGV0YWNoKFJlbmRlclNWR1Jvb3QmIHBhcmVu
dCwgUmVuZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclRy
ZWVCdWlsZGVyOjpTVkc6OmRldGFjaChMZWdhY3lSZW5kZXJTVkdSb290JiBwYXJlbnQsIFJlbmRl
ck9iamVjdCYgY2hpbGQpCiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJl
bW92ZWRGcm9tVHJlZShjaGlsZCk7CiAgICAgcmV0dXJuIG1fYnVpbGRlci5kZXRhY2hGcm9tUmVu
ZGVyRWxlbWVudChwYXJlbnQsIGNoaWxkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlclNWRy5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyU1ZHLmgKaW5kZXggNDcwN2RmZmY0
NzIzYzk1YTgwYTA3YzQ3M2I2Y2VjYjQ2OTgyZjI0Mi4uOGE0ZDBmYTViOGE0ZjY0MDM4M2I1YzBk
MzQ5YTFmY2ZhZTVhYThkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyU1ZHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyU1ZHLmgKQEAgLTMxLDcgKzMxLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CiBjbGFzcyBSZW5k
ZXJTVkdJbmxpbmU7Ci1jbGFzcyBSZW5kZXJTVkdSb290OworY2xhc3MgTGVnYWN5UmVuZGVyU1ZH
Um9vdDsKIGNsYXNzIFJlbmRlclNWR1RleHQ7CiAKIGNsYXNzIFJlbmRlclRyZWVCdWlsZGVyOjpT
VkcgewpAQCAtNDEsMTMgKzQxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYXR0YWNoKFJlbmRl
clNWR0NvbnRhaW5lciYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAgICAgdm9pZCBhdHRhY2goUmVuZGVyU1ZHSW5saW5l
JiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKTsKLSAgICB2b2lkIGF0dGFjaChSZW5kZXJTVkdSb290JiBwYXJlbnQsIFJlbmRl
clB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKKyAg
ICB2b2lkIGF0dGFjaChMZWdhY3lSZW5kZXJTVkdSb290JiBwYXJlbnQsIFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKICAgICB2b2lkIGF0
dGFjaChSZW5kZXJTVkdUZXh0JiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKIAogICAgIFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IGRldGFjaChSZW5kZXJTVkdUZXh0JiBwYXJlbnQsIFJlbmRlck9iamVjdCYgY2hpbGQpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKICAgICBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBkZXRhY2goUmVu
ZGVyU1ZHSW5saW5lJiBwYXJlbnQsIFJlbmRlck9iamVjdCYgY2hpbGQpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKICAgICBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBkZXRhY2goUmVuZGVyU1ZHQ29udGFp
bmVyJiBwYXJlbnQsIFJlbmRlck9iamVjdCYgY2hpbGQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAg
ICBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBkZXRhY2goUmVuZGVyU1ZHUm9vdCYgcGFyZW50LCBS
ZW5kZXJPYmplY3QmIGNoaWxkKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgUmVuZGVyUHRyPFJl
bmRlck9iamVjdD4gZGV0YWNoKExlZ2FjeVJlbmRlclNWR1Jvb3QmIHBhcmVudCwgUmVuZGVyT2Jq
ZWN0JiBjaGlsZCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCiBwcml2YXRlOgogICAgIFJlbmRlclRy
ZWVCdWlsZGVyJiBtX2J1aWxkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZUFkanVzdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3Bw
CmluZGV4IGY4NTQyMGIxNTU4Nzk5OThhODExNjkzMDU3ODMzODY1OTU0OTIxZWYuLjNjNTMyZTg0
NDAwNmEwNTk1YTQ0MTU3OTc4YmUyNzk1MzMzMmE3ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQWRqdXN0ZXIuY3BwCkBAIC02MjAsNyArNjIwLDcgQEAgdm9pZCBBZGp1c3Rlcjo6YWRqdXN0
U1ZHRWxlbWVudFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgU1ZHRWxlbWVudCYgc3Zn
RWwKICAgICBpZiAoIWlzUG9zaXRpb25pbmdBbGxvd2VkKQogICAgICAgICBzdHlsZS5zZXRQb3Np
dGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFBvc2l0aW9uKCkpOwogCi0gICAgLy8gUmVuZGVyU1ZH
Um9vdCBoYW5kbGVzIHpvb21pbmcgZm9yIHRoZSB3aG9sZSBTVkcgc3VidHJlZSwgc28gZm9yZWln
bk9iamVjdCBjb250ZW50IHNob3VsZAorICAgIC8vIExlZ2FjeVJlbmRlclNWR1Jvb3QgaGFuZGxl
cyB6b29taW5nIGZvciB0aGUgd2hvbGUgU1ZHIHN1YnRyZWUsIHNvIGZvcmVpZ25PYmplY3QgY29u
dGVudCBzaG91bGQKICAgICAvLyBub3QgYmUgc2NhbGVkIGFnYWluLgogICAgIGlmIChzdmdFbGVt
ZW50Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZvcmVpZ25PYmplY3RUYWcpKQogICAgICAgICBzdHls
ZS5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcAppbmRleCA5MGM0N2RiNGM2NmJlZTE5
MWYyNzAzMzllNWUzZTVmOWY1YWE5ZjlmLi5jYmUzZTVkMjU4YWUxNzU4ZTAyNGZlMDc2YWJiMDhh
NDMwMGFmMjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJT
dGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3Bw
CkBAIC03MSw3ICs3MSw3IEBAIEJ1aWxkZXJTdGF0ZTo6QnVpbGRlclN0YXRlKEJ1aWxkZXImIGJ1
aWxkZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgQnVpbGRlckNvbnRleHQmCiAvLyBvZiBlYWNoIGlu
ZGl2aWR1YWwgbGVuZ3RoIHZhbHVlIGluIHRoZSByZW5kZXIgc3R5bGUgLyB0cmVlLiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aCooKQogLy8gbXVsdGlwbGllcyBlYWNoIHJlc29sdmVk
IGxlbmd0aCB3aXRoIHRoZSB6b29tIG11bHRpcGxpZXIgLSBzbyBmb3IgU1ZHIHdlIG5lZWQgdG8g
ZGlzYWJsZSB0aGF0LgogLy8gVGhvdWdoIGFsbCBDU1MgdmFsdWVzIHRoYXQgY2FuIGJlIGFwcGxp
ZWQgdG8gb3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnRzICh3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRp
bmcuLi4pCi0vLyBuZWVkIHRvIHJlc3BlY3QgdGhlIHNjYWxpbmcuIFJlbmRlckJveCAodGhlIHBh
cmVudCBjbGFzcyBvZiBSZW5kZXJTVkdSb290KSBncmFicyB2YWx1ZXMgbGlrZQorLy8gbmVlZCB0
byByZXNwZWN0IHRoZSBzY2FsaW5nLiBSZW5kZXJCb3ggKHRoZSBwYXJlbnQgY2xhc3Mgb2YgTGVn
YWN5UmVuZGVyU1ZHUm9vdCkgZ3JhYnMgdmFsdWVzIGxpa2UKIC8vIHdpZHRoL2hlaWdodC9ib3Jk
ZXIvcGFkZGluZy8uLi4gZnJvbSB0aGUgUmVuZGVyU3R5bGUgLT4gZm9yIFNWRyB0aGVzZSB2YWx1
ZXMgd291bGQgbmV2ZXIgc2NhbGUsCiAvLyBpZiB3ZSdkIHBhc3MgYSAxLjAgem9vbSBmYWN0b3Ig
ZXZlcnlod2VyZS4gU28gd2Ugb25seSBwYXNzIGEgem9vbSBmYWN0b3Igb2YgMS4wIGZvciBzcGVj
aWZpYwogLy8gcHJvcGVydGllcyB0aGF0IGFyZSBOT1QgYWxsb3dlZCB0byBzY2FsZSB3aXRoaW4g
YSB6b29tZWQgU1ZHIGRvY3VtZW50IChsZXR0ZXIvd29yZC1zcGFjaW5nL2ZvbnQtc2l6ZSkuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKaW5kZXggNmFjODliZWY0OTUxNGU3
N2U0Y2M5YzA3MDRjNjY1ZGJhMzhhMDFjYi4uMGRkYWI5ODAxZjE2Yzg4MDBlNDA5MTQzN2E3Zjcy
OGUzNGYwZDAxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aENvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcApAQCAt
MjcsOCArMjcsOCBAQAogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkZvbnRNZXRy
aWNzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdSb290
LmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUm9v
dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVycy5oIgpAQCAtMjMy
LDcgKzIzMiw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxl
Rm9yTGVuZ3RoUmVzb2x2aW5nKGNvbnN0IFNWR0VsZW1lbnQqCiAgICAgICAgIGN1cnJlbnRDb250
ZXh0ID0gY3VycmVudENvbnRleHQtPnBhcmVudE5vZGUoKTsKICAgICB9IHdoaWxlIChjdXJyZW50
Q29udGV4dCk7CiAKLSAgICAvLyBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IGEgUmVuZGVyU1ZHUm9v
dCByZW5kZXJlciwgY2FycnlpbmcgYSBzdHlsZS4KKyAgICAvLyBUaGVyZSBtdXN0IGJlIGF0IGxl
YXN0IGEgTGVnYWN5UmVuZGVyU1ZHUm9vdCByZW5kZXJlciwgY2FycnlpbmcgYSBzdHlsZS4KICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTVkdFbGVtZW50LmNwcAppbmRleCBiYmZkODQwODBkY2I1MTA1YTdkYTg3NzdkZTZm
MTQwYTZhOGZmZjM5Li42YTEwM2IyYTNjNjA3YWFkNzZmZmI5Mjc1M2E5MzEwOTBkYTVjN2VkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCkBAIC0zMCw4ICszMCw4IEBACiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVT
ZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CiAjaW5jbHVkZSAiU01JTFRpbWVDb250YWluZXIuaCIKQEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lk
IFNWR1NWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgICAgIGludmFsaWRhdGVTVkdQcmVzZW50YXRpb25hbEhpbnRTdHlsZSgp
OwogCiAgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkgewotICAg
ICAgICAgICAgaWYgKGlzPFJlbmRlclNWR1Jvb3Q+KHJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5k
ZXJTVkdSb290PigqcmVuZGVyZXIpLmlzRW1iZWRkZWRUaHJvdWdoRnJhbWVDb250YWluaW5nU1ZH
RG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChpczxMZWdhY3lSZW5kZXJTVkdSb290PihyZW5k
ZXJlcikgJiYgZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHUm9vdD4oKnJlbmRlcmVyKS5pc0VtYmVk
ZGVkVGhyb3VnaEZyYW1lQ29udGFpbmluZ1NWR0RvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAg
UmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRh
dGlvbigqcmVuZGVyZXIpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKQEAgLTM0OCwxMiAr
MzQ4LDEyIEBAIEFmZmluZVRyYW5zZm9ybSBTVkdTVkdFbGVtZW50Ojpsb2NhbENvb3JkaW5hdGVT
cGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjCiAgICAgICAgICAgICBGbG9hdFBvaW50
IGxvY2F0aW9uOwogICAgICAgICAgICAgZmxvYXQgem9vbUZhY3RvciA9IDE7CiAKLSAgICAgICAg
ICAgIC8vIEF0IHRoZSBTVkcvSFRNTCBib3VuZGFyeSAoYWthIFJlbmRlclNWR1Jvb3QpLCB3ZSBh
cHBseSB0aGUgbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSAKKyAgICAgICAgICAgIC8vIEF0IHRo
ZSBTVkcvSFRNTCBib3VuZGFyeSAoYWthIExlZ2FjeVJlbmRlclNWR1Jvb3QpLCB3ZSBhcHBseSB0
aGUgbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybQogICAgICAgICAgICAgLy8gdG8gbWFwIGFuIGVs
ZW1lbnQgZnJvbSBTVkcgdmlld3BvcnQgY29vcmRpbmF0ZXMgdG8gQ1NTIGJveCBjb29yZGluYXRl
cy4KLSAgICAgICAgICAgIC8vIFJlbmRlclNWR1Jvb3QncyBsb2NhbFRvQWJzb2x1dGUgbWV0aG9k
IGV4cGVjdHMgQ1NTIGJveCBjb29yZGluYXRlcy4KKyAgICAgICAgICAgIC8vIExlZ2FjeVJlbmRl
clNWR1Jvb3QncyBsb2NhbFRvQWJzb2x1dGUgbWV0aG9kIGV4cGVjdHMgQ1NTIGJveCBjb29yZGlu
YXRlcy4KICAgICAgICAgICAgIC8vIFdlIGFsc28gbmVlZCB0byBhZGp1c3QgZm9yIHRoZSB6b29t
IGxldmVsIGZhY3RvcmVkIGludG8gQ1NTIGNvb3JkaW5hdGVzIChidWcgIzk2MzYxKS4KLSAgICAg
ICAgICAgIGlmIChpczxSZW5kZXJTVkdSb290PigqcmVuZGVyZXIpKSB7Ci0gICAgICAgICAgICAg
ICAgbG9jYXRpb24gPSBkb3duY2FzdDxSZW5kZXJTVkdSb290PigqcmVuZGVyZXIpLmxvY2FsVG9C
b3JkZXJCb3hUcmFuc2Zvcm0oKS5tYXBQb2ludChsb2NhdGlvbik7CisgICAgICAgICAgICBpZiAo
aXM8TGVnYWN5UmVuZGVyU1ZHUm9vdD4oKnJlbmRlcmVyKSkgeworICAgICAgICAgICAgICAgIGxv
Y2F0aW9uID0gZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHUm9vdD4oKnJlbmRlcmVyKS5sb2NhbFRv
Qm9yZGVyQm94VHJhbnNmb3JtKCkubWFwUG9pbnQobG9jYXRpb24pOwogICAgICAgICAgICAgICAg
IHpvb21GYWN0b3IgPSAxIC8gcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwogICAg
ICAgICAgICAgfQogCkBAIC0zODMsNyArMzgzLDcgQEAgYm9vbCBTVkdTVkdFbGVtZW50OjpyZW5k
ZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICBpZiAoIWlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVzcGVj
dCBkaXNwbGF5OiBub25lIG9uIHRoZSBkb2N1bWVudEVsZW1lbnQgc3ZnIGVsZW1lbnQKLSAgICAv
LyBidXQgbWFueSB0aGluZ3MgaW4gRnJhbWVWaWV3IGFuZCBTVkdJbWFnZSBkZXBlbmQgb24gdGhl
IFJlbmRlclNWR1Jvb3Qgd2hlbgorICAgIC8vIGJ1dCBtYW55IHRoaW5ncyBpbiBGcmFtZVZpZXcg
YW5kIFNWR0ltYWdlIGRlcGVuZCBvbiB0aGUgTGVnYWN5UmVuZGVyU1ZHUm9vdCB3aGVuCiAgICAg
Ly8gdGhleSBzaG91bGQgaW5zdGVhZCBkZXBlbmQgb24gdGhlIFJlbmRlclZpZXcuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ5MwogICAgIGlmIChk
b2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpID09IHRoaXMpCkBAIC0zOTQsNyArMzk0LDcgQEAg
Ym9vbCBTVkdTVkdFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSkKIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBTVkdTVkdFbGVtZW50OjpjcmVhdGVFbGVt
ZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9u
JikKIHsKICAgICBpZiAoaXNPdXRlcm1vc3RTVkdTVkdFbGVtZW50KCkpCi0gICAgICAgIHJldHVy
biBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTVkdSb290PigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwor
ICAgICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8TGVnYWN5UmVuZGVyU1ZHUm9vdD4oKnRoaXMs
IFdURk1vdmUoc3R5bGUpKTsKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU1ZHVmll
d3BvcnRDb250YWluZXI+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CiB9CiAKQEAgLTQ3NSw5ICs0
NzUsOSBAQCBGbG9hdFJlY3QgU1ZHU1ZHRWxlbWVudDo6Y3VycmVudFZpZXdCb3hSZWN0KCkgY29u
c3QKICAgICBpZiAoIXZpZXdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdmlld0JveDsK
IAotICAgIGlmICghaXM8UmVuZGVyU1ZHUm9vdD4ocmVuZGVyZXIoKSkpCisgICAgaWYgKCFpczxM
ZWdhY3lSZW5kZXJTVkdSb290PihyZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICBpZiAoIWRvd25jYXN0PFJlbmRlclNWR1Jvb3Q+KCpyZW5kZXJlcigpKS5pc0VtYmVkZGVkVGhy
b3VnaFNWR0ltYWdlKCkpCisgICAgaWYgKCFkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdSb290Pigq
cmVuZGVyZXIoKSkuaXNFbWJlZGRlZFRocm91Z2hTVkdJbWFnZSgpKQogICAgICAgICByZXR1cm4g
eyB9OwogCiAgICAgTGVuZ3RoIGludHJpbnNpY1dpZHRoID0gdGhpcy0+aW50cmluc2ljV2lkdGgo
KTsKQEAgLTQ5NSw4ICs0OTUsOCBAQCBGbG9hdFNpemUgU1ZHU1ZHRWxlbWVudDo6Y3VycmVudFZp
ZXdwb3J0U2l6ZSgpIGNvbnN0CiAgICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZTsKIAogICAgIGlm
IChyZW5kZXJlcigpKSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJTVkdSb290PigqcmVuZGVyZXIo
KSkpIHsKLSAgICAgICAgICAgIGF1dG8mIHJvb3QgPSBkb3duY2FzdDxSZW5kZXJTVkdSb290Pigq
cmVuZGVyZXIoKSk7CisgICAgICAgIGlmIChpczxMZWdhY3lSZW5kZXJTVkdSb290PigqcmVuZGVy
ZXIoKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHJvb3QgPSBkb3duY2FzdDxMZWdhY3lSZW5kZXJT
VkdSb290PigqcmVuZGVyZXIoKSk7CiAgICAgICAgICAgICB2aWV3cG9ydFNpemUgPSByb290LmNv
bnRlbnRCb3hSZWN0KCkuc2l6ZSgpIC8gcm9vdC5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICB2aWV3cG9ydFNpemUgPSBkb3duY2FzdDxSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lcj4oKnJlbmRlcmVyKCkpLnZpZXdwb3J0KCkuc2l6ZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggZWU4M2RjOTE2ZTc5MTkz
ZjY0NWY5M2UwYjg0MzUyOTBjMTlhYjBlZC4uMDhkMDU3YmJiNWYxN2MyMDQ1YmZmOTA2ZmY1YWRh
ODVmMTA0MjkzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBA
IC00MywxMCArNDMsMTAgQEAKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgorI2luY2x1ZGUgIkxlZ2Fj
eVJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJMaWJXZWJSVENQcm92aWRlci5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIlJl
bmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIKQEAgLTEzNiw3ICsx
MzYsNyBAQCB2b2lkIFNWR0ltYWdlOjpzZXRDb250YWluZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKICAgICBhdXRvIHJvb3RFbGVtZW50ID0gdGhpcy0+cm9vdEVsZW1lbnQoKTsKICAgICBp
ZiAoIXJvb3RFbGVtZW50KQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byogcmVuZGVyZXIgPSBk
b3duY2FzdDxSZW5kZXJTVkdSb290Pihyb290RWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgYXV0
byogcmVuZGVyZXIgPSBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdSb290Pihyb290RWxlbWVudC0+
cmVuZGVyZXIoKSk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0x
NTIsNyArMTUyLDcgQEAgSW50U2l6ZSBTVkdJbWFnZTo6Y29udGFpbmVyU2l6ZSgpIGNvbnN0CiAg
ICAgaWYgKCFyb290RWxlbWVudCkKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsKIAotICAgIGF1
dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyU1ZHUm9vdD4ocm9vdEVsZW1lbnQtPnJlbmRl
cmVyKCkpOworICAgIGF1dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHUm9v
dD4ocm9vdEVsZW1lbnQtPnJlbmRlcmVyKCkpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAg
IHJldHVybiBJbnRTaXplKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZUNhY2hlLmNwcAppbmRleCA0NGUzOTAzOWFhMjBiNjM5MjA5MWMwODk2OWJhZDAwMjBiZGZm
MTUyLi5hMGUzNmQxMGFiYWM1Yjk5ZDk4ZTcwYTVhOGZlMGRlODBkMjJjY2I1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCkBAIC0yNSw3ICsyNSw3
IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKICNpbmNsdWRlICJMYXlvdXRTaXplLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgor
I2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJTVkdJbWFnZS5oIgog
I2luY2x1ZGUgIlNWR0ltYWdlRm9yQ29udGFpbmVyLmgiCiAK
</data>
<flag name="review"
          id="470668"
          type_id="1"
          status="+"
          setter="rbuis"
    />
          </attachment>
      

    </bug>

</bugzilla>