<?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>155980</bug_id>
          
          <creation_ts>2016-03-29 11:29:28 -0700</creation_ts>
          <short_desc>Move the CG ImageDecoder class from ImageSourceCG.cpp to ImageDecoderCG.h and .cpp</short_desc>
          <delta_ts>2016-03-30 12:10:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1178732</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-29 11:29:28 -0700</bug_when>
    <thetext>This is a clean up step after r198782.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178733</commentid>
    <comment_count>1</comment_count>
      <attachid>275113</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-29 11:32:20 -0700</bug_when>
    <thetext>Created attachment 275113
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178844</commentid>
    <comment_count>2</comment_count>
      <attachid>275143</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-29 16:02:39 -0700</bug_when>
    <thetext>Created attachment 275143
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178868</commentid>
    <comment_count>3</comment_count>
      <attachid>275152</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-29 16:55:16 -0700</bug_when>
    <thetext>Created attachment 275152
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178895</commentid>
    <comment_count>4</comment_count>
      <attachid>275152</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-03-29 18:07:34 -0700</bug_when>
    <thetext>Comment on attachment 275152
Patch

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

&gt; Source/WebCore/platform/graphics/cg/ImageDecoderCG.h:55
&gt; +    IntSize frameSizeAtIndex(size_t, SubsamplingLevel) const;

Original or subsampled size? Maybe we should have typedefs for those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179099</commentid>
    <comment_count>5</comment_count>
      <attachid>275200</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-30 10:39:53 -0700</bug_when>
    <thetext>Created attachment 275200
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179130</commentid>
    <comment_count>6</comment_count>
      <attachid>275200</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-30 12:10:16 -0700</bug_when>
    <thetext>Comment on attachment 275200
Patch

Clearing flags on attachment: 275200

Committed r198849: &lt;http://trac.webkit.org/changeset/198849&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179131</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-30 12:10:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275113</attachid>
            <date>2016-03-29 11:32:20 -0700</date>
            <delta_ts>2016-03-29 16:02:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155980-20160329113223.patch</filename>
            <type>text/plain</type>
            <size>49097</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4Nzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY2MzU3M2I0ZWUyODE4
