<?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>177299</bug_id>
          
          <creation_ts>2017-09-21 05:44:55 -0700</creation_ts>
          <short_desc>Remove RenderNamedFlowFragment</short_desc>
          <delta_ts>2017-09-22 00:52:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>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>
          
          <blocked>174978</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>hyatt</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1351171</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-21 05:44:55 -0700</bug_when>
    <thetext>Remove the remaining named flow rendering code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351172</commentid>
    <comment_count>1</comment_count>
      <attachid>321422</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-21 05:49:00 -0700</bug_when>
    <thetext>Created attachment 321422
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351173</commentid>
    <comment_count>2</comment_count>
      <attachid>321423</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-21 06:03:13 -0700</bug_when>
    <thetext>Created attachment 321423
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351174</commentid>
    <comment_count>3</comment_count>
      <attachid>321424</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-21 06:16:34 -0700</bug_when>
    <thetext>Created attachment 321424
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351201</commentid>
    <comment_count>4</comment_count>
      <attachid>321424</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2017-09-21 09:10:05 -0700</bug_when>
    <thetext>Comment on attachment 321424
patch

r=me

The overflow layout phase stuff can go too. You can completely eliminate the layout phase stuff from RenderFlowThread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351281</commentid>
    <comment_count>5</comment_count>
      <attachid>321424</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-21 11:29:52 -0700</bug_when>
    <thetext>Comment on attachment 321424
patch

Clearing flags on attachment: 321424

Committed r222335: &lt;http://trac.webkit.org/changeset/222335&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351282</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-21 11:29:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351562</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-22 00:52:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/34590996&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321422</attachid>
            <date>2017-09-21 05:49:00 -0700</date>
            <delta_ts>2017-09-21 06:03:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>named-flow-removal-rendernamedflowfragment-4.patch</filename>
            <type>text/plain</type>
            <size>147483</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjMxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAxNy0wOS0yMSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzcyOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmUgdGhlIHJlbWFpbmluZyBuYW1lZCBmbG93IHJlbmRlcmluZyBjb2RlLgorCisg
ICAgICAgIFRoZSBmZWF0dXJlIGlzIGFscmVhZHkgZGlzYWJsZWQsIG5vIGZ1bmN0aW9uYWwgY2hh
bmdlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZWxlY3Rp
b25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6Omluc2VydGVkSW50b1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2tGbG93Ojp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6dXBkYXRlTG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zs
b3c6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93
OjpjcmVhdGVSZW5kZXJOYW1lZEZsb3dGcmFnbWVudElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y2FuSGF2ZUNoaWxkcmVuIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y2FuSGF2ZUdlbmVyYXRl
ZENoaWxkcmVuIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Rmxvdzo6bmFtZWRGbG93RnJhZ21lbnROZWVkc1VwZGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnNldFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OlJlbmRlckJsb2NrRmxvd1JhcmVEYXRhOjpS
ZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zs
b3c6OnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckVsZW1lbnQ6OmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpwdXNoQ29udGVudHNDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
bWFwTG9jYWxUb0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OmlzVW5zcGxpdHRhYmxlRm9yUGFnaW5hdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6Om92ZXJmbG93UmVjdEZvclBhaW50UmVqZWN0aW9uIGNvbnN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
YWludE1hc2tGb3JUZXh0RmlsbEJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmdlbmVyYXRpbmdFbGVtZW50IGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpSZW5kZXJGbG93VGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmludmFsaWRhdGVSZWdpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnZhbGlkYXRlUmVnaW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJlbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hS
ZWdpb25JbmZvQW5kQ3VzdG9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1Ro
cmVhZDo6dXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcmVhayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpoYXNDb21wb3NpdGluZ1JlZ2lvbkRlc2NlbmRhbnQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Z2V0
TGF5ZXJMaXN0Rm9yUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZsb3dUaHJlYWQ6OnJlZ2lvbkZvckNvbXBvc2l0ZWRMYXllciBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjYWNoZWRSZWdpb25Gb3JDb21w
b3NpdGVkTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxv
d1RocmVhZDo6dXBkYXRlTGF5ZXJUb1JlZ2lvbk1hcHBpbmdzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUFsbExheWVyVG9SZWdpb25NYXBwaW5n
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjb2xsZWN0
c0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmlzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnRD
b25zaXN0ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dU
aHJlYWQ6OmluaXRpYWxpemVSZWdpb25zQ29tcHV0ZWRBdXRvSGVpZ2h0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Om1hcmtBdXRvTG9naWNhbEhlaWdodFJl
Z2lvbnNGb3JMYXlvdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1Ro
cmVhZDo6aW5jcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0
UmVnaW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OmV4cGFuZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRSZWZsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpwYWludExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnBhaW50TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjppc0hpdENhbmRpZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGFu
ZENsaXBSZWN0Rm9yUmVnaW9uQW5kUmVmbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5k
ZXJSZWdpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjptYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFj
a2luZzo6c2hvdWxkQ2xpcENvbXBvc2l0ZWRCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjppc1NpbXBsZUNvbnRh
aW5lckNvbXBvc2l0aW5nTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjphZGp1c3RBbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzRm9yRmxvd1RocmVhZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1
aXJlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1
aWxkQ29tcG9zaXRpbmdMYXllclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9ySW5kaXJlY3RSZWFzb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzdHlsZUNoYW5nZU1heUFm
ZmVjdEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZVJlZ2lvbkNv
bXBvc2l0aW5nUmVxdWlyZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZFJlZ2lvbkNvbXBvc2l0aW5nTGF5ZXJUcmVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6Y29udGFpbmVyRm9yUmVwYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5nQmxv
Y2sgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aGFzRml4ZWRQb3NJbk5hbWVk
Rmxvd0NvbnRhaW5pbmdCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJP
YmplY3Q6OmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojppc1JlbmRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OmlzQW5vbnltb3VzQmxvY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojppc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUmVnaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246Omhhc0F1dG9M
b2dpY2FsSGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9k
ZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpsYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZUZvclBhZ2luYXRpb25JZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpsYXlvdXRDb250ZW50SW5BdXRvTG9naWNhbEhl
aWdodFJlZ2lvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6Y2hl
Y2tUd29QYXNzTGF5b3V0Rm9yQXV0b0hlaWdodFJlZ2lvbnMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dU
aHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cG9wTGF5b3V0
U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclZpZXcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jv
b3Q6OnBhaW50UmVwbGFjZWQpOgorCiAyMDE3LTA5LTIxICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJz
ZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV2ViQ3J5cHRvXSBTdXBwb3J0IEVsbGlwdGljIEN1
cnZlIFAtNTIxCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM3NTMsOCAr
Mzc1Myw2IEBACiAJCThBOUE1ODc1MTFFODRDODEwMDhBQ0ZEMSAvKiBKU1BlcmZvcm1hbmNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QTlBNTg3MzEx
RTg0QzgxMDA4QUNGRDEgLyogSlNQZXJmb3JtYW5jZS5oICovOyB9OwogCQk4QTlBNTg4ODExRTg0
RjM3MDA4QUNGRDEgLyogSlNQZXJmb3JtYW5jZVRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEE5QTU4NzcxMUU4NEM5ODAwOEFDRkQxIC8qIEpT
UGVyZm9ybWFuY2VUaW1pbmcuaCAqLzsgfTsKIAkJOEFCNEJDNzcxMjZGREI3MTAwREVCNzI3IC8q
IElnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QUI0QkM3NjEyNkZEQjcxMDBERUI3Mjcg
LyogSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIuaCAqLzsgfTsKLQkJOEFD
ODIyRkMxODBGQzAzMzAwRkI2NEQ1IC8qIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBQzgyMkZBMTgwRkMw
MzMwMEZCNjRENSAvKiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAgKi87IH07Ci0JCThBQzgy
MkZEMTgwRkMwMzMwMEZCNjRENSAvKiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEFDODIyRkIxODBGQzAzMzAw
RkI2NEQ1IC8qIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmggKi87IH07CiAJCThBRjRFNTU1MTFE
QzVBMzYwMDBFRDNERSAvKiBQZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEFGNEU1NTIxMURDNUEzNjAwMEVEM0RF
IC8qIFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5jcHAgKi87IH07CiAJCThBRjRFNTU2MTFEQzVBMzYw
MDBFRDNERSAvKiBQZXJmb3JtYW5jZU5hdmlnYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBRjRFNTUzMTFEQzVBMzYwMDBFRDNERSAvKiBQZXJm
b3JtYW5jZU5hdmlnYXRpb24uaCAqLzsgfTsKIAkJOEFGNEU1NUMxMURDNUE2MzAwMEVEM0RFIC8q
IFBlcmZvcm1hbmNlVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4QUY0RTU1OTExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcu
aCAqLzsgfTsKQEAgLTEyMTA5LDggKzEyMTA3LDYgQEAKIAkJOEE5QTU4NzMxMUU4NEM4MTAwOEFD
RkQxIC8qIEpTUGVyZm9ybWFuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNQZXJmb3JtYW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QTlBNTg3NzEx
RTg0Qzk4MDA4QUNGRDEgLyogSlNQZXJmb3JtYW5jZVRpbWluZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1BlcmZvcm1hbmNlVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCThBQjRCQzc2MTI2RkRCNzEwMERFQjcyNyAvKiBJZ25vcmVEZXN0cnVjdGl2
ZVdyaXRlQ291bnRJbmNyZW1lbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJZ25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk4QUM4MjJGQTE4MEZDMDMzMDBGQjY0RDUgLyogUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4
QUM4MjJGQjE4MEZDMDMzMDBGQjY0RDUgLyogUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEFGNEU1NTIxMURDNUEzNjAwMEVEM0RFIC8q
IFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4QUY0RTU1MzExREM1QTM2MDAwRUQzREUgLyogUGVyZm9ybWFuY2VOYXZpZ2F0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBlcmZvcm1hbmNlTmF2aWdhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QUY0RTU1NDExREM1QTM2MDAwRUQz
REUgLyogUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQ
ZXJmb3JtYW5jZU5hdmlnYXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjYwMDIsOCArMjU5OTgsNiBAQAogCQkJCUJDRTMyQjlCMTUxN0MwQjEwMEY1NDJFQyAvKiBSZW5k
ZXJNdWx0aUNvbHVtblNldC5oICovLAogCQkJCUJDMUE3RDk1MThGQ0I1QjAwMDQyMTg3OSAvKiBS
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAgKi8sCiAJCQkJQkMxQTdEOTYx
OEZDQjVCMDAwNDIxODc5IC8qIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgg
Ki8sCi0JCQkJOEFDODIyRkExODBGQzAzMzAwRkI2NEQ1IC8qIFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50LmNwcCAqLywKLQkJCQk4QUM4MjJGQjE4MEZDMDMzMDBGQjY0RDUgLyogUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQuaCAqLywKIAkJCQlCQ0VBNDg0MDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVy
T2JqZWN0LmNwcCAqLywKIAkJCQlCQ0VBNDg0MTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyT2Jq
ZWN0LmggKi8sCiAJCQkJODM4ODY3MzQxRDEzQkE1OTAwMzY5N0QwIC8qIFJlbmRlck9iamVjdEVu
dW1zLmggKi8sCkBAIC0yOTc0Myw3ICsyOTczNyw2IEBACiAJCQkJMUEzNTg2RTAxNTI2NEM0NTAw
MjJBNjU5IC8qIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNFMzJCOUMxNTE3QzBCMjAwRjU0MkVDIC8qIFJlbmRlck11bHRpQ29sdW1uU2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzFBN0Q5ODE4RkNCNUIwMDA0MjE4NzkgLyogUmVuZGVyTXVsdGlD
b2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCThBQzgyMkZEMTgw
RkMwMzMwMEZCNjRENSAvKiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNFQTQ4ODAwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlck9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODM4ODY3MzUxRDEzQkE1RjAwMzY5N0QwIC8qIFJlbmRlck9iamVjdEVudW1z
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZBOTMwODEwMzMzMTkzMDA3QjI1RDEgLyogUmVuZGVy
T3ZlcmZsb3cuaCBpbiBIZWFkZXJzICovLApAQCAtMzM3MTQsNyArMzM3MDcsNiBAQAogCQkJCTFB
MzU4NkRGMTUyNjRDNDUwMDIyQTY1OSAvKiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMzJCOUUxNTE3QzIyNzAwRjU0MkVDIC8qIFJlbmRlck11
bHRpQ29sdW1uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMUE3RDk3MThGQ0I1QjAwMDQy
MTg3OSAvKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk4QUM4MjJGQzE4MEZDMDMzMDBGQjY0RDUgLyogUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ4N0YwOTdEOTMwMjAwOTRDOUU0IC8q
IFJlbmRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNDNCRjU5QzExNDkyOTI4MDBD
NjQzQ0EgLyogUmVuZGVyUHJvZ3Jlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUE1NzRGMjQx
MzFEQjkzOTAwNDcxQjg4IC8qIFJlbmRlclF1b3RlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAyMjIyNjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKLSNpbmNs
dWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIgogI2luY2x1ZGUgIlJlbmRl
clRhYmxlQ2VsbC5oIgpAQCAtMTUzNiwxMSArMTUzNSw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1h
cmtGb3JQYWdpbmF0aW9uUmVsYXkKIAogdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQoKTsKLSAgICAvLyBDaGVjayBvdXIgcmVnaW9uIHJhbmdlIHRvIG1ha2Ug
c3VyZSB3ZSBuZWVkIHRvIGJlIHBhaW50aW5nIGluIHRoaXMgcmVnaW9uLgotICAgIGlmIChuYW1l
ZEZsb3dGcmFnbWVudCAmJiAhbmFtZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJlYWQoKS0+b2JqZWN0
U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgbmFtZWRGbG93RnJhZ21lbnQpKQotICAg
ICAgICByZXR1cm47Ci0KICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFp
bnRPZmZzZXQgKyBsb2NhdGlvbigpOwogICAgIFBhaW50UGhhc2UgcGhhc2UgPSBwYWludEluZm8u
cGhhc2U7CiAKQEAgLTE1NDgsNyArMTU0Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnQKICAgICAvLyBGSVhNRTogQ291bGQgZWxpbWluYXRlIHRoZSBpc0RvY3Vt
ZW50RWxlbWVudFJlbmRlcmVyKCkgY2hlY2sgaWYgd2UgZml4IGJhY2tncm91bmQgcGFpbnRpbmcg
c28gdGhhdCB0aGUgUmVuZGVyVmlldwogICAgIC8vIHBhaW50cyB0aGUgcm9vdCdzIGJhY2tncm91
bmQuCiAgICAgaWYgKCFpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpIHsKLSAgICAgICAgTGF5
b3V0UmVjdCBvdmVyZmxvd0JveCA9IG92ZXJmbG93UmVjdEZvclBhaW50UmVqZWN0aW9uKG5hbWVk
Rmxvd0ZyYWdtZW50KTsKKyAgICAgICAgTGF5b3V0UmVjdCBvdmVyZmxvd0JveCA9IG92ZXJmbG93
UmVjdEZvclBhaW50UmVqZWN0aW9uKCk7CiAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShvdmVy
Zmxvd0JveCk7CiAgICAgICAgIG92ZXJmbG93Qm94Lm1vdmVCeShhZGp1c3RlZFBhaW50T2Zmc2V0
KTsKICAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5pbnRlcnNlY3RzKHBhaW50SW5mby5yZWN0KQpA
QCAtMTk5MywxMyArMTk4Nyw2IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBz
KFJlbmQKICAgICAgICAgbGFzdExvZ2ljYWxSaWdodCA9IGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9m
ZnNldChyb290QmxvY2ssIGxvZ2ljYWxIZWlnaHQoKSwgY2FjaGUpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KLSAgICAKLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRG
bG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKLSAgICBpZiAo
cGFpbnRJbmZvICYmIG5hbWVkRmxvd0ZyYWdtZW50ICYmIGlzPFJlbmRlckZsb3dUaHJlYWQ+KCpw
YWludEluZm8tPnBhaW50Q29udGFpbmVyKSkgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGN1
cnJlbnQgb2JqZWN0IGlzIGFjdHVhbGx5IGZsb3dlZCBpbnRvIHRoZSByZWdpb24gYmVpbmcgcGFp
bnRlZC4KLSAgICAgICAgaWYgKCFkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPigqcGFpbnRJbmZv
LT5wYWludENvbnRhaW5lcikub2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywg
bmFtZWRGbG93RnJhZ21lbnQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CiAK
ICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgcmVzdWx0ID0gaW5saW5lU2VsZWN0
aW9uR2Fwcyhyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIG9mZnNldEZyb21S
b290QmxvY2ssIGxhc3RMb2dpY2FsVG9wLCBsYXN0TG9naWNhbExlZnQsIGxhc3RMb2dpY2FsUmln
aHQsIGNhY2hlLCBwYWludEluZm8pOwpAQCAtMjQ1MiwxMyArMjQzOSw2IEBAIGJvb2wgUmVuZGVy
QmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFQKICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExv
Y2F0aW9uKGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKSk7CiAgICAgTGF5b3V0U2l6ZSBs
b2NhbE9mZnNldCA9IHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKTsKIAotICAgIFJlbmRl
ckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gZmxvd1RocmVh
ZCA/IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PihmbG93VGhyZWFkLT5jdXJyZW50
UmVnaW9uKCkpIDogbnVsbHB0cjsKLSAgICAvLyBJZiB3ZSBhcmUgbm93IHNlYXJjaGluZyBpbnNp
ZGUgYSByZWdpb24sIG1ha2Ugc3VyZSB0aGlzIGVsZW1lbnQKLSAgICAvLyBpcyBiZWluZyBmcmFn
bWVudGVkIGludG8gdGhpcyByZWdpb24uCi0gICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmICFm
bG93VGhyZWFkLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBuYW1lZEZs
b3dGcmFnbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGlmICghaXNSZW5kZXJW
aWV3KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBhdCBh
bGwuCiAgICAgICAgIExheW91dFJlY3Qgb3ZlcmZsb3dCb3ggPSB2aXN1YWxPdmVyZmxvd1JlY3Qo
KTsKQEAgLTI1MjQsNyArMjUwNCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFQKICAgICAvLyBJZiB3ZSBoYXZlIGNsaXBwaW5nLCB0aGVuIHdlIGNhbid0IGhhdmUg
YW55IHNwaWxsb3V0LgogICAgIGJvb2wgdXNlT3ZlcmZsb3dDbGlwID0gaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyKCk7CiAgICAgYm9vbCB1c2VDbGlwID0gKGhhc0Nv
bnRyb2xDbGlwKCkgfHwgdXNlT3ZlcmZsb3dDbGlwKTsKLSAgICBib29sIGNoZWNrQ2hpbGRyZW4g
PSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGxvY2F0aW9uSW5Db250YWluZXIuaW50
ZXJzZWN0cyhjb250cm9sQ2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbikpIDogbG9jYXRpb25JbkNv
bnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgbmFt
ZWRGbG93RnJhZ21lbnQsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkpKTsKKyAgICBib29s
IGNoZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGxvY2F0aW9u
SW5Db250YWluZXIuaW50ZXJzZWN0cyhjb250cm9sQ2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbikp
IDogbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0
ZWRMb2NhdGlvbiwgbnVsbHB0ciwgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKSkpOwogICAg
IGlmIChjaGVja0NoaWxkcmVuKSB7CiAgICAgICAgIC8vIEhpdCB0ZXN0IGRlc2NlbmRhbnRzIGZp
cnN0LgogICAgICAgICBMYXlvdXRTaXplIHNjcm9sbGVkT2Zmc2V0KGxvY2FsT2Zmc2V0IC0gdG9M
YXlvdXRTaXplKHNjcm9sbFBvc2l0aW9uKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNiBAQAogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNsdWRlICJSZW5k
ZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtblNl
dC5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKQEAgLTE0NSwxNCArMTQ0LDEwIEBAIFJlbmRlckJsb2NrRmxvdzo6flJlbmRlckJs
b2NrRmxvdygpCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6aW5zZXJ0ZWRJbnRvVHJlZSgpCiB7CiAg
ICAgUmVuZGVyQmxvY2s6Omluc2VydGVkSW50b1RyZWUoKTsKLSAgICBjcmVhdGVSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudElmTmVlZGVkKCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojp3aWxs
QmVEZXN0cm95ZWQoKQogewotICAgIGlmIChyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKQotICAg
ICAgICBzZXRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudChudWxscHRyKTsKLQogICAgIC8vIE1ha2Ug
c3VyZSB0byBkZXN0cm95IGFub255bW91cyBjaGlsZHJlbiBmaXJzdCB3aGlsZSB0aGV5IGFyZSBz
dGlsbCBjb25uZWN0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIHRyZWUsIHNvIHRoYXQgdGhleSB3aWxs
CiAgICAgLy8gcHJvcGVybHkgZGlydHkgbGluZSBib3hlcyB0aGF0IHRoZXkgYXJlIHJlbW92ZWQg
ZnJvbS4gRWZmZWN0cyB0aGF0IGRvIDpiZWZvcmUvOmFmdGVyIG9ubHkgb24gaG92ZXIgY291bGQg
Y3Jhc2ggb3RoZXJ3aXNlLgogICAgIGRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCk7CkBAIC00OTYs
OCArNDkxLDYgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrKGJvb2wgcgogICAg
IExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksICp0aGlzLCBsb2NhdGlv
bk9mZnNldCgpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5bGVUb1Vz
ZS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpLCBwYWdlTG9naWNhbEhlaWdodCwgcGFnZUxv
Z2ljYWxIZWlnaHRDaGFuZ2VkKTsKIAogICAgIHByZXBhcmVQYWdpbmF0aW9uQmVmb3JlQmxvY2tM
YXlvdXQocmVsYXlvdXRDaGlsZHJlbik7Ci0gICAgaWYgKCFyZWxheW91dENoaWxkcmVuKQotICAg
ICAgICByZWxheW91dENoaWxkcmVuID0gbmFtZWRGbG93RnJhZ21lbnROZWVkc1VwZGF0ZSgpOwog
CiAgICAgLy8gV2UgdXNlIGZvdXIgdmFsdWVzLCBtYXhUb3BQb3MsIG1heFRvcE5lZywgbWF4Qm90
dG9tUG9zLCBhbmQgbWF4Qm90dG9tTmVnLCB0byB0cmFjawogICAgIC8vIG91ciBjdXJyZW50IG1h
eGltYWwgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIG1hcmdpbnMuIFRoZXNlIHZhbHVlcyBhcmUgdXNl
ZCB3aGVuIHdlCkBAIC0yMDQ1LDkgKzIwMzgsNiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c3R5
bGVEaWRDaGFuZ2UoU3R5CiAgICAgaWYgKG5vTG9uZ2VyQWZmZWN0c1BhcmVudEJsb2NrKCkgJiYg
c3R5bGUoKS5pc0Zsb2F0aW5nKCkgJiYgcHJldmlvdXNTaWJsaW5nKCkgJiYgcHJldmlvdXNTaWJs
aW5nKCktPmlzQW5vbnltb3VzQmxvY2soKSkKICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQm94TW9k
ZWxPYmplY3Q+KCpwYXJlbnQoKSkubW92ZUNoaWxkVG8oJmRvd25jYXN0PFJlbmRlckJveE1vZGVs
T2JqZWN0PigqcHJldmlvdXNTaWJsaW5nKCkpLCB0aGlzKTsKIAotICAgIGlmIChhdXRvIGZyYWdt
ZW50ID0gcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkKLSAgICAgICAgZnJhZ21lbnQtPnNldFN0
eWxlKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpjcmVhdGVTdHlsZShzdHlsZSgpKSk7Ci0KICAg
ICBpZiAoZGlmZiA+PSBTdHlsZURpZmZlcmVuY2VSZXBhaW50KSB7CiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGNvdWxkIHVzZSBhIGNoZWFwZXIgc3R5bGUtb25seSB0ZXN0IGluc3RlYWQgb2YgU2lt
cGxlTGluZUxheW91dDo6Y2FuVXNlRm9yLgogICAgICAgICBpZiAoc2VsZk5lZWRzTGF5b3V0KCkg
fHwgIW1fc2ltcGxlTGluZUxheW91dCB8fCAhU2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yKCp0
aGlzKSkKQEAgLTMxNTEsMjAgKzMxNDEsNiBAQCBHYXBSZWN0cyBSZW5kZXJCbG9ja0Zsb3c6Omlu
bGluZVNlbGVjdGlvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBSZW5kZXJCbG9ja0Zs
b3c6OmNyZWF0ZVJlbmRlck5hbWVkRmxvd0ZyYWdtZW50SWZOZWVkZWQoKQotewotICAgIGlmIChy
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIHx8IGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IE11bHRpY29sdW1uIHJlZ2lvbnMgbm90
IHlldCBzdXBwb3J0ZWQgKGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1yZWdpb25zLyNtdWx0
aS1jb2x1bW4tcmVnaW9ucykKLSAgICBpZiAoc3R5bGUoKS5pc0Rpc3BsYXlSZWdpb25UeXBlKCkg
JiYgc3R5bGUoKS5oYXNGbG93RnJvbSgpICYmICFzdHlsZSgpLnNwZWNpZmllc0NvbHVtbnMoKSkg
ewotICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogZmxvd0ZyYWdtZW50ID0gbmV3IFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KGRvY3VtZW50KCksIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
OjpjcmVhdGVTdHlsZShzdHlsZSgpKSk7Ci0gICAgICAgIGZsb3dGcmFnbWVudC0+aW5pdGlhbGl6
ZVN0eWxlKCk7Ci0gICAgICAgIGFkZENoaWxkKGZsb3dGcmFnbWVudCk7Ci0gICAgICAgIHNldFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KGZsb3dGcmFnbWVudCk7Ci0gICAgfQotfQotCiBib29sIFJl
bmRlckJsb2NrRmxvdzo6bmVlZHNMYXlvdXRBZnRlclJlZ2lvblJhbmdlQ2hhbmdlKCkgY29uc3QK
IHsKICAgICAvLyBBIGJsb2NrIHdpdGhvdXQgZmxvYXRzIG9yIHRoYXQgZXhwYW5kcyB0byBlbmNs
b3NlIHRoZW0gd29uJ3QgbmVlZCBhIHJlbGF5b3V0CkBAIC0zMTc2LDQwICszMTUyLDkgQEAgYm9v
bCBSZW5kZXJCbG9ja0Zsb3c6Om5lZWRzTGF5b3V0QWZ0ZXJSZQogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFJlbmRlckJsb2NrRmxvdzo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gIXJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgPyBSZW5kZXJCbG9jazo6Y2FuSGF2
ZUNoaWxkcmVuKCkgOiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpLT5jYW5IYXZlQ2hpbGRyZW4o
KTsKLX0KLQotYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OmNhbkhhdmVHZW5lcmF0ZWRDaGlsZHJlbigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuICFyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpID8gUmVuZGVy
QmxvY2s6OmNhbkhhdmVHZW5lcmF0ZWRDaGlsZHJlbigpIDogcmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQoKS0+Y2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCk7Ci19Ci0KLWJvb2wgUmVuZGVyQmxvY2tG
bG93OjpuYW1lZEZsb3dGcmFnbWVudE5lZWRzVXBkYXRlKCkgY29uc3QKLXsKLSAgICBpZiAoIWlz
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIGhhc1JlbGF0aXZlTG9naWNhbEhlaWdodCgpICYmICFpc1JlbmRlclZp
ZXcoKTsKLX0KLQogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKQog
ewogICAgIFJlbmRlckJsb2NrOjp1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7Ci0KLSAgICBpZiAocmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkgewotICAgICAgICByZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCgpLT5zZXRMb2dpY2FsSGVpZ2h0KHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxIZWln
aHQoKSAtIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkpKTsKLSAgICAgICAgcmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQoKS0+aW52YWxpZGF0ZVJlZ2lvbklmTmVlZGVkKCk7Ci0gICAgfQot
fQotCi12b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQqIGZsb3dGcmFnbWVudCkKLXsKLSAgICBSZW5kZXJCbG9ja0Zs
b3dSYXJlRGF0YSYgcmFyZURhdGEgPSBlbnN1cmVSYXJlQmxvY2tGbG93RGF0YSgpOwotICAgIGlm
IChhdXRvKiBmbG93RnJhZ21lbnRPbkZsb3cgPSBzdGQ6OmV4Y2hhbmdlKHJhcmVEYXRhLm1fcmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQsIG51bGxwdHIpKQotICAgICAgICBmbG93RnJhZ21lbnRPbkZs
b3ctPmRlc3Ryb3koKTsKLSAgICByYXJlRGF0YS5tX3JlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0g
Zmxvd0ZyYWdtZW50OwogfQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0TXVsdGlDb2x1bW5G
bG93VGhyZWFkKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogZmxvd1RocmVhZCkKQEAgLTM1
MzMsMTEgKzM0NzgsOSBAQCBQb3NpdGlvbiBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uRm9yUG9p
CiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+KCpmaXJzdENoaWxkKCkpLnBvc2l0aW9u
Rm9yUG9pbnQocG9pbnQpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2tGbG93Ojpw
b3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyUmVn
aW9uKiByZWdpb24pCitWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbkZv
clBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyUmVnaW9uKikKIHsK
LSAgICBpZiAoYXV0byBmcmFnbWVudCA9IHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpCi0gICAg
ICAgIHJldHVybiBmcmFnbWVudC0+cG9zaXRpb25Gb3JQb2ludChwb2ludCwgcmVnaW9uKTsKLSAg
ICByZXR1cm4gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIHJlZ2lvbik7Cisg
ICAgcmV0dXJuIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KHBvaW50LCBudWxscHRyKTsK
IH0KIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkZEZvY3VzUmluZ1JlY3RzRm9ySW5saW5lQ2hp
bGRyZW4oVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0
aW9uYWxPZmZzZXQsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAkocmV2aXNpb24gMjIyMjYzKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw2IEBAIGNsYXNzIExheW91dFN0YXRlTWFpbnRhaW5lcjsKIGNsYXNz
IExpbmVCcmVha2VyOwogY2xhc3MgTGluZUluZm87CiBjbGFzcyBSZW5kZXJNdWx0aUNvbHVtbkZs
b3dUaHJlYWQ7Ci1jbGFzcyBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKIGNsYXNzIFJlbmRlclJ1
YnlSdW47CiAKIHN0cnVjdCBXb3JkTWVhc3VyZW1lbnQ7CkBAIC0xMTksNyArMTE4LDYgQEAgcHVi
bGljOgogICAgICAgICBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YShjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIGJsb2NrKQogICAgICAgICAgICAgOiBtX21hcmdpbnMocG9zaXRpdmVNYXJnaW5CZWZvcmVE
ZWZhdWx0KGJsb2NrKSwgbmVnYXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KGJsb2NrKSwgcG9zaXRp
dmVNYXJnaW5BZnRlckRlZmF1bHQoYmxvY2spLCBuZWdhdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdChi
bG9jaykpCiAgICAgICAgICAgICAsIG1fbGluZUJyZWFrVG9Bdm9pZFdpZG93KC0xKQotICAgICAg
ICAgICAgLCBtX3JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KG51bGxwdHIpCiAgICAgICAgICAgICAs
IG1fbXVsdGlDb2x1bW5GbG93VGhyZWFkKG51bGxwdHIpCiAgICAgICAgICAgICAsIG1fZGlzY2Fy
ZE1hcmdpbkJlZm9yZShmYWxzZSkKICAgICAgICAgICAgICwgbV9kaXNjYXJkTWFyZ2luQWZ0ZXIo
ZmFsc2UpCkBAIC0xNTEsNyArMTQ5LDYgQEAgcHVibGljOgogICAgICAgICBNYXJnaW5WYWx1ZXMg
bV9tYXJnaW5zOwogICAgICAgICBpbnQgbV9saW5lQnJlYWtUb0F2b2lkV2lkb3c7CiAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxSb290SW5saW5lQm94PiBtX2xpbmVHcmlkQm94OwotICAgICAgICBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbV9yZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKIAogICAg
ICAgICBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqIG1fbXVsdGlDb2x1bW5GbG93VGhyZWFk
OwogICAgICAgICAKQEAgLTI2Nyw4ICsyNjQsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBkaWRCcmVh
a0F0TGluZVRvQXZvaWRXaWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1JhcmVCbG9ja0Zsb3dEYXRh
KCkgJiYgcmFyZUJsb2NrRmxvd0RhdGEoKS0+bV9kaWRCcmVha0F0TGluZVRvQXZvaWRXaWRvdzsg
fQogICAgIGJvb2wgcmVsYXlvdXRUb0F2b2lkV2lkb3dzKExheW91dFN0YXRlTWFpbnRhaW5lciYp
OwogCi0gICAgYm9vbCBjYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZTsK
LQogICAgIFJvb3RJbmxpbmVCb3gqIGxpbmVHcmlkQm94KCkgY29uc3QgeyByZXR1cm4gaGFzUmFy
ZUJsb2NrRmxvd0RhdGEoKSA/IHJhcmVCbG9ja0Zsb3dEYXRhKCktPm1fbGluZUdyaWRCb3guZ2V0
KCkgOiBudWxscHRyOyB9CiAgICAgdm9pZCBzZXRMaW5lR3JpZEJveChzdGQ6OnVuaXF1ZV9wdHI8
Um9vdElubGluZUJveD4gYm94KQogICAgIHsKQEAgLTI3NiwxMCArMjcxLDYgQEAgcHVibGljOgog
ICAgIH0KICAgICB2b2lkIGxheW91dExpbmVHcmlkQm94KCk7CiAKLSAgICBib29sIGNhbkRyb3BB
bm9ueW1vdXNCbG9ja0NoaWxkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIXJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KCk7IH0KLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBoYXNSYXJlQmxvY2tGbG93RGF0YSgpID8g
cmFyZUJsb2NrRmxvd0RhdGEoKS0+bV9yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA6IG51bGxwdHI7
IH0KLSAgICB2b2lkIHNldFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50Kik7Ci0KICAgICBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqIG11bHRpQ29sdW1u
Rmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIGhhc1JhcmVCbG9ja0Zsb3dEYXRhKCkgPyByYXJl
QmxvY2tGbG93RGF0YSgpLT5tX211bHRpQ29sdW1uRmxvd1RocmVhZCA6IG51bGxwdHI7IH0KICAg
ICB2b2lkIHNldE11bHRpQ29sdW1uRmxvd1RocmVhZChSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJl
YWQqKTsKICAgICBib29sIHdpbGxDcmVhdGVDb2x1bW5zKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IGRlc2lyZWRDb2x1bW5Db3VudCA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CkBAIC01OTQsOSArNTg1
LDYgQEAgcHJpdmF0ZTogICAgICAgIAogICAgIHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoRm9yQWxp
Z25tZW50KGNvbnN0IEVUZXh0QWxpZ24mLCBjb25zdCBSb290SW5saW5lQm94KiwgQmlkaVJ1biog
dHJhaWxpbmdTcGFjZVJ1biwgZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dpY2Fs
V2lkdGgsIGZsb2F0JiBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGludCBleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50KTsKIC8vIEVORCBNRVRIT0RTIERFRklORUQgSU4gUmVuZGVyQmxvY2tMaW5lTGF5
b3V0CiAKLSAgICBib29sIG5hbWVkRmxvd0ZyYWdtZW50TmVlZHNVcGRhdGUoKSBjb25zdDsKLSAg
ICBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgdm9pZCBjb21w
dXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lk
dGgsIExheW91dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3Q7CiAKICAgICB2b2lkIGFkanVz
dEluaXRpYWxMZXR0ZXJQb3NpdGlvbihSZW5kZXJCb3gmIGNoaWxkQm94LCBMYXlvdXRVbml0JiBs
b2dpY2FsVG9wT2Zmc2V0LCBMYXlvdXRVbml0JiBtYXJnaW5CZWZvcmVPZmZzZXQpOwpAQCAtNjEz
LDcgKzYwMSw2IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFRoZXNlIGNhbiBi
ZSBtYWRlIHByb3RlY3RlZCBhZ2FpbiBvbmNlIGFsbCBjYWxsZXJzIGhhdmUgYmVlbiBtb3ZlZCBo
ZXJlLgogICAgIHZvaWQgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290SW5saW5l
Qm94KiwgTGF5b3V0VW5pdCYgZGVsdGFPZmZzZXQsIGJvb2wmIG92ZXJmbG93c1JlZ2lvbiwgUmVu
ZGVyRmxvd1RocmVhZCopOyAvLyBDb21wdXRlcyBhIGRlbHRhT2Zmc2V0IHZhbHVlIHRoYXQgcHV0
IGEgbGluZSBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UgaWYgaXQgZG9lc24ndCBmaXQgb24g
dGhlIGN1cnJlbnQgcGFnZS4KICAgICB2b2lkIHVwZGF0ZVJlZ2lvbkZvckxpbmUoUm9vdElubGlu
ZUJveCopIGNvbnN0OwotICAgIHZvaWQgY3JlYXRlUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRJZk5l
ZWRlZCgpOwogCiAgICAgLy8gUGFnaW5hdGlvbiByb3V0aW5lcy4KICAgICBib29sIHJlbGF5b3V0
Rm9yUGFnaW5hdGlvbihMYXlvdXRTdGF0ZU1haW50YWluZXImKTsKQEAgLTY0MywxMSArNjMwLDYg
QEAgcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBMaW5lV2lkdGg7IC8vIE5lZWRzIHRvIGtu
b3cgRmxvYXRpbmdPYmplY3QKIH07CiAKLWlubGluZSBib29sIFJlbmRlckVsZW1lbnQ6OmlzUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSBjb25zdAotewotICAgIHJldHVybiBpczxS
ZW5kZXJCbG9ja0Zsb3c+KCp0aGlzKSAmJiBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlz
KS5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotfQotCiBpbmxpbmUgY29uc3QgU2ltcGxlTGlu
ZUxheW91dDo6TGF5b3V0KiBSZW5kZXJCbG9ja0Zsb3c6OnNpbXBsZUxpbmVMYXlvdXQoKSBjb25z
dAogewogICAgIEFTU0VSVChsaW5lTGF5b3V0UGF0aCgpID09IFNpbXBsZUxpbmVzUGF0aCB8fCAh
bV9zaW1wbGVMaW5lTGF5b3V0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5k
ZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKQEAgLTExNzUsMTYgKzExNzUsOSBAQCBib29sIFJlbmRlckJveDo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZW5kZXJGbG93VGhyZWFk
KiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgIFJlbmRlclJl
Z2lvbiogcmVnaW9uVG9Vc2UgPSBmbG93VGhyZWFkID8gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ+KGZsb3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKSkgOiBudWxscHRyOwotCi0gICAg
Ly8gSWYgdGhlIGJveCBpcyBub3QgY29udGFpbmVkIGJ5IHRoaXMgcmVnaW9uIHRoZXJlJ3Mgbm8g
cG9pbnQgaW4gZ29pbmcgZnVydGhlci4KLSAgICBpZiAocmVnaW9uVG9Vc2UgJiYgIWZsb3dUaHJl
YWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKHRoaXMsIHJlZ2lvblRvVXNlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBG
b3IgdGhpcyBwdXJwb3NlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4g
dGhlCiAgICAgLy8gZm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQg
ZWxlbWVudHMgbGlrZSBpbWFnZXMpLgotICAgIExheW91dFJlY3QgYm91bmRzUmVjdCA9IGJvcmRl
ckJveFJlY3RJblJlZ2lvbihyZWdpb25Ub1VzZSk7CisgICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0
ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKG51bGxwdHIpOwogICAgIGJvdW5kc1JlY3QubW92ZUJ5
KGFkanVzdGVkTG9jYXRpb24pOwogICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYWN0
aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5kICYmIGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0
cyhib3VuZHNSZWN0KSkgewogICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9j
YXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24p
KTsKQEAgLTEyNTIsNyArMTI0NSw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJveERlY29yYXRp
b25zKFBhaW4KICAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IGJvcmRlckJv
eFJlY3RJblJlZ2lvbihjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSk7CisgICAgTGF5
b3V0UmVjdCBwYWludFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24obnVsbHB0cik7CiAgICAg
cGFpbnRSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CiAgICAgYWRqdXN0Qm9yZGVyQm94UmVjdEZv
clBhaW50aW5nKHBhaW50UmVjdCk7CiAKQEAgLTE3MzksNyArMTczMiw3IEBAIGJvb2wgUmVuZGVy
Qm94OjpwdXNoQ29udGVudHNDbGlwKFBhaW50SW4KICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0g
UGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kczsKICAgICB9CiAgICAgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IgPSBkb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgRmxvYXRS
ZWN0IGNsaXBSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscygoaXNDb250cm9sQ2xpcCA/IGNv
bnRyb2xDbGlwUmVjdChhY2N1bXVsYXRlZE9mZnNldCkgOiBvdmVyZmxvd0NsaXBSZWN0KGFjY3Vt
dWxhdGVkT2Zmc2V0LCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSwgSWdub3JlT3Zl
cmxheVNjcm9sbGJhclNpemUsIHBhaW50SW5mby5waGFzZSkpLCBkZXZpY2VTY2FsZUZhY3Rvcik7
CisgICAgRmxvYXRSZWN0IGNsaXBSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscygoaXNDb250
cm9sQ2xpcCA/IGNvbnRyb2xDbGlwUmVjdChhY2N1bXVsYXRlZE9mZnNldCkgOiBvdmVyZmxvd0Ns
aXBSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBudWxscHRyLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSwgcGFpbnRJbmZvLnBoYXNlKSksIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICBwYWludElu
Zm8uY29udGV4dCgpLnNhdmUoKTsKICAgICBpZiAoc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSkK
ICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5jbGlwUm91bmRlZFJlY3Qoc3R5bGUoKS5nZXRS
b3VuZGVkSW5uZXJCb3JkZXJGb3IoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6ZSgp
KSkucGl4ZWxTbmFwcGVkUm91bmRlZFJlY3RGb3JQYWludGluZyhkZXZpY2VTY2FsZUZhY3Rvcikp
OwpAQCAtMTk3OCwxMiArMTk3MSw3IEBAIHZvaWQgUmVuZGVyQm94OjptYXBMb2NhbFRvQ29udGFp
bmVyKGNvbnMKIAogICAgIG1vZGUgJj0gfkFwcGx5Q29udGFpbmVyRmxpcDsKIAotICAgIC8vIEZv
ciBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzIGluc2lkZSBvdXQtb2YtZmxvdyBuYW1lZCBmbG93
cywgd2UgZG8gbm90IHdhbnQgdG8KLSAgICAvLyBtYXAgdGhlaXIgcG9zaXRpb24gZnVydGhlciB0
byByZWdpb25zIGJhc2VkIG9uIHRoZWlyIGNvb3JkaW5hdGVzIGluc2lkZSB0aGUgbmFtZWQgZmxv
d3MuCi0gICAgaWYgKCFjb250YWluZXItPmlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpIHx8
ICFmaXhlZFBvc2l0aW9uZWRXaXRoTmFtZWRGbG93Q29udGFpbmluZ0Jsb2NrKCkpCi0gICAgICAg
IGNvbnRhaW5lci0+bWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCB0cmFuc2Zv
cm1TdGF0ZSwgbW9kZSwgd2FzRml4ZWQpOwotICAgIGVsc2UKLSAgICAgICAgY29udGFpbmVyLT5t
YXBMb2NhbFRvQ29udGFpbmVyKGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KGNvbnRh
aW5lciksIHRyYW5zZm9ybVN0YXRlLCBtb2RlLCB3YXNGaXhlZCk7CisgICAgY29udGFpbmVyLT5t
YXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2Rl
LCB3YXNGaXhlZCk7CiB9CiAKIGNvbnN0IFJlbmRlck9iamVjdCogUmVuZGVyQm94OjpwdXNoTWFw
cGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9T
dG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKQEAgLTQ2NDksOSAr
NDYzNyw3IEBAIGJvb2wgUmVuZGVyQm94Ojppc1Vuc3BsaXR0YWJsZUZvclBhZ2luYXQKICAgICBy
ZXR1cm4gaXNSZXBsYWNlZCgpCiAgICAgICAgIHx8IGhhc1Vuc3BsaXR0YWJsZVNjcm9sbGluZ092
ZXJmbG93KCkKICAgICAgICAgfHwgKHBhcmVudCgpICYmIGlzV3JpdGluZ01vZGVSb290KCkpCi0g
ICAgICAgIHx8IChpc0Zsb2F0aW5nKCkgJiYgc3R5bGUoKS5zdHlsZVR5cGUoKSA9PSBGSVJTVF9M
RVRURVIgJiYgc3R5bGUoKS5pbml0aWFsTGV0dGVyRHJvcCgpID4gMCkKLSAgICAgICAgfHwgaXNS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpCi0gICAgICAgIHx8IGZpeGVkUG9zaXRp
b25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgfHwgKGlzRmxvYXRp
bmcoKSAmJiBzdHlsZSgpLnN0eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUiAmJiBzdHlsZSgpLmlu
aXRpYWxMZXR0ZXJEcm9wKCkgPiAwKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmxpbmVI
ZWlnaHQoYm9vbCAvKmZpcnN0TGluZSovLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExp
bmVQb3NpdGlvbk1vZGUgLypsaW5lUG9zaXRpb25Nb2RlKi8pIGNvbnN0CkBAIC00Nzc3LDIyICs0
NzYzLDEwIEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpmbGlwcGVkQ2xpZW50Qm94UmUKICAgICBy
ZXR1cm4gcmVjdDsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93UmVjdEZvclBh
aW50UmVqZWN0aW9uKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCkg
Y29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94OjpvdmVyZmxvd1JlY3RGb3JQYWludFJlamVjdGlv
bigpIGNvbnN0CiB7CiAgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QgPSB2aXN1YWxPdmVyZmxv
d1JlY3QoKTsKICAgICAKLSAgICAvLyBXaGVuIHVzaW5nIHJlZ2lvbnMsIHNvbWUgYm94ZXMgbWln
aHQgaGF2ZSB0aGVpciBmcmFtZSByZWN0IHJlbGF0aXZlIHRvIHRoZSBmbG93IHRocmVhZCwgd2hp
Y2ggY291bGQKLSAgICAvLyBjYXVzZSB0aGUgcGFpbnQgcmVqZWN0aW9uIGFsZ29yaXRobSB0byBw
cmV2ZW50IHRoZW0gZnJvbSBwYWludGluZyB3aGVuIHVzaW5nIGRpZmZlcmVudCB3aWR0aCByZWdp
b25zLgotICAgIC8vIGUuZy4gYW4gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGJveCB3aXRoIGJvdHRv
bTowcHggYW5kIHJpZ2h0OjBweCB3b3VsZCBoYXZlIGl0J3MgZnJhbWVSZWN0LnggcmVsYXRpdmUK
LSAgICAvLyB0byB0aGUgZmxvdyB0aHJlYWQsIG5vdCB0aGUgbGFzdCByZWdpb24gKGluIHdoaWNo
IGl0IHdpbGwgZW5kIHVwIGJlY2F1c2Ugb2YgYm90dG9tOjBweCkKLSAgICBpZiAobmFtZWRGbG93
RnJhZ21lbnQgJiYgbmFtZWRGbG93RnJhZ21lbnQtPmlzVmFsaWQoKSkgewotICAgICAgICBSZW5k
ZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gbmFtZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJlYWQo
KTsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgICAg
IFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKGZsb3dUaHJl
YWQtPmdldFJlZ2lvblJhbmdlRm9yQm94KHRoaXMsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKQot
ICAgICAgICAgICAgb3ZlcmZsb3dSZWN0LnVuaXRlKG5hbWVkRmxvd0ZyYWdtZW50LT52aXN1YWxP
dmVyZmxvd1JlY3RGb3JCb3goKnRoaXMpKTsKLSAgICB9Ci0gICAgCiAgICAgaWYgKCFtX292ZXJm
bG93IHx8ICF1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAgICByZXR1cm4gb3ZlcmZs
b3dSZWN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lv
biAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gdmlzdWFsT3ZlcmZsb3dSZWN0KCkueCgpIDogdmlzdWFsT3ZlcmZs
b3dSZWN0KCkueSgpOyB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxv
dygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHZp
c3VhbE92ZXJmbG93UmVjdCgpLm1heFgoKSA6IHZpc3VhbE92ZXJmbG93UmVjdCgpLm1heFkoKTsg
fQogCi0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3RGb3JQYWludFJlamVjdGlvbihSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudCopIGNvbnN0OworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0Rm9y
UGFpbnRSZWplY3Rpb24oKSBjb25zdDsKICAgICAKICAgICB2b2lkIGFkZExheW91dE92ZXJmbG93
KGNvbnN0IExheW91dFJlY3QmKTsKICAgICB2b2lkIGFkZFZpc3VhbE92ZXJmbG93KGNvbnN0IExh
eW91dFJlY3QmKTsKQEAgLTQ3Nyw3ICs0NzcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgTGF5b3V0
UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5
b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYg
bG9jYXRpb24sIFJlbmRlclJlZ2lvbiosIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0g
SWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFBhaW50UGhhc2UgPSBQYWludFBoYXNlQmxvY2tC
YWNrZ3JvdW5kKTsKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25z
dCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiogPSBudWxscHRyLCBPdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBQYWlu
dFBoYXNlID0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCk7CiAgICAgdmlydHVhbCBMYXlvdXRS
ZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9j
YXRpb24sIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSByZWxldmFuY3kpIHsgcmV0dXJuIG92ZXJmbG93Q2xpcFJlY3QobG9jYXRpb24sIHJlZ2lvbiwg
cmVsZXZhbmN5KTsgfQogICAgIExheW91dFJlY3QgY2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQm
IGxvY2F0aW9uLCBSZW5kZXJSZWdpb24qKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJvbENs
aXAoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMjIyNjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5n
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQuaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZS5o
IgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCkBAIC02ODgsMTAgKzY4Nyw2IEBAIHZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TWFza0ZvclQKICAgICBpZiAoYm94KSB7CiAgICAg
ICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBib3gtPnJvb3QoKTsKICAgICAgICAg
Ym94LT5wYWludChpbmZvLCBMYXlvdXRQb2ludChzY3JvbGxlZFBhaW50UmVjdC54KCkgLSBib3gt
PngoKSwgc2Nyb2xsZWRQYWludFJlY3QueSgpIC0gYm94LT55KCkpLCByb290Qm94LmxpbmVUb3Ao
KSwgcm9vdEJveC5saW5lQm90dG9tKCkpOwotICAgIH0gZWxzZSBpZiAoaXNSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudENvbnRhaW5lcigpKSB7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
JiByZWdpb24gPSAqZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqdGhpcykucmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKTsKLSAgICAgICAgaWYgKHJlZ2lvbi5pc1ZhbGlkKCkpCi0gICAgICAgICAg
ICByZWdpb24uZmxvd1RocmVhZCgpLT5sYXllcigpLT5wYWludE5hbWVkRmxvd1RocmVhZEluc2lk
ZVJlZ2lvbihtYXNrSW1hZ2VDb250ZXh0LCAmcmVnaW9uLCBtYXNrUmVjdCwgbWFza1JlY3QubG9j
YXRpb24oKSwgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0LCBSZW5kZXJMYXllcjo6UGFpbnRM
YXllclRlbXBvcmFyeUNsaXBSZWN0cyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgTGF5b3V0U2l6
ZSBsb2NhbE9mZnNldCA9IGlzPFJlbmRlckJveD4oKnRoaXMpID8gZG93bmNhc3Q8UmVuZGVyQm94
PigqdGhpcykubG9jYXRpb25PZmZzZXQoKSA6IExheW91dFNpemUoKTsKICAgICAgICAgcGFpbnQo
aW5mbywgc2Nyb2xsZWRQYWludFJlY3QubG9jYXRpb24oKSAtIGxvY2FsT2Zmc2V0KTsKQEAgLTgw
Miw3ICs3OTcsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllCiAg
ICAgaWYgKGNsaXBwZWRXaXRoTG9jYWxTY3JvbGxpbmcpIHsKICAgICAgICAgLy8gQ2xpcCB0byB0
aGUgb3ZlcmZsb3cgYXJlYS4KICAgICAgICAgYXV0byYgdGhpc0JveCA9IGRvd25jYXN0PFJlbmRl
ckJveD4oKnRoaXMpOwotICAgICAgICBjb250ZXh0LmNsaXAodGhpc0JveC5vdmVyZmxvd0NsaXBS
ZWN0KHJlY3QubG9jYXRpb24oKSwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpKTsK
KyAgICAgICAgY29udGV4dC5jbGlwKHRoaXNCb3gub3ZlcmZsb3dDbGlwUmVjdChyZWN0LmxvY2F0
aW9uKCkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFkanVzdCB0aGUgcGFpbnQgcmVjdCB0byBy
ZWZsZWN0IGEgc2Nyb2xsZWQgY29udGVudCBib3ggd2l0aCBib3JkZXJzIGF0IHRoZSBlbmRzLgog
ICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5tb3ZlQnkoLXRoaXNCb3guc2Nyb2xsUG9zaXRpb24o
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuaAkocmV2aXNpb24gMjIyMjYzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDYgQEAgY2xh
c3MgQm9yZGVyRWRnZTsKIGNsYXNzIEltYWdlQnVmZmVyOwogY2xhc3MgSW5saW5lRmxvd0JveDsK
IGNsYXNzIEtleWZyYW1lTGlzdDsKLWNsYXNzIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OwogY2xh
c3MgUmVuZGVyVGV4dEZyYWdtZW50OwogY2xhc3MgU3RpY2t5UG9zaXRpb25WaWV3cG9ydENvbnN0
cmFpbnRzOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJ
KHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDYgQEAgcHVibGljOgogICAgIGJvb2wg
aXNSZW5kZXJCbG9ja0Zsb3coKSBjb25zdDsKICAgICBib29sIGlzUmVuZGVyUmVwbGFjZWQoKSBj
b25zdDsKICAgICBib29sIGlzUmVuZGVySW5saW5lKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1JlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNDaGlsZEFsbG93ZWQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUmKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9i
amVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKTsKQEAg
LTQxOCw4ICs0MTcsNiBAQCBpbmxpbmUgYm9vbCBSZW5kZXJFbGVtZW50Ojppc1JlbmRlcklubGlu
CiAKIGlubGluZSBFbGVtZW50KiBSZW5kZXJFbGVtZW50OjpnZW5lcmF0aW5nRWxlbWVudCgpIGNv
bnN0CiB7Ci0gICAgaWYgKHBhcmVudCgpICYmIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkK
LSAgICAgICAgcmV0dXJuIHBhcmVudCgpLT5nZW5lcmF0aW5nRWxlbWVudCgpOwogICAgIHJldHVy
biBkb3duY2FzdDxFbGVtZW50PihSZW5kZXJPYmplY3Q6OmdlbmVyYXRpbmdOb2RlKCkpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
CShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJS
ZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyQ29tcG9zaXRvci5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGFibGVTZWN0aW9uLmgiCkBAIC01Myw3ICs1Miw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIFJlbmRlckZsb3dUaHJlYWQ6OlJlbmRlckZsb3dUaHJlYWQoRG9jdW1l
bnQmIGRvY3VtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQogICAgIDogUmVuZGVyQmxvY2tGbG93
KGRvY3VtZW50LCBXVEZNb3ZlKHN0eWxlKSkKICAgICAsIG1fcHJldmlvdXNSZWdpb25Db3VudCgw
KQotICAgICwgbV9hdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudCgwKQogICAgICwgbV9jdXJy
ZW50UmVnaW9uTWFpbnRhaW5lcihudWxscHRyKQogICAgICwgbV9yZWdpb25zSW52YWxpZGF0ZWQo
ZmFsc2UpCiAgICAgLCBtX3JlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxXaWR0aCh0cnVlKQpAQCAt
NjEsMTAgKzU5LDggQEAgUmVuZGVyRmxvd1RocmVhZDo6UmVuZGVyRmxvd1RocmVhZChEb2N1bQog
ICAgICwgbV9wYWdlTG9naWNhbFNpemVDaGFuZ2VkKGZhbHNlKQogICAgICwgbV9sYXlvdXRQaGFz
ZShMYXlvdXRQaGFzZU1lYXN1cmVDb250ZW50KQogICAgICwgbV9uZWVkc1R3b1BoYXNlc0xheW91
dChmYWxzZSkKLSAgICAsIG1fbGF5ZXJzVG9SZWdpb25NYXBwaW5nc0RpcnR5KHRydWUpCiB7CiAg
ICAgc2V0SXNSZW5kZXJGbG93VGhyZWFkKHRydWUpOwotICAgIHNldEZsb3dUaHJlYWRTdGF0ZShJ
bnNpZGVPdXRPZkZsb3dUaHJlYWQpOwogfQogCiBSZW5kZXJTdHlsZSBSZW5kZXJGbG93VGhyZWFk
OjpjcmVhdGVGbG93VGhyZWFkU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQpA
QCAtMTE2LDEzICsxMTIsOCBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmludmFsaWRhdGVSZWdp
b25zCiAgICAgbV9yZWdpb25SYW5nZU1hcC5jbGVhcigpOwogICAgIG1fYnJlYWtCZWZvcmVUb1Jl
Z2lvbk1hcC5jbGVhcigpOwogICAgIG1fYnJlYWtBZnRlclRvUmVnaW9uTWFwLmNsZWFyKCk7Ci0g
ICAgaWYgKG1fbGF5ZXJUb1JlZ2lvbk1hcCkKLSAgICAgICAgbV9sYXllclRvUmVnaW9uTWFwLT5j
bGVhcigpOwotICAgIGlmIChtX3JlZ2lvblRvTGF5ZXJMaXN0TWFwKQotICAgICAgICBtX3JlZ2lv
blRvTGF5ZXJMaXN0TWFwLT5jbGVhcigpOwogICAgIGlmIChtX2xpbmVUb1JlZ2lvbk1hcCkKICAg
ICAgICAgbV9saW5lVG9SZWdpb25NYXAtPmNsZWFyKCk7Ci0gICAgbV9sYXllcnNUb1JlZ2lvbk1h
cHBpbmdzRGlydHkgPSB0cnVlOwogICAgIHNldE5lZWRzTGF5b3V0KG1hcmtpbmdQYXJlbnRzKTsK
IAogICAgIG1fcmVnaW9uc0ludmFsaWRhdGVkID0gdHJ1ZTsKQEAgLTE0NSwxNiArMTM2LDYgQEAg
dm9pZCBSZW5kZXJGbG93VGhyZWFkOjp2YWxpZGF0ZVJlZ2lvbnMoKQogCiAgICAgICAgICAgICAg
ICAgcmVnaW9uLT5kZWxldGVBbGxSZW5kZXJCb3hSZWdpb25JbmZvKCk7CiAKLSAgICAgICAgICAg
ICAgICAvLyBJbiB0aGUgbWVhc3VyZSBjb250ZW50IGxheW91dCBwaGFzZSB3ZSBuZWVkIHRvIGlu
aXRpYWxpemUgdGhlIGNvbXB1dGVkQXV0b0hlaWdodCBmb3IgYXV0by1oZWlnaHQgcmVnaW9ucy4K
LSAgICAgICAgICAgICAgICAvLyBTZWUgaW5pdGlhbGl6ZVJlZ2lvbnNDb21wdXRlZEF1dG9IZWln
aHQgZm9yIHRoZSBleHBsYW5hdGlvbi4KLSAgICAgICAgICAgICAgICAvLyBBbHNvLCBpZiB3ZSBo
YXZlIGF1dG8taGVpZ2h0IHJlZ2lvbnMgd2UgY2FuJ3QgYXNzdW1lIG1fcmVnaW9uc0hhdmVVbmlm
b3JtTG9naWNhbEhlaWdodCB0byBiZSB0cnVlIGluIHRoZSBmaXJzdCBwaGFzZQotICAgICAgICAg
ICAgICAgIC8vIGJlY2F1c2UgdGhlIGF1dG8taGVpZ2h0IHJlZ2lvbnMgZG9uJ3QgaGF2ZSB0aGVp
ciBoZWlnaHQgY29tcHV0ZWQgeWV0LgotICAgICAgICAgICAgICAgIGlmIChpbk1lYXN1cmVDb250
ZW50TGF5b3V0UGhhc2UoKSAmJiByZWdpb24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byYgbmFtZWRGbG93RnJhZ21lbnQgPSBkb3duY2FzdDxSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbik7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWVk
Rmxvd0ZyYWdtZW50LnNldENvbXB1dGVkQXV0b0hlaWdodChuYW1lZEZsb3dGcmFnbWVudC5tYXhQ
YWdlTG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9yZWdpb25zSGF2ZVVu
aWZvcm1Mb2dpY2FsSGVpZ2h0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCiAgICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Mb2dpY2FsV2lkdGggPSByZWdpb24tPnBhZ2VMb2dp
Y2FsV2lkdGgoKTsKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxvZ2ljYWxIZWln
aHQgPSByZWdpb24tPnBhZ2VMb2dpY2FsSGVpZ2h0KCk7CiAKQEAgLTE4NCwxNDYgKzE2NSwxNSBA
QCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmxheW91dCgpCiAKICAgICBtX3BhZ2VMb2dpY2FsU2l6
ZUNoYW5nZWQgPSBtX3JlZ2lvbnNJbnZhbGlkYXRlZCAmJiBldmVySGFkTGF5b3V0KCk7CiAKLSAg
ICAvLyBJbiBjYXNlIHRoaXMgaXMgdGhlIHNlY29uZCBwYXNzIG9mIHRoZSBtZWFzdXJlIGNvbnRl
bnQgcGhhc2Ugd2UgbmVlZCB0byB1cGRhdGUgdGhlIGF1dG8taGVpZ2h0IHJlZ2lvbnMgdG8gdGhl
aXIgaW5pdGlhbCB2YWx1ZS4KLSAgICAvLyBJZiB0aGUgcmVnaW9uIGNoYWluIHdhcyBpbnZhbGlk
YXRlZCB0aGlzIHdpbGwgaGFwcGVuIGFueXdheS4KLSAgICBpZiAoIW1fcmVnaW9uc0ludmFsaWRh
dGVkICYmIGluTWVhc3VyZUNvbnRlbnRMYXlvdXRQaGFzZSgpKQotICAgICAgICBpbml0aWFsaXpl
UmVnaW9uc0NvbXB1dGVkQXV0b0hlaWdodCgpOwotCi0gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3Qg
cGhhc2Ugb2YgdGhlIGxheW91dCBhbmQgYmVjYXVzZSB3ZSBoYXZlIGF1dG8taGVpZ2h0IHJlZ2lv
bnMgd2UnbGwgbmVlZCBhIHNlY29uZAotICAgIC8vIHBhc3MgdG8gdXBkYXRlIHRoZSBmbG93IHdp
dGggdGhlIGNvbXB1dGVkIGF1dG8taGVpZ2h0IHJlZ2lvbnMuCiAgICAgLy8gSXQncyBhbHNvIHBv
c3NpYmxlIHRvIG5lZWQgYSBzZWNvbmRhcnkgbGF5b3V0IGlmIHRoZSBvdmVyZmxvdyBjb21wdXRh
dGlvbiBpbnZhbGlkYXRlZCB0aGUgcmVnaW9uIGNoYWluIChlLmcuIG92ZXJmbG93OiBhdXRvIHNj
cm9sbGJhcnMKICAgICAvLyBzaHJ1bmsgc29tZSByZWdpb25zKSBzbyByZXByb3BhZ2F0aW9uIGlz
IHJlcXVpcmVkLgotICAgIG1fbmVlZHNUd29QaGFzZXNMYXlvdXQgPSAoaW5NZWFzdXJlQ29udGVu
dExheW91dFBoYXNlKCkgJiYgaGFzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCkpIHx8IChpbk92
ZXJmbG93TGF5b3V0UGhhc2UoKSAmJiBtX3JlZ2lvbnNJbnZhbGlkYXRlZCk7CisgICAgbV9uZWVk
c1R3b1BoYXNlc0xheW91dCA9IGluT3ZlcmZsb3dMYXlvdXRQaGFzZSgpICYmIG1fcmVnaW9uc0lu
dmFsaWRhdGVkOwogCiAgICAgdmFsaWRhdGVSZWdpb25zKCk7CiAKICAgICBSZW5kZXJCbG9ja0Zs
b3c6OmxheW91dCgpOwogCiAgICAgbV9wYWdlTG9naWNhbFNpemVDaGFuZ2VkID0gZmFsc2U7Ci0K
LSAgICAvLyBJZiB0aGVyZSBhcmUgY2hpbGRyZW4gbGF5ZXJzIGluIHRoZSBSZW5kZXJGbG93VGhy
ZWFkIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUKLSAgICAvLyBjb21wb3NpdGVk
IGNoaWxkcmVuIGxheWVycyB3aWxsIGxhbmQgaW4gdGhlIHJpZ2h0IFJlbmRlclJlZ2lvbnMuIEFs
c28sIHRoZSBwYXJlbnQgUmVuZGVyUmVnaW9ucwotICAgIC8vIHdpbGwgZ2V0IFJlbmRlckxheWVy
cyBhbmQgYmVjb21lIGNvbXBvc2l0ZWQgYXMgbmVlZGVkLgotICAgIC8vIE5vdGUgdGhhdCB0aGVy
ZSdzIG5vIG5lZWQgdG8gZG8gc28gZm9yIHRoZSBpbmxpbmUgbXVsdGktY29sdW1uIGFzIHdlIGFy
ZSBub3QgbW92aW5nIGxheWVycyBpbnRvIGRpZmZlcmVudAotICAgIC8vIGNvbnRhaW5lcnMsIGJ1
dCBqdXN0IGFkanVzdGluZyB0aGUgcG9zaXRpb24gb2YgdGhlIFJlbmRlckxheWVyQmFja2luZy4K
LSAgICBpZiAoIW1fbmVlZHNUd29QaGFzZXNMYXlvdXQpIHsKLSAgICAgICAgLy8gSWYgd2UgaGF2
ZSBsYXllcnMgdGhhdCBtb3ZlZCBmcm9tIG9uZSByZWdpb24gdG8gYW5vdGhlciwgd2UgdHJpZ2dl
cgotICAgICAgICAvLyBhIGNvbXBvc2l0ZWQgbGF5ZXJzIHJlYnVpbGQgaW4gaGVyZSB0byBtYWtl
IHN1cmUgdGhhdCB0aGUgcmVnaW9ucyB3aWxsIGNvbGxlY3QgdGhlIHJpZ2h0IGxheWVycy4KLSAg
ICAgICAgaWYgKHVwZGF0ZUFsbExheWVyVG9SZWdpb25NYXBwaW5ncygpKQotICAgICAgICAgICAg
bGF5ZXIoKS0+Y29tcG9zaXRvcigpLnNldENvbXBvc2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKTsK
LSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyRmxvd1RocmVhZDo6aGFzQ29tcG9zaXRpbmdSZWdpb25E
ZXNjZW5kYW50KCkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlz
dCkgewotICAgICAgICBpZiAoZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZWdp
b24pLmxheWVyT3duZXIoKS5sYXllcigpLT5oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Y29uc3QgUmVuZGVyTGF5ZXJMaXN0KiBSZW5kZXJGbG93VGhyZWFkOjpnZXRMYXllckxpc3RGb3JS
ZWdpb24oUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIHJlZ2lvbikgY29uc3QKLXsKLSAgICBBU1NF
UlQobV9yZWdpb25Ub0xheWVyTGlzdE1hcCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fcmVnaW9u
VG9MYXllckxpc3RNYXAtPmZpbmQocmVnaW9uKTsKLSAgICByZXR1cm4gaXRlcmF0b3IgPT0gbV9y
ZWdpb25Ub0xheWVyTGlzdE1hcC0+ZW5kKCkgPyBudWxscHRyIDogJml0ZXJhdG9yLT52YWx1ZTsK
LX0KLQotUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRlckZsb3dUaHJlYWQ6OnJlZ2lvbkZv
ckNvbXBvc2l0ZWRMYXllcihSZW5kZXJMYXllciYgY2hpbGRMYXllcikgY29uc3QKLXsKLSAgICBp
ZiAoY2hpbGRMYXllci5yZW5kZXJlcigpLmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250
YWluaW5nQmxvY2soKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoY2hpbGRM
YXllci5yZW5kZXJCb3goKSkgewotICAgICAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uID0g
bnVsbHB0cjsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24gPSBudWxscHRyOwotICAg
ICAgICBpZiAoZ2V0UmVnaW9uUmFuZ2VGb3JCb3goY2hpbGRMYXllci5yZW5kZXJCb3goKSwgc3Rh
cnRSZWdpb24sIGVuZFJlZ2lvbikpCi0gICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQ+KHN0YXJ0UmVnaW9uKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTog
cmVtb3ZlIHRoaXMgd2hlbiB3ZSdsbCBoYXZlIHJlZ2lvbiByYW5nZXMgZm9yIGlubGluZXMgYXMg
d2VsbC4KLSAgICBMYXlvdXRQb2ludCBmbG93VGhyZWFkT2Zmc2V0ID0gZmxvb3JlZExheW91dFBv
aW50KGNoaWxkTGF5ZXIucmVuZGVyZXIoKS5sb2NhbFRvQ29udGFpbmVyUG9pbnQoTGF5b3V0UG9p
bnQoKSwgdGhpcywgQXBwbHlDb250YWluZXJGbGlwKSk7Ci0gICAgcmV0dXJuIGRvd25jYXN0PFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50PihyZWdpb25BdEJsb2NrT2Zmc2V0KDAsIGZsaXBGb3JXcml0
aW5nTW9kZShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZmxvd1RocmVhZE9mZnNldC55KCkg
OiBmbG93VGhyZWFkT2Zmc2V0LngoKSksIHRydWUpKTsKLX0KLQotUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQqIFJlbmRlckZsb3dUaHJlYWQ6OmNhY2hlZFJlZ2lvbkZvckNvbXBvc2l0ZWRMYXllcihS
ZW5kZXJMYXllciYgY2hpbGRMYXllcikgY29uc3QKLXsKLSAgICBpZiAoIW1fbGF5ZXJUb1JlZ2lv
bk1hcCkgewotICAgICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgICAgIEFTU0VSVCht
X2xheWVyc1RvUmVnaW9uTWFwcGluZ3NEaXJ0eSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9
IG1fbGF5ZXJUb1JlZ2lvbk1hcC0+Z2V0KCZjaGlsZExheWVyKTsKLSAgICBBU1NFUlQoIW5hbWVk
Rmxvd0ZyYWdtZW50IHx8IG1fcmVnaW9uTGlzdC5jb250YWlucyhuYW1lZEZsb3dGcmFnbWVudCkp
OwotICAgIHJldHVybiBuYW1lZEZsb3dGcmFnbWVudDsKLX0KLQotdm9pZCBSZW5kZXJGbG93VGhy
ZWFkOjp1cGRhdGVMYXllclRvUmVnaW9uTWFwcGluZ3MoUmVuZGVyTGF5ZXImIGxheWVyLCBMYXll
clRvUmVnaW9uTWFwJiBsYXllclRvUmVnaW9uTWFwLCBSZWdpb25Ub0xheWVyTGlzdE1hcCYgcmVn
aW9uVG9MYXllckxpc3RNYXAsIGJvb2wmIG5lZWRzTGF5ZXJVcGRhdGUpCi17Ci0gICAgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQqIHJlZ2lvbiA9IHJlZ2lvbkZvckNvbXBvc2l0ZWRMYXllcihsYXll
cik7Ci0gICAgaWYgKCFuZWVkc0xheWVyVXBkYXRlKSB7Ci0gICAgICAgIC8vIEZpZ3VyZSBvdXQg
aWYgd2UgbW92ZWQgdGhpcyBsYXllciBmcm9tIGEgcmVnaW9uIHRvIHRoZSBvdGhlci4KLSAgICAg
ICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIHByZXZpb3VzUmVnaW9uID0gY2FjaGVkUmVnaW9u
Rm9yQ29tcG9zaXRlZExheWVyKGxheWVyKTsKLSAgICAgICAgaWYgKHByZXZpb3VzUmVnaW9uICE9
IHJlZ2lvbikKLSAgICAgICAgICAgIG5lZWRzTGF5ZXJVcGRhdGUgPSB0cnVlOwotICAgIH0KLQot
ICAgIGlmICghcmVnaW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllclRvUmVnaW9uTWFw
LnNldCgmbGF5ZXIsIHJlZ2lvbik7Ci0KLSAgICBhdXRvIGl0ZXJhdG9yID0gcmVnaW9uVG9MYXll
ckxpc3RNYXAuZmluZChyZWdpb24pOwotICAgIFJlbmRlckxheWVyTGlzdCYgbGlzdCA9IGl0ZXJh
dG9yID09IHJlZ2lvblRvTGF5ZXJMaXN0TWFwLmVuZCgpID8gcmVnaW9uVG9MYXllckxpc3RNYXAu
c2V0KHJlZ2lvbiwgUmVuZGVyTGF5ZXJMaXN0KCkpLml0ZXJhdG9yLT52YWx1ZSA6IGl0ZXJhdG9y
LT52YWx1ZTsKLSAgICBBU1NFUlQoIWxpc3QuY29udGFpbnMoJmxheWVyKSk7Ci0gICAgbGlzdC5h
cHBlbmQoJmxheWVyKTsKLX0KLQotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjp1cGRhdGVBbGxMYXll
clRvUmVnaW9uTWFwcGluZ3MoKQotewotICAgIGlmICghY29sbGVjdHNHcmFwaGljc0xheWVyc1Vu
ZGVyUmVnaW9ucygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgUmVu
ZGVyRmxvd1RocmVhZCBoYWQgYSB6LWluZGV4IGxheWVyIHVwZGF0ZSwgdGhlbiB3ZSBuZWVkIHRv
IHVwZGF0ZSB0aGUgY29tcG9zaXRlZCBsYXllcnMgdG9vLgotICAgIGJvb2wgbmVlZHNMYXllclVw
ZGF0ZSA9IGxheWVyKCktPmlzRGlydHlSZW5kZXJGbG93VGhyZWFkKCkgfHwgbV9sYXllcnNUb1Jl
Z2lvbk1hcHBpbmdzRGlydHkgfHwgIW1fbGF5ZXJUb1JlZ2lvbk1hcC5nZXQoKTsKLSAgICBsYXll
cigpLT51cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKTsKLQotICAgIExheWVyVG9SZWdpb25NYXAg
bGF5ZXJUb1JlZ2lvbk1hcDsKLSAgICBSZWdpb25Ub0xheWVyTGlzdE1hcCByZWdpb25Ub0xheWVy
TGlzdE1hcDsKLQotICAgIFJlbmRlckxheWVyTGlzdCogbGlzdHNbXSA9IHsgbGF5ZXIoKS0+bmVn
Wk9yZGVyTGlzdCgpLCBsYXllcigpLT5ub3JtYWxGbG93TGlzdCgpLCBsYXllcigpLT5wb3NaT3Jk
ZXJMaXN0KCkgfTsKLSAgICBmb3IgKHNpemVfdCBsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBz
aXplb2YobGlzdHMpIC8gc2l6ZW9mKGxpc3RzWzBdKTsgKytsaXN0SW5kZXgpIHsKLSAgICAgICAg
aWYgKFJlbmRlckxheWVyTGlzdCogbGlzdCA9IGxpc3RzW2xpc3RJbmRleF0pIHsKLSAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwLCBsaXN0U2l6ZSA9IGxpc3QtPnNpemUoKTsgaSA8IGxpc3RT
aXplOyArK2kpCi0gICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJUb1JlZ2lvbk1hcHBpbmdzKCps
aXN0LT5hdChpKSwgbGF5ZXJUb1JlZ2lvbk1hcCwgcmVnaW9uVG9MYXllckxpc3RNYXAsIG5lZWRz
TGF5ZXJVcGRhdGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG5lZWRzTGF5ZXJVcGRh
dGUpIHsKLSAgICAgICAgaWYgKCFtX2xheWVyVG9SZWdpb25NYXApCi0gICAgICAgICAgICBtX2xh
eWVyVG9SZWdpb25NYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPExheWVyVG9SZWdpb25NYXA+KCk7Ci0g
ICAgICAgIG1fbGF5ZXJUb1JlZ2lvbk1hcC0+c3dhcChsYXllclRvUmVnaW9uTWFwKTsKLQotICAg
ICAgICBpZiAoIW1fcmVnaW9uVG9MYXllckxpc3RNYXApCi0gICAgICAgICAgICBtX3JlZ2lvblRv
TGF5ZXJMaXN0TWFwID0gc3RkOjptYWtlX3VuaXF1ZTxSZWdpb25Ub0xheWVyTGlzdE1hcD4oKTsK
LSAgICAgICAgbV9yZWdpb25Ub0xheWVyTGlzdE1hcC0+c3dhcChyZWdpb25Ub0xheWVyTGlzdE1h
cCk7Ci0gICAgfQotCi0gICAgbV9sYXllcnNUb1JlZ2lvbk1hcHBpbmdzRGlydHkgPSBmYWxzZTsK
LQotICAgIHJldHVybiBuZWVkc0xheWVyVXBkYXRlOwotfQotCi1ib29sIFJlbmRlckZsb3dUaHJl
YWQ6OmNvbGxlY3RzR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSBjb25zdAotewotICAgIC8v
IFdlIG9ubHkgbmVlZCB0byBtYXAgbGF5ZXJzIHRvIHJlZ2lvbnMgZm9yIG5hbWVkIGZsb3cgdGhy
ZWFkcy4KLSAgICAvLyBNdWx0aS1jb2x1bW4gdGhyZWFkcyBhcmUgZGlzcGxheWVkIG9uIHRvcCBv
ZiB0aGUgcmVnaW9ucyBhbmQgZG8gbm90IHJlcXVpcmUKLSAgICAvLyBkaXN0cmlidXRpbmcgdGhl
IGxheWVycy4KLQotICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBSZW5kZXJGbG93VGhyZWFk
Ojp1cGRhdGVMb2dpY2FsV2lkdGgoKQpAQCAtNDI1LDcgKzI3NSw3IEBAIExheW91dFBvaW50IFJl
bmRlckZsb3dUaHJlYWQ6OmFkanVzdGVkUG8KICAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9u
ID0gcmVnaW9uQXRCbG9ja09mZnNldChvYmpDb250YWluaW5nQmxvY2ssIHJlZmVyZW5jZVBvaW50
LnkoKSk7CiAgICAgaWYgKHN0YXJ0UmVnaW9uKSB7CiAgICAgICAgIC8vIFRha2UgaW50byBhY2Nv
dW50IHRoZSBvZmZzZXQgY29vcmRpbmF0ZXMgb2YgdGhlIHJlZ2lvbi4KLSAgICAgICAgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHN0YXJ0UmVnaW9uQm94ID0gaXM8UmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQ+KCpzdGFydFJlZ2lvbikgPyBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oc3RhcnRS
ZWdpb24tPnBhcmVudCgpKSA6IHN0YXJ0UmVnaW9uOworICAgICAgICBSZW5kZXJCb3hNb2RlbE9i
amVjdCogc3RhcnRSZWdpb25Cb3ggPSBzdGFydFJlZ2lvbjsKICAgICAgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGN1cnJPYmplY3QgPSBzdGFydFJlZ2lvbkJveDsKICAgICAgICAgUmVuZGVyQm94
TW9kZWxPYmplY3QqIGN1cnJPZmZzZXRQYXJlbnQ7CiAgICAgICAgIHdoaWxlICgoY3Vyck9mZnNl
dFBhcmVudCA9IGN1cnJPYmplY3QtPm9mZnNldFBhcmVudCgpKSkgewpAQCAtNzEzLDggKzU2Myw2
IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hSZWcKICAgICAgICAgICAg
IGluc2lkZU5ld1JlZ2lvblJhbmdlID0gdHJ1ZTsKIAogICAgICAgICBpZiAoIShpbnNpZGVPbGRS
ZWdpb25SYW5nZSAmJiBpbnNpZGVOZXdSZWdpb25SYW5nZSkpIHsKLSAgICAgICAgICAgIGlmIChp
czxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbikpCi0gICAgICAgICAgICAgICAgZG93
bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZWdpb24pLmNsZWFyT2JqZWN0U3R5bGVJ
blJlZ2lvbihib3gpOwogICAgICAgICAgICAgaWYgKHJlZ2lvbi0+cmVuZGVyQm94UmVnaW9uSW5m
bygmYm94KSkKICAgICAgICAgICAgICAgICByZWdpb24tPnJlbW92ZVJlbmRlckJveFJlZ2lvbklu
Zm8oYm94KTsKICAgICAgICAgfQpAQCAtOTEyLDE5ICs3NjAsNiBAQCBib29sIFJlbmRlckZsb3dU
aHJlYWQ6Om9iamVjdEluRmxvd1JlZ2lvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0jaWZuZGVm
IE5ERUJVRwotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjppc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9u
c0NvdW50Q29uc2lzdGVudCgpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgYXV0b0xvZ2ljYWxIZWln
aHRSZWdpb25zID0gMDsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlz
dCkgewotICAgICAgICBpZiAocmVnaW9uLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKQotICAgICAg
ICAgICAgYXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKys7Ci0gICAgfQotCi0gICAgcmV0dXJuIGF1
dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucyA9PSBtX2F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50
OwotfQotI2VuZGlmCi0KICNpZiAhQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT05fRElT
QUJMRUQKIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6Y2hlY2tMaW5lc0NvbnNpc3RlbmN5KGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgcmVtb3ZlZEJsb2NrKSBjb25zdAogewpAQCAtOTY0LDM4ICs3OTks
NiBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OndpbGxCZURlc3Ryb3llZCgpCiAgICAgUmVuZGVy
QmxvY2tGbG93Ojp3aWxsQmVEZXN0cm95ZWQoKTsKIH0KIAotLy8gRHVyaW5nIHRoZSBtZWFzdXJl
IGNvbnRlbnQgbGF5b3V0IHBoYXNlIG9mIHRoZSBuYW1lZCBmbG93IHRoZSByZWdpb25zIGFyZSBp
bml0aWFsaXplZCB3aXRoIGEgaGVpZ2h0IGVxdWFsIHRvIHRoZWlyIG1heC1oZWlnaHQuCi0vLyBU
aGlzIHdheSB1bmZvcmNlZCBicmVha3MgYXJlIGF1dG9tYXRpY2FsbHkgcGxhY2VkIHdoZW4gYSBy
ZWdpb24gaXMgZnVsbCBhbmQgdGhlIGNvbnRlbnQgaGVpZ2h0L3Bvc2l0aW9uIGNvcnJlY3RseSBl
c3RpbWF0ZWQuCi0vLyBBbHNvLCB0aGUgcmVnaW9uIHdoZXJlIGEgZm9yY2VkIGJyZWFrIGZhbGxz
IGlzIGV4YWN0bHkgdGhlIHJlZ2lvbiBmb3VuZCBhdCB0aGUgZm9yY2VkIGJyZWFrIG9mZnNldCBp
bnNpZGUgdGhlIGZsb3cgY29udGVudC4KLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6aW5pdGlhbGl6
ZVJlZ2lvbnNDb21wdXRlZEF1dG9IZWlnaHQoUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbikKLXsK
LSAgICBBU1NFUlQoaW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkpOwotICAgIGlmICghaGFz
QXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAo
YXV0byByZWdpb25JdGVyID0gc3RhcnRSZWdpb24gPyBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJl
Z2lvbikgOiBtX3JlZ2lvbkxpc3QuYmVnaW4oKSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBy
ZWdpb25JdGVyICE9IGVuZDsgKytyZWdpb25JdGVyKSB7Ci0gICAgICAgIFJlbmRlclJlZ2lvbiYg
cmVnaW9uID0gKipyZWdpb25JdGVyOwotICAgICAgICBpZiAocmVnaW9uLmhhc0F1dG9Mb2dpY2Fs
SGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIG5hbWVkRmxvd0ZyYWdtZW50ID0gZG93bmNh
c3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KHJlZ2lvbik7Ci0gICAgICAgICAgICBuYW1lZEZs
b3dGcmFnbWVudC5zZXRDb21wdXRlZEF1dG9IZWlnaHQobmFtZWRGbG93RnJhZ21lbnQubWF4UGFn
ZUxvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyRmxv
d1RocmVhZDo6bWFya0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0ZvckxheW91dCgpCi17Ci0gICAg
QVNTRVJUKGhhc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygpKTsKLQotICAgIGZvciAoYXV0byYg
cmVnaW9uIDogbV9yZWdpb25MaXN0KSB7Ci0gICAgICAgIGlmICghcmVnaW9uLT5oYXNBdXRvTG9n
aWNhbEhlaWdodCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gRklYTUU6
IFdlIG5lZWQgdG8gZmluZCBhIHdheSB0byBhdm9pZCBtYXJraW5nIGFsbCB0aGUgcmVnaW9ucyBh
bmNlc3RvcnMgZm9yIGxheW91dAotICAgICAgICAvLyBhcyB3ZSBhcmUgYWxyZWFkeSBpbnNpZGUg
bGF5b3V0LgotICAgICAgICByZWdpb24tPnNldE5lZWRzTGF5b3V0KCk7Ci0gICAgfQotfQotCiB2
b2lkIFJlbmRlckZsb3dUaHJlYWQ6Om1hcmtSZWdpb25zRm9yT3ZlcmZsb3dMYXlvdXRJZk5lZWRl
ZCgpCiB7CiAgICAgaWYgKCFoYXNSZWdpb25zKCkpCkBAIC0xMDA3LDE2ICs4MTAsMTIgQEAgdm9p
ZCBSZW5kZXJGbG93VGhyZWFkOjptYXJrUmVnaW9uc0Zvck92ZQogCiB2b2lkIFJlbmRlckZsb3dU
aHJlYWQ6OnVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QoY29uc3QgUmVuZGVyUmVn
aW9uKiBsYXN0UmVnaW9uV2l0aENvbnRlbnQpCiB7Ci0gICAgQVNTRVJUKCFsYXN0UmVnaW9uV2l0
aENvbnRlbnQgfHwgKGluTWVhc3VyZUNvbnRlbnRMYXlvdXRQaGFzZSgpICYmIGhhc0F1dG9Mb2dp
Y2FsSGVpZ2h0UmVnaW9ucygpKSk7CisgICAgQVNTRVJUKCFsYXN0UmVnaW9uV2l0aENvbnRlbnQp
OwogICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDA7CiAgICAgYm9vbCBlbXB0eVJlZ2lv
bnNTZWdtZW50ID0gZmFsc2U7CiAgICAgLy8gRklYTUU6IE9wdGltaXplIG5vdCB0byBjbGVhciB0
aGUgaW50ZXJ2YWwgYWxsIHRoZSB0aW1lLiBUaGlzIGltcGxpZXMgbWFudWFsbHkgbWFuYWdpbmcg
dGhlIHRyZWUgbm9kZXMgbGlmZWN5Y2xlLgogICAgIG1fcmVnaW9uSW50ZXJ2YWxUcmVlLmNsZWFy
KCk7CiAgICAgZm9yIChhdXRvJiByZWdpb24gOiBtX3JlZ2lvbkxpc3QpIHsKLSAgICAgICAgLy8g
SWYgd2UgZmluZCBhbiBlbXB0eSBhdXRvLWhlaWdodCByZWdpb24sIGNsZWFyIHRoZSBjb21wdXRl
ZEF1dG9IZWlnaHQgdmFsdWUuCi0gICAgICAgIGlmIChlbXB0eVJlZ2lvbnNTZWdtZW50ICYmIHJl
Z2lvbi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKS5jbGVhckNvbXB1dGVkQXV0b0hlaWdodCgpOwot
CiAgICAgICAgIExheW91dFVuaXQgcmVnaW9uTG9naWNhbFdpZHRoID0gcmVnaW9uLT5wYWdlTG9n
aWNhbFdpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgcmVnaW9uTG9naWNhbEhlaWdodCA9IHN0
ZDo6bWluPExheW91dFVuaXQ+KFJlbmRlckZsb3dUaHJlYWQ6Om1heExvZ2ljYWxIZWlnaHQoKSAt
IGxvZ2ljYWxIZWlnaHQsIHJlZ2lvbi0+bG9naWNhbEhlaWdodE9mQWxsRmxvd1RocmVhZENvbnRl
bnQoKSk7CiAKQEAgLTEwMzksNyArODM4LDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjp1cGRh
dGVSZWdpb25zRmxvdwogLy8gRXZlbiBpZiB3ZSByZXF1aXJlIHRoZSBicmVhayB0byBvY2N1ciBh
dCBvZmZzZXRCcmVha0luRmxvd1RocmVhZCwgYmVjYXVzZSByZWdpb25zIG1heSBoYXZlIG1pbi9t
YXgtaGVpZ2h0IHZhbHVlcywKIC8vIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGJyZWFrIHdpbGwg
b2NjdXIgYXQgYSBkaWZmZXJlbnQgb2Zmc2V0IHRoYW4gdGhlIG9yaWdpbmFsIG9uZSByZXF1aXJl
ZC4KIC8vIG9mZnNldEJyZWFrQWRqdXN0bWVudCBtZWFzdXJlcyB0aGUgZGlmZmVyZW50IGJldHdl
ZW4gdGhlIHJlcXVlc3RlZCBicmVhayBvZmZzZXQgYW5kIHRoZSBjdXJyZW50IGJyZWFrIG9mZnNl
dC4KLWJvb2wgUmVuZGVyRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJlYWsoY29uc3QgUmVu
ZGVyQmxvY2sqIGJsb2NrLCBMYXlvdXRVbml0IG9mZnNldEJyZWFrSW5GbG93VGhyZWFkLCBSZW5k
ZXJCb3gqIGJyZWFrQ2hpbGQsIGJvb2wgaXNCZWZvcmUsIExheW91dFVuaXQqIG9mZnNldEJyZWFr
QWRqdXN0bWVudCkKK2Jvb2wgUmVuZGVyRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJlYWso
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBMYXlvdXRVbml0IG9mZnNldEJyZWFrSW5GbG93VGhy
ZWFkLCBSZW5kZXJCb3gqLCBib29sLCBMYXlvdXRVbml0KiBvZmZzZXRCcmVha0FkanVzdG1lbnQp
CiB7CiAgICAgLy8gV2UgdGFrZSBicmVha3MgaW50byBhY2NvdW50IGZvciBoZWlnaHQgY29tcHV0
YXRpb24gZm9yIGF1dG8gbG9naWNhbCBoZWlnaHQgcmVnaW9ucwogICAgIC8vIG9ubHkgaW4gdGhl
IGxheW91dCBwaGFzZSBpbiB3aGljaCB3ZSBsYXkgb3V0IHRoZSBmbG93cyB0aHJlYWRzIHVuY29u
c3RyYWluZWQKQEAgLTEwNDgsMjEgKzg0Nyw5IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6YWRk
Rm9yY2VkUmVnaW9uQnIKICAgICBpZiAoIWluTWVhc3VyZUNvbnRlbnRMYXlvdXRQaGFzZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBCcmVha3MgY2FuIGNvbWUgYmVmb3JlIG9y
IGFmdGVyIHNvbWUgb2JqZWN0cy4gV2UgbmVlZCB0byB0cmFjayB0aGVzZSBvYmplY3RzLCBzbyB0
aGF0IGlmIHdlIGdldAotICAgIC8vIG11bHRpcGxlIGJyZWFrcyBmb3IgdGhlIHNhbWUgb2JqZWN0
IChmb3IgZXhhbXBsZSBiZWNhdXNlIG9mIG11bHRpcGxlIGxheW91dHMgb24gdGhlIHNhbWUgb2Jq
ZWN0KSwKLSAgICAvLyB3ZSBuZWVkIHRvIGludmFsaWRhdGUgZXZlcnkgb3RoZXIgcmVnaW9uIGFm
dGVyIHRoZSBvbGQgb25lIGFuZCBzdGFydCBjb21wdXRpbmcgZnJvbSBmcmVzaC4KLSAgICBSZW5k
ZXJCb3hUb1JlZ2lvbk1hcCYgbWFwVG9Vc2UgPSBpc0JlZm9yZSA/IG1fYnJlYWtCZWZvcmVUb1Jl
Z2lvbk1hcCA6IG1fYnJlYWtBZnRlclRvUmVnaW9uTWFwOwotICAgIGF1dG8gaXRlciA9IG1hcFRv
VXNlLmZpbmQoYnJlYWtDaGlsZCk7Ci0gICAgaWYgKGl0ZXIgIT0gbWFwVG9Vc2UuZW5kKCkpIHsK
LSAgICAgICAgYXV0byByZWdpb25JdGVyID0gbV9yZWdpb25MaXN0LmZpbmQoaXRlci0+dmFsdWUp
OwotICAgICAgICBBU1NFUlQocmVnaW9uSXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCkpOwotICAg
ICAgICBBU1NFUlQoKCpyZWdpb25JdGVyKS0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSk7Ci0gICAg
ICAgIGluaXRpYWxpemVSZWdpb25zQ29tcHV0ZWRBdXRvSGVpZ2h0KCpyZWdpb25JdGVyKTsKLQot
ICAgICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgcmVnaW9ucyBmbG93IHRocmVhZCBwb3J0
aW9uIHJlY3QgYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gcHJvY2VzcwotICAgICAgICAvLyBhIGJy
ZWFrIG9uIHRoZXNlIHJlZ2lvbnMuCi0gICAgICAgIHVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9y
dGlvblJlY3QoKTsKLSAgICB9CisgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIHJlZ2lvbnMg
ZmxvdyB0aHJlYWQgcG9ydGlvbiByZWN0IGJlY2F1c2Ugd2UgYXJlIGdvaW5nIHRvIHByb2Nlc3MK
KyAgICAvLyBhIGJyZWFrIG9uIHRoZXNlIHJlZ2lvbnMuCisgICAgdXBkYXRlUmVnaW9uc0Zsb3dU
aHJlYWRQb3J0aW9uUmVjdCgpOwogCiAgICAgLy8gU2ltdWxhdGUgYSByZWdpb24gYnJlYWsgYXQg
b2Zmc2V0QnJlYWtJbkZsb3dUaHJlYWQuIElmIGl0IHBvaW50cyBpbnNpZGUgYW4gYXV0byBsb2dp
Y2FsIGhlaWdodCByZWdpb24sCiAgICAgLy8gdGhlbiBpdCBkZXRlcm1pbmVzIHRoZSByZWdpb24g
Y29tcHV0ZWQgYXV0byBoZWlnaHQuCkBAIC0xMDcwLDU4ICs4NTcsMTQgQEAgYm9vbCBSZW5kZXJG
bG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcgogICAgIGlmICghcmVnaW9uKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIGxhc3RCcmVha0FmdGVyQ29udGVudCA9IGJyZWFrQ2hp
bGQgPT0gdGhpczsKLSAgICBib29sIGhhc0NvbXB1dGVkQXV0b0hlaWdodCA9IGZhbHNlOwotCiAg
ICAgTGF5b3V0VW5pdCBjdXJyZW50UmVnaW9uT2Zmc2V0SW5GbG93VGhyZWFkID0gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IHJlZ2lvbi0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkueSgpIDog
cmVnaW9uLT5mbG93VGhyZWFkUG9ydGlvblJlY3QoKS54KCk7Ci0gICAgTGF5b3V0VW5pdCBvZmZz
ZXRCcmVha0luQ3VycmVudFJlZ2lvbiA9IG9mZnNldEJyZWFrSW5GbG93VGhyZWFkIC0gY3VycmVu
dFJlZ2lvbk9mZnNldEluRmxvd1RocmVhZDsKLQotICAgIGlmIChyZWdpb24tPmhhc0F1dG9Mb2dp
Y2FsSGVpZ2h0KCkpIHsKLSAgICAgICAgYXV0byYgbmFtZWRGbG93RnJhZ21lbnQgPSBkb3duY2Fz
dDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbik7Ci0KLSAgICAgICAgLy8gQSBmb3Jj
ZWQgYnJlYWsgY2FuIGFwcGVhciBvbmx5IGluIGFuIGF1dG8taGVpZ2h0IHJlZ2lvbiB0aGF0IGRp
ZG4ndCBoYXZlIGEgZm9yY2VkIGJyZWFrIGJlZm9yZS4KLSAgICAgICAgLy8gVGhpcyBBU1NFUlQg
aXMgYSBnb29kLWVub3VnaCBoZXVyaXN0aWMgdG8gdmVyaWZ5IHRoZSBhYm92ZSBjb25kaXRpb24u
Ci0gICAgICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudC5tYXhQYWdlTG9naWNhbEhlaWdodCgp
ID09IG5hbWVkRmxvd0ZyYWdtZW50LmNvbXB1dGVkQXV0b0hlaWdodCgpKTsKLQotICAgICAgICBt
YXBUb1VzZS5zZXQoYnJlYWtDaGlsZCwgJm5hbWVkRmxvd0ZyYWdtZW50KTsKLQotICAgICAgICBo
YXNDb21wdXRlZEF1dG9IZWlnaHQgPSB0cnVlOwogCi0gICAgICAgIC8vIENvbXB1dGUgdGhlIHJl
Z2lvbiBoZWlnaHQgcHJldGVuZGluZyB0aGF0IHRoZSBvZmZzZXRCcmVha0luQ3VycmVudFJlZ2lv
biBpcyB0aGUgbG9naWNhbEhlaWdodCBmb3IgdGhlIGF1dG8taGVpZ2h0IHJlZ2lvbi4KLSAgICAg
ICAgTGF5b3V0VW5pdCByZWdpb25Db21wdXRlZEF1dG9IZWlnaHQgPSBuYW1lZEZsb3dGcmFnbWVu
dC5jb25zdHJhaW5Db250ZW50Qm94TG9naWNhbEhlaWdodEJ5TWluTWF4KG9mZnNldEJyZWFrSW5D
dXJyZW50UmVnaW9uLCBzdGQ6Om51bGxvcHQpOwotCi0gICAgICAgIC8vIFRoZSBuZXcgaGVpZ2h0
IG9mIHRoaXMgcmVnaW9uIG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiB0aGUgaW5pdGlhbCB2YWx1
ZSwgdGhlIG1heCBoZWlnaHQuIEEgZm9yY2VkIGJyZWFrIGlzIHRoZSBvbmx5IHdheSB0byBjaGFu
Z2UgdGhlIGluaXRpYWwKLSAgICAgICAgLy8gaGVpZ2h0IG9mIGFuIGF1dG8taGVpZ2h0IHJlZ2lv
biBiZXNpZGVzIGNvbnRlbnQgZW5kaW5nLgotICAgICAgICBBU1NFUlQocmVnaW9uQ29tcHV0ZWRB
dXRvSGVpZ2h0IDw9IG5hbWVkRmxvd0ZyYWdtZW50Lm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkpOwot
Ci0gICAgICAgIG5hbWVkRmxvd0ZyYWdtZW50LnNldENvbXB1dGVkQXV0b0hlaWdodChyZWdpb25D
b21wdXRlZEF1dG9IZWlnaHQpOwotCi0gICAgICAgIGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dU
aHJlYWQgKz0gcmVnaW9uQ29tcHV0ZWRBdXRvSGVpZ2h0OwotICAgIH0gZWxzZQotICAgICAgICBj
dXJyZW50UmVnaW9uT2Zmc2V0SW5GbG93VGhyZWFkICs9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyByZWdpb24tPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLmhlaWdodCgpIDogcmVnaW9uLT5m
bG93VGhyZWFkUG9ydGlvblJlY3QoKS53aWR0aCgpOwotCi0gICAgLy8gSWYgdGhlIGJyZWFrIHdh
cyBmb3VuZCBpbnNpZGUgYW4gYXV0by1oZWlnaHQgcmVnaW9uIGl0cyBzaXplIGNoYW5nZWQgc28g
d2UgbmVlZCB0byByZWNvbXB1dGUgdGhlIGZsb3cgdGhyZWFkIHBvcnRpb24gcmVjdGFuZ2xlcy4K
LSAgICAvLyBBbHNvLCBpZiB0aGlzIGlzIHRoZSBsYXN0IGJyZWFrIGFmdGVyIHRoZSBjb250ZW50
IHdlIG5lZWQgdG8gY2xlYXIgdGhlIGNvbXB1dGVkQXV0b0hlaWdodCB2YWx1ZSBvbiB0aGUgbGFz
dCBlbXB0eSByZWdpb25zLgotICAgIGlmIChoYXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKSAm
JiBsYXN0QnJlYWtBZnRlckNvbnRlbnQpCi0gICAgICAgIHVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFk
UG9ydGlvblJlY3QocmVnaW9uKTsKLSAgICBlbHNlIGlmIChoYXNDb21wdXRlZEF1dG9IZWlnaHQp
Ci0gICAgICAgIHVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QoKTsKKyAgICBjdXJy
ZW50UmVnaW9uT2Zmc2V0SW5GbG93VGhyZWFkICs9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyByZWdpb24tPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLmhlaWdodCgpIDogcmVnaW9uLT5mbG93
VGhyZWFkUG9ydGlvblJlY3QoKS53aWR0aCgpOwogCiAgICAgaWYgKG9mZnNldEJyZWFrQWRqdXN0
bWVudCkKICAgICAgICAgKm9mZnNldEJyZWFrQWRqdXN0bWVudCA9IHN0ZDo6bWF4PExheW91dFVu
aXQ+KDAsIGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dUaHJlYWQgLSBvZmZzZXRCcmVha0luRmxv
d1RocmVhZCk7CiAKLSAgICByZXR1cm4gaGFzQ29tcHV0ZWRBdXRvSGVpZ2h0OwotfQotCi12b2lk
IFJlbmRlckZsb3dUaHJlYWQ6OmluY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygpCi17
Ci0gICAgKyttX2F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50OwotfQotCi12b2lkIFJlbmRl
ckZsb3dUaHJlYWQ6OmRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygpCi17Ci0gICAg
QVNTRVJUKG1fYXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnQgPiAwKTsKLSAgICAtLW1fYXV0
b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnQ7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lk
IFJlbmRlckZsb3dUaHJlYWQ6OmNvbGxlY3RMYXllckZyYWdtZW50cyhMYXllckZyYWdtZW50cyYg
bGF5ZXJGcmFnbWVudHMsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0
IExheW91dFJlY3QmIGRpcnR5UmVjdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbG93VGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsb3dUaHJlYWQuaAkocmV2aXNpb24gMjIyMjYzKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3
LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3VycmVudFJlbmRlclJlZ2lvbk1h
aW50YWluZXI7CiBjbGFzcyBSZW5kZXJGbG93VGhyZWFkOwotY2xhc3MgUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFJlbmRlclJlZ2lvbjsKIGNsYXNz
IFJvb3RJbmxpbmVCb3g7CiAKIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVuZGVyUmVnaW9uKj4gUmVu
ZGVyUmVnaW9uTGlzdDsKIHR5cGVkZWYgVmVjdG9yPFJlbmRlckxheWVyKj4gUmVuZGVyTGF5ZXJM
aXN0OwotdHlwZWRlZiBIYXNoTWFwPFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiwgUmVuZGVyTGF5
ZXJMaXN0PiBSZWdpb25Ub0xheWVyTGlzdE1hcDsKLXR5cGVkZWYgSGFzaE1hcDxSZW5kZXJMYXll
ciosIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Kj4gTGF5ZXJUb1JlZ2lvbk1hcDsKIHR5cGVkZWYg
SGFzaE1hcDxjb25zdCBSb290SW5saW5lQm94KiwgUmVuZGVyUmVnaW9uKj4gQ29udGFpbmluZ1Jl
Z2lvbk1hcDsKIAogLy8gUmVuZGVyRmxvd1RocmVhZCBpcyB1c2VkIHRvIGNvbGxlY3QgYWxsIHRo
ZSByZW5kZXIgb2JqZWN0cyB0aGF0IHBhcnRpY2lwYXRlIGluIGEKQEAgLTE0Miw3ICsxMzksNiBA
QCBwdWJsaWM6CiAgICAgLy8gQ2hlY2sgaWYgdGhlIG9iamVjdCBzaG91bGQgYmUgcGFpbnRlZCBp
biB0aGlzIHJlZ2lvbiBhbmQgaWYgdGhlIHJlZ2lvbiBpcyBwYXJ0IG9mIHRoaXMgZmxvdyB0aHJl
YWQuCiAgICAgYm9vbCBvYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbihjb25zdCBSZW5k
ZXJPYmplY3QqLCBjb25zdCBSZW5kZXJSZWdpb24qKSBjb25zdDsKIAotICAgIHZvaWQgbWFya0F1
dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0ZvckxheW91dCgpOwogICAgIHZvaWQgbWFya1JlZ2lvbnNG
b3JPdmVyZmxvd0xheW91dElmTmVlZGVkKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYWRkRm9yY2Vk
UmVnaW9uQnJlYWsoY29uc3QgUmVuZGVyQmxvY2sqLCBMYXlvdXRVbml0LCBSZW5kZXJCb3gqIGJy
ZWFrQ2hpbGQsIGJvb2wgaXNCZWZvcmUsIExheW91dFVuaXQqIG9mZnNldEJyZWFrQWRqdXN0bWVu
dCA9IDApOwpAQCAtMTUxLDE0ICsxNDcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlz
UGFnZUxvZ2ljYWxIZWlnaHRLbm93bigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICBib29s
IHBhZ2VMb2dpY2FsU2l6ZUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VMb2dpY2FsU2l6
ZUNoYW5nZWQ7IH0KIAotICAgIGJvb2wgaGFzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCkgY29u
c3QgeyBBU1NFUlQoaXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudENvbnNpc3RlbnQoKSk7
IHJldHVybiBtX2F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50OyB9Ci0gICAgdm9pZCBpbmNy
ZW1lbnRBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKTsKLSAgICB2b2lkIGRlY3JlbWVudEF1dG9M
b2dpY2FsSGVpZ2h0UmVnaW9ucygpOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIGJvb2wgaXNBdXRv
TG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudENvbnNpc3RlbnQoKSBjb25zdDsKLSNlbmRpZgotCiAg
ICAgdm9pZCBjb2xsZWN0TGF5ZXJGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBMYXlv
dXRSZWN0JiBsYXllckJvdW5kaW5nQm94LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpOwog
ICAgIExheW91dFJlY3QgZnJhZ21lbnRzQm91bmRpbmdCb3goY29uc3QgTGF5b3V0UmVjdCYgbGF5
ZXJCb3VuZGluZ0JveCk7CiAKQEAgLTE3OCwyMyArMTY2LDYgQEAgcHVibGljOgogICAgIGJvb2wg
bmVlZHNUd29QaGFzZXNMYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX25lZWRzVHdvUGhhc2VzTGF5
b3V0OyB9CiAgICAgdm9pZCBjbGVhck5lZWRzVHdvUGhhc2VzTGF5b3V0KCkgeyBtX25lZWRzVHdv
UGhhc2VzTGF5b3V0ID0gZmFsc2U7IH0KIAotICAgIC8vIFdoZXRoZXIgYW55IG9mIHRoZSByZWdp
b25zIGhhcyBhIGNvbXBvc2l0aW5nIGRlc2NlbmRhbnQuCi0gICAgYm9vbCBoYXNDb21wb3NpdGlu
Z1JlZ2lvbkRlc2NlbmRhbnQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0TmVlZHNMYXllclRvUmVn
aW9uTWFwcGluZ3NVcGRhdGUoKSB7IG1fbGF5ZXJzVG9SZWdpb25NYXBwaW5nc0RpcnR5ID0gdHJ1
ZTsgfQotICAgIHZvaWQgdXBkYXRlQWxsTGF5ZXJUb1JlZ2lvbk1hcHBpbmdzSWZOZWVkZWQoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fbGF5ZXJzVG9SZWdpb25NYXBwaW5nc0RpcnR5KQotICAgICAg
ICAgICAgdXBkYXRlQWxsTGF5ZXJUb1JlZ2lvbk1hcHBpbmdzKCk7Ci0gICAgfQotCi0gICAgY29u
c3QgUmVuZGVyTGF5ZXJMaXN0KiBnZXRMYXllckxpc3RGb3JSZWdpb24oUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQqKSBjb25zdDsKLQotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZWdpb25G
b3JDb21wb3NpdGVkTGF5ZXIoUmVuZGVyTGF5ZXImKSBjb25zdDsgLy8gQnkgbWVhbnMgb2YgZ2V0
UmVnaW9uUmFuZ2VGb3JCb3ggb3IgcmVnaW9uQXRCbG9ja09mZnNldC4KLSAgICBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCogY2FjaGVkUmVnaW9uRm9yQ29tcG9zaXRlZExheWVyKFJlbmRlckxheWVy
JikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY29sbGVjdHNHcmFwaGljc0xheWVyc1VuZGVy
UmVnaW9ucygpIGNvbnN0OwotCiAgICAgdm9pZCBwdXNoRmxvd1RocmVhZExheW91dFN0YXRlKGNv
bnN0IFJlbmRlck9iamVjdCYpOwogICAgIHZvaWQgcG9wRmxvd1RocmVhZExheW91dFN0YXRlKCk7
CiAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24oY29uc3Qg
UmVuZGVyQmxvY2sqKSBjb25zdDsKQEAgLTI1NSwxNCArMjI2LDYgQEAgcHJvdGVjdGVkOgogICAg
IHZvaWQgdXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdChjb25zdCBSZW5kZXJSZWdp
b24qID0gbnVsbHB0cik7CiAgICAgYm9vbCBzaG91bGRSZXBhaW50KGNvbnN0IExheW91dFJlY3Qm
KSBjb25zdDsKIAotICAgIGJvb2wgdXBkYXRlQWxsTGF5ZXJUb1JlZ2lvbk1hcHBpbmdzKCk7Ci0K
LSAgICAvLyBUcmlnZ2VycyBhIGxheWVycycgdXBkYXRlIGlmIGEgbGF5ZXIgaGFzIG1vdmVkIGZy
b20gYSByZWdpb24gdG8gYW5vdGhlciBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuCi0gICAgdm9pZCB1
cGRhdGVMYXllclRvUmVnaW9uTWFwcGluZ3MoUmVuZGVyTGF5ZXImLCBMYXllclRvUmVnaW9uTWFw
JiwgUmVnaW9uVG9MYXllckxpc3RNYXAmLCBib29sJiBuZWVkc0xheWVyVXBkYXRlKTsKLSAgICB2
b2lkIHVwZGF0ZVJlZ2lvbkZvclJlbmRlckxheWVyKFJlbmRlckxheWVyKiwgTGF5ZXJUb1JlZ2lv
bk1hcCYsIFJlZ2lvblRvTGF5ZXJMaXN0TWFwJiwgYm9vbCYgbmVlZHNMYXllclVwZGF0ZSk7Ci0K
LSAgICB2b2lkIGluaXRpYWxpemVSZWdpb25zQ29tcHV0ZWRBdXRvSGVpZ2h0KFJlbmRlclJlZ2lv
biogPSBudWxscHRyKTsKLQogICAgIGlubGluZSBib29sIGhhc0NhY2hlZE9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFJlZ2lvbihjb25zdCBSZW5kZXJCb3gqKSBjb25zdDsKICAgICBpbmxpbmUg
TGF5b3V0VW5pdCBjYWNoZWRPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24oY29uc3Qg
UmVuZGVyQm94KikgY29uc3Q7CiAgICAgaW5saW5lIHZvaWQgc2V0T2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRlckJveCosIExheW91dFVuaXQpOwpAQCAtMzMwLDEy
ICsyOTMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIFJlbmRlclJlZ2lvbiogbV9yZXN1bHQ7CiAg
ICAgfTsKIAotICAgIC8vIE1hcCBhIGxheWVyIHRvIHRoZSByZWdpb24gaW4gd2hpY2ggdGhlIGxh
eWVyIGlzIHBhaW50ZWQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPExheWVyVG9SZWdpb25NYXA+IG1f
bGF5ZXJUb1JlZ2lvbk1hcDsKLQotICAgIC8vIE1hcCBhIHJlZ2lvbiB0byB0aGUgbGlzdCBvZiBs
YXllcnMgdGhhdCBwYWludCBpbiB0aGF0IHJlZ2lvbi4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVn
aW9uVG9MYXllckxpc3RNYXA+IG1fcmVnaW9uVG9MYXllckxpc3RNYXA7Ci0KICAgICAvLyBNYXAg
YSBsaW5lIHRvIGl0cyBjb250YWluaW5nIHJlZ2lvbi4KICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29u
dGFpbmluZ1JlZ2lvbk1hcD4gbV9saW5lVG9SZWdpb25NYXA7CiAKQEAgLTM1NCw4ICszMTEsNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckJveCosIExheW91
dFVuaXQ+IFJlbmRlckJveFRvT2Zmc2V0TWFwOwogICAgIFJlbmRlckJveFRvT2Zmc2V0TWFwIG1f
Ym94ZXNUb09mZnNldE1hcDsKIAotICAgIHVuc2lnbmVkIG1fYXV0b0xvZ2ljYWxIZWlnaHRSZWdp
b25zQ291bnQ7Ci0KICAgICBSZWdpb25JbnRlcnZhbFRyZWUgbV9yZWdpb25JbnRlcnZhbFRyZWU7
CiAKICAgICBDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lciogbV9jdXJyZW50UmVnaW9uTWFp
bnRhaW5lcjsKQEAgLTM2Niw3ICszMjEsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX3BhZ2VM
b2dpY2FsU2l6ZUNoYW5nZWQgOiAxOwogICAgIHVuc2lnbmVkIG1fbGF5b3V0UGhhc2UgOiAyOwog
ICAgIGJvb2wgbV9uZWVkc1R3b1BoYXNlc0xheW91dCA6IDE7Ci0gICAgYm9vbCBtX2xheWVyc1Rv
UmVnaW9uTWFwcGluZ3NEaXJ0eSA6IDE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDIy
MjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk2LDcgKzk2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllckZpbHRlcklu
Zm8uaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIK
ICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCkBAIC01MjUsMjcgKzUyNCwxNSBA
QCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSCiAgICAgICAgIC8vIGFz
IHRoZSB2YWx1ZSBub3QgdXNpbmcgdGhlIGNhY2hlZCBvZmZzZXQsIGJ1dCB3ZSBjYW4ndCBkdWUg
dG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MDQ4CiAgICAgICAg
IGlmICgoZmxhZ3MgJiBDaGVja0ZvclJlcGFpbnQpICYmIGhhc1JlcGFpbnRMYXlvdXRSZWN0cykg
ewogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcigpLnZpZXcoKS5wcmludGluZygpKSB7Ci0gICAg
ICAgICAgICAgICAgYm9vbCBkaWRSZXBhaW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYg
KG1fcmVwYWludFN0YXR1cyAmIE5lZWRzRnVsbFJlcGFpbnQpIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhZFJlcGFpbnRMYXlvdXRSZWN0cykKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmVyKCkucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIG9sZFJlY3Rz
Lm1fcmVwYWludFJlY3QpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhZFJlcGFpbnRMYXlv
dXRSZWN0cyB8fCBuZXdSZWN0cy5tX3JlcGFpbnRSZWN0ICE9IG9sZFJlY3RzLm1fcmVwYWludFJl
Y3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFoYWRSZXBhaW50TGF5b3V0UmVjdHMgfHwg
bmV3UmVjdHMubV9yZXBhaW50UmVjdCAhPSBvbGRSZWN0cy5tX3JlcGFpbnRSZWN0KQogICAgICAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWlu
dENvbnRhaW5lciwgbmV3UmVjdHMubV9yZXBhaW50UmVjdCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkaWRSZXBhaW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkUmVwYWludEFmdGVyTGF5b3V0KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIHdpbGwgY29udmVydCB0aGlzIHRvIGp1c3QgdGFrZSB0
aGUgb2xkIGFuZCBuZXcgUmVwYWludExheW91dFJlY3RzIG9uY2UKICAgICAgICAgICAgICAgICAg
ICAgLy8gd2UgY2hhbmdlIG90aGVyIGNhbGxlcnMgdG8gdXNlIFJlcGFpbnRMYXlvdXRSZWN0cy4K
ICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRl
ZChyZXBhaW50Q29udGFpbmVyLCBvbGRSZWN0cy5tX3JlcGFpbnRSZWN0LCBvbGRSZWN0cy5tX291
dGxpbmVCb3gsICZuZXdSZWN0cy5tX3JlcGFpbnRSZWN0LCAmbmV3UmVjdHMubV9vdXRsaW5lQm94
KTsKLSAgICAgICAgICAgICAgICAgICAgZGlkUmVwYWludCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGRpZFJlcGFpbnQgJiYgcmVuZGVyZXIoKS5pc1Jl
bmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgd2UganVzdCByZXBhaW50ZWQgYSByZWdpb24sIHdlIG11c3QgYWxzbyByZXBhaW50IHRo
ZSBmbG93IHRocmVhZCBzaW5jZSBpdCBpcyB0aGUgb25lCi0gICAgICAgICAgICAgICAgICAgIC8v
IGRvaW5nIHRoZSBhY3R1YWwgcGFpbnRpbmcgb2YgdGhlIGZsb3dlZCBjb250ZW50LgotICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCYgcmVnaW9uID0gKmRvd25jYXN0
PFJlbmRlckJsb2NrRmxvdz4ocmVuZGVyZXIoKSkucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2lvbi5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZWdpb24uZmxvd1RocmVhZCgpLT5sYXllcigpLT5yZXBhaW50SW5jbHVkaW5n
RGVzY2VuZGFudHMoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTE2OTIsMjQgKzE2NzksNiBAQCBlbnVtIFRyYW5zcGFyZW5jeUNsaXBCb3hNb2RlIHsK
IAogc3RhdGljIExheW91dFJlY3QgdHJhbnNwYXJlbmN5Q2xpcEJveChjb25zdCBSZW5kZXJMYXll
ciYsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFRyYW5zcGFyZW5jeUNsaXBCb3hCZWhh
dmlvciwgVHJhbnNwYXJlbmN5Q2xpcEJveE1vZGUsIFBhaW50QmVoYXZpb3IgPSAwKTsKIAotc3Rh
dGljIHZvaWQgZXhwYW5kQ2xpcFJlY3RGb3JSZWdpb25BbmRSZWZsZWN0aW9uKExheW91dFJlY3Qm
IGNsaXBSZWN0LCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyKiBy
b290TGF5ZXIsCi0gICAgVHJhbnNwYXJlbmN5Q2xpcEJveEJlaGF2aW9yIHRyYW5zcGFyZW5jeUJl
aGF2aW9yLCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IpCi17Ci0gICAgLy8gSWYgdGhpcyBp
cyBhIHJlZ2lvbiwgdGhlbiB0aGUgcGFpbnRpbmcgaXMgYWN0dWFsbHkgZG9uZSBieSBpdHMgZmxv
dyB0aHJlYWQncyBsYXllci4KLSAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5pc1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpIHsKLSAgICAgICAgUmVuZGVyQmxvY2tGbG93JiByZWdp
b25Db250YWluZXIgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KGxheWVyLnJlbmRlcmVyKCkp
OwotICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCYgcmVnaW9uID0gKnJlZ2lvbkNvbnRh
aW5lci5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAgICAgICBSZW5kZXJMYXllciogZmxv
d1RocmVhZExheWVyID0gcmVnaW9uLmZsb3dUaHJlYWQoKS0+bGF5ZXIoKTsKLSAgICAgICAgaWYg
KGZsb3dUaHJlYWRMYXllciAmJiAoIWxheWVyLnJlZmxlY3Rpb24oKSB8fCBsYXllci5yZWZsZWN0
aW9uTGF5ZXIoKSAhPSBmbG93VGhyZWFkTGF5ZXIpKSB7Ci0gICAgICAgICAgICBMYXlvdXRSZWN0
IGZsb3dUaHJlYWRDbGlwUmVjdCA9IHRyYW5zcGFyZW5jeUNsaXBCb3goKmZsb3dUaHJlYWRMYXll
ciwgcm9vdExheWVyLCB0cmFuc3BhcmVuY3lCZWhhdmlvciwgRGVzY2VuZGFudHNPZlRyYW5zcGFy
ZW5jeUNsaXBCb3gsIHBhaW50QmVoYXZpb3IpOwotICAgICAgICAgICAgTGF5b3V0U2l6ZSBtb3Zl
T2Zmc2V0ID0gKHJlZ2lvbkNvbnRhaW5lci5jb250ZW50Qm94UmVjdCgpLmxvY2F0aW9uKCkgKyBs
YXllci5vZmZzZXRGcm9tQW5jZXN0b3IoZmxvd1RocmVhZExheWVyKSkgLSByZWdpb24uZmxvd1Ro
cmVhZFBvcnRpb25SZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgICAgIGZsb3dUaHJlYWRDbGlw
UmVjdC5tb3ZlKG1vdmVPZmZzZXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjbGlwUmVj
dC51bml0ZShmbG93VGhyZWFkQ2xpcFJlY3QpOwotICAgICAgICB9Ci0gICAgfQotfQotCiBzdGF0
aWMgdm9pZCBleHBhbmRDbGlwUmVjdEZvckRlc2NlbmRhbnRzQW5kUmVmbGVjdGlvbihMYXlvdXRS
ZWN0JiBjbGlwUmVjdCwgY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXll
ciogcm9vdExheWVyLAogICAgIFRyYW5zcGFyZW5jeUNsaXBCb3hCZWhhdmlvciB0cmFuc3BhcmVu
Y3lCZWhhdmlvciwgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yKQogewpAQCAtMTcyNCw4ICsx
NjkzLDYgQEAgc3RhdGljIHZvaWQgZXhwYW5kQ2xpcFJlY3RGb3JEZXNjZW5kYW50cwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgZXhwYW5kQ2xpcFJlY3RGb3JSZWdpb25BbmRSZWZsZWN0aW9uKGNs
aXBSZWN0LCBsYXllciwgcm9vdExheWVyLCB0cmFuc3BhcmVuY3lCZWhhdmlvciwgcGFpbnRCZWhh
dmlvcik7Ci0KICAgICAvLyBJZiB3ZSBoYXZlIGEgcmVmbGVjdGlvbiwgdGhlbiB3ZSBuZWVkIHRv
IGFjY291bnQgZm9yIHRoYXQgd2hlbiB3ZSBwdXNoIHRoZSBjbGlwLiAgUmVmbGVjdCBvdXIgZW50
aXJlCiAgICAgLy8gY3VycmVudCB0cmFuc3BhcmVuY3lDbGlwQm94IHRvIGNhdGNoIGFsbCBjaGls
ZCBsYXllcnMuCiAgICAgLy8gRklYTUU6IEFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIHdpbGwgZXZl
bnR1YWxseSB3YW50IHRvIGRvIHNvbWV0aGluZyBzbWFydCBoZXJlIHRvIGF2b2lkIGluY29ycG9y
YXRpbmcgdGhpcwpAQCAtMzk3MiwxNSArMzkzOSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
TGF5ZXIoR3JhcGhpY3NDb24KICAgICBpZiAoIXJlbmRlcmVyKCkub3BhY2l0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICAvLyBEb24ndCBwYWludCB0aGUgbGF5ZXIgaWYgdGhlIHJlbmRlcmVy
IGRvZXNuJ3QgYmVsb25nIHRvIHRoaXMgcmVnaW9uLgotICAgIC8vIFRoaXMgaXMgdHJ1ZSBhcyBs
b25nIGFzIHdlIGNsYW1wIHRoZSByYW5nZSBvZiBhIGJveCB0byBpdHMgY29udGFpbmluZyBibG9j
ayByYW5nZS4KLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQg
PSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKLSAgICBpZiAobmFtZWRGbG93RnJh
Z21lbnQpIHsKLSAgICAgICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50LT5pc1ZhbGlkKCkpOwot
ICAgICAgICBpZiAoIW5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCktPm9iamVjdFNob3Vs
ZEZyYWdtZW50SW5GbG93UmVnaW9uKCZyZW5kZXJlcigpLCBuYW1lZEZsb3dGcmFnbWVudCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKHBhaW50c1dpdGhUcmFuc3BhcmVu
Y3kocGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IpKQogICAgICAgICBwYWludEZsYWdzIHw9IFBh
aW50TGF5ZXJIYXZlVHJhbnNwYXJlbmN5OwogCkBAIC00Mjc4LDEyICs0MjM2LDYgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYQogICAgIC8vIEVuc3VyZSBvdXIgbGlz
dHMgYXJlIHVwLXRvLWRhdGUuCiAgICAgdXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CiAKLSAg
ICAvLyBEbyBub3QgcGFpbnQgdGhlIGZpeGVkIHBvc2l0aW9uZWQgbGF5ZXJzIGlmIHRoZSBwYWlu
dCByb290IGlzIHRoZSBuYW1lZCBmbG93LAotICAgIC8vIGlmIHRoZSBwYWludCBvcmlnaW5hdGVz
IGF0IHJlZ2lvbiBsZXZlbC4KLSAgICBpZiAocGFpbnRpbmdJbmZvLnJvb3RMYXllci0+aXNPdXRP
ZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkKLSAgICAgICAgJiYgcmVuZGVyZXIoKS5maXhlZFBvc2l0
aW9uZWRXaXRoTmFtZWRGbG93Q29udGFpbmluZ0Jsb2NrKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIExheW91dFNpemUgb2Zmc2V0RnJvbVJvb3QgPSBvZmZzZXRGcm9tQW5jZXN0b3IocGFpbnRp
bmdJbmZvLnJvb3RMYXllcik7CiAgICAgTGF5b3V0UmVjdCByb290UmVsYXRpdmVCb3VuZHM7CiAg
ICAgYm9vbCByb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCA9IGZhbHNlOwpAQCAtNDQ5NCwxMSAr
NDQ0Niw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGlzdChWZWN0b3I8UmVuZGUKICAgICBM
YXllckxpc3RNdXRhdGlvbkRldGVjdG9yIG11dGF0aW9uQ2hlY2tlcih0aGlzKTsKICNlbmRpZgog
Ci0gICAgZm9yIChhdXRvKiBjaGlsZExheWVyIDogKmxpc3QpIHsKLSAgICAgICAgaWYgKGNoaWxk
TGF5ZXItPmlzRmxvd1RocmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygp
KQotICAgICAgICAgICAgY29udGludWU7CisgICAgZm9yIChhdXRvKiBjaGlsZExheWVyIDogKmxp
c3QpCiAgICAgICAgIGNoaWxkTGF5ZXItPnBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZv
LCBwYWludEZsYWdzKTsKLSAgICB9CiB9CiAKIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nUGFnaW5hdGlvbkxheWVySW5TdWJ0cmVlKGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5
ZXIsIFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIG1vZGUpIGNvbnN0CkBAIC00OTM0LDExICs0ODgz
LDYgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdGbG93VAogICAgIHJldHVy
biBjdXJyOwogfQogCi1ib29sIFJlbmRlckxheWVyOjppc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3Jh
cGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSBjb25zdAotewotICAgIHJldHVybiBpczxSZW5kZXJG
bG93VGhyZWFkPihyZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPihyZW5k
ZXJlcigpKS5jb2xsZWN0c0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCk7Ci19Ci0KIC8vIENv
bXB1dGUgdGhlIHotb2Zmc2V0IG9mIHRoZSBwb2ludCBpbiB0aGUgdHJhbnNmb3JtU3RhdGUuCiAv
LyBUaGlzIGlzIGVmZmVjdGl2ZWx5IHByb2plY3RpbmcgYSByYXkgbm9ybWFsIHRvIHRoZSBwbGFu
ZSBvZiBhbmNlc3RvciwgZmluZGluZyB3aGVyZSB0aGF0CiAvLyByYXkgaW50ZXJzZWN0cyB0YXJn
ZXQsIGFuZCBjb21wdXRpbmcgdGhlIHogZGVsdGEgYmV0d2VlbiB0aG9zZSB0d28gcG9pbnRzLgpA
QCAtNDk5MiwxMSArNDkzNiw2IEBAIHN0YXRpYyBib29sIGlzSGl0Q2FuZGlkYXRlKGNvbnN0IFJl
bmRlckwKIHsKICAgICBpZiAoIWhpdExheWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgLy8gUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRzIGFyZSBub3QgaGl0IGNhbmRpZGF0ZXMu
IFRoZSBoaXQgdGVzdCBhbGdvcml0aG0gd2lsbCBwaWNrIHRoZSBwYXJlbnQKLSAgICAvLyBsYXll
ciwgdGhlIG9uZSBvZiB0aGUgcmVnaW9uLgotICAgIGlmIChoaXRMYXllci0+cmVuZGVyZXIoKS5p
c1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIFRoZSBoaXQgbGF5ZXIgaXMgZGVwdGgtc29ydGluZyB3aXRoIG90aGVyIGxheWVycywgc28g
anVzdCBzYXkgdGhhdCBpdCB3YXMgaGl0LgogICAgIGlmIChjYW5EZXB0aFNvcnQpCkBAIC01MDMy
LDIyICs0OTcxLDYgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgog
ICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllckRl
c2NlbmRhbnQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQoKTsKLQotICAgIC8vIFByZXZlbnQgaGl0dGluZyB0aGUgZml4ZWQgbGF5ZXJzIGluc2lk
ZSB0aGUgZmxvdyB0aHJlYWQgd2hlbiBoaXR0aW5nIHRocm91Z2ggcmVnaW9ucy4KLSAgICBpZiAo
cmVuZGVyZXIoKS5maXhlZFBvc2l0aW9uZWRXaXRoTmFtZWRGbG93Q29udGFpbmluZ0Jsb2NrKCkg
JiYgbmFtZWRGbG93RnJhZ21lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8g
RG9uJ3QgaGl0LXRlc3QgdGhlIGxheWVyIGlmIHRoZSByZW5kZXJlciBkb2Vzbid0IGJlbG9uZyB0
byB0aGlzIHJlZ2lvbi4KLSAgICAvLyBUaGlzIGlzIHRydWUgYXMgbG9uZyBhcyB3ZSBjbGFtcCB0
aGUgcmFuZ2Ugb2YgYSBib3ggdG8gaXRzIGNvbnRhaW5pbmcgYmxvY2sgcmFuZ2UuCi0gICAgLy8g
RklYTUU6IEZpeCBoaXQgdGVzdGluZyB3aXRoIGluLWZsb3cgdGhyZWFkcyBpbmNsdWRlZCBpbiBv
dXQtb2YtZmxvdyB0aHJlYWRzLgotICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCkgewotICAgICAg
ICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPmlzVmFsaWQoKSk7Ci0gICAgICAgIFJlbmRlckZs
b3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBuYW1lZEZsb3dGcmFnbWVudC0+Zmxvd1RocmVhZCgpOwot
ICAgICAgICBpZiAoIWZsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9u
KCZyZW5kZXJlcigpLCBuYW1lZEZsb3dGcmFnbWVudCkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0KICAgICAvLyBUaGUgbmF0dXJhbCB0aGluZyB3b3VsZCBiZSB0byBrZWVw
IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSBvbiB0aGUgc3RhY2ssIGJ1dCBpdCdzIGJpZywgc28g
d2UgaGVhcC1hbGxvY2F0ZS4KIAogICAgIC8vIEFwcGx5IGEgdHJhbnNmb3JtIGlmIHdlIGhhdmUg
b25lLgpAQCAtNTE0OSwxNCArNTA3Miw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFIKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQogCi0gICAgaGl0TGF5ZXIg
PSBoaXRUZXN0Rmxvd1RocmVhZElmUmVnaW9uRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBy
b290TGF5ZXIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwK
LSAgICAgICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldEZvckRlc2NlbmRhbnRz
UHRyLCB6T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpLCBkZXB0aFNvcnRE
ZXNjZW5kYW50cyk7Ci0gICAgaWYgKGhpdExheWVyKSB7Ci0gICAgICAgIGlmICghZGVwdGhTb3J0
RGVzY2VuZGFudHMpCi0gICAgICAgICAgICByZXR1cm4gaGl0TGF5ZXI7Ci0gICAgICAgIGNhbmRp
ZGF0ZUxheWVyID0gaGl0TGF5ZXI7Ci0gICAgfQotCiAgICAgLy8gTmV4dCB3ZSB3YW50IHRvIHNl
ZSBpZiB0aGUgbW91c2UgcG9zIGlzIGluc2lkZSB0aGUgY2hpbGQgUmVuZGVyT2JqZWN0cyBvZiB0
aGUgbGF5ZXIuIENoZWNrCiAgICAgLy8gZXZlcnkgZnJhZ21lbnQgaW4gcmV2ZXJzZSBvcmRlci4K
ICAgICBpZiAoaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CkBAIC01MzYwLDggKzUyNzUsNiBAQCBS
ZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KFZlCiAgICAgUmVuZGVyTGF5ZXIq
IHJlc3VsdExheWVyID0gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBpID0gbGlzdC0+c2l6ZSgp
OyBpID4gMDsgLS1pKSB7CiAgICAgICAgIFJlbmRlckxheWVyKiBjaGlsZExheWVyID0gbGlzdC0+
YXQoaSAtIDEpOwotICAgICAgICBpZiAoY2hpbGRMYXllci0+aXNGbG93VGhyZWFkQ29sbGVjdGlu
Z0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgUmVuZGVyTGF5ZXIqIGhpdExheWVyID0gbnVsbHB0cjsKICAgICAgICAgSGl0VGVzdFJl
c3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7CiAgICAgICAgIGhpdExh
eWVyID0gY2hpbGRMYXllci0+aGl0VGVzdExheWVyKHJvb3RMYXllciwgdGhpcywgcmVxdWVzdCwg
dGVtcFJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2UsIHRyYW5zZm9y
bVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwpAQCAtNTQyOSwzOCArNTM0Miw2IEBAIFJl
ZjxDbGlwUmVjdHM+IFJlbmRlckxheWVyOjp1cGRhdGVDbGlwUmUKICAgICByZXR1cm4gY2xpcFJl
Y3RzOwogfQogCi1ib29sIFJlbmRlckxheWVyOjptYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRh
dGlvbkxheWVyKENsaXBSZWN0cyYgY2xpcFJlY3RzKSBjb25zdAotewotICAgIFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCgpOwotICAgIGlmICghbmFtZWRGbG93RnJhZ21lbnQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50KCkgJiYgbmFtZWRG
bG93RnJhZ21lbnQtPnBhcmVudCgpLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVy
KCkpOwotCi0gICAgQ2xpcFJlY3RzQ29udGV4dCB0YXJnZXRDbGlwUmVjdHNDb250ZXh0KCZuYW1l
ZEZsb3dGcmFnbWVudC0+ZnJhZ21lbnRDb250YWluZXJMYXllcigpLCBUZW1wb3JhcnlDbGlwUmVj
dHMpOwotICAgIG5hbWVkRmxvd0ZyYWdtZW50LT5mcmFnbWVudENvbnRhaW5lckxheWVyKCkuY2Fs
Y3VsYXRlQ2xpcFJlY3RzKHRhcmdldENsaXBSZWN0c0NvbnRleHQsIGNsaXBSZWN0cyk7Ci0KLSAg
ICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCA9IG5hbWVkRmxvd0ZyYWdtZW50LT5m
bG93VGhyZWFkUG9ydGlvblJlY3QoKTsKLQotICAgIExheW91dFBvaW50IHBvcnRpb25Mb2NhdGlv
biA9IGZsb3dUaHJlYWRQb3J0aW9uUmVjdC5sb2NhdGlvbigpOwotICAgIExheW91dFJlY3QgcmVn
aW9uQ29udGVudEJveCA9IG5hbWVkRmxvd0ZyYWdtZW50LT5mcmFnbWVudENvbnRhaW5lcigpLmNv
bnRlbnRCb3hSZWN0KCk7Ci0gICAgTGF5b3V0U2l6ZSBtb3ZlT2Zmc2V0ID0gcG9ydGlvbkxvY2F0
aW9uIC0gcmVnaW9uQ29udGVudEJveC5sb2NhdGlvbigpICsgdG9MYXlvdXRTaXplKG5hbWVkRmxv
d0ZyYWdtZW50LT5mcmFnbWVudENvbnRhaW5lcigpLnNjcm9sbFBvc2l0aW9uKCkpOwotCi0gICAg
Q2xpcFJlY3QgbmV3T3ZlcmZsb3dDbGlwUmVjdCA9IGNsaXBSZWN0cy5vdmVyZmxvd0NsaXBSZWN0
KCk7Ci0gICAgbmV3T3ZlcmZsb3dDbGlwUmVjdC5tb3ZlKG1vdmVPZmZzZXQpOwotICAgIGNsaXBS
ZWN0cy5zZXRPdmVyZmxvd0NsaXBSZWN0KG5ld092ZXJmbG93Q2xpcFJlY3QpOwotCi0gICAgQ2xp
cFJlY3QgbmV3Rml4ZWRDbGlwUmVjdCA9IGNsaXBSZWN0cy5maXhlZENsaXBSZWN0KCk7Ci0gICAg
bmV3Rml4ZWRDbGlwUmVjdC5tb3ZlKG1vdmVPZmZzZXQpOwotICAgIGNsaXBSZWN0cy5zZXRGaXhl
ZENsaXBSZWN0KG5ld0ZpeGVkQ2xpcFJlY3QpOwotCi0gICAgQ2xpcFJlY3QgbmV3UG9zQ2xpcFJl
Y3QgPSBjbGlwUmVjdHMucG9zQ2xpcFJlY3QoKTsKLSAgICBuZXdQb3NDbGlwUmVjdC5tb3ZlKG1v
dmVPZmZzZXQpOwotICAgIGNsaXBSZWN0cy5zZXRQb3NDbGlwUmVjdChuZXdQb3NDbGlwUmVjdCk7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogQ2xpcFJlY3RzKiBSZW5kZXJMYXllcjo6Y2xpcFJl
Y3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGNvbnRleHQuY2xpcFJlY3RzVHlwZSA8IE51bUNhY2hlZENsaXBSZWN0c1R5cGVzKTsKQEAgLTU1
MjMsMTQgKzU0MDQsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKGNv
bgogICAgICAgICAgICAgb2Zmc2V0IC09IHRvTGF5b3V0U2l6ZShyZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS5zY3JvbGxQb3NpdGlvbkZvckZpeGVkUG9zaXRpb24oKSk7CiAgICAgICAgIAog
ICAgICAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICAgICAg
Q2xpcFJlY3QgbmV3T3ZlcmZsb3dDbGlwID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigp
KS5vdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMob2Zmc2V0LCBjdXJyZW50UmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQoKSwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSk7CisgICAgICAgICAgICBDbGlwUmVjdCBuZXdPdmVyZmxvd0NsaXAgPSBkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyhv
ZmZzZXQsIG51bGxwdHIsIGNsaXBSZWN0c0NvbnRleHQub3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3kpOwogICAgICAgICAgICAgbmV3T3ZlcmZsb3dDbGlwLnNldEFmZmVjdGVkQnlSYWRpdXMo
cmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJhZGl1cygpKTsKICAgICAgICAgICAgIGNsaXBS
ZWN0cy5zZXRPdmVyZmxvd0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdPdmVyZmxvd0NsaXAsIGNs
aXBSZWN0cy5vdmVyZmxvd0NsaXBSZWN0KCkpKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcigp
LmlzUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRQb3NDbGlwUmVj
dChpbnRlcnNlY3Rpb24obmV3T3ZlcmZsb3dDbGlwLCBjbGlwUmVjdHMucG9zQ2xpcFJlY3QoKSkp
OwogICAgICAgICB9CiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkgewotICAgICAg
ICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlwID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJl
cigpKS5jbGlwUmVjdChvZmZzZXQsIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsK
KyAgICAgICAgICAgIExheW91dFJlY3QgbmV3UG9zQ2xpcCA9IGRvd25jYXN0PFJlbmRlckJveD4o
cmVuZGVyZXIoKSkuY2xpcFJlY3Qob2Zmc2V0LCBudWxscHRyKTsKICAgICAgICAgICAgIGNsaXBS
ZWN0cy5zZXRQb3NDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3UG9zQ2xpcCwgY2xpcFJlY3RzLnBv
c0NsaXBSZWN0KCkpKTsKICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRPdmVyZmxvd0NsaXBSZWN0
KGludGVyc2VjdGlvbihuZXdQb3NDbGlwLCBjbGlwUmVjdHMub3ZlcmZsb3dDbGlwUmVjdCgpKSk7
CiAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0Rml4ZWRDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3
UG9zQ2xpcCwgY2xpcFJlY3RzLmZpeGVkQ2xpcFJlY3QoKSkpOwpAQCAtNTU5NiwxMCArNTQ3Nyw4
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IEMKICAgICAgICAgYmFj
a2dyb3VuZFJlY3QgPSBwYWludERpcnR5UmVjdDsKIAogICAgIExheW91dFNpemUgb2Zmc2V0RnJv
bVJvb3RMb2NhbCA9IG9mZnNldEZyb21Sb290OwotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwot
ICAgIC8vIElmIHRoZSB2aWV3IGlzIHNjcm9sbGVkLCB0aGUgZmxvdyB0aHJlYWQgaXMgbm90IHNj
cm9sbGVkIHdpdGggaXQgYW5kIHdlIHNob3VsZAotICAgIC8vIHRha2UgdGhlIHNjcm9sbCBvZmZz
ZXQgaW50byBhY2NvdW50LgotICAgIGlmIChjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllci0+aXNP
dXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgJiYgIW5hbWVkRmxvd0ZyYWdtZW50KSB7CisKKyAg
ICBpZiAoY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXItPmlzT3V0T2ZGbG93UmVuZGVyRmxvd1Ro
cmVhZCgpKSB7CiAgICAgICAgIExheW91dFBvaW50IGFic1BvcyA9IExheW91dFBvaW50KHJlbmRl
cmVyKCkudmlldygpLmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIElzRml4ZWQpKTsKICAg
ICAgICAgb2Zmc2V0RnJvbVJvb3RMb2NhbCArPSB0b0xheW91dFNpemUoYWJzUG9zKTsKICAgICB9
CkBAIC01NjA4LDQyICs1NDg3LDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3Rz
KGNvbnN0IEMKIAogICAgIGZvcmVncm91bmRSZWN0ID0gYmFja2dyb3VuZFJlY3Q7CiAKLSAgICBS
ZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gbmFtZWRGbG93RnJhZ21lbnQgPyBuYW1lZEZs
b3dGcmFnbWVudC0+Zmxvd1RocmVhZCgpIDogbnVsbHB0cjsKLSAgICBpZiAoaXNTZWxmUGFpbnRp
bmdMYXllcigpICYmIGZsb3dUaHJlYWQgJiYgIXJlbmRlcmVyKCkuaXNJbkZsb3dSZW5kZXJGbG93
VGhyZWFkKCkpIHsKLSAgICAgICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50LT5pc1ZhbGlkKCkp
OwotICAgICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgYm94TW9kZWxPYmplY3QgPSBk
b3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4ocmVuZGVyZXIoKSk7Ci0gICAgICAgIExheW91
dFJlY3QgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cgPSBuYW1lZEZsb3dGcmFnbWVudC0+
dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94KGJveE1vZGVsT2JqZWN0KTsKLQotICAgICAgICAvLyBM
YXllcnMgYXJlIGluIHBoeXNpY2FsIGNvb3JkaW5hdGVzIHNvIHRoZSBvcmlnaW4gbXVzdCBiZSBt
b3ZlZCB0byB0aGUgcGh5c2ljYWwgdG9wLWxlZnQgb2YgdGhlIGZsb3d0aHJlYWQuCi0gICAgICAg
IGlmICgmYm94TW9kZWxPYmplY3QgPT0gZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5zdHlsZSgp
LmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChmbG93VGhy
ZWFkLT5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICAgICAg
bGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cubW92ZUJ5KExheW91dFBvaW50KDAsIGZsb3dU
aHJlYWQtPmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGF5
ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cubW92ZUJ5KExheW91dFBvaW50KGZsb3dUaHJlYWQt
PndpZHRoKCksIDApKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlbmRlckJsb2Nr
KiByZW5kZXJlckNvbnRhaW5pbmdCbG9jayA9IGlzPFJlbmRlckJsb2NrPihib3hNb2RlbE9iamVj
dC5lbmNsb3NpbmdCb3goKSkgPyAmZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGJveE1vZGVsT2JqZWN0
LmVuY2xvc2luZ0JveCgpKSA6IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXJDb250
YWluaW5nQmxvY2spCi0gICAgICAgICAgICAgICAgcmVuZGVyZXJDb250YWluaW5nQmxvY2stPmZs
aXBGb3JXcml0aW5nTW9kZShsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdy5tb3ZlKG9mZnNldEZy
b21Sb290TG9jYWwpOwotICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3Vu
ZHNXaXRoVmlzdWFsT3ZlcmZsb3cpOwotCi0gICAgICAgIGZvcmVncm91bmRSZWN0ID0gYmFja2dy
b3VuZFJlY3Q7Ci0gICAgfQotCiAgICAgLy8gVXBkYXRlIHRoZSBjbGlwIHJlY3RzIHRoYXQgd2ls
bCBiZSBwYXNzZWQgdG8gY2hpbGQgbGF5ZXJzLgogICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXBP
ck92ZXJmbG93Q2xpcCgpKSB7CiAgICAgICAgIC8vIFRoaXMgbGF5ZXIgZXN0YWJsaXNoZXMgYSBj
bGlwIG9mIHNvbWUga2luZC4KICAgICAgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgKHRoaXMgIT0gY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXIgfHwgY2xpcFJlY3RzQ29u
dGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09IFJlc3BlY3RPdmVyZmxvd0NsaXApKSB7Ci0gICAg
ICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbVJvb3RMb2Nh
bCksIG5hbWVkRmxvd0ZyYWdtZW50LCBjbGlwUmVjdHNDb250ZXh0Lm92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5KSk7CisgICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3QoZG93
bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0KHRvTGF5b3V0UG9p
bnQob2Zmc2V0RnJvbVJvb3RMb2NhbCksIG51bGxwdHIsIGNsaXBSZWN0c0NvbnRleHQub3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kpKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLnN0
eWxlKCkuaGFzQm9yZGVyUmFkaXVzKCkpCiAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3Qu
c2V0QWZmZWN0ZWRCeVJhZGl1cyh0cnVlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZW5k
ZXJlcigpLmhhc0NsaXAoKSkgewogICAgICAgICAgICAgLy8gQ2xpcCBhcHBsaWVzIHRvICp1cyog
YXMgd2VsbCwgc28gdXBkYXRlIHRoZSBkYW1hZ2VSZWN0LgotICAgICAgICAgICAgTGF5b3V0UmVj
dCBuZXdQb3NDbGlwID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdCh0
b0xheW91dFBvaW50KG9mZnNldEZyb21Sb290TG9jYWwpLCBuYW1lZEZsb3dGcmFnbWVudCk7Cisg
ICAgICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJl
bmRlcmVyKCkpLmNsaXBSZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbVJvb3RMb2NhbCksIG51
bGxwdHIpOwogICAgICAgICAgICAgYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0KG5ld1Bvc0NsaXAp
OwogICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KG5ld1Bvc0NsaXApOwogICAg
ICAgICB9CkBAIC01NjUzLDE2ICs1NTA4LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0
ZVJlY3RzKGNvbnN0IEMKICAgICAgICAgaWYgKHJlbmRlckJveCgpLT5oYXNWaXN1YWxPdmVyZmxv
dygpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogRG9lcyBub3QgZG8gdGhlIHJpZ2h0IHRoaW5n
IHdpdGggQ1NTIHJlZ2lvbnMgeWV0LCBzaW5jZSB3ZSBkb24ndCB5ZXQgZmFjdG9yIGluIHRoZQog
ICAgICAgICAgICAgLy8gaW5kaXZpZHVhbCByZWdpb24gYm94ZXMgYXMgb3ZlcmZsb3cuCi0gICAg
ICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93ID0gbmFtZWRG
bG93RnJhZ21lbnQgPyBuYW1lZEZsb3dGcmFnbWVudC0+dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94
KCpyZW5kZXJCb3goKSkgOiByZW5kZXJCb3goKS0+dmlzdWFsT3ZlcmZsb3dSZWN0KCk7CisgICAg
ICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93ID0gcmVuZGVy
Qm94KCktPnZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAgICAgICAgICAgcmVuZGVyQm94KCktPmZs
aXBGb3JXcml0aW5nTW9kZShsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7IC8vIExheWVy
cyBhcmUgaW4gcGh5c2ljYWwgY29vcmRpbmF0ZXMsIHNvIHRoZSBvdmVyZmxvdyBoYXMgdG8gYmUg
ZmxpcHBlZC4KICAgICAgICAgICAgIGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93Lm1vdmUo
b2Zmc2V0RnJvbVJvb3RMb2NhbCk7CiAgICAgICAgICAgICBpZiAodGhpcyAhPSBjbGlwUmVjdHND
b250ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAg
PT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkKICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5p
bnRlcnNlY3QobGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gU2hpZnQgdGhlIGJvdW5kcyB0byBiZSBmb3Igb3VyIHJlZ2lvbiBv
bmx5LgotICAgICAgICAgICAgTGF5b3V0UmVjdCBib3VuZHMgPSByZW5kZXJCb3goKS0+Ym9yZGVy
Qm94UmVjdEluUmVnaW9uKG5hbWVkRmxvd0ZyYWdtZW50KTsKLSAgICAgICAgICAgIGlmIChuYW1l
ZEZsb3dGcmFnbWVudCkKLSAgICAgICAgICAgICAgICBib3VuZHMgPSBuYW1lZEZsb3dGcmFnbWVu
dC0+cmVjdEZsb3dQb3J0aW9uRm9yQm94KHJlbmRlckJveCgpLCBib3VuZHMpOworICAgICAgICAg
ICAgTGF5b3V0UmVjdCBib3VuZHMgPSByZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdEluUmVnaW9u
KG51bGxwdHIpOwogCiAgICAgICAgICAgICBib3VuZHMubW92ZShvZmZzZXRGcm9tUm9vdExvY2Fs
KTsKICAgICAgICAgICAgIGlmICh0aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyIHx8
IGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0T3ZlcmZsb3dD
bGlwKQpAQCAtNTcxOCw3ICs1NTcxLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxD
bGlwUmVjdChibwogCiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKSB7CiAgICAgICAgIC8v
IENTUyBjbGlwIG1heSBiZSBsYXJnZXIgdGhhbiBvdXIgYm9yZGVyIGJveC4KLSAgICAgICAgTGF5
b3V0UmVjdCBjc3NDbGlwUmVjdCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuY2xp
cFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRGcm9tUm9vdCksIGN1cnJlbnRSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCgpKTsKKyAgICAgICAgTGF5b3V0UmVjdCBjc3NDbGlwUmVjdCA9IGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuY2xpcFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRGcm9t
Um9vdCksIG51bGxwdHIpOwogICAgICAgICBjbGlwRXhjZWVkc0JvdW5kcyA9ICFjbGlwUmVjdC5j
b250YWlucyhjc3NDbGlwUmVjdCk7CiAgICAgfQogCkBAIC01Nzc0LDE4ICs1NjI3LDYgQEAgYm9v
bCBSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFnZVJlY3QoYwogICAgIGlmICghcmVuZGVyZXIo
KS5pc1JlbmRlcklubGluZSgpICYmIGxheWVyQm91bmRzLmludGVyc2VjdHMoZGFtYWdlUmVjdCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5h
bWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0gICAg
Ly8gV2hlbiB1c2luZyByZWdpb25zLCBzb21lIGJveGVzIG1pZ2h0IGhhdmUgdGhlaXIgZnJhbWUg
cmVjdCByZWxhdGl2ZSB0byB0aGUgZmxvdyB0aHJlYWQsIHdoaWNoIGNvdWxkCi0gICAgLy8gY2F1
c2UgdGhlIHBhaW50IHJlamVjdGlvbiBhbGdvcml0aG0gdG8gcHJldmVudCB0aGVtIGZyb20gcGFp
bnRpbmcgd2hlbiB1c2luZyBkaWZmZXJlbnQgd2lkdGggcmVnaW9ucy4KLSAgICAvLyBlLmcuIGFu
IGFic29sdXRlbHkgcG9zaXRpb25lZCBib3ggd2l0aCBib3R0b206MHB4IGFuZCByaWdodDowcHgg
d291bGQgaGF2ZSBpdCdzIGZyYW1lUmVjdC54IHJlbGF0aXZlCi0gICAgLy8gdG8gdGhlIGZsb3cg
dGhyZWFkLCBub3QgdGhlIGxhc3QgcmVnaW9uIChpbiB3aGljaCBpdCB3aWxsIGVuZCB1cCBiZWNh
dXNlIG9mIGJvdHRvbTowcHgpCi0gICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmIHJlbmRlcmVy
KCkuZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKSB7Ci0gICAgICAgIExheW91dFJlY3QgYWRq
dXN0ZWRCb3VuZHMgPSBsYXllckJvdW5kczsKLSAgICAgICAgYWRqdXN0ZWRCb3VuZHMubW92ZUJ5
KG5hbWVkRmxvd0ZyYWdtZW50LT52aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3goZG93bmNhc3Q8UmVu
ZGVyQm94TW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkpKS5sb2NhdGlvbigpKTsKLSAgICAgICAgaWYg
KGFkanVzdGVkQm91bmRzLmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCiAgICAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gY29tcHV0
ZSB0aGUgYm91bmRpbmcgYm94IG9mIHRoaXMgc2luZ2xlIGxheWVyIGFuZCBzZWUgaWYgaXQgaW50
ZXJzZWN0cwogICAgIC8vIHRoZSBkYW1hZ2UgcmVjdC4gSXQncyBwb3NzaWJsZSB0aGUgZnJhZ21l
bnQgY29tcHV0ZWQgdGhlIGJvdW5kaW5nIGJveCBhbHJlYWR5LCBpbiB3aGljaCBjYXNlIHdlCiAg
ICAgLy8gY2FuIHVzZSB0aGUgY2FjaGVkIHZhbHVlLgpAQCAtNTk4MywyMSArNTgyNCwxMyBAQCBM
YXlvdXRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvCiAgICAgfQogCiAgICAgaWYg
KFZlY3RvcjxSZW5kZXJMYXllcio+KiBwb3NaT3JkZXJMaXN0ID0gdGhpcy0+cG9zWk9yZGVyTGlz
dCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byogY2hpbGRMYXllciA6ICpwb3NaT3JkZXJMaXN0KSB7
Ci0gICAgICAgICAgICAvLyBUaGUgUmVuZGVyTmFtZWRGbG93VGhyZWFkIGlzIGlnbm9yZWQgd2hl
biB3ZSBjYWxjdWxhdGUgdGhlIGJvdW5kcyBvZiB0aGUgUmVuZGVyVmlldy4KLSAgICAgICAgICAg
IGlmIChjaGlsZExheWVyLT5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRl
clJlZ2lvbnMoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChhdXRv
KiBjaGlsZExheWVyIDogKnBvc1pPcmRlckxpc3QpCiAgICAgICAgICAgICBjb21wdXRlTGF5ZXJz
VW5pb24oKmNoaWxkTGF5ZXIpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKFZlY3RvcjxS
ZW5kZXJMYXllcio+KiBub3JtYWxGbG93TGlzdCA9IHRoaXMtPm5vcm1hbEZsb3dMaXN0KCkpIHsK
LSAgICAgICAgZm9yIChhdXRvKiBjaGlsZExheWVyIDogKm5vcm1hbEZsb3dMaXN0KSB7Ci0gICAg
ICAgICAgICAvLyBSZW5kZXJWaWV3IHdpbGwgYWx3YXlzIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUg
ZG9jdW1lbnQsIGJlZm9yZSByZWFjaGluZyB0aGlzIHBvaW50LAotICAgICAgICAgICAgLy8gc28g
dGhlcmUncyBubyB3YXkgd2UgY291bGQgaGl0IGEgUmVuZGVyTmFtZWRGbG93VGhyZWFkIGhlcmUu
Ci0gICAgICAgICAgICBBU1NFUlQoIWNoaWxkTGF5ZXItPmlzRmxvd1RocmVhZENvbGxlY3RpbmdH
cmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKTsKKyAgICAgICAgZm9yIChhdXRvKiBjaGlsZExh
eWVyIDogKm5vcm1hbEZsb3dMaXN0KQogICAgICAgICAgICAgY29tcHV0ZUxheWVyc1VuaW9uKCpj
aGlsZExheWVyKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXZSBjYW4gb3B0
aW1pemUgdGhlIHNpemUgb2YgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzLCBieSBub3QgZW5sYXJnaW5n
CkBAIC02MjEzLDggKzYwNDYsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpkaXJ0eVpPcmRlckxpc3Rz
KCkKICAgICBtX3pPcmRlckxpc3RzRGlydHkgPSB0cnVlOwogCiAgICAgaWYgKCFyZW5kZXJlcigp
LnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKSB7Ci0gICAgICAgIGlmIChpc0Zsb3dUaHJlYWRD
b2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSkKLSAgICAgICAgICAgIGRvd25j
YXN0PFJlbmRlckZsb3dUaHJlYWQ+KHJlbmRlcmVyKCkpLnNldE5lZWRzTGF5ZXJUb1JlZ2lvbk1h
cHBpbmdzVXBkYXRlKCk7CiAgICAgICAgIGNvbXBvc2l0b3IoKS5zZXRDb21wb3NpdGluZ0xheWVy
c05lZWRSZWJ1aWxkKCk7CiAgICAgICAgIGlmIChhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3Zl
cmZsb3dTY3JvbGxFbmFibGVkKCkpCiAgICAgICAgICAgICBjb21wb3NpdG9yKCkuc2V0U2hvdWxk
UmVldmFsdWF0ZUNvbXBvc2l0aW5nQWZ0ZXJMYXlvdXQoKTsKQEAgLTYyMzcsOCArNjA2OCw2IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5Tm9ybWFsRmxvd0xpc3QoKQogICAgIG1fbm9ybWFsRmxv
d0xpc3REaXJ0eSA9IHRydWU7CiAKICAgICBpZiAoIXJlbmRlcmVyKCkucmVuZGVyVHJlZUJlaW5n
RGVzdHJveWVkKCkpIHsKLSAgICAgICAgaWYgKGlzRmxvd1RocmVhZENvbGxlY3RpbmdHcmFwaGlj
c0xheWVyc1VuZGVyUmVnaW9ucygpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxvd1Ro
cmVhZD4ocmVuZGVyZXIoKSkuc2V0TmVlZHNMYXllclRvUmVnaW9uTWFwcGluZ3NVcGRhdGUoKTsK
ICAgICAgICAgY29tcG9zaXRvcigpLnNldENvbXBvc2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKTsK
ICAgICAgICAgaWYgKGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJs
ZWQoKSkKICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS5zZXRTaG91bGRSZWV2YWx1YXRlQ29tcG9z
aXRpbmdBZnRlckxheW91dCgpOwpAQCAtNjM3MiwxNCArNjIwMSw2IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnJlcGFpbnRJbmNsdWRpbmdEZXNjZW4KICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKICAg
ICBmb3IgKFJlbmRlckxheWVyKiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJy
ZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY3VycmVudC0+cmVwYWludElu
Y2x1ZGluZ0Rlc2NlbmRhbnRzKCk7Ci0KLSAgICAvLyBJZiB0aGlzIGlzIGEgcmVnaW9uLCB3ZSBt
dXN0IGFsc28gcmVwYWludCB0aGUgZmxvdyB0aHJlYWQncyBsYXllciBzaW5jZSBpdCBpcyB0aGUg
b25lCi0gICAgLy8gZG9pbmcgdGhlIGFjdHVhbCBwYWludGluZyBvZiB0aGUgZmxvd2VkIGNvbnRl
bnQsIGJ1dCBvbmx5IGlmIHRoZSByZWdpb24gaXMgdmFsaWQuCi0gICAgaWYgKHJlbmRlcmVyKCku
aXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpKSB7Ci0gICAgICAgIFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50JiByZWdpb24gPSAqZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihyZW5k
ZXJlcigpKS5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAgICAgICBpZiAocmVnaW9uLmlz
VmFsaWQoKSkKLSAgICAgICAgICAgIHJlZ2lvbi5mbG93VGhyZWFkKCktPmxheWVyKCktPnJlcGFp
bnRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwotICAgIH0KIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6
c2V0QmFja2luZ05lZWRzUmVwYWludChHcmFwaGljc0xheWVyOjpTaG91bGRDbGlwVG9MYXllciBz
aG91bGRDbGlwKQpAQCAtNjk3NCw5MiArNjc5NSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmZpbHRl
ck5lZWRzUmVwYWludCgpCiAgICAgcmVuZGVyZXIoKS5yZXBhaW50KCk7CiB9CiAKLXZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50TmFtZWRGbG93VGhyZWFkSW5zaWRlUmVnaW9uKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIHJlZ2lvbiwgTGF5b3V0UmVjdCBw
YWludERpcnR5UmVjdCwgTGF5b3V0UG9pbnQgcGFpbnRPZmZzZXQsIFBhaW50QmVoYXZpb3IgcGFp
bnRCZWhhdmlvciwgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCi17Ci0gICAgTGF5b3V0UmVj
dCByZWdpb25Db250ZW50Qm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZWdpb24tPmxheWVyT3du
ZXIoKSkuY29udGVudEJveFJlY3QoKTsKLSAgICBDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5l
ciByZWdpb25NYWludGFpbmVyKCpyZWdpb24pOwotICAgIHJlZ2lvbi0+c2V0UmVnaW9uT2JqZWN0
c1JlZ2lvblN0eWxlKCk7Ci0KLSAgICBMYXlvdXRTaXplIG1vdmVPZmZzZXQgPSByZWdpb24tPmZs
b3dUaHJlYWRQb3J0aW9uTG9jYXRpb24oKSAtIChwYWludE9mZnNldCArIHJlZ2lvbkNvbnRlbnRC
b3gubG9jYXRpb24oKSkgKyB0b0xheW91dFNpemUocmVnaW9uLT5mcmFnbWVudENvbnRhaW5lcigp
LnNjcm9sbFBvc2l0aW9uKCkpOwotICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9
IHJvdW5kUG9pbnRUb0RldmljZVBpeGVscyh0b0xheW91dFBvaW50KG1vdmVPZmZzZXQpLCByZW5k
ZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgY29udGV4dC5zYXZl
KCk7Ci0gICAgY29udGV4dC50cmFuc2xhdGUoLWFkanVzdGVkUGFpbnRPZmZzZXQpOwotCi0gICAg
TGF5b3V0U2l6ZSBzdWJwaXhlbE9mZnNldCA9IG1vdmVPZmZzZXQgLSB0b0xheW91dFNpemUoTGF5
b3V0UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCkpOwotICAgIHBhaW50RGlydHlSZWN0Lm1vdmUo
bW92ZU9mZnNldCk7Ci0gICAgcGFpbnQoY29udGV4dCwgcGFpbnREaXJ0eVJlY3QsIExheW91dFNp
emUoLXN1YnBpeGVsT2Zmc2V0LndpZHRoKCksIC1zdWJwaXhlbE9mZnNldC5oZWlnaHQoKSksIHBh
aW50QmVoYXZpb3IsIG51bGxwdHIsIHBhaW50RmxhZ3MgfCBQYWludExheWVyVGVtcG9yYXJ5Q2xp
cFJlY3RzKTsKLSAgICByZWdpb24tPnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSgp
OwotICAgIGNvbnRleHQucmVzdG9yZSgpOwotfQotCi1SZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmhpdFRlc3RGbG93VGhyZWFkSWZSZWdpb25Gb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVu
dHMmIGZyYWdtZW50cywgUmVuZGVyTGF5ZXIqLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwK
LSAgICBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwKLSAgICBjb25zdCBI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCAKLSAgICBkb3VibGUqIHpP
ZmZzZXRGb3JEZXNjZW5kYW50cywgZG91YmxlKiB6T2Zmc2V0LAotICAgIGNvbnN0IEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZSogdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZSwgYm9vbCBkZXB0aFNv
cnREZXNjZW5kYW50cykKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudENvbnRhaW5lcigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50JiByZWdpb24gPSAqZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93Pihy
ZW5kZXJlcigpKS5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAgIGlmICghcmVnaW9uLmlz
VmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZW5kZXJGbG93VGhyZWFk
KiBmbG93VGhyZWFkID0gcmVnaW9uLmZsb3dUaHJlYWQoKTsKLSAgICBMYXlvdXRQb2ludCBwb3J0
aW9uTG9jYXRpb24gPSByZWdpb24uZmxvd1RocmVhZFBvcnRpb25SZWN0KCkubG9jYXRpb24oKTsK
LSAgICBpZiAoZmxvd1RocmVhZC0+c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgp
KSB7Ci0gICAgICAgIC8vIFRoZSBwb3J0aW9uIGxvY2F0aW9uIGNvb3JkaW5hdGUgbXVzdCBiZSB0
cmFuc2xhdGVkIGludG8gcGh5c2ljYWwgY29vcmRpbmF0ZXMuCi0gICAgICAgIGlmIChmbG93VGhy
ZWFkLT5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBwb3J0
aW9uTG9jYXRpb24uc2V0WShmbG93VGhyZWFkLT5oZWlnaHQoKSAtIChwb3J0aW9uTG9jYXRpb24u
eSgpICsgcmVnaW9uLmNvbnRlbnRIZWlnaHQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBwb3J0aW9uTG9jYXRpb24uc2V0WChmbG93VGhyZWFkLT53aWR0aCgpIC0gKHBvcnRpb25Mb2Nh
dGlvbi54KCkgKyByZWdpb24uY29udGVudFdpZHRoKCkpKTsKLSAgICB9Ci0KLSAgICBMYXlvdXRS
ZWN0IHJlZ2lvbkNvbnRlbnRCb3ggPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KHJlbmRlcmVy
KCkpLmNvbnRlbnRCb3hSZWN0KCk7Ci0KLSAgICBSZW5kZXJMYXllciogcmVzdWx0TGF5ZXIgPSBu
dWxscHRyOwotICAgIGZvciAoaW50IGkgPSBmcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAt
LWkpIHsKLSAgICAgICAgY29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVudHMu
YXQoaSk7Ci0KLSAgICAgICAgaWYgKCFmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3Rz
KGhpdFRlc3RMb2NhdGlvbikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBMYXlv
dXRTaXplIGhpdFRlc3RPZmZzZXQgPSBwb3J0aW9uTG9jYXRpb24gLSAoZnJhZ21lbnQubGF5ZXJC
b3VuZHMubG9jYXRpb24oKSArIHJlZ2lvbkNvbnRlbnRCb3gubG9jYXRpb24oKSkgKyB0b0xheW91
dFNpemUocmVnaW9uLmZyYWdtZW50Q29udGFpbmVyKCkuc2Nyb2xsUG9zaXRpb24oKSk7Ci0KLSAg
ICAgICAgLy8gQWx3YXlzIGlnbm9yZSBjbGlwcGluZywgc2luY2UgdGhlIFJlbmRlckZsb3dUaHJl
YWQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgYm91bmRzIG9mIHRoZSBGcmFtZVZpZXcuCi0g
ICAgICAgIEhpdFRlc3RSZXF1ZXN0IG5ld1JlcXVlc3QocmVxdWVzdC50eXBlKCkgfCBIaXRUZXN0
UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcgfCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dVc2VyQWdl
bnRTaGFkb3dDb250ZW50KTsKLQotICAgICAgICAvLyBNYWtlIGEgbmV3IHRlbXBvcmFyeSBIaXRU
ZXN0TG9jYXRpb24gaW4gdGhlIG5ldyByZWdpb24uCi0gICAgICAgIEhpdFRlc3RMb2NhdGlvbiBu
ZXdIaXRUZXN0TG9jYXRpb24oaGl0VGVzdExvY2F0aW9uLCBoaXRUZXN0T2Zmc2V0KTsKLQotICAg
ICAgICAvLyBFeHBhbmQgdGhlIGhpdC10ZXN0IHJlY3QgdG8gdGhlIGZsb3cgdGhyZWFkJ3MgY29v
cmRpbmF0ZSBzeXN0ZW0uCi0gICAgICAgIExheW91dFJlY3QgaGl0VGVzdFJlY3RJbkZsb3dUaHJl
YWQgPSBoaXRUZXN0UmVjdDsKLSAgICAgICAgaGl0VGVzdFJlY3RJbkZsb3dUaHJlYWQubW92ZSho
aXRUZXN0T2Zmc2V0KTsKLSAgICAgICAgaGl0VGVzdFJlY3RJbkZsb3dUaHJlYWQuZXhwYW5kKExh
eW91dFNpemUoZmFicygoZG91YmxlKWhpdFRlc3RPZmZzZXQud2lkdGgoKSksIGZhYnMoKGRvdWJs
ZSloaXRUZXN0T2Zmc2V0LmhlaWdodCgpKSkpOwotCi0gICAgICAgIEN1cnJlbnRSZW5kZXJSZWdp
b25NYWludGFpbmVyIHJlZ2lvbk1haW50YWluZXIocmVnaW9uKTsKLQotICAgICAgICBIaXRUZXN0
UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRlc3RMb2NhdGlvbigpKTsKLSAgICAgICAgUmVu
ZGVyTGF5ZXIqIGhpdExheWVyID0gZmxvd1RocmVhZC0+bGF5ZXIoKS0+aGl0VGVzdExheWVyKGZs
b3dUaHJlYWQtPmxheWVyKCksIG51bGxwdHIsIG5ld1JlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRl
c3RSZWN0SW5GbG93VGhyZWFkLCBuZXdIaXRUZXN0TG9jYXRpb24sIGZhbHNlLCB0cmFuc2Zvcm1T
dGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKLSAgICAgICAgaWYgKHJlcXVlc3QucmVzdWx0
SXNFbGVtZW50TGlzdCgpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0LCBy
ZXF1ZXN0KTsKLSAgICAgICAgaWYgKGlzSGl0Q2FuZGlkYXRlKGhpdExheWVyLCBkZXB0aFNvcnRE
ZXNjZW5kYW50cywgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZSkpIHsKLSAgICAg
ICAgICAgIHJlc3VsdExheWVyID0gaGl0TGF5ZXI7Ci0gICAgICAgICAgICBpZiAoIXJlcXVlc3Qu
cmVzdWx0SXNFbGVtZW50TGlzdCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1
bHQ7Ci0gICAgICAgICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRzKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdExheWVyOwot
fQotCi1SZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVyTGF5ZXI6OmN1cnJlbnRSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuY3VycmVu
dFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci19Ci0KIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKIHsKICAgICB0cyA8PCAi
UmVuZGVyTGF5ZXIgIiA8PCAmbGF5ZXIgPDwgIiAiIDw8IGxheWVyLnNpemUoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiAyMjIyNjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNyArNzEsNiBAQCBjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNsYXNzIFJlbmRlckxheWVy
QmFja2luZzsKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKIGNsYXNzIFJlbmRlck1hcnF1
ZWU7Ci1jbGFzcyBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKIGNsYXNzIFJlbmRlclJlcGxpY2E7
CiBjbGFzcyBSZW5kZXJTY3JvbGxiYXJQYXJ0OwogY2xhc3MgUmVuZGVyU3R5bGU7CkBAIC01MTEs
OCArNTEwLDYgQEAgcHVibGljOgogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICB2b2lkIHBh
aW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYg
ZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290
ID0gbnVsbHB0cik7CiAKLSAgICB2b2lkIHBhaW50TmFtZWRGbG93VGhyZWFkSW5zaWRlUmVnaW9u
KEdyYXBoaWNzQ29udGV4dCYsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiwgTGF5b3V0UmVjdCwg
TGF5b3V0UG9pbnQsIFBhaW50QmVoYXZpb3IgPSBQYWludEJlaGF2aW9yTm9ybWFsLCBQYWludExh
eWVyRmxhZ3MgPSAwKTsKLQogICAgIHN0cnVjdCBDbGlwUmVjdHNDb250ZXh0IHsKICAgICAgICAg
Q2xpcFJlY3RzQ29udGV4dChjb25zdCBSZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIENsaXBSZWN0
c1R5cGUgaW5DbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUs
IFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgaW5SZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVzcGVj
dE92ZXJmbG93Q2xpcCkKICAgICAgICAgICAgIDogcm9vdExheWVyKGluUm9vdExheWVyKQpAQCAt
NzA1LDE1ICs3MDIsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNSZW5kZXJGbG93VGhyZWFkKCkg
Y29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5pc1JlbmRlckZsb3dUaHJlYWQoKTsgfQogICAgIGJv
b2wgaXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIo
KS5pc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKTsgfQogICAgIGJvb2wgaXNJbnNpZGVGbG93
VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5mbG93VGhyZWFkU3RhdGUoKSAhPSBS
ZW5kZXJPYmplY3Q6Ok5vdEluc2lkZUZsb3dUaHJlYWQ7IH0KLSAgICBib29sIGlzSW5zaWRlT3V0
T2ZGbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5mbG93VGhyZWFkU3RhdGUo
KSA9PSBSZW5kZXJPYmplY3Q6Okluc2lkZU91dE9mRmxvd1RocmVhZDsgfQogICAgIGJvb2wgaXNE
aXJ0eVJlbmRlckZsb3dUaHJlYWQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzUmVu
ZGVyRmxvd1RocmVhZCgpKTsKICAgICAgICAgcmV0dXJuIG1fek9yZGVyTGlzdHNEaXJ0eSB8fCBt
X25vcm1hbEZsb3dMaXN0RGlydHk7CiAgICAgfQogCi0gICAgYm9vbCBpc0Zsb3dUaHJlYWRDb2xs
ZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSBjb25zdDsKLQogICAgIFJlbmRlckxh
eWVyKiBlbmNsb3NpbmdGbG93VGhyZWFkQW5jZXN0b3IoKSBjb25zdDsKIAogICAgIGJvb2wgc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
OyB9CkBAIC04NjUsMTQgKzg1OSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZSosIGRvdWJsZSogek9mZnNldEZvckRlc2NlbmRhbnRzLCBkb3VibGUq
IHpPZmZzZXQsCiAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdW5mbGF0
dGVuZWRUcmFuc2Zvcm1TdGF0ZSwgYm9vbCBkZXB0aFNvcnREZXNjZW5kYW50cyk7CiAKLSAgICBS
ZW5kZXJMYXllciogaGl0VGVzdEZpeGVkTGF5ZXJzSW5OYW1lZEZsb3dzKFJlbmRlckxheWVyKiBy
b290TGF5ZXIsCi0gICAgICAgIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
Ci0gICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLAotICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqLAotICAgICAg
ICBkb3VibGUqIHpPZmZzZXRGb3JEZXNjZW5kYW50cywgZG91YmxlKiB6T2Zmc2V0LAotICAgICAg
ICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3Rh
dGUsCi0gICAgICAgIGJvb2wgZGVwdGhTb3J0RGVzY2VuZGFudHMpOwotCiAgICAgUmVmPEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZT4gY3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0ZShSZW5kZXJMYXll
ciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsCiAgICAgICAgIGNvbnN0
IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLAogICAgICAg
ICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIGNvbnRhaW5lclRyYW5zZm9ybVN0YXRl
LApAQCAtMTAzMCwxNCArMTAxNiw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG92ZXJmbG93Q29u
dHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7CiAKLSAg
ICBSZW5kZXJMYXllciogaGl0VGVzdEZsb3dUaHJlYWRJZlJlZ2lvbkZvckZyYWdtZW50cyhjb25z
dCBMYXllckZyYWdtZW50cyYsIFJlbmRlckxheWVyKiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwKLSAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYsCi0gICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSosIGRvdWJs
ZSogek9mZnNldEZvckRlc2NlbmRhbnRzLAotICAgICAgICBkb3VibGUqIHpPZmZzZXQsIGNvbnN0
IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZSwgYm9v
bCBkZXB0aFNvcnREZXNjZW5kYW50cyk7Ci0gICAgYm9vbCBtYXBMYXllckNsaXBSZWN0c1RvRnJh
Z21lbnRhdGlvbkxheWVyKENsaXBSZWN0cyYpIGNvbnN0OwotCi0gICAgUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQqIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0OwotCiAgICAg
Ly8gVGhlIGJpdGZpZWxkcyBhcmUgdXAgaGVyZSBzbyB0aGV5IHdpbGwgZmFsbCBpbnRvIHRoZSBw
YWRkaW5nIGZyb20gU2Nyb2xsYWJsZUFyZWEgb24gNjQtYml0LgogCiAgICAgY29uc3QgYm9vbCBt
X2lzUmVuZGVyVmlld0xheWVyIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNyArNTcsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVkaWEuaCIK
LSNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclJl
Z2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgpAQCAtNTcyLDkgKzU3MSw2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzaG91bGRDbGlw
Q29tcG8KICAgICBpZiAobGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZE9yVXNpbmdDb21wb3Np
dGVkU2Nyb2xsaW5nKG1fb3duaW5nTGF5ZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAobV9vd25pbmdMYXllci5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNV
bmRlclJlZ2lvbnMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTg2OSw3ICs4NjUsNiBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6
Y29tcHV0ZVBhCiAgICAgICAgIC8vIEZJWE1FOiBmbG93cy9jb2x1bW5zIG5lZWQgd29yay4KICAg
ICAgICAgTGF5b3V0UmVjdCBhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMgPSBhbmNlc3RvckJhY2tp
bmdMYXllci0+Y29tcG9zaXRlZEJvdW5kcygpOwogICAgICAgICBhbmNlc3RvckNvbXBvc2l0ZWRC
b3VuZHMuc2V0TG9jYXRpb24oTGF5b3V0UG9pbnQoKSk7Ci0gICAgICAgIGFkanVzdEFuY2VzdG9y
Q29tcG9zaXRpbmdCb3VuZHNGb3JGbG93VGhyZWFkKGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcywg
Y29tcG9zaXRlZEFuY2VzdG9yKTsKICAgICAgICAgcGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBh
bmNlc3RvckNvbXBvc2l0ZWRCb3VuZHM7CiAgICAgfQogCkBAIC0xMjM3LDQ4ICsxMjMyLDYgQEAg
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU1hc2tpbmdMYQogICAgIH0KIH0KIAotdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OmFkanVzdEFuY2VzdG9yQ29tcG9zaXRpbmdCb3VuZHNGb3JG
bG93VGhyZWFkKExheW91dFJlY3QmIGFuY2VzdG9yQ29tcG9zaXRpbmdCb3VuZHMsIGNvbnN0IFJl
bmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yKSBjb25zdAotewotICAgIFJlbmRlckxheWVy
KiBmbG93VGhyZWFkTGF5ZXIgPSBtX293bmluZ0xheWVyLmlzSW5zaWRlT3V0T2ZGbG93VGhyZWFk
KCkgPyBtX293bmluZ0xheWVyLnN0YWNraW5nQ29udGFpbmVyKCkgOiBudWxscHRyOwotICAgIGlm
IChmbG93VGhyZWFkTGF5ZXIgJiYgZmxvd1RocmVhZExheWVyLT5pc1JlbmRlckZsb3dUaHJlYWQo
KSkgewotICAgICAgICBpZiAobV9vd25pbmdMYXllci5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3Jh
cGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSkgewotICAgICAgICAgICAgLy8gVGhlIFJlbmRlck5h
bWVkRmxvd1RocmVhZCBpcyBub3QgY29tcG9zaXRlZCwgYXMgd2UgbmVlZCBpdCB0byBwYWludCB0
aGUgCi0gICAgICAgICAgICAvLyBiYWNrZ3JvdW5kIGxheWVyIG9mIHRoZSByZWdpb25zLiBXZSBu
ZWVkIHRvIGNvbXBlbnNhdGUgZm9yIHRoYXQgYnkgbWFudWFsbHkKLSAgICAgICAgICAgIC8vIHN1
YnRyYWN0aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvdy10aHJlYWQuCi0gICAgICAgICAgICBJ
bnRQb2ludCBmbG93UG9zaXRpb247Ci0gICAgICAgICAgICBmbG93VGhyZWFkTGF5ZXItPmNvbnZl
cnRUb1BpeGVsU25hcHBlZExheWVyQ29vcmRzKGNvbXBvc2l0aW5nQW5jZXN0b3IsIGZsb3dQb3Np
dGlvbik7Ci0gICAgICAgICAgICBhbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzLm1vdmVCeShmbG93
UG9zaXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTW92ZSB0aGUgYW5jZXN0b3IgcG9z
aXRpb24gYXQgdGhlIHRvcCBvZiB0aGUgcmVnaW9uIHdoZXJlIHRoZSBjb21wb3NpdGVkIGxheWVy
IGlzIGdvaW5nIHRvIGRpc3BsYXkuCi0gICAgICAgIFJlbmRlckZsb3dUaHJlYWQmIGZsb3dUaHJl
YWQgPSBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPihmbG93VGhyZWFkTGF5ZXItPnJlbmRlcmVy
KCkpOwotICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcGFyZW50UmVnaW9uID0gZmxv
d1RocmVhZC5jYWNoZWRSZWdpb25Gb3JDb21wb3NpdGVkTGF5ZXIobV9vd25pbmdMYXllcik7Ci0g
ICAgICAgIGlmICghcGFyZW50UmVnaW9uKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IEludFBvaW50IGZsb3dEZWx0YTsKLSAgICAgICAgbV9vd25pbmdMYXllci5jb252ZXJ0VG9QaXhl
bFNuYXBwZWRMYXllckNvb3JkcyhmbG93VGhyZWFkTGF5ZXIsIGZsb3dEZWx0YSk7Ci0gICAgICAg
IHBhcmVudFJlZ2lvbi0+YWRqdXN0UmVnaW9uQm91bmRzRnJvbUZsb3dUaHJlYWRQb3J0aW9uUmVj
dChhbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzKTsKLSAgICAgICAgUmVuZGVyQm94TW9kZWxPYmpl
Y3QmIGxheWVyT3duZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4ocGFyZW50UmVn
aW9uLT5sYXllck93bmVyKCkpOwotICAgICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGxheWVyT3du
ZXJCYWNraW5nID0gbGF5ZXJPd25lci5sYXllcigpLT5iYWNraW5nKCk7Ci0gICAgICAgIGlmICgh
bGF5ZXJPd25lckJhY2tpbmcpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgdGhlIHJlZ2lvbiBwcm9wYWdhdGVzIGl0cyBib3JkZXJzLCBwYWRkaW5ncywg
b3V0bGluZXMgb3IgYm94LXNoYWRvd3MgdG8gbGF5ZXJzIGluc2lkZSBpdC4KLSAgICAgICAgLy8g
Tm90ZSB0aGF0IHRoZSBjb21wb3NpdGVkIGJvdW5kcyBvZiB0aGUgUmVuZGVyUmVnaW9uIGFyZSBh
bHJlYWR5IGNhbGN1bGF0ZWQgYmVjYXVzZQotICAgICAgICAvLyBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZSB3aWxsIG9ubHkgaXRlcmF0ZSBvbiB0aGUg
Y29udGVudCBvZiB0aGUgcmVnaW9uIGFmdGVyIHRoZQotICAgICAgICAvLyByZWdpb24gaXRzZWxm
IGlzIGNvbXB1dGVkLgotICAgICAgICBhbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzLm1vdmVCeShy
b3VuZGVkSW50UG9pbnQobGF5ZXJPd25lckJhY2tpbmctPmNvbXBvc2l0ZWRCb3VuZHMoKS5sb2Nh
dGlvbigpKSk7Ci0gICAgICAgIGFuY2VzdG9yQ29tcG9zaXRpbmdCb3VuZHMubW92ZSgtbGF5ZXJP
d25lci5ib3JkZXJBbmRQYWRkaW5nU3RhcnQoKSwgLWxheWVyT3duZXIuYm9yZGVyQW5kUGFkZGlu
Z0JlZm9yZSgpKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSdzIGEgY2xpcHBpbmcgR3JhcGhpY3NM
YXllciBvbiB0aGUgaGllcmFyY2h5IChyZWdpb24gZ3JhcGhpY3MgbGF5ZXIgLT4gY2xpcHBpbmcg
Z3JhcGhpY3MgbGF5ZXIgLT4KLSAgICAgICAgLy8gY29tcG9zaXRlZCBjb250ZW50IGdyYXBoaWNz
IGxheWVyKSwgc3Vic3RyYWN0IHRoZSBvZmZzZXQgb2YgdGhlIGNsaXBwaW5nIGxheWVyLCBzaW5j
ZSBpdCdzIGl0cyBwYXJlbnQKLSAgICAgICAgLy8gdGhhdCBwb3NpdGlvbnMgdXMgKHRoZSBncmFw
aGljcyBsYXllciBvZiB0aGUgcmVnaW9uKS4KLSAgICAgICAgaWYgKGxheWVyT3duZXJCYWNraW5n
LT5jbGlwcGluZ0xheWVyKCkpCi0gICAgICAgICAgICBhbmNlc3RvckNvbXBvc2l0aW5nQm91bmRz
Lm1vdmVCeShyb3VuZGVkSW50UG9pbnQobGF5ZXJPd25lckJhY2tpbmctPmNsaXBwaW5nTGF5ZXIo
KS0+cG9zaXRpb24oKSkpOwotICAgIH0KLX0KLQogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZURpcmVjdGx5Q29tcG9zaXRlZEJveERlY29yYXRpb25zKFBhaW50ZWRDb250ZW50c0luZm8m
IGNvbnRlbnRzSW5mbywgYm9vbCYgZGlkVXBkYXRlQ29udGVudHNSZWN0KQogewogICAgIGlmICgh
bV9vd25pbmdMYXllci5oYXNWaXNpYmxlQ29udGVudCgpKQpAQCAtMjA0NCw5ICsxOTk3LDYgQEAg
Ym9vbCBSZW5kZXJMYXllckJhY2tpbmc6OmlzU2ltcGxlQ29udGFpbgogICAgIGlmIChyZW5kZXJl
cigpLnN0eWxlKCkuYmFja2dyb3VuZENsaXAoKSA9PSBUZXh0RmlsbEJveCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnRDb250YWluZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgaWYgKHJlbmRl
cmVyKCkuaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpICYmIG1fb3duaW5nTGF5ZXIuaXNvbGF0
ZXNDb21wb3NpdGVkQmxlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCShyZXZpc2lv
biAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzNiw5ICszMzYsNiBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBwYWludEludG9MYXllcihjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UmVjdCYgcGFpbnREaXJ0eVJlY3QsIFBhaW50QmVoYXZpb3IsIEdyYXBoaWNzTGF5
ZXJQYWludGluZ1BoYXNlKTsKIAotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdXBkYXRlR2Vv
bWV0cnkuCi0gICAgdm9pZCBhZGp1c3RBbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzRm9yRmxvd1Ro
cmVhZChMYXlvdXRSZWN0JiBhbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzLCBjb25zdCBSZW5kZXJM
YXllciogY29tcG9zaXRpbmdBbmNlc3RvcikgY29uc3Q7Ci0KICAgICBzdGF0aWMgQ1NTUHJvcGVy
dHlJRCBncmFwaGljc0xheWVyVG9DU1NQcm9wZXJ0eShBbmltYXRlZFByb3BlcnR5SUQpOwogICAg
IHN0YXRpYyBBbmltYXRlZFByb3BlcnR5SUQgY3NzVG9HcmFwaGljc0xheWVyUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUgIlJlbmRlckdlb21ldHJ5TWFwLmgiCiAjaW5jbHVk
ZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCi0jaW5j
bHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNh
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBA
IC0xMjcwLDE3ICsxMjY5LDYgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVD
b21wbwogICAgIGxheWVyLnVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwogICAgIGxh
eWVyLnVwZGF0ZUxheWVyTGlzdHNJZk5lZWRlZCgpOwogCi0gICAgaWYgKGxheWVyLmlzRmxvd1Ro
cmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKSB7Ci0gICAgICAgIGF1
dG8mIGZsb3dUaHJlYWQgPSBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPihsYXllci5yZW5kZXJl
cigpKTsKLSAgICAgICAgbGF5ZXIuc2V0SGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KGZsb3dUaHJl
YWQuaGFzQ29tcG9zaXRpbmdSZWdpb25EZXNjZW5kYW50KCkpOwotCi0gICAgICAgIC8vIEJlZm9y
ZSByZXR1cm5pbmcsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBsaXN0cyBvZiBhbGwgY2hpbGQgbGF5
ZXJzLiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UsCi0gICAgICAgIC8vIGlmIHRoaXMgZmxvdyB0
aHJlYWQgd2lsbCBub3QgYmUgcGFpbnRlZCAoZm9yIGluc3RhbmNlIGJlY2F1c2Ugb2YgaGF2aW5n
IG5vIHJlZ2lvbnMsIG9yIG9ubHkgaW52YWxpZCByZWdpb25zKSwKLSAgICAgICAgLy8gdGhlIGNo
aWxkIGxheWVycyB3aWxsIG5ldmVyIGhhdmUgdGhlaXIgbGlzdHMgdXBkYXRlZCAod2hpY2ggd291
bGQgbm9ybWFsbHkgaGFwcGVuIGR1cmluZyBwYWludGluZykuCi0gICAgICAgIGxheWVyLnVwZGF0
ZURlc2NlbmRhbnRzTGF5ZXJMaXN0c0lmTmVlZGVkKHRydWUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgLy8gQ2xlYXIgdGhlIGZsYWcKICAgICBsYXllci5zZXRIYXNDb21wb3NpdGlu
Z0Rlc2NlbmRhbnQoZmFsc2UpOwogICAgIGxheWVyLnNldEluZGlyZWN0Q29tcG9zaXRpbmdSZWFz
b24oUmVuZGVyTGF5ZXI6OkluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb246Ok5vbmUpOwpAQCAtMTM3
NCwxNSArMTM2Miw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG8K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQotICAgIGlmIChsYXllci5yZW5kZXJl
cigpLmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSkgewotICAgICAgICAvLyBX
ZSBhcmUgZ29pbmcgdG8gY29sbGVjdCBsYXllcnMgZnJvbSB0aGUgUmVuZGVyRmxvd1RocmVhZCBp
bnRvIHRoZSBHcmFwaGljc0xheWVyIG9mIHRoZSBwYXJlbnQgb2YgdGhlCi0gICAgICAgIC8vIGFu
b255bW91cyBSZW5kZXJSZWdpb24sIGJ1dCBmaXJzdCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0
IHRoZSBwYXJlbnQgaXRzZWxmIG9mIHRoZSByZWdpb24gaXMgZ29pbmcgdG8KLSAgICAgICAgLy8g
aGF2ZSBhIGNvbXBvc2l0ZWQgbGF5ZXIuIFdlIG9ubHkgd2FudCB0byBtYWtlIHJlZ2lvbnMgY29t
cG9zaXRlZCB3aGVuIHRoZXJlJ3MgYW4gYWN0dWFsIGxheWVyIHRoYXQgd2UKLSAgICAgICAgLy8g
bmVlZCB0byBtb3ZlIHRvIHRoYXQgcmVnaW9uLgotICAgICAgICBjb21wdXRlUmVnaW9uQ29tcG9z
aXRpbmdSZXF1aXJlbWVudHMoZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihsYXllci5yZW5kZXJl
cigpKS5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpLCBvdmVybGFwTWFwLCBjaGlsZFN0YXRlLCBs
YXllcnNDaGFuZ2VkLCBhbnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pOwotICAgIH0KLQogICAg
IAogICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbm9ybWFsRmxvd0xpc3QgPSBsYXllci5u
b3JtYWxGbG93TGlzdCgpKSB7CiAgICAgICAgIGZvciAoYXV0byogcmVuZGVyTGF5ZXIgOiAqbm9y
bWFsRmxvd0xpc3QpCkBAIC0xNDkyLDI1ICsxNDcxLDYgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmNvbXB1dGVDb21wbwogICAgIG92ZXJsYXBNYXAuZ2VvbWV0cnlNYXAoKS5wb3BNYXBw
aW5nc1RvQW5jZXN0b3IoYW5jZXN0b3JMYXllcik7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpjb21wdXRlUmVnaW9uQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQqIHJlZ2lvbiwgT3ZlcmxhcE1hcCYgb3ZlcmxhcE1hcCwgQ29tcG9zaXRpbmdT
dGF0ZSYgY2hpbGRTdGF0ZSwgYm9vbCYgbGF5ZXJzQ2hhbmdlZCwgYm9vbCYgYW55RGVzY2VuZGFu
dEhhczNEVHJhbnNmb3JtKQotewotICAgIGlmICghcmVnaW9uLT5pc1ZhbGlkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSByZWdpb24tPmZs
b3dUaHJlYWQoKTsKLSAgICAKLSAgICBvdmVybGFwTWFwLmdlb21ldHJ5TWFwKCkucHVzaFJlbmRl
ckZsb3dUaHJlYWQoZmxvd1RocmVhZCk7Ci0KLSAgICBpZiAoY29uc3QgUmVuZGVyTGF5ZXJMaXN0
KiBsYXllckxpc3QgPSBmbG93VGhyZWFkLT5nZXRMYXllckxpc3RGb3JSZWdpb24ocmVnaW9uKSkg
ewotICAgICAgICBmb3IgKGF1dG8qIHJlbmRlckxheWVyIDogKmxheWVyTGlzdCkgewotICAgICAg
ICAgICAgQVNTRVJUKGZsb3dUaHJlYWQtPnJlZ2lvbkZvckNvbXBvc2l0ZWRMYXllcigqcmVuZGVy
TGF5ZXIpID09IHJlZ2lvbik7Ci0gICAgICAgICAgICBjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJl
bWVudHMoZmxvd1RocmVhZC0+bGF5ZXIoKSwgKnJlbmRlckxheWVyLCBvdmVybGFwTWFwLCBjaGls
ZFN0YXRlLCBsYXllcnNDaGFuZ2VkLCBhbnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgb3ZlcmxhcE1hcC5nZW9tZXRyeU1hcCgpLnBvcE1hcHBpbmdz
VG9BbmNlc3RvcigmcmVnaW9uLT5sYXllck93bmVyKCkpOwotfQotCiB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6c2V0Q29tcG9zaXRpbmdQYXJlbnQoUmVuZGVyTGF5ZXImIGNoaWxkTGF5ZXIs
IFJlbmRlckxheWVyKiBwYXJlbnRMYXllcikKIHsKICAgICBBU1NFUlQoIXBhcmVudExheWVyIHx8
IGNoaWxkTGF5ZXIuYW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCkgPT0gcGFyZW50TGF5ZXIpOwpA
QCAtMTU1NCwxMCArMTUxNCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxk
Q29tcG8KICAgICAvLyBOb3RlIHRoYXQgd2UgY2FuIG9ubHkgZG8gd29yayBoZXJlIHRoYXQgaXMg
aW5kZXBlbmRlbnQgb2Ygd2hldGhlciB0aGUgZGVzY2VuZGFudCBsYXllcnMKICAgICAvLyBoYXZl
IGJlZW4gcHJvY2Vzc2VkLiBjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoKSB3aWxsIGFs
cmVhZHkgaGF2ZSBkb25lIHRoZSByZXBhaW50IGlmIG5lY2Vzc2FyeS4KIAotICAgIC8vIERvIG5v
dCBpdGVyYXRlIHRoZSBSZW5kZXJGbG93VGhyZWFkIGRpcmVjdGx5LiBXZSBhcmUgZ29pbmcgdG8g
Y29sbGVjdCBjb21wb3NpdGVkIGxheWVycyBhcyBwYXJ0IG9mIHJlZ2lvbnMuCi0gICAgaWYgKGxh
eWVyLmlzRmxvd1RocmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKQot
ICAgICAgICByZXR1cm47Ci0KICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGxheWVyQmFja2luZyA9
IGxheWVyLmJhY2tpbmcoKTsKICAgICBpZiAobGF5ZXJCYWNraW5nKSB7CiAgICAgICAgIC8vIFRo
ZSBjb21wb3NpdGluZyBzdGF0ZSBvZiBhbGwgb3VyIGNoaWxkcmVuIGhhcyBiZWVuIHVwZGF0ZWQg
YWxyZWFkeSwgc28gbm93CkBAIC0xNjA2LDkgKzE1NjIsNiBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVidWlsZENvbXBvCiAgICAgICAgICAgICBjaGlsZExpc3QuYXBwZW5kKGxheWVy
QmFja2luZy0+Zm9yZWdyb3VuZExheWVyKCkpOwogICAgIH0KIAotICAgIGlmIChsYXllci5yZW5k
ZXJlcigpLmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSkKLSAgICAgICAgcmVi
dWlsZFJlZ2lvbkNvbXBvc2l0aW5nTGF5ZXJUcmVlKGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4o
bGF5ZXIucmVuZGVyZXIoKSkucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSwgbGF5ZXJDaGlsZHJl
biwgZGVwdGggKyAxKTsKLQogICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbm9ybWFsRmxv
d0xpc3QgPSBsYXllci5ub3JtYWxGbG93TGlzdCgpKSB7CiAgICAgICAgIGZvciAoYXV0byogcmVu
ZGVyTGF5ZXIgOiAqbm9ybWFsRmxvd0xpc3QpCiAgICAgICAgICAgICByZWJ1aWxkQ29tcG9zaXRp
bmdMYXllclRyZWUoKnJlbmRlckxheWVyLCBjaGlsZExpc3QsIGRlcHRoICsgMSk7CkBAIC0xNjU1
LDIxICsxNjA4LDYgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYnVpbGRDb21wbwog
ICAgICAgICBsYXllckJhY2tpbmctPnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoKTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYnVpbGRSZWdpb25Db21wb3NpdGluZ0xheWVyVHJl
ZShSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVnaW9uLCBWZWN0b3I8R3JhcGhpY3NMYXllcio+
JiBjaGlsZExpc3QsIGludCBkZXB0aCkKLXsKLSAgICBpZiAoIXJlZ2lvbi0+aXNWYWxpZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gcmVn
aW9uLT5mbG93VGhyZWFkKCk7Ci0gICAgQVNTRVJUKGZsb3dUaHJlYWQtPmNvbGxlY3RzR3JhcGhp
Y3NMYXllcnNVbmRlclJlZ2lvbnMoKSk7Ci0gICAgaWYgKGNvbnN0IFJlbmRlckxheWVyTGlzdCog
bGF5ZXJMaXN0ID0gZmxvd1RocmVhZC0+Z2V0TGF5ZXJMaXN0Rm9yUmVnaW9uKHJlZ2lvbikpIHsK
LSAgICAgICAgZm9yIChhdXRvKiByZW5kZXJMYXllciA6ICpsYXllckxpc3QpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChmbG93VGhyZWFkLT5yZWdpb25Gb3JDb21wb3NpdGVkTGF5ZXIoKnJlbmRlckxh
eWVyKSA9PSByZWdpb24pOwotICAgICAgICAgICAgcmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVl
KCpyZW5kZXJMYXllciwgY2hpbGRMaXN0LCBkZXB0aCArIDEpOwotICAgICAgICB9Ci0gICAgfQot
fQotCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVWaWV3RGlkQ2hhbmdlTG9jYXRp
b24oY29uc3QgSW50UG9pbnQmIGNvbnRlbnRzT2Zmc2V0KQogewogICAgIGlmIChtX292ZXJmbG93
Q29udHJvbHNIb3N0TGF5ZXIpCkBAIC0yNTgyLDcgKzI1MjAsNyBAQCBib29sIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVxdWlyZXNDb21wCiAKICAgICAvLyBXaGVuIGEgbGF5ZXIgaGFzIGNvbXBv
c2l0ZWQgZGVzY2VuZGFudHMsIHNvbWUgZWZmZWN0cywgbGlrZSAyZCB0cmFuc2Zvcm1zLCBmaWx0
ZXJzLCBtYXNrcyBldGMgbXVzdCBiZSBpbXBsZW1lbnRlZAogICAgIC8vIHZpYSBjb21wb3NpdGlu
ZyBzbyB0aGF0IHRoZXkgYWxzbyBhcHBseSB0byB0aG9zZSBjb21wb3NpdGVkIGRlc2NlbmRhbnRz
LgotICAgIGlmIChoYXNDb21wb3NpdGVkRGVzY2VuZGFudHMgJiYgKGxheWVyLmlzb2xhdGVzQ29t
cG9zaXRlZEJsZW5kaW5nKCkgfHwgbGF5ZXIudHJhbnNmb3JtKCkgfHwgcmVuZGVyZXIuY3JlYXRl
c0dyb3VwKCkgfHwgcmVuZGVyZXIuaGFzUmVmbGVjdGlvbigpIHx8IHJlbmRlcmVyLmlzUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSkpIHsKKyAgICBpZiAoaGFzQ29tcG9zaXRlZERl
c2NlbmRhbnRzICYmIChsYXllci5pc29sYXRlc0NvbXBvc2l0ZWRCbGVuZGluZygpIHx8IGxheWVy
LnRyYW5zZm9ybSgpIHx8IHJlbmRlcmVyLmNyZWF0ZXNHcm91cCgpIHx8IHJlbmRlcmVyLmhhc1Jl
ZmxlY3Rpb24oKSkpIHsKICAgICAgICAgcmVhc29uID0gUmVuZGVyTGF5ZXI6OkluZGlyZWN0Q29t
cG9zaXRpbmdSZWFzb246OkdyYXBoaWNhbEVmZmVjdDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpAQCAtMjYwNyw5ICsyNTQ1LDYgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcAogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c3R5bGVDaGFuZ2VNYXlB
ZmZlY3RJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29ucyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIG9sZFN0eWxlKQogewotICAgIGlmIChy
ZW5kZXJlci5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCiAgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlci5zdHlsZSgpOwogICAgIGlm
IChSZW5kZXJFbGVtZW50OjpjcmVhdGVzR3JvdXBGb3JTdHlsZShzdHlsZSkgIT0gUmVuZGVyRWxl
bWVudDo6Y3JlYXRlc0dyb3VwRm9yU3R5bGUob2xkU3R5bGUpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTI3NDAsNyArMjY3NSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1
aXJlc0NvbXAKIAogICAgIC8vIERvbid0IHByb21vdGUgZml4ZWQgcG9zaXRpb24gZWxlbWVudHMg
dGhhdCBhcmUgZGVzY2VuZGFudHMgb2YgYSBub24tdmlldyBjb250YWluZXIsIGUuZy4gdHJhbnNm
b3JtZWQgZWxlbWVudHMuCiAgICAgLy8gVGhleSB3aWxsIHN0YXkgZml4ZWQgd3J0IHRoZSBjb250
YWluZXIgcmF0aGVyIHRoYW4gdGhlIGVuY2xvc2luZyBmcmFtZS4KLSAgICBpZiAoY29udGFpbmVy
ICE9ICZtX3JlbmRlclZpZXcgJiYgIXJlbmRlcmVyLmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZs
b3dDb250YWluaW5nQmxvY2soKSkgeworICAgIGlmIChjb250YWluZXIgIT0gJm1fcmVuZGVyVmll
dykgewogICAgICAgICBpZiAodmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24p
CiAgICAgICAgICAgICAqdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24gPSBS
ZW5kZXJMYXllcjo6Tm90Q29tcG9zaXRlZEZvck5vblZpZXdDb250YWluZXI7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNiBAQCBjbGFzcyBGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50czsKIGNsYXNzIEdy
YXBoaWNzTGF5ZXI7CiBjbGFzcyBHcmFwaGljc0xheWVyVXBkYXRlcjsKIGNsYXNzIFJlbmRlckVt
YmVkZGVkT2JqZWN0OwotY2xhc3MgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ7CiBjbGFzcyBSZW5k
ZXJWaWRlbzsKIGNsYXNzIFJlbmRlcldpZGdldDsKIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OwpAQCAtMzY5LDE1ICszNjgsOSBAQCBwcml2YXRlOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBh
bnkgbGF5ZXIncyBjb21wb3NpdGluZyBjaGFuZ2VkCiAgICAgdm9pZCBjb21wdXRlQ29tcG9zaXRp
bmdSZXF1aXJlbWVudHMoUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIFJlbmRlckxheWVyJiwg
T3ZlcmxhcE1hcCYsIENvbXBvc2l0aW5nU3RhdGUmLCBib29sJiBsYXllcnNDaGFuZ2VkLCBib29s
JiBkZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pOwogCi0gICAgdm9pZCBjb21wdXRlUmVnaW9uQ29t
cG9zaXRpbmdSZXF1aXJlbWVudHMoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqLCBPdmVybGFwTWFw
JiwgQ29tcG9zaXRpbmdTdGF0ZSYsIGJvb2wmIGxheWVyc0NoYW5nZWQsIGJvb2wmIGFueURlc2Nl
bmRhbnRIYXMzRFRyYW5zZm9ybSk7Ci0KICAgICAvLyBSZWN1cnNlcyBkb3duIHRoZSB0cmVlLCBw
YXJlbnRpbmcgZGVzY2VuZGFudCBjb21wb3NpdGluZyBsYXllcnMgYW5kIGNvbGxlY3RpbmcgYW4g
YXJyYXkgb2YgY2hpbGQgbGF5ZXJzIGZvciB0aGUgY3VycmVudCBjb21wb3NpdGluZyBsYXllci4K
ICAgICB2b2lkIHJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZShSZW5kZXJMYXllciYsIFZlY3Rv
cjxHcmFwaGljc0xheWVyKj4mIGNoaWxkR3JhcGhpY3NMYXllcnNPZkVuY2xvc2luZ0xheWVyLCBp
bnQgZGVwdGgpOwogCi0gICAgLy8gUmVjdXJzZXMgZG93biB0aGUgUmVuZGVyRmxvd1RocmVhZCB0
cmVlLCBwYXJlbnRpbmcgZGVzY2VuZGFudCBjb21wb3NpdGluZyBsYXllcnMgYW5kIGNvbGxlY3Rp
bmcgYW4gYXJyYXkgb2YgY2hpbGQgCi0gICAgLy8gbGF5ZXJzIGZvciB0aGUgY3VycmVudCBjb21w
b3NpdGluZyBsYXllciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbm9ueW1vdXMgcmVnaW9uICh0aGF0
IGJlbG9uZ3MgdG8gdGhlIHJlZ2lvbidzIHBhcmVudCkuCi0gICAgdm9pZCByZWJ1aWxkUmVnaW9u
Q29tcG9zaXRpbmdMYXllclRyZWUoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqLCBWZWN0b3I8R3Jh
cGhpY3NMYXllcio+JiBjaGlsZExpc3QsIGludCBkZXB0aCk7Ci0KICAgICAvLyBSZWN1cnNlcyBk
b3duIHRoZSB0cmVlLCB1cGRhdGluZyBsYXllciBnZW9tZXRyeSBvbmx5LgogICAgIHZvaWQgdXBk
YXRlTGF5ZXJUcmVlR2VvbWV0cnkoUmVuZGVyTGF5ZXImLCBpbnQgZGVwdGgpOwogICAgIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuY3BwCShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDM2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAq
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCi0KLSNpbmNsdWRlICJQYWludEluZm8u
aCIKLSNpbmNsdWRlICJSZW5kZXJCb3hSZWdpb25JbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyRmxv
d1RocmVhZC5oIgotI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVy
VGFibGVDZWxsLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlN0eWxlUmVz
b2x2ZXIuaCIKLQotI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKLSAgICA6IFJlbmRlclJl
Z2lvbihkb2N1bWVudCwgV1RGTW92ZShzdHlsZSksIG51bGxwdHIpCi0gICAgLCBtX2hhc0N1c3Rv
bVJlZ2lvblN0eWxlKGZhbHNlKQotICAgICwgbV9oYXNBdXRvTG9naWNhbEhlaWdodChmYWxzZSkK
LSAgICAsIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0KGZhbHNlKQotICAgICwgbV9jb21wdXRlZEF1
dG9IZWlnaHQoMCkKLXsKLX0KLQotUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6On5SZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCgpCi17Ci19Ci0KLVJlbmRlclN0eWxlIFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50OjpjcmVhdGVTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpCi17Ci0gICAg
YXV0byBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5
KHBhcmVudFN0eWxlLCBCTE9DSyk7Ci0KLSAgICBzdHlsZS5zZXRGbG93VGhyZWFkKHBhcmVudFN0
eWxlLmZsb3dUaHJlYWQoKSk7Ci0gICAgc3R5bGUuc2V0UmVnaW9uVGhyZWFkKHBhcmVudFN0eWxl
LnJlZ2lvblRocmVhZCgpKTsKLSAgICBzdHlsZS5zZXRSZWdpb25GcmFnbWVudChwYXJlbnRTdHls
ZS5yZWdpb25GcmFnbWVudCgpKTsKLQotICAgIHJldHVybiBzdHlsZTsKLX0KLQotdm9pZCBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudDo6dXBkYXRlUmVnaW9uRmxhZ3MoKQotewotICAgIGNoZWNrUmVn
aW9uU3R5bGUoKTsKLSAgICB1cGRhdGVSZWdpb25IYXNBdXRvTG9naWNhbEhlaWdodEZsYWcoKTsK
LX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICBSZW5k
ZXJSZWdpb246OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLQotICAgIGlmICghaXNW
YWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1cGRhdGVSZWdpb25GbGFncygpOwotCi0g
ICAgaWYgKHBhcmVudCgpICYmIHBhcmVudCgpLT5uZWVkc0xheW91dCgpKQotICAgICAgICBzZXRO
ZWVkc0xheW91dChNYXJrT25seVRoaXMpOwotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50OjpnZXRSYW5nZXMoVmVjdG9yPFJlZlB0cjxSYW5nZT4+JikgY29uc3QKLXsKLX0KLQotYm9v
bCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6c2hvdWxkSGF2ZUF1dG9Mb2dpY2FsSGVpZ2h0KCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQocGFyZW50KCkpOwotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlVG9Vc2UgPSBwYXJlbnQoKS0+c3R5bGUoKTsKLSAgICBib29sIGhhc1NwZWNpZmllZEVu
ZHBvaW50c0ZvckhlaWdodCA9IHN0eWxlVG9Vc2UubG9naWNhbFRvcCgpLmlzU3BlY2lmaWVkKCkg
JiYgc3R5bGVUb1VzZS5sb2dpY2FsQm90dG9tKCkuaXNTcGVjaWZpZWQoKTsKLSAgICBib29sIGhh
c0FuY2hvcmVkRW5kcG9pbnRzRm9ySGVpZ2h0ID0gcGFyZW50KCktPmlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpICYmIGhhc1NwZWNpZmllZEVuZHBvaW50c0ZvckhlaWdodDsKLSAgICByZXR1cm4gc3R5
bGVUb1VzZS5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkgJiYgIWhhc0FuY2hvcmVkRW5kcG9pbnRz
Rm9ySGVpZ2h0OwotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjppbmNyZW1lbnRB
dXRvTG9naWNhbEhlaWdodENvdW50KCkKLXsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLSAgICBB
U1NFUlQobV9oYXNBdXRvTG9naWNhbEhlaWdodCk7Ci0KLSAgICBtX2Zsb3dUaHJlYWQtPmluY3Jl
bWVudEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygpOwotfQotCi12b2lkIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50OjpkZWNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCkKLXsKLSAgICBBU1NF
UlQoaXNWYWxpZCgpKTsKLQotICAgIG1fZmxvd1RocmVhZC0+ZGVjcmVtZW50QXV0b0xvZ2ljYWxI
ZWlnaHRSZWdpb25zKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnVwZGF0
ZVJlZ2lvbkhhc0F1dG9Mb2dpY2FsSGVpZ2h0RmxhZygpCi17Ci0gICAgQVNTRVJUKGlzVmFsaWQo
KSk7Ci0KLSAgICBib29sIGRpZEhhdmVBdXRvTG9naWNhbEhlaWdodCA9IG1faGFzQXV0b0xvZ2lj
YWxIZWlnaHQ7Ci0gICAgbV9oYXNBdXRvTG9naWNhbEhlaWdodCA9IHNob3VsZEhhdmVBdXRvTG9n
aWNhbEhlaWdodCgpOwotICAgIGlmIChkaWRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQgPT0gbV9oYXNB
dXRvTG9naWNhbEhlaWdodCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faGFzQXV0b0xv
Z2ljYWxIZWlnaHQpCi0gICAgICAgIGluY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgY2xlYXJDb21wdXRlZEF1dG9IZWlnaHQoKTsKLSAgICAgICAg
ZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3VudCgpOwotICAgIH0KLX0KLQotdm9pZCBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudDo6dXBkYXRlTG9naWNhbEhlaWdodCgpCi17Ci0gICAgUmVuZGVy
UmVnaW9uOjp1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7Ci0KLSAgICBpZiAoIWhhc0F1dG9Mb2dpY2Fs
SGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIHdhbnQgdG8gdXBkYXRlIHRo
ZSBsb2dpY2FsIGhlaWdodCBiYXNlZCBvbiB0aGUgY29tcHV0ZWQgYXV0by1oZWlnaHQKLSAgICAv
LyBvbmx5IGFmdGVyIHRoZSBtZWFzdXJlIGNvdG5lbnQgbGF5b3V0IHBoYXNlIHdoZW4gYWxsIHRo
ZQotICAgIC8vIGF1dG8gbG9naWNhbCBoZWlnaHQgcmVnaW9ucyBoYXZlIGEgY29tcHV0ZWQgYXV0
by1oZWlnaHQuCi0gICAgaWYgKG1fZmxvd1RocmVhZC0+aW5NZWFzdXJlQ29udGVudExheW91dFBo
YXNlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZXJlIG1heSBiZSByZWdpb25zIHdp
dGggYXV0byBsb2dpY2FsIGhlaWdodCB0aGF0IGR1cmluZyB0aGUgcHJlcmVxdWlzaXRlIGxheW91
dCBwaGFzZQotICAgIC8vIGRpZCBub3QgaGF2ZSB0aGUgY2hhbmNlIHRvIGxheW91dCBmbG93IHRo
cmVhZCBjb250ZW50LiBCZWNhdXNlIG9mIHRoYXQsIHRoZXNlIHJlZ2lvbnMgZG8gbm90Ci0gICAg
Ly8gaGF2ZSBhIGNvbXB1dGVkQXV0b0hlaWdodCBhbmQgdGhleSB3aWxsIG5vdCBiZSBhYmxlIHRv
IGZyYWdtZW50IGFueSBmbG93Ci0gICAgLy8gdGhyZWFkIGNvbnRlbnQuCi0gICAgaWYgKCFoYXND
b21wdXRlZEF1dG9IZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5b3V0VW5pdCBu
ZXdMb2dpY2FsSGVpZ2h0ID0gY29tcHV0ZWRBdXRvSGVpZ2h0KCkgKyBib3JkZXJBbmRQYWRkaW5n
TG9naWNhbEhlaWdodCgpOwotICAgIEFTU0VSVChuZXdMb2dpY2FsSGVpZ2h0IDwgUmVuZGVyRmxv
d1RocmVhZDo6bWF4TG9naWNhbEhlaWdodCgpKTsKLSAgICBpZiAobmV3TG9naWNhbEhlaWdodCA+
IGxvZ2ljYWxIZWlnaHQoKSkgewotICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KG5ld0xvZ2ljYWxI
ZWlnaHQpOwotICAgICAgICAvLyBSZWNhbGN1bGF0ZSBwb3NpdGlvbiBvZiB0aGUgcmVuZGVyIGJs
b2NrIGFmdGVyIG5ldyBsb2dpY2FsIGhlaWdodCBpcyBzZXQuCi0gICAgICAgIC8vIChuZWVkZWQg
aW4gYWJzb2x1dGUgcG9zaXRpb25pbmcgY2FzZSB3aXRoIGJvdHRvbSBhbGlnbm1lbnQgZm9yIGV4
YW1wbGUpCi0gICAgICAgIFJlbmRlclJlZ2lvbjo6dXBkYXRlTG9naWNhbEhlaWdodCgpOwotICAg
IH0KLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6cGFnZUxvZ2ljYWxI
ZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotICAgIGlmIChoYXNDb21w
dXRlZEF1dG9IZWlnaHQoKSAmJiBtX2Zsb3dUaHJlYWQtPmluTWVhc3VyZUNvbnRlbnRMYXlvdXRQ
aGFzZSgpKSB7Ci0gICAgICAgIEFTU0VSVChoYXNBdXRvTG9naWNhbEhlaWdodCgpKTsKLSAgICAg
ICAgcmV0dXJuIGNvbXB1dGVkQXV0b0hlaWdodCgpOwotICAgIH0KLSAgICByZXR1cm4gbV9mbG93
VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29udGVudEhlaWdodCgpIDogY29u
dGVudFdpZHRoKCk7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG1heGltdW0gcGFn
ZSBzaXplIG9mIGEgcmVnaW9uIHdpdGggYXV0by1oZWlnaHQuIFRoaXMgaXMgdGhlIGluaXRpYWwK
LS8vIGhlaWdodCB2YWx1ZSBmb3IgYXV0by1oZWlnaHQgcmVnaW9ucyBpbiB0aGUgZmlyc3QgbGF5
b3V0IHBoYXNlIG9mIHRoZSBwYXJlbnQgbmFtZWQgZmxvdy4KLUxheW91dFVuaXQgUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQ6Om1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQoaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSAmJiBtX2Zs
b3dUaHJlYWQtPmluTWVhc3VyZUNvbnRlbnRMYXlvdXRQaGFzZSgpKTsKLSAgICBBU1NFUlQoaXNB
bm9ueW1vdXMoKSk7Ci0gICAgQVNTRVJUKHBhcmVudCgpKTsKLQotICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZVRvVXNlID0gcGFyZW50KCktPnN0eWxlKCk7Ci0gICAgcmV0dXJuIHN0eWxlVG9V
c2UubG9naWNhbE1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBSZW5kZXJGbG93VGhyZWFkOjpt
YXhMb2dpY2FsSGVpZ2h0KCkgOiBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBhcmVudCgpKS5jb21w
dXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoTWF4U2l6ZSwgc3R5bGVUb1VzZS5sb2dpY2Fs
TWF4SGVpZ2h0KCkpOwotfQotCi1MYXlvdXRSZWN0IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpm
bG93VGhyZWFkUG9ydGlvblJlY3RGb3JDbGlwcGluZyhib29sIGlzRmlyc3RSZWdpb25JblJhbmdl
LCBib29sIGlzTGFzdFJlZ2lvbkluUmFuZ2UpIGNvbnN0Ci17Ci0gICAgLy8gRWxlbWVudHMgZmxv
d2VkIGludG8gYSByZWdpb24gc2hvdWxkIG5vdCBiZSBwYWludGVkIHBhc3QgdGhlIHJlZ2lvbidz
IGNvbnRlbnQgYm94Ci0gICAgLy8gaWYgdGhleSBjb250aW51ZSB0byBmbG93IGludG8gYW5vdGhl
ciByZWdpb24gaW4gdGhhdCBkaXJlY3Rpb24uCi0gICAgLy8gSWYgdGhleSBkbyBub3QgY29udGlu
dWUgaW50byBhbm90aGVyIHJlZ2lvbiBpbiB0aGF0IGRpcmVjdGlvbiwgdGhleSBzaG91bGQgYmUK
LSAgICAvLyBwYWludGVkIGFsbCB0aGUgd2F5IHRvIHRoZSByZWdpb24ncyBib3JkZXIgYm94Lgot
ICAgIC8vIFJlZ2lvbnMgd2l0aCBvdmVyZmxvdzpoaWRkZW4gd2lsbCBhcHBseSBjbGlwIGF0IHRo
ZSBib3JkZXIgYm94LCBub3QgdGhlIGNvbnRlbnQgYm94LgotICAgIAotICAgIExheW91dFJlY3Qg
Y2xpcHBpbmdSZWN0ID0gZmxvd1RocmVhZFBvcnRpb25SZWN0KCk7Ci0gICAgUmVuZGVyQmxvY2tG
bG93JiBjb250YWluZXIgPSBmcmFnbWVudENvbnRhaW5lcigpOwotICAgIGlmIChjb250YWluZXIu
c3R5bGUoKS5oYXNQYWRkaW5nKCkpIHsKLSAgICAgICAgaWYgKGlzRmlyc3RSZWdpb25JblJhbmdl
KSB7Ci0gICAgICAgICAgICBpZiAoZmxvd1RocmVhZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2xpcHBpbmdSZWN0Lm1vdmUoMCwgLWNvbnRhaW5lci5w
YWRkaW5nQmVmb3JlKCkpOwotICAgICAgICAgICAgICAgIGNsaXBwaW5nUmVjdC5leHBhbmQoMCwg
Y29udGFpbmVyLnBhZGRpbmdCZWZvcmUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGNsaXBwaW5nUmVjdC5tb3ZlKC1jb250YWluZXIucGFkZGluZ0JlZm9yZSgpLCAw
KTsKLSAgICAgICAgICAgICAgICBjbGlwcGluZ1JlY3QuZXhwYW5kKGNvbnRhaW5lci5wYWRkaW5n
QmVmb3JlKCksIDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoaXNMYXN0UmVnaW9uSW5SYW5nZSkgewotICAgICAgICAgICAgaWYgKGZsb3dUaHJlYWQo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgICAgICBjbGlwcGluZ1Jl
Y3QuZXhwYW5kKDAsIGNvbnRhaW5lci5wYWRkaW5nQWZ0ZXIoKSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgY2xpcHBpbmdSZWN0LmV4cGFuZChjb250YWluZXIucGFkZGluZ0Fm
dGVyKCksIDApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoZmxvd1RocmVhZCgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICBjbGlwcGluZ1JlY3Qu
bW92ZSgtY29udGFpbmVyLnBhZGRpbmdTdGFydCgpLCAwKTsKLSAgICAgICAgICAgIGNsaXBwaW5n
UmVjdC5leHBhbmQoY29udGFpbmVyLnBhZGRpbmdTdGFydCgpICsgY29udGFpbmVyLnBhZGRpbmdF
bmQoKSwgMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjbGlwcGluZ1JlY3QubW92
ZSgwLCAtY29udGFpbmVyLnBhZGRpbmdTdGFydCgpKTsKLSAgICAgICAgICAgIGNsaXBwaW5nUmVj
dC5leHBhbmQoMCwgY29udGFpbmVyLnBhZGRpbmdTdGFydCgpICsgY29udGFpbmVyLnBhZGRpbmdF
bmQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNsaXBwaW5nUmVjdDsK
LX0KLQotUmVuZGVyQmxvY2tGbG93JiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6ZnJhZ21lbnRD
b250YWluZXIoKSBjb25zdAotewotICAgIEFTU0VSVChwYXJlbnQoKSk7Ci0gICAgQVNTRVJUKHBh
cmVudCgpLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpOwotICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwYXJlbnQoKSk7Ci19Ci0KLVJlbmRlckxheWVy
JiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6ZnJhZ21lbnRDb250YWluZXJMYXllcigpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKGZyYWdtZW50Q29udGFpbmVyKCkubGF5ZXIoKSk7Ci0gICAgcmV0dXJu
ICpmcmFnbWVudENvbnRhaW5lcigpLmxheWVyKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ6OnNob3VsZENsaXBGbG93VGhyZWFkQ29udGVudCgpIGNvbnN0Ci17Ci0gICAgaWYg
KGZyYWdtZW50Q29udGFpbmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIAotICAgIHJldHVybiBpc0xhc3RSZWdpb24oKSAmJiAoc3R5bGUoKS5yZWdpb25G
cmFnbWVudCgpID09IEJyZWFrUmVnaW9uRnJhZ21lbnQpOwotfQotICAgIAotTGF5b3V0U2l6ZSBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6b2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJFbGVtZW50
JiBjb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiwgYm9vbCopIGNvbnN0Ci17Ci0gICAgQVNT
RVJUX1VOVVNFRChjb250YWluZXIsICZmcmFnbWVudENvbnRhaW5lcigpID09ICZjb250YWluZXIp
OwotICAgIEFTU0VSVF9VTlVTRUQoY29udGFpbmVyLCB0aGlzLT5jb250YWluZXIoKSA9PSAmY29u
dGFpbmVyKTsKLSAgICByZXR1cm4gdG9wTGVmdExvY2F0aW9uT2Zmc2V0KCk7Ci19Ci0KLXZvaWQg
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgTGF5b3V0VW5pdCkKLXsKLSAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91
dENoZWNrUG9pbnQ7Ci0gICAgUmVuZGVyUmVnaW9uOjpsYXlvdXRCbG9jayhyZWxheW91dENoaWxk
cmVuKTsKLQotICAgIGlmIChpc1ZhbGlkKCkpIHsKLSAgICAgICAgaWYgKG1fZmxvd1RocmVhZC0+
aW5PdmVyZmxvd0xheW91dFBoYXNlKCkgfHwgbV9mbG93VGhyZWFkLT5pbkZpbmFsTGF5b3V0UGhh
c2UoKSkKLSAgICAgICAgICAgIGNvbXB1dGVPdmVyZmxvd0Zyb21GbG93VGhyZWFkKCk7Ci0KLSAg
ICAgICAgaWYgKGhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkgJiYgbV9mbG93VGhyZWFkLT5pbk1lYXN1
cmVDb250ZW50TGF5b3V0UGhhc2UoKSkgewotICAgICAgICAgICAgbV9mbG93VGhyZWFkLT5pbnZh
bGlkYXRlUmVnaW9ucygpOwotICAgICAgICAgICAgY2xlYXJDb21wdXRlZEF1dG9IZWlnaHQoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudDo6aW52YWxpZGF0ZVJlZ2lvbklmTmVlZGVkKCkKLXsKLSAgICBpZiAo
IWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5b3V0UmVjdCBvbGRSZWdpb25S
ZWN0KGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpKTsKLSAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCi0gICAgICAgIG9sZFJlZ2lvblJlY3QgPSBvbGRSZWdpb25SZWN0LnRyYW5zcG9z
ZWRSZWN0KCk7Ci0KLSAgICBpZiAoKG9sZFJlZ2lvblJlY3Qud2lkdGgoKSAhPSBwYWdlTG9naWNh
bFdpZHRoKCkgfHwgb2xkUmVnaW9uUmVjdC5oZWlnaHQoKSAhPSBwYWdlTG9naWNhbEhlaWdodCgp
KSAmJiAhbV9mbG93VGhyZWFkLT5pbkZpbmFsTGF5b3V0UGhhc2UoKSkgewotICAgICAgICAvLyBU
aGlzIGNhbiBoYXBwZW4gZXZlbiBpZiB3ZSBhcmUgaW4gdGhlIGluQ29uc3RyYWluZWRMYXlvdXRQ
aGFzZSBhbmQgaXQgd2lsbCB0cmlnZ2VyIGEgcGF0aG9sb2dpY2FsIGxheW91dCBvZiB0aGUgZmxv
dyB0aHJlYWQuCi0gICAgICAgIG1fZmxvd1RocmVhZC0+aW52YWxpZGF0ZVJlZ2lvbnMoKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNoZWNrUmVnaW9uU3R5bGUo
KQotewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotCi0gICAgYm9vbCBjdXN0b21SZWdpb25TdHls
ZSA9IGZhbHNlOwotCi0gICAgc2V0SGFzQ3VzdG9tUmVnaW9uU3R5bGUoY3VzdG9tUmVnaW9uU3R5
bGUpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbihSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVy
U3R5bGUmKSBjb25zdAotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlQ2hpbGRyZW5TdHlsZUluUmVnaW9uKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyKQotewotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxS
ZW5kZXJFbGVtZW50PihyZW5kZXJlcikpIHsKLSAgICAgICAgYXV0byBpdCA9IG1fcmVuZGVyZXJS
ZWdpb25TdHlsZS5maW5kKCZjaGlsZCk7Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBjaGlsZFN0eWxlSW5SZWdpb247Ci0gICAgICAgIGJvb2wgb2JqZWN0UmVnaW9uU3R5
bGVDYWNoZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGl0ICE9IG1fcmVuZGVyZXJSZWdpb25TdHls
ZS5lbmQoKSkgewotICAgICAgICAgICAgY2hpbGRTdHlsZUluUmVnaW9uID0gUmVuZGVyU3R5bGU6
OmNsb25lUHRyKCppdC0+dmFsdWUuc3R5bGUpOwotICAgICAgICAgICAgb2JqZWN0UmVnaW9uU3R5
bGVDYWNoZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGNoaWxk
LmlzQW5vbnltb3VzKCkgfHwgY2hpbGQuaXNJbkZsb3dSZW5kZXJGbG93VGhyZWFkKCkpCi0gICAg
ICAgICAgICAgICAgY2hpbGRTdHlsZUluUmVnaW9uID0gIHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVy
U3R5bGU+KFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHJlbmRl
cmVyLnN0eWxlKCksIGNoaWxkLnN0eWxlKCkuZGlzcGxheSgpKSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgY2hpbGRTdHlsZUluUmVnaW9uID0gY29tcHV0ZVN0eWxlSW5SZWdp
b24oY2hpbGQsIHJlbmRlcmVyLnN0eWxlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2V0UmVu
ZGVyZXJTdHlsZUluUmVnaW9uKGNoaWxkLCBXVEZNb3ZlKGNoaWxkU3R5bGVJblJlZ2lvbiksIG9i
amVjdFJlZ2lvblN0eWxlQ2FjaGVkKTsKLSAgICAgICAgY29tcHV0ZUNoaWxkcmVuU3R5bGVJblJl
Z2lvbihjaGlsZCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpz
ZXRSZW5kZXJlclN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGVJblJlZ2lvbiwgYm9vbCBvYmplY3RSZWdpb25TdHls
ZUNhY2hlZCkKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIuZmxvd1RocmVhZENvbnRhaW5pbmdCbG9j
aygpKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gb2JqZWN0T3JpZ2luYWxT
dHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlci5zdHlsZSgpKTsKLSAgICByZW5k
ZXJlci5zZXRTdHlsZUludGVybmFsKFdURk1vdmUoKnN0eWxlSW5SZWdpb24pKTsKLQotICAgIGlm
IChpczxSZW5kZXJCb3hNb2RlbE9iamVjdD4ocmVuZGVyZXIpICYmICFyZW5kZXJlci5oYXNWaXNp
YmxlQm94RGVjb3JhdGlvbnMoKSkgewotICAgICAgICBib29sIGhhc1Zpc2libGVCb3hEZWNvcmF0
aW9ucyA9IGlzPFJlbmRlclRhYmxlQ2VsbD4ocmVuZGVyZXIpCi0gICAgICAgIHx8IHJlbmRlcmVy
LnN0eWxlKCkuaGFzQmFja2dyb3VuZCgpCi0gICAgICAgIHx8IHJlbmRlcmVyLnN0eWxlKCkuaGFz
VmlzaWJsZUJvcmRlcigpCi0gICAgICAgIHx8IHJlbmRlcmVyLnN0eWxlKCkuaGFzQXBwZWFyYW5j
ZSgpCi0gICAgICAgIHx8IHJlbmRlcmVyLnN0eWxlKCkuYm94U2hhZG93KCk7Ci0gICAgICAgIHJl
bmRlcmVyLnNldEhhc1Zpc2libGVCb3hEZWNvcmF0aW9ucyhoYXNWaXNpYmxlQm94RGVjb3JhdGlv
bnMpOwotICAgIH0KLQotICAgIE9iamVjdFJlZ2lvblN0eWxlSW5mbyBzdHlsZUluZm87Ci0gICAg
c3R5bGVJbmZvLnN0eWxlID0gV1RGTW92ZShvYmplY3RPcmlnaW5hbFN0eWxlKTsKLSAgICBzdHls
ZUluZm8uY2FjaGVkID0gb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQ7Ci0gICAgbV9yZW5kZXJlclJl
Z2lvblN0eWxlLnNldCgmcmVuZGVyZXIsIFdURk1vdmUoc3R5bGVJbmZvKSk7Ci19Ci0KLXZvaWQg
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNsZWFyT2JqZWN0U3R5bGVJblJlZ2lvbihjb25zdCBS
ZW5kZXJFbGVtZW50JiBvYmplY3QpCi17Ci0gICAgbV9yZW5kZXJlclJlZ2lvblN0eWxlLnJlbW92
ZSgmb2JqZWN0KTsKLQotICAgIC8vIENsZWFyIHRoZSBzdHlsZSBmb3IgdGhlIGNoaWxkcmVuIG9m
IHRoaXMgb2JqZWN0LgotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5k
ZXJFbGVtZW50PihvYmplY3QpKQotICAgICAgICBjbGVhck9iamVjdFN0eWxlSW5SZWdpb24oY2hp
bGQpOwotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpzZXRSZWdpb25PYmplY3Rz
UmVnaW9uU3R5bGUoKQotewotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpyZXN0
b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUoKQotewotICAgIGlmICghaGFzQ3VzdG9tUmVn
aW9uU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyZXJSZWdpb25TdHlsZU1h
cCB0ZW1wOwotICAgIGZvciAoYXV0byYgb2JqZWN0UGFpciA6IG1fcmVuZGVyZXJSZWdpb25TdHls
ZSkgewotICAgICAgICBhdXRvKiBvYmplY3QgPSBjb25zdF9jYXN0PFJlbmRlckVsZW1lbnQqPihv
YmplY3RQYWlyLmtleSk7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gb2Jq
ZWN0UmVnaW9uU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIob2JqZWN0LT5zdHlsZSgpKTsK
LSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBvYmplY3RPcmlnaW5hbFN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKCpvYmplY3RQYWlyLnZhbHVlLnN0eWxlKTsKLQotICAg
ICAgICBib29sIHNob3VsZENhY2hlUmVnaW9uU3R5bGUgPSBvYmplY3RQYWlyLnZhbHVlLmNhY2hl
ZDsKLSAgICAgICAgaWYgKCFzaG91bGRDYWNoZVJlZ2lvblN0eWxlKSB7Ci0gICAgICAgICAgICAv
LyBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBjYWNoZSB0aGUgY29tcHV0ZWQgc3R5bGUgaW4gcmVn
aW9uLgotICAgICAgICAgICAgdW5zaWduZWQgY2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0
aWVzID0gQ29udGV4dFNlbnNpdGl2ZVByb3BlcnR5Tm9uZTsKLSAgICAgICAgICAgIFN0eWxlRGlm
ZmVyZW5jZSBzdHlsZURpZmYgPSBvYmplY3RPcmlnaW5hbFN0eWxlLT5kaWZmKCpvYmplY3RSZWdp
b25TdHlsZSwgY2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAg
IGlmIChzdHlsZURpZmYgPCBTdHlsZURpZmZlcmVuY2VMYXlvdXRQb3NpdGlvbmVkTW92ZW1lbnRP
bmx5KQotICAgICAgICAgICAgICAgIHNob3VsZENhY2hlUmVnaW9uU3R5bGUgPSB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChzaG91bGRDYWNoZVJlZ2lvblN0eWxlKSB7Ci0gICAgICAgICAg
ICBPYmplY3RSZWdpb25TdHlsZUluZm8gc3R5bGVJbmZvOwotICAgICAgICAgICAgc3R5bGVJbmZv
LnN0eWxlID0gV1RGTW92ZShvYmplY3RSZWdpb25TdHlsZSk7Ci0gICAgICAgICAgICBzdHlsZUlu
Zm8uY2FjaGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHRlbXAuc2V0KG9iamVjdCwgV1RGTW92ZShz
dHlsZUluZm8pKTsKLSAgICAgICAgfQotICAgICAgICBvYmplY3QtPnNldFN0eWxlSW50ZXJuYWwo
V1RGTW92ZSgqb2JqZWN0T3JpZ2luYWxTdHlsZSkpOwotICAgIH0KLQotICAgIG1fcmVuZGVyZXJS
ZWdpb25TdHlsZS5zd2FwKHRlbXApOwotfQotCi1MYXlvdXRSZWN0IFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50Ojp2aXN1YWxPdmVyZmxvd1JlY3QoKSBjb25zdAotewotICAgIGlmIChpc1ZhbGlkKCkp
IHsKLSAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IHJlbmRlckJveFJlZ2lv
bkluZm8oZmxvd1RocmVhZCgpKTsKLSAgICAgICAgaWYgKGJveEluZm8gJiYgYm94SW5mby0+b3Zl
cmZsb3coKSkKLSAgICAgICAgICAgIHJldHVybiBib3hJbmZvLT5vdmVyZmxvdygpLT52aXN1YWxP
dmVyZmxvd1JlY3QoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFJlbmRlclJlZ2lvbjo6dmlz
dWFsT3ZlcmZsb3dSZWN0KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmF0
dGFjaFJlZ2lvbigpCi17Ci0gICAgUmVuZGVyUmVnaW9uOjphdHRhY2hSZWdpb24oKTsKLQotICAg
IGlmIChyZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSB8fCAhaXNWYWxpZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB1cGRhdGVSZWdpb25GbGFncygpOwotfQotCi12b2lkIFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50OjpkZXRhY2hSZWdpb24oKQotewotICAgIGlmIChoYXNBdXRvTG9naWNhbEhl
aWdodCgpKSB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotICAgICAgICBtX2hhc0F1dG9M
b2dpY2FsSGVpZ2h0ID0gZmFsc2U7Ci0gICAgICAgIGNsZWFyQ29tcHV0ZWRBdXRvSGVpZ2h0KCk7
Ci0gICAgICAgIGRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKTsKLSAgICB9Ci0gICAg
Ci0gICAgUmVuZGVyUmVnaW9uOjpkZXRhY2hSZWdpb24oKTsKLX0KLQotdm9pZCBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudDo6YWJzb2x1dGVRdWFkc0ZvckJveEluUmVnaW9uKFZlY3RvcjxGbG9hdFF1
YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4ZWQsIGNvbnN0IFJlbmRlckJveCogcmVuZGVyZXIsIGZs
b2F0IGxvY2FsVG9wLCBmbG9hdCBsb2NhbEJvdHRvbSkKLXsKLSAgICBMYXlvdXRSZWN0IGxheW91
dExvY2FsUmVjdCgwLCBsb2NhbFRvcCwgcmVuZGVyZXItPmJvcmRlckJveFJlY3RJblJlZ2lvbih0
aGlzKS53aWR0aCgpLCBsb2NhbEJvdHRvbSAtIGxvY2FsVG9wKTsKLSAgICBMYXlvdXRSZWN0IGZy
YWdtZW50UmVjdCA9IHJlY3RGbG93UG9ydGlvbkZvckJveChyZW5kZXJlciwgbGF5b3V0TG9jYWxS
ZWN0KTsKLQotICAgIC8vIFdlIHdhbnQgdG8gc2tpcCB0aGUgMHB4IGhlaWdodCBmcmFnbWVudHMg
Zm9yIG5vbi1lbXB0eSBib3hlcyB0aGF0IG1heSBhcHBlYXIgaW4gY2FzZSB0aGUgYm90dG9tIG9m
IHRoZSBib3gKLSAgICAvLyBvdmVybGFwcyB0aGUgYm90dG9tIG9mIGEgcmVnaW9uLgotICAgIGlm
IChsb2NhbEJvdHRvbSAhPSBsb2NhbFRvcCAmJiAhZnJhZ21lbnRSZWN0LmhlaWdodCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lciByZWdpb25N
YWludGFpbmVyKCp0aGlzKTsKLSAgICBxdWFkcy5hcHBlbmQocmVuZGVyZXItPmxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRSZWN0KGZyYWdtZW50UmVjdCksIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVk
KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCShyZXZpc2lvbiAyMjIy
NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
Ci0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRWxlbWVudDsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi0v
LyBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCByZXByZXNlbnRzIGEgcmVnaW9uIHRoYXQgaXMgcmVz
cG9uc2libGUgZm9yIHRoZSBmcmFnbWVudGF0aW9uIG9mCi0vLyB0aGUgUmVuZGVyTmFtZWRGbG93
VGhyZWFkIGNvbnRlbnQuCi0vLwotLy8gQSBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCBvYmplY3Qg
aXMgY3JlYXRlZCBhcyBhbiBhbm9ueW1vdXMgY2hpbGQgZm9yIGEgUmVuZGVyQmxvY2tGbG93IG9i
amVjdAotLy8gdGhhdCBoYXMgYSB2YWxpZCAtd2Via2l0LWZsb3ctZnJvbSBwcm9wZXJ0eS4KLS8v
Ci0vLyBUaGlzIGFsbG93cyBhIG5vbi1yZXBsYWNlZCBibG9jayB0byBiZWhhdmUgbGlrZSBhIHJl
Z2lvbiBpZiBuZWVkZWQsIGZvbGxvd2luZyB0aGUgQ1NTUmVnaW9ucyBzcGVjaWZpY2F0aW9uOgot
Ly8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLXJlZ2lvbnMvI3RoZS1mbG93LWZyb20tcHJv
cGVydHkuCi0vLyBsaXN0LWl0ZW0sIHRhYmxlLWNhcHRpb24sIHRhYmxlLWNlbGwgY2FuIGJlY29t
ZSByZWdpb25zIGluIGFkZGl0aW9uIHRvIGJsb2NrIHwgaW5saW5lLWJsb2NrLgotCi1jbGFzcyBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJSZWdpb24gewotcHVi
bGljOgotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KERvY3VtZW50JiwgUmVuZGVyU3R5bGUm
Jik7Ci0gICAgdmlydHVhbCB+UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKLQotICAgIHN0YXRp
YyBSZW5kZXJTdHlsZSBjcmVhdGVTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUp
OwotCi0gICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGdldFJhbmdlcyhWZWN0b3I8
UmVmUHRyPFJhbmdlPj4mKSBjb25zdDsKLQotICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWln
aHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBMYXlvdXRVbml0IG1heFBhZ2VMb2dpY2FsSGVpZ2h0
KCkgY29uc3Q7Ci0gICAgCi0gICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkUG9ydGlvblJlY3RGb3JD
bGlwcGluZyhib29sIGlzRmlyc3RSZWdpb25JblJhbmdlLCBib29sIGlzTGFzdFJlZ2lvbkluUmFu
Z2UpIGNvbnN0OwotCi0gICAgUmVuZGVyQmxvY2tGbG93JiBmcmFnbWVudENvbnRhaW5lcigpIGNv
bnN0OwotICAgIFJlbmRlckxheWVyJiBmcmFnbWVudENvbnRhaW5lckxheWVyKCkgY29uc3Q7Ci0g
ICAgCi0gICAgYm9vbCBzaG91bGRDbGlwRmxvd1RocmVhZENvbnRlbnQoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICAKLSAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Db250YWluZXIoUmVuZGVyRWxlbWVu
dCYsIGNvbnN0IExheW91dFBvaW50JiwgYm9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQgPSBudWxs
cHRyKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGJvb2wgaXNQc2V1ZG9FbGVtZW50UmVnaW9uKCkg
Y29uc3QgeyByZXR1cm4gcGFyZW50KCkgJiYgcGFyZW50KCktPmlzUHNldWRvRWxlbWVudCgpOyB9
Ci0KLSAgICAvLyBXaGVuIHRoZSBjb250ZW50IGluc2lkZSB0aGUgcmVnaW9uIHJlcXVpcmVzIHRo
ZSByZWdpb24gdG8gaGF2ZSBhIGxheWVyLCB0aGUgbGF5ZXIgd2lsbCBiZSBjcmVhdGVkIG9uIHRo
ZSByZWdpb24ncwotICAgIC8vIHBhcmVudCByZW5kZXJlciBpbnN0ZWFkLgotICAgIC8vIFRoaXMg
bWV0aG9kIHJldHVybnMgdGhhdCByZW5kZXJlciBob2xkaW5nIHRoZSBsYXllci4KLSAgICAvLyBU
aGUgcmV0dXJuIHZhbHVlIGNhbm5vdCBiZSBudWxsIGJlY2F1c2UgQ1NTIFJlZ2lvbnMgY3JlYXRl
IFN0YWNraW5nIENvbnRleHRzICh3aGljaCBtZWFucyB0aGV5IGNyZWF0ZSBsYXllcnMpLgotICAg
IFJlbmRlckxheWVyTW9kZWxPYmplY3QmIGxheWVyT3duZXIoKSBjb25zdCB7IHJldHVybiBkb3du
Y2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcGFyZW50KCkpOyB9Ci0KLSAgICBib29sIGhh
c0N1c3RvbVJlZ2lvblN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDdXN0b21SZWdpb25TdHls
ZTsgfQotICAgIHZvaWQgY2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlckVsZW1l
bnQmKTsKLQotICAgIHZvaWQgc2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxlKCk7Ci0gICAgdm9p
ZCByZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUoKTsKLSAgICAKLSAgICBMYXlvdXRS
ZWN0IHZpc3VhbE92ZXJmbG93UmVjdCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9vbCBoYXNB
dXRvTG9naWNhbEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzQXV0b0xvZ2lj
YWxIZWlnaHQ7IH0KLQotICAgIExheW91dFVuaXQgY29tcHV0ZWRBdXRvSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9jb21wdXRlZEF1dG9IZWlnaHQ7IH0KLQotICAgIHZvaWQgc2V0Q29tcHV0ZWRB
dXRvSGVpZ2h0KExheW91dFVuaXQgY29tcHV0ZWRBdXRvSGVpZ2h0KQotICAgIHsKLSAgICAgICAg
bV9oYXNDb21wdXRlZEF1dG9IZWlnaHQgPSB0cnVlOwotICAgICAgICBtX2NvbXB1dGVkQXV0b0hl
aWdodCA9IGNvbXB1dGVkQXV0b0hlaWdodDsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyQ29tcHV0
ZWRBdXRvSGVpZ2h0KCkKLSAgICB7Ci0gICAgICAgIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0ID0g
ZmFsc2U7Ci0gICAgICAgIG1fY29tcHV0ZWRBdXRvSGVpZ2h0ID0gMDsKLSAgICB9Ci0KLSAgICBi
b29sIGhhc0NvbXB1dGVkQXV0b0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcHV0ZWRB
dXRvSGVpZ2h0OyB9Ci0KLQotICAgIHZvaWQgYXR0YWNoUmVnaW9uKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkZXRhY2hSZWdpb24oKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdXBkYXRlTG9naWNhbEhl
aWdodCgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRhdGVSZWdpb25GbGFncygpOwotCi0gICAg
dm9pZCBhYnNvbHV0ZVF1YWRzRm9yQm94SW5SZWdpb24oVmVjdG9yPEZsb2F0UXVhZD4mLCBib29s
KiwgY29uc3QgUmVuZGVyQm94KiwgZmxvYXQsIGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQg
aW52YWxpZGF0ZVJlZ2lvbklmTmVlZGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpc1JlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQiOyB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IGNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lv
bihSZW5kZXJFbGVtZW50Jik7Ci0gICAgdm9pZCBzZXRSZW5kZXJlclN0eWxlSW5SZWdpb24oUmVu
ZGVyRWxlbWVudCYsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4sIGJvb2wgb2JqZWN0UmVn
aW9uU3R5bGVDYWNoZWQpOwotCi0gICAgdm9pZCBjaGVja1JlZ2lvblN0eWxlKCk7Ci0gICAgdm9p
ZCBzZXRIYXNDdXN0b21SZWdpb25TdHlsZShib29sIGhhc0N1c3RvbVJlZ2lvblN0eWxlKSB7IG1f
aGFzQ3VzdG9tUmVnaW9uU3R5bGUgPSBoYXNDdXN0b21SZWdpb25TdHlsZTsgfQotCi0gICAgdm9p
ZCB1cGRhdGVSZWdpb25IYXNBdXRvTG9naWNhbEhlaWdodEZsYWcoKTsKLQotICAgIHZvaWQgaW5j
cmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3VudCgpOwotICAgIHZvaWQgZGVjcmVtZW50QXV0b0xv
Z2ljYWxIZWlnaHRDb3VudCgpOwotCi0gICAgYm9vbCBzaG91bGRIYXZlQXV0b0xvZ2ljYWxIZWln
aHQoKSBjb25zdDsKLQotICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVu
LCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgb3ZlcnJpZGU7Ci0KLSAgICBzdHJ1
Y3QgT2JqZWN0UmVnaW9uU3R5bGVJbmZvIHsKLSAgICAgICAgLy8gVXNlZCB0byBzdG9yZSB0aGUg
b3JpZ2luYWwgc3R5bGUgb2YgdGhlIG9iamVjdCBpbiByZWdpb24KLSAgICAgICAgLy8gc28gdGhh
dCB0aGUgb3JpZ2luYWwgc3R5bGUgaXMgcHJvcGVybHkgcmVzdG9yZWQgYWZ0ZXIgcGFpbnQuCi0g
ICAgICAgIC8vIEFsc28gdXNlZCB0byBzdG9yZSBjb21wdXRlZCBzdHlsZSBvZiB0aGUgb2JqZWN0
IGluIHJlZ2lvbiBiZXR3ZWVuCi0gICAgICAgIC8vIHJlZ2lvbiBwYWludGluZ3MsIHNvIHRoYXQg
dGhlIHN0eWxlIGluIHJlZ2lvbiBpcyBjb21wdXRlZCBvbmx5Ci0gICAgICAgIC8vIHdoZW4gbmVj
ZXNzYXJ5LgotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlOwotICAg
ICAgICAvLyBUcnVlIGlmIHRoZSBjb21wdXRlZCBzdHlsZSBpbiByZWdpb24gaXMgY2FjaGVkLgot
ICAgICAgICBib29sIGNhY2hlZDsKLSAgICB9OwotCi0gICAgdXNpbmcgUmVuZGVyZXJSZWdpb25T
dHlsZU1hcCA9IEhhc2hNYXA8Y29uc3QgUmVuZGVyRWxlbWVudCosIE9iamVjdFJlZ2lvblN0eWxl
SW5mbz47Ci0gICAgUmVuZGVyZXJSZWdpb25TdHlsZU1hcCBtX3JlbmRlcmVyUmVnaW9uU3R5bGU7
Ci0KLSAgICBib29sIG1faGFzQ3VzdG9tUmVnaW9uU3R5bGUgOiAxOwotICAgIGJvb2wgbV9oYXNB
dXRvTG9naWNhbEhlaWdodCA6IDE7Ci0gICAgYm9vbCBtX2hhc0NvbXB1dGVkQXV0b0hlaWdodCA6
IDE7Ci0KLSAgICBMYXlvdXRVbml0IG1fY29tcHV0ZWRBdXRvSGVpZ2h0OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1Qo
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAy
MjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWFkLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKICNp
bmNsdWRlICJSZW5kZXJSdWJ5LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2suaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdJbmxpbmUuaCIKQEAgLTQzMCwyNyArNDI5LDYgQEAgUmVuZGVyQm94TW9k
ZWxPYmplY3QmIFJlbmRlck9iamVjdDo6ZW5jbAogICAgIHJldHVybiAqbGluZWFnZU9mVHlwZTxS
ZW5kZXJCb3hNb2RlbE9iamVjdD4oY29uc3RfY2FzdDxSZW5kZXJPYmplY3QmPigqdGhpcykpLmZp
cnN0KCk7CiB9CiAKLWJvb2wgUmVuZGVyT2JqZWN0OjpmaXhlZFBvc2l0aW9uZWRXaXRoTmFtZWRG
bG93Q29udGFpbmluZ0Jsb2NrKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKChmbG93VGhyZWFkU3Rh
dGUoKSA9PSBSZW5kZXJPYmplY3Q6Okluc2lkZU91dE9mRmxvd1RocmVhZCkKLSAgICAgICAgJiYg
KHN0eWxlKCkucG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKQotICAgICAgICAmJiAoY29udGFp
bmluZ0Jsb2NrKCktPmlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpKSk7Ci19Ci0KLXN0YXRp
YyBib29sIGhhc0ZpeGVkUG9zSW5OYW1lZEZsb3dDb250YWluaW5nQmxvY2soY29uc3QgUmVuZGVy
T2JqZWN0KiByZW5kZXJlcikKLXsKLSAgICBBU1NFUlQocmVuZGVyZXItPmZsb3dUaHJlYWRTdGF0
ZSgpICE9IFJlbmRlck9iamVjdDo6Tm90SW5zaWRlRmxvd1RocmVhZCk7Ci0KLSAgICBSZW5kZXJP
YmplY3QqIGN1cnIgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KHJlbmRlcmVyKTsKLSAgICB3
aGlsZSAoY3VyciAmJiAhaXM8UmVuZGVyVmlldz4oKmN1cnIpKSB7Ci0gICAgICAgIGlmIChjdXJy
LT5maXhlZFBvc2l0aW9uZWRXaXRoTmFtZWRGbG93Q29udGFpbmluZ0Jsb2NrKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY3VyciA9IGN1cnItPmNvbnRhaW5pbmdCbG9jaygp
OwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogUmVuZGVyQmxvY2sqIFJlbmRlck9i
amVjdDo6Zmlyc3RMaW5lQmxvY2soKSBjb25zdAogewogICAgIHJldHVybiBudWxscHRyOwpAQCAt
ODIwLDEwICs3OTgsNiBAQCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmNv
CiAgICAgLy8gcmVwYWludGluZyB0byBkbyBpbmRpdmlkdWFsIHJlZ2lvbiByZXBhaW50cy4KICAg
ICBSZW5kZXJGbG93VGhyZWFkKiBwYXJlbnRSZW5kZXJGbG93VGhyZWFkID0gZmxvd1RocmVhZENv
bnRhaW5pbmdCbG9jaygpOwogICAgIGlmIChwYXJlbnRSZW5kZXJGbG93VGhyZWFkKSB7Ci0gICAg
ICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudCB3aXRo
IG5hbWVkIGZsb3cgYXMgQ0IgYWxvbmcgdGhlIENCIGNoYWluCi0gICAgICAgIC8vIHRoZW4gdGhl
IHJlcGFpbnQgY29udGFpbmVyIGlzIG5vdCB0aGUgZmxvdyB0aHJlYWQuCi0gICAgICAgIGlmICho
YXNGaXhlZFBvc0luTmFtZWRGbG93Q29udGFpbmluZ0Jsb2NrKHRoaXMpKQotICAgICAgICAgICAg
cmV0dXJuIHJlcGFpbnRDb250YWluZXI7CiAgICAgICAgIC8vIElmIHdlIGhhdmUgYWxyZWFkeSBm
b3VuZCBhIHJlcGFpbnQgY29udGFpbmVyIHRoZW4gd2Ugd2lsbCByZXBhaW50IGludG8gdGhhdCBj
b250YWluZXIgb25seSBpZiBpdCBpcyBwYXJ0IG9mIHRoZSBzYW1lCiAgICAgICAgIC8vIGZsb3cg
dGhyZWFkLiBPdGhlcndpc2Ugd2Ugd2lsbCBuZWVkIHRvIGNhdGNoIHRoZSByZXBhaW50IGNhbGwg
YW5kIHNlbmQgaXQgdG8gdGhlIGZsb3cgdGhyZWFkLgogICAgICAgICBSZW5kZXJGbG93VGhyZWFk
KiByZXBhaW50Q29udGFpbmVyRmxvd1RocmVhZCA9IHJlcGFpbnRDb250YWluZXIgPyByZXBhaW50
Q29udGFpbmVyLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgOiBudWxscHRyOwpAQCAtMTkx
MywxMSArMTg4Nyw2IEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRGbG9hdFBvaW50KGNvbnMK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBSZW5kZXJP
YmplY3Q6OmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KIFJlbmRlckZsb3dUaHJlYWQqIFJlbmRlck9iamVjdDo6bG9jYXRl
Rmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpIGNvbnN0CiB7CiAgICAgUmVuZGVyQmxvY2sqIGNv
bnRhaW5pbmdCbG9jayA9IHRoaXMtPmNvbnRhaW5pbmdCbG9jaygpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMjIyMjYzKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3
ICs1OSw2IEBAIGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CiBjbGFzcyBSZW5kZXJHZW9tZXRyeU1h
cDsKIGNsYXNzIFJlbmRlckxheWVyOwogY2xhc3MgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDsKLWNs
YXNzIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OwogY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3Mg
UmVuZGVyVGhlbWU7CiBjbGFzcyBTZWxlY3Rpb25TdWJ0cmVlUm9vdDsKQEAgLTE1OSw4ICsxNTgs
NiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVuZGVyQm94JiBlbmNsb3NpbmdCb3go
KSBjb25zdDsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCYgZW5jbG9zaW5nQm94TW9kZWxPYmpl
Y3QoKSBjb25zdDsKIAotICAgIGJvb2wgZml4ZWRQb3NpdGlvbmVkV2l0aE5hbWVkRmxvd0NvbnRh
aW5pbmdCbG9jaygpIGNvbnN0OwotCiAgICAgLy8gRnVuY3Rpb24gdG8gcmV0dXJuIG91ciBlbmNs
b3NpbmcgZmxvdyB0aHJlYWQgaWYgd2UgYXJlIGNvbnRhaW5lZCBpbnNpZGUgb25lLiBUaGlzCiAg
ICAgLy8gZnVuY3Rpb24gZm9sbG93cyB0aGUgY29udGFpbmluZyBibG9jayBjaGFpbi4KICAgICBS
ZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgY29uc3QKQEAgLTE3
MSw4ICsxNjgsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBsb2NhdGVGbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrKCk7CiAgICAgfQogCi0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIGN1
cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0OwotCiAjaWZuZGVmIE5ERUJVRwog
ICAgIHZvaWQgc2V0SGFzQVhPYmplY3QoYm9vbCBmbGFnKSB7IG1faGFzQVhPYmplY3QgPSBmbGFn
OyB9CiAgICAgYm9vbCBoYXNBWE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQVhPYmplY3Q7
IH0KQEAgLTI0NCw3ICsyMzksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVy
SUZyYW1lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5k
ZXJJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVu
ZGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBib29sIGlzUmVwbGljYSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNSdWJ5SW5saW5lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTMxMiw4
ICszMDYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgZW51bSBGbG93VGhyZWFkU3RhdGUgewogICAg
ICAgICBOb3RJbnNpZGVGbG93VGhyZWFkID0gMCwKLSAgICAgICAgSW5zaWRlT3V0T2ZGbG93VGhy
ZWFkID0gMSwKLSAgICAgICAgSW5zaWRlSW5GbG93VGhyZWFkID0gMiwKKyAgICAgICAgSW5zaWRl
SW5GbG93VGhyZWFkID0gMSwKICAgICB9OwogCiAgICAgdm9pZCBzZXRGbG93VGhyZWFkU3RhdGVJ
bmNsdWRpbmdEZXNjZW5kYW50cyhGbG93VGhyZWFkU3RhdGUpOwpAQCAtNDA1LDcgKzM5OCw3IEBA
IHB1YmxpYzoKICAgICAgICAgLy8gUmVuZGVyQmxvY2s6OmNyZWF0ZUFub255bW91c0Jsb2NrKCku
IFRoaXMgaW5jbHVkZXMgY3JlYXRpbmcgYW4gYW5vbnltb3VzCiAgICAgICAgIC8vIFJlbmRlckJs
b2NrIGhhdmluZyBhIEJMT0NLIG9yIEJPWCBkaXNwbGF5LiBPdGhlciBjbGFzc2VzIHN1Y2ggYXMg
UmVuZGVyVGV4dEZyYWdtZW50CiAgICAgICAgIC8vIGFyZSBub3QgUmVuZGVyQmxvY2tzIGFuZCB3
aWxsIHJldHVybiBmYWxzZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NjcwOS4gCi0gICAgICAgIHJldHVybiBpc0Fub255bW91cygpICYmIChzdHlsZSgpLmRp
c3BsYXkoKSA9PSBCTE9DSyB8fCBzdHlsZSgpLmRpc3BsYXkoKSA9PSBCT1gpICYmIHN0eWxlKCku
c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8gJiYgaXNSZW5kZXJCbG9jaygpICYmICFpc0xpc3RNYXJr
ZXIoKSAmJiAhaXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgIWlzUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQoKSAmJiAhaXNSZW5kZXJNdWx0aUNvbHVtblNldCgpICYmICFpc1JlbmRlclZpZXcoKQorICAg
ICAgICByZXR1cm4gaXNBbm9ueW1vdXMoKSAmJiAoc3R5bGUoKS5kaXNwbGF5KCkgPT0gQkxPQ0sg
fHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gQk9YKSAmJiBzdHlsZSgpLnN0eWxlVHlwZSgpID09IE5P
UFNFVURPICYmIGlzUmVuZGVyQmxvY2soKSAmJiAhaXNMaXN0TWFya2VyKCkgJiYgIWlzUmVuZGVy
Rmxvd1RocmVhZCgpICYmICFpc1JlbmRlck11bHRpQ29sdW1uU2V0KCkgJiYgIWlzUmVuZGVyVmll
dygpCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgICAgICAgICAgJiYgIWlzUmVuZGVy
RnVsbFNjcmVlbigpCiAgICAgICAgICAgICAmJiAhaXNSZW5kZXJGdWxsU2NyZWVuUGxhY2Vob2xk
ZXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAJKHJl
dmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiUmVuZGVySW5s
aW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaAkocmV2aXNpb24gMjIyMjYzKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgs
OCArMTE4LDYgQEAgcHVibGljOgogICAgIGJvb2wgY2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIFZpc2libGVQb3NpdGlvbiBwb3Np
dGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyUmVnaW9uKikgb3Zl
cnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHNGb3JCb3hJ
blJlZ2lvbihWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqLCBjb25zdCBSZW5kZXJCb3gqLCBmbG9h
dCwgZmxvYXQpIHsgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDYgQEAKICNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVy
SW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgpAQCAtMjQ1LDEx
ICsyNDQsNiBAQCBib29sIFJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWludChQYWludEluCiAgICAg
aWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQg
PSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKLSAgICAvLyBDaGVjayBvdXIgcmVn
aW9uIHJhbmdlIHRvIG1ha2Ugc3VyZSB3ZSBuZWVkIHRvIGJlIHBhaW50aW5nIGluIHRoaXMgcmVn
aW9uLgotICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCAmJiAhbmFtZWRGbG93RnJhZ21lbnQtPmZs
b3dUaHJlYWQoKS0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhpcywgbmFtZWRG
bG93RnJhZ21lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBMYXlvdXRQb2ludCBh
ZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAgLy8g
RWFybHkgZXhpdCBpZiB0aGUgZWxlbWVudCB0b3VjaGVzIHRoZSBlZGdlcy4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gMjIyMjYzKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgIlJlbmRlckRlc2NlbmRhbnRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNp
bmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxl
Q2FwdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRl
clRhYmxlQ29sLmgiCkBAIC0xNTMwLDcgKzE1MjksNyBAQCBMYXlvdXRSZWN0IFJlbmRlclRhYmxl
OjpvdmVyZmxvd0NsaXBSZWN0CiAgICAgICAgIHJlY3Quc2V0TG9jYXRpb24obG9jYXRpb24gKyBy
ZWN0LmxvY2F0aW9uKCkpOwogICAgIH0gZWxzZQogICAgICAgICByZWN0ID0gUmVuZGVyQm94Ojpv
dmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCByZWdpb24sIHJlbGV2YW5jeSk7Ci0gICAgCisKICAg
ICAvLyBJZiB3ZSBoYXZlIGEgY2FwdGlvbiwgZXhwYW5kIHRoZSBjbGlwIHRvIGluY2x1ZGUgdGhl
IGNhcHRpb24uCiAgICAgLy8gRklYTUU6IFRlY2huaWNhbGx5IHRoaXMgaXMgd3JvbmcsIGJ1dCBp
dCdzIHZpcnR1YWxseSBpbXBvc3NpYmxlIHRvIGZpeCB0aGlzCiAgICAgLy8gZm9yIHJlYWwgdW50
aWwgY2FwdGlvbnMgaGF2ZSBiZWVuIHJlLXdyaXR0ZW4uCkBAIC0xNTU1LDcgKzE1NTQsNyBAQCBi
b29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgTGF5b3V0UG9pbnQg
YWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAg
IC8vIENoZWNrIGtpZHMgZmlyc3QuCi0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCBsb2Nh
dGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0
aW9uLCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkpKSB7CisgICAgaWYgKCFoYXNP
dmVyZmxvd0NsaXAoKSB8fCBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZsb3dD
bGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBudWxscHRyKSkpIHsKICAgICAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2
aW91c1NpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oKmNoaWxkKSAm
JiAhZG93bmNhc3Q8UmVuZGVyQm94PigqY2hpbGQpLmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYg
KGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpIHx8IGNoaWxkLT5pc1RhYmxlQ2FwdGlvbigpKSkgewog
ICAgICAgICAgICAgICAgIExheW91dFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01v
ZGVGb3JDaGlsZChkb3duY2FzdDxSZW5kZXJCb3g+KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlvbik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmNwcAkocmV2aXNpb24gMjIyMjYzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5k
ZXJDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIK
ICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5o
IgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCkBAIC0xNTAxLDcgKzE1MDAsNyBAQCBib29s
IFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAgICAgLy8gSnVzdCBmb3J3YXJk
IHRvIG91ciBjaGlsZHJlbiBhbHdheXMuCiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlv
biA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKIAotICAgIGlmIChoYXNPdmVyZmxv
d0NsaXAoKSAmJiAhbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJl
Y3QoYWRqdXN0ZWRMb2NhdGlvbiwgY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpKSkK
KyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJz
ZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIG51bGxwdHIpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGhhc092ZXJmbG93aW5nQ2VsbCgpKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZp
c2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJSZW5kZXJM
aW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RNYXJrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR0dyYWRpZW50U3RvcC5oIgpAQCAtNzU2LDI3ICs3NTUsMTggQEAg
c3RhdGljIHZvaWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSYgdHMsIAogICAgIH0KIAogICAgIGlm
IChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogcG9zaXRpdmVaT3JkZXJMaXN0ID0gbGF5ZXIucG9zWk9y
ZGVyTGlzdCgpKSB7Ci0gICAgICAgIHNpemVfdCBsYXllckNvdW50ID0gMDsKLSAgICAgICAgZm9y
IChhdXRvKiBjdXJyTGF5ZXIgOiAqcG9zaXRpdmVaT3JkZXJMaXN0KSB7Ci0gICAgICAgICAgICBp
ZiAoIWN1cnJMYXllci0+aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJS
ZWdpb25zKCkpCi0gICAgICAgICAgICAgICAgKytsYXllckNvdW50OwotICAgICAgICB9Ci0gICAg
ICAgIAorICAgICAgICBzaXplX3QgbGF5ZXJDb3VudCA9IHBvc2l0aXZlWk9yZGVyTGlzdC0+c2l6
ZSgpOworCiAgICAgICAgIGlmIChsYXllckNvdW50KSB7CiAgICAgICAgICAgICBpbnQgY3Vycklu
ZGVudCA9IGluZGVudDsKLSAgICAgICAgICAgIGlmICghcG9zaXRpdmVaT3JkZXJMaXN0LT5zaXpl
KCkgfHwgIXBvc2l0aXZlWk9yZGVyTGlzdC0+YXQoMCktPmlzRmxvd1RocmVhZENvbGxlY3RpbmdH
cmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJlaGF2
aW9yICYgUmVuZGVyQXNUZXh0U2hvd0xheWVyTmVzdGluZykgewotICAgICAgICAgICAgICAgICAg
ICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICAgICAgICAgICAgICAgICAgdHMgPDwgIiBw
b3NpdGl2ZSB6LW9yZGVyIGxpc3QoIiA8PCBwb3NpdGl2ZVpPcmRlckxpc3QtPnNpemUoKSA8PCAi
KVxuIjsKLSAgICAgICAgICAgICAgICAgICAgKytjdXJySW5kZW50OwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIGN1cnJMYXll
ciA6ICpwb3NpdGl2ZVpPcmRlckxpc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90
IHByaW50IG5hbWVkIGZsb3dzIHR3aWNlLgotICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJM
YXllci0+aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUxheWVycyh0cywgcm9vdExheWVyLCAqY3Vy
ckxheWVyLCBwYWludERpcnR5UmVjdCwgY3VyckluZGVudCwgYmVoYXZpb3IpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiZWhhdmlvciAmIFJlbmRlckFzVGV4dFNob3dMYXll
ck5lc3RpbmcpIHsKKyAgICAgICAgICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAg
ICAgICAgICAgICAgICB0cyA8PCAiIHBvc2l0aXZlIHotb3JkZXIgbGlzdCgiIDw8IHBvc2l0aXZl
Wk9yZGVyTGlzdC0+c2l6ZSgpIDw8ICIpXG4iOworICAgICAgICAgICAgICAgICsrY3VyckluZGVu
dDsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChhdXRvKiBjdXJyTGF5ZXIgOiAq
cG9zaXRpdmVaT3JkZXJMaXN0KQorICAgICAgICAgICAgICAgIHdyaXRlTGF5ZXJzKHRzLCByb290
TGF5ZXIsICpjdXJyTGF5ZXIsIHBhaW50RGlydHlSZWN0LCBjdXJySW5kZW50LCBiZWhhdmlvcik7
CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwCShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSwxMCArMjcxLDYgQEAgdm9pZCBS
ZW5kZXJWaWV3Ojppbml0aWFsaXplTGF5b3V0U3RhdGUoTAogICAgIHN0YXRlLm1faXNQYWdpbmF0
ZWQgPSBzdGF0ZS5tX3BhZ2VMb2dpY2FsSGVpZ2h0ID4gMDsKIH0KIAotdm9pZCBSZW5kZXJWaWV3
OjpsYXlvdXRDb250ZW50SW5BdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoY29uc3QgTGF5b3V0U3Rh
dGUmKQotewotfQotCiB2b2lkIFJlbmRlclZpZXc6OmxheW91dCgpCiB7CiAgICAgU3RhY2tTdGF0
czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50OwpAQCAtMzEzLDEwICszMDksNyBA
QCB2b2lkIFJlbmRlclZpZXc6OmxheW91dCgpCiAKICAgICBtX3BhZ2VMb2dpY2FsSGVpZ2h0Q2hh
bmdlZCA9IGZhbHNlOwogCi0gICAgaWYgKGNoZWNrVHdvUGFzc0xheW91dEZvckF1dG9IZWlnaHRS
ZWdpb25zKCkpCi0gICAgICAgIGxheW91dENvbnRlbnRJbkF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9u
cygqbV9sYXlvdXRTdGF0ZSk7Ci0gICAgZWxzZQotICAgICAgICBsYXlvdXRDb250ZW50KCptX2xh
eW91dFN0YXRlKTsKKyAgICBsYXlvdXRDb250ZW50KCptX2xheW91dFN0YXRlKTsKIAogI2lmbmRl
ZiBOREVCVUcKICAgICBjaGVja0xheW91dFN0YXRlKCptX2xheW91dFN0YXRlKTsKQEAgLTExMTYs
NyArMTEwOSw2IEBAIHZvaWQgUmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKFJlbmRlck8KICAg
ICBBU1NFUlQobV9sYXlvdXRTdGF0ZSA9PSAwKTsKIAogICAgIG1fbGF5b3V0U3RhdGUgPSBzdGQ6
Om1ha2VfdW5pcXVlPExheW91dFN0YXRlPihyb290KTsKLSAgICBwdXNoTGF5b3V0U3RhdGVGb3JD
dXJyZW50Rmxvd1RocmVhZChyb290KTsKIH0KIAogYm9vbCBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0
U3RhdGVGb3JQYWdpbmF0aW9uSWZOZWVkZWQoUmVuZGVyQmxvY2tGbG93JiBsYXlvdXRSb290KQpA
QCAtMTEyNyw3ICsxMTE5LDYgQEAgYm9vbCBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGVGb3JQ
YWdpbgogICAgIG1fbGF5b3V0U3RhdGUtPm1faXNQYWdpbmF0ZWQgPSB0cnVlOwogICAgIC8vIFRo
aXMgaXMganVzdCBhIGZsYWcgZm9yIGtub3duIHBhZ2UgaGVpZ2h0IChzZWUgUmVuZGVyQmxvY2tG
bG93OjpjaGVja0ZvclBhZ2luYXRpb25Mb2dpY2FsSGVpZ2h0Q2hhbmdlKS4KICAgICBtX2xheW91
dFN0YXRlLT5tX3BhZ2VMb2dpY2FsSGVpZ2h0ID0gMTsKLSAgICBwdXNoTGF5b3V0U3RhdGVGb3JD
dXJyZW50Rmxvd1RocmVhZChsYXlvdXRSb290KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTIwOCwxOSArMTE5OSw2IEBAIHZvaWQgUmVuZGVyVmlldzo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWYKICAgICBmcmFtZVZpZXcoKS5zdHlsZURpZENoYW5nZSgpOwogfQogCi1ib29sIFJlbmRlclZp
ZXc6OmNoZWNrVHdvUGFzc0xheW91dEZvckF1dG9IZWlnaHRSZWdpb25zKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlRm9y
Q3VycmVudEZsb3dUaHJlYWQoY29uc3QgUmVuZGVyT2JqZWN0JikKLXsKLX0KLQotdm9pZCBSZW5k
ZXJWaWV3Ojpwb3BMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKCkKLXsKLX0KLQogSW1h
Z2VRdWFsaXR5Q29udHJvbGxlciYgUmVuZGVyVmlldzo6aW1hZ2VRdWFsaXR5Q29udHJvbGxlcigp
CiB7CiAgICAgaWYgKCFtX2ltYWdlUXVhbGl0eUNvbnRyb2xsZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw4ICsxODYs
NiBAQCBwdWJsaWM6CiAKICAgICAvLyBSZW5kZXJlciB0aGF0IHBhaW50cyB0aGUgcm9vdCBiYWNr
Z3JvdW5kIGhhcyBiYWNrZ3JvdW5kLWltYWdlcyB3aGljaCBhbGwgaGF2ZSBiYWNrZ3JvdW5kLWF0
dGFjaG1lbnQ6IGZpeGVkLgogICAgIGJvb2wgcm9vdEJhY2tncm91bmRJc0VudGlyZWx5Rml4ZWQo
KSBjb25zdDsKLSAgICAKLSAgICBib29sIGNoZWNrVHdvUGFzc0xheW91dEZvckF1dG9IZWlnaHRS
ZWdpb25zKCkgY29uc3Q7CiAKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKIApAQCAtMjc0LDcgKzI3
Miw2IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghZG9pbmdGdWxsUmVwYWludCgpIHx8IG1fbGF5
b3V0U3RhdGUtPmlzUGFnaW5hdGVkKCkgfHwgcmVuZGVyZXIuZmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaygpCiAgICAgICAgICAgICB8fCBtX2xheW91dFN0YXRlLT5saW5lR3JpZCgpIHx8IChyZW5k
ZXJlci5zdHlsZSgpLmxpbmVHcmlkKCkgIT0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lR3JpZCgp
ICYmIHJlbmRlcmVyLmlzUmVuZGVyQmxvY2tGbG93KCkpKSB7CiAgICAgICAgICAgICBtX2xheW91
dFN0YXRlID0gc3RkOjptYWtlX3VuaXF1ZTxMYXlvdXRTdGF0ZT4oV1RGTW92ZShtX2xheW91dFN0
YXRlKSwgJnJlbmRlcmVyLCBvZmZzZXQsIHBhZ2VIZWlnaHQsIHBhZ2VIZWlnaHRDaGFuZ2VkKTsK
LSAgICAgICAgICAgIHB1c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKHJlbmRlcmVy
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTI4Miw3ICsyNzksNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwb3BMYXlvdXRT
dGF0ZSgpCiAgICAgewotICAgICAgICBwb3BMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFk
KCk7CiAgICAgICAgIG1fbGF5b3V0U3RhdGUgPSBXVEZNb3ZlKG1fbGF5b3V0U3RhdGUtPm1fbmV4
dCk7CiAgICAgfQogCkBAIC0zMDYsMTQgKzMwMiwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgZW5h
YmxlTGF5b3V0U3RhdGUoKSB7IEFTU0VSVChtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50ID4gMCk7
IG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQtLTsgfQogCiAgICAgdm9pZCBsYXlvdXRDb250ZW50
KGNvbnN0IExheW91dFN0YXRlJik7Ci0gICAgdm9pZCBsYXlvdXRDb250ZW50SW5BdXRvTG9naWNh
bEhlaWdodFJlZ2lvbnMoY29uc3QgTGF5b3V0U3RhdGUmKTsKICNpZm5kZWYgTkRFQlVHCiAgICAg
dm9pZCBjaGVja0xheW91dFN0YXRlKGNvbnN0IExheW91dFN0YXRlJik7CiAjZW5kaWYKIAotICAg
IHZvaWQgcHVzaExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dUaHJlYWQoY29uc3QgUmVuZGVyT2Jq
ZWN0Jik7Ci0gICAgdm9pZCBwb3BMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKCk7Ci0K
ICAgICBmcmllbmQgY2xhc3MgTGF5b3V0U3RhdGVNYWludGFpbmVyOwogICAgIGZyaWVuZCBjbGFz
cyBMYXlvdXRTdGF0ZURpc2FibGVyOwogICAgIGZyaWVuZCBjbGFzcyBTdWJ0cmVlTGF5b3V0U3Rh
dGVNYWludGFpbmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmNwcAkocmV2aXNpb24gMjIyMjYzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsMTUgKzE2NCw2IEBAIHZvaWQg
Um9vdElubGluZUJveDo6cGFpbnRFbGxpcHNpc0JveChQYWkKIAogdm9pZCBSb290SW5saW5lQm94
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKIHsKLSAgICBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSByZW5kZXJlcigpLmN1
cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotCi0gICAgLy8gQ2hlY2sgaWYgd2UgYXJl
IGluIHRoZSBjb3JyZWN0IHJlZ2lvbi4KLSAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQpIHsKLSAg
ICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSBjb250YWluaW5nUmVnaW9uKCk7Ci0gICAgICAg
IGlmIChyZWdpb24gJiYgcmVnaW9uICE9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVuZGVyUmVnaW9uKj4o
bmFtZWRGbG93RnJhZ21lbnQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAg
ICBJbmxpbmVGbG93Qm94OjpwYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0LCBsaW5lVG9wLCBs
aW5lQm90dG9tKTsKICAgICBwYWludEVsbGlwc2lzQm94KHBhaW50SW5mbywgcGFpbnRPZmZzZXQs
IGxpbmVUb3AsIGxpbmVCb3R0b20pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5oIgpAQCAtMjQxLDcgKzI0MCw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnRS
ZXBsYWNlZChQYWludEkKIAogICAgIC8vIEFwcGx5IGluaXRpYWwgdmlld3BvcnQgY2xpcAogICAg
IGlmIChzaG91bGRBcHBseVZpZXdwb3J0Q2xpcCgpKQotICAgICAgICBjaGlsZFBhaW50SW5mby5j
b250ZXh0KCkuY2xpcChzbmFwcGVkSW50UmVjdChvdmVyZmxvd0NsaXBSZWN0KHBhaW50T2Zmc2V0
LCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkpKTsKKyAgICAgICAgY2hpbGRQYWlu
dEluZm8uY29udGV4dCgpLmNsaXAoc25hcHBlZEludFJlY3Qob3ZlcmZsb3dDbGlwUmVjdChwYWlu
dE9mZnNldCkpKTsKIAogICAgIC8vIENvbnZlcnQgZnJvbSBjb250YWluZXIgb2Zmc2V0cyAoaHRt
bCByZW5kZXJlcnMpIHRvIGEgcmVsYXRpdmUgdHJhbnNmb3JtIChzdmcgcmVuZGVyZXJzKS4KICAg
ICAvLyBUcmFuc2Zvcm0gZnJvbSBvdXIgcGFpbnQgY29udGFpbmVyJ3MgY29vcmRpbmF0ZSBzeXN0
ZW0gdG8gb3VyIGxvY2FsIGNvb3Jkcy4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321423</attachid>
            <date>2017-09-21 06:03:13 -0700</date>
            <delta_ts>2017-09-21 06:16:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>named-flow-removal-rendernamedflowfragment-5.patch</filename>
            <type>text/plain</type>
            <size>148013</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjMxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAxNy0wOS0yMSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzcyOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmUgdGhlIHJlbWFpbmluZyBuYW1lZCBmbG93IHJlbmRlcmluZyBjb2RlLgorCisg
ICAgICAgIFRoZSBmZWF0dXJlIGlzIGFscmVhZHkgZGlzYWJsZWQsIG5vIGZ1bmN0aW9uYWwgY2hh
bmdlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZWxlY3Rp
b25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6Omluc2VydGVkSW50b1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2tGbG93Ojp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6dXBkYXRlTG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zs
b3c6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93
OjpjcmVhdGVSZW5kZXJOYW1lZEZsb3dGcmFnbWVudElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y2FuSGF2ZUNoaWxkcmVuIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y2FuSGF2ZUdlbmVyYXRl
ZENoaWxkcmVuIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Rmxvdzo6bmFtZWRGbG93RnJhZ21lbnROZWVkc1VwZGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnNldFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OlJlbmRlckJsb2NrRmxvd1JhcmVEYXRhOjpS
ZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zs
b3c6OnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckVsZW1lbnQ6OmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpwdXNoQ29udGVudHNDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
bWFwTG9jYWxUb0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OmlzVW5zcGxpdHRhYmxlRm9yUGFnaW5hdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6Om92ZXJmbG93UmVjdEZvclBhaW50UmVqZWN0aW9uIGNvbnN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
YWludE1hc2tGb3JUZXh0RmlsbEJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmdlbmVyYXRpbmdFbGVtZW50IGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpSZW5kZXJGbG93VGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmludmFsaWRhdGVSZWdpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnZhbGlkYXRlUmVnaW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJlbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hS
ZWdpb25JbmZvQW5kQ3VzdG9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1Ro
cmVhZDo6dXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcmVhayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpoYXNDb21wb3NpdGluZ1JlZ2lvbkRlc2NlbmRhbnQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Z2V0
TGF5ZXJMaXN0Rm9yUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZsb3dUaHJlYWQ6OnJlZ2lvbkZvckNvbXBvc2l0ZWRMYXllciBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjYWNoZWRSZWdpb25Gb3JDb21w
b3NpdGVkTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxv
d1RocmVhZDo6dXBkYXRlTGF5ZXJUb1JlZ2lvbk1hcHBpbmdzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUFsbExheWVyVG9SZWdpb25NYXBwaW5n
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjb2xsZWN0
c0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmlzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnRD
b25zaXN0ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dU
aHJlYWQ6OmluaXRpYWxpemVSZWdpb25zQ29tcHV0ZWRBdXRvSGVpZ2h0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Om1hcmtBdXRvTG9naWNhbEhlaWdodFJl
Z2lvbnNGb3JMYXlvdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1Ro
cmVhZDo6aW5jcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0
UmVnaW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OmV4cGFuZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRSZWZsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpwYWludExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnBhaW50TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjppc0hpdENhbmRpZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGFu
ZENsaXBSZWN0Rm9yUmVnaW9uQW5kUmVmbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5k
ZXJSZWdpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjptYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFj
a2luZzo6c2hvdWxkQ2xpcENvbXBvc2l0ZWRCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjppc1NpbXBsZUNvbnRh
aW5lckNvbXBvc2l0aW5nTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjphZGp1c3RBbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzRm9yRmxvd1RocmVhZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1
aXJlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1
aWxkQ29tcG9zaXRpbmdMYXllclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9ySW5kaXJlY3RSZWFzb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzdHlsZUNoYW5nZU1heUFm
ZmVjdEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZVJlZ2lvbkNv
bXBvc2l0aW5nUmVxdWlyZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZFJlZ2lvbkNvbXBvc2l0aW5nTGF5ZXJUcmVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6Y29udGFpbmVyRm9yUmVwYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5nQmxv
Y2sgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aGFzRml4ZWRQb3NJbk5hbWVk
Rmxvd0NvbnRhaW5pbmdCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJP
YmplY3Q6OmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojppc1JlbmRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OmlzQW5vbnltb3VzQmxvY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojppc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUmVnaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246Omhhc0F1dG9M
b2dpY2FsSGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9k
ZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpsYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZUZvclBhZ2luYXRpb25JZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpsYXlvdXRDb250ZW50SW5BdXRvTG9naWNhbEhl
aWdodFJlZ2lvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6Y2hl
Y2tUd29QYXNzTGF5b3V0Rm9yQXV0b0hlaWdodFJlZ2lvbnMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dU
aHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cG9wTGF5b3V0
U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclZpZXcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jv
b3Q6OnBhaW50UmVwbGFjZWQpOgorCiAyMDE3LTA5LTIxICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJz
ZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV2ViQ3J5cHRvXSBTdXBwb3J0IEVsbGlwdGljIEN1
cnZlIFAtNTIxCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjIyMjYzKQorKysg
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI3MDgsNyAr
MjcwOCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5j
cHAKICAgICByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3Bw
Ci0gICAgcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAogICAg
IHJlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMjI2MykKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMzc1Myw4ICszNzUzLDYgQEAKIAkJOEE5QTU4NzUxMUU4NEM4MTAwOEFDRkQxIC8q
IEpTUGVyZm9ybWFuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDhBOUE1ODczMTFFODRDODEwMDhBQ0ZEMSAvKiBKU1BlcmZvcm1hbmNlLmggKi87IH07
CiAJCThBOUE1ODg4MTFFODRGMzcwMDhBQ0ZEMSAvKiBKU1BlcmZvcm1hbmNlVGltaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QTlBNTg3NzExRTg0
Qzk4MDA4QUNGRDEgLyogSlNQZXJmb3JtYW5jZVRpbWluZy5oICovOyB9OwogCQk4QUI0QkM3NzEy
NkZEQjcxMDBERUI3MjcgLyogSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBQjRCQzc2
MTI2RkRCNzEwMERFQjcyNyAvKiBJZ25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRl
ci5oICovOyB9OwotCQk4QUM4MjJGQzE4MEZDMDMzMDBGQjY0RDUgLyogUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOEFDODIyRkExODBGQzAzMzAwRkI2NEQ1IC8qIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNw
cCAqLzsgfTsKLQkJOEFDODIyRkQxODBGQzAzMzAwRkI2NEQ1IC8qIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
QUM4MjJGQjE4MEZDMDMzMDBGQjY0RDUgLyogUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCAqLzsg
fTsKIAkJOEFGNEU1NTUxMURDNUEzNjAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QUY0RTU1
MjExREM1QTM2MDAwRUQzREUgLyogUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCAqLzsgfTsKIAkJ
OEFGNEU1NTYxMURDNUEzNjAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEFGNEU1NTMxMURDNUEz
NjAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5oICovOyB9OwogCQk4QUY0RTU1QzEx
REM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBRjRFNTU5MTFEQzVBNjMwMDBFRDNERSAvKiBQ
ZXJmb3JtYW5jZVRpbWluZy5oICovOyB9OwpAQCAtMTIxMDksOCArMTIxMDcsNiBAQAogCQk4QTlB
NTg3MzExRTg0QzgxMDA4QUNGRDEgLyogSlNQZXJmb3JtYW5jZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1BlcmZvcm1hbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCThBOUE1ODc3MTFFODRDOTgwMDhBQ0ZEMSAvKiBKU1BlcmZvcm1hbmNlVGltaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUGVyZm9ybWFuY2VUaW1pbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEFCNEJDNzYxMjZGREI3MTAwREVCNzI3IC8q
IElnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCThBQzgyMkZBMTgwRkMwMzMwMEZCNjRE
NSAvKiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCThBQzgyMkZCMTgwRkMwMzMwMEZCNjRENSAvKiBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QUY0RTU1MjEx
REM1QTM2MDAwRUQzREUgLyogUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThBRjRFNTUzMTFEQzVBMzYwMDBFRDNERSAvKiBQZXJm
b3JtYW5jZU5hdmlnYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVy
Zm9ybWFuY2VOYXZpZ2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThBRjRF
NTU0MTFEQzVBMzYwMDBFRDNERSAvKiBQZXJmb3JtYW5jZU5hdmlnYXRpb24uaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yNjAwMiw4ICsyNTk5OCw2IEBACiAJCQkJQkNFMzJCOUIxNTE3QzBC
MTAwRjU0MkVDIC8qIFJlbmRlck11bHRpQ29sdW1uU2V0LmggKi8sCiAJCQkJQkMxQTdEOTUxOEZD
QjVCMDAwNDIxODc5IC8qIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmNwcCAq
LywKIAkJCQlCQzFBN0Q5NjE4RkNCNUIwMDA0MjE4NzkgLyogUmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXIuaCAqLywKLQkJCQk4QUM4MjJGQTE4MEZDMDMzMDBGQjY0RDUgLyogUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwICovLAotCQkJCThBQzgyMkZCMTgwRkMwMzMwMEZCNjRE
NSAvKiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oICovLAogCQkJCUJDRUE0ODQwMDk3RDkzMDIw
MDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuY3BwICovLAogCQkJCUJDRUE0ODQxMDk3RDkzMDIwMDk0
QzlFNCAvKiBSZW5kZXJPYmplY3QuaCAqLywKIAkJCQk4Mzg4NjczNDFEMTNCQTU5MDAzNjk3RDAg
LyogUmVuZGVyT2JqZWN0RW51bXMuaCAqLywKQEAgLTI5NzQzLDcgKzI5NzM3LDYgQEAKIAkJCQkx
QTM1ODZFMDE1MjY0QzQ1MDAyMkE2NTkgLyogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0UzMkI5QzE1MTdDMEIyMDBGNTQyRUMgLyogUmVuZGVyTXVs
dGlDb2x1bW5TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMUE3RDk4MThGQ0I1QjAwMDQyMTg3
OSAvKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJOEFDODIyRkQxODBGQzAzMzAwRkI2NEQ1IC8qIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg4MDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVy
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Mzg4NjczNTFEMTNCQTVGMDAzNjk3RDAgLyog
UmVuZGVyT2JqZWN0RW51bXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRkE5MzA4MTAzMzMxOTMw
MDdCMjVEMSAvKiBSZW5kZXJPdmVyZmxvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzcxNCw3ICsz
MzcwNyw2IEBACiAJCQkJMUEzNTg2REYxNTI2NEM0NTAwMjJBNjU5IC8qIFJlbmRlck11bHRpQ29s
dW1uRmxvd1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0UzMkI5RTE1MTdDMjI3MDBG
NTQyRUMgLyogUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMx
QTdEOTcxOEZDQjVCMDAwNDIxODc5IC8qIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9s
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCThBQzgyMkZDMTgwRkMwMzMwMEZCNjRENSAvKiBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VBNDg3RjA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE0
M0JGNTlDMTE0OTI5MjgwMEM2NDNDQSAvKiBSZW5kZXJQcm9ncmVzcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1QTU3NEYyNDEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJN
ZW51TGlzdC5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCkBAIC0xNTM2LDExICsxNTM1LDYgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bWFya0ZvclBhZ2luYXRpb25SZWxheQogCiB2b2lkIFJlbmRlckJsb2Nr
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0KQogewotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9
IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAgIC8vIENoZWNrIG91ciByZWdp
b24gcmFuZ2UgdG8gbWFrZSBzdXJlIHdlIG5lZWQgdG8gYmUgcGFpbnRpbmcgaW4gdGhpcyByZWdp
b24uCi0gICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmICFuYW1lZEZsb3dGcmFnbWVudC0+Zmxv
d1RocmVhZCgpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBuYW1lZEZs
b3dGcmFnbWVudCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIExheW91dFBvaW50IGFkanVzdGVk
UGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAgICAgUGFpbnRQaGFzZSBw
aGFzZSA9IHBhaW50SW5mby5waGFzZTsKIApAQCAtMTU0OCw3ICsxNTQyLDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgIC8vIEZJWE1FOiBDb3VsZCBlbGlt
aW5hdGUgdGhlIGlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKSBjaGVjayBpZiB3ZSBmaXggYmFj
a2dyb3VuZCBwYWludGluZyBzbyB0aGF0IHRoZSBSZW5kZXJWaWV3CiAgICAgLy8gcGFpbnRzIHRo
ZSByb290J3MgYmFja2dyb3VuZC4KICAgICBpZiAoIWlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIo
KSkgewotICAgICAgICBMYXlvdXRSZWN0IG92ZXJmbG93Qm94ID0gb3ZlcmZsb3dSZWN0Rm9yUGFp
bnRSZWplY3Rpb24obmFtZWRGbG93RnJhZ21lbnQpOworICAgICAgICBMYXlvdXRSZWN0IG92ZXJm
bG93Qm94ID0gb3ZlcmZsb3dSZWN0Rm9yUGFpbnRSZWplY3Rpb24oKTsKICAgICAgICAgZmxpcEZv
cldyaXRpbmdNb2RlKG92ZXJmbG93Qm94KTsKICAgICAgICAgb3ZlcmZsb3dCb3gubW92ZUJ5KGFk
anVzdGVkUGFpbnRPZmZzZXQpOwogICAgICAgICBpZiAoIW92ZXJmbG93Qm94LmludGVyc2VjdHMo
cGFpbnRJbmZvLnJlY3QpCkBAIC0xOTkzLDEzICsxOTg3LDYgQEAgR2FwUmVjdHMgUmVuZGVyQmxv
Y2s6OnNlbGVjdGlvbkdhcHMoUmVuZAogICAgICAgICBsYXN0TG9naWNhbFJpZ2h0ID0gbG9naWNh
bFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbEhlaWdodCgpLCBjYWNoZSk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAotICAgIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCgpOwotICAgIGlmIChwYWludEluZm8gJiYgbmFtZWRGbG93RnJhZ21lbnQgJiYgaXM8UmVu
ZGVyRmxvd1RocmVhZD4oKnBhaW50SW5mby0+cGFpbnRDb250YWluZXIpKSB7Ci0gICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGUgY3VycmVudCBvYmplY3QgaXMgYWN0dWFsbHkgZmxvd2VkIGludG8gdGhl
IHJlZ2lvbiBiZWluZyBwYWludGVkLgotICAgICAgICBpZiAoIWRvd25jYXN0PFJlbmRlckZsb3dU
aHJlYWQ+KCpwYWludEluZm8tPnBhaW50Q29udGFpbmVyKS5vYmplY3RTaG91bGRGcmFnbWVudElu
Rmxvd1JlZ2lvbih0aGlzLCBuYW1lZEZsb3dGcmFnbWVudCkpCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KIAogICAgIGlmIChjaGlsZHJlbklubGluZSgpKQogICAgICAgICByZXN1
bHQgPSBpbmxpbmVTZWxlY3Rpb25HYXBzKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2ljYWxQb3Np
dGlvbiwgb2Zmc2V0RnJvbVJvb3RCbG9jaywgbGFzdExvZ2ljYWxUb3AsIGxhc3RMb2dpY2FsTGVm
dCwgbGFzdExvZ2ljYWxSaWdodCwgY2FjaGUsIHBhaW50SW5mbyk7CkBAIC0yNDUyLDEzICsyNDM5
LDYgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIExheW91
dFBvaW50IGFkanVzdGVkTG9jYXRpb24oYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpKTsK
ICAgICBMYXlvdXRTaXplIGxvY2FsT2Zmc2V0ID0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRp
b24pOwogCi0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKTsKLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJh
Z21lbnQgPSBmbG93VGhyZWFkID8gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KGZs
b3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKSkgOiBudWxscHRyOwotICAgIC8vIElmIHdlIGFyZSBu
b3cgc2VhcmNoaW5nIGluc2lkZSBhIHJlZ2lvbiwgbWFrZSBzdXJlIHRoaXMgZWxlbWVudAotICAg
IC8vIGlzIGJlaW5nIGZyYWdtZW50ZWQgaW50byB0aGlzIHJlZ2lvbi4KLSAgICBpZiAobmFtZWRG
bG93RnJhZ21lbnQgJiYgIWZsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVn
aW9uKHRoaXMsIG5hbWVkRmxvd0ZyYWdtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAg
ICAgaWYgKCFpc1JlbmRlclZpZXcoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRv
IGRvIGFueXRoaW5nIGF0IGFsbC4KICAgICAgICAgTGF5b3V0UmVjdCBvdmVyZmxvd0JveCA9IHZp
c3VhbE92ZXJmbG93UmVjdCgpOwpAQCAtMjUyNCw3ICsyNTA0LDcgQEAgYm9vbCBSZW5kZXJCbG9j
azo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIC8vIElmIHdlIGhhdmUgY2xpcHBpbmcsIHRo
ZW4gd2UgY2FuJ3QgaGF2ZSBhbnkgc3BpbGxvdXQuCiAgICAgYm9vbCB1c2VPdmVyZmxvd0NsaXAg
PSBoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXIoKTsKICAgICBib29s
IHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAoKSB8fCB1c2VPdmVyZmxvd0NsaXApOwotICAgIGJv
b2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gbG9jYXRp
b25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKGNvbnRyb2xDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9u
KSkgOiBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1
c3RlZExvY2F0aW9uLCBuYW1lZEZsb3dGcmFnbWVudCwgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJT
aXplKSkpOworICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9s
Q2xpcCgpID8gbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKGNvbnRyb2xDbGlwUmVjdChh
ZGp1c3RlZExvY2F0aW9uKSkgOiBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZs
b3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBudWxscHRyLCBJbmNsdWRlT3ZlcmxheVNjcm9s
bGJhclNpemUpKSk7CiAgICAgaWYgKGNoZWNrQ2hpbGRyZW4pIHsKICAgICAgICAgLy8gSGl0IHRl
c3QgZGVzY2VuZGFudHMgZmlyc3QuCiAgICAgICAgIExheW91dFNpemUgc2Nyb2xsZWRPZmZzZXQo
bG9jYWxPZmZzZXQgLSB0b0xheW91dFNpemUoc2Nyb2xsUG9zaXRpb24oKSkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJKHJldmlzaW9uIDIy
MjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTWFycXVlZS5o
IgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJl
bmRlck11bHRpQ29sdW1uU2V0LmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMTQ1LDE0ICsxNDQsMTAgQEAgUmVuZGVyQmxv
Y2tGbG93Ojp+UmVuZGVyQmxvY2tGbG93KCkKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjppbnNlcnRl
ZEludG9UcmVlKCkKIHsKICAgICBSZW5kZXJCbG9jazo6aW5zZXJ0ZWRJbnRvVHJlZSgpOwotICAg
IGNyZWF0ZVJlbmRlck5hbWVkRmxvd0ZyYWdtZW50SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBSZW5k
ZXJCbG9ja0Zsb3c6OndpbGxCZURlc3Ryb3llZCgpCiB7Ci0gICAgaWYgKHJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KCkpCi0gICAgICAgIHNldFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KG51bGxwdHIp
OwotCiAgICAgLy8gTWFrZSBzdXJlIHRvIGRlc3Ryb3kgYW5vbnltb3VzIGNoaWxkcmVuIGZpcnN0
IHdoaWxlIHRoZXkgYXJlIHN0aWxsIGNvbm5lY3RlZCB0byB0aGUgcmVzdCBvZiB0aGUgdHJlZSwg
c28gdGhhdCB0aGV5IHdpbGwKICAgICAvLyBwcm9wZXJseSBkaXJ0eSBsaW5lIGJveGVzIHRoYXQg
dGhleSBhcmUgcmVtb3ZlZCBmcm9tLiBFZmZlY3RzIHRoYXQgZG8gOmJlZm9yZS86YWZ0ZXIgb25s
eSBvbiBob3ZlciBjb3VsZCBjcmFzaCBvdGhlcndpc2UuCiAgICAgZGVzdHJveUxlZnRvdmVyQ2hp
bGRyZW4oKTsKQEAgLTQ5Niw4ICs0OTEsNiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0
QmxvY2soYm9vbCByCiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXco
KSwgKnRoaXMsIGxvY2F0aW9uT2Zmc2V0KCksIGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rp
b24oKSB8fCBzdHlsZVRvVXNlLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCksIHBhZ2VMb2dp
Y2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQpOwogCiAgICAgcHJlcGFyZVBhZ2lu
YXRpb25CZWZvcmVCbG9ja0xheW91dChyZWxheW91dENoaWxkcmVuKTsKLSAgICBpZiAoIXJlbGF5
b3V0Q2hpbGRyZW4pCi0gICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSBuYW1lZEZsb3dGcmFnbWVu
dE5lZWRzVXBkYXRlKCk7CiAKICAgICAvLyBXZSB1c2UgZm91ciB2YWx1ZXMsIG1heFRvcFBvcywg
bWF4VG9wTmVnLCBtYXhCb3R0b21Qb3MsIGFuZCBtYXhCb3R0b21OZWcsIHRvIHRyYWNrCiAgICAg
Ly8gb3VyIGN1cnJlbnQgbWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFyZ2lucy4gVGhl
c2UgdmFsdWVzIGFyZSB1c2VkIHdoZW4gd2UKQEAgLTIwNDUsOSArMjAzOCw2IEBAIHZvaWQgUmVu
ZGVyQmxvY2tGbG93OjpzdHlsZURpZENoYW5nZShTdHkKICAgICBpZiAobm9Mb25nZXJBZmZlY3Rz
UGFyZW50QmxvY2soKSAmJiBzdHlsZSgpLmlzRmxvYXRpbmcoKSAmJiBwcmV2aW91c1NpYmxpbmco
KSAmJiBwcmV2aW91c1NpYmxpbmcoKS0+aXNBbm9ueW1vdXNCbG9jaygpKQogICAgICAgICBkb3du
Y2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnBhcmVudCgpKS5tb3ZlQ2hpbGRUbygmZG93bmNh
c3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpwcmV2aW91c1NpYmxpbmcoKSksIHRoaXMpOwogCi0g
ICAgaWYgKGF1dG8gZnJhZ21lbnQgPSByZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKQotICAgICAg
ICBmcmFnbWVudC0+c2V0U3R5bGUoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNyZWF0ZVN0eWxl
KHN0eWxlKCkpKTsKLQogICAgIGlmIChkaWZmID49IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQpIHsK
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgdXNlIGEgY2hlYXBlciBzdHlsZS1vbmx5IHRl
c3QgaW5zdGVhZCBvZiBTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3IuCiAgICAgICAgIGlmIChz
ZWxmTmVlZHNMYXlvdXQoKSB8fCAhbV9zaW1wbGVMaW5lTGF5b3V0IHx8ICFTaW1wbGVMaW5lTGF5
b3V0OjpjYW5Vc2VGb3IoKnRoaXMpKQpAQCAtMzE1MSwyMCArMzE0MSw2IEBAIEdhcFJlY3RzIFJl
bmRlckJsb2NrRmxvdzo6aW5saW5lU2VsZWN0aW8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIFJlbmRlckJsb2NrRmxvdzo6Y3JlYXRlUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRJZk5lZWRl
ZCgpCi17Ci0gICAgaWYgKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgfHwgaXNSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogTXVsdGlj
b2x1bW4gcmVnaW9ucyBub3QgeWV0IHN1cHBvcnRlZCAoaHR0cDovL2Rldi53My5vcmcvY3Nzd2cv
Y3NzLXJlZ2lvbnMvI211bHRpLWNvbHVtbi1yZWdpb25zKQotICAgIGlmIChzdHlsZSgpLmlzRGlz
cGxheVJlZ2lvblR5cGUoKSAmJiBzdHlsZSgpLmhhc0Zsb3dGcm9tKCkgJiYgIXN0eWxlKCkuc3Bl
Y2lmaWVzQ29sdW1ucygpKSB7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBmbG93
RnJhZ21lbnQgPSBuZXcgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoZG9jdW1lbnQoKSwgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQ6OmNyZWF0ZVN0eWxlKHN0eWxlKCkpKTsKLSAgICAgICAgZmxvd0Zy
YWdtZW50LT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICAgICAgYWRkQ2hpbGQoZmxvd0ZyYWdtZW50
KTsKLSAgICAgICAgc2V0UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoZmxvd0ZyYWdtZW50KTsKLSAg
ICB9Ci19Ci0KIGJvb2wgUmVuZGVyQmxvY2tGbG93OjpuZWVkc0xheW91dEFmdGVyUmVnaW9uUmFu
Z2VDaGFuZ2UoKSBjb25zdAogewogICAgIC8vIEEgYmxvY2sgd2l0aG91dCBmbG9hdHMgb3IgdGhh
dCBleHBhbmRzIHRvIGVuY2xvc2UgdGhlbSB3b24ndCBuZWVkIGEgcmVsYXlvdXQKQEAgLTMxNzYs
NDAgKzMxNTIsOSBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6bmVlZHNMYXlvdXRBZnRlclJlCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2tGbG93OjpjYW5IYXZlQ2hpbGRy
ZW4oKSBjb25zdAotewotICAgIHJldHVybiAhcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSA/IFJl
bmRlckJsb2NrOjpjYW5IYXZlQ2hpbGRyZW4oKSA6IHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkt
PmNhbkhhdmVDaGlsZHJlbigpOwotfQotCi1ib29sIFJlbmRlckJsb2NrRmxvdzo6Y2FuSGF2ZUdl
bmVyYXRlZENoaWxkcmVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIXJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KCkgPyBSZW5kZXJCbG9jazo6Y2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCkgOiByZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpLT5jYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKTsKLX0KLQot
Ym9vbCBSZW5kZXJCbG9ja0Zsb3c6Om5hbWVkRmxvd0ZyYWdtZW50TmVlZHNVcGRhdGUoKSBjb25z
dAotewotICAgIGlmICghaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaGFzUmVsYXRpdmVMb2dpY2FsSGVpZ2h0
KCkgJiYgIWlzUmVuZGVyVmlldygpOwotfQotCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6dXBkYXRl
TG9naWNhbEhlaWdodCgpCiB7CiAgICAgUmVuZGVyQmxvY2s6OnVwZGF0ZUxvZ2ljYWxIZWlnaHQo
KTsKLQotICAgIGlmIChyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKSB7Ci0gICAgICAgIHJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KCktPnNldExvZ2ljYWxIZWlnaHQoc3RkOjptYXg8TGF5b3V0VW5p
dD4oMCwgbG9naWNhbEhlaWdodCgpIC0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSkp
OwotICAgICAgICByZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpLT5pbnZhbGlkYXRlUmVnaW9uSWZO
ZWVkZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyQmxvY2tGbG93OjpzZXRSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudChSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogZmxvd0ZyYWdtZW50KQotewot
ICAgIFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhJiByYXJlRGF0YSA9IGVuc3VyZVJhcmVCbG9ja0Zs
b3dEYXRhKCk7Ci0gICAgaWYgKGF1dG8qIGZsb3dGcmFnbWVudE9uRmxvdyA9IHN0ZDo6ZXhjaGFu
Z2UocmFyZURhdGEubV9yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgbnVsbHB0cikpCi0gICAgICAg
IGZsb3dGcmFnbWVudE9uRmxvdy0+ZGVzdHJveSgpOwotICAgIHJhcmVEYXRhLm1fcmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQgPSBmbG93RnJhZ21lbnQ7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93
OjpzZXRNdWx0aUNvbHVtbkZsb3dUaHJlYWQoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiBm
bG93VGhyZWFkKQpAQCAtMzUzMywxMSArMzQ3OCw5IEBAIFBvc2l0aW9uIFJlbmRlckJsb2NrRmxv
dzo6cG9zaXRpb25Gb3JQb2kKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmZpcnN0
Q2hpbGQoKSkucG9zaXRpb25Gb3JQb2ludChwb2ludCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBS
ZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
LCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJCbG9j
a0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBjb25zdCBS
ZW5kZXJSZWdpb24qKQogewotICAgIGlmIChhdXRvIGZyYWdtZW50ID0gcmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LT5wb3NpdGlvbkZvclBvaW50KHBv
aW50LCByZWdpb24pOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JQb2ludChw
b2ludCwgcmVnaW9uKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQo
cG9pbnQsIG51bGxwdHIpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRkRm9jdXNSaW5n
UmVjdHNGb3JJbmxpbmVDaGlsZHJlbihWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBM
YXlvdXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCopCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCShy
ZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAgY2xhc3MgTGF5b3V0U3RhdGVN
YWludGFpbmVyOwogY2xhc3MgTGluZUJyZWFrZXI7CiBjbGFzcyBMaW5lSW5mbzsKIGNsYXNzIFJl
bmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDsKLWNsYXNzIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
OwogY2xhc3MgUmVuZGVyUnVieVJ1bjsKIAogc3RydWN0IFdvcmRNZWFzdXJlbWVudDsKQEAgLTEx
OSw3ICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgICAgIFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhKGNv
bnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2spCiAgICAgICAgICAgICA6IG1fbWFyZ2lucyhwb3Np
dGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQoYmxvY2spLCBuZWdhdGl2ZU1hcmdpbkJlZm9yZURlZmF1
bHQoYmxvY2spLCBwb3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdChibG9jayksIG5lZ2F0aXZlTWFy
Z2luQWZ0ZXJEZWZhdWx0KGJsb2NrKSkKICAgICAgICAgICAgICwgbV9saW5lQnJlYWtUb0F2b2lk
V2lkb3coLTEpCi0gICAgICAgICAgICAsIG1fcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQobnVsbHB0
cikKICAgICAgICAgICAgICwgbV9tdWx0aUNvbHVtbkZsb3dUaHJlYWQobnVsbHB0cikKICAgICAg
ICAgICAgICwgbV9kaXNjYXJkTWFyZ2luQmVmb3JlKGZhbHNlKQogICAgICAgICAgICAgLCBtX2Rp
c2NhcmRNYXJnaW5BZnRlcihmYWxzZSkKQEAgLTE1MSw3ICsxNDksNiBAQCBwdWJsaWM6CiAgICAg
ICAgIE1hcmdpblZhbHVlcyBtX21hcmdpbnM7CiAgICAgICAgIGludCBtX2xpbmVCcmVha1RvQXZv
aWRXaWRvdzsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJvb3RJbmxpbmVCb3g+IG1fbGluZUdy
aWRCb3g7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBtX3JlbmRlck5hbWVkRmxv
d0ZyYWdtZW50OwogCiAgICAgICAgIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogbV9tdWx0
aUNvbHVtbkZsb3dUaHJlYWQ7CiAgICAgICAgIApAQCAtMjY3LDggKzI2NCw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGRpZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93KCkgY29uc3QgeyByZXR1cm4gaGFz
UmFyZUJsb2NrRmxvd0RhdGEoKSAmJiByYXJlQmxvY2tGbG93RGF0YSgpLT5tX2RpZEJyZWFrQXRM
aW5lVG9Bdm9pZFdpZG93OyB9CiAgICAgYm9vbCByZWxheW91dFRvQXZvaWRXaWRvd3MoTGF5b3V0
U3RhdGVNYWludGFpbmVyJik7CiAKLSAgICBib29sIGNhbkhhdmVHZW5lcmF0ZWRDaGlsZHJlbigp
IGNvbnN0IG92ZXJyaWRlOwotCiAgICAgUm9vdElubGluZUJveCogbGluZUdyaWRCb3goKSBjb25z
dCB7IHJldHVybiBoYXNSYXJlQmxvY2tGbG93RGF0YSgpID8gcmFyZUJsb2NrRmxvd0RhdGEoKS0+
bV9saW5lR3JpZEJveC5nZXQoKSA6IG51bGxwdHI7IH0KICAgICB2b2lkIHNldExpbmVHcmlkQm94
KHN0ZDo6dW5pcXVlX3B0cjxSb290SW5saW5lQm94PiBib3gpCiAgICAgewpAQCAtMjc2LDEwICsy
NzEsNiBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZvaWQgbGF5b3V0TGluZUdyaWRCb3goKTsKIAot
ICAgIGJvb2wgY2FuRHJvcEFub255bW91c0Jsb2NrQ2hpbGQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiAhcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsgfQotICAgIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIGhhc1JhcmVC
bG9ja0Zsb3dEYXRhKCkgPyByYXJlQmxvY2tGbG93RGF0YSgpLT5tX3JlbmRlck5hbWVkRmxvd0Zy
YWdtZW50IDogbnVsbHB0cjsgfQotICAgIHZvaWQgc2V0UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQo
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqKTsKLQogICAgIFJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZCogbXVsdGlDb2x1bW5GbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gaGFzUmFyZUJsb2Nr
Rmxvd0RhdGEoKSA/IHJhcmVCbG9ja0Zsb3dEYXRhKCktPm1fbXVsdGlDb2x1bW5GbG93VGhyZWFk
IDogbnVsbHB0cjsgfQogICAgIHZvaWQgc2V0TXVsdGlDb2x1bW5GbG93VGhyZWFkKFJlbmRlck11
bHRpQ29sdW1uRmxvd1RocmVhZCopOwogICAgIGJvb2wgd2lsbENyZWF0ZUNvbHVtbnMoc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gZGVzaXJlZENvbHVtbkNvdW50ID0gc3RkOjpudWxsb3B0KSBjb25z
dDsKQEAgLTU5NCw5ICs1ODUsNiBAQCBwcml2YXRlOiAgICAgICAgCiAgICAgdm9pZCB1cGRhdGVM
b2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoY29uc3QgRVRleHRBbGlnbiYsIGNvbnN0IFJvb3RJbmxp
bmVCb3gqLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBmbG9hdCYgbG9naWNhbExlZnQsIGZs
b2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQmIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaW50
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpOwogLy8gRU5EIE1FVEhPRFMgREVGSU5FRCBJTiBS
ZW5kZXJCbG9ja0xpbmVMYXlvdXQKIAotICAgIGJvb2wgbmFtZWRGbG93RnJhZ21lbnROZWVkc1Vw
ZGF0ZSgpIGNvbnN0OwotICAgIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0KICAgICB2b2lkIGNvbXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKExheW91dFVu
aXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdDsK
IAogICAgIHZvaWQgYWRqdXN0SW5pdGlhbExldHRlclBvc2l0aW9uKFJlbmRlckJveCYgY2hpbGRC
b3gsIExheW91dFVuaXQmIGxvZ2ljYWxUb3BPZmZzZXQsIExheW91dFVuaXQmIG1hcmdpbkJlZm9y
ZU9mZnNldCk7CkBAIC02MTMsNyArNjAxLDYgQEAgcHVibGljOgogICAgIC8vIEZJWE1FLUJMT0NL
RkxPVzogVGhlc2UgY2FuIGJlIG1hZGUgcHJvdGVjdGVkIGFnYWluIG9uY2UgYWxsIGNhbGxlcnMg
aGF2ZSBiZWVuIG1vdmVkIGhlcmUuCiAgICAgdm9pZCBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdp
bmF0aW9uKFJvb3RJbmxpbmVCb3gqLCBMYXlvdXRVbml0JiBkZWx0YU9mZnNldCwgYm9vbCYgb3Zl
cmZsb3dzUmVnaW9uLCBSZW5kZXJGbG93VGhyZWFkKik7IC8vIENvbXB1dGVzIGEgZGVsdGFPZmZz
ZXQgdmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBp
dCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLgogICAgIHZvaWQgdXBkYXRlUmVnaW9u
Rm9yTGluZShSb290SW5saW5lQm94KikgY29uc3Q7Ci0gICAgdm9pZCBjcmVhdGVSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudElmTmVlZGVkKCk7CiAKICAgICAvLyBQYWdpbmF0aW9uIHJvdXRpbmVzLgog
ICAgIGJvb2wgcmVsYXlvdXRGb3JQYWdpbmF0aW9uKExheW91dFN0YXRlTWFpbnRhaW5lciYpOwpA
QCAtNjQzLDExICs2MzAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIExpbmVXaWR0
aDsgLy8gTmVlZHMgdG8ga25vdyBGbG9hdGluZ09iamVjdAogfTsKIAotaW5saW5lIGJvb2wgUmVu
ZGVyRWxlbWVudDo6aXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGlzPFJlbmRlckJsb2NrRmxvdz4oKnRoaXMpICYmIGRvd25jYXN0PFJlbmRl
ckJsb2NrRmxvdz4oKnRoaXMpLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci19Ci0KIGlubGlu
ZSBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIFJlbmRlckJsb2NrRmxvdzo6c2ltcGxl
TGluZUxheW91dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxpbmVMYXlvdXRQYXRoKCkgPT0gU2lt
cGxlTGluZXNQYXRoIHx8ICFtX3NpbXBsZUxpbmVMYXlvdXQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3
IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCIKLSNpbmNs
dWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5o
IgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMTE3NSwxNiArMTE3NSw5IEBAIGJvb2wgUmVu
ZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXMKICAgICAgICAgfQogICAgIH0KIAotICAg
IFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2Nr
KCk7Ci0gICAgUmVuZGVyUmVnaW9uKiByZWdpb25Ub1VzZSA9IGZsb3dUaHJlYWQgPyBkb3duY2Fz
dDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigpKSA6
IG51bGxwdHI7Ci0KLSAgICAvLyBJZiB0aGUgYm94IGlzIG5vdCBjb250YWluZWQgYnkgdGhpcyBy
ZWdpb24gdGhlcmUncyBubyBwb2ludCBpbiBnb2luZyBmdXJ0aGVyLgotICAgIGlmIChyZWdpb25U
b1VzZSAmJiAhZmxvd1RocmVhZC0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhp
cywgcmVnaW9uVG9Vc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAvLyBDaGVjayBv
dXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlIGNh
biBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNlICh3aGljaCBpcyB0
cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCi0gICAgTGF5b3V0UmVjdCBi
b3VuZHNSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvblRvVXNlKTsKKyAgICBMYXlv
dXRSZWN0IGJvdW5kc1JlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24obnVsbHB0cik7CiAgICAg
Ym91bmRzUmVjdC5tb3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7CiAgICAgaWYgKHZpc2libGVUb0hp
dFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgbG9jYXRpb25JbkNv
bnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CiAgICAgICAgIHVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUo
YWRqdXN0ZWRMb2NhdGlvbikpOwpAQCAtMTI1Miw3ICsxMjQ1LDcgQEAgdm9pZCBSZW5kZXJCb3g6
OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbgogICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50
V2l0aGluUm9vdCgqdGhpcykpCiAgICAgICAgIHJldHVybjsKIAotICAgIExheW91dFJlY3QgcGFp
bnRSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCgpKTsKKyAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lv
bihudWxscHRyKTsKICAgICBwYWludFJlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKICAgICBhZGp1
c3RCb3JkZXJCb3hSZWN0Rm9yUGFpbnRpbmcocGFpbnRSZWN0KTsKIApAQCAtMTczOSw3ICsxNzMy
LDcgQEAgYm9vbCBSZW5kZXJCb3g6OnB1c2hDb250ZW50c0NsaXAoUGFpbnRJbgogICAgICAgICBw
YWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOwogICAgIH0K
ICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0
b3IoKTsKLSAgICBGbG9hdFJlY3QgY2xpcFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKChp
c0NvbnRyb2xDbGlwID8gY29udHJvbENsaXBSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0KSA6IG92ZXJm
bG93Q2xpcFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQsIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCgpLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgcGFpbnRJbmZvLnBoYXNlKSksIGRl
dmljZVNjYWxlRmFjdG9yKTsKKyAgICBGbG9hdFJlY3QgY2xpcFJlY3QgPSBzbmFwUmVjdFRvRGV2
aWNlUGl4ZWxzKChpc0NvbnRyb2xDbGlwID8gY29udHJvbENsaXBSZWN0KGFjY3VtdWxhdGVkT2Zm
c2V0KSA6IG92ZXJmbG93Q2xpcFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQsIG51bGxwdHIsIElnbm9y
ZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBwYWludEluZm8ucGhhc2UpKSwgZGV2aWNlU2NhbGVGYWN0
b3IpOwogICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2F2ZSgpOwogICAgIGlmIChzdHlsZSgpLmhh
c0JvcmRlclJhZGl1cygpKQogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmNsaXBSb3VuZGVk
UmVjdChzdHlsZSgpLmdldFJvdW5kZWRJbm5lckJvcmRlckZvcihMYXlvdXRSZWN0KGFjY3VtdWxh
dGVkT2Zmc2V0LCBzaXplKCkpKS5waXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKGRl
dmljZVNjYWxlRmFjdG9yKSk7CkBAIC0xOTc4LDEyICsxOTcxLDcgQEAgdm9pZCBSZW5kZXJCb3g6
Om1hcExvY2FsVG9Db250YWluZXIoY29ucwogCiAgICAgbW9kZSAmPSB+QXBwbHlDb250YWluZXJG
bGlwOwogCi0gICAgLy8gRm9yIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMgaW5zaWRlIG91dC1v
Zi1mbG93IG5hbWVkIGZsb3dzLCB3ZSBkbyBub3Qgd2FudCB0bwotICAgIC8vIG1hcCB0aGVpciBw
b3NpdGlvbiBmdXJ0aGVyIHRvIHJlZ2lvbnMgYmFzZWQgb24gdGhlaXIgY29vcmRpbmF0ZXMgaW5z
aWRlIHRoZSBuYW1lZCBmbG93cy4KLSAgICBpZiAoIWNvbnRhaW5lci0+aXNPdXRPZkZsb3dSZW5k
ZXJGbG93VGhyZWFkKCkgfHwgIWZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5n
QmxvY2soKSkKLSAgICAgICAgY29udGFpbmVyLT5tYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRD
b250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2RlLCB3YXNGaXhlZCk7Ci0gICAgZWxzZQotICAg
ICAgICBjb250YWluZXItPm1hcExvY2FsVG9Db250YWluZXIoZG93bmNhc3Q8UmVuZGVyTGF5ZXJN
b2RlbE9iamVjdD4oY29udGFpbmVyKSwgdHJhbnNmb3JtU3RhdGUsIG1vZGUsIHdhc0ZpeGVkKTsK
KyAgICBjb250YWluZXItPm1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgdHJh
bnNmb3JtU3RhdGUsIG1vZGUsIHdhc0ZpeGVkKTsKIH0KIAogY29uc3QgUmVuZGVyT2JqZWN0KiBS
ZW5kZXJCb3g6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmIGdlb21ldHJ5TWFwKSBj
b25zdApAQCAtNDY0OSw5ICs0NjM3LDcgQEAgYm9vbCBSZW5kZXJCb3g6OmlzVW5zcGxpdHRhYmxl
Rm9yUGFnaW5hdAogICAgIHJldHVybiBpc1JlcGxhY2VkKCkKICAgICAgICAgfHwgaGFzVW5zcGxp
dHRhYmxlU2Nyb2xsaW5nT3ZlcmZsb3coKQogICAgICAgICB8fCAocGFyZW50KCkgJiYgaXNXcml0
aW5nTW9kZVJvb3QoKSkKLSAgICAgICAgfHwgKGlzRmxvYXRpbmcoKSAmJiBzdHlsZSgpLnN0eWxl
VHlwZSgpID09IEZJUlNUX0xFVFRFUiAmJiBzdHlsZSgpLmluaXRpYWxMZXR0ZXJEcm9wKCkgPiAw
KQotICAgICAgICB8fCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkKLSAgICAg
ICAgfHwgZml4ZWRQb3NpdGlvbmVkV2l0aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jaygpOworICAg
ICAgICB8fCAoaXNGbG9hdGluZygpICYmIHN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gRklSU1RfTEVU
VEVSICYmIHN0eWxlKCkuaW5pdGlhbExldHRlckRyb3AoKSA+IDApOwogfQogCiBMYXlvdXRVbml0
IFJlbmRlckJveDo6bGluZUhlaWdodChib29sIC8qZmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25N
b2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSAvKmxpbmVQb3NpdGlvbk1vZGUqLykgY29u
c3QKQEAgLTQ3NzcsMjIgKzQ3NjMsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmZsaXBwZWRD
bGllbnRCb3hSZQogICAgIHJldHVybiByZWN0OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6
b3ZlcmZsb3dSZWN0Rm9yUGFpbnRSZWplY3Rpb24oUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5h
bWVkRmxvd0ZyYWdtZW50KSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93UmVj
dEZvclBhaW50UmVqZWN0aW9uKCkgY29uc3QKIHsKICAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVj
dCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAgIAotICAgIC8vIFdoZW4gdXNpbmcgcmVnaW9u
cywgc29tZSBib3hlcyBtaWdodCBoYXZlIHRoZWlyIGZyYW1lIHJlY3QgcmVsYXRpdmUgdG8gdGhl
IGZsb3cgdGhyZWFkLCB3aGljaCBjb3VsZAotICAgIC8vIGNhdXNlIHRoZSBwYWludCByZWplY3Rp
b24gYWxnb3JpdGhtIHRvIHByZXZlbnQgdGhlbSBmcm9tIHBhaW50aW5nIHdoZW4gdXNpbmcgZGlm
ZmVyZW50IHdpZHRoIHJlZ2lvbnMuCi0gICAgLy8gZS5nLiBhbiBhYnNvbHV0ZWx5IHBvc2l0aW9u
ZWQgYm94IHdpdGggYm90dG9tOjBweCBhbmQgcmlnaHQ6MHB4IHdvdWxkIGhhdmUgaXQncyBmcmFt
ZVJlY3QueCByZWxhdGl2ZQotICAgIC8vIHRvIHRoZSBmbG93IHRocmVhZCwgbm90IHRoZSBsYXN0
IHJlZ2lvbiAoaW4gd2hpY2ggaXQgd2lsbCBlbmQgdXAgYmVjYXVzZSBvZiBib3R0b206MHB4KQot
ICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCAmJiBuYW1lZEZsb3dGcmFnbWVudC0+aXNWYWxpZCgp
KSB7Ci0gICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBuYW1lZEZsb3dGcmFn
bWVudC0+Zmxvd1RocmVhZCgpOwotICAgICAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uID0g
bnVsbHB0cjsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24gPSBudWxscHRyOwotICAg
ICAgICBpZiAoZmxvd1RocmVhZC0+Z2V0UmVnaW9uUmFuZ2VGb3JCb3godGhpcywgc3RhcnRSZWdp
b24sIGVuZFJlZ2lvbikpCi0gICAgICAgICAgICBvdmVyZmxvd1JlY3QudW5pdGUobmFtZWRGbG93
RnJhZ21lbnQtPnZpc3VhbE92ZXJmbG93UmVjdEZvckJveCgqdGhpcykpOwotICAgIH0KLSAgICAK
ICAgICBpZiAoIW1fb3ZlcmZsb3cgfHwgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAg
ICAgIHJldHVybiBvdmVyZmxvd1JlY3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw3IEBAIHB1YmxpYzoKICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBz
dHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB2aXN1YWxPdmVyZmxvd1JlY3QoKS54
KCkgOiB2aXN1YWxPdmVyZmxvd1JlY3QoKS55KCk7IH0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxS
aWdodFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gdmlzdWFsT3ZlcmZsb3dSZWN0KCkubWF4WCgpIDogdmlzdWFsT3ZlcmZs
b3dSZWN0KCkubWF4WSgpOyB9CiAKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdEZvclBhaW50
UmVqZWN0aW9uKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KikgY29uc3Q7CisgICAgTGF5b3V0UmVj
dCBvdmVyZmxvd1JlY3RGb3JQYWludFJlamVjdGlvbigpIGNvbnN0OwogICAgIAogICAgIHZvaWQg
YWRkTGF5b3V0T3ZlcmZsb3coY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZvaWQgYWRkVmlzdWFs
T3ZlcmZsb3coY29uc3QgTGF5b3V0UmVjdCYpOwpAQCAtNDc3LDcgKzQ3Nyw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVk
IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRy
KSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0KGNv
bnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyUmVnaW9uKiwgT3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgUGFpbnRQaGFzZSA9
IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpOworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVy
Zmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyUmVnaW9uKiA9
IG51bGxwdHIsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUsIFBhaW50UGhhc2UgPSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kKTsKICAg
ICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdEZvckNoaWxkTGF5ZXJzKGNvbnN0
IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyUmVnaW9uKiByZWdpb24sIE92ZXJsYXlTY3Jv
bGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgeyByZXR1cm4gb3ZlcmZsb3dDbGlwUmVjdChs
b2NhdGlvbiwgcmVnaW9uLCByZWxldmFuY3kpOyB9CiAgICAgTGF5b3V0UmVjdCBjbGlwUmVjdChj
b25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiopOwogICAgIHZpcnR1YWwg
Ym9vbCBoYXNDb250cm9sQ2xpcCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJl
dmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJS
ZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIK
ICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCIKLSNpbmNsdWRlICJSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1
ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKQEAgLTY4OCwx
MCArNjg3LDYgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRNYXNrRm9yVAogICAg
IGlmIChib3gpIHsKICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IGJveC0+
cm9vdCgpOwogICAgICAgICBib3gtPnBhaW50KGluZm8sIExheW91dFBvaW50KHNjcm9sbGVkUGFp
bnRSZWN0LngoKSAtIGJveC0+eCgpLCBzY3JvbGxlZFBhaW50UmVjdC55KCkgLSBib3gtPnkoKSks
IHJvb3RCb3gubGluZVRvcCgpLCByb290Qm94LmxpbmVCb3R0b20oKSk7Ci0gICAgfSBlbHNlIGlm
IChpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpIHsKLSAgICAgICAgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQmIHJlZ2lvbiA9ICpkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCp0
aGlzKS5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAgICAgICBpZiAocmVnaW9uLmlzVmFs
aWQoKSkKLSAgICAgICAgICAgIHJlZ2lvbi5mbG93VGhyZWFkKCktPmxheWVyKCktPnBhaW50TmFt
ZWRGbG93VGhyZWFkSW5zaWRlUmVnaW9uKG1hc2tJbWFnZUNvbnRleHQsICZyZWdpb24sIG1hc2tS
ZWN0LCBtYXNrUmVjdC5sb2NhdGlvbigpLCBQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQsIFJl
bmRlckxheWVyOjpQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBMYXlvdXRTaXplIGxvY2FsT2Zmc2V0ID0gaXM8UmVuZGVyQm94PigqdGhpcykgPyBk
b3duY2FzdDxSZW5kZXJCb3g+KCp0aGlzKS5sb2NhdGlvbk9mZnNldCgpIDogTGF5b3V0U2l6ZSgp
OwogICAgICAgICBwYWludChpbmZvLCBzY3JvbGxlZFBhaW50UmVjdC5sb2NhdGlvbigpIC0gbG9j
YWxPZmZzZXQpOwpAQCAtODAyLDcgKzc5Nyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OnBhaW50RmlsbExheWUKICAgICBpZiAoY2xpcHBlZFdpdGhMb2NhbFNjcm9sbGluZykgewogICAg
ICAgICAvLyBDbGlwIHRvIHRoZSBvdmVyZmxvdyBhcmVhLgogICAgICAgICBhdXRvJiB0aGlzQm94
ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqdGhpcyk7Ci0gICAgICAgIGNvbnRleHQuY2xpcCh0aGlz
Qm94Lm92ZXJmbG93Q2xpcFJlY3QocmVjdC5sb2NhdGlvbigpLCBjdXJyZW50UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKSkpOworICAgICAgICBjb250ZXh0LmNsaXAodGhpc0JveC5vdmVyZmxvd0Ns
aXBSZWN0KHJlY3QubG9jYXRpb24oKSkpOwogICAgICAgICAKICAgICAgICAgLy8gQWRqdXN0IHRo
ZSBwYWludCByZWN0IHRvIHJlZmxlY3QgYSBzY3JvbGxlZCBjb250ZW50IGJveCB3aXRoIGJvcmRl
cnMgYXQgdGhlIGVuZHMuCiAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0Lm1vdmVCeSgtdGhpc0Jv
eC5zY3JvbGxQb3NpdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NjEsNyArNjEsNiBAQCBjbGFzcyBCb3JkZXJFZGdlOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFz
cyBJbmxpbmVGbG93Qm94OwogY2xhc3MgS2V5ZnJhbWVMaXN0OwotY2xhc3MgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQ7CiBjbGFzcyBSZW5kZXJUZXh0RnJhZ21lbnQ7CiBjbGFzcyBTdGlja3lQb3Np
dGlvblZpZXdwb3J0Q29uc3RyYWludHM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuaAkocmV2aXNpb24gMjIyMjYzKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc1JlbmRlckJsb2NrRmxvdygpIGNvbnN0OwogICAgIGJvb2wgaXNS
ZW5kZXJSZXBsYWNlZCgpIGNvbnN0OwogICAgIGJvb2wgaXNSZW5kZXJJbmxpbmUoKSBjb25zdDsK
LSAgICBib29sIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0NoaWxkQWxsb3dlZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQg
YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCA9IG51bGxwdHIpOwpAQCAtNDE4LDggKzQxNyw2IEBAIGlubGluZSBib29sIFJlbmRlckVsZW1l
bnQ6OmlzUmVuZGVySW5saW4KIAogaW5saW5lIEVsZW1lbnQqIFJlbmRlckVsZW1lbnQ6OmdlbmVy
YXRpbmdFbGVtZW50KCkgY29uc3QKIHsKLSAgICBpZiAocGFyZW50KCkgJiYgaXNSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCgpKQotICAgICAgICByZXR1cm4gcGFyZW50KCktPmdlbmVyYXRpbmdFbGVt
ZW50KCk7CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KFJlbmRlck9iamVjdDo6Z2VuZXJh
dGluZ05vZGUoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzks
NiBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVNlY3Rpb24uaCIKQEAgLTUz
LDcgKzUyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogUmVuZGVyRmxvd1RocmVhZDo6UmVuZGVy
Rmxvd1RocmVhZChEb2N1bWVudCYgZG9jdW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCiAgICAg
OiBSZW5kZXJCbG9ja0Zsb3coZG9jdW1lbnQsIFdURk1vdmUoc3R5bGUpKQogICAgICwgbV9wcmV2
aW91c1JlZ2lvbkNvdW50KDApCi0gICAgLCBtX2F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50
KDApCiAgICAgLCBtX2N1cnJlbnRSZWdpb25NYWludGFpbmVyKG51bGxwdHIpCiAgICAgLCBtX3Jl
Z2lvbnNJbnZhbGlkYXRlZChmYWxzZSkKICAgICAsIG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNh
bFdpZHRoKHRydWUpCkBAIC02MSwxMCArNTksOCBAQCBSZW5kZXJGbG93VGhyZWFkOjpSZW5kZXJG
bG93VGhyZWFkKERvY3VtCiAgICAgLCBtX3BhZ2VMb2dpY2FsU2l6ZUNoYW5nZWQoZmFsc2UpCiAg
ICAgLCBtX2xheW91dFBoYXNlKExheW91dFBoYXNlTWVhc3VyZUNvbnRlbnQpCiAgICAgLCBtX25l
ZWRzVHdvUGhhc2VzTGF5b3V0KGZhbHNlKQotICAgICwgbV9sYXllcnNUb1JlZ2lvbk1hcHBpbmdz
RGlydHkodHJ1ZSkKIHsKICAgICBzZXRJc1JlbmRlckZsb3dUaHJlYWQodHJ1ZSk7Ci0gICAgc2V0
Rmxvd1RocmVhZFN0YXRlKEluc2lkZU91dE9mRmxvd1RocmVhZCk7CiB9CiAKIFJlbmRlclN0eWxl
IFJlbmRlckZsb3dUaHJlYWQ6OmNyZWF0ZUZsb3dUaHJlYWRTdHlsZShjb25zdCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpCkBAIC0xMTYsMTMgKzExMiw4IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVh
ZDo6aW52YWxpZGF0ZVJlZ2lvbnMKICAgICBtX3JlZ2lvblJhbmdlTWFwLmNsZWFyKCk7CiAgICAg
bV9icmVha0JlZm9yZVRvUmVnaW9uTWFwLmNsZWFyKCk7CiAgICAgbV9icmVha0FmdGVyVG9SZWdp
b25NYXAuY2xlYXIoKTsKLSAgICBpZiAobV9sYXllclRvUmVnaW9uTWFwKQotICAgICAgICBtX2xh
eWVyVG9SZWdpb25NYXAtPmNsZWFyKCk7Ci0gICAgaWYgKG1fcmVnaW9uVG9MYXllckxpc3RNYXAp
Ci0gICAgICAgIG1fcmVnaW9uVG9MYXllckxpc3RNYXAtPmNsZWFyKCk7CiAgICAgaWYgKG1fbGlu
ZVRvUmVnaW9uTWFwKQogICAgICAgICBtX2xpbmVUb1JlZ2lvbk1hcC0+Y2xlYXIoKTsKLSAgICBt
X2xheWVyc1RvUmVnaW9uTWFwcGluZ3NEaXJ0eSA9IHRydWU7CiAgICAgc2V0TmVlZHNMYXlvdXQo
bWFya2luZ1BhcmVudHMpOwogCiAgICAgbV9yZWdpb25zSW52YWxpZGF0ZWQgPSB0cnVlOwpAQCAt
MTQ1LDE2ICsxMzYsNiBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnZhbGlkYXRlUmVnaW9ucygp
CiAKICAgICAgICAgICAgICAgICByZWdpb24tPmRlbGV0ZUFsbFJlbmRlckJveFJlZ2lvbkluZm8o
KTsKIAotICAgICAgICAgICAgICAgIC8vIEluIHRoZSBtZWFzdXJlIGNvbnRlbnQgbGF5b3V0IHBo
YXNlIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgY29tcHV0ZWRBdXRvSGVpZ2h0IGZvciBhdXRv
LWhlaWdodCByZWdpb25zLgotICAgICAgICAgICAgICAgIC8vIFNlZSBpbml0aWFsaXplUmVnaW9u
c0NvbXB1dGVkQXV0b0hlaWdodCBmb3IgdGhlIGV4cGxhbmF0aW9uLgotICAgICAgICAgICAgICAg
IC8vIEFsc28sIGlmIHdlIGhhdmUgYXV0by1oZWlnaHQgcmVnaW9ucyB3ZSBjYW4ndCBhc3N1bWUg
bV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0IHRvIGJlIHRydWUgaW4gdGhlIGZpcnN0
IHBoYXNlCi0gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgYXV0by1oZWlnaHQgcmVnaW9u
cyBkb24ndCBoYXZlIHRoZWlyIGhlaWdodCBjb21wdXRlZCB5ZXQuCi0gICAgICAgICAgICAgICAg
aWYgKGluTWVhc3VyZUNvbnRlbnRMYXlvdXRQaGFzZSgpICYmIHJlZ2lvbi0+aGFzQXV0b0xvZ2lj
YWxIZWlnaHQoKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvJiBuYW1lZEZsb3dGcmFnbWVu
dCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKTsKLSAgICAgICAg
ICAgICAgICAgICAgbmFtZWRGbG93RnJhZ21lbnQuc2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KG5hbWVk
Rmxvd0ZyYWdtZW50Lm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgICAg
ICBtX3JlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWlnaHQgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB9Ci0KICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxvZ2ljYWxXaWR0aCA9
IHJlZ2lvbi0+cGFnZUxvZ2ljYWxXaWR0aCgpOwogICAgICAgICAgICAgICAgIExheW91dFVuaXQg
cmVnaW9uTG9naWNhbEhlaWdodCA9IHJlZ2lvbi0+cGFnZUxvZ2ljYWxIZWlnaHQoKTsKIApAQCAt
MTg0LDE0NiArMTY1LDE1IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6bGF5b3V0KCkKIAogICAg
IG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCA9IG1fcmVnaW9uc0ludmFsaWRhdGVkICYmIGV2ZXJI
YWRMYXlvdXQoKTsKIAotICAgIC8vIEluIGNhc2UgdGhpcyBpcyB0aGUgc2Vjb25kIHBhc3Mgb2Yg
dGhlIG1lYXN1cmUgY29udGVudCBwaGFzZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYXV0by1oZWln
aHQgcmVnaW9ucyB0byB0aGVpciBpbml0aWFsIHZhbHVlLgotICAgIC8vIElmIHRoZSByZWdpb24g
Y2hhaW4gd2FzIGludmFsaWRhdGVkIHRoaXMgd2lsbCBoYXBwZW4gYW55d2F5LgotICAgIGlmICgh
bV9yZWdpb25zSW52YWxpZGF0ZWQgJiYgaW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkpCi0g
ICAgICAgIGluaXRpYWxpemVSZWdpb25zQ29tcHV0ZWRBdXRvSGVpZ2h0KCk7Ci0KLSAgICAvLyBU
aGlzIGlzIHRoZSBmaXJzdCBwaGFzZSBvZiB0aGUgbGF5b3V0IGFuZCBiZWNhdXNlIHdlIGhhdmUg
YXV0by1oZWlnaHQgcmVnaW9ucyB3ZSdsbCBuZWVkIGEgc2Vjb25kCi0gICAgLy8gcGFzcyB0byB1
cGRhdGUgdGhlIGZsb3cgd2l0aCB0aGUgY29tcHV0ZWQgYXV0by1oZWlnaHQgcmVnaW9ucy4KICAg
ICAvLyBJdCdzIGFsc28gcG9zc2libGUgdG8gbmVlZCBhIHNlY29uZGFyeSBsYXlvdXQgaWYgdGhl
IG92ZXJmbG93IGNvbXB1dGF0aW9uIGludmFsaWRhdGVkIHRoZSByZWdpb24gY2hhaW4gKGUuZy4g
b3ZlcmZsb3c6IGF1dG8gc2Nyb2xsYmFycwogICAgIC8vIHNocnVuayBzb21lIHJlZ2lvbnMpIHNv
IHJlcHJvcGFnYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgbV9uZWVkc1R3b1BoYXNlc0xheW91dCA9
IChpbk1lYXN1cmVDb250ZW50TGF5b3V0UGhhc2UoKSAmJiBoYXNBdXRvTG9naWNhbEhlaWdodFJl
Z2lvbnMoKSkgfHwgKGluT3ZlcmZsb3dMYXlvdXRQaGFzZSgpICYmIG1fcmVnaW9uc0ludmFsaWRh
dGVkKTsKKyAgICBtX25lZWRzVHdvUGhhc2VzTGF5b3V0ID0gaW5PdmVyZmxvd0xheW91dFBoYXNl
KCkgJiYgbV9yZWdpb25zSW52YWxpZGF0ZWQ7CiAKICAgICB2YWxpZGF0ZVJlZ2lvbnMoKTsKIAog
ICAgIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0KCk7CiAKICAgICBtX3BhZ2VMb2dpY2FsU2l6ZUNo
YW5nZWQgPSBmYWxzZTsKLQotICAgIC8vIElmIHRoZXJlIGFyZSBjaGlsZHJlbiBsYXllcnMgaW4g
dGhlIFJlbmRlckZsb3dUaHJlYWQgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQot
ICAgIC8vIGNvbXBvc2l0ZWQgY2hpbGRyZW4gbGF5ZXJzIHdpbGwgbGFuZCBpbiB0aGUgcmlnaHQg
UmVuZGVyUmVnaW9ucy4gQWxzbywgdGhlIHBhcmVudCBSZW5kZXJSZWdpb25zCi0gICAgLy8gd2ls
bCBnZXQgUmVuZGVyTGF5ZXJzIGFuZCBiZWNvbWUgY29tcG9zaXRlZCBhcyBuZWVkZWQuCi0gICAg
Ly8gTm90ZSB0aGF0IHRoZXJlJ3Mgbm8gbmVlZCB0byBkbyBzbyBmb3IgdGhlIGlubGluZSBtdWx0
aS1jb2x1bW4gYXMgd2UgYXJlIG5vdCBtb3ZpbmcgbGF5ZXJzIGludG8gZGlmZmVyZW50Ci0gICAg
Ly8gY29udGFpbmVycywgYnV0IGp1c3QgYWRqdXN0aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGUgUmVu
ZGVyTGF5ZXJCYWNraW5nLgotICAgIGlmICghbV9uZWVkc1R3b1BoYXNlc0xheW91dCkgewotICAg
ICAgICAvLyBJZiB3ZSBoYXZlIGxheWVycyB0aGF0IG1vdmVkIGZyb20gb25lIHJlZ2lvbiB0byBh
bm90aGVyLCB3ZSB0cmlnZ2VyCi0gICAgICAgIC8vIGEgY29tcG9zaXRlZCBsYXllcnMgcmVidWls
ZCBpbiBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWdpb25zIHdpbGwgY29sbGVjdCB0aGUg
cmlnaHQgbGF5ZXJzLgotICAgICAgICBpZiAodXBkYXRlQWxsTGF5ZXJUb1JlZ2lvbk1hcHBpbmdz
KCkpCi0gICAgICAgICAgICBsYXllcigpLT5jb21wb3NpdG9yKCkuc2V0Q29tcG9zaXRpbmdMYXll
cnNOZWVkUmVidWlsZCgpOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpoYXND
b21wb3NpdGluZ1JlZ2lvbkRlc2NlbmRhbnQoKSBjb25zdAotewotICAgIGZvciAoYXV0byYgcmVn
aW9uIDogbV9yZWdpb25MaXN0KSB7Ci0gICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudD4oKnJlZ2lvbikubGF5ZXJPd25lcigpLmxheWVyKCktPmhhc0NvbXBvc2l0aW5n
RGVzY2VuZGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1jb25zdCBSZW5kZXJMYXllckxpc3QqIFJlbmRlckZsb3dUaHJlYWQ6
OmdldExheWVyTGlzdEZvclJlZ2lvbihSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVnaW9uKSBj
b25zdAotewotICAgIEFTU0VSVChtX3JlZ2lvblRvTGF5ZXJMaXN0TWFwKTsKLSAgICBhdXRvIGl0
ZXJhdG9yID0gbV9yZWdpb25Ub0xheWVyTGlzdE1hcC0+ZmluZChyZWdpb24pOwotICAgIHJldHVy
biBpdGVyYXRvciA9PSBtX3JlZ2lvblRvTGF5ZXJMaXN0TWFwLT5lbmQoKSA/IG51bGxwdHIgOiAm
aXRlcmF0b3ItPnZhbHVlOwotfQotCi1SZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVyRmxv
d1RocmVhZDo6cmVnaW9uRm9yQ29tcG9zaXRlZExheWVyKFJlbmRlckxheWVyJiBjaGlsZExheWVy
KSBjb25zdAotewotICAgIGlmIChjaGlsZExheWVyLnJlbmRlcmVyKCkuZml4ZWRQb3NpdGlvbmVk
V2l0aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jaygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGlmIChjaGlsZExheWVyLnJlbmRlckJveCgpKSB7Ci0gICAgICAgIFJlbmRlclJlZ2lv
biogc3RhcnRSZWdpb24gPSBudWxscHRyOwotICAgICAgICBSZW5kZXJSZWdpb24qIGVuZFJlZ2lv
biA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChnZXRSZWdpb25SYW5nZUZvckJveChjaGlsZExheWVy
LnJlbmRlckJveCgpLCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKSkKLSAgICAgICAgICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oc3RhcnRSZWdpb24pOwotICAgIH0K
LQotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyB3aGVuIHdlJ2xsIGhhdmUgcmVnaW9uIHJhbmdl
cyBmb3IgaW5saW5lcyBhcyB3ZWxsLgotICAgIExheW91dFBvaW50IGZsb3dUaHJlYWRPZmZzZXQg
PSBmbG9vcmVkTGF5b3V0UG9pbnQoY2hpbGRMYXllci5yZW5kZXJlcigpLmxvY2FsVG9Db250YWlu
ZXJQb2ludChMYXlvdXRQb2ludCgpLCB0aGlzLCBBcHBseUNvbnRhaW5lckZsaXApKTsKLSAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KHJlZ2lvbkF0QmxvY2tPZmZz
ZXQoMCwgZmxpcEZvcldyaXRpbmdNb2RlKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmbG93
VGhyZWFkT2Zmc2V0LnkoKSA6IGZsb3dUaHJlYWRPZmZzZXQueCgpKSwgdHJ1ZSkpOwotfQotCi1S
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVyRmxvd1RocmVhZDo6Y2FjaGVkUmVnaW9uRm9y
Q29tcG9zaXRlZExheWVyKFJlbmRlckxheWVyJiBjaGlsZExheWVyKSBjb25zdAotewotICAgIGlm
ICghbV9sYXllclRvUmVnaW9uTWFwKSB7Ci0gICAgICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsK
LSAgICAgICAgQVNTRVJUKG1fbGF5ZXJzVG9SZWdpb25NYXBwaW5nc0RpcnR5KTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5h
bWVkRmxvd0ZyYWdtZW50ID0gbV9sYXllclRvUmVnaW9uTWFwLT5nZXQoJmNoaWxkTGF5ZXIpOwot
ICAgIEFTU0VSVCghbmFtZWRGbG93RnJhZ21lbnQgfHwgbV9yZWdpb25MaXN0LmNvbnRhaW5zKG5h
bWVkRmxvd0ZyYWdtZW50KSk7Ci0gICAgcmV0dXJuIG5hbWVkRmxvd0ZyYWdtZW50OwotfQotCi12
b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUxheWVyVG9SZWdpb25NYXBwaW5ncyhSZW5kZXJM
YXllciYgbGF5ZXIsIExheWVyVG9SZWdpb25NYXAmIGxheWVyVG9SZWdpb25NYXAsIFJlZ2lvblRv
TGF5ZXJMaXN0TWFwJiByZWdpb25Ub0xheWVyTGlzdE1hcCwgYm9vbCYgbmVlZHNMYXllclVwZGF0
ZSkKLXsKLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVnaW9uID0gcmVnaW9uRm9yQ29t
cG9zaXRlZExheWVyKGxheWVyKTsKLSAgICBpZiAoIW5lZWRzTGF5ZXJVcGRhdGUpIHsKLSAgICAg
ICAgLy8gRmlndXJlIG91dCBpZiB3ZSBtb3ZlZCB0aGlzIGxheWVyIGZyb20gYSByZWdpb24gdG8g
dGhlIG90aGVyLgotICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcHJldmlvdXNSZWdp
b24gPSBjYWNoZWRSZWdpb25Gb3JDb21wb3NpdGVkTGF5ZXIobGF5ZXIpOwotICAgICAgICBpZiAo
cHJldmlvdXNSZWdpb24gIT0gcmVnaW9uKQotICAgICAgICAgICAgbmVlZHNMYXllclVwZGF0ZSA9
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFyZWdpb24pCi0gICAgICAgIHJldHVybjsKLQotICAg
IGxheWVyVG9SZWdpb25NYXAuc2V0KCZsYXllciwgcmVnaW9uKTsKLQotICAgIGF1dG8gaXRlcmF0
b3IgPSByZWdpb25Ub0xheWVyTGlzdE1hcC5maW5kKHJlZ2lvbik7Ci0gICAgUmVuZGVyTGF5ZXJM
aXN0JiBsaXN0ID0gaXRlcmF0b3IgPT0gcmVnaW9uVG9MYXllckxpc3RNYXAuZW5kKCkgPyByZWdp
b25Ub0xheWVyTGlzdE1hcC5zZXQocmVnaW9uLCBSZW5kZXJMYXllckxpc3QoKSkuaXRlcmF0b3It
PnZhbHVlIDogaXRlcmF0b3ItPnZhbHVlOwotICAgIEFTU0VSVCghbGlzdC5jb250YWlucygmbGF5
ZXIpKTsKLSAgICBsaXN0LmFwcGVuZCgmbGF5ZXIpOwotfQotCi1ib29sIFJlbmRlckZsb3dUaHJl
YWQ6OnVwZGF0ZUFsbExheWVyVG9SZWdpb25NYXBwaW5ncygpCi17Ci0gICAgaWYgKCFjb2xsZWN0
c0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIElmIHRoZSBSZW5kZXJGbG93VGhyZWFkIGhhZCBhIHotaW5kZXggbGF5ZXIgdXBkYXRl
LCB0aGVuIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb21wb3NpdGVkIGxheWVycyB0b28uCi0gICAg
Ym9vbCBuZWVkc0xheWVyVXBkYXRlID0gbGF5ZXIoKS0+aXNEaXJ0eVJlbmRlckZsb3dUaHJlYWQo
KSB8fCBtX2xheWVyc1RvUmVnaW9uTWFwcGluZ3NEaXJ0eSB8fCAhbV9sYXllclRvUmVnaW9uTWFw
LmdldCgpOwotICAgIGxheWVyKCktPnVwZGF0ZUxheWVyTGlzdHNJZk5lZWRlZCgpOwotCi0gICAg
TGF5ZXJUb1JlZ2lvbk1hcCBsYXllclRvUmVnaW9uTWFwOwotICAgIFJlZ2lvblRvTGF5ZXJMaXN0
TWFwIHJlZ2lvblRvTGF5ZXJMaXN0TWFwOwotCi0gICAgUmVuZGVyTGF5ZXJMaXN0KiBsaXN0c1td
ID0geyBsYXllcigpLT5uZWdaT3JkZXJMaXN0KCksIGxheWVyKCktPm5vcm1hbEZsb3dMaXN0KCks
IGxheWVyKCktPnBvc1pPcmRlckxpc3QoKSB9OwotICAgIGZvciAoc2l6ZV90IGxpc3RJbmRleCA9
IDA7IGxpc3RJbmRleCA8IHNpemVvZihsaXN0cykgLyBzaXplb2YobGlzdHNbMF0pOyArK2xpc3RJ
bmRleCkgewotICAgICAgICBpZiAoUmVuZGVyTGF5ZXJMaXN0KiBsaXN0ID0gbGlzdHNbbGlzdElu
ZGV4XSkgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGxpc3RTaXplID0gbGlzdC0+
c2l6ZSgpOyBpIDwgbGlzdFNpemU7ICsraSkKLSAgICAgICAgICAgICAgICB1cGRhdGVMYXllclRv
UmVnaW9uTWFwcGluZ3MoKmxpc3QtPmF0KGkpLCBsYXllclRvUmVnaW9uTWFwLCByZWdpb25Ub0xh
eWVyTGlzdE1hcCwgbmVlZHNMYXllclVwZGF0ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAobmVlZHNMYXllclVwZGF0ZSkgewotICAgICAgICBpZiAoIW1fbGF5ZXJUb1JlZ2lvbk1hcCkK
LSAgICAgICAgICAgIG1fbGF5ZXJUb1JlZ2lvbk1hcCA9IHN0ZDo6bWFrZV91bmlxdWU8TGF5ZXJU
b1JlZ2lvbk1hcD4oKTsKLSAgICAgICAgbV9sYXllclRvUmVnaW9uTWFwLT5zd2FwKGxheWVyVG9S
ZWdpb25NYXApOwotCi0gICAgICAgIGlmICghbV9yZWdpb25Ub0xheWVyTGlzdE1hcCkKLSAgICAg
ICAgICAgIG1fcmVnaW9uVG9MYXllckxpc3RNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lvblRv
TGF5ZXJMaXN0TWFwPigpOwotICAgICAgICBtX3JlZ2lvblRvTGF5ZXJMaXN0TWFwLT5zd2FwKHJl
Z2lvblRvTGF5ZXJMaXN0TWFwKTsKLSAgICB9Ci0KLSAgICBtX2xheWVyc1RvUmVnaW9uTWFwcGlu
Z3NEaXJ0eSA9IGZhbHNlOwotCi0gICAgcmV0dXJuIG5lZWRzTGF5ZXJVcGRhdGU7Ci19Ci0KLWJv
b2wgUmVuZGVyRmxvd1RocmVhZDo6Y29sbGVjdHNHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygp
IGNvbnN0Ci17Ci0gICAgLy8gV2Ugb25seSBuZWVkIHRvIG1hcCBsYXllcnMgdG8gcmVnaW9ucyBm
b3IgbmFtZWQgZmxvdyB0aHJlYWRzLgotICAgIC8vIE11bHRpLWNvbHVtbiB0aHJlYWRzIGFyZSBk
aXNwbGF5ZWQgb24gdG9wIG9mIHRoZSByZWdpb25zIGFuZCBkbyBub3QgcmVxdWlyZQotICAgIC8v
IGRpc3RyaWJ1dGluZyB0aGUgbGF5ZXJzLgotCi0gICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lk
IFJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpCkBAIC00MjUsNyArMjc1LDcg
QEAgTGF5b3V0UG9pbnQgUmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQbwogICAgIFJlbmRlclJl
Z2lvbiogc3RhcnRSZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG9iakNvbnRhaW5pbmdCbG9j
aywgcmVmZXJlbmNlUG9pbnQueSgpKTsKICAgICBpZiAoc3RhcnRSZWdpb24pIHsKICAgICAgICAg
Ly8gVGFrZSBpbnRvIGFjY291bnQgdGhlIG9mZnNldCBjb29yZGluYXRlcyBvZiB0aGUgcmVnaW9u
LgotICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogc3RhcnRSZWdpb25Cb3ggPSBpczxSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudD4oKnN0YXJ0UmVnaW9uKSA/IGRvd25jYXN0PFJlbmRlckJveE1v
ZGVsT2JqZWN0PihzdGFydFJlZ2lvbi0+cGFyZW50KCkpIDogc3RhcnRSZWdpb247CisgICAgICAg
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBzdGFydFJlZ2lvbkJveCA9IHN0YXJ0UmVnaW9uOwogICAg
ICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3Vyck9iamVjdCA9IHN0YXJ0UmVnaW9uQm94Owog
ICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3Vyck9mZnNldFBhcmVudDsKICAgICAgICAg
d2hpbGUgKChjdXJyT2Zmc2V0UGFyZW50ID0gY3Vyck9iamVjdC0+b2Zmc2V0UGFyZW50KCkpKSB7
CkBAIC03MTMsOCArNTYzLDYgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpjbGVhclJlbmRlckJv
eFJlZwogICAgICAgICAgICAgaW5zaWRlTmV3UmVnaW9uUmFuZ2UgPSB0cnVlOwogCiAgICAgICAg
IGlmICghKGluc2lkZU9sZFJlZ2lvblJhbmdlICYmIGluc2lkZU5ld1JlZ2lvblJhbmdlKSkgewot
ICAgICAgICAgICAgaWYgKGlzPFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKSkKLSAg
ICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbiku
Y2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKGJveCk7CiAgICAgICAgICAgICBpZiAocmVnaW9uLT5y
ZW5kZXJCb3hSZWdpb25JbmZvKCZib3gpKQogICAgICAgICAgICAgICAgIHJlZ2lvbi0+cmVtb3Zl
UmVuZGVyQm94UmVnaW9uSW5mbyhib3gpOwogICAgICAgICB9CkBAIC05MTIsMTkgKzc2MCw2IEBA
IGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6b2JqZWN0SW5GbG93UmVnaW8KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLSNpZm5kZWYgTkRFQlVHCi1ib29sIFJlbmRlckZsb3dUaHJlYWQ6OmlzQXV0b0xv
Z2ljYWxIZWlnaHRSZWdpb25zQ291bnRDb25zaXN0ZW50KCkgY29uc3QKLXsKLSAgICB1bnNpZ25l
ZCBhdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMgPSAwOwotICAgIGZvciAoY29uc3QgYXV0byYgcmVn
aW9uIDogbV9yZWdpb25MaXN0KSB7Ci0gICAgICAgIGlmIChyZWdpb24tPmhhc0F1dG9Mb2dpY2Fs
SGVpZ2h0KCkpCi0gICAgICAgICAgICBhdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMrKzsKLSAgICB9
Ci0KLSAgICByZXR1cm4gYXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zID09IG1fYXV0b0xvZ2ljYWxI
ZWlnaHRSZWdpb25zQ291bnQ7Ci19Ci0jZW5kaWYKLQogI2lmICFBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTl9ESVNBQkxFRAogYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpjaGVja0xpbmVz
Q29uc2lzdGVuY3koY29uc3QgUmVuZGVyQmxvY2tGbG93JiByZW1vdmVkQmxvY2spIGNvbnN0CiB7
CkBAIC05NjQsMzggKzc5OSw2IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6d2lsbEJlRGVzdHJv
eWVkKCkKICAgICBSZW5kZXJCbG9ja0Zsb3c6OndpbGxCZURlc3Ryb3llZCgpOwogfQogCi0vLyBE
dXJpbmcgdGhlIG1lYXN1cmUgY29udGVudCBsYXlvdXQgcGhhc2Ugb2YgdGhlIG5hbWVkIGZsb3cg
dGhlIHJlZ2lvbnMgYXJlIGluaXRpYWxpemVkIHdpdGggYSBoZWlnaHQgZXF1YWwgdG8gdGhlaXIg
bWF4LWhlaWdodC4KLS8vIFRoaXMgd2F5IHVuZm9yY2VkIGJyZWFrcyBhcmUgYXV0b21hdGljYWxs
eSBwbGFjZWQgd2hlbiBhIHJlZ2lvbiBpcyBmdWxsIGFuZCB0aGUgY29udGVudCBoZWlnaHQvcG9z
aXRpb24gY29ycmVjdGx5IGVzdGltYXRlZC4KLS8vIEFsc28sIHRoZSByZWdpb24gd2hlcmUgYSBm
b3JjZWQgYnJlYWsgZmFsbHMgaXMgZXhhY3RseSB0aGUgcmVnaW9uIGZvdW5kIGF0IHRoZSBmb3Jj
ZWQgYnJlYWsgb2Zmc2V0IGluc2lkZSB0aGUgZmxvdyBjb250ZW50Lgotdm9pZCBSZW5kZXJGbG93
VGhyZWFkOjppbml0aWFsaXplUmVnaW9uc0NvbXB1dGVkQXV0b0hlaWdodChSZW5kZXJSZWdpb24q
IHN0YXJ0UmVnaW9uKQotewotICAgIEFTU0VSVChpbk1lYXN1cmVDb250ZW50TGF5b3V0UGhhc2Uo
KSk7Ci0gICAgaWYgKCFoYXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZm9yIChhdXRvIHJlZ2lvbkl0ZXIgPSBzdGFydFJlZ2lvbiA/IG1fcmVnaW9u
TGlzdC5maW5kKHN0YXJ0UmVnaW9uKSA6IG1fcmVnaW9uTGlzdC5iZWdpbigpLCBlbmQgPSBtX3Jl
Z2lvbkxpc3QuZW5kKCk7IHJlZ2lvbkl0ZXIgIT0gZW5kOyArK3JlZ2lvbkl0ZXIpIHsKLSAgICAg
ICAgUmVuZGVyUmVnaW9uJiByZWdpb24gPSAqKnJlZ2lvbkl0ZXI7Ci0gICAgICAgIGlmIChyZWdp
b24uaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkgewotICAgICAgICAgICAgYXV0byYgbmFtZWRGbG93
RnJhZ21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4ocmVnaW9uKTsKLSAg
ICAgICAgICAgIG5hbWVkRmxvd0ZyYWdtZW50LnNldENvbXB1dGVkQXV0b0hlaWdodChuYW1lZEZs
b3dGcmFnbWVudC5tYXhQYWdlTG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBSZW5kZXJGbG93VGhyZWFkOjptYXJrQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zRm9y
TGF5b3V0KCkKLXsKLSAgICBBU1NFUlQoaGFzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCkpOwot
Ci0gICAgZm9yIChhdXRvJiByZWdpb24gOiBtX3JlZ2lvbkxpc3QpIHsKLSAgICAgICAgaWYgKCFy
ZWdpb24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBmaW5kIGEgd2F5IHRvIGF2b2lkIG1hcmtpbmcg
YWxsIHRoZSByZWdpb25zIGFuY2VzdG9ycyBmb3IgbGF5b3V0Ci0gICAgICAgIC8vIGFzIHdlIGFy
ZSBhbHJlYWR5IGluc2lkZSBsYXlvdXQuCi0gICAgICAgIHJlZ2lvbi0+c2V0TmVlZHNMYXlvdXQo
KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6bWFya1JlZ2lvbnNGb3JPdmVy
Zmxvd0xheW91dElmTmVlZGVkKCkKIHsKICAgICBpZiAoIWhhc1JlZ2lvbnMoKSkKQEAgLTEwMDcs
MTYgKzgxMCwxMiBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6Om1hcmtSZWdpb25zRm9yT3ZlCiAK
IHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6dXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVj
dChjb25zdCBSZW5kZXJSZWdpb24qIGxhc3RSZWdpb25XaXRoQ29udGVudCkKIHsKLSAgICBBU1NF
UlQoIWxhc3RSZWdpb25XaXRoQ29udGVudCB8fCAoaW5NZWFzdXJlQ29udGVudExheW91dFBoYXNl
KCkgJiYgaGFzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCkpKTsKKyAgICBBU1NFUlQoIWxhc3RS
ZWdpb25XaXRoQ29udGVudCk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMDsKICAg
ICBib29sIGVtcHR5UmVnaW9uc1NlZ21lbnQgPSBmYWxzZTsKICAgICAvLyBGSVhNRTogT3B0aW1p
emUgbm90IHRvIGNsZWFyIHRoZSBpbnRlcnZhbCBhbGwgdGhlIHRpbWUuIFRoaXMgaW1wbGllcyBt
YW51YWxseSBtYW5hZ2luZyB0aGUgdHJlZSBub2RlcyBsaWZlY3ljbGUuCiAgICAgbV9yZWdpb25J
bnRlcnZhbFRyZWUuY2xlYXIoKTsKICAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlz
dCkgewotICAgICAgICAvLyBJZiB3ZSBmaW5kIGFuIGVtcHR5IGF1dG8taGVpZ2h0IHJlZ2lvbiwg
Y2xlYXIgdGhlIGNvbXB1dGVkQXV0b0hlaWdodCB2YWx1ZS4KLSAgICAgICAgaWYgKGVtcHR5UmVn
aW9uc1NlZ21lbnQgJiYgcmVnaW9uLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKQotICAgICAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZWdpb24pLmNsZWFyQ29tcHV0
ZWRBdXRvSGVpZ2h0KCk7Ci0KICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Mb2dpY2FsV2lkdGgg
PSByZWdpb24tPnBhZ2VMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25M
b2dpY2FsSGVpZ2h0ID0gc3RkOjptaW48TGF5b3V0VW5pdD4oUmVuZGVyRmxvd1RocmVhZDo6bWF4
TG9naWNhbEhlaWdodCgpIC0gbG9naWNhbEhlaWdodCwgcmVnaW9uLT5sb2dpY2FsSGVpZ2h0T2ZB
bGxGbG93VGhyZWFkQ29udGVudCgpKTsKIApAQCAtMTAzOSw3ICs4MzgsNyBAQCB2b2lkIFJlbmRl
ckZsb3dUaHJlYWQ6OnVwZGF0ZVJlZ2lvbnNGbG93CiAvLyBFdmVuIGlmIHdlIHJlcXVpcmUgdGhl
IGJyZWFrIHRvIG9jY3VyIGF0IG9mZnNldEJyZWFrSW5GbG93VGhyZWFkLCBiZWNhdXNlIHJlZ2lv
bnMgbWF5IGhhdmUgbWluL21heC1oZWlnaHQgdmFsdWVzLAogLy8gaXQgaXMgcG9zc2libGUgdGhh
dCB0aGUgYnJlYWsgd2lsbCBvY2N1ciBhdCBhIGRpZmZlcmVudCBvZmZzZXQgdGhhbiB0aGUgb3Jp
Z2luYWwgb25lIHJlcXVpcmVkLgogLy8gb2Zmc2V0QnJlYWtBZGp1c3RtZW50IG1lYXN1cmVzIHRo
ZSBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgcmVxdWVzdGVkIGJyZWFrIG9mZnNldCBhbmQgdGhlIGN1
cnJlbnQgYnJlYWsgb2Zmc2V0LgotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjphZGRGb3JjZWRSZWdp
b25CcmVhayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIExheW91dFVuaXQgb2Zmc2V0QnJlYWtJ
bkZsb3dUaHJlYWQsIFJlbmRlckJveCogYnJlYWtDaGlsZCwgYm9vbCBpc0JlZm9yZSwgTGF5b3V0
VW5pdCogb2Zmc2V0QnJlYWtBZGp1c3RtZW50KQorYm9vbCBSZW5kZXJGbG93VGhyZWFkOjphZGRG
b3JjZWRSZWdpb25CcmVhayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIExheW91dFVuaXQgb2Zm
c2V0QnJlYWtJbkZsb3dUaHJlYWQsIFJlbmRlckJveCosIGJvb2wsIExheW91dFVuaXQqIG9mZnNl
dEJyZWFrQWRqdXN0bWVudCkKIHsKICAgICAvLyBXZSB0YWtlIGJyZWFrcyBpbnRvIGFjY291bnQg
Zm9yIGhlaWdodCBjb21wdXRhdGlvbiBmb3IgYXV0byBsb2dpY2FsIGhlaWdodCByZWdpb25zCiAg
ICAgLy8gb25seSBpbiB0aGUgbGF5b3V0IHBoYXNlIGluIHdoaWNoIHdlIGxheSBvdXQgdGhlIGZs
b3dzIHRocmVhZHMgdW5jb25zdHJhaW5lZApAQCAtMTA0OCwyMSArODQ3LDkgQEAgYm9vbCBSZW5k
ZXJGbG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcgogICAgIGlmICghaW5NZWFzdXJlQ29udGVu
dExheW91dFBoYXNlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIEJyZWFrcyBj
YW4gY29tZSBiZWZvcmUgb3IgYWZ0ZXIgc29tZSBvYmplY3RzLiBXZSBuZWVkIHRvIHRyYWNrIHRo
ZXNlIG9iamVjdHMsIHNvIHRoYXQgaWYgd2UgZ2V0Ci0gICAgLy8gbXVsdGlwbGUgYnJlYWtzIGZv
ciB0aGUgc2FtZSBvYmplY3QgKGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgbXVsdGlwbGUgbGF5b3V0
cyBvbiB0aGUgc2FtZSBvYmplY3QpLAotICAgIC8vIHdlIG5lZWQgdG8gaW52YWxpZGF0ZSBldmVy
eSBvdGhlciByZWdpb24gYWZ0ZXIgdGhlIG9sZCBvbmUgYW5kIHN0YXJ0IGNvbXB1dGluZyBmcm9t
IGZyZXNoLgotICAgIFJlbmRlckJveFRvUmVnaW9uTWFwJiBtYXBUb1VzZSA9IGlzQmVmb3JlID8g
bV9icmVha0JlZm9yZVRvUmVnaW9uTWFwIDogbV9icmVha0FmdGVyVG9SZWdpb25NYXA7Ci0gICAg
YXV0byBpdGVyID0gbWFwVG9Vc2UuZmluZChicmVha0NoaWxkKTsKLSAgICBpZiAoaXRlciAhPSBt
YXBUb1VzZS5lbmQoKSkgewotICAgICAgICBhdXRvIHJlZ2lvbkl0ZXIgPSBtX3JlZ2lvbkxpc3Qu
ZmluZChpdGVyLT52YWx1ZSk7Ci0gICAgICAgIEFTU0VSVChyZWdpb25JdGVyICE9IG1fcmVnaW9u
TGlzdC5lbmQoKSk7Ci0gICAgICAgIEFTU0VSVCgoKnJlZ2lvbkl0ZXIpLT5oYXNBdXRvTG9naWNh
bEhlaWdodCgpKTsKLSAgICAgICAgaW5pdGlhbGl6ZVJlZ2lvbnNDb21wdXRlZEF1dG9IZWlnaHQo
KnJlZ2lvbkl0ZXIpOwotCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSByZWdpb25z
IGZsb3cgdGhyZWFkIHBvcnRpb24gcmVjdCBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byBwcm9jZXNz
Ci0gICAgICAgIC8vIGEgYnJlYWsgb24gdGhlc2UgcmVnaW9ucy4KLSAgICAgICAgdXBkYXRlUmVn
aW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOwotICAgIH0KKyAgICAvLyBXZSBuZWVkIHRvIHVw
ZGF0ZSB0aGUgcmVnaW9ucyBmbG93IHRocmVhZCBwb3J0aW9uIHJlY3QgYmVjYXVzZSB3ZSBhcmUg
Z29pbmcgdG8gcHJvY2VzcworICAgIC8vIGEgYnJlYWsgb24gdGhlc2UgcmVnaW9ucy4KKyAgICB1
cGRhdGVSZWdpb25zRmxvd1RocmVhZFBvcnRpb25SZWN0KCk7CiAKICAgICAvLyBTaW11bGF0ZSBh
IHJlZ2lvbiBicmVhayBhdCBvZmZzZXRCcmVha0luRmxvd1RocmVhZC4gSWYgaXQgcG9pbnRzIGlu
c2lkZSBhbiBhdXRvIGxvZ2ljYWwgaGVpZ2h0IHJlZ2lvbiwKICAgICAvLyB0aGVuIGl0IGRldGVy
bWluZXMgdGhlIHJlZ2lvbiBjb21wdXRlZCBhdXRvIGhlaWdodC4KQEAgLTEwNzAsNTggKzg1Nywx
NCBAQCBib29sIFJlbmRlckZsb3dUaHJlYWQ6OmFkZEZvcmNlZFJlZ2lvbkJyCiAgICAgaWYgKCFy
ZWdpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgbGFzdEJyZWFrQWZ0ZXJD
b250ZW50ID0gYnJlYWtDaGlsZCA9PSB0aGlzOwotICAgIGJvb2wgaGFzQ29tcHV0ZWRBdXRvSGVp
Z2h0ID0gZmFsc2U7Ci0KICAgICBMYXlvdXRVbml0IGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dU
aHJlYWQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcmVnaW9uLT5mbG93VGhyZWFkUG9y
dGlvblJlY3QoKS55KCkgOiByZWdpb24tPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLngoKTsKLSAg
ICBMYXlvdXRVbml0IG9mZnNldEJyZWFrSW5DdXJyZW50UmVnaW9uID0gb2Zmc2V0QnJlYWtJbkZs
b3dUaHJlYWQgLSBjdXJyZW50UmVnaW9uT2Zmc2V0SW5GbG93VGhyZWFkOwotCi0gICAgaWYgKHJl
Z2lvbi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkgewotICAgICAgICBhdXRvJiBuYW1lZEZsb3dG
cmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKTsKLQot
ICAgICAgICAvLyBBIGZvcmNlZCBicmVhayBjYW4gYXBwZWFyIG9ubHkgaW4gYW4gYXV0by1oZWln
aHQgcmVnaW9uIHRoYXQgZGlkbid0IGhhdmUgYSBmb3JjZWQgYnJlYWsgYmVmb3JlLgotICAgICAg
ICAvLyBUaGlzIEFTU0VSVCBpcyBhIGdvb2QtZW5vdWdoIGhldXJpc3RpYyB0byB2ZXJpZnkgdGhl
IGFib3ZlIGNvbmRpdGlvbi4KLSAgICAgICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50Lm1heFBh
Z2VMb2dpY2FsSGVpZ2h0KCkgPT0gbmFtZWRGbG93RnJhZ21lbnQuY29tcHV0ZWRBdXRvSGVpZ2h0
KCkpOwotCi0gICAgICAgIG1hcFRvVXNlLnNldChicmVha0NoaWxkLCAmbmFtZWRGbG93RnJhZ21l
bnQpOwotCi0gICAgICAgIGhhc0NvbXB1dGVkQXV0b0hlaWdodCA9IHRydWU7CiAKLSAgICAgICAg
Ly8gQ29tcHV0ZSB0aGUgcmVnaW9uIGhlaWdodCBwcmV0ZW5kaW5nIHRoYXQgdGhlIG9mZnNldEJy
ZWFrSW5DdXJyZW50UmVnaW9uIGlzIHRoZSBsb2dpY2FsSGVpZ2h0IGZvciB0aGUgYXV0by1oZWln
aHQgcmVnaW9uLgotICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCA9
IG5hbWVkRmxvd0ZyYWdtZW50LmNvbnN0cmFpbkNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0QnlNaW5N
YXgob2Zmc2V0QnJlYWtJbkN1cnJlbnRSZWdpb24sIHN0ZDo6bnVsbG9wdCk7Ci0KLSAgICAgICAg
Ly8gVGhlIG5ldyBoZWlnaHQgb2YgdGhpcyByZWdpb24gbmVlZHMgdG8gYmUgc21hbGxlciB0aGFu
IHRoZSBpbml0aWFsIHZhbHVlLCB0aGUgbWF4IGhlaWdodC4gQSBmb3JjZWQgYnJlYWsgaXMgdGhl
IG9ubHkgd2F5IHRvIGNoYW5nZSB0aGUgaW5pdGlhbAotICAgICAgICAvLyBoZWlnaHQgb2YgYW4g
YXV0by1oZWlnaHQgcmVnaW9uIGJlc2lkZXMgY29udGVudCBlbmRpbmcuCi0gICAgICAgIEFTU0VS
VChyZWdpb25Db21wdXRlZEF1dG9IZWlnaHQgPD0gbmFtZWRGbG93RnJhZ21lbnQubWF4UGFnZUxv
Z2ljYWxIZWlnaHQoKSk7Ci0KLSAgICAgICAgbmFtZWRGbG93RnJhZ21lbnQuc2V0Q29tcHV0ZWRB
dXRvSGVpZ2h0KHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCk7Ci0KLSAgICAgICAgY3VycmVudFJl
Z2lvbk9mZnNldEluRmxvd1RocmVhZCArPSByZWdpb25Db21wdXRlZEF1dG9IZWlnaHQ7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dUaHJlYWQgKz0gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IHJlZ2lvbi0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkuaGVp
Z2h0KCkgOiByZWdpb24tPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLndpZHRoKCk7Ci0KLSAgICAv
LyBJZiB0aGUgYnJlYWsgd2FzIGZvdW5kIGluc2lkZSBhbiBhdXRvLWhlaWdodCByZWdpb24gaXRz
IHNpemUgY2hhbmdlZCBzbyB3ZSBuZWVkIHRvIHJlY29tcHV0ZSB0aGUgZmxvdyB0aHJlYWQgcG9y
dGlvbiByZWN0YW5nbGVzLgotICAgIC8vIEFsc28sIGlmIHRoaXMgaXMgdGhlIGxhc3QgYnJlYWsg
YWZ0ZXIgdGhlIGNvbnRlbnQgd2UgbmVlZCB0byBjbGVhciB0aGUgY29tcHV0ZWRBdXRvSGVpZ2h0
IHZhbHVlIG9uIHRoZSBsYXN0IGVtcHR5IHJlZ2lvbnMuCi0gICAgaWYgKGhhc0F1dG9Mb2dpY2Fs
SGVpZ2h0UmVnaW9ucygpICYmIGxhc3RCcmVha0FmdGVyQ29udGVudCkKLSAgICAgICAgdXBkYXRl
UmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdChyZWdpb24pOwotICAgIGVsc2UgaWYgKGhhc0Nv
bXB1dGVkQXV0b0hlaWdodCkKLSAgICAgICAgdXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9u
UmVjdCgpOworICAgIGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dUaHJlYWQgKz0gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IHJlZ2lvbi0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkuaGVpZ2h0
KCkgOiByZWdpb24tPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLndpZHRoKCk7CiAKICAgICBpZiAo
b2Zmc2V0QnJlYWtBZGp1c3RtZW50KQogICAgICAgICAqb2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0g
c3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgY3VycmVudFJlZ2lvbk9mZnNldEluRmxvd1RocmVhZCAt
IG9mZnNldEJyZWFrSW5GbG93VGhyZWFkKTsKIAotICAgIHJldHVybiBoYXNDb21wdXRlZEF1dG9I
ZWlnaHQ7Ci19Ci0KLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6aW5jcmVtZW50QXV0b0xvZ2ljYWxI
ZWlnaHRSZWdpb25zKCkKLXsKLSAgICArK21fYXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnQ7
Ci19Ci0KLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6ZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRS
ZWdpb25zKCkKLXsKLSAgICBBU1NFUlQobV9hdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudCA+
IDApOwotICAgIC0tbV9hdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudDsKKyAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y29sbGVjdExheWVyRnJhZ21lbnRz
KExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJC
b3VuZGluZ0JveCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCShyZXZpc2lvbiAyMjIyNjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNywxNSArMzcsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXJy
ZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcjsKIGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7Ci1jbGFz
cyBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVu
ZGVyUmVnaW9uOwogY2xhc3MgUm9vdElubGluZUJveDsKIAogdHlwZWRlZiBMaXN0SGFzaFNldDxS
ZW5kZXJSZWdpb24qPiBSZW5kZXJSZWdpb25MaXN0OwogdHlwZWRlZiBWZWN0b3I8UmVuZGVyTGF5
ZXIqPiBSZW5kZXJMYXllckxpc3Q7Ci10eXBlZGVmIEhhc2hNYXA8UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQqLCBSZW5kZXJMYXllckxpc3Q+IFJlZ2lvblRvTGF5ZXJMaXN0TWFwOwotdHlwZWRlZiBI
YXNoTWFwPFJlbmRlckxheWVyKiwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqPiBMYXllclRvUmVn
aW9uTWFwOwogdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJvb3RJbmxpbmVCb3gqLCBSZW5kZXJSZWdp
b24qPiBDb250YWluaW5nUmVnaW9uTWFwOwogCiAvLyBSZW5kZXJGbG93VGhyZWFkIGlzIHVzZWQg
dG8gY29sbGVjdCBhbGwgdGhlIHJlbmRlciBvYmplY3RzIHRoYXQgcGFydGljaXBhdGUgaW4gYQpA
QCAtMTQyLDcgKzEzOSw2IEBAIHB1YmxpYzoKICAgICAvLyBDaGVjayBpZiB0aGUgb2JqZWN0IHNo
b3VsZCBiZSBwYWludGVkIGluIHRoaXMgcmVnaW9uIGFuZCBpZiB0aGUgcmVnaW9uIGlzIHBhcnQg
b2YgdGhpcyBmbG93IHRocmVhZC4KICAgICBib29sIG9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93
UmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclJlZ2lvbiopIGNvbnN0Owog
Ci0gICAgdm9pZCBtYXJrQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zRm9yTGF5b3V0KCk7CiAgICAg
dm9pZCBtYXJrUmVnaW9uc0Zvck92ZXJmbG93TGF5b3V0SWZOZWVkZWQoKTsKIAogICAgIHZpcnR1
YWwgYm9vbCBhZGRGb3JjZWRSZWdpb25CcmVhayhjb25zdCBSZW5kZXJCbG9jayosIExheW91dFVu
aXQsIFJlbmRlckJveCogYnJlYWtDaGlsZCwgYm9vbCBpc0JlZm9yZSwgTGF5b3V0VW5pdCogb2Zm
c2V0QnJlYWtBZGp1c3RtZW50ID0gMCk7CkBAIC0xNTEsMTQgKzE0Nyw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNQYWdlTG9naWNhbEhlaWdodEtub3duKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIGJvb2wgcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZDsgfQogCi0gICAgYm9vbCBoYXNBdXRvTG9naWNhbEhl
aWdodFJlZ2lvbnMoKSBjb25zdCB7IEFTU0VSVChpc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0Nv
dW50Q29uc2lzdGVudCgpKTsgcmV0dXJuIG1fYXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnQ7
IH0KLSAgICB2b2lkIGluY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygpOwotICAgIHZv
aWQgZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCk7Ci0KLSNpZm5kZWYgTkRFQlVH
Ci0gICAgYm9vbCBpc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lzdGVudCgpIGNv
bnN0OwotI2VuZGlmCi0KICAgICB2b2lkIGNvbGxlY3RMYXllckZyYWdtZW50cyhMYXllckZyYWdt
ZW50cyYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJl
Y3QmIGRpcnR5UmVjdCk7CiAgICAgTGF5b3V0UmVjdCBmcmFnbWVudHNCb3VuZGluZ0JveChjb25z
dCBMYXlvdXRSZWN0JiBsYXllckJvdW5kaW5nQm94KTsKIApAQCAtMTc4LDIzICsxNjYsNiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBuZWVkc1R3b1BoYXNlc0xheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1f
bmVlZHNUd29QaGFzZXNMYXlvdXQ7IH0KICAgICB2b2lkIGNsZWFyTmVlZHNUd29QaGFzZXNMYXlv
dXQoKSB7IG1fbmVlZHNUd29QaGFzZXNMYXlvdXQgPSBmYWxzZTsgfQogCi0gICAgLy8gV2hldGhl
ciBhbnkgb2YgdGhlIHJlZ2lvbnMgaGFzIGEgY29tcG9zaXRpbmcgZGVzY2VuZGFudC4KLSAgICBi
b29sIGhhc0NvbXBvc2l0aW5nUmVnaW9uRGVzY2VuZGFudCgpIGNvbnN0OwotCi0gICAgdm9pZCBz
ZXROZWVkc0xheWVyVG9SZWdpb25NYXBwaW5nc1VwZGF0ZSgpIHsgbV9sYXllcnNUb1JlZ2lvbk1h
cHBpbmdzRGlydHkgPSB0cnVlOyB9Ci0gICAgdm9pZCB1cGRhdGVBbGxMYXllclRvUmVnaW9uTWFw
cGluZ3NJZk5lZWRlZCgpCi0gICAgewotICAgICAgICBpZiAobV9sYXllcnNUb1JlZ2lvbk1hcHBp
bmdzRGlydHkpCi0gICAgICAgICAgICB1cGRhdGVBbGxMYXllclRvUmVnaW9uTWFwcGluZ3MoKTsK
LSAgICB9Ci0KLSAgICBjb25zdCBSZW5kZXJMYXllckxpc3QqIGdldExheWVyTGlzdEZvclJlZ2lv
bihSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCopIGNvbnN0OwotCi0gICAgUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQqIHJlZ2lvbkZvckNvbXBvc2l0ZWRMYXllcihSZW5kZXJMYXllciYpIGNvbnN0OyAv
LyBCeSBtZWFucyBvZiBnZXRSZWdpb25SYW5nZUZvckJveCBvciByZWdpb25BdEJsb2NrT2Zmc2V0
LgotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBjYWNoZWRSZWdpb25Gb3JDb21wb3NpdGVk
TGF5ZXIoUmVuZGVyTGF5ZXImKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBjb2xsZWN0c0dy
YXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkgY29uc3Q7Ci0KICAgICB2b2lkIHB1c2hGbG93VGhy
ZWFkTGF5b3V0U3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0Jik7CiAgICAgdm9pZCBwb3BGbG93VGhy
ZWFkTGF5b3V0U3RhdGUoKTsKICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFJlZ2lvbihjb25zdCBSZW5kZXJCbG9jayopIGNvbnN0OwpAQCAtMjU1LDE0ICsyMjYsNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB1cGRhdGVSZWdpb25zRmxvd1RocmVhZFBvcnRpb25SZWN0
KGNvbnN0IFJlbmRlclJlZ2lvbiogPSBudWxscHRyKTsKICAgICBib29sIHNob3VsZFJlcGFpbnQo
Y29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCi0gICAgYm9vbCB1cGRhdGVBbGxMYXllclRvUmVn
aW9uTWFwcGluZ3MoKTsKLQotICAgIC8vIFRyaWdnZXJzIGEgbGF5ZXJzJyB1cGRhdGUgaWYgYSBs
YXllciBoYXMgbW92ZWQgZnJvbSBhIHJlZ2lvbiB0byBhbm90aGVyIHNpbmNlIHRoZSBsYXN0IHVw
ZGF0ZS4KLSAgICB2b2lkIHVwZGF0ZUxheWVyVG9SZWdpb25NYXBwaW5ncyhSZW5kZXJMYXllciYs
IExheWVyVG9SZWdpb25NYXAmLCBSZWdpb25Ub0xheWVyTGlzdE1hcCYsIGJvb2wmIG5lZWRzTGF5
ZXJVcGRhdGUpOwotICAgIHZvaWQgdXBkYXRlUmVnaW9uRm9yUmVuZGVyTGF5ZXIoUmVuZGVyTGF5
ZXIqLCBMYXllclRvUmVnaW9uTWFwJiwgUmVnaW9uVG9MYXllckxpc3RNYXAmLCBib29sJiBuZWVk
c0xheWVyVXBkYXRlKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZVJlZ2lvbnNDb21wdXRlZEF1dG9I
ZWlnaHQoUmVuZGVyUmVnaW9uKiA9IG51bGxwdHIpOwotCiAgICAgaW5saW5lIGJvb2wgaGFzQ2Fj
aGVkT2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRlckJveCopIGNv
bnN0OwogICAgIGlubGluZSBMYXlvdXRVbml0IGNhY2hlZE9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFJlZ2lvbihjb25zdCBSZW5kZXJCb3gqKSBjb25zdDsKICAgICBpbmxpbmUgdm9pZCBzZXRP
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24oY29uc3QgUmVuZGVyQm94KiwgTGF5b3V0
VW5pdCk7CkBAIC0zMzAsMTIgKzI5Myw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgUmVuZGVyUmVn
aW9uKiBtX3Jlc3VsdDsKICAgICB9OwogCi0gICAgLy8gTWFwIGEgbGF5ZXIgdG8gdGhlIHJlZ2lv
biBpbiB3aGljaCB0aGUgbGF5ZXIgaXMgcGFpbnRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5
ZXJUb1JlZ2lvbk1hcD4gbV9sYXllclRvUmVnaW9uTWFwOwotCi0gICAgLy8gTWFwIGEgcmVnaW9u
IHRvIHRoZSBsaXN0IG9mIGxheWVycyB0aGF0IHBhaW50IGluIHRoYXQgcmVnaW9uLgotICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZWdpb25Ub0xheWVyTGlzdE1hcD4gbV9yZWdpb25Ub0xheWVyTGlzdE1h
cDsKLQogICAgIC8vIE1hcCBhIGxpbmUgdG8gaXRzIGNvbnRhaW5pbmcgcmVnaW9uLgogICAgIHN0
ZDo6dW5pcXVlX3B0cjxDb250YWluaW5nUmVnaW9uTWFwPiBtX2xpbmVUb1JlZ2lvbk1hcDsKIApA
QCAtMzU0LDggKzMxMSw2IEBAIHByb3RlY3RlZDoKICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3Qg
UmVuZGVyQm94KiwgTGF5b3V0VW5pdD4gUmVuZGVyQm94VG9PZmZzZXRNYXA7CiAgICAgUmVuZGVy
Qm94VG9PZmZzZXRNYXAgbV9ib3hlc1RvT2Zmc2V0TWFwOwogCi0gICAgdW5zaWduZWQgbV9hdXRv
TG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudDsKLQogICAgIFJlZ2lvbkludGVydmFsVHJlZSBtX3Jl
Z2lvbkludGVydmFsVHJlZTsKIAogICAgIEN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyKiBt
X2N1cnJlbnRSZWdpb25NYWludGFpbmVyOwpAQCAtMzY2LDcgKzMyMSw2IEBAIHByb3RlY3RlZDoK
ICAgICBib29sIG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCA6IDE7CiAgICAgdW5zaWduZWQgbV9s
YXlvdXRQaGFzZSA6IDI7CiAgICAgYm9vbCBtX25lZWRzVHdvUGhhc2VzTGF5b3V0IDogMTsKLSAg
ICBib29sIG1fbGF5ZXJzVG9SZWdpb25NYXBwaW5nc0RpcnR5IDogMTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkocmV2aXNpb24gMjIyMjYzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNiBAQAogI2luY2x1ZGUgIlJl
bmRlckxheWVyRmlsdGVySW5mby5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNs
dWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1ZGUgIlJl
bmRlclJlcGxpY2EuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKQEAg
LTUyNSwyNyArNTI0LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KFIKICAgICAgICAgLy8gYXMgdGhlIHZhbHVlIG5vdCB1c2luZyB0aGUgY2FjaGVkIG9mZnNldCwg
YnV0IHdlIGNhbid0IGR1ZSB0byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzcwNDgKICAgICAgICAgaWYgKChmbGFncyAmIENoZWNrRm9yUmVwYWludCkgJiYgaGFzUmVw
YWludExheW91dFJlY3RzKSB7CiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKCkudmlldygpLnBy
aW50aW5nKCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGRpZFJlcGFpbnQgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBpZiAobV9yZXBhaW50U3RhdHVzICYgTmVlZHNGdWxsUmVwYWludCkgewog
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFkUmVwYWludExheW91dFJlY3RzKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENv
bnRhaW5lciwgb2xkUmVjdHMubV9yZXBhaW50UmVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghaGFkUmVwYWludExheW91dFJlY3RzIHx8IG5ld1JlY3RzLm1fcmVwYWludFJlY3QgIT0gb2xk
UmVjdHMubV9yZXBhaW50UmVjdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWhhZFJlcGFp
bnRMYXlvdXRSZWN0cyB8fCBuZXdSZWN0cy5tX3JlcGFpbnRSZWN0ICE9IG9sZFJlY3RzLm1fcmVw
YWludFJlY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2lu
Z0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBuZXdSZWN0cy5tX3JlcGFpbnRSZWN0KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRpZFJlcGFpbnQgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRSZXBhaW50QWZ0ZXJMYXlv
dXQoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugd2lsbCBjb252ZXJ0IHRo
aXMgdG8ganVzdCB0YWtlIHRoZSBvbGQgYW5kIG5ldyBSZXBhaW50TGF5b3V0UmVjdHMgb25jZQog
ICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjaGFuZ2Ugb3RoZXIgY2FsbGVycyB0byB1c2UgUmVw
YWludExheW91dFJlY3RzLgogICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRB
ZnRlckxheW91dElmTmVlZGVkKHJlcGFpbnRDb250YWluZXIsIG9sZFJlY3RzLm1fcmVwYWludFJl
Y3QsIG9sZFJlY3RzLm1fb3V0bGluZUJveCwgJm5ld1JlY3RzLm1fcmVwYWludFJlY3QsICZuZXdS
ZWN0cy5tX291dGxpbmVCb3gpOwotICAgICAgICAgICAgICAgICAgICBkaWRSZXBhaW50ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoZGlkUmVwYWludCAm
JiByZW5kZXJlcigpLmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBqdXN0IHJlcGFpbnRlZCBhIHJlZ2lvbiwgd2UgbXVz
dCBhbHNvIHJlcGFpbnQgdGhlIGZsb3cgdGhyZWFkIHNpbmNlIGl0IGlzIHRoZSBvbmUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gZG9pbmcgdGhlIGFjdHVhbCBwYWludGluZyBvZiB0aGUgZmxvd2Vk
IGNvbnRlbnQuCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50JiBy
ZWdpb24gPSAqZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihyZW5kZXJlcigpKS5yZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVnaW9uLmlzVmFsaWQo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi5mbG93VGhyZWFkKCktPmxheWVyKCkt
PnJlcGFpbnRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMTY5MiwyNCArMTY3OSw2IEBAIGVudW0gVHJhbnNwYXJl
bmN5Q2xpcEJveE1vZGUgewogCiBzdGF0aWMgTGF5b3V0UmVjdCB0cmFuc3BhcmVuY3lDbGlwQm94
KGNvbnN0IFJlbmRlckxheWVyJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgVHJhbnNw
YXJlbmN5Q2xpcEJveEJlaGF2aW9yLCBUcmFuc3BhcmVuY3lDbGlwQm94TW9kZSwgUGFpbnRCZWhh
dmlvciA9IDApOwogCi1zdGF0aWMgdm9pZCBleHBhbmRDbGlwUmVjdEZvclJlZ2lvbkFuZFJlZmxl
Y3Rpb24oTGF5b3V0UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwKLSAgICBUcmFuc3BhcmVuY3lDbGlwQm94QmVoYXZp
b3IgdHJhbnNwYXJlbmN5QmVoYXZpb3IsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvcikKLXsK
LSAgICAvLyBJZiB0aGlzIGlzIGEgcmVnaW9uLCB0aGVuIHRoZSBwYWludGluZyBpcyBhY3R1YWxs
eSBkb25lIGJ5IGl0cyBmbG93IHRocmVhZCdzIGxheWVyLgotICAgIGlmIChsYXllci5yZW5kZXJl
cigpLmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSkgewotICAgICAgICBSZW5k
ZXJCbG9ja0Zsb3cmIHJlZ2lvbkNvbnRhaW5lciA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4o
bGF5ZXIucmVuZGVyZXIoKSk7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50JiByZWdp
b24gPSAqcmVnaW9uQ29udGFpbmVyLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0gICAgICAg
IFJlbmRlckxheWVyKiBmbG93VGhyZWFkTGF5ZXIgPSByZWdpb24uZmxvd1RocmVhZCgpLT5sYXll
cigpOwotICAgICAgICBpZiAoZmxvd1RocmVhZExheWVyICYmICghbGF5ZXIucmVmbGVjdGlvbigp
IHx8IGxheWVyLnJlZmxlY3Rpb25MYXllcigpICE9IGZsb3dUaHJlYWRMYXllcikpIHsKLSAgICAg
ICAgICAgIExheW91dFJlY3QgZmxvd1RocmVhZENsaXBSZWN0ID0gdHJhbnNwYXJlbmN5Q2xpcEJv
eCgqZmxvd1RocmVhZExheWVyLCByb290TGF5ZXIsIHRyYW5zcGFyZW5jeUJlaGF2aW9yLCBEZXNj
ZW5kYW50c09mVHJhbnNwYXJlbmN5Q2xpcEJveCwgcGFpbnRCZWhhdmlvcik7Ci0gICAgICAgICAg
ICBMYXlvdXRTaXplIG1vdmVPZmZzZXQgPSAocmVnaW9uQ29udGFpbmVyLmNvbnRlbnRCb3hSZWN0
KCkubG9jYXRpb24oKSArIGxheWVyLm9mZnNldEZyb21BbmNlc3RvcihmbG93VGhyZWFkTGF5ZXIp
KSAtIHJlZ2lvbi5mbG93VGhyZWFkUG9ydGlvblJlY3QoKS5sb2NhdGlvbigpOwotICAgICAgICAg
ICAgZmxvd1RocmVhZENsaXBSZWN0Lm1vdmUobW92ZU9mZnNldCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNsaXBSZWN0LnVuaXRlKGZsb3dUaHJlYWRDbGlwUmVjdCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KIHN0YXRpYyB2b2lkIGV4cGFuZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRS
ZWZsZWN0aW9uKExheW91dFJlY3QmIGNsaXBSZWN0LCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIs
IGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsCiAgICAgVHJhbnNwYXJlbmN5Q2xpcEJveEJl
aGF2aW9yIHRyYW5zcGFyZW5jeUJlaGF2aW9yLCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3Ip
CiB7CkBAIC0xNzI0LDggKzE2OTMsNiBAQCBzdGF0aWMgdm9pZCBleHBhbmRDbGlwUmVjdEZvckRl
c2NlbmRhbnRzCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBleHBhbmRDbGlwUmVjdEZvclJlZ2lv
bkFuZFJlZmxlY3Rpb24oY2xpcFJlY3QsIGxheWVyLCByb290TGF5ZXIsIHRyYW5zcGFyZW5jeUJl
aGF2aW9yLCBwYWludEJlaGF2aW9yKTsKLQogICAgIC8vIElmIHdlIGhhdmUgYSByZWZsZWN0aW9u
LCB0aGVuIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhhdCB3aGVuIHdlIHB1c2ggdGhlIGNsaXAu
ICBSZWZsZWN0IG91ciBlbnRpcmUKICAgICAvLyBjdXJyZW50IHRyYW5zcGFyZW5jeUNsaXBCb3gg
dG8gY2F0Y2ggYWxsIGNoaWxkIGxheWVycy4KICAgICAvLyBGSVhNRTogQWNjZWxlcmF0ZWQgY29t
cG9zaXRpbmcgd2lsbCBldmVudHVhbGx5IHdhbnQgdG8gZG8gc29tZXRoaW5nIHNtYXJ0IGhlcmUg
dG8gYXZvaWQgaW5jb3Jwb3JhdGluZyB0aGlzCkBAIC0zOTcyLDE1ICszOTM5LDYgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbgogICAgIGlmICghcmVuZGVyZXIoKS5v
cGFjaXR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIERvbid0IHBhaW50IHRoZSBsYXll
ciBpZiB0aGUgcmVuZGVyZXIgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyByZWdpb24uCi0gICAgLy8g
VGhpcyBpcyB0cnVlIGFzIGxvbmcgYXMgd2UgY2xhbXAgdGhlIHJhbmdlIG9mIGEgYm94IHRvIGl0
cyBjb250YWluaW5nIGJsb2NrIHJhbmdlLgotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBu
YW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAg
IGlmIChuYW1lZEZsb3dGcmFnbWVudCkgewotICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21l
bnQtPmlzVmFsaWQoKSk7Ci0gICAgICAgIGlmICghbmFtZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJl
YWQoKS0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24oJnJlbmRlcmVyKCksIG5hbWVk
Rmxvd0ZyYWdtZW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAocGFp
bnRzV2l0aFRyYW5zcGFyZW5jeShwYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcikpCiAgICAgICAg
IHBhaW50RmxhZ3MgfD0gUGFpbnRMYXllckhhdmVUcmFuc3BhcmVuY3k7CiAKQEAgLTQyNzgsMTIg
KzQyMzYsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAg
Ly8gRW5zdXJlIG91ciBsaXN0cyBhcmUgdXAtdG8tZGF0ZS4KICAgICB1cGRhdGVMYXllckxpc3Rz
SWZOZWVkZWQoKTsKIAotICAgIC8vIERvIG5vdCBwYWludCB0aGUgZml4ZWQgcG9zaXRpb25lZCBs
YXllcnMgaWYgdGhlIHBhaW50IHJvb3QgaXMgdGhlIG5hbWVkIGZsb3csCi0gICAgLy8gaWYgdGhl
IHBhaW50IG9yaWdpbmF0ZXMgYXQgcmVnaW9uIGxldmVsLgotICAgIGlmIChwYWludGluZ0luZm8u
cm9vdExheWVyLT5pc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKQotICAgICAgICAmJiByZW5k
ZXJlcigpLmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5nQmxvY2soKSkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZy
b21BbmNlc3RvcihwYWludGluZ0luZm8ucm9vdExheWVyKTsKICAgICBMYXlvdXRSZWN0IHJvb3RS
ZWxhdGl2ZUJvdW5kczsKICAgICBib29sIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkID0gZmFs
c2U7CkBAIC00NDk0LDExICs0NDQ2LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMaXN0KFZl
Y3RvcjxSZW5kZQogICAgIExheWVyTGlzdE11dGF0aW9uRGV0ZWN0b3IgbXV0YXRpb25DaGVja2Vy
KHRoaXMpOwogI2VuZGlmCiAKLSAgICBmb3IgKGF1dG8qIGNoaWxkTGF5ZXIgOiAqbGlzdCkgewot
ICAgICAgICBpZiAoY2hpbGRMYXllci0+aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5
ZXJzVW5kZXJSZWdpb25zKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICBmb3IgKGF1dG8q
IGNoaWxkTGF5ZXIgOiAqbGlzdCkKICAgICAgICAgY2hpbGRMYXllci0+cGFpbnRMYXllcihjb250
ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwotICAgIH0KIH0KIAogUmVuZGVyTGF5ZXIq
IFJlbmRlckxheWVyOjplbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVu
ZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUgbW9kZSkgY29uc3QK
QEAgLTQ5MzQsMTEgKzQ4ODMsNiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2lu
Z0Zsb3dUCiAgICAgcmV0dXJuIGN1cnI7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmlzRmxvd1Ro
cmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGlzPFJlbmRlckZsb3dUaHJlYWQ+KHJlbmRlcmVyKCkpICYmIGRvd25jYXN0PFJlbmRl
ckZsb3dUaHJlYWQ+KHJlbmRlcmVyKCkpLmNvbGxlY3RzR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lv
bnMoKTsKLX0KLQogLy8gQ29tcHV0ZSB0aGUgei1vZmZzZXQgb2YgdGhlIHBvaW50IGluIHRoZSB0
cmFuc2Zvcm1TdGF0ZS4KIC8vIFRoaXMgaXMgZWZmZWN0aXZlbHkgcHJvamVjdGluZyBhIHJheSBu
b3JtYWwgdG8gdGhlIHBsYW5lIG9mIGFuY2VzdG9yLCBmaW5kaW5nIHdoZXJlIHRoYXQKIC8vIHJh
eSBpbnRlcnNlY3RzIHRhcmdldCwgYW5kIGNvbXB1dGluZyB0aGUgeiBkZWx0YSBiZXR3ZWVuIHRo
b3NlIHR3byBwb2ludHMuCkBAIC00OTkyLDExICs0OTM2LDYgQEAgc3RhdGljIGJvb2wgaXNIaXRD
YW5kaWRhdGUoY29uc3QgUmVuZGVyTAogewogICAgIGlmICghaGl0TGF5ZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudHMgYXJlIG5v
dCBoaXQgY2FuZGlkYXRlcy4gVGhlIGhpdCB0ZXN0IGFsZ29yaXRobSB3aWxsIHBpY2sgdGhlIHBh
cmVudAotICAgIC8vIGxheWVyLCB0aGUgb25lIG9mIHRoZSByZWdpb24uCi0gICAgaWYgKGhpdExh
eWVyLT5yZW5kZXJlcigpLmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gVGhlIGhpdCBsYXllciBpcyBkZXB0aC1zb3J0aW5nIHdpdGgg
b3RoZXIgbGF5ZXJzLCBzbyBqdXN0IHNheSB0aGF0IGl0IHdhcyBoaXQuCiAgICAgaWYgKGNhbkRl
cHRoU29ydCkKQEAgLTUwMzIsMjIgKzQ5NzEsNiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmhpdFRlc3RMYXllcihSCiAgICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWhhc1Nl
bGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotCi0gICAgLy8gUHJldmVudCBoaXR0aW5nIHRoZSBm
aXhlZCBsYXllcnMgaW5zaWRlIHRoZSBmbG93IHRocmVhZCB3aGVuIGhpdHRpbmcgdGhyb3VnaCBy
ZWdpb25zLgotICAgIGlmIChyZW5kZXJlcigpLmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dD
b250YWluaW5nQmxvY2soKSAmJiBuYW1lZEZsb3dGcmFnbWVudCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAvLyBEb24ndCBoaXQtdGVzdCB0aGUgbGF5ZXIgaWYgdGhlIHJlbmRlcmVy
IGRvZXNuJ3QgYmVsb25nIHRvIHRoaXMgcmVnaW9uLgotICAgIC8vIFRoaXMgaXMgdHJ1ZSBhcyBs
b25nIGFzIHdlIGNsYW1wIHRoZSByYW5nZSBvZiBhIGJveCB0byBpdHMgY29udGFpbmluZyBibG9j
ayByYW5nZS4KLSAgICAvLyBGSVhNRTogRml4IGhpdCB0ZXN0aW5nIHdpdGggaW4tZmxvdyB0aHJl
YWRzIGluY2x1ZGVkIGluIG91dC1vZi1mbG93IHRocmVhZHMuCi0gICAgaWYgKG5hbWVkRmxvd0Zy
YWdtZW50KSB7Ci0gICAgICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudC0+aXNWYWxpZCgpKTsK
LSAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IG5hbWVkRmxvd0ZyYWdtZW50
LT5mbG93VGhyZWFkKCk7Ci0gICAgICAgIGlmICghZmxvd1RocmVhZC0+b2JqZWN0U2hvdWxkRnJh
Z21lbnRJbkZsb3dSZWdpb24oJnJlbmRlcmVyKCksIG5hbWVkRmxvd0ZyYWdtZW50KSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQogICAgIC8vIFRoZSBuYXR1cmFsIHRoaW5n
IHdvdWxkIGJlIHRvIGtlZXAgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlIG9uIHRoZSBzdGFjaywg
YnV0IGl0J3MgYmlnLCBzbyB3ZSBoZWFwLWFsbG9jYXRlLgogCiAgICAgLy8gQXBwbHkgYSB0cmFu
c2Zvcm0gaWYgd2UgaGF2ZSBvbmUuCkBAIC01MTQ5LDE0ICs1MDcyLDYgQEAgUmVuZGVyTGF5ZXIq
IFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9
CiAKLSAgICBoaXRMYXllciA9IGhpdFRlc3RGbG93VGhyZWFkSWZSZWdpb25Gb3JGcmFnbWVudHMo
bGF5ZXJGcmFnbWVudHMsIHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwg
aGl0VGVzdExvY2F0aW9uLAotICAgICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zm
c2V0Rm9yRGVzY2VuZGFudHNQdHIsIHpPZmZzZXQsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUu
Z2V0KCksIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKLSAgICBpZiAoaGl0TGF5ZXIpIHsKLSAgICAg
ICAgaWYgKCFkZXB0aFNvcnREZXNjZW5kYW50cykKLSAgICAgICAgICAgIHJldHVybiBoaXRMYXll
cjsKLSAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSBoaXRMYXllcjsKLSAgICB9Ci0KICAgICAvLyBO
ZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRlIHRoZSBjaGlsZCBS
ZW5kZXJPYmplY3RzIG9mIHRoZSBsYXllci4gQ2hlY2sKICAgICAvLyBldmVyeSBmcmFnbWVudCBp
biByZXZlcnNlIG9yZGVyLgogICAgIGlmIChpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKQEAgLTUz
NjAsOCArNTI3NSw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QoVmUK
ICAgICBSZW5kZXJMYXllciogcmVzdWx0TGF5ZXIgPSBudWxscHRyOwogICAgIGZvciAoc2l6ZV90
IGkgPSBsaXN0LT5zaXplKCk7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgUmVuZGVyTGF5ZXIqIGNo
aWxkTGF5ZXIgPSBsaXN0LT5hdChpIC0gMSk7Ci0gICAgICAgIGlmIChjaGlsZExheWVyLT5pc0Zs
b3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSBudWxscHRyOwog
ICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRlc3RMb2NhdGlvbigp
KTsKICAgICAgICAgaGl0TGF5ZXIgPSBjaGlsZExheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExheWVy
LCB0aGlzLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9u
LCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CkBAIC01NDI5
LDM4ICs1MzQyLDYgQEAgUmVmPENsaXBSZWN0cz4gUmVuZGVyTGF5ZXI6OnVwZGF0ZUNsaXBSZQog
ICAgIHJldHVybiBjbGlwUmVjdHM7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6Om1hcExheWVyQ2xp
cFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIoQ2xpcFJlY3RzJiBjbGlwUmVjdHMpIGNvbnN0Ci17
Ci0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVu
dFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0gICAgaWYgKCFuYW1lZEZsb3dGcmFnbWVudCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50LT5w
YXJlbnQoKSAmJiBuYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50KCktPmlzUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnRDb250YWluZXIoKSk7Ci0KLSAgICBDbGlwUmVjdHNDb250ZXh0IHRhcmdldENsaXBS
ZWN0c0NvbnRleHQoJm5hbWVkRmxvd0ZyYWdtZW50LT5mcmFnbWVudENvbnRhaW5lckxheWVyKCks
IFRlbXBvcmFyeUNsaXBSZWN0cyk7Ci0gICAgbmFtZWRGbG93RnJhZ21lbnQtPmZyYWdtZW50Q29u
dGFpbmVyTGF5ZXIoKS5jYWxjdWxhdGVDbGlwUmVjdHModGFyZ2V0Q2xpcFJlY3RzQ29udGV4dCwg
Y2xpcFJlY3RzKTsKLQotICAgIExheW91dFJlY3QgZmxvd1RocmVhZFBvcnRpb25SZWN0ID0gbmFt
ZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOwotCi0gICAgTGF5b3V0UG9p
bnQgcG9ydGlvbkxvY2F0aW9uID0gZmxvd1RocmVhZFBvcnRpb25SZWN0LmxvY2F0aW9uKCk7Ci0g
ICAgTGF5b3V0UmVjdCByZWdpb25Db250ZW50Qm94ID0gbmFtZWRGbG93RnJhZ21lbnQtPmZyYWdt
ZW50Q29udGFpbmVyKCkuY29udGVudEJveFJlY3QoKTsKLSAgICBMYXlvdXRTaXplIG1vdmVPZmZz
ZXQgPSBwb3J0aW9uTG9jYXRpb24gLSByZWdpb25Db250ZW50Qm94LmxvY2F0aW9uKCkgKyB0b0xh
eW91dFNpemUobmFtZWRGbG93RnJhZ21lbnQtPmZyYWdtZW50Q29udGFpbmVyKCkuc2Nyb2xsUG9z
aXRpb24oKSk7Ci0KLSAgICBDbGlwUmVjdCBuZXdPdmVyZmxvd0NsaXBSZWN0ID0gY2xpcFJlY3Rz
Lm92ZXJmbG93Q2xpcFJlY3QoKTsKLSAgICBuZXdPdmVyZmxvd0NsaXBSZWN0Lm1vdmUobW92ZU9m
ZnNldCk7Ci0gICAgY2xpcFJlY3RzLnNldE92ZXJmbG93Q2xpcFJlY3QobmV3T3ZlcmZsb3dDbGlw
UmVjdCk7Ci0KLSAgICBDbGlwUmVjdCBuZXdGaXhlZENsaXBSZWN0ID0gY2xpcFJlY3RzLmZpeGVk
Q2xpcFJlY3QoKTsKLSAgICBuZXdGaXhlZENsaXBSZWN0Lm1vdmUobW92ZU9mZnNldCk7Ci0gICAg
Y2xpcFJlY3RzLnNldEZpeGVkQ2xpcFJlY3QobmV3Rml4ZWRDbGlwUmVjdCk7Ci0KLSAgICBDbGlw
UmVjdCBuZXdQb3NDbGlwUmVjdCA9IGNsaXBSZWN0cy5wb3NDbGlwUmVjdCgpOwotICAgIG5ld1Bv
c0NsaXBSZWN0Lm1vdmUobW92ZU9mZnNldCk7Ci0gICAgY2xpcFJlY3RzLnNldFBvc0NsaXBSZWN0
KG5ld1Bvc0NsaXBSZWN0KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCiBDbGlwUmVjdHMqIFJl
bmRlckxheWVyOjpjbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKICAgICBBU1NFUlQoY29udGV4dC5jbGlwUmVjdHNUeXBlIDwgTnVtQ2FjaGVkQ2xpcFJl
Y3RzVHlwZXMpOwpAQCAtNTUyMywxNCArNTQwNCwxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxj
dWxhdGVDbGlwUmVjdHMoY29uCiAgICAgICAgICAgICBvZmZzZXQgLT0gdG9MYXlvdXRTaXplKHJl
bmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNjcm9sbFBvc2l0aW9uRm9yRml4ZWRQb3NpdGlv
bigpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
KSB7Ci0gICAgICAgICAgICBDbGlwUmVjdCBuZXdPdmVyZmxvd0NsaXAgPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyhvZmZzZXQs
IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpLCBjbGlwUmVjdHNDb250ZXh0Lm92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5KTsKKyAgICAgICAgICAgIENsaXBSZWN0IG5ld092ZXJm
bG93Q2xpcCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVj
dEZvckNoaWxkTGF5ZXJzKG9mZnNldCwgbnVsbHB0ciwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSk7CiAgICAgICAgICAgICBuZXdPdmVyZmxvd0NsaXAuc2V0
QWZmZWN0ZWRCeVJhZGl1cyhyZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFkaXVzKCkpOwog
ICAgICAgICAgICAgY2xpcFJlY3RzLnNldE92ZXJmbG93Q2xpcFJlY3QoaW50ZXJzZWN0aW9uKG5l
d092ZXJmbG93Q2xpcCwgY2xpcFJlY3RzLm92ZXJmbG93Q2xpcFJlY3QoKSkpOwogICAgICAgICAg
ICAgaWYgKHJlbmRlcmVyKCkuaXNQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICAgICAgY2xpcFJl
Y3RzLnNldFBvc0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdPdmVyZmxvd0NsaXAsIGNsaXBSZWN0
cy5wb3NDbGlwUmVjdCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlbmRlcmVyKCkuaGFz
Q2xpcCgpKSB7Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmNsaXBSZWN0KG9mZnNldCwgY3VycmVudFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KCkpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlwID0gZG93
bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChvZmZzZXQsIG51bGxwdHIpOwog
ICAgICAgICAgICAgY2xpcFJlY3RzLnNldFBvc0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdQb3ND
bGlwLCBjbGlwUmVjdHMucG9zQ2xpcFJlY3QoKSkpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNl
dE92ZXJmbG93Q2xpcFJlY3QoaW50ZXJzZWN0aW9uKG5ld1Bvc0NsaXAsIGNsaXBSZWN0cy5vdmVy
Zmxvd0NsaXBSZWN0KCkpKTsKICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRGaXhlZENsaXBSZWN0
KGludGVyc2VjdGlvbihuZXdQb3NDbGlwLCBjbGlwUmVjdHMuZml4ZWRDbGlwUmVjdCgpKSk7CkBA
IC01NTk2LDEwICs1NDc3LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29u
c3QgQwogICAgICAgICBiYWNrZ3JvdW5kUmVjdCA9IHBhaW50RGlydHlSZWN0OwogCiAgICAgTGF5
b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdExvY2FsID0gb2Zmc2V0RnJvbVJvb3Q7Ci0gICAgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KCk7Ci0gICAgLy8gSWYgdGhlIHZpZXcgaXMgc2Nyb2xsZWQsIHRoZSBmbG93
IHRocmVhZCBpcyBub3Qgc2Nyb2xsZWQgd2l0aCBpdCBhbmQgd2Ugc2hvdWxkCi0gICAgLy8gdGFr
ZSB0aGUgc2Nyb2xsIG9mZnNldCBpbnRvIGFjY291bnQuCi0gICAgaWYgKGNsaXBSZWN0c0NvbnRl
eHQucm9vdExheWVyLT5pc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSAmJiAhbmFtZWRGbG93
RnJhZ21lbnQpIHsKKworICAgIGlmIChjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllci0+aXNPdXRP
ZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkpIHsKICAgICAgICAgTGF5b3V0UG9pbnQgYWJzUG9zID0g
TGF5b3V0UG9pbnQocmVuZGVyZXIoKS52aWV3KCkubG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQo
KSwgSXNGaXhlZCkpOwogICAgICAgICBvZmZzZXRGcm9tUm9vdExvY2FsICs9IHRvTGF5b3V0U2l6
ZShhYnNQb3MpOwogICAgIH0KQEAgLTU2MDgsNDIgKzU0ODcsMTggQEAgdm9pZCBSZW5kZXJMYXll
cjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQwogCiAgICAgZm9yZWdyb3VuZFJlY3QgPSBiYWNrZ3Jv
dW5kUmVjdDsKIAotICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBuYW1lZEZsb3dG
cmFnbWVudCA/IG5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCkgOiBudWxscHRyOwotICAg
IGlmIChpc1NlbGZQYWludGluZ0xheWVyKCkgJiYgZmxvd1RocmVhZCAmJiAhcmVuZGVyZXIoKS5p
c0luRmxvd1JlbmRlckZsb3dUaHJlYWQoKSkgewotICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJh
Z21lbnQtPmlzVmFsaWQoKSk7Ci0gICAgICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBi
b3hNb2RlbE9iamVjdCA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PihyZW5kZXJlcigp
KTsKLSAgICAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyA9IG5h
bWVkRmxvd0ZyYWdtZW50LT52aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3goYm94TW9kZWxPYmplY3Qp
OwotCi0gICAgICAgIC8vIExheWVycyBhcmUgaW4gcGh5c2ljYWwgY29vcmRpbmF0ZXMgc28gdGhl
IG9yaWdpbiBtdXN0IGJlIG1vdmVkIHRvIHRoZSBwaHlzaWNhbCB0b3AtbGVmdCBvZiB0aGUgZmxv
d3RocmVhZC4KLSAgICAgICAgaWYgKCZib3hNb2RlbE9iamVjdCA9PSBmbG93VGhyZWFkICYmIGZs
b3dUaHJlYWQtPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAgICAg
ICAgICAgaWYgKGZsb3dUaHJlYWQtPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
LSAgICAgICAgICAgICAgICBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdy5tb3ZlQnkoTGF5
b3V0UG9pbnQoMCwgZmxvd1RocmVhZC0+aGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdy5tb3ZlQnkoTGF5b3V0
UG9pbnQoZmxvd1RocmVhZC0+d2lkdGgoKSwgMCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgUmVuZGVyQmxvY2sqIHJlbmRlcmVyQ29udGFpbmluZ0Jsb2NrID0gaXM8UmVuZGVyQmxv
Y2s+KGJveE1vZGVsT2JqZWN0LmVuY2xvc2luZ0JveCgpKSA/ICZkb3duY2FzdDxSZW5kZXJCbG9j
az4oYm94TW9kZWxPYmplY3QuZW5jbG9zaW5nQm94KCkpIDogbnVsbHB0cjsKLSAgICAgICAgICAg
IGlmIChyZW5kZXJlckNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgICAgICByZW5kZXJlckNv
bnRhaW5pbmdCbG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKGxheWVyQm91bmRzV2l0aFZpc3VhbE92
ZXJmbG93KTsKLSAgICAgICAgfQotCi0gICAgICAgIGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJm
bG93Lm1vdmUob2Zmc2V0RnJvbVJvb3RMb2NhbCk7Ci0gICAgICAgIGJhY2tncm91bmRSZWN0Lmlu
dGVyc2VjdChsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7Ci0KLSAgICAgICAgZm9yZWdy
b3VuZFJlY3QgPSBiYWNrZ3JvdW5kUmVjdDsKLSAgICB9Ci0KICAgICAvLyBVcGRhdGUgdGhlIGNs
aXAgcmVjdHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBjaGlsZCBsYXllcnMuCiAgICAgaWYgKHJl
bmRlcmVyKCkuaGFzQ2xpcE9yT3ZlcmZsb3dDbGlwKCkpIHsKICAgICAgICAgLy8gVGhpcyBsYXll
ciBlc3RhYmxpc2hlcyBhIGNsaXAgb2Ygc29tZSBraW5kLgogICAgICAgICBpZiAocmVuZGVyZXIo
KS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAodGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXll
ciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJm
bG93Q2xpcCkpIHsKLSAgICAgICAgICAgIGZvcmVncm91bmRSZWN0LmludGVyc2VjdChkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QodG9MYXlvdXRQb2ludChv
ZmZzZXRGcm9tUm9vdExvY2FsKSwgbmFtZWRGbG93RnJhZ21lbnQsIGNsaXBSZWN0c0NvbnRleHQu
b3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kpKTsKKyAgICAgICAgICAgIGZvcmVncm91bmRS
ZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xp
cFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRGcm9tUm9vdExvY2FsKSwgbnVsbHB0ciwgY2xpcFJl
Y3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSkpOwogICAgICAgICAgICAg
aWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSkKICAgICAgICAgICAgICAg
ICBmb3JlZ3JvdW5kUmVjdC5zZXRBZmZlY3RlZEJ5UmFkaXVzKHRydWUpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKSB7CiAgICAgICAgICAgICAvLyBDbGlw
IGFwcGxpZXMgdG8gKnVzKiBhcyB3ZWxsLCBzbyB1cGRhdGUgdGhlIGRhbWFnZVJlY3QuCi0gICAg
ICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRl
cmVyKCkpLmNsaXBSZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbVJvb3RMb2NhbCksIG5hbWVk
Rmxvd0ZyYWdtZW50KTsKKyAgICAgICAgICAgIExheW91dFJlY3QgbmV3UG9zQ2xpcCA9IGRvd25j
YXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuY2xpcFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRG
cm9tUm9vdExvY2FsKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRl
cnNlY3QobmV3UG9zQ2xpcCk7CiAgICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3Qo
bmV3UG9zQ2xpcCk7CiAgICAgICAgIH0KQEAgLTU2NTMsMTYgKzU1MDgsMTQgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQwogICAgICAgICBpZiAocmVuZGVyQm94KCkt
Pmhhc1Zpc3VhbE92ZXJmbG93KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBEb2VzIG5vdCBk
byB0aGUgcmlnaHQgdGhpbmcgd2l0aCBDU1MgcmVnaW9ucyB5ZXQsIHNpbmNlIHdlIGRvbid0IHll
dCBmYWN0b3IgaW4gdGhlCiAgICAgICAgICAgICAvLyBpbmRpdmlkdWFsIHJlZ2lvbiBib3hlcyBh
cyBvdmVyZmxvdy4KLSAgICAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRoVmlzdWFs
T3ZlcmZsb3cgPSBuYW1lZEZsb3dGcmFnbWVudCA/IG5hbWVkRmxvd0ZyYWdtZW50LT52aXN1YWxP
dmVyZmxvd1JlY3RGb3JCb3goKnJlbmRlckJveCgpKSA6IHJlbmRlckJveCgpLT52aXN1YWxPdmVy
Zmxvd1JlY3QoKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRoVmlzdWFs
T3ZlcmZsb3cgPSByZW5kZXJCb3goKS0+dmlzdWFsT3ZlcmZsb3dSZWN0KCk7CiAgICAgICAgICAg
ICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKGxheWVyQm91bmRzV2l0aFZpc3VhbE92
ZXJmbG93KTsgLy8gTGF5ZXJzIGFyZSBpbiBwaHlzaWNhbCBjb29yZGluYXRlcywgc28gdGhlIG92
ZXJmbG93IGhhcyB0byBiZSBmbGlwcGVkLgogICAgICAgICAgICAgbGF5ZXJCb3VuZHNXaXRoVmlz
dWFsT3ZlcmZsb3cubW92ZShvZmZzZXRGcm9tUm9vdExvY2FsKTsKICAgICAgICAgICAgIGlmICh0
aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyIHx8IGNsaXBSZWN0c0NvbnRleHQucmVz
cGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQogICAgICAgICAgICAgICAg
IGJhY2tncm91bmRSZWN0LmludGVyc2VjdChsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBTaGlmdCB0aGUgYm91bmRzIHRvIGJl
IGZvciBvdXIgcmVnaW9uIG9ubHkuCi0gICAgICAgICAgICBMYXlvdXRSZWN0IGJvdW5kcyA9IHJl
bmRlckJveCgpLT5ib3JkZXJCb3hSZWN0SW5SZWdpb24obmFtZWRGbG93RnJhZ21lbnQpOwotICAg
ICAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50KQotICAgICAgICAgICAgICAgIGJvdW5kcyA9
IG5hbWVkRmxvd0ZyYWdtZW50LT5yZWN0Rmxvd1BvcnRpb25Gb3JCb3gocmVuZGVyQm94KCksIGJv
dW5kcyk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGJvdW5kcyA9IHJlbmRlckJveCgpLT5ib3Jk
ZXJCb3hSZWN0SW5SZWdpb24obnVsbHB0cik7CiAKICAgICAgICAgICAgIGJvdW5kcy5tb3ZlKG9m
ZnNldEZyb21Sb290TG9jYWwpOwogICAgICAgICAgICAgaWYgKHRoaXMgIT0gY2xpcFJlY3RzQ29u
dGV4dC5yb290TGF5ZXIgfHwgY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09
IFJlc3BlY3RPdmVyZmxvd0NsaXApCkBAIC01NzE4LDcgKzU1NzEsNyBAQCBMYXlvdXRSZWN0IFJl
bmRlckxheWVyOjpsb2NhbENsaXBSZWN0KGJvCiAKICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlw
KCkpIHsKICAgICAgICAgLy8gQ1NTIGNsaXAgbWF5IGJlIGxhcmdlciB0aGFuIG91ciBib3JkZXIg
Ym94LgotICAgICAgICBMYXlvdXRSZWN0IGNzc0NsaXBSZWN0ID0gZG93bmNhc3Q8UmVuZGVyQm94
PihyZW5kZXJlcigpKS5jbGlwUmVjdCh0b0xheW91dFBvaW50KG9mZnNldEZyb21Sb290KSwgY3Vy
cmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpOworICAgICAgICBMYXlvdXRSZWN0IGNzc0Ns
aXBSZWN0ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdCh0b0xheW91
dFBvaW50KG9mZnNldEZyb21Sb290KSwgbnVsbHB0cik7CiAgICAgICAgIGNsaXBFeGNlZWRzQm91
bmRzID0gIWNsaXBSZWN0LmNvbnRhaW5zKGNzc0NsaXBSZWN0KTsKICAgICB9CiAKQEAgLTU3NzQs
MTggKzU2MjcsNiBAQCBib29sIFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjCiAg
ICAgaWYgKCFyZW5kZXJlcigpLmlzUmVuZGVySW5saW5lKCkgJiYgbGF5ZXJCb3VuZHMuaW50ZXJz
ZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQoKTsKLSAgICAvLyBXaGVuIHVzaW5nIHJlZ2lvbnMsIHNvbWUgYm94ZXMgbWlnaHQg
aGF2ZSB0aGVpciBmcmFtZSByZWN0IHJlbGF0aXZlIHRvIHRoZSBmbG93IHRocmVhZCwgd2hpY2gg
Y291bGQKLSAgICAvLyBjYXVzZSB0aGUgcGFpbnQgcmVqZWN0aW9uIGFsZ29yaXRobSB0byBwcmV2
ZW50IHRoZW0gZnJvbSBwYWludGluZyB3aGVuIHVzaW5nIGRpZmZlcmVudCB3aWR0aCByZWdpb25z
LgotICAgIC8vIGUuZy4gYW4gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGJveCB3aXRoIGJvdHRvbTow
cHggYW5kIHJpZ2h0OjBweCB3b3VsZCBoYXZlIGl0J3MgZnJhbWVSZWN0LnggcmVsYXRpdmUKLSAg
ICAvLyB0byB0aGUgZmxvdyB0aHJlYWQsIG5vdCB0aGUgbGFzdCByZWdpb24gKGluIHdoaWNoIGl0
IHdpbGwgZW5kIHVwIGJlY2F1c2Ugb2YgYm90dG9tOjBweCkKLSAgICBpZiAobmFtZWRGbG93RnJh
Z21lbnQgJiYgcmVuZGVyZXIoKS5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAg
ICAgTGF5b3V0UmVjdCBhZGp1c3RlZEJvdW5kcyA9IGxheWVyQm91bmRzOwotICAgICAgICBhZGp1
c3RlZEJvdW5kcy5tb3ZlQnkobmFtZWRGbG93RnJhZ21lbnQtPnZpc3VhbE92ZXJmbG93UmVjdEZv
ckJveChkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4ocmVuZGVyZXIoKSkpLmxvY2F0aW9u
KCkpOwotICAgICAgICBpZiAoYWRqdXN0ZWRCb3VuZHMuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKICAgICAvLyBPdGhlcndpc2Ug
d2UgbmVlZCB0byBjb21wdXRlIHRoZSBib3VuZGluZyBib3ggb2YgdGhpcyBzaW5nbGUgbGF5ZXIg
YW5kIHNlZSBpZiBpdCBpbnRlcnNlY3RzCiAgICAgLy8gdGhlIGRhbWFnZSByZWN0LiBJdCdzIHBv
c3NpYmxlIHRoZSBmcmFnbWVudCBjb21wdXRlZCB0aGUgYm91bmRpbmcgYm94IGFscmVhZHksIGlu
IHdoaWNoIGNhc2Ugd2UKICAgICAvLyBjYW4gdXNlIHRoZSBjYWNoZWQgdmFsdWUuCkBAIC01OTgz
LDIxICs1ODI0LDEzIEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm8K
ICAgICB9CiAKICAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIHBvc1pPcmRlckxpc3QgPSB0
aGlzLT5wb3NaT3JkZXJMaXN0KCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBjaGlsZExheWVyIDog
KnBvc1pPcmRlckxpc3QpIHsKLSAgICAgICAgICAgIC8vIFRoZSBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQgaXMgaWdub3JlZCB3aGVuIHdlIGNhbGN1bGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBSZW5kZXJW
aWV3LgotICAgICAgICAgICAgaWYgKGNoaWxkTGF5ZXItPmlzRmxvd1RocmVhZENvbGxlY3RpbmdH
cmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBmb3IgKGF1dG8qIGNoaWxkTGF5ZXIgOiAqcG9zWk9yZGVyTGlzdCkKICAgICAgICAg
ICAgIGNvbXB1dGVMYXllcnNVbmlvbigqY2hpbGRMYXllcik7Ci0gICAgICAgIH0KICAgICB9CiAK
ICAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIG5vcm1hbEZsb3dMaXN0ID0gdGhpcy0+bm9y
bWFsRmxvd0xpc3QoKSkgewotICAgICAgICBmb3IgKGF1dG8qIGNoaWxkTGF5ZXIgOiAqbm9ybWFs
Rmxvd0xpc3QpIHsKLSAgICAgICAgICAgIC8vIFJlbmRlclZpZXcgd2lsbCBhbHdheXMgcmV0dXJu
IHRoZSBzaXplIG9mIHRoZSBkb2N1bWVudCwgYmVmb3JlIHJlYWNoaW5nIHRoaXMgcG9pbnQsCi0g
ICAgICAgICAgICAvLyBzbyB0aGVyZSdzIG5vIHdheSB3ZSBjb3VsZCBoaXQgYSBSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQgaGVyZS4KLSAgICAgICAgICAgIEFTU0VSVCghY2hpbGRMYXllci0+aXNGbG93
VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpOworICAgICAgICBm
b3IgKGF1dG8qIGNoaWxkTGF5ZXIgOiAqbm9ybWFsRmxvd0xpc3QpCiAgICAgICAgICAgICBjb21w
dXRlTGF5ZXJzVW5pb24oKmNoaWxkTGF5ZXIpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgLy8g
RklYTUU6IFdlIGNhbiBvcHRpbWl6ZSB0aGUgc2l6ZSBvZiB0aGUgY29tcG9zaXRlZCBsYXllcnMs
IGJ5IG5vdCBlbmxhcmdpbmcKQEAgLTYyMTMsOCArNjA0Niw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OmRpcnR5Wk9yZGVyTGlzdHMoKQogICAgIG1fek9yZGVyTGlzdHNEaXJ0eSA9IHRydWU7CiAKICAg
ICBpZiAoIXJlbmRlcmVyKCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpIHsKLSAgICAgICAg
aWYgKGlzRmxvd1RocmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKQot
ICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4ocmVuZGVyZXIoKSkuc2V0TmVl
ZHNMYXllclRvUmVnaW9uTWFwcGluZ3NVcGRhdGUoKTsKICAgICAgICAgY29tcG9zaXRvcigpLnNl
dENvbXBvc2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKTsKICAgICAgICAgaWYgKGFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoKSkKICAgICAgICAgICAgIGNvbXBv
c2l0b3IoKS5zZXRTaG91bGRSZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxheW91dCgpOwpAQCAt
NjIzNyw4ICs2MDY4LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6ZGlydHlOb3JtYWxGbG93TGlzdCgp
CiAgICAgbV9ub3JtYWxGbG93TGlzdERpcnR5ID0gdHJ1ZTsKIAogICAgIGlmICghcmVuZGVyZXIo
KS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkgewotICAgICAgICBpZiAoaXNGbG93VGhyZWFk
Q29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpCi0gICAgICAgICAgICBkb3du
Y2FzdDxSZW5kZXJGbG93VGhyZWFkPihyZW5kZXJlcigpKS5zZXROZWVkc0xheWVyVG9SZWdpb25N
YXBwaW5nc1VwZGF0ZSgpOwogICAgICAgICBjb21wb3NpdG9yKCkuc2V0Q29tcG9zaXRpbmdMYXll
cnNOZWVkUmVidWlsZCgpOwogICAgICAgICBpZiAoYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92
ZXJmbG93U2Nyb2xsRW5hYmxlZCgpKQogICAgICAgICAgICAgY29tcG9zaXRvcigpLnNldFNob3Vs
ZFJlZXZhbHVhdGVDb21wb3NpdGluZ0FmdGVyTGF5b3V0KCk7CkBAIC02MzcyLDE0ICs2MjAxLDYg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cmVwYWludEluY2x1ZGluZ0Rlc2NlbgogICAgIHJlbmRlcmVy
KCkucmVwYWludCgpOwogICAgIGZvciAoUmVuZGVyTGF5ZXIqIGN1cnJlbnQgPSBmaXJzdENoaWxk
KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKQogICAgICAgICBj
dXJyZW50LT5yZXBhaW50SW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKLQotICAgIC8vIElmIHRoaXMg
aXMgYSByZWdpb24sIHdlIG11c3QgYWxzbyByZXBhaW50IHRoZSBmbG93IHRocmVhZCdzIGxheWVy
IHNpbmNlIGl0IGlzIHRoZSBvbmUKLSAgICAvLyBkb2luZyB0aGUgYWN0dWFsIHBhaW50aW5nIG9m
IHRoZSBmbG93ZWQgY29udGVudCwgYnV0IG9ubHkgaWYgdGhlIHJlZ2lvbiBpcyB2YWxpZC4KLSAg
ICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpIHsK
LSAgICAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQmIHJlZ2lvbiA9ICpkb3duY2FzdDxSZW5k
ZXJCbG9ja0Zsb3c+KHJlbmRlcmVyKCkpLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0gICAg
ICAgIGlmIChyZWdpb24uaXNWYWxpZCgpKQotICAgICAgICAgICAgcmVnaW9uLmZsb3dUaHJlYWQo
KS0+bGF5ZXIoKS0+cmVwYWludEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7Ci0gICAgfQogfQogCiB2
b2lkIFJlbmRlckxheWVyOjpzZXRCYWNraW5nTmVlZHNSZXBhaW50KEdyYXBoaWNzTGF5ZXI6OlNo
b3VsZENsaXBUb0xheWVyIHNob3VsZENsaXApCkBAIC02OTc0LDkyICs2Nzk1LDYgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6ZmlsdGVyTmVlZHNSZXBhaW50KCkKICAgICByZW5kZXJlcigpLnJlcGFpbnQo
KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnROYW1lZEZsb3dUaHJlYWRJbnNpZGVSZWdp
b24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVn
aW9uLCBMYXlvdXRSZWN0IHBhaW50RGlydHlSZWN0LCBMYXlvdXRQb2ludCBwYWludE9mZnNldCwg
UGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykK
LXsKLSAgICBMYXlvdXRSZWN0IHJlZ2lvbkNvbnRlbnRCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+
KHJlZ2lvbi0+bGF5ZXJPd25lcigpKS5jb250ZW50Qm94UmVjdCgpOwotICAgIEN1cnJlbnRSZW5k
ZXJSZWdpb25NYWludGFpbmVyIHJlZ2lvbk1haW50YWluZXIoKnJlZ2lvbik7Ci0gICAgcmVnaW9u
LT5zZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUoKTsKLQotICAgIExheW91dFNpemUgbW92ZU9m
ZnNldCA9IHJlZ2lvbi0+Zmxvd1RocmVhZFBvcnRpb25Mb2NhdGlvbigpIC0gKHBhaW50T2Zmc2V0
ICsgcmVnaW9uQ29udGVudEJveC5sb2NhdGlvbigpKSArIHRvTGF5b3V0U2l6ZShyZWdpb24tPmZy
YWdtZW50Q29udGFpbmVyKCkuc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgRmxvYXRQb2ludCBhZGp1
c3RlZFBhaW50T2Zmc2V0ID0gcm91bmRQb2ludFRvRGV2aWNlUGl4ZWxzKHRvTGF5b3V0UG9pbnQo
bW92ZU9mZnNldCksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsK
LSAgICBjb250ZXh0LnNhdmUoKTsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZSgtYWRqdXN0ZWRQYWlu
dE9mZnNldCk7Ci0KLSAgICBMYXlvdXRTaXplIHN1YnBpeGVsT2Zmc2V0ID0gbW92ZU9mZnNldCAt
IHRvTGF5b3V0U2l6ZShMYXlvdXRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSk7Ci0gICAgcGFp
bnREaXJ0eVJlY3QubW92ZShtb3ZlT2Zmc2V0KTsKLSAgICBwYWludChjb250ZXh0LCBwYWludERp
cnR5UmVjdCwgTGF5b3V0U2l6ZSgtc3VicGl4ZWxPZmZzZXQud2lkdGgoKSwgLXN1YnBpeGVsT2Zm
c2V0LmhlaWdodCgpKSwgcGFpbnRCZWhhdmlvciwgbnVsbHB0ciwgcGFpbnRGbGFncyB8IFBhaW50
TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpOwotICAgIHJlZ2lvbi0+cmVzdG9yZVJlZ2lvbk9iamVj
dHNPcmlnaW5hbFN0eWxlKCk7Ci0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci19Ci0KLVJlbmRlckxh
eWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdEZsb3dUaHJlYWRJZlJlZ2lvbkZvckZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBSZW5kZXJMYXllciosIGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFJl
Y3QmIGhpdFRlc3RSZWN0LAotICAgIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0
aW9uLAotICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUs
IAotICAgIGRvdWJsZSogek9mZnNldEZvckRlc2NlbmRhbnRzLCBkb3VibGUqIHpPZmZzZXQsCi0g
ICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0
YXRlLCBib29sIGRlcHRoU29ydERlc2NlbmRhbnRzKQotewotICAgIGlmICghcmVuZGVyZXIoKS5p
c1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQmIHJlZ2lvbiA9ICpkb3duY2FzdDxS
ZW5kZXJCbG9ja0Zsb3c+KHJlbmRlcmVyKCkpLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0g
ICAgaWYgKCFyZWdpb24uaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSByZWdpb24uZmxvd1RocmVhZCgpOwotICAg
IExheW91dFBvaW50IHBvcnRpb25Mb2NhdGlvbiA9IHJlZ2lvbi5mbG93VGhyZWFkUG9ydGlvblJl
Y3QoKS5sb2NhdGlvbigpOwotICAgIGlmIChmbG93VGhyZWFkLT5zdHlsZSgpLmlzRmxpcHBlZEJs
b2Nrc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgLy8gVGhlIHBvcnRpb24gbG9jYXRpb24gY29v
cmRpbmF0ZSBtdXN0IGJlIHRyYW5zbGF0ZWQgaW50byBwaHlzaWNhbCBjb29yZGluYXRlcy4KLSAg
ICAgICAgaWYgKGZsb3dUaHJlYWQtPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
LSAgICAgICAgICAgIHBvcnRpb25Mb2NhdGlvbi5zZXRZKGZsb3dUaHJlYWQtPmhlaWdodCgpIC0g
KHBvcnRpb25Mb2NhdGlvbi55KCkgKyByZWdpb24uY29udGVudEhlaWdodCgpKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHBvcnRpb25Mb2NhdGlvbi5zZXRYKGZsb3dUaHJlYWQtPndpZHRo
KCkgLSAocG9ydGlvbkxvY2F0aW9uLngoKSArIHJlZ2lvbi5jb250ZW50V2lkdGgoKSkpOwotICAg
IH0KLQotICAgIExheW91dFJlY3QgcmVnaW9uQ29udGVudEJveCA9IGRvd25jYXN0PFJlbmRlckJs
b2NrRmxvdz4ocmVuZGVyZXIoKSkuY29udGVudEJveFJlY3QoKTsKLQotICAgIFJlbmRlckxheWVy
KiByZXN1bHRMYXllciA9IG51bGxwdHI7Ci0gICAgZm9yIChpbnQgaSA9IGZyYWdtZW50cy5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFn
bWVudCA9IGZyYWdtZW50cy5hdChpKTsKLQotICAgICAgICBpZiAoIWZyYWdtZW50LmJhY2tncm91
bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIExheW91dFNpemUgaGl0VGVzdE9mZnNldCA9IHBvcnRpb25Mb2NhdGlvbiAt
IChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpICsgcmVnaW9uQ29udGVudEJveC5sb2Nh
dGlvbigpKSArIHRvTGF5b3V0U2l6ZShyZWdpb24uZnJhZ21lbnRDb250YWluZXIoKS5zY3JvbGxQ
b3NpdGlvbigpKTsKLQotICAgICAgICAvLyBBbHdheXMgaWdub3JlIGNsaXBwaW5nLCBzaW5jZSB0
aGUgUmVuZGVyRmxvd1RocmVhZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBib3VuZHMgb2Yg
dGhlIEZyYW1lVmlldy4KLSAgICAgICAgSGl0VGVzdFJlcXVlc3QgbmV3UmVxdWVzdChyZXF1ZXN0
LnR5cGUoKSB8IEhpdFRlc3RSZXF1ZXN0OjpJZ25vcmVDbGlwcGluZyB8IEhpdFRlc3RSZXF1ZXN0
OjpEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQpOwotCi0gICAgICAgIC8vIE1ha2UgYSBu
ZXcgdGVtcG9yYXJ5IEhpdFRlc3RMb2NhdGlvbiBpbiB0aGUgbmV3IHJlZ2lvbi4KLSAgICAgICAg
SGl0VGVzdExvY2F0aW9uIG5ld0hpdFRlc3RMb2NhdGlvbihoaXRUZXN0TG9jYXRpb24sIGhpdFRl
c3RPZmZzZXQpOwotCi0gICAgICAgIC8vIEV4cGFuZCB0aGUgaGl0LXRlc3QgcmVjdCB0byB0aGUg
ZmxvdyB0aHJlYWQncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgTGF5b3V0UmVjdCBoaXRU
ZXN0UmVjdEluRmxvd1RocmVhZCA9IGhpdFRlc3RSZWN0OwotICAgICAgICBoaXRUZXN0UmVjdElu
Rmxvd1RocmVhZC5tb3ZlKGhpdFRlc3RPZmZzZXQpOwotICAgICAgICBoaXRUZXN0UmVjdEluRmxv
d1RocmVhZC5leHBhbmQoTGF5b3V0U2l6ZShmYWJzKChkb3VibGUpaGl0VGVzdE9mZnNldC53aWR0
aCgpKSwgZmFicygoZG91YmxlKWhpdFRlc3RPZmZzZXQuaGVpZ2h0KCkpKSk7Ci0KLSAgICAgICAg
Q3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIgcmVnaW9uTWFpbnRhaW5lcihyZWdpb24pOwot
Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdExvY2F0aW9u
KCkpOwotICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSBmbG93VGhyZWFkLT5sYXllcigp
LT5oaXRUZXN0TGF5ZXIoZmxvd1RocmVhZC0+bGF5ZXIoKSwgbnVsbHB0ciwgbmV3UmVxdWVzdCwg
dGVtcFJlc3VsdCwgaGl0VGVzdFJlY3RJbkZsb3dUaHJlYWQsIG5ld0hpdFRlc3RMb2NhdGlvbiwg
ZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwotICAgICAgICBp
ZiAocmVxdWVzdC5yZXN1bHRJc0VsZW1lbnRMaXN0KCkpCi0gICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKHRlbXBSZXN1bHQsIHJlcXVlc3QpOwotICAgICAgICBpZiAoaXNIaXRDYW5kaWRhdGUoaGl0
TGF5ZXIsIGRlcHRoU29ydERlc2NlbmRhbnRzLCB6T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9y
bVN0YXRlKSkgewotICAgICAgICAgICAgcmVzdWx0TGF5ZXIgPSBoaXRMYXllcjsKLSAgICAgICAg
ICAgIGlmICghcmVxdWVzdC5yZXN1bHRJc0VsZW1lbnRMaXN0KCkpCi0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gdGVtcFJlc3VsdDsKLSAgICAgICAgICAgIGlmICghZGVwdGhTb3J0RGVzY2VuZGFu
dHMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0TGF5ZXI7Ci19Ci0KLVJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBSZW5kZXJMYXll
cjo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
cmVuZGVyZXIoKS5jdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKLX0KLQogVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
KQogewogICAgIHRzIDw8ICJSZW5kZXJMYXllciAiIDw8ICZsYXllciA8PCAiICIgPDwgbGF5ZXIu
c2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlz
aW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw2IEBAIGNsYXNzIFJlbmRlckdlb21ldHJ5TWFwOwog
Y2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOwog
Y2xhc3MgUmVuZGVyTWFycXVlZTsKLWNsYXNzIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OwogY2xh
c3MgUmVuZGVyUmVwbGljYTsKIGNsYXNzIFJlbmRlclNjcm9sbGJhclBhcnQ7CiBjbGFzcyBSZW5k
ZXJTdHlsZTsKQEAgLTUxMSw4ICs1MTAsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoaXRUZXN0KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdFJlc3Vs
dCYpOwogICAgIHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3Qq
IHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKIAotICAgIHZvaWQgcGFpbnROYW1lZEZsb3dU
aHJlYWRJbnNpZGVSZWdpb24oR3JhcGhpY3NDb250ZXh0JiwgUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQqLCBMYXlvdXRSZWN0LCBMYXlvdXRQb2ludCwgUGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZp
b3JOb3JtYWwsIFBhaW50TGF5ZXJGbGFncyA9IDApOwotCiAgICAgc3RydWN0IENsaXBSZWN0c0Nv
bnRleHQgewogICAgICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyKiBpblJv
b3RMYXllciwgQ2xpcFJlY3RzVHlwZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RPdmVy
Zmxvd0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQogICAgICAgICAgICAgOiByb290TGF5ZXIo
aW5Sb290TGF5ZXIpCkBAIC03MDUsMTUgKzcwMiwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1Jl
bmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLmlzUmVuZGVyRmxvd1Ro
cmVhZCgpOyB9CiAgICAgYm9vbCBpc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCB7
IHJldHVybiByZW5kZXJlcigpLmlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpOyB9CiAgICAg
Ym9vbCBpc0luc2lkZUZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLmZsb3dU
aHJlYWRTdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6Tm90SW5zaWRlRmxvd1RocmVhZDsgfQotICAg
IGJvb2wgaXNJbnNpZGVPdXRPZkZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigp
LmZsb3dUaHJlYWRTdGF0ZSgpID09IFJlbmRlck9iamVjdDo6SW5zaWRlT3V0T2ZGbG93VGhyZWFk
OyB9CiAgICAgYm9vbCBpc0RpcnR5UmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQoaXNSZW5kZXJGbG93VGhyZWFkKCkpOwogICAgICAgICByZXR1cm4gbV96T3Jk
ZXJMaXN0c0RpcnR5IHx8IG1fbm9ybWFsRmxvd0xpc3REaXJ0eTsKICAgICB9CiAKLSAgICBib29s
IGlzRmxvd1RocmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpIGNvbnN0
OwotCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0Zsb3dUaHJlYWRBbmNlc3RvcigpIGNvbnN0
OwogCiAgICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9u
U2Nyb2xsYmFyT25MZWZ0KCk7IH0KQEAgLTg2NSwxNCArODU5LDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVz
Y2VuZGFudHMsIGRvdWJsZSogek9mZnNldCwKICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5z
Zm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLCBib29sIGRlcHRoU29ydERlc2Nl
bmRhbnRzKTsKIAotICAgIFJlbmRlckxheWVyKiBoaXRUZXN0Rml4ZWRMYXllcnNJbk5hbWVkRmxv
d3MoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwKLSAgICAgICAgY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwKLSAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3Qs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsCi0gICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zv
cm1TdGF0ZSosCi0gICAgICAgIGRvdWJsZSogek9mZnNldEZvckRlc2NlbmRhbnRzLCBkb3VibGUq
IHpPZmZzZXQsCi0gICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdW5mbGF0
dGVuZWRUcmFuc2Zvcm1TdGF0ZSwKLSAgICAgICAgYm9vbCBkZXB0aFNvcnREZXNjZW5kYW50cyk7
Ci0KICAgICBSZWY8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBjcmVhdGVMb2NhbFRyYW5zZm9y
bVN0YXRlKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXll
ciwKICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYsCiAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogY29udGFp
bmVyVHJhbnNmb3JtU3RhdGUsCkBAIC0xMDMwLDE0ICsxMDE2LDYgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxS
ZWN0KSBjb25zdDsKIAotICAgIFJlbmRlckxheWVyKiBoaXRUZXN0Rmxvd1RocmVhZElmUmVnaW9u
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgUmVuZGVyTGF5ZXIqLCBjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLAotICAgICAgICBjb25zdCBMYXlvdXRSZWN0
JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwKLSAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5z
Zm9ybVN0YXRlKiwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsCi0gICAgICAgIGRvdWJs
ZSogek9mZnNldCwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRy
YW5zZm9ybVN0YXRlLCBib29sIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKLSAgICBib29sIG1hcExh
eWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIoQ2xpcFJlY3RzJikgY29uc3Q7Ci0KLSAg
ICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KCkgY29uc3Q7Ci0KICAgICAvLyBUaGUgYml0ZmllbGRzIGFyZSB1cCBoZXJlIHNvIHRoZXkgd2ls
bCBmYWxsIGludG8gdGhlIHBhZGRpbmcgZnJvbSBTY3JvbGxhYmxlQXJlYSBvbiA2NC1iaXQuCiAK
ICAgICBjb25zdCBib29sIG1faXNSZW5kZXJWaWV3TGF5ZXIgOiAxOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDIy
MjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJNZWRpYS5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCkBAIC01NzIsOSArNTcxLDYgQEAgYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnNob3VsZENsaXBDb21wbwogICAgIGlmIChsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9y
bWVkT3JVc2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmcobV9vd25pbmdMYXllcikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChtX293bmluZ0xheWVyLmlzRmxvd1RocmVhZENvbGxlY3Rp
bmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODY5LDcgKzg2NSw2IEBAIExheW91dFJlY3QgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGEKICAgICAgICAgLy8gRklYTUU6IGZsb3dzL2NvbHVt
bnMgbmVlZCB3b3JrLgogICAgICAgICBMYXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5k
cyA9IGFuY2VzdG9yQmFja2luZ0xheWVyLT5jb21wb3NpdGVkQm91bmRzKCk7CiAgICAgICAgIGFu
Y2VzdG9yQ29tcG9zaXRlZEJvdW5kcy5zZXRMb2NhdGlvbihMYXlvdXRQb2ludCgpKTsKLSAgICAg
ICAgYWRqdXN0QW5jZXN0b3JDb21wb3NpdGluZ0JvdW5kc0ZvckZsb3dUaHJlYWQoYW5jZXN0b3JD
b21wb3NpdGVkQm91bmRzLCBjb21wb3NpdGVkQW5jZXN0b3IpOwogICAgICAgICBwYXJlbnRHcmFw
aGljc0xheWVyUmVjdCA9IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kczsKICAgICB9CiAKQEAgLTEy
MzcsNDggKzEyMzIsNiBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlTWFza2luZ0xh
CiAgICAgfQogfQogCi12b2lkIFJlbmRlckxheWVyQmFja2luZzo6YWRqdXN0QW5jZXN0b3JDb21w
b3NpdGluZ0JvdW5kc0ZvckZsb3dUaHJlYWQoTGF5b3V0UmVjdCYgYW5jZXN0b3JDb21wb3NpdGlu
Z0JvdW5kcywgY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IpIGNvbnN0Ci17
Ci0gICAgUmVuZGVyTGF5ZXIqIGZsb3dUaHJlYWRMYXllciA9IG1fb3duaW5nTGF5ZXIuaXNJbnNp
ZGVPdXRPZkZsb3dUaHJlYWQoKSA/IG1fb3duaW5nTGF5ZXIuc3RhY2tpbmdDb250YWluZXIoKSA6
IG51bGxwdHI7Ci0gICAgaWYgKGZsb3dUaHJlYWRMYXllciAmJiBmbG93VGhyZWFkTGF5ZXItPmlz
UmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIGlmIChtX293bmluZ0xheWVyLmlzRmxvd1Ro
cmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKSB7Ci0gICAgICAgICAg
ICAvLyBUaGUgUmVuZGVyTmFtZWRGbG93VGhyZWFkIGlzIG5vdCBjb21wb3NpdGVkLCBhcyB3ZSBu
ZWVkIGl0IHRvIHBhaW50IHRoZSAKLSAgICAgICAgICAgIC8vIGJhY2tncm91bmQgbGF5ZXIgb2Yg
dGhlIHJlZ2lvbnMuIFdlIG5lZWQgdG8gY29tcGVuc2F0ZSBmb3IgdGhhdCBieSBtYW51YWxseQot
ICAgICAgICAgICAgLy8gc3VidHJhY3RpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBmbG93LXRocmVh
ZC4KLSAgICAgICAgICAgIEludFBvaW50IGZsb3dQb3NpdGlvbjsKLSAgICAgICAgICAgIGZsb3dU
aHJlYWRMYXllci0+Y29udmVydFRvUGl4ZWxTbmFwcGVkTGF5ZXJDb29yZHMoY29tcG9zaXRpbmdB
bmNlc3RvciwgZmxvd1Bvc2l0aW9uKTsKLSAgICAgICAgICAgIGFuY2VzdG9yQ29tcG9zaXRpbmdC
b3VuZHMubW92ZUJ5KGZsb3dQb3NpdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBNb3Zl
IHRoZSBhbmNlc3RvciBwb3NpdGlvbiBhdCB0aGUgdG9wIG9mIHRoZSByZWdpb24gd2hlcmUgdGhl
IGNvbXBvc2l0ZWQgbGF5ZXIgaXMgZ29pbmcgdG8gZGlzcGxheS4KLSAgICAgICAgUmVuZGVyRmxv
d1RocmVhZCYgZmxvd1RocmVhZCA9IGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KGZsb3dUaHJl
YWRMYXllci0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBw
YXJlbnRSZWdpb24gPSBmbG93VGhyZWFkLmNhY2hlZFJlZ2lvbkZvckNvbXBvc2l0ZWRMYXllciht
X293bmluZ0xheWVyKTsKLSAgICAgICAgaWYgKCFwYXJlbnRSZWdpb24pCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgSW50UG9pbnQgZmxvd0RlbHRhOwotICAgICAgICBtX293bmluZ0xh
eWVyLmNvbnZlcnRUb1BpeGVsU25hcHBlZExheWVyQ29vcmRzKGZsb3dUaHJlYWRMYXllciwgZmxv
d0RlbHRhKTsKLSAgICAgICAgcGFyZW50UmVnaW9uLT5hZGp1c3RSZWdpb25Cb3VuZHNGcm9tRmxv
d1RocmVhZFBvcnRpb25SZWN0KGFuY2VzdG9yQ29tcG9zaXRpbmdCb3VuZHMpOwotICAgICAgICBS
ZW5kZXJCb3hNb2RlbE9iamVjdCYgbGF5ZXJPd25lciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVs
T2JqZWN0PihwYXJlbnRSZWdpb24tPmxheWVyT3duZXIoKSk7Ci0gICAgICAgIFJlbmRlckxheWVy
QmFja2luZyogbGF5ZXJPd25lckJhY2tpbmcgPSBsYXllck93bmVyLmxheWVyKCktPmJhY2tpbmco
KTsKLSAgICAgICAgaWYgKCFsYXllck93bmVyQmFja2luZykKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVnaW9uIHByb3BhZ2F0ZXMgaXRzIGJv
cmRlcnMsIHBhZGRpbmdzLCBvdXRsaW5lcyBvciBib3gtc2hhZG93cyB0byBsYXllcnMgaW5zaWRl
IGl0LgotICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGNvbXBvc2l0ZWQgYm91bmRzIG9mIHRoZSBS
ZW5kZXJSZWdpb24gYXJlIGFscmVhZHkgY2FsY3VsYXRlZCBiZWNhdXNlCi0gICAgICAgIC8vIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlIHdpbGwgb25s
eSBpdGVyYXRlIG9uIHRoZSBjb250ZW50IG9mIHRoZSByZWdpb24gYWZ0ZXIgdGhlCi0gICAgICAg
IC8vIHJlZ2lvbiBpdHNlbGYgaXMgY29tcHV0ZWQuCi0gICAgICAgIGFuY2VzdG9yQ29tcG9zaXRp
bmdCb3VuZHMubW92ZUJ5KHJvdW5kZWRJbnRQb2ludChsYXllck93bmVyQmFja2luZy0+Y29tcG9z
aXRlZEJvdW5kcygpLmxvY2F0aW9uKCkpKTsKLSAgICAgICAgYW5jZXN0b3JDb21wb3NpdGluZ0Jv
dW5kcy5tb3ZlKC1sYXllck93bmVyLmJvcmRlckFuZFBhZGRpbmdTdGFydCgpLCAtbGF5ZXJPd25l
ci5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkpOwotCi0gICAgICAgIC8vIElmIHRoZXJlJ3MgYSBj
bGlwcGluZyBHcmFwaGljc0xheWVyIG9uIHRoZSBoaWVyYXJjaHkgKHJlZ2lvbiBncmFwaGljcyBs
YXllciAtPiBjbGlwcGluZyBncmFwaGljcyBsYXllciAtPgotICAgICAgICAvLyBjb21wb3NpdGVk
IGNvbnRlbnQgZ3JhcGhpY3MgbGF5ZXIpLCBzdWJzdHJhY3QgdGhlIG9mZnNldCBvZiB0aGUgY2xp
cHBpbmcgbGF5ZXIsIHNpbmNlIGl0J3MgaXRzIHBhcmVudAotICAgICAgICAvLyB0aGF0IHBvc2l0
aW9ucyB1cyAodGhlIGdyYXBoaWNzIGxheWVyIG9mIHRoZSByZWdpb24pLgotICAgICAgICBpZiAo
bGF5ZXJPd25lckJhY2tpbmctPmNsaXBwaW5nTGF5ZXIoKSkKLSAgICAgICAgICAgIGFuY2VzdG9y
Q29tcG9zaXRpbmdCb3VuZHMubW92ZUJ5KHJvdW5kZWRJbnRQb2ludChsYXllck93bmVyQmFja2lu
Zy0+Y2xpcHBpbmdMYXllcigpLT5wb3NpdGlvbigpKSk7Ci0gICAgfQotfQotCiB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlRGlyZWN0bHlDb21wb3NpdGVkQm94RGVjb3JhdGlvbnMoUGFp
bnRlZENvbnRlbnRzSW5mbyYgY29udGVudHNJbmZvLCBib29sJiBkaWRVcGRhdGVDb250ZW50c1Jl
Y3QpCiB7CiAgICAgaWYgKCFtX293bmluZ0xheWVyLmhhc1Zpc2libGVDb250ZW50KCkpCkBAIC0y
MDQ0LDkgKzE5OTcsNiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6aXNTaW1wbGVDb250YWlu
CiAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5iYWNrZ3JvdW5kQ2xpcCgpID09IFRleHRGaWxs
Qm94KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KICAgICBpZiAocmVuZGVyZXIoKS5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkgJiYgbV9v
d25pbmdMYXllci5pc29sYXRlc0NvbXBvc2l0ZWRCbGVuZGluZygpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmgJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDkgKzMzNiw2IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHBhaW50SW50b0xheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgUGFpbnRCZWhh
dmlvciwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UpOwogCi0gICAgLy8gSGVscGVyIGZ1bmN0
aW9uIGZvciB1cGRhdGVHZW9tZXRyeS4KLSAgICB2b2lkIGFkanVzdEFuY2VzdG9yQ29tcG9zaXRp
bmdCb3VuZHNGb3JGbG93VGhyZWFkKExheW91dFJlY3QmIGFuY2VzdG9yQ29tcG9zaXRpbmdCb3Vu
ZHMsIGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yKSBjb25zdDsKLQogICAg
IHN0YXRpYyBDU1NQcm9wZXJ0eUlEIGdyYXBoaWNzTGF5ZXJUb0NTU1Byb3BlcnR5KEFuaW1hdGVk
UHJvcGVydHlJRCk7CiAgICAgc3RhdGljIEFuaW1hdGVkUHJvcGVydHlJRCBjc3NUb0dyYXBoaWNz
TGF5ZXJQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDIyMjI2
MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyR2VvbWV0
cnlNYXAuaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ckJhY2tpbmcuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgogI2luY2x1
ZGUgIlJlbmRlclJlcGxpY2EuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKQEAgLTEyNzAsMTcgKzEyNjksNiBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6Y29tcHV0ZUNvbXBvCiAgICAgbGF5ZXIudXBkYXRlRGVzY2VuZGFudERlcGVuZGVu
dEZsYWdzKCk7CiAgICAgbGF5ZXIudXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CiAKLSAgICBp
ZiAobGF5ZXIuaXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25z
KCkpIHsKLSAgICAgICAgYXV0byYgZmxvd1RocmVhZCA9IGRvd25jYXN0PFJlbmRlckZsb3dUaHJl
YWQ+KGxheWVyLnJlbmRlcmVyKCkpOwotICAgICAgICBsYXllci5zZXRIYXNDb21wb3NpdGluZ0Rl
c2NlbmRhbnQoZmxvd1RocmVhZC5oYXNDb21wb3NpdGluZ1JlZ2lvbkRlc2NlbmRhbnQoKSk7Ci0K
LSAgICAgICAgLy8gQmVmb3JlIHJldHVybmluZywgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGxpc3Rz
IG9mIGFsbCBjaGlsZCBsYXllcnMuIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSwKLSAgICAgICAg
Ly8gaWYgdGhpcyBmbG93IHRocmVhZCB3aWxsIG5vdCBiZSBwYWludGVkIChmb3IgaW5zdGFuY2Ug
YmVjYXVzZSBvZiBoYXZpbmcgbm8gcmVnaW9ucywgb3Igb25seSBpbnZhbGlkIHJlZ2lvbnMpLAot
ICAgICAgICAvLyB0aGUgY2hpbGQgbGF5ZXJzIHdpbGwgbmV2ZXIgaGF2ZSB0aGVpciBsaXN0cyB1
cGRhdGVkICh3aGljaCB3b3VsZCBub3JtYWxseSBoYXBwZW4gZHVyaW5nIHBhaW50aW5nKS4KLSAg
ICAgICAgbGF5ZXIudXBkYXRlRGVzY2VuZGFudHNMYXllckxpc3RzSWZOZWVkZWQodHJ1ZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBDbGVhciB0aGUgZmxhZwogICAgIGxheWVy
LnNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChmYWxzZSk7CiAgICAgbGF5ZXIuc2V0SW5kaXJl
Y3RDb21wb3NpdGluZ1JlYXNvbihSZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNv
bjo6Tm9uZSk7CkBAIC0xMzc0LDE1ICsxMzYyLDYgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmNvbXB1dGVDb21wbwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotCi0gICAg
aWYgKGxheWVyLnJlbmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigp
KSB7Ci0gICAgICAgIC8vIFdlIGFyZSBnb2luZyB0byBjb2xsZWN0IGxheWVycyBmcm9tIHRoZSBS
ZW5kZXJGbG93VGhyZWFkIGludG8gdGhlIEdyYXBoaWNzTGF5ZXIgb2YgdGhlIHBhcmVudCBvZiB0
aGUKLSAgICAgICAgLy8gYW5vbnltb3VzIFJlbmRlclJlZ2lvbiwgYnV0IGZpcnN0IHdlIG5lZWQg
dG8gbWFrZSBzdXJlIHRoYXQgdGhlIHBhcmVudCBpdHNlbGYgb2YgdGhlIHJlZ2lvbiBpcyBnb2lu
ZyB0bwotICAgICAgICAvLyBoYXZlIGEgY29tcG9zaXRlZCBsYXllci4gV2Ugb25seSB3YW50IHRv
IG1ha2UgcmVnaW9ucyBjb21wb3NpdGVkIHdoZW4gdGhlcmUncyBhbiBhY3R1YWwgbGF5ZXIgdGhh
dCB3ZQotICAgICAgICAvLyBuZWVkIHRvIG1vdmUgdG8gdGhhdCByZWdpb24uCi0gICAgICAgIGNv
bXB1dGVSZWdpb25Db21wb3NpdGluZ1JlcXVpcmVtZW50cyhkb3duY2FzdDxSZW5kZXJCbG9ja0Zs
b3c+KGxheWVyLnJlbmRlcmVyKCkpLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCksIG92ZXJsYXBN
YXAsIGNoaWxkU3RhdGUsIGxheWVyc0NoYW5nZWQsIGFueURlc2NlbmRhbnRIYXMzRFRyYW5zZm9y
bSk7Ci0gICAgfQotCiAgICAgCiAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBub3JtYWxG
bG93TGlzdCA9IGxheWVyLm5vcm1hbEZsb3dMaXN0KCkpIHsKICAgICAgICAgZm9yIChhdXRvKiBy
ZW5kZXJMYXllciA6ICpub3JtYWxGbG93TGlzdCkKQEAgLTE0OTIsMjUgKzE0NzEsNiBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvCiAgICAgb3ZlcmxhcE1hcC5nZW9t
ZXRyeU1hcCgpLnBvcE1hcHBpbmdzVG9BbmNlc3RvcihhbmNlc3RvckxheWVyKTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVSZWdpb25Db21wb3NpdGluZ1JlcXVpcmVt
ZW50cyhSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVnaW9uLCBPdmVybGFwTWFwJiBvdmVybGFw
TWFwLCBDb21wb3NpdGluZ1N0YXRlJiBjaGlsZFN0YXRlLCBib29sJiBsYXllcnNDaGFuZ2VkLCBi
b29sJiBhbnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pCi17Ci0gICAgaWYgKCFyZWdpb24tPmlz
VmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1Ro
cmVhZCA9IHJlZ2lvbi0+Zmxvd1RocmVhZCgpOwotICAgIAotICAgIG92ZXJsYXBNYXAuZ2VvbWV0
cnlNYXAoKS5wdXNoUmVuZGVyRmxvd1RocmVhZChmbG93VGhyZWFkKTsKLQotICAgIGlmIChjb25z
dCBSZW5kZXJMYXllckxpc3QqIGxheWVyTGlzdCA9IGZsb3dUaHJlYWQtPmdldExheWVyTGlzdEZv
clJlZ2lvbihyZWdpb24pKSB7Ci0gICAgICAgIGZvciAoYXV0byogcmVuZGVyTGF5ZXIgOiAqbGF5
ZXJMaXN0KSB7Ci0gICAgICAgICAgICBBU1NFUlQoZmxvd1RocmVhZC0+cmVnaW9uRm9yQ29tcG9z
aXRlZExheWVyKCpyZW5kZXJMYXllcikgPT0gcmVnaW9uKTsKLSAgICAgICAgICAgIGNvbXB1dGVD
b21wb3NpdGluZ1JlcXVpcmVtZW50cyhmbG93VGhyZWFkLT5sYXllcigpLCAqcmVuZGVyTGF5ZXIs
IG92ZXJsYXBNYXAsIGNoaWxkU3RhdGUsIGxheWVyc0NoYW5nZWQsIGFueURlc2NlbmRhbnRIYXMz
RFRyYW5zZm9ybSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBvdmVybGFwTWFwLmdlb21ldHJ5
TWFwKCkucG9wTWFwcGluZ3NUb0FuY2VzdG9yKCZyZWdpb24tPmxheWVyT3duZXIoKSk7Ci19Ci0K
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRDb21wb3NpdGluZ1BhcmVudChSZW5kZXJM
YXllciYgY2hpbGRMYXllciwgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyKQogewogICAgIEFTU0VS
VCghcGFyZW50TGF5ZXIgfHwgY2hpbGRMYXllci5hbmNlc3RvckNvbXBvc2l0aW5nTGF5ZXIoKSA9
PSBwYXJlbnRMYXllcik7CkBAIC0xNTU0LDEwICsxNTE0LDYgQEAgdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnJlYnVpbGRDb21wbwogICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4gb25seSBkbyB3
b3JrIGhlcmUgdGhhdCBpcyBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZSBkZXNjZW5kYW50IGxh
eWVycwogICAgIC8vIGhhdmUgYmVlbiBwcm9jZXNzZWQuIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVp
cmVtZW50cygpIHdpbGwgYWxyZWFkeSBoYXZlIGRvbmUgdGhlIHJlcGFpbnQgaWYgbmVjZXNzYXJ5
LgogCi0gICAgLy8gRG8gbm90IGl0ZXJhdGUgdGhlIFJlbmRlckZsb3dUaHJlYWQgZGlyZWN0bHku
IFdlIGFyZSBnb2luZyB0byBjb2xsZWN0IGNvbXBvc2l0ZWQgbGF5ZXJzIGFzIHBhcnQgb2YgcmVn
aW9ucy4KLSAgICBpZiAobGF5ZXIuaXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJz
VW5kZXJSZWdpb25zKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIFJlbmRlckxheWVyQmFja2lu
ZyogbGF5ZXJCYWNraW5nID0gbGF5ZXIuYmFja2luZygpOwogICAgIGlmIChsYXllckJhY2tpbmcp
IHsKICAgICAgICAgLy8gVGhlIGNvbXBvc2l0aW5nIHN0YXRlIG9mIGFsbCBvdXIgY2hpbGRyZW4g
aGFzIGJlZW4gdXBkYXRlZCBhbHJlYWR5LCBzbyBub3cKQEAgLTE2MDYsOSArMTU2Miw2IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxkQ29tcG8KICAgICAgICAgICAgIGNoaWxk
TGlzdC5hcHBlbmQobGF5ZXJCYWNraW5nLT5mb3JlZ3JvdW5kTGF5ZXIoKSk7CiAgICAgfQogCi0g
ICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5l
cigpKQotICAgICAgICByZWJ1aWxkUmVnaW9uQ29tcG9zaXRpbmdMYXllclRyZWUoZG93bmNhc3Q8
UmVuZGVyQmxvY2tGbG93PihsYXllci5yZW5kZXJlcigpKS5yZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCgpLCBsYXllckNoaWxkcmVuLCBkZXB0aCArIDEpOwotCiAgICAgaWYgKFZlY3RvcjxSZW5kZXJM
YXllcio+KiBub3JtYWxGbG93TGlzdCA9IGxheWVyLm5vcm1hbEZsb3dMaXN0KCkpIHsKICAgICAg
ICAgZm9yIChhdXRvKiByZW5kZXJMYXllciA6ICpub3JtYWxGbG93TGlzdCkKICAgICAgICAgICAg
IHJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZSgqcmVuZGVyTGF5ZXIsIGNoaWxkTGlzdCwgZGVw
dGggKyAxKTsKQEAgLTE2NTUsMjEgKzE2MDgsNiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVidWlsZENvbXBvCiAgICAgICAgIGxheWVyQmFja2luZy0+dXBkYXRlQWZ0ZXJEZXNjZW5k
YW50cygpOwogfQogCi12b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZFJlZ2lvbkNv
bXBvc2l0aW5nTGF5ZXJUcmVlKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZWdpb24sIFZlY3Rv
cjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCwgaW50IGRlcHRoKQotewotICAgIGlmICghcmVn
aW9uLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckZsb3dUaHJlYWQq
IGZsb3dUaHJlYWQgPSByZWdpb24tPmZsb3dUaHJlYWQoKTsKLSAgICBBU1NFUlQoZmxvd1RocmVh
ZC0+Y29sbGVjdHNHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKTsKLSAgICBpZiAoY29uc3Qg
UmVuZGVyTGF5ZXJMaXN0KiBsYXllckxpc3QgPSBmbG93VGhyZWFkLT5nZXRMYXllckxpc3RGb3JS
ZWdpb24ocmVnaW9uKSkgewotICAgICAgICBmb3IgKGF1dG8qIHJlbmRlckxheWVyIDogKmxheWVy
TGlzdCkgewotICAgICAgICAgICAgQVNTRVJUKGZsb3dUaHJlYWQtPnJlZ2lvbkZvckNvbXBvc2l0
ZWRMYXllcigqcmVuZGVyTGF5ZXIpID09IHJlZ2lvbik7Ci0gICAgICAgICAgICByZWJ1aWxkQ29t
cG9zaXRpbmdMYXllclRyZWUoKnJlbmRlckxheWVyLCBjaGlsZExpc3QsIGRlcHRoICsgMSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZp
ZXdEaWRDaGFuZ2VMb2NhdGlvbihjb25zdCBJbnRQb2ludCYgY29udGVudHNPZmZzZXQpCiB7CiAg
ICAgaWYgKG1fb3ZlcmZsb3dDb250cm9sc0hvc3RMYXllcikKQEAgLTI1ODIsNyArMjUyMCw3IEBA
IGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXAKIAogICAgIC8vIFdoZW4g
YSBsYXllciBoYXMgY29tcG9zaXRlZCBkZXNjZW5kYW50cywgc29tZSBlZmZlY3RzLCBsaWtlIDJk
IHRyYW5zZm9ybXMsIGZpbHRlcnMsIG1hc2tzIGV0YyBtdXN0IGJlIGltcGxlbWVudGVkCiAgICAg
Ly8gdmlhIGNvbXBvc2l0aW5nIHNvIHRoYXQgdGhleSBhbHNvIGFwcGx5IHRvIHRob3NlIGNvbXBv
c2l0ZWQgZGVzY2VuZGFudHMuCi0gICAgaWYgKGhhc0NvbXBvc2l0ZWREZXNjZW5kYW50cyAmJiAo
bGF5ZXIuaXNvbGF0ZXNDb21wb3NpdGVkQmxlbmRpbmcoKSB8fCBsYXllci50cmFuc2Zvcm0oKSB8
fCByZW5kZXJlci5jcmVhdGVzR3JvdXAoKSB8fCByZW5kZXJlci5oYXNSZWZsZWN0aW9uKCkgfHwg
cmVuZGVyZXIuaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpKSkgeworICAgIGlm
IChoYXNDb21wb3NpdGVkRGVzY2VuZGFudHMgJiYgKGxheWVyLmlzb2xhdGVzQ29tcG9zaXRlZEJs
ZW5kaW5nKCkgfHwgbGF5ZXIudHJhbnNmb3JtKCkgfHwgcmVuZGVyZXIuY3JlYXRlc0dyb3VwKCkg
fHwgcmVuZGVyZXIuaGFzUmVmbGVjdGlvbigpKSkgewogICAgICAgICByZWFzb24gPSBSZW5kZXJM
YXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6R3JhcGhpY2FsRWZmZWN0OwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yNjA3LDkgKzI1NDUsNiBAQCBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpzdHlsZUNoYW5nZU1heUFmZmVjdEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb25zKGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgb2xkU3R5
bGUpCiB7Ci0gICAgaWYgKHJlbmRlcmVyLmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWlu
ZXIoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KICAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVy
LnN0eWxlKCk7CiAgICAgaWYgKFJlbmRlckVsZW1lbnQ6OmNyZWF0ZXNHcm91cEZvclN0eWxlKHN0
eWxlKSAhPSBSZW5kZXJFbGVtZW50OjpjcmVhdGVzR3JvdXBGb3JTdHlsZShvbGRTdHlsZSkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjc0MCw3ICsyNjc1LDcgQEAgYm9vbCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcAogCiAgICAgLy8gRG9uJ3QgcHJvbW90ZSBmaXhlZCBw
b3NpdGlvbiBlbGVtZW50cyB0aGF0IGFyZSBkZXNjZW5kYW50cyBvZiBhIG5vbi12aWV3IGNvbnRh
aW5lciwgZS5nLiB0cmFuc2Zvcm1lZCBlbGVtZW50cy4KICAgICAvLyBUaGV5IHdpbGwgc3RheSBm
aXhlZCB3cnQgdGhlIGNvbnRhaW5lciByYXRoZXIgdGhhbiB0aGUgZW5jbG9zaW5nIGZyYW1lLgot
ICAgIGlmIChjb250YWluZXIgIT0gJm1fcmVuZGVyVmlldyAmJiAhcmVuZGVyZXIuZml4ZWRQb3Np
dGlvbmVkV2l0aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jaygpKSB7CisgICAgaWYgKGNvbnRhaW5l
ciAhPSAmbV9yZW5kZXJWaWV3KSB7CiAgICAgICAgIGlmICh2aWV3cG9ydENvbnN0cmFpbmVkTm90
Q29tcG9zaXRlZFJlYXNvbikKICAgICAgICAgICAgICp2aWV3cG9ydENvbnN0cmFpbmVkTm90Q29t
cG9zaXRlZFJlYXNvbiA9IFJlbmRlckxheWVyOjpOb3RDb21wb3NpdGVkRm9yTm9uVmlld0NvbnRh
aW5lcjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkocmV2aXNpb24gMjIyMjYzKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw2IEBAIGNsYXNzIEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0
cmFpbnRzOwogY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIEdyYXBoaWNzTGF5ZXJVcGRhdGVy
OwogY2xhc3MgUmVuZGVyRW1iZWRkZWRPYmplY3Q7Ci1jbGFzcyBSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudDsKIGNsYXNzIFJlbmRlclZpZGVvOwogY2xhc3MgUmVuZGVyV2lkZ2V0OwogY2xhc3MgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I7CkBAIC0zNjksMTUgKzM2OCw5IEBAIHByaXZhdGU6CiAgICAgLy8g
UmV0dXJucyB0cnVlIGlmIGFueSBsYXllcidzIGNvbXBvc2l0aW5nIGNoYW5nZWQKICAgICB2b2lk
IGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciogYW5jZXN0b3JMYXll
ciwgUmVuZGVyTGF5ZXImLCBPdmVybGFwTWFwJiwgQ29tcG9zaXRpbmdTdGF0ZSYsIGJvb2wmIGxh
eWVyc0NoYW5nZWQsIGJvb2wmIGRlc2NlbmRhbnRIYXMzRFRyYW5zZm9ybSk7CiAKLSAgICB2b2lk
IGNvbXB1dGVSZWdpb25Db21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCosIE92ZXJsYXBNYXAmLCBDb21wb3NpdGluZ1N0YXRlJiwgYm9vbCYgbGF5ZXJzQ2hhbmdl
ZCwgYm9vbCYgYW55RGVzY2VuZGFudEhhczNEVHJhbnNmb3JtKTsKLQogICAgIC8vIFJlY3Vyc2Vz
IGRvd24gdGhlIHRyZWUsIHBhcmVudGluZyBkZXNjZW5kYW50IGNvbXBvc2l0aW5nIGxheWVycyBh
bmQgY29sbGVjdGluZyBhbiBhcnJheSBvZiBjaGlsZCBsYXllcnMgZm9yIHRoZSBjdXJyZW50IGNv
bXBvc2l0aW5nIGxheWVyLgogICAgIHZvaWQgcmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKFJl
bmRlckxheWVyJiwgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRHcmFwaGljc0xheWVyc09m
RW5jbG9zaW5nTGF5ZXIsIGludCBkZXB0aCk7CiAKLSAgICAvLyBSZWN1cnNlcyBkb3duIHRoZSBS
ZW5kZXJGbG93VGhyZWFkIHRyZWUsIHBhcmVudGluZyBkZXNjZW5kYW50IGNvbXBvc2l0aW5nIGxh
eWVycyBhbmQgY29sbGVjdGluZyBhbiBhcnJheSBvZiBjaGlsZCAKLSAgICAvLyBsYXllcnMgZm9y
IHRoZSBjdXJyZW50IGNvbXBvc2l0aW5nIGxheWVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFub255
bW91cyByZWdpb24gKHRoYXQgYmVsb25ncyB0byB0aGUgcmVnaW9uJ3MgcGFyZW50KS4KLSAgICB2
b2lkIHJlYnVpbGRSZWdpb25Db21wb3NpdGluZ0xheWVyVHJlZShSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCosIFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCwgaW50IGRlcHRoKTsKLQog
ICAgIC8vIFJlY3Vyc2VzIGRvd24gdGhlIHRyZWUsIHVwZGF0aW5nIGxheWVyIGdlb21ldHJ5IG9u
bHkuCiAgICAgdm9pZCB1cGRhdGVMYXllclRyZWVHZW9tZXRyeShSZW5kZXJMYXllciYsIGludCBk
ZXB0aCk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0MzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBZG9iZSBTeXN0
ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IK
LSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKLQotI2lu
Y2x1ZGUgIlBhaW50SW5mby5oIgotI2luY2x1ZGUgIlJlbmRlckJveFJlZ2lvbkluZm8uaCIKLSNp
bmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCi0jaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIK
LSNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0j
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgotCi0jaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6UmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxl
KQotICAgIDogUmVuZGVyUmVnaW9uKGRvY3VtZW50LCBXVEZNb3ZlKHN0eWxlKSwgbnVsbHB0cikK
LSAgICAsIG1faGFzQ3VzdG9tUmVnaW9uU3R5bGUoZmFsc2UpCi0gICAgLCBtX2hhc0F1dG9Mb2dp
Y2FsSGVpZ2h0KGZhbHNlKQotICAgICwgbV9oYXNDb21wdXRlZEF1dG9IZWlnaHQoZmFsc2UpCi0g
ICAgLCBtX2NvbXB1dGVkQXV0b0hlaWdodCgwKQotewotfQotCi1SZW5kZXJOYW1lZEZsb3dGcmFn
bWVudDo6flJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkKLXsKLX0KLQotUmVuZGVyU3R5bGUgUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNyZWF0ZVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJl
bnRTdHlsZSkKLXsKLSAgICBhdXRvIHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91
c1N0eWxlV2l0aERpc3BsYXkocGFyZW50U3R5bGUsIEJMT0NLKTsKLQotICAgIHN0eWxlLnNldEZs
b3dUaHJlYWQocGFyZW50U3R5bGUuZmxvd1RocmVhZCgpKTsKLSAgICBzdHlsZS5zZXRSZWdpb25U
aHJlYWQocGFyZW50U3R5bGUucmVnaW9uVGhyZWFkKCkpOwotICAgIHN0eWxlLnNldFJlZ2lvbkZy
YWdtZW50KHBhcmVudFN0eWxlLnJlZ2lvbkZyYWdtZW50KCkpOwotCi0gICAgcmV0dXJuIHN0eWxl
OwotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojp1cGRhdGVSZWdpb25GbGFncygp
Ci17Ci0gICAgY2hlY2tSZWdpb25TdHlsZSgpOwotICAgIHVwZGF0ZVJlZ2lvbkhhc0F1dG9Mb2dp
Y2FsSGVpZ2h0RmxhZygpOwotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKQotewotICAgIFJlbmRlclJlZ2lvbjo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUp
OwotCi0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZVJl
Z2lvbkZsYWdzKCk7Ci0KLSAgICBpZiAocGFyZW50KCkgJiYgcGFyZW50KCktPm5lZWRzTGF5b3V0
KCkpCi0gICAgICAgIHNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmdldFJhbmdlcyhWZWN0b3I8UmVmUHRyPFJhbmdlPj4mKSBj
b25zdAotewotfQotCi1ib29sIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpzaG91bGRIYXZlQXV0
b0xvZ2ljYWxIZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChwYXJlbnQoKSk7Ci0KLSAgICBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHBhcmVudCgpLT5zdHlsZSgpOwotICAgIGJv
b2wgaGFzU3BlY2lmaWVkRW5kcG9pbnRzRm9ySGVpZ2h0ID0gc3R5bGVUb1VzZS5sb2dpY2FsVG9w
KCkuaXNTcGVjaWZpZWQoKSAmJiBzdHlsZVRvVXNlLmxvZ2ljYWxCb3R0b20oKS5pc1NwZWNpZmll
ZCgpOwotICAgIGJvb2wgaGFzQW5jaG9yZWRFbmRwb2ludHNGb3JIZWlnaHQgPSBwYXJlbnQoKS0+
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgaGFzU3BlY2lmaWVkRW5kcG9pbnRzRm9ySGVpZ2h0
OwotICAgIHJldHVybiBzdHlsZVRvVXNlLmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSAmJiAhaGFz
QW5jaG9yZWRFbmRwb2ludHNGb3JIZWlnaHQ7Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQ6OmluY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKQotewotICAgIEFTU0VSVChp
c1ZhbGlkKCkpOwotICAgIEFTU0VSVChtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0KTsKLQotICAgIG1f
Zmxvd1RocmVhZC0+aW5jcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCk7Ci19Ci0KLXZv
aWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291
bnQoKQotewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotCi0gICAgbV9mbG93VGhyZWFkLT5kZWNy
ZW1lbnRBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKTsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudDo6dXBkYXRlUmVnaW9uSGFzQXV0b0xvZ2ljYWxIZWlnaHRGbGFnKCkKLXsKLSAg
ICBBU1NFUlQoaXNWYWxpZCgpKTsKLQotICAgIGJvb2wgZGlkSGF2ZUF1dG9Mb2dpY2FsSGVpZ2h0
ID0gbV9oYXNBdXRvTG9naWNhbEhlaWdodDsKLSAgICBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0ID0g
c2hvdWxkSGF2ZUF1dG9Mb2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYgKGRpZEhhdmVBdXRvTG9naWNh
bEhlaWdodCA9PSBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9oYXNBdXRvTG9naWNhbEhlaWdodCkKLSAgICAgICAgaW5jcmVtZW50QXV0b0xvZ2lj
YWxIZWlnaHRDb3VudCgpOwotICAgIGVsc2UgewotICAgICAgICBjbGVhckNvbXB1dGVkQXV0b0hl
aWdodCgpOwotICAgICAgICBkZWNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCk7Ci0gICAg
fQotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojp1cGRhdGVMb2dpY2FsSGVpZ2h0
KCkKLXsKLSAgICBSZW5kZXJSZWdpb246OnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKLQotICAgIGlm
ICghaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2Ug
d2FudCB0byB1cGRhdGUgdGhlIGxvZ2ljYWwgaGVpZ2h0IGJhc2VkIG9uIHRoZSBjb21wdXRlZCBh
dXRvLWhlaWdodAotICAgIC8vIG9ubHkgYWZ0ZXIgdGhlIG1lYXN1cmUgY290bmVudCBsYXlvdXQg
cGhhc2Ugd2hlbiBhbGwgdGhlCi0gICAgLy8gYXV0byBsb2dpY2FsIGhlaWdodCByZWdpb25zIGhh
dmUgYSBjb21wdXRlZCBhdXRvLWhlaWdodC4KLSAgICBpZiAobV9mbG93VGhyZWFkLT5pbk1lYXN1
cmVDb250ZW50TGF5b3V0UGhhc2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlcmUg
bWF5IGJlIHJlZ2lvbnMgd2l0aCBhdXRvIGxvZ2ljYWwgaGVpZ2h0IHRoYXQgZHVyaW5nIHRoZSBw
cmVyZXF1aXNpdGUgbGF5b3V0IHBoYXNlCi0gICAgLy8gZGlkIG5vdCBoYXZlIHRoZSBjaGFuY2Ug
dG8gbGF5b3V0IGZsb3cgdGhyZWFkIGNvbnRlbnQuIEJlY2F1c2Ugb2YgdGhhdCwgdGhlc2UgcmVn
aW9ucyBkbyBub3QKLSAgICAvLyBoYXZlIGEgY29tcHV0ZWRBdXRvSGVpZ2h0IGFuZCB0aGV5IHdp
bGwgbm90IGJlIGFibGUgdG8gZnJhZ21lbnQgYW55IGZsb3cKLSAgICAvLyB0aHJlYWQgY29udGVu
dC4KLSAgICBpZiAoIWhhc0NvbXB1dGVkQXV0b0hlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBMYXlvdXRVbml0IG5ld0xvZ2ljYWxIZWlnaHQgPSBjb21wdXRlZEF1dG9IZWlnaHQoKSAr
IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgQVNTRVJUKG5ld0xvZ2ljYWxI
ZWlnaHQgPCBSZW5kZXJGbG93VGhyZWFkOjptYXhMb2dpY2FsSGVpZ2h0KCkpOwotICAgIGlmIChu
ZXdMb2dpY2FsSGVpZ2h0ID4gbG9naWNhbEhlaWdodCgpKSB7Ci0gICAgICAgIHNldExvZ2ljYWxI
ZWlnaHQobmV3TG9naWNhbEhlaWdodCk7Ci0gICAgICAgIC8vIFJlY2FsY3VsYXRlIHBvc2l0aW9u
IG9mIHRoZSByZW5kZXIgYmxvY2sgYWZ0ZXIgbmV3IGxvZ2ljYWwgaGVpZ2h0IGlzIHNldC4KLSAg
ICAgICAgLy8gKG5lZWRlZCBpbiBhYnNvbHV0ZSBwb3NpdGlvbmluZyBjYXNlIHdpdGggYm90dG9t
IGFsaWdubWVudCBmb3IgZXhhbXBsZSkKLSAgICAgICAgUmVuZGVyUmVnaW9uOjp1cGRhdGVMb2dp
Y2FsSGVpZ2h0KCk7Ci0gICAgfQotfQotCi1MYXlvdXRVbml0IFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50OjpwYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7
Ci0gICAgaWYgKGhhc0NvbXB1dGVkQXV0b0hlaWdodCgpICYmIG1fZmxvd1RocmVhZC0+aW5NZWFz
dXJlQ29udGVudExheW91dFBoYXNlKCkpIHsKLSAgICAgICAgQVNTRVJUKGhhc0F1dG9Mb2dpY2Fs
SGVpZ2h0KCkpOwotICAgICAgICByZXR1cm4gY29tcHV0ZWRBdXRvSGVpZ2h0KCk7Ci0gICAgfQot
ICAgIHJldHVybiBtX2Zsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjb250
ZW50SGVpZ2h0KCkgOiBjb250ZW50V2lkdGgoKTsKLX0KLQotLy8gVGhpcyBtZXRob2QgcmV0dXJu
cyB0aGUgbWF4aW11bSBwYWdlIHNpemUgb2YgYSByZWdpb24gd2l0aCBhdXRvLWhlaWdodC4gVGhp
cyBpcyB0aGUgaW5pdGlhbAotLy8gaGVpZ2h0IHZhbHVlIGZvciBhdXRvLWhlaWdodCByZWdpb25z
IGluIHRoZSBmaXJzdCBsYXlvdXQgcGhhc2Ugb2YgdGhlIHBhcmVudCBuYW1lZCBmbG93LgotTGF5
b3V0VW5pdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6bWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSBj
b25zdAotewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotICAgIEFTU0VSVChoYXNBdXRvTG9naWNh
bEhlaWdodCgpICYmIG1fZmxvd1RocmVhZC0+aW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkp
OwotICAgIEFTU0VSVChpc0Fub255bW91cygpKTsKLSAgICBBU1NFUlQocGFyZW50KCkpOwotCi0g
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBwYXJlbnQoKS0+c3R5bGUoKTsKLSAg
ICByZXR1cm4gc3R5bGVUb1VzZS5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/IFJl
bmRlckZsb3dUaHJlYWQ6Om1heExvZ2ljYWxIZWlnaHQoKSA6IGRvd25jYXN0PFJlbmRlckJsb2Nr
PigqcGFyZW50KCkpLmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhNYXhTaXplLCBz
dHlsZVRvVXNlLmxvZ2ljYWxNYXhIZWlnaHQoKSk7Ci19Ci0KLUxheW91dFJlY3QgUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQ6OmZsb3dUaHJlYWRQb3J0aW9uUmVjdEZvckNsaXBwaW5nKGJvb2wgaXNG
aXJzdFJlZ2lvbkluUmFuZ2UsIGJvb2wgaXNMYXN0UmVnaW9uSW5SYW5nZSkgY29uc3QKLXsKLSAg
ICAvLyBFbGVtZW50cyBmbG93ZWQgaW50byBhIHJlZ2lvbiBzaG91bGQgbm90IGJlIHBhaW50ZWQg
cGFzdCB0aGUgcmVnaW9uJ3MgY29udGVudCBib3gKLSAgICAvLyBpZiB0aGV5IGNvbnRpbnVlIHRv
IGZsb3cgaW50byBhbm90aGVyIHJlZ2lvbiBpbiB0aGF0IGRpcmVjdGlvbi4KLSAgICAvLyBJZiB0
aGV5IGRvIG5vdCBjb250aW51ZSBpbnRvIGFub3RoZXIgcmVnaW9uIGluIHRoYXQgZGlyZWN0aW9u
LCB0aGV5IHNob3VsZCBiZQotICAgIC8vIHBhaW50ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIHJlZ2lv
bidzIGJvcmRlciBib3guCi0gICAgLy8gUmVnaW9ucyB3aXRoIG92ZXJmbG93OmhpZGRlbiB3aWxs
IGFwcGx5IGNsaXAgYXQgdGhlIGJvcmRlciBib3gsIG5vdCB0aGUgY29udGVudCBib3guCi0gICAg
Ci0gICAgTGF5b3V0UmVjdCBjbGlwcGluZ1JlY3QgPSBmbG93VGhyZWFkUG9ydGlvblJlY3QoKTsK
LSAgICBSZW5kZXJCbG9ja0Zsb3cmIGNvbnRhaW5lciA9IGZyYWdtZW50Q29udGFpbmVyKCk7Ci0g
ICAgaWYgKGNvbnRhaW5lci5zdHlsZSgpLmhhc1BhZGRpbmcoKSkgewotICAgICAgICBpZiAoaXNG
aXJzdFJlZ2lvbkluUmFuZ2UpIHsKLSAgICAgICAgICAgIGlmIChmbG93VGhyZWFkKCktPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBjbGlwcGluZ1JlY3QubW92
ZSgwLCAtY29udGFpbmVyLnBhZGRpbmdCZWZvcmUoKSk7Ci0gICAgICAgICAgICAgICAgY2xpcHBp
bmdSZWN0LmV4cGFuZCgwLCBjb250YWluZXIucGFkZGluZ0JlZm9yZSgpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2xpcHBpbmdSZWN0Lm1vdmUoLWNvbnRhaW5lci5w
YWRkaW5nQmVmb3JlKCksIDApOwotICAgICAgICAgICAgICAgIGNsaXBwaW5nUmVjdC5leHBhbmQo
Y29udGFpbmVyLnBhZGRpbmdCZWZvcmUoKSwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChpc0xhc3RSZWdpb25JblJhbmdlKSB7Ci0gICAgICAgICAg
ICBpZiAoZmxvd1RocmVhZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAg
ICAgICAgIGNsaXBwaW5nUmVjdC5leHBhbmQoMCwgY29udGFpbmVyLnBhZGRpbmdBZnRlcigpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjbGlwcGluZ1JlY3QuZXhwYW5kKGNv
bnRhaW5lci5wYWRkaW5nQWZ0ZXIoKSwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChmbG93VGhyZWFkKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAg
ICAgIGNsaXBwaW5nUmVjdC5tb3ZlKC1jb250YWluZXIucGFkZGluZ1N0YXJ0KCksIDApOwotICAg
ICAgICAgICAgY2xpcHBpbmdSZWN0LmV4cGFuZChjb250YWluZXIucGFkZGluZ1N0YXJ0KCkgKyBj
b250YWluZXIucGFkZGluZ0VuZCgpLCAwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGNsaXBwaW5nUmVjdC5tb3ZlKDAsIC1jb250YWluZXIucGFkZGluZ1N0YXJ0KCkpOwotICAgICAg
ICAgICAgY2xpcHBpbmdSZWN0LmV4cGFuZCgwLCBjb250YWluZXIucGFkZGluZ1N0YXJ0KCkgKyBj
b250YWluZXIucGFkZGluZ0VuZCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gY2xpcHBpbmdSZWN0OwotfQotCi1SZW5kZXJCbG9ja0Zsb3cmIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50OjpmcmFnbWVudENvbnRhaW5lcigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHBhcmVudCgp
KTsKLSAgICBBU1NFUlQocGFyZW50KCktPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWlu
ZXIoKSk7Ci0gICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnBhcmVudCgpKTsK
LX0KLQotUmVuZGVyTGF5ZXImIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpmcmFnbWVudENvbnRh
aW5lckxheWVyKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZnJhZ21lbnRDb250YWluZXIoKS5sYXll
cigpKTsKLSAgICByZXR1cm4gKmZyYWdtZW50Q29udGFpbmVyKCkubGF5ZXIoKTsKLX0KLQotYm9v
bCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6c2hvdWxkQ2xpcEZsb3dUaHJlYWRDb250ZW50KCkg
Y29uc3QKLXsKLSAgICBpZiAoZnJhZ21lbnRDb250YWluZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIGlzTGFzdFJlZ2lvbigpICYm
IChzdHlsZSgpLnJlZ2lvbkZyYWdtZW50KCkgPT0gQnJlYWtSZWdpb25GcmFnbWVudCk7Ci19Ci0g
ICAgCi1MYXlvdXRTaXplIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpvZmZzZXRGcm9tQ29udGFp
bmVyKFJlbmRlckVsZW1lbnQmIGNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmLCBib29sKikg
Y29uc3QKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGNvbnRhaW5lciwgJmZyYWdtZW50Q29udGFpbmVy
KCkgPT0gJmNvbnRhaW5lcik7Ci0gICAgQVNTRVJUX1VOVVNFRChjb250YWluZXIsIHRoaXMtPmNv
bnRhaW5lcigpID09ICZjb250YWluZXIpOwotICAgIHJldHVybiB0b3BMZWZ0TG9jYXRpb25PZmZz
ZXQoKTsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6bGF5b3V0QmxvY2soYm9v
bCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQotewotICAgIFN0YWNrU3RhdHM6OkxheW91
dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKLSAgICBSZW5kZXJSZWdpb246OmxheW91dEJs
b2NrKHJlbGF5b3V0Q2hpbGRyZW4pOwotCi0gICAgaWYgKGlzVmFsaWQoKSkgewotICAgICAgICBp
ZiAobV9mbG93VGhyZWFkLT5pbk92ZXJmbG93TGF5b3V0UGhhc2UoKSB8fCBtX2Zsb3dUaHJlYWQt
PmluRmluYWxMYXlvdXRQaGFzZSgpKQotICAgICAgICAgICAgY29tcHV0ZU92ZXJmbG93RnJvbUZs
b3dUaHJlYWQoKTsKLQotICAgICAgICBpZiAoaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSAmJiBtX2Zs
b3dUaHJlYWQtPmluTWVhc3VyZUNvbnRlbnRMYXlvdXRQaGFzZSgpKSB7Ci0gICAgICAgICAgICBt
X2Zsb3dUaHJlYWQtPmludmFsaWRhdGVSZWdpb25zKCk7Ci0gICAgICAgICAgICBjbGVhckNvbXB1
dGVkQXV0b0hlaWdodCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjppbnZhbGlkYXRlUmVnaW9uSWZOZWVk
ZWQoKQotewotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlv
dXRSZWN0IG9sZFJlZ2lvblJlY3QoZmxvd1RocmVhZFBvcnRpb25SZWN0KCkpOwotICAgIGlmICgh
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgb2xkUmVnaW9uUmVjdCA9IG9sZFJl
Z2lvblJlY3QudHJhbnNwb3NlZFJlY3QoKTsKLQotICAgIGlmICgob2xkUmVnaW9uUmVjdC53aWR0
aCgpICE9IHBhZ2VMb2dpY2FsV2lkdGgoKSB8fCBvbGRSZWdpb25SZWN0LmhlaWdodCgpICE9IHBh
Z2VMb2dpY2FsSGVpZ2h0KCkpICYmICFtX2Zsb3dUaHJlYWQtPmluRmluYWxMYXlvdXRQaGFzZSgp
KSB7Ci0gICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBldmVuIGlmIHdlIGFyZSBpbiB0aGUgaW5D
b25zdHJhaW5lZExheW91dFBoYXNlIGFuZCBpdCB3aWxsIHRyaWdnZXIgYSBwYXRob2xvZ2ljYWwg
bGF5b3V0IG9mIHRoZSBmbG93IHRocmVhZC4KLSAgICAgICAgbV9mbG93VGhyZWFkLT5pbnZhbGlk
YXRlUmVnaW9ucygpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6
Y2hlY2tSZWdpb25TdHlsZSgpCi17Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0KLSAgICBib29s
IGN1c3RvbVJlZ2lvblN0eWxlID0gZmFsc2U7Ci0KLSAgICBzZXRIYXNDdXN0b21SZWdpb25TdHls
ZShjdXN0b21SZWdpb25TdHlsZSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1l
bnQmLCBjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNvbXB1dGVDaGlsZHJlblN0eWxlSW5S
ZWdpb24oUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCi17Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6
IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkgewotICAgICAgICBhdXRv
IGl0ID0gbV9yZW5kZXJlclJlZ2lvblN0eWxlLmZpbmQoJmNoaWxkKTsKLQotICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGNoaWxkU3R5bGVJblJlZ2lvbjsKLSAgICAgICAgYm9v
bCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCA9IGZhbHNlOwotICAgICAgICBpZiAoaXQgIT0gbV9y
ZW5kZXJlclJlZ2lvblN0eWxlLmVuZCgpKSB7Ci0gICAgICAgICAgICBjaGlsZFN0eWxlSW5SZWdp
b24gPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKml0LT52YWx1ZS5zdHlsZSk7Ci0gICAgICAgICAg
ICBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAoY2hpbGQuaXNBbm9ueW1vdXMoKSB8fCBjaGlsZC5pc0luRmxvd1JlbmRlckZs
b3dUaHJlYWQoKSkKLSAgICAgICAgICAgICAgICBjaGlsZFN0eWxlSW5SZWdpb24gPSAgc3RkOjpt
YWtlX3VuaXF1ZTxSZW5kZXJTdHlsZT4oUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxl
V2l0aERpc3BsYXkocmVuZGVyZXIuc3R5bGUoKSwgY2hpbGQuc3R5bGUoKS5kaXNwbGF5KCkpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjaGlsZFN0eWxlSW5SZWdpb24gPSBj
b21wdXRlU3R5bGVJblJlZ2lvbihjaGlsZCwgcmVuZGVyZXIuc3R5bGUoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzZXRSZW5kZXJlclN0eWxlSW5SZWdpb24oY2hpbGQsIFdURk1vdmUoY2hpbGRT
dHlsZUluUmVnaW9uKSwgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQpOwotICAgICAgICBjb21wdXRl
Q2hpbGRyZW5TdHlsZUluUmVnaW9uKGNoaWxkKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQ6OnNldFJlbmRlcmVyU3R5bGVJblJlZ2lvbihSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUluUmVnaW9uLCBib29s
IG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKQotewotICAgIEFTU0VSVChyZW5kZXJlci5mbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrKCkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiBvYmplY3RPcmlnaW5hbFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0
eWxlKCkpOwotICAgIHJlbmRlcmVyLnNldFN0eWxlSW50ZXJuYWwoV1RGTW92ZSgqc3R5bGVJblJl
Z2lvbikpOwotCi0gICAgaWYgKGlzPFJlbmRlckJveE1vZGVsT2JqZWN0PihyZW5kZXJlcikgJiYg
IXJlbmRlcmVyLmhhc1Zpc2libGVCb3hEZWNvcmF0aW9ucygpKSB7Ci0gICAgICAgIGJvb2wgaGFz
VmlzaWJsZUJveERlY29yYXRpb25zID0gaXM8UmVuZGVyVGFibGVDZWxsPihyZW5kZXJlcikKLSAg
ICAgICAgfHwgcmVuZGVyZXIuc3R5bGUoKS5oYXNCYWNrZ3JvdW5kKCkKLSAgICAgICAgfHwgcmVu
ZGVyZXIuc3R5bGUoKS5oYXNWaXNpYmxlQm9yZGVyKCkKLSAgICAgICAgfHwgcmVuZGVyZXIuc3R5
bGUoKS5oYXNBcHBlYXJhbmNlKCkKLSAgICAgICAgfHwgcmVuZGVyZXIuc3R5bGUoKS5ib3hTaGFk
b3coKTsKLSAgICAgICAgcmVuZGVyZXIuc2V0SGFzVmlzaWJsZUJveERlY29yYXRpb25zKGhhc1Zp
c2libGVCb3hEZWNvcmF0aW9ucyk7Ci0gICAgfQotCi0gICAgT2JqZWN0UmVnaW9uU3R5bGVJbmZv
IHN0eWxlSW5mbzsKLSAgICBzdHlsZUluZm8uc3R5bGUgPSBXVEZNb3ZlKG9iamVjdE9yaWdpbmFs
U3R5bGUpOwotICAgIHN0eWxlSW5mby5jYWNoZWQgPSBvYmplY3RSZWdpb25TdHlsZUNhY2hlZDsK
LSAgICBtX3JlbmRlcmVyUmVnaW9uU3R5bGUuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShzdHlsZUlu
Zm8pKTsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2xlYXJPYmplY3RTdHls
ZUluUmVnaW9uKGNvbnN0IFJlbmRlckVsZW1lbnQmIG9iamVjdCkKLXsKLSAgICBtX3JlbmRlcmVy
UmVnaW9uU3R5bGUucmVtb3ZlKCZvYmplY3QpOwotCi0gICAgLy8gQ2xlYXIgdGhlIHN0eWxlIGZv
ciB0aGUgY2hpbGRyZW4gb2YgdGhpcyBvYmplY3QuCi0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNo
aWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KG9iamVjdCkpCi0gICAgICAgIGNsZWFyT2JqZWN0
U3R5bGVJblJlZ2lvbihjaGlsZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6
OnNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpCi17Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQ6OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSgpCi17Ci0gICAg
aWYgKCFoYXNDdXN0b21SZWdpb25TdHlsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5k
ZXJlclJlZ2lvblN0eWxlTWFwIHRlbXA7Ci0gICAgZm9yIChhdXRvJiBvYmplY3RQYWlyIDogbV9y
ZW5kZXJlclJlZ2lvblN0eWxlKSB7Ci0gICAgICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0X2Nhc3Q8
UmVuZGVyRWxlbWVudCo+KG9iamVjdFBhaXIua2V5KTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiBvYmplY3RSZWdpb25TdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihv
YmplY3QtPnN0eWxlKCkpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG9i
amVjdE9yaWdpbmFsU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKm9iamVjdFBhaXIudmFs
dWUuc3R5bGUpOwotCi0gICAgICAgIGJvb2wgc2hvdWxkQ2FjaGVSZWdpb25TdHlsZSA9IG9iamVj
dFBhaXIudmFsdWUuY2FjaGVkOwotICAgICAgICBpZiAoIXNob3VsZENhY2hlUmVnaW9uU3R5bGUp
IHsKLSAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGNhY2hlIHRoZSBjb21w
dXRlZCBzdHlsZSBpbiByZWdpb24uCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFuZ2VkQ29udGV4
dFNlbnNpdGl2ZVByb3BlcnRpZXMgPSBDb250ZXh0U2Vuc2l0aXZlUHJvcGVydHlOb25lOwotICAg
ICAgICAgICAgU3R5bGVEaWZmZXJlbmNlIHN0eWxlRGlmZiA9IG9iamVjdE9yaWdpbmFsU3R5bGUt
PmRpZmYoKm9iamVjdFJlZ2lvblN0eWxlLCBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRp
ZXMpOwotICAgICAgICAgICAgaWYgKHN0eWxlRGlmZiA8IFN0eWxlRGlmZmVyZW5jZUxheW91dFBv
c2l0aW9uZWRNb3ZlbWVudE9ubHkpCi0gICAgICAgICAgICAgICAgc2hvdWxkQ2FjaGVSZWdpb25T
dHlsZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNob3VsZENhY2hlUmVnaW9uU3R5
bGUpIHsKLSAgICAgICAgICAgIE9iamVjdFJlZ2lvblN0eWxlSW5mbyBzdHlsZUluZm87Ci0gICAg
ICAgICAgICBzdHlsZUluZm8uc3R5bGUgPSBXVEZNb3ZlKG9iamVjdFJlZ2lvblN0eWxlKTsKLSAg
ICAgICAgICAgIHN0eWxlSW5mby5jYWNoZWQgPSB0cnVlOwotICAgICAgICAgICAgdGVtcC5zZXQo
b2JqZWN0LCBXVEZNb3ZlKHN0eWxlSW5mbykpOwotICAgICAgICB9Ci0gICAgICAgIG9iamVjdC0+
c2V0U3R5bGVJbnRlcm5hbChXVEZNb3ZlKCpvYmplY3RPcmlnaW5hbFN0eWxlKSk7Ci0gICAgfQot
Ci0gICAgbV9yZW5kZXJlclJlZ2lvblN0eWxlLnN3YXAodGVtcCk7Ci19Ci0KLUxheW91dFJlY3Qg
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnZpc3VhbE92ZXJmbG93UmVjdCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKGlzVmFsaWQoKSkgewotICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZv
ID0gcmVuZGVyQm94UmVnaW9uSW5mbyhmbG93VGhyZWFkKCkpOwotICAgICAgICBpZiAoYm94SW5m
byAmJiBib3hJbmZvLT5vdmVyZmxvdygpKQotICAgICAgICAgICAgcmV0dXJuIGJveEluZm8tPm92
ZXJmbG93KCktPnZpc3VhbE92ZXJmbG93UmVjdCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
UmVuZGVyUmVnaW9uOjp2aXN1YWxPdmVyZmxvd1JlY3QoKTsKLX0KLQotdm9pZCBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudDo6YXR0YWNoUmVnaW9uKCkKLXsKLSAgICBSZW5kZXJSZWdpb246OmF0dGFj
aFJlZ2lvbigpOwotCi0gICAgaWYgKHJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpIHx8ICFpc1Zh
bGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZVJlZ2lvbkZsYWdzKCk7Ci19Ci0K
LXZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmRldGFjaFJlZ2lvbigpCi17Ci0gICAgaWYg
KGhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0g
ICAgICAgIG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQgPSBmYWxzZTsKLSAgICAgICAgY2xlYXJDb21w
dXRlZEF1dG9IZWlnaHQoKTsKLSAgICAgICAgZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3Vu
dCgpOwotICAgIH0KLSAgICAKLSAgICBSZW5kZXJSZWdpb246OmRldGFjaFJlZ2lvbigpOwotfQot
Ci12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjphYnNvbHV0ZVF1YWRzRm9yQm94SW5SZWdp
b24oVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCwgY29uc3QgUmVuZGVy
Qm94KiByZW5kZXJlciwgZmxvYXQgbG9jYWxUb3AsIGZsb2F0IGxvY2FsQm90dG9tKQotewotICAg
IExheW91dFJlY3QgbGF5b3V0TG9jYWxSZWN0KDAsIGxvY2FsVG9wLCByZW5kZXJlci0+Ym9yZGVy
Qm94UmVjdEluUmVnaW9uKHRoaXMpLndpZHRoKCksIGxvY2FsQm90dG9tIC0gbG9jYWxUb3ApOwot
ICAgIExheW91dFJlY3QgZnJhZ21lbnRSZWN0ID0gcmVjdEZsb3dQb3J0aW9uRm9yQm94KHJlbmRl
cmVyLCBsYXlvdXRMb2NhbFJlY3QpOwotCi0gICAgLy8gV2Ugd2FudCB0byBza2lwIHRoZSAwcHgg
aGVpZ2h0IGZyYWdtZW50cyBmb3Igbm9uLWVtcHR5IGJveGVzIHRoYXQgbWF5IGFwcGVhciBpbiBj
YXNlIHRoZSBib3R0b20gb2YgdGhlIGJveAotICAgIC8vIG92ZXJsYXBzIHRoZSBib3R0b20gb2Yg
YSByZWdpb24uCi0gICAgaWYgKGxvY2FsQm90dG9tICE9IGxvY2FsVG9wICYmICFmcmFnbWVudFJl
Y3QuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEN1cnJlbnRSZW5kZXJSZWdpb25N
YWludGFpbmVyIHJlZ2lvbk1haW50YWluZXIoKnRoaXMpOwotICAgIHF1YWRzLmFwcGVuZChyZW5k
ZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoZnJhZ21lbnRSZWN0KSwgVXNlVHJh
bnNmb3Jtcywgd2FzRml4ZWQpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LmgJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJO
YW1lZEZsb3dGcmFnbWVudC5oCShub25leGlzdGVudCkKQEAgLTEsMTYxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICog
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
Ci0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgot
ICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJSZW5kZXJS
ZWdpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBFbGVtZW50OwotY2xhc3Mg
UmVuZGVyU3R5bGU7Ci0KLS8vIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50IHJlcHJlc2VudHMgYSBy
ZWdpb24gdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGZyYWdtZW50YXRpb24gb2YKLS8vIHRo
ZSBSZW5kZXJOYW1lZEZsb3dUaHJlYWQgY29udGVudC4KLS8vCi0vLyBBIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50IG9iamVjdCBpcyBjcmVhdGVkIGFzIGFuIGFub255bW91cyBjaGlsZCBmb3IgYSBS
ZW5kZXJCbG9ja0Zsb3cgb2JqZWN0Ci0vLyB0aGF0IGhhcyBhIHZhbGlkIC13ZWJraXQtZmxvdy1m
cm9tIHByb3BlcnR5LgotLy8KLS8vIFRoaXMgYWxsb3dzIGEgbm9uLXJlcGxhY2VkIGJsb2NrIHRv
IGJlaGF2ZSBsaWtlIGEgcmVnaW9uIGlmIG5lZWRlZCwgZm9sbG93aW5nIHRoZSBDU1NSZWdpb25z
IHNwZWNpZmljYXRpb246Ci0vLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MtcmVnaW9ucy8j
dGhlLWZsb3ctZnJvbS1wcm9wZXJ0eS4KLS8vIGxpc3QtaXRlbSwgdGFibGUtY2FwdGlvbiwgdGFi
bGUtY2VsbCBjYW4gYmVjb21lIHJlZ2lvbnMgaW4gYWRkaXRpb24gdG8gYmxvY2sgfCBpbmxpbmUt
YmxvY2suCi0KLWNsYXNzIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50IGZpbmFsIDogcHVibGljIFJl
bmRlclJlZ2lvbiB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoRG9jdW1l
bnQmLCBSZW5kZXJTdHlsZSYmKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCgpOwotCi0gICAgc3RhdGljIFJlbmRlclN0eWxlIGNyZWF0ZVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSk7Ci0KLSAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYpIGNvbnN0OwotCi0gICAgTGF5b3V0VW5p
dCBwYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIExheW91dFVuaXQgbWF4
UGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdDsKLSAgICAKLSAgICBMYXlvdXRSZWN0IGZsb3dUaHJl
YWRQb3J0aW9uUmVjdEZvckNsaXBwaW5nKGJvb2wgaXNGaXJzdFJlZ2lvbkluUmFuZ2UsIGJvb2wg
aXNMYXN0UmVnaW9uSW5SYW5nZSkgY29uc3Q7Ci0KLSAgICBSZW5kZXJCbG9ja0Zsb3cmIGZyYWdt
ZW50Q29udGFpbmVyKCkgY29uc3Q7Ci0gICAgUmVuZGVyTGF5ZXImIGZyYWdtZW50Q29udGFpbmVy
TGF5ZXIoKSBjb25zdDsKLSAgICAKLSAgICBib29sIHNob3VsZENsaXBGbG93VGhyZWFkQ29udGVu
dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIAotICAgIExheW91dFNpemUgb2Zmc2V0RnJvbUNvbnRh
aW5lcihSZW5kZXJFbGVtZW50JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBib29sKiBvZmZzZXREZXBl
bmRzT25Qb2ludCA9IG51bGxwdHIpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1BzZXVk
b0VsZW1lbnRSZWdpb24oKSBjb25zdCB7IHJldHVybiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNQ
c2V1ZG9FbGVtZW50KCk7IH0KLQotICAgIC8vIFdoZW4gdGhlIGNvbnRlbnQgaW5zaWRlIHRoZSBy
ZWdpb24gcmVxdWlyZXMgdGhlIHJlZ2lvbiB0byBoYXZlIGEgbGF5ZXIsIHRoZSBsYXllciB3aWxs
IGJlIGNyZWF0ZWQgb24gdGhlIHJlZ2lvbidzCi0gICAgLy8gcGFyZW50IHJlbmRlcmVyIGluc3Rl
YWQuCi0gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyB0aGF0IHJlbmRlcmVyIGhvbGRpbmcgdGhl
IGxheWVyLgotICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgY2Fubm90IGJlIG51bGwgYmVjYXVzZSBD
U1MgUmVnaW9ucyBjcmVhdGUgU3RhY2tpbmcgQ29udGV4dHMgKHdoaWNoIG1lYW5zIHRoZXkgY3Jl
YXRlIGxheWVycykuCi0gICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgbGF5ZXJPd25lcigpIGNv
bnN0IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpwYXJlbnQoKSk7
IH0KLQotICAgIGJvb2wgaGFzQ3VzdG9tUmVnaW9uU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2hh
c0N1c3RvbVJlZ2lvblN0eWxlOyB9Ci0gICAgdm9pZCBjbGVhck9iamVjdFN0eWxlSW5SZWdpb24o
Y29uc3QgUmVuZGVyRWxlbWVudCYpOwotCi0gICAgdm9pZCBzZXRSZWdpb25PYmplY3RzUmVnaW9u
U3R5bGUoKTsKLSAgICB2b2lkIHJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSgpOwot
ICAgIAotICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dSZWN0KCkgY29uc3Qgb3ZlcnJpZGU7
Ci0KLSAgICBib29sIGhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9oYXNBdXRvTG9naWNhbEhlaWdodDsgfQotCi0gICAgTGF5b3V0VW5pdCBjb21wdXRlZEF1
dG9IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2NvbXB1dGVkQXV0b0hlaWdodDsgfQotCi0gICAg
dm9pZCBzZXRDb21wdXRlZEF1dG9IZWlnaHQoTGF5b3V0VW5pdCBjb21wdXRlZEF1dG9IZWlnaHQp
Ci0gICAgewotICAgICAgICBtX2hhc0NvbXB1dGVkQXV0b0hlaWdodCA9IHRydWU7Ci0gICAgICAg
IG1fY29tcHV0ZWRBdXRvSGVpZ2h0ID0gY29tcHV0ZWRBdXRvSGVpZ2h0OwotICAgIH0KLQotICAg
IHZvaWQgY2xlYXJDb21wdXRlZEF1dG9IZWlnaHQoKQotICAgIHsKLSAgICAgICAgbV9oYXNDb21w
dXRlZEF1dG9IZWlnaHQgPSBmYWxzZTsKLSAgICAgICAgbV9jb21wdXRlZEF1dG9IZWlnaHQgPSAw
OwotICAgIH0KLQotICAgIGJvb2wgaGFzQ29tcHV0ZWRBdXRvSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9oYXNDb21wdXRlZEF1dG9IZWlnaHQ7IH0KLQotCi0gICAgdm9pZCBhdHRhY2hSZWdpb24o
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGFjaFJlZ2lvbigpIG92ZXJyaWRlOwotCi0gICAgdm9p
ZCB1cGRhdGVMb2dpY2FsSGVpZ2h0KCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0ZVJlZ2lv
bkZsYWdzKCk7Ci0KLSAgICB2b2lkIGFic29sdXRlUXVhZHNGb3JCb3hJblJlZ2lvbihWZWN0b3I8
RmxvYXRRdWFkPiYsIGJvb2wqLCBjb25zdCBSZW5kZXJCb3gqLCBmbG9hdCwgZmxvYXQpIG92ZXJy
aWRlOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9uSWZOZWVkZWQoKTsKLQotcHJpdmF0ZToK
LSAgICBib29sIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCI7IH0KLQotICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gY29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYsIGNv
bnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSkgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRlQ2hp
bGRyZW5TdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmKTsKLSAgICB2b2lkIHNldFJlbmRlcmVy
U3R5bGVJblJlZ2lvbihSZW5kZXJFbGVtZW50Jiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiwgYm9vbCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCk7Ci0KLSAgICB2b2lkIGNoZWNrUmVnaW9u
U3R5bGUoKTsKLSAgICB2b2lkIHNldEhhc0N1c3RvbVJlZ2lvblN0eWxlKGJvb2wgaGFzQ3VzdG9t
UmVnaW9uU3R5bGUpIHsgbV9oYXNDdXN0b21SZWdpb25TdHlsZSA9IGhhc0N1c3RvbVJlZ2lvblN0
eWxlOyB9Ci0KLSAgICB2b2lkIHVwZGF0ZVJlZ2lvbkhhc0F1dG9Mb2dpY2FsSGVpZ2h0RmxhZygp
OwotCi0gICAgdm9pZCBpbmNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCk7Ci0gICAgdm9p
ZCBkZWNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCk7Ci0KLSAgICBib29sIHNob3VsZEhh
dmVBdXRvTG9naWNhbEhlaWdodCgpIGNvbnN0OwotCi0gICAgdm9pZCBsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBvdmVy
cmlkZTsKLQotICAgIHN0cnVjdCBPYmplY3RSZWdpb25TdHlsZUluZm8gewotICAgICAgICAvLyBV
c2VkIHRvIHN0b3JlIHRoZSBvcmlnaW5hbCBzdHlsZSBvZiB0aGUgb2JqZWN0IGluIHJlZ2lvbgot
ICAgICAgICAvLyBzbyB0aGF0IHRoZSBvcmlnaW5hbCBzdHlsZSBpcyBwcm9wZXJseSByZXN0b3Jl
ZCBhZnRlciBwYWludC4KLSAgICAgICAgLy8gQWxzbyB1c2VkIHRvIHN0b3JlIGNvbXB1dGVkIHN0
eWxlIG9mIHRoZSBvYmplY3QgaW4gcmVnaW9uIGJldHdlZW4KLSAgICAgICAgLy8gcmVnaW9uIHBh
aW50aW5ncywgc28gdGhhdCB0aGUgc3R5bGUgaW4gcmVnaW9uIGlzIGNvbXB1dGVkIG9ubHkKLSAg
ICAgICAgLy8gd2hlbiBuZWNlc3NhcnkuCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gc3R5bGU7Ci0gICAgICAgIC8vIFRydWUgaWYgdGhlIGNvbXB1dGVkIHN0eWxlIGluIHJl
Z2lvbiBpcyBjYWNoZWQuCi0gICAgICAgIGJvb2wgY2FjaGVkOwotICAgIH07Ci0KLSAgICB1c2lu
ZyBSZW5kZXJlclJlZ2lvblN0eWxlTWFwID0gSGFzaE1hcDxjb25zdCBSZW5kZXJFbGVtZW50Kiwg
T2JqZWN0UmVnaW9uU3R5bGVJbmZvPjsKLSAgICBSZW5kZXJlclJlZ2lvblN0eWxlTWFwIG1fcmVu
ZGVyZXJSZWdpb25TdHlsZTsKLQotICAgIGJvb2wgbV9oYXNDdXN0b21SZWdpb25TdHlsZSA6IDE7
Ci0gICAgYm9vbCBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0IDogMTsKLSAgICBib29sIG1faGFzQ29t
cHV0ZWRBdXRvSGVpZ2h0IDogMTsKLQotICAgIExheW91dFVuaXQgbV9jb21wdXRlZEF1dG9IZWln
aHQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfUkVOREVSX09CSkVDVChSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgaXNSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclJ1YnkuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgpAQCAtNDMwLDI3ICs0Mjks
NiBAQCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgUmVuZGVyT2JqZWN0OjplbmNsCiAgICAgcmV0dXJu
ICpsaW5lYWdlT2ZUeXBlPFJlbmRlckJveE1vZGVsT2JqZWN0Pihjb25zdF9jYXN0PFJlbmRlck9i
amVjdCY+KCp0aGlzKSkuZmlyc3QoKTsKIH0KIAotYm9vbCBSZW5kZXJPYmplY3Q6OmZpeGVkUG9z
aXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5nQmxvY2soKSBjb25zdAotewotICAgIHJldHVy
biAoKGZsb3dUaHJlYWRTdGF0ZSgpID09IFJlbmRlck9iamVjdDo6SW5zaWRlT3V0T2ZGbG93VGhy
ZWFkKQotICAgICAgICAmJiAoc3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pCi0g
ICAgICAgICYmIChjb250YWluaW5nQmxvY2soKS0+aXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFk
KCkpKTsKLX0KLQotc3RhdGljIGJvb2wgaGFzRml4ZWRQb3NJbk5hbWVkRmxvd0NvbnRhaW5pbmdC
bG9jayhjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIEFTU0VSVChyZW5kZXJl
ci0+Zmxvd1RocmVhZFN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpOb3RJbnNpZGVGbG93VGhyZWFk
KTsKLQotICAgIFJlbmRlck9iamVjdCogY3VyciA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4o
cmVuZGVyZXIpOwotICAgIHdoaWxlIChjdXJyICYmICFpczxSZW5kZXJWaWV3PigqY3VycikpIHsK
LSAgICAgICAgaWYgKGN1cnItPmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5n
QmxvY2soKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjdXJyID0gY3Vyci0+
Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5k
ZXJCbG9jayogUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVCbG9jaygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC04MjAsMTAgKzc5OCw2IEBAIFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IFJlbmRlck9iamVjdDo6Y28KICAgICAvLyByZXBhaW50aW5nIHRvIGRvIGluZGl2aWR1YWwgcmVn
aW9uIHJlcGFpbnRzLgogICAgIFJlbmRlckZsb3dUaHJlYWQqIHBhcmVudFJlbmRlckZsb3dUaHJl
YWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKHBhcmVudFJlbmRlckZs
b3dUaHJlYWQpIHsKLSAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgZml4ZWQgcG9zaXRp
b25lZCBlbGVtZW50IHdpdGggbmFtZWQgZmxvdyBhcyBDQiBhbG9uZyB0aGUgQ0IgY2hhaW4KLSAg
ICAgICAgLy8gdGhlbiB0aGUgcmVwYWludCBjb250YWluZXIgaXMgbm90IHRoZSBmbG93IHRocmVh
ZC4KLSAgICAgICAgaWYgKGhhc0ZpeGVkUG9zSW5OYW1lZEZsb3dDb250YWluaW5nQmxvY2sodGhp
cykpCi0gICAgICAgICAgICByZXR1cm4gcmVwYWludENvbnRhaW5lcjsKICAgICAgICAgLy8gSWYg
d2UgaGF2ZSBhbHJlYWR5IGZvdW5kIGEgcmVwYWludCBjb250YWluZXIgdGhlbiB3ZSB3aWxsIHJl
cGFpbnQgaW50byB0aGF0IGNvbnRhaW5lciBvbmx5IGlmIGl0IGlzIHBhcnQgb2YgdGhlIHNhbWUK
ICAgICAgICAgLy8gZmxvdyB0aHJlYWQuIE90aGVyd2lzZSB3ZSB3aWxsIG5lZWQgdG8gY2F0Y2gg
dGhlIHJlcGFpbnQgY2FsbCBhbmQgc2VuZCBpdCB0byB0aGUgZmxvdyB0aHJlYWQuCiAgICAgICAg
IFJlbmRlckZsb3dUaHJlYWQqIHJlcGFpbnRDb250YWluZXJGbG93VGhyZWFkID0gcmVwYWludENv
bnRhaW5lciA/IHJlcGFpbnRDb250YWluZXItPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSA6
IG51bGxwdHI7CkBAIC0xOTEzLDExICsxODg3LDYgQEAgYm9vbCBSZW5kZXJPYmplY3Q6Om5vZGVB
dEZsb2F0UG9pbnQoY29ucwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQqIFJlbmRlck9iamVjdDo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQogUmVuZGVyRmxvd1RocmVhZCogUmVu
ZGVyT2JqZWN0Ojpsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgY29uc3QKIHsKICAg
ICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gdGhpcy0+Y29udGFpbmluZ0Jsb2NrKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAy
MjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDcgKzU5LDYgQEAgY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKIGNsYXNz
IFJlbmRlckdlb21ldHJ5TWFwOwogY2xhc3MgUmVuZGVyTGF5ZXI7CiBjbGFzcyBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0OwotY2xhc3MgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ7CiBjbGFzcyBSZW5k
ZXJSZWdpb247CiBjbGFzcyBSZW5kZXJUaGVtZTsKIGNsYXNzIFNlbGVjdGlvblN1YnRyZWVSb290
OwpAQCAtMTU5LDggKzE1OCw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJC
b3gmIGVuY2xvc2luZ0JveCgpIGNvbnN0OwogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0JiBlbmNs
b3NpbmdCb3hNb2RlbE9iamVjdCgpIGNvbnN0OwogCi0gICAgYm9vbCBmaXhlZFBvc2l0aW9uZWRX
aXRoTmFtZWRGbG93Q29udGFpbmluZ0Jsb2NrKCkgY29uc3Q7Ci0KICAgICAvLyBGdW5jdGlvbiB0
byByZXR1cm4gb3VyIGVuY2xvc2luZyBmbG93IHRocmVhZCBpZiB3ZSBhcmUgY29udGFpbmVkIGlu
c2lkZSBvbmUuIFRoaXMKICAgICAvLyBmdW5jdGlvbiBmb2xsb3dzIHRoZSBjb250YWluaW5nIGJs
b2NrIGNoYWluLgogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2soKSBjb25zdApAQCAtMTcxLDggKzE2OCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGxv
Y2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKICAgICB9CiAKLSAgICBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCogY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3Q7Ci0K
ICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBzZXRIYXNBWE9iamVjdChib29sIGZsYWcpIHsgbV9o
YXNBWE9iamVjdCA9IGZsYWc7IH0KICAgICBib29sIGhhc0FYT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9oYXNBWE9iamVjdDsgfQpAQCAtMjQ0LDcgKzIzOSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaXNSZW5kZXJJRnJhbWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc1JlbmRlckltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNSZW5kZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZXBsaWNhKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlJbmxpbmUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQpAQCAtMzEyLDggKzMwNiw3IEBAIHB1YmxpYzoKICAgICAKICAgICBlbnVtIEZsb3dU
aHJlYWRTdGF0ZSB7CiAgICAgICAgIE5vdEluc2lkZUZsb3dUaHJlYWQgPSAwLAotICAgICAgICBJ
bnNpZGVPdXRPZkZsb3dUaHJlYWQgPSAxLAotICAgICAgICBJbnNpZGVJbkZsb3dUaHJlYWQgPSAy
LAorICAgICAgICBJbnNpZGVJbkZsb3dUaHJlYWQgPSAxLAogICAgIH07CiAKICAgICB2b2lkIHNl
dEZsb3dUaHJlYWRTdGF0ZUluY2x1ZGluZ0Rlc2NlbmRhbnRzKEZsb3dUaHJlYWRTdGF0ZSk7CkBA
IC00MDUsNyArMzk4LDcgQEAgcHVibGljOgogICAgICAgICAvLyBSZW5kZXJCbG9jazo6Y3JlYXRl
QW5vbnltb3VzQmxvY2soKS4gVGhpcyBpbmNsdWRlcyBjcmVhdGluZyBhbiBhbm9ueW1vdXMKICAg
ICAgICAgLy8gUmVuZGVyQmxvY2sgaGF2aW5nIGEgQkxPQ0sgb3IgQk9YIGRpc3BsYXkuIE90aGVy
IGNsYXNzZXMgc3VjaCBhcyBSZW5kZXJUZXh0RnJhZ21lbnQKICAgICAgICAgLy8gYXJlIG5vdCBS
ZW5kZXJCbG9ja3MgYW5kIHdpbGwgcmV0dXJuIGZhbHNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU2NzA5LiAKLSAgICAgICAgcmV0dXJuIGlzQW5vbnltb3Vz
KCkgJiYgKHN0eWxlKCkuZGlzcGxheSgpID09IEJMT0NLIHx8IHN0eWxlKCkuZGlzcGxheSgpID09
IEJPWCkgJiYgc3R5bGUoKS5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETyAmJiBpc1JlbmRlckJsb2Nr
KCkgJiYgIWlzTGlzdE1hcmtlcigpICYmICFpc1JlbmRlckZsb3dUaHJlYWQoKSAmJiAhaXNSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpICYmICFpc1JlbmRlck11bHRpQ29sdW1uU2V0KCkgJiYgIWlz
UmVuZGVyVmlldygpCisgICAgICAgIHJldHVybiBpc0Fub255bW91cygpICYmIChzdHlsZSgpLmRp
c3BsYXkoKSA9PSBCTE9DSyB8fCBzdHlsZSgpLmRpc3BsYXkoKSA9PSBCT1gpICYmIHN0eWxlKCku
c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8gJiYgaXNSZW5kZXJCbG9jaygpICYmICFpc0xpc3RNYXJr
ZXIoKSAmJiAhaXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgIWlzUmVuZGVyTXVsdGlDb2x1bW5TZXQo
KSAmJiAhaXNSZW5kZXJWaWV3KCkKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgICAg
ICAgICAmJiAhaXNSZW5kZXJGdWxsU2NyZWVuKCkKICAgICAgICAgICAgICYmICFpc1JlbmRlckZ1
bGxTY3JlZW5QbGFjZWhvbGRlcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uLmNwcAkocmV2aXNpb24gMjIyMjYzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlZ2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKICNp
bmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQu
aCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCShyZXZpc2lvbiAy
MjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExOCw4ICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5IYXZlR2Vu
ZXJhdGVkQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgVmlz
aWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBS
ZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNBdXRvTG9naWNh
bEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgYWJz
b2x1dGVRdWFkc0ZvckJveEluUmVnaW9uKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCosIGNvbnN0
IFJlbmRlckJveCosIGZsb2F0LCBmbG9hdCkgeyB9CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gMjIyMjYz
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJlYWQuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5j
bHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJlZERvY3VtZW50TWFy
a2VyLmgiCkBAIC0yNDUsMTEgKzI0NCw2IEBAIGJvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBh
aW50KFBhaW50SW4KICAgICBpZiAoc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBu
YW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAg
IC8vIENoZWNrIG91ciByZWdpb24gcmFuZ2UgdG8gbWFrZSBzdXJlIHdlIG5lZWQgdG8gYmUgcGFp
bnRpbmcgaW4gdGhpcyByZWdpb24uCi0gICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmICFuYW1l
ZEZsb3dGcmFnbWVudC0+Zmxvd1RocmVhZCgpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1Jl
Z2lvbih0aGlzLCBuYW1lZEZsb3dGcmFnbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQog
ICAgIExheW91dFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0
aW9uKCk7CiAKICAgICAvLyBFYXJseSBleGl0IGlmIHRoZSBlbGVtZW50IHRvdWNoZXMgdGhlIGVk
Z2VzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZp
c2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyRGVzY2Vu
ZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGFibGVDYXB0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKQEAgLTE1MzAsNyArMTUyOSw3IEBAIExheW91
dFJlY3QgUmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJlY3QKICAgICAgICAgcmVjdC5zZXRMb2Nh
dGlvbihsb2NhdGlvbiArIHJlY3QubG9jYXRpb24oKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJl
Y3QgPSBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QobG9jYXRpb24sIHJlZ2lvbiwgcmVsZXZh
bmN5KTsKLSAgICAKKwogICAgIC8vIElmIHdlIGhhdmUgYSBjYXB0aW9uLCBleHBhbmQgdGhlIGNs
aXAgdG8gaW5jbHVkZSB0aGUgY2FwdGlvbi4KICAgICAvLyBGSVhNRTogVGVjaG5pY2FsbHkgdGhp
cyBpcyB3cm9uZywgYnV0IGl0J3MgdmlydHVhbGx5IGltcG9zc2libGUgdG8gZml4IHRoaXMKICAg
ICAvLyBmb3IgcmVhbCB1bnRpbCBjYXB0aW9ucyBoYXZlIGJlZW4gcmUtd3JpdHRlbi4KQEAgLTE1
NTUsNyArMTU1NCw3IEBAIGJvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFQK
ICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBs
b2NhdGlvbigpOwogCiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KLSAgICBpZiAoIWhhc092ZXJm
bG93Q2xpcCgpIHx8IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0NsaXBS
ZWN0KGFkanVzdGVkTG9jYXRpb24sIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKSkp
IHsKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IGxvY2F0aW9uSW5Db250YWluZXIuaW50
ZXJzZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIG51bGxwdHIpKSkgewog
ICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoaXM8UmVu
ZGVyQm94PigqY2hpbGQpICYmICFkb3duY2FzdDxSZW5kZXJCb3g+KCpjaGlsZCkuaGFzU2VsZlBh
aW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgfHwgY2hpbGQtPmlzVGFi
bGVDYXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9
IGZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKGRvd25jYXN0PFJlbmRlckJveD4oY2hpbGQpLCBh
ZGp1c3RlZExvY2F0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNiBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5o
IgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUg
IlJlbmRlclRhYmxlQ29sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKQEAgLTE1MDEs
NyArMTUwMCw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb24KICAg
ICAvLyBKdXN0IGZvcndhcmQgdG8gb3VyIGNoaWxkcmVuIGFsd2F5cy4KICAgICBMYXlvdXRQb2lu
dCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCi0g
ICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2Vj
dHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBjdXJyZW50UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKSkpKQorICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhbG9jYXRpb25J
bkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwg
bnVsbHB0cikpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaGFzT3ZlcmZsb3dp
bmdDZWxsKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQAog
I2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgiCkBAIC03
NTYsMjcgKzc1NSwxOCBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0U3RyZWFtJiB0cywg
CiAgICAgfQogCiAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBwb3NpdGl2ZVpPcmRlckxp
c3QgPSBsYXllci5wb3NaT3JkZXJMaXN0KCkpIHsKLSAgICAgICAgc2l6ZV90IGxheWVyQ291bnQg
PSAwOwotICAgICAgICBmb3IgKGF1dG8qIGN1cnJMYXllciA6ICpwb3NpdGl2ZVpPcmRlckxpc3Qp
IHsKLSAgICAgICAgICAgIGlmICghY3VyckxheWVyLT5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3Jh
cGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSkKLSAgICAgICAgICAgICAgICArK2xheWVyQ291bnQ7
Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIHNpemVfdCBsYXllckNvdW50ID0gcG9zaXRp
dmVaT3JkZXJMaXN0LT5zaXplKCk7CisKICAgICAgICAgaWYgKGxheWVyQ291bnQpIHsKICAgICAg
ICAgICAgIGludCBjdXJySW5kZW50ID0gaW5kZW50OwotICAgICAgICAgICAgaWYgKCFwb3NpdGl2
ZVpPcmRlckxpc3QtPnNpemUoKSB8fCAhcG9zaXRpdmVaT3JkZXJMaXN0LT5hdCgwKS0+aXNGbG93
VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYmVoYXZpb3IgJiBSZW5kZXJBc1RleHRTaG93TGF5ZXJOZXN0aW5nKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgICAgICAgICAg
ICAgICAgICB0cyA8PCAiIHBvc2l0aXZlIHotb3JkZXIgbGlzdCgiIDw8IHBvc2l0aXZlWk9yZGVy
TGlzdC0+c2l6ZSgpIDw8ICIpXG4iOwotICAgICAgICAgICAgICAgICAgICArK2N1cnJJbmRlbnQ7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZv
ciAoYXV0byogY3VyckxheWVyIDogKnBvc2l0aXZlWk9yZGVyTGlzdCkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBEbyBub3QgcHJpbnQgbmFtZWQgZmxvd3MgdHdpY2UuCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghY3VyckxheWVyLT5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXll
cnNVbmRlclJlZ2lvbnMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlTGF5ZXJzKHRz
LCByb290TGF5ZXIsICpjdXJyTGF5ZXIsIHBhaW50RGlydHlSZWN0LCBjdXJySW5kZW50LCBiZWhh
dmlvcik7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJlaGF2aW9yICYgUmVu
ZGVyQXNUZXh0U2hvd0xheWVyTmVzdGluZykgeworICAgICAgICAgICAgICAgIHdyaXRlSW5kZW50
KHRzLCBpbmRlbnQpOworICAgICAgICAgICAgICAgIHRzIDw8ICIgcG9zaXRpdmUgei1vcmRlciBs
aXN0KCIgPDwgcG9zaXRpdmVaT3JkZXJMaXN0LT5zaXplKCkgPDwgIilcbiI7CisgICAgICAgICAg
ICAgICAgKytjdXJySW5kZW50OwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGF1
dG8qIGN1cnJMYXllciA6ICpwb3NpdGl2ZVpPcmRlckxpc3QpCisgICAgICAgICAgICAgICAgd3Jp
dGVMYXllcnModHMsIHJvb3RMYXllciwgKmN1cnJMYXllciwgcGFpbnREaXJ0eVJlY3QsIGN1cnJJ
bmRlbnQsIGJlaGF2aW9yKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDEw
ICsyNzEsNiBAQCB2b2lkIFJlbmRlclZpZXc6OmluaXRpYWxpemVMYXlvdXRTdGF0ZShMCiAgICAg
c3RhdGUubV9pc1BhZ2luYXRlZCA9IHN0YXRlLm1fcGFnZUxvZ2ljYWxIZWlnaHQgPiAwOwogfQog
Ci12b2lkIFJlbmRlclZpZXc6OmxheW91dENvbnRlbnRJbkF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9u
cyhjb25zdCBMYXlvdXRTdGF0ZSYpCi17Ci19Ci0KIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkK
IHsKICAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CkBA
IC0zMTMsMTAgKzMwOSw3IEBAIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKIAogICAgIG1fcGFn
ZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkID0gZmFsc2U7CiAKLSAgICBpZiAoY2hlY2tUd29QYXNzTGF5
b3V0Rm9yQXV0b0hlaWdodFJlZ2lvbnMoKSkKLSAgICAgICAgbGF5b3V0Q29udGVudEluQXV0b0xv
Z2ljYWxIZWlnaHRSZWdpb25zKCptX2xheW91dFN0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIGxh
eW91dENvbnRlbnQoKm1fbGF5b3V0U3RhdGUpOworICAgIGxheW91dENvbnRlbnQoKm1fbGF5b3V0
U3RhdGUpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIGNoZWNrTGF5b3V0U3RhdGUoKm1fbGF5b3V0
U3RhdGUpOwpAQCAtMTExNiw3ICsxMTA5LDYgQEAgdm9pZCBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0
U3RhdGUoUmVuZGVyTwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlID09IDApOwogCiAgICAgbV9s
YXlvdXRTdGF0ZSA9IHN0ZDo6bWFrZV91bmlxdWU8TGF5b3V0U3RhdGU+KHJvb3QpOwotICAgIHB1
c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKHJvb3QpOwogfQogCiBib29sIFJlbmRl
clZpZXc6OnB1c2hMYXlvdXRTdGF0ZUZvclBhZ2luYXRpb25JZk5lZWRlZChSZW5kZXJCbG9ja0Zs
b3cmIGxheW91dFJvb3QpCkBAIC0xMTI3LDcgKzExMTksNiBAQCBib29sIFJlbmRlclZpZXc6OnB1
c2hMYXlvdXRTdGF0ZUZvclBhZ2luCiAgICAgbV9sYXlvdXRTdGF0ZS0+bV9pc1BhZ2luYXRlZCA9
IHRydWU7CiAgICAgLy8gVGhpcyBpcyBqdXN0IGEgZmxhZyBmb3Iga25vd24gcGFnZSBoZWlnaHQg
KHNlZSBSZW5kZXJCbG9ja0Zsb3c6OmNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFu
Z2UpLgogICAgIG1fbGF5b3V0U3RhdGUtPm1fcGFnZUxvZ2ljYWxIZWlnaHQgPSAxOwotICAgIHB1
c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKGxheW91dFJvb3QpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC0xMjA4LDE5ICsxMTk5LDYgQEAgdm9pZCBSZW5kZXJWaWV3OjpzdHls
ZURpZENoYW5nZShTdHlsZURpZgogICAgIGZyYW1lVmlldygpLnN0eWxlRGlkQ2hhbmdlKCk7CiB9
CiAKLWJvb2wgUmVuZGVyVmlldzo6Y2hlY2tUd29QYXNzTGF5b3V0Rm9yQXV0b0hlaWdodFJlZ2lv
bnMoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJWaWV3Ojpw
dXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZChjb25zdCBSZW5kZXJPYmplY3QmKQot
ewotfQotCi12b2lkIFJlbmRlclZpZXc6OnBvcExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dUaHJl
YWQoKQotewotfQotCiBJbWFnZVF1YWxpdHlDb250cm9sbGVyJiBSZW5kZXJWaWV3OjppbWFnZVF1
YWxpdHlDb250cm9sbGVyKCkKIHsKICAgICBpZiAoIW1faW1hZ2VRdWFsaXR5Q29udHJvbGxlcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24gMjIyMjYz
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMTg2LDggKzE4Niw2IEBAIHB1YmxpYzoKIAogICAgIC8vIFJlbmRlcmVyIHRoYXQgcGFp
bnRzIHRoZSByb290IGJhY2tncm91bmQgaGFzIGJhY2tncm91bmQtaW1hZ2VzIHdoaWNoIGFsbCBo
YXZlIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQuCiAgICAgYm9vbCByb290QmFja2dyb3Vu
ZElzRW50aXJlbHlGaXhlZCgpIGNvbnN0OwotICAgIAotICAgIGJvb2wgY2hlY2tUd29QYXNzTGF5
b3V0Rm9yQXV0b0hlaWdodFJlZ2lvbnMoKSBjb25zdDsKIAogICAgIHZvaWQgc3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRl
OwogCkBAIC0yNzQsNyArMjcyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFkb2luZ0Z1bGxS
ZXBhaW50KCkgfHwgbV9sYXlvdXRTdGF0ZS0+aXNQYWdpbmF0ZWQoKSB8fCByZW5kZXJlci5mbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkKICAgICAgICAgICAgIHx8IG1fbGF5b3V0U3RhdGUtPmxp
bmVHcmlkKCkgfHwgKHJlbmRlcmVyLnN0eWxlKCkubGluZUdyaWQoKSAhPSBSZW5kZXJTdHlsZTo6
aW5pdGlhbExpbmVHcmlkKCkgJiYgcmVuZGVyZXIuaXNSZW5kZXJCbG9ja0Zsb3coKSkpIHsKICAg
ICAgICAgICAgIG1fbGF5b3V0U3RhdGUgPSBzdGQ6Om1ha2VfdW5pcXVlPExheW91dFN0YXRlPihX
VEZNb3ZlKG1fbGF5b3V0U3RhdGUpLCAmcmVuZGVyZXIsIG9mZnNldCwgcGFnZUhlaWdodCwgcGFn
ZUhlaWdodENoYW5nZWQpOwotICAgICAgICAgICAgcHVzaExheW91dFN0YXRlRm9yQ3VycmVudEZs
b3dUaHJlYWQocmVuZGVyZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjgyLDcgKzI3OSw2IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIHBvcExheW91dFN0YXRlKCkKICAgICB7Ci0gICAgICAgIHBvcExheW91dFN0YXRlRm9y
Q3VycmVudEZsb3dUaHJlYWQoKTsKICAgICAgICAgbV9sYXlvdXRTdGF0ZSA9IFdURk1vdmUobV9s
YXlvdXRTdGF0ZS0+bV9uZXh0KTsKICAgICB9CiAKQEAgLTMwNiwxNCArMzAyLDEwIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBlbmFibGVMYXlvdXRTdGF0ZSgpIHsgQVNTRVJUKG1fbGF5b3V0U3RhdGVE
aXNhYmxlQ291bnQgPiAwKTsgbV9sYXlvdXRTdGF0ZURpc2FibGVDb3VudC0tOyB9CiAKICAgICB2
b2lkIGxheW91dENvbnRlbnQoY29uc3QgTGF5b3V0U3RhdGUmKTsKLSAgICB2b2lkIGxheW91dENv
bnRlbnRJbkF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucyhjb25zdCBMYXlvdXRTdGF0ZSYpOwogI2lm
bmRlZiBOREVCVUcKICAgICB2b2lkIGNoZWNrTGF5b3V0U3RhdGUoY29uc3QgTGF5b3V0U3RhdGUm
KTsKICNlbmRpZgogCi0gICAgdm9pZCBwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVh
ZChjb25zdCBSZW5kZXJPYmplY3QmKTsKLSAgICB2b2lkIHBvcExheW91dFN0YXRlRm9yQ3VycmVu
dEZsb3dUaHJlYWQoKTsKLQogICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXI7
CiAgICAgZnJpZW5kIGNsYXNzIExheW91dFN0YXRlRGlzYWJsZXI7CiAgICAgZnJpZW5kIGNsYXNz
IFN1YnRyZWVMYXlvdXRTdGF0ZU1haW50YWluZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCwx
NSArMTY0LDYgQEAgdm9pZCBSb290SW5saW5lQm94OjpwYWludEVsbGlwc2lzQm94KFBhaQogCiB2
b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5l
Qm90dG9tKQogewotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVu
dCA9IHJlbmRlcmVyKCkuY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0KLSAgICAv
LyBDaGVjayBpZiB3ZSBhcmUgaW4gdGhlIGNvcnJlY3QgcmVnaW9uLgotICAgIGlmIChuYW1lZEZs
b3dGcmFnbWVudCkgewotICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9IGNvbnRhaW5pbmdS
ZWdpb24oKTsKLSAgICAgICAgaWYgKHJlZ2lvbiAmJiByZWdpb24gIT0gcmVpbnRlcnByZXRfY2Fz
dDxSZW5kZXJSZWdpb24qPihuYW1lZEZsb3dGcmFnbWVudCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAogICAgIElubGluZUZsb3dCb3g6OnBhaW50KHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20pOwogICAgIHBhaW50RWxsaXBzaXNCb3gocGFpbnRJ
bmZvLCBwYWludE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9uIDIy
MjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgotI2luY2x1
ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCkBAIC0yNDEsNyArMjQwLDcgQEAgdm9pZCBSZW5k
ZXJTVkdSb290OjpwYWludFJlcGxhY2VkKFBhaW50SQogCiAgICAgLy8gQXBwbHkgaW5pdGlhbCB2
aWV3cG9ydCBjbGlwCiAgICAgaWYgKHNob3VsZEFwcGx5Vmlld3BvcnRDbGlwKCkpCi0gICAgICAg
IGNoaWxkUGFpbnRJbmZvLmNvbnRleHQoKS5jbGlwKHNuYXBwZWRJbnRSZWN0KG92ZXJmbG93Q2xp
cFJlY3QocGFpbnRPZmZzZXQsIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKSkpOwor
ICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0KCkuY2xpcChzbmFwcGVkSW50UmVjdChvdmVy
Zmxvd0NsaXBSZWN0KHBhaW50T2Zmc2V0KSkpOwogCiAgICAgLy8gQ29udmVydCBmcm9tIGNvbnRh
aW5lciBvZmZzZXRzIChodG1sIHJlbmRlcmVycykgdG8gYSByZWxhdGl2ZSB0cmFuc2Zvcm0gKHN2
ZyByZW5kZXJlcnMpLgogICAgIC8vIFRyYW5zZm9ybSBmcm9tIG91ciBwYWludCBjb250YWluZXIn
cyBjb29yZGluYXRlIHN5c3RlbSB0byBvdXIgbG9jYWwgY29vcmRzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321424</attachid>
            <date>2017-09-21 06:16:34 -0700</date>
            <delta_ts>2017-09-21 11:29:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>named-flow-removal-rendernamedflowfragment-6.patch</filename>
            <type>text/plain</type>
            <size>148549</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjMxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAxNy0wOS0yMSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzcyOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmUgdGhlIHJlbWFpbmluZyBuYW1lZCBmbG93IHJlbmRlcmluZyBjb2RlLgorCisg
ICAgICAgIFRoZSBmZWF0dXJlIGlzIGFscmVhZHkgZGlzYWJsZWQsIG5vIGZ1bmN0aW9uYWwgY2hh
bmdlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZWxlY3Rp
b25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6Omluc2VydGVkSW50b1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2tGbG93Ojp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6dXBkYXRlTG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zs
b3c6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93
OjpjcmVhdGVSZW5kZXJOYW1lZEZsb3dGcmFnbWVudElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y2FuSGF2ZUNoaWxkcmVuIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y2FuSGF2ZUdlbmVyYXRl
ZENoaWxkcmVuIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Rmxvdzo6bmFtZWRGbG93RnJhZ21lbnROZWVkc1VwZGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnNldFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OlJlbmRlckJsb2NrRmxvd1JhcmVEYXRhOjpS
ZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zs
b3c6OnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckVsZW1lbnQ6OmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpwdXNoQ29udGVudHNDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
bWFwTG9jYWxUb0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OmlzVW5zcGxpdHRhYmxlRm9yUGFnaW5hdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6Om92ZXJmbG93UmVjdEZvclBhaW50UmVqZWN0aW9uIGNvbnN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
YWludE1hc2tGb3JUZXh0RmlsbEJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmdlbmVyYXRpbmdFbGVtZW50IGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpSZW5kZXJGbG93VGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmludmFsaWRhdGVSZWdpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnZhbGlkYXRlUmVnaW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJlbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hS
ZWdpb25JbmZvQW5kQ3VzdG9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1Ro
cmVhZDo6dXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcmVhayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpoYXNDb21wb3NpdGluZ1JlZ2lvbkRlc2NlbmRhbnQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Z2V0
TGF5ZXJMaXN0Rm9yUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZsb3dUaHJlYWQ6OnJlZ2lvbkZvckNvbXBvc2l0ZWRMYXllciBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjYWNoZWRSZWdpb25Gb3JDb21w
b3NpdGVkTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxv
d1RocmVhZDo6dXBkYXRlTGF5ZXJUb1JlZ2lvbk1hcHBpbmdzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUFsbExheWVyVG9SZWdpb25NYXBwaW5n
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjb2xsZWN0
c0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmlzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnRD
b25zaXN0ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dU
aHJlYWQ6OmluaXRpYWxpemVSZWdpb25zQ29tcHV0ZWRBdXRvSGVpZ2h0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Om1hcmtBdXRvTG9naWNhbEhlaWdodFJl
Z2lvbnNGb3JMYXlvdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1Ro
cmVhZDo6aW5jcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0
UmVnaW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OmV4cGFuZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRSZWZsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpwYWludExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnBhaW50TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjppc0hpdENhbmRpZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGFu
ZENsaXBSZWN0Rm9yUmVnaW9uQW5kUmVmbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5k
ZXJSZWdpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjptYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFj
a2luZzo6c2hvdWxkQ2xpcENvbXBvc2l0ZWRCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjppc1NpbXBsZUNvbnRh
aW5lckNvbXBvc2l0aW5nTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjphZGp1c3RBbmNlc3RvckNvbXBvc2l0aW5nQm91bmRzRm9yRmxvd1RocmVhZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1
aXJlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1
aWxkQ29tcG9zaXRpbmdMYXllclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9ySW5kaXJlY3RSZWFzb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzdHlsZUNoYW5nZU1heUFm
ZmVjdEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZVJlZ2lvbkNv
bXBvc2l0aW5nUmVxdWlyZW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZFJlZ2lvbkNvbXBvc2l0aW5nTGF5ZXJUcmVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6Y29udGFpbmVyRm9yUmVwYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5nQmxv
Y2sgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aGFzRml4ZWRQb3NJbk5hbWVk
Rmxvd0NvbnRhaW5pbmdCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJP
YmplY3Q6OmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojppc1JlbmRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OmlzQW5vbnltb3VzQmxvY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojppc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUmVnaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246Omhhc0F1dG9M
b2dpY2FsSGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9k
ZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpsYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZUZvclBhZ2luYXRpb25JZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpsYXlvdXRDb250ZW50SW5BdXRvTG9naWNhbEhl
aWdodFJlZ2lvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6Y2hl
Y2tUd29QYXNzTGF5b3V0Rm9yQXV0b0hlaWdodFJlZ2lvbnMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dU
aHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cG9wTGF5b3V0
U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclZpZXcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jv
b3Q6OnBhaW50UmVwbGFjZWQpOgorCiAyMDE3LTA5LTIxICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJz
ZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV2ViQ3J5cHRvXSBTdXBwb3J0IEVsbGlwdGljIEN1
cnZlIFAtNTIxCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjIyMjYzKQorKysg
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI3MDgsNyAr
MjcwOCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5j
cHAKICAgICByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3Bw
Ci0gICAgcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAogICAg
IHJlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMjI2MykKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMzc1Myw4ICszNzUzLDYgQEAKIAkJOEE5QTU4NzUxMUU4NEM4MTAwOEFDRkQxIC8q
IEpTUGVyZm9ybWFuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDhBOUE1ODczMTFFODRDODEwMDhBQ0ZEMSAvKiBKU1BlcmZvcm1hbmNlLmggKi87IH07
CiAJCThBOUE1ODg4MTFFODRGMzcwMDhBQ0ZEMSAvKiBKU1BlcmZvcm1hbmNlVGltaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QTlBNTg3NzExRTg0
Qzk4MDA4QUNGRDEgLyogSlNQZXJmb3JtYW5jZVRpbWluZy5oICovOyB9OwogCQk4QUI0QkM3NzEy
NkZEQjcxMDBERUI3MjcgLyogSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBQjRCQzc2
MTI2RkRCNzEwMERFQjcyNyAvKiBJZ25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRl
ci5oICovOyB9OwotCQk4QUM4MjJGQzE4MEZDMDMzMDBGQjY0RDUgLyogUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOEFDODIyRkExODBGQzAzMzAwRkI2NEQ1IC8qIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNw
cCAqLzsgfTsKLQkJOEFDODIyRkQxODBGQzAzMzAwRkI2NEQ1IC8qIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
QUM4MjJGQjE4MEZDMDMzMDBGQjY0RDUgLyogUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCAqLzsg
fTsKIAkJOEFGNEU1NTUxMURDNUEzNjAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QUY0RTU1
MjExREM1QTM2MDAwRUQzREUgLyogUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCAqLzsgfTsKIAkJ
OEFGNEU1NTYxMURDNUEzNjAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEFGNEU1NTMxMURDNUEz
NjAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5oICovOyB9OwogCQk4QUY0RTU1QzEx
REM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBRjRFNTU5MTFEQzVBNjMwMDBFRDNERSAvKiBQ
ZXJmb3JtYW5jZVRpbWluZy5oICovOyB9OwpAQCAtMTIxMDksOCArMTIxMDcsNiBAQAogCQk4QTlB
NTg3MzExRTg0QzgxMDA4QUNGRDEgLyogSlNQZXJmb3JtYW5jZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1BlcmZvcm1hbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCThBOUE1ODc3MTFFODRDOTgwMDhBQ0ZEMSAvKiBKU1BlcmZvcm1hbmNlVGltaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUGVyZm9ybWFuY2VUaW1pbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEFCNEJDNzYxMjZGREI3MTAwREVCNzI3IC8q
IElnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCThBQzgyMkZBMTgwRkMwMzMwMEZCNjRE
NSAvKiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCThBQzgyMkZCMTgwRkMwMzMwMEZCNjRENSAvKiBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QUY0RTU1MjEx
REM1QTM2MDAwRUQzREUgLyogUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThBRjRFNTUzMTFEQzVBMzYwMDBFRDNERSAvKiBQZXJm
b3JtYW5jZU5hdmlnYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVy
Zm9ybWFuY2VOYXZpZ2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThBRjRF
NTU0MTFEQzVBMzYwMDBFRDNERSAvKiBQZXJmb3JtYW5jZU5hdmlnYXRpb24uaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yNjAwMiw4ICsyNTk5OCw2IEBACiAJCQkJQkNFMzJCOUIxNTE3QzBC
MTAwRjU0MkVDIC8qIFJlbmRlck11bHRpQ29sdW1uU2V0LmggKi8sCiAJCQkJQkMxQTdEOTUxOEZD
QjVCMDAwNDIxODc5IC8qIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmNwcCAq
LywKIAkJCQlCQzFBN0Q5NjE4RkNCNUIwMDA0MjE4NzkgLyogUmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXIuaCAqLywKLQkJCQk4QUM4MjJGQTE4MEZDMDMzMDBGQjY0RDUgLyogUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwICovLAotCQkJCThBQzgyMkZCMTgwRkMwMzMwMEZCNjRE
NSAvKiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oICovLAogCQkJCUJDRUE0ODQwMDk3RDkzMDIw
MDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuY3BwICovLAogCQkJCUJDRUE0ODQxMDk3RDkzMDIwMDk0
QzlFNCAvKiBSZW5kZXJPYmplY3QuaCAqLywKIAkJCQk4Mzg4NjczNDFEMTNCQTU5MDAzNjk3RDAg
LyogUmVuZGVyT2JqZWN0RW51bXMuaCAqLywKQEAgLTI5NzQzLDcgKzI5NzM3LDYgQEAKIAkJCQkx
QTM1ODZFMDE1MjY0QzQ1MDAyMkE2NTkgLyogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0UzMkI5QzE1MTdDMEIyMDBGNTQyRUMgLyogUmVuZGVyTXVs
dGlDb2x1bW5TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMUE3RDk4MThGQ0I1QjAwMDQyMTg3
OSAvKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJOEFDODIyRkQxODBGQzAzMzAwRkI2NEQ1IC8qIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg4MDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVy
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Mzg4NjczNTFEMTNCQTVGMDAzNjk3RDAgLyog
UmVuZGVyT2JqZWN0RW51bXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRkE5MzA4MTAzMzMxOTMw
MDdCMjVEMSAvKiBSZW5kZXJPdmVyZmxvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzcxNCw3ICsz
MzcwNyw2IEBACiAJCQkJMUEzNTg2REYxNTI2NEM0NTAwMjJBNjU5IC8qIFJlbmRlck11bHRpQ29s
dW1uRmxvd1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0UzMkI5RTE1MTdDMjI3MDBG
NTQyRUMgLyogUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMx
QTdEOTcxOEZDQjVCMDAwNDIxODc5IC8qIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9s
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCThBQzgyMkZDMTgwRkMwMzMwMEZCNjRENSAvKiBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VBNDg3RjA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE0
M0JGNTlDMTE0OTI5MjgwMEM2NDNDQSAvKiBSZW5kZXJQcm9ncmVzcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1QTU3NEYyNDEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJN
ZW51TGlzdC5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCkBAIC0xNTM2LDExICsxNTM1LDYgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bWFya0ZvclBhZ2luYXRpb25SZWxheQogCiB2b2lkIFJlbmRlckJsb2Nr
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0KQogewotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9
IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAgIC8vIENoZWNrIG91ciByZWdp
b24gcmFuZ2UgdG8gbWFrZSBzdXJlIHdlIG5lZWQgdG8gYmUgcGFpbnRpbmcgaW4gdGhpcyByZWdp
b24uCi0gICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmICFuYW1lZEZsb3dGcmFnbWVudC0+Zmxv
d1RocmVhZCgpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbih0aGlzLCBuYW1lZEZs
b3dGcmFnbWVudCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIExheW91dFBvaW50IGFkanVzdGVk
UGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAgICAgUGFpbnRQaGFzZSBw
aGFzZSA9IHBhaW50SW5mby5waGFzZTsKIApAQCAtMTU0OCw3ICsxNTQyLDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgIC8vIEZJWE1FOiBDb3VsZCBlbGlt
aW5hdGUgdGhlIGlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKSBjaGVjayBpZiB3ZSBmaXggYmFj
a2dyb3VuZCBwYWludGluZyBzbyB0aGF0IHRoZSBSZW5kZXJWaWV3CiAgICAgLy8gcGFpbnRzIHRo
ZSByb290J3MgYmFja2dyb3VuZC4KICAgICBpZiAoIWlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIo
KSkgewotICAgICAgICBMYXlvdXRSZWN0IG92ZXJmbG93Qm94ID0gb3ZlcmZsb3dSZWN0Rm9yUGFp
bnRSZWplY3Rpb24obmFtZWRGbG93RnJhZ21lbnQpOworICAgICAgICBMYXlvdXRSZWN0IG92ZXJm
bG93Qm94ID0gb3ZlcmZsb3dSZWN0Rm9yUGFpbnRSZWplY3Rpb24oKTsKICAgICAgICAgZmxpcEZv
cldyaXRpbmdNb2RlKG92ZXJmbG93Qm94KTsKICAgICAgICAgb3ZlcmZsb3dCb3gubW92ZUJ5KGFk
anVzdGVkUGFpbnRPZmZzZXQpOwogICAgICAgICBpZiAoIW92ZXJmbG93Qm94LmludGVyc2VjdHMo
cGFpbnRJbmZvLnJlY3QpCkBAIC0xOTkzLDEzICsxOTg3LDYgQEAgR2FwUmVjdHMgUmVuZGVyQmxv
Y2s6OnNlbGVjdGlvbkdhcHMoUmVuZAogICAgICAgICBsYXN0TG9naWNhbFJpZ2h0ID0gbG9naWNh
bFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbEhlaWdodCgpLCBjYWNoZSk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAotICAgIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCgpOwotICAgIGlmIChwYWludEluZm8gJiYgbmFtZWRGbG93RnJhZ21lbnQgJiYgaXM8UmVu
ZGVyRmxvd1RocmVhZD4oKnBhaW50SW5mby0+cGFpbnRDb250YWluZXIpKSB7Ci0gICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGUgY3VycmVudCBvYmplY3QgaXMgYWN0dWFsbHkgZmxvd2VkIGludG8gdGhl
IHJlZ2lvbiBiZWluZyBwYWludGVkLgotICAgICAgICBpZiAoIWRvd25jYXN0PFJlbmRlckZsb3dU
aHJlYWQ+KCpwYWludEluZm8tPnBhaW50Q29udGFpbmVyKS5vYmplY3RTaG91bGRGcmFnbWVudElu
Rmxvd1JlZ2lvbih0aGlzLCBuYW1lZEZsb3dGcmFnbWVudCkpCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KIAogICAgIGlmIChjaGlsZHJlbklubGluZSgpKQogICAgICAgICByZXN1
bHQgPSBpbmxpbmVTZWxlY3Rpb25HYXBzKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2ljYWxQb3Np
dGlvbiwgb2Zmc2V0RnJvbVJvb3RCbG9jaywgbGFzdExvZ2ljYWxUb3AsIGxhc3RMb2dpY2FsTGVm
dCwgbGFzdExvZ2ljYWxSaWdodCwgY2FjaGUsIHBhaW50SW5mbyk7CkBAIC0yNDUyLDEzICsyNDM5
LDYgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIExheW91
dFBvaW50IGFkanVzdGVkTG9jYXRpb24oYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpKTsK
ICAgICBMYXlvdXRTaXplIGxvY2FsT2Zmc2V0ID0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRp
b24pOwogCi0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKTsKLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJh
Z21lbnQgPSBmbG93VGhyZWFkID8gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KGZs
b3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKSkgOiBudWxscHRyOwotICAgIC8vIElmIHdlIGFyZSBu
b3cgc2VhcmNoaW5nIGluc2lkZSBhIHJlZ2lvbiwgbWFrZSBzdXJlIHRoaXMgZWxlbWVudAotICAg
IC8vIGlzIGJlaW5nIGZyYWdtZW50ZWQgaW50byB0aGlzIHJlZ2lvbi4KLSAgICBpZiAobmFtZWRG
bG93RnJhZ21lbnQgJiYgIWZsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVn
aW9uKHRoaXMsIG5hbWVkRmxvd0ZyYWdtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAg
ICAgaWYgKCFpc1JlbmRlclZpZXcoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRv
IGRvIGFueXRoaW5nIGF0IGFsbC4KICAgICAgICAgTGF5b3V0UmVjdCBvdmVyZmxvd0JveCA9IHZp
c3VhbE92ZXJmbG93UmVjdCgpOwpAQCAtMjUyNCw3ICsyNTA0LDcgQEAgYm9vbCBSZW5kZXJCbG9j
azo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIC8vIElmIHdlIGhhdmUgY2xpcHBpbmcsIHRo
ZW4gd2UgY2FuJ3QgaGF2ZSBhbnkgc3BpbGxvdXQuCiAgICAgYm9vbCB1c2VPdmVyZmxvd0NsaXAg
PSBoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXIoKTsKICAgICBib29s
IHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAoKSB8fCB1c2VPdmVyZmxvd0NsaXApOwotICAgIGJv
b2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gbG9jYXRp
b25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKGNvbnRyb2xDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9u
KSkgOiBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1
c3RlZExvY2F0aW9uLCBuYW1lZEZsb3dGcmFnbWVudCwgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJT
aXplKSkpOworICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9s
Q2xpcCgpID8gbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKGNvbnRyb2xDbGlwUmVjdChh
ZGp1c3RlZExvY2F0aW9uKSkgOiBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZs
b3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBudWxscHRyLCBJbmNsdWRlT3ZlcmxheVNjcm9s
bGJhclNpemUpKSk7CiAgICAgaWYgKGNoZWNrQ2hpbGRyZW4pIHsKICAgICAgICAgLy8gSGl0IHRl
c3QgZGVzY2VuZGFudHMgZmlyc3QuCiAgICAgICAgIExheW91dFNpemUgc2Nyb2xsZWRPZmZzZXQo
bG9jYWxPZmZzZXQgLSB0b0xheW91dFNpemUoc2Nyb2xsUG9zaXRpb24oKSkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJKHJldmlzaW9uIDIy
MjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTWFycXVlZS5o
IgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJl
bmRlck11bHRpQ29sdW1uU2V0LmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMTQ1LDE0ICsxNDQsMTAgQEAgUmVuZGVyQmxv
Y2tGbG93Ojp+UmVuZGVyQmxvY2tGbG93KCkKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjppbnNlcnRl
ZEludG9UcmVlKCkKIHsKICAgICBSZW5kZXJCbG9jazo6aW5zZXJ0ZWRJbnRvVHJlZSgpOwotICAg
IGNyZWF0ZVJlbmRlck5hbWVkRmxvd0ZyYWdtZW50SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBSZW5k
ZXJCbG9ja0Zsb3c6OndpbGxCZURlc3Ryb3llZCgpCiB7Ci0gICAgaWYgKHJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KCkpCi0gICAgICAgIHNldFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KG51bGxwdHIp
OwotCiAgICAgLy8gTWFrZSBzdXJlIHRvIGRlc3Ryb3kgYW5vbnltb3VzIGNoaWxkcmVuIGZpcnN0
IHdoaWxlIHRoZXkgYXJlIHN0aWxsIGNvbm5lY3RlZCB0byB0aGUgcmVzdCBvZiB0aGUgdHJlZSwg
c28gdGhhdCB0aGV5IHdpbGwKICAgICAvLyBwcm9wZXJseSBkaXJ0eSBsaW5lIGJveGVzIHRoYXQg
dGhleSBhcmUgcmVtb3ZlZCBmcm9tLiBFZmZlY3RzIHRoYXQgZG8gOmJlZm9yZS86YWZ0ZXIgb25s
eSBvbiBob3ZlciBjb3VsZCBjcmFzaCBvdGhlcndpc2UuCiAgICAgZGVzdHJveUxlZnRvdmVyQ2hp
bGRyZW4oKTsKQEAgLTQ5Niw4ICs0OTEsNiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0
QmxvY2soYm9vbCByCiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXco
KSwgKnRoaXMsIGxvY2F0aW9uT2Zmc2V0KCksIGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rp
b24oKSB8fCBzdHlsZVRvVXNlLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCksIHBhZ2VMb2dp
Y2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQpOwogCiAgICAgcHJlcGFyZVBhZ2lu
YXRpb25CZWZvcmVCbG9ja0xheW91dChyZWxheW91dENoaWxkcmVuKTsKLSAgICBpZiAoIXJlbGF5
b3V0Q2hpbGRyZW4pCi0gICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSBuYW1lZEZsb3dGcmFnbWVu
dE5lZWRzVXBkYXRlKCk7CiAKICAgICAvLyBXZSB1c2UgZm91ciB2YWx1ZXMsIG1heFRvcFBvcywg
bWF4VG9wTmVnLCBtYXhCb3R0b21Qb3MsIGFuZCBtYXhCb3R0b21OZWcsIHRvIHRyYWNrCiAgICAg
Ly8gb3VyIGN1cnJlbnQgbWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFyZ2lucy4gVGhl
c2UgdmFsdWVzIGFyZSB1c2VkIHdoZW4gd2UKQEAgLTIwNDUsOSArMjAzOCw2IEBAIHZvaWQgUmVu
ZGVyQmxvY2tGbG93OjpzdHlsZURpZENoYW5nZShTdHkKICAgICBpZiAobm9Mb25nZXJBZmZlY3Rz
UGFyZW50QmxvY2soKSAmJiBzdHlsZSgpLmlzRmxvYXRpbmcoKSAmJiBwcmV2aW91c1NpYmxpbmco
KSAmJiBwcmV2aW91c1NpYmxpbmcoKS0+aXNBbm9ueW1vdXNCbG9jaygpKQogICAgICAgICBkb3du
Y2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnBhcmVudCgpKS5tb3ZlQ2hpbGRUbygmZG93bmNh
c3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpwcmV2aW91c1NpYmxpbmcoKSksIHRoaXMpOwogCi0g
ICAgaWYgKGF1dG8gZnJhZ21lbnQgPSByZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKQotICAgICAg
ICBmcmFnbWVudC0+c2V0U3R5bGUoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNyZWF0ZVN0eWxl
KHN0eWxlKCkpKTsKLQogICAgIGlmIChkaWZmID49IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQpIHsK
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgdXNlIGEgY2hlYXBlciBzdHlsZS1vbmx5IHRl
c3QgaW5zdGVhZCBvZiBTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3IuCiAgICAgICAgIGlmIChz
ZWxmTmVlZHNMYXlvdXQoKSB8fCAhbV9zaW1wbGVMaW5lTGF5b3V0IHx8ICFTaW1wbGVMaW5lTGF5
b3V0OjpjYW5Vc2VGb3IoKnRoaXMpKQpAQCAtMzE1MSwyMCArMzE0MSw2IEBAIEdhcFJlY3RzIFJl
bmRlckJsb2NrRmxvdzo6aW5saW5lU2VsZWN0aW8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIFJlbmRlckJsb2NrRmxvdzo6Y3JlYXRlUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRJZk5lZWRl
ZCgpCi17Ci0gICAgaWYgKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgfHwgaXNSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogTXVsdGlj
b2x1bW4gcmVnaW9ucyBub3QgeWV0IHN1cHBvcnRlZCAoaHR0cDovL2Rldi53My5vcmcvY3Nzd2cv
Y3NzLXJlZ2lvbnMvI211bHRpLWNvbHVtbi1yZWdpb25zKQotICAgIGlmIChzdHlsZSgpLmlzRGlz
cGxheVJlZ2lvblR5cGUoKSAmJiBzdHlsZSgpLmhhc0Zsb3dGcm9tKCkgJiYgIXN0eWxlKCkuc3Bl
Y2lmaWVzQ29sdW1ucygpKSB7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBmbG93
RnJhZ21lbnQgPSBuZXcgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoZG9jdW1lbnQoKSwgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQ6OmNyZWF0ZVN0eWxlKHN0eWxlKCkpKTsKLSAgICAgICAgZmxvd0Zy
YWdtZW50LT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICAgICAgYWRkQ2hpbGQoZmxvd0ZyYWdtZW50
KTsKLSAgICAgICAgc2V0UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoZmxvd0ZyYWdtZW50KTsKLSAg
ICB9Ci19Ci0KIGJvb2wgUmVuZGVyQmxvY2tGbG93OjpuZWVkc0xheW91dEFmdGVyUmVnaW9uUmFu
Z2VDaGFuZ2UoKSBjb25zdAogewogICAgIC8vIEEgYmxvY2sgd2l0aG91dCBmbG9hdHMgb3IgdGhh
dCBleHBhbmRzIHRvIGVuY2xvc2UgdGhlbSB3b24ndCBuZWVkIGEgcmVsYXlvdXQKQEAgLTMxNzYs
NDAgKzMxNTIsOSBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6bmVlZHNMYXlvdXRBZnRlclJlCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2tGbG93OjpjYW5IYXZlQ2hpbGRy
ZW4oKSBjb25zdAotewotICAgIHJldHVybiAhcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSA/IFJl
bmRlckJsb2NrOjpjYW5IYXZlQ2hpbGRyZW4oKSA6IHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkt
PmNhbkhhdmVDaGlsZHJlbigpOwotfQotCi1ib29sIFJlbmRlckJsb2NrRmxvdzo6Y2FuSGF2ZUdl
bmVyYXRlZENoaWxkcmVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIXJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KCkgPyBSZW5kZXJCbG9jazo6Y2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCkgOiByZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpLT5jYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKTsKLX0KLQot
Ym9vbCBSZW5kZXJCbG9ja0Zsb3c6Om5hbWVkRmxvd0ZyYWdtZW50TmVlZHNVcGRhdGUoKSBjb25z
dAotewotICAgIGlmICghaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaGFzUmVsYXRpdmVMb2dpY2FsSGVpZ2h0
KCkgJiYgIWlzUmVuZGVyVmlldygpOwotfQotCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6dXBkYXRl
TG9naWNhbEhlaWdodCgpCiB7CiAgICAgUmVuZGVyQmxvY2s6OnVwZGF0ZUxvZ2ljYWxIZWlnaHQo
KTsKLQotICAgIGlmIChyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKSB7Ci0gICAgICAgIHJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KCktPnNldExvZ2ljYWxIZWlnaHQoc3RkOjptYXg8TGF5b3V0VW5p
dD4oMCwgbG9naWNhbEhlaWdodCgpIC0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSkp
OwotICAgICAgICByZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpLT5pbnZhbGlkYXRlUmVnaW9uSWZO
ZWVkZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyQmxvY2tGbG93OjpzZXRSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudChSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogZmxvd0ZyYWdtZW50KQotewot
ICAgIFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhJiByYXJlRGF0YSA9IGVuc3VyZVJhcmVCbG9ja0Zs
b3dEYXRhKCk7Ci0gICAgaWYgKGF1dG8qIGZsb3dGcmFnbWVudE9uRmxvdyA9IHN0ZDo6ZXhjaGFu
Z2UocmFyZURhdGEubV9yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgbnVsbHB0cikpCi0gICAgICAg
IGZsb3dGcmFnbWVudE9uRmxvdy0+ZGVzdHJveSgpOwotICAgIHJhcmVEYXRhLm1fcmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQgPSBmbG93RnJhZ21lbnQ7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93
OjpzZXRNdWx0aUNvbHVtbkZsb3dUaHJlYWQoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiBm
bG93VGhyZWFkKQpAQCAtMzUzMywxMSArMzQ3OCw5IEBAIFBvc2l0aW9uIFJlbmRlckJsb2NrRmxv
dzo6cG9zaXRpb25Gb3JQb2kKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmZpcnN0
Q2hpbGQoKSkucG9zaXRpb25Gb3JQb2ludChwb2ludCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBS
ZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
LCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJCbG9j
a0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBjb25zdCBS
ZW5kZXJSZWdpb24qKQogewotICAgIGlmIChhdXRvIGZyYWdtZW50ID0gcmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LT5wb3NpdGlvbkZvclBvaW50KHBv
aW50LCByZWdpb24pOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JQb2ludChw
b2ludCwgcmVnaW9uKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQo
cG9pbnQsIG51bGxwdHIpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRkRm9jdXNSaW5n
UmVjdHNGb3JJbmxpbmVDaGlsZHJlbihWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBM
YXlvdXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCopCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCShy
ZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAgY2xhc3MgTGF5b3V0U3RhdGVN
YWludGFpbmVyOwogY2xhc3MgTGluZUJyZWFrZXI7CiBjbGFzcyBMaW5lSW5mbzsKIGNsYXNzIFJl
bmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDsKLWNsYXNzIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
OwogY2xhc3MgUmVuZGVyUnVieVJ1bjsKIAogc3RydWN0IFdvcmRNZWFzdXJlbWVudDsKQEAgLTEx
OSw3ICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgICAgIFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhKGNv
bnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2spCiAgICAgICAgICAgICA6IG1fbWFyZ2lucyhwb3Np
dGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQoYmxvY2spLCBuZWdhdGl2ZU1hcmdpbkJlZm9yZURlZmF1
bHQoYmxvY2spLCBwb3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdChibG9jayksIG5lZ2F0aXZlTWFy
Z2luQWZ0ZXJEZWZhdWx0KGJsb2NrKSkKICAgICAgICAgICAgICwgbV9saW5lQnJlYWtUb0F2b2lk
V2lkb3coLTEpCi0gICAgICAgICAgICAsIG1fcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQobnVsbHB0
cikKICAgICAgICAgICAgICwgbV9tdWx0aUNvbHVtbkZsb3dUaHJlYWQobnVsbHB0cikKICAgICAg
ICAgICAgICwgbV9kaXNjYXJkTWFyZ2luQmVmb3JlKGZhbHNlKQogICAgICAgICAgICAgLCBtX2Rp
c2NhcmRNYXJnaW5BZnRlcihmYWxzZSkKQEAgLTE1MSw3ICsxNDksNiBAQCBwdWJsaWM6CiAgICAg
ICAgIE1hcmdpblZhbHVlcyBtX21hcmdpbnM7CiAgICAgICAgIGludCBtX2xpbmVCcmVha1RvQXZv
aWRXaWRvdzsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJvb3RJbmxpbmVCb3g+IG1fbGluZUdy
aWRCb3g7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBtX3JlbmRlck5hbWVkRmxv
d0ZyYWdtZW50OwogCiAgICAgICAgIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogbV9tdWx0
aUNvbHVtbkZsb3dUaHJlYWQ7CiAgICAgICAgIApAQCAtMjY3LDggKzI2NCw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGRpZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93KCkgY29uc3QgeyByZXR1cm4gaGFz
UmFyZUJsb2NrRmxvd0RhdGEoKSAmJiByYXJlQmxvY2tGbG93RGF0YSgpLT5tX2RpZEJyZWFrQXRM
aW5lVG9Bdm9pZFdpZG93OyB9CiAgICAgYm9vbCByZWxheW91dFRvQXZvaWRXaWRvd3MoTGF5b3V0
U3RhdGVNYWludGFpbmVyJik7CiAKLSAgICBib29sIGNhbkhhdmVHZW5lcmF0ZWRDaGlsZHJlbigp
IGNvbnN0IG92ZXJyaWRlOwotCiAgICAgUm9vdElubGluZUJveCogbGluZUdyaWRCb3goKSBjb25z
dCB7IHJldHVybiBoYXNSYXJlQmxvY2tGbG93RGF0YSgpID8gcmFyZUJsb2NrRmxvd0RhdGEoKS0+
bV9saW5lR3JpZEJveC5nZXQoKSA6IG51bGxwdHI7IH0KICAgICB2b2lkIHNldExpbmVHcmlkQm94
KHN0ZDo6dW5pcXVlX3B0cjxSb290SW5saW5lQm94PiBib3gpCiAgICAgewpAQCAtMjc2LDEwICsy
NzEsNiBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZvaWQgbGF5b3V0TGluZUdyaWRCb3goKTsKIAot
ICAgIGJvb2wgY2FuRHJvcEFub255bW91c0Jsb2NrQ2hpbGQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiAhcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsgfQotICAgIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIGhhc1JhcmVC
bG9ja0Zsb3dEYXRhKCkgPyByYXJlQmxvY2tGbG93RGF0YSgpLT5tX3JlbmRlck5hbWVkRmxvd0Zy
YWdtZW50IDogbnVsbHB0cjsgfQotICAgIHZvaWQgc2V0UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQo
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqKTsKLQogICAgIFJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZCogbXVsdGlDb2x1bW5GbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gaGFzUmFyZUJsb2Nr
Rmxvd0RhdGEoKSA/IHJhcmVCbG9ja0Zsb3dEYXRhKCktPm1fbXVsdGlDb2x1bW5GbG93VGhyZWFk
IDogbnVsbHB0cjsgfQogICAgIHZvaWQgc2V0TXVsdGlDb2x1bW5GbG93VGhyZWFkKFJlbmRlck11
bHRpQ29sdW1uRmxvd1RocmVhZCopOwogICAgIGJvb2wgd2lsbENyZWF0ZUNvbHVtbnMoc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gZGVzaXJlZENvbHVtbkNvdW50ID0gc3RkOjpudWxsb3B0KSBjb25z
dDsKQEAgLTU5NCw5ICs1ODUsNiBAQCBwcml2YXRlOiAgICAgICAgCiAgICAgdm9pZCB1cGRhdGVM
b2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoY29uc3QgRVRleHRBbGlnbiYsIGNvbnN0IFJvb3RJbmxp
bmVCb3gqLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBmbG9hdCYgbG9naWNhbExlZnQsIGZs
b2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQmIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaW50
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpOwogLy8gRU5EIE1FVEhPRFMgREVGSU5FRCBJTiBS
ZW5kZXJCbG9ja0xpbmVMYXlvdXQKIAotICAgIGJvb2wgbmFtZWRGbG93RnJhZ21lbnROZWVkc1Vw
ZGF0ZSgpIGNvbnN0OwotICAgIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0KICAgICB2b2lkIGNvbXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKExheW91dFVu
aXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdDsK
IAogICAgIHZvaWQgYWRqdXN0SW5pdGlhbExldHRlclBvc2l0aW9uKFJlbmRlckJveCYgY2hpbGRC
b3gsIExheW91dFVuaXQmIGxvZ2ljYWxUb3BPZmZzZXQsIExheW91dFVuaXQmIG1hcmdpbkJlZm9y
ZU9mZnNldCk7CkBAIC02MTMsNyArNjAxLDYgQEAgcHVibGljOgogICAgIC8vIEZJWE1FLUJMT0NL
RkxPVzogVGhlc2UgY2FuIGJlIG1hZGUgcHJvdGVjdGVkIGFnYWluIG9uY2UgYWxsIGNhbGxlcnMg
aGF2ZSBiZWVuIG1vdmVkIGhlcmUuCiAgICAgdm9pZCBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdp
bmF0aW9uKFJvb3RJbmxpbmVCb3gqLCBMYXlvdXRVbml0JiBkZWx0YU9mZnNldCwgYm9vbCYgb3Zl
cmZsb3dzUmVnaW9uLCBSZW5kZXJGbG93VGhyZWFkKik7IC8vIENvbXB1dGVzIGEgZGVsdGFPZmZz
ZXQgdmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBp
dCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLgogICAgIHZvaWQgdXBkYXRlUmVnaW9u
Rm9yTGluZShSb290SW5saW5lQm94KikgY29uc3Q7Ci0gICAgdm9pZCBjcmVhdGVSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudElmTmVlZGVkKCk7CiAKICAgICAvLyBQYWdpbmF0aW9uIHJvdXRpbmVzLgog
ICAgIGJvb2wgcmVsYXlvdXRGb3JQYWdpbmF0aW9uKExheW91dFN0YXRlTWFpbnRhaW5lciYpOwpA
QCAtNjQzLDExICs2MzAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIExpbmVXaWR0
aDsgLy8gTmVlZHMgdG8ga25vdyBGbG9hdGluZ09iamVjdAogfTsKIAotaW5saW5lIGJvb2wgUmVu
ZGVyRWxlbWVudDo6aXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGlzPFJlbmRlckJsb2NrRmxvdz4oKnRoaXMpICYmIGRvd25jYXN0PFJlbmRl
ckJsb2NrRmxvdz4oKnRoaXMpLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci19Ci0KIGlubGlu
ZSBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIFJlbmRlckJsb2NrRmxvdzo6c2ltcGxl
TGluZUxheW91dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxpbmVMYXlvdXRQYXRoKCkgPT0gU2lt
cGxlTGluZXNQYXRoIHx8ICFtX3NpbXBsZUxpbmVMYXlvdXQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3
IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCIKLSNpbmNs
dWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5o
IgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMTE3NSwxNiArMTE3NSw5IEBAIGJvb2wgUmVu
ZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXMKICAgICAgICAgfQogICAgIH0KIAotICAg
IFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2Nr
KCk7Ci0gICAgUmVuZGVyUmVnaW9uKiByZWdpb25Ub1VzZSA9IGZsb3dUaHJlYWQgPyBkb3duY2Fz
dDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigpKSA6
IG51bGxwdHI7Ci0KLSAgICAvLyBJZiB0aGUgYm94IGlzIG5vdCBjb250YWluZWQgYnkgdGhpcyBy
ZWdpb24gdGhlcmUncyBubyBwb2ludCBpbiBnb2luZyBmdXJ0aGVyLgotICAgIGlmIChyZWdpb25U
b1VzZSAmJiAhZmxvd1RocmVhZC0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24odGhp
cywgcmVnaW9uVG9Vc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAvLyBDaGVjayBv
dXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlIGNh
biBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNlICh3aGljaCBpcyB0
cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCi0gICAgTGF5b3V0UmVjdCBi
b3VuZHNSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvblRvVXNlKTsKKyAgICBMYXlv
dXRSZWN0IGJvdW5kc1JlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24obnVsbHB0cik7CiAgICAg
Ym91bmRzUmVjdC5tb3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7CiAgICAgaWYgKHZpc2libGVUb0hp
dFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgbG9jYXRpb25JbkNv
bnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CiAgICAgICAgIHVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUo
YWRqdXN0ZWRMb2NhdGlvbikpOwpAQCAtMTI1Miw3ICsxMjQ1LDcgQEAgdm9pZCBSZW5kZXJCb3g6
OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbgogICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50
V2l0aGluUm9vdCgqdGhpcykpCiAgICAgICAgIHJldHVybjsKIAotICAgIExheW91dFJlY3QgcGFp
bnRSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCgpKTsKKyAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lv
bihudWxscHRyKTsKICAgICBwYWludFJlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKICAgICBhZGp1
c3RCb3JkZXJCb3hSZWN0Rm9yUGFpbnRpbmcocGFpbnRSZWN0KTsKIApAQCAtMTczOSw3ICsxNzMy
LDcgQEAgYm9vbCBSZW5kZXJCb3g6OnB1c2hDb250ZW50c0NsaXAoUGFpbnRJbgogICAgICAgICBw
YWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOwogICAgIH0K
ICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0
b3IoKTsKLSAgICBGbG9hdFJlY3QgY2xpcFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKChp
c0NvbnRyb2xDbGlwID8gY29udHJvbENsaXBSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0KSA6IG92ZXJm
bG93Q2xpcFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQsIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCgpLCBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgcGFpbnRJbmZvLnBoYXNlKSksIGRl
dmljZVNjYWxlRmFjdG9yKTsKKyAgICBGbG9hdFJlY3QgY2xpcFJlY3QgPSBzbmFwUmVjdFRvRGV2
aWNlUGl4ZWxzKChpc0NvbnRyb2xDbGlwID8gY29udHJvbENsaXBSZWN0KGFjY3VtdWxhdGVkT2Zm
c2V0KSA6IG92ZXJmbG93Q2xpcFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQsIG51bGxwdHIsIElnbm9y
ZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBwYWludEluZm8ucGhhc2UpKSwgZGV2aWNlU2NhbGVGYWN0
b3IpOwogICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2F2ZSgpOwogICAgIGlmIChzdHlsZSgpLmhh
c0JvcmRlclJhZGl1cygpKQogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmNsaXBSb3VuZGVk
UmVjdChzdHlsZSgpLmdldFJvdW5kZWRJbm5lckJvcmRlckZvcihMYXlvdXRSZWN0KGFjY3VtdWxh
dGVkT2Zmc2V0LCBzaXplKCkpKS5waXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKGRl
dmljZVNjYWxlRmFjdG9yKSk7CkBAIC0xOTc4LDEyICsxOTcxLDcgQEAgdm9pZCBSZW5kZXJCb3g6
Om1hcExvY2FsVG9Db250YWluZXIoY29ucwogCiAgICAgbW9kZSAmPSB+QXBwbHlDb250YWluZXJG
bGlwOwogCi0gICAgLy8gRm9yIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMgaW5zaWRlIG91dC1v
Zi1mbG93IG5hbWVkIGZsb3dzLCB3ZSBkbyBub3Qgd2FudCB0bwotICAgIC8vIG1hcCB0aGVpciBw
b3NpdGlvbiBmdXJ0aGVyIHRvIHJlZ2lvbnMgYmFzZWQgb24gdGhlaXIgY29vcmRpbmF0ZXMgaW5z
aWRlIHRoZSBuYW1lZCBmbG93cy4KLSAgICBpZiAoIWNvbnRhaW5lci0+aXNPdXRPZkZsb3dSZW5k
ZXJGbG93VGhyZWFkKCkgfHwgIWZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5n
QmxvY2soKSkKLSAgICAgICAgY29udGFpbmVyLT5tYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRD
b250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2RlLCB3YXNGaXhlZCk7Ci0gICAgZWxzZQotICAg
ICAgICBjb250YWluZXItPm1hcExvY2FsVG9Db250YWluZXIoZG93bmNhc3Q8UmVuZGVyTGF5ZXJN
b2RlbE9iamVjdD4oY29udGFpbmVyKSwgdHJhbnNmb3JtU3RhdGUsIG1vZGUsIHdhc0ZpeGVkKTsK
KyAgICBjb250YWluZXItPm1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgdHJh
bnNmb3JtU3RhdGUsIG1vZGUsIHdhc0ZpeGVkKTsKIH0KIAogY29uc3QgUmVuZGVyT2JqZWN0KiBS
ZW5kZXJCb3g6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmIGdlb21ldHJ5TWFwKSBj
b25zdApAQCAtNDY0OSw5ICs0NjM3LDcgQEAgYm9vbCBSZW5kZXJCb3g6OmlzVW5zcGxpdHRhYmxl
Rm9yUGFnaW5hdAogICAgIHJldHVybiBpc1JlcGxhY2VkKCkKICAgICAgICAgfHwgaGFzVW5zcGxp
dHRhYmxlU2Nyb2xsaW5nT3ZlcmZsb3coKQogICAgICAgICB8fCAocGFyZW50KCkgJiYgaXNXcml0
aW5nTW9kZVJvb3QoKSkKLSAgICAgICAgfHwgKGlzRmxvYXRpbmcoKSAmJiBzdHlsZSgpLnN0eWxl
VHlwZSgpID09IEZJUlNUX0xFVFRFUiAmJiBzdHlsZSgpLmluaXRpYWxMZXR0ZXJEcm9wKCkgPiAw
KQotICAgICAgICB8fCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkKLSAgICAg
ICAgfHwgZml4ZWRQb3NpdGlvbmVkV2l0aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jaygpOworICAg
ICAgICB8fCAoaXNGbG9hdGluZygpICYmIHN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gRklSU1RfTEVU
VEVSICYmIHN0eWxlKCkuaW5pdGlhbExldHRlckRyb3AoKSA+IDApOwogfQogCiBMYXlvdXRVbml0
IFJlbmRlckJveDo6bGluZUhlaWdodChib29sIC8qZmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25N
b2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSAvKmxpbmVQb3NpdGlvbk1vZGUqLykgY29u
c3QKQEAgLTQ3NzcsMjIgKzQ3NjMsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmZsaXBwZWRD
bGllbnRCb3hSZQogICAgIHJldHVybiByZWN0OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6
b3ZlcmZsb3dSZWN0Rm9yUGFpbnRSZWplY3Rpb24oUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5h
bWVkRmxvd0ZyYWdtZW50KSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93UmVj
dEZvclBhaW50UmVqZWN0aW9uKCkgY29uc3QKIHsKICAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVj
dCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAgIAotICAgIC8vIFdoZW4gdXNpbmcgcmVnaW9u
cywgc29tZSBib3hlcyBtaWdodCBoYXZlIHRoZWlyIGZyYW1lIHJlY3QgcmVsYXRpdmUgdG8gdGhl
IGZsb3cgdGhyZWFkLCB3aGljaCBjb3VsZAotICAgIC8vIGNhdXNlIHRoZSBwYWludCByZWplY3Rp
b24gYWxnb3JpdGhtIHRvIHByZXZlbnQgdGhlbSBmcm9tIHBhaW50aW5nIHdoZW4gdXNpbmcgZGlm
ZmVyZW50IHdpZHRoIHJlZ2lvbnMuCi0gICAgLy8gZS5nLiBhbiBhYnNvbHV0ZWx5IHBvc2l0aW9u
ZWQgYm94IHdpdGggYm90dG9tOjBweCBhbmQgcmlnaHQ6MHB4IHdvdWxkIGhhdmUgaXQncyBmcmFt
ZVJlY3QueCByZWxhdGl2ZQotICAgIC8vIHRvIHRoZSBmbG93IHRocmVhZCwgbm90IHRoZSBsYXN0
IHJlZ2lvbiAoaW4gd2hpY2ggaXQgd2lsbCBlbmQgdXAgYmVjYXVzZSBvZiBib3R0b206MHB4KQot
ICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCAmJiBuYW1lZEZsb3dGcmFnbWVudC0+aXNWYWxpZCgp
KSB7Ci0gICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBuYW1lZEZsb3dGcmFn
bWVudC0+Zmxvd1RocmVhZCgpOwotICAgICAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uID0g
bnVsbHB0cjsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24gPSBudWxscHRyOwotICAg
ICAgICBpZiAoZmxvd1RocmVhZC0+Z2V0UmVnaW9uUmFuZ2VGb3JCb3godGhpcywgc3RhcnRSZWdp
b24sIGVuZFJlZ2lvbikpCi0gICAgICAgICAgICBvdmVyZmxvd1JlY3QudW5pdGUobmFtZWRGbG93
RnJhZ21lbnQtPnZpc3VhbE92ZXJmbG93UmVjdEZvckJveCgqdGhpcykpOwotICAgIH0KLSAgICAK
ICAgICBpZiAoIW1fb3ZlcmZsb3cgfHwgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAg
ICAgIHJldHVybiBvdmVyZmxvd1JlY3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw3IEBAIHB1YmxpYzoKICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBz
dHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB2aXN1YWxPdmVyZmxvd1JlY3QoKS54
KCkgOiB2aXN1YWxPdmVyZmxvd1JlY3QoKS55KCk7IH0KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxS
aWdodFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gdmlzdWFsT3ZlcmZsb3dSZWN0KCkubWF4WCgpIDogdmlzdWFsT3ZlcmZs
b3dSZWN0KCkubWF4WSgpOyB9CiAKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdEZvclBhaW50
UmVqZWN0aW9uKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KikgY29uc3Q7CisgICAgTGF5b3V0UmVj
dCBvdmVyZmxvd1JlY3RGb3JQYWludFJlamVjdGlvbigpIGNvbnN0OwogICAgIAogICAgIHZvaWQg
YWRkTGF5b3V0T3ZlcmZsb3coY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZvaWQgYWRkVmlzdWFs
T3ZlcmZsb3coY29uc3QgTGF5b3V0UmVjdCYpOwpAQCAtNDc3LDcgKzQ3Nyw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVk
IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRy
KSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0KGNv
bnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyUmVnaW9uKiwgT3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgUGFpbnRQaGFzZSA9
IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpOworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVy
Zmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyUmVnaW9uKiA9
IG51bGxwdHIsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUsIFBhaW50UGhhc2UgPSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kKTsKICAg
ICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdEZvckNoaWxkTGF5ZXJzKGNvbnN0
IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyUmVnaW9uKiByZWdpb24sIE92ZXJsYXlTY3Jv
bGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgeyByZXR1cm4gb3ZlcmZsb3dDbGlwUmVjdChs
b2NhdGlvbiwgcmVnaW9uLCByZWxldmFuY3kpOyB9CiAgICAgTGF5b3V0UmVjdCBjbGlwUmVjdChj
b25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiopOwogICAgIHZpcnR1YWwg
Ym9vbCBoYXNDb250cm9sQ2xpcCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJl
dmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJS
ZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIK
ICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCIKLSNpbmNsdWRlICJSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1
ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKQEAgLTY4OCwx
MCArNjg3LDYgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRNYXNrRm9yVAogICAg
IGlmIChib3gpIHsKICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IGJveC0+
cm9vdCgpOwogICAgICAgICBib3gtPnBhaW50KGluZm8sIExheW91dFBvaW50KHNjcm9sbGVkUGFp
bnRSZWN0LngoKSAtIGJveC0+eCgpLCBzY3JvbGxlZFBhaW50UmVjdC55KCkgLSBib3gtPnkoKSks
IHJvb3RCb3gubGluZVRvcCgpLCByb290Qm94LmxpbmVCb3R0b20oKSk7Ci0gICAgfSBlbHNlIGlm
IChpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpIHsKLSAgICAgICAgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQmIHJlZ2lvbiA9ICpkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCp0
aGlzKS5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAgICAgICBpZiAocmVnaW9uLmlzVmFs
aWQoKSkKLSAgICAgICAgICAgIHJlZ2lvbi5mbG93VGhyZWFkKCktPmxheWVyKCktPnBhaW50TmFt
ZWRGbG93VGhyZWFkSW5zaWRlUmVnaW9uKG1hc2tJbWFnZUNvbnRleHQsICZyZWdpb24sIG1hc2tS
ZWN0LCBtYXNrUmVjdC5sb2NhdGlvbigpLCBQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQsIFJl
bmRlckxheWVyOjpQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBMYXlvdXRTaXplIGxvY2FsT2Zmc2V0ID0gaXM8UmVuZGVyQm94PigqdGhpcykgPyBk
b3duY2FzdDxSZW5kZXJCb3g+KCp0aGlzKS5sb2NhdGlvbk9mZnNldCgpIDogTGF5b3V0U2l6ZSgp
OwogICAgICAgICBwYWludChpbmZvLCBzY3JvbGxlZFBhaW50UmVjdC5sb2NhdGlvbigpIC0gbG9j
YWxPZmZzZXQpOwpAQCAtODAyLDcgKzc5Nyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OnBhaW50RmlsbExheWUKICAgICBpZiAoY2xpcHBlZFdpdGhMb2NhbFNjcm9sbGluZykgewogICAg
ICAgICAvLyBDbGlwIHRvIHRoZSBvdmVyZmxvdyBhcmVhLgogICAgICAgICBhdXRvJiB0aGlzQm94
ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqdGhpcyk7Ci0gICAgICAgIGNvbnRleHQuY2xpcCh0aGlz
Qm94Lm92ZXJmbG93Q2xpcFJlY3QocmVjdC5sb2NhdGlvbigpLCBjdXJyZW50UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKSkpOworICAgICAgICBjb250ZXh0LmNsaXAodGhpc0JveC5vdmVyZmxvd0Ns
aXBSZWN0KHJlY3QubG9jYXRpb24oKSkpOwogICAgICAgICAKICAgICAgICAgLy8gQWRqdXN0IHRo
ZSBwYWludCByZWN0IHRvIHJlZmxlY3QgYSBzY3JvbGxlZCBjb250ZW50IGJveCB3aXRoIGJvcmRl
cnMgYXQgdGhlIGVuZHMuCiAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0Lm1vdmVCeSgtdGhpc0Jv
eC5zY3JvbGxQb3NpdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NjEsNyArNjEsNiBAQCBjbGFzcyBCb3JkZXJFZGdlOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFz
cyBJbmxpbmVGbG93Qm94OwogY2xhc3MgS2V5ZnJhbWVMaXN0OwotY2xhc3MgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQ7CiBjbGFzcyBSZW5kZXJUZXh0RnJhZ21lbnQ7CiBjbGFzcyBTdGlja3lQb3Np
dGlvblZpZXdwb3J0Q29uc3RyYWludHM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuaAkocmV2aXNpb24gMjIyMjYzKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc1JlbmRlckJsb2NrRmxvdygpIGNvbnN0OwogICAgIGJvb2wgaXNS
ZW5kZXJSZXBsYWNlZCgpIGNvbnN0OwogICAgIGJvb2wgaXNSZW5kZXJJbmxpbmUoKSBjb25zdDsK
LSAgICBib29sIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0NoaWxkQWxsb3dlZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQg
YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCA9IG51bGxwdHIpOwpAQCAtNDE4LDggKzQxNyw2IEBAIGlubGluZSBib29sIFJlbmRlckVsZW1l
bnQ6OmlzUmVuZGVySW5saW4KIAogaW5saW5lIEVsZW1lbnQqIFJlbmRlckVsZW1lbnQ6OmdlbmVy
YXRpbmdFbGVtZW50KCkgY29uc3QKIHsKLSAgICBpZiAocGFyZW50KCkgJiYgaXNSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCgpKQotICAgICAgICByZXR1cm4gcGFyZW50KCktPmdlbmVyYXRpbmdFbGVt
ZW50KCk7CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KFJlbmRlck9iamVjdDo6Z2VuZXJh
dGluZ05vZGUoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzks
NiBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVNlY3Rpb24uaCIKQEAgLTUz
LDcgKzUyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogUmVuZGVyRmxvd1RocmVhZDo6UmVuZGVy
Rmxvd1RocmVhZChEb2N1bWVudCYgZG9jdW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCiAgICAg
OiBSZW5kZXJCbG9ja0Zsb3coZG9jdW1lbnQsIFdURk1vdmUoc3R5bGUpKQogICAgICwgbV9wcmV2
aW91c1JlZ2lvbkNvdW50KDApCi0gICAgLCBtX2F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50
KDApCiAgICAgLCBtX2N1cnJlbnRSZWdpb25NYWludGFpbmVyKG51bGxwdHIpCiAgICAgLCBtX3Jl
Z2lvbnNJbnZhbGlkYXRlZChmYWxzZSkKICAgICAsIG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNh
bFdpZHRoKHRydWUpCkBAIC02MSwxMCArNTksOCBAQCBSZW5kZXJGbG93VGhyZWFkOjpSZW5kZXJG
bG93VGhyZWFkKERvY3VtCiAgICAgLCBtX3BhZ2VMb2dpY2FsU2l6ZUNoYW5nZWQoZmFsc2UpCiAg
ICAgLCBtX2xheW91dFBoYXNlKExheW91dFBoYXNlTWVhc3VyZUNvbnRlbnQpCiAgICAgLCBtX25l
ZWRzVHdvUGhhc2VzTGF5b3V0KGZhbHNlKQotICAgICwgbV9sYXllcnNUb1JlZ2lvbk1hcHBpbmdz
RGlydHkodHJ1ZSkKIHsKICAgICBzZXRJc1JlbmRlckZsb3dUaHJlYWQodHJ1ZSk7Ci0gICAgc2V0
Rmxvd1RocmVhZFN0YXRlKEluc2lkZU91dE9mRmxvd1RocmVhZCk7CiB9CiAKIFJlbmRlclN0eWxl
IFJlbmRlckZsb3dUaHJlYWQ6OmNyZWF0ZUZsb3dUaHJlYWRTdHlsZShjb25zdCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpCkBAIC0xMTYsMTMgKzExMiw4IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVh
ZDo6aW52YWxpZGF0ZVJlZ2lvbnMKICAgICBtX3JlZ2lvblJhbmdlTWFwLmNsZWFyKCk7CiAgICAg
bV9icmVha0JlZm9yZVRvUmVnaW9uTWFwLmNsZWFyKCk7CiAgICAgbV9icmVha0FmdGVyVG9SZWdp
b25NYXAuY2xlYXIoKTsKLSAgICBpZiAobV9sYXllclRvUmVnaW9uTWFwKQotICAgICAgICBtX2xh
eWVyVG9SZWdpb25NYXAtPmNsZWFyKCk7Ci0gICAgaWYgKG1fcmVnaW9uVG9MYXllckxpc3RNYXAp
Ci0gICAgICAgIG1fcmVnaW9uVG9MYXllckxpc3RNYXAtPmNsZWFyKCk7CiAgICAgaWYgKG1fbGlu
ZVRvUmVnaW9uTWFwKQogICAgICAgICBtX2xpbmVUb1JlZ2lvbk1hcC0+Y2xlYXIoKTsKLSAgICBt
X2xheWVyc1RvUmVnaW9uTWFwcGluZ3NEaXJ0eSA9IHRydWU7CiAgICAgc2V0TmVlZHNMYXlvdXQo
bWFya2luZ1BhcmVudHMpOwogCiAgICAgbV9yZWdpb25zSW52YWxpZGF0ZWQgPSB0cnVlOwpAQCAt
MTQ1LDE2ICsxMzYsNiBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnZhbGlkYXRlUmVnaW9ucygp
CiAKICAgICAgICAgICAgICAgICByZWdpb24tPmRlbGV0ZUFsbFJlbmRlckJveFJlZ2lvbkluZm8o
KTsKIAotICAgICAgICAgICAgICAgIC8vIEluIHRoZSBtZWFzdXJlIGNvbnRlbnQgbGF5b3V0IHBo
YXNlIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgY29tcHV0ZWRBdXRvSGVpZ2h0IGZvciBhdXRv
LWhlaWdodCByZWdpb25zLgotICAgICAgICAgICAgICAgIC8vIFNlZSBpbml0aWFsaXplUmVnaW9u
c0NvbXB1dGVkQXV0b0hlaWdodCBmb3IgdGhlIGV4cGxhbmF0aW9uLgotICAgICAgICAgICAgICAg
IC8vIEFsc28sIGlmIHdlIGhhdmUgYXV0by1oZWlnaHQgcmVnaW9ucyB3ZSBjYW4ndCBhc3N1bWUg
bV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0IHRvIGJlIHRydWUgaW4gdGhlIGZpcnN0
IHBoYXNlCi0gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgYXV0by1oZWlnaHQgcmVnaW9u
cyBkb24ndCBoYXZlIHRoZWlyIGhlaWdodCBjb21wdXRlZCB5ZXQuCi0gICAgICAgICAgICAgICAg
aWYgKGluTWVhc3VyZUNvbnRlbnRMYXlvdXRQaGFzZSgpICYmIHJlZ2lvbi0+aGFzQXV0b0xvZ2lj
YWxIZWlnaHQoKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvJiBuYW1lZEZsb3dGcmFnbWVu
dCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKTsKLSAgICAgICAg
ICAgICAgICAgICAgbmFtZWRGbG93RnJhZ21lbnQuc2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KG5hbWVk
Rmxvd0ZyYWdtZW50Lm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgICAg
ICBtX3JlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWlnaHQgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB9Ci0KICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxvZ2ljYWxXaWR0aCA9
IHJlZ2lvbi0+cGFnZUxvZ2ljYWxXaWR0aCgpOwogICAgICAgICAgICAgICAgIExheW91dFVuaXQg
cmVnaW9uTG9naWNhbEhlaWdodCA9IHJlZ2lvbi0+cGFnZUxvZ2ljYWxIZWlnaHQoKTsKIApAQCAt
MTg0LDE0NiArMTY1LDE1IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6bGF5b3V0KCkKIAogICAg
IG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCA9IG1fcmVnaW9uc0ludmFsaWRhdGVkICYmIGV2ZXJI
YWRMYXlvdXQoKTsKIAotICAgIC8vIEluIGNhc2UgdGhpcyBpcyB0aGUgc2Vjb25kIHBhc3Mgb2Yg
dGhlIG1lYXN1cmUgY29udGVudCBwaGFzZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYXV0by1oZWln
aHQgcmVnaW9ucyB0byB0aGVpciBpbml0aWFsIHZhbHVlLgotICAgIC8vIElmIHRoZSByZWdpb24g
Y2hhaW4gd2FzIGludmFsaWRhdGVkIHRoaXMgd2lsbCBoYXBwZW4gYW55d2F5LgotICAgIGlmICgh
bV9yZWdpb25zSW52YWxpZGF0ZWQgJiYgaW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkpCi0g
ICAgICAgIGluaXRpYWxpemVSZWdpb25zQ29tcHV0ZWRBdXRvSGVpZ2h0KCk7Ci0KLSAgICAvLyBU
aGlzIGlzIHRoZSBmaXJzdCBwaGFzZSBvZiB0aGUgbGF5b3V0IGFuZCBiZWNhdXNlIHdlIGhhdmUg
YXV0by1oZWlnaHQgcmVnaW9ucyB3ZSdsbCBuZWVkIGEgc2Vjb25kCi0gICAgLy8gcGFzcyB0byB1
cGRhdGUgdGhlIGZsb3cgd2l0aCB0aGUgY29tcHV0ZWQgYXV0by1oZWlnaHQgcmVnaW9ucy4KICAg
ICAvLyBJdCdzIGFsc28gcG9zc2libGUgdG8gbmVlZCBhIHNlY29uZGFyeSBsYXlvdXQgaWYgdGhl
IG92ZXJmbG93IGNvbXB1dGF0aW9uIGludmFsaWRhdGVkIHRoZSByZWdpb24gY2hhaW4gKGUuZy4g
b3ZlcmZsb3c6IGF1dG8gc2Nyb2xsYmFycwogICAgIC8vIHNocnVuayBzb21lIHJlZ2lvbnMpIHNv
IHJlcHJvcGFnYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgbV9uZWVkc1R3b1BoYXNlc0xheW91dCA9
IChpbk1lYXN1cmVDb250ZW50TGF5b3V0UGhhc2UoKSAmJiBoYXNBdXRvTG9naWNhbEhlaWdodFJl
Z2lvbnMoKSkgfHwgKGluT3ZlcmZsb3dMYXlvdXRQaGFzZSgpICYmIG1fcmVnaW9uc0ludmFsaWRh
dGVkKTsKKyAgICBtX25lZWRzVHdvUGhhc2VzTGF5b3V0ID0gaW5PdmVyZmxvd0xheW91dFBoYXNl
KCkgJiYgbV9yZWdpb25zSW52YWxpZGF0ZWQ7CiAKICAgICB2YWxpZGF0ZVJlZ2lvbnMoKTsKIAog
ICAgIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0KCk7CiAKICAgICBtX3BhZ2VMb2dpY2FsU2l6ZUNo
YW5nZWQgPSBmYWxzZTsKLQotICAgIC8vIElmIHRoZXJlIGFyZSBjaGlsZHJlbiBsYXllcnMgaW4g
dGhlIFJlbmRlckZsb3dUaHJlYWQgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQot
ICAgIC8vIGNvbXBvc2l0ZWQgY2hpbGRyZW4gbGF5ZXJzIHdpbGwgbGFuZCBpbiB0aGUgcmlnaHQg
UmVuZGVyUmVnaW9ucy4gQWxzbywgdGhlIHBhcmVudCBSZW5kZXJSZWdpb25zCi0gICAgLy8gd2ls
bCBnZXQgUmVuZGVyTGF5ZXJzIGFuZCBiZWNvbWUgY29tcG9zaXRlZCBhcyBuZWVkZWQuCi0gICAg
Ly8gTm90ZSB0aGF0IHRoZXJlJ3Mgbm8gbmVlZCB0byBkbyBzbyBmb3IgdGhlIGlubGluZSBtdWx0
aS1jb2x1bW4gYXMgd2UgYXJlIG5vdCBtb3ZpbmcgbGF5ZXJzIGludG8gZGlmZmVyZW50Ci0gICAg
Ly8gY29udGFpbmVycywgYnV0IGp1c3QgYWRqdXN0aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGUgUmVu
ZGVyTGF5ZXJCYWNraW5nLgotICAgIGlmICghbV9uZWVkc1R3b1BoYXNlc0xheW91dCkgewotICAg
ICAgICAvLyBJZiB3ZSBoYXZlIGxheWVycyB0aGF0IG1vdmVkIGZyb20gb25lIHJlZ2lvbiB0byBh
bm90aGVyLCB3ZSB0cmlnZ2VyCi0gICAgICAgIC8vIGEgY29tcG9zaXRlZCBsYXllcnMgcmVidWls
ZCBpbiBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWdpb25zIHdpbGwgY29sbGVjdCB0aGUg
cmlnaHQgbGF5ZXJzLgotICAgICAgICBpZiAodXBkYXRlQWxsTGF5ZXJUb1JlZ2lvbk1hcHBpbmdz
KCkpCi0gICAgICAgICAgICBsYXllcigpLT5jb21wb3NpdG9yKCkuc2V0Q29tcG9zaXRpbmdMYXll
cnNOZWVkUmVidWlsZCgpOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpoYXND
b21wb3NpdGluZ1JlZ2lvbkRlc2NlbmRhbnQoKSBjb25zdAotewotICAgIGZvciAoYXV0byYgcmVn
aW9uIDogbV9yZWdpb25MaXN0KSB7Ci0gICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudD4oKnJlZ2lvbikubGF5ZXJPd25lcigpLmxheWVyKCktPmhhc0NvbXBvc2l0aW5n
RGVzY2VuZGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1jb25zdCBSZW5kZXJMYXllckxpc3QqIFJlbmRlckZsb3dUaHJlYWQ6
OmdldExheWVyTGlzdEZvclJlZ2lvbihSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVnaW9uKSBj
b25zdAotewotICAgIEFTU0VSVChtX3JlZ2lvblRvTGF5ZXJMaXN0TWFwKTsKLSAgICBhdXRvIGl0
ZXJhdG9yID0gbV9yZWdpb25Ub0xheWVyTGlzdE1hcC0+ZmluZChyZWdpb24pOwotICAgIHJldHVy
biBpdGVyYXRvciA9PSBtX3JlZ2lvblRvTGF5ZXJMaXN0TWFwLT5lbmQoKSA/IG51bGxwdHIgOiAm
aXRlcmF0b3ItPnZhbHVlOwotfQotCi1SZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVyRmxv
d1RocmVhZDo6cmVnaW9uRm9yQ29tcG9zaXRlZExheWVyKFJlbmRlckxheWVyJiBjaGlsZExheWVy
KSBjb25zdAotewotICAgIGlmIChjaGlsZExheWVyLnJlbmRlcmVyKCkuZml4ZWRQb3NpdGlvbmVk
V2l0aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jaygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGlmIChjaGlsZExheWVyLnJlbmRlckJveCgpKSB7Ci0gICAgICAgIFJlbmRlclJlZ2lv
biogc3RhcnRSZWdpb24gPSBudWxscHRyOwotICAgICAgICBSZW5kZXJSZWdpb24qIGVuZFJlZ2lv
biA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChnZXRSZWdpb25SYW5nZUZvckJveChjaGlsZExheWVy
LnJlbmRlckJveCgpLCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKSkKLSAgICAgICAgICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oc3RhcnRSZWdpb24pOwotICAgIH0K
LQotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyB3aGVuIHdlJ2xsIGhhdmUgcmVnaW9uIHJhbmdl
cyBmb3IgaW5saW5lcyBhcyB3ZWxsLgotICAgIExheW91dFBvaW50IGZsb3dUaHJlYWRPZmZzZXQg
PSBmbG9vcmVkTGF5b3V0UG9pbnQoY2hpbGRMYXllci5yZW5kZXJlcigpLmxvY2FsVG9Db250YWlu
ZXJQb2ludChMYXlvdXRQb2ludCgpLCB0aGlzLCBBcHBseUNvbnRhaW5lckZsaXApKTsKLSAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KHJlZ2lvbkF0QmxvY2tPZmZz
ZXQoMCwgZmxpcEZvcldyaXRpbmdNb2RlKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmbG93
VGhyZWFkT2Zmc2V0LnkoKSA6IGZsb3dUaHJlYWRPZmZzZXQueCgpKSwgdHJ1ZSkpOwotfQotCi1S
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogUmVuZGVyRmxvd1RocmVhZDo6Y2FjaGVkUmVnaW9uRm9y
Q29tcG9zaXRlZExheWVyKFJlbmRlckxheWVyJiBjaGlsZExheWVyKSBjb25zdAotewotICAgIGlm
ICghbV9sYXllclRvUmVnaW9uTWFwKSB7Ci0gICAgICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsK
LSAgICAgICAgQVNTRVJUKG1fbGF5ZXJzVG9SZWdpb25NYXBwaW5nc0RpcnR5KTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5h
bWVkRmxvd0ZyYWdtZW50ID0gbV9sYXllclRvUmVnaW9uTWFwLT5nZXQoJmNoaWxkTGF5ZXIpOwot
ICAgIEFTU0VSVCghbmFtZWRGbG93RnJhZ21lbnQgfHwgbV9yZWdpb25MaXN0LmNvbnRhaW5zKG5h
bWVkRmxvd0ZyYWdtZW50KSk7Ci0gICAgcmV0dXJuIG5hbWVkRmxvd0ZyYWdtZW50OwotfQotCi12
b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUxheWVyVG9SZWdpb25NYXBwaW5ncyhSZW5kZXJM
YXllciYgbGF5ZXIsIExheWVyVG9SZWdpb25NYXAmIGxheWVyVG9SZWdpb25NYXAsIFJlZ2lvblRv
TGF5ZXJMaXN0TWFwJiByZWdpb25Ub0xheWVyTGlzdE1hcCwgYm9vbCYgbmVlZHNMYXllclVwZGF0
ZSkKLXsKLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVnaW9uID0gcmVnaW9uRm9yQ29t
cG9zaXRlZExheWVyKGxheWVyKTsKLSAgICBpZiAoIW5lZWRzTGF5ZXJVcGRhdGUpIHsKLSAgICAg
ICAgLy8gRmlndXJlIG91dCBpZiB3ZSBtb3ZlZCB0aGlzIGxheWVyIGZyb20gYSByZWdpb24gdG8g
dGhlIG90aGVyLgotICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcHJldmlvdXNSZWdp
b24gPSBjYWNoZWRSZWdpb25Gb3JDb21wb3NpdGVkTGF5ZXIobGF5ZXIpOwotICAgICAgICBpZiAo
cHJldmlvdXNSZWdpb24gIT0gcmVnaW9uKQotICAgICAgICAgICAgbmVlZHNMYXllclVwZGF0ZSA9
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFyZWdpb24pCi0gICAgICAgIHJldHVybjsKLQotICAg
IGxheWVyVG9SZWdpb25NYXAuc2V0KCZsYXllciwgcmVnaW9uKTsKLQotICAgIGF1dG8gaXRlcmF0
b3IgPSByZWdpb25Ub0xheWVyTGlzdE1hcC5maW5kKHJlZ2lvbik7Ci0gICAgUmVuZGVyTGF5ZXJM
aXN0JiBsaXN0ID0gaXRlcmF0b3IgPT0gcmVnaW9uVG9MYXllckxpc3RNYXAuZW5kKCkgPyByZWdp
b25Ub0xheWVyTGlzdE1hcC5zZXQocmVnaW9uLCBSZW5kZXJMYXllckxpc3QoKSkuaXRlcmF0b3It
PnZhbHVlIDogaXRlcmF0b3ItPnZhbHVlOwotICAgIEFTU0VSVCghbGlzdC5jb250YWlucygmbGF5
ZXIpKTsKLSAgICBsaXN0LmFwcGVuZCgmbGF5ZXIpOwotfQotCi1ib29sIFJlbmRlckZsb3dUaHJl
YWQ6OnVwZGF0ZUFsbExheWVyVG9SZWdpb25NYXBwaW5ncygpCi17Ci0gICAgaWYgKCFjb2xsZWN0
c0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIElmIHRoZSBSZW5kZXJGbG93VGhyZWFkIGhhZCBhIHotaW5kZXggbGF5ZXIgdXBkYXRl
LCB0aGVuIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb21wb3NpdGVkIGxheWVycyB0b28uCi0gICAg
Ym9vbCBuZWVkc0xheWVyVXBkYXRlID0gbGF5ZXIoKS0+aXNEaXJ0eVJlbmRlckZsb3dUaHJlYWQo
KSB8fCBtX2xheWVyc1RvUmVnaW9uTWFwcGluZ3NEaXJ0eSB8fCAhbV9sYXllclRvUmVnaW9uTWFw
LmdldCgpOwotICAgIGxheWVyKCktPnVwZGF0ZUxheWVyTGlzdHNJZk5lZWRlZCgpOwotCi0gICAg
TGF5ZXJUb1JlZ2lvbk1hcCBsYXllclRvUmVnaW9uTWFwOwotICAgIFJlZ2lvblRvTGF5ZXJMaXN0
TWFwIHJlZ2lvblRvTGF5ZXJMaXN0TWFwOwotCi0gICAgUmVuZGVyTGF5ZXJMaXN0KiBsaXN0c1td
ID0geyBsYXllcigpLT5uZWdaT3JkZXJMaXN0KCksIGxheWVyKCktPm5vcm1hbEZsb3dMaXN0KCks
IGxheWVyKCktPnBvc1pPcmRlckxpc3QoKSB9OwotICAgIGZvciAoc2l6ZV90IGxpc3RJbmRleCA9
IDA7IGxpc3RJbmRleCA8IHNpemVvZihsaXN0cykgLyBzaXplb2YobGlzdHNbMF0pOyArK2xpc3RJ
bmRleCkgewotICAgICAgICBpZiAoUmVuZGVyTGF5ZXJMaXN0KiBsaXN0ID0gbGlzdHNbbGlzdElu
ZGV4XSkgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGxpc3RTaXplID0gbGlzdC0+
c2l6ZSgpOyBpIDwgbGlzdFNpemU7ICsraSkKLSAgICAgICAgICAgICAgICB1cGRhdGVMYXllclRv
UmVnaW9uTWFwcGluZ3MoKmxpc3QtPmF0KGkpLCBsYXllclRvUmVnaW9uTWFwLCByZWdpb25Ub0xh
eWVyTGlzdE1hcCwgbmVlZHNMYXllclVwZGF0ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAobmVlZHNMYXllclVwZGF0ZSkgewotICAgICAgICBpZiAoIW1fbGF5ZXJUb1JlZ2lvbk1hcCkK
LSAgICAgICAgICAgIG1fbGF5ZXJUb1JlZ2lvbk1hcCA9IHN0ZDo6bWFrZV91bmlxdWU8TGF5ZXJU
b1JlZ2lvbk1hcD4oKTsKLSAgICAgICAgbV9sYXllclRvUmVnaW9uTWFwLT5zd2FwKGxheWVyVG9S
ZWdpb25NYXApOwotCi0gICAgICAgIGlmICghbV9yZWdpb25Ub0xheWVyTGlzdE1hcCkKLSAgICAg
ICAgICAgIG1fcmVnaW9uVG9MYXllckxpc3RNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lvblRv
TGF5ZXJMaXN0TWFwPigpOwotICAgICAgICBtX3JlZ2lvblRvTGF5ZXJMaXN0TWFwLT5zd2FwKHJl
Z2lvblRvTGF5ZXJMaXN0TWFwKTsKLSAgICB9Ci0KLSAgICBtX2xheWVyc1RvUmVnaW9uTWFwcGlu
Z3NEaXJ0eSA9IGZhbHNlOwotCi0gICAgcmV0dXJuIG5lZWRzTGF5ZXJVcGRhdGU7Ci19Ci0KLWJv
b2wgUmVuZGVyRmxvd1RocmVhZDo6Y29sbGVjdHNHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygp
IGNvbnN0Ci17Ci0gICAgLy8gV2Ugb25seSBuZWVkIHRvIG1hcCBsYXllcnMgdG8gcmVnaW9ucyBm
b3IgbmFtZWQgZmxvdyB0aHJlYWRzLgotICAgIC8vIE11bHRpLWNvbHVtbiB0aHJlYWRzIGFyZSBk
aXNwbGF5ZWQgb24gdG9wIG9mIHRoZSByZWdpb25zIGFuZCBkbyBub3QgcmVxdWlyZQotICAgIC8v
IGRpc3RyaWJ1dGluZyB0aGUgbGF5ZXJzLgotCi0gICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lk
IFJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpCkBAIC00MjUsNyArMjc1LDcg
QEAgTGF5b3V0UG9pbnQgUmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQbwogICAgIFJlbmRlclJl
Z2lvbiogc3RhcnRSZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG9iakNvbnRhaW5pbmdCbG9j
aywgcmVmZXJlbmNlUG9pbnQueSgpKTsKICAgICBpZiAoc3RhcnRSZWdpb24pIHsKICAgICAgICAg
Ly8gVGFrZSBpbnRvIGFjY291bnQgdGhlIG9mZnNldCBjb29yZGluYXRlcyBvZiB0aGUgcmVnaW9u
LgotICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogc3RhcnRSZWdpb25Cb3ggPSBpczxSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudD4oKnN0YXJ0UmVnaW9uKSA/IGRvd25jYXN0PFJlbmRlckJveE1v
ZGVsT2JqZWN0PihzdGFydFJlZ2lvbi0+cGFyZW50KCkpIDogc3RhcnRSZWdpb247CisgICAgICAg
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBzdGFydFJlZ2lvbkJveCA9IHN0YXJ0UmVnaW9uOwogICAg
ICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3Vyck9iamVjdCA9IHN0YXJ0UmVnaW9uQm94Owog
ICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3Vyck9mZnNldFBhcmVudDsKICAgICAgICAg
d2hpbGUgKChjdXJyT2Zmc2V0UGFyZW50ID0gY3Vyck9iamVjdC0+b2Zmc2V0UGFyZW50KCkpKSB7
CkBAIC03MTMsOCArNTYzLDYgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpjbGVhclJlbmRlckJv
eFJlZwogICAgICAgICAgICAgaW5zaWRlTmV3UmVnaW9uUmFuZ2UgPSB0cnVlOwogCiAgICAgICAg
IGlmICghKGluc2lkZU9sZFJlZ2lvblJhbmdlICYmIGluc2lkZU5ld1JlZ2lvblJhbmdlKSkgewot
ICAgICAgICAgICAgaWYgKGlzPFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKSkKLSAg
ICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbiku
Y2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKGJveCk7CiAgICAgICAgICAgICBpZiAocmVnaW9uLT5y
ZW5kZXJCb3hSZWdpb25JbmZvKCZib3gpKQogICAgICAgICAgICAgICAgIHJlZ2lvbi0+cmVtb3Zl
UmVuZGVyQm94UmVnaW9uSW5mbyhib3gpOwogICAgICAgICB9CkBAIC05MTIsMTkgKzc2MCw2IEBA
IGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6b2JqZWN0SW5GbG93UmVnaW8KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLSNpZm5kZWYgTkRFQlVHCi1ib29sIFJlbmRlckZsb3dUaHJlYWQ6OmlzQXV0b0xv
Z2ljYWxIZWlnaHRSZWdpb25zQ291bnRDb25zaXN0ZW50KCkgY29uc3QKLXsKLSAgICB1bnNpZ25l
ZCBhdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMgPSAwOwotICAgIGZvciAoY29uc3QgYXV0byYgcmVn
aW9uIDogbV9yZWdpb25MaXN0KSB7Ci0gICAgICAgIGlmIChyZWdpb24tPmhhc0F1dG9Mb2dpY2Fs
SGVpZ2h0KCkpCi0gICAgICAgICAgICBhdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMrKzsKLSAgICB9
Ci0KLSAgICByZXR1cm4gYXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zID09IG1fYXV0b0xvZ2ljYWxI
ZWlnaHRSZWdpb25zQ291bnQ7Ci19Ci0jZW5kaWYKLQogI2lmICFBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTl9ESVNBQkxFRAogYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpjaGVja0xpbmVz
Q29uc2lzdGVuY3koY29uc3QgUmVuZGVyQmxvY2tGbG93JiByZW1vdmVkQmxvY2spIGNvbnN0CiB7
CkBAIC05NjQsMzggKzc5OSw2IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6d2lsbEJlRGVzdHJv
eWVkKCkKICAgICBSZW5kZXJCbG9ja0Zsb3c6OndpbGxCZURlc3Ryb3llZCgpOwogfQogCi0vLyBE
dXJpbmcgdGhlIG1lYXN1cmUgY29udGVudCBsYXlvdXQgcGhhc2Ugb2YgdGhlIG5hbWVkIGZsb3cg
dGhlIHJlZ2lvbnMgYXJlIGluaXRpYWxpemVkIHdpdGggYSBoZWlnaHQgZXF1YWwgdG8gdGhlaXIg
bWF4LWhlaWdodC4KLS8vIFRoaXMgd2F5IHVuZm9yY2VkIGJyZWFrcyBhcmUgYXV0b21hdGljYWxs
eSBwbGFjZWQgd2hlbiBhIHJlZ2lvbiBpcyBmdWxsIGFuZCB0aGUgY29udGVudCBoZWlnaHQvcG9z
aXRpb24gY29ycmVjdGx5IGVzdGltYXRlZC4KLS8vIEFsc28sIHRoZSByZWdpb24gd2hlcmUgYSBm
b3JjZWQgYnJlYWsgZmFsbHMgaXMgZXhhY3RseSB0aGUgcmVnaW9uIGZvdW5kIGF0IHRoZSBmb3Jj
ZWQgYnJlYWsgb2Zmc2V0IGluc2lkZSB0aGUgZmxvdyBjb250ZW50Lgotdm9pZCBSZW5kZXJGbG93
VGhyZWFkOjppbml0aWFsaXplUmVnaW9uc0NvbXB1dGVkQXV0b0hlaWdodChSZW5kZXJSZWdpb24q
IHN0YXJ0UmVnaW9uKQotewotICAgIEFTU0VSVChpbk1lYXN1cmVDb250ZW50TGF5b3V0UGhhc2Uo
KSk7Ci0gICAgaWYgKCFoYXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZm9yIChhdXRvIHJlZ2lvbkl0ZXIgPSBzdGFydFJlZ2lvbiA/IG1fcmVnaW9u
TGlzdC5maW5kKHN0YXJ0UmVnaW9uKSA6IG1fcmVnaW9uTGlzdC5iZWdpbigpLCBlbmQgPSBtX3Jl
Z2lvbkxpc3QuZW5kKCk7IHJlZ2lvbkl0ZXIgIT0gZW5kOyArK3JlZ2lvbkl0ZXIpIHsKLSAgICAg
ICAgUmVuZGVyUmVnaW9uJiByZWdpb24gPSAqKnJlZ2lvbkl0ZXI7Ci0gICAgICAgIGlmIChyZWdp
b24uaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkgewotICAgICAgICAgICAgYXV0byYgbmFtZWRGbG93
RnJhZ21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4ocmVnaW9uKTsKLSAg
ICAgICAgICAgIG5hbWVkRmxvd0ZyYWdtZW50LnNldENvbXB1dGVkQXV0b0hlaWdodChuYW1lZEZs
b3dGcmFnbWVudC5tYXhQYWdlTG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBSZW5kZXJGbG93VGhyZWFkOjptYXJrQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zRm9y
TGF5b3V0KCkKLXsKLSAgICBBU1NFUlQoaGFzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCkpOwot
Ci0gICAgZm9yIChhdXRvJiByZWdpb24gOiBtX3JlZ2lvbkxpc3QpIHsKLSAgICAgICAgaWYgKCFy
ZWdpb24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBmaW5kIGEgd2F5IHRvIGF2b2lkIG1hcmtpbmcg
YWxsIHRoZSByZWdpb25zIGFuY2VzdG9ycyBmb3IgbGF5b3V0Ci0gICAgICAgIC8vIGFzIHdlIGFy
ZSBhbHJlYWR5IGluc2lkZSBsYXlvdXQuCi0gICAgICAgIHJlZ2lvbi0+c2V0TmVlZHNMYXlvdXQo
KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6bWFya1JlZ2lvbnNGb3JPdmVy
Zmxvd0xheW91dElmTmVlZGVkKCkKIHsKICAgICBpZiAoIWhhc1JlZ2lvbnMoKSkKQEAgLTEwMDcs
MTYgKzgxMCwxMiBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6Om1hcmtSZWdpb25zRm9yT3ZlCiAK
IHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6dXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVj
dChjb25zdCBSZW5kZXJSZWdpb24qIGxhc3RSZWdpb25XaXRoQ29udGVudCkKIHsKLSAgICBBU1NF
UlQoIWxhc3RSZWdpb25XaXRoQ29udGVudCB8fCAoaW5NZWFzdXJlQ29udGVudExheW91dFBoYXNl
KCkgJiYgaGFzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCkpKTsKKyAgICBBU1NFUlQoIWxhc3RS
ZWdpb25XaXRoQ29udGVudCk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMDsKICAg
ICBib29sIGVtcHR5UmVnaW9uc1NlZ21lbnQgPSBmYWxzZTsKICAgICAvLyBGSVhNRTogT3B0aW1p
emUgbm90IHRvIGNsZWFyIHRoZSBpbnRlcnZhbCBhbGwgdGhlIHRpbWUuIFRoaXMgaW1wbGllcyBt
YW51YWxseSBtYW5hZ2luZyB0aGUgdHJlZSBub2RlcyBsaWZlY3ljbGUuCiAgICAgbV9yZWdpb25J
bnRlcnZhbFRyZWUuY2xlYXIoKTsKICAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlz
dCkgewotICAgICAgICAvLyBJZiB3ZSBmaW5kIGFuIGVtcHR5IGF1dG8taGVpZ2h0IHJlZ2lvbiwg
Y2xlYXIgdGhlIGNvbXB1dGVkQXV0b0hlaWdodCB2YWx1ZS4KLSAgICAgICAgaWYgKGVtcHR5UmVn
aW9uc1NlZ21lbnQgJiYgcmVnaW9uLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKQotICAgICAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZWdpb24pLmNsZWFyQ29tcHV0
ZWRBdXRvSGVpZ2h0KCk7Ci0KICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Mb2dpY2FsV2lkdGgg
PSByZWdpb24tPnBhZ2VMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25M
b2dpY2FsSGVpZ2h0ID0gc3RkOjptaW48TGF5b3V0VW5pdD4oUmVuZGVyRmxvd1RocmVhZDo6bWF4
TG9naWNhbEhlaWdodCgpIC0gbG9naWNhbEhlaWdodCwgcmVnaW9uLT5sb2dpY2FsSGVpZ2h0T2ZB
bGxGbG93VGhyZWFkQ29udGVudCgpKTsKIApAQCAtMTAzOSw3ICs4MzgsNyBAQCB2b2lkIFJlbmRl
ckZsb3dUaHJlYWQ6OnVwZGF0ZVJlZ2lvbnNGbG93CiAvLyBFdmVuIGlmIHdlIHJlcXVpcmUgdGhl
IGJyZWFrIHRvIG9jY3VyIGF0IG9mZnNldEJyZWFrSW5GbG93VGhyZWFkLCBiZWNhdXNlIHJlZ2lv
bnMgbWF5IGhhdmUgbWluL21heC1oZWlnaHQgdmFsdWVzLAogLy8gaXQgaXMgcG9zc2libGUgdGhh
dCB0aGUgYnJlYWsgd2lsbCBvY2N1ciBhdCBhIGRpZmZlcmVudCBvZmZzZXQgdGhhbiB0aGUgb3Jp
Z2luYWwgb25lIHJlcXVpcmVkLgogLy8gb2Zmc2V0QnJlYWtBZGp1c3RtZW50IG1lYXN1cmVzIHRo
ZSBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgcmVxdWVzdGVkIGJyZWFrIG9mZnNldCBhbmQgdGhlIGN1
cnJlbnQgYnJlYWsgb2Zmc2V0LgotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjphZGRGb3JjZWRSZWdp
b25CcmVhayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIExheW91dFVuaXQgb2Zmc2V0QnJlYWtJ
bkZsb3dUaHJlYWQsIFJlbmRlckJveCogYnJlYWtDaGlsZCwgYm9vbCBpc0JlZm9yZSwgTGF5b3V0
VW5pdCogb2Zmc2V0QnJlYWtBZGp1c3RtZW50KQorYm9vbCBSZW5kZXJGbG93VGhyZWFkOjphZGRG
b3JjZWRSZWdpb25CcmVhayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIExheW91dFVuaXQgb2Zm
c2V0QnJlYWtJbkZsb3dUaHJlYWQsIFJlbmRlckJveCosIGJvb2wsIExheW91dFVuaXQqIG9mZnNl
dEJyZWFrQWRqdXN0bWVudCkKIHsKICAgICAvLyBXZSB0YWtlIGJyZWFrcyBpbnRvIGFjY291bnQg
Zm9yIGhlaWdodCBjb21wdXRhdGlvbiBmb3IgYXV0byBsb2dpY2FsIGhlaWdodCByZWdpb25zCiAg
ICAgLy8gb25seSBpbiB0aGUgbGF5b3V0IHBoYXNlIGluIHdoaWNoIHdlIGxheSBvdXQgdGhlIGZs
b3dzIHRocmVhZHMgdW5jb25zdHJhaW5lZApAQCAtMTA0OCwyMSArODQ3LDkgQEAgYm9vbCBSZW5k
ZXJGbG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcgogICAgIGlmICghaW5NZWFzdXJlQ29udGVu
dExheW91dFBoYXNlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIEJyZWFrcyBj
YW4gY29tZSBiZWZvcmUgb3IgYWZ0ZXIgc29tZSBvYmplY3RzLiBXZSBuZWVkIHRvIHRyYWNrIHRo
ZXNlIG9iamVjdHMsIHNvIHRoYXQgaWYgd2UgZ2V0Ci0gICAgLy8gbXVsdGlwbGUgYnJlYWtzIGZv
ciB0aGUgc2FtZSBvYmplY3QgKGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgbXVsdGlwbGUgbGF5b3V0
cyBvbiB0aGUgc2FtZSBvYmplY3QpLAotICAgIC8vIHdlIG5lZWQgdG8gaW52YWxpZGF0ZSBldmVy
eSBvdGhlciByZWdpb24gYWZ0ZXIgdGhlIG9sZCBvbmUgYW5kIHN0YXJ0IGNvbXB1dGluZyBmcm9t
IGZyZXNoLgotICAgIFJlbmRlckJveFRvUmVnaW9uTWFwJiBtYXBUb1VzZSA9IGlzQmVmb3JlID8g
bV9icmVha0JlZm9yZVRvUmVnaW9uTWFwIDogbV9icmVha0FmdGVyVG9SZWdpb25NYXA7Ci0gICAg
YXV0byBpdGVyID0gbWFwVG9Vc2UuZmluZChicmVha0NoaWxkKTsKLSAgICBpZiAoaXRlciAhPSBt
YXBUb1VzZS5lbmQoKSkgewotICAgICAgICBhdXRvIHJlZ2lvbkl0ZXIgPSBtX3JlZ2lvbkxpc3Qu
ZmluZChpdGVyLT52YWx1ZSk7Ci0gICAgICAgIEFTU0VSVChyZWdpb25JdGVyICE9IG1fcmVnaW9u
TGlzdC5lbmQoKSk7Ci0gICAgICAgIEFTU0VSVCgoKnJlZ2lvbkl0ZXIpLT5oYXNBdXRvTG9naWNh
bEhlaWdodCgpKTsKLSAgICAgICAgaW5pdGlhbGl6ZVJlZ2lvbnNDb21wdXRlZEF1dG9IZWlnaHQo
KnJlZ2lvbkl0ZXIpOwotCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSByZWdpb25z
IGZsb3cgdGhyZWFkIHBvcnRpb24gcmVjdCBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byBwcm9jZXNz
Ci0gICAgICAgIC8vIGEgYnJlYWsgb24gdGhlc2UgcmVnaW9ucy4KLSAgICAgICAgdXBkYXRlUmVn
aW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOwotICAgIH0KKyAgICAvLyBXZSBuZWVkIHRvIHVw
ZGF0ZSB0aGUgcmVnaW9ucyBmbG93IHRocmVhZCBwb3J0aW9uIHJlY3QgYmVjYXVzZSB3ZSBhcmUg
Z29pbmcgdG8gcHJvY2VzcworICAgIC8vIGEgYnJlYWsgb24gdGhlc2UgcmVnaW9ucy4KKyAgICB1
cGRhdGVSZWdpb25zRmxvd1RocmVhZFBvcnRpb25SZWN0KCk7CiAKICAgICAvLyBTaW11bGF0ZSBh
IHJlZ2lvbiBicmVhayBhdCBvZmZzZXRCcmVha0luRmxvd1RocmVhZC4gSWYgaXQgcG9pbnRzIGlu
c2lkZSBhbiBhdXRvIGxvZ2ljYWwgaGVpZ2h0IHJlZ2lvbiwKICAgICAvLyB0aGVuIGl0IGRldGVy
bWluZXMgdGhlIHJlZ2lvbiBjb21wdXRlZCBhdXRvIGhlaWdodC4KQEAgLTEwNzAsNTggKzg1Nywx
NCBAQCBib29sIFJlbmRlckZsb3dUaHJlYWQ6OmFkZEZvcmNlZFJlZ2lvbkJyCiAgICAgaWYgKCFy
ZWdpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgbGFzdEJyZWFrQWZ0ZXJD
b250ZW50ID0gYnJlYWtDaGlsZCA9PSB0aGlzOwotICAgIGJvb2wgaGFzQ29tcHV0ZWRBdXRvSGVp
Z2h0ID0gZmFsc2U7Ci0KICAgICBMYXlvdXRVbml0IGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dU
aHJlYWQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcmVnaW9uLT5mbG93VGhyZWFkUG9y
dGlvblJlY3QoKS55KCkgOiByZWdpb24tPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLngoKTsKLSAg
ICBMYXlvdXRVbml0IG9mZnNldEJyZWFrSW5DdXJyZW50UmVnaW9uID0gb2Zmc2V0QnJlYWtJbkZs
b3dUaHJlYWQgLSBjdXJyZW50UmVnaW9uT2Zmc2V0SW5GbG93VGhyZWFkOwotCi0gICAgaWYgKHJl
Z2lvbi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkgewotICAgICAgICBhdXRvJiBuYW1lZEZsb3dG
cmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKTsKLQot
ICAgICAgICAvLyBBIGZvcmNlZCBicmVhayBjYW4gYXBwZWFyIG9ubHkgaW4gYW4gYXV0by1oZWln
aHQgcmVnaW9uIHRoYXQgZGlkbid0IGhhdmUgYSBmb3JjZWQgYnJlYWsgYmVmb3JlLgotICAgICAg
ICAvLyBUaGlzIEFTU0VSVCBpcyBhIGdvb2QtZW5vdWdoIGhldXJpc3RpYyB0byB2ZXJpZnkgdGhl
IGFib3ZlIGNvbmRpdGlvbi4KLSAgICAgICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50Lm1heFBh
Z2VMb2dpY2FsSGVpZ2h0KCkgPT0gbmFtZWRGbG93RnJhZ21lbnQuY29tcHV0ZWRBdXRvSGVpZ2h0
KCkpOwotCi0gICAgICAgIG1hcFRvVXNlLnNldChicmVha0NoaWxkLCAmbmFtZWRGbG93RnJhZ21l
bnQpOwotCi0gICAgICAgIGhhc0NvbXB1dGVkQXV0b0hlaWdodCA9IHRydWU7CiAKLSAgICAgICAg
Ly8gQ29tcHV0ZSB0aGUgcmVnaW9uIGhlaWdodCBwcmV0ZW5kaW5nIHRoYXQgdGhlIG9mZnNldEJy
ZWFrSW5DdXJyZW50UmVnaW9uIGlzIHRoZSBsb2dpY2FsSGVpZ2h0IGZvciB0aGUgYXV0by1oZWln
aHQgcmVnaW9uLgotICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCA9
IG5hbWVkRmxvd0ZyYWdtZW50LmNvbnN0cmFpbkNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0QnlNaW5N
YXgob2Zmc2V0QnJlYWtJbkN1cnJlbnRSZWdpb24sIHN0ZDo6bnVsbG9wdCk7Ci0KLSAgICAgICAg
Ly8gVGhlIG5ldyBoZWlnaHQgb2YgdGhpcyByZWdpb24gbmVlZHMgdG8gYmUgc21hbGxlciB0aGFu
IHRoZSBpbml0aWFsIHZhbHVlLCB0aGUgbWF4IGhlaWdodC4gQSBmb3JjZWQgYnJlYWsgaXMgdGhl
IG9ubHkgd2F5IHRvIGNoYW5nZSB0aGUgaW5pdGlhbAotICAgICAgICAvLyBoZWlnaHQgb2YgYW4g
YXV0by1oZWlnaHQgcmVnaW9uIGJlc2lkZXMgY29udGVudCBlbmRpbmcuCi0gICAgICAgIEFTU0VS
VChyZWdpb25Db21wdXRlZEF1dG9IZWlnaHQgPD0gbmFtZWRGbG93RnJhZ21lbnQubWF4UGFnZUxv
Z2ljYWxIZWlnaHQoKSk7Ci0KLSAgICAgICAgbmFtZWRGbG93RnJhZ21lbnQuc2V0Q29tcHV0ZWRB
dXRvSGVpZ2h0KHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCk7Ci0KLSAgICAgICAgY3VycmVudFJl
Z2lvbk9mZnNldEluRmxvd1RocmVhZCArPSByZWdpb25Db21wdXRlZEF1dG9IZWlnaHQ7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dUaHJlYWQgKz0gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IHJlZ2lvbi0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkuaGVp
Z2h0KCkgOiByZWdpb24tPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLndpZHRoKCk7Ci0KLSAgICAv
LyBJZiB0aGUgYnJlYWsgd2FzIGZvdW5kIGluc2lkZSBhbiBhdXRvLWhlaWdodCByZWdpb24gaXRz
IHNpemUgY2hhbmdlZCBzbyB3ZSBuZWVkIHRvIHJlY29tcHV0ZSB0aGUgZmxvdyB0aHJlYWQgcG9y
dGlvbiByZWN0YW5nbGVzLgotICAgIC8vIEFsc28sIGlmIHRoaXMgaXMgdGhlIGxhc3QgYnJlYWsg
YWZ0ZXIgdGhlIGNvbnRlbnQgd2UgbmVlZCB0byBjbGVhciB0aGUgY29tcHV0ZWRBdXRvSGVpZ2h0
IHZhbHVlIG9uIHRoZSBsYXN0IGVtcHR5IHJlZ2lvbnMuCi0gICAgaWYgKGhhc0F1dG9Mb2dpY2Fs
SGVpZ2h0UmVnaW9ucygpICYmIGxhc3RCcmVha0FmdGVyQ29udGVudCkKLSAgICAgICAgdXBkYXRl
UmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdChyZWdpb24pOwotICAgIGVsc2UgaWYgKGhhc0Nv
bXB1dGVkQXV0b0hlaWdodCkKLSAgICAgICAgdXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9u
UmVjdCgpOworICAgIGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dUaHJlYWQgKz0gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IHJlZ2lvbi0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkuaGVpZ2h0
KCkgOiByZWdpb24tPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLndpZHRoKCk7CiAKICAgICBpZiAo
b2Zmc2V0QnJlYWtBZGp1c3RtZW50KQogICAgICAgICAqb2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0g
c3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgY3VycmVudFJlZ2lvbk9mZnNldEluRmxvd1RocmVhZCAt
IG9mZnNldEJyZWFrSW5GbG93VGhyZWFkKTsKIAotICAgIHJldHVybiBoYXNDb21wdXRlZEF1dG9I
ZWlnaHQ7Ci19Ci0KLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6aW5jcmVtZW50QXV0b0xvZ2ljYWxI
ZWlnaHRSZWdpb25zKCkKLXsKLSAgICArK21fYXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnQ7
Ci19Ci0KLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6ZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRS
ZWdpb25zKCkKLXsKLSAgICBBU1NFUlQobV9hdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudCA+
IDApOwotICAgIC0tbV9hdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudDsKKyAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y29sbGVjdExheWVyRnJhZ21lbnRz
KExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJC
b3VuZGluZ0JveCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCShyZXZpc2lvbiAyMjIyNjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNywxNSArMzcsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXJy
ZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcjsKIGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7Ci1jbGFz
cyBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVu
ZGVyUmVnaW9uOwogY2xhc3MgUm9vdElubGluZUJveDsKIAogdHlwZWRlZiBMaXN0SGFzaFNldDxS
ZW5kZXJSZWdpb24qPiBSZW5kZXJSZWdpb25MaXN0OwogdHlwZWRlZiBWZWN0b3I8UmVuZGVyTGF5
ZXIqPiBSZW5kZXJMYXllckxpc3Q7Ci10eXBlZGVmIEhhc2hNYXA8UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQqLCBSZW5kZXJMYXllckxpc3Q+IFJlZ2lvblRvTGF5ZXJMaXN0TWFwOwotdHlwZWRlZiBI
YXNoTWFwPFJlbmRlckxheWVyKiwgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqPiBMYXllclRvUmVn
aW9uTWFwOwogdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJvb3RJbmxpbmVCb3gqLCBSZW5kZXJSZWdp
b24qPiBDb250YWluaW5nUmVnaW9uTWFwOwogCiAvLyBSZW5kZXJGbG93VGhyZWFkIGlzIHVzZWQg
dG8gY29sbGVjdCBhbGwgdGhlIHJlbmRlciBvYmplY3RzIHRoYXQgcGFydGljaXBhdGUgaW4gYQpA
QCAtMTQyLDcgKzEzOSw2IEBAIHB1YmxpYzoKICAgICAvLyBDaGVjayBpZiB0aGUgb2JqZWN0IHNo
b3VsZCBiZSBwYWludGVkIGluIHRoaXMgcmVnaW9uIGFuZCBpZiB0aGUgcmVnaW9uIGlzIHBhcnQg
b2YgdGhpcyBmbG93IHRocmVhZC4KICAgICBib29sIG9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93
UmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclJlZ2lvbiopIGNvbnN0Owog
Ci0gICAgdm9pZCBtYXJrQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zRm9yTGF5b3V0KCk7CiAgICAg
dm9pZCBtYXJrUmVnaW9uc0Zvck92ZXJmbG93TGF5b3V0SWZOZWVkZWQoKTsKIAogICAgIHZpcnR1
YWwgYm9vbCBhZGRGb3JjZWRSZWdpb25CcmVhayhjb25zdCBSZW5kZXJCbG9jayosIExheW91dFVu
aXQsIFJlbmRlckJveCogYnJlYWtDaGlsZCwgYm9vbCBpc0JlZm9yZSwgTGF5b3V0VW5pdCogb2Zm
c2V0QnJlYWtBZGp1c3RtZW50ID0gMCk7CkBAIC0xNTEsMTQgKzE0Nyw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNQYWdlTG9naWNhbEhlaWdodEtub3duKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIGJvb2wgcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZDsgfQogCi0gICAgYm9vbCBoYXNBdXRvTG9naWNhbEhl
aWdodFJlZ2lvbnMoKSBjb25zdCB7IEFTU0VSVChpc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0Nv
dW50Q29uc2lzdGVudCgpKTsgcmV0dXJuIG1fYXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnQ7
IH0KLSAgICB2b2lkIGluY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygpOwotICAgIHZv
aWQgZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCk7Ci0KLSNpZm5kZWYgTkRFQlVH
Ci0gICAgYm9vbCBpc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lzdGVudCgpIGNv
bnN0OwotI2VuZGlmCi0KICAgICB2b2lkIGNvbGxlY3RMYXllckZyYWdtZW50cyhMYXllckZyYWdt
ZW50cyYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJl
Y3QmIGRpcnR5UmVjdCk7CiAgICAgTGF5b3V0UmVjdCBmcmFnbWVudHNCb3VuZGluZ0JveChjb25z
dCBMYXlvdXRSZWN0JiBsYXllckJvdW5kaW5nQm94KTsKIApAQCAtMTc4LDIzICsxNjYsNiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBuZWVkc1R3b1BoYXNlc0xheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1f
bmVlZHNUd29QaGFzZXNMYXlvdXQ7IH0KICAgICB2b2lkIGNsZWFyTmVlZHNUd29QaGFzZXNMYXlv
dXQoKSB7IG1fbmVlZHNUd29QaGFzZXNMYXlvdXQgPSBmYWxzZTsgfQogCi0gICAgLy8gV2hldGhl
ciBhbnkgb2YgdGhlIHJlZ2lvbnMgaGFzIGEgY29tcG9zaXRpbmcgZGVzY2VuZGFudC4KLSAgICBi
b29sIGhhc0NvbXBvc2l0aW5nUmVnaW9uRGVzY2VuZGFudCgpIGNvbnN0OwotCi0gICAgdm9pZCBz
ZXROZWVkc0xheWVyVG9SZWdpb25NYXBwaW5nc1VwZGF0ZSgpIHsgbV9sYXllcnNUb1JlZ2lvbk1h
cHBpbmdzRGlydHkgPSB0cnVlOyB9Ci0gICAgdm9pZCB1cGRhdGVBbGxMYXllclRvUmVnaW9uTWFw
cGluZ3NJZk5lZWRlZCgpCi0gICAgewotICAgICAgICBpZiAobV9sYXllcnNUb1JlZ2lvbk1hcHBp
bmdzRGlydHkpCi0gICAgICAgICAgICB1cGRhdGVBbGxMYXllclRvUmVnaW9uTWFwcGluZ3MoKTsK
LSAgICB9Ci0KLSAgICBjb25zdCBSZW5kZXJMYXllckxpc3QqIGdldExheWVyTGlzdEZvclJlZ2lv
bihSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCopIGNvbnN0OwotCi0gICAgUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQqIHJlZ2lvbkZvckNvbXBvc2l0ZWRMYXllcihSZW5kZXJMYXllciYpIGNvbnN0OyAv
LyBCeSBtZWFucyBvZiBnZXRSZWdpb25SYW5nZUZvckJveCBvciByZWdpb25BdEJsb2NrT2Zmc2V0
LgotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBjYWNoZWRSZWdpb25Gb3JDb21wb3NpdGVk
TGF5ZXIoUmVuZGVyTGF5ZXImKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBjb2xsZWN0c0dy
YXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkgY29uc3Q7Ci0KICAgICB2b2lkIHB1c2hGbG93VGhy
ZWFkTGF5b3V0U3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0Jik7CiAgICAgdm9pZCBwb3BGbG93VGhy
ZWFkTGF5b3V0U3RhdGUoKTsKICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFJlZ2lvbihjb25zdCBSZW5kZXJCbG9jayopIGNvbnN0OwpAQCAtMjU1LDE0ICsyMjYsNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB1cGRhdGVSZWdpb25zRmxvd1RocmVhZFBvcnRpb25SZWN0
KGNvbnN0IFJlbmRlclJlZ2lvbiogPSBudWxscHRyKTsKICAgICBib29sIHNob3VsZFJlcGFpbnQo
Y29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCi0gICAgYm9vbCB1cGRhdGVBbGxMYXllclRvUmVn
aW9uTWFwcGluZ3MoKTsKLQotICAgIC8vIFRyaWdnZXJzIGEgbGF5ZXJzJyB1cGRhdGUgaWYgYSBs
YXllciBoYXMgbW92ZWQgZnJvbSBhIHJlZ2lvbiB0byBhbm90aGVyIHNpbmNlIHRoZSBsYXN0IHVw
ZGF0ZS4KLSAgICB2b2lkIHVwZGF0ZUxheWVyVG9SZWdpb25NYXBwaW5ncyhSZW5kZXJMYXllciYs
IExheWVyVG9SZWdpb25NYXAmLCBSZWdpb25Ub0xheWVyTGlzdE1hcCYsIGJvb2wmIG5lZWRzTGF5
ZXJVcGRhdGUpOwotICAgIHZvaWQgdXBkYXRlUmVnaW9uRm9yUmVuZGVyTGF5ZXIoUmVuZGVyTGF5
ZXIqLCBMYXllclRvUmVnaW9uTWFwJiwgUmVnaW9uVG9MYXllckxpc3RNYXAmLCBib29sJiBuZWVk
c0xheWVyVXBkYXRlKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZVJlZ2lvbnNDb21wdXRlZEF1dG9I
ZWlnaHQoUmVuZGVyUmVnaW9uKiA9IG51bGxwdHIpOwotCiAgICAgaW5saW5lIGJvb2wgaGFzQ2Fj
aGVkT2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRlckJveCopIGNv
bnN0OwogICAgIGlubGluZSBMYXlvdXRVbml0IGNhY2hlZE9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFJlZ2lvbihjb25zdCBSZW5kZXJCb3gqKSBjb25zdDsKICAgICBpbmxpbmUgdm9pZCBzZXRP
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb24oY29uc3QgUmVuZGVyQm94KiwgTGF5b3V0
VW5pdCk7CkBAIC0zMzAsMTIgKzI5Myw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgUmVuZGVyUmVn
aW9uKiBtX3Jlc3VsdDsKICAgICB9OwogCi0gICAgLy8gTWFwIGEgbGF5ZXIgdG8gdGhlIHJlZ2lv
biBpbiB3aGljaCB0aGUgbGF5ZXIgaXMgcGFpbnRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5
ZXJUb1JlZ2lvbk1hcD4gbV9sYXllclRvUmVnaW9uTWFwOwotCi0gICAgLy8gTWFwIGEgcmVnaW9u
IHRvIHRoZSBsaXN0IG9mIGxheWVycyB0aGF0IHBhaW50IGluIHRoYXQgcmVnaW9uLgotICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZWdpb25Ub0xheWVyTGlzdE1hcD4gbV9yZWdpb25Ub0xheWVyTGlzdE1h
cDsKLQogICAgIC8vIE1hcCBhIGxpbmUgdG8gaXRzIGNvbnRhaW5pbmcgcmVnaW9uLgogICAgIHN0
ZDo6dW5pcXVlX3B0cjxDb250YWluaW5nUmVnaW9uTWFwPiBtX2xpbmVUb1JlZ2lvbk1hcDsKIApA
QCAtMzU0LDggKzMxMSw2IEBAIHByb3RlY3RlZDoKICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3Qg
UmVuZGVyQm94KiwgTGF5b3V0VW5pdD4gUmVuZGVyQm94VG9PZmZzZXRNYXA7CiAgICAgUmVuZGVy
Qm94VG9PZmZzZXRNYXAgbV9ib3hlc1RvT2Zmc2V0TWFwOwogCi0gICAgdW5zaWduZWQgbV9hdXRv
TG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudDsKLQogICAgIFJlZ2lvbkludGVydmFsVHJlZSBtX3Jl
Z2lvbkludGVydmFsVHJlZTsKIAogICAgIEN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyKiBt
X2N1cnJlbnRSZWdpb25NYWludGFpbmVyOwpAQCAtMzY2LDcgKzMyMSw2IEBAIHByb3RlY3RlZDoK
ICAgICBib29sIG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCA6IDE7CiAgICAgdW5zaWduZWQgbV9s
YXlvdXRQaGFzZSA6IDI7CiAgICAgYm9vbCBtX25lZWRzVHdvUGhhc2VzTGF5b3V0IDogMTsKLSAg
ICBib29sIG1fbGF5ZXJzVG9SZWdpb25NYXBwaW5nc0RpcnR5IDogMTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkocmV2aXNpb24gMjIyMjYzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNiBAQAogI2luY2x1ZGUgIlJl
bmRlckxheWVyRmlsdGVySW5mby5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNs
dWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1ZGUgIlJl
bmRlclJlcGxpY2EuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKQEAg
LTUyNSwyNyArNTI0LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KFIKICAgICAgICAgLy8gYXMgdGhlIHZhbHVlIG5vdCB1c2luZyB0aGUgY2FjaGVkIG9mZnNldCwg
YnV0IHdlIGNhbid0IGR1ZSB0byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzcwNDgKICAgICAgICAgaWYgKChmbGFncyAmIENoZWNrRm9yUmVwYWludCkgJiYgaGFzUmVw
YWludExheW91dFJlY3RzKSB7CiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKCkudmlldygpLnBy
aW50aW5nKCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGRpZFJlcGFpbnQgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBpZiAobV9yZXBhaW50U3RhdHVzICYgTmVlZHNGdWxsUmVwYWludCkgewog
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFkUmVwYWludExheW91dFJlY3RzKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENv
bnRhaW5lciwgb2xkUmVjdHMubV9yZXBhaW50UmVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghaGFkUmVwYWludExheW91dFJlY3RzIHx8IG5ld1JlY3RzLm1fcmVwYWludFJlY3QgIT0gb2xk
UmVjdHMubV9yZXBhaW50UmVjdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWhhZFJlcGFp
bnRMYXlvdXRSZWN0cyB8fCBuZXdSZWN0cy5tX3JlcGFpbnRSZWN0ICE9IG9sZFJlY3RzLm1fcmVw
YWludFJlY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2lu
Z0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBuZXdSZWN0cy5tX3JlcGFpbnRSZWN0KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRpZFJlcGFpbnQgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRSZXBhaW50QWZ0ZXJMYXlv
dXQoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugd2lsbCBjb252ZXJ0IHRo
aXMgdG8ganVzdCB0YWtlIHRoZSBvbGQgYW5kIG5ldyBSZXBhaW50TGF5b3V0UmVjdHMgb25jZQog
ICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjaGFuZ2Ugb3RoZXIgY2FsbGVycyB0byB1c2UgUmVw
YWludExheW91dFJlY3RzLgogICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRB
ZnRlckxheW91dElmTmVlZGVkKHJlcGFpbnRDb250YWluZXIsIG9sZFJlY3RzLm1fcmVwYWludFJl
Y3QsIG9sZFJlY3RzLm1fb3V0bGluZUJveCwgJm5ld1JlY3RzLm1fcmVwYWludFJlY3QsICZuZXdS
ZWN0cy5tX291dGxpbmVCb3gpOwotICAgICAgICAgICAgICAgICAgICBkaWRSZXBhaW50ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoZGlkUmVwYWludCAm
JiByZW5kZXJlcigpLmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBqdXN0IHJlcGFpbnRlZCBhIHJlZ2lvbiwgd2UgbXVz
dCBhbHNvIHJlcGFpbnQgdGhlIGZsb3cgdGhyZWFkIHNpbmNlIGl0IGlzIHRoZSBvbmUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gZG9pbmcgdGhlIGFjdHVhbCBwYWludGluZyBvZiB0aGUgZmxvd2Vk
IGNvbnRlbnQuCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50JiBy
ZWdpb24gPSAqZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihyZW5kZXJlcigpKS5yZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVnaW9uLmlzVmFsaWQo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi5mbG93VGhyZWFkKCktPmxheWVyKCkt
PnJlcGFpbnRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMTY5MiwyNCArMTY3OSw2IEBAIGVudW0gVHJhbnNwYXJl
bmN5Q2xpcEJveE1vZGUgewogCiBzdGF0aWMgTGF5b3V0UmVjdCB0cmFuc3BhcmVuY3lDbGlwQm94
KGNvbnN0IFJlbmRlckxheWVyJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgVHJhbnNw
YXJlbmN5Q2xpcEJveEJlaGF2aW9yLCBUcmFuc3BhcmVuY3lDbGlwQm94TW9kZSwgUGFpbnRCZWhh
dmlvciA9IDApOwogCi1zdGF0aWMgdm9pZCBleHBhbmRDbGlwUmVjdEZvclJlZ2lvbkFuZFJlZmxl
Y3Rpb24oTGF5b3V0UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwKLSAgICBUcmFuc3BhcmVuY3lDbGlwQm94QmVoYXZp
b3IgdHJhbnNwYXJlbmN5QmVoYXZpb3IsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvcikKLXsK
LSAgICAvLyBJZiB0aGlzIGlzIGEgcmVnaW9uLCB0aGVuIHRoZSBwYWludGluZyBpcyBhY3R1YWxs
eSBkb25lIGJ5IGl0cyBmbG93IHRocmVhZCdzIGxheWVyLgotICAgIGlmIChsYXllci5yZW5kZXJl
cigpLmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSkgewotICAgICAgICBSZW5k
ZXJCbG9ja0Zsb3cmIHJlZ2lvbkNvbnRhaW5lciA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4o
bGF5ZXIucmVuZGVyZXIoKSk7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50JiByZWdp
b24gPSAqcmVnaW9uQ29udGFpbmVyLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0gICAgICAg
IFJlbmRlckxheWVyKiBmbG93VGhyZWFkTGF5ZXIgPSByZWdpb24uZmxvd1RocmVhZCgpLT5sYXll
cigpOwotICAgICAgICBpZiAoZmxvd1RocmVhZExheWVyICYmICghbGF5ZXIucmVmbGVjdGlvbigp
IHx8IGxheWVyLnJlZmxlY3Rpb25MYXllcigpICE9IGZsb3dUaHJlYWRMYXllcikpIHsKLSAgICAg
ICAgICAgIExheW91dFJlY3QgZmxvd1RocmVhZENsaXBSZWN0ID0gdHJhbnNwYXJlbmN5Q2xpcEJv
eCgqZmxvd1RocmVhZExheWVyLCByb290TGF5ZXIsIHRyYW5zcGFyZW5jeUJlaGF2aW9yLCBEZXNj
ZW5kYW50c09mVHJhbnNwYXJlbmN5Q2xpcEJveCwgcGFpbnRCZWhhdmlvcik7Ci0gICAgICAgICAg
ICBMYXlvdXRTaXplIG1vdmVPZmZzZXQgPSAocmVnaW9uQ29udGFpbmVyLmNvbnRlbnRCb3hSZWN0
KCkubG9jYXRpb24oKSArIGxheWVyLm9mZnNldEZyb21BbmNlc3RvcihmbG93VGhyZWFkTGF5ZXIp
KSAtIHJlZ2lvbi5mbG93VGhyZWFkUG9ydGlvblJlY3QoKS5sb2NhdGlvbigpOwotICAgICAgICAg
ICAgZmxvd1RocmVhZENsaXBSZWN0Lm1vdmUobW92ZU9mZnNldCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNsaXBSZWN0LnVuaXRlKGZsb3dUaHJlYWRDbGlwUmVjdCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KIHN0YXRpYyB2b2lkIGV4cGFuZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRS
ZWZsZWN0aW9uKExheW91dFJlY3QmIGNsaXBSZWN0LCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIs
IGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsCiAgICAgVHJhbnNwYXJlbmN5Q2xpcEJveEJl
aGF2aW9yIHRyYW5zcGFyZW5jeUJlaGF2aW9yLCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3Ip
CiB7CkBAIC0xNzI0LDggKzE2OTMsNiBAQCBzdGF0aWMgdm9pZCBleHBhbmRDbGlwUmVjdEZvckRl
c2NlbmRhbnRzCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBleHBhbmRDbGlwUmVjdEZvclJlZ2lv
bkFuZFJlZmxlY3Rpb24oY2xpcFJlY3QsIGxheWVyLCByb290TGF5ZXIsIHRyYW5zcGFyZW5jeUJl
aGF2aW9yLCBwYWludEJlaGF2aW9yKTsKLQogICAgIC8vIElmIHdlIGhhdmUgYSByZWZsZWN0aW9u
LCB0aGVuIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhhdCB3aGVuIHdlIHB1c2ggdGhlIGNsaXAu
ICBSZWZsZWN0IG91ciBlbnRpcmUKICAgICAvLyBjdXJyZW50IHRyYW5zcGFyZW5jeUNsaXBCb3gg
dG8gY2F0Y2ggYWxsIGNoaWxkIGxheWVycy4KICAgICAvLyBGSVhNRTogQWNjZWxlcmF0ZWQgY29t
cG9zaXRpbmcgd2lsbCBldmVudHVhbGx5IHdhbnQgdG8gZG8gc29tZXRoaW5nIHNtYXJ0IGhlcmUg
dG8gYXZvaWQgaW5jb3Jwb3JhdGluZyB0aGlzCkBAIC0zOTcyLDE1ICszOTM5LDYgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllcihHcmFwaGljc0NvbgogICAgIGlmICghcmVuZGVyZXIoKS5v
cGFjaXR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIERvbid0IHBhaW50IHRoZSBsYXll
ciBpZiB0aGUgcmVuZGVyZXIgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyByZWdpb24uCi0gICAgLy8g
VGhpcyBpcyB0cnVlIGFzIGxvbmcgYXMgd2UgY2xhbXAgdGhlIHJhbmdlIG9mIGEgYm94IHRvIGl0
cyBjb250YWluaW5nIGJsb2NrIHJhbmdlLgotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBu
YW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAg
IGlmIChuYW1lZEZsb3dGcmFnbWVudCkgewotICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21l
bnQtPmlzVmFsaWQoKSk7Ci0gICAgICAgIGlmICghbmFtZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJl
YWQoKS0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24oJnJlbmRlcmVyKCksIG5hbWVk
Rmxvd0ZyYWdtZW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAocGFp
bnRzV2l0aFRyYW5zcGFyZW5jeShwYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcikpCiAgICAgICAg
IHBhaW50RmxhZ3MgfD0gUGFpbnRMYXllckhhdmVUcmFuc3BhcmVuY3k7CiAKQEAgLTQyNzgsMTIg
KzQyMzYsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhCiAgICAg
Ly8gRW5zdXJlIG91ciBsaXN0cyBhcmUgdXAtdG8tZGF0ZS4KICAgICB1cGRhdGVMYXllckxpc3Rz
SWZOZWVkZWQoKTsKIAotICAgIC8vIERvIG5vdCBwYWludCB0aGUgZml4ZWQgcG9zaXRpb25lZCBs
YXllcnMgaWYgdGhlIHBhaW50IHJvb3QgaXMgdGhlIG5hbWVkIGZsb3csCi0gICAgLy8gaWYgdGhl
IHBhaW50IG9yaWdpbmF0ZXMgYXQgcmVnaW9uIGxldmVsLgotICAgIGlmIChwYWludGluZ0luZm8u
cm9vdExheWVyLT5pc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKQotICAgICAgICAmJiByZW5k
ZXJlcigpLmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5nQmxvY2soKSkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZy
b21BbmNlc3RvcihwYWludGluZ0luZm8ucm9vdExheWVyKTsKICAgICBMYXlvdXRSZWN0IHJvb3RS
ZWxhdGl2ZUJvdW5kczsKICAgICBib29sIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkID0gZmFs
c2U7CkBAIC00NDk0LDExICs0NDQ2LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMaXN0KFZl
Y3RvcjxSZW5kZQogICAgIExheWVyTGlzdE11dGF0aW9uRGV0ZWN0b3IgbXV0YXRpb25DaGVja2Vy
KHRoaXMpOwogI2VuZGlmCiAKLSAgICBmb3IgKGF1dG8qIGNoaWxkTGF5ZXIgOiAqbGlzdCkgewot
ICAgICAgICBpZiAoY2hpbGRMYXllci0+aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5
ZXJzVW5kZXJSZWdpb25zKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICBmb3IgKGF1dG8q
IGNoaWxkTGF5ZXIgOiAqbGlzdCkKICAgICAgICAgY2hpbGRMYXllci0+cGFpbnRMYXllcihjb250
ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwotICAgIH0KIH0KIAogUmVuZGVyTGF5ZXIq
IFJlbmRlckxheWVyOjplbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVu
ZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUgbW9kZSkgY29uc3QK
QEAgLTQ5MzQsMTEgKzQ4ODMsNiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2lu
Z0Zsb3dUCiAgICAgcmV0dXJuIGN1cnI7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmlzRmxvd1Ro
cmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGlzPFJlbmRlckZsb3dUaHJlYWQ+KHJlbmRlcmVyKCkpICYmIGRvd25jYXN0PFJlbmRl
ckZsb3dUaHJlYWQ+KHJlbmRlcmVyKCkpLmNvbGxlY3RzR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lv
bnMoKTsKLX0KLQogLy8gQ29tcHV0ZSB0aGUgei1vZmZzZXQgb2YgdGhlIHBvaW50IGluIHRoZSB0
cmFuc2Zvcm1TdGF0ZS4KIC8vIFRoaXMgaXMgZWZmZWN0aXZlbHkgcHJvamVjdGluZyBhIHJheSBu
b3JtYWwgdG8gdGhlIHBsYW5lIG9mIGFuY2VzdG9yLCBmaW5kaW5nIHdoZXJlIHRoYXQKIC8vIHJh
eSBpbnRlcnNlY3RzIHRhcmdldCwgYW5kIGNvbXB1dGluZyB0aGUgeiBkZWx0YSBiZXR3ZWVuIHRo
b3NlIHR3byBwb2ludHMuCkBAIC00OTkyLDExICs0OTM2LDYgQEAgc3RhdGljIGJvb2wgaXNIaXRD
YW5kaWRhdGUoY29uc3QgUmVuZGVyTAogewogICAgIGlmICghaGl0TGF5ZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudHMgYXJlIG5v
dCBoaXQgY2FuZGlkYXRlcy4gVGhlIGhpdCB0ZXN0IGFsZ29yaXRobSB3aWxsIHBpY2sgdGhlIHBh
cmVudAotICAgIC8vIGxheWVyLCB0aGUgb25lIG9mIHRoZSByZWdpb24uCi0gICAgaWYgKGhpdExh
eWVyLT5yZW5kZXJlcigpLmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gVGhlIGhpdCBsYXllciBpcyBkZXB0aC1zb3J0aW5nIHdpdGgg
b3RoZXIgbGF5ZXJzLCBzbyBqdXN0IHNheSB0aGF0IGl0IHdhcyBoaXQuCiAgICAgaWYgKGNhbkRl
cHRoU29ydCkKQEAgLTUwMzIsMjIgKzQ5NzEsNiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmhpdFRlc3RMYXllcihSCiAgICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWhhc1Nl
bGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotCi0gICAgLy8gUHJldmVudCBoaXR0aW5nIHRoZSBm
aXhlZCBsYXllcnMgaW5zaWRlIHRoZSBmbG93IHRocmVhZCB3aGVuIGhpdHRpbmcgdGhyb3VnaCBy
ZWdpb25zLgotICAgIGlmIChyZW5kZXJlcigpLmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dD
b250YWluaW5nQmxvY2soKSAmJiBuYW1lZEZsb3dGcmFnbWVudCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAvLyBEb24ndCBoaXQtdGVzdCB0aGUgbGF5ZXIgaWYgdGhlIHJlbmRlcmVy
IGRvZXNuJ3QgYmVsb25nIHRvIHRoaXMgcmVnaW9uLgotICAgIC8vIFRoaXMgaXMgdHJ1ZSBhcyBs
b25nIGFzIHdlIGNsYW1wIHRoZSByYW5nZSBvZiBhIGJveCB0byBpdHMgY29udGFpbmluZyBibG9j
ayByYW5nZS4KLSAgICAvLyBGSVhNRTogRml4IGhpdCB0ZXN0aW5nIHdpdGggaW4tZmxvdyB0aHJl
YWRzIGluY2x1ZGVkIGluIG91dC1vZi1mbG93IHRocmVhZHMuCi0gICAgaWYgKG5hbWVkRmxvd0Zy
YWdtZW50KSB7Ci0gICAgICAgIEFTU0VSVChuYW1lZEZsb3dGcmFnbWVudC0+aXNWYWxpZCgpKTsK
LSAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IG5hbWVkRmxvd0ZyYWdtZW50
LT5mbG93VGhyZWFkKCk7Ci0gICAgICAgIGlmICghZmxvd1RocmVhZC0+b2JqZWN0U2hvdWxkRnJh
Z21lbnRJbkZsb3dSZWdpb24oJnJlbmRlcmVyKCksIG5hbWVkRmxvd0ZyYWdtZW50KSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQogICAgIC8vIFRoZSBuYXR1cmFsIHRoaW5n
IHdvdWxkIGJlIHRvIGtlZXAgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlIG9uIHRoZSBzdGFjaywg
YnV0IGl0J3MgYmlnLCBzbyB3ZSBoZWFwLWFsbG9jYXRlLgogCiAgICAgLy8gQXBwbHkgYSB0cmFu
c2Zvcm0gaWYgd2UgaGF2ZSBvbmUuCkBAIC01MTQ5LDE0ICs1MDcyLDYgQEAgUmVuZGVyTGF5ZXIq
IFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9
CiAKLSAgICBoaXRMYXllciA9IGhpdFRlc3RGbG93VGhyZWFkSWZSZWdpb25Gb3JGcmFnbWVudHMo
bGF5ZXJGcmFnbWVudHMsIHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwg
aGl0VGVzdExvY2F0aW9uLAotICAgICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zm
c2V0Rm9yRGVzY2VuZGFudHNQdHIsIHpPZmZzZXQsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUu
Z2V0KCksIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKLSAgICBpZiAoaGl0TGF5ZXIpIHsKLSAgICAg
ICAgaWYgKCFkZXB0aFNvcnREZXNjZW5kYW50cykKLSAgICAgICAgICAgIHJldHVybiBoaXRMYXll
cjsKLSAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSBoaXRMYXllcjsKLSAgICB9Ci0KICAgICAvLyBO
ZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRlIHRoZSBjaGlsZCBS
ZW5kZXJPYmplY3RzIG9mIHRoZSBsYXllci4gQ2hlY2sKICAgICAvLyBldmVyeSBmcmFnbWVudCBp
biByZXZlcnNlIG9yZGVyLgogICAgIGlmIChpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKQEAgLTUz
NjAsOCArNTI3NSw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QoVmUK
ICAgICBSZW5kZXJMYXllciogcmVzdWx0TGF5ZXIgPSBudWxscHRyOwogICAgIGZvciAoc2l6ZV90
IGkgPSBsaXN0LT5zaXplKCk7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgUmVuZGVyTGF5ZXIqIGNo
aWxkTGF5ZXIgPSBsaXN0LT5hdChpIC0gMSk7Ci0gICAgICAgIGlmIChjaGlsZExheWVyLT5pc0Zs
b3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSBudWxscHRyOwog
ICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRlc3RMb2NhdGlvbigp
KTsKICAgICAgICAgaGl0TGF5ZXIgPSBjaGlsZExheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExheWVy
LCB0aGlzLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9u
LCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CkBAIC01NDI5
LDM4ICs1MzQyLDYgQEAgUmVmPENsaXBSZWN0cz4gUmVuZGVyTGF5ZXI6OnVwZGF0ZUNsaXBSZQog
ICAgIHJldHVybiBjbGlwUmVjdHM7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6Om1hcExheWVyQ2xp
cFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIoQ2xpcFJlY3RzJiBjbGlwUmVjdHMpIGNvbnN0Ci17
Ci0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVu
dFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0gICAgaWYgKCFuYW1lZEZsb3dGcmFnbWVudCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50LT5w
YXJlbnQoKSAmJiBuYW1lZEZsb3dGcmFnbWVudC0+cGFyZW50KCktPmlzUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnRDb250YWluZXIoKSk7Ci0KLSAgICBDbGlwUmVjdHNDb250ZXh0IHRhcmdldENsaXBS
ZWN0c0NvbnRleHQoJm5hbWVkRmxvd0ZyYWdtZW50LT5mcmFnbWVudENvbnRhaW5lckxheWVyKCks
IFRlbXBvcmFyeUNsaXBSZWN0cyk7Ci0gICAgbmFtZWRGbG93RnJhZ21lbnQtPmZyYWdtZW50Q29u
dGFpbmVyTGF5ZXIoKS5jYWxjdWxhdGVDbGlwUmVjdHModGFyZ2V0Q2xpcFJlY3RzQ29udGV4dCwg
Y2xpcFJlY3RzKTsKLQotICAgIExheW91dFJlY3QgZmxvd1RocmVhZFBvcnRpb25SZWN0ID0gbmFt
ZWRGbG93RnJhZ21lbnQtPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOwotCi0gICAgTGF5b3V0UG9p
bnQgcG9ydGlvbkxvY2F0aW9uID0gZmxvd1RocmVhZFBvcnRpb25SZWN0LmxvY2F0aW9uKCk7Ci0g
ICAgTGF5b3V0UmVjdCByZWdpb25Db250ZW50Qm94ID0gbmFtZWRGbG93RnJhZ21lbnQtPmZyYWdt
ZW50Q29udGFpbmVyKCkuY29udGVudEJveFJlY3QoKTsKLSAgICBMYXlvdXRTaXplIG1vdmVPZmZz
ZXQgPSBwb3J0aW9uTG9jYXRpb24gLSByZWdpb25Db250ZW50Qm94LmxvY2F0aW9uKCkgKyB0b0xh
eW91dFNpemUobmFtZWRGbG93RnJhZ21lbnQtPmZyYWdtZW50Q29udGFpbmVyKCkuc2Nyb2xsUG9z
aXRpb24oKSk7Ci0KLSAgICBDbGlwUmVjdCBuZXdPdmVyZmxvd0NsaXBSZWN0ID0gY2xpcFJlY3Rz
Lm92ZXJmbG93Q2xpcFJlY3QoKTsKLSAgICBuZXdPdmVyZmxvd0NsaXBSZWN0Lm1vdmUobW92ZU9m
ZnNldCk7Ci0gICAgY2xpcFJlY3RzLnNldE92ZXJmbG93Q2xpcFJlY3QobmV3T3ZlcmZsb3dDbGlw
UmVjdCk7Ci0KLSAgICBDbGlwUmVjdCBuZXdGaXhlZENsaXBSZWN0ID0gY2xpcFJlY3RzLmZpeGVk
Q2xpcFJlY3QoKTsKLSAgICBuZXdGaXhlZENsaXBSZWN0Lm1vdmUobW92ZU9mZnNldCk7Ci0gICAg
Y2xpcFJlY3RzLnNldEZpeGVkQ2xpcFJlY3QobmV3Rml4ZWRDbGlwUmVjdCk7Ci0KLSAgICBDbGlw
UmVjdCBuZXdQb3NDbGlwUmVjdCA9IGNsaXBSZWN0cy5wb3NDbGlwUmVjdCgpOwotICAgIG5ld1Bv
c0NsaXBSZWN0Lm1vdmUobW92ZU9mZnNldCk7Ci0gICAgY2xpcFJlY3RzLnNldFBvc0NsaXBSZWN0
KG5ld1Bvc0NsaXBSZWN0KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCiBDbGlwUmVjdHMqIFJl
bmRlckxheWVyOjpjbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKICAgICBBU1NFUlQoY29udGV4dC5jbGlwUmVjdHNUeXBlIDwgTnVtQ2FjaGVkQ2xpcFJl
Y3RzVHlwZXMpOwpAQCAtNTUyMywxNCArNTQwNCwxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxj
dWxhdGVDbGlwUmVjdHMoY29uCiAgICAgICAgICAgICBvZmZzZXQgLT0gdG9MYXlvdXRTaXplKHJl
bmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNjcm9sbFBvc2l0aW9uRm9yRml4ZWRQb3NpdGlv
bigpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
KSB7Ci0gICAgICAgICAgICBDbGlwUmVjdCBuZXdPdmVyZmxvd0NsaXAgPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyhvZmZzZXQs
IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpLCBjbGlwUmVjdHNDb250ZXh0Lm92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5KTsKKyAgICAgICAgICAgIENsaXBSZWN0IG5ld092ZXJm
bG93Q2xpcCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVj
dEZvckNoaWxkTGF5ZXJzKG9mZnNldCwgbnVsbHB0ciwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSk7CiAgICAgICAgICAgICBuZXdPdmVyZmxvd0NsaXAuc2V0
QWZmZWN0ZWRCeVJhZGl1cyhyZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFkaXVzKCkpOwog
ICAgICAgICAgICAgY2xpcFJlY3RzLnNldE92ZXJmbG93Q2xpcFJlY3QoaW50ZXJzZWN0aW9uKG5l
d092ZXJmbG93Q2xpcCwgY2xpcFJlY3RzLm92ZXJmbG93Q2xpcFJlY3QoKSkpOwogICAgICAgICAg
ICAgaWYgKHJlbmRlcmVyKCkuaXNQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICAgICAgY2xpcFJl
Y3RzLnNldFBvc0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdPdmVyZmxvd0NsaXAsIGNsaXBSZWN0
cy5wb3NDbGlwUmVjdCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlbmRlcmVyKCkuaGFz
Q2xpcCgpKSB7Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmNsaXBSZWN0KG9mZnNldCwgY3VycmVudFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KCkpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlwID0gZG93
bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChvZmZzZXQsIG51bGxwdHIpOwog
ICAgICAgICAgICAgY2xpcFJlY3RzLnNldFBvc0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdQb3ND
bGlwLCBjbGlwUmVjdHMucG9zQ2xpcFJlY3QoKSkpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNl
dE92ZXJmbG93Q2xpcFJlY3QoaW50ZXJzZWN0aW9uKG5ld1Bvc0NsaXAsIGNsaXBSZWN0cy5vdmVy
Zmxvd0NsaXBSZWN0KCkpKTsKICAgICAgICAgICAgIGNsaXBSZWN0cy5zZXRGaXhlZENsaXBSZWN0
KGludGVyc2VjdGlvbihuZXdQb3NDbGlwLCBjbGlwUmVjdHMuZml4ZWRDbGlwUmVjdCgpKSk7CkBA
IC01NTk2LDEwICs1NDc3LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29u
c3QgQwogICAgICAgICBiYWNrZ3JvdW5kUmVjdCA9IHBhaW50RGlydHlSZWN0OwogCiAgICAgTGF5
b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdExvY2FsID0gb2Zmc2V0RnJvbVJvb3Q7Ci0gICAgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gY3VycmVudFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KCk7Ci0gICAgLy8gSWYgdGhlIHZpZXcgaXMgc2Nyb2xsZWQsIHRoZSBmbG93
IHRocmVhZCBpcyBub3Qgc2Nyb2xsZWQgd2l0aCBpdCBhbmQgd2Ugc2hvdWxkCi0gICAgLy8gdGFr
ZSB0aGUgc2Nyb2xsIG9mZnNldCBpbnRvIGFjY291bnQuCi0gICAgaWYgKGNsaXBSZWN0c0NvbnRl
eHQucm9vdExheWVyLT5pc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSAmJiAhbmFtZWRGbG93
RnJhZ21lbnQpIHsKKworICAgIGlmIChjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllci0+aXNPdXRP
ZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkpIHsKICAgICAgICAgTGF5b3V0UG9pbnQgYWJzUG9zID0g
TGF5b3V0UG9pbnQocmVuZGVyZXIoKS52aWV3KCkubG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQo
KSwgSXNGaXhlZCkpOwogICAgICAgICBvZmZzZXRGcm9tUm9vdExvY2FsICs9IHRvTGF5b3V0U2l6
ZShhYnNQb3MpOwogICAgIH0KQEAgLTU2MDgsNDIgKzU0ODcsMTggQEAgdm9pZCBSZW5kZXJMYXll
cjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQwogCiAgICAgZm9yZWdyb3VuZFJlY3QgPSBiYWNrZ3Jv
dW5kUmVjdDsKIAotICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBuYW1lZEZsb3dG
cmFnbWVudCA/IG5hbWVkRmxvd0ZyYWdtZW50LT5mbG93VGhyZWFkKCkgOiBudWxscHRyOwotICAg
IGlmIChpc1NlbGZQYWludGluZ0xheWVyKCkgJiYgZmxvd1RocmVhZCAmJiAhcmVuZGVyZXIoKS5p
c0luRmxvd1JlbmRlckZsb3dUaHJlYWQoKSkgewotICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJh
Z21lbnQtPmlzVmFsaWQoKSk7Ci0gICAgICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBi
b3hNb2RlbE9iamVjdCA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PihyZW5kZXJlcigp
KTsKLSAgICAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyA9IG5h
bWVkRmxvd0ZyYWdtZW50LT52aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3goYm94TW9kZWxPYmplY3Qp
OwotCi0gICAgICAgIC8vIExheWVycyBhcmUgaW4gcGh5c2ljYWwgY29vcmRpbmF0ZXMgc28gdGhl
IG9yaWdpbiBtdXN0IGJlIG1vdmVkIHRvIHRoZSBwaHlzaWNhbCB0b3AtbGVmdCBvZiB0aGUgZmxv
d3RocmVhZC4KLSAgICAgICAgaWYgKCZib3hNb2RlbE9iamVjdCA9PSBmbG93VGhyZWFkICYmIGZs
b3dUaHJlYWQtPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAgICAg
ICAgICAgaWYgKGZsb3dUaHJlYWQtPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
LSAgICAgICAgICAgICAgICBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdy5tb3ZlQnkoTGF5
b3V0UG9pbnQoMCwgZmxvd1RocmVhZC0+aGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdy5tb3ZlQnkoTGF5b3V0
UG9pbnQoZmxvd1RocmVhZC0+d2lkdGgoKSwgMCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgUmVuZGVyQmxvY2sqIHJlbmRlcmVyQ29udGFpbmluZ0Jsb2NrID0gaXM8UmVuZGVyQmxv
Y2s+KGJveE1vZGVsT2JqZWN0LmVuY2xvc2luZ0JveCgpKSA/ICZkb3duY2FzdDxSZW5kZXJCbG9j
az4oYm94TW9kZWxPYmplY3QuZW5jbG9zaW5nQm94KCkpIDogbnVsbHB0cjsKLSAgICAgICAgICAg
IGlmIChyZW5kZXJlckNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgICAgICByZW5kZXJlckNv
bnRhaW5pbmdCbG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKGxheWVyQm91bmRzV2l0aFZpc3VhbE92
ZXJmbG93KTsKLSAgICAgICAgfQotCi0gICAgICAgIGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJm
bG93Lm1vdmUob2Zmc2V0RnJvbVJvb3RMb2NhbCk7Ci0gICAgICAgIGJhY2tncm91bmRSZWN0Lmlu
dGVyc2VjdChsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7Ci0KLSAgICAgICAgZm9yZWdy
b3VuZFJlY3QgPSBiYWNrZ3JvdW5kUmVjdDsKLSAgICB9Ci0KICAgICAvLyBVcGRhdGUgdGhlIGNs
aXAgcmVjdHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBjaGlsZCBsYXllcnMuCiAgICAgaWYgKHJl
bmRlcmVyKCkuaGFzQ2xpcE9yT3ZlcmZsb3dDbGlwKCkpIHsKICAgICAgICAgLy8gVGhpcyBsYXll
ciBlc3RhYmxpc2hlcyBhIGNsaXAgb2Ygc29tZSBraW5kLgogICAgICAgICBpZiAocmVuZGVyZXIo
KS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAodGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXll
ciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJm
bG93Q2xpcCkpIHsKLSAgICAgICAgICAgIGZvcmVncm91bmRSZWN0LmludGVyc2VjdChkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QodG9MYXlvdXRQb2ludChv
ZmZzZXRGcm9tUm9vdExvY2FsKSwgbmFtZWRGbG93RnJhZ21lbnQsIGNsaXBSZWN0c0NvbnRleHQu
b3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kpKTsKKyAgICAgICAgICAgIGZvcmVncm91bmRS
ZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xp
cFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRGcm9tUm9vdExvY2FsKSwgbnVsbHB0ciwgY2xpcFJl
Y3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSkpOwogICAgICAgICAgICAg
aWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSkKICAgICAgICAgICAgICAg
ICBmb3JlZ3JvdW5kUmVjdC5zZXRBZmZlY3RlZEJ5UmFkaXVzKHRydWUpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKSB7CiAgICAgICAgICAgICAvLyBDbGlw
IGFwcGxpZXMgdG8gKnVzKiBhcyB3ZWxsLCBzbyB1cGRhdGUgdGhlIGRhbWFnZVJlY3QuCi0gICAg
ICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRl
cmVyKCkpLmNsaXBSZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbVJvb3RMb2NhbCksIG5hbWVk
Rmxvd0ZyYWdtZW50KTsKKyAgICAgICAgICAgIExheW91dFJlY3QgbmV3UG9zQ2xpcCA9IGRvd25j
YXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuY2xpcFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRG
cm9tUm9vdExvY2FsKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRl
cnNlY3QobmV3UG9zQ2xpcCk7CiAgICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRlcnNlY3Qo
bmV3UG9zQ2xpcCk7CiAgICAgICAgIH0KQEAgLTU2NTMsMTYgKzU1MDgsMTQgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQwogICAgICAgICBpZiAocmVuZGVyQm94KCkt
Pmhhc1Zpc3VhbE92ZXJmbG93KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBEb2VzIG5vdCBk
byB0aGUgcmlnaHQgdGhpbmcgd2l0aCBDU1MgcmVnaW9ucyB5ZXQsIHNpbmNlIHdlIGRvbid0IHll
dCBmYWN0b3IgaW4gdGhlCiAgICAgICAgICAgICAvLyBpbmRpdmlkdWFsIHJlZ2lvbiBib3hlcyBh
cyBvdmVyZmxvdy4KLSAgICAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRoVmlzdWFs
T3ZlcmZsb3cgPSBuYW1lZEZsb3dGcmFnbWVudCA/IG5hbWVkRmxvd0ZyYWdtZW50LT52aXN1YWxP
dmVyZmxvd1JlY3RGb3JCb3goKnJlbmRlckJveCgpKSA6IHJlbmRlckJveCgpLT52aXN1YWxPdmVy
Zmxvd1JlY3QoKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRoVmlzdWFs
T3ZlcmZsb3cgPSByZW5kZXJCb3goKS0+dmlzdWFsT3ZlcmZsb3dSZWN0KCk7CiAgICAgICAgICAg
ICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKGxheWVyQm91bmRzV2l0aFZpc3VhbE92
ZXJmbG93KTsgLy8gTGF5ZXJzIGFyZSBpbiBwaHlzaWNhbCBjb29yZGluYXRlcywgc28gdGhlIG92
ZXJmbG93IGhhcyB0byBiZSBmbGlwcGVkLgogICAgICAgICAgICAgbGF5ZXJCb3VuZHNXaXRoVmlz
dWFsT3ZlcmZsb3cubW92ZShvZmZzZXRGcm9tUm9vdExvY2FsKTsKICAgICAgICAgICAgIGlmICh0
aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyIHx8IGNsaXBSZWN0c0NvbnRleHQucmVz
cGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQogICAgICAgICAgICAgICAg
IGJhY2tncm91bmRSZWN0LmludGVyc2VjdChsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBTaGlmdCB0aGUgYm91bmRzIHRvIGJl
IGZvciBvdXIgcmVnaW9uIG9ubHkuCi0gICAgICAgICAgICBMYXlvdXRSZWN0IGJvdW5kcyA9IHJl
bmRlckJveCgpLT5ib3JkZXJCb3hSZWN0SW5SZWdpb24obmFtZWRGbG93RnJhZ21lbnQpOwotICAg
ICAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50KQotICAgICAgICAgICAgICAgIGJvdW5kcyA9
IG5hbWVkRmxvd0ZyYWdtZW50LT5yZWN0Rmxvd1BvcnRpb25Gb3JCb3gocmVuZGVyQm94KCksIGJv
dW5kcyk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGJvdW5kcyA9IHJlbmRlckJveCgpLT5ib3Jk
ZXJCb3hSZWN0SW5SZWdpb24obnVsbHB0cik7CiAKICAgICAgICAgICAgIGJvdW5kcy5tb3ZlKG9m
ZnNldEZyb21Sb290TG9jYWwpOwogICAgICAgICAgICAgaWYgKHRoaXMgIT0gY2xpcFJlY3RzQ29u
dGV4dC5yb290TGF5ZXIgfHwgY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09
IFJlc3BlY3RPdmVyZmxvd0NsaXApCkBAIC01NzE4LDcgKzU1NzEsNyBAQCBMYXlvdXRSZWN0IFJl
bmRlckxheWVyOjpsb2NhbENsaXBSZWN0KGJvCiAKICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlw
KCkpIHsKICAgICAgICAgLy8gQ1NTIGNsaXAgbWF5IGJlIGxhcmdlciB0aGFuIG91ciBib3JkZXIg
Ym94LgotICAgICAgICBMYXlvdXRSZWN0IGNzc0NsaXBSZWN0ID0gZG93bmNhc3Q8UmVuZGVyQm94
PihyZW5kZXJlcigpKS5jbGlwUmVjdCh0b0xheW91dFBvaW50KG9mZnNldEZyb21Sb290KSwgY3Vy
cmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpOworICAgICAgICBMYXlvdXRSZWN0IGNzc0Ns
aXBSZWN0ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdCh0b0xheW91
dFBvaW50KG9mZnNldEZyb21Sb290KSwgbnVsbHB0cik7CiAgICAgICAgIGNsaXBFeGNlZWRzQm91
bmRzID0gIWNsaXBSZWN0LmNvbnRhaW5zKGNzc0NsaXBSZWN0KTsKICAgICB9CiAKQEAgLTU3NzQs
MTggKzU2MjcsNiBAQCBib29sIFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjCiAg
ICAgaWYgKCFyZW5kZXJlcigpLmlzUmVuZGVySW5saW5lKCkgJiYgbGF5ZXJCb3VuZHMuaW50ZXJz
ZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQoKTsKLSAgICAvLyBXaGVuIHVzaW5nIHJlZ2lvbnMsIHNvbWUgYm94ZXMgbWlnaHQg
aGF2ZSB0aGVpciBmcmFtZSByZWN0IHJlbGF0aXZlIHRvIHRoZSBmbG93IHRocmVhZCwgd2hpY2gg
Y291bGQKLSAgICAvLyBjYXVzZSB0aGUgcGFpbnQgcmVqZWN0aW9uIGFsZ29yaXRobSB0byBwcmV2
ZW50IHRoZW0gZnJvbSBwYWludGluZyB3aGVuIHVzaW5nIGRpZmZlcmVudCB3aWR0aCByZWdpb25z
LgotICAgIC8vIGUuZy4gYW4gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGJveCB3aXRoIGJvdHRvbTow
cHggYW5kIHJpZ2h0OjBweCB3b3VsZCBoYXZlIGl0J3MgZnJhbWVSZWN0LnggcmVsYXRpdmUKLSAg
ICAvLyB0byB0aGUgZmxvdyB0aHJlYWQsIG5vdCB0aGUgbGFzdCByZWdpb24gKGluIHdoaWNoIGl0
IHdpbGwgZW5kIHVwIGJlY2F1c2Ugb2YgYm90dG9tOjBweCkKLSAgICBpZiAobmFtZWRGbG93RnJh
Z21lbnQgJiYgcmVuZGVyZXIoKS5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAg
ICAgTGF5b3V0UmVjdCBhZGp1c3RlZEJvdW5kcyA9IGxheWVyQm91bmRzOwotICAgICAgICBhZGp1
c3RlZEJvdW5kcy5tb3ZlQnkobmFtZWRGbG93RnJhZ21lbnQtPnZpc3VhbE92ZXJmbG93UmVjdEZv
ckJveChkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4ocmVuZGVyZXIoKSkpLmxvY2F0aW9u
KCkpOwotICAgICAgICBpZiAoYWRqdXN0ZWRCb3VuZHMuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKICAgICAvLyBPdGhlcndpc2Ug
d2UgbmVlZCB0byBjb21wdXRlIHRoZSBib3VuZGluZyBib3ggb2YgdGhpcyBzaW5nbGUgbGF5ZXIg
YW5kIHNlZSBpZiBpdCBpbnRlcnNlY3RzCiAgICAgLy8gdGhlIGRhbWFnZSByZWN0LiBJdCdzIHBv
c3NpYmxlIHRoZSBmcmFnbWVudCBjb21wdXRlZCB0aGUgYm91bmRpbmcgYm94IGFscmVhZHksIGlu
IHdoaWNoIGNhc2Ugd2UKICAgICAvLyBjYW4gdXNlIHRoZSBjYWNoZWQgdmFsdWUuCkBAIC01OTgz
LDIxICs1ODI0LDEzIEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm8K
ICAgICB9CiAKICAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIHBvc1pPcmRlckxpc3QgPSB0
aGlzLT5wb3NaT3JkZXJMaXN0KCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBjaGlsZExheWVyIDog
KnBvc1pPcmRlckxpc3QpIHsKLSAgICAgICAgICAgIC8vIFRoZSBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQgaXMgaWdub3JlZCB3aGVuIHdlIGNhbGN1bGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBSZW5kZXJW
aWV3LgotICAgICAgICAgICAgaWYgKGNoaWxkTGF5ZXItPmlzRmxvd1RocmVhZENvbGxlY3RpbmdH
cmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBmb3IgKGF1dG8qIGNoaWxkTGF5ZXIgOiAqcG9zWk9yZGVyTGlzdCkKICAgICAgICAg
ICAgIGNvbXB1dGVMYXllcnNVbmlvbigqY2hpbGRMYXllcik7Ci0gICAgICAgIH0KICAgICB9CiAK
ICAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIG5vcm1hbEZsb3dMaXN0ID0gdGhpcy0+bm9y
bWFsRmxvd0xpc3QoKSkgewotICAgICAgICBmb3IgKGF1dG8qIGNoaWxkTGF5ZXIgOiAqbm9ybWFs
Rmxvd0xpc3QpIHsKLSAgICAgICAgICAgIC8vIFJlbmRlclZpZXcgd2lsbCBhbHdheXMgcmV0dXJu
IHRoZSBzaXplIG9mIHRoZSBkb2N1bWVudCwgYmVmb3JlIHJlYWNoaW5nIHRoaXMgcG9pbnQsCi0g
ICAgICAgICAgICAvLyBzbyB0aGVyZSdzIG5vIHdheSB3ZSBjb3VsZCBoaXQgYSBSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQgaGVyZS4KLSAgICAgICAgICAgIEFTU0VSVCghY2hpbGRMYXllci0+aXNGbG93
VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpOworICAgICAgICBm
b3IgKGF1dG8qIGNoaWxkTGF5ZXIgOiAqbm9ybWFsRmxvd0xpc3QpCiAgICAgICAgICAgICBjb21w
dXRlTGF5ZXJzVW5pb24oKmNoaWxkTGF5ZXIpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgLy8g
RklYTUU6IFdlIGNhbiBvcHRpbWl6ZSB0aGUgc2l6ZSBvZiB0aGUgY29tcG9zaXRlZCBsYXllcnMs
IGJ5IG5vdCBlbmxhcmdpbmcKQEAgLTYyMTMsOCArNjA0Niw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OmRpcnR5Wk9yZGVyTGlzdHMoKQogICAgIG1fek9yZGVyTGlzdHNEaXJ0eSA9IHRydWU7CiAKICAg
ICBpZiAoIXJlbmRlcmVyKCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpIHsKLSAgICAgICAg
aWYgKGlzRmxvd1RocmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKQot
ICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4ocmVuZGVyZXIoKSkuc2V0TmVl
ZHNMYXllclRvUmVnaW9uTWFwcGluZ3NVcGRhdGUoKTsKICAgICAgICAgY29tcG9zaXRvcigpLnNl
dENvbXBvc2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKTsKICAgICAgICAgaWYgKGFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoKSkKICAgICAgICAgICAgIGNvbXBv
c2l0b3IoKS5zZXRTaG91bGRSZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxheW91dCgpOwpAQCAt
NjIzNyw4ICs2MDY4LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6ZGlydHlOb3JtYWxGbG93TGlzdCgp
CiAgICAgbV9ub3JtYWxGbG93TGlzdERpcnR5ID0gdHJ1ZTsKIAogICAgIGlmICghcmVuZGVyZXIo
KS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkgewotICAgICAgICBpZiAoaXNGbG93VGhyZWFk
Q29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpCi0gICAgICAgICAgICBkb3du
Y2FzdDxSZW5kZXJGbG93VGhyZWFkPihyZW5kZXJlcigpKS5zZXROZWVkc0xheWVyVG9SZWdpb25N
YXBwaW5nc1VwZGF0ZSgpOwogICAgICAgICBjb21wb3NpdG9yKCkuc2V0Q29tcG9zaXRpbmdMYXll
cnNOZWVkUmVidWlsZCgpOwogICAgICAgICBpZiAoYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92
ZXJmbG93U2Nyb2xsRW5hYmxlZCgpKQogICAgICAgICAgICAgY29tcG9zaXRvcigpLnNldFNob3Vs
ZFJlZXZhbHVhdGVDb21wb3NpdGluZ0FmdGVyTGF5b3V0KCk7CkBAIC02MzcyLDE0ICs2MjAxLDYg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cmVwYWludEluY2x1ZGluZ0Rlc2NlbgogICAgIHJlbmRlcmVy
KCkucmVwYWludCgpOwogICAgIGZvciAoUmVuZGVyTGF5ZXIqIGN1cnJlbnQgPSBmaXJzdENoaWxk
KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKQogICAgICAgICBj
dXJyZW50LT5yZXBhaW50SW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKLQotICAgIC8vIElmIHRoaXMg
aXMgYSByZWdpb24sIHdlIG11c3QgYWxzbyByZXBhaW50IHRoZSBmbG93IHRocmVhZCdzIGxheWVy
IHNpbmNlIGl0IGlzIHRoZSBvbmUKLSAgICAvLyBkb2luZyB0aGUgYWN0dWFsIHBhaW50aW5nIG9m
IHRoZSBmbG93ZWQgY29udGVudCwgYnV0IG9ubHkgaWYgdGhlIHJlZ2lvbiBpcyB2YWxpZC4KLSAg
ICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpIHsK
LSAgICAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQmIHJlZ2lvbiA9ICpkb3duY2FzdDxSZW5k
ZXJCbG9ja0Zsb3c+KHJlbmRlcmVyKCkpLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0gICAg
ICAgIGlmIChyZWdpb24uaXNWYWxpZCgpKQotICAgICAgICAgICAgcmVnaW9uLmZsb3dUaHJlYWQo
KS0+bGF5ZXIoKS0+cmVwYWludEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7Ci0gICAgfQogfQogCiB2
b2lkIFJlbmRlckxheWVyOjpzZXRCYWNraW5nTmVlZHNSZXBhaW50KEdyYXBoaWNzTGF5ZXI6OlNo
b3VsZENsaXBUb0xheWVyIHNob3VsZENsaXApCkBAIC02OTc0LDkyICs2Nzk1LDYgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6ZmlsdGVyTmVlZHNSZXBhaW50KCkKICAgICByZW5kZXJlcigpLnJlcGFpbnQo
KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnROYW1lZEZsb3dUaHJlYWRJbnNpZGVSZWdp
b24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVn
aW9uLCBMYXlvdXRSZWN0IHBhaW50RGlydHlSZWN0LCBMYXlvdXRQb2ludCBwYWludE9mZnNldCwg
UGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykK
LXsKLSAgICBMYXlvdXRSZWN0IHJlZ2lvbkNvbnRlbnRCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+
KHJlZ2lvbi0+bGF5ZXJPd25lcigpKS5jb250ZW50Qm94UmVjdCgpOwotICAgIEN1cnJlbnRSZW5k
ZXJSZWdpb25NYWludGFpbmVyIHJlZ2lvbk1haW50YWluZXIoKnJlZ2lvbik7Ci0gICAgcmVnaW9u
LT5zZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUoKTsKLQotICAgIExheW91dFNpemUgbW92ZU9m
ZnNldCA9IHJlZ2lvbi0+Zmxvd1RocmVhZFBvcnRpb25Mb2NhdGlvbigpIC0gKHBhaW50T2Zmc2V0
ICsgcmVnaW9uQ29udGVudEJveC5sb2NhdGlvbigpKSArIHRvTGF5b3V0U2l6ZShyZWdpb24tPmZy
YWdtZW50Q29udGFpbmVyKCkuc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgRmxvYXRQb2ludCBhZGp1
c3RlZFBhaW50T2Zmc2V0ID0gcm91bmRQb2ludFRvRGV2aWNlUGl4ZWxzKHRvTGF5b3V0UG9pbnQo
bW92ZU9mZnNldCksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsK
LSAgICBjb250ZXh0LnNhdmUoKTsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZSgtYWRqdXN0ZWRQYWlu
dE9mZnNldCk7Ci0KLSAgICBMYXlvdXRTaXplIHN1YnBpeGVsT2Zmc2V0ID0gbW92ZU9mZnNldCAt
IHRvTGF5b3V0U2l6ZShMYXlvdXRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSk7Ci0gICAgcGFp
bnREaXJ0eVJlY3QubW92ZShtb3ZlT2Zmc2V0KTsKLSAgICBwYWludChjb250ZXh0LCBwYWludERp
cnR5UmVjdCwgTGF5b3V0U2l6ZSgtc3VicGl4ZWxPZmZzZXQud2lkdGgoKSwgLXN1YnBpeGVsT2Zm
c2V0LmhlaWdodCgpKSwgcGFpbnRCZWhhdmlvciwgbnVsbHB0ciwgcGFpbnRGbGFncyB8IFBhaW50
TGF5ZXJUZW1wb3JhcnlDbGlwUmVjdHMpOwotICAgIHJlZ2lvbi0+cmVzdG9yZVJlZ2lvbk9iamVj
dHNPcmlnaW5hbFN0eWxlKCk7Ci0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci19Ci0KLVJlbmRlckxh
eWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdEZsb3dUaHJlYWRJZlJlZ2lvbkZvckZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBSZW5kZXJMYXllciosIGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFJl
Y3QmIGhpdFRlc3RSZWN0LAotICAgIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0
aW9uLAotICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUs
IAotICAgIGRvdWJsZSogek9mZnNldEZvckRlc2NlbmRhbnRzLCBkb3VibGUqIHpPZmZzZXQsCi0g
ICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0
YXRlLCBib29sIGRlcHRoU29ydERlc2NlbmRhbnRzKQotewotICAgIGlmICghcmVuZGVyZXIoKS5p
c1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQmIHJlZ2lvbiA9ICpkb3duY2FzdDxS
ZW5kZXJCbG9ja0Zsb3c+KHJlbmRlcmVyKCkpLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0g
ICAgaWYgKCFyZWdpb24uaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSByZWdpb24uZmxvd1RocmVhZCgpOwotICAg
IExheW91dFBvaW50IHBvcnRpb25Mb2NhdGlvbiA9IHJlZ2lvbi5mbG93VGhyZWFkUG9ydGlvblJl
Y3QoKS5sb2NhdGlvbigpOwotICAgIGlmIChmbG93VGhyZWFkLT5zdHlsZSgpLmlzRmxpcHBlZEJs
b2Nrc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgLy8gVGhlIHBvcnRpb24gbG9jYXRpb24gY29v
cmRpbmF0ZSBtdXN0IGJlIHRyYW5zbGF0ZWQgaW50byBwaHlzaWNhbCBjb29yZGluYXRlcy4KLSAg
ICAgICAgaWYgKGZsb3dUaHJlYWQtPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
LSAgICAgICAgICAgIHBvcnRpb25Mb2NhdGlvbi5zZXRZKGZsb3dUaHJlYWQtPmhlaWdodCgpIC0g
KHBvcnRpb25Mb2NhdGlvbi55KCkgKyByZWdpb24uY29udGVudEhlaWdodCgpKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHBvcnRpb25Mb2NhdGlvbi5zZXRYKGZsb3dUaHJlYWQtPndpZHRo
KCkgLSAocG9ydGlvbkxvY2F0aW9uLngoKSArIHJlZ2lvbi5jb250ZW50V2lkdGgoKSkpOwotICAg
IH0KLQotICAgIExheW91dFJlY3QgcmVnaW9uQ29udGVudEJveCA9IGRvd25jYXN0PFJlbmRlckJs
b2NrRmxvdz4ocmVuZGVyZXIoKSkuY29udGVudEJveFJlY3QoKTsKLQotICAgIFJlbmRlckxheWVy
KiByZXN1bHRMYXllciA9IG51bGxwdHI7Ci0gICAgZm9yIChpbnQgaSA9IGZyYWdtZW50cy5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFn
bWVudCA9IGZyYWdtZW50cy5hdChpKTsKLQotICAgICAgICBpZiAoIWZyYWdtZW50LmJhY2tncm91
bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIExheW91dFNpemUgaGl0VGVzdE9mZnNldCA9IHBvcnRpb25Mb2NhdGlvbiAt
IChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpICsgcmVnaW9uQ29udGVudEJveC5sb2Nh
dGlvbigpKSArIHRvTGF5b3V0U2l6ZShyZWdpb24uZnJhZ21lbnRDb250YWluZXIoKS5zY3JvbGxQ
b3NpdGlvbigpKTsKLQotICAgICAgICAvLyBBbHdheXMgaWdub3JlIGNsaXBwaW5nLCBzaW5jZSB0
aGUgUmVuZGVyRmxvd1RocmVhZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBib3VuZHMgb2Yg
dGhlIEZyYW1lVmlldy4KLSAgICAgICAgSGl0VGVzdFJlcXVlc3QgbmV3UmVxdWVzdChyZXF1ZXN0
LnR5cGUoKSB8IEhpdFRlc3RSZXF1ZXN0OjpJZ25vcmVDbGlwcGluZyB8IEhpdFRlc3RSZXF1ZXN0
OjpEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQpOwotCi0gICAgICAgIC8vIE1ha2UgYSBu
ZXcgdGVtcG9yYXJ5IEhpdFRlc3RMb2NhdGlvbiBpbiB0aGUgbmV3IHJlZ2lvbi4KLSAgICAgICAg
SGl0VGVzdExvY2F0aW9uIG5ld0hpdFRlc3RMb2NhdGlvbihoaXRUZXN0TG9jYXRpb24sIGhpdFRl
c3RPZmZzZXQpOwotCi0gICAgICAgIC8vIEV4cGFuZCB0aGUgaGl0LXRlc3QgcmVjdCB0byB0aGUg
ZmxvdyB0aHJlYWQncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgTGF5b3V0UmVjdCBoaXRU
ZXN0UmVjdEluRmxvd1RocmVhZCA9IGhpdFRlc3RSZWN0OwotICAgICAgICBoaXRUZXN0UmVjdElu
Rmxvd1RocmVhZC5tb3ZlKGhpdFRlc3RPZmZzZXQpOwotICAgICAgICBoaXRUZXN0UmVjdEluRmxv
d1RocmVhZC5leHBhbmQoTGF5b3V0U2l6ZShmYWJzKChkb3VibGUpaGl0VGVzdE9mZnNldC53aWR0
aCgpKSwgZmFicygoZG91YmxlKWhpdFRlc3RPZmZzZXQuaGVpZ2h0KCkpKSk7Ci0KLSAgICAgICAg
Q3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIgcmVnaW9uTWFpbnRhaW5lcihyZWdpb24pOwot
Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdExvY2F0aW9u
KCkpOwotICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSBmbG93VGhyZWFkLT5sYXllcigp
LT5oaXRUZXN0TGF5ZXIoZmxvd1RocmVhZC0+bGF5ZXIoKSwgbnVsbHB0ciwgbmV3UmVxdWVzdCwg
dGVtcFJlc3VsdCwgaGl0VGVzdFJlY3RJbkZsb3dUaHJlYWQsIG5ld0hpdFRlc3RMb2NhdGlvbiwg
ZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwotICAgICAgICBp
ZiAocmVxdWVzdC5yZXN1bHRJc0VsZW1lbnRMaXN0KCkpCi0gICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKHRlbXBSZXN1bHQsIHJlcXVlc3QpOwotICAgICAgICBpZiAoaXNIaXRDYW5kaWRhdGUoaGl0
TGF5ZXIsIGRlcHRoU29ydERlc2NlbmRhbnRzLCB6T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9y
bVN0YXRlKSkgewotICAgICAgICAgICAgcmVzdWx0TGF5ZXIgPSBoaXRMYXllcjsKLSAgICAgICAg
ICAgIGlmICghcmVxdWVzdC5yZXN1bHRJc0VsZW1lbnRMaXN0KCkpCi0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gdGVtcFJlc3VsdDsKLSAgICAgICAgICAgIGlmICghZGVwdGhTb3J0RGVzY2VuZGFu
dHMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0TGF5ZXI7Ci19Ci0KLVJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBSZW5kZXJMYXll
cjo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
cmVuZGVyZXIoKS5jdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKLX0KLQogVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
KQogewogICAgIHRzIDw8ICJSZW5kZXJMYXllciAiIDw8ICZsYXllciA8PCAiICIgPDwgbGF5ZXIu
c2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlz
aW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw2IEBAIGNsYXNzIFJlbmRlckdlb21ldHJ5TWFwOwog
Y2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOwog
Y2xhc3MgUmVuZGVyTWFycXVlZTsKLWNsYXNzIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OwogY2xh
c3MgUmVuZGVyUmVwbGljYTsKIGNsYXNzIFJlbmRlclNjcm9sbGJhclBhcnQ7CiBjbGFzcyBSZW5k
ZXJTdHlsZTsKQEAgLTUxMSw4ICs1MTAsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoaXRUZXN0KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdFJlc3Vs
dCYpOwogICAgIHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3Qq
IHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKIAotICAgIHZvaWQgcGFpbnROYW1lZEZsb3dU
aHJlYWRJbnNpZGVSZWdpb24oR3JhcGhpY3NDb250ZXh0JiwgUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQqLCBMYXlvdXRSZWN0LCBMYXlvdXRQb2ludCwgUGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZp
b3JOb3JtYWwsIFBhaW50TGF5ZXJGbGFncyA9IDApOwotCiAgICAgc3RydWN0IENsaXBSZWN0c0Nv
bnRleHQgewogICAgICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyKiBpblJv
b3RMYXllciwgQ2xpcFJlY3RzVHlwZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RPdmVy
Zmxvd0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQogICAgICAgICAgICAgOiByb290TGF5ZXIo
aW5Sb290TGF5ZXIpCkBAIC03MDUsMTUgKzcwMiwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1Jl
bmRlckZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLmlzUmVuZGVyRmxvd1Ro
cmVhZCgpOyB9CiAgICAgYm9vbCBpc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdCB7
IHJldHVybiByZW5kZXJlcigpLmlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpOyB9CiAgICAg
Ym9vbCBpc0luc2lkZUZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLmZsb3dU
aHJlYWRTdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6Tm90SW5zaWRlRmxvd1RocmVhZDsgfQotICAg
IGJvb2wgaXNJbnNpZGVPdXRPZkZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigp
LmZsb3dUaHJlYWRTdGF0ZSgpID09IFJlbmRlck9iamVjdDo6SW5zaWRlT3V0T2ZGbG93VGhyZWFk
OyB9CiAgICAgYm9vbCBpc0RpcnR5UmVuZGVyRmxvd1RocmVhZCgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQoaXNSZW5kZXJGbG93VGhyZWFkKCkpOwogICAgICAgICByZXR1cm4gbV96T3Jk
ZXJMaXN0c0RpcnR5IHx8IG1fbm9ybWFsRmxvd0xpc3REaXJ0eTsKICAgICB9CiAKLSAgICBib29s
IGlzRmxvd1RocmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpIGNvbnN0
OwotCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0Zsb3dUaHJlYWRBbmNlc3RvcigpIGNvbnN0
OwogCiAgICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9u
U2Nyb2xsYmFyT25MZWZ0KCk7IH0KQEAgLTg2NSwxNCArODU5LDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVz
Y2VuZGFudHMsIGRvdWJsZSogek9mZnNldCwKICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5z
Zm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLCBib29sIGRlcHRoU29ydERlc2Nl
bmRhbnRzKTsKIAotICAgIFJlbmRlckxheWVyKiBoaXRUZXN0Rml4ZWRMYXllcnNJbk5hbWVkRmxv
d3MoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwKLSAgICAgICAgY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwKLSAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3Qs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsCi0gICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zv
cm1TdGF0ZSosCi0gICAgICAgIGRvdWJsZSogek9mZnNldEZvckRlc2NlbmRhbnRzLCBkb3VibGUq
IHpPZmZzZXQsCi0gICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdW5mbGF0
dGVuZWRUcmFuc2Zvcm1TdGF0ZSwKLSAgICAgICAgYm9vbCBkZXB0aFNvcnREZXNjZW5kYW50cyk7
Ci0KICAgICBSZWY8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBjcmVhdGVMb2NhbFRyYW5zZm9y
bVN0YXRlKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXll
ciwKICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYsCiAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogY29udGFp
bmVyVHJhbnNmb3JtU3RhdGUsCkBAIC0xMDMwLDE0ICsxMDE2LDYgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxS
ZWN0KSBjb25zdDsKIAotICAgIFJlbmRlckxheWVyKiBoaXRUZXN0Rmxvd1RocmVhZElmUmVnaW9u
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgUmVuZGVyTGF5ZXIqLCBjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLAotICAgICAgICBjb25zdCBMYXlvdXRSZWN0
JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwKLSAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5z
Zm9ybVN0YXRlKiwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsCi0gICAgICAgIGRvdWJs
ZSogek9mZnNldCwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRy
YW5zZm9ybVN0YXRlLCBib29sIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKLSAgICBib29sIG1hcExh
eWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5ZXIoQ2xpcFJlY3RzJikgY29uc3Q7Ci0KLSAg
ICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KCkgY29uc3Q7Ci0KICAgICAvLyBUaGUgYml0ZmllbGRzIGFyZSB1cCBoZXJlIHNvIHRoZXkgd2ls
bCBmYWxsIGludG8gdGhlIHBhZGRpbmcgZnJvbSBTY3JvbGxhYmxlQXJlYSBvbiA2NC1iaXQuCiAK
ICAgICBjb25zdCBib29sIG1faXNSZW5kZXJWaWV3TGF5ZXIgOiAxOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDIy
MjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJNZWRpYS5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCkBAIC01NzIsOSArNTcxLDYgQEAgYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnNob3VsZENsaXBDb21wbwogICAgIGlmIChsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9y
bWVkT3JVc2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmcobV9vd25pbmdMYXllcikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChtX293bmluZ0xheWVyLmlzRmxvd1RocmVhZENvbGxlY3Rp
bmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODY5LDcgKzg2NSw2IEBAIExheW91dFJlY3QgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGEKICAgICAgICAgLy8gRklYTUU6IGZsb3dzL2NvbHVt
bnMgbmVlZCB3b3JrLgogICAgICAgICBMYXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5k
cyA9IGFuY2VzdG9yQmFja2luZ0xheWVyLT5jb21wb3NpdGVkQm91bmRzKCk7CiAgICAgICAgIGFu
Y2VzdG9yQ29tcG9zaXRlZEJvdW5kcy5zZXRMb2NhdGlvbihMYXlvdXRQb2ludCgpKTsKLSAgICAg
ICAgYWRqdXN0QW5jZXN0b3JDb21wb3NpdGluZ0JvdW5kc0ZvckZsb3dUaHJlYWQoYW5jZXN0b3JD
b21wb3NpdGVkQm91bmRzLCBjb21wb3NpdGVkQW5jZXN0b3IpOwogICAgICAgICBwYXJlbnRHcmFw
aGljc0xheWVyUmVjdCA9IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kczsKICAgICB9CiAKQEAgLTEy
MzcsNDggKzEyMzIsNiBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlTWFza2luZ0xh
CiAgICAgfQogfQogCi12b2lkIFJlbmRlckxheWVyQmFja2luZzo6YWRqdXN0QW5jZXN0b3JDb21w
b3NpdGluZ0JvdW5kc0ZvckZsb3dUaHJlYWQoTGF5b3V0UmVjdCYgYW5jZXN0b3JDb21wb3NpdGlu
Z0JvdW5kcywgY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IpIGNvbnN0Ci17
Ci0gICAgUmVuZGVyTGF5ZXIqIGZsb3dUaHJlYWRMYXllciA9IG1fb3duaW5nTGF5ZXIuaXNJbnNp
ZGVPdXRPZkZsb3dUaHJlYWQoKSA/IG1fb3duaW5nTGF5ZXIuc3RhY2tpbmdDb250YWluZXIoKSA6
IG51bGxwdHI7Ci0gICAgaWYgKGZsb3dUaHJlYWRMYXllciAmJiBmbG93VGhyZWFkTGF5ZXItPmlz
UmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIGlmIChtX293bmluZ0xheWVyLmlzRmxvd1Ro
cmVhZENvbGxlY3RpbmdHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKSB7Ci0gICAgICAgICAg
ICAvLyBUaGUgUmVuZGVyTmFtZWRGbG93VGhyZWFkIGlzIG5vdCBjb21wb3NpdGVkLCBhcyB3ZSBu
ZWVkIGl0IHRvIHBhaW50IHRoZSAKLSAgICAgICAgICAgIC8vIGJhY2tncm91bmQgbGF5ZXIgb2Yg
dGhlIHJlZ2lvbnMuIFdlIG5lZWQgdG8gY29tcGVuc2F0ZSBmb3IgdGhhdCBieSBtYW51YWxseQot
ICAgICAgICAgICAgLy8gc3VidHJhY3RpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBmbG93LXRocmVh
ZC4KLSAgICAgICAgICAgIEludFBvaW50IGZsb3dQb3NpdGlvbjsKLSAgICAgICAgICAgIGZsb3dU
aHJlYWRMYXllci0+Y29udmVydFRvUGl4ZWxTbmFwcGVkTGF5ZXJDb29yZHMoY29tcG9zaXRpbmdB
bmNlc3RvciwgZmxvd1Bvc2l0aW9uKTsKLSAgICAgICAgICAgIGFuY2VzdG9yQ29tcG9zaXRpbmdC
b3VuZHMubW92ZUJ5KGZsb3dQb3NpdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBNb3Zl
IHRoZSBhbmNlc3RvciBwb3NpdGlvbiBhdCB0aGUgdG9wIG9mIHRoZSByZWdpb24gd2hlcmUgdGhl
IGNvbXBvc2l0ZWQgbGF5ZXIgaXMgZ29pbmcgdG8gZGlzcGxheS4KLSAgICAgICAgUmVuZGVyRmxv
d1RocmVhZCYgZmxvd1RocmVhZCA9IGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KGZsb3dUaHJl
YWRMYXllci0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBw
YXJlbnRSZWdpb24gPSBmbG93VGhyZWFkLmNhY2hlZFJlZ2lvbkZvckNvbXBvc2l0ZWRMYXllciht
X293bmluZ0xheWVyKTsKLSAgICAgICAgaWYgKCFwYXJlbnRSZWdpb24pCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgSW50UG9pbnQgZmxvd0RlbHRhOwotICAgICAgICBtX293bmluZ0xh
eWVyLmNvbnZlcnRUb1BpeGVsU25hcHBlZExheWVyQ29vcmRzKGZsb3dUaHJlYWRMYXllciwgZmxv
d0RlbHRhKTsKLSAgICAgICAgcGFyZW50UmVnaW9uLT5hZGp1c3RSZWdpb25Cb3VuZHNGcm9tRmxv
d1RocmVhZFBvcnRpb25SZWN0KGFuY2VzdG9yQ29tcG9zaXRpbmdCb3VuZHMpOwotICAgICAgICBS
ZW5kZXJCb3hNb2RlbE9iamVjdCYgbGF5ZXJPd25lciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVs
T2JqZWN0PihwYXJlbnRSZWdpb24tPmxheWVyT3duZXIoKSk7Ci0gICAgICAgIFJlbmRlckxheWVy
QmFja2luZyogbGF5ZXJPd25lckJhY2tpbmcgPSBsYXllck93bmVyLmxheWVyKCktPmJhY2tpbmco
KTsKLSAgICAgICAgaWYgKCFsYXllck93bmVyQmFja2luZykKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVnaW9uIHByb3BhZ2F0ZXMgaXRzIGJv
cmRlcnMsIHBhZGRpbmdzLCBvdXRsaW5lcyBvciBib3gtc2hhZG93cyB0byBsYXllcnMgaW5zaWRl
IGl0LgotICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGNvbXBvc2l0ZWQgYm91bmRzIG9mIHRoZSBS
ZW5kZXJSZWdpb24gYXJlIGFscmVhZHkgY2FsY3VsYXRlZCBiZWNhdXNlCi0gICAgICAgIC8vIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlIHdpbGwgb25s
eSBpdGVyYXRlIG9uIHRoZSBjb250ZW50IG9mIHRoZSByZWdpb24gYWZ0ZXIgdGhlCi0gICAgICAg
IC8vIHJlZ2lvbiBpdHNlbGYgaXMgY29tcHV0ZWQuCi0gICAgICAgIGFuY2VzdG9yQ29tcG9zaXRp
bmdCb3VuZHMubW92ZUJ5KHJvdW5kZWRJbnRQb2ludChsYXllck93bmVyQmFja2luZy0+Y29tcG9z
aXRlZEJvdW5kcygpLmxvY2F0aW9uKCkpKTsKLSAgICAgICAgYW5jZXN0b3JDb21wb3NpdGluZ0Jv
dW5kcy5tb3ZlKC1sYXllck93bmVyLmJvcmRlckFuZFBhZGRpbmdTdGFydCgpLCAtbGF5ZXJPd25l
ci5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkpOwotCi0gICAgICAgIC8vIElmIHRoZXJlJ3MgYSBj
bGlwcGluZyBHcmFwaGljc0xheWVyIG9uIHRoZSBoaWVyYXJjaHkgKHJlZ2lvbiBncmFwaGljcyBs
YXllciAtPiBjbGlwcGluZyBncmFwaGljcyBsYXllciAtPgotICAgICAgICAvLyBjb21wb3NpdGVk
IGNvbnRlbnQgZ3JhcGhpY3MgbGF5ZXIpLCBzdWJzdHJhY3QgdGhlIG9mZnNldCBvZiB0aGUgY2xp
cHBpbmcgbGF5ZXIsIHNpbmNlIGl0J3MgaXRzIHBhcmVudAotICAgICAgICAvLyB0aGF0IHBvc2l0
aW9ucyB1cyAodGhlIGdyYXBoaWNzIGxheWVyIG9mIHRoZSByZWdpb24pLgotICAgICAgICBpZiAo
bGF5ZXJPd25lckJhY2tpbmctPmNsaXBwaW5nTGF5ZXIoKSkKLSAgICAgICAgICAgIGFuY2VzdG9y
Q29tcG9zaXRpbmdCb3VuZHMubW92ZUJ5KHJvdW5kZWRJbnRQb2ludChsYXllck93bmVyQmFja2lu
Zy0+Y2xpcHBpbmdMYXllcigpLT5wb3NpdGlvbigpKSk7Ci0gICAgfQotfQotCiB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlRGlyZWN0bHlDb21wb3NpdGVkQm94RGVjb3JhdGlvbnMoUGFp
bnRlZENvbnRlbnRzSW5mbyYgY29udGVudHNJbmZvLCBib29sJiBkaWRVcGRhdGVDb250ZW50c1Jl
Y3QpCiB7CiAgICAgaWYgKCFtX293bmluZ0xheWVyLmhhc1Zpc2libGVDb250ZW50KCkpCkBAIC0y
MDQ0LDkgKzE5OTcsNiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6aXNTaW1wbGVDb250YWlu
CiAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5iYWNrZ3JvdW5kQ2xpcCgpID09IFRleHRGaWxs
Qm94KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KICAgICBpZiAocmVuZGVyZXIoKS5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkgJiYgbV9v
d25pbmdMYXllci5pc29sYXRlc0NvbXBvc2l0ZWRCbGVuZGluZygpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmgJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDkgKzMzNiw2IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHBhaW50SW50b0xheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgUGFpbnRCZWhh
dmlvciwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UpOwogCi0gICAgLy8gSGVscGVyIGZ1bmN0
aW9uIGZvciB1cGRhdGVHZW9tZXRyeS4KLSAgICB2b2lkIGFkanVzdEFuY2VzdG9yQ29tcG9zaXRp
bmdCb3VuZHNGb3JGbG93VGhyZWFkKExheW91dFJlY3QmIGFuY2VzdG9yQ29tcG9zaXRpbmdCb3Vu
ZHMsIGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yKSBjb25zdDsKLQogICAg
IHN0YXRpYyBDU1NQcm9wZXJ0eUlEIGdyYXBoaWNzTGF5ZXJUb0NTU1Byb3BlcnR5KEFuaW1hdGVk
UHJvcGVydHlJRCk7CiAgICAgc3RhdGljIEFuaW1hdGVkUHJvcGVydHlJRCBjc3NUb0dyYXBoaWNz
TGF5ZXJQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDIyMjI2
MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyR2VvbWV0
cnlNYXAuaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ckJhY2tpbmcuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgogI2luY2x1
ZGUgIlJlbmRlclJlcGxpY2EuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKQEAgLTEyNzAsMTcgKzEyNjksNiBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6Y29tcHV0ZUNvbXBvCiAgICAgbGF5ZXIudXBkYXRlRGVzY2VuZGFudERlcGVuZGVu
dEZsYWdzKCk7CiAgICAgbGF5ZXIudXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CiAKLSAgICBp
ZiAobGF5ZXIuaXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25z
KCkpIHsKLSAgICAgICAgYXV0byYgZmxvd1RocmVhZCA9IGRvd25jYXN0PFJlbmRlckZsb3dUaHJl
YWQ+KGxheWVyLnJlbmRlcmVyKCkpOwotICAgICAgICBsYXllci5zZXRIYXNDb21wb3NpdGluZ0Rl
c2NlbmRhbnQoZmxvd1RocmVhZC5oYXNDb21wb3NpdGluZ1JlZ2lvbkRlc2NlbmRhbnQoKSk7Ci0K
LSAgICAgICAgLy8gQmVmb3JlIHJldHVybmluZywgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGxpc3Rz
IG9mIGFsbCBjaGlsZCBsYXllcnMuIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSwKLSAgICAgICAg
Ly8gaWYgdGhpcyBmbG93IHRocmVhZCB3aWxsIG5vdCBiZSBwYWludGVkIChmb3IgaW5zdGFuY2Ug
YmVjYXVzZSBvZiBoYXZpbmcgbm8gcmVnaW9ucywgb3Igb25seSBpbnZhbGlkIHJlZ2lvbnMpLAot
ICAgICAgICAvLyB0aGUgY2hpbGQgbGF5ZXJzIHdpbGwgbmV2ZXIgaGF2ZSB0aGVpciBsaXN0cyB1
cGRhdGVkICh3aGljaCB3b3VsZCBub3JtYWxseSBoYXBwZW4gZHVyaW5nIHBhaW50aW5nKS4KLSAg
ICAgICAgbGF5ZXIudXBkYXRlRGVzY2VuZGFudHNMYXllckxpc3RzSWZOZWVkZWQodHJ1ZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBDbGVhciB0aGUgZmxhZwogICAgIGxheWVy
LnNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChmYWxzZSk7CiAgICAgbGF5ZXIuc2V0SW5kaXJl
Y3RDb21wb3NpdGluZ1JlYXNvbihSZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNv
bjo6Tm9uZSk7CkBAIC0xMzc0LDE1ICsxMzYyLDYgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmNvbXB1dGVDb21wbwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotCi0gICAg
aWYgKGxheWVyLnJlbmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigp
KSB7Ci0gICAgICAgIC8vIFdlIGFyZSBnb2luZyB0byBjb2xsZWN0IGxheWVycyBmcm9tIHRoZSBS
ZW5kZXJGbG93VGhyZWFkIGludG8gdGhlIEdyYXBoaWNzTGF5ZXIgb2YgdGhlIHBhcmVudCBvZiB0
aGUKLSAgICAgICAgLy8gYW5vbnltb3VzIFJlbmRlclJlZ2lvbiwgYnV0IGZpcnN0IHdlIG5lZWQg
dG8gbWFrZSBzdXJlIHRoYXQgdGhlIHBhcmVudCBpdHNlbGYgb2YgdGhlIHJlZ2lvbiBpcyBnb2lu
ZyB0bwotICAgICAgICAvLyBoYXZlIGEgY29tcG9zaXRlZCBsYXllci4gV2Ugb25seSB3YW50IHRv
IG1ha2UgcmVnaW9ucyBjb21wb3NpdGVkIHdoZW4gdGhlcmUncyBhbiBhY3R1YWwgbGF5ZXIgdGhh
dCB3ZQotICAgICAgICAvLyBuZWVkIHRvIG1vdmUgdG8gdGhhdCByZWdpb24uCi0gICAgICAgIGNv
bXB1dGVSZWdpb25Db21wb3NpdGluZ1JlcXVpcmVtZW50cyhkb3duY2FzdDxSZW5kZXJCbG9ja0Zs
b3c+KGxheWVyLnJlbmRlcmVyKCkpLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCksIG92ZXJsYXBN
YXAsIGNoaWxkU3RhdGUsIGxheWVyc0NoYW5nZWQsIGFueURlc2NlbmRhbnRIYXMzRFRyYW5zZm9y
bSk7Ci0gICAgfQotCiAgICAgCiAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBub3JtYWxG
bG93TGlzdCA9IGxheWVyLm5vcm1hbEZsb3dMaXN0KCkpIHsKICAgICAgICAgZm9yIChhdXRvKiBy
ZW5kZXJMYXllciA6ICpub3JtYWxGbG93TGlzdCkKQEAgLTE0OTIsMjUgKzE0NzEsNiBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvCiAgICAgb3ZlcmxhcE1hcC5nZW9t
ZXRyeU1hcCgpLnBvcE1hcHBpbmdzVG9BbmNlc3RvcihhbmNlc3RvckxheWVyKTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVSZWdpb25Db21wb3NpdGluZ1JlcXVpcmVt
ZW50cyhSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVnaW9uLCBPdmVybGFwTWFwJiBvdmVybGFw
TWFwLCBDb21wb3NpdGluZ1N0YXRlJiBjaGlsZFN0YXRlLCBib29sJiBsYXllcnNDaGFuZ2VkLCBi
b29sJiBhbnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pCi17Ci0gICAgaWYgKCFyZWdpb24tPmlz
VmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1Ro
cmVhZCA9IHJlZ2lvbi0+Zmxvd1RocmVhZCgpOwotICAgIAotICAgIG92ZXJsYXBNYXAuZ2VvbWV0
cnlNYXAoKS5wdXNoUmVuZGVyRmxvd1RocmVhZChmbG93VGhyZWFkKTsKLQotICAgIGlmIChjb25z
dCBSZW5kZXJMYXllckxpc3QqIGxheWVyTGlzdCA9IGZsb3dUaHJlYWQtPmdldExheWVyTGlzdEZv
clJlZ2lvbihyZWdpb24pKSB7Ci0gICAgICAgIGZvciAoYXV0byogcmVuZGVyTGF5ZXIgOiAqbGF5
ZXJMaXN0KSB7Ci0gICAgICAgICAgICBBU1NFUlQoZmxvd1RocmVhZC0+cmVnaW9uRm9yQ29tcG9z
aXRlZExheWVyKCpyZW5kZXJMYXllcikgPT0gcmVnaW9uKTsKLSAgICAgICAgICAgIGNvbXB1dGVD
b21wb3NpdGluZ1JlcXVpcmVtZW50cyhmbG93VGhyZWFkLT5sYXllcigpLCAqcmVuZGVyTGF5ZXIs
IG92ZXJsYXBNYXAsIGNoaWxkU3RhdGUsIGxheWVyc0NoYW5nZWQsIGFueURlc2NlbmRhbnRIYXMz
RFRyYW5zZm9ybSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBvdmVybGFwTWFwLmdlb21ldHJ5
TWFwKCkucG9wTWFwcGluZ3NUb0FuY2VzdG9yKCZyZWdpb24tPmxheWVyT3duZXIoKSk7Ci19Ci0K
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRDb21wb3NpdGluZ1BhcmVudChSZW5kZXJM
YXllciYgY2hpbGRMYXllciwgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyKQogewogICAgIEFTU0VS
VCghcGFyZW50TGF5ZXIgfHwgY2hpbGRMYXllci5hbmNlc3RvckNvbXBvc2l0aW5nTGF5ZXIoKSA9
PSBwYXJlbnRMYXllcik7CkBAIC0xNTU0LDEwICsxNTE0LDYgQEAgdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnJlYnVpbGRDb21wbwogICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4gb25seSBkbyB3
b3JrIGhlcmUgdGhhdCBpcyBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZSBkZXNjZW5kYW50IGxh
eWVycwogICAgIC8vIGhhdmUgYmVlbiBwcm9jZXNzZWQuIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVp
cmVtZW50cygpIHdpbGwgYWxyZWFkeSBoYXZlIGRvbmUgdGhlIHJlcGFpbnQgaWYgbmVjZXNzYXJ5
LgogCi0gICAgLy8gRG8gbm90IGl0ZXJhdGUgdGhlIFJlbmRlckZsb3dUaHJlYWQgZGlyZWN0bHku
IFdlIGFyZSBnb2luZyB0byBjb2xsZWN0IGNvbXBvc2l0ZWQgbGF5ZXJzIGFzIHBhcnQgb2YgcmVn
aW9ucy4KLSAgICBpZiAobGF5ZXIuaXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJz
VW5kZXJSZWdpb25zKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIFJlbmRlckxheWVyQmFja2lu
ZyogbGF5ZXJCYWNraW5nID0gbGF5ZXIuYmFja2luZygpOwogICAgIGlmIChsYXllckJhY2tpbmcp
IHsKICAgICAgICAgLy8gVGhlIGNvbXBvc2l0aW5nIHN0YXRlIG9mIGFsbCBvdXIgY2hpbGRyZW4g
aGFzIGJlZW4gdXBkYXRlZCBhbHJlYWR5LCBzbyBub3cKQEAgLTE2MDYsOSArMTU2Miw2IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxkQ29tcG8KICAgICAgICAgICAgIGNoaWxk
TGlzdC5hcHBlbmQobGF5ZXJCYWNraW5nLT5mb3JlZ3JvdW5kTGF5ZXIoKSk7CiAgICAgfQogCi0g
ICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5l
cigpKQotICAgICAgICByZWJ1aWxkUmVnaW9uQ29tcG9zaXRpbmdMYXllclRyZWUoZG93bmNhc3Q8
UmVuZGVyQmxvY2tGbG93PihsYXllci5yZW5kZXJlcigpKS5yZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCgpLCBsYXllckNoaWxkcmVuLCBkZXB0aCArIDEpOwotCiAgICAgaWYgKFZlY3RvcjxSZW5kZXJM
YXllcio+KiBub3JtYWxGbG93TGlzdCA9IGxheWVyLm5vcm1hbEZsb3dMaXN0KCkpIHsKICAgICAg
ICAgZm9yIChhdXRvKiByZW5kZXJMYXllciA6ICpub3JtYWxGbG93TGlzdCkKICAgICAgICAgICAg
IHJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZSgqcmVuZGVyTGF5ZXIsIGNoaWxkTGlzdCwgZGVw
dGggKyAxKTsKQEAgLTE2NTUsMjEgKzE2MDgsNiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVidWlsZENvbXBvCiAgICAgICAgIGxheWVyQmFja2luZy0+dXBkYXRlQWZ0ZXJEZXNjZW5k
YW50cygpOwogfQogCi12b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZFJlZ2lvbkNv
bXBvc2l0aW5nTGF5ZXJUcmVlKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZWdpb24sIFZlY3Rv
cjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCwgaW50IGRlcHRoKQotewotICAgIGlmICghcmVn
aW9uLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckZsb3dUaHJlYWQq
IGZsb3dUaHJlYWQgPSByZWdpb24tPmZsb3dUaHJlYWQoKTsKLSAgICBBU1NFUlQoZmxvd1RocmVh
ZC0+Y29sbGVjdHNHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpKTsKLSAgICBpZiAoY29uc3Qg
UmVuZGVyTGF5ZXJMaXN0KiBsYXllckxpc3QgPSBmbG93VGhyZWFkLT5nZXRMYXllckxpc3RGb3JS
ZWdpb24ocmVnaW9uKSkgewotICAgICAgICBmb3IgKGF1dG8qIHJlbmRlckxheWVyIDogKmxheWVy
TGlzdCkgewotICAgICAgICAgICAgQVNTRVJUKGZsb3dUaHJlYWQtPnJlZ2lvbkZvckNvbXBvc2l0
ZWRMYXllcigqcmVuZGVyTGF5ZXIpID09IHJlZ2lvbik7Ci0gICAgICAgICAgICByZWJ1aWxkQ29t
cG9zaXRpbmdMYXllclRyZWUoKnJlbmRlckxheWVyLCBjaGlsZExpc3QsIGRlcHRoICsgMSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZp
ZXdEaWRDaGFuZ2VMb2NhdGlvbihjb25zdCBJbnRQb2ludCYgY29udGVudHNPZmZzZXQpCiB7CiAg
ICAgaWYgKG1fb3ZlcmZsb3dDb250cm9sc0hvc3RMYXllcikKQEAgLTI1ODIsNyArMjUyMCw3IEBA
IGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXAKIAogICAgIC8vIFdoZW4g
YSBsYXllciBoYXMgY29tcG9zaXRlZCBkZXNjZW5kYW50cywgc29tZSBlZmZlY3RzLCBsaWtlIDJk
IHRyYW5zZm9ybXMsIGZpbHRlcnMsIG1hc2tzIGV0YyBtdXN0IGJlIGltcGxlbWVudGVkCiAgICAg
Ly8gdmlhIGNvbXBvc2l0aW5nIHNvIHRoYXQgdGhleSBhbHNvIGFwcGx5IHRvIHRob3NlIGNvbXBv
c2l0ZWQgZGVzY2VuZGFudHMuCi0gICAgaWYgKGhhc0NvbXBvc2l0ZWREZXNjZW5kYW50cyAmJiAo
bGF5ZXIuaXNvbGF0ZXNDb21wb3NpdGVkQmxlbmRpbmcoKSB8fCBsYXllci50cmFuc2Zvcm0oKSB8
fCByZW5kZXJlci5jcmVhdGVzR3JvdXAoKSB8fCByZW5kZXJlci5oYXNSZWZsZWN0aW9uKCkgfHwg
cmVuZGVyZXIuaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpKSkgeworICAgIGlm
IChoYXNDb21wb3NpdGVkRGVzY2VuZGFudHMgJiYgKGxheWVyLmlzb2xhdGVzQ29tcG9zaXRlZEJs
ZW5kaW5nKCkgfHwgbGF5ZXIudHJhbnNmb3JtKCkgfHwgcmVuZGVyZXIuY3JlYXRlc0dyb3VwKCkg
fHwgcmVuZGVyZXIuaGFzUmVmbGVjdGlvbigpKSkgewogICAgICAgICByZWFzb24gPSBSZW5kZXJM
YXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6R3JhcGhpY2FsRWZmZWN0OwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yNjA3LDkgKzI1NDUsNiBAQCBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpzdHlsZUNoYW5nZU1heUFmZmVjdEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb25zKGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgb2xkU3R5
bGUpCiB7Ci0gICAgaWYgKHJlbmRlcmVyLmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWlu
ZXIoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KICAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVy
LnN0eWxlKCk7CiAgICAgaWYgKFJlbmRlckVsZW1lbnQ6OmNyZWF0ZXNHcm91cEZvclN0eWxlKHN0
eWxlKSAhPSBSZW5kZXJFbGVtZW50OjpjcmVhdGVzR3JvdXBGb3JTdHlsZShvbGRTdHlsZSkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjc0MCw3ICsyNjc1LDcgQEAgYm9vbCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcAogCiAgICAgLy8gRG9uJ3QgcHJvbW90ZSBmaXhlZCBw
b3NpdGlvbiBlbGVtZW50cyB0aGF0IGFyZSBkZXNjZW5kYW50cyBvZiBhIG5vbi12aWV3IGNvbnRh
aW5lciwgZS5nLiB0cmFuc2Zvcm1lZCBlbGVtZW50cy4KICAgICAvLyBUaGV5IHdpbGwgc3RheSBm
aXhlZCB3cnQgdGhlIGNvbnRhaW5lciByYXRoZXIgdGhhbiB0aGUgZW5jbG9zaW5nIGZyYW1lLgot
ICAgIGlmIChjb250YWluZXIgIT0gJm1fcmVuZGVyVmlldyAmJiAhcmVuZGVyZXIuZml4ZWRQb3Np
dGlvbmVkV2l0aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jaygpKSB7CisgICAgaWYgKGNvbnRhaW5l
ciAhPSAmbV9yZW5kZXJWaWV3KSB7CiAgICAgICAgIGlmICh2aWV3cG9ydENvbnN0cmFpbmVkTm90
Q29tcG9zaXRlZFJlYXNvbikKICAgICAgICAgICAgICp2aWV3cG9ydENvbnN0cmFpbmVkTm90Q29t
cG9zaXRlZFJlYXNvbiA9IFJlbmRlckxheWVyOjpOb3RDb21wb3NpdGVkRm9yTm9uVmlld0NvbnRh
aW5lcjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkocmV2aXNpb24gMjIyMjYzKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw2IEBAIGNsYXNzIEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0
cmFpbnRzOwogY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIEdyYXBoaWNzTGF5ZXJVcGRhdGVy
OwogY2xhc3MgUmVuZGVyRW1iZWRkZWRPYmplY3Q7Ci1jbGFzcyBSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudDsKIGNsYXNzIFJlbmRlclZpZGVvOwogY2xhc3MgUmVuZGVyV2lkZ2V0OwogY2xhc3MgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I7CkBAIC0zNjksMTUgKzM2OCw5IEBAIHByaXZhdGU6CiAgICAgLy8g
UmV0dXJucyB0cnVlIGlmIGFueSBsYXllcidzIGNvbXBvc2l0aW5nIGNoYW5nZWQKICAgICB2b2lk
IGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciogYW5jZXN0b3JMYXll
ciwgUmVuZGVyTGF5ZXImLCBPdmVybGFwTWFwJiwgQ29tcG9zaXRpbmdTdGF0ZSYsIGJvb2wmIGxh
eWVyc0NoYW5nZWQsIGJvb2wmIGRlc2NlbmRhbnRIYXMzRFRyYW5zZm9ybSk7CiAKLSAgICB2b2lk
IGNvbXB1dGVSZWdpb25Db21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCosIE92ZXJsYXBNYXAmLCBDb21wb3NpdGluZ1N0YXRlJiwgYm9vbCYgbGF5ZXJzQ2hhbmdl
ZCwgYm9vbCYgYW55RGVzY2VuZGFudEhhczNEVHJhbnNmb3JtKTsKLQogICAgIC8vIFJlY3Vyc2Vz
IGRvd24gdGhlIHRyZWUsIHBhcmVudGluZyBkZXNjZW5kYW50IGNvbXBvc2l0aW5nIGxheWVycyBh
bmQgY29sbGVjdGluZyBhbiBhcnJheSBvZiBjaGlsZCBsYXllcnMgZm9yIHRoZSBjdXJyZW50IGNv
bXBvc2l0aW5nIGxheWVyLgogICAgIHZvaWQgcmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKFJl
bmRlckxheWVyJiwgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRHcmFwaGljc0xheWVyc09m
RW5jbG9zaW5nTGF5ZXIsIGludCBkZXB0aCk7CiAKLSAgICAvLyBSZWN1cnNlcyBkb3duIHRoZSBS
ZW5kZXJGbG93VGhyZWFkIHRyZWUsIHBhcmVudGluZyBkZXNjZW5kYW50IGNvbXBvc2l0aW5nIGxh
eWVycyBhbmQgY29sbGVjdGluZyBhbiBhcnJheSBvZiBjaGlsZCAKLSAgICAvLyBsYXllcnMgZm9y
IHRoZSBjdXJyZW50IGNvbXBvc2l0aW5nIGxheWVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFub255
bW91cyByZWdpb24gKHRoYXQgYmVsb25ncyB0byB0aGUgcmVnaW9uJ3MgcGFyZW50KS4KLSAgICB2
b2lkIHJlYnVpbGRSZWdpb25Db21wb3NpdGluZ0xheWVyVHJlZShSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCosIFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCwgaW50IGRlcHRoKTsKLQog
ICAgIC8vIFJlY3Vyc2VzIGRvd24gdGhlIHRyZWUsIHVwZGF0aW5nIGxheWVyIGdlb21ldHJ5IG9u
bHkuCiAgICAgdm9pZCB1cGRhdGVMYXllclRyZWVHZW9tZXRyeShSZW5kZXJMYXllciYsIGludCBk
ZXB0aCk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0MzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBZG9iZSBTeXN0
ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IK
LSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKLQotI2lu
Y2x1ZGUgIlBhaW50SW5mby5oIgotI2luY2x1ZGUgIlJlbmRlckJveFJlZ2lvbkluZm8uaCIKLSNp
bmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCi0jaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIK
LSNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0j
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgotCi0jaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6UmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxl
KQotICAgIDogUmVuZGVyUmVnaW9uKGRvY3VtZW50LCBXVEZNb3ZlKHN0eWxlKSwgbnVsbHB0cikK
LSAgICAsIG1faGFzQ3VzdG9tUmVnaW9uU3R5bGUoZmFsc2UpCi0gICAgLCBtX2hhc0F1dG9Mb2dp
Y2FsSGVpZ2h0KGZhbHNlKQotICAgICwgbV9oYXNDb21wdXRlZEF1dG9IZWlnaHQoZmFsc2UpCi0g
ICAgLCBtX2NvbXB1dGVkQXV0b0hlaWdodCgwKQotewotfQotCi1SZW5kZXJOYW1lZEZsb3dGcmFn
bWVudDo6flJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkKLXsKLX0KLQotUmVuZGVyU3R5bGUgUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNyZWF0ZVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJl
bnRTdHlsZSkKLXsKLSAgICBhdXRvIHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91
c1N0eWxlV2l0aERpc3BsYXkocGFyZW50U3R5bGUsIEJMT0NLKTsKLQotICAgIHN0eWxlLnNldEZs
b3dUaHJlYWQocGFyZW50U3R5bGUuZmxvd1RocmVhZCgpKTsKLSAgICBzdHlsZS5zZXRSZWdpb25U
aHJlYWQocGFyZW50U3R5bGUucmVnaW9uVGhyZWFkKCkpOwotICAgIHN0eWxlLnNldFJlZ2lvbkZy
YWdtZW50KHBhcmVudFN0eWxlLnJlZ2lvbkZyYWdtZW50KCkpOwotCi0gICAgcmV0dXJuIHN0eWxl
OwotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojp1cGRhdGVSZWdpb25GbGFncygp
Ci17Ci0gICAgY2hlY2tSZWdpb25TdHlsZSgpOwotICAgIHVwZGF0ZVJlZ2lvbkhhc0F1dG9Mb2dp
Y2FsSGVpZ2h0RmxhZygpOwotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKQotewotICAgIFJlbmRlclJlZ2lvbjo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUp
OwotCi0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZVJl
Z2lvbkZsYWdzKCk7Ci0KLSAgICBpZiAocGFyZW50KCkgJiYgcGFyZW50KCktPm5lZWRzTGF5b3V0
KCkpCi0gICAgICAgIHNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmdldFJhbmdlcyhWZWN0b3I8UmVmUHRyPFJhbmdlPj4mKSBj
b25zdAotewotfQotCi1ib29sIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpzaG91bGRIYXZlQXV0
b0xvZ2ljYWxIZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChwYXJlbnQoKSk7Ci0KLSAgICBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHBhcmVudCgpLT5zdHlsZSgpOwotICAgIGJv
b2wgaGFzU3BlY2lmaWVkRW5kcG9pbnRzRm9ySGVpZ2h0ID0gc3R5bGVUb1VzZS5sb2dpY2FsVG9w
KCkuaXNTcGVjaWZpZWQoKSAmJiBzdHlsZVRvVXNlLmxvZ2ljYWxCb3R0b20oKS5pc1NwZWNpZmll
ZCgpOwotICAgIGJvb2wgaGFzQW5jaG9yZWRFbmRwb2ludHNGb3JIZWlnaHQgPSBwYXJlbnQoKS0+
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgaGFzU3BlY2lmaWVkRW5kcG9pbnRzRm9ySGVpZ2h0
OwotICAgIHJldHVybiBzdHlsZVRvVXNlLmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSAmJiAhaGFz
QW5jaG9yZWRFbmRwb2ludHNGb3JIZWlnaHQ7Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQ6OmluY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKQotewotICAgIEFTU0VSVChp
c1ZhbGlkKCkpOwotICAgIEFTU0VSVChtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0KTsKLQotICAgIG1f
Zmxvd1RocmVhZC0+aW5jcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCk7Ci19Ci0KLXZv
aWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291
bnQoKQotewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotCi0gICAgbV9mbG93VGhyZWFkLT5kZWNy
ZW1lbnRBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKTsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudDo6dXBkYXRlUmVnaW9uSGFzQXV0b0xvZ2ljYWxIZWlnaHRGbGFnKCkKLXsKLSAg
ICBBU1NFUlQoaXNWYWxpZCgpKTsKLQotICAgIGJvb2wgZGlkSGF2ZUF1dG9Mb2dpY2FsSGVpZ2h0
ID0gbV9oYXNBdXRvTG9naWNhbEhlaWdodDsKLSAgICBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0ID0g
c2hvdWxkSGF2ZUF1dG9Mb2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYgKGRpZEhhdmVBdXRvTG9naWNh
bEhlaWdodCA9PSBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9oYXNBdXRvTG9naWNhbEhlaWdodCkKLSAgICAgICAgaW5jcmVtZW50QXV0b0xvZ2lj
YWxIZWlnaHRDb3VudCgpOwotICAgIGVsc2UgewotICAgICAgICBjbGVhckNvbXB1dGVkQXV0b0hl
aWdodCgpOwotICAgICAgICBkZWNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCk7Ci0gICAg
fQotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojp1cGRhdGVMb2dpY2FsSGVpZ2h0
KCkKLXsKLSAgICBSZW5kZXJSZWdpb246OnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKLQotICAgIGlm
ICghaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2Ug
d2FudCB0byB1cGRhdGUgdGhlIGxvZ2ljYWwgaGVpZ2h0IGJhc2VkIG9uIHRoZSBjb21wdXRlZCBh
dXRvLWhlaWdodAotICAgIC8vIG9ubHkgYWZ0ZXIgdGhlIG1lYXN1cmUgY290bmVudCBsYXlvdXQg
cGhhc2Ugd2hlbiBhbGwgdGhlCi0gICAgLy8gYXV0byBsb2dpY2FsIGhlaWdodCByZWdpb25zIGhh
dmUgYSBjb21wdXRlZCBhdXRvLWhlaWdodC4KLSAgICBpZiAobV9mbG93VGhyZWFkLT5pbk1lYXN1
cmVDb250ZW50TGF5b3V0UGhhc2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlcmUg
bWF5IGJlIHJlZ2lvbnMgd2l0aCBhdXRvIGxvZ2ljYWwgaGVpZ2h0IHRoYXQgZHVyaW5nIHRoZSBw
cmVyZXF1aXNpdGUgbGF5b3V0IHBoYXNlCi0gICAgLy8gZGlkIG5vdCBoYXZlIHRoZSBjaGFuY2Ug
dG8gbGF5b3V0IGZsb3cgdGhyZWFkIGNvbnRlbnQuIEJlY2F1c2Ugb2YgdGhhdCwgdGhlc2UgcmVn
aW9ucyBkbyBub3QKLSAgICAvLyBoYXZlIGEgY29tcHV0ZWRBdXRvSGVpZ2h0IGFuZCB0aGV5IHdp
bGwgbm90IGJlIGFibGUgdG8gZnJhZ21lbnQgYW55IGZsb3cKLSAgICAvLyB0aHJlYWQgY29udGVu
dC4KLSAgICBpZiAoIWhhc0NvbXB1dGVkQXV0b0hlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBMYXlvdXRVbml0IG5ld0xvZ2ljYWxIZWlnaHQgPSBjb21wdXRlZEF1dG9IZWlnaHQoKSAr
IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgQVNTRVJUKG5ld0xvZ2ljYWxI
ZWlnaHQgPCBSZW5kZXJGbG93VGhyZWFkOjptYXhMb2dpY2FsSGVpZ2h0KCkpOwotICAgIGlmIChu
ZXdMb2dpY2FsSGVpZ2h0ID4gbG9naWNhbEhlaWdodCgpKSB7Ci0gICAgICAgIHNldExvZ2ljYWxI
ZWlnaHQobmV3TG9naWNhbEhlaWdodCk7Ci0gICAgICAgIC8vIFJlY2FsY3VsYXRlIHBvc2l0aW9u
IG9mIHRoZSByZW5kZXIgYmxvY2sgYWZ0ZXIgbmV3IGxvZ2ljYWwgaGVpZ2h0IGlzIHNldC4KLSAg
ICAgICAgLy8gKG5lZWRlZCBpbiBhYnNvbHV0ZSBwb3NpdGlvbmluZyBjYXNlIHdpdGggYm90dG9t
IGFsaWdubWVudCBmb3IgZXhhbXBsZSkKLSAgICAgICAgUmVuZGVyUmVnaW9uOjp1cGRhdGVMb2dp
Y2FsSGVpZ2h0KCk7Ci0gICAgfQotfQotCi1MYXlvdXRVbml0IFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50OjpwYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7
Ci0gICAgaWYgKGhhc0NvbXB1dGVkQXV0b0hlaWdodCgpICYmIG1fZmxvd1RocmVhZC0+aW5NZWFz
dXJlQ29udGVudExheW91dFBoYXNlKCkpIHsKLSAgICAgICAgQVNTRVJUKGhhc0F1dG9Mb2dpY2Fs
SGVpZ2h0KCkpOwotICAgICAgICByZXR1cm4gY29tcHV0ZWRBdXRvSGVpZ2h0KCk7Ci0gICAgfQot
ICAgIHJldHVybiBtX2Zsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjb250
ZW50SGVpZ2h0KCkgOiBjb250ZW50V2lkdGgoKTsKLX0KLQotLy8gVGhpcyBtZXRob2QgcmV0dXJu
cyB0aGUgbWF4aW11bSBwYWdlIHNpemUgb2YgYSByZWdpb24gd2l0aCBhdXRvLWhlaWdodC4gVGhp
cyBpcyB0aGUgaW5pdGlhbAotLy8gaGVpZ2h0IHZhbHVlIGZvciBhdXRvLWhlaWdodCByZWdpb25z
IGluIHRoZSBmaXJzdCBsYXlvdXQgcGhhc2Ugb2YgdGhlIHBhcmVudCBuYW1lZCBmbG93LgotTGF5
b3V0VW5pdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6bWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSBj
b25zdAotewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotICAgIEFTU0VSVChoYXNBdXRvTG9naWNh
bEhlaWdodCgpICYmIG1fZmxvd1RocmVhZC0+aW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkp
OwotICAgIEFTU0VSVChpc0Fub255bW91cygpKTsKLSAgICBBU1NFUlQocGFyZW50KCkpOwotCi0g
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBwYXJlbnQoKS0+c3R5bGUoKTsKLSAg
ICByZXR1cm4gc3R5bGVUb1VzZS5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/IFJl
bmRlckZsb3dUaHJlYWQ6Om1heExvZ2ljYWxIZWlnaHQoKSA6IGRvd25jYXN0PFJlbmRlckJsb2Nr
PigqcGFyZW50KCkpLmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhNYXhTaXplLCBz
dHlsZVRvVXNlLmxvZ2ljYWxNYXhIZWlnaHQoKSk7Ci19Ci0KLUxheW91dFJlY3QgUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQ6OmZsb3dUaHJlYWRQb3J0aW9uUmVjdEZvckNsaXBwaW5nKGJvb2wgaXNG
aXJzdFJlZ2lvbkluUmFuZ2UsIGJvb2wgaXNMYXN0UmVnaW9uSW5SYW5nZSkgY29uc3QKLXsKLSAg
ICAvLyBFbGVtZW50cyBmbG93ZWQgaW50byBhIHJlZ2lvbiBzaG91bGQgbm90IGJlIHBhaW50ZWQg
cGFzdCB0aGUgcmVnaW9uJ3MgY29udGVudCBib3gKLSAgICAvLyBpZiB0aGV5IGNvbnRpbnVlIHRv
IGZsb3cgaW50byBhbm90aGVyIHJlZ2lvbiBpbiB0aGF0IGRpcmVjdGlvbi4KLSAgICAvLyBJZiB0
aGV5IGRvIG5vdCBjb250aW51ZSBpbnRvIGFub3RoZXIgcmVnaW9uIGluIHRoYXQgZGlyZWN0aW9u
LCB0aGV5IHNob3VsZCBiZQotICAgIC8vIHBhaW50ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIHJlZ2lv
bidzIGJvcmRlciBib3guCi0gICAgLy8gUmVnaW9ucyB3aXRoIG92ZXJmbG93OmhpZGRlbiB3aWxs
IGFwcGx5IGNsaXAgYXQgdGhlIGJvcmRlciBib3gsIG5vdCB0aGUgY29udGVudCBib3guCi0gICAg
Ci0gICAgTGF5b3V0UmVjdCBjbGlwcGluZ1JlY3QgPSBmbG93VGhyZWFkUG9ydGlvblJlY3QoKTsK
LSAgICBSZW5kZXJCbG9ja0Zsb3cmIGNvbnRhaW5lciA9IGZyYWdtZW50Q29udGFpbmVyKCk7Ci0g
ICAgaWYgKGNvbnRhaW5lci5zdHlsZSgpLmhhc1BhZGRpbmcoKSkgewotICAgICAgICBpZiAoaXNG
aXJzdFJlZ2lvbkluUmFuZ2UpIHsKLSAgICAgICAgICAgIGlmIChmbG93VGhyZWFkKCktPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBjbGlwcGluZ1JlY3QubW92
ZSgwLCAtY29udGFpbmVyLnBhZGRpbmdCZWZvcmUoKSk7Ci0gICAgICAgICAgICAgICAgY2xpcHBp
bmdSZWN0LmV4cGFuZCgwLCBjb250YWluZXIucGFkZGluZ0JlZm9yZSgpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2xpcHBpbmdSZWN0Lm1vdmUoLWNvbnRhaW5lci5w
YWRkaW5nQmVmb3JlKCksIDApOwotICAgICAgICAgICAgICAgIGNsaXBwaW5nUmVjdC5leHBhbmQo
Y29udGFpbmVyLnBhZGRpbmdCZWZvcmUoKSwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChpc0xhc3RSZWdpb25JblJhbmdlKSB7Ci0gICAgICAgICAg
ICBpZiAoZmxvd1RocmVhZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAg
ICAgICAgIGNsaXBwaW5nUmVjdC5leHBhbmQoMCwgY29udGFpbmVyLnBhZGRpbmdBZnRlcigpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjbGlwcGluZ1JlY3QuZXhwYW5kKGNv
bnRhaW5lci5wYWRkaW5nQWZ0ZXIoKSwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChmbG93VGhyZWFkKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAg
ICAgIGNsaXBwaW5nUmVjdC5tb3ZlKC1jb250YWluZXIucGFkZGluZ1N0YXJ0KCksIDApOwotICAg
ICAgICAgICAgY2xpcHBpbmdSZWN0LmV4cGFuZChjb250YWluZXIucGFkZGluZ1N0YXJ0KCkgKyBj
b250YWluZXIucGFkZGluZ0VuZCgpLCAwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGNsaXBwaW5nUmVjdC5tb3ZlKDAsIC1jb250YWluZXIucGFkZGluZ1N0YXJ0KCkpOwotICAgICAg
ICAgICAgY2xpcHBpbmdSZWN0LmV4cGFuZCgwLCBjb250YWluZXIucGFkZGluZ1N0YXJ0KCkgKyBj
b250YWluZXIucGFkZGluZ0VuZCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gY2xpcHBpbmdSZWN0OwotfQotCi1SZW5kZXJCbG9ja0Zsb3cmIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50OjpmcmFnbWVudENvbnRhaW5lcigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHBhcmVudCgp
KTsKLSAgICBBU1NFUlQocGFyZW50KCktPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWlu
ZXIoKSk7Ci0gICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnBhcmVudCgpKTsK
LX0KLQotUmVuZGVyTGF5ZXImIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpmcmFnbWVudENvbnRh
aW5lckxheWVyKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZnJhZ21lbnRDb250YWluZXIoKS5sYXll
cigpKTsKLSAgICByZXR1cm4gKmZyYWdtZW50Q29udGFpbmVyKCkubGF5ZXIoKTsKLX0KLQotYm9v
bCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6c2hvdWxkQ2xpcEZsb3dUaHJlYWRDb250ZW50KCkg
Y29uc3QKLXsKLSAgICBpZiAoZnJhZ21lbnRDb250YWluZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIGlzTGFzdFJlZ2lvbigpICYm
IChzdHlsZSgpLnJlZ2lvbkZyYWdtZW50KCkgPT0gQnJlYWtSZWdpb25GcmFnbWVudCk7Ci19Ci0g
ICAgCi1MYXlvdXRTaXplIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpvZmZzZXRGcm9tQ29udGFp
bmVyKFJlbmRlckVsZW1lbnQmIGNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmLCBib29sKikg
Y29uc3QKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGNvbnRhaW5lciwgJmZyYWdtZW50Q29udGFpbmVy
KCkgPT0gJmNvbnRhaW5lcik7Ci0gICAgQVNTRVJUX1VOVVNFRChjb250YWluZXIsIHRoaXMtPmNv
bnRhaW5lcigpID09ICZjb250YWluZXIpOwotICAgIHJldHVybiB0b3BMZWZ0TG9jYXRpb25PZmZz
ZXQoKTsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6bGF5b3V0QmxvY2soYm9v
bCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQotewotICAgIFN0YWNrU3RhdHM6OkxheW91
dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKLSAgICBSZW5kZXJSZWdpb246OmxheW91dEJs
b2NrKHJlbGF5b3V0Q2hpbGRyZW4pOwotCi0gICAgaWYgKGlzVmFsaWQoKSkgewotICAgICAgICBp
ZiAobV9mbG93VGhyZWFkLT5pbk92ZXJmbG93TGF5b3V0UGhhc2UoKSB8fCBtX2Zsb3dUaHJlYWQt
PmluRmluYWxMYXlvdXRQaGFzZSgpKQotICAgICAgICAgICAgY29tcHV0ZU92ZXJmbG93RnJvbUZs
b3dUaHJlYWQoKTsKLQotICAgICAgICBpZiAoaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSAmJiBtX2Zs
b3dUaHJlYWQtPmluTWVhc3VyZUNvbnRlbnRMYXlvdXRQaGFzZSgpKSB7Ci0gICAgICAgICAgICBt
X2Zsb3dUaHJlYWQtPmludmFsaWRhdGVSZWdpb25zKCk7Ci0gICAgICAgICAgICBjbGVhckNvbXB1
dGVkQXV0b0hlaWdodCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjppbnZhbGlkYXRlUmVnaW9uSWZOZWVk
ZWQoKQotewotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlv
dXRSZWN0IG9sZFJlZ2lvblJlY3QoZmxvd1RocmVhZFBvcnRpb25SZWN0KCkpOwotICAgIGlmICgh
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgb2xkUmVnaW9uUmVjdCA9IG9sZFJl
Z2lvblJlY3QudHJhbnNwb3NlZFJlY3QoKTsKLQotICAgIGlmICgob2xkUmVnaW9uUmVjdC53aWR0
aCgpICE9IHBhZ2VMb2dpY2FsV2lkdGgoKSB8fCBvbGRSZWdpb25SZWN0LmhlaWdodCgpICE9IHBh
Z2VMb2dpY2FsSGVpZ2h0KCkpICYmICFtX2Zsb3dUaHJlYWQtPmluRmluYWxMYXlvdXRQaGFzZSgp
KSB7Ci0gICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBldmVuIGlmIHdlIGFyZSBpbiB0aGUgaW5D
b25zdHJhaW5lZExheW91dFBoYXNlIGFuZCBpdCB3aWxsIHRyaWdnZXIgYSBwYXRob2xvZ2ljYWwg
bGF5b3V0IG9mIHRoZSBmbG93IHRocmVhZC4KLSAgICAgICAgbV9mbG93VGhyZWFkLT5pbnZhbGlk
YXRlUmVnaW9ucygpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6
Y2hlY2tSZWdpb25TdHlsZSgpCi17Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0KLSAgICBib29s
IGN1c3RvbVJlZ2lvblN0eWxlID0gZmFsc2U7Ci0KLSAgICBzZXRIYXNDdXN0b21SZWdpb25TdHls
ZShjdXN0b21SZWdpb25TdHlsZSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1l
bnQmLCBjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNvbXB1dGVDaGlsZHJlblN0eWxlSW5S
ZWdpb24oUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCi17Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6
IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkgewotICAgICAgICBhdXRv
IGl0ID0gbV9yZW5kZXJlclJlZ2lvblN0eWxlLmZpbmQoJmNoaWxkKTsKLQotICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGNoaWxkU3R5bGVJblJlZ2lvbjsKLSAgICAgICAgYm9v
bCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCA9IGZhbHNlOwotICAgICAgICBpZiAoaXQgIT0gbV9y
ZW5kZXJlclJlZ2lvblN0eWxlLmVuZCgpKSB7Ci0gICAgICAgICAgICBjaGlsZFN0eWxlSW5SZWdp
b24gPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKml0LT52YWx1ZS5zdHlsZSk7Ci0gICAgICAgICAg
ICBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAoY2hpbGQuaXNBbm9ueW1vdXMoKSB8fCBjaGlsZC5pc0luRmxvd1JlbmRlckZs
b3dUaHJlYWQoKSkKLSAgICAgICAgICAgICAgICBjaGlsZFN0eWxlSW5SZWdpb24gPSAgc3RkOjpt
YWtlX3VuaXF1ZTxSZW5kZXJTdHlsZT4oUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxl
V2l0aERpc3BsYXkocmVuZGVyZXIuc3R5bGUoKSwgY2hpbGQuc3R5bGUoKS5kaXNwbGF5KCkpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjaGlsZFN0eWxlSW5SZWdpb24gPSBj
b21wdXRlU3R5bGVJblJlZ2lvbihjaGlsZCwgcmVuZGVyZXIuc3R5bGUoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzZXRSZW5kZXJlclN0eWxlSW5SZWdpb24oY2hpbGQsIFdURk1vdmUoY2hpbGRT
dHlsZUluUmVnaW9uKSwgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQpOwotICAgICAgICBjb21wdXRl
Q2hpbGRyZW5TdHlsZUluUmVnaW9uKGNoaWxkKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQ6OnNldFJlbmRlcmVyU3R5bGVJblJlZ2lvbihSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUluUmVnaW9uLCBib29s
IG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKQotewotICAgIEFTU0VSVChyZW5kZXJlci5mbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrKCkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiBvYmplY3RPcmlnaW5hbFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0
eWxlKCkpOwotICAgIHJlbmRlcmVyLnNldFN0eWxlSW50ZXJuYWwoV1RGTW92ZSgqc3R5bGVJblJl
Z2lvbikpOwotCi0gICAgaWYgKGlzPFJlbmRlckJveE1vZGVsT2JqZWN0PihyZW5kZXJlcikgJiYg
IXJlbmRlcmVyLmhhc1Zpc2libGVCb3hEZWNvcmF0aW9ucygpKSB7Ci0gICAgICAgIGJvb2wgaGFz
VmlzaWJsZUJveERlY29yYXRpb25zID0gaXM8UmVuZGVyVGFibGVDZWxsPihyZW5kZXJlcikKLSAg
ICAgICAgfHwgcmVuZGVyZXIuc3R5bGUoKS5oYXNCYWNrZ3JvdW5kKCkKLSAgICAgICAgfHwgcmVu
ZGVyZXIuc3R5bGUoKS5oYXNWaXNpYmxlQm9yZGVyKCkKLSAgICAgICAgfHwgcmVuZGVyZXIuc3R5
bGUoKS5oYXNBcHBlYXJhbmNlKCkKLSAgICAgICAgfHwgcmVuZGVyZXIuc3R5bGUoKS5ib3hTaGFk
b3coKTsKLSAgICAgICAgcmVuZGVyZXIuc2V0SGFzVmlzaWJsZUJveERlY29yYXRpb25zKGhhc1Zp
c2libGVCb3hEZWNvcmF0aW9ucyk7Ci0gICAgfQotCi0gICAgT2JqZWN0UmVnaW9uU3R5bGVJbmZv
IHN0eWxlSW5mbzsKLSAgICBzdHlsZUluZm8uc3R5bGUgPSBXVEZNb3ZlKG9iamVjdE9yaWdpbmFs
U3R5bGUpOwotICAgIHN0eWxlSW5mby5jYWNoZWQgPSBvYmplY3RSZWdpb25TdHlsZUNhY2hlZDsK
LSAgICBtX3JlbmRlcmVyUmVnaW9uU3R5bGUuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShzdHlsZUlu
Zm8pKTsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2xlYXJPYmplY3RTdHls
ZUluUmVnaW9uKGNvbnN0IFJlbmRlckVsZW1lbnQmIG9iamVjdCkKLXsKLSAgICBtX3JlbmRlcmVy
UmVnaW9uU3R5bGUucmVtb3ZlKCZvYmplY3QpOwotCi0gICAgLy8gQ2xlYXIgdGhlIHN0eWxlIGZv
ciB0aGUgY2hpbGRyZW4gb2YgdGhpcyBvYmplY3QuCi0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNo
aWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KG9iamVjdCkpCi0gICAgICAgIGNsZWFyT2JqZWN0
U3R5bGVJblJlZ2lvbihjaGlsZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6
OnNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpCi17Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQ6OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSgpCi17Ci0gICAg
aWYgKCFoYXNDdXN0b21SZWdpb25TdHlsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5k
ZXJlclJlZ2lvblN0eWxlTWFwIHRlbXA7Ci0gICAgZm9yIChhdXRvJiBvYmplY3RQYWlyIDogbV9y
ZW5kZXJlclJlZ2lvblN0eWxlKSB7Ci0gICAgICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0X2Nhc3Q8
UmVuZGVyRWxlbWVudCo+KG9iamVjdFBhaXIua2V5KTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiBvYmplY3RSZWdpb25TdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihv
YmplY3QtPnN0eWxlKCkpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG9i
amVjdE9yaWdpbmFsU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKm9iamVjdFBhaXIudmFs
dWUuc3R5bGUpOwotCi0gICAgICAgIGJvb2wgc2hvdWxkQ2FjaGVSZWdpb25TdHlsZSA9IG9iamVj
dFBhaXIudmFsdWUuY2FjaGVkOwotICAgICAgICBpZiAoIXNob3VsZENhY2hlUmVnaW9uU3R5bGUp
IHsKLSAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGNhY2hlIHRoZSBjb21w
dXRlZCBzdHlsZSBpbiByZWdpb24uCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFuZ2VkQ29udGV4
dFNlbnNpdGl2ZVByb3BlcnRpZXMgPSBDb250ZXh0U2Vuc2l0aXZlUHJvcGVydHlOb25lOwotICAg
ICAgICAgICAgU3R5bGVEaWZmZXJlbmNlIHN0eWxlRGlmZiA9IG9iamVjdE9yaWdpbmFsU3R5bGUt
PmRpZmYoKm9iamVjdFJlZ2lvblN0eWxlLCBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRp
ZXMpOwotICAgICAgICAgICAgaWYgKHN0eWxlRGlmZiA8IFN0eWxlRGlmZmVyZW5jZUxheW91dFBv
c2l0aW9uZWRNb3ZlbWVudE9ubHkpCi0gICAgICAgICAgICAgICAgc2hvdWxkQ2FjaGVSZWdpb25T
dHlsZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNob3VsZENhY2hlUmVnaW9uU3R5
bGUpIHsKLSAgICAgICAgICAgIE9iamVjdFJlZ2lvblN0eWxlSW5mbyBzdHlsZUluZm87Ci0gICAg
ICAgICAgICBzdHlsZUluZm8uc3R5bGUgPSBXVEZNb3ZlKG9iamVjdFJlZ2lvblN0eWxlKTsKLSAg
ICAgICAgICAgIHN0eWxlSW5mby5jYWNoZWQgPSB0cnVlOwotICAgICAgICAgICAgdGVtcC5zZXQo
b2JqZWN0LCBXVEZNb3ZlKHN0eWxlSW5mbykpOwotICAgICAgICB9Ci0gICAgICAgIG9iamVjdC0+
c2V0U3R5bGVJbnRlcm5hbChXVEZNb3ZlKCpvYmplY3RPcmlnaW5hbFN0eWxlKSk7Ci0gICAgfQot
Ci0gICAgbV9yZW5kZXJlclJlZ2lvblN0eWxlLnN3YXAodGVtcCk7Ci19Ci0KLUxheW91dFJlY3Qg
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnZpc3VhbE92ZXJmbG93UmVjdCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKGlzVmFsaWQoKSkgewotICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZv
ID0gcmVuZGVyQm94UmVnaW9uSW5mbyhmbG93VGhyZWFkKCkpOwotICAgICAgICBpZiAoYm94SW5m
byAmJiBib3hJbmZvLT5vdmVyZmxvdygpKQotICAgICAgICAgICAgcmV0dXJuIGJveEluZm8tPm92
ZXJmbG93KCktPnZpc3VhbE92ZXJmbG93UmVjdCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
UmVuZGVyUmVnaW9uOjp2aXN1YWxPdmVyZmxvd1JlY3QoKTsKLX0KLQotdm9pZCBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudDo6YXR0YWNoUmVnaW9uKCkKLXsKLSAgICBSZW5kZXJSZWdpb246OmF0dGFj
aFJlZ2lvbigpOwotCi0gICAgaWYgKHJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpIHx8ICFpc1Zh
bGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZVJlZ2lvbkZsYWdzKCk7Ci19Ci0K
LXZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmRldGFjaFJlZ2lvbigpCi17Ci0gICAgaWYg
KGhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0g
ICAgICAgIG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQgPSBmYWxzZTsKLSAgICAgICAgY2xlYXJDb21w
dXRlZEF1dG9IZWlnaHQoKTsKLSAgICAgICAgZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3Vu
dCgpOwotICAgIH0KLSAgICAKLSAgICBSZW5kZXJSZWdpb246OmRldGFjaFJlZ2lvbigpOwotfQot
Ci12b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjphYnNvbHV0ZVF1YWRzRm9yQm94SW5SZWdp
b24oVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCwgY29uc3QgUmVuZGVy
Qm94KiByZW5kZXJlciwgZmxvYXQgbG9jYWxUb3AsIGZsb2F0IGxvY2FsQm90dG9tKQotewotICAg
IExheW91dFJlY3QgbGF5b3V0TG9jYWxSZWN0KDAsIGxvY2FsVG9wLCByZW5kZXJlci0+Ym9yZGVy
Qm94UmVjdEluUmVnaW9uKHRoaXMpLndpZHRoKCksIGxvY2FsQm90dG9tIC0gbG9jYWxUb3ApOwot
ICAgIExheW91dFJlY3QgZnJhZ21lbnRSZWN0ID0gcmVjdEZsb3dQb3J0aW9uRm9yQm94KHJlbmRl
cmVyLCBsYXlvdXRMb2NhbFJlY3QpOwotCi0gICAgLy8gV2Ugd2FudCB0byBza2lwIHRoZSAwcHgg
aGVpZ2h0IGZyYWdtZW50cyBmb3Igbm9uLWVtcHR5IGJveGVzIHRoYXQgbWF5IGFwcGVhciBpbiBj
YXNlIHRoZSBib3R0b20gb2YgdGhlIGJveAotICAgIC8vIG92ZXJsYXBzIHRoZSBib3R0b20gb2Yg
YSByZWdpb24uCi0gICAgaWYgKGxvY2FsQm90dG9tICE9IGxvY2FsVG9wICYmICFmcmFnbWVudFJl
Y3QuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEN1cnJlbnRSZW5kZXJSZWdpb25N
YWludGFpbmVyIHJlZ2lvbk1haW50YWluZXIoKnRoaXMpOwotICAgIHF1YWRzLmFwcGVuZChyZW5k
ZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoZnJhZ21lbnRSZWN0KSwgVXNlVHJh
bnNmb3Jtcywgd2FzRml4ZWQpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LmgJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJO
YW1lZEZsb3dGcmFnbWVudC5oCShub25leGlzdGVudCkKQEAgLTEsMTYxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICog
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
Ci0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgot
ICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJSZW5kZXJS
ZWdpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBFbGVtZW50OwotY2xhc3Mg
UmVuZGVyU3R5bGU7Ci0KLS8vIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50IHJlcHJlc2VudHMgYSBy
ZWdpb24gdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGZyYWdtZW50YXRpb24gb2YKLS8vIHRo
ZSBSZW5kZXJOYW1lZEZsb3dUaHJlYWQgY29udGVudC4KLS8vCi0vLyBBIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50IG9iamVjdCBpcyBjcmVhdGVkIGFzIGFuIGFub255bW91cyBjaGlsZCBmb3IgYSBS
ZW5kZXJCbG9ja0Zsb3cgb2JqZWN0Ci0vLyB0aGF0IGhhcyBhIHZhbGlkIC13ZWJraXQtZmxvdy1m
cm9tIHByb3BlcnR5LgotLy8KLS8vIFRoaXMgYWxsb3dzIGEgbm9uLXJlcGxhY2VkIGJsb2NrIHRv
IGJlaGF2ZSBsaWtlIGEgcmVnaW9uIGlmIG5lZWRlZCwgZm9sbG93aW5nIHRoZSBDU1NSZWdpb25z
IHNwZWNpZmljYXRpb246Ci0vLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MtcmVnaW9ucy8j
dGhlLWZsb3ctZnJvbS1wcm9wZXJ0eS4KLS8vIGxpc3QtaXRlbSwgdGFibGUtY2FwdGlvbiwgdGFi
bGUtY2VsbCBjYW4gYmVjb21lIHJlZ2lvbnMgaW4gYWRkaXRpb24gdG8gYmxvY2sgfCBpbmxpbmUt
YmxvY2suCi0KLWNsYXNzIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50IGZpbmFsIDogcHVibGljIFJl
bmRlclJlZ2lvbiB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoRG9jdW1l
bnQmLCBSZW5kZXJTdHlsZSYmKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCgpOwotCi0gICAgc3RhdGljIFJlbmRlclN0eWxlIGNyZWF0ZVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSk7Ci0KLSAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYpIGNvbnN0OwotCi0gICAgTGF5b3V0VW5p
dCBwYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIExheW91dFVuaXQgbWF4
UGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdDsKLSAgICAKLSAgICBMYXlvdXRSZWN0IGZsb3dUaHJl
YWRQb3J0aW9uUmVjdEZvckNsaXBwaW5nKGJvb2wgaXNGaXJzdFJlZ2lvbkluUmFuZ2UsIGJvb2wg
aXNMYXN0UmVnaW9uSW5SYW5nZSkgY29uc3Q7Ci0KLSAgICBSZW5kZXJCbG9ja0Zsb3cmIGZyYWdt
ZW50Q29udGFpbmVyKCkgY29uc3Q7Ci0gICAgUmVuZGVyTGF5ZXImIGZyYWdtZW50Q29udGFpbmVy
TGF5ZXIoKSBjb25zdDsKLSAgICAKLSAgICBib29sIHNob3VsZENsaXBGbG93VGhyZWFkQ29udGVu
dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIAotICAgIExheW91dFNpemUgb2Zmc2V0RnJvbUNvbnRh
aW5lcihSZW5kZXJFbGVtZW50JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBib29sKiBvZmZzZXREZXBl
bmRzT25Qb2ludCA9IG51bGxwdHIpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1BzZXVk
b0VsZW1lbnRSZWdpb24oKSBjb25zdCB7IHJldHVybiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNQ
c2V1ZG9FbGVtZW50KCk7IH0KLQotICAgIC8vIFdoZW4gdGhlIGNvbnRlbnQgaW5zaWRlIHRoZSBy
ZWdpb24gcmVxdWlyZXMgdGhlIHJlZ2lvbiB0byBoYXZlIGEgbGF5ZXIsIHRoZSBsYXllciB3aWxs
IGJlIGNyZWF0ZWQgb24gdGhlIHJlZ2lvbidzCi0gICAgLy8gcGFyZW50IHJlbmRlcmVyIGluc3Rl
YWQuCi0gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyB0aGF0IHJlbmRlcmVyIGhvbGRpbmcgdGhl
IGxheWVyLgotICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgY2Fubm90IGJlIG51bGwgYmVjYXVzZSBD
U1MgUmVnaW9ucyBjcmVhdGUgU3RhY2tpbmcgQ29udGV4dHMgKHdoaWNoIG1lYW5zIHRoZXkgY3Jl
YXRlIGxheWVycykuCi0gICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgbGF5ZXJPd25lcigpIGNv
bnN0IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpwYXJlbnQoKSk7
IH0KLQotICAgIGJvb2wgaGFzQ3VzdG9tUmVnaW9uU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2hh
c0N1c3RvbVJlZ2lvblN0eWxlOyB9Ci0gICAgdm9pZCBjbGVhck9iamVjdFN0eWxlSW5SZWdpb24o
Y29uc3QgUmVuZGVyRWxlbWVudCYpOwotCi0gICAgdm9pZCBzZXRSZWdpb25PYmplY3RzUmVnaW9u
U3R5bGUoKTsKLSAgICB2b2lkIHJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSgpOwot
ICAgIAotICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dSZWN0KCkgY29uc3Qgb3ZlcnJpZGU7
Ci0KLSAgICBib29sIGhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9oYXNBdXRvTG9naWNhbEhlaWdodDsgfQotCi0gICAgTGF5b3V0VW5pdCBjb21wdXRlZEF1
dG9IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2NvbXB1dGVkQXV0b0hlaWdodDsgfQotCi0gICAg
dm9pZCBzZXRDb21wdXRlZEF1dG9IZWlnaHQoTGF5b3V0VW5pdCBjb21wdXRlZEF1dG9IZWlnaHQp
Ci0gICAgewotICAgICAgICBtX2hhc0NvbXB1dGVkQXV0b0hlaWdodCA9IHRydWU7Ci0gICAgICAg
IG1fY29tcHV0ZWRBdXRvSGVpZ2h0ID0gY29tcHV0ZWRBdXRvSGVpZ2h0OwotICAgIH0KLQotICAg
IHZvaWQgY2xlYXJDb21wdXRlZEF1dG9IZWlnaHQoKQotICAgIHsKLSAgICAgICAgbV9oYXNDb21w
dXRlZEF1dG9IZWlnaHQgPSBmYWxzZTsKLSAgICAgICAgbV9jb21wdXRlZEF1dG9IZWlnaHQgPSAw
OwotICAgIH0KLQotICAgIGJvb2wgaGFzQ29tcHV0ZWRBdXRvSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9oYXNDb21wdXRlZEF1dG9IZWlnaHQ7IH0KLQotCi0gICAgdm9pZCBhdHRhY2hSZWdpb24o
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGFjaFJlZ2lvbigpIG92ZXJyaWRlOwotCi0gICAgdm9p
ZCB1cGRhdGVMb2dpY2FsSGVpZ2h0KCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0ZVJlZ2lv
bkZsYWdzKCk7Ci0KLSAgICB2b2lkIGFic29sdXRlUXVhZHNGb3JCb3hJblJlZ2lvbihWZWN0b3I8
RmxvYXRRdWFkPiYsIGJvb2wqLCBjb25zdCBSZW5kZXJCb3gqLCBmbG9hdCwgZmxvYXQpIG92ZXJy
aWRlOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9uSWZOZWVkZWQoKTsKLQotcHJpdmF0ZToK
LSAgICBib29sIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCI7IH0KLQotICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gY29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYsIGNv
bnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSkgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRlQ2hp
bGRyZW5TdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmKTsKLSAgICB2b2lkIHNldFJlbmRlcmVy
U3R5bGVJblJlZ2lvbihSZW5kZXJFbGVtZW50Jiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiwgYm9vbCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCk7Ci0KLSAgICB2b2lkIGNoZWNrUmVnaW9u
U3R5bGUoKTsKLSAgICB2b2lkIHNldEhhc0N1c3RvbVJlZ2lvblN0eWxlKGJvb2wgaGFzQ3VzdG9t
UmVnaW9uU3R5bGUpIHsgbV9oYXNDdXN0b21SZWdpb25TdHlsZSA9IGhhc0N1c3RvbVJlZ2lvblN0
eWxlOyB9Ci0KLSAgICB2b2lkIHVwZGF0ZVJlZ2lvbkhhc0F1dG9Mb2dpY2FsSGVpZ2h0RmxhZygp
OwotCi0gICAgdm9pZCBpbmNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCk7Ci0gICAgdm9p
ZCBkZWNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCk7Ci0KLSAgICBib29sIHNob3VsZEhh
dmVBdXRvTG9naWNhbEhlaWdodCgpIGNvbnN0OwotCi0gICAgdm9pZCBsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBvdmVy
cmlkZTsKLQotICAgIHN0cnVjdCBPYmplY3RSZWdpb25TdHlsZUluZm8gewotICAgICAgICAvLyBV
c2VkIHRvIHN0b3JlIHRoZSBvcmlnaW5hbCBzdHlsZSBvZiB0aGUgb2JqZWN0IGluIHJlZ2lvbgot
ICAgICAgICAvLyBzbyB0aGF0IHRoZSBvcmlnaW5hbCBzdHlsZSBpcyBwcm9wZXJseSByZXN0b3Jl
ZCBhZnRlciBwYWludC4KLSAgICAgICAgLy8gQWxzbyB1c2VkIHRvIHN0b3JlIGNvbXB1dGVkIHN0
eWxlIG9mIHRoZSBvYmplY3QgaW4gcmVnaW9uIGJldHdlZW4KLSAgICAgICAgLy8gcmVnaW9uIHBh
aW50aW5ncywgc28gdGhhdCB0aGUgc3R5bGUgaW4gcmVnaW9uIGlzIGNvbXB1dGVkIG9ubHkKLSAg
ICAgICAgLy8gd2hlbiBuZWNlc3NhcnkuCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gc3R5bGU7Ci0gICAgICAgIC8vIFRydWUgaWYgdGhlIGNvbXB1dGVkIHN0eWxlIGluIHJl
Z2lvbiBpcyBjYWNoZWQuCi0gICAgICAgIGJvb2wgY2FjaGVkOwotICAgIH07Ci0KLSAgICB1c2lu
ZyBSZW5kZXJlclJlZ2lvblN0eWxlTWFwID0gSGFzaE1hcDxjb25zdCBSZW5kZXJFbGVtZW50Kiwg
T2JqZWN0UmVnaW9uU3R5bGVJbmZvPjsKLSAgICBSZW5kZXJlclJlZ2lvblN0eWxlTWFwIG1fcmVu
ZGVyZXJSZWdpb25TdHlsZTsKLQotICAgIGJvb2wgbV9oYXNDdXN0b21SZWdpb25TdHlsZSA6IDE7
Ci0gICAgYm9vbCBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0IDogMTsKLSAgICBib29sIG1faGFzQ29t
cHV0ZWRBdXRvSGVpZ2h0IDogMTsKLQotICAgIExheW91dFVuaXQgbV9jb21wdXRlZEF1dG9IZWln
aHQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfUkVOREVSX09CSkVDVChSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgaXNSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclJ1YnkuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgpAQCAtNDMwLDI3ICs0Mjks
NiBAQCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgUmVuZGVyT2JqZWN0OjplbmNsCiAgICAgcmV0dXJu
ICpsaW5lYWdlT2ZUeXBlPFJlbmRlckJveE1vZGVsT2JqZWN0Pihjb25zdF9jYXN0PFJlbmRlck9i
amVjdCY+KCp0aGlzKSkuZmlyc3QoKTsKIH0KIAotYm9vbCBSZW5kZXJPYmplY3Q6OmZpeGVkUG9z
aXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5nQmxvY2soKSBjb25zdAotewotICAgIHJldHVy
biAoKGZsb3dUaHJlYWRTdGF0ZSgpID09IFJlbmRlck9iamVjdDo6SW5zaWRlT3V0T2ZGbG93VGhy
ZWFkKQotICAgICAgICAmJiAoc3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pCi0g
ICAgICAgICYmIChjb250YWluaW5nQmxvY2soKS0+aXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFk
KCkpKTsKLX0KLQotc3RhdGljIGJvb2wgaGFzRml4ZWRQb3NJbk5hbWVkRmxvd0NvbnRhaW5pbmdC
bG9jayhjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIEFTU0VSVChyZW5kZXJl
ci0+Zmxvd1RocmVhZFN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpOb3RJbnNpZGVGbG93VGhyZWFk
KTsKLQotICAgIFJlbmRlck9iamVjdCogY3VyciA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4o
cmVuZGVyZXIpOwotICAgIHdoaWxlIChjdXJyICYmICFpczxSZW5kZXJWaWV3PigqY3VycikpIHsK
LSAgICAgICAgaWYgKGN1cnItPmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5n
QmxvY2soKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjdXJyID0gY3Vyci0+
Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5k
ZXJCbG9jayogUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVCbG9jaygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC04MjAsMTAgKzc5OCw2IEBAIFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IFJlbmRlck9iamVjdDo6Y28KICAgICAvLyByZXBhaW50aW5nIHRvIGRvIGluZGl2aWR1YWwgcmVn
aW9uIHJlcGFpbnRzLgogICAgIFJlbmRlckZsb3dUaHJlYWQqIHBhcmVudFJlbmRlckZsb3dUaHJl
YWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKHBhcmVudFJlbmRlckZs
b3dUaHJlYWQpIHsKLSAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgZml4ZWQgcG9zaXRp
b25lZCBlbGVtZW50IHdpdGggbmFtZWQgZmxvdyBhcyBDQiBhbG9uZyB0aGUgQ0IgY2hhaW4KLSAg
ICAgICAgLy8gdGhlbiB0aGUgcmVwYWludCBjb250YWluZXIgaXMgbm90IHRoZSBmbG93IHRocmVh
ZC4KLSAgICAgICAgaWYgKGhhc0ZpeGVkUG9zSW5OYW1lZEZsb3dDb250YWluaW5nQmxvY2sodGhp
cykpCi0gICAgICAgICAgICByZXR1cm4gcmVwYWludENvbnRhaW5lcjsKICAgICAgICAgLy8gSWYg
d2UgaGF2ZSBhbHJlYWR5IGZvdW5kIGEgcmVwYWludCBjb250YWluZXIgdGhlbiB3ZSB3aWxsIHJl
cGFpbnQgaW50byB0aGF0IGNvbnRhaW5lciBvbmx5IGlmIGl0IGlzIHBhcnQgb2YgdGhlIHNhbWUK
ICAgICAgICAgLy8gZmxvdyB0aHJlYWQuIE90aGVyd2lzZSB3ZSB3aWxsIG5lZWQgdG8gY2F0Y2gg
dGhlIHJlcGFpbnQgY2FsbCBhbmQgc2VuZCBpdCB0byB0aGUgZmxvdyB0aHJlYWQuCiAgICAgICAg
IFJlbmRlckZsb3dUaHJlYWQqIHJlcGFpbnRDb250YWluZXJGbG93VGhyZWFkID0gcmVwYWludENv
bnRhaW5lciA/IHJlcGFpbnRDb250YWluZXItPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSA6
IG51bGxwdHI7CkBAIC0xOTEzLDExICsxODg3LDYgQEAgYm9vbCBSZW5kZXJPYmplY3Q6Om5vZGVB
dEZsb2F0UG9pbnQoY29ucwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQqIFJlbmRlck9iamVjdDo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQogUmVuZGVyRmxvd1RocmVhZCogUmVu
ZGVyT2JqZWN0Ojpsb2NhdGVGbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgY29uc3QKIHsKICAg
ICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gdGhpcy0+Y29udGFpbmluZ0Jsb2NrKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAy
MjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDcgKzU5LDYgQEAgY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKIGNsYXNz
IFJlbmRlckdlb21ldHJ5TWFwOwogY2xhc3MgUmVuZGVyTGF5ZXI7CiBjbGFzcyBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0OwotY2xhc3MgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ7CiBjbGFzcyBSZW5k
ZXJSZWdpb247CiBjbGFzcyBSZW5kZXJUaGVtZTsKIGNsYXNzIFNlbGVjdGlvblN1YnRyZWVSb290
OwpAQCAtMTU5LDggKzE1OCw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJC
b3gmIGVuY2xvc2luZ0JveCgpIGNvbnN0OwogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0JiBlbmNs
b3NpbmdCb3hNb2RlbE9iamVjdCgpIGNvbnN0OwogCi0gICAgYm9vbCBmaXhlZFBvc2l0aW9uZWRX
aXRoTmFtZWRGbG93Q29udGFpbmluZ0Jsb2NrKCkgY29uc3Q7Ci0KICAgICAvLyBGdW5jdGlvbiB0
byByZXR1cm4gb3VyIGVuY2xvc2luZyBmbG93IHRocmVhZCBpZiB3ZSBhcmUgY29udGFpbmVkIGlu
c2lkZSBvbmUuIFRoaXMKICAgICAvLyBmdW5jdGlvbiBmb2xsb3dzIHRoZSBjb250YWluaW5nIGJs
b2NrIGNoYWluLgogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWRDb250YWluaW5nQmxv
Y2soKSBjb25zdApAQCAtMTcxLDggKzE2OCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGxv
Y2F0ZUZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKICAgICB9CiAKLSAgICBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCogY3VycmVudFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3Q7Ci0K
ICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBzZXRIYXNBWE9iamVjdChib29sIGZsYWcpIHsgbV9o
YXNBWE9iamVjdCA9IGZsYWc7IH0KICAgICBib29sIGhhc0FYT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9oYXNBWE9iamVjdDsgfQpAQCAtMjQ0LDcgKzIzOSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaXNSZW5kZXJJRnJhbWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc1JlbmRlckltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNSZW5kZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZXBsaWNhKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlJbmxpbmUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQpAQCAtMzEyLDggKzMwNiw3IEBAIHB1YmxpYzoKICAgICAKICAgICBlbnVtIEZsb3dU
aHJlYWRTdGF0ZSB7CiAgICAgICAgIE5vdEluc2lkZUZsb3dUaHJlYWQgPSAwLAotICAgICAgICBJ
bnNpZGVPdXRPZkZsb3dUaHJlYWQgPSAxLAotICAgICAgICBJbnNpZGVJbkZsb3dUaHJlYWQgPSAy
LAorICAgICAgICBJbnNpZGVJbkZsb3dUaHJlYWQgPSAxLAogICAgIH07CiAKICAgICB2b2lkIHNl
dEZsb3dUaHJlYWRTdGF0ZUluY2x1ZGluZ0Rlc2NlbmRhbnRzKEZsb3dUaHJlYWRTdGF0ZSk7CkBA
IC00MDUsNyArMzk4LDcgQEAgcHVibGljOgogICAgICAgICAvLyBSZW5kZXJCbG9jazo6Y3JlYXRl
QW5vbnltb3VzQmxvY2soKS4gVGhpcyBpbmNsdWRlcyBjcmVhdGluZyBhbiBhbm9ueW1vdXMKICAg
ICAgICAgLy8gUmVuZGVyQmxvY2sgaGF2aW5nIGEgQkxPQ0sgb3IgQk9YIGRpc3BsYXkuIE90aGVy
IGNsYXNzZXMgc3VjaCBhcyBSZW5kZXJUZXh0RnJhZ21lbnQKICAgICAgICAgLy8gYXJlIG5vdCBS
ZW5kZXJCbG9ja3MgYW5kIHdpbGwgcmV0dXJuIGZhbHNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU2NzA5LiAKLSAgICAgICAgcmV0dXJuIGlzQW5vbnltb3Vz
KCkgJiYgKHN0eWxlKCkuZGlzcGxheSgpID09IEJMT0NLIHx8IHN0eWxlKCkuZGlzcGxheSgpID09
IEJPWCkgJiYgc3R5bGUoKS5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETyAmJiBpc1JlbmRlckJsb2Nr
KCkgJiYgIWlzTGlzdE1hcmtlcigpICYmICFpc1JlbmRlckZsb3dUaHJlYWQoKSAmJiAhaXNSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpICYmICFpc1JlbmRlck11bHRpQ29sdW1uU2V0KCkgJiYgIWlz
UmVuZGVyVmlldygpCisgICAgICAgIHJldHVybiBpc0Fub255bW91cygpICYmIChzdHlsZSgpLmRp
c3BsYXkoKSA9PSBCTE9DSyB8fCBzdHlsZSgpLmRpc3BsYXkoKSA9PSBCT1gpICYmIHN0eWxlKCku
c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8gJiYgaXNSZW5kZXJCbG9jaygpICYmICFpc0xpc3RNYXJr
ZXIoKSAmJiAhaXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgIWlzUmVuZGVyTXVsdGlDb2x1bW5TZXQo
KSAmJiAhaXNSZW5kZXJWaWV3KCkKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgICAg
ICAgICAmJiAhaXNSZW5kZXJGdWxsU2NyZWVuKCkKICAgICAgICAgICAgICYmICFpc1JlbmRlckZ1
bGxTY3JlZW5QbGFjZWhvbGRlcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uLmNwcAkocmV2aXNpb24gMjIyMjYzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlZ2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKICNp
bmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQu
aCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCShyZXZpc2lvbiAy
MjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExOCw4ICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5IYXZlR2Vu
ZXJhdGVkQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgVmlz
aWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBS
ZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNBdXRvTG9naWNh
bEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgYWJz
b2x1dGVRdWFkc0ZvckJveEluUmVnaW9uKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCosIGNvbnN0
IFJlbmRlckJveCosIGZsb2F0LCBmbG9hdCkgeyB9CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gMjIyMjYz
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJlYWQuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5j
bHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJlZERvY3VtZW50TWFy
a2VyLmgiCkBAIC0yNDUsMTEgKzI0NCw2IEBAIGJvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBh
aW50KFBhaW50SW4KICAgICBpZiAoc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBu
YW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAg
IC8vIENoZWNrIG91ciByZWdpb24gcmFuZ2UgdG8gbWFrZSBzdXJlIHdlIG5lZWQgdG8gYmUgcGFp
bnRpbmcgaW4gdGhpcyByZWdpb24uCi0gICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmICFuYW1l
ZEZsb3dGcmFnbWVudC0+Zmxvd1RocmVhZCgpLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1Jl
Z2lvbih0aGlzLCBuYW1lZEZsb3dGcmFnbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQog
ICAgIExheW91dFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0
aW9uKCk7CiAKICAgICAvLyBFYXJseSBleGl0IGlmIHRoZSBlbGVtZW50IHRvdWNoZXMgdGhlIGVk
Z2VzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZp
c2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyRGVzY2Vu
ZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGFibGVDYXB0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKQEAgLTE1MzAsNyArMTUyOSw3IEBAIExheW91
dFJlY3QgUmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJlY3QKICAgICAgICAgcmVjdC5zZXRMb2Nh
dGlvbihsb2NhdGlvbiArIHJlY3QubG9jYXRpb24oKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJl
Y3QgPSBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QobG9jYXRpb24sIHJlZ2lvbiwgcmVsZXZh
bmN5KTsKLSAgICAKKwogICAgIC8vIElmIHdlIGhhdmUgYSBjYXB0aW9uLCBleHBhbmQgdGhlIGNs
aXAgdG8gaW5jbHVkZSB0aGUgY2FwdGlvbi4KICAgICAvLyBGSVhNRTogVGVjaG5pY2FsbHkgdGhp
cyBpcyB3cm9uZywgYnV0IGl0J3MgdmlydHVhbGx5IGltcG9zc2libGUgdG8gZml4IHRoaXMKICAg
ICAvLyBmb3IgcmVhbCB1bnRpbCBjYXB0aW9ucyBoYXZlIGJlZW4gcmUtd3JpdHRlbi4KQEAgLTE1
NTUsNyArMTU1NCw3IEBAIGJvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFQK
ICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBs
b2NhdGlvbigpOwogCiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KLSAgICBpZiAoIWhhc092ZXJm
bG93Q2xpcCgpIHx8IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0NsaXBS
ZWN0KGFkanVzdGVkTG9jYXRpb24sIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKSkp
IHsKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IGxvY2F0aW9uSW5Db250YWluZXIuaW50
ZXJzZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIG51bGxwdHIpKSkgewog
ICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoaXM8UmVu
ZGVyQm94PigqY2hpbGQpICYmICFkb3duY2FzdDxSZW5kZXJCb3g+KCpjaGlsZCkuaGFzU2VsZlBh
aW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgfHwgY2hpbGQtPmlzVGFi
bGVDYXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9
IGZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKGRvd25jYXN0PFJlbmRlckJveD4oY2hpbGQpLCBh
ZGp1c3RlZExvY2F0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAyMjIyNjMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNiBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5o
IgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUg
IlJlbmRlclRhYmxlQ29sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKQEAgLTE1MDEs
NyArMTUwMCw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb24KICAg
ICAvLyBKdXN0IGZvcndhcmQgdG8gb3VyIGNoaWxkcmVuIGFsd2F5cy4KICAgICBMYXlvdXRQb2lu
dCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCi0g
ICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2Vj
dHMob3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBjdXJyZW50UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKSkpKQorICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhbG9jYXRpb25J
bkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwg
bnVsbHB0cikpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaGFzT3ZlcmZsb3dp
bmdDZWxsKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQAog
I2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgiCkBAIC03
NTYsMjcgKzc1NSwxOCBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0U3RyZWFtJiB0cywg
CiAgICAgfQogCiAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBwb3NpdGl2ZVpPcmRlckxp
c3QgPSBsYXllci5wb3NaT3JkZXJMaXN0KCkpIHsKLSAgICAgICAgc2l6ZV90IGxheWVyQ291bnQg
PSAwOwotICAgICAgICBmb3IgKGF1dG8qIGN1cnJMYXllciA6ICpwb3NpdGl2ZVpPcmRlckxpc3Qp
IHsKLSAgICAgICAgICAgIGlmICghY3VyckxheWVyLT5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3Jh
cGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSkKLSAgICAgICAgICAgICAgICArK2xheWVyQ291bnQ7
Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIHNpemVfdCBsYXllckNvdW50ID0gcG9zaXRp
dmVaT3JkZXJMaXN0LT5zaXplKCk7CisKICAgICAgICAgaWYgKGxheWVyQ291bnQpIHsKICAgICAg
ICAgICAgIGludCBjdXJySW5kZW50ID0gaW5kZW50OwotICAgICAgICAgICAgaWYgKCFwb3NpdGl2
ZVpPcmRlckxpc3QtPnNpemUoKSB8fCAhcG9zaXRpdmVaT3JkZXJMaXN0LT5hdCgwKS0+aXNGbG93
VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYmVoYXZpb3IgJiBSZW5kZXJBc1RleHRTaG93TGF5ZXJOZXN0aW5nKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgICAgICAgICAg
ICAgICAgICB0cyA8PCAiIHBvc2l0aXZlIHotb3JkZXIgbGlzdCgiIDw8IHBvc2l0aXZlWk9yZGVy
TGlzdC0+c2l6ZSgpIDw8ICIpXG4iOwotICAgICAgICAgICAgICAgICAgICArK2N1cnJJbmRlbnQ7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZv
ciAoYXV0byogY3VyckxheWVyIDogKnBvc2l0aXZlWk9yZGVyTGlzdCkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBEbyBub3QgcHJpbnQgbmFtZWQgZmxvd3MgdHdpY2UuCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghY3VyckxheWVyLT5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXll
cnNVbmRlclJlZ2lvbnMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlTGF5ZXJzKHRz
LCByb290TGF5ZXIsICpjdXJyTGF5ZXIsIHBhaW50RGlydHlSZWN0LCBjdXJySW5kZW50LCBiZWhh
dmlvcik7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJlaGF2aW9yICYgUmVu
ZGVyQXNUZXh0U2hvd0xheWVyTmVzdGluZykgeworICAgICAgICAgICAgICAgIHdyaXRlSW5kZW50
KHRzLCBpbmRlbnQpOworICAgICAgICAgICAgICAgIHRzIDw8ICIgcG9zaXRpdmUgei1vcmRlciBs
aXN0KCIgPDwgcG9zaXRpdmVaT3JkZXJMaXN0LT5zaXplKCkgPDwgIilcbiI7CisgICAgICAgICAg
ICAgICAgKytjdXJySW5kZW50OwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGF1
dG8qIGN1cnJMYXllciA6ICpwb3NpdGl2ZVpPcmRlckxpc3QpCisgICAgICAgICAgICAgICAgd3Jp
dGVMYXllcnModHMsIHJvb3RMYXllciwgKmN1cnJMYXllciwgcGFpbnREaXJ0eVJlY3QsIGN1cnJJ
bmRlbnQsIGJlaGF2aW9yKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDEw
ICsyNzEsNiBAQCB2b2lkIFJlbmRlclZpZXc6OmluaXRpYWxpemVMYXlvdXRTdGF0ZShMCiAgICAg
c3RhdGUubV9pc1BhZ2luYXRlZCA9IHN0YXRlLm1fcGFnZUxvZ2ljYWxIZWlnaHQgPiAwOwogfQog
Ci12b2lkIFJlbmRlclZpZXc6OmxheW91dENvbnRlbnRJbkF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9u
cyhjb25zdCBMYXlvdXRTdGF0ZSYpCi17Ci19Ci0KIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkK
IHsKICAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CkBA
IC0zMTMsMTAgKzMwOSw3IEBAIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKIAogICAgIG1fcGFn
ZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkID0gZmFsc2U7CiAKLSAgICBpZiAoY2hlY2tUd29QYXNzTGF5
b3V0Rm9yQXV0b0hlaWdodFJlZ2lvbnMoKSkKLSAgICAgICAgbGF5b3V0Q29udGVudEluQXV0b0xv
Z2ljYWxIZWlnaHRSZWdpb25zKCptX2xheW91dFN0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIGxh
eW91dENvbnRlbnQoKm1fbGF5b3V0U3RhdGUpOworICAgIGxheW91dENvbnRlbnQoKm1fbGF5b3V0
U3RhdGUpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIGNoZWNrTGF5b3V0U3RhdGUoKm1fbGF5b3V0
U3RhdGUpOwpAQCAtMTExNiw3ICsxMTA5LDYgQEAgdm9pZCBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0
U3RhdGUoUmVuZGVyTwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlID09IDApOwogCiAgICAgbV9s
YXlvdXRTdGF0ZSA9IHN0ZDo6bWFrZV91bmlxdWU8TGF5b3V0U3RhdGU+KHJvb3QpOwotICAgIHB1
c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKHJvb3QpOwogfQogCiBib29sIFJlbmRl
clZpZXc6OnB1c2hMYXlvdXRTdGF0ZUZvclBhZ2luYXRpb25JZk5lZWRlZChSZW5kZXJCbG9ja0Zs
b3cmIGxheW91dFJvb3QpCkBAIC0xMTI3LDcgKzExMTksNiBAQCBib29sIFJlbmRlclZpZXc6OnB1
c2hMYXlvdXRTdGF0ZUZvclBhZ2luCiAgICAgbV9sYXlvdXRTdGF0ZS0+bV9pc1BhZ2luYXRlZCA9
IHRydWU7CiAgICAgLy8gVGhpcyBpcyBqdXN0IGEgZmxhZyBmb3Iga25vd24gcGFnZSBoZWlnaHQg
KHNlZSBSZW5kZXJCbG9ja0Zsb3c6OmNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFu
Z2UpLgogICAgIG1fbGF5b3V0U3RhdGUtPm1fcGFnZUxvZ2ljYWxIZWlnaHQgPSAxOwotICAgIHB1
c2hMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKGxheW91dFJvb3QpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC0xMjA4LDE5ICsxMTk5LDYgQEAgdm9pZCBSZW5kZXJWaWV3OjpzdHls
ZURpZENoYW5nZShTdHlsZURpZgogICAgIGZyYW1lVmlldygpLnN0eWxlRGlkQ2hhbmdlKCk7CiB9
CiAKLWJvb2wgUmVuZGVyVmlldzo6Y2hlY2tUd29QYXNzTGF5b3V0Rm9yQXV0b0hlaWdodFJlZ2lv
bnMoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJWaWV3Ojpw
dXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZChjb25zdCBSZW5kZXJPYmplY3QmKQot
ewotfQotCi12b2lkIFJlbmRlclZpZXc6OnBvcExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dUaHJl
YWQoKQotewotfQotCiBJbWFnZVF1YWxpdHlDb250cm9sbGVyJiBSZW5kZXJWaWV3OjppbWFnZVF1
YWxpdHlDb250cm9sbGVyKCkKIHsKICAgICBpZiAoIW1faW1hZ2VRdWFsaXR5Q29udHJvbGxlcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24gMjIyMjYz
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMTg2LDggKzE4Niw2IEBAIHB1YmxpYzoKIAogICAgIC8vIFJlbmRlcmVyIHRoYXQgcGFp
bnRzIHRoZSByb290IGJhY2tncm91bmQgaGFzIGJhY2tncm91bmQtaW1hZ2VzIHdoaWNoIGFsbCBo
YXZlIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQuCiAgICAgYm9vbCByb290QmFja2dyb3Vu
ZElzRW50aXJlbHlGaXhlZCgpIGNvbnN0OwotICAgIAotICAgIGJvb2wgY2hlY2tUd29QYXNzTGF5
b3V0Rm9yQXV0b0hlaWdodFJlZ2lvbnMoKSBjb25zdDsKIAogICAgIHZvaWQgc3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRl
OwogCkBAIC0yNzQsNyArMjcyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFkb2luZ0Z1bGxS
ZXBhaW50KCkgfHwgbV9sYXlvdXRTdGF0ZS0+aXNQYWdpbmF0ZWQoKSB8fCByZW5kZXJlci5mbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkKICAgICAgICAgICAgIHx8IG1fbGF5b3V0U3RhdGUtPmxp
bmVHcmlkKCkgfHwgKHJlbmRlcmVyLnN0eWxlKCkubGluZUdyaWQoKSAhPSBSZW5kZXJTdHlsZTo6
aW5pdGlhbExpbmVHcmlkKCkgJiYgcmVuZGVyZXIuaXNSZW5kZXJCbG9ja0Zsb3coKSkpIHsKICAg
ICAgICAgICAgIG1fbGF5b3V0U3RhdGUgPSBzdGQ6Om1ha2VfdW5pcXVlPExheW91dFN0YXRlPihX
VEZNb3ZlKG1fbGF5b3V0U3RhdGUpLCAmcmVuZGVyZXIsIG9mZnNldCwgcGFnZUhlaWdodCwgcGFn
ZUhlaWdodENoYW5nZWQpOwotICAgICAgICAgICAgcHVzaExheW91dFN0YXRlRm9yQ3VycmVudEZs
b3dUaHJlYWQocmVuZGVyZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjgyLDcgKzI3OSw2IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIHBvcExheW91dFN0YXRlKCkKICAgICB7Ci0gICAgICAgIHBvcExheW91dFN0YXRlRm9y
Q3VycmVudEZsb3dUaHJlYWQoKTsKICAgICAgICAgbV9sYXlvdXRTdGF0ZSA9IFdURk1vdmUobV9s
YXlvdXRTdGF0ZS0+bV9uZXh0KTsKICAgICB9CiAKQEAgLTMwNiwxNCArMzAyLDEwIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBlbmFibGVMYXlvdXRTdGF0ZSgpIHsgQVNTRVJUKG1fbGF5b3V0U3RhdGVE
aXNhYmxlQ291bnQgPiAwKTsgbV9sYXlvdXRTdGF0ZURpc2FibGVDb3VudC0tOyB9CiAKICAgICB2
b2lkIGxheW91dENvbnRlbnQoY29uc3QgTGF5b3V0U3RhdGUmKTsKLSAgICB2b2lkIGxheW91dENv
bnRlbnRJbkF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucyhjb25zdCBMYXlvdXRTdGF0ZSYpOwogI2lm
bmRlZiBOREVCVUcKICAgICB2b2lkIGNoZWNrTGF5b3V0U3RhdGUoY29uc3QgTGF5b3V0U3RhdGUm
KTsKICNlbmRpZgogCi0gICAgdm9pZCBwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVh
ZChjb25zdCBSZW5kZXJPYmplY3QmKTsKLSAgICB2b2lkIHBvcExheW91dFN0YXRlRm9yQ3VycmVu
dEZsb3dUaHJlYWQoKTsKLQogICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXI7
CiAgICAgZnJpZW5kIGNsYXNzIExheW91dFN0YXRlRGlzYWJsZXI7CiAgICAgZnJpZW5kIGNsYXNz
IFN1YnRyZWVMYXlvdXRTdGF0ZU1haW50YWluZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDIyMjI2MykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk1LDcgKzk1LDYgQEAKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJl
YWQuY3BwIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uU2V0LmNwcCIKICNpbmNsdWRlICJS
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAiCi0jaW5jbHVkZSAiUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQuY3BwIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5jcHAiCiAjaW5j
bHVkZSAiUmVuZGVyUHJvZ3Jlc3MuY3BwIgogI2luY2x1ZGUgIlJlbmRlclF1b3RlLmNwcCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9u
IDIyMjI2MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY0LDE1ICsxNjQsNiBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBh
aW50RWxsaXBzaXNCb3goUGFpCiAKIHZvaWQgUm9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgTGF5b3V0VW5pdCBs
aW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCiB7Ci0gICAgUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gcmVuZGVyZXIoKS5jdXJyZW50UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKTsKLQotICAgIC8vIENoZWNrIGlmIHdlIGFyZSBpbiB0aGUgY29ycmVjdCBy
ZWdpb24uCi0gICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50KSB7Ci0gICAgICAgIFJlbmRlclJlZ2lv
biogcmVnaW9uID0gY29udGFpbmluZ1JlZ2lvbigpOwotICAgICAgICBpZiAocmVnaW9uICYmIHJl
Z2lvbiAhPSByZWludGVycHJldF9jYXN0PFJlbmRlclJlZ2lvbio+KG5hbWVkRmxvd0ZyYWdtZW50
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCiAgICAgSW5saW5lRmxvd0JveDo6
cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7CiAgICAg
cGFpbnRFbGxpcHNpc0JveChwYWludEluZm8sIHBhaW50T2Zmc2V0LCBsaW5lVG9wLCBsaW5lQm90
dG9tKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmNwcAkocmV2aXNpb24gMjIyMjYzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKQEAgLTI0
MSw3ICsyNDAsNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50UmVwbGFjZWQoUGFpbnRJCiAK
ICAgICAvLyBBcHBseSBpbml0aWFsIHZpZXdwb3J0IGNsaXAKICAgICBpZiAoc2hvdWxkQXBwbHlW
aWV3cG9ydENsaXAoKSkKLSAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dCgpLmNsaXAoc25h
cHBlZEludFJlY3Qob3ZlcmZsb3dDbGlwUmVjdChwYWludE9mZnNldCwgY3VycmVudFJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50KCkpKSk7CisgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQoKS5j
bGlwKHNuYXBwZWRJbnRSZWN0KG92ZXJmbG93Q2xpcFJlY3QocGFpbnRPZmZzZXQpKSk7CiAKICAg
ICAvLyBDb252ZXJ0IGZyb20gY29udGFpbmVyIG9mZnNldHMgKGh0bWwgcmVuZGVyZXJzKSB0byBh
IHJlbGF0aXZlIHRyYW5zZm9ybSAoc3ZnIHJlbmRlcmVycykuCiAgICAgLy8gVHJhbnNmb3JtIGZy
b20gb3VyIHBhaW50IGNvbnRhaW5lcidzIGNvb3JkaW5hdGUgc3lzdGVtIHRvIG91ciBsb2NhbCBj
b29yZHMuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>