<?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>176910</bug_id>
          
          <creation_ts>2017-09-14 08:54:05 -0700</creation_ts>
          <short_desc>[Curl] Create a class dedicated to handle SSL related task</short_desc>
          <delta_ts>2017-09-27 12:27:14 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>galpeter</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1348772</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-14 08:54:05 -0700</bug_when>
    <thetext>Create SSLSettings/SSLVerifier classes to gather SSL related processes in one place.
And fixed file name from SSLHandle to CurlSSLHandle for classification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348775</commentid>
    <comment_count>1</comment_count>
      <attachid>320772</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-14 08:59:52 -0700</bug_when>
    <thetext>Created attachment 320772
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348778</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-14 09:01:52 -0700</bug_when>
    <thetext>Attachment 320772 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebCore/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349025</commentid>
    <comment_count>3</comment_count>
      <attachid>320827</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-14 14:54:48 -0700</bug_when>
    <thetext>Created attachment 320827
fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349027</commentid>
    <comment_count>4</comment_count>
      <attachid>320829</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-14 14:59:07 -0700</bug_when>
    <thetext>Created attachment 320829
fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349097</commentid>
    <comment_count>5</comment_count>
      <attachid>320829</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-14 16:57:57 -0700</bug_when>
    <thetext>Comment on attachment 320829
fix

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

&gt; Source/WebCore/platform/network/curl/CurlSSLHandle.cppSource/WebCore/platform/network/curl/SSLHandle.cpp:146
&gt; +// CurlSSLVeritifer -------------------------------------------------

I don&apos;t think comments like this are helpful.  This one&apos;s spelled wrong.

&gt; Source/WebCore/platform/network/curl/CurlSSLHandle.h:45
&gt; +class CurlSSLSettings {

We should have one class per file.  This file contains no class called CURLSSLHandle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349478</commentid>
    <comment_count>6</comment_count>
      <attachid>320952</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-15 12:59:45 -0700</bug_when>
    <thetext>Created attachment 320952
fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349479</commentid>
    <comment_count>7</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-15 13:01:17 -0700</bug_when>
    <thetext>Fixed. Separate files, use proper name for classes and remove unnecessary comments. Also reduce usage of singleton(), but put them into CurlContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349520</commentid>
    <comment_count>8</comment_count>
      <attachid>320952</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-15 13:44:59 -0700</bug_when>
    <thetext>Comment on attachment 320952
fixed

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

&gt; Source/WebCore/platform/network/curl/CurlSSLHandle.cpp:103
&gt; +        auto valueIter = (it-&gt;value).begin();
&gt; +        for (; valueIter != (it-&gt;value).end(); ++valueIter, ++certsIter) {

it-&gt;value should at least be given a name.  This loop can be made to be much more clear.

&gt; Source/WebCore/platform/network/curl/CurlSSLVerifier.h:91
&gt; +

This is a lot of whitespace.  Let&apos;s not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349543</commentid>
    <comment_count>9</comment_count>
      <attachid>320967</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-15 15:06:33 -0700</bug_when>
    <thetext>Created attachment 320967
fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349544</commentid>
    <comment_count>10</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-15 15:07:18 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #8)
&gt; Comment on attachment 320952 [details]
&gt; fixed
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=320952&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CurlSSLHandle.cpp:103
&gt; &gt; +        auto valueIter = (it-&gt;value).begin();
&gt; &gt; +        for (; valueIter != (it-&gt;value).end(); ++valueIter, ++certsIter) {
&gt; 
&gt; it-&gt;value should at least be given a name.  This loop can be made to be much
&gt; more clear.

Replaced with std::equal()

&gt; &gt; Source/WebCore/platform/network/curl/CurlSSLVerifier.h:91
&gt; &gt; +
&gt; 
&gt; This is a lot of whitespace.  Let&apos;s not.

removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349899</commentid>
    <comment_count>11</comment_count>
      <attachid>320967</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-18 08:41:18 -0700</bug_when>
    <thetext>Comment on attachment 320967
fixed

Clearing flags on attachment: 320967

Committed r222147: &lt;http://trac.webkit.org/changeset/222147&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349900</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-18 08:41:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353393</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:27:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693307&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320772</attachid>
            <date>2017-09-14 08:59:52 -0700</date>
            <delta_ts>2017-09-14 14:54:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>176910-1.diff</filename>
            <type>text/plain</type>
            <size>39688</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZGZhY2E1MGMzMS4uYmVhNjg2NjVhYzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw1OSBAQAogMjAxNy0wOS0xNCAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CiAKKyAgICAgICAgW0N1cmxdIENyZWF0ZSBhIGNsYXNzIGRlZGljYXRlZCB0byBoYW5k
bGUgU1NMIHJlbGF0ZWQgdGFzaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc2OTEwCisKKyAgICAgICAgQ3JlYXRlIFNTTFNldHRpbmdzL1NTTFZlcmlm
aWVyIGNsYXNzZXMgdG8gZ2F0aGVyIFNTTCByZWxhdGVkCisgICAgICAgIHByb2Nlc3NlcyBpbiBv
bmUgcGxhY2UuCisJCisJUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9DdXJsLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6Q3VybENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6c2V0Q0FDZXJ0UGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpjZXJ0aWZpY2F0ZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q3VybEhhbmRsZTo6ZW5hYmxlQ0FJbmZvSWZFeGlzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybEhhbmRsZTo6c2V0U3NsRXJyb3JzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxIYW5kbGU6OmdldFNzbEVycm9ycyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29u
dGV4dDo6Z2V0Q2VydGlmaWNhdGVQYXRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxDb250ZXh0OjpzaG91bGRJZ25vcmVTU0xFcnJvcnMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpzZXR1cFJlcXVlc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsU1NMSGFuZGxlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9TU0xIYW5kbGUuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybFNTTFNldHRpbmdzOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFNTTFNldHRpbmdzOjpDdXJsU1NMU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNT
TFNldHRpbmdzOjpnZXRDQUNlcnRQYXRoRW52KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xT
ZXR0aW5nczo6c2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybFNTTFNldHRpbmdzOjppc0FsbG93ZWRIVFRQU0NlcnRpZmljYXRlSG9zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsU1NMU2V0dGluZ3M6OmNhbklnbm9yZWRIVFRQU0NlcnRpZmlj
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xTZXR0aW5nczo6c2V0Q2xpZW50Q2VydGlm
aWNhdGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xTZXR0aW5nczo6Z2V0U1NMQ2xp
ZW50Q2VydGlmaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjpzZXRT
c2xDdHgpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjpjZXJ0VmVyaWZ5Q2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjpnZXRQZW1EYXRhRnJv
bUN0eCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMVmVyaWZpZXI6OmNvbnZlcnRUb1NTTENl
cnRpZmljYXRlRmxhZ3MpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NM
SGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFNldHRpbmdzOjpzaG91
bGRJZ25vcmVTU0xFcnJvcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFNldHRp
bmdzOjpnZXRDQUNlcnRQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xWZXJp
Zmllcjo6c2V0Q3VybEhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMVmVyaWZpZXI6
OnNldEhvc3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xWZXJpZmllcjo6c3NsRXJy
b3JzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55
SFRUUFNDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0
Q2xpZW50Q2VydGlmaWNhdGVJbmZvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXR1cFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6Om5vdGlmeUZhaWwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OndpbGxTZXR1
cFNzbEN0eCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6
d2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9TU0xIYW5kbGUuaDogUmVtb3ZlZC4KKworMjAxNy0wOS0xNCAgQmFzdWtlIFN1enVr
aSAgPEJhc3VrZS5TdXp1a2lAc29ueS5jb20+CisKICAgICAgICAgW0N1cmxdIFJlcGxhY2UgdGhl
IGltcGxlbWVudGF0aW9uIHdpdGggTmV0d29ya0xvYWRNZXRyaWNzCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY5MDYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0N1cmwuY21ha2UKaW5kZXggYmMxMjIzOTE5ZTcuLmZmYThkOTJmYjRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0N1cmwuY21ha2UKQEAgLTEwLDYgKzEwLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
U1NMSGFuZGxlLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9ETlNDdXJsLmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9Gb3JtRGF0YVN0cmVhbUN1cmwuY3BwCiAgICAgcGxhdGZv
cm0vbmV0d29yay9jdXJsL011bHRpcGFydEhhbmRsZS5jcHAKQEAgLTE3LDcgKzE4LDYgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVz
cG9uc2VDdXJsLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9TU0xIYW5kbGUuY3BwCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9TeW5jaHJvbm91c0xvYWRlckNsaWVudEN1cmwuY3Bw
CiApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxD
b250ZXh0LmNwcAppbmRleCA5MjM4MzYyMDNjYy4uNDk5YThmM2ExMDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcApAQCAt
MzgsMzUgKzM4LDEwIEBACiAjaW5jbHVkZSA8c2hsd2FwaS5oPgogI2VuZGlmCiAKLSNpZiBVU0Uo
Q0YpCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBDU3RyaW5nIGNlcnRp
ZmljYXRlUGF0aCgpCi17Ci0gICAgY2hhciogZW52UGF0aCA9IGdldGVudigiQ1VSTF9DQV9CVU5E
TEVfUEFUSCIpOwotICAgIGlmIChlbnZQYXRoKQotICAgICAgICByZXR1cm4gZW52UGF0aDsKLQot
I2lmIFVTRShDRikKLSAgICBDRkJ1bmRsZVJlZiB3ZWJLaXRCdW5kbGVSZWYgPSB3ZWJLaXRCdW5k
bGUoKTsKLSAgICBpZiAod2ViS2l0QnVuZGxlUmVmKSB7Ci0gICAgICAgIFJldGFpblB0cjxDRlVS
TFJlZj4gY2VydFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwod2ViS2l0
QnVuZGxlUmVmLCBDRlNUUigiY2FjZXJ0IiksIENGU1RSKCJwZW0iKSwgQ0ZTVFIoImNlcnRpZmlj
YXRlcyIpKSk7Ci0gICAgICAgIGlmIChjZXJ0VVJMUmVmKSB7Ci0gICAgICAgICAgICBjaGFyIHBh
dGhbTUFYX1BBVEhdOwotICAgICAgICAgICAgQ0ZVUkxHZXRGaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24oY2VydFVSTFJlZi5nZXQoKSwgZmFsc2UsIHJlaW50ZXJwcmV0X2Nhc3Q8VUludDgqPihwYXRo
KSwgTUFYX1BBVEgpOwotICAgICAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAgICAgIH0KLSAgICB9
Ci0jZW5kaWYKLQotICAgIHJldHVybiBDU3RyaW5nKCk7Ci19Ci0KIHN0YXRpYyBDU3RyaW5nIGNv
b2tpZUphclBhdGgoKQogewogICAgIGNoYXIqIGNvb2tpZUphclBhdGggPSBnZXRlbnYoIkNVUkxf
Q09PS0lFX0pBUl9QQVRIIik7CkBAIC0xMDUsMTMgKzgwLDEwIEBAIGNvbnN0IGNoYXIqIGNvbnN0
IEN1cmxDb250ZXh0OjplcnJvckRvbWFpbiA9ICJDdXJsRXJyb3JEb21haW4iOwogCiBDdXJsQ29u
dGV4dDo6Q3VybENvbnRleHQoKQogOiBtX2Nvb2tpZUphckZpbGVOYW1lIHsgY29va2llSmFyUGF0
aCgpIH0KLSwgbV9jZXJ0aWZpY2F0ZVBhdGggeyBjZXJ0aWZpY2F0ZVBhdGgoKSB9CiAsIG1fY29v
a2llSmFyIHsgc3RkOjptYWtlX3VuaXF1ZTxDb29raWVKYXJDdXJsRmlsZVN5c3RlbT4oKSB9CiB7
CiAgICAgaW5pdENvb2tpZVNlc3Npb24oKTsKIAotICAgIG1faWdub3JlU1NMRXJyb3JzID0gZ2V0
ZW52KCJXRUJLSVRfSUdOT1JFX1NTTF9FUlJPUlMiKTsKLQogI2lmbmRlZiBOREVCVUcKICAgICBt
X3ZlcmJvc2UgPSBnZXRlbnYoIkRFQlVHX0NVUkwiKTsKIApAQCAtNDY4LDExICs0NDAsMTAgQEAg
dm9pZCBDdXJsSGFuZGxlOjpzZXRIdHRwQXV0aFVzZXJQYXNzKGNvbnN0IFN0cmluZyYgdXNlciwg
Y29uc3QgU3RyaW5nJiBwYXNzd29yZCkKICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBD
VVJMT1BUX1VTRVJQV0QsIHVzZXJwYXNzLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEN1cmxI
YW5kbGU6OmVuYWJsZUNBSW5mb0lmRXhpc3RzKCkKK3ZvaWQgQ3VybEhhbmRsZTo6c2V0Q0FDZXJ0
UGF0aChjb25zdCBjaGFyKiBwYXRoKQogewotICAgIGNvbnN0IGNoYXIqIGNlcnRQYXRoID0gQ3Vy
bENvbnRleHQ6OnNpbmdsZXRvbigpLmdldENlcnRpZmljYXRlUGF0aCgpOwotICAgIGlmIChjZXJ0
UGF0aCkKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9DQUlORk8s
IGNlcnRQYXRoKTsKKyAgICBpZiAocGF0aCkKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hh
bmRsZSwgQ1VSTE9QVF9DQUlORk8sIHBhdGgpOwogfQogCiB2b2lkIEN1cmxIYW5kbGU6OnNldFNz
bFZlcmlmeVBlZXIoVmVyaWZ5UGVlciB2ZXJpZnlQZWVyKQpAQCAtNTAwLDE2ICs0NzEsNiBAQCB2
b2lkIEN1cmxIYW5kbGU6OnNldFNzbEtleVBhc3N3b3JkKGNvbnN0IGNoYXIqIHBhc3N3b3JkKQog
ICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfS0VZUEFTU1dELCBwYXNzd29y
ZCk7CiB9CiAKLXZvaWQgQ3VybEhhbmRsZTo6c2V0U3NsRXJyb3JzKHVuc2lnbmVkIHNzbEVycm9y
cykKLXsKLSAgICBtX3NzbEVycm9ycyA9IHNzbEVycm9yczsKLX0KLQotdW5zaWduZWQgQ3VybEhh
bmRsZTo6Z2V0U3NsRXJyb3JzKCkKLXsKLSAgICByZXR1cm4gbV9zc2xFcnJvcnM7Ci19Ci0KIHZv
aWQgQ3VybEhhbmRsZTo6ZW5hYmxlQ29va2llSmFySWZFeGlzdHMoKQogewogICAgIGNvbnN0IGNo
YXIqIGNvb2tpZUphciA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRDb29raWVKYXJGaWxl
TmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bENvbnRleHQuaAppbmRleCBmNDA0N2YyZmE1OS4uYWRiYTkwNzNkYzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCkBAIC0xMjAs
MTAgKzEyMCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvb2tpZUphckZpbGVOYW1lKGNvbnN0
IGNoYXIqIGNvb2tpZUphckZpbGVOYW1lKSB7IG1fY29va2llSmFyRmlsZU5hbWUgPSBDU3RyaW5n
KGNvb2tpZUphckZpbGVOYW1lKTsgfQogICAgIENvb2tpZUphckN1cmwmIGNvb2tpZUphcigpIHsg
cmV0dXJuICptX2Nvb2tpZUphcjsgfQogCi0gICAgLy8gQ2VydGlmaWNhdGUKLSAgICBjb25zdCBj
aGFyKiBnZXRDZXJ0aWZpY2F0ZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2NlcnRpZmljYXRlUGF0
aC5kYXRhKCk7IH0KLSAgICBib29sIHNob3VsZElnbm9yZVNTTEVycm9ycygpIGNvbnN0IHsgcmV0
dXJuIG1faWdub3JlU1NMRXJyb3JzOyB9Ci0KICAgICAvLyBQcm94eQogICAgIGNvbnN0IFByb3h5
SW5mbyYgcHJveHlJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eTsgfQogICAgIHZvaWQgc2V0
UHJveHlJbmZvKGNvbnN0IFByb3h5SW5mbyYgaW5mbykgeyBtX3Byb3h5ID0gaW5mbzsgIH0KQEAg
LTEzNywxMCArMTMzLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBQcm94eUluZm8gbV9wcm94
eTsKICAgICBDU3RyaW5nIG1fY29va2llSmFyRmlsZU5hbWU7Ci0gICAgQ1N0cmluZyBtX2NlcnRp
ZmljYXRlUGF0aDsKICAgICBDdXJsU2hhcmVIYW5kbGUgbV9zaGFyZUhhbmRsZTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q29va2llSmFyQ3VybD4gbV9jb29raWVKYXI7Ci0gICAgYm9vbCBtX2lnbm9y
ZVNTTEVycm9ycyB7IGZhbHNlIH07CiAKICAgICBDdXJsQ29udGV4dCgpOwogICAgIHZvaWQgaW5p
dENvb2tpZVNlc3Npb24oKTsKQEAgLTI2MiwxNCArMjU2LDEyIEBAIHB1YmxpYzoKICAgICB2b2lk
IGVuYWJsZUh0dHBBdXRoZW50aWNhdGlvbihsb25nKTsKICAgICB2b2lkIHNldEh0dHBBdXRoVXNl
clBhc3MoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAKLSAgICB2b2lkIGVuYWJsZUNB
SW5mb0lmRXhpc3RzKCk7CisgICAgdm9pZCBzZXRDQUNlcnRQYXRoKGNvbnN0IGNoYXIqKTsKICAg
ICB2b2lkIHNldFNzbFZlcmlmeVBlZXIoVmVyaWZ5UGVlcik7CiAgICAgdm9pZCBzZXRTc2xWZXJp
ZnlIb3N0KFZlcmlmeUhvc3QpOwogICAgIHZvaWQgc2V0U3NsQ2VydChjb25zdCBjaGFyKik7CiAg
ICAgdm9pZCBzZXRTc2xDZXJ0VHlwZShjb25zdCBjaGFyKik7CiAgICAgdm9pZCBzZXRTc2xLZXlQ
YXNzd29yZChjb25zdCBjaGFyKik7Ci0gICAgdm9pZCBzZXRTc2xFcnJvcnModW5zaWduZWQpOwot
ICAgIHVuc2lnbmVkIGdldFNzbEVycm9ycygpOwogCiAgICAgdm9pZCBlbmFibGVDb29raWVKYXJJ
ZkV4aXN0cygpOwogICAgIHZvaWQgc2V0Q29va2llTGlzdChjb25zdCBjaGFyKik7CkBAIC0zMDgs
NyArMzAwLDYgQEAgcHJpdmF0ZToKICAgICBDVVJMKiBtX2hhbmRsZSB7IG51bGxwdHIgfTsKICAg
ICBjaGFyIG1fZXJyb3JCdWZmZXJbQ1VSTF9FUlJPUl9TSVpFXSB7IH07CiAgICAgQ1VSTGNvZGUg
bV9lcnJvckNvZGU7Ci0gICAgdW5zaWduZWQgbV9zc2xFcnJvcnMgeyAwIH07CiAKICAgICBjaGFy
KiBtX3VybCB7IG51bGxwdHIgfTsKICAgICB2b2lkKiBtX3ByaXZhdGVEYXRhIHsgbnVsbHB0ciB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxE
b3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmNwcAppbmRleCAwYmUxNzNlZWJmMC4uNjQ2MDM2ODg4NjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaWYgVVNFKENVUkwpCiAKICNpbmNsdWRlICJDdXJsQ29udGV4dC5o
IgorI2luY2x1ZGUgIkN1cmxTU0xIYW5kbGUuaCIKICNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMu
aCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5o
IgpAQCAtMTE5LDcgKzEyMCw4IEBAIHZvaWQgQ3VybERvd25sb2FkOjpzZXR1cFJlcXVlc3QoKQog
ICAgIG1fY3VybEhhbmRsZS5zZXRXcml0ZUNhbGxiYWNrRnVuY3Rpb24od3JpdGVDYWxsYmFjaywg
dGhpcyk7CiAgICAgbV9jdXJsSGFuZGxlLmVuYWJsZUZvbGxvd0xvY2F0aW9uKCk7CiAgICAgbV9j
dXJsSGFuZGxlLmVuYWJsZUh0dHBBdXRoZW50aWNhdGlvbihDVVJMQVVUSF9BTlkpOwotICAgIG1f
Y3VybEhhbmRsZS5lbmFibGVDQUluZm9JZkV4aXN0cygpOworICAgIG1fY3VybEhhbmRsZS5zZXRD
QUNlcnRQYXRoKEN1cmxTU0xTZXR0aW5nczo6c2luZ2xldG9uKCkuZ2V0Q0FDZXJ0UGF0aCgpKTsK
KwogfQogCiB2b2lkIEN1cmxEb3dubG9hZDo6bm90aWZ5RmluaXNoKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9TU0xIYW5kbGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xIYW5kbGUuY3BwCnNpbWlsYXJp
dHkgaW5kZXggNjklCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9TU0xIYW5kbGUuY3BwCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybFNTTEhhbmRsZS5jcHAKaW5kZXggOTZmYWNjZThlZjkuLjRiODExNzVmOGNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU1NMSGFu
ZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNT
TEhhbmRsZS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjQsODMgKzI1LDIxNCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
dXJsU1NMSGFuZGxlLmgiCiAKICNpZiBVU0UoQ1VSTCkKIAotI2luY2x1ZGUgIlNTTEhhbmRsZS5o
IgorI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCisjaWYgT1MoV0lORE9X
UykKKyNpbmNsdWRlICJXZWJDb3JlQnVuZGxlV2luLmgiCisjZW5kaWYKIAotI2luY2x1ZGUgPG9w
ZW5zc2wvcGVtLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KLSNpbmNsdWRlIDxvcGVuc3Ns
L3g1MDlfdmZ5Lmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lmIFVT
RShDRikKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIExpc3RIYXNoU2V0PFN0cmluZz4sIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIGFsbG93ZWRIb3N0cygpCisvLyBDdXJsU1NMU2V0dGlu
Z3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
Q3VybFNTTFNldHRpbmdzJiBDdXJsU1NMU2V0dGluZ3M6OnNpbmdsZXRvbigpCiB7Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBMaXN0SGFzaFNldDxTdHJpbmc+LCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Q3VybFNTTFNldHRpbmdzPiBzaGFyZWQ7CisgICAgcmV0dXJuIHNo
YXJlZDsKIH0KIAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBDbGllbnRDZXJ0aWZpY2F0ZSwgQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgYWxsb3dlZENsaWVudEhvc3RzKCkKK0N1cmxTU0xTZXR0
aW5nczo6Q3VybFNTTFNldHRpbmdzKCkKKyAgICA6IG1fY2FDZXJ0UGF0aChnZXRDQUNlcnRQYXRo
RW52KCkpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBDbGll
bnRDZXJ0aWZpY2F0ZSwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4gbWFwOwotICAgIHJldHVy
biBtYXA7CisgICAgY2hhciogaWdub3JlU1NMRXJyb3JzID0gZ2V0ZW52KCJXRUJLSVRfSUdOT1JF
X1NTTF9FUlJPUlMiKTsKKyAgICBpZiAoaWdub3JlU1NMRXJyb3JzKQorICAgICAgICBtX2lnbm9y
ZVNTTEVycm9ycyA9IHRydWU7CiB9CiAKLXZvaWQgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhv
c3RzKGNvbnN0IFN0cmluZyYgaG9zdCkKK0NTdHJpbmcgQ3VybFNTTFNldHRpbmdzOjpnZXRDQUNl
cnRQYXRoRW52KCkKIHsKLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IGNlcnRpZmljYXRlczsKLSAg
ICBhbGxvd2VkSG9zdHMoKS5zZXQoaG9zdCwgY2VydGlmaWNhdGVzKTsKKyAgICBjaGFyKiBlbnZQ
YXRoID0gZ2V0ZW52KCJDVVJMX0NBX0JVTkRMRV9QQVRIIik7CisgICAgaWYgKGVudlBhdGgpCisg
ICAgICAgIHJldHVybiBlbnZQYXRoOworCisjaWYgVVNFKENGKQorICAgIENGQnVuZGxlUmVmIHdl
YktpdEJ1bmRsZVJlZiA9IHdlYktpdEJ1bmRsZSgpOworICAgIGlmICh3ZWJLaXRCdW5kbGVSZWYp
IHsKKyAgICAgICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZXJ0VVJMUmVmID0gYWRvcHRDRihDRkJ1
bmRsZUNvcHlSZXNvdXJjZVVSTCh3ZWJLaXRCdW5kbGVSZWYsIENGU1RSKCJjYWNlcnQiKSwgQ0ZT
VFIoInBlbSIpLCBDRlNUUigiY2VydGlmaWNhdGVzIikpKTsKKyAgICAgICAgaWYgKGNlcnRVUkxS
ZWYpIHsKKyAgICAgICAgICAgIGNoYXIgcGF0aFtNQVhfUEFUSF07CisgICAgICAgICAgICBDRlVS
TEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjZXJ0VVJMUmVmLmdldCgpLCBmYWxzZSwgcmVp
bnRlcnByZXRfY2FzdDxVSW50OCo+KHBhdGgpLCBNQVhfUEFUSCk7CisgICAgICAgICAgICByZXR1
cm4gcGF0aDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIENTdHJpbmco
KTsKIH0KIAotdm9pZCBhZGRBbGxvd2VkQ2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBo
b3N0LCBjb25zdCBTdHJpbmcmIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQg
Q3VybFNTTFNldHRpbmdzOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBT
dHJpbmcmIGhvc3ROYW1lKQogewotICAgIENsaWVudENlcnRpZmljYXRlIGNsaWVudEluZm8geyBj
ZXJ0aWZpY2F0ZSwga2V5IH07Ci0gICAgYWxsb3dlZENsaWVudEhvc3RzKCkuc2V0KGhvc3QsIGNs
aWVudEluZm8pOworICAgIExvY2tIb2xkZXIgbXV0ZXgobV9tdXRleCk7CisKKyAgICBMaXN0SGFz
aFNldDxTdHJpbmc+IGNlcnRpZmljYXRlczsKKyAgICBtX2FsbG93ZWRIb3N0cy5zZXQoaG9zdE5h
bWUsIGNlcnRpZmljYXRlcyk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8Q2xpZW50Q2VydGlmaWNhdGU+
IGdldFNTTENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCkKK2Jvb2wgQ3VybFNT
TFNldHRpbmdzOjppc0FsbG93ZWRIVFRQU0NlcnRpZmljYXRlSG9zdChjb25zdCBTdHJpbmcmIGhv
c3ROYW1lKQogewotICAgIGF1dG8gaXQgPSBhbGxvd2VkQ2xpZW50SG9zdHMoKS5maW5kKGhvc3Qp
OwotICAgIGlmIChpdCA9PSBhbGxvd2VkQ2xpZW50SG9zdHMoKS5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBMb2NrSG9sZGVyIG11dGV4KG1fbXV0ZXgpOwogCi0gICAg
cmV0dXJuIGl0LT52YWx1ZTsKKyAgICBhdXRvIGl0ID0gbV9hbGxvd2VkSG9zdHMuZmluZChob3N0
TmFtZSk7CisgICAgcmV0dXJuIChpdCAhPSBtX2FsbG93ZWRIb3N0cy5lbmQoKSk7CiB9CiAKLWJv
b2wgc3NsSWdub3JlSFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QsIGNvbnN0IExp
c3RIYXNoU2V0PFN0cmluZz4mIGNlcnRpZmljYXRlcykKK2Jvb2wgQ3VybFNTTFNldHRpbmdzOjpj
YW5JZ25vcmVkSFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3ROYW1lLCBjb25zdCBM
aXN0SGFzaFNldDxTdHJpbmc+JiBjZXJ0aWZpY2F0ZXMpCiB7Ci0gICAgYXV0byBpdCA9IGFsbG93
ZWRIb3N0cygpLmZpbmQoaG9zdCk7Ci0gICAgaWYgKGl0ICE9IGFsbG93ZWRIb3N0cygpLmVuZCgp
KSB7CisgICAgTG9ja0hvbGRlciBtdXRleChtX211dGV4KTsKKworICAgIGF1dG8gaXQgPSBtX2Fs
bG93ZWRIb3N0cy5maW5kKGhvc3ROYW1lKTsKKyAgICBpZiAoaXQgIT0gbV9hbGxvd2VkSG9zdHMu
ZW5kKCkpIHsKICAgICAgICAgaWYgKChpdC0+dmFsdWUpLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgaXQtPnZhbHVlID0gY2VydGlmaWNhdGVzOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKGNlcnRpZmljYXRlcy5zaXplKCkgIT0gaXQtPnZhbHVlLnNp
emUoKSkKKworICAgICAgICBpZiAoaXQtPnZhbHVlLnNpemUoKSAhPSBjZXJ0aWZpY2F0ZXMuc2l6
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgIGF1dG8gY2VydHNJdGVy
ID0gY2VydGlmaWNhdGVzLmJlZ2luKCk7CiAgICAgICAgIGF1dG8gdmFsdWVJdGVyID0gKGl0LT52
YWx1ZSkuYmVnaW4oKTsKICAgICAgICAgZm9yICg7IHZhbHVlSXRlciAhPSAoaXQtPnZhbHVlKS5l
bmQoKTsgKyt2YWx1ZUl0ZXIsICsrY2VydHNJdGVyKSB7CiAgICAgICAgICAgICBpZiAoKmNlcnRz
SXRlciAhPSAqdmFsdWVJdGVyKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQorCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdW5zaWduZWQgc3NsQ2VydGlmaWNhdGVGbGFnKGNvbnN0IHVuc2lnbmVkJiBzc2xFcnJv
cikKK3ZvaWQgQ3VybFNTTFNldHRpbmdzOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZUluZm8oY29uc3Qg
U3RyaW5nJiBob3N0TmFtZSwgY29uc3QgU3RyaW5nJiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5n
JiBrZXkpCit7CisgICAgTG9ja0hvbGRlciBtdXRleChtX211dGV4KTsKKworICAgIENsaWVudENl
cnRpZmljYXRlIGNsaWVudEluZm8oY2VydGlmaWNhdGUsIGtleSk7CisgICAgbV9hbGxvd2VkQ2xp
ZW50SG9zdHMuc2V0KGhvc3ROYW1lLCBjbGllbnRJbmZvKTsKK30KKworc3RkOjpvcHRpb25hbDxD
dXJsU1NMU2V0dGluZ3M6OkNsaWVudENlcnRpZmljYXRlPiBDdXJsU1NMU2V0dGluZ3M6OmdldFNT
TENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUpCit7CisgICAgTG9ja0hv
bGRlciBtdXRleChtX211dGV4KTsKKworICAgIGF1dG8gaXQgPSBtX2FsbG93ZWRDbGllbnRIb3N0
cy5maW5kKGhvc3ROYW1lKTsKKyAgICBpZiAoaXQgPT0gbV9hbGxvd2VkQ2xpZW50SG9zdHMuZW5k
KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gaXQtPnZhbHVl
OworfQorCisKKworLy8gQ3VybFNTTFZlcml0aWZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgQ3VybFNTTFZlcmlmaWVyOjpzZXRTc2xD
dHgodm9pZCogc3NsQ3R4KQoreworICAgIGlmICghc3NsQ3R4KQorICAgICAgICByZXR1cm47CisK
KyAgICBTU0xfQ1RYX3NldF9hcHBfZGF0YShzdGF0aWNfY2FzdDxTU0xfQ1RYKj4oc3NsQ3R4KSwg
dGhpcyk7CisgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHN0YXRpY19jYXN0PFNTTF9DVFgqPihzc2xD
dHgpLCBTU0xfVkVSSUZZX1BFRVIsIGNlcnRWZXJpZnlDYWxsYmFjayk7Cit9CisKK2ludCBDdXJs
U1NMVmVyaWZpZXI6OmNlcnRWZXJpZnlDYWxsYmFjayhpbnQgb2ssIFg1MDlfU1RPUkVfQ1RYKiBz
dG9yZUN0eCkKK3sKKyAgICAvLyB3aGV0aGVyIHRoZSB2ZXJpZmljYXRpb24gb2YgdGhlIGNlcnRp
ZmljYXRlIGluIHF1ZXN0aW9uIHdhcyBwYXNzZWQgKHByZXZlcmlmeV9vaz0xKSBvciBub3QgKHBy
ZXZlcmlmeV9vaz0wKQorICAgIGludCBjZXJ0RXJyQ2QgPSBYNTA5X1NUT1JFX0NUWF9nZXRfZXJy
b3Ioc3RvcmVDdHgpOworICAgIGlmICghY2VydEVyckNkKQorICAgICAgICByZXR1cm4gMTsKKwor
ICAgIFNTTCogc3NsID0gc3RhdGljX2Nhc3Q8U1NMKj4oWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X2Rh
dGEoc3RvcmVDdHgsIFNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHgoKSkpOworICAg
IFNTTF9DVFgqIHNzbEN0eCA9IFNTTF9nZXRfU1NMX0NUWChzc2wpOworICAgIEN1cmxTU0xWZXJp
ZmllciogdmVyaWZpZXIgPSBzdGF0aWNfY2FzdDxDdXJsU1NMVmVyaWZpZXIqPihTU0xfQ1RYX2dl
dF9hcHBfZGF0YShzc2xDdHgpKTsKKyAgICBpZiAodmVyaWZpZXIpCisgICAgICAgIHJldHVybiAw
OworCisgICAgdmVyaWZpZXItPm1fc3NsRXJyb3JzID0gc3RhdGljX2Nhc3Q8aW50Pih2ZXJpZmll
ci0+Y29udmVydFRvU1NMQ2VydGlmaWNhdGVGbGFncyhjZXJ0RXJyQ2QpKTsKKworI2lmIE9TKFdJ
TkRPV1MpCisgICAgb2sgPSBDdXJsU1NMU2V0dGluZ3M6OnNpbmdsZXRvbigpLmlzQWxsb3dlZEhU
VFBTQ2VydGlmaWNhdGVIb3N0KHZlcmlmaWVyLT5tX2hvc3ROYW1lKTsKKyNlbHNlCisgICAgTGlz
dEhhc2hTZXQ8U3RyaW5nPiBjZXJ0aWZpY2F0ZXM7CisgICAgaWYgKCFnZXRQZW1EYXRhRnJvbUN0
eChzdG9yZUN0eCwgY2VydGlmaWNhdGVzKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBvayA9
IEN1cmxTU0xTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FuSWdub3JlZEhUVFBTQ2VydGlmaWNhdGUo
dmVyaWZpZXItPm1faG9zdE5hbWUsIGNlcnRpZmljYXRlcyk7CisjZW5kaWYKKworICAgIGlmIChv
aykgeworICAgICAgICAvLyBpZiB0aGUgaG9zdCBhbmQgdGhlIGNlcnRpZmljYXRlIGFyZSBzdG9y
ZWQgZm9yIHRoZSBjdXJyZW50IGhhbmRsZSB0aGF0IG1lYW5zIGlzIGVuYWJsZWQsCisgICAgICAg
IC8vIHNvIGRvbid0IG5lZWQgdG8gY3VybCB2ZXJpZmllcyB0aGUgYXV0aGVudGljaXR5IG9mIHRo
ZSBwZWVyJ3MgY2VydGlmaWNhdGUKKyAgICAgICAgaWYgKHZlcmlmaWVyLT5tX2N1cmxIYW5kbGUp
CisgICAgICAgICAgICB2ZXJpZmllci0+bV9jdXJsSGFuZGxlLT5zZXRTc2xWZXJpZnlQZWVyKEN1
cmxIYW5kbGU6OlZlcmlmeVBlZXJEaXNhYmxlKTsKKyAgICB9CisKKyAgICByZXR1cm4gb2s7Cit9
CisKKyNpZiAhT1MoV0lORE9XUykKKworLy8gc3VjY2VzcyBvZiBjZXJ0aWZpY2F0ZXMgZXh0cmFj
dGlvbgorYm9vbCBDdXJsU1NMVmVyaWZpZXI6OmdldFBlbURhdGFGcm9tQ3R4KFg1MDlfU1RPUkVf
Q1RYKiBjdHgsIExpc3RIYXNoU2V0PFN0cmluZz4mIGNlcnRpZmljYXRlcykKK3sKKyAgICBib29s
IG9rID0gdHJ1ZTsKKyAgICBTVEFDS19PRihYNTA5KSogY2VydHMgPSBYNTA5X1NUT1JFX0NUWF9n
ZXQxX2NoYWluKGN0eCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBza19YNTA5X251bShjZXJ0
cyk7IGkrKykgeworICAgICAgICBYNTA5KiB1Q2VydCA9IHNrX1g1MDlfdmFsdWUoY2VydHMsIGkp
OworICAgICAgICBCSU8qIGJpbyA9IEJJT19uZXcoQklPX3NfbWVtKCkpOworICAgICAgICBpbnQg
cmVzID0gUEVNX3dyaXRlX2Jpb19YNTA5KGJpbywgdUNlcnQpOworICAgICAgICBpZiAoIXJlcykg
eworICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIEJJT19mcmVlKGJpbyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGNl
cnRpZmljYXRlRGF0YTsKKyAgICAgICAgbG9uZyBsZW5ndGggPSBCSU9fZ2V0X21lbV9kYXRhKGJp
bywgJmNlcnRpZmljYXRlRGF0YSk7CisgICAgICAgIGlmIChsZW5ndGggPCAwKSB7CisgICAgICAg
ICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgQklPX2ZyZWUoYmlvKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2VydGlmaWNhdGVEYXRhW2xlbmd0aF0gPSAn
XDAnOworICAgICAgICBTdHJpbmcgY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZURhdGE7CisgICAg
ICAgIGNlcnRpZmljYXRlcy5hZGQoY2VydGlmaWNhdGUpOworICAgICAgICBCSU9fZnJlZShiaW8p
OworICAgIH0KKworICAgIHNrX1g1MDlfcG9wX2ZyZWUoY2VydHMsIFg1MDlfZnJlZSk7CisgICAg
cmV0dXJuIG9rOworfQorCisjZW5kaWYKKworQ3VybFNTTFZlcmlmaWVyOjpTU0xDZXJ0aWZpY2F0
ZUZsYWdzIEN1cmxTU0xWZXJpZmllcjo6Y29udmVydFRvU1NMQ2VydGlmaWNhdGVGbGFncyhjb25z
dCB1bnNpZ25lZCYgc3NsRXJyb3IpCiB7CiAgICAgc3dpdGNoIChzc2xFcnJvcikgewogICAgIGNh
c2UgWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0lTU1VFUl9DRVJUIDogLy8gdGhlIGlzc3VlciBj
ZXJ0aWZpY2F0ZSBjb3VsZCBub3QgYmUgZm91bmQ6IHRoaXMgb2NjdXJzIGlmIHRoZSBpc3N1ZXIg
Y2VydGlmaWNhdGUgb2YgYW4gdW50cnVzdGVkIGNlcnRpZmljYXRlIGNhbm5vdCBiZSBmb3VuZC4K
ICAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxFX1RPX0dFVF9DUkwgOiAvLyB0aGUgQ1JMIG9mIGEg
Y2VydGlmaWNhdGUgY291bGQgbm90IGJlIGZvdW5kLgogICAgIGNhc2UgWDUwOV9WX0VSUl9VTkFC
TEVfVE9fR0VUX0lTU1VFUl9DRVJUX0xPQ0FMTFkgOiAvLyB0aGUgaXNzdWVyIGNlcnRpZmljYXRl
IG9mIGEgbG9jYWxseSBsb29rZWQgdXAgY2VydGlmaWNhdGUgY291bGQgbm90IGJlIGZvdW5kLiBU
aGlzIG5vcm1hbGx5IG1lYW5zIHRoZSBsaXN0IG9mIHRydXN0ZWQgY2VydGlmaWNhdGVzIGlzIG5v
dCBjb21wbGV0ZS4KLSAgICAgICAgcmV0dXJuIFNTTF9DRVJUSUZJQ0FURV9VTktOT1dOX0NBOwor
ICAgICAgICByZXR1cm4gU1NMQ2VydGlmaWNhdGVGbGFnczo6U1NMX0NFUlRJRklDQVRFX1VOS05P
V05fQ0E7CiAgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNSWVBUX0NFUlRfU0lHTkFU
VVJFIDogLy8gdGhlIGNlcnRpZmljYXRlIHNpZ25hdHVyZSBjb3VsZCBub3QgYmUgZGVjcnlwdGVk
LiBUaGlzIG1lYW5zIHRoYXQgdGhlIGFjdHVhbCBzaWduYXR1cmUgdmFsdWUgY291bGQgbm90IGJl
IGRldGVybWluZWQgcmF0aGVyIHRoYW4gaXQgbm90IG1hdGNoaW5nIHRoZSBleHBlY3RlZCB2YWx1
ZSwgdGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwgZm9yIFJTQSBrZXlzLgogICAgIGNhc2UgWDUwOV9W
X0VSUl9VTkFCTEVfVE9fREVDUllQVF9DUkxfU0lHTkFUVVJFIDogLy8gdGhlIENSTCBzaWduYXR1
cmUgY291bGQgbm90IGJlIGRlY3J5cHRlZDogdGhpcyBtZWFucyB0aGF0IHRoZSBhY3R1YWwgc2ln
bmF0dXJlIHZhbHVlIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkIHJhdGhlciB0aGFuIGl0IG5vdCBt
YXRjaGluZyB0aGUgZXhwZWN0ZWQgdmFsdWUuIFVudXNlZC4KICAgICBjYXNlIFg1MDlfVl9FUlJf
VU5BQkxFX1RPX0RFQ09ERV9JU1NVRVJfUFVCTElDX0tFWSA6IC8vIHRoZSBwdWJsaWMga2V5IGlu
IHRoZSBjZXJ0aWZpY2F0ZSBTdWJqZWN0UHVibGljS2V5SW5mbyBjb3VsZCBub3QgYmUgcmVhZC4K
QEAgLTExMywxMyArMjQ1LDEzIEBAIHVuc2lnbmVkIHNzbENlcnRpZmljYXRlRmxhZyhjb25zdCB1
bnNpZ25lZCYgc3NsRXJyb3IpCiAgICAgY2FzZSBYNTA5X1ZfRVJSX0NFUlRfUkVKRUNURUQgOiAv
LyB0aGUgcm9vdCBDQSBpcyBtYXJrZWQgdG8gcmVqZWN0IHRoZSBzcGVjaWZpZWQgcHVycG9zZS4K
ICAgICBjYXNlIFg1MDlfVl9FUlJfTk9fRVhQTElDSVRfUE9MSUNZIDogLy8gdGhlIHZlcmlmaWNh
dGlvbiBmbGFncyB3ZXJlIHNldCB0byByZXF1aXJlIGFuZCBleHBsaWNpdCBwb2xpY3kgYnV0IG5v
bmUgd2FzIHByZXNlbnQuCiAgICAgY2FzZSBYNTA5X1ZfRVJSX0RJRkZFUkVOVF9DUkxfU0NPUEUg
OiAvLyB0aGUgb25seSBDUkxzIHRoYXQgY291bGQgYmUgZm91bmQgZGlkIG5vdCBtYXRjaCB0aGUg
c2NvcGUgb2YgdGhlIGNlcnRpZmljYXRlLgotICAgICAgICByZXR1cm4gU1NMX0NFUlRJRklDQVRF
X0lOU0VDVVJFOworICAgICAgICByZXR1cm4gU1NMQ2VydGlmaWNhdGVGbGFnczo6U1NMX0NFUlRJ
RklDQVRFX0lOU0VDVVJFOwogICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX05PVF9ZRVRfVkFMSUQg
OiAvLyB0aGUgY2VydGlmaWNhdGUgaXMgbm90IHlldCB2YWxpZDogdGhlIG5vdEJlZm9yZSBkYXRl
IGlzIGFmdGVyIHRoZSBjdXJyZW50IHRpbWUuCiAgICAgY2FzZSBYNTA5X1ZfRVJSX0NSTF9OT1Rf
WUVUX1ZBTElEIDogLy8gdGhlIENSTCBpcyBub3QgeWV0IHZhbGlkLgotICAgICAgICByZXR1cm4g
U1NMX0NFUlRJRklDQVRFX05PVF9BQ1RJVkFURUQ7CisgICAgICAgIHJldHVybiBTU0xDZXJ0aWZp
Y2F0ZUZsYWdzOjpTU0xfQ0VSVElGSUNBVEVfTk9UX0FDVElWQVRFRDsKICAgICBjYXNlIFg1MDlf
Vl9FUlJfQ0VSVF9IQVNfRVhQSVJFRCA6IC8vIHRoZSBjZXJ0aWZpY2F0ZSBoYXMgZXhwaXJlZDog
dGhhdCBpcyB0aGUgbm90QWZ0ZXIgZGF0ZSBpcyBiZWZvcmUgdGhlIGN1cnJlbnQgdGltZS4KICAg
ICBjYXNlIFg1MDlfVl9FUlJfQ1JMX0hBU19FWFBJUkVEIDogLy8gdGhlIENSTCBoYXMgZXhwaXJl
ZC4KLSAgICAgICAgcmV0dXJuIFNTTF9DRVJUSUZJQ0FURV9FWFBJUkVEOworICAgICAgICByZXR1
cm4gU1NMQ2VydGlmaWNhdGVGbGFnczo6U1NMX0NFUlRJRklDQVRFX0VYUElSRUQ7CiAgICAgY2Fz
ZSBYNTA5X1ZfRVJSX0VSUk9SX0lOX0NFUlRfTk9UX0JFRk9SRV9GSUVMRCA6IC8vIHRoZSBjZXJ0
aWZpY2F0ZSBub3RCZWZvcmUgZmllbGQgY29udGFpbnMgYW4gaW52YWxpZCB0aW1lLgogICAgIGNh
c2UgWDUwOV9WX0VSUl9FUlJPUl9JTl9DRVJUX05PVF9BRlRFUl9GSUVMRCA6IC8vIHRoZSBjZXJ0
aWZpY2F0ZSBub3RBZnRlciBmaWVsZCBjb250YWlucyBhbiBpbnZhbGlkIHRpbWUuCiAgICAgY2Fz
ZSBYNTA5X1ZfRVJSX0VSUk9SX0lOX0NSTF9MQVNUX1VQREFURV9GSUVMRCA6IC8vIHRoZSBDUkwg
bGFzdFVwZGF0ZSBmaWVsZCBjb250YWlucyBhbiBpbnZhbGlkIHRpbWUuCkBAIC0xMzcsOTcgKzI2
OSwxOCBAQCB1bnNpZ25lZCBzc2xDZXJ0aWZpY2F0ZUZsYWcoY29uc3QgdW5zaWduZWQmIHNzbEVy
cm9yKQogICAgIGNhc2UgWDUwOV9WX0VSUl9VTlNVUFBPUlRFRF9DT05TVFJBSU5UX1NZTlRBWCA6
IC8vIHRoZSBmb3JtYXQgb2YgdGhlIG5hbWUgY29uc3RyYWludCBpcyBub3QgcmVjb2duaXNlZDog
Zm9yIGV4YW1wbGUgYW4gZW1haWwgYWRkcmVzcyBmb3JtYXQgb2YgYSBmb3JtIG5vdCBtZW50aW9u
ZWQgaW4gUkZDMzI4MC4gVGhpcyBjb3VsZCBiZSBjYXVzZWQgYnkgYSBnYXJiYWdlIGV4dGVuc2lv
biBvciBzb21lIG5ldyBmZWF0dXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgogICAgIGNhc2Ug
WDUwOV9WX0VSUl9DUkxfUEFUSF9WQUxJREFUSU9OX0VSUk9SIDogLy8gYW4gZXJyb3Igb2NjdXJl
ZCB3aGVuIGF0dGVtcHRpbmcgdG8gdmVyaWZ5IHRoZSBDUkwgcGF0aC4gVGhpcyBlcnJvciBjYW4g
b25seSBoYXBwZW4gaWYgZXh0ZW5kZWQgQ1JMIGNoZWNraW5nIGlzIGVuYWJsZWQuCiAgICAgY2Fz
ZSBYNTA5X1ZfRVJSX0FQUExJQ0FUSU9OX1ZFUklGSUNBVElPTiA6IC8vIGFuIGFwcGxpY2F0aW9u
IHNwZWNpZmljIGVycm9yLiBUaGlzIHdpbGwgbmV2ZXIgYmUgcmV0dXJuZWQgdW5sZXNzIGV4cGxp
Y2l0bHkgc2V0IGJ5IGFuIGFwcGxpY2F0aW9uLgotICAgICAgICByZXR1cm4gU1NMX0NFUlRJRklD
QVRFX0dFTkVSSUNfRVJST1I7CisgICAgICAgIHJldHVybiBTU0xDZXJ0aWZpY2F0ZUZsYWdzOjpT
U0xfQ0VSVElGSUNBVEVfR0VORVJJQ19FUlJPUjsKICAgICBjYXNlIFg1MDlfVl9FUlJfQ0VSVF9S
RVZPS0VEIDogLy8gdGhlIGNlcnRpZmljYXRlIGhhcyBiZWVuIHJldm9rZWQuCi0gICAgICAgIHJl
dHVybiBTU0xfQ0VSVElGSUNBVEVfUkVWT0tFRDsKKyAgICAgICAgcmV0dXJuIFNTTENlcnRpZmlj
YXRlRmxhZ3M6OlNTTF9DRVJUSUZJQ0FURV9SRVZPS0VEOwogICAgIGNhc2UgWDUwOV9WX0VSUl9J
TlZBTElEX0NBIDogLy8gYSBDQSBjZXJ0aWZpY2F0ZSBpcyBpbnZhbGlkLiBFaXRoZXIgaXQgaXMg
bm90IGEgQ0Egb3IgaXRzIGV4dGVuc2lvbnMgYXJlIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIHN1
cHBsaWVkIHB1cnBvc2UuCiAgICAgY2FzZSBYNTA5X1ZfRVJSX1NVQkpFQ1RfSVNTVUVSX01JU01B
VENIIDogLy8gdGhlIGN1cnJlbnQgY2FuZGlkYXRlIGlzc3VlciBjZXJ0aWZpY2F0ZSB3YXMgcmVq
ZWN0ZWQgYmVjYXVzZSBpdHMgc3ViamVjdCBuYW1lIGRpZCBub3QgbWF0Y2ggdGhlIGlzc3VlciBu
YW1lIG9mIHRoZSBjdXJyZW50IGNlcnRpZmljYXRlLiBUaGlzIGlzIG9ubHkgc2V0IGlmIGlzc3Vl
ciBjaGVjayBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCBpdCBpcyB1c2VkIGZvciBzdGF0dXMgbm90aWZp
Y2F0aW9uIGFuZCBpcyBub3QgaW4gaXRzZWxmIGFuIGVycm9yLgogICAgIGNhc2UgWDUwOV9WX0VS
Ul9BS0lEX1NLSURfTUlTTUFUQ0ggOiAvLyB0aGUgY3VycmVudCBjYW5kaWRhdGUgaXNzdWVyIGNl
cnRpZmljYXRlIHdhcyByZWplY3RlZCBiZWNhdXNlIGl0cyBzdWJqZWN0IGtleSBpZGVudGlmaWVy
IHdhcyBwcmVzZW50IGFuZCBkaWQgbm90IG1hdGNoIHRoZSBhdXRob3JpdHkga2V5IGlkZW50aWZp
ZXIgY3VycmVudCBjZXJ0aWZpY2F0ZS4gVGhpcyBpcyBvbmx5IHNldCBpZiBpc3N1ZXIgY2hlY2sg
ZGVidWdnaW5nIGlzIGVuYWJsZWQgaXQgaXMgdXNlZCBmb3Igc3RhdHVzIG5vdGlmaWNhdGlvbiBh
bmQgaXMgbm90IGluIGl0c2VsZiBhbiBlcnJvci4KICAgICBjYXNlIFg1MDlfVl9FUlJfQUtJRF9J
U1NVRVJfU0VSSUFMX01JU01BVENIIDogLy8gdGhlIGN1cnJlbnQgY2FuZGlkYXRlIGlzc3VlciBj
ZXJ0aWZpY2F0ZSB3YXMgcmVqZWN0ZWQgYmVjYXVzZSBpdHMgaXNzdWVyIG5hbWUgYW5kIHNlcmlh
bCBudW1iZXIgd2FzIHByZXNlbnQgYW5kIGRpZCBub3QgbWF0Y2ggdGhlIGF1dGhvcml0eSBrZXkg
aWRlbnRpZmllciBvZiB0aGUgY3VycmVudCBjZXJ0aWZpY2F0ZS4gVGhpcyBpcyBvbmx5IHNldCBp
ZiBpc3N1ZXIgY2hlY2sgZGVidWdnaW5nIGlzIGVuYWJsZWQgaXQgaXMgdXNlZCBmb3Igc3RhdHVz
IG5vdGlmaWNhdGlvbiBhbmQgaXMgbm90IGluIGl0c2VsZiBhbiBlcnJvci4KICAgICBjYXNlIFg1
MDlfVl9FUlJfS0VZVVNBR0VfTk9fQ0VSVFNJR04gOiAvLyB0aGUgY3VycmVudCBjYW5kaWRhdGUg
aXNzdWVyIGNlcnRpZmljYXRlIHdhcyByZWplY3RlZCBiZWNhdXNlIGl0cyBrZXlVc2FnZSBleHRl
bnNpb24gZG9lcyBub3QgcGVybWl0IGNlcnRpZmljYXRlIHNpZ25pbmcuIFRoaXMgaXMgb25seSBz
ZXQgaWYgaXNzdWVyIGNoZWNrIGRlYnVnZ2luZyBpcyBlbmFibGVkIGl0IGlzIHVzZWQgZm9yIHN0
YXR1cyBub3RpZmljYXRpb24gYW5kIGlzIG5vdCBpbiBpdHNlbGYgYW4gZXJyb3IuCi0gICAgICAg
IHJldHVybiBTU0xfQ0VSVElGSUNBVEVfQkFEX0lERU5USVRZOworICAgICAgICByZXR1cm4gU1NM
Q2VydGlmaWNhdGVGbGFnczo6U1NMX0NFUlRJRklDQVRFX0JBRF9JREVOVElUWTsKICAgICBkZWZh
dWx0IDoKLSAgICAgICAgcmV0dXJuIFNTTF9DRVJUSUZJQ0FURV9HRU5FUklDX0VSUk9SOwotICAg
IH0KLX0KLQotI2lmICFQTEFURk9STShXSU4pCi0vLyBzdWNjZXNzIG9mIGNlcnRpZmljYXRlcyBl
eHRyYWN0aW9uCi1ib29sIHBlbURhdGEoWDUwOV9TVE9SRV9DVFgqIGN0eCwgTGlzdEhhc2hTZXQ8
U3RyaW5nPiYgY2VydGlmaWNhdGVzKQotewotICAgIGJvb2wgb2sgPSB0cnVlOwotICAgIFNUQUNL
X09GKFg1MDkpKiBjZXJ0cyA9IFg1MDlfU1RPUkVfQ1RYX2dldDFfY2hhaW4oY3R4KTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNrX1g1MDlfbnVtKGNlcnRzKTsgaSsrKSB7Ci0gICAgICAgIFg1
MDkqIHVDZXJ0ID0gc2tfWDUwOV92YWx1ZShjZXJ0cywgaSk7Ci0gICAgICAgIEJJTyogYmlvID0g
QklPX25ldyhCSU9fc19tZW0oKSk7Ci0gICAgICAgIGludCByZXMgPSBQRU1fd3JpdGVfYmlvX1g1
MDkoYmlvLCB1Q2VydCk7Ci0gICAgICAgIGlmICghcmVzKSB7Ci0gICAgICAgICAgICBvayA9IGZh
bHNlOwotICAgICAgICAgICAgQklPX2ZyZWUoYmlvKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgY2hhciogY2VydGlmaWNhdGVEYXRhOwotICAgICAg
ICBsb25nIGxlbmd0aCA9IEJJT19nZXRfbWVtX2RhdGEoYmlvLCAmY2VydGlmaWNhdGVEYXRhKTsK
LSAgICAgICAgaWYgKGxlbmd0aCA8IDApIHsKLSAgICAgICAgICAgIG9rID0gZmFsc2U7Ci0gICAg
ICAgICAgICBCSU9fZnJlZShiaW8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjZXJ0aWZpY2F0ZURhdGFbbGVuZ3RoXSA9ICdcMCc7Ci0gICAgICAgIFN0cmluZyBj
ZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlRGF0YTsKLSAgICAgICAgY2VydGlmaWNhdGVzLmFkZChj
ZXJ0aWZpY2F0ZSk7Ci0gICAgICAgIEJJT19mcmVlKGJpbyk7CisgICAgICAgIHJldHVybiBTU0xD
ZXJ0aWZpY2F0ZUZsYWdzOjpTU0xfQ0VSVElGSUNBVEVfR0VORVJJQ19FUlJPUjsKICAgICB9Ci0g
ICAgICAgIHNrX1g1MDlfcG9wX2ZyZWUoY2VydHMsIFg1MDlfZnJlZSk7Ci0gICAgICAgIHJldHVy
biBvazsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGNlcnRWZXJpZnlDYWxsYmFjayhpbnQgb2ss
IFg1MDlfU1RPUkVfQ1RYKiBjdHgpCi17Ci0gICAgLy8gd2hldGhlciB0aGUgdmVyaWZpY2F0aW9u
IG9mIHRoZSBjZXJ0aWZpY2F0ZSBpbiBxdWVzdGlvbiB3YXMgcGFzc2VkIChwcmV2ZXJpZnlfb2s9
MSkgb3Igbm90IChwcmV2ZXJpZnlfb2s9MCkKLQotICAgIHVuc2lnbmVkIGVyciA9IFg1MDlfU1RP
UkVfQ1RYX2dldF9lcnJvcihjdHgpOwotICAgIGlmICghZXJyKQotICAgICAgICByZXR1cm4gMTsK
LQotICAgIFNTTCogc3NsID0gcmVpbnRlcnByZXRfY2FzdDxTU0wqPihYNTA5X1NUT1JFX0NUWF9n
ZXRfZXhfZGF0YShjdHgsIFNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHgoKSkpOwot
ICAgIFNTTF9DVFgqIHNzbGN0eCA9IFNTTF9nZXRfU1NMX0NUWChzc2wpOwotICAgIEN1cmxIYW5k
bGUqIGhhbmRsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q3VybEhhbmRsZSo+KFNTTF9DVFhfZ2V0X2Fw
cF9kYXRhKHNzbGN0eCkpOwotICAgIFN0cmluZyBob3N0ID0gaGFuZGxlLT5nZXRFZmZlY3RpdmVV
UkwoKS5ob3N0KCk7Ci0KLSAgICBoYW5kbGUtPnNldFNzbEVycm9ycyhzc2xDZXJ0aWZpY2F0ZUZs
YWcoZXJyKSk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgYXV0byBpdCA9IGFsbG93ZWRIb3N0
cygpLmZpbmQoaG9zdCk7Ci0gICAgb2sgPSAoaXQgIT0gYWxsb3dlZEhvc3RzKCkuZW5kKCkpOwot
I2Vsc2UKLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IGNlcnRpZmljYXRlczsKLSAgICBpZiAoIXBl
bURhdGEoY3R4LCBjZXJ0aWZpY2F0ZXMpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBvayA9IHNz
bElnbm9yZUhUVFBTQ2VydGlmaWNhdGUoaG9zdCwgY2VydGlmaWNhdGVzKTsKLSNlbmRpZgotCi0g
ICAgaWYgKG9rKSB7Ci0gICAgICAgIC8vIGlmIHRoZSBob3N0IGFuZCB0aGUgY2VydGlmaWNhdGUg
YXJlIHN0b3JlZCBmb3IgdGhlIGN1cnJlbnQgaGFuZGxlIHRoYXQgbWVhbnMgaXMgZW5hYmxlZCwK
LSAgICAgICAgLy8gc28gZG9uJ3QgbmVlZCB0byBjdXJsIHZlcmlmaWVzIHRoZSBhdXRoZW50aWNp
dHkgb2YgdGhlIHBlZXIncyBjZXJ0aWZpY2F0ZQotICAgICAgICBoYW5kbGUtPnNldFNzbFZlcmlm
eVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlckRpc2FibGUpOwotICAgIH0KLSAgICByZXR1cm4g
b2s7Ci19Ci0KLXN0YXRpYyBDVVJMY29kZSBzc2xjdHhmdW4oQ1VSTCogY3VybCwgdm9pZCogc3Ns
Y3R4LCB2b2lkKiBwYXJtKQotewotICAgIFNTTF9DVFhfc2V0X2FwcF9kYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8U1NMX0NUWCo+KHNzbGN0eCksIHBhcm0pOwotICAgIFNTTF9DVFhfc2V0X3ZlcmlmeShy
ZWludGVycHJldF9jYXN0PFNTTF9DVFgqPihzc2xjdHgpLCBTU0xfVkVSSUZZX1BFRVIsIGNlcnRW
ZXJpZnlDYWxsYmFjayk7Ci0gICAgcmV0dXJuIENVUkxFX09LOwotfQotCi12b2lkIHNldFNTTFZl
cmlmeU9wdGlvbnMoQ3VybEhhbmRsZSYgaGFuZGxlKQotewotICAgIGhhbmRsZS5zZXRTc2xDdHhD
YWxsYmFja0Z1bmN0aW9uKHNzbGN0eGZ1biwgJmhhbmRsZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMSGFuZGxlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTEhhbmRsZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMTljZTE0YzY4NgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMSGFu
ZGxlLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVy
c2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5J
VkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIE9TKFdJTkRPV1MpCisjaW5jbHVkZSA8d2luc29jazIu
aD4KKyNlbmRpZgorCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDdXJsSGFuZGxlOworCisvLyBDdXJsU1NMU2V0dGluZ3MgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3Mg
Q3VybFNTTFNldHRpbmdzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJsU1NMU2V0dGlu
Z3MpOworICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxDdXJsU1NMU2V0dGluZ3M+OworCitwdWJs
aWM6CisgICAgdXNpbmcgQ2xpZW50Q2VydGlmaWNhdGUgPSBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJp
bmc+OworCisgICAgc3RhdGljIEN1cmxTU0xTZXR0aW5ncyYgc2luZ2xldG9uKCk7CisKKyAgICBi
b29sIHNob3VsZElnbm9yZVNTTEVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlU1NMRXJy
b3JzOyB9CisgICAgY29uc3QgY2hhciogZ2V0Q0FDZXJ0UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FDZXJ0UGF0aC5kYXRhKCk7IH0KKworICAgIHZvaWQgc2V0SG9zdEFsbG93c0FueUhUVFBTQ2Vy
dGlmaWNhdGUoY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBpc0FsbG93ZWRIVFRQU0NlcnRpZmlj
YXRlSG9zdChjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGNhbklnbm9yZWRIVFRQU0NlcnRpZmlj
YXRlKGNvbnN0IFN0cmluZyYsIGNvbnN0IExpc3RIYXNoU2V0PFN0cmluZz4mKTsKKworICAgIHZv
aWQgc2V0Q2xpZW50Q2VydGlmaWNhdGVJbmZvKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYpOworICAgIHN0ZDo6b3B0aW9uYWw8Q2xpZW50Q2VydGlmaWNhdGU+IGdl
dFNTTENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIEN1
cmxTU0xTZXR0aW5ncygpOworCisgICAgQ1N0cmluZyBnZXRDQUNlcnRQYXRoRW52KCk7CisKKyAg
ICBib29sIG1faWdub3JlU1NMRXJyb3JzIHsgZmFsc2UgfTsKKyAgICBDU3RyaW5nIG1fY2FDZXJ0
UGF0aDsKKworICAgIExvY2sgbV9tdXRleDsKKyAgICBIYXNoTWFwPFN0cmluZywgTGlzdEhhc2hT
ZXQ8U3RyaW5nPiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX2FsbG93ZWRIb3N0czsKKyAg
ICBIYXNoTWFwPFN0cmluZywgQ2xpZW50Q2VydGlmaWNhdGUsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4gbV9hbGxvd2VkQ2xpZW50SG9zdHM7Cit9OworCisKKy8vIEN1cmxTU0xWZXJpZmllciAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFz
cyBDdXJsU1NMVmVyaWZpZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cmxTU0xWZXJp
Zmllcik7CisKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFNTTENlcnRpZmljYXRlRmxhZ3Mgewor
ICAgICAgICBTU0xfQ0VSVElGSUNBVEVfVU5LTk9XTl9DQSA9ICgxIDw8IDApLCAvLyBUaGUgc2ln
bmluZyBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkgaXMgbm90IGtub3duLgorICAgICAgICBTU0xfQ0VS
VElGSUNBVEVfQkFEX0lERU5USVRZID0gKDEgPDwgMSksIC8vIFRoZSBjZXJ0aWZpY2F0ZSBkb2Vz
IG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgaWRlbnRpdHkgb2YgdGhlIHNpdGUgdGhhdCBpdCB3YXMg
cmV0cmlldmVkIGZyb20uCisgICAgICAgIFNTTF9DRVJUSUZJQ0FURV9OT1RfQUNUSVZBVEVEID0g
KDEgPDwgMiksIC8vIFRoZSBjZXJ0aWZpY2F0ZSdzIGFjdGl2YXRpb24gdGltZSBpcyBzdGlsbCBp
biB0aGUgZnV0dXJlCisgICAgICAgIFNTTF9DRVJUSUZJQ0FURV9FWFBJUkVEID0gKDEgPDwgMyks
IC8vIFRoZSBjZXJ0aWZpY2F0ZSBoYXMgZXhwaXJlZAorICAgICAgICBTU0xfQ0VSVElGSUNBVEVf
UkVWT0tFRCA9ICgxIDw8IDQpLCAvLyBUaGUgY2VydGlmaWNhdGUgaGFzIGJlZW4gcmV2b2tlZAor
ICAgICAgICBTU0xfQ0VSVElGSUNBVEVfSU5TRUNVUkUgPSAoMSA8PCA1KSwgLy8gVGhlIGNlcnRp
ZmljYXRlJ3MgYWxnb3JpdGhtIGlzIGNvbnNpZGVyZWQgaW5zZWN1cmUuCisgICAgICAgIFNTTF9D
RVJUSUZJQ0FURV9HRU5FUklDX0VSUk9SID0gKDEgPDwgNikgLy8gU29tZSBvdGhlciBlcnJvciBv
Y2N1cnJlZCB2YWxpZGF0aW5nIHRoZSBjZXJ0aWZpY2F0ZQorICAgIH07CisKKyAgICBDdXJsU1NM
VmVyaWZpZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHNldEN1cmxIYW5kbGUoQ3VybEhhbmRs
ZSogY3VybEhhbmRsZSkgeyBtX2N1cmxIYW5kbGUgPSBjdXJsSGFuZGxlOyB9CisgICAgdm9pZCBz
ZXRIb3N0TmFtZShjb25zdCBTdHJpbmcmIGhvc3ROYW1lKSB7IG1faG9zdE5hbWUgPSBob3N0TmFt
ZTsgfQorICAgIHZvaWQgc2V0U3NsQ3R4KHZvaWQqKTsKKworICAgIGludCBzc2xFcnJvcnMoKSB7
IHJldHVybiBtX3NzbEVycm9yczsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgY2VydFZl
cmlmeUNhbGxiYWNrKGludCwgWDUwOV9TVE9SRV9DVFgqKTsKKworI2lmICFPUyhXSU5ET1dTKQor
ICAgIGJvb2wgZ2V0UGVtRGF0YUZyb21DdHgoWDUwOV9TVE9SRV9DVFgqLCBMaXN0SGFzaFNldDxT
dHJpbmc+Jik7CisjZW5kaWYKKworICAgIFNTTENlcnRpZmljYXRlRmxhZ3MgY29udmVydFRvU1NM
Q2VydGlmaWNhdGVGbGFncyhjb25zdCB1bnNpZ25lZCYpOworCisgICAgQ3VybEhhbmRsZSogbV9j
dXJsSGFuZGxlIHsgbnVsbHB0ciB9OworICAgIFN0cmluZyBtX2hvc3ROYW1lOworICAgIGludCBt
X3NzbEVycm9ycyB7IDAgfTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKaW5kZXggZGI5
ZDUzYWU5N2UuLmIyMDUyMDlhNmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcApAQCAtMzcsMTIg
KzM3LDEyIEBACiAjaW5jbHVkZSAiQ3VybENhY2hlTWFuYWdlci5oIgogI2luY2x1ZGUgIkN1cmxD
b250ZXh0LmgiCiAjaW5jbHVkZSAiQ3VybEpvYk1hbmFnZXIuaCIKKyNpbmNsdWRlICJDdXJsU1NM
SGFuZGxlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRl
eHQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCi0jaW5jbHVkZSAiU1NM
SGFuZGxlLmgiCiAjaW5jbHVkZSAiU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KIApAQCAtODcsNyArODcsNyBAQCB2b2lkIFJlc291cmNlSGFu
ZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3Qp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGFsbG93c0FueUhUVFBTQ2Vy
dGlmaWNhdGVIb3N0cyhob3N0KTsKKyAgICBDdXJsU1NMU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNl
dEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGhvc3QpOwogfQogCiB2b2lkIFJlc291cmNl
SGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZUluZm8oY29uc3QgU3RyaW5nJiBob3N0LCBjb25z
dCBTdHJpbmcmIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGtleSkKQEAgLTk1LDcgKzk1LDcg
QEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGVJbmZvKGNvbnN0IFN0
cmluZyYgaG9zdCwgY29uc3QgU3RyaW5nJgogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAK
ICAgICBpZiAoZmlsZUV4aXN0cyhjZXJ0aWZpY2F0ZSkpCi0gICAgICAgIGFkZEFsbG93ZWRDbGll
bnRDZXJ0aWZpY2F0ZShob3N0LCBjZXJ0aWZpY2F0ZSwga2V5KTsKKyAgICAgICAgQ3VybFNTTFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5zZXRDbGllbnRDZXJ0aWZpY2F0ZUluZm8oaG9zdCwgY2VydGlm
aWNhdGUsIGtleSk7CiAgICAgZWxzZQogICAgICAgICBMT0coTmV0d29yaywgIkludmFsaWQgY2xp
ZW50IGNlcnRpZmljYXRlIGZpbGU6ICVzIVxuIiwgY2VydGlmaWNhdGUubGF0aW4xKCkuZGF0YSgp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwCmluZGV4IGI5YjY1MDhh
MDY5Li4zMjVjN2RmNTA4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3Bw
CkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiTXVsdGlwYXJ0SGFuZGxlLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgi
Ci0jaW5jbHVkZSAiU1NMSGFuZGxlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5j
bHVkZSAiVGhyZWFkU2FmZURhdGFCdWZmZXIuaCIKICNpbmNsdWRlICJVUkwuaCIKQEAgLTc4LDgg
Kzc3LDYgQEAgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OlJlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBt
X3NzbENsaWVudENlcnRpZmljYXRlID0gZ2V0U1NMQ2xpZW50Q2VydGlmaWNhdGUodXJsLmhvc3Qo
KSk7Ci0KICAgICBzZXR1cEF1dGhlbnRpY2F0aW9uKCk7CiB9CiAKQEAgLTIyNiwxOCArMjIzLDE5
IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldHVwUmVxdWVzdCgpCiAgICAg
bV9jdXJsSGFuZGxlLmVuYWJsZVRpbWVvdXQoKTsKICAgICBtX2N1cmxIYW5kbGUuZW5hYmxlQWxs
b3dlZFByb3RvY29scygpOwogCi0gICAgaWYgKG1fc3NsQ2xpZW50Q2VydGlmaWNhdGUpIHsKLSAg
ICAgICAgbV9jdXJsSGFuZGxlLnNldFNzbENlcnQoKCptX3NzbENsaWVudENlcnRpZmljYXRlKS5m
aXJzdC51dGY4KCkuZGF0YSgpKTsKKyAgICBhdXRvIHNzbENsaWVudENlcnRpZmljYXRlID0gQ3Vy
bFNTTFNldHRpbmdzOjpzaW5nbGV0b24oKS5nZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZSh1cmwuaG9z
dCgpKTsKKyAgICBpZiAoc3NsQ2xpZW50Q2VydGlmaWNhdGUpIHsKKyAgICAgICAgbV9jdXJsSGFu
ZGxlLnNldFNzbENlcnQoc3NsQ2xpZW50Q2VydGlmaWNhdGUtPmZpcnN0LnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICBtX2N1cmxIYW5kbGUuc2V0U3NsQ2VydFR5cGUoIlAxMiIpOwotICAgICAgICBt
X2N1cmxIYW5kbGUuc2V0U3NsS2V5UGFzc3dvcmQoKCptX3NzbENsaWVudENlcnRpZmljYXRlKS5z
ZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1fY3VybEhhbmRsZS5zZXRTc2xLZXlQYXNz
d29yZChzc2xDbGllbnRDZXJ0aWZpY2F0ZS0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0K
IAotICAgIGlmIChDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc2hvdWxkSWdub3JlU1NMRXJyb3Jz
KCkpCisgICAgaWYgKEN1cmxTU0xTZXR0aW5nczo6c2luZ2xldG9uKCkuc2hvdWxkSWdub3JlU1NM
RXJyb3JzKCkpCiAgICAgICAgIG1fY3VybEhhbmRsZS5zZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5k
bGU6OlZlcmlmeVBlZXJEaXNhYmxlKTsKICAgICBlbHNlCi0gICAgICAgIHNldFNTTFZlcmlmeU9w
dGlvbnMobV9jdXJsSGFuZGxlKTsKKyAgICAgICAgbV9jdXJsSGFuZGxlLnNldFNzbEN0eENhbGxi
YWNrRnVuY3Rpb24od2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2ssIHRoaXMpOwogCi0gICAgbV9jdXJs
SGFuZGxlLmVuYWJsZUNBSW5mb0lmRXhpc3RzKCk7CisgICAgbV9jdXJsSGFuZGxlLnNldENBQ2Vy
dFBhdGgoQ3VybFNTTFNldHRpbmdzOjpzaW5nbGV0b24oKS5nZXRDQUNlcnRQYXRoKCkpOwogCiAg
ICAgbV9jdXJsSGFuZGxlLmVuYWJsZUFjY2VwdEVuY29kaW5nKCk7CiAgICAgbV9jdXJsSGFuZGxl
LnNldFVybCh1cmxTdHJpbmcpOwpAQCAtMjg4LDcgKzI4Niw3IEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU6Om5vdGlmeUZhaWwoKQogICAgIGludCBlcnJvckNvZGUgPSBtX2N1cmxI
YW5kbGUuZXJyb3JDb2RlKCk7CiAgICAgVVJMIGZhaWxpbmdVUkwgPSBtX2N1cmxIYW5kbGUuZ2V0
RWZmZWN0aXZlVVJMKCk7CiAgICAgU3RyaW5nIGVycm9yRGVzY3JpcHRpb24gPSBtX2N1cmxIYW5k
bGUuZXJyb3JEZXNjcmlwdGlvbigpOwotICAgIHVuc2lnbmVkIHNzbEVycm9ycyA9IG1fY3VybEhh
bmRsZS5nZXRTc2xFcnJvcnMoKTsKKyAgICB1bnNpZ25lZCBzc2xFcnJvcnMgPSBtX3NzbFZlcmlm
aWVyLnNzbEVycm9ycygpOwogCiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQogICAgICAgICBkaWRG
YWlsKGRvbWFpbiwgZXJyb3JDb2RlLCBmYWlsaW5nVVJMLCBlcnJvckRlc2NyaXB0aW9uLCBzc2xF
cnJvcnMpOwpAQCAtNzM3LDYgKzczNSwxNSBAQCBOZXR3b3JrTG9hZE1ldHJpY3MgUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGU6OmdldE5ldHdvcmtMb2FkTWV0cmljcygpCiAgICAgcmV0dXJuIG5l
dHdvcmtMb2FkTWV0cmljczsKIH0KIAorQ1VSTGNvZGUgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdh
dGU6OndpbGxTZXR1cFNzbEN0eCh2b2lkKiBzc2xDdHgpCit7CisgICAgbV9zc2xWZXJpZmllci5z
ZXRDdXJsSGFuZGxlKCZtX2N1cmxIYW5kbGUpOworICAgIG1fc3NsVmVyaWZpZXIuc2V0SG9zdE5h
bWUobV9maXJzdFJlcXVlc3QudXJsKCkuaG9zdCgpKTsKKyAgICBtX3NzbFZlcmlmaWVyLnNldFNz
bEN0eChzc2xDdHgpOworCisgICAgcmV0dXJuIENVUkxFX09LOworfQorCiAvKgogKiBUaGlzIGlz
IGJlaW5nIGNhbGxlZCBmb3IgZWFjaCBIVFRQIGhlYWRlciBpbiB0aGUgcmVzcG9uc2UuIFRoaXMg
aW5jbHVkZXMgJ1xyXG4nCiAqIGZvciB0aGUgbGFzdCBsaW5lIG9mIHRoZSBoZWFkZXIuCkBAIC04
NzksNiArODg2LDExIEBAIHNpemVfdCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6d2lsbFNl
bmREYXRhKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJsb2NrU2l6ZSwKICAgICByZXR1cm4gbV9zZW5k
Qnl0ZXM7CiB9CiAKK0NVUkxjb2RlIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjp3aWxsU2V0
dXBTc2xDdHhDYWxsYmFjayhDVVJMKiwgdm9pZCogc3NsQ3R4LCB2b2lkKiB1c2VyRGF0YSkKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUqPih1c2Vy
RGF0YSktPndpbGxTZXR1cFNzbEN0eChzc2xDdHgpOworfQorCiBzaXplX3QgUmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU6OmRpZFJlY2VpdmVIZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVf
dCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2Nrcywgdm9pZCogZGF0YSkKIHsKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUqPihjb25zdF9jYXN0
PHZvaWQqPihkYXRhKSktPmRpZFJlY2VpdmVIZWFkZXIoU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihwdHIpLCBibG9ja1NpemUgKiBudW1iZXJPZkJsb2NrcykpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGUuaAppbmRleCAxNjdhMzc4YzE5Ny4uNDQ1NmEyZmJlMDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZUN1cmxEZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oCkBAIC0zMSwxMCArMzEsMTAgQEAKICNpbmNs
dWRlICJDcmVkZW50aWFsLmgiCiAjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKICNpbmNsdWRlICJD
dXJsSm9iTWFuYWdlci5oIgorI2luY2x1ZGUgIkN1cmxTU0xIYW5kbGUuaCIKICNpbmNsdWRlICJG
b3JtRGF0YVN0cmVhbUN1cmwuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNs
dWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiU1NMSGFuZGxlLmgiCiAjaW5jbHVk
ZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgogCkBAIC05MywxMCArOTMsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5QXV0aGVudGlj
YXRpb24oKTsKICAgICBOZXR3b3JrTG9hZE1ldHJpY3MgZ2V0TmV0d29ya0xvYWRNZXRyaWNzKCk7
CiAKKyAgICBDVVJMY29kZSB3aWxsU2V0dXBTc2xDdHgodm9pZCopOwogICAgIHNpemVfdCBkaWRS
ZWNlaXZlSGVhZGVyKFN0cmluZyYmKTsKICAgICBzaXplX3QgZGlkUmVjZWl2ZURhdGEoVGhyZWFk
U2FmZURhdGFCdWZmZXIpOwogICAgIHNpemVfdCB3aWxsU2VuZERhdGEoY2hhciosIHNpemVfdCBi
bG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2Nrcyk7CiAKKyAgICBzdGF0aWMgQ1VSTGNvZGUg
d2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2soQ1VSTCosIHZvaWQqLCB2b2lkKik7CiAgICAgc3RhdGlj
IHNpemVfdCBkaWRSZWNlaXZlSGVhZGVyQ2FsbGJhY2soY2hhciosIHNpemVfdCBibG9ja1NpemUs
IHNpemVfdCBudW1iZXJPZkJsb2Nrcywgdm9pZCopOwogICAgIHN0YXRpYyBzaXplX3QgZGlkUmVj
ZWl2ZURhdGFDYWxsYmFjayhjaGFyKiwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9m
QmxvY2tzLCB2b2lkKik7CiAgICAgc3RhdGljIHNpemVfdCB3aWxsU2VuZERhdGFDYWxsYmFjayhj
aGFyKiwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKik7CkBA
IC0xMTQsMTEgKzExNiwxMSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3VzZXI7CiAgICAgU3Ry
aW5nIG1fcGFzczsKICAgICBDcmVkZW50aWFsIG1faW5pdGlhbENyZWRlbnRpYWw7Ci0gICAgc3Rk
OjpvcHRpb25hbDxDbGllbnRDZXJ0aWZpY2F0ZT4gbV9zc2xDbGllbnRDZXJ0aWZpY2F0ZTsKICAg
ICBib29sIG1fZGVmZXJzTG9hZGluZzsKICAgICBib29sIG1fYWRkZWRDYWNoZVZhbGlkYXRpb25I
ZWFkZXJzIHsgZmFsc2UgfTsKICAgICBWZWN0b3I8Y2hhcj4gbV9wb3N0Qnl0ZXM7CiAgICAgQ3Vy
bEhhbmRsZSBtX2N1cmxIYW5kbGU7CisgICAgQ3VybFNTTFZlcmlmaWVyIG1fc3NsVmVyaWZpZXI7
CiAgICAgLy8gVXNlZCBieSBib3RoIHRocmVhZHMuCiAgICAgQ29uZGl0aW9uIG1fd29ya2VyVGhy
ZWFkQ29uZGl0aW9uVmFyaWFibGU7CiAgICAgTG9jayBtX3dvcmtlclRocmVhZE11dGV4OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjI5NDU1MGU5Ni4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJz
aXR5IG9mIFN6ZWdlZAotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVS
U0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFNTTEhhbmRsZV9oCi0jZGVmaW5lIFNTTEhhbmRsZV9oCi0KLSNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZS5oIgotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ3VybEhhbmRsZTsKLQotdHlwZWRlZiBlbnVtIHsK
LSAgICBTU0xfQ0VSVElGSUNBVEVfVU5LTk9XTl9DQSA9ICgxIDw8IDApLCAvLyBUaGUgc2lnbmlu
ZyBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkgaXMgbm90IGtub3duLgotICAgIFNTTF9DRVJUSUZJQ0FU
RV9CQURfSURFTlRJVFkgPSAoMSA8PCAxKSwgLy8gVGhlIGNlcnRpZmljYXRlIGRvZXMgbm90IG1h
dGNoIHRoZSBleHBlY3RlZCBpZGVudGl0eSBvZiB0aGUgc2l0ZSB0aGF0IGl0IHdhcyByZXRyaWV2
ZWQgZnJvbS4KLSAgICBTU0xfQ0VSVElGSUNBVEVfTk9UX0FDVElWQVRFRCA9ICgxIDw8IDIpLCAv
LyBUaGUgY2VydGlmaWNhdGUncyBhY3RpdmF0aW9uIHRpbWUgaXMgc3RpbGwgaW4gdGhlIGZ1dHVy
ZQotICAgIFNTTF9DRVJUSUZJQ0FURV9FWFBJUkVEID0gKDEgPDwgMyksIC8vIFRoZSBjZXJ0aWZp
Y2F0ZSBoYXMgZXhwaXJlZAotICAgIFNTTF9DRVJUSUZJQ0FURV9SRVZPS0VEID0gKDEgPDwgNCks
IC8vIFRoZSBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiByZXZva2VkCi0gICAgU1NMX0NFUlRJRklDQVRF
X0lOU0VDVVJFID0gKDEgPDwgNSksIC8vIFRoZSBjZXJ0aWZpY2F0ZSdzIGFsZ29yaXRobSBpcyBj
b25zaWRlcmVkIGluc2VjdXJlLgotICAgIFNTTF9DRVJUSUZJQ0FURV9HRU5FUklDX0VSUk9SID0g
KDEgPDwgNikgLy8gU29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCB2YWxpZGF0aW5nIHRoZSBjZXJ0
aWZpY2F0ZQotfSBTU0xDZXJ0aWZpY2F0ZUZsYWdzOwotCi10eXBlZGVmIHN0ZDo6cGFpcjxTdHJp
bmcsIFN0cmluZz4gQ2xpZW50Q2VydGlmaWNhdGU7Ci0KLXZvaWQgYWRkQWxsb3dlZENsaWVudENl
cnRpZmljYXRlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwot
dm9pZCBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoY29uc3QgU3RyaW5nJik7Ci1ib29s
IHNzbElnbm9yZUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7
Ci1zdGQ6Om9wdGlvbmFsPENsaWVudENlcnRpZmljYXRlPiBnZXRTU0xDbGllbnRDZXJ0aWZpY2F0
ZShjb25zdCBTdHJpbmcmKTsKLXZvaWQgc2V0U1NMVmVyaWZ5T3B0aW9ucyhDdXJsSGFuZGxlJik7
Ci0KLX0KLQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320827</attachid>
            <date>2017-09-14 14:54:48 -0700</date>
            <delta_ts>2017-09-14 14:59:07 -0700</delta_ts>
            <desc>fix</desc>
            <filename>176906-3.diff</filename>
            <type>text/plain</type>
            <size>20589</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNjNjMmNhNjJjOC4uMjZmNmViN2E1ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNy0wOS0xNCAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFJlcGxhY2UgdGhlIGltcGxlbWVudGF0aW9uIHdpdGgg
TmV0d29ya0xvYWRNZXRyaWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzY5MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpnZXRFZmZlY3RpdmVVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybEhhbmRsZTo6Z2V0UHJpbWFyeVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bEhhbmRsZTo6Z2V0UmVzcG9uc2VDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6
OmdldENvbnRlbnRMZW5naHREb3dubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxl
OjpnZXRIdHRwQXV0aEF2YWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmdldFRp
bWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmdldEVmZmVjdGl2ZVVSTCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmRpZFJlY2VpdmVIZWFkZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlzcGF0Y2hT
eW5jaHJvbm91c0pvYik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZTo6bm90aWZ5RmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlOjpnZXRQcm90ZWN0aW9uU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRpZFJlY2VpdmVBbGxIZWFkZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpoYW5kbGVMb2NhbFJlY2VpdmVSZXNw
b25zZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlk
RmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpn
ZXROZXR3b3JrTG9hZE1ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVD
dXJsRGVsZWdhdGU6OmRpZFJlY2VpdmVIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXRXZWJUaW1pbmdzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VSZXNwb25zZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6c2V0RGVwcmVjYXRlZE5ldHdvcmtM
b2FkTWV0cmljcyk6CisKIDIwMTctMDktMTQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBUaW1lbGluZSBzaG91bGQgc2hvdyB3
aGVuIGV2ZW50cyBwcmV2ZW50RGVmYXVsdCgpIHdhcyBjYWxsZWQgb24gYW4gZXZlbnQgb3Igbm90
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250
ZXh0LmNwcAppbmRleCA3Y2I4NGY4ZjVhMC4uOGU1OTYyZDdmODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcApAQCAtMjks
NiArMjksNyBAQAogI2lmIFVTRShDVVJMKQogI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSFRUUEhlYWRlck1hcC5oIgorI2luY2x1ZGUgPE5ldHdvcmtMb2FkTWV0cmljcy5oPgog
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCkBAIC01NzEsOTIgKzU3MiwxMzUgQEAgdm9pZCBDdXJsSGFuZGxlOjpzZXRTc2xDdHhDYWxs
YmFja0Z1bmN0aW9uKGN1cmxfc3NsX2N0eF9jYWxsYmFjayBjYWxsYmFja0Z1bmMsIHYKICAgICBj
dXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1NTTF9DVFhfRlVOQ1RJT04sIGNhbGxi
YWNrRnVuYyk7CiB9CiAKLVVSTCBDdXJsSGFuZGxlOjpnZXRFZmZlY3RpdmVVUkwoKSBjb25zdAor
VVJMIEN1cmxIYW5kbGU6OmdldEVmZmVjdGl2ZVVSTCgpCiB7Ci0gICAgQ1VSTGNvZGUgZXJyQ2Qg
PSBDVVJMRV9GQUlMRURfSU5JVDsKLSAgICBjaGFyKiB1cmwgPSBudWxscHRyOwotCi0gICAgaWYg
KG1faGFuZGxlKQotICAgICAgICBlcnJDZCA9IGN1cmxfZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBD
VVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmdXJsKTsKKyAgICBpZiAoIW1faGFuZGxlKSB7CisgICAg
ICAgIG1fZXJyb3JDb2RlID0gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgICAgIHJldHVybiBVUkwo
KTsKKyAgICB9CiAKLSAgICBpZiAoKGVyckNkID09IENVUkxFX09LKSAmJiB1cmwpCi0gICAgICAg
IHJldHVybiBVUkwoVVJMKCksIHVybCk7CisgICAgY2hhciogdXJsOworICAgIG1fZXJyb3JDb2Rl
ID0gY3VybF9lYXN5X2dldGluZm8obV9oYW5kbGUsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZ1
cmwpOworICAgIGlmIChtX2Vycm9yQ29kZSAhPSBDVVJMRV9PSykKKyAgICAgICAgcmV0dXJuIFVS
TCgpOwogCi0gICAgcmV0dXJuIFVSTCgpOworICAgIHJldHVybiBVUkwoVVJMKCksIHVybCk7CiB9
CiAKLUNVUkxjb2RlIEN1cmxIYW5kbGU6OmdldFByaW1hcnlQb3J0KGxvbmcmIHBvcnQpCitzdGQ6
Om9wdGlvbmFsPHVpbnQxNl90PiBDdXJsSGFuZGxlOjpnZXRQcmltYXJ5UG9ydCgpCiB7Ci0gICAg
Q1VSTGNvZGUgZXJyQ2QgPSBDVVJMRV9GQUlMRURfSU5JVDsKLSAgICBwb3J0ID0gMDsKKyAgICBp
ZiAoIW1faGFuZGxlKSB7CisgICAgICAgIG1fZXJyb3JDb2RlID0gQ1VSTEVfRkFJTEVEX0lOSVQ7
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQogCi0gICAgaWYgKG1faGFuZGxl
KQotICAgICAgICBlcnJDZCA9IGN1cmxfZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBDVVJMSU5GT19Q
UklNQVJZX1BPUlQsICZwb3J0KTsKKyAgICBsb25nIHBvcnQ7CisgICAgbV9lcnJvckNvZGUgPSBj
dXJsX2Vhc3lfZ2V0aW5mbyhtX2hhbmRsZSwgQ1VSTElORk9fUFJJTUFSWV9QT1JULCAmcG9ydCk7
CisgICAgaWYgKG1fZXJyb3JDb2RlICE9IENVUkxFX09LKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIGVyckNkOworICAgIC8qCisgICAgICogaHR0cHM6Ly9naXRo
dWIuY29tL2N1cmwvY3VybC9ibG9iL21hc3Rlci9saWIvY29ubmVjdC5jI0w2MTItTDY2MAorICAg
ICAqIGNvbmZpcm1lZCB0aGF0IGBwb3J0YCBpcyBvcmlnaW5hbGx5IHVuc2lnbmVkIHNob3J0Lgor
ICAgICAqLworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4ocG9ydCk7CiB9CiAKLUNV
Ukxjb2RlIEN1cmxIYW5kbGU6OmdldFJlc3BvbnNlQ29kZShsb25nJiByZXNwb25zZUNvZGUpCitz
dGQ6Om9wdGlvbmFsPGxvbmc+IEN1cmxIYW5kbGU6OmdldFJlc3BvbnNlQ29kZSgpCiB7Ci0gICAg
Q1VSTGNvZGUgZXJyQ2QgPSBDVVJMRV9GQUlMRURfSU5JVDsKLSAgICByZXNwb25zZUNvZGUgPSAw
TDsKKyAgICBpZiAoIW1faGFuZGxlKSB7CisgICAgICAgIG1fZXJyb3JDb2RlID0gQ1VSTEVfRkFJ
TEVEX0lOSVQ7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQogCi0gICAgaWYg
KG1faGFuZGxlKQotICAgICAgICBlcnJDZCA9IGN1cmxfZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBD
VVJMSU5GT19SRVNQT05TRV9DT0RFLCAmcmVzcG9uc2VDb2RlKTsKKyAgICBsb25nIHJlc3BvbnNl
Q29kZTsKKyAgICBtX2Vycm9yQ29kZSA9IGN1cmxfZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBDVVJM
SU5GT19SRVNQT05TRV9DT0RFLCAmcmVzcG9uc2VDb2RlKTsKKyAgICBpZiAobV9lcnJvckNvZGUg
IT0gQ1VSTEVfT0spCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4g
ZXJyQ2Q7CisgICAgcmV0dXJuIHJlc3BvbnNlQ29kZTsKIH0KIAotQ1VSTGNvZGUgQ3VybEhhbmRs
ZTo6Z2V0Q29udGVudExlbmdodERvd25sb2FkKGxvbmcgbG9uZyYgY29udGVudExlbmd0aCkKK3N0
ZDo6b3B0aW9uYWw8bG9uZyBsb25nPiBDdXJsSGFuZGxlOjpnZXRDb250ZW50TGVuZ2h0RG93bmxv
YWQoKQogewotICAgIENVUkxjb2RlIGVyckNkID0gQ1VSTEVfRkFJTEVEX0lOSVQ7Ci0gICAgY29u
dGVudExlbmd0aCA9IDA7CisgICAgaWYgKCFtX2hhbmRsZSkgeworICAgICAgICBtX2Vycm9yQ29k
ZSA9IENVUkxFX0ZBSUxFRF9JTklUOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IH0KIAotICAgIGlmIChtX2hhbmRsZSkgewotICAgICAgICBkb3VibGUgdG1wQ29udGVudExlbmd0
aCA9IDA7CisgICAgZG91YmxlIGNvbnRlbnRMZW5ndGg7CiAKLSAgICAgICAgZXJyQ2QgPSBjdXJs
X2Vhc3lfZ2V0aW5mbyhtX2hhbmRsZSwgQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfRE9XTkxPQUQs
ICZ0bXBDb250ZW50TGVuZ3RoKTsKLSAgICAgICAgaWYgKGVyckNkID09IENVUkxFX09LKQotICAg
ICAgICAgICAgY29udGVudExlbmd0aCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odG1wQ29udGVu
dExlbmd0aCk7Ci0gICAgfQorICAgIG1fZXJyb3JDb2RlID0gY3VybF9lYXN5X2dldGluZm8obV9o
YW5kbGUsIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RPV05MT0FELCAmY29udGVudExlbmd0aCk7
CisgICAgaWYgKG1fZXJyb3JDb2RlICE9IENVUkxFX09LKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIGVyckNkOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KGNvbnRlbnRMZW5ndGgpOwogfQogCi1DVVJMY29kZSBDdXJsSGFuZGxlOjpnZXRIdHRw
QXV0aEF2YWlsKGxvbmcmIGh0dHBBdXRoQXZhaWwpCitzdGQ6Om9wdGlvbmFsPGxvbmc+IEN1cmxI
YW5kbGU6OmdldEh0dHBBdXRoQXZhaWwoKQogewotICAgIENVUkxjb2RlIGVyckNkID0gQ1VSTEVf
RkFJTEVEX0lOSVQ7CisgICAgaWYgKCFtX2hhbmRsZSkgeworICAgICAgICBtX2Vycm9yQ29kZSA9
IENVUkxFX0ZBSUxFRF9JTklUOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0K
IAotICAgIGlmIChtX2hhbmRsZSkKLSAgICAgICAgZXJyQ2QgPSBjdXJsX2Vhc3lfZ2V0aW5mbyht
X2hhbmRsZSwgQ1VSTElORk9fSFRUUEFVVEhfQVZBSUwsICZodHRwQXV0aEF2YWlsKTsKKyAgICBs
b25nIGh0dHBBdXRoQXZhaWxhYmxlOworICAgIG1fZXJyb3JDb2RlID0gY3VybF9lYXN5X2dldGlu
Zm8obV9oYW5kbGUsIENVUkxJTkZPX0hUVFBBVVRIX0FWQUlMLCAmaHR0cEF1dGhBdmFpbGFibGUp
OworICAgIGlmIChtX2Vycm9yQ29kZSAhPSBDVVJMRV9PSykKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIAotICAgIHJldHVybiBlcnJDZDsKKyAgICByZXR1cm4gaHR0cEF1dGhBdmFpbGFi
bGU7CiB9CiAKLUNVUkxjb2RlIEN1cmxIYW5kbGU6OmdldFRpbWVzKGRvdWJsZSYgbmFtZWxvb2t1
cCwgZG91YmxlJiBjb25uZWN0LCBkb3VibGUmIGFwcGNvbm5lY3QsIGRvdWJsZSYgcHJldHJhbnNm
ZXIpCitzdGQ6Om9wdGlvbmFsPE5ldHdvcmtMb2FkTWV0cmljcz4gQ3VybEhhbmRsZTo6Z2V0VGlt
ZXMoKQogewotICAgIENVUkxjb2RlIGVyckNkID0gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgZG91
YmxlIG5hbWVMb29rdXAgPSAwLjA7CisgICAgZG91YmxlIGNvbm5lY3QgPSAwLjA7CisgICAgZG91
YmxlIGFwcENvbm5lY3QgPSAwLjA7CisgICAgZG91YmxlIHByZVRyYW5zZmVyID0gMC4wOworICAg
IGRvdWJsZSBzdGFydFRyYW5zZmVyID0gMC4wOwogCi0gICAgaWYgKCFtX2hhbmRsZSkKLSAgICAg
ICAgcmV0dXJuIGVyckNkOworICAgIGlmICghbV9oYW5kbGUpIHsKKyAgICAgICAgbV9lcnJvckNv
ZGUgPSBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICB9CisKKyAgICBtX2Vycm9yQ29kZSA9IGN1cmxfZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBDVVJM
SU5GT19OQU1FTE9PS1VQX1RJTUUsICZuYW1lTG9va3VwKTsKKyAgICBpZiAobV9lcnJvckNvZGUg
IT0gQ1VSTEVfT0spCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBtX2Vycm9y
Q29kZSA9IGN1cmxfZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBDVVJMSU5GT19DT05ORUNUX1RJTUUs
ICZjb25uZWN0KTsKKyAgICBpZiAobV9lcnJvckNvZGUgIT0gQ1VSTEVfT0spCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBtX2Vycm9yQ29kZSA9IGN1cmxfZWFzeV9nZXRpbmZv
KG1faGFuZGxlLCBDVVJMSU5GT19BUFBDT05ORUNUX1RJTUUsICZhcHBDb25uZWN0KTsKKyAgICBp
ZiAobV9lcnJvckNvZGUgIT0gQ1VSTEVfT0spCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAKLSAgICBlcnJDZCA9IGN1cmxfZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBDVVJMSU5GT19OQU1F
TE9PS1VQX1RJTUUsICZuYW1lbG9va3VwKTsKLSAgICBpZiAoZXJyQ2QgIT0gQ1VSTEVfT0spCi0g
ICAgICAgIHJldHVybiBlcnJDZDsKKyAgICBtX2Vycm9yQ29kZSA9IGN1cmxfZWFzeV9nZXRpbmZv
KG1faGFuZGxlLCBDVVJMSU5GT19QUkVUUkFOU0ZFUl9USU1FLCAmcHJlVHJhbnNmZXIpOworICAg
IGlmIChtX2Vycm9yQ29kZSAhPSBDVVJMRV9PSykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgIGVyckNkID0gY3VybF9lYXN5X2dldGluZm8obV9oYW5kbGUsIENVUkxJTkZPX0NP
Tk5FQ1RfVElNRSwgJmNvbm5lY3QpOwotICAgIGlmIChlcnJDZCAhPSBDVVJMRV9PSykKLSAgICAg
ICAgcmV0dXJuIGVyckNkOworICAgIG1fZXJyb3JDb2RlID0gY3VybF9lYXN5X2dldGluZm8obV9o
YW5kbGUsIENVUkxJTkZPX1NUQVJUVFJBTlNGRVJfVElNRSwgJnN0YXJ0VHJhbnNmZXIpOworICAg
IGlmIChtX2Vycm9yQ29kZSAhPSBDVVJMRV9PSykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgIGVyckNkID0gY3VybF9lYXN5X2dldGluZm8obV9oYW5kbGUsIENVUkxJTkZPX0FQ
UENPTk5FQ1RfVElNRSwgJmFwcGNvbm5lY3QpOwotICAgIGlmIChlcnJDZCAhPSBDVVJMRV9PSykK
LSAgICAgICAgcmV0dXJuIGVyckNkOworICAgIE5ldHdvcmtMb2FkTWV0cmljcyBuZXR3b3JrTG9h
ZE1ldHJpY3M7CisKKyAgICBuZXR3b3JrTG9hZE1ldHJpY3MuZG9tYWluTG9va3VwU3RhcnQgPSBT
ZWNvbmRzKDApOworICAgIG5ldHdvcmtMb2FkTWV0cmljcy5kb21haW5Mb29rdXBFbmQgPSBTZWNv
bmRzKG5hbWVMb29rdXApOworICAgIG5ldHdvcmtMb2FkTWV0cmljcy5jb25uZWN0U3RhcnQgPSBT
ZWNvbmRzKG5hbWVMb29rdXApOworICAgIG5ldHdvcmtMb2FkTWV0cmljcy5jb25uZWN0RW5kID0g
U2Vjb25kcyhjb25uZWN0KTsKKworICAgIGlmIChhcHBDb25uZWN0ID4gMC4wKSB7CisgICAgICAg
IG5ldHdvcmtMb2FkTWV0cmljcy5zZWN1cmVDb25uZWN0aW9uU3RhcnQgPSBTZWNvbmRzKGNvbm5l
Y3QpOworICAgICAgICBuZXR3b3JrTG9hZE1ldHJpY3MuY29ubmVjdEVuZCA9IFNlY29uZHMoYXBw
Q29ubmVjdCk7CisgICAgfQogCi0gICAgZXJyQ2QgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhtX2hhbmRs
ZSwgQ1VSTElORk9fUFJFVFJBTlNGRVJfVElNRSwgJnByZXRyYW5zZmVyKTsKLSAgICBpZiAoZXJy
Q2QgIT0gQ1VSTEVfT0spCi0gICAgICAgIHJldHVybiBlcnJDZDsKKyAgICBuZXR3b3JrTG9hZE1l
dHJpY3MucmVxdWVzdFN0YXJ0ID0gbmV0d29ya0xvYWRNZXRyaWNzLmNvbm5lY3RFbmQ7CisgICAg
bmV0d29ya0xvYWRNZXRyaWNzLnJlc3BvbnNlU3RhcnQgPSBTZWNvbmRzKHN0YXJ0VHJhbnNmZXIp
OwogCi0gICAgcmV0dXJuIGVyckNkOworICAgIHJldHVybiBuZXR3b3JrTG9hZE1ldHJpY3M7CiB9
CiAKIGxvbmcgbG9uZyBDdXJsSGFuZGxlOjptYXhDdXJsT2ZmVCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCmluZGV4IGM0NGNmNjI5
MjRiLi4yYjI2ZGRiZThkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxDb250ZXh0LmgKQEAgLTIwMSw2ICsyMDEsNyBAQCBwcml2YXRlOgogLy8g
Q3VybEhhbmRsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIGNsYXNzIEhUVFBIZWFkZXJNYXA7CitjbGFzcyBOZXR3b3JrTG9hZE1ldHJpY3M7CiAK
IGNsYXNzIEN1cmxIYW5kbGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cmxIYW5kbGUp
OwpAQCAtMjg2LDEyICsyODcsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3NsQ3R4Q2FsbGJh
Y2tGdW5jdGlvbihjdXJsX3NzbF9jdHhfY2FsbGJhY2ssIHZvaWQqKTsKIAogICAgIC8vIFN0YXR1
cwotICAgIFVSTCBnZXRFZmZlY3RpdmVVUkwoKSBjb25zdDsKLSAgICBDVVJMY29kZSBnZXRQcmlt
YXJ5UG9ydChsb25nJik7Ci0gICAgQ1VSTGNvZGUgZ2V0UmVzcG9uc2VDb2RlKGxvbmcmKTsKLSAg
ICBDVVJMY29kZSBnZXRDb250ZW50TGVuZ2h0RG93bmxvYWQobG9uZyBsb25nJik7Ci0gICAgQ1VS
TGNvZGUgZ2V0SHR0cEF1dGhBdmFpbChsb25nJik7Ci0gICAgQ1VSTGNvZGUgZ2V0VGltZXMoZG91
YmxlJiwgZG91YmxlJiwgZG91YmxlJiwgZG91YmxlJik7CisgICAgVVJMIGdldEVmZmVjdGl2ZVVS
TCgpOworICAgIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IGdldFByaW1hcnlQb3J0KCk7CisgICAg
c3RkOjpvcHRpb25hbDxsb25nPiBnZXRSZXNwb25zZUNvZGUoKTsKKyAgICBzdGQ6Om9wdGlvbmFs
PGxvbmcgbG9uZz4gZ2V0Q29udGVudExlbmdodERvd25sb2FkKCk7CisgICAgc3RkOjpvcHRpb25h
bDxsb25nPiBnZXRIdHRwQXV0aEF2YWlsKCk7CisgICAgc3RkOjpvcHRpb25hbDxOZXR3b3JrTG9h
ZE1ldHJpY3M+IGdldFRpbWVzKCk7CiAKICAgICBzdGF0aWMgbG9uZyBsb25nIG1heEN1cmxPZmZU
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsRG93bmxvYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxEb3dubG9hZC5jcHAKaW5kZXggMGJlMTczZWViZjAuLjVmNWUzZTQ0ZWZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNw
cApAQCAtMTgxLDExICsxODEsMTAgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OmRpZFJlY2VpdmVIZWFk
ZXIoY29uc3QgU3RyaW5nJiBoZWFkZXIpCiAKICAgICBpZiAoaGVhZGVyID09ICJcclxuIiB8fCBo
ZWFkZXIgPT0gIlxuIikgewogCi0gICAgICAgIGxvbmcgaHR0cENvZGUgPSAwOwotICAgICAgICBt
X2N1cmxIYW5kbGUuZ2V0UmVzcG9uc2VDb2RlKGh0dHBDb2RlKTsKKyAgICAgICAgYXV0byBodHRw
Q29kZSA9IG1fY3VybEhhbmRsZS5nZXRSZXNwb25zZUNvZGUoKTsKIAotICAgICAgICBpZiAoaHR0
cENvZGUgPj0gMjAwICYmIGh0dHBDb2RlIDwgMzAwKSB7Ci0gICAgICAgICAgICBVUkwgdXJsID0g
bV9jdXJsSGFuZGxlLmdldEVmZmVjdGl2ZVVSTCgpOworICAgICAgICBpZiAoaHR0cENvZGUgJiYg
Kmh0dHBDb2RlID49IDIwMCAmJiAqaHR0cENvZGUgPCAzMDApIHsKKyAgICAgICAgICAgIGF1dG8g
dXJsID0gbV9jdXJsSGFuZGxlLmdldEVmZmVjdGl2ZVVSTCgpOwogICAgICAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB1cmwgPSB1cmwuaXNv
bGF0ZWRDb3B5KCldIHsKICAgICAgICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIGxvY2FsUmVz
cG9uc2UgPSBwcm90ZWN0ZWRUaGlzLT5nZXRSZXNwb25zZSgpOwogICAgICAgICAgICAgICAgIHBy
b3RlY3RlZFRoaXMtPm1fcmVzcG9uc2VVcmwgPSB1cmw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlLmNwcAppbmRleCA3ZjMwMTM2NmNlMi4uZDBjNjIzYWQzMzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcApAQCAtMTY0LDE0ICsxNjQsNiBAQCB2b2lkIFJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaXNwYXRjaFN5bmNocm9ub3VzSm9iKCkKICAgICAv
LyBjdXJsX2Vhc3lfcGVyZm9ybSBibG9ja3MgdW50aWwgdGhlIHRyYW5zZmVyIGlzIGZpbmlzaGVk
LgogICAgIENVUkxjb2RlIHJldCA9IG1fY3VybEhhbmRsZS5wZXJmb3JtKCk7CiAKLSAgICBkb3Vi
bGUgcHJldHJhbnNmZXJUaW1lID0gMDsKLSAgICBkb3VibGUgZG5zTG9va3VwVGltZSA9IDA7Ci0g
ICAgZG91YmxlIGNvbm5lY3RUaW1lID0gMDsKLSAgICBkb3VibGUgYXBwQ29ubmVjdFRpbWUgPSAw
OwotCi0gICAgbV9jdXJsSGFuZGxlLmdldFRpbWVzKHByZXRyYW5zZmVyVGltZSwgZG5zTG9va3Vw
VGltZSwgY29ubmVjdFRpbWUsIGFwcENvbm5lY3RUaW1lKTsKLSAgICBzZXRXZWJUaW1pbmdzKHBy
ZXRyYW5zZmVyVGltZSwgZG5zTG9va3VwVGltZSwgY29ubmVjdFRpbWUsIGFwcENvbm5lY3RUaW1l
KTsKLQogICAgIGlmIChyZXQgIT0gQ1VSTEVfT0spCiAgICAgICAgIG5vdGlmeUZhaWwoKTsKICAg
ICBlbHNlCkBAIC0yNzcsMjAgKzI2OSwxNSBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlOjpzZXR1cFJlcXVlc3QoKQogCiB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpu
b3RpZnlGaW5pc2goKQogewotICAgIGRvdWJsZSBwcmV0cmFuc2ZlclRpbWUgPSAwOwotICAgIGRv
dWJsZSBkbnNMb29rdXBUaW1lID0gMDsKLSAgICBkb3VibGUgY29ubmVjdFRpbWUgPSAwOwotICAg
IGRvdWJsZSBhcHBDb25uZWN0VGltZSA9IDA7Ci0KLSAgICBtX2N1cmxIYW5kbGUuZ2V0VGltZXMo
cHJldHJhbnNmZXJUaW1lLCBkbnNMb29rdXBUaW1lLCBjb25uZWN0VGltZSwgYXBwQ29ubmVjdFRp
bWUpOworICAgIE5ldHdvcmtMb2FkTWV0cmljcyBuZXR3b3JrTG9hZE1ldHJpY3MgPSBnZXROZXR3
b3JrTG9hZE1ldHJpY3MoKTsKIAogICAgIGlmIChpc01haW5UaHJlYWQoKSkKLSAgICAgICAgZGlk
RmluaXNoKHByZXRyYW5zZmVyVGltZSwgZG5zTG9va3VwVGltZSwgY29ubmVjdFRpbWUsIGFwcENv
bm5lY3RUaW1lKTsKKyAgICAgICAgZGlkRmluaXNoKG5ldHdvcmtMb2FkTWV0cmljcyk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgcHJldHJhbnNmZXJUaW1lLCBkbnNMb29rdXBUaW1lLCBjb25uZWN0VGltZSwgYXBw
Q29ubmVjdFRpbWVdIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBtZXRyaWNzID0gbmV0d29ya0xvYWRNZXRyaWNzLmlzb2xhdGVkQ29w
eSgpXSB7CiAgICAgICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1faGFuZGxlKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmRpZEZpbmlzaChw
cmV0cmFuc2ZlclRpbWUsIGRuc0xvb2t1cFRpbWUsIGNvbm5lY3RUaW1lLCBhcHBDb25uZWN0VGlt
ZSk7CisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5kaWRGaW5pc2gobWV0cmljcyk7CiAgICAg
ICAgIH0pOwogICAgIH0KIH0KQEAgLTM0OCwxOSArMzM1LDE1IEBAIHN0YXRpYyB2b2lkIHJlbW92
ZUxlYWRpbmdBbmRUcmFpbGluZ1F1b3RlcyhTdHJpbmcmIHZhbHVlKQogCiBib29sIFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlOjpnZXRQcm90ZWN0aW9uU3BhY2UoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UsIFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQogewotICAg
IENVUkxjb2RlIGVycjsKLQotICAgIGxvbmcgcG9ydCA9IDA7Ci0gICAgZXJyID0gbV9jdXJsSGFu
ZGxlLmdldFByaW1hcnlQb3J0KHBvcnQpOwotICAgIGlmIChlcnIgIT0gQ1VSTEVfT0spCisgICAg
YXV0byBwb3J0ID0gbV9jdXJsSGFuZGxlLmdldFByaW1hcnlQb3J0KCk7CisgICAgaWYgKCFwb3J0
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBsb25nIGF2YWlsYWJsZUF1dGggPSBDVVJM
QVVUSF9OT05FOwotICAgIGVyciA9IG1fY3VybEhhbmRsZS5nZXRIdHRwQXV0aEF2YWlsKGF2YWls
YWJsZUF1dGgpOwotICAgIGlmIChlcnIgIT0gQ1VSTEVfT0spCisgICAgYXV0byBhdmFpbGFibGVB
dXRoID0gbV9jdXJsSGFuZGxlLmdldEh0dHBBdXRoQXZhaWwoKTsKKyAgICBpZiAoIWF2YWlsYWJs
ZUF1dGgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFVSTCB1cmwgPSBtX2N1cmxIYW5k
bGUuZ2V0RWZmZWN0aXZlVVJMKCk7CisgICAgYXV0byB1cmwgPSBtX2N1cmxIYW5kbGUuZ2V0RWZm
ZWN0aXZlVVJMKCk7CiAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTM4NCwxNiArMzY3LDE2IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdh
dGU6OmdldFByb3RlY3Rpb25TcGFjZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwCiAKICAg
ICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSBhdXRoU2NoZW1lID0gUHJvdGVj
dGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVVbmtub3duOwogCi0gICAgaWYgKGF2YWlsYWJs
ZUF1dGggJiBDVVJMQVVUSF9CQVNJQykKKyAgICBpZiAoKmF2YWlsYWJsZUF1dGggJiBDVVJMQVVU
SF9CQVNJQykKICAgICAgICAgYXV0aFNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0
aW9uU2NoZW1lSFRUUEJhc2ljOwotICAgIGlmIChhdmFpbGFibGVBdXRoICYgQ1VSTEFVVEhfRElH
RVNUKQorICAgIGlmICgqYXZhaWxhYmxlQXV0aCAmIENVUkxBVVRIX0RJR0VTVCkKICAgICAgICAg
YXV0aFNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2Vz
dDsKLSAgICBpZiAoYXZhaWxhYmxlQXV0aCAmIENVUkxBVVRIX0dTU05FR09USUFURSkKKyAgICBp
ZiAoKmF2YWlsYWJsZUF1dGggJiBDVVJMQVVUSF9HU1NORUdPVElBVEUpCiAgICAgICAgIGF1dGhT
Y2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU5lZ290aWF0ZTsKLSAg
ICBpZiAoYXZhaWxhYmxlQXV0aCAmIENVUkxBVVRIX05UTE0pCisgICAgaWYgKCphdmFpbGFibGVB
dXRoICYgQ1VSTEFVVEhfTlRMTSkKICAgICAgICAgYXV0aFNjaGVtZSA9IFByb3RlY3Rpb25TcGFj
ZUF1dGhlbnRpY2F0aW9uU2NoZW1lTlRMTTsKIAotICAgIHByb3RlY3Rpb25TcGFjZSA9IFByb3Rl
Y3Rpb25TcGFjZShob3N0LCBwb3J0LCBzZXJ2ZXJUeXBlLCByZWFsbSwgYXV0aFNjaGVtZSk7Cisg
ICAgcHJvdGVjdGlvblNwYWNlID0gUHJvdGVjdGlvblNwYWNlKGhvc3QsICpwb3J0LCBzZXJ2ZXJU
eXBlLCByZWFsbSwgYXV0aFNjaGVtZSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQwNyw4
ICszOTAsOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRSZWNlaXZlQWxs
SGVhZGVycyhsb25nIGh0dHBDb2RlLCBsb25nIGxvbmcgYwogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAKLSAgICByZXNwb25zZSgpLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChjb250
ZW50TGVuZ3RoKTsKICAgICByZXNwb25zZSgpLnNldFVSTChtX2N1cmxIYW5kbGUuZ2V0RWZmZWN0
aXZlVVJMKCkpOworCisgICAgcmVzcG9uc2UoKS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoY29u
dGVudExlbmd0aCk7CiAgICAgcmVzcG9uc2UoKS5zZXRIVFRQU3RhdHVzQ29kZShodHRwQ29kZSk7
CiAgICAgcmVzcG9uc2UoKS5zZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBl
KHJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSkp
LmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpOwogICAgIHJlc3BvbnNlKCkuc2V0VGV4dEVuY29k
aW5nTmFtZShleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUocmVzcG9uc2UoKS5odHRwSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkpOwpAQCAtNDkyLDkgKzQ3Niw3IEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmhhbmRsZUxvY2FsUmVjZWl2ZVJlc3Bv
bnNlKCkKICAgICAvLyB3aGljaCBtZWFucyB0aGUgUmVzb3VyY2VMb2FkZXIncyByZXNwb25zZSBk
b2VzIG5vdCBjb250YWluIHRoZSBVUkwuCiAgICAgLy8gUnVuIHRoZSBjb2RlIGhlcmUgZm9yIGxv
Y2FsIGZpbGVzIHRvIHJlc29sdmUgdGhlIGlzc3VlLgogICAgIC8vIFRPRE86IFNlZSBpZiB0aGVy
ZSBpcyBhIGJldHRlciBhcHByb2FjaCBmb3IgaGFuZGxpbmcgdGhpcy4KLSAgICBVUkwgdXJsID0g
bV9jdXJsSGFuZGxlLmdldEVmZmVjdGl2ZVVSTCgpOwotICAgIEFTU0VSVCh1cmwuaXNWYWxpZCgp
KTsKLSAgICByZXNwb25zZSgpLnNldFVSTCh1cmwpOworICAgIHJlc3BvbnNlKCkuc2V0VVJMKG1f
Y3VybEhhbmRsZS5nZXRFZmZlY3RpdmVVUkwoKSk7CiAgICAgcmVzcG9uc2UoKS5zZXRSZXNwb25z
ZUZpcmVkKHRydWUpOwogICAgIGlmIChtX2hhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgIG1faGFu
ZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKG1faGFuZGxlLCBSZXNvdXJjZVJlc3Bv
bnNlKHJlc3BvbnNlKCkpKTsKQEAgLTUyMSw5ICs1MDMsOSBAQCB2b2lkIFJlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlOjpwcmVwYXJlU2VuZERhdGEoY2hhciogYnVmZmVyLCBzaXplX3QgYmxvY2tT
aXplLAogICAgIG1fd29ya2VyVGhyZWFkQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5T25lKCk7CiB9
CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRpZEZpbmlzaChkb3VibGUgcHJl
dHJhbnNmZXJUaW1lLCBkb3VibGUgZG5zTG9va3VwVGltZSwgZG91YmxlIGNvbm5lY3RUaW1lLCBk
b3VibGUgYXBwQ29ubmVjdFRpbWUpCit2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpk
aWRGaW5pc2goTmV0d29ya0xvYWRNZXRyaWNzIG5ldHdvcmtMb2FkTWV0cmljcykKIHsKLSAgICBz
ZXRXZWJUaW1pbmdzKHByZXRyYW5zZmVyVGltZSwgZG5zTG9va3VwVGltZSwgY29ubmVjdFRpbWUs
IGFwcENvbm5lY3RUaW1lKTsKKyAgICByZXNwb25zZSgpLnNldERlcHJlY2F0ZWROZXR3b3JrTG9h
ZE1ldHJpY3MobmV0d29ya0xvYWRNZXRyaWNzKTsKIAogICAgIGlmICghbV9oYW5kbGUpCiAgICAg
ICAgIHJldHVybjsKQEAgLTcyMSwxOSArNzAzLDEzIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGU6OmFwcGx5QXV0aGVudGljYXRpb24oKQogICAgIG1fY3VybEhhbmRsZS5zZXRIdHRw
QXV0aFVzZXJQYXNzKHVzZXIsIHBhc3N3b3JkKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZTo6c2V0V2ViVGltaW5ncyhkb3VibGUgcHJldHJhbnNmZXJUaW1lLCBkb3VibGUg
ZG5zTG9va3VwVGltZSwgZG91YmxlIGNvbm5lY3RUaW1lLCBkb3VibGUgYXBwQ29ubmVjdFRpbWUp
CitOZXR3b3JrTG9hZE1ldHJpY3MgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmdldE5ldHdv
cmtMb2FkTWV0cmljcygpCiB7Ci0gICAgcmVzcG9uc2UoKS5kZXByZWNhdGVkTmV0d29ya0xvYWRN
ZXRyaWNzKCkuZG9tYWluTG9va3VwU3RhcnQgPSBTZWNvbmRzKDApOwotICAgIHJlc3BvbnNlKCku
ZGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcygpLmRvbWFpbkxvb2t1cEVuZCA9IFNlY29uZHMo
ZG5zTG9va3VwVGltZSk7Ci0KLSAgICByZXNwb25zZSgpLmRlcHJlY2F0ZWROZXR3b3JrTG9hZE1l
dHJpY3MoKS5jb25uZWN0U3RhcnQgPSBTZWNvbmRzKGRuc0xvb2t1cFRpbWUpOwotICAgIHJlc3Bv
bnNlKCkuZGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcygpLmNvbm5lY3RFbmQgPSBTZWNvbmRz
KGNvbm5lY3RUaW1lKTsKKyAgICBOZXR3b3JrTG9hZE1ldHJpY3MgbmV0d29ya0xvYWRNZXRyaWNz
OworICAgIGlmIChhdXRvIG1ldHJpY3MgPSBtX2N1cmxIYW5kbGUuZ2V0VGltZXMoKSkKKyAgICAg
ICAgbmV0d29ya0xvYWRNZXRyaWNzID0gKm1ldHJpY3M7CiAKLSAgICByZXNwb25zZSgpLmRlcHJl
Y2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MoKS5yZXF1ZXN0U3RhcnQgPSBTZWNvbmRzKGNvbm5lY3RU
aW1lKTsKLSAgICByZXNwb25zZSgpLmRlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MoKS5yZXNw
b25zZVN0YXJ0ID0gU2Vjb25kcyhwcmV0cmFuc2ZlclRpbWUpOwotCi0gICAgaWYgKGFwcENvbm5l
Y3RUaW1lKQotICAgICAgICByZXNwb25zZSgpLmRlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3Mo
KS5zZWN1cmVDb25uZWN0aW9uU3RhcnQgPSBTZWNvbmRzKGNvbm5lY3RUaW1lKTsKKyAgICByZXR1
cm4gbmV0d29ya0xvYWRNZXRyaWNzOwogfQogCiAvKgpAQCAtNzYyLDcgKzczOCw4IEBAIHNpemVf
dCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlkUmVjZWl2ZUhlYWRlcihTdHJpbmcmJiBo
ZWFkZXIpCiAgICAgKi8KICAgICBpZiAoaGVhZGVyID09IEF0b21pY1N0cmluZygiXHJcbiIpIHx8
IGhlYWRlciA9PSBBdG9taWNTdHJpbmcoIlxuIikpIHsKICAgICAgICAgbG9uZyBodHRwQ29kZSA9
IDA7Ci0gICAgICAgIG1fY3VybEhhbmRsZS5nZXRSZXNwb25zZUNvZGUoaHR0cENvZGUpOworICAg
ICAgICBpZiAoYXV0byBjb2RlID0gbV9jdXJsSGFuZGxlLmdldFJlc3BvbnNlQ29kZSgpKQorICAg
ICAgICAgICAgaHR0cENvZGUgPSAqY29kZTsKIAogICAgICAgICBpZiAoIWh0dHBDb2RlKSB7CiAg
ICAgICAgICAgICAvLyBDb21lcyBoZXJlIHdoZW4gcmVjZWl2aW5nIDIwMCBDb25uZWN0aW9uIEVz
dGFibGlzaGVkLiBKdXN0IHJldHVybi4KQEAgLTc3NSw3ICs3NTIsOCBAQCBzaXplX3QgUmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRpZFJlY2VpdmVIZWFkZXIoU3RyaW5nJiYgaGVhZGVyKQog
ICAgICAgICB9CiAKICAgICAgICAgbG9uZyBsb25nIGNvbnRlbnRMZW5ndGggPSAwOwotICAgICAg
ICBtX2N1cmxIYW5kbGUuZ2V0Q29udGVudExlbmdodERvd25sb2FkKGNvbnRlbnRMZW5ndGgpOwor
ICAgICAgICBpZiAoYXV0byBsZW5ndGggPSBtX2N1cmxIYW5kbGUuZ2V0Q29udGVudExlbmdodERv
d25sb2FkKCkpCisgICAgICAgICAgICBjb250ZW50TGVuZ3RoID0gKmxlbmd0aDsKIAogICAgICAg
ICBpZiAoaXNNYWluVGhyZWFkKCkpCiAgICAgICAgICAgICBkaWRSZWNlaXZlQWxsSGVhZGVycyho
dHRwQ29kZSwgY29udGVudExlbmd0aCk7CkBAIC04MTcsMTAgKzc5NSwxMCBAQCBzaXplX3QgUmVz
b3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRhKFRocmVhZFNhZmVEYXRhQnVm
ZmVyIGRhdGEpCiAgICAgLy8gdGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IGJ1dCBhcHBhcmVu
dGx5IGlzLiBDVVJMIHdyaXRlcyB0aGUgZGF0YQogICAgIC8vIG9mIGh0bWwgcGFnZSBldmVuIGlm
IGl0IGlzIGEgcmVkaXJlY3QgdGhhdCB3YXMgaGFuZGxlZCBpbnRlcm5hbGx5CiAgICAgLy8gY2Fu
IGJlIG9ic2VydmVkIGUuZy4gb24gZ21haWwuY29tCi0gICAgbG9uZyBodHRwQ29kZSA9IDA7Ci0g
ICAgQ1VSTGNvZGUgZXJyQ2QgPSBtX2N1cmxIYW5kbGUuZ2V0UmVzcG9uc2VDb2RlKGh0dHBDb2Rl
KTsKLSAgICBpZiAoQ1VSTEVfT0sgPT0gZXJyQ2QgJiYgaHR0cENvZGUgPj0gMzAwICYmIGh0dHBD
b2RlIDwgNDAwKQotICAgICAgICByZXR1cm4gZGF0YS5zaXplKCk7CisgICAgaWYgKGF1dG8gaHR0
cENvZGUgPSBtX2N1cmxIYW5kbGUuZ2V0UmVzcG9uc2VDb2RlKCkpIHsKKyAgICAgICAgaWYgKCpo
dHRwQ29kZSA+PSAzMDAgJiYgKmh0dHBDb2RlIDwgNDAwKQorICAgICAgICAgICAgcmV0dXJuIGRh
dGEuc2l6ZSgpOworICAgIH0KIAogICAgIGlmICghZGF0YS5zaXplKCkpCiAgICAgICAgIHJldHVy
biAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuaAppbmRleCAzYmVkNDlhMjU5ZC4u
MTY3YTM3OGMxOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oCkBAIC04MCw3
ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSgp
OwogICAgIHZvaWQgcHJlcGFyZVNlbmREYXRhKGNoYXIqLCBzaXplX3QgYmxvY2tTaXplLCBzaXpl
X3QgbnVtYmVyT2ZCbG9ja3MpOwogCi0gICAgdm9pZCBkaWRGaW5pc2goZG91YmxlLCBkb3VibGUs
IGRvdWJsZSwgZG91YmxlKTsKKyAgICB2b2lkIGRpZEZpbmlzaChOZXR3b3JrTG9hZE1ldHJpY3Mp
OwogICAgIHZvaWQgZGlkRmFpbChjb25zdCBTdHJpbmcmIGRvbWFpbiwgaW50IGVycm9yQ29kZSwg
Y29uc3QgVVJMJiBmYWlsaW5nVVJMLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERlc2NyaXB0aW9u
LCB1bnNpZ25lZCBzc2xFcnJvcnMpOwogCiAgICAgdm9pZCBoYW5kbGVEYXRhVVJMKCk7CkBAIC05
MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IGdldEZvcm1FbGVtZW50c0NvdW50KCk7
CiAgICAgdm9pZCBzZXR1cEZvcm1EYXRhKGJvb2wpOwogICAgIHZvaWQgYXBwbHlBdXRoZW50aWNh
dGlvbigpOwotICAgIHZvaWQgc2V0V2ViVGltaW5ncyhkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBk
b3VibGUpOworICAgIE5ldHdvcmtMb2FkTWV0cmljcyBnZXROZXR3b3JrTG9hZE1ldHJpY3MoKTsK
IAogICAgIHNpemVfdCBkaWRSZWNlaXZlSGVhZGVyKFN0cmluZyYmKTsKICAgICBzaXplX3QgZGlk
UmVjZWl2ZURhdGEoVGhyZWFkU2FmZURhdGFCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVzcG9uc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlc3BvbnNlLmgKaW5kZXggYzdi
YTU0YTY2NTAuLmI2M2QyOGEwYWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VSZXNwb25zZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlc3BvbnNlLmgKQEAgLTUwLDYgKzUwLDggQEAg
cHVibGljOgogCiAgICAgdm9pZCBhcHBlbmRIVFRQSGVhZGVyRmllbGQoY29uc3QgU3RyaW5nJik7
CiAKKyAgICB2b2lkIHNldERlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MoY29uc3QgTmV0d29y
a0xvYWRNZXRyaWNzJiBuZXR3b3JrTG9hZE1ldHJpY3MpIHsgbV9uZXR3b3JrTG9hZE1ldHJpY3Mg
PSBuZXR3b3JrTG9hZE1ldHJpY3M7IH0KKwogICAgIGJvb2wgaXNSZWRpcmVjdGlvbigpIGNvbnN0
OwogICAgIGJvb2wgaXNOb3RNb2RpZmllZCgpIGNvbnN0OwogICAgIGJvb2wgaXNVbmF1dGhvcml6
ZWQoKSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320829</attachid>
            <date>2017-09-14 14:59:07 -0700</date>
            <delta_ts>2017-09-15 12:59:45 -0700</delta_ts>
            <desc>fix</desc>
            <filename>176910-3.diff</filename>
            <type>text/plain</type>
            <size>40782</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNjNjMmNhNjJjOC4uYmM3OGEwMGE4NmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAxNy0wOS0xNCAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIENyZWF0ZSBhIGNsYXNzIGRlZGljYXRlZCB0byBoYW5k
bGUgU1NMIHJlbGF0ZWQgdGFzaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc2OTEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9DdXJsLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4
dDo6Q3VybENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6c2V0Q0FDZXJ0
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpnZXRFZmZlY3RpdmVVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Z2V0UHJpbWFyeVBvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEhhbmRsZTo6Z2V0UmVzcG9uc2VDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxIYW5kbGU6OmdldENvbnRlbnRMZW5naHREb3dubG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsSGFuZGxlOjpnZXRIdHRwQXV0aEF2YWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxI
YW5kbGU6OmdldFRpbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNlcnRpZmljYXRlUGF0aCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjplbmFibGVDQUluZm9JZkV4aXN0
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpzZXRTc2xFcnJvcnMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Z2V0U3NsRXJyb3JzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmdldEVmZmVjdGl2ZVVSTCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250
ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6Z2V0Q2VydGlmaWNhdGVQYXRo
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpzaG91bGRJ
Z25vcmVTU0xFcnJvcnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsRG93bmxvYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2Fk
OjpzZXR1cFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpkaWRSZWNl
aXZlSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTEhhbmRs
ZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U1NMSGFuZGxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xTZXR0aW5nczo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xTZXR0aW5nczo6Q3VybFNTTFNldHRpbmdz
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xTZXR0aW5nczo6Z2V0Q0FDZXJ0UGF0aEVudik6
CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMU2V0dGluZ3M6OnNldEhvc3RBbGxvd3NBbnlIVFRQ
U0NlcnRpZmljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xTZXR0aW5nczo6aXNBbGxv
d2VkSFRUUFNDZXJ0aWZpY2F0ZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFNldHRp
bmdzOjpjYW5JZ25vcmVkSFRUUFNDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
U1NMU2V0dGluZ3M6OnNldENsaWVudENlcnRpZmljYXRlSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsU1NMU2V0dGluZ3M6OmdldFNTTENsaWVudENlcnRpZmljYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxTU0xWZXJpZmllcjo6c2V0U3NsQ3R4KToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxTU0xWZXJpZmllcjo6Y2VydFZlcmlmeUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxTU0xWZXJpZmllcjo6Z2V0UGVtRGF0YUZyb21DdHgpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFNTTFZlcmlmaWVyOjpjb252ZXJ0VG9TU0xDZXJ0aWZpY2F0ZUZsYWdzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTEhhbmRsZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxTU0xTZXR0aW5nczo6c2hvdWxkSWdub3JlU1NMRXJyb3JzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxTU0xTZXR0aW5nczo6Z2V0Q0FDZXJ0UGF0aCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsU1NMVmVyaWZpZXI6OnNldEN1cmxIYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjpzZXRIb3N0TmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsU1NMVmVyaWZpZXI6OnNzbEVycm9ycyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZTo6c2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlSW5mbyk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpSZXNvdXJj
ZUhhbmRsZUN1cmxEZWxlZ2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZTo6ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYik6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2V0dXBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpub3RpZnlGaW5pc2gpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6Om5vdGlmeUZhaWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmdldFByb3RlY3Rpb25TcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlkUmVj
ZWl2ZUFsbEhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGU6OmhhbmRsZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRGaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmdldE5ldHdvcmtMb2FkTWV0cmljcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6d2lsbFNldHVwU3NsQ3R4
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRSZWNl
aXZlSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRl
OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZTo6d2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldFdlYlRpbWluZ3MpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpzZXREZXByZWNhdGVkTmV0d29ya0xvYWRN
ZXRyaWNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU1NMSGFuZGxlLmg6IFJl
bW92ZWQuCisKIDIwMTctMDktMTQgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBUaW1lbGluZSBzaG91bGQgc2hvdyB3aGVuIGV2
ZW50cyBwcmV2ZW50RGVmYXVsdCgpIHdhcyBjYWxsZWQgb24gYW4gZXZlbnQgb3Igbm90CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ3VybC5jbWFrZQppbmRleCBiYzEyMjM5MTllNy4uZmZhOGQ5MmZiNGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQpAQCAtMTAsNiArMTAsNyBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQu
Y3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuY3BwCisgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxTU0xIYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0ROU0N1
cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0Zvcm1EYXRhU3RyZWFtQ3VybC5jcHAK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVsdGlwYXJ0SGFuZGxlLmNwcApAQCAtMTcsNyAr
MTgsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
UmVzb3VyY2VSZXNwb25zZUN1cmwuY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhh
bmRsZS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1w
bEN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1N5bmNocm9ub3VzTG9hZGVyQ2xp
ZW50Q3VybC5jcHAKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybENvbnRleHQuY3BwCmluZGV4IDhlNTk2MmQ3Zjg0Li4wZjVkNDhkNzZkYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRl
eHQuY3BwCkBAIC0zOSwzNSArMzksMTAgQEAKICNpbmNsdWRlIDxzaGx3YXBpLmg+CiAjZW5kaWYK
IAotI2lmIFVTRShDRikKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jZW5kaWYKLQogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIENT
dHJpbmcgY2VydGlmaWNhdGVQYXRoKCkKLXsKLSAgICBjaGFyKiBlbnZQYXRoID0gZ2V0ZW52KCJD
VVJMX0NBX0JVTkRMRV9QQVRIIik7Ci0gICAgaWYgKGVudlBhdGgpCi0gICAgICAgIHJldHVybiBl
bnZQYXRoOwotCi0jaWYgVVNFKENGKQotICAgIENGQnVuZGxlUmVmIHdlYktpdEJ1bmRsZVJlZiA9
IHdlYktpdEJ1bmRsZSgpOwotICAgIGlmICh3ZWJLaXRCdW5kbGVSZWYpIHsKLSAgICAgICAgUmV0
YWluUHRyPENGVVJMUmVmPiBjZXJ0VVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJj
ZVVSTCh3ZWJLaXRCdW5kbGVSZWYsIENGU1RSKCJjYWNlcnQiKSwgQ0ZTVFIoInBlbSIpLCBDRlNU
UigiY2VydGlmaWNhdGVzIikpKTsKLSAgICAgICAgaWYgKGNlcnRVUkxSZWYpIHsKLSAgICAgICAg
ICAgIGNoYXIgcGF0aFtNQVhfUEFUSF07Ci0gICAgICAgICAgICBDRlVSTEdldEZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihjZXJ0VVJMUmVmLmdldCgpLCBmYWxzZSwgcmVpbnRlcnByZXRfY2FzdDxV
SW50OCo+KHBhdGgpLCBNQVhfUEFUSCk7Ci0gICAgICAgICAgICByZXR1cm4gcGF0aDsKLSAgICAg
ICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIENTdHJpbmcoKTsKLX0KLQogc3RhdGlj
IENTdHJpbmcgY29va2llSmFyUGF0aCgpCiB7CiAgICAgY2hhciogY29va2llSmFyUGF0aCA9IGdl
dGVudigiQ1VSTF9DT09LSUVfSkFSX1BBVEgiKTsKQEAgLTEwNiwxMyArODEsMTAgQEAgY29uc3Qg
Y2hhciogY29uc3QgQ3VybENvbnRleHQ6OmVycm9yRG9tYWluID0gIkN1cmxFcnJvckRvbWFpbiI7
CiAKIEN1cmxDb250ZXh0OjpDdXJsQ29udGV4dCgpCiA6IG1fY29va2llSmFyRmlsZU5hbWUgeyBj
b29raWVKYXJQYXRoKCkgfQotLCBtX2NlcnRpZmljYXRlUGF0aCB7IGNlcnRpZmljYXRlUGF0aCgp
IH0KICwgbV9jb29raWVKYXIgeyBzdGQ6Om1ha2VfdW5pcXVlPENvb2tpZUphckN1cmxGaWxlU3lz
dGVtPigpIH0KIHsKICAgICBpbml0Q29va2llU2Vzc2lvbigpOwogCi0gICAgbV9pZ25vcmVTU0xF
cnJvcnMgPSBnZXRlbnYoIldFQktJVF9JR05PUkVfU1NMX0VSUk9SUyIpOwotCiAjaWZuZGVmIE5E
RUJVRwogICAgIG1fdmVyYm9zZSA9IGdldGVudigiREVCVUdfQ1VSTCIpOwogCkBAIC00NjksMTEg
KzQ0MSwxMCBAQCB2b2lkIEN1cmxIYW5kbGU6OnNldEh0dHBBdXRoVXNlclBhc3MoY29uc3QgU3Ry
aW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQogICAgIGN1cmxfZWFzeV9zZXRvcHQo
bV9oYW5kbGUsIENVUkxPUFRfVVNFUlBXRCwgdXNlcnBhc3MudXRmOCgpLmRhdGEoKSk7CiB9CiAK
LXZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxlQ0FJbmZvSWZFeGlzdHMoKQordm9pZCBDdXJsSGFuZGxl
OjpzZXRDQUNlcnRQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCiB7Ci0gICAgY29uc3QgY2hhciogY2Vy
dFBhdGggPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0Q2VydGlmaWNhdGVQYXRoKCk7Ci0g
ICAgaWYgKGNlcnRQYXRoKQotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJM
T1BUX0NBSU5GTywgY2VydFBhdGgpOworICAgIGlmIChwYXRoKQorICAgICAgICBjdXJsX2Vhc3lf
c2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0NBSU5GTywgcGF0aCk7CiB9CiAKIHZvaWQgQ3VybEhh
bmRsZTo6c2V0U3NsVmVyaWZ5UGVlcihWZXJpZnlQZWVyIHZlcmlmeVBlZXIpCkBAIC01MDEsMTYg
KzQ3Miw2IEBAIHZvaWQgQ3VybEhhbmRsZTo6c2V0U3NsS2V5UGFzc3dvcmQoY29uc3QgY2hhciog
cGFzc3dvcmQpCiAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9LRVlQQVNT
V0QsIHBhc3N3b3JkKTsKIH0KIAotdm9pZCBDdXJsSGFuZGxlOjpzZXRTc2xFcnJvcnModW5zaWdu
ZWQgc3NsRXJyb3JzKQotewotICAgIG1fc3NsRXJyb3JzID0gc3NsRXJyb3JzOwotfQotCi11bnNp
Z25lZCBDdXJsSGFuZGxlOjpnZXRTc2xFcnJvcnMoKQotewotICAgIHJldHVybiBtX3NzbEVycm9y
czsKLX0KLQogdm9pZCBDdXJsSGFuZGxlOjplbmFibGVDb29raWVKYXJJZkV4aXN0cygpCiB7CiAg
ICAgY29uc3QgY2hhciogY29va2llSmFyID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldENv
b2tpZUphckZpbGVOYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsQ29udGV4dC5oCmluZGV4IDJiMjZkZGJlOGQ2Li43YTk4NmZlNmE2YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0
LmgKQEAgLTEyMCwxMCArMTIwLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q29va2llSmFyRmls
ZU5hbWUoY29uc3QgY2hhciogY29va2llSmFyRmlsZU5hbWUpIHsgbV9jb29raWVKYXJGaWxlTmFt
ZSA9IENTdHJpbmcoY29va2llSmFyRmlsZU5hbWUpOyB9CiAgICAgQ29va2llSmFyQ3VybCYgY29v
a2llSmFyKCkgeyByZXR1cm4gKm1fY29va2llSmFyOyB9CiAKLSAgICAvLyBDZXJ0aWZpY2F0ZQot
ICAgIGNvbnN0IGNoYXIqIGdldENlcnRpZmljYXRlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2Vy
dGlmaWNhdGVQYXRoLmRhdGEoKTsgfQotICAgIGJvb2wgc2hvdWxkSWdub3JlU1NMRXJyb3JzKCkg
Y29uc3QgeyByZXR1cm4gbV9pZ25vcmVTU0xFcnJvcnM7IH0KLQogICAgIC8vIFByb3h5CiAgICAg
Y29uc3QgUHJveHlJbmZvJiBwcm94eUluZm8oKSBjb25zdCB7IHJldHVybiBtX3Byb3h5OyB9CiAg
ICAgdm9pZCBzZXRQcm94eUluZm8oY29uc3QgUHJveHlJbmZvJiBpbmZvKSB7IG1fcHJveHkgPSBp
bmZvOyAgfQpAQCAtMTM3LDEwICsxMzMsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFByb3h5
SW5mbyBtX3Byb3h5OwogICAgIENTdHJpbmcgbV9jb29raWVKYXJGaWxlTmFtZTsKLSAgICBDU3Ry
aW5nIG1fY2VydGlmaWNhdGVQYXRoOwogICAgIEN1cmxTaGFyZUhhbmRsZSBtX3NoYXJlSGFuZGxl
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb29raWVKYXJDdXJsPiBtX2Nvb2tpZUphcjsKLSAgICBi
b29sIG1faWdub3JlU1NMRXJyb3JzIHsgZmFsc2UgfTsKIAogICAgIEN1cmxDb250ZXh0KCk7CiAg
ICAgdm9pZCBpbml0Q29va2llU2Vzc2lvbigpOwpAQCAtMjYzLDE0ICsyNTcsMTIgQEAgcHVibGlj
OgogICAgIHZvaWQgZW5hYmxlSHR0cEF1dGhlbnRpY2F0aW9uKGxvbmcpOwogICAgIHZvaWQgc2V0
SHR0cEF1dGhVc2VyUGFzcyhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKIAotICAgIHZv
aWQgZW5hYmxlQ0FJbmZvSWZFeGlzdHMoKTsKKyAgICB2b2lkIHNldENBQ2VydFBhdGgoY29uc3Qg
Y2hhciopOwogICAgIHZvaWQgc2V0U3NsVmVyaWZ5UGVlcihWZXJpZnlQZWVyKTsKICAgICB2b2lk
IHNldFNzbFZlcmlmeUhvc3QoVmVyaWZ5SG9zdCk7CiAgICAgdm9pZCBzZXRTc2xDZXJ0KGNvbnN0
IGNoYXIqKTsKICAgICB2b2lkIHNldFNzbENlcnRUeXBlKGNvbnN0IGNoYXIqKTsKICAgICB2b2lk
IHNldFNzbEtleVBhc3N3b3JkKGNvbnN0IGNoYXIqKTsKLSAgICB2b2lkIHNldFNzbEVycm9ycyh1
bnNpZ25lZCk7Ci0gICAgdW5zaWduZWQgZ2V0U3NsRXJyb3JzKCk7CiAKICAgICB2b2lkIGVuYWJs
ZUNvb2tpZUphcklmRXhpc3RzKCk7CiAgICAgdm9pZCBzZXRDb29raWVMaXN0KGNvbnN0IGNoYXIq
KTsKQEAgLTMwOSw3ICszMDEsNiBAQCBwcml2YXRlOgogICAgIENVUkwqIG1faGFuZGxlIHsgbnVs
bHB0ciB9OwogICAgIGNoYXIgbV9lcnJvckJ1ZmZlcltDVVJMX0VSUk9SX1NJWkVdIHsgfTsKICAg
ICBDVVJMY29kZSBtX2Vycm9yQ29kZTsKLSAgICB1bnNpZ25lZCBtX3NzbEVycm9ycyB7IDAgfTsK
IAogICAgIGNoYXIqIG1fdXJsIHsgbnVsbHB0ciB9OwogICAgIHZvaWQqIG1fcHJpdmF0ZURhdGEg
eyBudWxscHRyIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybERvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsRG93bmxvYWQuY3BwCmluZGV4IDVmNWUzZTQ0ZWZkLi5mMjIyNjdiODFjNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9h
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3du
bG9hZC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBVU0UoQ1VSTCkKIAogI2luY2x1ZGUgIkN1
cmxDb250ZXh0LmgiCisjaW5jbHVkZSAiQ3VybFNTTEhhbmRsZS5oIgogI2luY2x1ZGUgIkhUVFBI
ZWFkZXJOYW1lcy5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXF1ZXN0LmgiCkBAIC0xMTksNyArMTIwLDggQEAgdm9pZCBDdXJsRG93bmxvYWQ6OnNldHVw
UmVxdWVzdCgpCiAgICAgbV9jdXJsSGFuZGxlLnNldFdyaXRlQ2FsbGJhY2tGdW5jdGlvbih3cml0
ZUNhbGxiYWNrLCB0aGlzKTsKICAgICBtX2N1cmxIYW5kbGUuZW5hYmxlRm9sbG93TG9jYXRpb24o
KTsKICAgICBtX2N1cmxIYW5kbGUuZW5hYmxlSHR0cEF1dGhlbnRpY2F0aW9uKENVUkxBVVRIX0FO
WSk7Ci0gICAgbV9jdXJsSGFuZGxlLmVuYWJsZUNBSW5mb0lmRXhpc3RzKCk7CisgICAgbV9jdXJs
SGFuZGxlLnNldENBQ2VydFBhdGgoQ3VybFNTTFNldHRpbmdzOjpzaW5nbGV0b24oKS5nZXRDQUNl
cnRQYXRoKCkpOworCiB9CiAKIHZvaWQgQ3VybERvd25sb2FkOjpub3RpZnlGaW5pc2goKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTEhhbmRsZS5j
cHAKc2ltaWxhcml0eSBpbmRleCA2OSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMSGFuZGxlLmNwcAppbmRleCA5NmZhY2NlOGVmOS4u
NGI4MTE3NWY4Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9TU0xIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsU1NMSGFuZGxlLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxNyBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNCw4MyArMjUsMjE0IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkN1cmxTU0xIYW5kbGUuaCIKIAogI2lmIFVTRShDVVJMKQogCi0jaW5jbHVkZSAi
U1NMSGFuZGxlLmgiCisjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KIAotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKyNp
ZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgIldlYkNvcmVCdW5kbGVXaW4uaCIKKyNlbmRpZgogCi0j
aW5jbHVkZSA8b3BlbnNzbC9wZW0uaD4KLSNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgotI2luY2x1
ZGUgPG9wZW5zc2wveDUwOV92ZnkuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisjaWYgVVNFKENGKQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgTGlzdEhhc2hTZXQ8
U3RyaW5nPiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgYWxsb3dlZEhvc3RzKCkKKy8vIEN1
cmxTU0xTZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitDdXJsU1NMU2V0dGluZ3MmIEN1cmxTU0xTZXR0aW5nczo6c2luZ2xldG9uKCkK
IHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIExpc3RIYXNoU2V0
PFN0cmluZz4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IG1hcDsKLSAgICByZXR1cm4gbWFw
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDdXJsU1NMU2V0dGluZ3M+IHNoYXJlZDsKKyAg
ICByZXR1cm4gc2hhcmVkOwogfQogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIENsaWVudENlcnRp
ZmljYXRlLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBhbGxvd2VkQ2xpZW50SG9zdHMoKQor
Q3VybFNTTFNldHRpbmdzOjpDdXJsU1NMU2V0dGluZ3MoKQorICAgIDogbV9jYUNlcnRQYXRoKGdl
dENBQ2VydFBhdGhFbnYoKSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxT
dHJpbmcsIENsaWVudENlcnRpZmljYXRlLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBtYXA7
Ci0gICAgcmV0dXJuIG1hcDsKKyAgICBjaGFyKiBpZ25vcmVTU0xFcnJvcnMgPSBnZXRlbnYoIldF
QktJVF9JR05PUkVfU1NMX0VSUk9SUyIpOworICAgIGlmIChpZ25vcmVTU0xFcnJvcnMpCisgICAg
ICAgIG1faWdub3JlU1NMRXJyb3JzID0gdHJ1ZTsKIH0KIAotdm9pZCBhbGxvd3NBbnlIVFRQU0Nl
cnRpZmljYXRlSG9zdHMoY29uc3QgU3RyaW5nJiBob3N0KQorQ1N0cmluZyBDdXJsU1NMU2V0dGlu
Z3M6OmdldENBQ2VydFBhdGhFbnYoKQogewotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gY2VydGlm
aWNhdGVzOwotICAgIGFsbG93ZWRIb3N0cygpLnNldChob3N0LCBjZXJ0aWZpY2F0ZXMpOworICAg
IGNoYXIqIGVudlBhdGggPSBnZXRlbnYoIkNVUkxfQ0FfQlVORExFX1BBVEgiKTsKKyAgICBpZiAo
ZW52UGF0aCkKKyAgICAgICAgcmV0dXJuIGVudlBhdGg7CisKKyNpZiBVU0UoQ0YpCisgICAgQ0ZC
dW5kbGVSZWYgd2ViS2l0QnVuZGxlUmVmID0gd2ViS2l0QnVuZGxlKCk7CisgICAgaWYgKHdlYktp
dEJ1bmRsZVJlZikgeworICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNlcnRVUkxSZWYgPSBh
ZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKHdlYktpdEJ1bmRsZVJlZiwgQ0ZTVFIoImNh
Y2VydCIpLCBDRlNUUigicGVtIiksIENGU1RSKCJjZXJ0aWZpY2F0ZXMiKSkpOworICAgICAgICBp
ZiAoY2VydFVSTFJlZikgeworICAgICAgICAgICAgY2hhciBwYXRoW01BWF9QQVRIXTsKKyAgICAg
ICAgICAgIENGVVJMR2V0RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNlcnRVUkxSZWYuZ2V0KCks
IGZhbHNlLCByZWludGVycHJldF9jYXN0PFVJbnQ4Kj4ocGF0aCksIE1BWF9QQVRIKTsKKyAgICAg
ICAgICAgIHJldHVybiBwYXRoOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1
cm4gQ1N0cmluZygpOwogfQogCi12b2lkIGFkZEFsbG93ZWRDbGllbnRDZXJ0aWZpY2F0ZShjb25z
dCBTdHJpbmcmIGhvc3QsIGNvbnN0IFN0cmluZyYgY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYg
a2V5KQordm9pZCBDdXJsU1NMU2V0dGluZ3M6OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmlj
YXRlKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUpCiB7Ci0gICAgQ2xpZW50Q2VydGlmaWNhdGUgY2xp
ZW50SW5mbyB7IGNlcnRpZmljYXRlLCBrZXkgfTsKLSAgICBhbGxvd2VkQ2xpZW50SG9zdHMoKS5z
ZXQoaG9zdCwgY2xpZW50SW5mbyk7CisgICAgTG9ja0hvbGRlciBtdXRleChtX211dGV4KTsKKwor
ICAgIExpc3RIYXNoU2V0PFN0cmluZz4gY2VydGlmaWNhdGVzOworICAgIG1fYWxsb3dlZEhvc3Rz
LnNldChob3N0TmFtZSwgY2VydGlmaWNhdGVzKTsKIH0KIAotc3RkOjpvcHRpb25hbDxDbGllbnRD
ZXJ0aWZpY2F0ZT4gZ2V0U1NMQ2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0KQor
Ym9vbCBDdXJsU1NMU2V0dGluZ3M6OmlzQWxsb3dlZEhUVFBTQ2VydGlmaWNhdGVIb3N0KGNvbnN0
IFN0cmluZyYgaG9zdE5hbWUpCiB7Ci0gICAgYXV0byBpdCA9IGFsbG93ZWRDbGllbnRIb3N0cygp
LmZpbmQoaG9zdCk7Ci0gICAgaWYgKGl0ID09IGFsbG93ZWRDbGllbnRIb3N0cygpLmVuZCgpKQot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIExvY2tIb2xkZXIgbXV0ZXgobV9tdXRl
eCk7CiAKLSAgICByZXR1cm4gaXQtPnZhbHVlOworICAgIGF1dG8gaXQgPSBtX2FsbG93ZWRIb3N0
cy5maW5kKGhvc3ROYW1lKTsKKyAgICByZXR1cm4gKGl0ICE9IG1fYWxsb3dlZEhvc3RzLmVuZCgp
KTsKIH0KIAotYm9vbCBzc2xJZ25vcmVIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9z
dCwgY29uc3QgTGlzdEhhc2hTZXQ8U3RyaW5nPiYgY2VydGlmaWNhdGVzKQorYm9vbCBDdXJsU1NM
U2V0dGluZ3M6OmNhbklnbm9yZWRIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdE5h
bWUsIGNvbnN0IExpc3RIYXNoU2V0PFN0cmluZz4mIGNlcnRpZmljYXRlcykKIHsKLSAgICBhdXRv
IGl0ID0gYWxsb3dlZEhvc3RzKCkuZmluZChob3N0KTsKLSAgICBpZiAoaXQgIT0gYWxsb3dlZEhv
c3RzKCkuZW5kKCkpIHsKKyAgICBMb2NrSG9sZGVyIG11dGV4KG1fbXV0ZXgpOworCisgICAgYXV0
byBpdCA9IG1fYWxsb3dlZEhvc3RzLmZpbmQoaG9zdE5hbWUpOworICAgIGlmIChpdCAhPSBtX2Fs
bG93ZWRIb3N0cy5lbmQoKSkgewogICAgICAgICBpZiAoKGl0LT52YWx1ZSkuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICBpdC0+dmFsdWUgPSBjZXJ0aWZpY2F0ZXM7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2VydGlmaWNhdGVzLnNpemUoKSAhPSBp
dC0+dmFsdWUuc2l6ZSgpKQorCisgICAgICAgIGlmIChpdC0+dmFsdWUuc2l6ZSgpICE9IGNlcnRp
ZmljYXRlcy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgYXV0
byBjZXJ0c0l0ZXIgPSBjZXJ0aWZpY2F0ZXMuYmVnaW4oKTsKICAgICAgICAgYXV0byB2YWx1ZUl0
ZXIgPSAoaXQtPnZhbHVlKS5iZWdpbigpOwogICAgICAgICBmb3IgKDsgdmFsdWVJdGVyICE9IChp
dC0+dmFsdWUpLmVuZCgpOyArK3ZhbHVlSXRlciwgKytjZXJ0c0l0ZXIpIHsKICAgICAgICAgICAg
IGlmICgqY2VydHNJdGVyICE9ICp2YWx1ZUl0ZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi11bnNpZ25lZCBzc2xDZXJ0aWZpY2F0ZUZsYWcoY29uc3QgdW5zaWdu
ZWQmIHNzbEVycm9yKQordm9pZCBDdXJsU1NMU2V0dGluZ3M6OnNldENsaWVudENlcnRpZmljYXRl
SW5mbyhjb25zdCBTdHJpbmcmIGhvc3ROYW1lLCBjb25zdCBTdHJpbmcmIGNlcnRpZmljYXRlLCBj
b25zdCBTdHJpbmcmIGtleSkKK3sKKyAgICBMb2NrSG9sZGVyIG11dGV4KG1fbXV0ZXgpOworCisg
ICAgQ2xpZW50Q2VydGlmaWNhdGUgY2xpZW50SW5mbyhjZXJ0aWZpY2F0ZSwga2V5KTsKKyAgICBt
X2FsbG93ZWRDbGllbnRIb3N0cy5zZXQoaG9zdE5hbWUsIGNsaWVudEluZm8pOworfQorCitzdGQ6
Om9wdGlvbmFsPEN1cmxTU0xTZXR0aW5nczo6Q2xpZW50Q2VydGlmaWNhdGU+IEN1cmxTU0xTZXR0
aW5nczo6Z2V0U1NMQ2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0TmFtZSkKK3sK
KyAgICBMb2NrSG9sZGVyIG11dGV4KG1fbXV0ZXgpOworCisgICAgYXV0byBpdCA9IG1fYWxsb3dl
ZENsaWVudEhvc3RzLmZpbmQoaG9zdE5hbWUpOworICAgIGlmIChpdCA9PSBtX2FsbG93ZWRDbGll
bnRIb3N0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVy
biBpdC0+dmFsdWU7Cit9CisKKworCisvLyBDdXJsU1NMVmVyaXRpZmVyIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBDdXJsU1NMVmVyaWZp
ZXI6OnNldFNzbEN0eCh2b2lkKiBzc2xDdHgpCit7CisgICAgaWYgKCFzc2xDdHgpCisgICAgICAg
IHJldHVybjsKKworICAgIFNTTF9DVFhfc2V0X2FwcF9kYXRhKHN0YXRpY19jYXN0PFNTTF9DVFgq
Pihzc2xDdHgpLCB0aGlzKTsKKyAgICBTU0xfQ1RYX3NldF92ZXJpZnkoc3RhdGljX2Nhc3Q8U1NM
X0NUWCo+KHNzbEN0eCksIFNTTF9WRVJJRllfUEVFUiwgY2VydFZlcmlmeUNhbGxiYWNrKTsKK30K
KworaW50IEN1cmxTU0xWZXJpZmllcjo6Y2VydFZlcmlmeUNhbGxiYWNrKGludCBvaywgWDUwOV9T
VE9SRV9DVFgqIHN0b3JlQ3R4KQoreworICAgIC8vIHdoZXRoZXIgdGhlIHZlcmlmaWNhdGlvbiBv
ZiB0aGUgY2VydGlmaWNhdGUgaW4gcXVlc3Rpb24gd2FzIHBhc3NlZCAocHJldmVyaWZ5X29rPTEp
IG9yIG5vdCAocHJldmVyaWZ5X29rPTApCisgICAgaW50IGNlcnRFcnJDZCA9IFg1MDlfU1RPUkVf
Q1RYX2dldF9lcnJvcihzdG9yZUN0eCk7CisgICAgaWYgKCFjZXJ0RXJyQ2QpCisgICAgICAgIHJl
dHVybiAxOworCisgICAgU1NMKiBzc2wgPSBzdGF0aWNfY2FzdDxTU0wqPihYNTA5X1NUT1JFX0NU
WF9nZXRfZXhfZGF0YShzdG9yZUN0eCwgU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lk
eCgpKSk7CisgICAgU1NMX0NUWCogc3NsQ3R4ID0gU1NMX2dldF9TU0xfQ1RYKHNzbCk7CisgICAg
Q3VybFNTTFZlcmlmaWVyKiB2ZXJpZmllciA9IHN0YXRpY19jYXN0PEN1cmxTU0xWZXJpZmllcio+
KFNTTF9DVFhfZ2V0X2FwcF9kYXRhKHNzbEN0eCkpOworICAgIGlmICh2ZXJpZmllcikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICB2ZXJpZmllci0+bV9zc2xFcnJvcnMgPSBzdGF0aWNfY2FzdDxp
bnQ+KHZlcmlmaWVyLT5jb252ZXJ0VG9TU0xDZXJ0aWZpY2F0ZUZsYWdzKGNlcnRFcnJDZCkpOwor
CisjaWYgT1MoV0lORE9XUykKKyAgICBvayA9IEN1cmxTU0xTZXR0aW5nczo6c2luZ2xldG9uKCku
aXNBbGxvd2VkSFRUUFNDZXJ0aWZpY2F0ZUhvc3QodmVyaWZpZXItPm1faG9zdE5hbWUpOworI2Vs
c2UKKyAgICBMaXN0SGFzaFNldDxTdHJpbmc+IGNlcnRpZmljYXRlczsKKyAgICBpZiAoIWdldFBl
bURhdGFGcm9tQ3R4KHN0b3JlQ3R4LCBjZXJ0aWZpY2F0ZXMpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIG9rID0gQ3VybFNTTFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYW5JZ25vcmVkSFRUUFND
ZXJ0aWZpY2F0ZSh2ZXJpZmllci0+bV9ob3N0TmFtZSwgY2VydGlmaWNhdGVzKTsKKyNlbmRpZgor
CisgICAgaWYgKG9rKSB7CisgICAgICAgIC8vIGlmIHRoZSBob3N0IGFuZCB0aGUgY2VydGlmaWNh
dGUgYXJlIHN0b3JlZCBmb3IgdGhlIGN1cnJlbnQgaGFuZGxlIHRoYXQgbWVhbnMgaXMgZW5hYmxl
ZCwKKyAgICAgICAgLy8gc28gZG9uJ3QgbmVlZCB0byBjdXJsIHZlcmlmaWVzIHRoZSBhdXRoZW50
aWNpdHkgb2YgdGhlIHBlZXIncyBjZXJ0aWZpY2F0ZQorICAgICAgICBpZiAodmVyaWZpZXItPm1f
Y3VybEhhbmRsZSkKKyAgICAgICAgICAgIHZlcmlmaWVyLT5tX2N1cmxIYW5kbGUtPnNldFNzbFZl
cmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlckRpc2FibGUpOworICAgIH0KKworICAgIHJl
dHVybiBvazsKK30KKworI2lmICFPUyhXSU5ET1dTKQorCisvLyBzdWNjZXNzIG9mIGNlcnRpZmlj
YXRlcyBleHRyYWN0aW9uCitib29sIEN1cmxTU0xWZXJpZmllcjo6Z2V0UGVtRGF0YUZyb21DdHgo
WDUwOV9TVE9SRV9DVFgqIGN0eCwgTGlzdEhhc2hTZXQ8U3RyaW5nPiYgY2VydGlmaWNhdGVzKQor
eworICAgIGJvb2wgb2sgPSB0cnVlOworICAgIFNUQUNLX09GKFg1MDkpKiBjZXJ0cyA9IFg1MDlf
U1RPUkVfQ1RYX2dldDFfY2hhaW4oY3R4KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNrX1g1
MDlfbnVtKGNlcnRzKTsgaSsrKSB7CisgICAgICAgIFg1MDkqIHVDZXJ0ID0gc2tfWDUwOV92YWx1
ZShjZXJ0cywgaSk7CisgICAgICAgIEJJTyogYmlvID0gQklPX25ldyhCSU9fc19tZW0oKSk7Cisg
ICAgICAgIGludCByZXMgPSBQRU1fd3JpdGVfYmlvX1g1MDkoYmlvLCB1Q2VydCk7CisgICAgICAg
IGlmICghcmVzKSB7CisgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgQklPX2Zy
ZWUoYmlvKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciogY2VydGlmaWNhdGVEYXRhOworICAgICAgICBsb25nIGxlbmd0aCA9IEJJT19nZXRf
bWVtX2RhdGEoYmlvLCAmY2VydGlmaWNhdGVEYXRhKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IDAp
IHsKKyAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICBCSU9fZnJlZShiaW8pOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjZXJ0aWZpY2F0ZURhdGFb
bGVuZ3RoXSA9ICdcMCc7CisgICAgICAgIFN0cmluZyBjZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRl
RGF0YTsKKyAgICAgICAgY2VydGlmaWNhdGVzLmFkZChjZXJ0aWZpY2F0ZSk7CisgICAgICAgIEJJ
T19mcmVlKGJpbyk7CisgICAgfQorCisgICAgc2tfWDUwOV9wb3BfZnJlZShjZXJ0cywgWDUwOV9m
cmVlKTsKKyAgICByZXR1cm4gb2s7Cit9CisKKyNlbmRpZgorCitDdXJsU1NMVmVyaWZpZXI6OlNT
TENlcnRpZmljYXRlRmxhZ3MgQ3VybFNTTFZlcmlmaWVyOjpjb252ZXJ0VG9TU0xDZXJ0aWZpY2F0
ZUZsYWdzKGNvbnN0IHVuc2lnbmVkJiBzc2xFcnJvcikKIHsKICAgICBzd2l0Y2ggKHNzbEVycm9y
KSB7CiAgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19HRVRfSVNTVUVSX0NFUlQgOiAvLyB0
aGUgaXNzdWVyIGNlcnRpZmljYXRlIGNvdWxkIG5vdCBiZSBmb3VuZDogdGhpcyBvY2N1cnMgaWYg
dGhlIGlzc3VlciBjZXJ0aWZpY2F0ZSBvZiBhbiB1bnRydXN0ZWQgY2VydGlmaWNhdGUgY2Fubm90
IGJlIGZvdW5kLgogICAgIGNhc2UgWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0NSTCA6IC8vIHRo
ZSBDUkwgb2YgYSBjZXJ0aWZpY2F0ZSBjb3VsZCBub3QgYmUgZm91bmQuCiAgICAgY2FzZSBYNTA5
X1ZfRVJSX1VOQUJMRV9UT19HRVRfSVNTVUVSX0NFUlRfTE9DQUxMWSA6IC8vIHRoZSBpc3N1ZXIg
Y2VydGlmaWNhdGUgb2YgYSBsb2NhbGx5IGxvb2tlZCB1cCBjZXJ0aWZpY2F0ZSBjb3VsZCBub3Qg
YmUgZm91bmQuIFRoaXMgbm9ybWFsbHkgbWVhbnMgdGhlIGxpc3Qgb2YgdHJ1c3RlZCBjZXJ0aWZp
Y2F0ZXMgaXMgbm90IGNvbXBsZXRlLgotICAgICAgICByZXR1cm4gU1NMX0NFUlRJRklDQVRFX1VO
S05PV05fQ0E7CisgICAgICAgIHJldHVybiBTU0xDZXJ0aWZpY2F0ZUZsYWdzOjpTU0xfQ0VSVElG
SUNBVEVfVU5LTk9XTl9DQTsKICAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxFX1RPX0RFQ1JZUFRf
Q0VSVF9TSUdOQVRVUkUgOiAvLyB0aGUgY2VydGlmaWNhdGUgc2lnbmF0dXJlIGNvdWxkIG5vdCBi
ZSBkZWNyeXB0ZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYWN0dWFsIHNpZ25hdHVyZSB2YWx1ZSBj
b3VsZCBub3QgYmUgZGV0ZXJtaW5lZCByYXRoZXIgdGhhbiBpdCBub3QgbWF0Y2hpbmcgdGhlIGV4
cGVjdGVkIHZhbHVlLCB0aGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCBmb3IgUlNBIGtleXMuCiAgICAg
Y2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNSWVBUX0NSTF9TSUdOQVRVUkUgOiAvLyB0aGUg
Q1JMIHNpZ25hdHVyZSBjb3VsZCBub3QgYmUgZGVjcnlwdGVkOiB0aGlzIG1lYW5zIHRoYXQgdGhl
IGFjdHVhbCBzaWduYXR1cmUgdmFsdWUgY291bGQgbm90IGJlIGRldGVybWluZWQgcmF0aGVyIHRo
YW4gaXQgbm90IG1hdGNoaW5nIHRoZSBleHBlY3RlZCB2YWx1ZS4gVW51c2VkLgogICAgIGNhc2Ug
WDUwOV9WX0VSUl9VTkFCTEVfVE9fREVDT0RFX0lTU1VFUl9QVUJMSUNfS0VZIDogLy8gdGhlIHB1
YmxpYyBrZXkgaW4gdGhlIGNlcnRpZmljYXRlIFN1YmplY3RQdWJsaWNLZXlJbmZvIGNvdWxkIG5v
dCBiZSByZWFkLgpAQCAtMTEzLDEzICsyNDUsMTMgQEAgdW5zaWduZWQgc3NsQ2VydGlmaWNhdGVG
bGFnKGNvbnN0IHVuc2lnbmVkJiBzc2xFcnJvcikKICAgICBjYXNlIFg1MDlfVl9FUlJfQ0VSVF9S
RUpFQ1RFRCA6IC8vIHRoZSByb290IENBIGlzIG1hcmtlZCB0byByZWplY3QgdGhlIHNwZWNpZmll
ZCBwdXJwb3NlLgogICAgIGNhc2UgWDUwOV9WX0VSUl9OT19FWFBMSUNJVF9QT0xJQ1kgOiAvLyB0
aGUgdmVyaWZpY2F0aW9uIGZsYWdzIHdlcmUgc2V0IHRvIHJlcXVpcmUgYW5kIGV4cGxpY2l0IHBv
bGljeSBidXQgbm9uZSB3YXMgcHJlc2VudC4KICAgICBjYXNlIFg1MDlfVl9FUlJfRElGRkVSRU5U
X0NSTF9TQ09QRSA6IC8vIHRoZSBvbmx5IENSTHMgdGhhdCBjb3VsZCBiZSBmb3VuZCBkaWQgbm90
IG1hdGNoIHRoZSBzY29wZSBvZiB0aGUgY2VydGlmaWNhdGUuCi0gICAgICAgIHJldHVybiBTU0xf
Q0VSVElGSUNBVEVfSU5TRUNVUkU7CisgICAgICAgIHJldHVybiBTU0xDZXJ0aWZpY2F0ZUZsYWdz
OjpTU0xfQ0VSVElGSUNBVEVfSU5TRUNVUkU7CiAgICAgY2FzZSBYNTA5X1ZfRVJSX0NFUlRfTk9U
X1lFVF9WQUxJRCA6IC8vIHRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgeWV0IHZhbGlkOiB0aGUgbm90
QmVmb3JlIGRhdGUgaXMgYWZ0ZXIgdGhlIGN1cnJlbnQgdGltZS4KICAgICBjYXNlIFg1MDlfVl9F
UlJfQ1JMX05PVF9ZRVRfVkFMSUQgOiAvLyB0aGUgQ1JMIGlzIG5vdCB5ZXQgdmFsaWQuCi0gICAg
ICAgIHJldHVybiBTU0xfQ0VSVElGSUNBVEVfTk9UX0FDVElWQVRFRDsKKyAgICAgICAgcmV0dXJu
IFNTTENlcnRpZmljYXRlRmxhZ3M6OlNTTF9DRVJUSUZJQ0FURV9OT1RfQUNUSVZBVEVEOwogICAg
IGNhc2UgWDUwOV9WX0VSUl9DRVJUX0hBU19FWFBJUkVEIDogLy8gdGhlIGNlcnRpZmljYXRlIGhh
cyBleHBpcmVkOiB0aGF0IGlzIHRoZSBub3RBZnRlciBkYXRlIGlzIGJlZm9yZSB0aGUgY3VycmVu
dCB0aW1lLgogICAgIGNhc2UgWDUwOV9WX0VSUl9DUkxfSEFTX0VYUElSRUQgOiAvLyB0aGUgQ1JM
IGhhcyBleHBpcmVkLgotICAgICAgICByZXR1cm4gU1NMX0NFUlRJRklDQVRFX0VYUElSRUQ7Cisg
ICAgICAgIHJldHVybiBTU0xDZXJ0aWZpY2F0ZUZsYWdzOjpTU0xfQ0VSVElGSUNBVEVfRVhQSVJF
RDsKICAgICBjYXNlIFg1MDlfVl9FUlJfRVJST1JfSU5fQ0VSVF9OT1RfQkVGT1JFX0ZJRUxEIDog
Ly8gdGhlIGNlcnRpZmljYXRlIG5vdEJlZm9yZSBmaWVsZCBjb250YWlucyBhbiBpbnZhbGlkIHRp
bWUuCiAgICAgY2FzZSBYNTA5X1ZfRVJSX0VSUk9SX0lOX0NFUlRfTk9UX0FGVEVSX0ZJRUxEIDog
Ly8gdGhlIGNlcnRpZmljYXRlIG5vdEFmdGVyIGZpZWxkIGNvbnRhaW5zIGFuIGludmFsaWQgdGlt
ZS4KICAgICBjYXNlIFg1MDlfVl9FUlJfRVJST1JfSU5fQ1JMX0xBU1RfVVBEQVRFX0ZJRUxEIDog
Ly8gdGhlIENSTCBsYXN0VXBkYXRlIGZpZWxkIGNvbnRhaW5zIGFuIGludmFsaWQgdGltZS4KQEAg
LTEzNyw5NyArMjY5LDE4IEBAIHVuc2lnbmVkIHNzbENlcnRpZmljYXRlRmxhZyhjb25zdCB1bnNp
Z25lZCYgc3NsRXJyb3IpCiAgICAgY2FzZSBYNTA5X1ZfRVJSX1VOU1VQUE9SVEVEX0NPTlNUUkFJ
TlRfU1lOVEFYIDogLy8gdGhlIGZvcm1hdCBvZiB0aGUgbmFtZSBjb25zdHJhaW50IGlzIG5vdCBy
ZWNvZ25pc2VkOiBmb3IgZXhhbXBsZSBhbiBlbWFpbCBhZGRyZXNzIGZvcm1hdCBvZiBhIGZvcm0g
bm90IG1lbnRpb25lZCBpbiBSRkMzMjgwLiBUaGlzIGNvdWxkIGJlIGNhdXNlZCBieSBhIGdhcmJh
Z2UgZXh0ZW5zaW9uIG9yIHNvbWUgbmV3IGZlYXR1cmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQu
CiAgICAgY2FzZSBYNTA5X1ZfRVJSX0NSTF9QQVRIX1ZBTElEQVRJT05fRVJST1IgOiAvLyBhbiBl
cnJvciBvY2N1cmVkIHdoZW4gYXR0ZW1wdGluZyB0byB2ZXJpZnkgdGhlIENSTCBwYXRoLiBUaGlz
IGVycm9yIGNhbiBvbmx5IGhhcHBlbiBpZiBleHRlbmRlZCBDUkwgY2hlY2tpbmcgaXMgZW5hYmxl
ZC4KICAgICBjYXNlIFg1MDlfVl9FUlJfQVBQTElDQVRJT05fVkVSSUZJQ0FUSU9OIDogLy8gYW4g
YXBwbGljYXRpb24gc3BlY2lmaWMgZXJyb3IuIFRoaXMgd2lsbCBuZXZlciBiZSByZXR1cm5lZCB1
bmxlc3MgZXhwbGljaXRseSBzZXQgYnkgYW4gYXBwbGljYXRpb24uCi0gICAgICAgIHJldHVybiBT
U0xfQ0VSVElGSUNBVEVfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgcmV0dXJuIFNTTENlcnRpZmlj
YXRlRmxhZ3M6OlNTTF9DRVJUSUZJQ0FURV9HRU5FUklDX0VSUk9SOwogICAgIGNhc2UgWDUwOV9W
X0VSUl9DRVJUX1JFVk9LRUQgOiAvLyB0aGUgY2VydGlmaWNhdGUgaGFzIGJlZW4gcmV2b2tlZC4K
LSAgICAgICAgcmV0dXJuIFNTTF9DRVJUSUZJQ0FURV9SRVZPS0VEOworICAgICAgICByZXR1cm4g
U1NMQ2VydGlmaWNhdGVGbGFnczo6U1NMX0NFUlRJRklDQVRFX1JFVk9LRUQ7CiAgICAgY2FzZSBY
NTA5X1ZfRVJSX0lOVkFMSURfQ0EgOiAvLyBhIENBIGNlcnRpZmljYXRlIGlzIGludmFsaWQuIEVp
dGhlciBpdCBpcyBub3QgYSBDQSBvciBpdHMgZXh0ZW5zaW9ucyBhcmUgbm90IGNvbnNpc3RlbnQg
d2l0aCB0aGUgc3VwcGxpZWQgcHVycG9zZS4KICAgICBjYXNlIFg1MDlfVl9FUlJfU1VCSkVDVF9J
U1NVRVJfTUlTTUFUQ0ggOiAvLyB0aGUgY3VycmVudCBjYW5kaWRhdGUgaXNzdWVyIGNlcnRpZmlj
YXRlIHdhcyByZWplY3RlZCBiZWNhdXNlIGl0cyBzdWJqZWN0IG5hbWUgZGlkIG5vdCBtYXRjaCB0
aGUgaXNzdWVyIG5hbWUgb2YgdGhlIGN1cnJlbnQgY2VydGlmaWNhdGUuIFRoaXMgaXMgb25seSBz
ZXQgaWYgaXNzdWVyIGNoZWNrIGRlYnVnZ2luZyBpcyBlbmFibGVkIGl0IGlzIHVzZWQgZm9yIHN0
YXR1cyBub3RpZmljYXRpb24gYW5kIGlzIG5vdCBpbiBpdHNlbGYgYW4gZXJyb3IuCiAgICAgY2Fz
ZSBYNTA5X1ZfRVJSX0FLSURfU0tJRF9NSVNNQVRDSCA6IC8vIHRoZSBjdXJyZW50IGNhbmRpZGF0
ZSBpc3N1ZXIgY2VydGlmaWNhdGUgd2FzIHJlamVjdGVkIGJlY2F1c2UgaXRzIHN1YmplY3Qga2V5
IGlkZW50aWZpZXIgd2FzIHByZXNlbnQgYW5kIGRpZCBub3QgbWF0Y2ggdGhlIGF1dGhvcml0eSBr
ZXkgaWRlbnRpZmllciBjdXJyZW50IGNlcnRpZmljYXRlLiBUaGlzIGlzIG9ubHkgc2V0IGlmIGlz
c3VlciBjaGVjayBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCBpdCBpcyB1c2VkIGZvciBzdGF0dXMgbm90
aWZpY2F0aW9uIGFuZCBpcyBub3QgaW4gaXRzZWxmIGFuIGVycm9yLgogICAgIGNhc2UgWDUwOV9W
X0VSUl9BS0lEX0lTU1VFUl9TRVJJQUxfTUlTTUFUQ0ggOiAvLyB0aGUgY3VycmVudCBjYW5kaWRh
dGUgaXNzdWVyIGNlcnRpZmljYXRlIHdhcyByZWplY3RlZCBiZWNhdXNlIGl0cyBpc3N1ZXIgbmFt
ZSBhbmQgc2VyaWFsIG51bWJlciB3YXMgcHJlc2VudCBhbmQgZGlkIG5vdCBtYXRjaCB0aGUgYXV0
aG9yaXR5IGtleSBpZGVudGlmaWVyIG9mIHRoZSBjdXJyZW50IGNlcnRpZmljYXRlLiBUaGlzIGlz
IG9ubHkgc2V0IGlmIGlzc3VlciBjaGVjayBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCBpdCBpcyB1c2Vk
IGZvciBzdGF0dXMgbm90aWZpY2F0aW9uIGFuZCBpcyBub3QgaW4gaXRzZWxmIGFuIGVycm9yLgog
ICAgIGNhc2UgWDUwOV9WX0VSUl9LRVlVU0FHRV9OT19DRVJUU0lHTiA6IC8vIHRoZSBjdXJyZW50
IGNhbmRpZGF0ZSBpc3N1ZXIgY2VydGlmaWNhdGUgd2FzIHJlamVjdGVkIGJlY2F1c2UgaXRzIGtl
eVVzYWdlIGV4dGVuc2lvbiBkb2VzIG5vdCBwZXJtaXQgY2VydGlmaWNhdGUgc2lnbmluZy4gVGhp
cyBpcyBvbmx5IHNldCBpZiBpc3N1ZXIgY2hlY2sgZGVidWdnaW5nIGlzIGVuYWJsZWQgaXQgaXMg
dXNlZCBmb3Igc3RhdHVzIG5vdGlmaWNhdGlvbiBhbmQgaXMgbm90IGluIGl0c2VsZiBhbiBlcnJv
ci4KLSAgICAgICAgcmV0dXJuIFNTTF9DRVJUSUZJQ0FURV9CQURfSURFTlRJVFk7CisgICAgICAg
IHJldHVybiBTU0xDZXJ0aWZpY2F0ZUZsYWdzOjpTU0xfQ0VSVElGSUNBVEVfQkFEX0lERU5USVRZ
OwogICAgIGRlZmF1bHQgOgotICAgICAgICByZXR1cm4gU1NMX0NFUlRJRklDQVRFX0dFTkVSSUNf
RVJST1I7Ci0gICAgfQotfQotCi0jaWYgIVBMQVRGT1JNKFdJTikKLS8vIHN1Y2Nlc3Mgb2YgY2Vy
dGlmaWNhdGVzIGV4dHJhY3Rpb24KLWJvb2wgcGVtRGF0YShYNTA5X1NUT1JFX0NUWCogY3R4LCBM
aXN0SGFzaFNldDxTdHJpbmc+JiBjZXJ0aWZpY2F0ZXMpCi17Ci0gICAgYm9vbCBvayA9IHRydWU7
Ci0gICAgU1RBQ0tfT0YoWDUwOSkqIGNlcnRzID0gWDUwOV9TVE9SRV9DVFhfZ2V0MV9jaGFpbihj
dHgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2tfWDUwOV9udW0oY2VydHMpOyBpKyspIHsK
LSAgICAgICAgWDUwOSogdUNlcnQgPSBza19YNTA5X3ZhbHVlKGNlcnRzLCBpKTsKLSAgICAgICAg
QklPKiBiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKLSAgICAgICAgaW50IHJlcyA9IFBFTV93
cml0ZV9iaW9fWDUwOShiaW8sIHVDZXJ0KTsKLSAgICAgICAgaWYgKCFyZXMpIHsKLSAgICAgICAg
ICAgIG9rID0gZmFsc2U7Ci0gICAgICAgICAgICBCSU9fZnJlZShiaW8pOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBjaGFyKiBjZXJ0aWZpY2F0ZURh
dGE7Ci0gICAgICAgIGxvbmcgbGVuZ3RoID0gQklPX2dldF9tZW1fZGF0YShiaW8sICZjZXJ0aWZp
Y2F0ZURhdGEpOwotICAgICAgICBpZiAobGVuZ3RoIDwgMCkgewotICAgICAgICAgICAgb2sgPSBm
YWxzZTsKLSAgICAgICAgICAgIEJJT19mcmVlKGJpbyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNlcnRpZmljYXRlRGF0YVtsZW5ndGhdID0gJ1wwJzsKLSAgICAg
ICAgU3RyaW5nIGNlcnRpZmljYXRlID0gY2VydGlmaWNhdGVEYXRhOwotICAgICAgICBjZXJ0aWZp
Y2F0ZXMuYWRkKGNlcnRpZmljYXRlKTsKLSAgICAgICAgQklPX2ZyZWUoYmlvKTsKKyAgICAgICAg
cmV0dXJuIFNTTENlcnRpZmljYXRlRmxhZ3M6OlNTTF9DRVJUSUZJQ0FURV9HRU5FUklDX0VSUk9S
OwogICAgIH0KLSAgICAgICAgc2tfWDUwOV9wb3BfZnJlZShjZXJ0cywgWDUwOV9mcmVlKTsKLSAg
ICAgICAgcmV0dXJuIG9rOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgY2VydFZlcmlmeUNhbGxi
YWNrKGludCBvaywgWDUwOV9TVE9SRV9DVFgqIGN0eCkKLXsKLSAgICAvLyB3aGV0aGVyIHRoZSB2
ZXJpZmljYXRpb24gb2YgdGhlIGNlcnRpZmljYXRlIGluIHF1ZXN0aW9uIHdhcyBwYXNzZWQgKHBy
ZXZlcmlmeV9vaz0xKSBvciBub3QgKHByZXZlcmlmeV9vaz0wKQotCi0gICAgdW5zaWduZWQgZXJy
ID0gWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yKGN0eCk7Ci0gICAgaWYgKCFlcnIpCi0gICAgICAg
IHJldHVybiAxOwotCi0gICAgU1NMKiBzc2wgPSByZWludGVycHJldF9jYXN0PFNTTCo+KFg1MDlf
U1RPUkVfQ1RYX2dldF9leF9kYXRhKGN0eCwgU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RY
X2lkeCgpKSk7Ci0gICAgU1NMX0NUWCogc3NsY3R4ID0gU1NMX2dldF9TU0xfQ1RYKHNzbCk7Ci0g
ICAgQ3VybEhhbmRsZSogaGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxDdXJsSGFuZGxlKj4oU1NM
X0NUWF9nZXRfYXBwX2RhdGEoc3NsY3R4KSk7Ci0gICAgU3RyaW5nIGhvc3QgPSBoYW5kbGUtPmdl
dEVmZmVjdGl2ZVVSTCgpLmhvc3QoKTsKLQotICAgIGhhbmRsZS0+c2V0U3NsRXJyb3JzKHNzbENl
cnRpZmljYXRlRmxhZyhlcnIpKTsKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBhdXRvIGl0ID0g
YWxsb3dlZEhvc3RzKCkuZmluZChob3N0KTsKLSAgICBvayA9IChpdCAhPSBhbGxvd2VkSG9zdHMo
KS5lbmQoKSk7Ci0jZWxzZQotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gY2VydGlmaWNhdGVzOwot
ICAgIGlmICghcGVtRGF0YShjdHgsIGNlcnRpZmljYXRlcykpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIG9rID0gc3NsSWdub3JlSFRUUFNDZXJ0aWZpY2F0ZShob3N0LCBjZXJ0aWZpY2F0ZXMpOwot
I2VuZGlmCi0KLSAgICBpZiAob2spIHsKLSAgICAgICAgLy8gaWYgdGhlIGhvc3QgYW5kIHRoZSBj
ZXJ0aWZpY2F0ZSBhcmUgc3RvcmVkIGZvciB0aGUgY3VycmVudCBoYW5kbGUgdGhhdCBtZWFucyBp
cyBlbmFibGVkLAotICAgICAgICAvLyBzbyBkb24ndCBuZWVkIHRvIGN1cmwgdmVyaWZpZXMgdGhl
IGF1dGhlbnRpY2l0eSBvZiB0aGUgcGVlcidzIGNlcnRpZmljYXRlCi0gICAgICAgIGhhbmRsZS0+
c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyRGlzYWJsZSk7Ci0gICAgfQot
ICAgIHJldHVybiBvazsKLX0KLQotc3RhdGljIENVUkxjb2RlIHNzbGN0eGZ1bihDVVJMKiBjdXJs
LCB2b2lkKiBzc2xjdHgsIHZvaWQqIHBhcm0pCi17Ci0gICAgU1NMX0NUWF9zZXRfYXBwX2RhdGEo
cmVpbnRlcnByZXRfY2FzdDxTU0xfQ1RYKj4oc3NsY3R4KSwgcGFybSk7Ci0gICAgU1NMX0NUWF9z
ZXRfdmVyaWZ5KHJlaW50ZXJwcmV0X2Nhc3Q8U1NMX0NUWCo+KHNzbGN0eCksIFNTTF9WRVJJRllf
UEVFUiwgY2VydFZlcmlmeUNhbGxiYWNrKTsKLSAgICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KLXZv
aWQgc2V0U1NMVmVyaWZ5T3B0aW9ucyhDdXJsSGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgaGFuZGxl
LnNldFNzbEN0eENhbGxiYWNrRnVuY3Rpb24oc3NsY3R4ZnVuLCAmaGFuZGxlKTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xI
YW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMSGFu
ZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMxOWNlMTRjNjg2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxTU0xIYW5kbGUuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgT1MoV0lORE9XUykKKyNpbmNsdWRl
IDx3aW5zb2NrMi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEN1cmxIYW5kbGU7CisKKy8vIEN1cmxTU0xT
ZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitjbGFzcyBDdXJsU1NMU2V0dGluZ3MgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1
cmxTU0xTZXR0aW5ncyk7CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPEN1cmxTU0xTZXR0aW5n
cz47CisKK3B1YmxpYzoKKyAgICB1c2luZyBDbGllbnRDZXJ0aWZpY2F0ZSA9IHN0ZDo6cGFpcjxT
dHJpbmcsIFN0cmluZz47CisKKyAgICBzdGF0aWMgQ3VybFNTTFNldHRpbmdzJiBzaW5nbGV0b24o
KTsKKworICAgIGJvb2wgc2hvdWxkSWdub3JlU1NMRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbV9p
Z25vcmVTU0xFcnJvcnM7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRDQUNlcnRQYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9jYUNlcnRQYXRoLmRhdGEoKTsgfQorCisgICAgdm9pZCBzZXRIb3N0QWxsb3dz
QW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGlzQWxsb3dlZEhU
VFBTQ2VydGlmaWNhdGVIb3N0KGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgY2FuSWdub3JlZEhU
VFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiwgY29uc3QgTGlzdEhhc2hTZXQ8U3RyaW5nPiYp
OworCisgICAgdm9pZCBzZXRDbGllbnRDZXJ0aWZpY2F0ZUluZm8oY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RkOjpvcHRpb25hbDxDbGllbnRDZXJ0
aWZpY2F0ZT4gZ2V0U1NMQ2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJik7CisKK3ByaXZh
dGU6CisgICAgQ3VybFNTTFNldHRpbmdzKCk7CisKKyAgICBDU3RyaW5nIGdldENBQ2VydFBhdGhF
bnYoKTsKKworICAgIGJvb2wgbV9pZ25vcmVTU0xFcnJvcnMgeyBmYWxzZSB9OworICAgIENTdHJp
bmcgbV9jYUNlcnRQYXRoOworCisgICAgTG9jayBtX211dGV4OworICAgIEhhc2hNYXA8U3RyaW5n
LCBMaXN0SGFzaFNldDxTdHJpbmc+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IG1fYWxsb3dl
ZEhvc3RzOworICAgIEhhc2hNYXA8U3RyaW5nLCBDbGllbnRDZXJ0aWZpY2F0ZSwgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiBtX2FsbG93ZWRDbGllbnRIb3N0czsKK307CisKKworLy8gQ3VybFNT
TFZlcmlmaWVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK2NsYXNzIEN1cmxTU0xWZXJpZmllciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q3VybFNTTFZlcmlmaWVyKTsKKworcHVibGljOgorICAgIGVudW0gY2xhc3MgU1NMQ2VydGlmaWNh
dGVGbGFncyB7CisgICAgICAgIFNTTF9DRVJUSUZJQ0FURV9VTktOT1dOX0NBID0gKDEgPDwgMCks
IC8vIFRoZSBzaWduaW5nIGNlcnRpZmljYXRlIGF1dGhvcml0eSBpcyBub3Qga25vd24uCisgICAg
ICAgIFNTTF9DRVJUSUZJQ0FURV9CQURfSURFTlRJVFkgPSAoMSA8PCAxKSwgLy8gVGhlIGNlcnRp
ZmljYXRlIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBpZGVudGl0eSBvZiB0aGUgc2l0ZSB0
aGF0IGl0IHdhcyByZXRyaWV2ZWQgZnJvbS4KKyAgICAgICAgU1NMX0NFUlRJRklDQVRFX05PVF9B
Q1RJVkFURUQgPSAoMSA8PCAyKSwgLy8gVGhlIGNlcnRpZmljYXRlJ3MgYWN0aXZhdGlvbiB0aW1l
IGlzIHN0aWxsIGluIHRoZSBmdXR1cmUKKyAgICAgICAgU1NMX0NFUlRJRklDQVRFX0VYUElSRUQg
PSAoMSA8PCAzKSwgLy8gVGhlIGNlcnRpZmljYXRlIGhhcyBleHBpcmVkCisgICAgICAgIFNTTF9D
RVJUSUZJQ0FURV9SRVZPS0VEID0gKDEgPDwgNCksIC8vIFRoZSBjZXJ0aWZpY2F0ZSBoYXMgYmVl
biByZXZva2VkCisgICAgICAgIFNTTF9DRVJUSUZJQ0FURV9JTlNFQ1VSRSA9ICgxIDw8IDUpLCAv
LyBUaGUgY2VydGlmaWNhdGUncyBhbGdvcml0aG0gaXMgY29uc2lkZXJlZCBpbnNlY3VyZS4KKyAg
ICAgICAgU1NMX0NFUlRJRklDQVRFX0dFTkVSSUNfRVJST1IgPSAoMSA8PCA2KSAvLyBTb21lIG90
aGVyIGVycm9yIG9jY3VycmVkIHZhbGlkYXRpbmcgdGhlIGNlcnRpZmljYXRlCisgICAgfTsKKwor
ICAgIEN1cmxTU0xWZXJpZmllcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgc2V0Q3VybEhhbmRs
ZShDdXJsSGFuZGxlKiBjdXJsSGFuZGxlKSB7IG1fY3VybEhhbmRsZSA9IGN1cmxIYW5kbGU7IH0K
KyAgICB2b2lkIHNldEhvc3ROYW1lKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUpIHsgbV9ob3N0TmFt
ZSA9IGhvc3ROYW1lOyB9CisgICAgdm9pZCBzZXRTc2xDdHgodm9pZCopOworCisgICAgaW50IHNz
bEVycm9ycygpIHsgcmV0dXJuIG1fc3NsRXJyb3JzOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IGludCBjZXJ0VmVyaWZ5Q2FsbGJhY2soaW50LCBYNTA5X1NUT1JFX0NUWCopOworCisjaWYgIU9T
KFdJTkRPV1MpCisgICAgYm9vbCBnZXRQZW1EYXRhRnJvbUN0eChYNTA5X1NUT1JFX0NUWCosIExp
c3RIYXNoU2V0PFN0cmluZz4mKTsKKyNlbmRpZgorCisgICAgU1NMQ2VydGlmaWNhdGVGbGFncyBj
b252ZXJ0VG9TU0xDZXJ0aWZpY2F0ZUZsYWdzKGNvbnN0IHVuc2lnbmVkJik7CisKKyAgICBDdXJs
SGFuZGxlKiBtX2N1cmxIYW5kbGUgeyBudWxscHRyIH07CisgICAgU3RyaW5nIG1faG9zdE5hbWU7
CisgICAgaW50IG1fc3NsRXJyb3JzIHsgMCB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNw
cAppbmRleCBkYjlkNTNhZTk3ZS4uYjIwNTIwOWE2ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3Bw
CkBAIC0zNywxMiArMzcsMTIgQEAKICNpbmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCiAjaW5j
bHVkZSAiQ3VybENvbnRleHQuaCIKICNpbmNsdWRlICJDdXJsSm9iTWFuYWdlci5oIgorI2luY2x1
ZGUgIkN1cmxTU0xIYW5kbGUuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOZXR3
b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKLSNp
bmNsdWRlICJTU0xIYW5kbGUuaCIKICNpbmNsdWRlICJTeW5jaHJvbm91c0xvYWRlckNsaWVudC5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0
cmluZyYgaG9zdCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgYWxsb3dz
QW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKGhvc3QpOworICAgIEN1cmxTU0xTZXR0aW5nczo6c2lu
Z2xldG9uKCkuc2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUoaG9zdCk7CiB9CiAKIHZv
aWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlSW5mbyhjb25zdCBTdHJpbmcm
IGhvc3QsIGNvbnN0IFN0cmluZyYgY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYga2V5KQpAQCAt
OTUsNyArOTUsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZUlu
Zm8oY29uc3QgU3RyaW5nJiBob3N0LCBjb25zdCBTdHJpbmcmCiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKIAogICAgIGlmIChmaWxlRXhpc3RzKGNlcnRpZmljYXRlKSkKLSAgICAgICAgYWRk
QWxsb3dlZENsaWVudENlcnRpZmljYXRlKGhvc3QsIGNlcnRpZmljYXRlLCBrZXkpOworICAgICAg
ICBDdXJsU1NMU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNldENsaWVudENlcnRpZmljYXRlSW5mbyho
b3N0LCBjZXJ0aWZpY2F0ZSwga2V5KTsKICAgICBlbHNlCiAgICAgICAgIExPRyhOZXR3b3JrLCAi
SW52YWxpZCBjbGllbnQgY2VydGlmaWNhdGUgZmlsZTogJXMhXG4iLCBjZXJ0aWZpY2F0ZS5sYXRp
bjEoKS5kYXRhKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAKaW5k
ZXggZDBjNjIzYWQzMzMuLjhjNjQ3OTExODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZS5jcHAKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJNdWx0aXBhcnRIYW5kbGUu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
SW50ZXJuYWwuaCIKLSNpbmNsdWRlICJTU0xIYW5kbGUuaCIKICNpbmNsdWRlICJUZXh0RW5jb2Rp
bmcuaCIKICNpbmNsdWRlICJUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oIgogI2luY2x1ZGUgIlVSTC5o
IgpAQCAtNzgsOCArNzcsNiBAQCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6UmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICAgICAgfQogICAg
IH0KIAotICAgIG1fc3NsQ2xpZW50Q2VydGlmaWNhdGUgPSBnZXRTU0xDbGllbnRDZXJ0aWZpY2F0
ZSh1cmwuaG9zdCgpKTsKLQogICAgIHNldHVwQXV0aGVudGljYXRpb24oKTsKIH0KIApAQCAtMjI2
LDE4ICsyMjMsMTkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2V0dXBSZXF1
ZXN0KCkKICAgICBtX2N1cmxIYW5kbGUuZW5hYmxlVGltZW91dCgpOwogICAgIG1fY3VybEhhbmRs
ZS5lbmFibGVBbGxvd2VkUHJvdG9jb2xzKCk7CiAKLSAgICBpZiAobV9zc2xDbGllbnRDZXJ0aWZp
Y2F0ZSkgewotICAgICAgICBtX2N1cmxIYW5kbGUuc2V0U3NsQ2VydCgoKm1fc3NsQ2xpZW50Q2Vy
dGlmaWNhdGUpLmZpcnN0LnV0ZjgoKS5kYXRhKCkpOworICAgIGF1dG8gc3NsQ2xpZW50Q2VydGlm
aWNhdGUgPSBDdXJsU1NMU2V0dGluZ3M6OnNpbmdsZXRvbigpLmdldFNTTENsaWVudENlcnRpZmlj
YXRlKHVybC5ob3N0KCkpOworICAgIGlmIChzc2xDbGllbnRDZXJ0aWZpY2F0ZSkgeworICAgICAg
ICBtX2N1cmxIYW5kbGUuc2V0U3NsQ2VydChzc2xDbGllbnRDZXJ0aWZpY2F0ZS0+Zmlyc3QudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgIG1fY3VybEhhbmRsZS5zZXRTc2xDZXJ0VHlwZSgiUDEyIik7
Ci0gICAgICAgIG1fY3VybEhhbmRsZS5zZXRTc2xLZXlQYXNzd29yZCgoKm1fc3NsQ2xpZW50Q2Vy
dGlmaWNhdGUpLnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbV9jdXJsSGFuZGxlLnNl
dFNzbEtleVBhc3N3b3JkKHNzbENsaWVudENlcnRpZmljYXRlLT5zZWNvbmQudXRmOCgpLmRhdGEo
KSk7CiAgICAgfQogCi0gICAgaWYgKEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zaG91bGRJZ25v
cmVTU0xFcnJvcnMoKSkKKyAgICBpZiAoQ3VybFNTTFNldHRpbmdzOjpzaW5nbGV0b24oKS5zaG91
bGRJZ25vcmVTU0xFcnJvcnMoKSkKICAgICAgICAgbV9jdXJsSGFuZGxlLnNldFNzbFZlcmlmeVBl
ZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlckRpc2FibGUpOwogICAgIGVsc2UKLSAgICAgICAgc2V0
U1NMVmVyaWZ5T3B0aW9ucyhtX2N1cmxIYW5kbGUpOworICAgICAgICBtX2N1cmxIYW5kbGUuc2V0
U3NsQ3R4Q2FsbGJhY2tGdW5jdGlvbih3aWxsU2V0dXBTc2xDdHhDYWxsYmFjaywgdGhpcyk7CiAK
LSAgICBtX2N1cmxIYW5kbGUuZW5hYmxlQ0FJbmZvSWZFeGlzdHMoKTsKKyAgICBtX2N1cmxIYW5k
bGUuc2V0Q0FDZXJ0UGF0aChDdXJsU1NMU2V0dGluZ3M6OnNpbmdsZXRvbigpLmdldENBQ2VydFBh
dGgoKSk7CiAKICAgICBtX2N1cmxIYW5kbGUuZW5hYmxlQWNjZXB0RW5jb2RpbmcoKTsKICAgICBt
X2N1cmxIYW5kbGUuc2V0VXJsKHVybFN0cmluZyk7CkBAIC0yODgsNyArMjg2LDcgQEAgdm9pZCBS
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6bm90aWZ5RmFpbCgpCiAgICAgaW50IGVycm9yQ29k
ZSA9IG1fY3VybEhhbmRsZS5lcnJvckNvZGUoKTsKICAgICBVUkwgZmFpbGluZ1VSTCA9IG1fY3Vy
bEhhbmRsZS5nZXRFZmZlY3RpdmVVUkwoKTsKICAgICBTdHJpbmcgZXJyb3JEZXNjcmlwdGlvbiA9
IG1fY3VybEhhbmRsZS5lcnJvckRlc2NyaXB0aW9uKCk7Ci0gICAgdW5zaWduZWQgc3NsRXJyb3Jz
ID0gbV9jdXJsSGFuZGxlLmdldFNzbEVycm9ycygpOworICAgIHVuc2lnbmVkIHNzbEVycm9ycyA9
IG1fc3NsVmVyaWZpZXIuc3NsRXJyb3JzKCk7CiAKICAgICBpZiAoaXNNYWluVGhyZWFkKCkpCiAg
ICAgICAgIGRpZEZhaWwoZG9tYWluLCBlcnJvckNvZGUsIGZhaWxpbmdVUkwsIGVycm9yRGVzY3Jp
cHRpb24sIHNzbEVycm9ycyk7CkBAIC03MTIsNiArNzEwLDE1IEBAIE5ldHdvcmtMb2FkTWV0cmlj
cyBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Z2V0TmV0d29ya0xvYWRNZXRyaWNzKCkKICAg
ICByZXR1cm4gbmV0d29ya0xvYWRNZXRyaWNzOwogfQogCitDVVJMY29kZSBSZXNvdXJjZUhhbmRs
ZUN1cmxEZWxlZ2F0ZTo6d2lsbFNldHVwU3NsQ3R4KHZvaWQqIHNzbEN0eCkKK3sKKyAgICBtX3Nz
bFZlcmlmaWVyLnNldEN1cmxIYW5kbGUoJm1fY3VybEhhbmRsZSk7CisgICAgbV9zc2xWZXJpZmll
ci5zZXRIb3N0TmFtZShtX2ZpcnN0UmVxdWVzdC51cmwoKS5ob3N0KCkpOworICAgIG1fc3NsVmVy
aWZpZXIuc2V0U3NsQ3R4KHNzbEN0eCk7CisKKyAgICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKIC8q
CiAqIFRoaXMgaXMgYmVpbmcgY2FsbGVkIGZvciBlYWNoIEhUVFAgaGVhZGVyIGluIHRoZSByZXNw
b25zZS4gVGhpcyBpbmNsdWRlcyAnXHJcbicKICogZm9yIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGhl
YWRlci4KQEAgLTg1Niw2ICs4NjMsMTEgQEAgc2l6ZV90IFJlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlOjp3aWxsU2VuZERhdGEoY2hhciogYnVmZmVyLCBzaXplX3QgYmxvY2tTaXplLAogICAgIHJl
dHVybiBtX3NlbmRCeXRlczsKIH0KIAorQ1VSTGNvZGUgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdh
dGU6OndpbGxTZXR1cFNzbEN0eENhbGxiYWNrKENVUkwqLCB2b2lkKiBzc2xDdHgsIHZvaWQqIHVz
ZXJEYXRhKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZSo+KHVzZXJEYXRhKS0+d2lsbFNldHVwU3NsQ3R4KHNzbEN0eCk7Cit9CisKIHNpemVfdCBS
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlkUmVjZWl2ZUhlYWRlckNhbGxiYWNrKGNoYXIq
IHB0ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKiBkYXRh
KQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZSo+
KGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKS0+ZGlkUmVjZWl2ZUhlYWRlcihTdHJpbmcoc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KHB0ciksIGJsb2NrU2l6ZSAqIG51bWJlck9mQmxvY2tzKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oCmluZGV4IDE2N2EzNzhjMTk3Li40NDU2YTJm
YmUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmgKQEAgLTMxLDEwICszMSwx
MCBAQAogI2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKICNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgog
I2luY2x1ZGUgIkN1cmxKb2JNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ3VybFNTTEhhbmRsZS5oIgog
I2luY2x1ZGUgIkZvcm1EYXRhU3RyZWFtQ3VybC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTU0xIYW5kbGUu
aCIKICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CiAKQEAgLTkzLDEwICs5MywxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBw
bHlBdXRoZW50aWNhdGlvbigpOwogICAgIE5ldHdvcmtMb2FkTWV0cmljcyBnZXROZXR3b3JrTG9h
ZE1ldHJpY3MoKTsKIAorICAgIENVUkxjb2RlIHdpbGxTZXR1cFNzbEN0eCh2b2lkKik7CiAgICAg
c2l6ZV90IGRpZFJlY2VpdmVIZWFkZXIoU3RyaW5nJiYpOwogICAgIHNpemVfdCBkaWRSZWNlaXZl
RGF0YShUaHJlYWRTYWZlRGF0YUJ1ZmZlcik7CiAgICAgc2l6ZV90IHdpbGxTZW5kRGF0YShjaGFy
Kiwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzKTsKIAorICAgIHN0YXRp
YyBDVVJMY29kZSB3aWxsU2V0dXBTc2xDdHhDYWxsYmFjayhDVVJMKiwgdm9pZCosIHZvaWQqKTsK
ICAgICBzdGF0aWMgc2l6ZV90IGRpZFJlY2VpdmVIZWFkZXJDYWxsYmFjayhjaGFyKiwgc2l6ZV90
IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKik7CiAgICAgc3RhdGljIHNp
emVfdCBkaWRSZWNlaXZlRGF0YUNhbGxiYWNrKGNoYXIqLCBzaXplX3QgYmxvY2tTaXplLCBzaXpl
X3QgbnVtYmVyT2ZCbG9ja3MsIHZvaWQqKTsKICAgICBzdGF0aWMgc2l6ZV90IHdpbGxTZW5kRGF0
YUNhbGxiYWNrKGNoYXIqLCBzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3Ms
IHZvaWQqKTsKQEAgLTExNCwxMSArMTE2LDExIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdXNl
cjsKICAgICBTdHJpbmcgbV9wYXNzOwogICAgIENyZWRlbnRpYWwgbV9pbml0aWFsQ3JlZGVudGlh
bDsKLSAgICBzdGQ6Om9wdGlvbmFsPENsaWVudENlcnRpZmljYXRlPiBtX3NzbENsaWVudENlcnRp
ZmljYXRlOwogICAgIGJvb2wgbV9kZWZlcnNMb2FkaW5nOwogICAgIGJvb2wgbV9hZGRlZENhY2hl
VmFsaWRhdGlvbkhlYWRlcnMgeyBmYWxzZSB9OwogICAgIFZlY3RvcjxjaGFyPiBtX3Bvc3RCeXRl
czsKICAgICBDdXJsSGFuZGxlIG1fY3VybEhhbmRsZTsKKyAgICBDdXJsU1NMVmVyaWZpZXIgbV9z
c2xWZXJpZmllcjsKICAgICAvLyBVc2VkIGJ5IGJvdGggdGhyZWFkcy4KICAgICBDb25kaXRpb24g
bV93b3JrZXJUaHJlYWRDb25kaXRpb25WYXJpYWJsZTsKICAgICBMb2NrIG1fd29ya2VyVGhyZWFk
TXV0ZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U1NMSGFuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU1NMSGFu
ZGxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMjk0NTUwZTk2Li4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU1NMSGFuZGxl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgU1NMSGFuZGxlX2gKLSNkZWZpbmUgU1NMSGFuZGxlX2gKLQot
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDdXJsSGFuZGxlOwotCi10eXBl
ZGVmIGVudW0gewotICAgIFNTTF9DRVJUSUZJQ0FURV9VTktOT1dOX0NBID0gKDEgPDwgMCksIC8v
IFRoZSBzaWduaW5nIGNlcnRpZmljYXRlIGF1dGhvcml0eSBpcyBub3Qga25vd24uCi0gICAgU1NM
X0NFUlRJRklDQVRFX0JBRF9JREVOVElUWSA9ICgxIDw8IDEpLCAvLyBUaGUgY2VydGlmaWNhdGUg
ZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGlkZW50aXR5IG9mIHRoZSBzaXRlIHRoYXQgaXQg
d2FzIHJldHJpZXZlZCBmcm9tLgotICAgIFNTTF9DRVJUSUZJQ0FURV9OT1RfQUNUSVZBVEVEID0g
KDEgPDwgMiksIC8vIFRoZSBjZXJ0aWZpY2F0ZSdzIGFjdGl2YXRpb24gdGltZSBpcyBzdGlsbCBp
biB0aGUgZnV0dXJlCi0gICAgU1NMX0NFUlRJRklDQVRFX0VYUElSRUQgPSAoMSA8PCAzKSwgLy8g
VGhlIGNlcnRpZmljYXRlIGhhcyBleHBpcmVkCi0gICAgU1NMX0NFUlRJRklDQVRFX1JFVk9LRUQg
PSAoMSA8PCA0KSwgLy8gVGhlIGNlcnRpZmljYXRlIGhhcyBiZWVuIHJldm9rZWQKLSAgICBTU0xf
Q0VSVElGSUNBVEVfSU5TRUNVUkUgPSAoMSA8PCA1KSwgLy8gVGhlIGNlcnRpZmljYXRlJ3MgYWxn
b3JpdGhtIGlzIGNvbnNpZGVyZWQgaW5zZWN1cmUuCi0gICAgU1NMX0NFUlRJRklDQVRFX0dFTkVS
SUNfRVJST1IgPSAoMSA8PCA2KSAvLyBTb21lIG90aGVyIGVycm9yIG9jY3VycmVkIHZhbGlkYXRp
bmcgdGhlIGNlcnRpZmljYXRlCi19IFNTTENlcnRpZmljYXRlRmxhZ3M7Ci0KLXR5cGVkZWYgc3Rk
OjpwYWlyPFN0cmluZywgU3RyaW5nPiBDbGllbnRDZXJ0aWZpY2F0ZTsKLQotdm9pZCBhZGRBbGxv
d2VkQ2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJik7Ci12b2lkIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cyhjb25zdCBTdHJp
bmcmKTsKLWJvb2wgc3NsSWdub3JlSFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmKTsKLXN0ZDo6b3B0aW9uYWw8Q2xpZW50Q2VydGlmaWNhdGU+IGdldFNTTENsaWVu
dENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYpOwotdm9pZCBzZXRTU0xWZXJpZnlPcHRpb25zKEN1
cmxIYW5kbGUmKTsKLQotfQotCi0jZW5kaWYK
</data>
<flag name="review"
          id="340901"
          type_id="1"
          status="-"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320952</attachid>
            <date>2017-09-15 12:59:45 -0700</date>
            <delta_ts>2017-09-15 15:06:33 -0700</delta_ts>
            <desc>fixed</desc>
            <filename>176910-4.diff</filename>
            <type>text/plain</type>
            <size>41626</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNzZmMmZiMmY2OC4uMmVlNTRkYmFjYTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NiBAQAorMjAxNy0wOS0xNSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIENyZWF0ZSBjbGFzc2VzIGRlZGljYXRlZCB0byBoYW5k
bGUgU1NMIHJlbGF0ZWQgdGFza3MKKyAgICAgICAgYW5kIHNlcGFyYXRlIHZlcmlmaWVyIGFuZCBj
ZXJ0aWZpY2F0ZSBtYW5hZ2VtZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc2OTEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9DdXJsLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29u
dGV4dDo6Q3VybENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6c2V0Q0FD
ZXJ0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjZXJ0aWZpY2F0ZVBhdGgpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6ZW5hYmxlQ0FJbmZvSWZFeGlzdHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6c2V0U3NsRXJyb3JzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmdldFNzbEVycm9ycyk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsQ29udGV4dDo6c3NsSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxDb250ZXh0OjpnZXRDZXJ0aWZpY2F0ZVBhdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q3VybENvbnRleHQ6OnNob3VsZElnbm9yZVNTTEVycm9ycyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OnNldHVwUmVxdWVzdCk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xIYW5kbGUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxTU0xIYW5kbGU6OkN1cmxTU0xIYW5kbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybFNTTEhhbmRsZTo6Z2V0Q0FDZXJ0UGF0aEVudik6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsU1NMSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsU1NMSGFuZGxlOjppc0FsbG93ZWRIVFRQU0NlcnRpZmljYXRlSG9zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMSGFuZGxlOjpjYW5JZ25vcmVkSFRUUFNDZXJ0aWZp
Y2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZp
Y2F0ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTEhhbmRsZTo6Z2V0U1NMQ2xpZW50
Q2VydGlmaWNhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMSGFu
ZGxlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U1NMSGFuZGxlLmguCisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMSGFuZGxlOjpzaG91bGRJZ25v
cmVTU0xFcnJvcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTEhhbmRsZTo6Z2V0
Q0FDZXJ0UGF0aCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxT
U0xWZXJpZmllci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvU1NMSGFuZGxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xWZXJpZmll
cjo6c2V0U3NsQ3R4KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xWZXJpZmllcjo6Y2VydFZl
cmlmeUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xWZXJpZmllcjo6Z2V0UGVt
RGF0YUZyb21DdHgpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjpjb252ZXJ0
VG9TU0xDZXJ0aWZpY2F0ZUZsYWdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybFNTTFZlcmlmaWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlm
aWVyOjpzZXRDdXJsSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xWZXJpZmllcjo6
c2V0SG9zdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjpzc2xFcnJv
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldEhvc3RBbGxvd3NBbnlI
VFRQU0NlcnRpZmljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRD
bGllbnRDZXJ0aWZpY2F0ZUluZm8pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldHVwUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6bm90aWZ5RmFpbCk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6d2lsbFNldHVw
U3NsQ3R4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjp3
aWxsU2V0dXBTc2xDdHhDYWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmg6CisKIDIwMTctMDktMTQgIENvbW1pdCBRdWV1
ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIyMjE5MzIgYW5kIHIyMjE5MzMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DdXJsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQpp
bmRleCBiYzEyMjM5MTllNy4uZjJmNjMwOGVmN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0N1cmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5j
bWFrZQpAQCAtMTAsNiArMTAsOCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpv
Yk1hbmFnZXIuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xIYW5kbGUuY3Bw
CisgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvRE5TQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Rm9ybURhdGFTdHJlYW1DdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBh
cnRIYW5kbGUuY3BwCkBAIC0xNyw3ICsxOSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCiAgICAg
cGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlc3BvbnNlQ3VybC5jcHAKLSAgICBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU1NMSGFuZGxlLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvU3luY2hyb25vdXNMb2FkZXJDbGllbnRDdXJsLmNwcAogKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKaW5kZXggOGU1OTYy
ZDdmODQuLjBmNWQ0OGQ3NmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKQEAgLTM5LDM1ICszOSwxMCBAQAogI2luY2x1
ZGUgPHNobHdhcGkuaD4KICNlbmRpZgogCi0jaWYgVVNFKENGKQotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgQ1N0cmluZyBjZXJ0aWZpY2F0ZVBhdGgoKQotewotICAgIGNo
YXIqIGVudlBhdGggPSBnZXRlbnYoIkNVUkxfQ0FfQlVORExFX1BBVEgiKTsKLSAgICBpZiAoZW52
UGF0aCkKLSAgICAgICAgcmV0dXJuIGVudlBhdGg7Ci0KLSNpZiBVU0UoQ0YpCi0gICAgQ0ZCdW5k
bGVSZWYgd2ViS2l0QnVuZGxlUmVmID0gd2ViS2l0QnVuZGxlKCk7Ci0gICAgaWYgKHdlYktpdEJ1
bmRsZVJlZikgewotICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNlcnRVUkxSZWYgPSBhZG9w
dENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKHdlYktpdEJ1bmRsZVJlZiwgQ0ZTVFIoImNhY2Vy
dCIpLCBDRlNUUigicGVtIiksIENGU1RSKCJjZXJ0aWZpY2F0ZXMiKSkpOwotICAgICAgICBpZiAo
Y2VydFVSTFJlZikgewotICAgICAgICAgICAgY2hhciBwYXRoW01BWF9QQVRIXTsKLSAgICAgICAg
ICAgIENGVVJMR2V0RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNlcnRVUkxSZWYuZ2V0KCksIGZh
bHNlLCByZWludGVycHJldF9jYXN0PFVJbnQ4Kj4ocGF0aCksIE1BWF9QQVRIKTsKLSAgICAgICAg
ICAgIHJldHVybiBwYXRoOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4g
Q1N0cmluZygpOwotfQotCiBzdGF0aWMgQ1N0cmluZyBjb29raWVKYXJQYXRoKCkKIHsKICAgICBj
aGFyKiBjb29raWVKYXJQYXRoID0gZ2V0ZW52KCJDVVJMX0NPT0tJRV9KQVJfUEFUSCIpOwpAQCAt
MTA2LDEzICs4MSwxMCBAQCBjb25zdCBjaGFyKiBjb25zdCBDdXJsQ29udGV4dDo6ZXJyb3JEb21h
aW4gPSAiQ3VybEVycm9yRG9tYWluIjsKIAogQ3VybENvbnRleHQ6OkN1cmxDb250ZXh0KCkKIDog
bV9jb29raWVKYXJGaWxlTmFtZSB7IGNvb2tpZUphclBhdGgoKSB9Ci0sIG1fY2VydGlmaWNhdGVQ
YXRoIHsgY2VydGlmaWNhdGVQYXRoKCkgfQogLCBtX2Nvb2tpZUphciB7IHN0ZDo6bWFrZV91bmlx
dWU8Q29va2llSmFyQ3VybEZpbGVTeXN0ZW0+KCkgfQogewogICAgIGluaXRDb29raWVTZXNzaW9u
KCk7CiAKLSAgICBtX2lnbm9yZVNTTEVycm9ycyA9IGdldGVudigiV0VCS0lUX0lHTk9SRV9TU0xf
RVJST1JTIik7Ci0KICNpZm5kZWYgTkRFQlVHCiAgICAgbV92ZXJib3NlID0gZ2V0ZW52KCJERUJV
R19DVVJMIik7CiAKQEAgLTQ2OSwxMSArNDQxLDEwIEBAIHZvaWQgQ3VybEhhbmRsZTo6c2V0SHR0
cEF1dGhVc2VyUGFzcyhjb25zdCBTdHJpbmcmIHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQp
CiAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9VU0VSUFdELCB1c2VycGFz
cy51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBDdXJsSGFuZGxlOjplbmFibGVDQUluZm9JZkV4
aXN0cygpCit2b2lkIEN1cmxIYW5kbGU6OnNldENBQ2VydFBhdGgoY29uc3QgY2hhciogcGF0aCkK
IHsKLSAgICBjb25zdCBjaGFyKiBjZXJ0UGF0aCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5n
ZXRDZXJ0aWZpY2F0ZVBhdGgoKTsKLSAgICBpZiAoY2VydFBhdGgpCi0gICAgICAgIGN1cmxfZWFz
eV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfQ0FJTkZPLCBjZXJ0UGF0aCk7CisgICAgaWYgKHBh
dGgpCisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfQ0FJTkZPLCBw
YXRoKTsKIH0KIAogdm9pZCBDdXJsSGFuZGxlOjpzZXRTc2xWZXJpZnlQZWVyKFZlcmlmeVBlZXIg
dmVyaWZ5UGVlcikKQEAgLTUwMSwxNiArNDcyLDYgQEAgdm9pZCBDdXJsSGFuZGxlOjpzZXRTc2xL
ZXlQYXNzd29yZChjb25zdCBjaGFyKiBwYXNzd29yZCkKICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1f
aGFuZGxlLCBDVVJMT1BUX0tFWVBBU1NXRCwgcGFzc3dvcmQpOwogfQogCi12b2lkIEN1cmxIYW5k
bGU6OnNldFNzbEVycm9ycyh1bnNpZ25lZCBzc2xFcnJvcnMpCi17Ci0gICAgbV9zc2xFcnJvcnMg
PSBzc2xFcnJvcnM7Ci19Ci0KLXVuc2lnbmVkIEN1cmxIYW5kbGU6OmdldFNzbEVycm9ycygpCi17
Ci0gICAgcmV0dXJuIG1fc3NsRXJyb3JzOwotfQotCiB2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZUNv
b2tpZUphcklmRXhpc3RzKCkKIHsKICAgICBjb25zdCBjaGFyKiBjb29raWVKYXIgPSBDdXJsQ29u
dGV4dDo6c2luZ2xldG9uKCkuZ2V0Q29va2llSmFyRmlsZU5hbWUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgKaW5kZXggMmIyNmRk
YmU4ZDYuLjE0ZTk4YTAxYjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaApAQCAtMjcsNiArMjcsNyBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJDb29raWVKYXJDdXJsLmgiCisjaW5jbHVkZSAiQ3VybFNTTEhhbmRsZS5o
IgogI2luY2x1ZGUgIlVSTC5oIgogCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTEyMCwxNSAr
MTIxLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvb2tpZUphckZpbGVOYW1lKGNvbnN0IGNo
YXIqIGNvb2tpZUphckZpbGVOYW1lKSB7IG1fY29va2llSmFyRmlsZU5hbWUgPSBDU3RyaW5nKGNv
b2tpZUphckZpbGVOYW1lKTsgfQogICAgIENvb2tpZUphckN1cmwmIGNvb2tpZUphcigpIHsgcmV0
dXJuICptX2Nvb2tpZUphcjsgfQogCi0gICAgLy8gQ2VydGlmaWNhdGUKLSAgICBjb25zdCBjaGFy
KiBnZXRDZXJ0aWZpY2F0ZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2NlcnRpZmljYXRlUGF0aC5k
YXRhKCk7IH0KLSAgICBib29sIHNob3VsZElnbm9yZVNTTEVycm9ycygpIGNvbnN0IHsgcmV0dXJu
IG1faWdub3JlU1NMRXJyb3JzOyB9Ci0KICAgICAvLyBQcm94eQogICAgIGNvbnN0IFByb3h5SW5m
byYgcHJveHlJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eTsgfQogICAgIHZvaWQgc2V0UHJv
eHlJbmZvKGNvbnN0IFByb3h5SW5mbyYgaW5mbykgeyBtX3Byb3h5ID0gaW5mbzsgIH0KICAgICB2
b2lkIHNldFByb3h5SW5mbyhjb25zdCBTdHJpbmcmIGhvc3QgPSBlbXB0eVN0cmluZygpLCB1bnNp
Z25lZCBsb25nIHBvcnQgPSAwLCBDdXJsUHJveHlUeXBlID0gQ3VybFByb3h5VHlwZTo6SFRUUCwg
Y29uc3QgU3RyaW5nJiB1c2VybmFtZSA9IGVtcHR5U3RyaW5nKCksIGNvbnN0IFN0cmluZyYgcGFz
c3dvcmQgPSBlbXB0eVN0cmluZygpKTsKIAorICAgIC8vIFNTTAorICAgIEN1cmxTU0xIYW5kbGUm
IHNzbEhhbmRsZSgpIHsgcmV0dXJuIG1fc3NsSGFuZGxlOyB9CisKICNpZm5kZWYgTkRFQlVHCiAg
ICAgRklMRSogZ2V0TG9nRmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9nRmlsZTsgfQogICAgIGJv
b2wgaXNWZXJib3NlKCkgY29uc3QgeyByZXR1cm4gbV92ZXJib3NlOyB9CkBAIC0xMzcsMTAgKzEz
Nyw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUHJveHlJbmZvIG1fcHJveHk7CiAgICAgQ1N0
cmluZyBtX2Nvb2tpZUphckZpbGVOYW1lOwotICAgIENTdHJpbmcgbV9jZXJ0aWZpY2F0ZVBhdGg7
CiAgICAgQ3VybFNoYXJlSGFuZGxlIG1fc2hhcmVIYW5kbGU7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PENvb2tpZUphckN1cmw+IG1fY29va2llSmFyOwotICAgIGJvb2wgbV9pZ25vcmVTU0xFcnJvcnMg
eyBmYWxzZSB9OworICAgIEN1cmxTU0xIYW5kbGUgbV9zc2xIYW5kbGU7CiAKICAgICBDdXJsQ29u
dGV4dCgpOwogICAgIHZvaWQgaW5pdENvb2tpZVNlc3Npb24oKTsKQEAgLTI2MywxNCArMjYyLDEy
IEBAIHB1YmxpYzoKICAgICB2b2lkIGVuYWJsZUh0dHBBdXRoZW50aWNhdGlvbihsb25nKTsKICAg
ICB2b2lkIHNldEh0dHBBdXRoVXNlclBhc3MoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7
CiAKLSAgICB2b2lkIGVuYWJsZUNBSW5mb0lmRXhpc3RzKCk7CisgICAgdm9pZCBzZXRDQUNlcnRQ
YXRoKGNvbnN0IGNoYXIqKTsKICAgICB2b2lkIHNldFNzbFZlcmlmeVBlZXIoVmVyaWZ5UGVlcik7
CiAgICAgdm9pZCBzZXRTc2xWZXJpZnlIb3N0KFZlcmlmeUhvc3QpOwogICAgIHZvaWQgc2V0U3Ns
Q2VydChjb25zdCBjaGFyKik7CiAgICAgdm9pZCBzZXRTc2xDZXJ0VHlwZShjb25zdCBjaGFyKik7
CiAgICAgdm9pZCBzZXRTc2xLZXlQYXNzd29yZChjb25zdCBjaGFyKik7Ci0gICAgdm9pZCBzZXRT
c2xFcnJvcnModW5zaWduZWQpOwotICAgIHVuc2lnbmVkIGdldFNzbEVycm9ycygpOwogCiAgICAg
dm9pZCBlbmFibGVDb29raWVKYXJJZkV4aXN0cygpOwogICAgIHZvaWQgc2V0Q29va2llTGlzdChj
b25zdCBjaGFyKik7CkBAIC0zMDksNyArMzA2LDYgQEAgcHJpdmF0ZToKICAgICBDVVJMKiBtX2hh
bmRsZSB7IG51bGxwdHIgfTsKICAgICBjaGFyIG1fZXJyb3JCdWZmZXJbQ1VSTF9FUlJPUl9TSVpF
XSB7IH07CiAgICAgQ1VSTGNvZGUgbV9lcnJvckNvZGU7Ci0gICAgdW5zaWduZWQgbV9zc2xFcnJv
cnMgeyAwIH07CiAKICAgICBjaGFyKiBtX3VybCB7IG51bGxwdHIgfTsKICAgICB2b2lkKiBtX3By
aXZhdGVEYXRhIHsgbnVsbHB0ciB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAppbmRleCA1ZjVlM2U0NGVmZC4uYmJmNGRh
MTljZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsRG93bmxvYWQuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgVVNFKENVUkwpCiAKICNp
bmNsdWRlICJDdXJsQ29udGV4dC5oIgorI2luY2x1ZGUgIkN1cmxTU0xIYW5kbGUuaCIKICNpbmNs
dWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1
ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtMTE5LDcgKzEyMCw4IEBAIHZvaWQgQ3VybERvd25s
b2FkOjpzZXR1cFJlcXVlc3QoKQogICAgIG1fY3VybEhhbmRsZS5zZXRXcml0ZUNhbGxiYWNrRnVu
Y3Rpb24od3JpdGVDYWxsYmFjaywgdGhpcyk7CiAgICAgbV9jdXJsSGFuZGxlLmVuYWJsZUZvbGxv
d0xvY2F0aW9uKCk7CiAgICAgbV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBBdXRoZW50aWNhdGlvbihD
VVJMQVVUSF9BTlkpOwotICAgIG1fY3VybEhhbmRsZS5lbmFibGVDQUluZm9JZkV4aXN0cygpOwor
ICAgIG1fY3VybEhhbmRsZS5zZXRDQUNlcnRQYXRoKEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5z
c2xIYW5kbGUoKS5nZXRDQUNlcnRQYXRoKCkpOworCiB9CiAKIHZvaWQgQ3VybERvd25sb2FkOjpu
b3RpZnlGaW5pc2goKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxTU0xIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxTU0xIYW5kbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5iMDI4NmRhOWI5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMSGFuZGxlLmNwcApAQCAtMCwwICsxLDEzNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJp
Z2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDdXJsU1NMSGFuZGxlLmgiCisKKyNpZiBVU0UoQ1VSTCkKKworI2lmIE9TKFdJ
TkRPV1MpCisjaW5jbHVkZSAiV2ViQ29yZUJ1bmRsZVdpbi5oIgorI2VuZGlmCisKKyNpZiBVU0Uo
Q0YpCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworQ3VybFNTTEhhbmRsZTo6Q3VybFNTTEhhbmRsZSgpCisgICAgOiBtX2NhQ2VydFBh
dGgoZ2V0Q0FDZXJ0UGF0aEVudigpKQoreworICAgIGNoYXIqIGlnbm9yZVNTTEVycm9ycyA9IGdl
dGVudigiV0VCS0lUX0lHTk9SRV9TU0xfRVJST1JTIik7CisgICAgaWYgKGlnbm9yZVNTTEVycm9y
cykKKyAgICAgICAgbV9pZ25vcmVTU0xFcnJvcnMgPSB0cnVlOworfQorCitDU3RyaW5nIEN1cmxT
U0xIYW5kbGU6OmdldENBQ2VydFBhdGhFbnYoKQoreworICAgIGNoYXIqIGVudlBhdGggPSBnZXRl
bnYoIkNVUkxfQ0FfQlVORExFX1BBVEgiKTsKKyAgICBpZiAoZW52UGF0aCkKKyAgICAgICAgcmV0
dXJuIGVudlBhdGg7CisKKyNpZiBVU0UoQ0YpCisgICAgQ0ZCdW5kbGVSZWYgd2ViS2l0QnVuZGxl
UmVmID0gd2ViS2l0QnVuZGxlKCk7CisgICAgaWYgKHdlYktpdEJ1bmRsZVJlZikgeworICAgICAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNlcnRVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJl
c291cmNlVVJMKHdlYktpdEJ1bmRsZVJlZiwgQ0ZTVFIoImNhY2VydCIpLCBDRlNUUigicGVtIiks
IENGU1RSKCJjZXJ0aWZpY2F0ZXMiKSkpOworICAgICAgICBpZiAoY2VydFVSTFJlZikgeworICAg
ICAgICAgICAgY2hhciBwYXRoW01BWF9QQVRIXTsKKyAgICAgICAgICAgIENGVVJMR2V0RmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKGNlcnRVUkxSZWYuZ2V0KCksIGZhbHNlLCByZWludGVycHJldF9j
YXN0PFVJbnQ4Kj4ocGF0aCksIE1BWF9QQVRIKTsKKyAgICAgICAgICAgIHJldHVybiBwYXRoOwor
ICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gQ1N0cmluZygpOworfQorCit2
b2lkIEN1cmxTU0xIYW5kbGU6OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNvbnN0
IFN0cmluZyYgaG9zdE5hbWUpCit7CisgICAgTG9ja0hvbGRlciBtdXRleChtX211dGV4KTsKKwor
ICAgIExpc3RIYXNoU2V0PFN0cmluZz4gY2VydGlmaWNhdGVzOworICAgIG1fYWxsb3dlZEhvc3Rz
LnNldChob3N0TmFtZSwgY2VydGlmaWNhdGVzKTsKK30KKworYm9vbCBDdXJsU1NMSGFuZGxlOjpp
c0FsbG93ZWRIVFRQU0NlcnRpZmljYXRlSG9zdChjb25zdCBTdHJpbmcmIGhvc3ROYW1lKQorewor
ICAgIExvY2tIb2xkZXIgbXV0ZXgobV9tdXRleCk7CisKKyAgICBhdXRvIGl0ID0gbV9hbGxvd2Vk
SG9zdHMuZmluZChob3N0TmFtZSk7CisgICAgcmV0dXJuIChpdCAhPSBtX2FsbG93ZWRIb3N0cy5l
bmQoKSk7Cit9CisKK2Jvb2wgQ3VybFNTTEhhbmRsZTo6Y2FuSWdub3JlZEhUVFBTQ2VydGlmaWNh
dGUoY29uc3QgU3RyaW5nJiBob3N0TmFtZSwgY29uc3QgTGlzdEhhc2hTZXQ8U3RyaW5nPiYgY2Vy
dGlmaWNhdGVzKQoreworICAgIExvY2tIb2xkZXIgbXV0ZXgobV9tdXRleCk7CisKKyAgICBhdXRv
IGl0ID0gbV9hbGxvd2VkSG9zdHMuZmluZChob3N0TmFtZSk7CisgICAgaWYgKGl0ICE9IG1fYWxs
b3dlZEhvc3RzLmVuZCgpKSB7CisgICAgICAgIGlmICgoaXQtPnZhbHVlKS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIGl0LT52YWx1ZSA9IGNlcnRpZmljYXRlczsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5zaXplKCkgIT0gY2Vy
dGlmaWNhdGVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBh
dXRvIGNlcnRzSXRlciA9IGNlcnRpZmljYXRlcy5iZWdpbigpOworICAgICAgICBhdXRvIHZhbHVl
SXRlciA9IChpdC0+dmFsdWUpLmJlZ2luKCk7CisgICAgICAgIGZvciAoOyB2YWx1ZUl0ZXIgIT0g
KGl0LT52YWx1ZSkuZW5kKCk7ICsrdmFsdWVJdGVyLCArK2NlcnRzSXRlcikgeworICAgICAgICAg
ICAgaWYgKCpjZXJ0c0l0ZXIgIT0gKnZhbHVlSXRlcikKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ3VybFNTTEhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNh
dGVJbmZvKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsIGNvbnN0IFN0cmluZyYgY2VydGlmaWNhdGUs
IGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIExvY2tIb2xkZXIgbXV0ZXgobV9tdXRleCk7CisK
KyAgICBDbGllbnRDZXJ0aWZpY2F0ZSBjbGllbnRJbmZvKGNlcnRpZmljYXRlLCBrZXkpOworICAg
IG1fYWxsb3dlZENsaWVudEhvc3RzLnNldChob3N0TmFtZSwgY2xpZW50SW5mbyk7Cit9CisKK3N0
ZDo6b3B0aW9uYWw8Q3VybFNTTEhhbmRsZTo6Q2xpZW50Q2VydGlmaWNhdGU+IEN1cmxTU0xIYW5k
bGU6OmdldFNTTENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUpCit7Cisg
ICAgTG9ja0hvbGRlciBtdXRleChtX211dGV4KTsKKworICAgIGF1dG8gaXQgPSBtX2FsbG93ZWRD
bGllbnRIb3N0cy5maW5kKGhvc3ROYW1lKTsKKyAgICBpZiAoaXQgPT0gbV9hbGxvd2VkQ2xpZW50
SG9zdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4g
aXQtPnZhbHVlOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxTU0xIYW5kbGUuaApzaW1pbGFyaXR5IGluZGV4IDUyJQpyZW5h
bWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU1NMSGFuZGxlLmgK
cmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMSGFu
ZGxlLmgKaW5kZXggNmIyOTQ1NTBlOTYuLjRmZTAwNWFlMmFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU1NMSGFuZGxlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xIYW5kbGUuaApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywzNSArMjQsNDkgQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotI2lmbmRlZiBTU0xIYW5kbGVfaAotI2RlZmluZSBTU0xIYW5kbGVfaAor
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2lmIE9TKFdJTkRP
V1MpCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgogCi0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBDdXJsSGFuZGxlOworY2xhc3MgQ3VybFNTTEhhbmRsZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VybFNTTEhhbmRsZSk7CisgICAgZnJpZW5kIE5ldmVy
RGVzdHJveWVkPEN1cmxTU0xIYW5kbGU+OwogCi10eXBlZGVmIGVudW0gewotICAgIFNTTF9DRVJU
SUZJQ0FURV9VTktOT1dOX0NBID0gKDEgPDwgMCksIC8vIFRoZSBzaWduaW5nIGNlcnRpZmljYXRl
IGF1dGhvcml0eSBpcyBub3Qga25vd24uCi0gICAgU1NMX0NFUlRJRklDQVRFX0JBRF9JREVOVElU
WSA9ICgxIDw8IDEpLCAvLyBUaGUgY2VydGlmaWNhdGUgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVj
dGVkIGlkZW50aXR5IG9mIHRoZSBzaXRlIHRoYXQgaXQgd2FzIHJldHJpZXZlZCBmcm9tLgotICAg
IFNTTF9DRVJUSUZJQ0FURV9OT1RfQUNUSVZBVEVEID0gKDEgPDwgMiksIC8vIFRoZSBjZXJ0aWZp
Y2F0ZSdzIGFjdGl2YXRpb24gdGltZSBpcyBzdGlsbCBpbiB0aGUgZnV0dXJlCi0gICAgU1NMX0NF
UlRJRklDQVRFX0VYUElSRUQgPSAoMSA8PCAzKSwgLy8gVGhlIGNlcnRpZmljYXRlIGhhcyBleHBp
cmVkCi0gICAgU1NMX0NFUlRJRklDQVRFX1JFVk9LRUQgPSAoMSA8PCA0KSwgLy8gVGhlIGNlcnRp
ZmljYXRlIGhhcyBiZWVuIHJldm9rZWQKLSAgICBTU0xfQ0VSVElGSUNBVEVfSU5TRUNVUkUgPSAo
MSA8PCA1KSwgLy8gVGhlIGNlcnRpZmljYXRlJ3MgYWxnb3JpdGhtIGlzIGNvbnNpZGVyZWQgaW5z
ZWN1cmUuCi0gICAgU1NMX0NFUlRJRklDQVRFX0dFTkVSSUNfRVJST1IgPSAoMSA8PCA2KSAvLyBT
b21lIG90aGVyIGVycm9yIG9jY3VycmVkIHZhbGlkYXRpbmcgdGhlIGNlcnRpZmljYXRlCi19IFNT
TENlcnRpZmljYXRlRmxhZ3M7CitwdWJsaWM6CisgICAgQ3VybFNTTEhhbmRsZSgpOwogCi10eXBl
ZGVmIHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gQ2xpZW50Q2VydGlmaWNhdGU7CisgICAgdXNp
bmcgQ2xpZW50Q2VydGlmaWNhdGUgPSBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+OwogCi12b2lk
IGFkZEFsbG93ZWRDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmKTsKLXZvaWQgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKGNv
bnN0IFN0cmluZyYpOwotYm9vbCBzc2xJZ25vcmVIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYpOwotc3RkOjpvcHRpb25hbDxDbGllbnRDZXJ0aWZpY2F0ZT4gZ2V0
U1NMQ2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJik7Ci12b2lkIHNldFNTTFZlcmlmeU9w
dGlvbnMoQ3VybEhhbmRsZSYpOworICAgIGJvb2wgc2hvdWxkSWdub3JlU1NMRXJyb3JzKCkgY29u
c3QgeyByZXR1cm4gbV9pZ25vcmVTU0xFcnJvcnM7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRDQUNl
cnRQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jYUNlcnRQYXRoLmRhdGEoKTsgfQogCi19CisgICAg
dm9pZCBzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmKTsKKyAg
ICBib29sIGlzQWxsb3dlZEhUVFBTQ2VydGlmaWNhdGVIb3N0KGNvbnN0IFN0cmluZyYpOworICAg
IGJvb2wgY2FuSWdub3JlZEhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiwgY29uc3QgTGlz
dEhhc2hTZXQ8U3RyaW5nPiYpOwogCi0jZW5kaWYKKyAgICB2b2lkIHNldENsaWVudENlcnRpZmlj
YXRlSW5mbyhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPENsaWVudENlcnRpZmljYXRlPiBnZXRTU0xDbGllbnRDZXJ0aWZpY2F0
ZShjb25zdCBTdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBDU3RyaW5nIGdldENBQ2VydFBhdGhF
bnYoKTsKKworICAgIGJvb2wgbV9pZ25vcmVTU0xFcnJvcnMgeyBmYWxzZSB9OworICAgIENTdHJp
bmcgbV9jYUNlcnRQYXRoOworCisgICAgTG9jayBtX211dGV4OworICAgIEhhc2hNYXA8U3RyaW5n
LCBMaXN0SGFzaFNldDxTdHJpbmc+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IG1fYWxsb3dl
ZEhvc3RzOworICAgIEhhc2hNYXA8U3RyaW5nLCBDbGllbnRDZXJ0aWZpY2F0ZSwgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiBtX2FsbG93ZWRDbGllbnRIb3N0czsKK307CisKKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNw
cApzaW1pbGFyaXR5IGluZGV4IDcyJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvU1NMSGFuZGxlLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAKaW5kZXggOTZmYWNjZThlZjku
LjRjMWIyMjFjNjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvU1NMSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxNyBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNCw4MyArMjUsMTAxIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkN1cmxTU0xWZXJpZmllci5oIgogCiAjaWYgVVNFKENVUkwpCi0KLSNpbmNs
dWRlICJTU0xIYW5kbGUuaCIKLQotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIK
LQotI2luY2x1ZGUgPG9wZW5zc2wvcGVtLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KLSNp
bmNsdWRlIDxvcGVuc3NsL3g1MDlfdmZ5Lmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCisjaW5jbHVkZSAiQ3VybFNTTEhhbmRs
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgTGlz
dEhhc2hTZXQ8U3RyaW5nPiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgYWxsb3dlZEhvc3Rz
KCkKK3ZvaWQgQ3VybFNTTFZlcmlmaWVyOjpzZXRTc2xDdHgodm9pZCogc3NsQ3R4KQogewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgTGlzdEhhc2hTZXQ8U3RyaW5n
PiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4gbWFwOwotICAgIHJldHVybiBtYXA7Ci19Cisg
ICAgaWYgKCFzc2xDdHgpCisgICAgICAgIHJldHVybjsKIAotc3RhdGljIEhhc2hNYXA8U3RyaW5n
LCBDbGllbnRDZXJ0aWZpY2F0ZSwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgYWxsb3dlZENs
aWVudEhvc3RzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcs
IENsaWVudENlcnRpZmljYXRlLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBtYXA7Ci0gICAg
cmV0dXJuIG1hcDsKKyAgICBTU0xfQ1RYX3NldF9hcHBfZGF0YShzdGF0aWNfY2FzdDxTU0xfQ1RY
Kj4oc3NsQ3R4KSwgdGhpcyk7CisgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHN0YXRpY19jYXN0PFNT
TF9DVFgqPihzc2xDdHgpLCBTU0xfVkVSSUZZX1BFRVIsIGNlcnRWZXJpZnlDYWxsYmFjayk7CiB9
CiAKLXZvaWQgYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKGNvbnN0IFN0cmluZyYgaG9z
dCkKK2ludCBDdXJsU1NMVmVyaWZpZXI6OmNlcnRWZXJpZnlDYWxsYmFjayhpbnQgb2ssIFg1MDlf
U1RPUkVfQ1RYKiBzdG9yZUN0eCkKIHsKKyAgICAvLyB3aGV0aGVyIHRoZSB2ZXJpZmljYXRpb24g
b2YgdGhlIGNlcnRpZmljYXRlIGluIHF1ZXN0aW9uIHdhcyBwYXNzZWQgKHByZXZlcmlmeV9vaz0x
KSBvciBub3QgKHByZXZlcmlmeV9vaz0wKQorICAgIGludCBjZXJ0RXJyQ2QgPSBYNTA5X1NUT1JF
X0NUWF9nZXRfZXJyb3Ioc3RvcmVDdHgpOworICAgIGlmICghY2VydEVyckNkKQorICAgICAgICBy
ZXR1cm4gMTsKKworICAgIFNTTCogc3NsID0gc3RhdGljX2Nhc3Q8U1NMKj4oWDUwOV9TVE9SRV9D
VFhfZ2V0X2V4X2RhdGEoc3RvcmVDdHgsIFNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9p
ZHgoKSkpOworICAgIFNTTF9DVFgqIHNzbEN0eCA9IFNTTF9nZXRfU1NMX0NUWChzc2wpOworICAg
IEN1cmxTU0xWZXJpZmllciogdmVyaWZpZXIgPSBzdGF0aWNfY2FzdDxDdXJsU1NMVmVyaWZpZXIq
PihTU0xfQ1RYX2dldF9hcHBfZGF0YShzc2xDdHgpKTsKKyAgICBpZiAodmVyaWZpZXIpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgdmVyaWZpZXItPm1fc3NsRXJyb3JzID0gc3RhdGljX2Nhc3Q8
aW50Pih2ZXJpZmllci0+Y29udmVydFRvU1NMQ2VydGlmaWNhdGVGbGFncyhjZXJ0RXJyQ2QpKTsK
KworI2lmIE9TKFdJTkRPV1MpCisgICAgb2sgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc3Ns
SGFuZGxlKCkuaXNBbGxvd2VkSFRUUFNDZXJ0aWZpY2F0ZUhvc3QodmVyaWZpZXItPm1faG9zdE5h
bWUpOworI2Vsc2UKICAgICBMaXN0SGFzaFNldDxTdHJpbmc+IGNlcnRpZmljYXRlczsKLSAgICBh
bGxvd2VkSG9zdHMoKS5zZXQoaG9zdCwgY2VydGlmaWNhdGVzKTsKLX0KKyAgICBpZiAoIWdldFBl
bURhdGFGcm9tQ3R4KHN0b3JlQ3R4LCBjZXJ0aWZpY2F0ZXMpKQorICAgICAgICByZXR1cm4gMDsK
IAotdm9pZCBhZGRBbGxvd2VkQ2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBj
b25zdCBTdHJpbmcmIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBDbGll
bnRDZXJ0aWZpY2F0ZSBjbGllbnRJbmZvIHsgY2VydGlmaWNhdGUsIGtleSB9OwotICAgIGFsbG93
ZWRDbGllbnRIb3N0cygpLnNldChob3N0LCBjbGllbnRJbmZvKTsKLX0KKyAgICBvayA9IEN1cmxD
b250ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5kbGUoKS5jYW5JZ25vcmVkSFRUUFNDZXJ0aWZpY2F0
ZSh2ZXJpZmllci0+bV9ob3N0TmFtZSwgY2VydGlmaWNhdGVzKTsKKyNlbmRpZgogCi1zdGQ6Om9w
dGlvbmFsPENsaWVudENlcnRpZmljYXRlPiBnZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBT
dHJpbmcmIGhvc3QpCi17Ci0gICAgYXV0byBpdCA9IGFsbG93ZWRDbGllbnRIb3N0cygpLmZpbmQo
aG9zdCk7Ci0gICAgaWYgKGl0ID09IGFsbG93ZWRDbGllbnRIb3N0cygpLmVuZCgpKQotICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmIChvaykgeworICAgICAgICAvLyBpZiB0aGUg
aG9zdCBhbmQgdGhlIGNlcnRpZmljYXRlIGFyZSBzdG9yZWQgZm9yIHRoZSBjdXJyZW50IGhhbmRs
ZSB0aGF0IG1lYW5zIGlzIGVuYWJsZWQsCisgICAgICAgIC8vIHNvIGRvbid0IG5lZWQgdG8gY3Vy
bCB2ZXJpZmllcyB0aGUgYXV0aGVudGljaXR5IG9mIHRoZSBwZWVyJ3MgY2VydGlmaWNhdGUKKyAg
ICAgICAgaWYgKHZlcmlmaWVyLT5tX2N1cmxIYW5kbGUpCisgICAgICAgICAgICB2ZXJpZmllci0+
bV9jdXJsSGFuZGxlLT5zZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZlcmlmeVBlZXJEaXNh
YmxlKTsKKyAgICB9CiAKLSAgICByZXR1cm4gaXQtPnZhbHVlOworICAgIHJldHVybiBvazsKIH0K
IAotYm9vbCBzc2xJZ25vcmVIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgY29u
c3QgTGlzdEhhc2hTZXQ8U3RyaW5nPiYgY2VydGlmaWNhdGVzKQorI2lmICFPUyhXSU5ET1dTKQor
Citib29sIEN1cmxTU0xWZXJpZmllcjo6Z2V0UGVtRGF0YUZyb21DdHgoWDUwOV9TVE9SRV9DVFgq
IGN0eCwgTGlzdEhhc2hTZXQ8U3RyaW5nPiYgY2VydGlmaWNhdGVzKQogewotICAgIGF1dG8gaXQg
PSBhbGxvd2VkSG9zdHMoKS5maW5kKGhvc3QpOwotICAgIGlmIChpdCAhPSBhbGxvd2VkSG9zdHMo
KS5lbmQoKSkgewotICAgICAgICBpZiAoKGl0LT52YWx1ZSkuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBpdC0+dmFsdWUgPSBjZXJ0aWZpY2F0ZXM7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBTVEFDS19PRihYNTA5KSogY2VydHMgPSBYNTA5X1NU
T1JFX0NUWF9nZXQxX2NoYWluKGN0eCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBza19YNTA5
X251bShjZXJ0cyk7IGkrKykgeworICAgICAgICBYNTA5KiB1Q2VydCA9IHNrX1g1MDlfdmFsdWUo
Y2VydHMsIGkpOworICAgICAgICBCSU8qIGJpbyA9IEJJT19uZXcoQklPX3NfbWVtKCkpOworICAg
ICAgICBpbnQgcmVzID0gUEVNX3dyaXRlX2Jpb19YNTA5KGJpbywgdUNlcnQpOworICAgICAgICBp
ZiAoIXJlcykgeworICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIEJJT19mcmVl
KGJpbyk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAoY2VydGlm
aWNhdGVzLnNpemUoKSAhPSBpdC0+dmFsdWUuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBhdXRvIGNlcnRzSXRlciA9IGNlcnRpZmljYXRlcy5iZWdpbigpOwotICAg
ICAgICBhdXRvIHZhbHVlSXRlciA9IChpdC0+dmFsdWUpLmJlZ2luKCk7Ci0gICAgICAgIGZvciAo
OyB2YWx1ZUl0ZXIgIT0gKGl0LT52YWx1ZSkuZW5kKCk7ICsrdmFsdWVJdGVyLCArK2NlcnRzSXRl
cikgewotICAgICAgICAgICAgaWYgKCpjZXJ0c0l0ZXIgIT0gKnZhbHVlSXRlcikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdW5zaWduZWQgY2hhciogY2VydGlmaWNh
dGVEYXRhOworICAgICAgICBsb25nIGxlbmd0aCA9IEJJT19nZXRfbWVtX2RhdGEoYmlvLCAmY2Vy
dGlmaWNhdGVEYXRhKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IDApIHsKKyAgICAgICAgICAgIG9r
ID0gZmFsc2U7CisgICAgICAgICAgICBCSU9fZnJlZShiaW8pOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgY2VydGlmaWNhdGVE
YXRhW2xlbmd0aF0gPSAnXDAnOworICAgICAgICBTdHJpbmcgY2VydGlmaWNhdGUgPSBjZXJ0aWZp
Y2F0ZURhdGE7CisgICAgICAgIGNlcnRpZmljYXRlcy5hZGQoY2VydGlmaWNhdGUpOworICAgICAg
ICBCSU9fZnJlZShiaW8pOwogICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisKKyAgICBza19YNTA5
X3BvcF9mcmVlKGNlcnRzLCBYNTA5X2ZyZWUpOworICAgIHJldHVybiBvazsKIH0KIAotdW5zaWdu
ZWQgc3NsQ2VydGlmaWNhdGVGbGFnKGNvbnN0IHVuc2lnbmVkJiBzc2xFcnJvcikKKyNlbmRpZgor
CitDdXJsU1NMVmVyaWZpZXI6OlNTTENlcnRpZmljYXRlRmxhZ3MgQ3VybFNTTFZlcmlmaWVyOjpj
b252ZXJ0VG9TU0xDZXJ0aWZpY2F0ZUZsYWdzKGNvbnN0IHVuc2lnbmVkJiBzc2xFcnJvcikKIHsK
ICAgICBzd2l0Y2ggKHNzbEVycm9yKSB7CiAgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19H
RVRfSVNTVUVSX0NFUlQgOiAvLyB0aGUgaXNzdWVyIGNlcnRpZmljYXRlIGNvdWxkIG5vdCBiZSBm
b3VuZDogdGhpcyBvY2N1cnMgaWYgdGhlIGlzc3VlciBjZXJ0aWZpY2F0ZSBvZiBhbiB1bnRydXN0
ZWQgY2VydGlmaWNhdGUgY2Fubm90IGJlIGZvdW5kLgogICAgIGNhc2UgWDUwOV9WX0VSUl9VTkFC
TEVfVE9fR0VUX0NSTCA6IC8vIHRoZSBDUkwgb2YgYSBjZXJ0aWZpY2F0ZSBjb3VsZCBub3QgYmUg
Zm91bmQuCiAgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19HRVRfSVNTVUVSX0NFUlRfTE9D
QUxMWSA6IC8vIHRoZSBpc3N1ZXIgY2VydGlmaWNhdGUgb2YgYSBsb2NhbGx5IGxvb2tlZCB1cCBj
ZXJ0aWZpY2F0ZSBjb3VsZCBub3QgYmUgZm91bmQuIFRoaXMgbm9ybWFsbHkgbWVhbnMgdGhlIGxp
c3Qgb2YgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgaXMgbm90IGNvbXBsZXRlLgotICAgICAgICByZXR1
cm4gU1NMX0NFUlRJRklDQVRFX1VOS05PV05fQ0E7CisgICAgICAgIHJldHVybiBTU0xDZXJ0aWZp
Y2F0ZUZsYWdzOjpTU0xfQ0VSVElGSUNBVEVfVU5LTk9XTl9DQTsKICAgICBjYXNlIFg1MDlfVl9F
UlJfVU5BQkxFX1RPX0RFQ1JZUFRfQ0VSVF9TSUdOQVRVUkUgOiAvLyB0aGUgY2VydGlmaWNhdGUg
c2lnbmF0dXJlIGNvdWxkIG5vdCBiZSBkZWNyeXB0ZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYWN0
dWFsIHNpZ25hdHVyZSB2YWx1ZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCByYXRoZXIgdGhhbiBp
dCBub3QgbWF0Y2hpbmcgdGhlIGV4cGVjdGVkIHZhbHVlLCB0aGlzIGlzIG9ubHkgbWVhbmluZ2Z1
bCBmb3IgUlNBIGtleXMuCiAgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNSWVBUX0NS
TF9TSUdOQVRVUkUgOiAvLyB0aGUgQ1JMIHNpZ25hdHVyZSBjb3VsZCBub3QgYmUgZGVjcnlwdGVk
OiB0aGlzIG1lYW5zIHRoYXQgdGhlIGFjdHVhbCBzaWduYXR1cmUgdmFsdWUgY291bGQgbm90IGJl
IGRldGVybWluZWQgcmF0aGVyIHRoYW4gaXQgbm90IG1hdGNoaW5nIHRoZSBleHBlY3RlZCB2YWx1
ZS4gVW51c2VkLgogICAgIGNhc2UgWDUwOV9WX0VSUl9VTkFCTEVfVE9fREVDT0RFX0lTU1VFUl9Q
VUJMSUNfS0VZIDogLy8gdGhlIHB1YmxpYyBrZXkgaW4gdGhlIGNlcnRpZmljYXRlIFN1YmplY3RQ
dWJsaWNLZXlJbmZvIGNvdWxkIG5vdCBiZSByZWFkLgpAQCAtMTEzLDEzICsxMzIsMTMgQEAgdW5z
aWduZWQgc3NsQ2VydGlmaWNhdGVGbGFnKGNvbnN0IHVuc2lnbmVkJiBzc2xFcnJvcikKICAgICBj
YXNlIFg1MDlfVl9FUlJfQ0VSVF9SRUpFQ1RFRCA6IC8vIHRoZSByb290IENBIGlzIG1hcmtlZCB0
byByZWplY3QgdGhlIHNwZWNpZmllZCBwdXJwb3NlLgogICAgIGNhc2UgWDUwOV9WX0VSUl9OT19F
WFBMSUNJVF9QT0xJQ1kgOiAvLyB0aGUgdmVyaWZpY2F0aW9uIGZsYWdzIHdlcmUgc2V0IHRvIHJl
cXVpcmUgYW5kIGV4cGxpY2l0IHBvbGljeSBidXQgbm9uZSB3YXMgcHJlc2VudC4KICAgICBjYXNl
IFg1MDlfVl9FUlJfRElGRkVSRU5UX0NSTF9TQ09QRSA6IC8vIHRoZSBvbmx5IENSTHMgdGhhdCBj
b3VsZCBiZSBmb3VuZCBkaWQgbm90IG1hdGNoIHRoZSBzY29wZSBvZiB0aGUgY2VydGlmaWNhdGUu
Ci0gICAgICAgIHJldHVybiBTU0xfQ0VSVElGSUNBVEVfSU5TRUNVUkU7CisgICAgICAgIHJldHVy
biBTU0xDZXJ0aWZpY2F0ZUZsYWdzOjpTU0xfQ0VSVElGSUNBVEVfSU5TRUNVUkU7CiAgICAgY2Fz
ZSBYNTA5X1ZfRVJSX0NFUlRfTk9UX1lFVF9WQUxJRCA6IC8vIHRoZSBjZXJ0aWZpY2F0ZSBpcyBu
b3QgeWV0IHZhbGlkOiB0aGUgbm90QmVmb3JlIGRhdGUgaXMgYWZ0ZXIgdGhlIGN1cnJlbnQgdGlt
ZS4KICAgICBjYXNlIFg1MDlfVl9FUlJfQ1JMX05PVF9ZRVRfVkFMSUQgOiAvLyB0aGUgQ1JMIGlz
IG5vdCB5ZXQgdmFsaWQuCi0gICAgICAgIHJldHVybiBTU0xfQ0VSVElGSUNBVEVfTk9UX0FDVElW
QVRFRDsKKyAgICAgICAgcmV0dXJuIFNTTENlcnRpZmljYXRlRmxhZ3M6OlNTTF9DRVJUSUZJQ0FU
RV9OT1RfQUNUSVZBVEVEOwogICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX0hBU19FWFBJUkVEIDog
Ly8gdGhlIGNlcnRpZmljYXRlIGhhcyBleHBpcmVkOiB0aGF0IGlzIHRoZSBub3RBZnRlciBkYXRl
IGlzIGJlZm9yZSB0aGUgY3VycmVudCB0aW1lLgogICAgIGNhc2UgWDUwOV9WX0VSUl9DUkxfSEFT
X0VYUElSRUQgOiAvLyB0aGUgQ1JMIGhhcyBleHBpcmVkLgotICAgICAgICByZXR1cm4gU1NMX0NF
UlRJRklDQVRFX0VYUElSRUQ7CisgICAgICAgIHJldHVybiBTU0xDZXJ0aWZpY2F0ZUZsYWdzOjpT
U0xfQ0VSVElGSUNBVEVfRVhQSVJFRDsKICAgICBjYXNlIFg1MDlfVl9FUlJfRVJST1JfSU5fQ0VS
VF9OT1RfQkVGT1JFX0ZJRUxEIDogLy8gdGhlIGNlcnRpZmljYXRlIG5vdEJlZm9yZSBmaWVsZCBj
b250YWlucyBhbiBpbnZhbGlkIHRpbWUuCiAgICAgY2FzZSBYNTA5X1ZfRVJSX0VSUk9SX0lOX0NF
UlRfTk9UX0FGVEVSX0ZJRUxEIDogLy8gdGhlIGNlcnRpZmljYXRlIG5vdEFmdGVyIGZpZWxkIGNv
bnRhaW5zIGFuIGludmFsaWQgdGltZS4KICAgICBjYXNlIFg1MDlfVl9FUlJfRVJST1JfSU5fQ1JM
X0xBU1RfVVBEQVRFX0ZJRUxEIDogLy8gdGhlIENSTCBsYXN0VXBkYXRlIGZpZWxkIGNvbnRhaW5z
IGFuIGludmFsaWQgdGltZS4KQEAgLTEzNyw5NyArMTU2LDE4IEBAIHVuc2lnbmVkIHNzbENlcnRp
ZmljYXRlRmxhZyhjb25zdCB1bnNpZ25lZCYgc3NsRXJyb3IpCiAgICAgY2FzZSBYNTA5X1ZfRVJS
X1VOU1VQUE9SVEVEX0NPTlNUUkFJTlRfU1lOVEFYIDogLy8gdGhlIGZvcm1hdCBvZiB0aGUgbmFt
ZSBjb25zdHJhaW50IGlzIG5vdCByZWNvZ25pc2VkOiBmb3IgZXhhbXBsZSBhbiBlbWFpbCBhZGRy
ZXNzIGZvcm1hdCBvZiBhIGZvcm0gbm90IG1lbnRpb25lZCBpbiBSRkMzMjgwLiBUaGlzIGNvdWxk
IGJlIGNhdXNlZCBieSBhIGdhcmJhZ2UgZXh0ZW5zaW9uIG9yIHNvbWUgbmV3IGZlYXR1cmUgbm90
IGN1cnJlbnRseSBzdXBwb3J0ZWQuCiAgICAgY2FzZSBYNTA5X1ZfRVJSX0NSTF9QQVRIX1ZBTElE
QVRJT05fRVJST1IgOiAvLyBhbiBlcnJvciBvY2N1cmVkIHdoZW4gYXR0ZW1wdGluZyB0byB2ZXJp
ZnkgdGhlIENSTCBwYXRoLiBUaGlzIGVycm9yIGNhbiBvbmx5IGhhcHBlbiBpZiBleHRlbmRlZCBD
UkwgY2hlY2tpbmcgaXMgZW5hYmxlZC4KICAgICBjYXNlIFg1MDlfVl9FUlJfQVBQTElDQVRJT05f
VkVSSUZJQ0FUSU9OIDogLy8gYW4gYXBwbGljYXRpb24gc3BlY2lmaWMgZXJyb3IuIFRoaXMgd2ls
bCBuZXZlciBiZSByZXR1cm5lZCB1bmxlc3MgZXhwbGljaXRseSBzZXQgYnkgYW4gYXBwbGljYXRp
b24uCi0gICAgICAgIHJldHVybiBTU0xfQ0VSVElGSUNBVEVfR0VORVJJQ19FUlJPUjsKKyAgICAg
ICAgcmV0dXJuIFNTTENlcnRpZmljYXRlRmxhZ3M6OlNTTF9DRVJUSUZJQ0FURV9HRU5FUklDX0VS
Uk9SOwogICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX1JFVk9LRUQgOiAvLyB0aGUgY2VydGlmaWNh
dGUgaGFzIGJlZW4gcmV2b2tlZC4KLSAgICAgICAgcmV0dXJuIFNTTF9DRVJUSUZJQ0FURV9SRVZP
S0VEOworICAgICAgICByZXR1cm4gU1NMQ2VydGlmaWNhdGVGbGFnczo6U1NMX0NFUlRJRklDQVRF
X1JFVk9LRUQ7CiAgICAgY2FzZSBYNTA5X1ZfRVJSX0lOVkFMSURfQ0EgOiAvLyBhIENBIGNlcnRp
ZmljYXRlIGlzIGludmFsaWQuIEVpdGhlciBpdCBpcyBub3QgYSBDQSBvciBpdHMgZXh0ZW5zaW9u
cyBhcmUgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgc3VwcGxpZWQgcHVycG9zZS4KICAgICBjYXNl
IFg1MDlfVl9FUlJfU1VCSkVDVF9JU1NVRVJfTUlTTUFUQ0ggOiAvLyB0aGUgY3VycmVudCBjYW5k
aWRhdGUgaXNzdWVyIGNlcnRpZmljYXRlIHdhcyByZWplY3RlZCBiZWNhdXNlIGl0cyBzdWJqZWN0
IG5hbWUgZGlkIG5vdCBtYXRjaCB0aGUgaXNzdWVyIG5hbWUgb2YgdGhlIGN1cnJlbnQgY2VydGlm
aWNhdGUuIFRoaXMgaXMgb25seSBzZXQgaWYgaXNzdWVyIGNoZWNrIGRlYnVnZ2luZyBpcyBlbmFi
bGVkIGl0IGlzIHVzZWQgZm9yIHN0YXR1cyBub3RpZmljYXRpb24gYW5kIGlzIG5vdCBpbiBpdHNl
bGYgYW4gZXJyb3IuCiAgICAgY2FzZSBYNTA5X1ZfRVJSX0FLSURfU0tJRF9NSVNNQVRDSCA6IC8v
IHRoZSBjdXJyZW50IGNhbmRpZGF0ZSBpc3N1ZXIgY2VydGlmaWNhdGUgd2FzIHJlamVjdGVkIGJl
Y2F1c2UgaXRzIHN1YmplY3Qga2V5IGlkZW50aWZpZXIgd2FzIHByZXNlbnQgYW5kIGRpZCBub3Qg
bWF0Y2ggdGhlIGF1dGhvcml0eSBrZXkgaWRlbnRpZmllciBjdXJyZW50IGNlcnRpZmljYXRlLiBU
aGlzIGlzIG9ubHkgc2V0IGlmIGlzc3VlciBjaGVjayBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCBpdCBp
cyB1c2VkIGZvciBzdGF0dXMgbm90aWZpY2F0aW9uIGFuZCBpcyBub3QgaW4gaXRzZWxmIGFuIGVy
cm9yLgogICAgIGNhc2UgWDUwOV9WX0VSUl9BS0lEX0lTU1VFUl9TRVJJQUxfTUlTTUFUQ0ggOiAv
LyB0aGUgY3VycmVudCBjYW5kaWRhdGUgaXNzdWVyIGNlcnRpZmljYXRlIHdhcyByZWplY3RlZCBi
ZWNhdXNlIGl0cyBpc3N1ZXIgbmFtZSBhbmQgc2VyaWFsIG51bWJlciB3YXMgcHJlc2VudCBhbmQg
ZGlkIG5vdCBtYXRjaCB0aGUgYXV0aG9yaXR5IGtleSBpZGVudGlmaWVyIG9mIHRoZSBjdXJyZW50
IGNlcnRpZmljYXRlLiBUaGlzIGlzIG9ubHkgc2V0IGlmIGlzc3VlciBjaGVjayBkZWJ1Z2dpbmcg
aXMgZW5hYmxlZCBpdCBpcyB1c2VkIGZvciBzdGF0dXMgbm90aWZpY2F0aW9uIGFuZCBpcyBub3Qg
aW4gaXRzZWxmIGFuIGVycm9yLgogICAgIGNhc2UgWDUwOV9WX0VSUl9LRVlVU0FHRV9OT19DRVJU
U0lHTiA6IC8vIHRoZSBjdXJyZW50IGNhbmRpZGF0ZSBpc3N1ZXIgY2VydGlmaWNhdGUgd2FzIHJl
amVjdGVkIGJlY2F1c2UgaXRzIGtleVVzYWdlIGV4dGVuc2lvbiBkb2VzIG5vdCBwZXJtaXQgY2Vy
dGlmaWNhdGUgc2lnbmluZy4gVGhpcyBpcyBvbmx5IHNldCBpZiBpc3N1ZXIgY2hlY2sgZGVidWdn
aW5nIGlzIGVuYWJsZWQgaXQgaXMgdXNlZCBmb3Igc3RhdHVzIG5vdGlmaWNhdGlvbiBhbmQgaXMg
bm90IGluIGl0c2VsZiBhbiBlcnJvci4KLSAgICAgICAgcmV0dXJuIFNTTF9DRVJUSUZJQ0FURV9C
QURfSURFTlRJVFk7CisgICAgICAgIHJldHVybiBTU0xDZXJ0aWZpY2F0ZUZsYWdzOjpTU0xfQ0VS
VElGSUNBVEVfQkFEX0lERU5USVRZOwogICAgIGRlZmF1bHQgOgotICAgICAgICByZXR1cm4gU1NM
X0NFUlRJRklDQVRFX0dFTkVSSUNfRVJST1I7Ci0gICAgfQotfQotCi0jaWYgIVBMQVRGT1JNKFdJ
TikKLS8vIHN1Y2Nlc3Mgb2YgY2VydGlmaWNhdGVzIGV4dHJhY3Rpb24KLWJvb2wgcGVtRGF0YShY
NTA5X1NUT1JFX0NUWCogY3R4LCBMaXN0SGFzaFNldDxTdHJpbmc+JiBjZXJ0aWZpY2F0ZXMpCi17
Ci0gICAgYm9vbCBvayA9IHRydWU7Ci0gICAgU1RBQ0tfT0YoWDUwOSkqIGNlcnRzID0gWDUwOV9T
VE9SRV9DVFhfZ2V0MV9jaGFpbihjdHgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2tfWDUw
OV9udW0oY2VydHMpOyBpKyspIHsKLSAgICAgICAgWDUwOSogdUNlcnQgPSBza19YNTA5X3ZhbHVl
KGNlcnRzLCBpKTsKLSAgICAgICAgQklPKiBiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKLSAg
ICAgICAgaW50IHJlcyA9IFBFTV93cml0ZV9iaW9fWDUwOShiaW8sIHVDZXJ0KTsKLSAgICAgICAg
aWYgKCFyZXMpIHsKLSAgICAgICAgICAgIG9rID0gZmFsc2U7Ci0gICAgICAgICAgICBCSU9fZnJl
ZShiaW8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25l
ZCBjaGFyKiBjZXJ0aWZpY2F0ZURhdGE7Ci0gICAgICAgIGxvbmcgbGVuZ3RoID0gQklPX2dldF9t
ZW1fZGF0YShiaW8sICZjZXJ0aWZpY2F0ZURhdGEpOwotICAgICAgICBpZiAobGVuZ3RoIDwgMCkg
ewotICAgICAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgICAgIEJJT19mcmVlKGJpbyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNlcnRpZmljYXRlRGF0YVts
ZW5ndGhdID0gJ1wwJzsKLSAgICAgICAgU3RyaW5nIGNlcnRpZmljYXRlID0gY2VydGlmaWNhdGVE
YXRhOwotICAgICAgICBjZXJ0aWZpY2F0ZXMuYWRkKGNlcnRpZmljYXRlKTsKLSAgICAgICAgQklP
X2ZyZWUoYmlvKTsKKyAgICAgICAgcmV0dXJuIFNTTENlcnRpZmljYXRlRmxhZ3M6OlNTTF9DRVJU
SUZJQ0FURV9HRU5FUklDX0VSUk9SOwogICAgIH0KLSAgICAgICAgc2tfWDUwOV9wb3BfZnJlZShj
ZXJ0cywgWDUwOV9mcmVlKTsKLSAgICAgICAgcmV0dXJuIG9rOwotfQotI2VuZGlmCi0KLXN0YXRp
YyBpbnQgY2VydFZlcmlmeUNhbGxiYWNrKGludCBvaywgWDUwOV9TVE9SRV9DVFgqIGN0eCkKLXsK
LSAgICAvLyB3aGV0aGVyIHRoZSB2ZXJpZmljYXRpb24gb2YgdGhlIGNlcnRpZmljYXRlIGluIHF1
ZXN0aW9uIHdhcyBwYXNzZWQgKHByZXZlcmlmeV9vaz0xKSBvciBub3QgKHByZXZlcmlmeV9vaz0w
KQotCi0gICAgdW5zaWduZWQgZXJyID0gWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yKGN0eCk7Ci0g
ICAgaWYgKCFlcnIpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgU1NMKiBzc2wgPSByZWludGVy
cHJldF9jYXN0PFNTTCo+KFg1MDlfU1RPUkVfQ1RYX2dldF9leF9kYXRhKGN0eCwgU1NMX2dldF9l
eF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeCgpKSk7Ci0gICAgU1NMX0NUWCogc3NsY3R4ID0gU1NM
X2dldF9TU0xfQ1RYKHNzbCk7Ci0gICAgQ3VybEhhbmRsZSogaGFuZGxlID0gcmVpbnRlcnByZXRf
Y2FzdDxDdXJsSGFuZGxlKj4oU1NMX0NUWF9nZXRfYXBwX2RhdGEoc3NsY3R4KSk7Ci0gICAgU3Ry
aW5nIGhvc3QgPSBoYW5kbGUtPmdldEVmZmVjdGl2ZVVSTCgpLmhvc3QoKTsKLQotICAgIGhhbmRs
ZS0+c2V0U3NsRXJyb3JzKHNzbENlcnRpZmljYXRlRmxhZyhlcnIpKTsKLQotI2lmIFBMQVRGT1JN
KFdJTikKLSAgICBhdXRvIGl0ID0gYWxsb3dlZEhvc3RzKCkuZmluZChob3N0KTsKLSAgICBvayA9
IChpdCAhPSBhbGxvd2VkSG9zdHMoKS5lbmQoKSk7Ci0jZWxzZQotICAgIExpc3RIYXNoU2V0PFN0
cmluZz4gY2VydGlmaWNhdGVzOwotICAgIGlmICghcGVtRGF0YShjdHgsIGNlcnRpZmljYXRlcykp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIG9rID0gc3NsSWdub3JlSFRUUFNDZXJ0aWZpY2F0ZSho
b3N0LCBjZXJ0aWZpY2F0ZXMpOwotI2VuZGlmCi0KLSAgICBpZiAob2spIHsKLSAgICAgICAgLy8g
aWYgdGhlIGhvc3QgYW5kIHRoZSBjZXJ0aWZpY2F0ZSBhcmUgc3RvcmVkIGZvciB0aGUgY3VycmVu
dCBoYW5kbGUgdGhhdCBtZWFucyBpcyBlbmFibGVkLAotICAgICAgICAvLyBzbyBkb24ndCBuZWVk
IHRvIGN1cmwgdmVyaWZpZXMgdGhlIGF1dGhlbnRpY2l0eSBvZiB0aGUgcGVlcidzIGNlcnRpZmlj
YXRlCi0gICAgICAgIGhhbmRsZS0+c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQ
ZWVyRGlzYWJsZSk7Ci0gICAgfQotICAgIHJldHVybiBvazsKLX0KLQotc3RhdGljIENVUkxjb2Rl
IHNzbGN0eGZ1bihDVVJMKiBjdXJsLCB2b2lkKiBzc2xjdHgsIHZvaWQqIHBhcm0pCi17Ci0gICAg
U1NMX0NUWF9zZXRfYXBwX2RhdGEocmVpbnRlcnByZXRfY2FzdDxTU0xfQ1RYKj4oc3NsY3R4KSwg
cGFybSk7Ci0gICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHJlaW50ZXJwcmV0X2Nhc3Q8U1NMX0NUWCo+
KHNzbGN0eCksIFNTTF9WRVJJRllfUEVFUiwgY2VydFZlcmlmeUNhbGxiYWNrKTsKLSAgICByZXR1
cm4gQ1VSTEVfT0s7Ci19Ci0KLXZvaWQgc2V0U1NMVmVyaWZ5T3B0aW9ucyhDdXJsSGFuZGxlJiBo
YW5kbGUpCi17Ci0gICAgaGFuZGxlLnNldFNzbEN0eENhbGxiYWNrRnVuY3Rpb24oc3NsY3R4ZnVu
LCAmaGFuZGxlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi41NGFhYzhiMzYwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaApAQCAtMCwwICsxLDEw
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICog
Q29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisKKyNpbmNs
dWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEN1cmxIYW5kbGU7CisKK2NsYXNzIEN1cmxTU0xWZXJp
ZmllciB7CitXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJsU1NMVmVyaWZpZXIpOworCitwdWJsaWM6
CisgICAgZW51bSBjbGFzcyBTU0xDZXJ0aWZpY2F0ZUZsYWdzIHsKKyAgICAgICAgU1NMX0NFUlRJ
RklDQVRFX1VOS05PV05fQ0EgPSAoMSA8PCAwKSwgLy8gVGhlIHNpZ25pbmcgY2VydGlmaWNhdGUg
YXV0aG9yaXR5IGlzIG5vdCBrbm93bi4KKyAgICAgICAgU1NMX0NFUlRJRklDQVRFX0JBRF9JREVO
VElUWSA9ICgxIDw8IDEpLCAvLyBUaGUgY2VydGlmaWNhdGUgZG9lcyBub3QgbWF0Y2ggdGhlIGV4
cGVjdGVkIGlkZW50aXR5IG9mIHRoZSBzaXRlIHRoYXQgaXQgd2FzIHJldHJpZXZlZCBmcm9tLgor
ICAgICAgICBTU0xfQ0VSVElGSUNBVEVfTk9UX0FDVElWQVRFRCA9ICgxIDw8IDIpLCAvLyBUaGUg
Y2VydGlmaWNhdGUncyBhY3RpdmF0aW9uIHRpbWUgaXMgc3RpbGwgaW4gdGhlIGZ1dHVyZQorICAg
ICAgICBTU0xfQ0VSVElGSUNBVEVfRVhQSVJFRCA9ICgxIDw8IDMpLCAvLyBUaGUgY2VydGlmaWNh
dGUgaGFzIGV4cGlyZWQKKyAgICAgICAgU1NMX0NFUlRJRklDQVRFX1JFVk9LRUQgPSAoMSA8PCA0
KSwgLy8gVGhlIGNlcnRpZmljYXRlIGhhcyBiZWVuIHJldm9rZWQKKyAgICAgICAgU1NMX0NFUlRJ
RklDQVRFX0lOU0VDVVJFID0gKDEgPDwgNSksIC8vIFRoZSBjZXJ0aWZpY2F0ZSdzIGFsZ29yaXRo
bSBpcyBjb25zaWRlcmVkIGluc2VjdXJlLgorICAgICAgICBTU0xfQ0VSVElGSUNBVEVfR0VORVJJ
Q19FUlJPUiA9ICgxIDw8IDYpIC8vIFNvbWUgb3RoZXIgZXJyb3Igb2NjdXJyZWQgdmFsaWRhdGlu
ZyB0aGUgY2VydGlmaWNhdGUKKyAgICB9OworCisgICAgQ3VybFNTTFZlcmlmaWVyKCkgPSBkZWZh
dWx0OworCisgICAgdm9pZCBzZXRDdXJsSGFuZGxlKEN1cmxIYW5kbGUqIGN1cmxIYW5kbGUpIHsg
bV9jdXJsSGFuZGxlID0gY3VybEhhbmRsZTsgfQorICAgIHZvaWQgc2V0SG9zdE5hbWUoY29uc3Qg
U3RyaW5nJiBob3N0TmFtZSkgeyBtX2hvc3ROYW1lID0gaG9zdE5hbWU7IH0KKyAgICB2b2lkIHNl
dFNzbEN0eCh2b2lkKik7CisKKyAgICBpbnQgc3NsRXJyb3JzKCkgeyByZXR1cm4gbV9zc2xFcnJv
cnM7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW50IGNlcnRWZXJpZnlDYWxsYmFjayhpbnQs
IFg1MDlfU1RPUkVfQ1RYKik7CisKKyNpZiAhT1MoV0lORE9XUykKKyAgICBib29sIGdldFBlbURh
dGFGcm9tQ3R4KFg1MDlfU1RPUkVfQ1RYKiwgTGlzdEhhc2hTZXQ8U3RyaW5nPiYpOworI2VuZGlm
CisKKyAgICBTU0xDZXJ0aWZpY2F0ZUZsYWdzIGNvbnZlcnRUb1NTTENlcnRpZmljYXRlRmxhZ3Mo
Y29uc3QgdW5zaWduZWQmKTsKKworICAgIEN1cmxIYW5kbGUqIG1fY3VybEhhbmRsZSB7IG51bGxw
dHIgfTsKKyAgICBTdHJpbmcgbV9ob3N0TmFtZTsKKyAgICBpbnQgbV9zc2xFcnJvcnMgeyAwIH07
Cit9OworCit9CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor
CisKKworCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKaW5kZXggZGI5ZDUzYWU5N2UuLjJhNzhjZWE0
MTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcApAQCAtMzcsMTIgKzM3LDEyIEBACiAjaW5jbHVk
ZSAiQ3VybENhY2hlTWFuYWdlci5oIgogI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiQ3VybEpvYk1hbmFnZXIuaCIKKyNpbmNsdWRlICJDdXJsU1NMSGFuZGxlLmgiCiAjaW5jbHVk
ZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCi0jaW5jbHVkZSAiU1NMSGFuZGxlLmgiCiAjaW5jbHVk
ZSAiU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KIApAQCAtODcsNyArODcsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dz
QW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIAotICAgIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cyhob3N0
KTsKKyAgICBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc3NsSGFuZGxlKCkuc2V0SG9zdEFsbG93
c0FueUhUVFBTQ2VydGlmaWNhdGUoaG9zdCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNl
dENsaWVudENlcnRpZmljYXRlSW5mbyhjb25zdCBTdHJpbmcmIGhvc3QsIGNvbnN0IFN0cmluZyYg
Y2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYga2V5KQpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFJl
c291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZUluZm8oY29uc3QgU3RyaW5nJiBob3N0
LCBjb25zdCBTdHJpbmcmCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIGlmIChm
aWxlRXhpc3RzKGNlcnRpZmljYXRlKSkKLSAgICAgICAgYWRkQWxsb3dlZENsaWVudENlcnRpZmlj
YXRlKGhvc3QsIGNlcnRpZmljYXRlLCBrZXkpOworICAgICAgICBDdXJsQ29udGV4dDo6c2luZ2xl
dG9uKCkuc3NsSGFuZGxlKCkuc2V0Q2xpZW50Q2VydGlmaWNhdGVJbmZvKGhvc3QsIGNlcnRpZmlj
YXRlLCBrZXkpOwogICAgIGVsc2UKICAgICAgICAgTE9HKE5ldHdvcmssICJJbnZhbGlkIGNsaWVu
dCBjZXJ0aWZpY2F0ZSBmaWxlOiAlcyFcbiIsIGNlcnRpZmljYXRlLmxhdGluMSgpLmRhdGEoKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcAppbmRleCBkMGM2MjNhZDMz
My4uM2QyODYxNmRhYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcApA
QCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIk11bHRpcGFydEhhbmRsZS5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgot
I2luY2x1ZGUgIlNTTEhhbmRsZS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1
ZGUgIlRocmVhZFNhZmVEYXRhQnVmZmVyLmgiCiAjaW5jbHVkZSAiVVJMLmgiCkBAIC03OCw4ICs3
Nyw2IEBAIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9z
c2xDbGllbnRDZXJ0aWZpY2F0ZSA9IGdldFNTTENsaWVudENlcnRpZmljYXRlKHVybC5ob3N0KCkp
OwotCiAgICAgc2V0dXBBdXRoZW50aWNhdGlvbigpOwogfQogCkBAIC0yMTQsNiArMjExLDggQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2V0dXBSZXF1ZXN0KCkKICAgICBtX2N1
cmxIYW5kbGUuZW5hYmxlU3RkRXJySWZVc2VkKCk7CiAjZW5kaWYKIAorICAgIGF1dG8mIHNzbEhh
bmRsZSA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5kbGUoKTsKKwogICAgIG1fY3Vy
bEhhbmRsZS5zZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZlcmlmeVBlZXJFbmFibGUpOwog
ICAgIG1fY3VybEhhbmRsZS5zZXRTc2xWZXJpZnlIb3N0KEN1cmxIYW5kbGU6OlZlcmlmeUhvc3RT
dHJpY3ROYW1lQ2hlY2spOwogICAgIG1fY3VybEhhbmRsZS5zZXRQcml2YXRlRGF0YSh0aGlzKTsK
QEAgLTIyNiwxOCArMjI1LDE5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNl
dHVwUmVxdWVzdCgpCiAgICAgbV9jdXJsSGFuZGxlLmVuYWJsZVRpbWVvdXQoKTsKICAgICBtX2N1
cmxIYW5kbGUuZW5hYmxlQWxsb3dlZFByb3RvY29scygpOwogCi0gICAgaWYgKG1fc3NsQ2xpZW50
Q2VydGlmaWNhdGUpIHsKLSAgICAgICAgbV9jdXJsSGFuZGxlLnNldFNzbENlcnQoKCptX3NzbENs
aWVudENlcnRpZmljYXRlKS5maXJzdC51dGY4KCkuZGF0YSgpKTsKKyAgICBhdXRvIHNzbENsaWVu
dENlcnRpZmljYXRlID0gc3NsSGFuZGxlLmdldFNTTENsaWVudENlcnRpZmljYXRlKHVybC5ob3N0
KCkpOworICAgIGlmIChzc2xDbGllbnRDZXJ0aWZpY2F0ZSkgeworICAgICAgICBtX2N1cmxIYW5k
bGUuc2V0U3NsQ2VydChzc2xDbGllbnRDZXJ0aWZpY2F0ZS0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7
CiAgICAgICAgIG1fY3VybEhhbmRsZS5zZXRTc2xDZXJ0VHlwZSgiUDEyIik7Ci0gICAgICAgIG1f
Y3VybEhhbmRsZS5zZXRTc2xLZXlQYXNzd29yZCgoKm1fc3NsQ2xpZW50Q2VydGlmaWNhdGUpLnNl
Y29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbV9jdXJsSGFuZGxlLnNldFNzbEtleVBhc3N3
b3JkKHNzbENsaWVudENlcnRpZmljYXRlLT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CiAgICAgfQog
Ci0gICAgaWYgKEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zaG91bGRJZ25vcmVTU0xFcnJvcnMo
KSkKKyAgICBpZiAoc3NsSGFuZGxlLnNob3VsZElnbm9yZVNTTEVycm9ycygpKQogICAgICAgICBt
X2N1cmxIYW5kbGUuc2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyRGlzYWJs
ZSk7CiAgICAgZWxzZQotICAgICAgICBzZXRTU0xWZXJpZnlPcHRpb25zKG1fY3VybEhhbmRsZSk7
CisgICAgICAgIG1fY3VybEhhbmRsZS5zZXRTc2xDdHhDYWxsYmFja0Z1bmN0aW9uKHdpbGxTZXR1
cFNzbEN0eENhbGxiYWNrLCB0aGlzKTsKIAotICAgIG1fY3VybEhhbmRsZS5lbmFibGVDQUluZm9J
ZkV4aXN0cygpOworICAgIG1fY3VybEhhbmRsZS5zZXRDQUNlcnRQYXRoKHNzbEhhbmRsZS5nZXRD
QUNlcnRQYXRoKCkpOwogCiAgICAgbV9jdXJsSGFuZGxlLmVuYWJsZUFjY2VwdEVuY29kaW5nKCk7
CiAgICAgbV9jdXJsSGFuZGxlLnNldFVybCh1cmxTdHJpbmcpOwpAQCAtMjg4LDcgKzI4OCw3IEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6Om5vdGlmeUZhaWwoKQogICAgIGludCBl
cnJvckNvZGUgPSBtX2N1cmxIYW5kbGUuZXJyb3JDb2RlKCk7CiAgICAgVVJMIGZhaWxpbmdVUkwg
PSBtX2N1cmxIYW5kbGUuZ2V0RWZmZWN0aXZlVVJMKCk7CiAgICAgU3RyaW5nIGVycm9yRGVzY3Jp
cHRpb24gPSBtX2N1cmxIYW5kbGUuZXJyb3JEZXNjcmlwdGlvbigpOwotICAgIHVuc2lnbmVkIHNz
bEVycm9ycyA9IG1fY3VybEhhbmRsZS5nZXRTc2xFcnJvcnMoKTsKKyAgICB1bnNpZ25lZCBzc2xF
cnJvcnMgPSBtX3NzbFZlcmlmaWVyLnNzbEVycm9ycygpOwogCiAgICAgaWYgKGlzTWFpblRocmVh
ZCgpKQogICAgICAgICBkaWRGYWlsKGRvbWFpbiwgZXJyb3JDb2RlLCBmYWlsaW5nVVJMLCBlcnJv
ckRlc2NyaXB0aW9uLCBzc2xFcnJvcnMpOwpAQCAtNzEyLDYgKzcxMiwxNSBAQCBOZXR3b3JrTG9h
ZE1ldHJpY3MgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmdldE5ldHdvcmtMb2FkTWV0cmlj
cygpCiAgICAgcmV0dXJuIG5ldHdvcmtMb2FkTWV0cmljczsKIH0KIAorQ1VSTGNvZGUgUmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGU6OndpbGxTZXR1cFNzbEN0eCh2b2lkKiBzc2xDdHgpCit7Cisg
ICAgbV9zc2xWZXJpZmllci5zZXRDdXJsSGFuZGxlKCZtX2N1cmxIYW5kbGUpOworICAgIG1fc3Ns
VmVyaWZpZXIuc2V0SG9zdE5hbWUobV9maXJzdFJlcXVlc3QudXJsKCkuaG9zdCgpKTsKKyAgICBt
X3NzbFZlcmlmaWVyLnNldFNzbEN0eChzc2xDdHgpOworCisgICAgcmV0dXJuIENVUkxFX09LOwor
fQorCiAvKgogKiBUaGlzIGlzIGJlaW5nIGNhbGxlZCBmb3IgZWFjaCBIVFRQIGhlYWRlciBpbiB0
aGUgcmVzcG9uc2UuIFRoaXMgaW5jbHVkZXMgJ1xyXG4nCiAqIGZvciB0aGUgbGFzdCBsaW5lIG9m
IHRoZSBoZWFkZXIuCkBAIC04NTYsNiArODY1LDExIEBAIHNpemVfdCBSZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZTo6d2lsbFNlbmREYXRhKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJsb2NrU2l6ZSwK
ICAgICByZXR1cm4gbV9zZW5kQnl0ZXM7CiB9CiAKK0NVUkxjb2RlIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlOjp3aWxsU2V0dXBTc2xDdHhDYWxsYmFjayhDVVJMKiwgdm9pZCogc3NsQ3R4LCB2
b2lkKiB1c2VyRGF0YSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGVD
dXJsRGVsZWdhdGUqPih1c2VyRGF0YSktPndpbGxTZXR1cFNzbEN0eChzc2xDdHgpOworfQorCiBz
aXplX3QgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRpZFJlY2VpdmVIZWFkZXJDYWxsYmFj
ayhjaGFyKiBwdHIsIHNpemVfdCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2Nrcywgdm9p
ZCogZGF0YSkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGUqPihjb25zdF9jYXN0PHZvaWQqPihkYXRhKSktPmRpZFJlY2VpdmVIZWFkZXIoU3RyaW5n
KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCBibG9ja1NpemUgKiBudW1iZXJPZkJsb2Nr
cykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuaAppbmRleCAxNjdhMzc4YzE5Ny4u
N2ZlMmUwOTAyMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oCkBAIC0zMSwx
MCArMzEsMTAgQEAKICNpbmNsdWRlICJDcmVkZW50aWFsLmgiCiAjaW5jbHVkZSAiQ3VybENvbnRl
eHQuaCIKICNpbmNsdWRlICJDdXJsSm9iTWFuYWdlci5oIgorI2luY2x1ZGUgIkN1cmxTU0xWZXJp
Zmllci5oIgogI2luY2x1ZGUgIkZvcm1EYXRhU3RyZWFtQ3VybC5oIgogI2luY2x1ZGUgIlJlc291
cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJT
U0xIYW5kbGUuaCIKICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKQEAgLTkzLDEwICs5MywxMiBAQCBwcml2YXRlOgogICAg
IHZvaWQgYXBwbHlBdXRoZW50aWNhdGlvbigpOwogICAgIE5ldHdvcmtMb2FkTWV0cmljcyBnZXRO
ZXR3b3JrTG9hZE1ldHJpY3MoKTsKIAorICAgIENVUkxjb2RlIHdpbGxTZXR1cFNzbEN0eCh2b2lk
Kik7CiAgICAgc2l6ZV90IGRpZFJlY2VpdmVIZWFkZXIoU3RyaW5nJiYpOwogICAgIHNpemVfdCBk
aWRSZWNlaXZlRGF0YShUaHJlYWRTYWZlRGF0YUJ1ZmZlcik7CiAgICAgc2l6ZV90IHdpbGxTZW5k
RGF0YShjaGFyKiwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzKTsKIAor
ICAgIHN0YXRpYyBDVVJMY29kZSB3aWxsU2V0dXBTc2xDdHhDYWxsYmFjayhDVVJMKiwgdm9pZCos
IHZvaWQqKTsKICAgICBzdGF0aWMgc2l6ZV90IGRpZFJlY2VpdmVIZWFkZXJDYWxsYmFjayhjaGFy
Kiwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKik7CiAgICAg
c3RhdGljIHNpemVfdCBkaWRSZWNlaXZlRGF0YUNhbGxiYWNrKGNoYXIqLCBzaXplX3QgYmxvY2tT
aXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MsIHZvaWQqKTsKICAgICBzdGF0aWMgc2l6ZV90IHdp
bGxTZW5kRGF0YUNhbGxiYWNrKGNoYXIqLCBzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVtYmVy
T2ZCbG9ja3MsIHZvaWQqKTsKQEAgLTExNCwxMSArMTE2LDExIEBAIHByaXZhdGU6CiAgICAgU3Ry
aW5nIG1fdXNlcjsKICAgICBTdHJpbmcgbV9wYXNzOwogICAgIENyZWRlbnRpYWwgbV9pbml0aWFs
Q3JlZGVudGlhbDsKLSAgICBzdGQ6Om9wdGlvbmFsPENsaWVudENlcnRpZmljYXRlPiBtX3NzbENs
aWVudENlcnRpZmljYXRlOwogICAgIGJvb2wgbV9kZWZlcnNMb2FkaW5nOwogICAgIGJvb2wgbV9h
ZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgeyBmYWxzZSB9OwogICAgIFZlY3RvcjxjaGFyPiBt
X3Bvc3RCeXRlczsKICAgICBDdXJsSGFuZGxlIG1fY3VybEhhbmRsZTsKKyAgICBDdXJsU1NMVmVy
aWZpZXIgbV9zc2xWZXJpZmllcjsKICAgICAvLyBVc2VkIGJ5IGJvdGggdGhyZWFkcy4KICAgICBD
b25kaXRpb24gbV93b3JrZXJUaHJlYWRDb25kaXRpb25WYXJpYWJsZTsKICAgICBMb2NrIG1fd29y
a2VyVGhyZWFkTXV0ZXg7Cg==
</data>
<flag name="review"
          id="341010"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320967</attachid>
            <date>2017-09-15 15:06:33 -0700</date>
            <delta_ts>2017-09-18 08:41:18 -0700</delta_ts>
            <desc>fixed</desc>
            <filename>176910-5.diff</filename>
            <type>text/plain</type>
            <size>41333</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYTA3M2ExZWE1ZS4uNDI0NzRjNGVmODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NiBAQAorMjAxNy0wOS0xNSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIENyZWF0ZSBjbGFzc2VzIGRlZGljYXRlZCB0byBoYW5k
bGUgU1NMIHJlbGF0ZWQgdGFza3MKKyAgICAgICAgYW5kIHNlcGFyYXRlIHZlcmlmaWVyIGFuZCBj
ZXJ0aWZpY2F0ZSBtYW5hZ2VtZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc2OTEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9DdXJsLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29u
dGV4dDo6Q3VybENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6c2V0Q0FD
ZXJ0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjZXJ0aWZpY2F0ZVBhdGgpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6ZW5hYmxlQ0FJbmZvSWZFeGlzdHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6c2V0U3NsRXJyb3JzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmdldFNzbEVycm9ycyk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsQ29udGV4dDo6c3NsSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxDb250ZXh0OjpnZXRDZXJ0aWZpY2F0ZVBhdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q3VybENvbnRleHQ6OnNob3VsZElnbm9yZVNTTEVycm9ycyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OnNldHVwUmVxdWVzdCk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xIYW5kbGUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxTU0xIYW5kbGU6OkN1cmxTU0xIYW5kbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybFNTTEhhbmRsZTo6Z2V0Q0FDZXJ0UGF0aEVudik6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsU1NMSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsU1NMSGFuZGxlOjppc0FsbG93ZWRIVFRQU0NlcnRpZmljYXRlSG9zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMSGFuZGxlOjpjYW5JZ25vcmVkSFRUUFNDZXJ0aWZp
Y2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZp
Y2F0ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTEhhbmRsZTo6Z2V0U1NMQ2xpZW50
Q2VydGlmaWNhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMSGFu
ZGxlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U1NMSGFuZGxlLmguCisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMSGFuZGxlOjpzaG91bGRJZ25v
cmVTU0xFcnJvcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTEhhbmRsZTo6Z2V0
Q0FDZXJ0UGF0aCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxT
U0xWZXJpZmllci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvU1NMSGFuZGxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xWZXJpZmll
cjo6c2V0U3NsQ3R4KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xWZXJpZmllcjo6Y2VydFZl
cmlmeUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xWZXJpZmllcjo6Z2V0UGVt
RGF0YUZyb21DdHgpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjpjb252ZXJ0
VG9TU0xDZXJ0aWZpY2F0ZUZsYWdzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybFNTTFZlcmlmaWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlm
aWVyOjpzZXRDdXJsSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xWZXJpZmllcjo6
c2V0SG9zdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjpzc2xFcnJv
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldEhvc3RBbGxvd3NBbnlI
VFRQU0NlcnRpZmljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRD
bGllbnRDZXJ0aWZpY2F0ZUluZm8pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldHVwUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6bm90aWZ5RmFpbCk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6d2lsbFNldHVw
U3NsQ3R4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjp3
aWxsU2V0dXBTc2xDdHhDYWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmg6CisKIDIwMTctMDktMTUgIEpGIEJhc3RpZW4g
IDxqZmJhc3RpZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdURjogdXNlIEZvcndhcmQuaCB3aGVu
IGFwcHJvcHJpYXRlIGluc3RlYWQgb2YgVmVjdG9yLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0N1cmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNt
YWtlCmluZGV4IGJjMTIyMzkxOWU3Li5mMmY2MzA4ZWY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
dXJsLmNtYWtlCkBAIC0xMCw2ICsxMCw4IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsSm9iTWFuYWdlci5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTEhhbmRs
ZS5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9ETlNDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9Gb3JtRGF0YVN0cmVhbUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL011
bHRpcGFydEhhbmRsZS5jcHAKQEAgLTE3LDcgKzE5LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3Bw
CiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVzcG9uc2VDdXJsLmNwcAotICAg
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9TU0xIYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9TeW5jaHJvbm91c0xvYWRlckNsaWVudEN1cmwuY3BwCiApCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcAppbmRleCA4
ZTU5NjJkN2Y4NC4uMGY1ZDQ4ZDc2ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcApAQCAtMzksMzUgKzM5LDEwIEBACiAj
aW5jbHVkZSA8c2hsd2FwaS5oPgogI2VuZGlmCiAKLSNpZiBVU0UoQ0YpCi0jaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBDU3RyaW5nIGNlcnRpZmljYXRlUGF0aCgpCi17Ci0g
ICAgY2hhciogZW52UGF0aCA9IGdldGVudigiQ1VSTF9DQV9CVU5ETEVfUEFUSCIpOwotICAgIGlm
IChlbnZQYXRoKQotICAgICAgICByZXR1cm4gZW52UGF0aDsKLQotI2lmIFVTRShDRikKLSAgICBD
RkJ1bmRsZVJlZiB3ZWJLaXRCdW5kbGVSZWYgPSB3ZWJLaXRCdW5kbGUoKTsKLSAgICBpZiAod2Vi
S2l0QnVuZGxlUmVmKSB7Ci0gICAgICAgIFJldGFpblB0cjxDRlVSTFJlZj4gY2VydFVSTFJlZiA9
IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwod2ViS2l0QnVuZGxlUmVmLCBDRlNUUigi
Y2FjZXJ0IiksIENGU1RSKCJwZW0iKSwgQ0ZTVFIoImNlcnRpZmljYXRlcyIpKSk7Ci0gICAgICAg
IGlmIChjZXJ0VVJMUmVmKSB7Ci0gICAgICAgICAgICBjaGFyIHBhdGhbTUFYX1BBVEhdOwotICAg
ICAgICAgICAgQ0ZVUkxHZXRGaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY2VydFVSTFJlZi5nZXQo
KSwgZmFsc2UsIHJlaW50ZXJwcmV0X2Nhc3Q8VUludDgqPihwYXRoKSwgTUFYX1BBVEgpOwotICAg
ICAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIHJl
dHVybiBDU3RyaW5nKCk7Ci19Ci0KIHN0YXRpYyBDU3RyaW5nIGNvb2tpZUphclBhdGgoKQogewog
ICAgIGNoYXIqIGNvb2tpZUphclBhdGggPSBnZXRlbnYoIkNVUkxfQ09PS0lFX0pBUl9QQVRIIik7
CkBAIC0xMDYsMTMgKzgxLDEwIEBAIGNvbnN0IGNoYXIqIGNvbnN0IEN1cmxDb250ZXh0OjplcnJv
ckRvbWFpbiA9ICJDdXJsRXJyb3JEb21haW4iOwogCiBDdXJsQ29udGV4dDo6Q3VybENvbnRleHQo
KQogOiBtX2Nvb2tpZUphckZpbGVOYW1lIHsgY29va2llSmFyUGF0aCgpIH0KLSwgbV9jZXJ0aWZp
Y2F0ZVBhdGggeyBjZXJ0aWZpY2F0ZVBhdGgoKSB9CiAsIG1fY29va2llSmFyIHsgc3RkOjptYWtl
X3VuaXF1ZTxDb29raWVKYXJDdXJsRmlsZVN5c3RlbT4oKSB9CiB7CiAgICAgaW5pdENvb2tpZVNl
c3Npb24oKTsKIAotICAgIG1faWdub3JlU1NMRXJyb3JzID0gZ2V0ZW52KCJXRUJLSVRfSUdOT1JF
X1NTTF9FUlJPUlMiKTsKLQogI2lmbmRlZiBOREVCVUcKICAgICBtX3ZlcmJvc2UgPSBnZXRlbnYo
IkRFQlVHX0NVUkwiKTsKIApAQCAtNDY5LDExICs0NDEsMTAgQEAgdm9pZCBDdXJsSGFuZGxlOjpz
ZXRIdHRwQXV0aFVzZXJQYXNzKGNvbnN0IFN0cmluZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNz
d29yZCkKICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1VTRVJQV0QsIHVz
ZXJwYXNzLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEN1cmxIYW5kbGU6OmVuYWJsZUNBSW5m
b0lmRXhpc3RzKCkKK3ZvaWQgQ3VybEhhbmRsZTo6c2V0Q0FDZXJ0UGF0aChjb25zdCBjaGFyKiBw
YXRoKQogewotICAgIGNvbnN0IGNoYXIqIGNlcnRQYXRoID0gQ3VybENvbnRleHQ6OnNpbmdsZXRv
bigpLmdldENlcnRpZmljYXRlUGF0aCgpOwotICAgIGlmIChjZXJ0UGF0aCkKLSAgICAgICAgY3Vy
bF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9DQUlORk8sIGNlcnRQYXRoKTsKKyAgICBp
ZiAocGF0aCkKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9DQUlO
Rk8sIHBhdGgpOwogfQogCiB2b2lkIEN1cmxIYW5kbGU6OnNldFNzbFZlcmlmeVBlZXIoVmVyaWZ5
UGVlciB2ZXJpZnlQZWVyKQpAQCAtNTAxLDE2ICs0NzIsNiBAQCB2b2lkIEN1cmxIYW5kbGU6OnNl
dFNzbEtleVBhc3N3b3JkKGNvbnN0IGNoYXIqIHBhc3N3b3JkKQogICAgIGN1cmxfZWFzeV9zZXRv
cHQobV9oYW5kbGUsIENVUkxPUFRfS0VZUEFTU1dELCBwYXNzd29yZCk7CiB9CiAKLXZvaWQgQ3Vy
bEhhbmRsZTo6c2V0U3NsRXJyb3JzKHVuc2lnbmVkIHNzbEVycm9ycykKLXsKLSAgICBtX3NzbEVy
cm9ycyA9IHNzbEVycm9yczsKLX0KLQotdW5zaWduZWQgQ3VybEhhbmRsZTo6Z2V0U3NsRXJyb3Jz
KCkKLXsKLSAgICByZXR1cm4gbV9zc2xFcnJvcnM7Ci19Ci0KIHZvaWQgQ3VybEhhbmRsZTo6ZW5h
YmxlQ29va2llSmFySWZFeGlzdHMoKQogewogICAgIGNvbnN0IGNoYXIqIGNvb2tpZUphciA9IEN1
cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRDb29raWVKYXJGaWxlTmFtZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaAppbmRleCAy
YjI2ZGRiZThkNi4uMTRlOThhMDFiMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkNvb2tpZUphckN1cmwuaCIKKyNpbmNsdWRlICJDdXJsU1NMSGFu
ZGxlLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAKICNpbmNsdWRlIDx3dGYvTG9jay5oPgpAQCAtMTIw
LDE1ICsxMjEsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q29va2llSmFyRmlsZU5hbWUoY29u
c3QgY2hhciogY29va2llSmFyRmlsZU5hbWUpIHsgbV9jb29raWVKYXJGaWxlTmFtZSA9IENTdHJp
bmcoY29va2llSmFyRmlsZU5hbWUpOyB9CiAgICAgQ29va2llSmFyQ3VybCYgY29va2llSmFyKCkg
eyByZXR1cm4gKm1fY29va2llSmFyOyB9CiAKLSAgICAvLyBDZXJ0aWZpY2F0ZQotICAgIGNvbnN0
IGNoYXIqIGdldENlcnRpZmljYXRlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2VydGlmaWNhdGVQ
YXRoLmRhdGEoKTsgfQotICAgIGJvb2wgc2hvdWxkSWdub3JlU1NMRXJyb3JzKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZ25vcmVTU0xFcnJvcnM7IH0KLQogICAgIC8vIFByb3h5CiAgICAgY29uc3QgUHJv
eHlJbmZvJiBwcm94eUluZm8oKSBjb25zdCB7IHJldHVybiBtX3Byb3h5OyB9CiAgICAgdm9pZCBz
ZXRQcm94eUluZm8oY29uc3QgUHJveHlJbmZvJiBpbmZvKSB7IG1fcHJveHkgPSBpbmZvOyAgfQog
ICAgIHZvaWQgc2V0UHJveHlJbmZvKGNvbnN0IFN0cmluZyYgaG9zdCA9IGVtcHR5U3RyaW5nKCks
IHVuc2lnbmVkIGxvbmcgcG9ydCA9IDAsIEN1cmxQcm94eVR5cGUgPSBDdXJsUHJveHlUeXBlOjpI
VFRQLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lID0gZW1wdHlTdHJpbmcoKSwgY29uc3QgU3RyaW5n
JiBwYXNzd29yZCA9IGVtcHR5U3RyaW5nKCkpOwogCisgICAgLy8gU1NMCisgICAgQ3VybFNTTEhh
bmRsZSYgc3NsSGFuZGxlKCkgeyByZXR1cm4gbV9zc2xIYW5kbGU7IH0KKwogI2lmbmRlZiBOREVC
VUcKICAgICBGSUxFKiBnZXRMb2dGaWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb2dGaWxlOyB9CiAg
ICAgYm9vbCBpc1ZlcmJvc2UoKSBjb25zdCB7IHJldHVybiBtX3ZlcmJvc2U7IH0KQEAgLTEzNywx
MCArMTM3LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBQcm94eUluZm8gbV9wcm94eTsKICAg
ICBDU3RyaW5nIG1fY29va2llSmFyRmlsZU5hbWU7Ci0gICAgQ1N0cmluZyBtX2NlcnRpZmljYXRl
UGF0aDsKICAgICBDdXJsU2hhcmVIYW5kbGUgbV9zaGFyZUhhbmRsZTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29va2llSmFyQ3VybD4gbV9jb29raWVKYXI7Ci0gICAgYm9vbCBtX2lnbm9yZVNTTEVy
cm9ycyB7IGZhbHNlIH07CisgICAgQ3VybFNTTEhhbmRsZSBtX3NzbEhhbmRsZTsKIAogICAgIEN1
cmxDb250ZXh0KCk7CiAgICAgdm9pZCBpbml0Q29va2llU2Vzc2lvbigpOwpAQCAtMjYzLDE0ICsy
NjIsMTIgQEAgcHVibGljOgogICAgIHZvaWQgZW5hYmxlSHR0cEF1dGhlbnRpY2F0aW9uKGxvbmcp
OwogICAgIHZvaWQgc2V0SHR0cEF1dGhVc2VyUGFzcyhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKTsKIAotICAgIHZvaWQgZW5hYmxlQ0FJbmZvSWZFeGlzdHMoKTsKKyAgICB2b2lkIHNldENB
Q2VydFBhdGgoY29uc3QgY2hhciopOwogICAgIHZvaWQgc2V0U3NsVmVyaWZ5UGVlcihWZXJpZnlQ
ZWVyKTsKICAgICB2b2lkIHNldFNzbFZlcmlmeUhvc3QoVmVyaWZ5SG9zdCk7CiAgICAgdm9pZCBz
ZXRTc2xDZXJ0KGNvbnN0IGNoYXIqKTsKICAgICB2b2lkIHNldFNzbENlcnRUeXBlKGNvbnN0IGNo
YXIqKTsKICAgICB2b2lkIHNldFNzbEtleVBhc3N3b3JkKGNvbnN0IGNoYXIqKTsKLSAgICB2b2lk
IHNldFNzbEVycm9ycyh1bnNpZ25lZCk7Ci0gICAgdW5zaWduZWQgZ2V0U3NsRXJyb3JzKCk7CiAK
ICAgICB2b2lkIGVuYWJsZUNvb2tpZUphcklmRXhpc3RzKCk7CiAgICAgdm9pZCBzZXRDb29raWVM
aXN0KGNvbnN0IGNoYXIqKTsKQEAgLTMwOSw3ICszMDYsNiBAQCBwcml2YXRlOgogICAgIENVUkwq
IG1faGFuZGxlIHsgbnVsbHB0ciB9OwogICAgIGNoYXIgbV9lcnJvckJ1ZmZlcltDVVJMX0VSUk9S
X1NJWkVdIHsgfTsKICAgICBDVVJMY29kZSBtX2Vycm9yQ29kZTsKLSAgICB1bnNpZ25lZCBtX3Nz
bEVycm9ycyB7IDAgfTsKIAogICAgIGNoYXIqIG1fdXJsIHsgbnVsbHB0ciB9OwogICAgIHZvaWQq
IG1fcHJpdmF0ZURhdGEgeyBudWxscHRyIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCmluZGV4IDVmNWUzZTQ0ZWZkLi5i
YmY0ZGExOWNmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxEb3dubG9hZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBVU0UoQ1VSTCkK
IAogI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCisjaW5jbHVkZSAiQ3VybFNTTEhhbmRsZS5oIgog
I2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC0xMTksNyArMTIwLDggQEAgdm9pZCBDdXJs
RG93bmxvYWQ6OnNldHVwUmVxdWVzdCgpCiAgICAgbV9jdXJsSGFuZGxlLnNldFdyaXRlQ2FsbGJh
Y2tGdW5jdGlvbih3cml0ZUNhbGxiYWNrLCB0aGlzKTsKICAgICBtX2N1cmxIYW5kbGUuZW5hYmxl
Rm9sbG93TG9jYXRpb24oKTsKICAgICBtX2N1cmxIYW5kbGUuZW5hYmxlSHR0cEF1dGhlbnRpY2F0
aW9uKENVUkxBVVRIX0FOWSk7Ci0gICAgbV9jdXJsSGFuZGxlLmVuYWJsZUNBSW5mb0lmRXhpc3Rz
KCk7CisgICAgbV9jdXJsSGFuZGxlLnNldENBQ2VydFBhdGgoQ3VybENvbnRleHQ6OnNpbmdsZXRv
bigpLnNzbEhhbmRsZSgpLmdldENBQ2VydFBhdGgoKSk7CisKIH0KIAogdm9pZCBDdXJsRG93bmxv
YWQ6Om5vdGlmeUZpbmlzaCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybFNTTEhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybFNTTEhhbmRsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjNjN2ZkMjA1NDhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xIYW5kbGUuY3BwCkBAIC0wLDAgKzEsMTI1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkN1cmxTU0xIYW5kbGUuaCIKKworI2lmIFVTRShDVVJMKQorCisjaWYg
VVNFKENGKQorI2lmIE9TKFdJTkRPV1MpCisjaW5jbHVkZSAiV2ViQ29yZUJ1bmRsZVdpbi5oIgor
I2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitDdXJsU1NMSGFuZGxlOjpDdXJsU1NMSGFuZGxlKCkKKyAgICA6IG1fY2FD
ZXJ0UGF0aChnZXRDQUNlcnRQYXRoRW52KCkpCit7CisgICAgY2hhciogaWdub3JlU1NMRXJyb3Jz
ID0gZ2V0ZW52KCJXRUJLSVRfSUdOT1JFX1NTTF9FUlJPUlMiKTsKKyAgICBpZiAoaWdub3JlU1NM
RXJyb3JzKQorICAgICAgICBtX2lnbm9yZVNTTEVycm9ycyA9IHRydWU7Cit9CisKK0NTdHJpbmcg
Q3VybFNTTEhhbmRsZTo6Z2V0Q0FDZXJ0UGF0aEVudigpCit7CisgICAgY2hhciogZW52UGF0aCA9
IGdldGVudigiQ1VSTF9DQV9CVU5ETEVfUEFUSCIpOworICAgIGlmIChlbnZQYXRoKQorICAgICAg
ICByZXR1cm4gZW52UGF0aDsKKworI2lmIFVTRShDRikKKyAgICBDRkJ1bmRsZVJlZiB3ZWJLaXRC
dW5kbGVSZWYgPSB3ZWJLaXRCdW5kbGUoKTsKKyAgICBpZiAod2ViS2l0QnVuZGxlUmVmKSB7Cisg
ICAgICAgIFJldGFpblB0cjxDRlVSTFJlZj4gY2VydFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVD
b3B5UmVzb3VyY2VVUkwod2ViS2l0QnVuZGxlUmVmLCBDRlNUUigiY2FjZXJ0IiksIENGU1RSKCJw
ZW0iKSwgQ0ZTVFIoImNlcnRpZmljYXRlcyIpKSk7CisgICAgICAgIGlmIChjZXJ0VVJMUmVmKSB7
CisgICAgICAgICAgICBjaGFyIHBhdGhbTUFYX1BBVEhdOworICAgICAgICAgICAgQ0ZVUkxHZXRG
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY2VydFVSTFJlZi5nZXQoKSwgZmFsc2UsIHJlaW50ZXJw
cmV0X2Nhc3Q8VUludDgqPihwYXRoKSwgTUFYX1BBVEgpOworICAgICAgICAgICAgcmV0dXJuIHBh
dGg7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBDU3RyaW5nKCk7Cit9
CisKK3ZvaWQgQ3VybFNTTEhhbmRsZTo6c2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUo
Y29uc3QgU3RyaW5nJiBob3N0TmFtZSkKK3sKKyAgICBMb2NrSG9sZGVyIG11dGV4KG1fbXV0ZXgp
OworCisgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBjZXJ0aWZpY2F0ZXM7CisgICAgbV9hbGxvd2Vk
SG9zdHMuc2V0KGhvc3ROYW1lLCBjZXJ0aWZpY2F0ZXMpOworfQorCitib29sIEN1cmxTU0xIYW5k
bGU6OmlzQWxsb3dlZEhUVFBTQ2VydGlmaWNhdGVIb3N0KGNvbnN0IFN0cmluZyYgaG9zdE5hbWUp
Cit7CisgICAgTG9ja0hvbGRlciBtdXRleChtX211dGV4KTsKKworICAgIGF1dG8gaXQgPSBtX2Fs
bG93ZWRIb3N0cy5maW5kKGhvc3ROYW1lKTsKKyAgICByZXR1cm4gKGl0ICE9IG1fYWxsb3dlZEhv
c3RzLmVuZCgpKTsKK30KKworYm9vbCBDdXJsU1NMSGFuZGxlOjpjYW5JZ25vcmVkSFRUUFNDZXJ0
aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3ROYW1lLCBjb25zdCBMaXN0SGFzaFNldDxTdHJpbmc+
JiBjZXJ0aWZpY2F0ZXMpCit7CisgICAgTG9ja0hvbGRlciBtdXRleChtX211dGV4KTsKKworICAg
IGF1dG8gZm91bmQgPSBtX2FsbG93ZWRIb3N0cy5maW5kKGhvc3ROYW1lKTsKKyAgICBpZiAoZm91
bmQgPT0gbV9hbGxvd2VkSG9zdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8mIHZhbHVlID0gZm91bmQtPnZhbHVlOworICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgdmFsdWUgPSBjZXJ0aWZpY2F0ZXM7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBzdGQ6OmVxdWFsKGNlcnRpZmljYXRlcy5iZWdpbigpLCBjZXJ0aWZp
Y2F0ZXMuZW5kKCksIHZhbHVlLmJlZ2luKCkpOworfQorCit2b2lkIEN1cmxTU0xIYW5kbGU6OnNl
dENsaWVudENlcnRpZmljYXRlSW5mbyhjb25zdCBTdHJpbmcmIGhvc3ROYW1lLCBjb25zdCBTdHJp
bmcmIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGtleSkKK3sKKyAgICBMb2NrSG9sZGVyIG11
dGV4KG1fbXV0ZXgpOworCisgICAgQ2xpZW50Q2VydGlmaWNhdGUgY2xpZW50SW5mbyhjZXJ0aWZp
Y2F0ZSwga2V5KTsKKyAgICBtX2FsbG93ZWRDbGllbnRIb3N0cy5zZXQoaG9zdE5hbWUsIGNsaWVu
dEluZm8pOworfQorCitzdGQ6Om9wdGlvbmFsPEN1cmxTU0xIYW5kbGU6OkNsaWVudENlcnRpZmlj
YXRlPiBDdXJsU1NMSGFuZGxlOjpnZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcm
IGhvc3ROYW1lKQoreworICAgIExvY2tIb2xkZXIgbXV0ZXgobV9tdXRleCk7CisKKyAgICBhdXRv
IGl0ID0gbV9hbGxvd2VkQ2xpZW50SG9zdHMuZmluZChob3N0TmFtZSk7CisgICAgaWYgKGl0ID09
IG1fYWxsb3dlZENsaWVudEhvc3RzLmVuZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgcmV0dXJuIGl0LT52YWx1ZTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9TU0xIYW5kbGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMSGFuZGxlLmgKc2ltaWxhcml0
eSBpbmRleCA1MiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NTTEhhbmRsZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybFNTTEhhbmRsZS5oCmluZGV4IDZiMjk0NTUwZTk2Li40ZmUwMDVhZTJhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMSGFuZGxl
LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkg
b2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMzUgKzI0
LDQ5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgU1NMSGFuZGxlX2gKLSNkZWZp
bmUgU1NMSGFuZGxlX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUu
aCIKKyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZW5kaWYKIAotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ3VybEhhbmRsZTsKK2NsYXNzIEN1
cmxTU0xIYW5kbGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cmxTU0xIYW5kbGUpOwor
ICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxDdXJsU1NMSGFuZGxlPjsKIAotdHlwZWRlZiBlbnVt
IHsKLSAgICBTU0xfQ0VSVElGSUNBVEVfVU5LTk9XTl9DQSA9ICgxIDw8IDApLCAvLyBUaGUgc2ln
bmluZyBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkgaXMgbm90IGtub3duLgotICAgIFNTTF9DRVJUSUZJ
Q0FURV9CQURfSURFTlRJVFkgPSAoMSA8PCAxKSwgLy8gVGhlIGNlcnRpZmljYXRlIGRvZXMgbm90
IG1hdGNoIHRoZSBleHBlY3RlZCBpZGVudGl0eSBvZiB0aGUgc2l0ZSB0aGF0IGl0IHdhcyByZXRy
aWV2ZWQgZnJvbS4KLSAgICBTU0xfQ0VSVElGSUNBVEVfTk9UX0FDVElWQVRFRCA9ICgxIDw8IDIp
LCAvLyBUaGUgY2VydGlmaWNhdGUncyBhY3RpdmF0aW9uIHRpbWUgaXMgc3RpbGwgaW4gdGhlIGZ1
dHVyZQotICAgIFNTTF9DRVJUSUZJQ0FURV9FWFBJUkVEID0gKDEgPDwgMyksIC8vIFRoZSBjZXJ0
aWZpY2F0ZSBoYXMgZXhwaXJlZAotICAgIFNTTF9DRVJUSUZJQ0FURV9SRVZPS0VEID0gKDEgPDwg
NCksIC8vIFRoZSBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiByZXZva2VkCi0gICAgU1NMX0NFUlRJRklD
QVRFX0lOU0VDVVJFID0gKDEgPDwgNSksIC8vIFRoZSBjZXJ0aWZpY2F0ZSdzIGFsZ29yaXRobSBp
cyBjb25zaWRlcmVkIGluc2VjdXJlLgotICAgIFNTTF9DRVJUSUZJQ0FURV9HRU5FUklDX0VSUk9S
ID0gKDEgPDwgNikgLy8gU29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCB2YWxpZGF0aW5nIHRoZSBj
ZXJ0aWZpY2F0ZQotfSBTU0xDZXJ0aWZpY2F0ZUZsYWdzOworcHVibGljOgorICAgIEN1cmxTU0xI
YW5kbGUoKTsKIAotdHlwZWRlZiBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IENsaWVudENlcnRp
ZmljYXRlOworICAgIHVzaW5nIENsaWVudENlcnRpZmljYXRlID0gc3RkOjpwYWlyPFN0cmluZywg
U3RyaW5nPjsKIAotdm9pZCBhZGRBbGxvd2VkQ2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7Ci12b2lkIGFsbG93c0FueUhUVFBTQ2Vy
dGlmaWNhdGVIb3N0cyhjb25zdCBTdHJpbmcmKTsKLWJvb2wgc3NsSWdub3JlSFRUUFNDZXJ0aWZp
Y2F0ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKLXN0ZDo6b3B0aW9uYWw8Q2xpZW50
Q2VydGlmaWNhdGU+IGdldFNTTENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYpOwotdm9p
ZCBzZXRTU0xWZXJpZnlPcHRpb25zKEN1cmxIYW5kbGUmKTsKKyAgICBib29sIHNob3VsZElnbm9y
ZVNTTEVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlU1NMRXJyb3JzOyB9CisgICAgY29u
c3QgY2hhciogZ2V0Q0FDZXJ0UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FDZXJ0UGF0aC5kYXRh
KCk7IH0KIAotfQorICAgIHZvaWQgc2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUoY29u
c3QgU3RyaW5nJik7CisgICAgYm9vbCBpc0FsbG93ZWRIVFRQU0NlcnRpZmljYXRlSG9zdChjb25z
dCBTdHJpbmcmKTsKKyAgICBib29sIGNhbklnbm9yZWRIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0
cmluZyYsIGNvbnN0IExpc3RIYXNoU2V0PFN0cmluZz4mKTsKIAotI2VuZGlmCisgICAgdm9pZCBz
ZXRDbGllbnRDZXJ0aWZpY2F0ZUluZm8oY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJik7CisgICAgc3RkOjpvcHRpb25hbDxDbGllbnRDZXJ0aWZpY2F0ZT4gZ2V0U1NM
Q2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgQ1N0cmlu
ZyBnZXRDQUNlcnRQYXRoRW52KCk7CisKKyAgICBib29sIG1faWdub3JlU1NMRXJyb3JzIHsgZmFs
c2UgfTsKKyAgICBDU3RyaW5nIG1fY2FDZXJ0UGF0aDsKKworICAgIExvY2sgbV9tdXRleDsKKyAg
ICBIYXNoTWFwPFN0cmluZywgTGlzdEhhc2hTZXQ8U3RyaW5nPiwgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPiBtX2FsbG93ZWRIb3N0czsKKyAgICBIYXNoTWFwPFN0cmluZywgQ2xpZW50Q2VydGlm
aWNhdGUsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9hbGxvd2VkQ2xpZW50SG9zdHM7Cit9
OworCisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9TU0xIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxTU0xWZXJpZmllci5jcHAKc2ltaWxhcml0eSBpbmRleCA3MiUKcmVuYW1lIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5jcHAKcmVuYW1lIHRvIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCmlu
ZGV4IDk2ZmFjY2U4ZWY5Li40YzFiMjIxYzYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NTTEhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsODMgKzI1LDEwMSBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXJsU1NMVmVyaWZpZXIuaCIKIAogI2lmIFVT
RShDVVJMKQotCi0jaW5jbHVkZSAiU1NMSGFuZGxlLmgiCi0KLSNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZUludGVybmFsLmgiCi0KLSNpbmNsdWRlIDxvcGVuc3NsL3BlbS5oPgotI2luY2x1ZGUgPG9w
ZW5zc2wvc3NsLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC94NTA5X3ZmeS5oPgotI2luY2x1ZGUgPHd0
Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgorI2luY2x1
ZGUgIkN1cmxTU0xIYW5kbGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSGFz
aE1hcDxTdHJpbmcsIExpc3RIYXNoU2V0PFN0cmluZz4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFz
aD4mIGFsbG93ZWRIb3N0cygpCit2b2lkIEN1cmxTU0xWZXJpZmllcjo6c2V0U3NsQ3R4KHZvaWQq
IHNzbEN0eCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIExp
c3RIYXNoU2V0PFN0cmluZz4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IG1hcDsKLSAgICBy
ZXR1cm4gbWFwOwotfQorICAgIGlmICghc3NsQ3R4KQorICAgICAgICByZXR1cm47CiAKLXN0YXRp
YyBIYXNoTWFwPFN0cmluZywgQ2xpZW50Q2VydGlmaWNhdGUsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4mIGFsbG93ZWRDbGllbnRIb3N0cygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhhc2hNYXA8U3RyaW5nLCBDbGllbnRDZXJ0aWZpY2F0ZSwgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoPj4gbWFwOwotICAgIHJldHVybiBtYXA7CisgICAgU1NMX0NUWF9zZXRfYXBwX2RhdGEoc3Rh
dGljX2Nhc3Q8U1NMX0NUWCo+KHNzbEN0eCksIHRoaXMpOworICAgIFNTTF9DVFhfc2V0X3Zlcmlm
eShzdGF0aWNfY2FzdDxTU0xfQ1RYKj4oc3NsQ3R4KSwgU1NMX1ZFUklGWV9QRUVSLCBjZXJ0VmVy
aWZ5Q2FsbGJhY2spOwogfQogCi12b2lkIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cyhj
b25zdCBTdHJpbmcmIGhvc3QpCitpbnQgQ3VybFNTTFZlcmlmaWVyOjpjZXJ0VmVyaWZ5Q2FsbGJh
Y2soaW50IG9rLCBYNTA5X1NUT1JFX0NUWCogc3RvcmVDdHgpCiB7CisgICAgLy8gd2hldGhlciB0
aGUgdmVyaWZpY2F0aW9uIG9mIHRoZSBjZXJ0aWZpY2F0ZSBpbiBxdWVzdGlvbiB3YXMgcGFzc2Vk
IChwcmV2ZXJpZnlfb2s9MSkgb3Igbm90IChwcmV2ZXJpZnlfb2s9MCkKKyAgICBpbnQgY2VydEVy
ckNkID0gWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yKHN0b3JlQ3R4KTsKKyAgICBpZiAoIWNlcnRF
cnJDZCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBTU0wqIHNzbCA9IHN0YXRpY19jYXN0PFNT
TCo+KFg1MDlfU1RPUkVfQ1RYX2dldF9leF9kYXRhKHN0b3JlQ3R4LCBTU0xfZ2V0X2V4X2RhdGFf
WDUwOV9TVE9SRV9DVFhfaWR4KCkpKTsKKyAgICBTU0xfQ1RYKiBzc2xDdHggPSBTU0xfZ2V0X1NT
TF9DVFgoc3NsKTsKKyAgICBDdXJsU1NMVmVyaWZpZXIqIHZlcmlmaWVyID0gc3RhdGljX2Nhc3Q8
Q3VybFNTTFZlcmlmaWVyKj4oU1NMX0NUWF9nZXRfYXBwX2RhdGEoc3NsQ3R4KSk7CisgICAgaWYg
KHZlcmlmaWVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHZlcmlmaWVyLT5tX3NzbEVycm9y
cyA9IHN0YXRpY19jYXN0PGludD4odmVyaWZpZXItPmNvbnZlcnRUb1NTTENlcnRpZmljYXRlRmxh
Z3MoY2VydEVyckNkKSk7CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIG9rID0gQ3VybENvbnRleHQ6
OnNpbmdsZXRvbigpLnNzbEhhbmRsZSgpLmlzQWxsb3dlZEhUVFBTQ2VydGlmaWNhdGVIb3N0KHZl
cmlmaWVyLT5tX2hvc3ROYW1lKTsKKyNlbHNlCiAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBjZXJ0
aWZpY2F0ZXM7Ci0gICAgYWxsb3dlZEhvc3RzKCkuc2V0KGhvc3QsIGNlcnRpZmljYXRlcyk7Ci19
CisgICAgaWYgKCFnZXRQZW1EYXRhRnJvbUN0eChzdG9yZUN0eCwgY2VydGlmaWNhdGVzKSkKKyAg
ICAgICAgcmV0dXJuIDA7CiAKLXZvaWQgYWRkQWxsb3dlZENsaWVudENlcnRpZmljYXRlKGNvbnN0
IFN0cmluZyYgaG9zdCwgY29uc3QgU3RyaW5nJiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBr
ZXkpCi17Ci0gICAgQ2xpZW50Q2VydGlmaWNhdGUgY2xpZW50SW5mbyB7IGNlcnRpZmljYXRlLCBr
ZXkgfTsKLSAgICBhbGxvd2VkQ2xpZW50SG9zdHMoKS5zZXQoaG9zdCwgY2xpZW50SW5mbyk7Ci19
CisgICAgb2sgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc3NsSGFuZGxlKCkuY2FuSWdub3Jl
ZEhUVFBTQ2VydGlmaWNhdGUodmVyaWZpZXItPm1faG9zdE5hbWUsIGNlcnRpZmljYXRlcyk7Cisj
ZW5kaWYKIAotc3RkOjpvcHRpb25hbDxDbGllbnRDZXJ0aWZpY2F0ZT4gZ2V0U1NMQ2xpZW50Q2Vy
dGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0KQotewotICAgIGF1dG8gaXQgPSBhbGxvd2VkQ2xp
ZW50SG9zdHMoKS5maW5kKGhvc3QpOwotICAgIGlmIChpdCA9PSBhbGxvd2VkQ2xpZW50SG9zdHMo
KS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAob2spIHsKKyAg
ICAgICAgLy8gaWYgdGhlIGhvc3QgYW5kIHRoZSBjZXJ0aWZpY2F0ZSBhcmUgc3RvcmVkIGZvciB0
aGUgY3VycmVudCBoYW5kbGUgdGhhdCBtZWFucyBpcyBlbmFibGVkLAorICAgICAgICAvLyBzbyBk
b24ndCBuZWVkIHRvIGN1cmwgdmVyaWZpZXMgdGhlIGF1dGhlbnRpY2l0eSBvZiB0aGUgcGVlcidz
IGNlcnRpZmljYXRlCisgICAgICAgIGlmICh2ZXJpZmllci0+bV9jdXJsSGFuZGxlKQorICAgICAg
ICAgICAgdmVyaWZpZXItPm1fY3VybEhhbmRsZS0+c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxl
OjpWZXJpZnlQZWVyRGlzYWJsZSk7CisgICAgfQogCi0gICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAg
ICByZXR1cm4gb2s7CiB9CiAKLWJvb2wgc3NsSWdub3JlSFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBT
dHJpbmcmIGhvc3QsIGNvbnN0IExpc3RIYXNoU2V0PFN0cmluZz4mIGNlcnRpZmljYXRlcykKKyNp
ZiAhT1MoV0lORE9XUykKKworYm9vbCBDdXJsU1NMVmVyaWZpZXI6OmdldFBlbURhdGFGcm9tQ3R4
KFg1MDlfU1RPUkVfQ1RYKiBjdHgsIExpc3RIYXNoU2V0PFN0cmluZz4mIGNlcnRpZmljYXRlcykK
IHsKLSAgICBhdXRvIGl0ID0gYWxsb3dlZEhvc3RzKCkuZmluZChob3N0KTsKLSAgICBpZiAoaXQg
IT0gYWxsb3dlZEhvc3RzKCkuZW5kKCkpIHsKLSAgICAgICAgaWYgKChpdC0+dmFsdWUpLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgaXQtPnZhbHVlID0gY2VydGlmaWNhdGVzOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgYm9vbCBvayA9IHRydWU7CisgICAgU1RBQ0tfT0YoWDUwOSkq
IGNlcnRzID0gWDUwOV9TVE9SRV9DVFhfZ2V0MV9jaGFpbihjdHgpOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2tfWDUwOV9udW0oY2VydHMpOyBpKyspIHsKKyAgICAgICAgWDUwOSogdUNlcnQg
PSBza19YNTA5X3ZhbHVlKGNlcnRzLCBpKTsKKyAgICAgICAgQklPKiBiaW8gPSBCSU9fbmV3KEJJ
T19zX21lbSgpKTsKKyAgICAgICAgaW50IHJlcyA9IFBFTV93cml0ZV9iaW9fWDUwOShiaW8sIHVD
ZXJ0KTsKKyAgICAgICAgaWYgKCFyZXMpIHsKKyAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAg
ICAgICAgICBCSU9fZnJlZShiaW8pOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKGNlcnRpZmljYXRlcy5zaXplKCkgIT0gaXQtPnZhbHVlLnNpemUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byBjZXJ0c0l0ZXIgPSBjZXJ0aWZpY2F0
ZXMuYmVnaW4oKTsKLSAgICAgICAgYXV0byB2YWx1ZUl0ZXIgPSAoaXQtPnZhbHVlKS5iZWdpbigp
OwotICAgICAgICBmb3IgKDsgdmFsdWVJdGVyICE9IChpdC0+dmFsdWUpLmVuZCgpOyArK3ZhbHVl
SXRlciwgKytjZXJ0c0l0ZXIpIHsKLSAgICAgICAgICAgIGlmICgqY2VydHNJdGVyICE9ICp2YWx1
ZUl0ZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHVuc2lnbmVk
IGNoYXIqIGNlcnRpZmljYXRlRGF0YTsKKyAgICAgICAgbG9uZyBsZW5ndGggPSBCSU9fZ2V0X21l
bV9kYXRhKGJpbywgJmNlcnRpZmljYXRlRGF0YSk7CisgICAgICAgIGlmIChsZW5ndGggPCAwKSB7
CisgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgQklPX2ZyZWUoYmlvKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICAgIGNlcnRpZmljYXRlRGF0YVtsZW5ndGhdID0gJ1wwJzsKKyAgICAgICAgU3RyaW5nIGNlcnRp
ZmljYXRlID0gY2VydGlmaWNhdGVEYXRhOworICAgICAgICBjZXJ0aWZpY2F0ZXMuYWRkKGNlcnRp
ZmljYXRlKTsKKyAgICAgICAgQklPX2ZyZWUoYmlvKTsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OworCisgICAgc2tfWDUwOV9wb3BfZnJlZShjZXJ0cywgWDUwOV9mcmVlKTsKKyAgICByZXR1cm4g
b2s7CiB9CiAKLXVuc2lnbmVkIHNzbENlcnRpZmljYXRlRmxhZyhjb25zdCB1bnNpZ25lZCYgc3Ns
RXJyb3IpCisjZW5kaWYKKworQ3VybFNTTFZlcmlmaWVyOjpTU0xDZXJ0aWZpY2F0ZUZsYWdzIEN1
cmxTU0xWZXJpZmllcjo6Y29udmVydFRvU1NMQ2VydGlmaWNhdGVGbGFncyhjb25zdCB1bnNpZ25l
ZCYgc3NsRXJyb3IpCiB7CiAgICAgc3dpdGNoIChzc2xFcnJvcikgewogICAgIGNhc2UgWDUwOV9W
X0VSUl9VTkFCTEVfVE9fR0VUX0lTU1VFUl9DRVJUIDogLy8gdGhlIGlzc3VlciBjZXJ0aWZpY2F0
ZSBjb3VsZCBub3QgYmUgZm91bmQ6IHRoaXMgb2NjdXJzIGlmIHRoZSBpc3N1ZXIgY2VydGlmaWNh
dGUgb2YgYW4gdW50cnVzdGVkIGNlcnRpZmljYXRlIGNhbm5vdCBiZSBmb3VuZC4KICAgICBjYXNl
IFg1MDlfVl9FUlJfVU5BQkxFX1RPX0dFVF9DUkwgOiAvLyB0aGUgQ1JMIG9mIGEgY2VydGlmaWNh
dGUgY291bGQgbm90IGJlIGZvdW5kLgogICAgIGNhc2UgWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VU
X0lTU1VFUl9DRVJUX0xPQ0FMTFkgOiAvLyB0aGUgaXNzdWVyIGNlcnRpZmljYXRlIG9mIGEgbG9j
YWxseSBsb29rZWQgdXAgY2VydGlmaWNhdGUgY291bGQgbm90IGJlIGZvdW5kLiBUaGlzIG5vcm1h
bGx5IG1lYW5zIHRoZSBsaXN0IG9mIHRydXN0ZWQgY2VydGlmaWNhdGVzIGlzIG5vdCBjb21wbGV0
ZS4KLSAgICAgICAgcmV0dXJuIFNTTF9DRVJUSUZJQ0FURV9VTktOT1dOX0NBOworICAgICAgICBy
ZXR1cm4gU1NMQ2VydGlmaWNhdGVGbGFnczo6U1NMX0NFUlRJRklDQVRFX1VOS05PV05fQ0E7CiAg
ICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNSWVBUX0NFUlRfU0lHTkFUVVJFIDogLy8g
dGhlIGNlcnRpZmljYXRlIHNpZ25hdHVyZSBjb3VsZCBub3QgYmUgZGVjcnlwdGVkLiBUaGlzIG1l
YW5zIHRoYXQgdGhlIGFjdHVhbCBzaWduYXR1cmUgdmFsdWUgY291bGQgbm90IGJlIGRldGVybWlu
ZWQgcmF0aGVyIHRoYW4gaXQgbm90IG1hdGNoaW5nIHRoZSBleHBlY3RlZCB2YWx1ZSwgdGhpcyBp
cyBvbmx5IG1lYW5pbmdmdWwgZm9yIFJTQSBrZXlzLgogICAgIGNhc2UgWDUwOV9WX0VSUl9VTkFC
TEVfVE9fREVDUllQVF9DUkxfU0lHTkFUVVJFIDogLy8gdGhlIENSTCBzaWduYXR1cmUgY291bGQg
bm90IGJlIGRlY3J5cHRlZDogdGhpcyBtZWFucyB0aGF0IHRoZSBhY3R1YWwgc2lnbmF0dXJlIHZh
bHVlIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkIHJhdGhlciB0aGFuIGl0IG5vdCBtYXRjaGluZyB0
aGUgZXhwZWN0ZWQgdmFsdWUuIFVudXNlZC4KICAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxFX1RP
X0RFQ09ERV9JU1NVRVJfUFVCTElDX0tFWSA6IC8vIHRoZSBwdWJsaWMga2V5IGluIHRoZSBjZXJ0
aWZpY2F0ZSBTdWJqZWN0UHVibGljS2V5SW5mbyBjb3VsZCBub3QgYmUgcmVhZC4KQEAgLTExMywx
MyArMTMyLDEzIEBAIHVuc2lnbmVkIHNzbENlcnRpZmljYXRlRmxhZyhjb25zdCB1bnNpZ25lZCYg
c3NsRXJyb3IpCiAgICAgY2FzZSBYNTA5X1ZfRVJSX0NFUlRfUkVKRUNURUQgOiAvLyB0aGUgcm9v
dCBDQSBpcyBtYXJrZWQgdG8gcmVqZWN0IHRoZSBzcGVjaWZpZWQgcHVycG9zZS4KICAgICBjYXNl
IFg1MDlfVl9FUlJfTk9fRVhQTElDSVRfUE9MSUNZIDogLy8gdGhlIHZlcmlmaWNhdGlvbiBmbGFn
cyB3ZXJlIHNldCB0byByZXF1aXJlIGFuZCBleHBsaWNpdCBwb2xpY3kgYnV0IG5vbmUgd2FzIHBy
ZXNlbnQuCiAgICAgY2FzZSBYNTA5X1ZfRVJSX0RJRkZFUkVOVF9DUkxfU0NPUEUgOiAvLyB0aGUg
b25seSBDUkxzIHRoYXQgY291bGQgYmUgZm91bmQgZGlkIG5vdCBtYXRjaCB0aGUgc2NvcGUgb2Yg
dGhlIGNlcnRpZmljYXRlLgotICAgICAgICByZXR1cm4gU1NMX0NFUlRJRklDQVRFX0lOU0VDVVJF
OworICAgICAgICByZXR1cm4gU1NMQ2VydGlmaWNhdGVGbGFnczo6U1NMX0NFUlRJRklDQVRFX0lO
U0VDVVJFOwogICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX05PVF9ZRVRfVkFMSUQgOiAvLyB0aGUg
Y2VydGlmaWNhdGUgaXMgbm90IHlldCB2YWxpZDogdGhlIG5vdEJlZm9yZSBkYXRlIGlzIGFmdGVy
IHRoZSBjdXJyZW50IHRpbWUuCiAgICAgY2FzZSBYNTA5X1ZfRVJSX0NSTF9OT1RfWUVUX1ZBTElE
IDogLy8gdGhlIENSTCBpcyBub3QgeWV0IHZhbGlkLgotICAgICAgICByZXR1cm4gU1NMX0NFUlRJ
RklDQVRFX05PVF9BQ1RJVkFURUQ7CisgICAgICAgIHJldHVybiBTU0xDZXJ0aWZpY2F0ZUZsYWdz
OjpTU0xfQ0VSVElGSUNBVEVfTk9UX0FDVElWQVRFRDsKICAgICBjYXNlIFg1MDlfVl9FUlJfQ0VS
VF9IQVNfRVhQSVJFRCA6IC8vIHRoZSBjZXJ0aWZpY2F0ZSBoYXMgZXhwaXJlZDogdGhhdCBpcyB0
aGUgbm90QWZ0ZXIgZGF0ZSBpcyBiZWZvcmUgdGhlIGN1cnJlbnQgdGltZS4KICAgICBjYXNlIFg1
MDlfVl9FUlJfQ1JMX0hBU19FWFBJUkVEIDogLy8gdGhlIENSTCBoYXMgZXhwaXJlZC4KLSAgICAg
ICAgcmV0dXJuIFNTTF9DRVJUSUZJQ0FURV9FWFBJUkVEOworICAgICAgICByZXR1cm4gU1NMQ2Vy
dGlmaWNhdGVGbGFnczo6U1NMX0NFUlRJRklDQVRFX0VYUElSRUQ7CiAgICAgY2FzZSBYNTA5X1Zf
RVJSX0VSUk9SX0lOX0NFUlRfTk9UX0JFRk9SRV9GSUVMRCA6IC8vIHRoZSBjZXJ0aWZpY2F0ZSBu
b3RCZWZvcmUgZmllbGQgY29udGFpbnMgYW4gaW52YWxpZCB0aW1lLgogICAgIGNhc2UgWDUwOV9W
X0VSUl9FUlJPUl9JTl9DRVJUX05PVF9BRlRFUl9GSUVMRCA6IC8vIHRoZSBjZXJ0aWZpY2F0ZSBu
b3RBZnRlciBmaWVsZCBjb250YWlucyBhbiBpbnZhbGlkIHRpbWUuCiAgICAgY2FzZSBYNTA5X1Zf
RVJSX0VSUk9SX0lOX0NSTF9MQVNUX1VQREFURV9GSUVMRCA6IC8vIHRoZSBDUkwgbGFzdFVwZGF0
ZSBmaWVsZCBjb250YWlucyBhbiBpbnZhbGlkIHRpbWUuCkBAIC0xMzcsOTcgKzE1NiwxOCBAQCB1
bnNpZ25lZCBzc2xDZXJ0aWZpY2F0ZUZsYWcoY29uc3QgdW5zaWduZWQmIHNzbEVycm9yKQogICAg
IGNhc2UgWDUwOV9WX0VSUl9VTlNVUFBPUlRFRF9DT05TVFJBSU5UX1NZTlRBWCA6IC8vIHRoZSBm
b3JtYXQgb2YgdGhlIG5hbWUgY29uc3RyYWludCBpcyBub3QgcmVjb2duaXNlZDogZm9yIGV4YW1w
bGUgYW4gZW1haWwgYWRkcmVzcyBmb3JtYXQgb2YgYSBmb3JtIG5vdCBtZW50aW9uZWQgaW4gUkZD
MzI4MC4gVGhpcyBjb3VsZCBiZSBjYXVzZWQgYnkgYSBnYXJiYWdlIGV4dGVuc2lvbiBvciBzb21l
IG5ldyBmZWF0dXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgogICAgIGNhc2UgWDUwOV9WX0VS
Ul9DUkxfUEFUSF9WQUxJREFUSU9OX0VSUk9SIDogLy8gYW4gZXJyb3Igb2NjdXJlZCB3aGVuIGF0
dGVtcHRpbmcgdG8gdmVyaWZ5IHRoZSBDUkwgcGF0aC4gVGhpcyBlcnJvciBjYW4gb25seSBoYXBw
ZW4gaWYgZXh0ZW5kZWQgQ1JMIGNoZWNraW5nIGlzIGVuYWJsZWQuCiAgICAgY2FzZSBYNTA5X1Zf
RVJSX0FQUExJQ0FUSU9OX1ZFUklGSUNBVElPTiA6IC8vIGFuIGFwcGxpY2F0aW9uIHNwZWNpZmlj
IGVycm9yLiBUaGlzIHdpbGwgbmV2ZXIgYmUgcmV0dXJuZWQgdW5sZXNzIGV4cGxpY2l0bHkgc2V0
IGJ5IGFuIGFwcGxpY2F0aW9uLgotICAgICAgICByZXR1cm4gU1NMX0NFUlRJRklDQVRFX0dFTkVS
SUNfRVJST1I7CisgICAgICAgIHJldHVybiBTU0xDZXJ0aWZpY2F0ZUZsYWdzOjpTU0xfQ0VSVElG
SUNBVEVfR0VORVJJQ19FUlJPUjsKICAgICBjYXNlIFg1MDlfVl9FUlJfQ0VSVF9SRVZPS0VEIDog
Ly8gdGhlIGNlcnRpZmljYXRlIGhhcyBiZWVuIHJldm9rZWQuCi0gICAgICAgIHJldHVybiBTU0xf
Q0VSVElGSUNBVEVfUkVWT0tFRDsKKyAgICAgICAgcmV0dXJuIFNTTENlcnRpZmljYXRlRmxhZ3M6
OlNTTF9DRVJUSUZJQ0FURV9SRVZPS0VEOwogICAgIGNhc2UgWDUwOV9WX0VSUl9JTlZBTElEX0NB
IDogLy8gYSBDQSBjZXJ0aWZpY2F0ZSBpcyBpbnZhbGlkLiBFaXRoZXIgaXQgaXMgbm90IGEgQ0Eg
b3IgaXRzIGV4dGVuc2lvbnMgYXJlIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIHN1cHBsaWVkIHB1
cnBvc2UuCiAgICAgY2FzZSBYNTA5X1ZfRVJSX1NVQkpFQ1RfSVNTVUVSX01JU01BVENIIDogLy8g
dGhlIGN1cnJlbnQgY2FuZGlkYXRlIGlzc3VlciBjZXJ0aWZpY2F0ZSB3YXMgcmVqZWN0ZWQgYmVj
YXVzZSBpdHMgc3ViamVjdCBuYW1lIGRpZCBub3QgbWF0Y2ggdGhlIGlzc3VlciBuYW1lIG9mIHRo
ZSBjdXJyZW50IGNlcnRpZmljYXRlLiBUaGlzIGlzIG9ubHkgc2V0IGlmIGlzc3VlciBjaGVjayBk
ZWJ1Z2dpbmcgaXMgZW5hYmxlZCBpdCBpcyB1c2VkIGZvciBzdGF0dXMgbm90aWZpY2F0aW9uIGFu
ZCBpcyBub3QgaW4gaXRzZWxmIGFuIGVycm9yLgogICAgIGNhc2UgWDUwOV9WX0VSUl9BS0lEX1NL
SURfTUlTTUFUQ0ggOiAvLyB0aGUgY3VycmVudCBjYW5kaWRhdGUgaXNzdWVyIGNlcnRpZmljYXRl
IHdhcyByZWplY3RlZCBiZWNhdXNlIGl0cyBzdWJqZWN0IGtleSBpZGVudGlmaWVyIHdhcyBwcmVz
ZW50IGFuZCBkaWQgbm90IG1hdGNoIHRoZSBhdXRob3JpdHkga2V5IGlkZW50aWZpZXIgY3VycmVu
dCBjZXJ0aWZpY2F0ZS4gVGhpcyBpcyBvbmx5IHNldCBpZiBpc3N1ZXIgY2hlY2sgZGVidWdnaW5n
IGlzIGVuYWJsZWQgaXQgaXMgdXNlZCBmb3Igc3RhdHVzIG5vdGlmaWNhdGlvbiBhbmQgaXMgbm90
IGluIGl0c2VsZiBhbiBlcnJvci4KICAgICBjYXNlIFg1MDlfVl9FUlJfQUtJRF9JU1NVRVJfU0VS
SUFMX01JU01BVENIIDogLy8gdGhlIGN1cnJlbnQgY2FuZGlkYXRlIGlzc3VlciBjZXJ0aWZpY2F0
ZSB3YXMgcmVqZWN0ZWQgYmVjYXVzZSBpdHMgaXNzdWVyIG5hbWUgYW5kIHNlcmlhbCBudW1iZXIg
d2FzIHByZXNlbnQgYW5kIGRpZCBub3QgbWF0Y2ggdGhlIGF1dGhvcml0eSBrZXkgaWRlbnRpZmll
ciBvZiB0aGUgY3VycmVudCBjZXJ0aWZpY2F0ZS4gVGhpcyBpcyBvbmx5IHNldCBpZiBpc3N1ZXIg
Y2hlY2sgZGVidWdnaW5nIGlzIGVuYWJsZWQgaXQgaXMgdXNlZCBmb3Igc3RhdHVzIG5vdGlmaWNh
dGlvbiBhbmQgaXMgbm90IGluIGl0c2VsZiBhbiBlcnJvci4KICAgICBjYXNlIFg1MDlfVl9FUlJf
S0VZVVNBR0VfTk9fQ0VSVFNJR04gOiAvLyB0aGUgY3VycmVudCBjYW5kaWRhdGUgaXNzdWVyIGNl
cnRpZmljYXRlIHdhcyByZWplY3RlZCBiZWNhdXNlIGl0cyBrZXlVc2FnZSBleHRlbnNpb24gZG9l
cyBub3QgcGVybWl0IGNlcnRpZmljYXRlIHNpZ25pbmcuIFRoaXMgaXMgb25seSBzZXQgaWYgaXNz
dWVyIGNoZWNrIGRlYnVnZ2luZyBpcyBlbmFibGVkIGl0IGlzIHVzZWQgZm9yIHN0YXR1cyBub3Rp
ZmljYXRpb24gYW5kIGlzIG5vdCBpbiBpdHNlbGYgYW4gZXJyb3IuCi0gICAgICAgIHJldHVybiBT
U0xfQ0VSVElGSUNBVEVfQkFEX0lERU5USVRZOworICAgICAgICByZXR1cm4gU1NMQ2VydGlmaWNh
dGVGbGFnczo6U1NMX0NFUlRJRklDQVRFX0JBRF9JREVOVElUWTsKICAgICBkZWZhdWx0IDoKLSAg
ICAgICAgcmV0dXJuIFNTTF9DRVJUSUZJQ0FURV9HRU5FUklDX0VSUk9SOwotICAgIH0KLX0KLQot
I2lmICFQTEFURk9STShXSU4pCi0vLyBzdWNjZXNzIG9mIGNlcnRpZmljYXRlcyBleHRyYWN0aW9u
Ci1ib29sIHBlbURhdGEoWDUwOV9TVE9SRV9DVFgqIGN0eCwgTGlzdEhhc2hTZXQ8U3RyaW5nPiYg
Y2VydGlmaWNhdGVzKQotewotICAgIGJvb2wgb2sgPSB0cnVlOwotICAgIFNUQUNLX09GKFg1MDkp
KiBjZXJ0cyA9IFg1MDlfU1RPUkVfQ1RYX2dldDFfY2hhaW4oY3R4KTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNrX1g1MDlfbnVtKGNlcnRzKTsgaSsrKSB7Ci0gICAgICAgIFg1MDkqIHVDZXJ0
ID0gc2tfWDUwOV92YWx1ZShjZXJ0cywgaSk7Ci0gICAgICAgIEJJTyogYmlvID0gQklPX25ldyhC
SU9fc19tZW0oKSk7Ci0gICAgICAgIGludCByZXMgPSBQRU1fd3JpdGVfYmlvX1g1MDkoYmlvLCB1
Q2VydCk7Ci0gICAgICAgIGlmICghcmVzKSB7Ci0gICAgICAgICAgICBvayA9IGZhbHNlOwotICAg
ICAgICAgICAgQklPX2ZyZWUoYmlvKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgdW5zaWduZWQgY2hhciogY2VydGlmaWNhdGVEYXRhOwotICAgICAgICBsb25nIGxl
bmd0aCA9IEJJT19nZXRfbWVtX2RhdGEoYmlvLCAmY2VydGlmaWNhdGVEYXRhKTsKLSAgICAgICAg
aWYgKGxlbmd0aCA8IDApIHsKLSAgICAgICAgICAgIG9rID0gZmFsc2U7Ci0gICAgICAgICAgICBC
SU9fZnJlZShiaW8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBj
ZXJ0aWZpY2F0ZURhdGFbbGVuZ3RoXSA9ICdcMCc7Ci0gICAgICAgIFN0cmluZyBjZXJ0aWZpY2F0
ZSA9IGNlcnRpZmljYXRlRGF0YTsKLSAgICAgICAgY2VydGlmaWNhdGVzLmFkZChjZXJ0aWZpY2F0
ZSk7Ci0gICAgICAgIEJJT19mcmVlKGJpbyk7CisgICAgICAgIHJldHVybiBTU0xDZXJ0aWZpY2F0
ZUZsYWdzOjpTU0xfQ0VSVElGSUNBVEVfR0VORVJJQ19FUlJPUjsKICAgICB9Ci0gICAgICAgIHNr
X1g1MDlfcG9wX2ZyZWUoY2VydHMsIFg1MDlfZnJlZSk7Ci0gICAgICAgIHJldHVybiBvazsKLX0K
LSNlbmRpZgotCi1zdGF0aWMgaW50IGNlcnRWZXJpZnlDYWxsYmFjayhpbnQgb2ssIFg1MDlfU1RP
UkVfQ1RYKiBjdHgpCi17Ci0gICAgLy8gd2hldGhlciB0aGUgdmVyaWZpY2F0aW9uIG9mIHRoZSBj
ZXJ0aWZpY2F0ZSBpbiBxdWVzdGlvbiB3YXMgcGFzc2VkIChwcmV2ZXJpZnlfb2s9MSkgb3Igbm90
IChwcmV2ZXJpZnlfb2s9MCkKLQotICAgIHVuc2lnbmVkIGVyciA9IFg1MDlfU1RPUkVfQ1RYX2dl
dF9lcnJvcihjdHgpOwotICAgIGlmICghZXJyKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIFNT
TCogc3NsID0gcmVpbnRlcnByZXRfY2FzdDxTU0wqPihYNTA5X1NUT1JFX0NUWF9nZXRfZXhfZGF0
YShjdHgsIFNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHgoKSkpOwotICAgIFNTTF9D
VFgqIHNzbGN0eCA9IFNTTF9nZXRfU1NMX0NUWChzc2wpOwotICAgIEN1cmxIYW5kbGUqIGhhbmRs
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q3VybEhhbmRsZSo+KFNTTF9DVFhfZ2V0X2FwcF9kYXRhKHNz
bGN0eCkpOwotICAgIFN0cmluZyBob3N0ID0gaGFuZGxlLT5nZXRFZmZlY3RpdmVVUkwoKS5ob3N0
KCk7Ci0KLSAgICBoYW5kbGUtPnNldFNzbEVycm9ycyhzc2xDZXJ0aWZpY2F0ZUZsYWcoZXJyKSk7
Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgYXV0byBpdCA9IGFsbG93ZWRIb3N0cygpLmZpbmQo
aG9zdCk7Ci0gICAgb2sgPSAoaXQgIT0gYWxsb3dlZEhvc3RzKCkuZW5kKCkpOwotI2Vsc2UKLSAg
ICBMaXN0SGFzaFNldDxTdHJpbmc+IGNlcnRpZmljYXRlczsKLSAgICBpZiAoIXBlbURhdGEoY3R4
LCBjZXJ0aWZpY2F0ZXMpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBvayA9IHNzbElnbm9yZUhU
VFBTQ2VydGlmaWNhdGUoaG9zdCwgY2VydGlmaWNhdGVzKTsKLSNlbmRpZgotCi0gICAgaWYgKG9r
KSB7Ci0gICAgICAgIC8vIGlmIHRoZSBob3N0IGFuZCB0aGUgY2VydGlmaWNhdGUgYXJlIHN0b3Jl
ZCBmb3IgdGhlIGN1cnJlbnQgaGFuZGxlIHRoYXQgbWVhbnMgaXMgZW5hYmxlZCwKLSAgICAgICAg
Ly8gc28gZG9uJ3QgbmVlZCB0byBjdXJsIHZlcmlmaWVzIHRoZSBhdXRoZW50aWNpdHkgb2YgdGhl
IHBlZXIncyBjZXJ0aWZpY2F0ZQotICAgICAgICBoYW5kbGUtPnNldFNzbFZlcmlmeVBlZXIoQ3Vy
bEhhbmRsZTo6VmVyaWZ5UGVlckRpc2FibGUpOwotICAgIH0KLSAgICByZXR1cm4gb2s7Ci19Ci0K
LXN0YXRpYyBDVVJMY29kZSBzc2xjdHhmdW4oQ1VSTCogY3VybCwgdm9pZCogc3NsY3R4LCB2b2lk
KiBwYXJtKQotewotICAgIFNTTF9DVFhfc2V0X2FwcF9kYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8U1NM
X0NUWCo+KHNzbGN0eCksIHBhcm0pOwotICAgIFNTTF9DVFhfc2V0X3ZlcmlmeShyZWludGVycHJl
dF9jYXN0PFNTTF9DVFgqPihzc2xjdHgpLCBTU0xfVkVSSUZZX1BFRVIsIGNlcnRWZXJpZnlDYWxs
YmFjayk7Ci0gICAgcmV0dXJuIENVUkxFX09LOwotfQotCi12b2lkIHNldFNTTFZlcmlmeU9wdGlv
bnMoQ3VybEhhbmRsZSYgaGFuZGxlKQotewotICAgIGhhbmRsZS5zZXRTc2xDdHhDYWxsYmFja0Z1
bmN0aW9uKHNzbGN0eGZ1biwgJmhhbmRsZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGYzODFhNDJkMmUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVy
LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJT
SVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgor
I2VuZGlmCisKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEN1cmxIYW5kbGU7CisKK2NsYXNzIEN1cmxTU0xWZXJpZmllciB7CitX
VEZfTUFLRV9OT05DT1BZQUJMRShDdXJsU1NMVmVyaWZpZXIpOworCitwdWJsaWM6CisgICAgZW51
bSBjbGFzcyBTU0xDZXJ0aWZpY2F0ZUZsYWdzIHsKKyAgICAgICAgU1NMX0NFUlRJRklDQVRFX1VO
S05PV05fQ0EgPSAoMSA8PCAwKSwgLy8gVGhlIHNpZ25pbmcgY2VydGlmaWNhdGUgYXV0aG9yaXR5
IGlzIG5vdCBrbm93bi4KKyAgICAgICAgU1NMX0NFUlRJRklDQVRFX0JBRF9JREVOVElUWSA9ICgx
IDw8IDEpLCAvLyBUaGUgY2VydGlmaWNhdGUgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGlk
ZW50aXR5IG9mIHRoZSBzaXRlIHRoYXQgaXQgd2FzIHJldHJpZXZlZCBmcm9tLgorICAgICAgICBT
U0xfQ0VSVElGSUNBVEVfTk9UX0FDVElWQVRFRCA9ICgxIDw8IDIpLCAvLyBUaGUgY2VydGlmaWNh
dGUncyBhY3RpdmF0aW9uIHRpbWUgaXMgc3RpbGwgaW4gdGhlIGZ1dHVyZQorICAgICAgICBTU0xf
Q0VSVElGSUNBVEVfRVhQSVJFRCA9ICgxIDw8IDMpLCAvLyBUaGUgY2VydGlmaWNhdGUgaGFzIGV4
cGlyZWQKKyAgICAgICAgU1NMX0NFUlRJRklDQVRFX1JFVk9LRUQgPSAoMSA8PCA0KSwgLy8gVGhl
IGNlcnRpZmljYXRlIGhhcyBiZWVuIHJldm9rZWQKKyAgICAgICAgU1NMX0NFUlRJRklDQVRFX0lO
U0VDVVJFID0gKDEgPDwgNSksIC8vIFRoZSBjZXJ0aWZpY2F0ZSdzIGFsZ29yaXRobSBpcyBjb25z
aWRlcmVkIGluc2VjdXJlLgorICAgICAgICBTU0xfQ0VSVElGSUNBVEVfR0VORVJJQ19FUlJPUiA9
ICgxIDw8IDYpIC8vIFNvbWUgb3RoZXIgZXJyb3Igb2NjdXJyZWQgdmFsaWRhdGluZyB0aGUgY2Vy
dGlmaWNhdGUKKyAgICB9OworCisgICAgQ3VybFNTTFZlcmlmaWVyKCkgPSBkZWZhdWx0OworCisg
ICAgdm9pZCBzZXRDdXJsSGFuZGxlKEN1cmxIYW5kbGUqIGN1cmxIYW5kbGUpIHsgbV9jdXJsSGFu
ZGxlID0gY3VybEhhbmRsZTsgfQorICAgIHZvaWQgc2V0SG9zdE5hbWUoY29uc3QgU3RyaW5nJiBo
b3N0TmFtZSkgeyBtX2hvc3ROYW1lID0gaG9zdE5hbWU7IH0KKyAgICB2b2lkIHNldFNzbEN0eCh2
b2lkKik7CisKKyAgICBpbnQgc3NsRXJyb3JzKCkgeyByZXR1cm4gbV9zc2xFcnJvcnM7IH0KKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgaW50IGNlcnRWZXJpZnlDYWxsYmFjayhpbnQsIFg1MDlfU1RP
UkVfQ1RYKik7CisKKyNpZiAhT1MoV0lORE9XUykKKyAgICBib29sIGdldFBlbURhdGFGcm9tQ3R4
KFg1MDlfU1RPUkVfQ1RYKiwgTGlzdEhhc2hTZXQ8U3RyaW5nPiYpOworI2VuZGlmCisKKyAgICBT
U0xDZXJ0aWZpY2F0ZUZsYWdzIGNvbnZlcnRUb1NTTENlcnRpZmljYXRlRmxhZ3MoY29uc3QgdW5z
aWduZWQmKTsKKworICAgIEN1cmxIYW5kbGUqIG1fY3VybEhhbmRsZSB7IG51bGxwdHIgfTsKKyAg
ICBTdHJpbmcgbV9ob3N0TmFtZTsKKyAgICBpbnQgbV9zc2xFcnJvcnMgeyAwIH07Cit9OworCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3Vy
Y2VIYW5kbGVDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZUhhbmRsZUN1cmwuY3BwCmluZGV4IGRiOWQ1M2FlOTdlLi4yYTc4Y2VhNDExOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybC5jcHAKQEAgLTM3LDEyICszNywxMiBAQAogI2luY2x1ZGUgIkN1cmxD
YWNoZU1hbmFnZXIuaCIKICNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgogI2luY2x1ZGUgIkN1cmxK
b2JNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ3VybFNTTEhhbmRsZS5oIgogI2luY2x1ZGUgIkZpbGVT
eXN0ZW0uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlNTTEhhbmRsZS5oIgogI2luY2x1ZGUgIlN5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKQEAg
LTg3LDcgKzg3LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0SG9zdEFsbG93c0FueUhUVFBT
Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0KQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAKLSAgICBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoaG9zdCk7CisgICAg
Q3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnNzbEhhbmRsZSgpLnNldEhvc3RBbGxvd3NBbnlIVFRQ
U0NlcnRpZmljYXRlKGhvc3QpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRD
ZXJ0aWZpY2F0ZUluZm8oY29uc3QgU3RyaW5nJiBob3N0LCBjb25zdCBTdHJpbmcmIGNlcnRpZmlj
YXRlLCBjb25zdCBTdHJpbmcmIGtleSkKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGVJbmZvKGNvbnN0IFN0cmluZyYgaG9zdCwgY29uc3Qg
U3RyaW5nJgogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICBpZiAoZmlsZUV4aXN0
cyhjZXJ0aWZpY2F0ZSkpCi0gICAgICAgIGFkZEFsbG93ZWRDbGllbnRDZXJ0aWZpY2F0ZShob3N0
LCBjZXJ0aWZpY2F0ZSwga2V5KTsKKyAgICAgICAgQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnNz
bEhhbmRsZSgpLnNldENsaWVudENlcnRpZmljYXRlSW5mbyhob3N0LCBjZXJ0aWZpY2F0ZSwga2V5
KTsKICAgICBlbHNlCiAgICAgICAgIExPRyhOZXR3b3JrLCAiSW52YWxpZCBjbGllbnQgY2VydGlm
aWNhdGUgZmlsZTogJXMhXG4iLCBjZXJ0aWZpY2F0ZS5sYXRpbjEoKS5kYXRhKCkpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlQ3VybERlbGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAKaW5kZXggZDBjNjIzYWQzMzMuLjNkMjg2
MTZkYWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAKQEAgLTM5LDcg
KzM5LDYgQEAKICNpbmNsdWRlICJNdWx0aXBhcnRIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKLSNpbmNsdWRl
ICJTU0xIYW5kbGUuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUaHJl
YWRTYWZlRGF0YUJ1ZmZlci5oIgogI2luY2x1ZGUgIlVSTC5oIgpAQCAtNzgsOCArNzcsNiBAQCBS
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fc3NsQ2xpZW50
Q2VydGlmaWNhdGUgPSBnZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZSh1cmwuaG9zdCgpKTsKLQogICAg
IHNldHVwQXV0aGVudGljYXRpb24oKTsKIH0KIApAQCAtMjE0LDYgKzIxMSw4IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldHVwUmVxdWVzdCgpCiAgICAgbV9jdXJsSGFuZGxl
LmVuYWJsZVN0ZEVycklmVXNlZCgpOwogI2VuZGlmCiAKKyAgICBhdXRvJiBzc2xIYW5kbGUgPSBD
dXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc3NsSGFuZGxlKCk7CisKICAgICBtX2N1cmxIYW5kbGUu
c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyRW5hYmxlKTsKICAgICBtX2N1
cmxIYW5kbGUuc2V0U3NsVmVyaWZ5SG9zdChDdXJsSGFuZGxlOjpWZXJpZnlIb3N0U3RyaWN0TmFt
ZUNoZWNrKTsKICAgICBtX2N1cmxIYW5kbGUuc2V0UHJpdmF0ZURhdGEodGhpcyk7CkBAIC0yMjYs
MTggKzIyNSwxOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXR1cFJlcXVl
c3QoKQogICAgIG1fY3VybEhhbmRsZS5lbmFibGVUaW1lb3V0KCk7CiAgICAgbV9jdXJsSGFuZGxl
LmVuYWJsZUFsbG93ZWRQcm90b2NvbHMoKTsKIAotICAgIGlmIChtX3NzbENsaWVudENlcnRpZmlj
YXRlKSB7Ci0gICAgICAgIG1fY3VybEhhbmRsZS5zZXRTc2xDZXJ0KCgqbV9zc2xDbGllbnRDZXJ0
aWZpY2F0ZSkuZmlyc3QudXRmOCgpLmRhdGEoKSk7CisgICAgYXV0byBzc2xDbGllbnRDZXJ0aWZp
Y2F0ZSA9IHNzbEhhbmRsZS5nZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZSh1cmwuaG9zdCgpKTsKKyAg
ICBpZiAoc3NsQ2xpZW50Q2VydGlmaWNhdGUpIHsKKyAgICAgICAgbV9jdXJsSGFuZGxlLnNldFNz
bENlcnQoc3NsQ2xpZW50Q2VydGlmaWNhdGUtPmZpcnN0LnV0ZjgoKS5kYXRhKCkpOwogICAgICAg
ICBtX2N1cmxIYW5kbGUuc2V0U3NsQ2VydFR5cGUoIlAxMiIpOwotICAgICAgICBtX2N1cmxIYW5k
bGUuc2V0U3NsS2V5UGFzc3dvcmQoKCptX3NzbENsaWVudENlcnRpZmljYXRlKS5zZWNvbmQudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIG1fY3VybEhhbmRsZS5zZXRTc2xLZXlQYXNzd29yZChzc2xD
bGllbnRDZXJ0aWZpY2F0ZS0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAotICAgIGlm
IChDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc2hvdWxkSWdub3JlU1NMRXJyb3JzKCkpCisgICAg
aWYgKHNzbEhhbmRsZS5zaG91bGRJZ25vcmVTU0xFcnJvcnMoKSkKICAgICAgICAgbV9jdXJsSGFu
ZGxlLnNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlckRpc2FibGUpOwogICAg
IGVsc2UKLSAgICAgICAgc2V0U1NMVmVyaWZ5T3B0aW9ucyhtX2N1cmxIYW5kbGUpOworICAgICAg
ICBtX2N1cmxIYW5kbGUuc2V0U3NsQ3R4Q2FsbGJhY2tGdW5jdGlvbih3aWxsU2V0dXBTc2xDdHhD
YWxsYmFjaywgdGhpcyk7CiAKLSAgICBtX2N1cmxIYW5kbGUuZW5hYmxlQ0FJbmZvSWZFeGlzdHMo
KTsKKyAgICBtX2N1cmxIYW5kbGUuc2V0Q0FDZXJ0UGF0aChzc2xIYW5kbGUuZ2V0Q0FDZXJ0UGF0
aCgpKTsKIAogICAgIG1fY3VybEhhbmRsZS5lbmFibGVBY2NlcHRFbmNvZGluZygpOwogICAgIG1f
Y3VybEhhbmRsZS5zZXRVcmwodXJsU3RyaW5nKTsKQEAgLTI4OCw3ICsyODgsNyBAQCB2b2lkIFJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpub3RpZnlGYWlsKCkKICAgICBpbnQgZXJyb3JDb2Rl
ID0gbV9jdXJsSGFuZGxlLmVycm9yQ29kZSgpOwogICAgIFVSTCBmYWlsaW5nVVJMID0gbV9jdXJs
SGFuZGxlLmdldEVmZmVjdGl2ZVVSTCgpOwogICAgIFN0cmluZyBlcnJvckRlc2NyaXB0aW9uID0g
bV9jdXJsSGFuZGxlLmVycm9yRGVzY3JpcHRpb24oKTsKLSAgICB1bnNpZ25lZCBzc2xFcnJvcnMg
PSBtX2N1cmxIYW5kbGUuZ2V0U3NsRXJyb3JzKCk7CisgICAgdW5zaWduZWQgc3NsRXJyb3JzID0g
bV9zc2xWZXJpZmllci5zc2xFcnJvcnMoKTsKIAogICAgIGlmIChpc01haW5UaHJlYWQoKSkKICAg
ICAgICAgZGlkRmFpbChkb21haW4sIGVycm9yQ29kZSwgZmFpbGluZ1VSTCwgZXJyb3JEZXNjcmlw
dGlvbiwgc3NsRXJyb3JzKTsKQEAgLTcxMiw2ICs3MTIsMTUgQEAgTmV0d29ya0xvYWRNZXRyaWNz
IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpnZXROZXR3b3JrTG9hZE1ldHJpY3MoKQogICAg
IHJldHVybiBuZXR3b3JrTG9hZE1ldHJpY3M7CiB9CiAKK0NVUkxjb2RlIFJlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlOjp3aWxsU2V0dXBTc2xDdHgodm9pZCogc3NsQ3R4KQoreworICAgIG1fc3Ns
VmVyaWZpZXIuc2V0Q3VybEhhbmRsZSgmbV9jdXJsSGFuZGxlKTsKKyAgICBtX3NzbFZlcmlmaWVy
LnNldEhvc3ROYW1lKG1fZmlyc3RSZXF1ZXN0LnVybCgpLmhvc3QoKSk7CisgICAgbV9zc2xWZXJp
Zmllci5zZXRTc2xDdHgoc3NsQ3R4KTsKKworICAgIHJldHVybiBDVVJMRV9PSzsKK30KKwogLyoK
ICogVGhpcyBpcyBiZWluZyBjYWxsZWQgZm9yIGVhY2ggSFRUUCBoZWFkZXIgaW4gdGhlIHJlc3Bv
bnNlLiBUaGlzIGluY2x1ZGVzICdcclxuJwogKiBmb3IgdGhlIGxhc3QgbGluZSBvZiB0aGUgaGVh
ZGVyLgpAQCAtODU2LDYgKzg2NSwxMSBAQCBzaXplX3QgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdh
dGU6OndpbGxTZW5kRGF0YShjaGFyKiBidWZmZXIsIHNpemVfdCBibG9ja1NpemUsCiAgICAgcmV0
dXJuIG1fc2VuZEJ5dGVzOwogfQogCitDVVJMY29kZSBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZTo6d2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2soQ1VSTCosIHZvaWQqIHNzbEN0eCwgdm9pZCogdXNl
ckRhdGEpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlKj4odXNlckRhdGEpLT53aWxsU2V0dXBTc2xDdHgoc3NsQ3R4KTsKK30KKwogc2l6ZV90IFJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRSZWNlaXZlSGVhZGVyQ2FsbGJhY2soY2hhciog
cHRyLCBzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MsIHZvaWQqIGRhdGEp
CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKj4o
Y29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpLT5kaWRSZWNlaXZlSGVhZGVyKFN0cmluZyhzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4ocHRyKSwgYmxvY2tTaXplICogbnVtYmVyT2ZCbG9ja3MpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhh
bmRsZUN1cmxEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmgKaW5kZXggMTY3YTM3OGMxOTcuLjdmZTJlMDkw
MjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuaApAQCAtMzEsMTAgKzMxLDEw
IEBACiAjaW5jbHVkZSAiQ3JlZGVudGlhbC5oIgogI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCiAj
aW5jbHVkZSAiQ3VybEpvYk1hbmFnZXIuaCIKKyNpbmNsdWRlICJDdXJsU1NMVmVyaWZpZXIuaCIK
ICNpbmNsdWRlICJGb3JtRGF0YVN0cmVhbUN1cmwuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVl
c3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiU1NMSGFuZGxl
LmgiCiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogCkBAIC05MywxMCArOTMsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFw
cGx5QXV0aGVudGljYXRpb24oKTsKICAgICBOZXR3b3JrTG9hZE1ldHJpY3MgZ2V0TmV0d29ya0xv
YWRNZXRyaWNzKCk7CiAKKyAgICBDVVJMY29kZSB3aWxsU2V0dXBTc2xDdHgodm9pZCopOwogICAg
IHNpemVfdCBkaWRSZWNlaXZlSGVhZGVyKFN0cmluZyYmKTsKICAgICBzaXplX3QgZGlkUmVjZWl2
ZURhdGEoVGhyZWFkU2FmZURhdGFCdWZmZXIpOwogICAgIHNpemVfdCB3aWxsU2VuZERhdGEoY2hh
ciosIHNpemVfdCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2Nrcyk7CiAKKyAgICBzdGF0
aWMgQ1VSTGNvZGUgd2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2soQ1VSTCosIHZvaWQqLCB2b2lkKik7
CiAgICAgc3RhdGljIHNpemVfdCBkaWRSZWNlaXZlSGVhZGVyQ2FsbGJhY2soY2hhciosIHNpemVf
dCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2Nrcywgdm9pZCopOwogICAgIHN0YXRpYyBz
aXplX3QgZGlkUmVjZWl2ZURhdGFDYWxsYmFjayhjaGFyKiwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6
ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKik7CiAgICAgc3RhdGljIHNpemVfdCB3aWxsU2VuZERh
dGFDYWxsYmFjayhjaGFyKiwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tz
LCB2b2lkKik7CkBAIC0xMTQsMTEgKzExNiwxMSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3Vz
ZXI7CiAgICAgU3RyaW5nIG1fcGFzczsKICAgICBDcmVkZW50aWFsIG1faW5pdGlhbENyZWRlbnRp
YWw7Ci0gICAgc3RkOjpvcHRpb25hbDxDbGllbnRDZXJ0aWZpY2F0ZT4gbV9zc2xDbGllbnRDZXJ0
aWZpY2F0ZTsKICAgICBib29sIG1fZGVmZXJzTG9hZGluZzsKICAgICBib29sIG1fYWRkZWRDYWNo
ZVZhbGlkYXRpb25IZWFkZXJzIHsgZmFsc2UgfTsKICAgICBWZWN0b3I8Y2hhcj4gbV9wb3N0Qnl0
ZXM7CiAgICAgQ3VybEhhbmRsZSBtX2N1cmxIYW5kbGU7CisgICAgQ3VybFNTTFZlcmlmaWVyIG1f
c3NsVmVyaWZpZXI7CiAgICAgLy8gVXNlZCBieSBib3RoIHRocmVhZHMuCiAgICAgQ29uZGl0aW9u
IG1fd29ya2VyVGhyZWFkQ29uZGl0aW9uVmFyaWFibGU7CiAgICAgTG9jayBtX3dvcmtlclRocmVh
ZE11dGV4Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>