ZWIyODc5Njk2Nzk3MmViZTlkZjczZWQ5MC4uOTVmZDYyZWNjMDY2NWI2NWM5ZGI5OTkyOGI0YjE4
NzlhYzI0YzMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDE2LTAzLTI5ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgTW92ZSB0
aGUgQ0cgSW1hZ2VEZWNvZGVyIGNsYXNzIGZyb20gSW1hZ2VTb3VyY2VDRy5jcHAgdG8gSW1hZ2VE
ZWNvZGVyQ0cuaCBhbmQgLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU1OTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWZ0ZXIgdGhpcyBzdGVwLCBJbWFnZVNvdXJjZS5jcHAgYW5kIEltYWdlU291
cmNlQ0cuY3BwIGxvb2sgdmVyeSBzaW1pbGFyCisgICAgICAgIHNvIHRoZXkgY2FuIGJlIG1lcmdl
ZCBpbiBvbmUgZmlsZS4gQWxsIHRoZSByZWR1bmRhbnQgY29kZSBpbiB0aGVzZSB0d28gZmlsZXMK
KyAgICAgICAgY2FuIGJlIHJlbW92ZWQuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZURlY29kZXJDRy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW1h
Z2VTb3VyY2VPcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlU291cmNlT3B0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OnNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpzaGFyZWRCdWZmZXJSZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c3Vic2Ft
cGxpbmdMZXZlbEZvclNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Ynl0
ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kZXI6OmhvdFNwb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXI6Om9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXI6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2Rlcjo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNv
ZGVyQ0cuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6aW1hZ2VTb3VyY2VPcHRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9y
aWVudGF0aW9uRnJvbVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hh
cmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnNoYXJlZEJ1ZmZlclJlbGVhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpJbWFnZURlY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWls
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNpemUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6aG90U3BvdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVB
dEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6b3JpZW50
YXRpb25BdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlRnJhbWVJbWFnZUF0
SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXREYXRh
KTogRGVsZXRlZC4KKwogMjAxNi0wMy0yOSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRA
YXBwbGUuY29tPgogCiAgICAgICAgIFtPUyBYXSBbUlRMIFNjcm9sbGJhcnNdIE92ZXJsYXkgUlRM
IHNjcm9sbGJhcnMgYW5pbWF0ZSBpbiBmcm9tIHRoZSB3cm9uZyBzaWRlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBlNTIwOWNiMjBjZjAzMzg3YTI1MjY0M2RmNGUwYjIx
NTE0OTIwNGY3Li5jNjcyY2M3MDdmYTg3ODViYTUyNzQ0MmU5MDRiMWNmYWRiMjUxNWFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTcxLDYgKzcxLDcgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
U291cmNlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1dpbi5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQppbmRleCA0ZTY2YTc0NzQ1YTAyYWZiODFkYWZjZTYyYTEzZjA0NGYxNWZlNDNj
Li5jODA5MmMyMGI3YmFjNWRjYzllMTAyY2RmZDhmMmVhZTI1NDRhYjQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQpAQCAtNDA1LDYgKzQwNSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29k
ZXJDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbnRQb2ludENHLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg1ZDAxMTVhMjc1YjkyOTE1ZjAxMmZmYzY2
ZmNmMzc3MTQ5ODg1ZmMuLjM4MWI2MGVjMDFhNGU0ZGVlZGE5YTIxODRjMjdkYjgxZjdiZTUyMzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTIyNjcsNiArMjI2Nyw4IEBACiAJCTUzRUY3NjZDMTY1MzE5OTQwMDRDQkU0OSAvKiBT
ZXR0aW5nc01hY3Jvcy5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdz
TWFjcm9zLmggKi87IH07CiAJCTU1MEEwQkM5MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWRO
YW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1
MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLzsgfTsKIAkJNTUw
QTBCQ0EwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkM4MDg1RjYwMzkwMDczNTNENiAv
KiBRdWFsaWZpZWROYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNTU1Qjg3RUMxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VB
MUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi87IH07CisJCTU1NUI4N0VE
MUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIElt
YWdlRGVjb2RlckNHLmggKi87IH07CiAJCTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11
bGF0ZWRDbGljay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggKi87IH07CiAJ
CTU3MkE3RjIzMUM2RTVBNjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzJBN0YyMjFDNkU1QTY2MDA5
QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwICovOyB9OwogCQk1ODAzNzE2MTFBNjZGMDBBMDBC
QUY1MTkgLyogQ2xpcFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTgwMzcxNUYxQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0LmNwcCAqLzsg
fTsKQEAgLTk4MzEsNiArOTgzMyw4IEBACiAJCTUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBT
ZXR0aW5nc01hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXR0aW5n
c01hY3Jvcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTBBMEJDNzA4NUY2MDM5
MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZWROYW1lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTU1MEEwQkM4
MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTU1NUI4N0VB
MUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZURlY29kZXJDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZURlY29kZXJDRy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0NTAgLyogU1ZH
SW1hZ2VDbGllbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ltYWdl
Q2xpZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMDFDNkU1NzE5
MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2ltdWxhdGVkQ2xpY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcy
QTdGMjIxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNzcxLDYgKzIxNzc1LDggQEAKIAkJCQkyMjkyQjI3QjEzNTY2
Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovLAogCQkJCTIyQkQ5RjgwMTM1
MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovLAogCQkJCUIyNzUzNTMwMEIw
NTM4MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCAqLywKKwkJCQk1NTVCODdFQTFDQUFGMEFCMDAz
NDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLAorCQkJCTU1NUI4N0VCMUNBQUYwQUIwMDM0
OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oICovLAogCQkJCUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0
RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLywKIAkJCQk0QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEg
LyogSW1hZ2VTb3VyY2VDRy5oICovLAogCQkJCTRCMzQ4MDkxMEVFRjUwRDQwMEFDMUI0MSAvKiBJ
bWFnZVNvdXJjZUNHTWFjLm1tICovLApAQCAtMjYyNzEsNiArMjYyNzcsNyBAQAogCQkJCTUxODVG
QzhEMUJCNEM0RTgwMDEyODk4RiAvKiBJREJGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk2
OUE2Q0JBRDFDNkJFNDJDMDBCODM2RTkgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxODVGQzhGMUJCNEM0RTgwMDEyODk4RiAvKiBJREJHZXRSZXN1bHQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTU1NUI4N0VEMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURl
Y29kZXJDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDOTExQkI0QzRFODAwMTI4OThGIC8q
IElEQkluZGV4LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUY3OThGMDFCRTg4MEU3MDA4QUU0OTEg
LyogSURCSW5kZXhJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM5NTFCQjRDNEU4MDAx
Mjg5OEYgLyogSURCS2V5LmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjU5LDYgKzMxMjY2LDcgQEAK
IAkJCQk5OUNDMEI1OTE4QkU5ODRBMDA2Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5OUNDMEI1QjE4QkU5ODRBMDA2Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvblNl
Z21lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQ0YxMjUxRjEyRDAwM0VGMjY5IC8q
IFJlc2V0SW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTU1NUI4N0VDMUNBQUYwQUIw
MDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzRGNzEz
RTBENUE2RjI4MDAwMThENjkgLyogUmVzb3VyY2VFcnJvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0VFNjg0NkIxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlRXJyb3JDRi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTRDNzY1MDBDRTkyMzRFMDA3RUYzQ0QgLyogUmVzb3VyY2VFcnJv
ck1hYy5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxZGJkYjlhMzc1
ZjJiMzE1ODg4YjIyZTMzOWRlYjBhMjEwZmE4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKQEAgLTAsMCAr
MSw0MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKKworI2lmIFVT
RShDRykKKworI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRQb2lu
dC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworI2lmICFQTEFURk9STShJT1MpCisjaW5j
bHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQor
I2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2VuZGlmCisKKyNpZiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQorI2ltcG9ydCA8SW1hZ2VJTy9DR0ltYWdlU291cmNlUHJpdmF0ZS5oPgorI2Vs
c2UKK2NvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yID0gQ0ZT
VFIoImtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yIik7CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBO
R1VuY2xhbXBlZERlbGF5VGltZSA9IENGU1RSKCJVbmNsYW1wZWREZWxheVRpbWUiKTsKK2NvbnN0
IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HRGVsYXlUaW1lID0gQ0ZTVFIo
IkRlbGF5VGltZSIpOworY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQ
TkdMb29wQ291bnQgPSBDRlNUUigiTG9vcENvdW50Iik7CisKK2NvbnN0IENGU3RyaW5nUmVmIGtD
R0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTaG91
bGRQcmVmZXJSR0IzMiIpOworY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTa2lwTWV0
YWRhdGEgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEiKTsKKworc3RhdGljIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyhTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCit7CisgICAgaWYgKCFzdWJzYW1wbGluZ0xldmVs
KSB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIG51bU9wdGlvbnMgPSAzOworICAgICAgICBjb25z
dCB2b2lkKiBrZXlzW251bU9wdGlvbnNdID0geyBrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hlLCBr
Q0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0
YSB9OworICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJvb2xl
YW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUgfTsKKyAgICAgICAgcmV0dXJu
IENGRGljdGlvbmFyeUNyZWF0ZShudWxscHRyLCBrZXlzLCB2YWx1ZXMsIG51bU9wdGlvbnMsICZr
Q0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxs
QmFja3MpOworICAgIH0KKyAgICAKKyAgICBzaG9ydCBjb25zdHJhaW5lZFN1YnNhbXBsaW5nTGV2
ZWwgPSBzdGQ6Om1pbjxzaG9ydD4oMywgc3RkOjptYXg8c2hvcnQ+KDAsIHN1YnNhbXBsaW5nTGV2
ZWwpKTsKKyAgICBpbnQgc3Vic2FtcGxlSW50ID0gMSA8PCBjb25zdHJhaW5lZFN1YnNhbXBsaW5n
TGV2ZWw7IC8vIFswLi4zXSA9PiBbMSwgMiwgNCwgOF0KKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZO
dW1iZXJSZWY+IHN1YnNhbXBsZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0
ciwgIGtDRk51bWJlckludFR5cGUsICAmc3Vic2FtcGxlSW50KSk7CisgICAgY29uc3QgQ0ZJbmRl
eCBudW1PcHRpb25zID0gNDsKKyAgICBjb25zdCB2b2lkKiBrZXlzW251bU9wdGlvbnNdID0geyBr
Q0dJbWFnZVNvdXJjZVNob3VsZENhY2hlLCBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMy
LCBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSwga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0
b3IgfTsKKyAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJvb2xlYW5U
cnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUsIHN1YnNhbXBsZU51bWJlci5nZXQo
KSB9OworICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShudWxscHRyLCBrZXlz
LCB2YWx1ZXMsIG51bU9wdGlvbnMsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKK30KKworc3RhdGljIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IGltYWdlU291cmNlT3B0aW9ucyhTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWwgPSAwKQoreworICAgIGlmIChzdWJzYW1wbGluZ0xldmVsKQorICAgICAgICBy
ZXR1cm4gY3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIAor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj4gb3B0
aW9ucyA9IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucygwKTsKKyAgICByZXR1cm4gb3B0aW9uczsK
K30KKworc3RhdGljIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhD
RkRpY3Rpb25hcnlSZWYgaW1hZ2VQcm9wZXJ0aWVzKQoreworICAgIEFTU0VSVChpbWFnZVByb3Bl
cnRpZXMpOworICAgIENGTnVtYmVyUmVmIG9yaWVudGF0aW9uUHJvcGVydHkgPSAoQ0ZOdW1iZXJS
ZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaW1hZ2VQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5
T3JpZW50YXRpb24pOworICAgIGlmICghb3JpZW50YXRpb25Qcm9wZXJ0eSkKKyAgICAgICAgcmV0
dXJuIEltYWdlT3JpZW50YXRpb24oKTsKKyAgICAKKyAgICBpbnQgZXhpZlZhbHVlOworICAgIENG
TnVtYmVyR2V0VmFsdWUob3JpZW50YXRpb25Qcm9wZXJ0eSwga0NGTnVtYmVySW50VHlwZSwgJmV4
aWZWYWx1ZSk7CisgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb246OmZyb21FWElGVmFsdWUoZXhp
ZlZhbHVlKTsKK30KKworI2lmICFQTEFURk9STShDT0NPQSkKK3NpemVfdCBzaGFyZWRCdWZmZXJH
ZXRCeXRlc0F0UG9zaXRpb24odm9pZCogaW5mbywgdm9pZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlv
biwgc2l6ZV90IGNvdW50KQoreworICAgIFNoYXJlZEJ1ZmZlciogc2hhcmVkQnVmZmVyID0gc3Rh
dGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5mbyk7CisgICAgc2l6ZV90IHNvdXJjZVNpemUgPSBz
aGFyZWRCdWZmZXItPnNpemUoKTsKKyAgICBpZiAocG9zaXRpb24gPj0gc291cmNlU2l6ZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgY29uc3QgY2hhciogc291cmNlID0gc2hhcmVkQnVm
ZmVyLT5kYXRhKCkgKyBwb3NpdGlvbjsKKyAgICBzaXplX3QgYW1vdW50ID0gc3RkOjptaW48c2l6
ZV90Pihjb3VudCwgc291cmNlU2l6ZSAtIHBvc2l0aW9uKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBz
b3VyY2UsIGFtb3VudCk7CisgICAgcmV0dXJuIGFtb3VudDsKK30KKwordm9pZCBzaGFyZWRCdWZm
ZXJSZWxlYXNlKHZvaWQqIGluZm8pCit7CisgICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIg
PSBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihpbmZvKTsKKyAgICBzaGFyZWRCdWZmZXItPmRl
cmVmKCk7Cit9CisjZW5kaWYKKworSW1hZ2VEZWNvZGVyOjpJbWFnZURlY29kZXIoKQoreworICAg
IG1fbmF0aXZlRGVjb2RlciA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUluY3JlbWVudGFs
KG51bGxwdHIpKTsKK30KKworU3Vic2FtcGxpbmdMZXZlbCBJbWFnZURlY29kZXI6OnN1YnNhbXBs
aW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxpbmdMZXZlbCBtYXhpbXVtU3Vi
c2FtcGxpbmdMZXZlbCkKK3sKKyAgICAvLyBUaGVyZSBhcmUgZm91ciBzdWJzYW1wbGluZyBsZXZl
bHM6IDAgPSAxeCwgMSA9IDAuNXgsIDIgPSAwLjI1eCwgMyA9IDAuMTI1eC4KKyAgICBmbG9hdCBj
bGFtcGVkU2NhbGUgPSBzdGQ6Om1heDxmbG9hdD4oMC4xMjUsIHN0ZDo6bWluPGZsb2F0PigxLCBz
Y2FsZSkpOworICAgIFN1YnNhbXBsaW5nTGV2ZWwgcmVzdWx0ID0gY2VpbGYobG9nMmYoMSAvIGNs
YW1wZWRTY2FsZSkpOworICAgIEFTU0VSVChyZXN1bHQgPj0wICYmIHJlc3VsdCA8PSAzKTsKKyAg
ICByZXR1cm4gc3RkOjptaW4ocmVzdWx0LCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCk7Cit9CisK
K3NpemVfdCBJbWFnZURlY29kZXI6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygp
Cit7CisgICAgLy8gTWVhc3VyZWQgYnkgdHJhY2luZyBtYWxsb2MvY2FsbG9jIGNhbGxzIG9uIE1h
YyBPUyAxMC42LjYsIHg4Nl82NC4KKyAgICAvLyBBIG5vbi16ZXJvIHZhbHVlIGVuc3VyZXMgY2Fj
aGVkIGltYWdlcyB3aXRoIG5vIGRlY29kZWQgZnJhbWVzIHN0aWxsIGVudGVyCisgICAgLy8gdGhl
IGxpdmUgZGVjb2RlZCByZXNvdXJjZXMgbGlzdCB3aGVuIHRoZSBDR0ltYWdlU291cmNlIGRlY29k
ZXMgaW1hZ2UKKyAgICAvLyBwcm9wZXJ0aWVzLCBhbGxvd2luZyB0aGUgY2FjaGUgdG8gcHJ1bmUg
dGhlIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlLgorICAgIC8vIFRoaXMgdmFsdWUgaXMgbGlrZWx5
IHRvIGJlIGluYWNjdXJhdGUgb24gb3RoZXIgcGxhdGZvcm1zLCBidXQgdGhlIG92ZXJhbGwKKyAg
ICAvLyBiZWhhdmlvciBpcyB1bmNoYW5nZWQuCisgICAgcmV0dXJuIDEzMDg4OworfQorCitTdHJp
bmcgSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgQ0ZTdHJp
bmdSZWYgaW1hZ2VTb3VyY2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNv
ZGVyLmdldCgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cHJlZmVycmVkRXh0ZW5zaW9uRm9ySW1h
Z2VTb3VyY2VUeXBlKGltYWdlU291cmNlVHlwZSk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUoKSBjb25zdAoreworICAgIC8vIFJhZ25hcm9zIHllbGxzOiBUT08gU09P
TiEgWW91IGhhdmUgYXdha2VuZWQgbWUgVE9PIFNPT04sIEV4ZWN1dHVzIQorICAgIGlmIChDR0lt
YWdlU291cmNlR2V0U3RhdHVzKG1fbmF0aXZlRGVjb2Rlci5nZXQoKSkgPCBrQ0dJbWFnZVN0YXR1
c0luY29tcGxldGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZTBQcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNl
Q29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwgMCwgaW1hZ2VTb3Vy
Y2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIWltYWdlMFByb3BlcnRpZXMpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXko
aW1hZ2UwUHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpCisgICAg
JiYgQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2UwUHJvcGVydGllcy5nZXQoKSwga0NHSW1h
Z2VQcm9wZXJ0eVBpeGVsSGVpZ2h0KTsKK30KKworSW50U2l6ZSBJbWFnZURlY29kZXI6OnNpemUo
KSBjb25zdAoreworICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQorICAgICAgICBtX3NpemUgPSBm
cmFtZVNpemVBdEluZGV4KDAsIDApOworICAgIHJldHVybiBtX3NpemU7Cit9CisKK3NpemVfdCBJ
bWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBDR0ltYWdlU291
cmNlR2V0Q291bnQobV9uYXRpdmVEZWNvZGVyLmdldCgpKTsKK30KKworaW50IEltYWdlRGVjb2Rl
cjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXMobV9u
YXRpdmVEZWNvZGVyLmdldCgpLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlm
ICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKKyAgICAK
KyAgICBDRkRpY3Rpb25hcnlSZWYgZ2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRp
Y3Rpb25hcnkpOworICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7CisgICAgICAgIENGTnVtYmVyUmVm
IG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBr
Q0dJbWFnZVByb3BlcnR5R0lGTG9vcENvdW50KTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vIHBy
b3BlcnR5IG1lYW5zIGxvb3Agb25jZS4KKyAgICAgICAgaWYgKCFudW0pCisgICAgICAgICAgICBy
ZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOworICAgICAgICAKKyAgICAgICAgaW50IGxvb3BDb3Vu
dDsKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZsb29w
Q291bnQpOworICAgICAgICAKKyAgICAgICAgLy8gQSBwcm9wZXJ0eSB3aXRoIHZhbHVlIDAgbWVh
bnMgbG9vcCBmb3JldmVyLgorICAgICAgICByZXR1cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDog
Y0FuaW1hdGlvbkxvb3BJbmZpbml0ZTsKKyAgICB9CisgICAgCisgICAgQ0ZEaWN0aW9uYXJ5UmVm
IHBuZ1Byb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBy
b3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQTkdEaWN0aW9uYXJ5KTsKKyAgICBpZiAo
cG5nUHJvcGVydGllcykgeworICAgICAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYp
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUocG5nUHJvcGVydGllcywgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0
eUFQTkdMb29wQ291bnQpOworICAgICAgICBpZiAoIW51bSkKKyAgICAgICAgICAgIHJldHVybiBj
QW5pbWF0aW9uTG9vcE9uY2U7CisgICAgICAgIAorICAgICAgICBpbnQgbG9vcENvdW50OworICAg
ICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmxvb3BDb3VudCk7
CisgICAgICAgIHJldHVybiBsb29wQ291bnQgPyBsb29wQ291bnQgOiBjQW5pbWF0aW9uTG9vcElu
ZmluaXRlOworICAgIH0KKyAgICAKKyAgICAvLyBUdXJucyBvdXQgd2UncmUgbm90IGFuIGFuaW1h
dGVkIGltYWdlIGFmdGVyIGFsbCwgc28gd2UgZG9uJ3QgYW5pbWF0ZS4KKyAgICByZXR1cm4gY0Fu
aW1hdGlvbk5vbmU7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjpob3RTcG90KEludFBvaW50JiBo
b3RTcG90KSBjb25zdAoreworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRp
ZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVE
ZWNvZGVyLmdldCgpLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICgh
cHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGludCB4ID0gLTEs
IHkgPSAtMTsKKyAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwgQ0ZTVFIoImhvdHNwb3RYIikpOworICAgIGlmICgh
bnVtIHx8ICFDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJngpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlv
bmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIENGU1RSKCJob3RzcG90WSIpKTsKKyAgICBp
ZiAoIW51bSB8fCAhQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ5KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICh4IDwgMCB8fCB5IDwgMCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGhvdFNwb3QgPSBJbnRQb2ludCh4LCB5KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW50U2l6ZSBJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0
SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNv
bnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0
Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIuZ2V0
KCksIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxpbmdMZXZlbCkuZ2V0KCkpKTsK
KyAgICAKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisg
ICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVpZ2h0ID0gMDsKKyAgICBDRk51bWJlclJlZiBu
dW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwg
a0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpOworICAgIGlmIChudW0pCisgICAgICAgIENGTnVt
YmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmd2lkdGgpOworICAgIAorICAgIG51
bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBr
Q0dJbWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQpOworICAgIGlmIChudW0pCisgICAgICAgIENGTnVt
YmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKKyAgICAKKyAgICBy
ZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKK30KKworYm9vbCBJbWFnZURlY29kZXI6OmZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIEFTU0VSVChm
cmFtZUNvdW50KCkpOworICAgIHJldHVybiBDR0ltYWdlU291cmNlR2V0U3RhdHVzQXRJbmRleCht
X25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4KSA9PSBrQ0dJbWFnZVN0YXR1c0NvbXBsZXRlOwor
fQorCitJbWFnZU9yaWVudGF0aW9uIEltYWdlRGVjb2Rlcjo6b3JpZW50YXRpb25BdEluZGV4KHNp
emVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9w
ZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0
aXZlRGVjb2Rlci5nZXQoKSwgaW5kZXgsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7Cisg
ICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOwor
ICAgIAorICAgIHJldHVybiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0
KCkpOworfQorCitmbG9hdCBJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVf
dCBpbmRleCkgY29uc3QKK3sKKyAgICBmbG9hdCBkdXJhdGlvbiA9IDA7CisgICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQ
cm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4LCBpbWFnZVNvdXJj
ZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmIChwcm9wZXJ0aWVzKSB7CisgICAgICAgIENGRGlj
dGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5R0lGRGljdGlvbmFyeSk7
CisgICAgICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJS
ZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGdpZlByb3BlcnRpZXMs
IGtDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1wZWREZWxheVRpbWUpKSB7CisgICAgICAgICAgICAg
ICAgLy8gVXNlIHRoZSB1bmNsYW1wZWQgZnJhbWUgZGVsYXkgaWYgaXQgZXhpc3RzLgorICAgICAg
ICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJh
dGlvbik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJl
clJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5
R0lGRGVsYXlUaW1lKSkgeworICAgICAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgY2xh
bXBlZCBmcmFtZSBkZWxheSBpZiB0aGUgdW5jbGFtcGVkIGZyYW1lIGRlbGF5IGRvZXMgbm90IGV4
aXN0LgorICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9h
dFR5cGUsICZkdXJhdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIENGRGljdGlvbmFyeVJlZiBwbmdQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFyeVJlZilD
RkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UE5H
RGljdGlvbmFyeSk7CisgICAgICAgIGlmIChwbmdQcm9wZXJ0aWVzKSB7CisgICAgICAgICAgICBp
ZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBu
Z1Byb3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HVW5jbGFtcGVkRGVsYXlUaW1l
KSkKKyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxvYXRU
eXBlLCAmZHVyYXRpb24pOworICAgICAgICAgICAgZWxzZSBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0g
KENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVD
R0ltYWdlUHJvcGVydHlBUE5HRGVsYXlUaW1lKSkKKyAgICAgICAgICAgICAgICBDRk51bWJlckdl
dFZhbHVlKG51bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAmZHVyYXRpb24pOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9u
IHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KKyAgICAvLyBX
ZSBmb2xsb3cgRmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAxMDAgbXMg
Zm9yIGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5CisgICAgLy8gYSBkdXJhdGlvbiBvZiA8PSAxMCBt
cy4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0dHA6Ly93ZWJraXQub3JnL2Iv
MzYwODI+CisgICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgaWYgKGR1cmF0aW9uIDwg
MC4wMTFmKQorICAgICAgICByZXR1cm4gMC4xZjsKKyAgICByZXR1cm4gZHVyYXRpb247Cit9CisK
K2Jvb2wgSW1hZ2VEZWNvZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90
KSBjb25zdAoreworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBh
ZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVy
LmdldCgpLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVy
dGllcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIENGRGljdGlvbmFyeVJlZiBq
ZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5
KSk7CisgICAgaWYgKGpmaWZQcm9wZXJ0aWVzKSB7CisgICAgICAgIENGQm9vbGVhblJlZiBpc1By
b2dDRkJvb2wgPSBzdGF0aWNfY2FzdDxDRkJvb2xlYW5SZWY+KENGRGljdGlvbmFyeUdldFZhbHVl
KGpmaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5SkZJRklzUHJvZ3Jlc3NpdmUpKTsKKyAg
ICAgICAgaWYgKGlzUHJvZ0NGQm9vbCkgeworICAgICAgICAgICAgYm9vbCBpc1Byb2dyZXNzaXZl
ID0gQ0ZCb29sZWFuR2V0VmFsdWUoaXNQcm9nQ0ZCb29sKTsKKyAgICAgICAgICAgIC8vIFdvcmth
cm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81MTg0NjU1PiAtIEhhbmcgcmVuZGVyaW5nIHZlcnkg
bGFyZ2UgcHJvZ3Jlc3NpdmUgSlBFRy4gRGVjb2RpbmcgcHJvZ3Jlc3NpdmUKKyAgICAgICAgICAg
IC8vIGltYWdlcyBoYW5ncyBmb3IgYSB2ZXJ5IGxvbmcgdGltZSByaWdodCBub3cuIFVudGlsIHRo
aXMgaXMgZml4ZWQsIGRvbid0IHN1Yi1zYW1wbGUgcHJvZ3Jlc3NpdmUgaW1hZ2VzLiBUaGlzCisg
ICAgICAgICAgICAvLyB3aWxsIGNhdXNlIHRoZW0gdG8gZmFpbCBvdXIgbGFyZ2UgaW1hZ2UgY2hl
Y2sgYW5kIHRoZXkgd29uJ3QgYmUgZGVjb2RlZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1v
dmUgb25jZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGZpeGVkICg8cmRhcjovL3Byb2JsZW0vNTE5MTQx
OD4pCisgICAgICAgICAgICByZXR1cm4gIWlzUHJvZ3Jlc3NpdmU7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUhh
c0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKCFmcmFtZUlzQ29t
cGxldGVBdEluZGV4KGluZGV4KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQ0ZT
dHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNvZGVy
LmdldCgpKTsKKyAgICAKKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhlcmUgaXMgbm8gaW1hZ2Ug
dHlwZSBvciB0aGUgaW1hZ2UgdHlwZSBpcyBKUEVHLCBiZWNhdXNlCisgICAgLy8gSlBFRyBkb2Vz
IG5vdCBzdXBwb3J0IGFscGhhIHRyYW5zcGFyZW5jeS4KKyAgICBpZiAoIWltYWdlVHlwZSB8fCBD
RkVxdWFsKGltYWdlVHlwZSwgQ0ZTVFIoInB1YmxpYy5qcGVnIikpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgLy8gRklYTUU6IENvdWxkIHJldHVybiBmYWxzZSBmb3Igb3RoZXIg
bm9uLXRyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMuCisgICAgLy8gRklYTUU6IENvdWxkIG1heWJl
IHJldHVybiBmYWxzZSBmb3IgYSBHSUYgRnJhbWUgaWYgd2UgaGF2ZSBlbm91Z2ggaW5mbyBpbiB0
aGUgR0lGIHByb3BlcnRpZXMgZGljdGlvbmFyeQorICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVy
IG9yIG5vdCBhIHRyYW5zcGFyZW50IGNvbG9yIHdhcyBkZWZpbmVkLgorICAgIHJldHVybiB0cnVl
OworfQorCit1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBp
bmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAoreworICAgIElu
dFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZl
bCk7CisgICAgcmV0dXJuIGZyYW1lU2l6ZS5hcmVhKCkgKiA0OworfQorCitOYXRpdmVJbWFnZVB0
ciBJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAoreworICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUltYWdlQXRJbmRl
eChtX25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoc3Vic2Ft
cGxpbmdMZXZlbCkuZ2V0KCkpKTsKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzczNzExOTg+IC0gQ29yZUdyYXBoaWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQg
Y2FjaGluZyBiZWhhdmlvdXIgaW4gaU9TIDQuMCB0byBrQ0dJbWFnZUNhY2hpbmdUcmFuc2llbnQK
KyAgICAvLyB3aGljaCBjYXVzZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGZvciB1cyBzaW5j
ZSB0aGUgaW1hZ2VzIGhhZCB0byBiZSByZXNhbXBsZWQvcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2Ug
Y2FsbGVkCisgICAgLy8gQ0dDb250ZXh0RHJhd0ltYWdlLiBXZSBub3cgdGVsbCBDRyB0byBjYWNo
ZSB0aGUgZHJhd24gaW1hZ2VzLiBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0vMTQzNjY3NTU+IC0K
KyAgICAvLyBDb3JlR3JhcGhpY3MgbmVlZHMgdG8gdW4tZGVwcmVjYXRlIGtDR0ltYWdlQ2FjaGlu
Z1RlbXBvcmFyeSBzaW5jZSBpdCdzIHN0aWxsIG5vdCB0aGUgZGVmYXVsdC4KKyNpZiBDT01QSUxF
UihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyNlbmRpZgorICAg
IENHSW1hZ2VTZXRDYWNoaW5nRmxhZ3MoaW1hZ2UuZ2V0KCksIGtDR0ltYWdlQ2FjaGluZ1RlbXBv
cmFyeSk7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9w
CisjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisgICAgCisgICAgQ0ZTdHJpbmdSZWYg
aW1hZ2VVVEkgPSBDR0ltYWdlU291cmNlR2V0VHlwZShtX25hdGl2ZURlY29kZXIuZ2V0KCkpOwor
ICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiB4Ym1VVEkgPSBDRlNUUigicHVibGljLnhiaXRt
YXAtaW1hZ2UiKTsKKyAgICAKKyAgICBpZiAoIWltYWdlVVRJKQorICAgICAgICByZXR1cm4gaW1h
Z2U7CisgICAgCisgICAgaWYgKCFDRkVxdWFsKGltYWdlVVRJLCB4Ym1VVEkpKQorICAgICAgICBy
ZXR1cm4gaW1hZ2U7CisgICAgCisgICAgLy8gSWYgaXQgaXMgYW4geGJtIGltYWdlLCBtYXNrIG91
dCBhbGwgdGhlIHdoaXRlIGFyZWFzIHRvIHJlbmRlciB0aGVtIHRyYW5zcGFyZW50LgorICAgIGNv
bnN0IENHRmxvYXQgbWFza2luZ0NvbG9yc1s2XSA9IHsyNTUsIDI1NSwgIDI1NSwgMjU1LCAyNTUs
IDI1NX07CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1hc2tlZEltYWdlID0gYWRvcHRDRihD
R0ltYWdlQ3JlYXRlV2l0aE1hc2tpbmdDb2xvcnMoaW1hZ2UuZ2V0KCksIG1hc2tpbmdDb2xvcnMp
KTsKKyAgICByZXR1cm4gbWFza2VkSW1hZ2UgPyBtYXNrZWRJbWFnZSA6IGltYWdlOworfQorCit2
b2lkIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShDRkRhdGFSZWYgZGF0YSwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpCit7CisgICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURhdGEobV9uYXRpdmVEZWNvZGVyLmdl
dCgpLCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit2b2lkIEltYWdlRGVjb2Rlcjo6c2V0
RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworI2lmIFBM
QVRGT1JNKENPQ09BKQorICAgIC8vIE9uIE1hYyB0aGUgTlNEYXRhIGluc2lkZSB0aGUgU2hhcmVk
QnVmZmVyIGNhbiBiZSBzZWNyZXRseSBhcHBlbmRlZCB0byB3aXRob3V0IHRoZSBTaGFyZWRCdWZm
ZXIncyBrbm93bGVkZ2UuCisgICAgLy8gV2UgdXNlIFNoYXJlZEJ1ZmZlcidzIGFiaWxpdHkgdG8g
d3JhcCBpdHNlbGYgaW5zaWRlIENGRGF0YSB0byBnZXQgYXJvdW5kIHRoaXMsIGVuc3VyaW5nIHRo
YXQgSW1hZ2VJTyBpcworICAgIC8vIHJlYWxseSBsb29raW5nIGF0IHRoZSBTaGFyZWRCdWZmZXIu
CisgICAgc2V0RGF0YShkYXRhLT5jcmVhdGVDRkRhdGEoKS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVk
KTsKKyAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YShtX25hdGl2ZURlY29kZXIuZ2V0KCksIGRh
dGEtPmNyZWF0ZUNGRGF0YSgpLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworI2Vsc2UKKyAgICAv
LyBDcmVhdGUgYSBDR0RhdGFQcm92aWRlciB0byB3cmFwIHRoZSBTaGFyZWRCdWZmZXIuCisgICAg
ZGF0YS0+cmVmKCk7CisgICAgLy8gV2UgdXNlIHRoZSBHZXRCeXRlc0F0UG9zaXRpb24gY2FsbGJh
Y2sgcmF0aGVyIHRoYW4gdGhlIEdldEJ5dGVQb2ludGVyIG9uZSBiZWNhdXNlIFNoYXJlZEJ1ZmZl
cgorICAgIC8vIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gbG9jayBkb3duIHRoZSBieXRlIHBv
aW50ZXIgYW5kIGd1YXJhbnRlZSB0aGF0IGl0IHdvbid0IG1vdmUsIHdoaWNoCisgICAgLy8gaXMg
YSByZXF1aXJlbWVudCBmb3IgdXNpbmcgdGhlIEdldEJ5dGVQb2ludGVyIGNhbGxiYWNrLgorICAg
IENHRGF0YVByb3ZpZGVyRGlyZWN0Q2FsbGJhY2tzIHByb3ZpZGVyQ2FsbGJhY2tzID0geyAwLCAw
LCAwLCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24sIHNoYXJlZEJ1ZmZlclJlbGVhc2Ug
fTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IGFkb3B0
Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVEaXJlY3QoZGF0YSwgZGF0YS0+c2l6ZSgpLCAmcHJvdmlk
ZXJDYWxsYmFja3MpKTsKKyAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YVByb3ZpZGVyKG1fbmF0
aXZlRGVjb2Rlci5nZXQoKSwgZGF0YVByb3ZpZGVyLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwor
I2VuZGlmCit9CisKK30KKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhj
NmE5ZTIyNzgwNDNmYTVhYzcyMTI2MTdmMWUwOTMxNDcxZmQ0YjQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5oCkBA
IC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEltYWdlRGVjb2RlckNHX2gKKyNkZWZpbmUgSW1hZ2VEZWNvZGVyQ0dfaAor
CisjaW5jbHVkZSAiSW1hZ2VTb3VyY2VDRy5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZURlY29kZXIgeworcHVibGljOgorICAgIElt
YWdlRGVjb2RlcigpOworICAgIAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNv
ZGVyPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SW1h
Z2VEZWNvZGVyPigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGJ5dGVzRGVjb2Rl
ZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpOworICAgIHN0YXRpYyBTdWJzYW1wbGluZ0xldmVsIHN1
YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxpbmdMZXZlbCBtYXhp
bXVtU3Vic2FtcGxpbmdMZXZlbCk7CisgICAgCisgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9u
KCkgY29uc3Q7CisgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKKyAgICAKKyAgICAv
LyBBbHdheXMgb3JpZ2luYWwgc2l6ZSwgd2l0aG91dCBzdWJzYW1wbGluZy4KKyAgICBJbnRTaXpl
IHNpemUoKSBjb25zdDsKKyAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0OworICAgIGludCBy
ZXBldGl0aW9uQ291bnQoKSBjb25zdDsKKyAgICBib29sIGhvdFNwb3QoSW50UG9pbnQmIGhvdFNw
b3QpIGNvbnN0OworICAgIAorICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1
YnNhbXBsaW5nTGV2ZWwpIGNvbnN0OworICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChz
aXplX3QpIGNvbnN0OworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25BdEluZGV4KHNp
emVfdCkgY29uc3Q7CisgICAgCisgICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90
KSBjb25zdDsKKyAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCkgY29uc3Q7Cisg
ICAgYm9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAg
ICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAw
KSBjb25zdDsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRl
eChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0OworICAgIAorICAgIHZvaWQgc2V0RGF0
YShDRkRhdGFSZWYsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICB2b2lkIHNldERhdGEoU2hh
cmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIAorcHJvdGVjdGVkOgorICAg
IG11dGFibGUgSW50U2l6ZSBtX3NpemU7CisgICAgUmV0YWluUHRyPENHSW1hZ2VTb3VyY2VSZWY+
IG1fbmF0aXZlRGVjb2RlcjsKK307CisKK30KKworI2VuZGlmIC8vIEltYWdlRGVjb2RlckNHX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291
cmNlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3Vy
Y2VDRy5jcHAKaW5kZXggMzYyNjgwMDBjMjVmMjBhMTk0ZDY5MjI1MWVhZWZlYWRhMzM3ZjhjMy4u
MmMwYTg4NjM0MDlmMTJiZDY5Yzg4YWExYTY2NzU0MzA4NzcxNzhiNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKQEAg
LTI5LDQyNiArMjksMTIgQEAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2VDRy5o
IgogCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVy
Q0cuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiSW50UG9pbnQu
aCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgog
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotCi0jaWYgIVBMQVRGT1JNKElPUykKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0Fw
cGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbHNlCi0jaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2VuZGlmCi0KLSNpZiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQotI2ltcG9ydCA8SW1hZ2VJTy9DR0ltYWdlU291cmNlUHJpdmF0ZS5oPgotI2Vs
c2UKLWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yID0gQ0ZT
VFIoImtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yIik7Ci0jZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIAotY2xhc3MgSW1hZ2VEZWNvZGVyIHsKLXB1YmxpYzoKLSAgICBJbWFn
ZURlY29kZXIoKTsKLSAgICAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rl
cj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEltYWdl
RGVjb2Rlcj4oKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGJ5dGVzRGVjb2RlZFRvRGV0
ZXJtaW5lUHJvcGVydGllcygpOwotICAgIHN0YXRpYyBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBs
aW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxpbmdMZXZlbCBtYXhpbXVtU3Vi
c2FtcGxpbmdMZXZlbCk7Ci0KLSAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsK
LSAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0OwotICAgIAotICAgIC8vIEFsd2F5cyBv
cmlnaW5hbCBzaXplLCB3aXRob3V0IHN1YnNhbXBsaW5nLgotICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0OwotICAgIHNpemVfdCBmcmFtZUNvdW50KCkgY29uc3Q7Ci0gICAgaW50IHJlcGV0aXRpb25D
b3VudCgpIGNvbnN0OwotICAgIGJvb2wgaG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3Q7
Ci0KLSAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVs
KSBjb25zdDsKLSAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsK
LSAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0Owot
Ci0gICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdDsKLSAgICBib29s
IGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCkgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd1N1YnNh
bXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKLSAgICB1bnNpZ25lZCBmcmFtZUJ5
dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKSBjb25zdDsKLQotICAgIE5h
dGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdM
ZXZlbCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldERhdGEoQ0ZEYXRhUmVmLCBib29sIGFsbERhdGFS
ZWNlaXZlZCk7Ci0gICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciosIGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKTsKLQotcHJvdGVjdGVkOgotICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemU7Ci0gICAg
UmV0YWluUHRyPENHSW1hZ2VTb3VyY2VSZWY+IG1fbmF0aXZlRGVjb2RlcjsKLX07Ci0KLWNvbnN0
IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HVW5jbGFtcGVkRGVsYXlUaW1l
ID0gQ0ZTVFIoIlVuY2xhbXBlZERlbGF5VGltZSIpOwotY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29y
ZUNHSW1hZ2VQcm9wZXJ0eUFQTkdEZWxheVRpbWUgPSBDRlNUUigiRGVsYXlUaW1lIik7Ci1jb25z
dCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0xvb3BDb3VudCA9IENGU1RS
KCJMb29wQ291bnQiKTsKLQotY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTaG91bGRQ
cmVmZXJSR0IzMiA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyIik7Ci1j
b25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSA9IENGU1RSKCJrQ0dJ
bWFnZVNvdXJjZVNraXBNZXRhZGF0YSIpOwotCi1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gY3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxp
bmdMZXZlbCkKLXsKLSAgICBpZiAoIXN1YnNhbXBsaW5nTGV2ZWwpIHsKLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgbnVtT3B0aW9ucyA9IDM7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGtleXNbbnVtT3B0
aW9uc10gPSB7IGtDR0ltYWdlU291cmNlU2hvdWxkQ2FjaGUsIGtDR0ltYWdlU291cmNlU2hvdWxk
UHJlZmVyUkdCMzIsIGtDR0ltYWdlU291cmNlU2tpcE1ldGFkYXRhIH07Ci0gICAgICAgIGNvbnN0
IHZvaWQqIHZhbHVlc1tudW1PcHRpb25zXSA9IHsga0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5U
cnVlLCBrQ0ZCb29sZWFuVHJ1ZSB9OwotICAgICAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KG51bGxwdHIsIGtleXMsIHZhbHVlcywgbnVtT3B0aW9ucywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7Ci0gICAgfQotCi0g
ICAgc2hvcnQgY29uc3RyYWluZWRTdWJzYW1wbGluZ0xldmVsID0gc3RkOjptaW48c2hvcnQ+KDMs
IHN0ZDo6bWF4PHNob3J0PigwLCBzdWJzYW1wbGluZ0xldmVsKSk7Ci0gICAgaW50IHN1YnNhbXBs
ZUludCA9IDEgPDwgY29uc3RyYWluZWRTdWJzYW1wbGluZ0xldmVsOyAvLyBbMC4uM10gPT4gWzEs
IDIsIDQsIDhdCi0KLSAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHN1YnNhbXBsZU51bWJlciA9
IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmc3Vi
c2FtcGxlSW50KSk7Ci0gICAgY29uc3QgQ0ZJbmRleCBudW1PcHRpb25zID0gNDsKLSAgICBjb25z
dCB2b2lkKiBrZXlzW251bU9wdGlvbnNdID0geyBrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hlLCBr
Q0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0
YSwga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3IgfTsKLSAgICBjb25zdCB2b2lkKiB2YWx1
ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9v
bGVhblRydWUsIHN1YnNhbXBsZU51bWJlci5nZXQoKSB9OwotICAgIHJldHVybiBhZG9wdENGKENG
RGljdGlvbmFyeUNyZWF0ZShudWxscHRyLCBrZXlzLCB2YWx1ZXMsIG51bU9wdGlvbnMsICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlU291cmNl
T3B0aW9ucyhTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSAwKQotewotICAgIGlm
IChzdWJzYW1wbGluZ0xldmVsKQotICAgICAgICByZXR1cm4gY3JlYXRlSW1hZ2VTb3VyY2VPcHRp
b25zKHN1YnNhbXBsaW5nTGV2ZWwpOwotCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+PiBvcHRpb25zID0gY3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25z
KDApOwotICAgIHJldHVybiBvcHRpb25zOwotfQotCi1zdGF0aWMgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKENGRGljdGlvbmFyeVJlZiBpbWFnZVByb3BlcnRpZXMp
Ci17Ci0gICAgQVNTRVJUKGltYWdlUHJvcGVydGllcyk7Ci0gICAgQ0ZOdW1iZXJSZWYgb3JpZW50
YXRpb25Qcm9wZXJ0eSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShpbWFnZVBy
b3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlPcmllbnRhdGlvbik7Ci0gICAgaWYgKCFvcmllbnRh
dGlvblByb3BlcnR5KQotICAgICAgICByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOwotCi0gICAg
aW50IGV4aWZWYWx1ZTsKLSAgICBDRk51bWJlckdldFZhbHVlKG9yaWVudGF0aW9uUHJvcGVydHks
IGtDRk51bWJlckludFR5cGUsICZleGlmVmFsdWUpOwotICAgIHJldHVybiBJbWFnZU9yaWVudGF0
aW9uOjpmcm9tRVhJRlZhbHVlKGV4aWZWYWx1ZSk7Ci19Ci0KLSNpZiAhUExBVEZPUk0oQ09DT0Ep
Ci1zaXplX3Qgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKHZvaWQqIGluZm8sIHZvaWQq
IGJ1ZmZlciwgb2ZmX3QgcG9zaXRpb24sIHNpemVfdCBjb3VudCkKLXsKLSAgICBTaGFyZWRCdWZm
ZXIqIHNoYXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOwotICAg
IHNpemVfdCBzb3VyY2VTaXplID0gc2hhcmVkQnVmZmVyLT5zaXplKCk7Ci0gICAgaWYgKHBvc2l0
aW9uID49IHNvdXJjZVNpemUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgY29uc3QgY2hhciog
c291cmNlID0gc2hhcmVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbjsKLSAgICBzaXplX3QgYW1v
dW50ID0gc3RkOjptaW48c2l6ZV90Pihjb3VudCwgc291cmNlU2l6ZSAtIHBvc2l0aW9uKTsKLSAg
ICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7Ci0gICAgcmV0dXJuIGFtb3VudDsKLX0K
LQotdm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGluZm8pCi17Ci0gICAgU2hhcmVkQnVm
ZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihpbmZvKTsKLSAg
ICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7Ci19Ci0jZW5kaWYKLSAgICAKLUltYWdlRGVjb2Rlcjo6
SW1hZ2VEZWNvZGVyKCkKLXsKLSAgICBtX25hdGl2ZURlY29kZXIgPSBhZG9wdENGKENHSW1hZ2VT
b3VyY2VDcmVhdGVJbmNyZW1lbnRhbChudWxscHRyKSk7Ci19Ci0gICAgCi1TdWJzYW1wbGluZ0xl
dmVsIEltYWdlRGVjb2Rlcjo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKGZsb2F0IHNjYWxlLCBT
dWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJzYW1wbGluZ0xldmVsKQotewotICAgIC8vIFRoZXJl
IGFyZSBmb3VyIHN1YnNhbXBsaW5nIGxldmVsczogMCA9IDF4LCAxID0gMC41eCwgMiA9IDAuMjV4
LCAzID0gMC4xMjV4LgotICAgIGZsb2F0IGNsYW1wZWRTY2FsZSA9IHN0ZDo6bWF4PGZsb2F0Pigw
LjEyNSwgc3RkOjptaW48ZmxvYXQ+KDEsIHNjYWxlKSk7Ci0gICAgU3Vic2FtcGxpbmdMZXZlbCBy
ZXN1bHQgPSBjZWlsZihsb2cyZigxIC8gY2xhbXBlZFNjYWxlKSk7Ci0gICAgQVNTRVJUKHJlc3Vs
dCA+PTAgJiYgcmVzdWx0IDw9IDMpOwotICAgIHJldHVybiBzdGQ6Om1pbihyZXN1bHQsIG1heGlt
dW1TdWJzYW1wbGluZ0xldmVsKTsKLX0KLQotc2l6ZV90IEltYWdlRGVjb2Rlcjo6Ynl0ZXNEZWNv
ZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkKLXsKLSAgICAvLyBNZWFzdXJlZCBieSB0cmFjaW5n
IG1hbGxvYy9jYWxsb2MgY2FsbHMgb24gTWFjIE9TIDEwLjYuNiwgeDg2XzY0LgotICAgIC8vIEEg
bm9uLXplcm8gdmFsdWUgZW5zdXJlcyBjYWNoZWQgaW1hZ2VzIHdpdGggbm8gZGVjb2RlZCBmcmFt
ZXMgc3RpbGwgZW50ZXIKLSAgICAvLyB0aGUgbGl2ZSBkZWNvZGVkIHJlc291cmNlcyBsaXN0IHdo
ZW4gdGhlIENHSW1hZ2VTb3VyY2UgZGVjb2RlcyBpbWFnZQotICAgIC8vIHByb3BlcnRpZXMsIGFs
bG93aW5nIHRoZSBjYWNoZSB0byBwcnVuZSB0aGUgcGFydGlhbGx5IGRlY29kZWQgaW1hZ2UuCi0g
ICAgLy8gVGhpcyB2YWx1ZSBpcyBsaWtlbHkgdG8gYmUgaW5hY2N1cmF0ZSBvbiBvdGhlciBwbGF0
Zm9ybXMsIGJ1dCB0aGUgb3ZlcmFsbAotICAgIC8vIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC4KLSAg
ICByZXR1cm4gMTMwODg7Ci19Ci0gICAgCi1TdHJpbmcgSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4
dGVuc2lvbigpIGNvbnN0Ci17Ci0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VTb3VyY2VUeXBlID0gQ0dJ
bWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNvZGVyLmdldCgpKTsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6cHJlZmVycmVkRXh0ZW5zaW9uRm9ySW1hZ2VTb3VyY2VUeXBlKGltYWdlU291cmNlVHlw
ZSk7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAotewot
ICAgIC8vIFJhZ25hcm9zIHllbGxzOiBUT08gU09PTiEgWW91IGhhdmUgYXdha2VuZWQgbWUgVE9P
IFNPT04sIEV4ZWN1dHVzIQotICAgIGlmIChDR0ltYWdlU291cmNlR2V0U3RhdHVzKG1fbmF0aXZl
RGVjb2Rlci5nZXQoKSkgPCBrQ0dJbWFnZVN0YXR1c0luY29tcGxldGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlMFByb3BlcnRp
ZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVE
ZWNvZGVyLmdldCgpLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICgh
aW1hZ2UwUHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIENG
RGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJv
cGVydHlQaXhlbFdpZHRoKQotICAgICAgICAmJiBDRkRpY3Rpb25hcnlDb250YWluc0tleShpbWFn
ZTBQcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQpOwotfQotCi1J
bnRTaXplIEltYWdlRGVjb2Rlcjo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc2l6ZS5pc0Vt
cHR5KCkpCi0gICAgICAgIG1fc2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoMCwgMCk7Ci0gICAgcmV0
dXJuIG1fc2l6ZTsKLX0KLQotc2l6ZV90IEltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIENHSW1hZ2VTb3VyY2VHZXRDb3VudChtX25hdGl2ZURlY29kZXIuZ2V0
KCkpOwotfQotCi1pbnQgSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAotewot
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1h
Z2VTb3VyY2VDb3B5UHJvcGVydGllcyhtX25hdGl2ZURlY29kZXIuZ2V0KCksIGltYWdlU291cmNl
T3B0aW9ucygpLmdldCgpKSk7Ci0gICAgaWYgKCFwcm9wZXJ0aWVzKQotICAgICAgICByZXR1cm4g
Y0FuaW1hdGlvbkxvb3BPbmNlOwotCi0gICAgQ0ZEaWN0aW9uYXJ5UmVmIGdpZlByb3BlcnRpZXMg
PSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCks
IGtDR0ltYWdlUHJvcGVydHlHSUZEaWN0aW9uYXJ5KTsKLSAgICBpZiAoZ2lmUHJvcGVydGllcykg
ewotICAgICAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUoZ2lmUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eUdJRkxvb3BDb3VudCk7Ci0KLSAg
ICAgICAgLy8gTm8gcHJvcGVydHkgbWVhbnMgbG9vcCBvbmNlLgotICAgICAgICBpZiAoIW51bSkK
LSAgICAgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7Ci0KLSAgICAgICAgaW50IGxv
b3BDb3VudDsKLSAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUs
ICZsb29wQ291bnQpOwotCi0gICAgICAgIC8vIEEgcHJvcGVydHkgd2l0aCB2YWx1ZSAwIG1lYW5z
IGxvb3AgZm9yZXZlci4KLSAgICAgICAgcmV0dXJuIGxvb3BDb3VudCA/IGxvb3BDb3VudCA6IGNB
bmltYXRpb25Mb29wSW5maW5pdGU7Ci0gICAgfQotCi0gICAgQ0ZEaWN0aW9uYXJ5UmVmIHBuZ1By
b3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRp
ZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQTkdEaWN0aW9uYXJ5KTsKLSAgICBpZiAocG5nUHJv
cGVydGllcykgewotICAgICAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUocG5nUHJvcGVydGllcywgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdM
b29wQ291bnQpOwotICAgICAgICBpZiAoIW51bSkKLSAgICAgICAgICAgIHJldHVybiBjQW5pbWF0
aW9uTG9vcE9uY2U7Ci0KLSAgICAgICAgaW50IGxvb3BDb3VudDsKLSAgICAgICAgQ0ZOdW1iZXJH
ZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZsb29wQ291bnQpOwotICAgICAgICByZXR1
cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJbmZpbml0ZTsKLSAgICB9
Ci0KLSAgICAvLyBUdXJucyBvdXQgd2UncmUgbm90IGFuIGFuaW1hdGVkIGltYWdlIGFmdGVyIGFs
bCwgc28gd2UgZG9uJ3QgYW5pbWF0ZS4KLSAgICByZXR1cm4gY0FuaW1hdGlvbk5vbmU7Ci19Ci0K
LWJvb2wgSW1hZ2VEZWNvZGVyOjpob3RTcG90KEludFBvaW50JiBob3RTcG90KSBjb25zdAotewot
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1h
Z2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCAwLCBp
bWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IHggPSAtMSwgeSA9IC0xOwotICAgIENGTnVtYmVy
UmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdl
dCgpLCBDRlNUUigiaG90c3BvdFgiKSk7Ci0gICAgaWYgKCFudW0gfHwgIUNGTnVtYmVyR2V0VmFs
dWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdl
dCgpLCBDRlNUUigiaG90c3BvdFkiKSk7Ci0gICAgaWYgKCFudW0gfHwgIUNGTnVtYmVyR2V0VmFs
dWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICh4IDwgMCB8fCB5IDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaG90
U3BvdCA9IEludFBvaW50KHgsIHkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1JbnRTaXplIElt
YWdlRGVjb2Rlcjo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2
ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdElu
ZGV4KG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwgaW5kZXgsIGltYWdlU291cmNlT3B0aW9ucyhzdWJz
YW1wbGluZ0xldmVsKS5nZXQoKSkpOwotCi0gICAgaWYgKCFwcm9wZXJ0aWVzKQotICAgICAgICBy
ZXR1cm4geyB9OwotCi0gICAgaW50IHdpZHRoID0gMDsKLSAgICBpbnQgaGVpZ2h0ID0gMDsKLSAg
ICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJv
cGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpOwotICAgIGlmIChudW0p
Ci0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmd2lkdGgp
OwotCi0gICAgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRp
ZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbEhlaWdodCk7Ci0gICAgaWYgKG51bSkKLSAg
ICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZoZWlnaHQpOwot
Ci0gICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNv
ZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAgICBB
U1NFUlQoZnJhbWVDb3VudCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldFN0YXR1c0F0
SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbmRleCkgPT0ga0NHSW1hZ2VTdGF0dXNDb21w
bGV0ZTsKLX0KLQotSW1hZ2VPcmllbnRhdGlvbiBJbWFnZURlY29kZXI6Om9yaWVudGF0aW9uQXRJ
bmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRl
eChtX25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQo
KSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIEltYWdlT3JpZW50YXRp
b24oKTsKLQotICAgIHJldHVybiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMu
Z2V0KCkpOwotfQotCi1mbG9hdCBJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNp
emVfdCBpbmRleCkgY29uc3QKLXsKLSAgICBmbG9hdCBkdXJhdGlvbiA9IDA7Ci0gICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNv
cHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4LCBpbWFnZVNv
dXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmIChwcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENG
RGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25h
cnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5R0lGRGljdGlvbmFy
eSk7Ci0gICAgICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICBpZiAoQ0ZOdW1i
ZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGdpZlByb3BlcnRp
ZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1wZWREZWxheVRpbWUpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVXNlIHRoZSB1bmNsYW1wZWQgZnJhbWUgZGVsYXkgaWYgaXQgZXhpc3RzLgotICAg
ICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZk
dXJhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51
bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3Bl
cnR5R0lGRGVsYXlUaW1lKSkgewotICAgICAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUg
Y2xhbXBlZCBmcmFtZSBkZWxheSBpZiB0aGUgdW5jbGFtcGVkIGZyYW1lIGRlbGF5IGRvZXMgbm90
IGV4aXN0LgotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJG
bG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBDRkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBOR0RpY3Rp
b25hcnkpOwotICAgICAgICBpZiAocG5nUHJvcGVydGllcykgewotICAgICAgICAgICAgaWYgKENG
TnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9w
ZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBlZERlbGF5VGltZSkpCi0g
ICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwg
JmR1cmF0aW9uKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51
bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFn
ZVByb3BlcnR5QVBOR0RlbGF5VGltZSkpCi0gICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1
ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2Ug
YW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KLSAgICAvLyBXZSBmb2xsb3cg
RmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAxMDAgbXMgZm9yIGFueSBm
cmFtZXMgdGhhdCBzcGVjaWZ5Ci0gICAgLy8gYSBkdXJhdGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxy
ZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzYwODI+Ci0g
ICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgaWYgKGR1cmF0aW9uIDwgMC4wMTFmKQot
ICAgICAgICByZXR1cm4gMC4xZjsKLSAgICByZXR1cm4gZHVyYXRpb247Ci19Ci0KLWJvb2wgSW1h
Z2VEZWNvZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdAot
ewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENH
SW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCAw
LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ0ZEaWN0aW9uYXJ5UmVmIGpmaWZQcm9wZXJ0aWVz
ID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9w
ZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5SkZJRkRpY3Rpb25hcnkpKTsKLSAgICBpZiAo
amZpZlByb3BlcnRpZXMpIHsKLSAgICAgICAgQ0ZCb29sZWFuUmVmIGlzUHJvZ0NGQm9vbCA9IHN0
YXRpY19jYXN0PENGQm9vbGVhblJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoamZpZlByb3BlcnRp
ZXMsIGtDR0ltYWdlUHJvcGVydHlKRklGSXNQcm9ncmVzc2l2ZSkpOwotICAgICAgICBpZiAoaXNQ
cm9nQ0ZCb29sKSB7Ci0gICAgICAgICAgICBib29sIGlzUHJvZ3Jlc3NpdmUgPSBDRkJvb2xlYW5H
ZXRWYWx1ZShpc1Byb2dDRkJvb2wpOwotICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJk
YXI6Ly9wcm9ibGVtLzUxODQ2NTU+IC0gSGFuZyByZW5kZXJpbmcgdmVyeSBsYXJnZSBwcm9ncmVz
c2l2ZSBKUEVHLiBEZWNvZGluZyBwcm9ncmVzc2l2ZQotICAgICAgICAgICAgLy8gaW1hZ2VzIGhh
bmdzIGZvciBhIHZlcnkgbG9uZyB0aW1lIHJpZ2h0IG5vdy4gVW50aWwgdGhpcyBpcyBmaXhlZCwg
ZG9uJ3Qgc3ViLXNhbXBsZSBwcm9ncmVzc2l2ZSBpbWFnZXMuIFRoaXMKLSAgICAgICAgICAgIC8v
IHdpbGwgY2F1c2UgdGhlbSB0byBmYWlsIG91ciBsYXJnZSBpbWFnZSBjaGVjayBhbmQgdGhleSB3
b24ndCBiZSBkZWNvZGVkLgotICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIHVuZGVy
bHlpbmcgaXNzdWUgaXMgZml4ZWQgKDxyZGFyOi8vcHJvYmxlbS81MTkxNDE4PikKLSAgICAgICAg
ICAgIHJldHVybiAhaXNQcm9ncmVzc2l2ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6
ZV90IGluZGV4KSBjb25zdAotewotICAgIGlmICghZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRl
eCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VUeXBlID0g
Q0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNvZGVyLmdldCgpKTsKLQotICAgIC8vIFJl
dHVybiBmYWxzZSBpZiB0aGVyZSBpcyBubyBpbWFnZSB0eXBlIG9yIHRoZSBpbWFnZSB0eXBlIGlz
IEpQRUcsIGJlY2F1c2UKLSAgICAvLyBKUEVHIGRvZXMgbm90IHN1cHBvcnQgYWxwaGEgdHJhbnNw
YXJlbmN5LgotICAgIGlmICghaW1hZ2VUeXBlIHx8IENGRXF1YWwoaW1hZ2VUeXBlLCBDRlNUUigi
cHVibGljLmpwZWciKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBD
b3VsZCByZXR1cm4gZmFsc2UgZm9yIG90aGVyIG5vbi10cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRz
LgotICAgIC8vIEZJWE1FOiBDb3VsZCBtYXliZSByZXR1cm4gZmFsc2UgZm9yIGEgR0lGIEZyYW1l
IGlmIHdlIGhhdmUgZW5vdWdoIGluZm8gaW4gdGhlIEdJRiBwcm9wZXJ0aWVzIGRpY3Rpb25hcnkK
LSAgICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSB0cmFuc3BhcmVudCBjb2xvciB3
YXMgZGVmaW5lZC4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQgSW1hZ2VEZWNvZGVy
OjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2Ft
cGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IGZyYW1lU2l6ZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwotICAgIHJldHVybiBmcmFtZVNpemUuYXJl
YSgpICogNDsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZl
bCkgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENH
SW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbmRl
eCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7Ci0KLSNpZiBQ
TEFURk9STShJT1MpCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzExOTg+IC0gQ29yZUdyYXBo
aWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIgaW4gaU9TIDQuMCB0byBr
Q0dJbWFnZUNhY2hpbmdUcmFuc2llbnQKLSAgICAvLyB3aGljaCBjYXVzZWQgYSBwZXJmb3JtYW5j
ZSByZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0byBiZSByZXNhbXBsZWQv
cmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCi0gICAgLy8gQ0dDb250ZXh0RHJhd0ltYWdl
LiBXZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2VzLiBTZWUgYWxzbyA8cmRh
cjovL3Byb2JsZW0vMTQzNjY3NTU+IC0KLSAgICAvLyBDb3JlR3JhcGhpY3MgbmVlZHMgdG8gdW4t
ZGVwcmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5jZSBpdCdzIHN0aWxsIG5vdCB0
aGUgZGVmYXVsdC4KLSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRl
Y2xhcmF0aW9ucyIKLSNlbmRpZgotICAgICAgICBDR0ltYWdlU2V0Q2FjaGluZ0ZsYWdzKGltYWdl
LmdldCgpLCBrQ0dJbWFnZUNhY2hpbmdUZW1wb3JhcnkpOwotI2lmIENPTVBJTEVSKENMQU5HKQot
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotI2VuZGlmCi0jZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQotCi0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VVVEkgPSBDR0ltYWdlU291cmNlR2V0VHlwZSht
X25hdGl2ZURlY29kZXIuZ2V0KCkpOwotICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiB4Ym1V
VEkgPSBDRlNUUigicHVibGljLnhiaXRtYXAtaW1hZ2UiKTsKLQotICAgIGlmICghaW1hZ2VVVEkp
Ci0gICAgICAgIHJldHVybiBpbWFnZTsKLQotICAgIGlmICghQ0ZFcXVhbChpbWFnZVVUSSwgeGJt
VVRJKSkKLSAgICAgICAgcmV0dXJuIGltYWdlOwotCi0gICAgLy8gSWYgaXQgaXMgYW4geGJtIGlt
YWdlLCBtYXNrIG91dCBhbGwgdGhlIHdoaXRlIGFyZWFzIHRvIHJlbmRlciB0aGVtIHRyYW5zcGFy
ZW50LgotICAgIGNvbnN0IENHRmxvYXQgbWFza2luZ0NvbG9yc1s2XSA9IHsyNTUsIDI1NSwgIDI1
NSwgMjU1LCAyNTUsIDI1NX07Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1hc2tlZEltYWdl
ID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aE1hc2tpbmdDb2xvcnMoaW1hZ2UuZ2V0KCksIG1h
c2tpbmdDb2xvcnMpKTsKLSAgICByZXR1cm4gbWFza2VkSW1hZ2UgPyBtYXNrZWRJbWFnZSA6IGlt
YWdlOwotfQotCi12b2lkIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShDRkRhdGFSZWYgZGF0YSwgYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURhdGEobV9uYXRp
dmVEZWNvZGVyLmdldCgpLCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotfQotCi12b2lkIEltYWdl
RGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVk
KQotewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIC8vIE9uIE1hYyB0aGUgTlNEYXRhIGluc2lk
ZSB0aGUgU2hhcmVkQnVmZmVyIGNhbiBiZSBzZWNyZXRseSBhcHBlbmRlZCB0byB3aXRob3V0IHRo
ZSBTaGFyZWRCdWZmZXIncyBrbm93bGVkZ2UuCi0gICAgLy8gV2UgdXNlIFNoYXJlZEJ1ZmZlcidz
IGFiaWxpdHkgdG8gd3JhcCBpdHNlbGYgaW5zaWRlIENGRGF0YSB0byBnZXQgYXJvdW5kIHRoaXMs
IGVuc3VyaW5nIHRoYXQgSW1hZ2VJTyBpcwotICAgIC8vIHJlYWxseSBsb29raW5nIGF0IHRoZSBT
aGFyZWRCdWZmZXIuCi0gICAgc2V0RGF0YShkYXRhLT5jcmVhdGVDRkRhdGEoKS5nZXQoKSwgYWxs
RGF0YVJlY2VpdmVkKTsKLSAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YShtX25hdGl2ZURlY29k
ZXIuZ2V0KCksIGRhdGEtPmNyZWF0ZUNGRGF0YSgpLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwot
I2Vsc2UKLSAgICAvLyBDcmVhdGUgYSBDR0RhdGFQcm92aWRlciB0byB3cmFwIHRoZSBTaGFyZWRC
dWZmZXIuCi0gICAgZGF0YS0+cmVmKCk7Ci0gICAgLy8gV2UgdXNlIHRoZSBHZXRCeXRlc0F0UG9z
aXRpb24gY2FsbGJhY2sgcmF0aGVyIHRoYW4gdGhlIEdldEJ5dGVQb2ludGVyIG9uZSBiZWNhdXNl
IFNoYXJlZEJ1ZmZlcgotICAgIC8vIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gbG9jayBkb3du
IHRoZSBieXRlIHBvaW50ZXIgYW5kIGd1YXJhbnRlZSB0aGF0IGl0IHdvbid0IG1vdmUsIHdoaWNo
Ci0gICAgLy8gaXMgYSByZXF1aXJlbWVudCBmb3IgdXNpbmcgdGhlIEdldEJ5dGVQb2ludGVyIGNh
bGxiYWNrLgotICAgIENHRGF0YVByb3ZpZGVyRGlyZWN0Q2FsbGJhY2tzIHByb3ZpZGVyQ2FsbGJh
Y2tzID0geyAwLCAwLCAwLCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24sIHNoYXJlZEJ1
ZmZlclJlbGVhc2UgfTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92
aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVEaXJlY3QoZGF0YSwgZGF0YS0+c2l6
ZSgpLCAmcHJvdmlkZXJDYWxsYmFja3MpKTsKLSAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YVBy
b3ZpZGVyKG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwgZGF0YVByb3ZpZGVyLmdldCgpLCBhbGxEYXRh
UmVjZWl2ZWQpOwotI2VuZGlmCi19Ci0KIEltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNv
dXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bikKIHsKICAgICAvLyBGSVhNRTogQWxwaGFPcHRpb24gYW5kIEdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uIGFyZSBpZ25vcmVkLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275143</attachid>
            <date>2016-03-29 16:02:39 -0700</date>
            <delta_ts>2016-03-29 16:55:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155980-20160329160243.patch</filename>
            <type>text/plain</type>
            <size>48741</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODgwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE2LTAzLTI5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgTW92ZSB0aGUg
Q0cgSW1hZ2VEZWNvZGVyIGNsYXNzIGZyb20gSW1hZ2VTb3VyY2VDRy5jcHAgdG8gSW1hZ2VEZWNv
ZGVyQ0cuaCBhbmQgLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU1OTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWZ0ZXIgdGhpcyBzdGVwLCBJbWFnZVNvdXJjZS5jcHAgYW5kIEltYWdlU291cmNl
Q0cuY3BwIGxvb2sgdmVyeSBzaW1pbGFyCisgICAgICAgIHNvIHRoZXkgY2FuIGJlIG1lcmdlZCBp
biBvbmUgZmlsZS4gQWxsIHRoZSByZWR1bmRhbnQgY29kZSBpbiB0aGVzZSB0d28gZmlsZXMKKyAg
ICAgICAgY2FuIGJlIHJlbW92ZWQuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtl
OgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZURlY29kZXJDRy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW1hZ2VT
b3VyY2VPcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlU291cmNlT3B0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OnNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpzaGFyZWRCdWZmZXJSZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c3Vic2FtcGxp
bmdMZXZlbEZvclNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Ynl0ZXNE
ZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVy
Ojppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OmhvdFNwb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
Om9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZy
YW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6YWxs
b3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVy
Q0cuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6aW1hZ2VTb3VyY2VPcHRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9yaWVu
dGF0aW9uRnJvbVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVk
QnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNo
YXJlZEJ1ZmZlclJlbGVhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpJbWFnZURlY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNpemUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6aG90U3BvdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdElu
ZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6b3JpZW50YXRp
b25BdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJh
bWVEdXJhdGlvbkF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5k
ZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXREYXRhKTog
RGVsZXRlZC4KKwogMjAxNi0wMy0yOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgogCiAgICAgICAgIFdpbmRvd3MgYnVpbGQgZml4LgpJbmRleDogU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCShyZXZpc2lvbiAxOTg4MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZVNvdXJjZUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291
cmNlQ0dXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCShyZXZpc2lvbiAxOTg4MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNDA1LDYgKzQwNSw3
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZVNvdXJjZUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291
cmNlQ0dNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTk4ODAzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMjY3LDYgKzIyNjcsOCBAQAogCQk1
M0VGNzY2QzE2NTMxOTk0MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCBpbiBDb3B5IEdlbmVy
YXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUY3NjZB
MTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovOyB9OwogCQk1NTBBMEJDOTA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4NUY2MDM5MDA3MzUzRDYgLyogUXVh
bGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1RjYwMzkwMDczNTNENiAvKiBRdWFs
aWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU1NUI4N0VDMUNBQUYwQUIw
MDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuY3BwICovOyB9OworCQk1NTVCODdFRDFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1
NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oICovOyB9OwogCQk1NzJB
N0YyMTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAv
KiBTaW11bGF0ZWRDbGljay5oICovOyB9OwogCQk1NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAq
LzsgfTsKIAkJNTgwMzcxNjExQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4MDM3MTVGMUE2NkYwMEEw
MEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgKi87IH07CkBAIC05ODMxLDYgKzk4MzMsOCBAQAogCQk1
M0VGNzY2QTE2NTMwQTYxMDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0dGluZ3NNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OwogCQk1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVk
TmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBRdWFsaWZpZWROYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OworCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNv
ZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTVCODdFQjFDQUFGMEFC
MDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVE
NDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBTaW11
bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW11
bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTc3MSw2ICsy
MTc3NSw4IEBACiAJCQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0
YUNHLmNwcCAqLywKIAkJCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJE
YXRhQ0cuaCAqLywKIAkJCQlCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAg
Ki8sCisJCQkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAq
LywKKwkJCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLywK
IAkJCQlCMjc1MzUzMTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2VDRy5jcHAgKi8sCiAJ
CQkJNEIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0cuaCAqLywKIAkJCQk0
QjM0ODA5MTBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDR01hYy5tbSAqLywKQEAgLTI2
MjcxLDYgKzI2Mjc3LDcgQEAKIAkJCQk1MTg1RkM4RDFCQjRDNEU4MDAxMjg5OEYgLyogSURCRmFj
dG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjlBNkNCQUQxQzZCRTQyQzAwQjgzNkU5IC8qIEFj
Y2Vzc2liaWxpdHlTVkdFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM4RjFCQjRD
NEU4MDAxMjg5OEYgLyogSURCR2V0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1NTVCODdF
RDFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxODVGQzkxMUJCNEM0RTgwMDEyODk4RiAvKiBJREJJbmRleC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTFGNzk4RjAxQkU4ODBFNzAwOEFFNDkxIC8qIElEQkluZGV4SW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTE4NUZDOTUxQkI0QzRFODAwMTI4OThGIC8qIElEQktleS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMTI1OSw2ICszMTI2Niw3IEBACiAJCQkJOTlDQzBCNTkxOEJFOTg0QTAwNkNFQkND
IC8qIFJlcGxheVNlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlDQzBCNUIxOEJFOTg0
QTAwNkNFQkNDIC8qIFJlcGxheVNlc3Npb25TZWdtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUY1NUIzRENGMTI1MUYxMkQwMDNFRjI2OSAvKiBSZXNldElucHV0VHlwZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0RjcxM0UwRDVBNkYyODAwMDE4RDY5IC8qIFJlc291cmNl
RXJyb3JCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFRTY4NDZCMTJEMjZFMzgwMEU3OTQx
NSAvKiBSZXNvdXJjZUVycm9yQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NTAwQ0U5
MjM0RTAwN0VGM0NEIC8qIFJlc291cmNlRXJyb3JNYWMubW0gaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURl
Y29kZXJDRy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKKworI2lmIFVTRShDRykK
KworI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworI2lmICFQTEFURk9STShJT1MpCisjaW5jbHVkZSA8
QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1
ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2Vu
ZGlmCisKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2ltcG9ydCA8SW1hZ2VJTy9DR0lt
YWdlU291cmNlUHJpdmF0ZS5oPgorI2Vsc2UKK2NvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291
cmNlU3Vic2FtcGxlRmFjdG9yID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9y
Iik7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBDRlN0cmluZ1JlZiBX
ZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBlZERlbGF5VGltZSA9IENGU1RSKCJVbmNs
YW1wZWREZWxheVRpbWUiKTsKK2NvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVy
dHlBUE5HRGVsYXlUaW1lID0gQ0ZTVFIoIkRlbGF5VGltZSIpOworY29uc3QgQ0ZTdHJpbmdSZWYg
V2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdMb29wQ291bnQgPSBDRlNUUigiTG9vcENvdW50Iik7
CisKK2NvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBD
RlNUUigia0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiIpOworY29uc3QgQ0ZTdHJpbmdS
ZWYga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTa2lw
TWV0YWRhdGEiKTsKKworc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZUlt
YWdlU291cmNlT3B0aW9ucyhTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCit7Cisg
ICAgaWYgKCFzdWJzYW1wbGluZ0xldmVsKSB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIG51bU9w
dGlvbnMgPSAzOworICAgICAgICBjb25zdCB2b2lkKiBrZXlzW251bU9wdGlvbnNdID0geyBrQ0dJ
bWFnZVNvdXJjZVNob3VsZENhY2hlLCBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBr
Q0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSB9OworICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZXNb
bnVtT3B0aW9uc10gPSB7IGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVh
blRydWUgfTsKKyAgICAgICAgcmV0dXJuIENGRGljdGlvbmFyeUNyZWF0ZShudWxscHRyLCBrZXlz
LCB2YWx1ZXMsIG51bU9wdGlvbnMsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOworICAgIH0KKyAgICAKKyAgICBzaG9ydCBj
b25zdHJhaW5lZFN1YnNhbXBsaW5nTGV2ZWwgPSBzdGQ6Om1pbjxzaG9ydD4oMywgc3RkOjptYXg8
c2hvcnQ+KDAsIHN1YnNhbXBsaW5nTGV2ZWwpKTsKKyAgICBpbnQgc3Vic2FtcGxlSW50ID0gMSA8
PCBjb25zdHJhaW5lZFN1YnNhbXBsaW5nTGV2ZWw7IC8vIFswLi4zXSA9PiBbMSwgMiwgNCwgOF0K
KyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHN1YnNhbXBsZU51bWJlciA9IGFkb3B0
Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmc3Vic2FtcGxl
SW50KSk7CisgICAgY29uc3QgQ0ZJbmRleCBudW1PcHRpb25zID0gNDsKKyAgICBjb25zdCB2b2lk
KiBrZXlzW251bU9wdGlvbnNdID0geyBrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hlLCBrQ0dJbWFn
ZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSwga0NH
SW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3IgfTsKKyAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVt
T3B0aW9uc10gPSB7IGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRy
dWUsIHN1YnNhbXBsZU51bWJlci5nZXQoKSB9OworICAgIHJldHVybiBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZShudWxscHRyLCBrZXlzLCB2YWx1ZXMsIG51bU9wdGlvbnMsICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
K30KKworc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlU291cmNlT3B0aW9u
cyhTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSAwKQoreworICAgIGlmIChzdWJz
YW1wbGluZ0xldmVsKQorICAgICAgICByZXR1cm4gY3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKHN1
YnNhbXBsaW5nTGV2ZWwpOworICAgIAorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPj4gb3B0aW9ucyA9IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucygw
KTsKKyAgICByZXR1cm4gb3B0aW9uczsKK30KKworc3RhdGljIEltYWdlT3JpZW50YXRpb24gb3Jp
ZW50YXRpb25Gcm9tUHJvcGVydGllcyhDRkRpY3Rpb25hcnlSZWYgaW1hZ2VQcm9wZXJ0aWVzKQor
eworICAgIEFTU0VSVChpbWFnZVByb3BlcnRpZXMpOworICAgIENGTnVtYmVyUmVmIG9yaWVudGF0
aW9uUHJvcGVydHkgPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaW1hZ2VQcm9w
ZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5T3JpZW50YXRpb24pOworICAgIGlmICghb3JpZW50YXRp
b25Qcm9wZXJ0eSkKKyAgICAgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKKyAgICAKKyAg
ICBpbnQgZXhpZlZhbHVlOworICAgIENGTnVtYmVyR2V0VmFsdWUob3JpZW50YXRpb25Qcm9wZXJ0
eSwga0NGTnVtYmVySW50VHlwZSwgJmV4aWZWYWx1ZSk7CisgICAgcmV0dXJuIEltYWdlT3JpZW50
YXRpb246OmZyb21FWElGVmFsdWUoZXhpZlZhbHVlKTsKK30KKworI2lmICFQTEFURk9STShDT0NP
QSkKK3NpemVfdCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24odm9pZCogaW5mbywgdm9p
ZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50KQoreworICAgIFNoYXJlZEJ1
ZmZlciogc2hhcmVkQnVmZmVyID0gc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5mbyk7Cisg
ICAgc2l6ZV90IHNvdXJjZVNpemUgPSBzaGFyZWRCdWZmZXItPnNpemUoKTsKKyAgICBpZiAocG9z
aXRpb24gPj0gc291cmNlU2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgY29uc3Qg
Y2hhciogc291cmNlID0gc2hhcmVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbjsKKyAgICBzaXpl
X3QgYW1vdW50ID0gc3RkOjptaW48c2l6ZV90Pihjb3VudCwgc291cmNlU2l6ZSAtIHBvc2l0aW9u
KTsKKyAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7CisgICAgcmV0dXJuIGFtb3Vu
dDsKK30KKwordm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGluZm8pCit7CisgICAgU2hh
cmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihpbmZv
KTsKKyAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7Cit9CisjZW5kaWYKKworSW1hZ2VEZWNvZGVy
OjpJbWFnZURlY29kZXIoKQoreworICAgIG1fbmF0aXZlRGVjb2RlciA9IGFkb3B0Q0YoQ0dJbWFn
ZVNvdXJjZUNyZWF0ZUluY3JlbWVudGFsKG51bGxwdHIpKTsKK30KKworU3Vic2FtcGxpbmdMZXZl
bCBJbWFnZURlY29kZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vi
c2FtcGxpbmdMZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCkKK3sKKyAgICAvLyBUaGVyZSBh
cmUgZm91ciBzdWJzYW1wbGluZyBsZXZlbHM6IDAgPSAxeCwgMSA9IDAuNXgsIDIgPSAwLjI1eCwg
MyA9IDAuMTI1eC4KKyAgICBmbG9hdCBjbGFtcGVkU2NhbGUgPSBzdGQ6Om1heDxmbG9hdD4oMC4x
MjUsIHN0ZDo6bWluPGZsb2F0PigxLCBzY2FsZSkpOworICAgIFN1YnNhbXBsaW5nTGV2ZWwgcmVz
dWx0ID0gY2VpbGYobG9nMmYoMSAvIGNsYW1wZWRTY2FsZSkpOworICAgIEFTU0VSVChyZXN1bHQg
Pj0wICYmIHJlc3VsdCA8PSAzKTsKKyAgICByZXR1cm4gc3RkOjptaW4ocmVzdWx0LCBtYXhpbXVt
U3Vic2FtcGxpbmdMZXZlbCk7Cit9CisKK3NpemVfdCBJbWFnZURlY29kZXI6OmJ5dGVzRGVjb2Rl
ZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpCit7CisgICAgLy8gTWVhc3VyZWQgYnkgdHJhY2luZyBt
YWxsb2MvY2FsbG9jIGNhbGxzIG9uIE1hYyBPUyAxMC42LjYsIHg4Nl82NC4KKyAgICAvLyBBIG5v
bi16ZXJvIHZhbHVlIGVuc3VyZXMgY2FjaGVkIGltYWdlcyB3aXRoIG5vIGRlY29kZWQgZnJhbWVz
IHN0aWxsIGVudGVyCisgICAgLy8gdGhlIGxpdmUgZGVjb2RlZCByZXNvdXJjZXMgbGlzdCB3aGVu
IHRoZSBDR0ltYWdlU291cmNlIGRlY29kZXMgaW1hZ2UKKyAgICAvLyBwcm9wZXJ0aWVzLCBhbGxv
d2luZyB0aGUgY2FjaGUgdG8gcHJ1bmUgdGhlIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlLgorICAg
IC8vIFRoaXMgdmFsdWUgaXMgbGlrZWx5IHRvIGJlIGluYWNjdXJhdGUgb24gb3RoZXIgcGxhdGZv
cm1zLCBidXQgdGhlIG92ZXJhbGwKKyAgICAvLyBiZWhhdmlvciBpcyB1bmNoYW5nZWQuCisgICAg
cmV0dXJuIDEzMDg4OworfQorCitTdHJpbmcgSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0Cit7CisgICAgQ0ZTdHJpbmdSZWYgaW1hZ2VTb3VyY2VUeXBlID0gQ0dJbWFnZVNv
dXJjZUdldFR5cGUobV9uYXRpdmVEZWNvZGVyLmdldCgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6
cHJlZmVycmVkRXh0ZW5zaW9uRm9ySW1hZ2VTb3VyY2VUeXBlKGltYWdlU291cmNlVHlwZSk7Cit9
CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAoreworICAgIC8v
IFJhZ25hcm9zIHllbGxzOiBUT08gU09PTiEgWW91IGhhdmUgYXdha2VuZWQgbWUgVE9PIFNPT04s
IEV4ZWN1dHVzIQorICAgIGlmIChDR0ltYWdlU291cmNlR2V0U3RhdHVzKG1fbmF0aXZlRGVjb2Rl
ci5nZXQoKSkgPCBrQ0dJbWFnZVN0YXR1c0luY29tcGxldGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZTBQcm9wZXJ0aWVz
ID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVj
b2Rlci5nZXQoKSwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIWlt
YWdlMFByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4g
Q0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2UwUHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQ
cm9wZXJ0eVBpeGVsV2lkdGgpCisgICAgJiYgQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2Uw
UHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsSGVpZ2h0KTsKK30KKworSW50
U2l6ZSBJbWFnZURlY29kZXI6OnNpemUoKSBjb25zdAoreworICAgIGlmIChtX3NpemUuaXNFbXB0
eSgpKQorICAgICAgICBtX3NpemUgPSBmcmFtZVNpemVBdEluZGV4KDAsIDApOworICAgIHJldHVy
biBtX3NpemU7Cit9CisKK3NpemVfdCBJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb25zdAor
eworICAgIHJldHVybiBDR0ltYWdlU291cmNlR2V0Q291bnQobV9uYXRpdmVEZWNvZGVyLmdldCgp
KTsKK30KKworaW50IEltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKK3sKKyAg
ICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdl
U291cmNlQ29weVByb3BlcnRpZXMobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbWFnZVNvdXJjZU9w
dGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGNB
bmltYXRpb25Mb29wT25jZTsKKyAgICAKKyAgICBDRkRpY3Rpb25hcnlSZWYgZ2lmUHJvcGVydGll
cyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQo
KSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRpY3Rpb25hcnkpOworICAgIGlmIChnaWZQcm9wZXJ0aWVz
KSB7CisgICAgICAgIENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5R0lGTG9vcENvdW50KTsKKyAg
ICAgICAgCisgICAgICAgIC8vIE5vIHByb3BlcnR5IG1lYW5zIGxvb3Agb25jZS4KKyAgICAgICAg
aWYgKCFudW0pCisgICAgICAgICAgICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOworICAgICAg
ICAKKyAgICAgICAgaW50IGxvb3BDb3VudDsKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0s
IGtDRk51bWJlckludFR5cGUsICZsb29wQ291bnQpOworICAgICAgICAKKyAgICAgICAgLy8gQSBw
cm9wZXJ0eSB3aXRoIHZhbHVlIDAgbWVhbnMgbG9vcCBmb3JldmVyLgorICAgICAgICByZXR1cm4g
bG9vcENvdW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJbmZpbml0ZTsKKyAgICB9Cisg
ICAgCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBuZ1Byb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVm
KUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQ
TkdEaWN0aW9uYXJ5KTsKKyAgICBpZiAocG5nUHJvcGVydGllcykgeworICAgICAgICBDRk51bWJl
clJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocG5nUHJvcGVydGll
cywgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdMb29wQ291bnQpOworICAgICAgICBpZiAoIW51
bSkKKyAgICAgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7CisgICAgICAgIAorICAg
ICAgICBpbnQgbG9vcENvdW50OworICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVt
YmVySW50VHlwZSwgJmxvb3BDb3VudCk7CisgICAgICAgIHJldHVybiBsb29wQ291bnQgPyBsb29w
Q291bnQgOiBjQW5pbWF0aW9uTG9vcEluZmluaXRlOworICAgIH0KKyAgICAKKyAgICAvLyBUdXJu
cyBvdXQgd2UncmUgbm90IGFuIGFuaW1hdGVkIGltYWdlIGFmdGVyIGFsbCwgc28gd2UgZG9uJ3Qg
YW5pbWF0ZS4KKyAgICByZXR1cm4gY0FuaW1hdGlvbk5vbmU7Cit9CisKK2Jvb2wgSW1hZ2VEZWNv
ZGVyOjpob3RTcG90KEludFBvaW50JiBob3RTcG90KSBjb25zdAoreworICAgIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJv
cGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCAwLCBpbWFnZVNvdXJjZU9wdGlv
bnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGludCB4ID0gLTEsIHkgPSAtMTsKKyAgICBDRk51bWJlclJlZiBudW0gPSAo
Q0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwgQ0ZTVFIo
ImhvdHNwb3RYIikpOworICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVlKG51bSwga0NG
TnVtYmVySW50VHlwZSwgJngpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbnVt
ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIENG
U1RSKCJob3RzcG90WSIpKTsKKyAgICBpZiAoIW51bSB8fCAhQ0ZOdW1iZXJHZXRWYWx1ZShudW0s
IGtDRk51bWJlckludFR5cGUsICZ5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IGlmICh4IDwgMCB8fCB5IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGhv
dFNwb3QgPSBJbnRQb2ludCh4LCB5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW50U2l6ZSBJ
bWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJ
bmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoc3Vi
c2FtcGxpbmdMZXZlbCkuZ2V0KCkpKTsKKyAgICAKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAg
ICAgIHJldHVybiB7IH07CisgICAgCisgICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVpZ2h0
ID0gMDsKKyAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpOworICAg
IGlmIChudW0pCisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBl
LCAmd2lkdGgpOworICAgIAorICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRW
YWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQpOworICAg
IGlmIChudW0pCisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBl
LCAmaGVpZ2h0KTsKKyAgICAKKyAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKK30K
KworYm9vbCBJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4
KSBjb25zdAoreworICAgIEFTU0VSVChmcmFtZUNvdW50KCkpOworICAgIHJldHVybiBDR0ltYWdl
U291cmNlR2V0U3RhdHVzQXRJbmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4KSA9PSBr
Q0dJbWFnZVN0YXR1c0NvbXBsZXRlOworfQorCitJbWFnZU9yaWVudGF0aW9uIEltYWdlRGVjb2Rl
cjo6b3JpZW50YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29w
eVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwgaW5kZXgsIGltYWdlU291
cmNlT3B0aW9ucygpLmdldCgpKSk7CisgICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1
cm4gSW1hZ2VPcmllbnRhdGlvbigpOworICAgIAorICAgIHJldHVybiBvcmllbnRhdGlvbkZyb21Q
cm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpOworfQorCitmbG9hdCBJbWFnZURlY29kZXI6OmZy
YW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBmbG9hdCBkdXJh
dGlvbiA9IDA7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFk
b3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIu
Z2V0KCksIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmIChwcm9w
ZXJ0aWVzKSB7CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0gKENGRGlj
dGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFn
ZVByb3BlcnR5R0lGRGljdGlvbmFyeSk7CisgICAgICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7Cisg
ICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFy
eUdldFZhbHVlKGdpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1wZWREZWxh
eVRpbWUpKSB7CisgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB1bmNsYW1wZWQgZnJhbWUgZGVs
YXkgaWYgaXQgZXhpc3RzLgorICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBr
Q0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKENG
TnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9w
ZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5R0lGRGVsYXlUaW1lKSkgeworICAgICAgICAgICAgICAg
IC8vIEZhbGwgYmFjayB0byB0aGUgY2xhbXBlZCBmcmFtZSBkZWxheSBpZiB0aGUgdW5jbGFtcGVk
IGZyYW1lIGRlbGF5IGRvZXMgbm90IGV4aXN0LgorICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0
VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENGRGljdGlvbmFyeVJlZiBwbmdQcm9wZXJ0
aWVzID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdl
dCgpLCBrQ0dJbWFnZVByb3BlcnR5UE5HRGljdGlvbmFyeSk7CisgICAgICAgIGlmIChwbmdQcm9w
ZXJ0aWVzKSB7CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVm
KUNGRGljdGlvbmFyeUdldFZhbHVlKHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVy
dHlBUE5HVW5jbGFtcGVkRGVsYXlUaW1lKSkKKyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZh
bHVlKG51bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAmZHVyYXRpb24pOworICAgICAgICAgICAgZWxz
ZSBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HRGVsYXlUaW1lKSkKKyAg
ICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAm
ZHVyYXRpb24pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE1hbnkgYW5ub3lpbmcg
YWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2ts
eSBhcyBwb3NzaWJsZS4KKyAgICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1
c2UgYSBkdXJhdGlvbiBvZiAxMDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5CisgICAg
Ly8gYSBkdXJhdGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBh
bmQgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzYwODI+CisgICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRp
b24uCisgICAgaWYgKGR1cmF0aW9uIDwgMC4wMTFmKQorICAgICAgICByZXR1cm4gMC4xZjsKKyAg
ICByZXR1cm4gZHVyYXRpb247Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjphbGxvd1N1YnNhbXBs
aW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdAoreworICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGll
c0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5n
ZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIENGRGljdGlvbmFyeVJlZiBqZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0PENGRGlj
dGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1h
Z2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5KSk7CisgICAgaWYgKGpmaWZQcm9wZXJ0aWVzKSB7Cisg
ICAgICAgIENGQm9vbGVhblJlZiBpc1Byb2dDRkJvb2wgPSBzdGF0aWNfY2FzdDxDRkJvb2xlYW5S
ZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGpmaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5
SkZJRklzUHJvZ3Jlc3NpdmUpKTsKKyAgICAgICAgaWYgKGlzUHJvZ0NGQm9vbCkgeworICAgICAg
ICAgICAgYm9vbCBpc1Byb2dyZXNzaXZlID0gQ0ZCb29sZWFuR2V0VmFsdWUoaXNQcm9nQ0ZCb29s
KTsKKyAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81MTg0NjU1
PiAtIEhhbmcgcmVuZGVyaW5nIHZlcnkgbGFyZ2UgcHJvZ3Jlc3NpdmUgSlBFRy4gRGVjb2Rpbmcg
cHJvZ3Jlc3NpdmUKKyAgICAgICAgICAgIC8vIGltYWdlcyBoYW5ncyBmb3IgYSB2ZXJ5IGxvbmcg
dGltZSByaWdodCBub3cuIFVudGlsIHRoaXMgaXMgZml4ZWQsIGRvbid0IHN1Yi1zYW1wbGUgcHJv
Z3Jlc3NpdmUgaW1hZ2VzLiBUaGlzCisgICAgICAgICAgICAvLyB3aWxsIGNhdXNlIHRoZW0gdG8g
ZmFpbCBvdXIgbGFyZ2UgaW1hZ2UgY2hlY2sgYW5kIHRoZXkgd29uJ3QgYmUgZGVjb2RlZC4KKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGZpeGVk
ICg8cmRhcjovL3Byb2JsZW0vNTE5MTQxOD4pCisgICAgICAgICAgICByZXR1cm4gIWlzUHJvZ3Jl
c3NpdmU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0
Cit7CisgICAgaWYgKCFmcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgQ0ZTdHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJj
ZUdldFR5cGUobV9uYXRpdmVEZWNvZGVyLmdldCgpKTsKKyAgICAKKyAgICAvLyBSZXR1cm4gZmFs
c2UgaWYgdGhlcmUgaXMgbm8gaW1hZ2UgdHlwZSBvciB0aGUgaW1hZ2UgdHlwZSBpcyBKUEVHLCBi
ZWNhdXNlCisgICAgLy8gSlBFRyBkb2VzIG5vdCBzdXBwb3J0IGFscGhhIHRyYW5zcGFyZW5jeS4K
KyAgICBpZiAoIWltYWdlVHlwZSB8fCBDRkVxdWFsKGltYWdlVHlwZSwgQ0ZTVFIoInB1YmxpYy5q
cGVnIikpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gRklYTUU6IENvdWxk
IHJldHVybiBmYWxzZSBmb3Igb3RoZXIgbm9uLXRyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMuCisg
ICAgLy8gRklYTUU6IENvdWxkIG1heWJlIHJldHVybiBmYWxzZSBmb3IgYSBHSUYgRnJhbWUgaWYg
d2UgaGF2ZSBlbm91Z2ggaW5mbyBpbiB0aGUgR0lGIHByb3BlcnRpZXMgZGljdGlvbmFyeQorICAg
IC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBhIHRyYW5zcGFyZW50IGNvbG9yIHdhcyBk
ZWZpbmVkLgorICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZy
YW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGlu
Z0xldmVsKSBjb25zdAoreworICAgIEludFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgcmV0dXJuIGZyYW1lU2l6ZS5hcmVhKCkg
KiA0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1hZ2VB
dEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBj
b25zdAoreworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFn
ZVNvdXJjZUNyZWF0ZUltYWdlQXRJbmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4LCBp
bWFnZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxpbmdMZXZlbCkuZ2V0KCkpKTsKKyAgICAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzExOTg+IC0gQ29yZUdyYXBo
aWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIgaW4gaU9TIDQuMCB0byBr
Q0dJbWFnZUNhY2hpbmdUcmFuc2llbnQKKyAgICAvLyB3aGljaCBjYXVzZWQgYSBwZXJmb3JtYW5j
ZSByZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0byBiZSByZXNhbXBsZWQv
cmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCisgICAgLy8gQ0dDb250ZXh0RHJhd0ltYWdl
LiBXZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2VzLiBTZWUgYWxzbyA8cmRh
cjovL3Byb2JsZW0vMTQzNjY3NTU+IC0KKyAgICAvLyBDb3JlR3JhcGhpY3MgbmVlZHMgdG8gdW4t
ZGVwcmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5jZSBpdCdzIHN0aWxsIG5vdCB0
aGUgZGVmYXVsdC4KKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRl
Y2xhcmF0aW9ucyIKKyNlbmRpZgorICAgIENHSW1hZ2VTZXRDYWNoaW5nRmxhZ3MoaW1hZ2UuZ2V0
KCksIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSk7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CisgICAgCisgICAgQ0ZTdHJpbmdSZWYgaW1hZ2VVVEkgPSBDR0ltYWdlU291cmNlR2V0VHlwZSht
X25hdGl2ZURlY29kZXIuZ2V0KCkpOworICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiB4Ym1V
VEkgPSBDRlNUUigicHVibGljLnhiaXRtYXAtaW1hZ2UiKTsKKyAgICAKKyAgICBpZiAoIWltYWdl
VVRJKQorICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgCisgICAgaWYgKCFDRkVxdWFsKGltYWdl
VVRJLCB4Ym1VVEkpKQorICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgCisgICAgLy8gSWYgaXQg
aXMgYW4geGJtIGltYWdlLCBtYXNrIG91dCBhbGwgdGhlIHdoaXRlIGFyZWFzIHRvIHJlbmRlciB0
aGVtIHRyYW5zcGFyZW50LgorICAgIGNvbnN0IENHRmxvYXQgbWFza2luZ0NvbG9yc1s2XSA9IHsy
NTUsIDI1NSwgIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IG1hc2tlZEltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aE1hc2tpbmdDb2xvcnMoaW1h
Z2UuZ2V0KCksIG1hc2tpbmdDb2xvcnMpKTsKKyAgICByZXR1cm4gbWFza2VkSW1hZ2UgPyBtYXNr
ZWRJbWFnZSA6IGltYWdlOworfQorCit2b2lkIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShDRkRhdGFS
ZWYgZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgQ0dJbWFnZVNvdXJjZVVwZGF0
ZURhdGEobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQor
Cit2b2lkIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIC8vIE9uIE1hYyB0aGUg
TlNEYXRhIGluc2lkZSB0aGUgU2hhcmVkQnVmZmVyIGNhbiBiZSBzZWNyZXRseSBhcHBlbmRlZCB0
byB3aXRob3V0IHRoZSBTaGFyZWRCdWZmZXIncyBrbm93bGVkZ2UuCisgICAgLy8gV2UgdXNlIFNo
YXJlZEJ1ZmZlcidzIGFiaWxpdHkgdG8gd3JhcCBpdHNlbGYgaW5zaWRlIENGRGF0YSB0byBnZXQg
YXJvdW5kIHRoaXMsIGVuc3VyaW5nIHRoYXQgSW1hZ2VJTyBpcworICAgIC8vIHJlYWxseSBsb29r
aW5nIGF0IHRoZSBTaGFyZWRCdWZmZXIuCisgICAgc2V0RGF0YShkYXRhLT5jcmVhdGVDRkRhdGEo
KS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YSht
X25hdGl2ZURlY29kZXIuZ2V0KCksIGRhdGEtPmNyZWF0ZUNGRGF0YSgpLmdldCgpLCBhbGxEYXRh
UmVjZWl2ZWQpOworI2Vsc2UKKyAgICAvLyBDcmVhdGUgYSBDR0RhdGFQcm92aWRlciB0byB3cmFw
IHRoZSBTaGFyZWRCdWZmZXIuCisgICAgZGF0YS0+cmVmKCk7CisgICAgLy8gV2UgdXNlIHRoZSBH
ZXRCeXRlc0F0UG9zaXRpb24gY2FsbGJhY2sgcmF0aGVyIHRoYW4gdGhlIEdldEJ5dGVQb2ludGVy
IG9uZSBiZWNhdXNlIFNoYXJlZEJ1ZmZlcgorICAgIC8vIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkg
dG8gbG9jayBkb3duIHRoZSBieXRlIHBvaW50ZXIgYW5kIGd1YXJhbnRlZSB0aGF0IGl0IHdvbid0
IG1vdmUsIHdoaWNoCisgICAgLy8gaXMgYSByZXF1aXJlbWVudCBmb3IgdXNpbmcgdGhlIEdldEJ5
dGVQb2ludGVyIGNhbGxiYWNrLgorICAgIENHRGF0YVByb3ZpZGVyRGlyZWN0Q2FsbGJhY2tzIHBy
b3ZpZGVyQ2FsbGJhY2tzID0geyAwLCAwLCAwLCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRp
b24sIHNoYXJlZEJ1ZmZlclJlbGVhc2UgfTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJS
ZWY+IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVEaXJlY3QoZGF0
YSwgZGF0YS0+c2l6ZSgpLCAmcHJvdmlkZXJDYWxsYmFja3MpKTsKKyAgICBDR0ltYWdlU291cmNl
VXBkYXRlRGF0YVByb3ZpZGVyKG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwgZGF0YVByb3ZpZGVyLmdl
dCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworI2VuZGlmCit9CisKK30KKworI2VuZGlmIC8vIFVTRShD
RykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rl
ckNHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VEZWNvZGVyQ0cuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSW1hZ2VEZWNvZGVyQ0dfaAorI2RlZmluZSBJbWFnZURlY29kZXJDR19oCisKKyNpbmNsdWRl
ICJJbWFnZVNvdXJjZUNHLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEltYWdlRGVjb2RlciB7CitwdWJsaWM6CisgICAgSW1hZ2VEZWNvZGVy
KCk7CisgICAgCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZURlY29kZXI+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJbWFnZURlY29kZXI+
KCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgYnl0ZXNEZWNvZGVkVG9EZXRlcm1p
bmVQcm9wZXJ0aWVzKCk7CisgICAgc3RhdGljIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdM
ZXZlbEZvclNjYWxlKGZsb2F0IHNjYWxlLCBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJzYW1w
bGluZ0xldmVsKTsKKyAgICAKKyAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsK
KyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0OworICAgIAorICAgIC8vIEFsd2F5cyBv
cmlnaW5hbCBzaXplLCB3aXRob3V0IHN1YnNhbXBsaW5nLgorICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0OworICAgIHNpemVfdCBmcmFtZUNvdW50KCkgY29uc3Q7CisgICAgaW50IHJlcGV0aXRpb25D
b3VudCgpIGNvbnN0OworICAgIGJvb2wgaG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3Q7
CisgICAgCisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdM
ZXZlbCkgY29uc3Q7CisgICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCkgY29u
c3Q7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25z
dDsKKyAgICAKKyAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0Owor
ICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICBib29sIGFs
bG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChzaXplX3QpIGNvbnN0OworICAgIHVuc2lnbmVk
IGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDApIGNvbnN0Owor
ICAgIAorICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwg
U3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBzZXREYXRhKENGRGF0YVJl
ZiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIq
LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgbXV0YWJsZSBJ
bnRTaXplIG1fc2l6ZTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVNvdXJjZVJlZj4gbV9uYXRpdmVE
ZWNvZGVyOworfTsKKworfQorCisjZW5kaWYgLy8gSW1hZ2VEZWNvZGVyQ0dfaApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VD
Ry5jcHAJKHJldmlzaW9uIDE5ODgwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw0MjYgKzI5LDEy
IEBACiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkltYWdlU291cmNlQ0cuaCIKIAotI2luY2x1ZGUg
IkNvcmVHcmFwaGljc1NQSS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSAi
SW50U2l6ZS5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotI2lmICFQTEFU
Rk9STShJT1MpCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZp
Y2VzLmg+Ci0jZWxzZQotI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNp
bXBvcnQgPEltYWdlSU8vQ0dJbWFnZVNvdXJjZVByaXZhdGUuaD4KLSNlbHNlCi1jb25zdCBDRlN0
cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZhY3RvciA9IENGU1RSKCJrQ0dJbWFnZVNv
dXJjZVN1YnNhbXBsZUZhY3RvciIpOwotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAKLWNsYXNzIEltYWdlRGVjb2RlciB7Ci1wdWJsaWM6Ci0gICAgSW1hZ2VEZWNvZGVyKCk7Ci0g
ICAgCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZURlY29kZXI+IGNyZWF0ZSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJbWFnZURlY29kZXI+KCk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIHNpemVfdCBieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRp
ZXMoKTsKLSAgICBzdGF0aWMgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsRm9yU2Nh
bGUoZmxvYXQgc2NhbGUsIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwp
OwotCi0gICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1Np
emVBdmFpbGFibGUoKSBjb25zdDsKLSAgICAKLSAgICAvLyBBbHdheXMgb3JpZ2luYWwgc2l6ZSwg
d2l0aG91dCBzdWJzYW1wbGluZy4KLSAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKLSAgICBzaXpl
X3QgZnJhbWVDb3VudCgpIGNvbnN0OwotICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsK
LSAgICBib29sIGhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0OwotCi0gICAgSW50U2l6
ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7Ci0gICAg
Ym9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCkgY29uc3Q7Ci0gICAgSW1hZ2VPcmll
bnRhdGlvbiBvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdDsKLQotICAgIGZsb2F0IGZy
YW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCkgY29uc3Q7Ci0gICAgYm9vbCBmcmFtZUhhc0FscGhh
QXRJbmRleChzaXplX3QpIGNvbnN0OwotICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09mRnJhbWVB
dEluZGV4KHNpemVfdCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6
ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7Ci0KLSAgICBOYXRpdmVJbWFnZVB0ciBj
cmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Owot
Ci0gICAgdm9pZCBzZXREYXRhKENGRGF0YVJlZiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotICAg
IHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0KLXBy
b3RlY3RlZDoKLSAgICBtdXRhYmxlIEludFNpemUgbV9zaXplOwotICAgIFJldGFpblB0cjxDR0lt
YWdlU291cmNlUmVmPiBtX25hdGl2ZURlY29kZXI7Ci19OwotCi1jb25zdCBDRlN0cmluZ1JlZiBX
ZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBlZERlbGF5VGltZSA9IENGU1RSKCJVbmNs
YW1wZWREZWxheVRpbWUiKTsKLWNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVy
dHlBUE5HRGVsYXlUaW1lID0gQ0ZTVFIoIkRlbGF5VGltZSIpOwotY29uc3QgQ0ZTdHJpbmdSZWYg
V2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdMb29wQ291bnQgPSBDRlNUUigiTG9vcENvdW50Iik7
Ci0KLWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBD
RlNUUigia0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiIpOwotY29uc3QgQ0ZTdHJpbmdS
ZWYga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTa2lw
TWV0YWRhdGEiKTsKLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZUlt
YWdlU291cmNlT3B0aW9ucyhTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCi17Ci0g
ICAgaWYgKCFzdWJzYW1wbGluZ0xldmVsKSB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIG51bU9w
dGlvbnMgPSAzOwotICAgICAgICBjb25zdCB2b2lkKiBrZXlzW251bU9wdGlvbnNdID0geyBrQ0dJ
bWFnZVNvdXJjZVNob3VsZENhY2hlLCBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBr
Q0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSB9OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZXNb
bnVtT3B0aW9uc10gPSB7IGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVh
blRydWUgfTsKLSAgICAgICAgcmV0dXJuIENGRGljdGlvbmFyeUNyZWF0ZShudWxscHRyLCBrZXlz
LCB2YWx1ZXMsIG51bU9wdGlvbnMsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOwotICAgIH0KLQotICAgIHNob3J0IGNvbnN0
cmFpbmVkU3Vic2FtcGxpbmdMZXZlbCA9IHN0ZDo6bWluPHNob3J0PigzLCBzdGQ6Om1heDxzaG9y
dD4oMCwgc3Vic2FtcGxpbmdMZXZlbCkpOwotICAgIGludCBzdWJzYW1wbGVJbnQgPSAxIDw8IGNv
bnN0cmFpbmVkU3Vic2FtcGxpbmdMZXZlbDsgLy8gWzAuLjNdID0+IFsxLCAyLCA0LCA4XQotCi0g
ICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBzdWJzYW1wbGVOdW1iZXIgPSBhZG9wdENGKENGTnVt
YmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJJbnRUeXBlLCAgJnN1YnNhbXBsZUludCkpOwot
ICAgIGNvbnN0IENGSW5kZXggbnVtT3B0aW9ucyA9IDQ7Ci0gICAgY29uc3Qgdm9pZCoga2V5c1tu
dW1PcHRpb25zXSA9IHsga0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZSwga0NHSW1hZ2VTb3VyY2VT
aG91bGRQcmVmZXJSR0IzMiwga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEsIGtDR0ltYWdlU291
cmNlU3Vic2FtcGxlRmFjdG9yIH07Ci0gICAgY29uc3Qgdm9pZCogdmFsdWVzW251bU9wdGlvbnNd
ID0geyBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBzdWJz
YW1wbGVOdW1iZXIuZ2V0KCkgfTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVh
dGUobnVsbHB0ciwga2V5cywgdmFsdWVzLCBudW1PcHRpb25zLCAma0NGVHlwZURpY3Rpb25hcnlL
ZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci19Ci0KLXN0
YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVNvdXJjZU9wdGlvbnMoU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsID0gMCkKLXsKLSAgICBpZiAoc3Vic2FtcGxpbmdM
ZXZlbCkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGlu
Z0xldmVsKTsKLQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPj4gb3B0aW9ucyA9IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucygwKTsKLSAgICByZXR1
cm4gb3B0aW9uczsKLX0KLQotc3RhdGljIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gcm9t
UHJvcGVydGllcyhDRkRpY3Rpb25hcnlSZWYgaW1hZ2VQcm9wZXJ0aWVzKQotewotICAgIEFTU0VS
VChpbWFnZVByb3BlcnRpZXMpOwotICAgIENGTnVtYmVyUmVmIG9yaWVudGF0aW9uUHJvcGVydHkg
PSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaW1hZ2VQcm9wZXJ0aWVzLCBrQ0dJ
bWFnZVByb3BlcnR5T3JpZW50YXRpb24pOwotICAgIGlmICghb3JpZW50YXRpb25Qcm9wZXJ0eSkK
LSAgICAgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKLQotICAgIGludCBleGlmVmFsdWU7
Ci0gICAgQ0ZOdW1iZXJHZXRWYWx1ZShvcmllbnRhdGlvblByb3BlcnR5LCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmZXhpZlZhbHVlKTsKLSAgICByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbjo6ZnJvbUVYSUZW
YWx1ZShleGlmVmFsdWUpOwotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotc2l6ZV90IHNoYXJl
ZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbih2b2lkKiBpbmZvLCB2b2lkKiBidWZmZXIsIG9mZl90
IHBvc2l0aW9uLCBzaXplX3QgY291bnQpCi17Ci0gICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZm
ZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihpbmZvKTsKLSAgICBzaXplX3Qgc291cmNl
U2l6ZSA9IHNoYXJlZEJ1ZmZlci0+c2l6ZSgpOwotICAgIGlmIChwb3NpdGlvbiA+PSBzb3VyY2VT
aXplKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IHNoYXJl
ZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb247Ci0gICAgc2l6ZV90IGFtb3VudCA9IHN0ZDo6bWlu
PHNpemVfdD4oY291bnQsIHNvdXJjZVNpemUgLSBwb3NpdGlvbik7Ci0gICAgbWVtY3B5KGJ1ZmZl
ciwgc291cmNlLCBhbW91bnQpOwotICAgIHJldHVybiBhbW91bnQ7Ci19Ci0KLXZvaWQgc2hhcmVk
QnVmZmVyUmVsZWFzZSh2b2lkKiBpbmZvKQotewotICAgIFNoYXJlZEJ1ZmZlciogc2hhcmVkQnVm
ZmVyID0gc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5mbyk7Ci0gICAgc2hhcmVkQnVmZmVy
LT5kZXJlZigpOwotfQotI2VuZGlmCi0gICAgCi1JbWFnZURlY29kZXI6OkltYWdlRGVjb2Rlcigp
Ci17Ci0gICAgbV9uYXRpdmVEZWNvZGVyID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlSW5j
cmVtZW50YWwobnVsbHB0cikpOwotfQotICAgIAotU3Vic2FtcGxpbmdMZXZlbCBJbWFnZURlY29k
ZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxpbmdMZXZl
bCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCkKLXsKLSAgICAvLyBUaGVyZSBhcmUgZm91ciBzdWJz
YW1wbGluZyBsZXZlbHM6IDAgPSAxeCwgMSA9IDAuNXgsIDIgPSAwLjI1eCwgMyA9IDAuMTI1eC4K
LSAgICBmbG9hdCBjbGFtcGVkU2NhbGUgPSBzdGQ6Om1heDxmbG9hdD4oMC4xMjUsIHN0ZDo6bWlu
PGZsb2F0PigxLCBzY2FsZSkpOwotICAgIFN1YnNhbXBsaW5nTGV2ZWwgcmVzdWx0ID0gY2VpbGYo
bG9nMmYoMSAvIGNsYW1wZWRTY2FsZSkpOwotICAgIEFTU0VSVChyZXN1bHQgPj0wICYmIHJlc3Vs
dCA8PSAzKTsKLSAgICByZXR1cm4gc3RkOjptaW4ocmVzdWx0LCBtYXhpbXVtU3Vic2FtcGxpbmdM
ZXZlbCk7Ci19Ci0KLXNpemVfdCBJbWFnZURlY29kZXI6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5l
UHJvcGVydGllcygpCi17Ci0gICAgLy8gTWVhc3VyZWQgYnkgdHJhY2luZyBtYWxsb2MvY2FsbG9j
IGNhbGxzIG9uIE1hYyBPUyAxMC42LjYsIHg4Nl82NC4KLSAgICAvLyBBIG5vbi16ZXJvIHZhbHVl
IGVuc3VyZXMgY2FjaGVkIGltYWdlcyB3aXRoIG5vIGRlY29kZWQgZnJhbWVzIHN0aWxsIGVudGVy
Ci0gICAgLy8gdGhlIGxpdmUgZGVjb2RlZCByZXNvdXJjZXMgbGlzdCB3aGVuIHRoZSBDR0ltYWdl
U291cmNlIGRlY29kZXMgaW1hZ2UKLSAgICAvLyBwcm9wZXJ0aWVzLCBhbGxvd2luZyB0aGUgY2Fj
aGUgdG8gcHJ1bmUgdGhlIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlLgotICAgIC8vIFRoaXMgdmFs
dWUgaXMgbGlrZWx5IHRvIGJlIGluYWNjdXJhdGUgb24gb3RoZXIgcGxhdGZvcm1zLCBidXQgdGhl
IG92ZXJhbGwKLSAgICAvLyBiZWhhdmlvciBpcyB1bmNoYW5nZWQuCi0gICAgcmV0dXJuIDEzMDg4
OwotfQotICAgIAotU3RyaW5nIEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25z
dAotewotICAgIENGU3RyaW5nUmVmIGltYWdlU291cmNlVHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRU
eXBlKG1fbmF0aXZlRGVjb2Rlci5nZXQoKSk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnByZWZlcnJl
ZEV4dGVuc2lvbkZvckltYWdlU291cmNlVHlwZShpbWFnZVNvdXJjZVR5cGUpOwotfQotCi1ib29s
IEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgY29uc3QKLXsKLSAgICAvLyBSYWduYXJv
cyB5ZWxsczogVE9PIFNPT04hIFlvdSBoYXZlIGF3YWtlbmVkIG1lIFRPTyBTT09OLCBFeGVjdXR1
cyEKLSAgICBpZiAoQ0dJbWFnZVNvdXJjZUdldFN0YXR1cyhtX25hdGl2ZURlY29kZXIuZ2V0KCkp
IDwga0NHSW1hZ2VTdGF0dXNJbmNvbXBsZXRlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZTBQcm9wZXJ0aWVzID0gYWRvcHRDRihD
R0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwg
MCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIWltYWdlMFByb3BlcnRp
ZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBDRkRpY3Rpb25hcnlDb250
YWluc0tleShpbWFnZTBQcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxXaWR0
aCkKLSAgICAgICAgJiYgQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2UwUHJvcGVydGllcy5n
ZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsSGVpZ2h0KTsKLX0KLQotSW50U2l6ZSBJbWFnZURl
Y29kZXI6OnNpemUoKSBjb25zdAotewotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAg
ICBtX3NpemUgPSBmcmFtZVNpemVBdEluZGV4KDAsIDApOwotICAgIHJldHVybiBtX3NpemU7Ci19
Ci0KLXNpemVfdCBJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb25zdAotewotICAgIHJldHVy
biBDR0ltYWdlU291cmNlR2V0Q291bnQobV9uYXRpdmVEZWNvZGVyLmdldCgpKTsKLX0KLQotaW50
IEltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVBy
b3BlcnRpZXMobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQo
KSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29w
T25jZTsKLQotICAgIENGRGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFy
eVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3Bl
cnR5R0lGRGljdGlvbmFyeSk7Ci0gICAgaWYgKGdpZlByb3BlcnRpZXMpIHsKLSAgICAgICAgQ0ZO
dW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGdpZlByb3Bl
cnRpZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZMb29wQ291bnQpOwotCi0gICAgICAgIC8vIE5vIHBy
b3BlcnR5IG1lYW5zIGxvb3Agb25jZS4KLSAgICAgICAgaWYgKCFudW0pCi0gICAgICAgICAgICBy
ZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOwotCi0gICAgICAgIGludCBsb29wQ291bnQ7Ci0gICAg
ICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmbG9vcENvdW50KTsK
LQotICAgICAgICAvLyBBIHByb3BlcnR5IHdpdGggdmFsdWUgMCBtZWFucyBsb29wIGZvcmV2ZXIu
Ci0gICAgICAgIHJldHVybiBsb29wQ291bnQgPyBsb29wQ291bnQgOiBjQW5pbWF0aW9uTG9vcElu
ZmluaXRlOwotICAgIH0KLQotICAgIENGRGljdGlvbmFyeVJlZiBwbmdQcm9wZXJ0aWVzID0gKENG
RGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJ
bWFnZVByb3BlcnR5UE5HRGljdGlvbmFyeSk7Ci0gICAgaWYgKHBuZ1Byb3BlcnRpZXMpIHsKLSAg
ICAgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HTG9vcENvdW50KTsKLSAg
ICAgICAgaWYgKCFudW0pCi0gICAgICAgICAgICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOwot
Ci0gICAgICAgIGludCBsb29wQ291bnQ7Ci0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBr
Q0ZOdW1iZXJJbnRUeXBlLCAmbG9vcENvdW50KTsKLSAgICAgICAgcmV0dXJuIGxvb3BDb3VudCA/
IGxvb3BDb3VudCA6IGNBbmltYXRpb25Mb29wSW5maW5pdGU7Ci0gICAgfQotCi0gICAgLy8gVHVy
bnMgb3V0IHdlJ3JlIG5vdCBhbiBhbmltYXRlZCBpbWFnZSBhZnRlciBhbGwsIHNvIHdlIGRvbid0
IGFuaW1hdGUuCi0gICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOwotfQotCi1ib29sIEltYWdlRGVj
b2Rlcjo6aG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVBy
b3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwgMCwgaW1hZ2VTb3VyY2VPcHRp
b25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGludCB4ID0gLTEsIHkgPSAtMTsKLSAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZO
dW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwgQ0ZTVFIoImhv
dHNwb3RYIikpOwotICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVt
YmVySW50VHlwZSwgJngpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBudW0gPSAoQ0ZO
dW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwgQ0ZTVFIoImhv
dHNwb3RZIikpOwotICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVt
YmVySW50VHlwZSwgJnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoeCA8IDAg
fHwgeSA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGhvdFNwb3QgPSBJbnRQb2lu
dCh4LCB5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW50U2l6ZSBJbWFnZURlY29kZXI6OmZy
YW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5n
TGV2ZWwpIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGll
cyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURl
Y29kZXIuZ2V0KCksIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxpbmdMZXZlbCku
Z2V0KCkpKTsKLQotICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIHsgfTsKLQot
ICAgIGludCB3aWR0aCA9IDA7Ci0gICAgaW50IGhlaWdodCA9IDA7Ci0gICAgQ0ZOdW1iZXJSZWYg
bnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCks
IGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKTsKLSAgICBpZiAobnVtKQotICAgICAgICBDRk51
bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKLQotICAgIG51bSA9
IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJ
bWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQpOwotICAgIGlmIChudW0pCi0gICAgICAgIENGTnVtYmVy
R2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKLQotICAgIHJldHVybiBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpOwotfQotCi1ib29sIEltYWdlRGVjb2Rlcjo6ZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGZyYW1lQ291
bnQoKSk7Ci0gICAgcmV0dXJuIENHSW1hZ2VTb3VyY2VHZXRTdGF0dXNBdEluZGV4KG1fbmF0aXZl
RGVjb2Rlci5nZXQoKSwgaW5kZXgpID09IGtDR0ltYWdlU3RhdHVzQ29tcGxldGU7Ci19Ci0KLUlt
YWdlT3JpZW50YXRpb24gSW1hZ2VEZWNvZGVyOjpvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGlu
ZGV4KSBjb25zdAotewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMg
PSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNv
ZGVyLmdldCgpLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAo
IXByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBJbWFnZU9yaWVudGF0aW9uKCk7Ci0KLSAgICBy
ZXR1cm4gb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLmdldCgpKTsKLX0KLQot
ZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNv
bnN0Ci17Ci0gICAgZmxvYXQgZHVyYXRpb24gPSAwOwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0
SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKCku
Z2V0KCkpKTsKLSAgICBpZiAocHJvcGVydGllcykgewotICAgICAgICBDRkRpY3Rpb25hcnlSZWYg
Z2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJv
cGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRpY3Rpb25hcnkpOwotICAgICAgICBp
ZiAoZ2lmUHJvcGVydGllcykgewotICAgICAgICAgICAgaWYgKENGTnVtYmVyUmVmIG51bSA9IChD
Rk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVBy
b3BlcnR5R0lGVW5jbGFtcGVkRGVsYXlUaW1lKSkgewotICAgICAgICAgICAgICAgIC8vIFVzZSB0
aGUgdW5jbGFtcGVkIGZyYW1lIGRlbGF5IGlmIGl0IGV4aXN0cy4KLSAgICAgICAgICAgICAgICBD
Rk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAmZHVyYXRpb24pOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eUdJRkRlbGF5VGlt
ZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGNsYW1wZWQgZnJhbWUg
ZGVsYXkgaWYgdGhlIHVuY2xhbXBlZCBmcmFtZSBkZWxheSBkb2VzIG5vdCBleGlzdC4KLSAgICAg
ICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAmZHVy
YXRpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQ0ZEaWN0aW9uYXJ5
UmVmIHBuZ1Byb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQTkdEaWN0aW9uYXJ5KTsKLSAgICAg
ICAgaWYgKHBuZ1Byb3BlcnRpZXMpIHsKLSAgICAgICAgICAgIGlmIChDRk51bWJlclJlZiBudW0g
PSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocG5nUHJvcGVydGllcywgV2ViQ29y
ZUNHSW1hZ2VQcm9wZXJ0eUFQTkdVbmNsYW1wZWREZWxheVRpbWUpKQotICAgICAgICAgICAgICAg
IENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUocG5nUHJvcGVydGllcywgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdE
ZWxheVRpbWUpKQotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1i
ZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBNYW55
IGFubm95aW5nIGFkcyBzcGVjaWZ5IGEgMCBkdXJhdGlvbiB0byBtYWtlIGFuIGltYWdlIGZsYXNo
IGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCi0gICAgLy8gV2UgZm9sbG93IEZpcmVmb3gncyBiZWhh
dmlvciBhbmQgdXNlIGEgZHVyYXRpb24gb2YgMTAwIG1zIGZvciBhbnkgZnJhbWVzIHRoYXQgc3Bl
Y2lmeQotICAgIC8vIGEgZHVyYXRpb24gb2YgPD0gMTAgbXMuIFNlZSA8cmRhcjovL3Byb2JsZW0v
NzY4OTMwMD4gYW5kIDxodHRwOi8vd2Via2l0Lm9yZy9iLzM2MDgyPgotICAgIC8vIGZvciBtb3Jl
IGluZm9ybWF0aW9uLgotICAgIGlmIChkdXJhdGlvbiA8IDAuMDExZikKLSAgICAgICAgcmV0dXJu
IDAuMWY7Ci0gICAgcmV0dXJuIGR1cmF0aW9uOwotfQotCi1ib29sIEltYWdlRGVjb2Rlcjo6YWxs
b3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3QKLXsKLSAgICBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29w
eVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwgMCwgaW1hZ2VTb3VyY2VP
cHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIENGRGljdGlvbmFyeVJlZiBqZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0
PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwg
a0NHSW1hZ2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5KSk7Ci0gICAgaWYgKGpmaWZQcm9wZXJ0aWVz
KSB7Ci0gICAgICAgIENGQm9vbGVhblJlZiBpc1Byb2dDRkJvb2wgPSBzdGF0aWNfY2FzdDxDRkJv
b2xlYW5SZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGpmaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVBy
b3BlcnR5SkZJRklzUHJvZ3Jlc3NpdmUpKTsKLSAgICAgICAgaWYgKGlzUHJvZ0NGQm9vbCkgewot
ICAgICAgICAgICAgYm9vbCBpc1Byb2dyZXNzaXZlID0gQ0ZCb29sZWFuR2V0VmFsdWUoaXNQcm9n
Q0ZCb29sKTsKLSAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81
MTg0NjU1PiAtIEhhbmcgcmVuZGVyaW5nIHZlcnkgbGFyZ2UgcHJvZ3Jlc3NpdmUgSlBFRy4gRGVj
b2RpbmcgcHJvZ3Jlc3NpdmUKLSAgICAgICAgICAgIC8vIGltYWdlcyBoYW5ncyBmb3IgYSB2ZXJ5
IGxvbmcgdGltZSByaWdodCBub3cuIFVudGlsIHRoaXMgaXMgZml4ZWQsIGRvbid0IHN1Yi1zYW1w
bGUgcHJvZ3Jlc3NpdmUgaW1hZ2VzLiBUaGlzCi0gICAgICAgICAgICAvLyB3aWxsIGNhdXNlIHRo
ZW0gdG8gZmFpbCBvdXIgbGFyZ2UgaW1hZ2UgY2hlY2sgYW5kIHRoZXkgd29uJ3QgYmUgZGVjb2Rl
ZC4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSB1bmRlcmx5aW5nIGlzc3VlIGlz
IGZpeGVkICg8cmRhcjovL3Byb2JsZW0vNTE5MTQxOD4pCi0gICAgICAgICAgICByZXR1cm4gIWlz
UHJvZ3Jlc3NpdmU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29u
c3QKLXsKLSAgICBpZiAoIWZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIENGU3RyaW5nUmVmIGltYWdlVHlwZSA9IENHSW1hZ2VTb3VyY2VH
ZXRUeXBlKG1fbmF0aXZlRGVjb2Rlci5nZXQoKSk7Ci0KLSAgICAvLyBSZXR1cm4gZmFsc2UgaWYg
dGhlcmUgaXMgbm8gaW1hZ2UgdHlwZSBvciB0aGUgaW1hZ2UgdHlwZSBpcyBKUEVHLCBiZWNhdXNl
Ci0gICAgLy8gSlBFRyBkb2VzIG5vdCBzdXBwb3J0IGFscGhhIHRyYW5zcGFyZW5jeS4KLSAgICBp
ZiAoIWltYWdlVHlwZSB8fCBDRkVxdWFsKGltYWdlVHlwZSwgQ0ZTVFIoInB1YmxpYy5qcGVnIikp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogQ291bGQgcmV0dXJuIGZh
bHNlIGZvciBvdGhlciBub24tdHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cy4KLSAgICAvLyBGSVhN
RTogQ291bGQgbWF5YmUgcmV0dXJuIGZhbHNlIGZvciBhIEdJRiBGcmFtZSBpZiB3ZSBoYXZlIGVu
b3VnaCBpbmZvIGluIHRoZSBHSUYgcHJvcGVydGllcyBkaWN0aW9uYXJ5Ci0gICAgLy8gdG8gZGV0
ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGEgdHJhbnNwYXJlbnQgY29sb3Igd2FzIGRlZmluZWQuCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVkIEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0
SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNv
bnN0Ci17Ci0gICAgSW50U2l6ZSBmcmFtZVNpemUgPSBmcmFtZVNpemVBdEluZGV4KGluZGV4LCBz
dWJzYW1wbGluZ0xldmVsKTsKLSAgICByZXR1cm4gZnJhbWVTaXplLmFyZWEoKSAqIDQ7Ci19Ci0K
LU5hdGl2ZUltYWdlUHRyIEltYWdlRGVjb2Rlcjo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6
ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Ci17Ci0g
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3Jl
YXRlSW1hZ2VBdEluZGV4KG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwgaW5kZXgsIGltYWdlU291cmNl
T3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsKS5nZXQoKSkpOwotCi0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MzcxMTk4PiAtIENvcmVHcmFwaGljcyBjaGFuZ2VkIHRo
ZSBkZWZhdWx0IGNhY2hpbmcgYmVoYXZpb3VyIGluIGlPUyA0LjAgdG8ga0NHSW1hZ2VDYWNoaW5n
VHJhbnNpZW50Ci0gICAgLy8gd2hpY2ggY2F1c2VkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBm
b3IgdXMgc2luY2UgdGhlIGltYWdlcyBoYWQgdG8gYmUgcmVzYW1wbGVkL3JlY3JlYXRlZCBldmVy
eSB0aW1lIHdlIGNhbGxlZAotICAgIC8vIENHQ29udGV4dERyYXdJbWFnZS4gV2Ugbm93IHRlbGwg
Q0cgdG8gY2FjaGUgdGhlIGRyYXduIGltYWdlcy4gU2VlIGFsc28gPHJkYXI6Ly9wcm9ibGVtLzE0
MzY2NzU1PiAtCi0gICAgLy8gQ29yZUdyYXBoaWNzIG5lZWRzIHRvIHVuLWRlcHJlY2F0ZSBrQ0dJ
bWFnZUNhY2hpbmdUZW1wb3Jhcnkgc2luY2UgaXQncyBzdGlsbCBub3QgdGhlIGRlZmF1bHQuCi0j
aWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0j
ZW5kaWYKLSAgICAgICAgQ0dJbWFnZVNldENhY2hpbmdGbGFncyhpbWFnZS5nZXQoKSwga0NHSW1h
Z2VDYWNoaW5nVGVtcG9yYXJ5KTsKLSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwb3AKLSNlbmRpZgotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQotICAgIENG
U3RyaW5nUmVmIGltYWdlVVRJID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNvZGVy
LmdldCgpKTsKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgeGJtVVRJID0gQ0ZTVFIoInB1
YmxpYy54Yml0bWFwLWltYWdlIik7Ci0KLSAgICBpZiAoIWltYWdlVVRJKQotICAgICAgICByZXR1
cm4gaW1hZ2U7Ci0KLSAgICBpZiAoIUNGRXF1YWwoaW1hZ2VVVEksIHhibVVUSSkpCi0gICAgICAg
IHJldHVybiBpbWFnZTsKLQotICAgIC8vIElmIGl0IGlzIGFuIHhibSBpbWFnZSwgbWFzayBvdXQg
YWxsIHRoZSB3aGl0ZSBhcmVhcyB0byByZW5kZXIgdGhlbSB0cmFuc3BhcmVudC4KLSAgICBjb25z
dCBDR0Zsb2F0IG1hc2tpbmdDb2xvcnNbNl0gPSB7MjU1LCAyNTUsICAyNTUsIDI1NSwgMjU1LCAy
NTV9OwotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtYXNrZWRJbWFnZSA9IGFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZVdpdGhNYXNraW5nQ29sb3JzKGltYWdlLmdldCgpLCBtYXNraW5nQ29sb3JzKSk7
Ci0gICAgcmV0dXJuIG1hc2tlZEltYWdlID8gbWFza2VkSW1hZ2UgOiBpbWFnZTsKLX0KLQotdm9p
ZCBJbWFnZURlY29kZXI6OnNldERhdGEoQ0ZEYXRhUmVmIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKQotewotICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhKG1fbmF0aXZlRGVjb2Rlci5nZXQo
KSwgZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLX0KLQotdm9pZCBJbWFnZURlY29kZXI6OnNldERh
dGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICAvLyBPbiBNYWMgdGhlIE5TRGF0YSBpbnNpZGUgdGhlIFNoYXJlZEJ1
ZmZlciBjYW4gYmUgc2VjcmV0bHkgYXBwZW5kZWQgdG8gd2l0aG91dCB0aGUgU2hhcmVkQnVmZmVy
J3Mga25vd2xlZGdlLgotICAgIC8vIFdlIHVzZSBTaGFyZWRCdWZmZXIncyBhYmlsaXR5IHRvIHdy
YXAgaXRzZWxmIGluc2lkZSBDRkRhdGEgdG8gZ2V0IGFyb3VuZCB0aGlzLCBlbnN1cmluZyB0aGF0
IEltYWdlSU8gaXMKLSAgICAvLyByZWFsbHkgbG9va2luZyBhdCB0aGUgU2hhcmVkQnVmZmVyLgot
ICAgIHNldERhdGEoZGF0YS0+Y3JlYXRlQ0ZEYXRhKCkuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7
Ci0gICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURhdGEobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBkYXRh
LT5jcmVhdGVDRkRhdGEoKS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKLSNlbHNlCi0gICAgLy8g
Q3JlYXRlIGEgQ0dEYXRhUHJvdmlkZXIgdG8gd3JhcCB0aGUgU2hhcmVkQnVmZmVyLgotICAgIGRh
dGEtPnJlZigpOwotICAgIC8vIFdlIHVzZSB0aGUgR2V0Qnl0ZXNBdFBvc2l0aW9uIGNhbGxiYWNr
IHJhdGhlciB0aGFuIHRoZSBHZXRCeXRlUG9pbnRlciBvbmUgYmVjYXVzZSBTaGFyZWRCdWZmZXIK
LSAgICAvLyBkb2VzIG5vdCBwcm92aWRlIGEgd2F5IHRvIGxvY2sgZG93biB0aGUgYnl0ZSBwb2lu
dGVyIGFuZCBndWFyYW50ZWUgdGhhdCBpdCB3b24ndCBtb3ZlLCB3aGljaAotICAgIC8vIGlzIGEg
cmVxdWlyZW1lbnQgZm9yIHVzaW5nIHRoZSBHZXRCeXRlUG9pbnRlciBjYWxsYmFjay4KLSAgICBD
R0RhdGFQcm92aWRlckRpcmVjdENhbGxiYWNrcyBwcm92aWRlckNhbGxiYWNrcyA9IHsgMCwgMCwg
MCwgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uLCBzaGFyZWRCdWZmZXJSZWxlYXNlIH07
Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXIgPSBhZG9wdENG
KENHRGF0YVByb3ZpZGVyQ3JlYXRlRGlyZWN0KGRhdGEsIGRhdGEtPnNpemUoKSwgJnByb3ZpZGVy
Q2FsbGJhY2tzKSk7Ci0gICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURhdGFQcm92aWRlcihtX25hdGl2
ZURlY29kZXIuZ2V0KCksIGRhdGFQcm92aWRlci5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKLSNl
bmRpZgotfQotCiBJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2U6OkFscGhhT3B0
aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCiB7CiAgICAgLy8g
RklYTUU6IEFscGhhT3B0aW9uIGFuZCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBhcmUgaWdu
b3JlZC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275152</attachid>
            <date>2016-03-29 16:55:16 -0700</date>
            <delta_ts>2016-03-30 10:39:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155980-20160329165519.patch</filename>
            <type>text/plain</type>
            <size>48668</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODgxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE2LTAzLTI5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgTW92ZSB0aGUg
Q0cgSW1hZ2VEZWNvZGVyIGNsYXNzIGZyb20gSW1hZ2VTb3VyY2VDRy5jcHAgdG8gSW1hZ2VEZWNv
ZGVyQ0cuaCBhbmQgLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU1OTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWZ0ZXIgdGhpcyBzdGVwLCBJbWFnZVNvdXJjZS5jcHAgYW5kIEltYWdlU291cmNl
Q0cuY3BwIGxvb2sgdmVyeSBzaW1pbGFyCisgICAgICAgIHNvIHRoZXkgY2FuIGJlIG1lcmdlZCBp
biBvbmUgZmlsZS4gQWxsIHRoZSByZWR1bmRhbnQgY29kZSBpbiB0aGVzZSB0d28gZmlsZXMKKyAg
ICAgICAgY2FuIGJlIHJlbW92ZWQuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtl
OgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZURlY29kZXJDRy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW1hZ2VT
b3VyY2VPcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlU291cmNlT3B0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OnNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpzaGFyZWRCdWZmZXJSZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c3Vic2FtcGxp
bmdMZXZlbEZvclNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Ynl0ZXNE
ZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVy
Ojppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OmhvdFNwb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
Om9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZy
YW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6YWxs
b3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVy
Q0cuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6aW1hZ2VTb3VyY2VPcHRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9yaWVu
dGF0aW9uRnJvbVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVk
QnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNo
YXJlZEJ1ZmZlclJlbGVhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpJbWFnZURlY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNpemUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6aG90U3BvdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdElu
ZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6b3JpZW50YXRp
b25BdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJh
bWVEdXJhdGlvbkF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5k
ZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXREYXRhKTog
RGVsZXRlZC4KKwogMjAxNi0wMy0yOSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KIAogICAgICAgICBbRVM2XSBBZGQgc3VwcG9ydCBmb3IgU3ltYm9sLmlzQ29uY2F0U3By
ZWFkYWJsZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkocmV2aXNp
b24gMTk4ODEwKQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkod29y
a2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ludFBvaW50Q0cuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5j
bWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQkocmV2
aXNpb24gMTk4ODEwKQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UJKHdvcmtp
bmcgY29weSkKQEAgLTQwNSw2ICs0MDUsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW50UG9pbnRDRy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5ODgxMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMjI2Nyw2ICsyMjY3LDggQEAKIAkJNTNFRjc2NkMxNjUzMTk5NDAwNENCRTQ5IC8qIFNldHRp
bmdzTWFjcm9zLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1M0VGNzY2QTE2NTMwQTYxMDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNy
b3MuaCAqLzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBC
QzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJD
QTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1
YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FB
RjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKKwkJNTU1Qjg3RUQxQ0FB
RjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VE
ZWNvZGVyQ0cuaCAqLzsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRl
ZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsgfTsKIAkJNTcy
QTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0
OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU4MDM3MTYxMUE2NkYwMEEwMEJBRjUx
OSAvKiBDbGlwUmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1ODAzNzE1RjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwICovOyB9OwpA
QCAtOTgzMSw2ICs5ODMzLDggQEAKIAkJNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRp
bmdzTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldHRpbmdzTWFj
cm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3MDg1RjYwMzkwMDcz
NTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUwQTBCQzgwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJNTU1Qjg3RUExQ0FB
RjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFn
ZUNsaWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGll
bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIwMUM2RTU3MTkwMDlD
NjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaW11bGF0ZWRDbGljay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0Yy
MjFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2suY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjE3NzEsNiArMjE3NzUsOCBAQAogCQkJCTIyOTJCMjdCMTM1NjY2OTQw
MENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCiAJCQkJMjJCRDlGODAxMzUzNjRG
RTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCiAJCQkJQjI3NTM1MzAwQjA1Mzgx
NDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovLAorCQkJCTU1NUI4N0VBMUNBQUYwQUIwMDM0OTQy
NSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi8sCisJCQkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1
IC8qIEltYWdlRGVjb2RlckNHLmggKi8sCiAJCQkJQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8q
IEltYWdlU291cmNlQ0cuY3BwICovLAogCQkJCTRCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBJ
bWFnZVNvdXJjZUNHLmggKi8sCiAJCQkJNEIzNDgwOTEwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdl
U291cmNlQ0dNYWMubW0gKi8sCkBAIC0yNjI3MSw2ICsyNjI3Nyw3IEBACiAJCQkJNTE4NUZDOEQx
QkI0QzRFODAwMTI4OThGIC8qIElEQkZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTY5QTZD
QkFEMUM2QkU0MkMwMEI4MzZFOSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE4NUZDOEYxQkI0QzRFODAwMTI4OThGIC8qIElEQkdldFJlc3VsdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTU1Qjg3RUQxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2Rl
ckNHLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM5MTFCQjRDNEU4MDAxMjg5OEYgLyogSURC
SW5kZXguaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjc5OEYwMUJFODgwRTcwMDhBRTQ5MSAvKiBJ
REJJbmRleEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQzk1MUJCNEM0RTgwMDEyODk4
RiAvKiBJREJLZXkuaCBpbiBIZWFkZXJzICovLApAQCAtMzEyNTksNiArMzEyNjYsNyBAQAogCQkJ
CTk5Q0MwQjU5MThCRTk4NEEwMDZDRUJDQyAvKiBSZXBsYXlTZXNzaW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTk5Q0MwQjVCMThCRTk4NEEwMDZDRUJDQyAvKiBSZXBsYXlTZXNzaW9uU2VnbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RDRjEyNTFGMTJEMDAzRUYyNjkgLyogUmVz
ZXRJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTU1Qjg3RUMxQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzNEY3MTNFMEQ1
QTZGMjgwMDAxOEQ2OSAvKiBSZXNvdXJjZUVycm9yQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3RUU2ODQ2QjEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VFcnJvckNGLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxNEM3NjUwMENFOTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJjZUVycm9yTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZURlY29kZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRGVj
b2RlckNHLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgi
CisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKKyNpZiAh
UExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25T
ZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbmNsdWRl
IDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNlbmRpZgorCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKKyNpbXBvcnQgPEltYWdlSU8vQ0dJbWFnZVNvdXJjZVByaXZhdGUuaD4KKyNlbHNlCitjb25z
dCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZhY3RvciA9IENGU1RSKCJrQ0dJ
bWFnZVNvdXJjZVN1YnNhbXBsZUZhY3RvciIpOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdVbmNsYW1w
ZWREZWxheVRpbWUgPSBDRlNUUigiVW5jbGFtcGVkRGVsYXlUaW1lIik7Citjb25zdCBDRlN0cmlu
Z1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSA9IENGU1RSKCJEZWxheVRp
bWUiKTsKK2NvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HTG9vcENv
dW50ID0gQ0ZTVFIoIkxvb3BDb3VudCIpOworCitjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNv
dXJjZVNob3VsZFByZWZlclJHQjMyID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVy
UkdCMzIiKTsKK2NvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU2tpcE1ldGFkYXRhID0g
Q0ZTVFIoImtDR0ltYWdlU291cmNlU2tpcE1ldGFkYXRhIik7CisKK3N0YXRpYyBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBjcmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMoU3Vic2FtcGxpbmdMZXZl
bCBzdWJzYW1wbGluZ0xldmVsKQoreworICAgIGlmICghc3Vic2FtcGxpbmdMZXZlbCkgeworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBudW1PcHRpb25zID0gMzsKKyAgICAgICAgY29uc3Qgdm9pZCog
a2V5c1tudW1PcHRpb25zXSA9IHsga0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZSwga0NHSW1hZ2VT
b3VyY2VTaG91bGRQcmVmZXJSR0IzMiwga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgfTsKKyAg
ICAgICAgY29uc3Qgdm9pZCogdmFsdWVzW251bU9wdGlvbnNdID0geyBrQ0ZCb29sZWFuVHJ1ZSwg
a0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlIH07CisgICAgICAgIHJldHVybiBDRkRpY3Rp
b25hcnlDcmVhdGUobnVsbHB0ciwga2V5cywgdmFsdWVzLCBudW1PcHRpb25zLCAma0NGVHlwZURp
Y3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsK
KyAgICB9CisgICAgCisgICAgc2hvcnQgY29uc3RyYWluZWRTdWJzYW1wbGluZ0xldmVsID0gc3Rk
OjptaW48c2hvcnQ+KDMsIHN0ZDo6bWF4PHNob3J0PigwLCBzdWJzYW1wbGluZ0xldmVsKSk7Cisg
ICAgaW50IHN1YnNhbXBsZUludCA9IDEgPDwgY29uc3RyYWluZWRTdWJzYW1wbGluZ0xldmVsOyAv
LyBbMC4uM10gPT4gWzEsIDIsIDQsIDhdCisgICAgCisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVm
PiBzdWJzYW1wbGVOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZO
dW1iZXJJbnRUeXBlLCAgJnN1YnNhbXBsZUludCkpOworICAgIGNvbnN0IENGSW5kZXggbnVtT3B0
aW9ucyA9IDQ7CisgICAgY29uc3Qgdm9pZCoga2V5c1tudW1PcHRpb25zXSA9IHsga0NHSW1hZ2VT
b3VyY2VTaG91bGRDYWNoZSwga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiwga0NHSW1h
Z2VTb3VyY2VTa2lwTWV0YWRhdGEsIGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yIH07Cisg
ICAgY29uc3Qgdm9pZCogdmFsdWVzW251bU9wdGlvbnNdID0geyBrQ0ZCb29sZWFuVHJ1ZSwga0NG
Qm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBzdWJzYW1wbGVOdW1iZXIuZ2V0KCkgfTsKKyAg
ICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUobnVsbHB0ciwga2V5cywgdmFsdWVz
LCBudW1PcHRpb25zLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiBpbWFnZVNvdXJjZU9wdGlvbnMoU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xl
dmVsID0gMCkKK3sKKyAgICBpZiAoc3Vic2FtcGxpbmdMZXZlbCkKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZUltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsKTsKKyAgICAKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+IG9wdGlvbnMgPSBj
cmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMoMCk7CisgICAgcmV0dXJuIG9wdGlvbnM7Cit9CisKK3N0
YXRpYyBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMoQ0ZEaWN0aW9u
YXJ5UmVmIGltYWdlUHJvcGVydGllcykKK3sKKyAgICBBU1NFUlQoaW1hZ2VQcm9wZXJ0aWVzKTsK
KyAgICBDRk51bWJlclJlZiBvcmllbnRhdGlvblByb3BlcnR5ID0gKENGTnVtYmVyUmVmKUNGRGlj
dGlvbmFyeUdldFZhbHVlKGltYWdlUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eU9yaWVudGF0
aW9uKTsKKyAgICBpZiAoIW9yaWVudGF0aW9uUHJvcGVydHkpCisgICAgICAgIHJldHVybiBJbWFn
ZU9yaWVudGF0aW9uKCk7CisgICAgCisgICAgaW50IGV4aWZWYWx1ZTsKKyAgICBDRk51bWJlckdl
dFZhbHVlKG9yaWVudGF0aW9uUHJvcGVydHksIGtDRk51bWJlckludFR5cGUsICZleGlmVmFsdWUp
OworICAgIHJldHVybiBJbWFnZU9yaWVudGF0aW9uOjpmcm9tRVhJRlZhbHVlKGV4aWZWYWx1ZSk7
Cit9CisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCitzaXplX3Qgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNB
dFBvc2l0aW9uKHZvaWQqIGluZm8sIHZvaWQqIGJ1ZmZlciwgb2ZmX3QgcG9zaXRpb24sIHNpemVf
dCBjb3VudCkKK3sKKyAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0
PFNoYXJlZEJ1ZmZlcio+KGluZm8pOworICAgIHNpemVfdCBzb3VyY2VTaXplID0gc2hhcmVkQnVm
ZmVyLT5zaXplKCk7CisgICAgaWYgKHBvc2l0aW9uID49IHNvdXJjZVNpemUpCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IHNoYXJlZEJ1ZmZlci0+ZGF0
YSgpICsgcG9zaXRpb247CisgICAgc2l6ZV90IGFtb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oY291
bnQsIHNvdXJjZVNpemUgLSBwb3NpdGlvbik7CisgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBh
bW91bnQpOworICAgIHJldHVybiBhbW91bnQ7Cit9CisKK3ZvaWQgc2hhcmVkQnVmZmVyUmVsZWFz
ZSh2b2lkKiBpbmZvKQoreworICAgIFNoYXJlZEJ1ZmZlciogc2hhcmVkQnVmZmVyID0gc3RhdGlj
X2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5mbyk7CisgICAgc2hhcmVkQnVmZmVyLT5kZXJlZigpOwor
fQorI2VuZGlmCisKK0ltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKCkKK3sKKyAgICBtX25hdGl2
ZURlY29kZXIgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbmNyZW1lbnRhbChudWxscHRy
KSk7Cit9CisKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VEZWNvZGVyOjpzdWJzYW1wbGluZ0xldmVs
Rm9yU2NhbGUoZmxvYXQgc2NhbGUsIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11bVN1YnNhbXBsaW5n
TGV2ZWwpCit7CisgICAgLy8gVGhlcmUgYXJlIGZvdXIgc3Vic2FtcGxpbmcgbGV2ZWxzOiAwID0g
MXgsIDEgPSAwLjV4LCAyID0gMC4yNXgsIDMgPSAwLjEyNXguCisgICAgZmxvYXQgY2xhbXBlZFNj
YWxlID0gc3RkOjptYXg8ZmxvYXQ+KDAuMTI1LCBzdGQ6Om1pbjxmbG9hdD4oMSwgc2NhbGUpKTsK
KyAgICBTdWJzYW1wbGluZ0xldmVsIHJlc3VsdCA9IGNlaWxmKGxvZzJmKDEgLyBjbGFtcGVkU2Nh
bGUpKTsKKyAgICBBU1NFUlQocmVzdWx0ID49MCAmJiByZXN1bHQgPD0gMyk7CisgICAgcmV0dXJu
IHN0ZDo6bWluKHJlc3VsdCwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOworfQorCitzaXplX3Qg
SW1hZ2VEZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKQoreworICAg
IC8vIE1lYXN1cmVkIGJ5IHRyYWNpbmcgbWFsbG9jL2NhbGxvYyBjYWxscyBvbiBNYWMgT1MgMTAu
Ni42LCB4ODZfNjQuCisgICAgLy8gQSBub24temVybyB2YWx1ZSBlbnN1cmVzIGNhY2hlZCBpbWFn
ZXMgd2l0aCBubyBkZWNvZGVkIGZyYW1lcyBzdGlsbCBlbnRlcgorICAgIC8vIHRoZSBsaXZlIGRl
Y29kZWQgcmVzb3VyY2VzIGxpc3Qgd2hlbiB0aGUgQ0dJbWFnZVNvdXJjZSBkZWNvZGVzIGltYWdl
CisgICAgLy8gcHJvcGVydGllcywgYWxsb3dpbmcgdGhlIGNhY2hlIHRvIHBydW5lIHRoZSBwYXJ0
aWFsbHkgZGVjb2RlZCBpbWFnZS4KKyAgICAvLyBUaGlzIHZhbHVlIGlzIGxpa2VseSB0byBiZSBp
bmFjY3VyYXRlIG9uIG90aGVyIHBsYXRmb3JtcywgYnV0IHRoZSBvdmVyYWxsCisgICAgLy8gYmVo
YXZpb3IgaXMgdW5jaGFuZ2VkLgorICAgIHJldHVybiAxMzA4ODsKK30KKworU3RyaW5nIEltYWdl
RGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAoreworICAgIENGU3RyaW5nUmVmIGlt
YWdlU291cmNlVHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fbmF0aXZlRGVjb2Rlci5nZXQo
KSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnByZWZlcnJlZEV4dGVuc2lvbkZvckltYWdlU291cmNl
VHlwZShpbWFnZVNvdXJjZVR5cGUpOworfQorCitib29sIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZh
aWxhYmxlKCkgY29uc3QKK3sKKyAgICAvLyBSYWduYXJvcyB5ZWxsczogVE9PIFNPT04hIFlvdSBo
YXZlIGF3YWtlbmVkIG1lIFRPTyBTT09OLCBFeGVjdXR1cyEKKyAgICBpZiAoQ0dJbWFnZVNvdXJj
ZUdldFN0YXR1cyhtX25hdGl2ZURlY29kZXIuZ2V0KCkpIDwga0NHSW1hZ2VTdGF0dXNJbmNvbXBs
ZXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gaW1hZ2UwUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9w
ZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCksIDAsIGltYWdlU291cmNlT3B0aW9u
cygpLmdldCgpKSk7CisgICAgaWYgKCFpbWFnZTBQcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFBy
b3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKQorICAgICYmIENGRGlj
dGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVy
dHlQaXhlbEhlaWdodCk7Cit9CisKK0ludFNpemUgSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29uc3QK
K3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zaXplID0gZnJhbWVTaXpl
QXRJbmRleCgwLCAwKTsKKyAgICByZXR1cm4gbV9zaXplOworfQorCitzaXplX3QgSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldENv
dW50KG1fbmF0aXZlRGVjb2Rlci5nZXQoKSk7Cit9CisKK2ludCBJbWFnZURlY29kZXI6OnJlcGV0
aXRpb25Db3VudCgpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJv
cGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzKG1fbmF0aXZlRGVj
b2Rlci5nZXQoKSwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXByb3Bl
cnRpZXMpCisgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7CisgICAgCisgICAgQ0ZE
aWN0aW9uYXJ5UmVmIGdpZlByb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFy
eUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlHSUZEaWN0aW9uYXJ5
KTsKKyAgICBpZiAoZ2lmUHJvcGVydGllcykgeworICAgICAgICBDRk51bWJlclJlZiBudW0gPSAo
Q0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGllcywga0NHSW1hZ2VQ
cm9wZXJ0eUdJRkxvb3BDb3VudCk7CisgICAgICAgIAorICAgICAgICAvLyBObyBwcm9wZXJ0eSBt
ZWFucyBsb29wIG9uY2UuCisgICAgICAgIGlmICghbnVtKQorICAgICAgICAgICAgcmV0dXJuIGNB
bmltYXRpb25Mb29wT25jZTsKKyAgICAgICAgCisgICAgICAgIGludCBsb29wQ291bnQ7CisgICAg
ICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmbG9vcENvdW50KTsK
KyAgICAgICAgCisgICAgICAgIC8vIEEgcHJvcGVydHkgd2l0aCB2YWx1ZSAwIG1lYW5zIGxvb3Ag
Zm9yZXZlci4KKyAgICAgICAgcmV0dXJuIGxvb3BDb3VudCA/IGxvb3BDb3VudCA6IGNBbmltYXRp
b25Mb29wSW5maW5pdGU7CisgICAgfQorICAgIAorICAgIENGRGljdGlvbmFyeVJlZiBwbmdQcm9w
ZXJ0aWVzID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVz
LmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UE5HRGljdGlvbmFyeSk7CisgICAgaWYgKHBuZ1Byb3Bl
cnRpZXMpIHsKKyAgICAgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlv
bmFyeUdldFZhbHVlKHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HTG9v
cENvdW50KTsKKyAgICAgICAgaWYgKCFudW0pCisgICAgICAgICAgICByZXR1cm4gY0FuaW1hdGlv
bkxvb3BPbmNlOworICAgICAgICAKKyAgICAgICAgaW50IGxvb3BDb3VudDsKKyAgICAgICAgQ0ZO
dW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZsb29wQ291bnQpOworICAgICAg
ICByZXR1cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJbmZpbml0ZTsK
KyAgICB9CisgICAgCisgICAgLy8gVHVybnMgb3V0IHdlJ3JlIG5vdCBhbiBhbmltYXRlZCBpbWFn
ZSBhZnRlciBhbGwsIHNvIHdlIGRvbid0IGFuaW1hdGUuCisgICAgcmV0dXJuIGNBbmltYXRpb25O
b25lOworfQorCitib29sIEltYWdlRGVjb2Rlcjo6aG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkg
Y29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRv
cHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2Rlci5n
ZXQoKSwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXByb3BlcnRp
ZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpbnQgeCA9IC0xLCB5ID0gLTE7
CisgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KHByb3BlcnRpZXMuZ2V0KCksIENGU1RSKCJob3RzcG90WCIpKTsKKyAgICBpZiAoIW51bSB8fCAh
Q0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ4KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRW
YWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBDRlNUUigiaG90c3BvdFkiKSk7CisgICAgaWYgKCFudW0g
fHwgIUNGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoeCA8IDAgfHwgeSA8IDApCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBob3RTcG90ID0gSW50UG9pbnQoeCwgeSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0ludFNpemUgSW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KHNp
emVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAorewor
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1h
Z2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbmRl
eCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7CisgICAgCisg
ICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIGludCB3
aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7CisgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENG
TnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdl
UHJvcGVydHlQaXhlbFdpZHRoKTsKKyAgICBpZiAobnVtKQorICAgICAgICBDRk51bWJlckdldFZh
bHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKKyAgICAKKyAgICBudW0gPSAoQ0ZO
dW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQ
cm9wZXJ0eVBpeGVsSGVpZ2h0KTsKKyAgICBpZiAobnVtKQorICAgICAgICBDRk51bWJlckdldFZh
bHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmhlaWdodCk7CisgICAgCisgICAgcmV0dXJuIElu
dFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29t
cGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoZnJhbWVDb3Vu
dCgpKTsKKyAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldFN0YXR1c0F0SW5kZXgobV9uYXRpdmVE
ZWNvZGVyLmdldCgpLCBpbmRleCkgPT0ga0NHSW1hZ2VTdGF0dXNDb21wbGV0ZTsKK30KKworSW1h
Z2VPcmllbnRhdGlvbiBJbWFnZURlY29kZXI6Om9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5k
ZXgpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9
IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29k
ZXIuZ2V0KCksIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICgh
cHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKKyAgICAKKyAg
ICByZXR1cm4gb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLmdldCgpKTsKK30K
KworZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgp
IGNvbnN0Cit7CisgICAgZmxvYXQgZHVyYXRpb24gPSAwOworICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGll
c0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25z
KCkuZ2V0KCkpKTsKKyAgICBpZiAocHJvcGVydGllcykgeworICAgICAgICBDRkRpY3Rpb25hcnlS
ZWYgZ2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
cHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRpY3Rpb25hcnkpOworICAgICAg
ICBpZiAoZ2lmUHJvcGVydGllcykgeworICAgICAgICAgICAgaWYgKENGTnVtYmVyUmVmIG51bSA9
IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFn
ZVByb3BlcnR5R0lGVW5jbGFtcGVkRGVsYXlUaW1lKSkgeworICAgICAgICAgICAgICAgIC8vIFVz
ZSB0aGUgdW5jbGFtcGVkIGZyYW1lIGRlbGF5IGlmIGl0IGV4aXN0cy4KKyAgICAgICAgICAgICAg
ICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAmZHVyYXRpb24pOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eUdJRkRlbGF5
VGltZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGNsYW1wZWQgZnJh
bWUgZGVsYXkgaWYgdGhlIHVuY2xhbXBlZCBmcmFtZSBkZWxheSBkb2VzIG5vdCBleGlzdC4KKyAg
ICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAm
ZHVyYXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBD
RkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBOR0RpY3Rpb25h
cnkpOworICAgICAgICBpZiAocG5nUHJvcGVydGllcykgeworICAgICAgICAgICAgaWYgKENGTnVt
YmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0
aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBlZERlbGF5VGltZSkpCisgICAg
ICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1
cmF0aW9uKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJl
clJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVBy
b3BlcnR5QVBOR0RlbGF5VGltZSkpCisgICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShu
dW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICAvLyBNYW55IGFubm95aW5nIGFkcyBzcGVjaWZ5IGEgMCBkdXJhdGlvbiB0byBtYWtl
IGFuIGltYWdlIGZsYXNoIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCisgICAgLy8gV2UgZm9sbG93
IEZpcmVmb3gncyBiZWhhdmlvciBhbmQgdXNlIGEgZHVyYXRpb24gb2YgMTAwIG1zIGZvciBhbnkg
ZnJhbWVzIHRoYXQgc3BlY2lmeQorICAgIC8vIGEgZHVyYXRpb24gb2YgPD0gMTAgbXMuIFNlZSA8
cmRhcjovL3Byb2JsZW0vNzY4OTMwMD4gYW5kIDxodHRwOi8vd2Via2l0Lm9yZy9iLzM2MDgyPgor
ICAgIC8vIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIGlmIChkdXJhdGlvbiA8IDAuMDExZikK
KyAgICAgICAgcmV0dXJuIDAuMWY7CisgICAgcmV0dXJuIGR1cmF0aW9uOworfQorCitib29sIElt
YWdlRGVjb2Rlcjo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3QK
K3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihD
R0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwg
MCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXByb3BlcnRpZXMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBDRkRpY3Rpb25hcnlSZWYgamZpZlByb3Bl
cnRpZXMgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVl
KHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlKRklGRGljdGlvbmFyeSkpOworICAg
IGlmIChqZmlmUHJvcGVydGllcykgeworICAgICAgICBDRkJvb2xlYW5SZWYgaXNQcm9nQ0ZCb29s
ID0gc3RhdGljX2Nhc3Q8Q0ZCb29sZWFuUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShqZmlmUHJv
cGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eUpGSUZJc1Byb2dyZXNzaXZlKSk7CisgICAgICAgIGlm
IChpc1Byb2dDRkJvb2wpIHsKKyAgICAgICAgICAgIGJvb2wgaXNQcm9ncmVzc2l2ZSA9IENGQm9v
bGVhbkdldFZhbHVlKGlzUHJvZ0NGQm9vbCk7CisgICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZv
ciA8cmRhcjovL3Byb2JsZW0vNTE4NDY1NT4gLSBIYW5nIHJlbmRlcmluZyB2ZXJ5IGxhcmdlIHBy
b2dyZXNzaXZlIEpQRUcuIERlY29kaW5nIHByb2dyZXNzaXZlCisgICAgICAgICAgICAvLyBpbWFn
ZXMgaGFuZ3MgZm9yIGEgdmVyeSBsb25nIHRpbWUgcmlnaHQgbm93LiBVbnRpbCB0aGlzIGlzIGZp
eGVkLCBkb24ndCBzdWItc2FtcGxlIHByb2dyZXNzaXZlIGltYWdlcy4gVGhpcworICAgICAgICAg
ICAgLy8gd2lsbCBjYXVzZSB0aGVtIHRvIGZhaWwgb3VyIGxhcmdlIGltYWdlIGNoZWNrIGFuZCB0
aGV5IHdvbid0IGJlIGRlY29kZWQuCisgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2Ug
dW5kZXJseWluZyBpc3N1ZSBpcyBmaXhlZCAoPHJkYXI6Ly9wcm9ibGVtLzUxOTE0MTg+KQorICAg
ICAgICAgICAgcmV0dXJuICFpc1Byb2dyZXNzaXZlOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0
SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIGlmICghZnJhbWVJc0NvbXBsZXRlQXRJ
bmRleChpbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIENGU3RyaW5nUmVm
IGltYWdlVHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fbmF0aXZlRGVjb2Rlci5nZXQoKSk7
CisgICAgCisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZXJlIGlzIG5vIGltYWdlIHR5cGUgb3Ig
dGhlIGltYWdlIHR5cGUgaXMgSlBFRywgYmVjYXVzZQorICAgIC8vIEpQRUcgZG9lcyBub3Qgc3Vw
cG9ydCBhbHBoYSB0cmFuc3BhcmVuY3kuCisgICAgaWYgKCFpbWFnZVR5cGUgfHwgQ0ZFcXVhbChp
bWFnZVR5cGUsIENGU1RSKCJwdWJsaWMuanBlZyIpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIC8vIEZJWE1FOiBDb3VsZCByZXR1cm4gZmFsc2UgZm9yIG90aGVyIG5vbi10cmFu
c3BhcmVudCBpbWFnZSBmb3JtYXRzLgorICAgIC8vIEZJWE1FOiBDb3VsZCBtYXliZSByZXR1cm4g
ZmFsc2UgZm9yIGEgR0lGIEZyYW1lIGlmIHdlIGhhdmUgZW5vdWdoIGluZm8gaW4gdGhlIEdJRiBw
cm9wZXJ0aWVzIGRpY3Rpb25hcnkKKyAgICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qg
YSB0cmFuc3BhcmVudCBjb2xvciB3YXMgZGVmaW5lZC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGZy
YW1lU2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAg
IHJldHVybiBmcmFtZVNpemUuYXJlYSgpICogNDsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VE
ZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5n
TGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9uYXRp
dmVEZWNvZGVyLmdldCgpLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2
ZWwpLmdldCgpKSk7CisgICAgCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIDxyZGFyOi8vcHJv
YmxlbS83MzcxMTk4PiAtIENvcmVHcmFwaGljcyBjaGFuZ2VkIHRoZSBkZWZhdWx0IGNhY2hpbmcg
YmVoYXZpb3VyIGluIGlPUyA0LjAgdG8ga0NHSW1hZ2VDYWNoaW5nVHJhbnNpZW50CisgICAgLy8g
d2hpY2ggY2F1c2VkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBmb3IgdXMgc2luY2UgdGhlIGlt
YWdlcyBoYWQgdG8gYmUgcmVzYW1wbGVkL3JlY3JlYXRlZCBldmVyeSB0aW1lIHdlIGNhbGxlZAor
ICAgIC8vIENHQ29udGV4dERyYXdJbWFnZS4gV2Ugbm93IHRlbGwgQ0cgdG8gY2FjaGUgdGhlIGRy
YXduIGltYWdlcy4gU2VlIGFsc28gPHJkYXI6Ly9wcm9ibGVtLzE0MzY2NzU1PiAtCisgICAgLy8g
Q29yZUdyYXBoaWNzIG5lZWRzIHRvIHVuLWRlcHJlY2F0ZSBrQ0dJbWFnZUNhY2hpbmdUZW1wb3Jh
cnkgc2luY2UgaXQncyBzdGlsbCBub3QgdGhlIGRlZmF1bHQuCisjaWYgQ09NUElMRVIoQ0xBTkcp
CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisjZW5kaWYKKyAgICBDR0ltYWdl
U2V0Q2FjaGluZ0ZsYWdzKGltYWdlLmdldCgpLCBrQ0dJbWFnZUNhY2hpbmdUZW1wb3JhcnkpOwor
I2lmIENPTVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlm
CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorICAgIAorICAgIENGU3RyaW5nUmVmIGltYWdlVVRJ
ID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNvZGVyLmdldCgpKTsKKyAgICBzdGF0
aWMgY29uc3QgQ0ZTdHJpbmdSZWYgeGJtVVRJID0gQ0ZTVFIoInB1YmxpYy54Yml0bWFwLWltYWdl
Iik7CisgICAgCisgICAgaWYgKCFpbWFnZVVUSSkKKyAgICAgICAgcmV0dXJuIGltYWdlOworICAg
IAorICAgIGlmICghQ0ZFcXVhbChpbWFnZVVUSSwgeGJtVVRJKSkKKyAgICAgICAgcmV0dXJuIGlt
YWdlOworICAgIAorICAgIC8vIElmIGl0IGlzIGFuIHhibSBpbWFnZSwgbWFzayBvdXQgYWxsIHRo
ZSB3aGl0ZSBhcmVhcyB0byByZW5kZXIgdGhlbSB0cmFuc3BhcmVudC4KKyAgICBjb25zdCBDR0Zs
b2F0IG1hc2tpbmdDb2xvcnNbNl0gPSB7MjU1LCAyNTUsICAyNTUsIDI1NSwgMjU1LCAyNTV9Owor
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtYXNrZWRJbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNy
ZWF0ZVdpdGhNYXNraW5nQ29sb3JzKGltYWdlLmdldCgpLCBtYXNraW5nQ29sb3JzKSk7CisgICAg
cmV0dXJuIG1hc2tlZEltYWdlID8gbWFza2VkSW1hZ2UgOiBpbWFnZTsKK30KKwordm9pZCBJbWFn
ZURlY29kZXI6OnNldERhdGEoQ0ZEYXRhUmVmIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQor
eworICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhKG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwgZGF0
YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKwordm9pZCBJbWFnZURlY29kZXI6OnNldERhdGEoU2hh
cmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICAvLyBPbiBNYWMgdGhlIE5TRGF0YSBpbnNpZGUgdGhlIFNoYXJlZEJ1ZmZlciBj
YW4gYmUgc2VjcmV0bHkgYXBwZW5kZWQgdG8gd2l0aG91dCB0aGUgU2hhcmVkQnVmZmVyJ3Mga25v
d2xlZGdlLgorICAgIC8vIFdlIHVzZSBTaGFyZWRCdWZmZXIncyBhYmlsaXR5IHRvIHdyYXAgaXRz
ZWxmIGluc2lkZSBDRkRhdGEgdG8gZ2V0IGFyb3VuZCB0aGlzLCBlbnN1cmluZyB0aGF0IEltYWdl
SU8gaXMKKyAgICAvLyByZWFsbHkgbG9va2luZyBhdCB0aGUgU2hhcmVkQnVmZmVyLgorICAgIHNl
dERhdGEoZGF0YS0+Y3JlYXRlQ0ZEYXRhKCkuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CisjZWxz
ZQorICAgIC8vIENyZWF0ZSBhIENHRGF0YVByb3ZpZGVyIHRvIHdyYXAgdGhlIFNoYXJlZEJ1ZmZl
ci4KKyAgICBkYXRhLT5yZWYoKTsKKyAgICAvLyBXZSB1c2UgdGhlIEdldEJ5dGVzQXRQb3NpdGlv
biBjYWxsYmFjayByYXRoZXIgdGhhbiB0aGUgR2V0Qnl0ZVBvaW50ZXIgb25lIGJlY2F1c2UgU2hh
cmVkQnVmZmVyCisgICAgLy8gZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBsb2NrIGRvd24gdGhl
IGJ5dGUgcG9pbnRlciBhbmQgZ3VhcmFudGVlIHRoYXQgaXQgd29uJ3QgbW92ZSwgd2hpY2gKKyAg
ICAvLyBpcyBhIHJlcXVpcmVtZW50IGZvciB1c2luZyB0aGUgR2V0Qnl0ZVBvaW50ZXIgY2FsbGJh
Y2suCisgICAgQ0dEYXRhUHJvdmlkZXJEaXJlY3RDYWxsYmFja3MgcHJvdmlkZXJDYWxsYmFja3Mg
PSB7IDAsIDAsIDAsIHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbiwgc2hhcmVkQnVmZmVy
UmVsZWFzZSB9OworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVy
ID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZURpcmVjdChkYXRhLCBkYXRhLT5zaXplKCks
ICZwcm92aWRlckNhbGxiYWNrcykpOworICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhUHJvdmlk
ZXIobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBkYXRhUHJvdmlkZXIuZ2V0KCksIGFsbERhdGFSZWNl
aXZlZCk7CisjZW5kaWYKK30KKworfQorCisjZW5kaWYgLy8gVVNFKENHKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VEZWNvZGVyQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZURlY29kZXJD
R19oCisjZGVmaW5lIEltYWdlRGVjb2RlckNHX2gKKworI2luY2x1ZGUgIkltYWdlU291cmNlQ0cu
aCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SW1hZ2VEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBJbWFnZURlY29kZXIoKTsKKyAgICAKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4gY3JlYXRlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEltYWdlRGVjb2Rlcj4oKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIHNpemVfdCBieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKTsK
KyAgICBzdGF0aWMgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxv
YXQgc2NhbGUsIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOworICAg
IAorICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OworICAgIGJvb2wgaXNTaXpl
QXZhaWxhYmxlKCkgY29uc3Q7CisgICAgCisgICAgLy8gQWx3YXlzIG9yaWdpbmFsIHNpemUsIHdp
dGhvdXQgc3Vic2FtcGxpbmcuCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgc2l6ZV90
IGZyYW1lQ291bnQoKSBjb25zdDsKKyAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Q7Cisg
ICAgYm9vbCBob3RTcG90KEludFBvaW50JiBob3RTcG90KSBjb25zdDsKKyAgICAKKyAgICBJbnRT
aXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKSBjb25zdDsKKyAg
ICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICBJbWFnZU9y
aWVudGF0aW9uIG9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0OworICAgIAorICAgIGZs
b2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgYm9vbCBmcmFtZUhh
c0FscGhhQXRJbmRleChzaXplX3QpIGNvbnN0OworICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09m
RnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5k
ZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7CisgICAgCisgICAgTmF0aXZl
SW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVs
KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHNldERhdGEoQ0ZEYXRhUmVmLCBib29sIGFsbERhdGFS
ZWNlaXZlZCk7CisgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciosIGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBtdXRhYmxlIEludFNpemUgbV9zaXplOwor
ICAgIFJldGFpblB0cjxDR0ltYWdlU291cmNlUmVmPiBtX25hdGl2ZURlY29kZXI7Cit9OworCit9
CisKKyNlbmRpZiAvLyBJbWFnZURlY29kZXJDR19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAkocmV2aXNpb24g
MTk4ODEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3Vy
Y2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDQyNiArMjksMTIgQEAKICNpZiBVU0UoQ0cp
CiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2VDRy5oIgogCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJ
LmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0
aW9uLmgiCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi0jaWYgIVBMQVRGT1JNKElPUykKLSNpbmNs
dWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbHNlCi0j
aW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
I2VuZGlmCi0KLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8SW1hZ2VJTy9D
R0ltYWdlU291cmNlUHJpdmF0ZS5oPgotI2Vsc2UKLWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdl
U291cmNlU3Vic2FtcGxlRmFjdG9yID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFj
dG9yIik7Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotY2xhc3MgSW1hZ2VE
ZWNvZGVyIHsKLXB1YmxpYzoKLSAgICBJbWFnZURlY29kZXIoKTsKLSAgICAKLSAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEltYWdlRGVjb2Rlcj4oKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgc2l6ZV90IGJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpOwotICAgIHN0YXRp
YyBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwg
U3Vic2FtcGxpbmdMZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCk7Ci0KLSAgICBTdHJpbmcg
ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKLSAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNv
bnN0OwotICAgIAotICAgIC8vIEFsd2F5cyBvcmlnaW5hbCBzaXplLCB3aXRob3V0IHN1YnNhbXBs
aW5nLgotICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OwotICAgIHNpemVfdCBmcmFtZUNvdW50KCkg
Y29uc3Q7Ci0gICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0OwotICAgIGJvb2wgaG90U3Bv
dChJbnRQb2ludCYgaG90U3BvdCkgY29uc3Q7Ci0KLSAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5k
ZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKSBjb25zdDsKLSAgICBib29sIGZyYW1lSXNDb21w
bGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKLSAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uQXRJbmRleChzaXplX3QpIGNvbnN0OwotCi0gICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5k
ZXgoc2l6ZV90KSBjb25zdDsKLSAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCkg
Y29uc3Q7Ci0gICAgYm9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBj
b25zdDsKLSAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5n
TGV2ZWwgPSAwKSBjb25zdDsKLQotICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VB
dEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldERh
dGEoQ0ZEYXRhUmVmLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0gICAgdm9pZCBzZXREYXRhKFNo
YXJlZEJ1ZmZlciosIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKLQotcHJvdGVjdGVkOgotICAgIG11
dGFibGUgSW50U2l6ZSBtX3NpemU7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VTb3VyY2VSZWY+IG1f
bmF0aXZlRGVjb2RlcjsKLX07Ci0KLWNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJv
cGVydHlBUE5HVW5jbGFtcGVkRGVsYXlUaW1lID0gQ0ZTVFIoIlVuY2xhbXBlZERlbGF5VGltZSIp
OwotY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdEZWxheVRpbWUg
PSBDRlNUUigiRGVsYXlUaW1lIik7Ci1jb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVBy
b3BlcnR5QVBOR0xvb3BDb3VudCA9IENGU1RSKCJMb29wQ291bnQiKTsKLQotY29uc3QgQ0ZTdHJp
bmdSZWYga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiA9IENGU1RSKCJrQ0dJbWFnZVNv
dXJjZVNob3VsZFByZWZlclJHQjMyIik7Ci1jb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJj
ZVNraXBNZXRhZGF0YSA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSIpOwotCi1z
dGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25z
KFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKLXsKLSAgICBpZiAoIXN1YnNhbXBs
aW5nTGV2ZWwpIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgbnVtT3B0aW9ucyA9IDM7Ci0gICAg
ICAgIGNvbnN0IHZvaWQqIGtleXNbbnVtT3B0aW9uc10gPSB7IGtDR0ltYWdlU291cmNlU2hvdWxk
Q2FjaGUsIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIsIGtDR0ltYWdlU291cmNlU2tp
cE1ldGFkYXRhIH07Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tudW1PcHRpb25zXSA9IHsg
a0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSB9OwotICAgICAg
ICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKG51bGxwdHIsIGtleXMsIHZhbHVlcywgbnVtT3B0
aW9ucywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlW
YWx1ZUNhbGxCYWNrcyk7Ci0gICAgfQotCi0gICAgc2hvcnQgY29uc3RyYWluZWRTdWJzYW1wbGlu
Z0xldmVsID0gc3RkOjptaW48c2hvcnQ+KDMsIHN0ZDo6bWF4PHNob3J0PigwLCBzdWJzYW1wbGlu
Z0xldmVsKSk7Ci0gICAgaW50IHN1YnNhbXBsZUludCA9IDEgPDwgY29uc3RyYWluZWRTdWJzYW1w
bGluZ0xldmVsOyAvLyBbMC4uM10gPT4gWzEsIDIsIDQsIDhdCi0KLSAgICBSZXRhaW5QdHI8Q0ZO
dW1iZXJSZWY+IHN1YnNhbXBsZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0
ciwgIGtDRk51bWJlckludFR5cGUsICAmc3Vic2FtcGxlSW50KSk7Ci0gICAgY29uc3QgQ0ZJbmRl
eCBudW1PcHRpb25zID0gNDsKLSAgICBjb25zdCB2b2lkKiBrZXlzW251bU9wdGlvbnNdID0geyBr
Q0dJbWFnZVNvdXJjZVNob3VsZENhY2hlLCBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMy
LCBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSwga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0
b3IgfTsKLSAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJvb2xlYW5U
cnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUsIHN1YnNhbXBsZU51bWJlci5nZXQo
KSB9OwotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShudWxscHRyLCBrZXlz
LCB2YWx1ZXMsIG51bU9wdGlvbnMsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IGltYWdlU291cmNlT3B0aW9ucyhTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWwgPSAwKQotewotICAgIGlmIChzdWJzYW1wbGluZ0xldmVsKQotICAgICAgICBy
ZXR1cm4gY3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpOwotCi0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBvcHRpb25z
ID0gY3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKDApOwotICAgIHJldHVybiBvcHRpb25zOwotfQot
Ci1zdGF0aWMgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKENGRGlj
dGlvbmFyeVJlZiBpbWFnZVByb3BlcnRpZXMpCi17Ci0gICAgQVNTRVJUKGltYWdlUHJvcGVydGll
cyk7Ci0gICAgQ0ZOdW1iZXJSZWYgb3JpZW50YXRpb25Qcm9wZXJ0eSA9IChDRk51bWJlclJlZilD
RkRpY3Rpb25hcnlHZXRWYWx1ZShpbWFnZVByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlPcmll
bnRhdGlvbik7Ci0gICAgaWYgKCFvcmllbnRhdGlvblByb3BlcnR5KQotICAgICAgICByZXR1cm4g
SW1hZ2VPcmllbnRhdGlvbigpOwotCi0gICAgaW50IGV4aWZWYWx1ZTsKLSAgICBDRk51bWJlckdl
dFZhbHVlKG9yaWVudGF0aW9uUHJvcGVydHksIGtDRk51bWJlckludFR5cGUsICZleGlmVmFsdWUp
OwotICAgIHJldHVybiBJbWFnZU9yaWVudGF0aW9uOjpmcm9tRVhJRlZhbHVlKGV4aWZWYWx1ZSk7
Ci19Ci0KLSNpZiAhUExBVEZPUk0oQ09DT0EpCi1zaXplX3Qgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNB
dFBvc2l0aW9uKHZvaWQqIGluZm8sIHZvaWQqIGJ1ZmZlciwgb2ZmX3QgcG9zaXRpb24sIHNpemVf
dCBjb3VudCkKLXsKLSAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0
PFNoYXJlZEJ1ZmZlcio+KGluZm8pOwotICAgIHNpemVfdCBzb3VyY2VTaXplID0gc2hhcmVkQnVm
ZmVyLT5zaXplKCk7Ci0gICAgaWYgKHBvc2l0aW9uID49IHNvdXJjZVNpemUpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgY29uc3QgY2hhciogc291cmNlID0gc2hhcmVkQnVmZmVyLT5kYXRhKCkg
KyBwb3NpdGlvbjsKLSAgICBzaXplX3QgYW1vdW50ID0gc3RkOjptaW48c2l6ZV90Pihjb3VudCwg
c291cmNlU2l6ZSAtIHBvc2l0aW9uKTsKLSAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3Vu
dCk7Ci0gICAgcmV0dXJuIGFtb3VudDsKLX0KLQotdm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZv
aWQqIGluZm8pCi17Ci0gICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2Fz
dDxTaGFyZWRCdWZmZXIqPihpbmZvKTsKLSAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7Ci19Ci0j
ZW5kaWYKLSAgICAKLUltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKCkKLXsKLSAgICBtX25hdGl2
ZURlY29kZXIgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbmNyZW1lbnRhbChudWxscHRy
KSk7Ci19Ci0gICAgCi1TdWJzYW1wbGluZ0xldmVsIEltYWdlRGVjb2Rlcjo6c3Vic2FtcGxpbmdM
ZXZlbEZvclNjYWxlKGZsb2F0IHNjYWxlLCBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJzYW1w
bGluZ0xldmVsKQotewotICAgIC8vIFRoZXJlIGFyZSBmb3VyIHN1YnNhbXBsaW5nIGxldmVsczog
MCA9IDF4LCAxID0gMC41eCwgMiA9IDAuMjV4LCAzID0gMC4xMjV4LgotICAgIGZsb2F0IGNsYW1w
ZWRTY2FsZSA9IHN0ZDo6bWF4PGZsb2F0PigwLjEyNSwgc3RkOjptaW48ZmxvYXQ+KDEsIHNjYWxl
KSk7Ci0gICAgU3Vic2FtcGxpbmdMZXZlbCByZXN1bHQgPSBjZWlsZihsb2cyZigxIC8gY2xhbXBl
ZFNjYWxlKSk7Ci0gICAgQVNTRVJUKHJlc3VsdCA+PTAgJiYgcmVzdWx0IDw9IDMpOwotICAgIHJl
dHVybiBzdGQ6Om1pbihyZXN1bHQsIG1heGltdW1TdWJzYW1wbGluZ0xldmVsKTsKLX0KLQotc2l6
ZV90IEltYWdlRGVjb2Rlcjo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkKLXsK
LSAgICAvLyBNZWFzdXJlZCBieSB0cmFjaW5nIG1hbGxvYy9jYWxsb2MgY2FsbHMgb24gTWFjIE9T
IDEwLjYuNiwgeDg2XzY0LgotICAgIC8vIEEgbm9uLXplcm8gdmFsdWUgZW5zdXJlcyBjYWNoZWQg
aW1hZ2VzIHdpdGggbm8gZGVjb2RlZCBmcmFtZXMgc3RpbGwgZW50ZXIKLSAgICAvLyB0aGUgbGl2
ZSBkZWNvZGVkIHJlc291cmNlcyBsaXN0IHdoZW4gdGhlIENHSW1hZ2VTb3VyY2UgZGVjb2RlcyBp
bWFnZQotICAgIC8vIHByb3BlcnRpZXMsIGFsbG93aW5nIHRoZSBjYWNoZSB0byBwcnVuZSB0aGUg
cGFydGlhbGx5IGRlY29kZWQgaW1hZ2UuCi0gICAgLy8gVGhpcyB2YWx1ZSBpcyBsaWtlbHkgdG8g
YmUgaW5hY2N1cmF0ZSBvbiBvdGhlciBwbGF0Zm9ybXMsIGJ1dCB0aGUgb3ZlcmFsbAotICAgIC8v
IGJlaGF2aW9yIGlzIHVuY2hhbmdlZC4KLSAgICByZXR1cm4gMTMwODg7Ci19Ci0gICAgCi1TdHJp
bmcgSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Ci17Ci0gICAgQ0ZTdHJp
bmdSZWYgaW1hZ2VTb3VyY2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNv
ZGVyLmdldCgpKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6cHJlZmVycmVkRXh0ZW5zaW9uRm9ySW1h
Z2VTb3VyY2VUeXBlKGltYWdlU291cmNlVHlwZSk7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUoKSBjb25zdAotewotICAgIC8vIFJhZ25hcm9zIHllbGxzOiBUT08gU09P
TiEgWW91IGhhdmUgYXdha2VuZWQgbWUgVE9PIFNPT04sIEV4ZWN1dHVzIQotICAgIGlmIChDR0lt
YWdlU291cmNlR2V0U3RhdHVzKG1fbmF0aXZlRGVjb2Rlci5nZXQoKSkgPCBrQ0dJbWFnZVN0YXR1
c0luY29tcGxldGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IGltYWdlMFByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5
UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCAwLCBpbWFnZVNvdXJjZU9w
dGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghaW1hZ2UwUHJvcGVydGllcykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFBy
b3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKQotICAgICAgICAmJiBD
RkRpY3Rpb25hcnlDb250YWluc0tleShpbWFnZTBQcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVBy
b3BlcnR5UGl4ZWxIZWlnaHQpOwotfQotCi1JbnRTaXplIEltYWdlRGVjb2Rlcjo6c2l6ZSgpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fc2l6ZSA9IGZyYW1l
U2l6ZUF0SW5kZXgoMCwgMCk7Ci0gICAgcmV0dXJuIG1fc2l6ZTsKLX0KLQotc2l6ZV90IEltYWdl
RGVjb2Rlcjo6ZnJhbWVDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENHSW1hZ2VTb3VyY2VH
ZXRDb3VudChtX25hdGl2ZURlY29kZXIuZ2V0KCkpOwotfQotCi1pbnQgSW1hZ2VEZWNvZGVyOjpy
ZXBldGl0aW9uQ291bnQoKSBjb25zdAotewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllcyhtX25hdGl2
ZURlY29kZXIuZ2V0KCksIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7Ci0gICAgaWYgKCFw
cm9wZXJ0aWVzKQotICAgICAgICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOwotCi0gICAgQ0ZE
aWN0aW9uYXJ5UmVmIGdpZlByb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFy
eUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlHSUZEaWN0aW9uYXJ5
KTsKLSAgICBpZiAoZ2lmUHJvcGVydGllcykgewotICAgICAgICBDRk51bWJlclJlZiBudW0gPSAo
Q0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGllcywga0NHSW1hZ2VQ
cm9wZXJ0eUdJRkxvb3BDb3VudCk7Ci0KLSAgICAgICAgLy8gTm8gcHJvcGVydHkgbWVhbnMgbG9v
cCBvbmNlLgotICAgICAgICBpZiAoIW51bSkKLSAgICAgICAgICAgIHJldHVybiBjQW5pbWF0aW9u
TG9vcE9uY2U7Ci0KLSAgICAgICAgaW50IGxvb3BDb3VudDsKLSAgICAgICAgQ0ZOdW1iZXJHZXRW
YWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZsb29wQ291bnQpOwotCi0gICAgICAgIC8vIEEg
cHJvcGVydHkgd2l0aCB2YWx1ZSAwIG1lYW5zIGxvb3AgZm9yZXZlci4KLSAgICAgICAgcmV0dXJu
IGxvb3BDb3VudCA/IGxvb3BDb3VudCA6IGNBbmltYXRpb25Mb29wSW5maW5pdGU7Ci0gICAgfQot
Ci0gICAgQ0ZEaWN0aW9uYXJ5UmVmIHBuZ1Byb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNG
RGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQTkdE
aWN0aW9uYXJ5KTsKLSAgICBpZiAocG5nUHJvcGVydGllcykgewotICAgICAgICBDRk51bWJlclJl
ZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocG5nUHJvcGVydGllcywg
V2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdMb29wQ291bnQpOwotICAgICAgICBpZiAoIW51bSkK
LSAgICAgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7Ci0KLSAgICAgICAgaW50IGxv
b3BDb3VudDsKLSAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUs
ICZsb29wQ291bnQpOwotICAgICAgICByZXR1cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDogY0Fu
aW1hdGlvbkxvb3BJbmZpbml0ZTsKLSAgICB9Ci0KLSAgICAvLyBUdXJucyBvdXQgd2UncmUgbm90
IGFuIGFuaW1hdGVkIGltYWdlIGFmdGVyIGFsbCwgc28gd2UgZG9uJ3QgYW5pbWF0ZS4KLSAgICBy
ZXR1cm4gY0FuaW1hdGlvbk5vbmU7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyOjpob3RTcG90KElu
dFBvaW50JiBob3RTcG90KSBjb25zdAotewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgo
bV9uYXRpdmVEZWNvZGVyLmdldCgpLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwot
ICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IHgg
PSAtMSwgeSA9IC0xOwotICAgIENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rp
b25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBDRlNUUigiaG90c3BvdFgiKSk7Ci0gICAg
aWYgKCFudW0gfHwgIUNGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rp
b25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBDRlNUUigiaG90c3BvdFkiKSk7Ci0gICAg
aWYgKCFudW0gfHwgIUNGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh4IDwgMCB8fCB5IDwgMCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaG90U3BvdCA9IEludFBvaW50KHgsIHkpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1JbnRTaXplIEltYWdlRGVjb2Rlcjo6ZnJhbWVTaXplQXRJbmRleChz
aXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsK
LSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0lt
YWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwgaW5k
ZXgsIGltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsKS5nZXQoKSkpOwotCi0gICAg
aWYgKCFwcm9wZXJ0aWVzKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaW50IHdpZHRoID0g
MDsKLSAgICBpbnQgaGVpZ2h0ID0gMDsKLSAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJS
ZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0
eVBpeGVsV2lkdGgpOwotICAgIGlmIChudW0pCi0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVt
LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmd2lkdGgpOwotCi0gICAgbnVtID0gKENGTnVtYmVyUmVmKUNG
RGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhl
bEhlaWdodCk7Ci0gICAgaWYgKG51bSkKLSAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtD
Rk51bWJlckludFR5cGUsICZoZWlnaHQpOwotCi0gICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhl
aWdodCk7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNp
emVfdCBpbmRleCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZnJhbWVDb3VudCgpKTsKLSAgICByZXR1
cm4gQ0dJbWFnZVNvdXJjZUdldFN0YXR1c0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBp
bmRleCkgPT0ga0NHSW1hZ2VTdGF0dXNDb21wbGV0ZTsKLX0KLQotSW1hZ2VPcmllbnRhdGlvbiBJ
bWFnZURlY29kZXI6Om9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci17Ci0g
ICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFn
ZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4
LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAg
ICAgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKLQotICAgIHJldHVybiBvcmllbnRhdGlv
bkZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpOwotfQotCi1mbG9hdCBJbWFnZURlY29k
ZXI6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAgICBmbG9h
dCBkdXJhdGlvbiA9IDA7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGll
cyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURl
Y29kZXIuZ2V0KCksIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlm
IChwcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0g
KENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBr
Q0dJbWFnZVByb3BlcnR5R0lGRGljdGlvbmFyeSk7Ci0gICAgICAgIGlmIChnaWZQcm9wZXJ0aWVz
KSB7Ci0gICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGlj
dGlvbmFyeUdldFZhbHVlKGdpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1w
ZWREZWxheVRpbWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB1bmNsYW1wZWQgZnJh
bWUgZGVsYXkgaWYgaXQgZXhpc3RzLgotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUo
bnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShn
aWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5R0lGRGVsYXlUaW1lKSkgewotICAgICAgICAg
ICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgY2xhbXBlZCBmcmFtZSBkZWxheSBpZiB0aGUgdW5j
bGFtcGVkIGZyYW1lIGRlbGF5IGRvZXMgbm90IGV4aXN0LgotICAgICAgICAgICAgICAgIENGTnVt
YmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGll
cyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQo
KSwga0NHSW1hZ2VQcm9wZXJ0eVBOR0RpY3Rpb25hcnkpOwotICAgICAgICBpZiAocG5nUHJvcGVy
dGllcykgewotICAgICAgICAgICAgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilD
RkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5
QVBOR1VuY2xhbXBlZERlbGF5VGltZSkpCi0gICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1
ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShw
bmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSkpCi0gICAg
ICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1
cmF0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNw
ZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBw
b3NzaWJsZS4KLSAgICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1c2UgYSBk
dXJhdGlvbiBvZiAxMDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5Ci0gICAgLy8gYSBk
dXJhdGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0
dHA6Ly93ZWJraXQub3JnL2IvMzYwODI+Ci0gICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0g
ICAgaWYgKGR1cmF0aW9uIDwgMC4wMTFmKQotICAgICAgICByZXR1cm4gMC4xZjsKLSAgICByZXR1
cm4gZHVyYXRpb247Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZG
cmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdAotewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5k
ZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkp
OwotICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ0ZE
aWN0aW9uYXJ5UmVmIGpmaWZQcm9wZXJ0aWVzID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVm
PihDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5
SkZJRkRpY3Rpb25hcnkpKTsKLSAgICBpZiAoamZpZlByb3BlcnRpZXMpIHsKLSAgICAgICAgQ0ZC
b29sZWFuUmVmIGlzUHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0PENGQm9vbGVhblJlZj4oQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUoamZpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlKRklGSXNQcm9n
cmVzc2l2ZSkpOwotICAgICAgICBpZiAoaXNQcm9nQ0ZCb29sKSB7Ci0gICAgICAgICAgICBib29s
IGlzUHJvZ3Jlc3NpdmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShpc1Byb2dDRkJvb2wpOwotICAgICAg
ICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUxODQ2NTU+IC0gSGFuZyBy
ZW5kZXJpbmcgdmVyeSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVHLiBEZWNvZGluZyBwcm9ncmVzc2l2
ZQotICAgICAgICAgICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBhIHZlcnkgbG9uZyB0aW1lIHJpZ2h0
IG5vdy4gVW50aWwgdGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3ViLXNhbXBsZSBwcm9ncmVzc2l2ZSBp
bWFnZXMuIFRoaXMKLSAgICAgICAgICAgIC8vIHdpbGwgY2F1c2UgdGhlbSB0byBmYWlsIG91ciBs
YXJnZSBpbWFnZSBjaGVjayBhbmQgdGhleSB3b24ndCBiZSBkZWNvZGVkLgotICAgICAgICAgICAg
Ly8gRklYTUU6IFJlbW92ZSBvbmNlIHVuZGVybHlpbmcgaXNzdWUgaXMgZml4ZWQgKDxyZGFyOi8v
cHJvYmxlbS81MTkxNDE4PikKLSAgICAgICAgICAgIHJldHVybiAhaXNQcm9ncmVzc2l2ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEltYWdlRGVjb2Rl
cjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIGlmICgh
ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgQ0ZTdHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVE
ZWNvZGVyLmdldCgpKTsKLQotICAgIC8vIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyBubyBpbWFn
ZSB0eXBlIG9yIHRoZSBpbWFnZSB0eXBlIGlzIEpQRUcsIGJlY2F1c2UKLSAgICAvLyBKUEVHIGRv
ZXMgbm90IHN1cHBvcnQgYWxwaGEgdHJhbnNwYXJlbmN5LgotICAgIGlmICghaW1hZ2VUeXBlIHx8
IENGRXF1YWwoaW1hZ2VUeXBlLCBDRlNUUigicHVibGljLmpwZWciKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBDb3VsZCByZXR1cm4gZmFsc2UgZm9yIG90aGVyIG5v
bi10cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzLgotICAgIC8vIEZJWE1FOiBDb3VsZCBtYXliZSBy
ZXR1cm4gZmFsc2UgZm9yIGEgR0lGIEZyYW1lIGlmIHdlIGhhdmUgZW5vdWdoIGluZm8gaW4gdGhl
IEdJRiBwcm9wZXJ0aWVzIGRpY3Rpb25hcnkKLSAgICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBv
ciBub3QgYSB0cmFuc3BhcmVudCBjb2xvciB3YXMgZGVmaW5lZC4KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5k
ZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBJbnRT
aXplIGZyYW1lU2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwp
OwotICAgIHJldHVybiBmcmFtZVNpemUuYXJlYSgpICogNDsKLX0KLQotTmF0aXZlSW1hZ2VQdHIg
SW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNh
bXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgo
bV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBs
aW5nTGV2ZWwpLmdldCgpKSk7Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gPHJkYXI6Ly9w
cm9ibGVtLzczNzExOTg+IC0gQ29yZUdyYXBoaWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGlu
ZyBiZWhhdmlvdXIgaW4gaU9TIDQuMCB0byBrQ0dJbWFnZUNhY2hpbmdUcmFuc2llbnQKLSAgICAv
LyB3aGljaCBjYXVzZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUg
aW1hZ2VzIGhhZCB0byBiZSByZXNhbXBsZWQvcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVk
Ci0gICAgLy8gQ0dDb250ZXh0RHJhd0ltYWdlLiBXZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUg
ZHJhd24gaW1hZ2VzLiBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0vMTQzNjY3NTU+IC0KLSAgICAv
LyBDb3JlR3JhcGhpY3MgbmVlZHMgdG8gdW4tZGVwcmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBv
cmFyeSBzaW5jZSBpdCdzIHN0aWxsIG5vdCB0aGUgZGVmYXVsdC4KLSNpZiBDT01QSUxFUihDTEFO
RykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSNlbmRpZgotICAgICAgICBD
R0ltYWdlU2V0Q2FjaGluZ0ZsYWdzKGltYWdlLmdldCgpLCBrQ0dJbWFnZUNhY2hpbmdUZW1wb3Jh
cnkpOwotI2lmIENPTVBJTEVSKENMQU5HKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAot
I2VuZGlmCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQotCi0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VV
VEkgPSBDR0ltYWdlU291cmNlR2V0VHlwZShtX25hdGl2ZURlY29kZXIuZ2V0KCkpOwotICAgIHN0
YXRpYyBjb25zdCBDRlN0cmluZ1JlZiB4Ym1VVEkgPSBDRlNUUigicHVibGljLnhiaXRtYXAtaW1h
Z2UiKTsKLQotICAgIGlmICghaW1hZ2VVVEkpCi0gICAgICAgIHJldHVybiBpbWFnZTsKLQotICAg
IGlmICghQ0ZFcXVhbChpbWFnZVVUSSwgeGJtVVRJKSkKLSAgICAgICAgcmV0dXJuIGltYWdlOwot
Ci0gICAgLy8gSWYgaXQgaXMgYW4geGJtIGltYWdlLCBtYXNrIG91dCBhbGwgdGhlIHdoaXRlIGFy
ZWFzIHRvIHJlbmRlciB0aGVtIHRyYW5zcGFyZW50LgotICAgIGNvbnN0IENHRmxvYXQgbWFza2lu
Z0NvbG9yc1s2XSA9IHsyNTUsIDI1NSwgIDI1NSwgMjU1LCAyNTUsIDI1NX07Ci0gICAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IG1hc2tlZEltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aE1h
c2tpbmdDb2xvcnMoaW1hZ2UuZ2V0KCksIG1hc2tpbmdDb2xvcnMpKTsKLSAgICByZXR1cm4gbWFz
a2VkSW1hZ2UgPyBtYXNrZWRJbWFnZSA6IGltYWdlOwotfQotCi12b2lkIEltYWdlRGVjb2Rlcjo6
c2V0RGF0YShDRkRhdGFSZWYgZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgQ0dJ
bWFnZVNvdXJjZVVwZGF0ZURhdGEobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBkYXRhLCBhbGxEYXRh
UmVjZWl2ZWQpOwotfQotCi12b2lkIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAg
IC8vIE9uIE1hYyB0aGUgTlNEYXRhIGluc2lkZSB0aGUgU2hhcmVkQnVmZmVyIGNhbiBiZSBzZWNy
ZXRseSBhcHBlbmRlZCB0byB3aXRob3V0IHRoZSBTaGFyZWRCdWZmZXIncyBrbm93bGVkZ2UuCi0g
ICAgLy8gV2UgdXNlIFNoYXJlZEJ1ZmZlcidzIGFiaWxpdHkgdG8gd3JhcCBpdHNlbGYgaW5zaWRl
IENGRGF0YSB0byBnZXQgYXJvdW5kIHRoaXMsIGVuc3VyaW5nIHRoYXQgSW1hZ2VJTyBpcwotICAg
IC8vIHJlYWxseSBsb29raW5nIGF0IHRoZSBTaGFyZWRCdWZmZXIuCi0gICAgc2V0RGF0YShkYXRh
LT5jcmVhdGVDRkRhdGEoKS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKLSAgICBDR0ltYWdlU291
cmNlVXBkYXRlRGF0YShtX25hdGl2ZURlY29kZXIuZ2V0KCksIGRhdGEtPmNyZWF0ZUNGRGF0YSgp
LmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwotI2Vsc2UKLSAgICAvLyBDcmVhdGUgYSBDR0RhdGFQ
cm92aWRlciB0byB3cmFwIHRoZSBTaGFyZWRCdWZmZXIuCi0gICAgZGF0YS0+cmVmKCk7Ci0gICAg
Ly8gV2UgdXNlIHRoZSBHZXRCeXRlc0F0UG9zaXRpb24gY2FsbGJhY2sgcmF0aGVyIHRoYW4gdGhl
IEdldEJ5dGVQb2ludGVyIG9uZSBiZWNhdXNlIFNoYXJlZEJ1ZmZlcgotICAgIC8vIGRvZXMgbm90
IHByb3ZpZGUgYSB3YXkgdG8gbG9jayBkb3duIHRoZSBieXRlIHBvaW50ZXIgYW5kIGd1YXJhbnRl
ZSB0aGF0IGl0IHdvbid0IG1vdmUsIHdoaWNoCi0gICAgLy8gaXMgYSByZXF1aXJlbWVudCBmb3Ig
dXNpbmcgdGhlIEdldEJ5dGVQb2ludGVyIGNhbGxiYWNrLgotICAgIENHRGF0YVByb3ZpZGVyRGly
ZWN0Q2FsbGJhY2tzIHByb3ZpZGVyQ2FsbGJhY2tzID0geyAwLCAwLCAwLCBzaGFyZWRCdWZmZXJH
ZXRCeXRlc0F0UG9zaXRpb24sIHNoYXJlZEJ1ZmZlclJlbGVhc2UgfTsKLSAgICBSZXRhaW5QdHI8
Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJD
cmVhdGVEaXJlY3QoZGF0YSwgZGF0YS0+c2l6ZSgpLCAmcHJvdmlkZXJDYWxsYmFja3MpKTsKLSAg
ICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YVByb3ZpZGVyKG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwg
ZGF0YVByb3ZpZGVyLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwotI2VuZGlmCi19Ci0KIEltYWdl
U291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNl
OjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKIHsKICAgICAvLyBGSVhNRTogQWxwaGFPcHRp
b24gYW5kIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGFyZSBpZ25vcmVkLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275200</attachid>
            <date>2016-03-30 10:39:53 -0700</date>
            <delta_ts>2016-03-30 12:10:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155980-20160330103957.patch</filename>
            <type>text/plain</type>
            <size>48829</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE2LTAzLTMwICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgTW92ZSB0aGUg
Q0cgSW1hZ2VEZWNvZGVyIGNsYXNzIGZyb20gSW1hZ2VTb3VyY2VDRy5jcHAgdG8gSW1hZ2VEZWNv
ZGVyQ0cuaCBhbmQgLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU1OTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisg
ICAgICAgIEFmdGVyIHRoaXMgc3RlcCwgSW1hZ2VTb3VyY2UuY3BwIGFuZCBJbWFnZVNvdXJjZUNH
LmNwcCBsb29rIHZlcnkgc2ltaWxhcgorICAgICAgICBzbyB0aGV5IGNhbiBiZSBtZXJnZWQgaW4g
b25lIGZpbGUuIEFsbCB0aGUgcmVkdW5kYW50IGNvZGUgaW4gdGhlc2UgdHdvIGZpbGVzCisgICAg
ICAgIGNhbiBiZSByZW1vdmVkLgorCisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToK
KyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VE
ZWNvZGVyQ0cuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZVNvdXJjZUNHLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUltYWdlU291
cmNlT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjppbWFnZVNvdXJjZU9wdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6b3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
c2hhcmVkQnVmZmVyUmVsZWFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6Oklt
YWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnN1YnNhbXBsaW5n
TGV2ZWxGb3JTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmJ5dGVzRGVj
b2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjpob3RTcG90KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6ZnJhbWVTaXplQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpv
cmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFt
ZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmFsbG93
U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXI6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpj
cmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNH
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmltYWdlU291cmNlT3B0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcmllbnRh
dGlvbkZyb21Qcm9wZXJ0aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNoYXJlZEJ1
ZmZlckdldEJ5dGVzQXRQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzaGFy
ZWRCdWZmZXJSZWxlYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6SW1hZ2VEZWNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmhvdFNwb3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRl
eCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6Om9yaWVudGF0aW9u
QXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1l
RHVyYXRpb25BdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6IERl
bGV0ZWQuCisKIDIwMTYtMDMtMzAgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxl
LmNvbT4KIAogICAgICAgICBVc2UgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzIGluIHNj
cm9sbGJhci1yZWxhdGVkIGNvZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVX
aW4uY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5j
bWFrZQkocmV2aXNpb24gMTk4ODQxKQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VEZWNvZGVyQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybU1hYy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1h
Yy5jbWFrZQkocmV2aXNpb24gMTk4ODQxKQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMu
Y21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTQwNSw2ICs0MDUsNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VEZWNvZGVyQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5ODg0MSkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjI2Nyw2ICsyMjY3LDggQEAKIAkJNTNFRjc2NkMxNjUzMTk5NDAwNENC
RTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VGNzY2QTE2NTMwQTYxMDA0Q0JFNDkgLyog
U2V0dGluZ3NNYWNyb3MuaCAqLzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1
YWxpZmllZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9
OwogCQk1NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKKwkJ
NTU1Qjg3RUQxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0
MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLzsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5
IC8qIFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAq
LzsgfTsKIAkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2
RTVBNjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU4MDM3MTYxMUE2
NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1ODAzNzE1RjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3Qu
Y3BwICovOyB9OwpAQCAtOTgzNSw2ICs5ODM3LDggQEAKIAkJNTNFRjc2NkExNjUzMEE2MTAwNENC
RTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNldHRpbmdzTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3
MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJ
NTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJ
NTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVj
b2RlckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNH
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1
MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIw
MUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRDbGljay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE3NzksNiArMjE3ODMsOCBAQAogCQkJCTIyOTJC
MjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCiAJCQkJMjJC
RDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCiAJCQkJQjI3
NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovLAorCQkJCTU1NUI4N0VBMUNB
QUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi8sCisJCQkJNTU1Qjg3RUIxQ0FB
RjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggKi8sCiAJCQkJQjI3NTM1MzEwQjA1Mzgx
NDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cuY3BwICovLAogCQkJCTRCMzQ4MDkyMEVFRjUwRDQw
MEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggKi8sCiAJCQkJNEIzNDgwOTEwRUVGNTBENDAwQUMx
QjQxIC8qIEltYWdlU291cmNlQ0dNYWMubW0gKi8sCkBAIC0yNjI4NSw2ICsyNjI5MSw3IEBACiAJ
CQkJNTE4NUZDOEQxQkI0QzRFODAwMTI4OThGIC8qIElEQkZhY3RvcnkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTY5QTZDQkFEMUM2QkU0MkMwMEI4MzZFOSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDOEYxQkI0QzRFODAwMTI4OThGIC8qIElEQkdl
dFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU1Qjg3RUQxQ0FBRjBBQjAwMzQ5NDI1IC8q
IEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM5MTFCQjRDNEU4MDAx
Mjg5OEYgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjc5OEYwMUJFODgwRTcw
MDhBRTQ5MSAvKiBJREJJbmRleEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQzk1MUJC
NEM0RTgwMDEyODk4RiAvKiBJREJLZXkuaCBpbiBIZWFkZXJzICovLApAQCAtMzEyNzUsNiArMzEy
ODIsNyBAQAogCQkJCTk5Q0MwQjU5MThCRTk4NEEwMDZDRUJDQyAvKiBSZXBsYXlTZXNzaW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk5Q0MwQjVCMThCRTk4NEEwMDZDRUJDQyAvKiBSZXBsYXlT
ZXNzaW9uU2VnbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RDRjEyNTFGMTJEMDAz
RUYyNjkgLyogUmVzZXRJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTU1Qjg3RUMx
Q0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzNEY3MTNFMEQ1QTZGMjgwMDAxOEQ2OSAvKiBSZXNvdXJjZUVycm9yQmFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3RUU2ODQ2QjEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VFcnJvckNG
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3NjUwMENFOTIzNEUwMDdFRjNDRCAvKiBSZXNv
dXJjZUVycm9yTWFjLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVy
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlRGVjb2RlckNHLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZU9y
aWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgi
CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisKKyNpZiAhUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEku
aCIKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNlbmRpZgorCisjaWYgVVNFKEFQUExF
X0lOVEVSTkFMX1NESykKKyNpbXBvcnQgPEltYWdlSU8vQ0dJbWFnZVNvdXJjZVByaXZhdGUuaD4K
KyNlbHNlCitjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZhY3RvciA9
IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZhY3RvciIpOworI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0
eUFQTkdVbmNsYW1wZWREZWxheVRpbWUgPSBDRlNUUigiVW5jbGFtcGVkRGVsYXlUaW1lIik7Citj
b25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSA9IENG
U1RSKCJEZWxheVRpbWUiKTsKK2NvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVy
dHlBUE5HTG9vcENvdW50ID0gQ0ZTVFIoIkxvb3BDb3VudCIpOworCitjb25zdCBDRlN0cmluZ1Jl
ZiBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyID0gQ0ZTVFIoImtDR0ltYWdlU291cmNl
U2hvdWxkUHJlZmVyUkdCMzIiKTsKK2NvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU2tp
cE1ldGFkYXRhID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU2tpcE1ldGFkYXRhIik7CisKK3N0YXRp
YyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjcmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMoU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQoreworICAgIGlmICghc3Vic2FtcGxpbmdM
ZXZlbCkgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBudW1PcHRpb25zID0gMzsKKyAgICAgICAg
Y29uc3Qgdm9pZCoga2V5c1tudW1PcHRpb25zXSA9IHsga0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNo
ZSwga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiwga0NHSW1hZ2VTb3VyY2VTa2lwTWV0
YWRhdGEgfTsKKyAgICAgICAgY29uc3Qgdm9pZCogdmFsdWVzW251bU9wdGlvbnNdID0geyBrQ0ZC
b29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlIH07CisgICAgICAgIHJl
dHVybiBDRkRpY3Rpb25hcnlDcmVhdGUobnVsbHB0ciwga2V5cywgdmFsdWVzLCBudW1PcHRpb25z
LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVl
Q2FsbEJhY2tzKTsKKyAgICB9CisgICAgCisgICAgc2hvcnQgY29uc3RyYWluZWRTdWJzYW1wbGlu
Z0xldmVsID0gc3RkOjptaW48c2hvcnQ+KDMsIHN0ZDo6bWF4PHNob3J0PigwLCBzdWJzYW1wbGlu
Z0xldmVsKSk7CisgICAgaW50IHN1YnNhbXBsZUludCA9IDEgPDwgY29uc3RyYWluZWRTdWJzYW1w
bGluZ0xldmVsOyAvLyBbMC4uM10gPT4gWzEsIDIsIDQsIDhdCisgICAgCisgICAgUmV0YWluUHRy
PENGTnVtYmVyUmVmPiBzdWJzYW1wbGVOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51
bGxwdHIsICBrQ0ZOdW1iZXJJbnRUeXBlLCAgJnN1YnNhbXBsZUludCkpOworICAgIGNvbnN0IENG
SW5kZXggbnVtT3B0aW9ucyA9IDQ7CisgICAgY29uc3Qgdm9pZCoga2V5c1tudW1PcHRpb25zXSA9
IHsga0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZSwga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJS
R0IzMiwga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEsIGtDR0ltYWdlU291cmNlU3Vic2FtcGxl
RmFjdG9yIH07CisgICAgY29uc3Qgdm9pZCogdmFsdWVzW251bU9wdGlvbnNdID0geyBrQ0ZCb29s
ZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBzdWJzYW1wbGVOdW1iZXIu
Z2V0KCkgfTsKKyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUobnVsbHB0ciwg
a2V5cywgdmFsdWVzLCBudW1PcHRpb25zLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisKK3N0YXRpYyBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVNvdXJjZU9wdGlvbnMoU3Vic2FtcGxpbmdMZXZlbCBz
dWJzYW1wbGluZ0xldmVsID0gMCkKK3sKKyAgICBpZiAoc3Vic2FtcGxpbmdMZXZlbCkKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsKTsKKyAg
ICAKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+
IG9wdGlvbnMgPSBjcmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMoMCk7CisgICAgcmV0dXJuIG9wdGlv
bnM7Cit9CisKK3N0YXRpYyBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uRnJvbVByb3BlcnRp
ZXMoQ0ZEaWN0aW9uYXJ5UmVmIGltYWdlUHJvcGVydGllcykKK3sKKyAgICBBU1NFUlQoaW1hZ2VQ
cm9wZXJ0aWVzKTsKKyAgICBDRk51bWJlclJlZiBvcmllbnRhdGlvblByb3BlcnR5ID0gKENGTnVt
YmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGltYWdlUHJvcGVydGllcywga0NHSW1hZ2VQcm9w
ZXJ0eU9yaWVudGF0aW9uKTsKKyAgICBpZiAoIW9yaWVudGF0aW9uUHJvcGVydHkpCisgICAgICAg
IHJldHVybiBJbWFnZU9yaWVudGF0aW9uKCk7CisgICAgCisgICAgaW50IGV4aWZWYWx1ZTsKKyAg
ICBDRk51bWJlckdldFZhbHVlKG9yaWVudGF0aW9uUHJvcGVydHksIGtDRk51bWJlckludFR5cGUs
ICZleGlmVmFsdWUpOworICAgIHJldHVybiBJbWFnZU9yaWVudGF0aW9uOjpmcm9tRVhJRlZhbHVl
KGV4aWZWYWx1ZSk7Cit9CisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCitzaXplX3Qgc2hhcmVkQnVm
ZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKHZvaWQqIGluZm8sIHZvaWQqIGJ1ZmZlciwgb2ZmX3QgcG9z
aXRpb24sIHNpemVfdCBjb3VudCkKK3sKKyAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlciA9
IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOworICAgIHNpemVfdCBzb3VyY2VTaXpl
ID0gc2hhcmVkQnVmZmVyLT5zaXplKCk7CisgICAgaWYgKHBvc2l0aW9uID49IHNvdXJjZVNpemUp
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IHNoYXJl
ZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb247CisgICAgc2l6ZV90IGFtb3VudCA9IHN0ZDo6bWlu
PHNpemVfdD4oY291bnQsIHNvdXJjZVNpemUgLSBwb3NpdGlvbik7CisgICAgbWVtY3B5KGJ1ZmZl
ciwgc291cmNlLCBhbW91bnQpOworICAgIHJldHVybiBhbW91bnQ7Cit9CisKK3ZvaWQgc2hhcmVk
QnVmZmVyUmVsZWFzZSh2b2lkKiBpbmZvKQoreworICAgIFNoYXJlZEJ1ZmZlciogc2hhcmVkQnVm
ZmVyID0gc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5mbyk7CisgICAgc2hhcmVkQnVmZmVy
LT5kZXJlZigpOworfQorI2VuZGlmCisKK0ltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKCkKK3sK
KyAgICBtX25hdGl2ZURlY29kZXIgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbmNyZW1l
bnRhbChudWxscHRyKSk7Cit9CisKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VEZWNvZGVyOjpzdWJz
YW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQgc2NhbGUsIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11
bVN1YnNhbXBsaW5nTGV2ZWwpCit7CisgICAgLy8gVGhlcmUgYXJlIGZvdXIgc3Vic2FtcGxpbmcg
bGV2ZWxzOiAwID0gMXgsIDEgPSAwLjV4LCAyID0gMC4yNXgsIDMgPSAwLjEyNXguCisgICAgZmxv
YXQgY2xhbXBlZFNjYWxlID0gc3RkOjptYXg8ZmxvYXQ+KDAuMTI1LCBzdGQ6Om1pbjxmbG9hdD4o
MSwgc2NhbGUpKTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIHJlc3VsdCA9IGNlaWxmKGxvZzJmKDEg
LyBjbGFtcGVkU2NhbGUpKTsKKyAgICBBU1NFUlQocmVzdWx0ID49MCAmJiByZXN1bHQgPD0gMyk7
CisgICAgcmV0dXJuIHN0ZDo6bWluKHJlc3VsdCwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOwor
fQorCitzaXplX3QgSW1hZ2VEZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRp
ZXMoKQoreworICAgIC8vIE1lYXN1cmVkIGJ5IHRyYWNpbmcgbWFsbG9jL2NhbGxvYyBjYWxscyBv
biBNYWMgT1MgMTAuNi42LCB4ODZfNjQuCisgICAgLy8gQSBub24temVybyB2YWx1ZSBlbnN1cmVz
IGNhY2hlZCBpbWFnZXMgd2l0aCBubyBkZWNvZGVkIGZyYW1lcyBzdGlsbCBlbnRlcgorICAgIC8v
IHRoZSBsaXZlIGRlY29kZWQgcmVzb3VyY2VzIGxpc3Qgd2hlbiB0aGUgQ0dJbWFnZVNvdXJjZSBk
ZWNvZGVzIGltYWdlCisgICAgLy8gcHJvcGVydGllcywgYWxsb3dpbmcgdGhlIGNhY2hlIHRvIHBy
dW5lIHRoZSBwYXJ0aWFsbHkgZGVjb2RlZCBpbWFnZS4KKyAgICAvLyBUaGlzIHZhbHVlIGlzIGxp
a2VseSB0byBiZSBpbmFjY3VyYXRlIG9uIG90aGVyIHBsYXRmb3JtcywgYnV0IHRoZSBvdmVyYWxs
CisgICAgLy8gYmVoYXZpb3IgaXMgdW5jaGFuZ2VkLgorICAgIHJldHVybiAxMzA4ODsKK30KKwor
U3RyaW5nIEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAoreworICAgIENG
U3RyaW5nUmVmIGltYWdlU291cmNlVHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fbmF0aXZl
RGVjb2Rlci5nZXQoKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnByZWZlcnJlZEV4dGVuc2lvbkZv
ckltYWdlU291cmNlVHlwZShpbWFnZVNvdXJjZVR5cGUpOworfQorCitib29sIEltYWdlRGVjb2Rl
cjo6aXNTaXplQXZhaWxhYmxlKCkgY29uc3QKK3sKKyAgICAvLyBSYWduYXJvcyB5ZWxsczogVE9P
IFNPT04hIFlvdSBoYXZlIGF3YWtlbmVkIG1lIFRPTyBTT09OLCBFeGVjdXR1cyEKKyAgICBpZiAo
Q0dJbWFnZVNvdXJjZUdldFN0YXR1cyhtX25hdGl2ZURlY29kZXIuZ2V0KCkpIDwga0NHSW1hZ2VT
dGF0dXNJbmNvbXBsZXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2UwUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNv
dXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCksIDAsIGltYWdl
U291cmNlT3B0aW9ucygpLmdldCgpKSk7CisgICAgaWYgKCFpbWFnZTBQcm9wZXJ0aWVzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5z
S2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKQor
ICAgICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtD
R0ltYWdlUHJvcGVydHlQaXhlbEhlaWdodCk7Cit9CisKK0ludFNpemUgSW1hZ2VEZWNvZGVyOjpz
aXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zaXpl
ID0gZnJhbWVTaXplQXRJbmRleCgwLCAwKTsKKyAgICByZXR1cm4gbV9zaXplOworfQorCitzaXpl
X3QgSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0dJbWFn
ZVNvdXJjZUdldENvdW50KG1fbmF0aXZlRGVjb2Rlci5nZXQoKSk7Cit9CisKK2ludCBJbWFnZURl
Y29kZXI6OnJlcGV0aXRpb25Db3VudCgpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVz
KG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAg
ICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7Cisg
ICAgCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGdpZlByb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVm
KUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlH
SUZEaWN0aW9uYXJ5KTsKKyAgICBpZiAoZ2lmUHJvcGVydGllcykgeworICAgICAgICBDRk51bWJl
clJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGll
cywga0NHSW1hZ2VQcm9wZXJ0eUdJRkxvb3BDb3VudCk7CisgICAgICAgIAorICAgICAgICAvLyBO
byBwcm9wZXJ0eSBtZWFucyBsb29wIG9uY2UuCisgICAgICAgIGlmICghbnVtKQorICAgICAgICAg
ICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKKyAgICAgICAgCisgICAgICAgIGludCBsb29w
Q291bnQ7CisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
bG9vcENvdW50KTsKKyAgICAgICAgCisgICAgICAgIC8vIEEgcHJvcGVydHkgd2l0aCB2YWx1ZSAw
IG1lYW5zIGxvb3AgZm9yZXZlci4KKyAgICAgICAgcmV0dXJuIGxvb3BDb3VudCA/IGxvb3BDb3Vu
dCA6IGNBbmltYXRpb25Mb29wSW5maW5pdGU7CisgICAgfQorICAgIAorICAgIENGRGljdGlvbmFy
eVJlZiBwbmdQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1
ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UE5HRGljdGlvbmFyeSk7CisgICAg
aWYgKHBuZ1Byb3BlcnRpZXMpIHsKKyAgICAgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVy
UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJv
cGVydHlBUE5HTG9vcENvdW50KTsKKyAgICAgICAgaWYgKCFudW0pCisgICAgICAgICAgICByZXR1
cm4gY0FuaW1hdGlvbkxvb3BPbmNlOworICAgICAgICAKKyAgICAgICAgaW50IGxvb3BDb3VudDsK
KyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZsb29wQ291
bnQpOworICAgICAgICByZXR1cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxv
b3BJbmZpbml0ZTsKKyAgICB9CisgICAgCisgICAgLy8gVHVybnMgb3V0IHdlJ3JlIG5vdCBhbiBh
bmltYXRlZCBpbWFnZSBhZnRlciBhbGwsIHNvIHdlIGRvbid0IGFuaW1hdGUuCisgICAgcmV0dXJu
IGNBbmltYXRpb25Ob25lOworfQorCitib29sIEltYWdlRGVjb2Rlcjo6aG90U3BvdChJbnRQb2lu
dCYgaG90U3BvdCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9w
ZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0
aXZlRGVjb2Rlci5nZXQoKSwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBp
ZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpbnQgeCA9
IC0xLCB5ID0gLTE7CisgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlv
bmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIENGU1RSKCJob3RzcG90WCIpKTsKKyAgICBp
ZiAoIW51bSB8fCAhQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ4KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG51bSA9IChDRk51bWJlclJlZilDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBDRlNUUigiaG90c3BvdFkiKSk7Cisg
ICAgaWYgKCFudW0gfHwgIUNGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
eSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoeCA8IDAgfHwgeSA8IDAp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBob3RTcG90ID0gSW50UG9pbnQoeCwg
eSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ludFNpemUgSW1hZ2VEZWNvZGVyOjpmcmFtZVNp
emVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVs
KSBjb25zdAoreworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBh
ZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVy
LmdldCgpLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgp
KSk7CisgICAgCisgICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4geyB9OworICAg
IAorICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7CisgICAgQ0ZOdW1iZXJS
ZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0
KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKTsKKyAgICBpZiAobnVtKQorICAgICAgICBD
Rk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKKyAgICAKKyAg
ICBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQo
KSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsSGVpZ2h0KTsKKyAgICBpZiAobnVtKQorICAgICAgICBD
Rk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmhlaWdodCk7CisgICAgCisg
ICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVy
OjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoZnJhbWVDb3VudCgpKTsKKyAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldFN0YXR1c0F0SW5k
ZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbmRleCkgPT0ga0NHSW1hZ2VTdGF0dXNDb21wbGV0
ZTsKK30KKworSW1hZ2VPcmllbnRhdGlvbiBJbWFnZURlY29kZXI6Om9yaWVudGF0aW9uQXRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
cHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleCht
X25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkp
OworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb24o
KTsKKyAgICAKKyAgICByZXR1cm4gb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVz
LmdldCgpKTsKK30KKworZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgZmxvYXQgZHVyYXRpb24gPSAwOworICAgIFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VD
b3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbmRleCwgaW1hZ2VT
b3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAocHJvcGVydGllcykgeworICAgICAgICBD
RkRpY3Rpb25hcnlSZWYgZ2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRpY3Rpb25h
cnkpOworICAgICAgICBpZiAoZ2lmUHJvcGVydGllcykgeworICAgICAgICAgICAgaWYgKENGTnVt
YmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0
aWVzLCBrQ0dJbWFnZVByb3BlcnR5R0lGVW5jbGFtcGVkRGVsYXlUaW1lKSkgeworICAgICAgICAg
ICAgICAgIC8vIFVzZSB0aGUgdW5jbGFtcGVkIGZyYW1lIGRlbGF5IGlmIGl0IGV4aXN0cy4KKyAg
ICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAm
ZHVyYXRpb24pOworICAgICAgICAgICAgfSBlbHNlIGlmIChDRk51bWJlclJlZiBudW0gPSAoQ0ZO
dW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGllcywga0NHSW1hZ2VQcm9w
ZXJ0eUdJRkRlbGF5VGltZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhl
IGNsYW1wZWQgZnJhbWUgZGVsYXkgaWYgdGhlIHVuY2xhbXBlZCBmcmFtZSBkZWxheSBkb2VzIG5v
dCBleGlzdC4KKyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVy
RmxvYXRUeXBlLCAmZHVyYXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlS
ZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0
eVBOR0RpY3Rpb25hcnkpOworICAgICAgICBpZiAocG5nUHJvcGVydGllcykgeworICAgICAgICAg
ICAgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1
ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBlZERlbGF5
VGltZSkpCisgICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZs
b2F0VHlwZSwgJmR1cmF0aW9uKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKENGTnVtYmVyUmVmIG51
bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJD
b3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSkpCisgICAgICAgICAgICAgICAgQ0ZOdW1i
ZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICAvLyBNYW55IGFubm95aW5nIGFkcyBzcGVjaWZ5IGEgMCBkdXJh
dGlvbiB0byBtYWtlIGFuIGltYWdlIGZsYXNoIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCisgICAg
Ly8gV2UgZm9sbG93IEZpcmVmb3gncyBiZWhhdmlvciBhbmQgdXNlIGEgZHVyYXRpb24gb2YgMTAw
IG1zIGZvciBhbnkgZnJhbWVzIHRoYXQgc3BlY2lmeQorICAgIC8vIGEgZHVyYXRpb24gb2YgPD0g
MTAgbXMuIFNlZSA8cmRhcjovL3Byb2JsZW0vNzY4OTMwMD4gYW5kIDxodHRwOi8vd2Via2l0Lm9y
Zy9iLzM2MDgyPgorICAgIC8vIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIGlmIChkdXJhdGlv
biA8IDAuMDExZikKKyAgICAgICAgcmV0dXJuIDAuMWY7CisgICAgcmV0dXJuIGR1cmF0aW9uOwor
fQorCitib29sIEltYWdlRGVjb2Rlcjo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNp
emVfdCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVz
ID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVj
b2Rlci5nZXQoKSwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXBy
b3BlcnRpZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBDRkRpY3Rpb25hcnlS
ZWYgamZpZlByb3BlcnRpZXMgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGRGljdGlv
bmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlKRklGRGljdGlv
bmFyeSkpOworICAgIGlmIChqZmlmUHJvcGVydGllcykgeworICAgICAgICBDRkJvb2xlYW5SZWYg
aXNQcm9nQ0ZCb29sID0gc3RhdGljX2Nhc3Q8Q0ZCb29sZWFuUmVmPihDRkRpY3Rpb25hcnlHZXRW
YWx1ZShqZmlmUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eUpGSUZJc1Byb2dyZXNzaXZlKSk7
CisgICAgICAgIGlmIChpc1Byb2dDRkJvb2wpIHsKKyAgICAgICAgICAgIGJvb2wgaXNQcm9ncmVz
c2l2ZSA9IENGQm9vbGVhbkdldFZhbHVlKGlzUHJvZ0NGQm9vbCk7CisgICAgICAgICAgICAvLyBX
b3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vNTE4NDY1NT4gLSBIYW5nIHJlbmRlcmluZyB2
ZXJ5IGxhcmdlIHByb2dyZXNzaXZlIEpQRUcuIERlY29kaW5nIHByb2dyZXNzaXZlCisgICAgICAg
ICAgICAvLyBpbWFnZXMgaGFuZ3MgZm9yIGEgdmVyeSBsb25nIHRpbWUgcmlnaHQgbm93LiBVbnRp
bCB0aGlzIGlzIGZpeGVkLCBkb24ndCBzdWItc2FtcGxlIHByb2dyZXNzaXZlIGltYWdlcy4gVGhp
cworICAgICAgICAgICAgLy8gd2lsbCBjYXVzZSB0aGVtIHRvIGZhaWwgb3VyIGxhcmdlIGltYWdl
IGNoZWNrIGFuZCB0aGV5IHdvbid0IGJlIGRlY29kZWQuCisgICAgICAgICAgICAvLyBGSVhNRTog
UmVtb3ZlIG9uY2UgdW5kZXJseWluZyBpc3N1ZSBpcyBmaXhlZCAoPHJkYXI6Ly9wcm9ibGVtLzUx
OTE0MTg+KQorICAgICAgICAgICAgcmV0dXJuICFpc1Byb2dyZXNzaXZlOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEltYWdlRGVjb2Rlcjo6ZnJh
bWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIGlmICghZnJhbWVJ
c0NvbXBsZXRlQXRJbmRleChpbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAg
IENGU3RyaW5nUmVmIGltYWdlVHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fbmF0aXZlRGVj
b2Rlci5nZXQoKSk7CisgICAgCisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZXJlIGlzIG5vIGlt
YWdlIHR5cGUgb3IgdGhlIGltYWdlIHR5cGUgaXMgSlBFRywgYmVjYXVzZQorICAgIC8vIEpQRUcg
ZG9lcyBub3Qgc3VwcG9ydCBhbHBoYSB0cmFuc3BhcmVuY3kuCisgICAgaWYgKCFpbWFnZVR5cGUg
fHwgQ0ZFcXVhbChpbWFnZVR5cGUsIENGU1RSKCJwdWJsaWMuanBlZyIpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIC8vIEZJWE1FOiBDb3VsZCByZXR1cm4gZmFsc2UgZm9yIG90
aGVyIG5vbi10cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzLgorICAgIC8vIEZJWE1FOiBDb3VsZCBt
YXliZSByZXR1cm4gZmFsc2UgZm9yIGEgR0lGIEZyYW1lIGlmIHdlIGhhdmUgZW5vdWdoIGluZm8g
aW4gdGhlIEdJRiBwcm9wZXJ0aWVzIGRpY3Rpb25hcnkKKyAgICAvLyB0byBkZXRlcm1pbmUgd2hl
dGhlciBvciBub3QgYSB0cmFuc3BhcmVudCBjb2xvciB3YXMgZGVmaW5lZC4KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleChzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKK3sKKyAg
ICBJbnRTaXplIGZyYW1lU2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5n
TGV2ZWwpOworICAgIHJldHVybiBmcmFtZVNpemUuYXJlYSgpICogNDsKK30KKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKK3sKKyAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0
SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1
YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7CisgICAgCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IDxyZGFyOi8vcHJvYmxlbS83MzcxMTk4PiAtIENvcmVHcmFwaGljcyBjaGFuZ2VkIHRoZSBkZWZh
dWx0IGNhY2hpbmcgYmVoYXZpb3VyIGluIGlPUyA0LjAgdG8ga0NHSW1hZ2VDYWNoaW5nVHJhbnNp
ZW50CisgICAgLy8gd2hpY2ggY2F1c2VkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBmb3IgdXMg
c2luY2UgdGhlIGltYWdlcyBoYWQgdG8gYmUgcmVzYW1wbGVkL3JlY3JlYXRlZCBldmVyeSB0aW1l
IHdlIGNhbGxlZAorICAgIC8vIENHQ29udGV4dERyYXdJbWFnZS4gV2Ugbm93IHRlbGwgQ0cgdG8g
Y2FjaGUgdGhlIGRyYXduIGltYWdlcy4gU2VlIGFsc28gPHJkYXI6Ly9wcm9ibGVtLzE0MzY2NzU1
PiAtCisgICAgLy8gQ29yZUdyYXBoaWNzIG5lZWRzIHRvIHVuLWRlcHJlY2F0ZSBrQ0dJbWFnZUNh
Y2hpbmdUZW1wb3Jhcnkgc2luY2UgaXQncyBzdGlsbCBub3QgdGhlIGRlZmF1bHQuCisjaWYgQ09N
UElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisjZW5kaWYK
KyAgICBDR0ltYWdlU2V0Q2FjaGluZ0ZsYWdzKGltYWdlLmdldCgpLCBrQ0dJbWFnZUNhY2hpbmdU
ZW1wb3JhcnkpOworI2lmIENPTVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IHBvcAorI2VuZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorICAgIAorICAgIENGU3RyaW5n
UmVmIGltYWdlVVRJID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNvZGVyLmdldCgp
KTsKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgeGJtVVRJID0gQ0ZTVFIoInB1YmxpYy54
Yml0bWFwLWltYWdlIik7CisgICAgCisgICAgaWYgKCFpbWFnZVVUSSkKKyAgICAgICAgcmV0dXJu
IGltYWdlOworICAgIAorICAgIGlmICghQ0ZFcXVhbChpbWFnZVVUSSwgeGJtVVRJKSkKKyAgICAg
ICAgcmV0dXJuIGltYWdlOworICAgIAorICAgIC8vIElmIGl0IGlzIGFuIHhibSBpbWFnZSwgbWFz
ayBvdXQgYWxsIHRoZSB3aGl0ZSBhcmVhcyB0byByZW5kZXIgdGhlbSB0cmFuc3BhcmVudC4KKyAg
ICBjb25zdCBDR0Zsb2F0IG1hc2tpbmdDb2xvcnNbNl0gPSB7MjU1LCAyNTUsICAyNTUsIDI1NSwg
MjU1LCAyNTV9OworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtYXNrZWRJbWFnZSA9IGFkb3B0
Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhNYXNraW5nQ29sb3JzKGltYWdlLmdldCgpLCBtYXNraW5nQ29s
b3JzKSk7CisgICAgcmV0dXJuIG1hc2tlZEltYWdlID8gbWFza2VkSW1hZ2UgOiBpbWFnZTsKK30K
Kwordm9pZCBJbWFnZURlY29kZXI6OnNldERhdGEoQ0ZEYXRhUmVmIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQoreworICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhKG1fbmF0aXZlRGVjb2Rl
ci5nZXQoKSwgZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKwordm9pZCBJbWFnZURlY29kZXI6
OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICAvLyBPbiBNYWMgdGhlIE5TRGF0YSBpbnNpZGUgdGhlIFNo
YXJlZEJ1ZmZlciBjYW4gYmUgc2VjcmV0bHkgYXBwZW5kZWQgdG8gd2l0aG91dCB0aGUgU2hhcmVk
QnVmZmVyJ3Mga25vd2xlZGdlLgorICAgIC8vIFdlIHVzZSBTaGFyZWRCdWZmZXIncyBhYmlsaXR5
IHRvIHdyYXAgaXRzZWxmIGluc2lkZSBDRkRhdGEgdG8gZ2V0IGFyb3VuZCB0aGlzLCBlbnN1cmlu
ZyB0aGF0IEltYWdlSU8gaXMKKyAgICAvLyByZWFsbHkgbG9va2luZyBhdCB0aGUgU2hhcmVkQnVm
ZmVyLgorICAgIHNldERhdGEoZGF0YS0+Y3JlYXRlQ0ZEYXRhKCkuZ2V0KCksIGFsbERhdGFSZWNl
aXZlZCk7CisjZWxzZQorICAgIC8vIENyZWF0ZSBhIENHRGF0YVByb3ZpZGVyIHRvIHdyYXAgdGhl
IFNoYXJlZEJ1ZmZlci4KKyAgICBkYXRhLT5yZWYoKTsKKyAgICAvLyBXZSB1c2UgdGhlIEdldEJ5
dGVzQXRQb3NpdGlvbiBjYWxsYmFjayByYXRoZXIgdGhhbiB0aGUgR2V0Qnl0ZVBvaW50ZXIgb25l
IGJlY2F1c2UgU2hhcmVkQnVmZmVyCisgICAgLy8gZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBs
b2NrIGRvd24gdGhlIGJ5dGUgcG9pbnRlciBhbmQgZ3VhcmFudGVlIHRoYXQgaXQgd29uJ3QgbW92
ZSwgd2hpY2gKKyAgICAvLyBpcyBhIHJlcXVpcmVtZW50IGZvciB1c2luZyB0aGUgR2V0Qnl0ZVBv
aW50ZXIgY2FsbGJhY2suCisgICAgQ0dEYXRhUHJvdmlkZXJEaXJlY3RDYWxsYmFja3MgcHJvdmlk
ZXJDYWxsYmFja3MgPSB7IDAsIDAsIDAsIHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbiwg
c2hhcmVkQnVmZmVyUmVsZWFzZSB9OworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4g
ZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZURpcmVjdChkYXRhLCBk
YXRhLT5zaXplKCksICZwcm92aWRlckNhbGxiYWNrcykpOworICAgIENHSW1hZ2VTb3VyY2VVcGRh
dGVEYXRhUHJvdmlkZXIobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBkYXRhUHJvdmlkZXIuZ2V0KCks
IGFsbERhdGFSZWNlaXZlZCk7CisjZW5kaWYKK30KKworfQorCisjZW5kaWYgLy8gVVNFKENHKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZURlY29kZXJDRy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
bWFnZURlY29kZXJDR19oCisjZGVmaW5lIEltYWdlRGVjb2RlckNHX2gKKworI2luY2x1ZGUgIklt
YWdlU291cmNlQ0cuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSW1hZ2VEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBJbWFnZURlY29kZXIoKTsK
KyAgICAKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4gY3JlYXRlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEltYWdlRGVjb2Rlcj4oKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBieXRlc0RlY29kZWRUb0RldGVybWluZVBy
b3BlcnRpZXMoKTsKKyAgICBzdGF0aWMgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVs
Rm9yU2NhbGUoZmxvYXQgc2NhbGUsIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11bVN1YnNhbXBsaW5n
TGV2ZWwpOworICAgIAorICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OworICAg
IGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7CisgICAgCisgICAgLy8gQWx3YXlzIG9yaWdp
bmFsIHNpemUsIHdpdGhvdXQgc3Vic2FtcGxpbmcuCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7
CisgICAgc2l6ZV90IGZyYW1lQ291bnQoKSBjb25zdDsKKyAgICBpbnQgcmVwZXRpdGlvbkNvdW50
KCkgY29uc3Q7CisgICAgYm9vbCBob3RTcG90KEludFBvaW50JiBob3RTcG90KSBjb25zdDsKKyAg
ICAKKyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVs
KSBjb25zdDsKKyAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsK
KyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0Owor
ICAgIAorICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAg
Ym9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QpIGNvbnN0OworICAgIGJvb2wgYWxsb3dT
dWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgdW5zaWduZWQgZnJh
bWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7CisgICAg
CisgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHNldERhdGEoQ0ZEYXRhUmVmLCBi
b29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciosIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBtdXRhYmxlIEludFNp
emUgbV9zaXplOworICAgIFJldGFpblB0cjxDR0ltYWdlU291cmNlUmVmPiBtX25hdGl2ZURlY29k
ZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBJbWFnZURlY29kZXJDR19oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNw
cAkocmV2aXNpb24gMTk4ODQxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VTb3VyY2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI5LDQyNCArMjksMTEgQEAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAi
SW1hZ2VTb3VyY2VDRy5oIgogCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCisjaW5jbHVk
ZSAiSW1hZ2VEZWNvZGVyQ0cuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCi0jaW5j
bHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotCi0jaWYgIVBMQVRGT1JNKElPUykKLSNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbHNlCi0jaW5jbHVkZSA8SW1h
Z2VJTy9JbWFnZUlPLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2VuZGlmCi0KLSNp
ZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8SW1hZ2VJTy9DR0ltYWdlU291cmNl
UHJpdmF0ZS5oPgotI2Vsc2UKLWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU3Vic2Ft
cGxlRmFjdG9yID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yIik7Ci0jZW5k
aWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotY2xhc3MgSW1hZ2VEZWNvZGVyIHsKLXB1
YmxpYzoKLSAgICBJbWFnZURlY29kZXIoKTsKLSAgICAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlRGVjb2Rlcj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPEltYWdlRGVjb2Rlcj4oKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGJ5
dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpOwotICAgIHN0YXRpYyBTdWJzYW1wbGlu
Z0xldmVsIHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxpbmdM
ZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCk7Ci0KLSAgICBTdHJpbmcgZmlsZW5hbWVFeHRl
bnNpb24oKSBjb25zdDsKLSAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0OwotICAgIAot
ICAgIC8vIEFsd2F5cyBvcmlnaW5hbCBzaXplLCB3aXRob3V0IHN1YnNhbXBsaW5nLgotICAgIElu
dFNpemUgc2l6ZSgpIGNvbnN0OwotICAgIHNpemVfdCBmcmFtZUNvdW50KCkgY29uc3Q7Ci0gICAg
aW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0OwotICAgIGJvb2wgaG90U3BvdChJbnRQb2ludCYg
aG90U3BvdCkgY29uc3Q7Ci0KLSAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBT
dWJzYW1wbGluZ0xldmVsKSBjb25zdDsKLSAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgo
c2l6ZV90KSBjb25zdDsKLSAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uQXRJbmRleChz
aXplX3QpIGNvbnN0OwotCi0gICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KSBj
b25zdDsKLSAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCkgY29uc3Q7Ci0gICAg
Ym9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKLSAgICB1
bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKSBj
b25zdDsKLQotICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldERhdGEoQ0ZEYXRhUmVm
LCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0gICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlcios
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKLQotcHJvdGVjdGVkOgotICAgIG11dGFibGUgSW50U2l6
ZSBtX3NpemU7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VTb3VyY2VSZWY+IG1fbmF0aXZlRGVjb2Rl
cjsKLX07Ci0KLWNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HVW5j
bGFtcGVkRGVsYXlUaW1lID0gQ0ZTVFIoIlVuY2xhbXBlZERlbGF5VGltZSIpOwotY29uc3QgQ0ZT
dHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdEZWxheVRpbWUgPSBDRlNUUigiRGVs
YXlUaW1lIik7Ci1jb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0xv
b3BDb3VudCA9IENGU1RSKCJMb29wQ291bnQiKTsKLQotY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1h
Z2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNob3VsZFBy
ZWZlclJHQjMyIik7Ci1jb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0
YSA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSIpOwotCi1zdGF0aWMgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKFN1YnNhbXBsaW5n
TGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKLXsKLSAgICBpZiAoIXN1YnNhbXBsaW5nTGV2ZWwpIHsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgbnVtT3B0aW9ucyA9IDM7Ci0gICAgICAgIGNvbnN0IHZv
aWQqIGtleXNbbnVtT3B0aW9uc10gPSB7IGtDR0ltYWdlU291cmNlU2hvdWxkQ2FjaGUsIGtDR0lt
YWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIsIGtDR0ltYWdlU291cmNlU2tpcE1ldGFkYXRhIH07
Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tudW1PcHRpb25zXSA9IHsga0NGQm9vbGVhblRy
dWUsIGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSB9OwotICAgICAgICByZXR1cm4gQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKG51bGxwdHIsIGtleXMsIHZhbHVlcywgbnVtT3B0aW9ucywgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cyk7Ci0gICAgfQotCi0gICAgc2hvcnQgY29uc3RyYWluZWRTdWJzYW1wbGluZ0xldmVsID0gc3Rk
OjptaW48c2hvcnQ+KDMsIHN0ZDo6bWF4PHNob3J0PigwLCBzdWJzYW1wbGluZ0xldmVsKSk7Ci0g
ICAgaW50IHN1YnNhbXBsZUludCA9IDEgPDwgY29uc3RyYWluZWRTdWJzYW1wbGluZ0xldmVsOyAv
LyBbMC4uM10gPT4gWzEsIDIsIDQsIDhdCi0KLSAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHN1
YnNhbXBsZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwgIGtDRk51bWJl
ckludFR5cGUsICAmc3Vic2FtcGxlSW50KSk7Ci0gICAgY29uc3QgQ0ZJbmRleCBudW1PcHRpb25z
ID0gNDsKLSAgICBjb25zdCB2b2lkKiBrZXlzW251bU9wdGlvbnNdID0geyBrQ0dJbWFnZVNvdXJj
ZVNob3VsZENhY2hlLCBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBrQ0dJbWFnZVNv
dXJjZVNraXBNZXRhZGF0YSwga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3IgfTsKLSAgICBj
b25zdCB2b2lkKiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29s
ZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUsIHN1YnNhbXBsZU51bWJlci5nZXQoKSB9OwotICAgIHJl
dHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShudWxscHRyLCBrZXlzLCB2YWx1ZXMsIG51
bU9wdGlvbnMsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+IGltYWdlU291cmNlT3B0aW9ucyhTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwg
PSAwKQotewotICAgIGlmIChzdWJzYW1wbGluZ0xldmVsKQotICAgICAgICByZXR1cm4gY3JlYXRl
SW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpOwotCi0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBvcHRpb25zID0gY3JlYXRlSW1h
Z2VTb3VyY2VPcHRpb25zKDApOwotICAgIHJldHVybiBvcHRpb25zOwotfQotCi1zdGF0aWMgSW1h
Z2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKENGRGljdGlvbmFyeVJlZiBp
bWFnZVByb3BlcnRpZXMpCi17Ci0gICAgQVNTRVJUKGltYWdlUHJvcGVydGllcyk7Ci0gICAgQ0ZO
dW1iZXJSZWYgb3JpZW50YXRpb25Qcm9wZXJ0eSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShpbWFnZVByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlPcmllbnRhdGlvbik7Ci0g
ICAgaWYgKCFvcmllbnRhdGlvblByb3BlcnR5KQotICAgICAgICByZXR1cm4gSW1hZ2VPcmllbnRh
dGlvbigpOwotCi0gICAgaW50IGV4aWZWYWx1ZTsKLSAgICBDRk51bWJlckdldFZhbHVlKG9yaWVu
dGF0aW9uUHJvcGVydHksIGtDRk51bWJlckludFR5cGUsICZleGlmVmFsdWUpOwotICAgIHJldHVy
biBJbWFnZU9yaWVudGF0aW9uOjpmcm9tRVhJRlZhbHVlKGV4aWZWYWx1ZSk7Ci19Ci0KLSNpZiAh
UExBVEZPUk0oQ09DT0EpCi1zaXplX3Qgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKHZv
aWQqIGluZm8sIHZvaWQqIGJ1ZmZlciwgb2ZmX3QgcG9zaXRpb24sIHNpemVfdCBjb3VudCkKLXsK
LSAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZl
cio+KGluZm8pOwotICAgIHNpemVfdCBzb3VyY2VTaXplID0gc2hhcmVkQnVmZmVyLT5zaXplKCk7
Ci0gICAgaWYgKHBvc2l0aW9uID49IHNvdXJjZVNpemUpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgY29uc3QgY2hhciogc291cmNlID0gc2hhcmVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbjsK
LSAgICBzaXplX3QgYW1vdW50ID0gc3RkOjptaW48c2l6ZV90Pihjb3VudCwgc291cmNlU2l6ZSAt
IHBvc2l0aW9uKTsKLSAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7Ci0gICAgcmV0
dXJuIGFtb3VudDsKLX0KLQotdm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGluZm8pCi17
Ci0gICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRCdWZm
ZXIqPihpbmZvKTsKLSAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7Ci19Ci0jZW5kaWYKLSAgICAK
LUltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKCkKLXsKLSAgICBtX25hdGl2ZURlY29kZXIgPSBh
ZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbmNyZW1lbnRhbChudWxscHRyKSk7Ci19Ci0gICAg
Ci1TdWJzYW1wbGluZ0xldmVsIEltYWdlRGVjb2Rlcjo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxl
KGZsb2F0IHNjYWxlLCBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJzYW1wbGluZ0xldmVsKQot
ewotICAgIC8vIFRoZXJlIGFyZSBmb3VyIHN1YnNhbXBsaW5nIGxldmVsczogMCA9IDF4LCAxID0g
MC41eCwgMiA9IDAuMjV4LCAzID0gMC4xMjV4LgotICAgIGZsb2F0IGNsYW1wZWRTY2FsZSA9IHN0
ZDo6bWF4PGZsb2F0PigwLjEyNSwgc3RkOjptaW48ZmxvYXQ+KDEsIHNjYWxlKSk7Ci0gICAgU3Vi
c2FtcGxpbmdMZXZlbCByZXN1bHQgPSBjZWlsZihsb2cyZigxIC8gY2xhbXBlZFNjYWxlKSk7Ci0g
ICAgQVNTRVJUKHJlc3VsdCA+PTAgJiYgcmVzdWx0IDw9IDMpOwotICAgIHJldHVybiBzdGQ6Om1p
bihyZXN1bHQsIG1heGltdW1TdWJzYW1wbGluZ0xldmVsKTsKLX0KLQotc2l6ZV90IEltYWdlRGVj
b2Rlcjo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkKLXsKLSAgICAvLyBNZWFz
dXJlZCBieSB0cmFjaW5nIG1hbGxvYy9jYWxsb2MgY2FsbHMgb24gTWFjIE9TIDEwLjYuNiwgeDg2
XzY0LgotICAgIC8vIEEgbm9uLXplcm8gdmFsdWUgZW5zdXJlcyBjYWNoZWQgaW1hZ2VzIHdpdGgg
bm8gZGVjb2RlZCBmcmFtZXMgc3RpbGwgZW50ZXIKLSAgICAvLyB0aGUgbGl2ZSBkZWNvZGVkIHJl
c291cmNlcyBsaXN0IHdoZW4gdGhlIENHSW1hZ2VTb3VyY2UgZGVjb2RlcyBpbWFnZQotICAgIC8v
IHByb3BlcnRpZXMsIGFsbG93aW5nIHRoZSBjYWNoZSB0byBwcnVuZSB0aGUgcGFydGlhbGx5IGRl
Y29kZWQgaW1hZ2UuCi0gICAgLy8gVGhpcyB2YWx1ZSBpcyBsaWtlbHkgdG8gYmUgaW5hY2N1cmF0
ZSBvbiBvdGhlciBwbGF0Zm9ybXMsIGJ1dCB0aGUgb3ZlcmFsbAotICAgIC8vIGJlaGF2aW9yIGlz
IHVuY2hhbmdlZC4KLSAgICByZXR1cm4gMTMwODg7Ci19Ci0gICAgCi1TdHJpbmcgSW1hZ2VEZWNv
ZGVyOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Ci17Ci0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VT
b3VyY2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNvZGVyLmdldCgpKTsK
LSAgICByZXR1cm4gV2ViQ29yZTo6cHJlZmVycmVkRXh0ZW5zaW9uRm9ySW1hZ2VTb3VyY2VUeXBl
KGltYWdlU291cmNlVHlwZSk7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUoKSBjb25zdAotewotICAgIC8vIFJhZ25hcm9zIHllbGxzOiBUT08gU09PTiEgWW91IGhhdmUg
YXdha2VuZWQgbWUgVE9PIFNPT04sIEV4ZWN1dHVzIQotICAgIGlmIChDR0ltYWdlU291cmNlR2V0
U3RhdHVzKG1fbmF0aXZlRGVjb2Rlci5nZXQoKSkgPCBrQ0dJbWFnZVN0YXR1c0luY29tcGxldGUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IGltYWdlMFByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0
SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQo
KSkpOwotICAgIGlmICghaW1hZ2UwUHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0
KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKQotICAgICAgICAmJiBDRkRpY3Rpb25hcnlD
b250YWluc0tleShpbWFnZTBQcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxI
ZWlnaHQpOwotfQotCi1JbnRTaXplIEltYWdlRGVjb2Rlcjo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKG1fc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fc2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgo
MCwgMCk7Ci0gICAgcmV0dXJuIG1fc2l6ZTsKLX0KLQotc2l6ZV90IEltYWdlRGVjb2Rlcjo6ZnJh
bWVDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENHSW1hZ2VTb3VyY2VHZXRDb3VudChtX25h
dGl2ZURlY29kZXIuZ2V0KCkpOwotfQotCi1pbnQgSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291
bnQoKSBjb25zdAotewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMg
PSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllcyhtX25hdGl2ZURlY29kZXIuZ2V0
KCksIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7Ci0gICAgaWYgKCFwcm9wZXJ0aWVzKQot
ICAgICAgICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOwotCi0gICAgQ0ZEaWN0aW9uYXJ5UmVm
IGdpZlByb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBy
b3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlHSUZEaWN0aW9uYXJ5KTsKLSAgICBpZiAo
Z2lmUHJvcGVydGllcykgewotICAgICAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYp
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eUdJRkxv
b3BDb3VudCk7Ci0KLSAgICAgICAgLy8gTm8gcHJvcGVydHkgbWVhbnMgbG9vcCBvbmNlLgotICAg
ICAgICBpZiAoIW51bSkKLSAgICAgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7Ci0K
LSAgICAgICAgaW50IGxvb3BDb3VudDsKLSAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtD
Rk51bWJlckludFR5cGUsICZsb29wQ291bnQpOwotCi0gICAgICAgIC8vIEEgcHJvcGVydHkgd2l0
aCB2YWx1ZSAwIG1lYW5zIGxvb3AgZm9yZXZlci4KLSAgICAgICAgcmV0dXJuIGxvb3BDb3VudCA/
IGxvb3BDb3VudCA6IGNBbmltYXRpb25Mb29wSW5maW5pdGU7Ci0gICAgfQotCi0gICAgQ0ZEaWN0
aW9uYXJ5UmVmIHBuZ1Byb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdl
dFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQTkdEaWN0aW9uYXJ5KTsK
LSAgICBpZiAocG5nUHJvcGVydGllcykgewotICAgICAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZO
dW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocG5nUHJvcGVydGllcywgV2ViQ29yZUNHSW1h
Z2VQcm9wZXJ0eUFQTkdMb29wQ291bnQpOwotICAgICAgICBpZiAoIW51bSkKLSAgICAgICAgICAg
IHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7Ci0KLSAgICAgICAgaW50IGxvb3BDb3VudDsKLSAg
ICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZsb29wQ291bnQp
OwotICAgICAgICByZXR1cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJ
bmZpbml0ZTsKLSAgICB9Ci0KLSAgICAvLyBUdXJucyBvdXQgd2UncmUgbm90IGFuIGFuaW1hdGVk
IGltYWdlIGFmdGVyIGFsbCwgc28gd2UgZG9uJ3QgYW5pbWF0ZS4KLSAgICByZXR1cm4gY0FuaW1h
dGlvbk5vbmU7Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyOjpob3RTcG90KEludFBvaW50JiBob3RT
cG90KSBjb25zdAotewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMg
PSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNv
ZGVyLmdldCgpLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghcHJv
cGVydGllcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IHggPSAtMSwgeSA9IC0x
OwotICAgIENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1
ZShwcm9wZXJ0aWVzLmdldCgpLCBDRlNUUigiaG90c3BvdFgiKSk7Ci0gICAgaWYgKCFudW0gfHwg
IUNGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1
ZShwcm9wZXJ0aWVzLmdldCgpLCBDRlNUUigiaG90c3BvdFkiKSk7Ci0gICAgaWYgKCFudW0gfHwg
IUNGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICh4IDwgMCB8fCB5IDwgMCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaG90U3BvdCA9IEludFBvaW50KHgsIHkpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1JbnRTaXplIEltYWdlRGVjb2Rlcjo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29w
eVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2Rlci5nZXQoKSwgaW5kZXgsIGltYWdlU291
cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsKS5nZXQoKSkpOwotCi0gICAgaWYgKCFwcm9wZXJ0
aWVzKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaW50IHdpZHRoID0gMDsKLSAgICBpbnQg
aGVpZ2h0ID0gMDsKLSAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgp
OwotICAgIGlmIChudW0pCi0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJ
bnRUeXBlLCAmd2lkdGgpOwotCi0gICAgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdl
dFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbEhlaWdodCk7Ci0g
ICAgaWYgKG51bSkKLSAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5
cGUsICZoZWlnaHQpOwotCi0gICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Ci19Ci0K
LWJvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoZnJhbWVDb3VudCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZVNv
dXJjZUdldFN0YXR1c0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbmRleCkgPT0ga0NH
SW1hZ2VTdGF0dXNDb21wbGV0ZTsKLX0KLQotSW1hZ2VPcmllbnRhdGlvbiBJbWFnZURlY29kZXI6
Om9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQ
cm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4LCBpbWFnZVNvdXJj
ZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJu
IEltYWdlT3JpZW50YXRpb24oKTsKLQotICAgIHJldHVybiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0
aWVzKHByb3BlcnRpZXMuZ2V0KCkpOwotfQotCi1mbG9hdCBJbWFnZURlY29kZXI6OmZyYW1lRHVy
YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKLXsKLSAgICBmbG9hdCBkdXJhdGlvbiA9
IDA7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0Yo
Q0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCks
IGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmIChwcm9wZXJ0aWVz
KSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFy
eVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3Bl
cnR5R0lGRGljdGlvbmFyeSk7Ci0gICAgICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7Ci0gICAgICAg
ICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZh
bHVlKGdpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1wZWREZWxheVRpbWUp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB1bmNsYW1wZWQgZnJhbWUgZGVsYXkgaWYg
aXQgZXhpc3RzLgotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1i
ZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKENGTnVtYmVy
UmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVz
LCBrQ0dJbWFnZVByb3BlcnR5R0lGRGVsYXlUaW1lKSkgewotICAgICAgICAgICAgICAgIC8vIEZh
bGwgYmFjayB0byB0aGUgY2xhbXBlZCBmcmFtZSBkZWxheSBpZiB0aGUgdW5jbGFtcGVkIGZyYW1l
IGRlbGF5IGRvZXMgbm90IGV4aXN0LgotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUo
bnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rp
b25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQ
cm9wZXJ0eVBOR0RpY3Rpb25hcnkpOwotICAgICAgICBpZiAocG5nUHJvcGVydGllcykgewotICAg
ICAgICAgICAgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBl
ZERlbGF5VGltZSkpCi0gICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51
bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKENGTnVtYmVy
UmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVz
LCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSkpCi0gICAgICAgICAgICAgICAg
Q0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNwZWNpZnkgYSAwIGR1
cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KLSAg
ICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAx
MDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5Ci0gICAgLy8gYSBkdXJhdGlvbiBvZiA8
PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0dHA6Ly93ZWJraXQu
b3JnL2IvMzYwODI+Ci0gICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgaWYgKGR1cmF0
aW9uIDwgMC4wMTFmKQotICAgICAgICByZXR1cm4gMC4xZjsKLSAgICByZXR1cm4gZHVyYXRpb247
Ci19Ci0KLWJvb2wgSW1hZ2VEZWNvZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgo
c2l6ZV90KSBjb25zdAotewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRp
ZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVE
ZWNvZGVyLmdldCgpLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICgh
cHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ0ZEaWN0aW9uYXJ5UmVm
IGpmaWZQcm9wZXJ0aWVzID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25h
cnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5SkZJRkRpY3Rpb25h
cnkpKTsKLSAgICBpZiAoamZpZlByb3BlcnRpZXMpIHsKLSAgICAgICAgQ0ZCb29sZWFuUmVmIGlz
UHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0PENGQm9vbGVhblJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoamZpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlKRklGSXNQcm9ncmVzc2l2ZSkpOwot
ICAgICAgICBpZiAoaXNQcm9nQ0ZCb29sKSB7Ci0gICAgICAgICAgICBib29sIGlzUHJvZ3Jlc3Np
dmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShpc1Byb2dDRkJvb2wpOwotICAgICAgICAgICAgLy8gV29y
a2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUxODQ2NTU+IC0gSGFuZyByZW5kZXJpbmcgdmVy
eSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVHLiBEZWNvZGluZyBwcm9ncmVzc2l2ZQotICAgICAgICAg
ICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBhIHZlcnkgbG9uZyB0aW1lIHJpZ2h0IG5vdy4gVW50aWwg
dGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3ViLXNhbXBsZSBwcm9ncmVzc2l2ZSBpbWFnZXMuIFRoaXMK
LSAgICAgICAgICAgIC8vIHdpbGwgY2F1c2UgdGhlbSB0byBmYWlsIG91ciBsYXJnZSBpbWFnZSBj
aGVjayBhbmQgdGhleSB3b24ndCBiZSBkZWNvZGVkLgotICAgICAgICAgICAgLy8gRklYTUU6IFJl
bW92ZSBvbmNlIHVuZGVybHlpbmcgaXNzdWUgaXMgZml4ZWQgKDxyZGFyOi8vcHJvYmxlbS81MTkx
NDE4PikKLSAgICAgICAgICAgIHJldHVybiAhaXNQcm9ncmVzc2l2ZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNB
bHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIGlmICghZnJhbWVJc0NvbXBs
ZXRlQXRJbmRleChpbmRleCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgQ0ZTdHJpbmdS
ZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNvZGVyLmdldCgp
KTsKLQotICAgIC8vIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyBubyBpbWFnZSB0eXBlIG9yIHRo
ZSBpbWFnZSB0eXBlIGlzIEpQRUcsIGJlY2F1c2UKLSAgICAvLyBKUEVHIGRvZXMgbm90IHN1cHBv
cnQgYWxwaGEgdHJhbnNwYXJlbmN5LgotICAgIGlmICghaW1hZ2VUeXBlIHx8IENGRXF1YWwoaW1h
Z2VUeXBlLCBDRlNUUigicHVibGljLmpwZWciKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIEZJWE1FOiBDb3VsZCByZXR1cm4gZmFsc2UgZm9yIG90aGVyIG5vbi10cmFuc3BhcmVu
dCBpbWFnZSBmb3JtYXRzLgotICAgIC8vIEZJWE1FOiBDb3VsZCBtYXliZSByZXR1cm4gZmFsc2Ug
Zm9yIGEgR0lGIEZyYW1lIGlmIHdlIGhhdmUgZW5vdWdoIGluZm8gaW4gdGhlIEdJRiBwcm9wZXJ0
aWVzIGRpY3Rpb25hcnkKLSAgICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSB0cmFu
c3BhcmVudCBjb2xvciB3YXMgZGVmaW5lZC4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWdu
ZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBs
aW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGZyYW1lU2l6
ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwotICAgIHJldHVy
biBmcmFtZVNpemUuYXJlYSgpICogNDsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVy
OjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwg
c3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1h
Z2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9uYXRpdmVEZWNv
ZGVyLmdldCgpLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdl
dCgpKSk7Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzEx
OTg+IC0gQ29yZUdyYXBoaWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIg
aW4gaU9TIDQuMCB0byBrQ0dJbWFnZUNhY2hpbmdUcmFuc2llbnQKLSAgICAvLyB3aGljaCBjYXVz
ZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0
byBiZSByZXNhbXBsZWQvcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCi0gICAgLy8gQ0dD
b250ZXh0RHJhd0ltYWdlLiBXZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2Vz
LiBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0vMTQzNjY3NTU+IC0KLSAgICAvLyBDb3JlR3JhcGhp
Y3MgbmVlZHMgdG8gdW4tZGVwcmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5jZSBp
dCdzIHN0aWxsIG5vdCB0aGUgZGVmYXVsdC4KLSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAi
LVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSNlbmRpZgotICAgICAgICBDR0ltYWdlU2V0Q2Fj
aGluZ0ZsYWdzKGltYWdlLmdldCgpLCBrQ0dJbWFnZUNhY2hpbmdUZW1wb3JhcnkpOwotI2lmIENP
TVBJTEVSKENMQU5HKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotI2VuZGlmCi0jZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQotCi0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VVVEkgPSBDR0ltYWdl
U291cmNlR2V0VHlwZShtX25hdGl2ZURlY29kZXIuZ2V0KCkpOwotICAgIHN0YXRpYyBjb25zdCBD
RlN0cmluZ1JlZiB4Ym1VVEkgPSBDRlNUUigicHVibGljLnhiaXRtYXAtaW1hZ2UiKTsKLQotICAg
IGlmICghaW1hZ2VVVEkpCi0gICAgICAgIHJldHVybiBpbWFnZTsKLQotICAgIGlmICghQ0ZFcXVh
bChpbWFnZVVUSSwgeGJtVVRJKSkKLSAgICAgICAgcmV0dXJuIGltYWdlOwotCi0gICAgLy8gSWYg
aXQgaXMgYW4geGJtIGltYWdlLCBtYXNrIG91dCBhbGwgdGhlIHdoaXRlIGFyZWFzIHRvIHJlbmRl
ciB0aGVtIHRyYW5zcGFyZW50LgotICAgIGNvbnN0IENHRmxvYXQgbWFza2luZ0NvbG9yc1s2XSA9
IHsyNTUsIDI1NSwgIDI1NSwgMjU1LCAyNTUsIDI1NX07Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IG1hc2tlZEltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aE1hc2tpbmdDb2xvcnMo
aW1hZ2UuZ2V0KCksIG1hc2tpbmdDb2xvcnMpKTsKLSAgICByZXR1cm4gbWFza2VkSW1hZ2UgPyBt
YXNrZWRJbWFnZSA6IGltYWdlOwotfQotCi12b2lkIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShDRkRh
dGFSZWYgZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgQ0dJbWFnZVNvdXJjZVVw
ZGF0ZURhdGEobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwot
fQotCi12b2lkIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQotewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIC8vIE9uIE1hYyB0
aGUgTlNEYXRhIGluc2lkZSB0aGUgU2hhcmVkQnVmZmVyIGNhbiBiZSBzZWNyZXRseSBhcHBlbmRl
ZCB0byB3aXRob3V0IHRoZSBTaGFyZWRCdWZmZXIncyBrbm93bGVkZ2UuCi0gICAgLy8gV2UgdXNl
IFNoYXJlZEJ1ZmZlcidzIGFiaWxpdHkgdG8gd3JhcCBpdHNlbGYgaW5zaWRlIENGRGF0YSB0byBn
ZXQgYXJvdW5kIHRoaXMsIGVuc3VyaW5nIHRoYXQgSW1hZ2VJTyBpcwotICAgIC8vIHJlYWxseSBs
b29raW5nIGF0IHRoZSBTaGFyZWRCdWZmZXIuCi0gICAgc2V0RGF0YShkYXRhLT5jcmVhdGVDRkRh
dGEoKS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKLSNlbHNlCi0gICAgLy8gQ3JlYXRlIGEgQ0dE
YXRhUHJvdmlkZXIgdG8gd3JhcCB0aGUgU2hhcmVkQnVmZmVyLgotICAgIGRhdGEtPnJlZigpOwot
ICAgIC8vIFdlIHVzZSB0aGUgR2V0Qnl0ZXNBdFBvc2l0aW9uIGNhbGxiYWNrIHJhdGhlciB0aGFu
IHRoZSBHZXRCeXRlUG9pbnRlciBvbmUgYmVjYXVzZSBTaGFyZWRCdWZmZXIKLSAgICAvLyBkb2Vz
IG5vdCBwcm92aWRlIGEgd2F5IHRvIGxvY2sgZG93biB0aGUgYnl0ZSBwb2ludGVyIGFuZCBndWFy
YW50ZWUgdGhhdCBpdCB3b24ndCBtb3ZlLCB3aGljaAotICAgIC8vIGlzIGEgcmVxdWlyZW1lbnQg
Zm9yIHVzaW5nIHRoZSBHZXRCeXRlUG9pbnRlciBjYWxsYmFjay4KLSAgICBDR0RhdGFQcm92aWRl
ckRpcmVjdENhbGxiYWNrcyBwcm92aWRlckNhbGxiYWNrcyA9IHsgMCwgMCwgMCwgc2hhcmVkQnVm
ZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uLCBzaGFyZWRCdWZmZXJSZWxlYXNlIH07Ci0gICAgUmV0YWlu
UHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3Zp
ZGVyQ3JlYXRlRGlyZWN0KGRhdGEsIGRhdGEtPnNpemUoKSwgJnByb3ZpZGVyQ2FsbGJhY2tzKSk7
Ci0gICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURhdGFQcm92aWRlcihtX25hdGl2ZURlY29kZXIuZ2V0
KCksIGRhdGFQcm92aWRlci5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKLSNlbmRpZgotfQogCiBJ
bWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uLCBJbWFnZVNv
dXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCiB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>