<?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>173629</bug_id>
          
          <creation_ts>2017-06-20 17:37:11 -0700</creation_ts>
          <short_desc>[Curl] Separate global curl settings from ResourceHandleManager as CurlContext class</short_desc>
          <delta_ts>2017-06-29 11:07:37 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>173557</dependson>
          <blocked>117300</blocked>
    
    <blocked>173630</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>basuke</cc>
    
    <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>fujii</cc>
    
    <cc>pvollan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1321330</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-20 17:37:11 -0700</bug_when>
    <thetext>ResourceHandleManager is hard to refactor because it contains many configurations. For easy maintenance, those information should be managed by separate class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322663</commentid>
    <comment_count>1</comment_count>
      <attachid>313793</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-24 22:18:28 -0700</bug_when>
    <thetext>Created attachment 313793
PATCH

Extract global configurations from ResourceHandleManager.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322664</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-24 22:19:51 -0700</bug_when>
    <thetext>Attachment 313793 did not pass style-queue:


ERROR: Source/WebCore/platform/network/curl/CurlJobManager.cpp:30:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/network/curl/CurlJobManager.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/network/curl/CurlJobManager.h:38:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
ERROR: Source/WebCore/platform/network/curl/ResourceHandleManager.cpp:969:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/curl/CurlContext.cpp:173:  Extra space between CurlProxyType and type  [whitespace/declaration] [3]
ERROR: Source/WebCore/platform/network/curl/CurlContext.cpp:182:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/network/curl/CurlDownload.cpp:30:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/platform/network/curl/CurlContext.h:39:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
Total errors found: 8 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>1322666</commentid>
    <comment_count>3</comment_count>
      <attachid>313794</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-24 22:44:16 -0700</bug_when>
    <thetext>Created attachment 313794
Fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322759</commentid>
    <comment_count>4</comment_count>
      <attachid>313794</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-25 23:06:59 -0700</bug_when>
    <thetext>Comment on attachment 313794
Fix style

A bug was found. Obsoleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322942</commentid>
    <comment_count>5</comment_count>
      <attachid>313861</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-26 12:22:36 -0700</bug_when>
    <thetext>Created attachment 313861
PATCH2

Fixed a bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322994</commentid>
    <comment_count>6</comment_count>
      <attachid>313871</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-26 15:05:39 -0700</bug_when>
    <thetext>Created attachment 313871
PATH with fix for thread change

Adopt the changes for Thread::create

[WTF] Drop Thread::create(obsolete things) API since we can use lambda
https://bugs.webkit.org/show_bug.cgi?id=173825</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323172</commentid>
    <comment_count>7</comment_count>
      <attachid>313871</attachid>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-06-27 11:05:29 -0700</bug_when>
    <thetext>Comment on attachment 313871
PATH with fix for thread change

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

&gt; Source/WebCore/platform/network/curl/CurlContext.h:35
&gt; +#if PLATFORM(WIN)

OS(WINDOWS)

&gt; Source/WebCore/platform/network/curl/CurlContext.h:68
&gt; +    virtual ~CurlContext();

This class is a singleton and is not supposed to be inherited from, it should not have any virtual methods

&gt; Source/WebCore/platform/network/curl/CurlContext.h:70
&gt; +    CURLSH* getCurlShareHandle() const { return m_curlShareHandle; }

According to coding style, it should be just curlShareHandle()

https://webkit.org/code-style-guidelines/#names

&gt; Source/WebCore/platform/network/curl/CurlContext.h:83
&gt; +    std::tuple&lt;CurlProxyType, const String&amp;&gt; getProxyInfo() const;

Prefer informatively named structs to pairs and tuples. The latter are mostly useful for generic (template) code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323219</commentid>
    <comment_count>8</comment_count>
      <attachid>313871</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-06-27 13:58:13 -0700</bug_when>
    <thetext>Comment on attachment 313871
PATH with fix for thread change

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

&gt; Source/WebCore/platform/network/curl/CurlContext.cpp:76
&gt; +#if OS(WINDOWS)

I&apos;m wondering if this block should be using FileSystem.h functions. I&apos;m fine with that being in another patch if there&apos;s more refactoring coming for cookies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323310</commentid>
    <comment_count>9</comment_count>
      <attachid>313871</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-27 16:20:37 -0700</bug_when>
    <thetext>Comment on attachment 313871
PATH with fix for thread change

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

&gt; Source/WebCore/platform/network/curl/CurlContext.h:58
&gt; +    static CurlContext&amp; singleton()

Can this return a const CurlContext&amp;?

&gt; Source/WebCore/platform/network/curl/CurlContext.h:62
&gt; +        // Since it&apos;s a static variable, if the class has already been created,
&gt; +        // It won&apos;t be created again.
&gt; +        // And it **is** thread-safe in C++11.

I don&apos;t think this comment is helpful.

&gt;&gt; Source/WebCore/platform/network/curl/CurlContext.h:83
&gt;&gt; +    std::tuple&lt;CurlProxyType, const String&amp;&gt; getProxyInfo() const;
&gt; 
&gt; Prefer informatively named structs to pairs and tuples. The latter are mostly useful for generic (template) code

Yep.  std::tuples of two things are std::pairs, but this should definitely be a struct with named members.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323672</commentid>
    <comment_count>10</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-28 14:18:58 -0700</bug_when>
    <thetext>(In reply to Konstantin Tokarev from comment #7)
&gt; Comment on attachment 313871 [details]
&gt; PATH with fix for thread change
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=313871&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CurlContext.h:35
&gt; &gt; +#if PLATFORM(WIN)
&gt; 
&gt; OS(WINDOWS)
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CurlContext.h:68
&gt; &gt; +    virtual ~CurlContext();
&gt; 
&gt; This class is a singleton and is not supposed to be inherited from, it
&gt; should not have any virtual methods
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CurlContext.h:70
&gt; &gt; +    CURLSH* getCurlShareHandle() const { return m_curlShareHandle; }
&gt; 
&gt; According to coding style, it should be just curlShareHandle()
&gt; 
&gt; https://webkit.org/code-style-guidelines/#names
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CurlContext.h:83
&gt; &gt; +    std::tuple&lt;CurlProxyType, const String&amp;&gt; getProxyInfo() const;
&gt; 
&gt; Prefer informatively named structs to pairs and tuples. The latter are
&gt; mostly useful for generic (template) code

Got it. I&apos;ll change them.

&gt; Alex
I cannot make CurlContext::singleton() as const because it has configuration change method such as setProxyInfo().

&gt; Don
I will submit platform-independency bug after this patch accepted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323802</commentid>
    <comment_count>11</comment_count>
      <attachid>314094</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-28 19:43:13 -0700</bug_when>
    <thetext>Created attachment 314094
PATCH with reviewed advices</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323803</commentid>
    <comment_count>12</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-28 19:45:57 -0700</bug_when>
    <thetext>Attachment 314094 did not pass style-queue:


ERROR: Source/WebCore/platform/network/curl/CurlContext.h:57:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 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>1323805</commentid>
    <comment_count>13</comment_count>
      <attachid>314095</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-28 19:52:29 -0700</bug_when>
    <thetext>Created attachment 314095
Fix style again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324001</commentid>
    <comment_count>14</comment_count>
      <attachid>314095</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-29 11:07:36 -0700</bug_when>
    <thetext>Comment on attachment 314095
Fix style again

Clearing flags on attachment: 314095

Committed r218947: &lt;http://trac.webkit.org/changeset/218947&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324002</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-29 11:07:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313793</attachid>
            <date>2017-06-24 22:18:28 -0700</date>
            <delta_ts>2017-06-24 22:44:16 -0700</delta_ts>
            <desc>PATCH</desc>
            <filename>173629.diff</filename>
            <type>text/plain</type>
            <size>40978</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlMDlmNGExMWM3OC4uZWI5MDVkYzcxOTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NSBAQAorMjAxNy0wNi0yNCAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFNlcGFyYXRlIGdsb2JhbCBjdXJsIHNldHRpbmdzIGZy
b20gUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIGFzIEN1cmxDb250ZXh0IGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM2MjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8u
Y21ha2U6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29va2llc0ZvclNlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2VydGlmaWNhdGVQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUphclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybENvbnRleHQ6OkN1cmxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0
Ojp+Q3VybENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OmluaXRDb29r
aWVTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpnZXRQcm94eUluZm8p
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnNldFByb3h5SW5mbyk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsQ29udGV4dDo6Z2V0RWZmZWN0aXZlVVJMKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxDb250ZXh0OjpjcmVhdGVNdWx0aUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsQ29udGV4dDo6bXV0ZXhGb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6Omxv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnVubG9jayk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5oLgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybENvbnRleHQ6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29u
dGV4dDo6Z2V0Q3VybFNoYXJlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0
OjpnZXRDb29raWVKYXJGaWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6
c2V0Q29va2llSmFyRmlsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6Omdl
dENlcnRpZmljYXRlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6c2hvdWxk
SWdub3JlU1NMRXJyb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpnZXRMb2dG
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0Ojppc1ZlcmJvc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybERvd25sb2FkOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9h
ZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpjYW5jZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpkaWRSZWNlaXZlSGVhZGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmg6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6Q3VybEpvYk1hbmFnZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEpvYk1hbmFnZXI6On5DdXJsSm9iTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsSm9iTWFuYWdlcjo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpy
ZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OmdldEFjdGl2ZUNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpnZXRQZW5kaW5nQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0b3BUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0b3BUaHJlYWRJZklkbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybEpvYk1hbmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEpvYk1hbmFnZXI6OmFkZFRvQ3VybCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9i
TWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFn
ZXI6OndvcmtlclRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxK
b2JNYW5hZ2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybE1hbmFnZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpz
aW5nbGV0b24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpS
ZXNvdXJjZUhhbmRsZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRs
ZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3RlY3Rpb25T
cGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5kbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2VydGlmaWNhdGVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvb2tpZUphclBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyOjpzZXRDb29raWVKYXJGaWxlTmFtZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmdldENvb2tpZUphckZpbGVOYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2V0UHJv
eHlJbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdl
cjo6aW5pdENvb2tpZVNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisK
IDIwMTctMDYtMjIgIEJhc3VrZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNvbnkuY29tPgogCiAg
ICAgICAgIEZpeCBicm9rZW4gV2luQ2Fpcm8gYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNh
aXJvLmNtYWtlCmluZGV4IDU5NzcwNTk3N2VlLi44Mzc1ODJkMzAxMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0zMyw4ICszMyw5IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DcmVkZW50aWFsU3RvcmFnZUN1
cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZUVudHJ5LmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcAorICAgIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybERvd25sb2FkLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5j
cHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuY3BwCiAgICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL0ROU0N1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L0Zvcm1EYXRhU3RyZWFtQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVsdGlw
YXJ0SGFuZGxlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCmluZGV4IDZiNmVjOTk3MGIxLi4zNTQwYjc0NDNmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUph
ckN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29r
aWVKYXJDdXJsLmNwcApAQCAtMjIsOSArMjIsOCBAQAogI2lmIFVTRShDVVJMKQogCiAjaW5jbHVk
ZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiQ3VybE1hbmFnZXIuaCIKKyNpbmNsdWRlICJDdXJsQ29u
dGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAKICNpbmNsdWRlIDx3dGYvRGF0ZU1h
dGguaD4KQEAgLTI0MywxMyArMjQyLDE1IEBAIHN0YXRpYyBTdHJpbmcgZ2V0TmV0c2NhcGVDb29r
aWVGb3JtYXQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIHZvaWQgc2V0
Q29va2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiwg
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CisgICAgQ3VybENvbnRleHQm
IGNvbnRleHQgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCk7CisKICAgICBDVVJMKiBjdXJsID0g
Y3VybF9lYXN5X2luaXQoKTsKIAogICAgIGlmICghY3VybCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgY2hhciogY29va2llSmFyRmlsZU5hbWUgPSBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6
OnNoYXJlZEluc3RhbmNlKCktPmdldENvb2tpZUphckZpbGVOYW1lKCk7Ci0gICAgQ1VSTFNIKiBj
dXJsc2ggPSBDdXJsTWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0Q3VybFNoYXJlSGFuZGxlKCk7Cisg
ICAgY29uc3QgY2hhciogY29va2llSmFyRmlsZU5hbWUgPSBjb250ZXh0LmdldENvb2tpZUphckZp
bGVOYW1lKCk7CisgICAgQ1VSTFNIKiBjdXJsc2ggPSBjb250ZXh0LmdldEN1cmxTaGFyZUhhbmRs
ZSgpOwogCiAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPT0tJRUpBUiwgY29v
a2llSmFyRmlsZU5hbWUpOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TSEFS
RSwgY3VybHNoKTsKQEAgLTI3OCw3ICsyNzksNyBAQCBzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JT
ZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYsIGNvbnN0CiAg
ICAgaWYgKCFjdXJsKQogICAgICAgICByZXR1cm4gY29va2llczsKIAotICAgIENVUkxTSCogY3Vy
bHNoID0gQ3VybE1hbmFnZXI6OnNpbmdsZXRvbigpLmdldEN1cmxTaGFyZUhhbmRsZSgpOworICAg
IENVUkxTSCogY3VybHNoID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEN1cmxTaGFyZUhh
bmRsZSgpOwogCiAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NIQVJFLCBjdXJs
c2gpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTEy
Mzg5ZWQ3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShDVVJMKQorI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCisKKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIE9T
KFdJTkRPV1MpCisjaW5jbHVkZSAiV2ViQ29yZUJ1bmRsZVdpbi5oIgorI2luY2x1ZGUgPHNobG9i
ai5oPgorI2luY2x1ZGUgPHNobHdhcGkuaD4KKyNlbmRpZgorCisjaWYgVVNFKENGKQorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgQ1N0cmluZyBjZXJ0aWZpY2F0ZVBhdGgo
KQoreworICAgIGNoYXIqIGVudlBhdGggPSBnZXRlbnYoIkNVUkxfQ0FfQlVORExFX1BBVEgiKTsK
KyAgICBpZiAoZW52UGF0aCkKKyAgICAgICAgcmV0dXJuIGVudlBhdGg7CisKKyNpZiBVU0UoQ0Yp
CisgICAgQ0ZCdW5kbGVSZWYgd2ViS2l0QnVuZGxlUmVmID0gd2ViS2l0QnVuZGxlKCk7CisgICAg
aWYgKHdlYktpdEJ1bmRsZVJlZikgeworICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNlcnRV
UkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKHdlYktpdEJ1bmRsZVJlZiwg
Q0ZTVFIoImNhY2VydCIpLCBDRlNUUigicGVtIiksIENGU1RSKCJjZXJ0aWZpY2F0ZXMiKSkpOwor
ICAgICAgICBpZiAoY2VydFVSTFJlZikgeworICAgICAgICAgICAgY2hhciBwYXRoW01BWF9QQVRI
XTsKKyAgICAgICAgICAgIENGVVJMR2V0RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNlcnRVUkxS
ZWYuZ2V0KCksIGZhbHNlLCByZWludGVycHJldF9jYXN0PFVJbnQ4Kj4ocGF0aCksIE1BWF9QQVRI
KTsKKyAgICAgICAgICAgIHJldHVybiBwYXRoOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisK
KyAgICByZXR1cm4gQ1N0cmluZygpOworfQorCitzdGF0aWMgQ1N0cmluZyBjb29raWVKYXJQYXRo
KCkKK3sKKyAgICBjaGFyKiBjb29raWVKYXJQYXRoID0gZ2V0ZW52KCJDVVJMX0NPT0tJRV9KQVJf
UEFUSCIpOworICAgIGlmIChjb29raWVKYXJQYXRoKQorICAgICAgICByZXR1cm4gY29va2llSmFy
UGF0aDsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgY2hhciBleGVjdXRhYmxlUGF0aFtNQVhfUEFU
SF07CisgICAgY2hhciBhcHBEYXRhRGlyZWN0b3J5W01BWF9QQVRIXTsKKyAgICBjaGFyIGNvb2tp
ZUphckZ1bGxQYXRoW01BWF9QQVRIXTsKKyAgICBjaGFyIGNvb2tpZUphckRpcmVjdG9yeVtNQVhf
UEFUSF07CisKKyAgICBpZiAoRkFJTEVEKDo6U0hHZXRGb2xkZXJQYXRoQSgwLCBDU0lETF9MT0NB
TF9BUFBEQVRBIHwgQ1NJRExfRkxBR19DUkVBVEUsIDAsIDAsIGFwcERhdGFEaXJlY3RvcnkpKQor
ICAgICAgICB8fCBGQUlMRUQoOjpHZXRNb2R1bGVGaWxlTmFtZUEoMCwgZXhlY3V0YWJsZVBhdGgs
IE1BWF9QQVRIKSkpCisgICAgICAgIHJldHVybiAiY29va2llcy5kYXQiOworCisgICAgOjpQYXRo
UmVtb3ZlRXh0ZW5zaW9uQShleGVjdXRhYmxlUGF0aCk7CisgICAgTFBTVFIgZXhlY3V0YWJsZU5h
bWUgPSA6OlBhdGhGaW5kRmlsZU5hbWVBKGV4ZWN1dGFibGVQYXRoKTsKKyAgICBzcHJpbnRmX3Mo
Y29va2llSmFyRGlyZWN0b3J5LCBNQVhfUEFUSCwgIiVzLyVzIiwgYXBwRGF0YURpcmVjdG9yeSwg
ZXhlY3V0YWJsZU5hbWUpOworICAgIHNwcmludGZfcyhjb29raWVKYXJGdWxsUGF0aCwgTUFYX1BB
VEgsICIlcy9jb29raWVzLmRhdCIsIGNvb2tpZUphckRpcmVjdG9yeSk7CisKKyAgICBpZiAoOjpT
SENyZWF0ZURpcmVjdG9yeUV4QSgwLCBjb29raWVKYXJEaXJlY3RvcnksIDApICE9IEVSUk9SX1NV
Q0NFU1MKKyAgICAgICAgJiYgOjpHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9GSUxFX0VYSVNUUwor
ICAgICAgICAmJiA6OkdldExhc3RFcnJvcigpICE9IEVSUk9SX0FMUkVBRFlfRVhJU1RTKQorICAg
ICAgICByZXR1cm4gImNvb2tpZXMuZGF0IjsKKworICAgIHJldHVybiBjb29raWVKYXJGdWxsUGF0
aDsKKyNlbHNlCisgICAgcmV0dXJuICJjb29raWVzLmRhdCI7CisjZW5kaWYKK30KKworLy8gQ3Vy
bENvbnRleHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCitDdXJsQ29udGV4dDo6Q3VybENvbnRleHQoKQorICAgIDog
bV9jb29raWVKYXJGaWxlTmFtZShjb29raWVKYXJQYXRoKCkpCisgICAgLCBtX2NlcnRpZmljYXRl
UGF0aChjZXJ0aWZpY2F0ZVBhdGgoKSkKKworeworICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9H
TE9CQUxfQUxMKTsKKyAgICBtX2N1cmxTaGFyZUhhbmRsZSA9IGN1cmxfc2hhcmVfaW5pdCgpOwor
ICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hBUkUs
IENVUkxfTE9DS19EQVRBX0NPT0tJRSk7CisgICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hh
cmVIYW5kbGUsIENVUkxTSE9QVF9TSEFSRSwgQ1VSTF9MT0NLX0RBVEFfRE5TKTsKKyAgICBjdXJs
X3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX0xPQ0tGVU5DLCBsb2Nr
KTsKKyAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX1VO
TE9DS0ZVTkMsIHVubG9jayk7CisKKyAgICBpbml0Q29va2llU2Vzc2lvbigpOworCisgICAgbV9p
Z25vcmVTU0xFcnJvcnMgPSBnZXRlbnYoIldFQktJVF9JR05PUkVfU1NMX0VSUk9SUyIpOworCisj
aWZuZGVmIE5ERUJVRworICAgIG1fdmVyYm9zZSA9IGdldGVudigiREVCVUdfQ1VSTCIpOworCisg
ICAgY2hhciogbG9nRmlsZSA9IGdldGVudigiQ1VSTF9MT0dfRklMRSIpOworICAgIGlmIChsb2dG
aWxlKQorICAgICAgICBtX2xvZ0ZpbGUgPSBmb3Blbihsb2dGaWxlLCAiYSIpOworI2VuZGlmCit9
CisKK0N1cmxDb250ZXh0Ojp+Q3VybENvbnRleHQoKQoreworICAgIGN1cmxfc2hhcmVfY2xlYW51
cChtX2N1cmxTaGFyZUhhbmRsZSk7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisjaWZu
ZGVmIE5ERUJVRworICAgIGlmIChtX2xvZ0ZpbGUpCisgICAgICAgIGZjbG9zZShtX2xvZ0ZpbGUp
OworI2VuZGlmCit9CisKKy8vIENvb2tpZSA9PT09PT09PT09PT09PT09PT09PT09PQorCit2b2lk
IEN1cmxDb250ZXh0Ojppbml0Q29va2llU2Vzc2lvbigpCit7CisgICAgLy8gQ3VybCBzYXZlcyBi
b3RoIHBlcnNpc3RlbnQgY29va2llcywgYW5kIHNlc3Npb24gY29va2llcyB0byB0aGUgY29va2ll
IGZpbGUuCisgICAgLy8gVGhlIHNlc3Npb24gY29va2llcyBzaG91bGQgYmUgZGVsZXRlZCBiZWZv
cmUgc3RhcnRpbmcgYSBuZXcgc2Vzc2lvbi4KKworICAgIENVUkwqIGN1cmwgPSBjdXJsX2Vhc3lf
aW5pdCgpOworCisgICAgaWYgKCFjdXJsKQorICAgICAgICByZXR1cm47CisKKyAgICBjdXJsX2Vh
c3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU0hBUkUsIGdldEN1cmxTaGFyZUhhbmRsZSgpKTsKKwor
ICAgIGlmICghbV9jb29raWVKYXJGaWxlTmFtZS5pc051bGwoKSkgeworICAgICAgICBjdXJsX2Vh
c3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ09PS0lFRklMRSwgbV9jb29raWVKYXJGaWxlTmFtZSk7
CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09LSUVKQVIsIG1fY29v
a2llSmFyRmlsZU5hbWUpOworICAgIH0KKworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VS
TE9QVF9DT09LSUVTRVNTSU9OLCAxKTsKKworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOwor
fQorCisvLyBQcm94eSA9PT09PT09PT09PT09PT09PT09PT09PQorCitzdGQ6OnR1cGxlPEN1cmxQ
cm94eVR5cGUsIGNvbnN0IFN0cmluZyY+IEN1cmxDb250ZXh0OjpnZXRQcm94eUluZm8oKSBjb25z
dAoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUobV9wcm94eVR5cGUsIG1fcHJveHkpOwor
fQorCit2b2lkIEN1cmxDb250ZXh0OjpzZXRQcm94eUluZm8oY29uc3QgU3RyaW5nJiBob3N0LAor
ICAgIHVuc2lnbmVkIGxvbmcgcG9ydCwKKyAgICBDdXJsUHJveHlUeXBlICB0eXBlLAorICAgIGNv
bnN0IFN0cmluZyYgdXNlcm5hbWUsCisgICAgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKK3sKKwor
ICAgIGlmICghaG9zdC5sZW5ndGgoKSkgeworICAgICAgICBtX3Byb3h5VHlwZSA9IEN1cmxQcm94
eVR5cGU6OkludmFsaWQ7CisgICAgICAgIG1fcHJveHkgPSBlbXB0eVN0cmluZygpOworICAgIH0K
KyAgICBlbHNlIHsKKyAgICAgICAgbV9wcm94eVR5cGUgPSB0eXBlOworCisgICAgICAgIFN0cmlu
ZyB1c2VyUGFzczsKKyAgICAgICAgaWYgKHVzZXJuYW1lLmxlbmd0aCgpIHx8IHBhc3N3b3JkLmxl
bmd0aCgpKQorICAgICAgICAgICAgdXNlclBhc3MgPSB1c2VybmFtZSArICI6IiArIHBhc3N3b3Jk
ICsgIkAiOworCisgICAgICAgIG1fcHJveHkgPSBTdHJpbmcoImh0dHA6Ly8iKSArIHVzZXJQYXNz
ICsgaG9zdCArICI6IiArIFN0cmluZzo6bnVtYmVyKHBvcnQpOworICAgIH0KK30KKworLy8gQ3Vy
bCBVdGlsaXRpZXMgPT09PT09PT09PT09PT09PT09PT09PT0KKworVVJMIEN1cmxDb250ZXh0Ojpn
ZXRFZmZlY3RpdmVVUkwoQ1VSTCogaGFuZGxlKQoreworICAgIGNvbnN0IGNoYXIqIHVybDsKKyAg
ICBDVVJMY29kZSBlcnIgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhoYW5kbGUsIENVUkxJTkZPX0VGRkVD
VElWRV9VUkwsICZ1cmwpOworICAgIGlmIChDVVJMRV9PSyAhPSBlcnIpCisgICAgICAgIHJldHVy
biBVUkwoKTsKKyAgICByZXR1cm4gVVJMKFVSTCgpLCB1cmwpOworfQorCitDVVJMTSogQ3VybENv
bnRleHQ6OmNyZWF0ZU11bHRpSGFuZGxlKCkKK3sKKyAgICByZXR1cm4gY3VybF9tdWx0aV9pbml0
KCk7Cit9CisKKy8vIFNoYXJlZCBSZXNvdXJjZSBtYW5hZ2VtZW50ID09PT09PT09PT09PT09PT09
PT09PT09CisKK0xvY2sqIEN1cmxDb250ZXh0OjptdXRleEZvcihjdXJsX2xvY2tfZGF0YSBkYXRh
KQoreworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBjb29raWVNdXRl
eCwgKCkpOworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBkbnNNdXRl
eCwgKCkpOworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBzaGFyZU11
dGV4LCAoKSk7CisKKyAgICBzd2l0Y2ggKGRhdGEpIHsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRB
X0NPT0tJRToKKyAgICAgICAgcmV0dXJuICZjb29raWVNdXRleDsKKyAgICBjYXNlIENVUkxfTE9D
S19EQVRBX0ROUzoKKyAgICAgICAgcmV0dXJuICZkbnNNdXRleDsKKyAgICBjYXNlIENVUkxfTE9D
S19EQVRBX1NIQVJFOgorICAgICAgICByZXR1cm4gJnNoYXJlTXV0ZXg7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KK30KKworLy8gbGliY3VybCBkb2VzIG5vdCBpbXBsZW1lbnQgaXRzIG93biB0aHJlYWQg
c3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuCisvLyB0aGVzZSB0d28gZnVuY3Rpb25zIHByb3Zp
ZGUgbXV0ZXhlcyBmb3IgY29va2llcywgYW5kIGZvciB0aGUgZ2xvYmFsIEROUworLy8gY2FjaGUu
Cit2b2lkIEN1cmxDb250ZXh0Ojpsb2NrKENVUkwqIC8qIGhhbmRsZSAqLywgY3VybF9sb2NrX2Rh
dGEgZGF0YSwgY3VybF9sb2NrX2FjY2VzcyAvKiBhY2Nlc3MgKi8sIHZvaWQqIC8qIHVzZXJQdHIg
Ki8pCit7CisgICAgaWYgKExvY2sqIG11dGV4ID0gbXV0ZXhGb3IoZGF0YSkpCisgICAgICAgIG11
dGV4LT5sb2NrKCk7Cit9CisKK3ZvaWQgQ3VybENvbnRleHQ6OnVubG9jayhDVVJMKiAvKiBoYW5k
bGUgKi8sIGN1cmxfbG9ja19kYXRhIGRhdGEsIHZvaWQqIC8qIHVzZXJQdHIgKi8pCit7CisgICAg
aWYgKExvY2sqIG11dGV4ID0gbXV0ZXhGb3IoZGF0YSkpCisgICAgICAgIG11dGV4LT51bmxvY2so
KTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjA5NThmMGExNGY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDxXVEYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRl
IDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8
Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAiVVJMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
ZW51bSBjbGFzcyBDdXJsUHJveHlUeXBlIHsKKyAgICBJbnZhbGlkID0gLTEsCisgICAgSFRUUCA9
IENVUkxQUk9YWV9IVFRQLAorICAgIFNvY2tzNCA9IENVUkxQUk9YWV9TT0NLUzQsCisgICAgU29j
a3M0QSA9IENVUkxQUk9YWV9TT0NLUzRBLAorICAgIFNvY2tzNSA9IENVUkxQUk9YWV9TT0NLUzUs
CisgICAgU29ja3M1SG9zdG5hbWUgPSBDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FCit9OworCitj
bGFzcyBDdXJsQ29udGV4dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VybENvbnRleHQp
OworCitwdWJsaWM6CisKKyAgICBzdGF0aWMgQ3VybENvbnRleHQmIHNpbmdsZXRvbigpCisgICAg
eworICAgICAgICAvLyBTaW5jZSBpdCdzIGEgc3RhdGljIHZhcmlhYmxlLCBpZiB0aGUgY2xhc3Mg
aGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLAorICAgICAgICAvLyBJdCB3b24ndCBiZSBjcmVhdGVk
IGFnYWluLgorICAgICAgICAvLyBBbmQgaXQgKippcyoqIHRocmVhZC1zYWZlIGluIEMrKzExLgor
CisgICAgICAgIHN0YXRpYyBDdXJsQ29udGV4dCBzaGFyZWQ7CisgICAgICAgIHJldHVybiBzaGFy
ZWQ7CisgICAgfQorCisgICAgQ3VybENvbnRleHQoKTsKKyAgICB2aXJ0dWFsIH5DdXJsQ29udGV4
dCgpOworCisgICAgQ1VSTFNIKiBnZXRDdXJsU2hhcmVIYW5kbGUoKSBjb25zdCB7IHJldHVybiBt
X2N1cmxTaGFyZUhhbmRsZTsgfQorCisgICAgQ1VSTE0qIGNyZWF0ZU11bHRpSGFuZGxlKCk7CisK
KyAgICAvLyBDb29raWUKKyAgICBjb25zdCBjaGFyKiBnZXRDb29raWVKYXJGaWxlTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29va2llSmFyRmlsZU5hbWUuZGF0YSgpOyB9CisgICAgdm9pZCBzZXRD
b29raWVKYXJGaWxlTmFtZShjb25zdCBjaGFyKiBjb29raWVKYXJGaWxlTmFtZSkgeyBtX2Nvb2tp
ZUphckZpbGVOYW1lID0gQ1N0cmluZyhjb29raWVKYXJGaWxlTmFtZSk7IH0KKworICAgIC8vIENl
cnRpZmljYXRlCisgICAgY29uc3QgY2hhciogZ2V0Q2VydGlmaWNhdGVQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9jZXJ0aWZpY2F0ZVBhdGguZGF0YSgpOyB9CisgICAgYm9vbCBzaG91bGRJZ25vcmVT
U0xFcnJvcnMoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZVNTTEVycm9yczsgfQorCisgICAgLy8g
UHJveHkKKyAgICBzdGQ6OnR1cGxlPEN1cmxQcm94eVR5cGUsIGNvbnN0IFN0cmluZyY+IGdldFBy
b3h5SW5mbygpIGNvbnN0OworICAgIHZvaWQgc2V0UHJveHlJbmZvKGNvbnN0IFN0cmluZyYgaG9z
dCA9IGVtcHR5U3RyaW5nKCksIHVuc2lnbmVkIGxvbmcgcG9ydCA9IDAsIEN1cmxQcm94eVR5cGUg
PSBDdXJsUHJveHlUeXBlOjpIVFRQLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lID0gZW1wdHlTdHJp
bmcoKSwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCA9IGVtcHR5U3RyaW5nKCkpOworCisgICAgLy8g
VXRpbGl0aWVzCisgICAgVVJMIGdldEVmZmVjdGl2ZVVSTChDVVJMKiBoYW5kbGUpOworCisjaWZu
ZGVmIE5ERUJVRworICAgIEZJTEUqIGdldExvZ0ZpbGUoKSBjb25zdCB7IHJldHVybiBtX2xvZ0Zp
bGU7IH0KKyAgICBib29sIGlzVmVyYm9zZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVyYm9zZTsgfQor
I2VuZGlmCisKK3ByaXZhdGU6CisKKyAgICBDVVJMU0gqIG1fY3VybFNoYXJlSGFuZGxlIHsgbnVs
bHB0ciB9OworCisgICAgQ1N0cmluZyBtX2Nvb2tpZUphckZpbGVOYW1lOworCisgICAgQ1N0cmlu
ZyBtX2NlcnRpZmljYXRlUGF0aDsKKyAgICBib29sIG1faWdub3JlU1NMRXJyb3JzIHsgZmFsc2Ug
fTsKKworICAgIFN0cmluZyBtX3Byb3h5OworICAgIEN1cmxQcm94eVR5cGUgbV9wcm94eVR5cGUg
eyBDdXJsUHJveHlUeXBlOjpJbnZhbGlkIH07CisKKyAgICB2b2lkIGluaXRDb29raWVTZXNzaW9u
KCk7CisKKyAgICBzdGF0aWMgdm9pZCBsb2NrKENVUkwqLCBjdXJsX2xvY2tfZGF0YSwgY3VybF9s
b2NrX2FjY2Vzcywgdm9pZCopOworICAgIHN0YXRpYyB2b2lkIHVubG9jayhDVVJMKiwgY3VybF9s
b2NrX2RhdGEsIHZvaWQqKTsKKyAgICBzdGF0aWMgTG9jayogbXV0ZXhGb3IoY3VybF9sb2NrX2Rh
dGEpOworCisjaWZuZGVmIE5ERUJVRworICAgIEZJTEUqIG1fbG9nRmlsZSB7IG51bGxwdHIgfTsK
KyAgICBib29sIG1fdmVyYm9zZSB7IGZhbHNlIH07CisjZW5kaWYKK307CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAK
aW5kZXggOTg5NTA1ZTMzMGYuLmE1ZTIxNzgwZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcApAQCAtMjcsNiArMjcs
NyBAQAogCiAjaWYgVVNFKENVUkwpCiAKKyNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgogI2luY2x1
ZGUgIkN1cmxEb3dubG9hZC5oIgogCiAjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCkBAIC04
NSw3ICs4Niw3IEBAIHZvaWQgQ3VybERvd25sb2FkOjppbml0KEN1cmxEb3dubG9hZExpc3RlbmVy
KiBsaXN0ZW5lciwgY29uc3QgVVJMJiB1cmwpCiAgICAgaWYgKGNlcnRQYXRoKQogICAgICAgICBj
dXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9DQUlORk8sIGNlcnRQYXRoKTsK
IAotICAgIENVUkxTSCogY3VybHNoID0gQ3VybE1hbmFnZXI6OnNpbmdsZXRvbigpLmdldEN1cmxT
aGFyZUhhbmRsZSgpOworICAgIENVUkxTSCogY3VybHNoID0gQ3VybENvbnRleHQ6OnNpbmdsZXRv
bigpLmdldEN1cmxTaGFyZUhhbmRsZSgpOwogICAgIGlmIChjdXJsc2gpCiAgICAgICAgIGN1cmxf
ZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxlLCBDVVJMT1BUX1NIQVJFLCBjdXJsc2gpOwogCkBAIC0x
MDYsMTMgKzEwNywxMyBAQCB2b2lkIEN1cmxEb3dubG9hZDo6aW5pdChDdXJsRG93bmxvYWRMaXN0
ZW5lciogbGlzdGVuZXIsIFJlc291cmNlSGFuZGxlKiwgY29uc3QgUgogCiBib29sIEN1cmxEb3du
bG9hZDo6c3RhcnQoKQogewotICAgIHJlZigpOyAvLyBDdXJsRG93bmxvYWRNYW5hZ2VyOjpkb3du
bG9hZFRocmVhZCB3aWxsIGNhbGwgZGVyZWYgd2hlbiB0aGUgZG93bmxvYWQgaGFzIGZpbmlzaGVk
LgotICAgIHJldHVybiBDdXJsTWFuYWdlcjo6c2luZ2xldG9uKCkuYWRkKG1fY3VybEhhbmRsZSk7
CisgICAgcmVmKCk7IC8vIEN1cmxKb2JNYW5hZ2VyIHdpbGwgY2FsbCBkZXJlZiB3aGVuIHRoZSBk
b3dubG9hZCBoYXMgZmluaXNoZWQuCisgICAgcmV0dXJuIEN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0
b24oKS5hZGQobV9jdXJsSGFuZGxlKTsKIH0KIAogYm9vbCBDdXJsRG93bmxvYWQ6OmNhbmNlbCgp
CiB7Ci0gICAgcmV0dXJuIEN1cmxNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1vdmUobV9jdXJsSGFu
ZGxlKTsKKyAgICByZXR1cm4gQ3VybEpvYk1hbmFnZXI6OnNpbmdsZXRvbigpLnJlbW92ZShtX2N1
cmxIYW5kbGUpOwogfQogCiBTdHJpbmcgQ3VybERvd25sb2FkOjpnZXRUZW1wUGF0aCgpIGNvbnN0
CkBAIC0yMDMsNyArMjA0LDcgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OmRpZFJlY2VpdmVIZWFkZXIo
Y29uc3QgU3RyaW5nJiBoZWFkZXIpCiAgICAgICAgIFVOVVNFRF9QQVJBTShlcnIpOwogCiAgICAg
ICAgIGlmIChodHRwQ29kZSA+PSAyMDAgJiYgaHR0cENvZGUgPCAzMDApIHsKLSAgICAgICAgICAg
IFVSTCB1cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChtX2N1cmxIYW5kbGUpOworICAg
ICAgICAgICAgVVJMIHVybCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRFZmZlY3RpdmVV
UkwobV9jdXJsSGFuZGxlKTsKICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHVy
bCA9IHVybC5pc29sYXRlZENvcHkoKSwgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7
CiAgICAgICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRVUkwodXJsKTsKICAgICAgICAgICAgICAg
ICBtX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUobV9y
ZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3du
bG9hZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9h
ZC5oCmluZGV4IDMxMmU0NzAwMjc2Li5mOTAzMDZjNmYwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaApAQCAtMzYsNyArMzYs
NyBAQAogI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgIkN1cmxNYW5h
Z2VyLmgiCisjaW5jbHVkZSAiQ3VybEpvYk1hbmFnZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxK
b2JNYW5hZ2VyLmNwcApzaW1pbGFyaXR5IGluZGV4IDY1JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIuY3BwCnJlbmFtZSB0byBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuY3BwCmluZGV4
IDhmMmVlZjY1MmNmLi43OTRmMWE3YTEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuY3BwCkBAIC0yNyw3ICsyNyw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBVU0UoQ1VSTCkKLSNpbmNsdWRlICJDdXJsTWFu
YWdlci5oIgorI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCisjaW5jbHVkZSAiQ3VybEpvYk1hbmFn
ZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgpAQCAtMzYsMzcgKzM3LDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEN1cmxTaGFyZWRSZXNvdXJjZXMgewotcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIGxvY2soQ1VSTCosIGN1cmxfbG9ja19kYXRhLCBjdXJsX2xv
Y2tfYWNjZXNzLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgdW5sb2NrKENVUkwqLCBjdXJsX2xv
Y2tfZGF0YSwgdm9pZCopOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBMb2NrKiBtdXRleEZvcihj
dXJsX2xvY2tfZGF0YSk7Ci19OwotCi0vLyBDdXJsRG93bmxvYWRNYW5hZ2VyIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotQ3VybE1hbmFnZXI6OkN1cmxNYW5hZ2VyKCkKK0N1cmxKb2JNYW5hZ2VyOjpDdXJsSm9iTWFu
YWdlcigpCiB7Ci0gICAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOwotICAgIG1f
Y3VybE11bHRpSGFuZGxlID0gY3VybF9tdWx0aV9pbml0KCk7Ci0gICAgbV9jdXJsU2hhcmVIYW5k
bGUgPSBjdXJsX3NoYXJlX2luaXQoKTsKLSAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFy
ZUhhbmRsZSwgQ1VSTFNIT1BUX1NIQVJFLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUpOwotICAgIGN1
cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hBUkUsIENVUkxf
TE9DS19EQVRBX0ROUyk7Ci0gICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5kbGUs
IENVUkxTSE9QVF9MT0NLRlVOQywgQ3VybFNoYXJlZFJlc291cmNlczo6bG9jayk7Ci0gICAgY3Vy
bF9zaGFyZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9VTkxPQ0tGVU5DLCBD
dXJsU2hhcmVkUmVzb3VyY2VzOjp1bmxvY2spOworICAgIG1fY3VybE11bHRpSGFuZGxlID0gQ3Vy
bENvbnRleHQ6OnNpbmdsZXRvbigpLmNyZWF0ZU11bHRpSGFuZGxlKCk7CiB9CiAKLUN1cmxNYW5h
Z2VyOjp+Q3VybE1hbmFnZXIoKQorQ3VybEpvYk1hbmFnZXI6On5DdXJsSm9iTWFuYWdlcigpCiB7
Ci0gICAgc3RvcFRocmVhZCgpOwogICAgIGN1cmxfbXVsdGlfY2xlYW51cChtX2N1cmxNdWx0aUhh
bmRsZSk7Ci0gICAgY3VybF9zaGFyZV9jbGVhbnVwKG1fY3VybFNoYXJlSGFuZGxlKTsKLSAgICBj
dXJsX2dsb2JhbF9jbGVhbnVwKCk7CiB9CiAKLWJvb2wgQ3VybE1hbmFnZXI6OmFkZChDVVJMKiBj
dXJsSGFuZGxlKQorYm9vbCBDdXJsSm9iTWFuYWdlcjo6YWRkKENVUkwqIGN1cmxIYW5kbGUpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtODAsNyArNjEsNyBAQCBib29sIEN1
cmxNYW5hZ2VyOjphZGQoQ1VSTCogY3VybEhhbmRsZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBDdXJsTWFuYWdlcjo6cmVtb3ZlKENVUkwqIGN1cmxIYW5kbGUpCitib29sIEN1cmxKb2JN
YW5hZ2VyOjpyZW1vdmUoQ1VSTCogY3VybEhhbmRsZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX211dGV4KTsKIApAQCAtODksMTkgKzcwLDE5IEBAIGJvb2wgQ3VybE1hbmFnZXI6OnJlbW92
ZShDVVJMKiBjdXJsSGFuZGxlKQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbnQgQ3VybE1hbmFn
ZXI6OmdldEFjdGl2ZUNvdW50KCkgY29uc3QKK2ludCBDdXJsSm9iTWFuYWdlcjo6Z2V0QWN0aXZl
Q291bnQoKSBjb25zdAogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOwogICAgIHJl
dHVybiBtX2FjdGl2ZUhhbmRsZUxpc3Quc2l6ZSgpOwogfQogCi1pbnQgQ3VybE1hbmFnZXI6Omdl
dFBlbmRpbmdDb3VudCgpIGNvbnN0CitpbnQgQ3VybEpvYk1hbmFnZXI6OmdldFBlbmRpbmdDb3Vu
dCgpIGNvbnN0CiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CiAgICAgcmV0dXJu
IG1fcGVuZGluZ0hhbmRsZUxpc3Quc2l6ZSgpOwogfQogCi12b2lkIEN1cmxNYW5hZ2VyOjpzdGFy
dFRocmVhZElmTmVlZGVkKCkKK3ZvaWQgQ3VybEpvYk1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVk
ZWQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKQEAgLTExMyw3ICs5NCw3IEBA
IHZvaWQgQ3VybE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQogICAgIH0KIH0KIAotdm9p
ZCBDdXJsTWFuYWdlcjo6c3RvcFRocmVhZCgpCit2b2lkIEN1cmxKb2JNYW5hZ2VyOjpzdG9wVGhy
ZWFkKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0xMjUsMTMgKzEwNiwx
MyBAQCB2b2lkIEN1cmxNYW5hZ2VyOjpzdG9wVGhyZWFkKCkKICAgICB9CiB9CiAKLXZvaWQgQ3Vy
bE1hbmFnZXI6OnN0b3BUaHJlYWRJZklkbGUoKQordm9pZCBDdXJsSm9iTWFuYWdlcjo6c3RvcFRo
cmVhZElmSWRsZSgpCiB7CiAgICAgaWYgKCFnZXRBY3RpdmVDb3VudCgpICYmICFnZXRQZW5kaW5n
Q291bnQoKSkKICAgICAgICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKIH0KIAotdm9pZCBDdXJsTWFu
YWdlcjo6dXBkYXRlSGFuZGxlTGlzdCgpCit2b2lkIEN1cmxKb2JNYW5hZ2VyOjp1cGRhdGVIYW5k
bGVMaXN0KCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKIApAQCAtMTUwLDcg
KzEzMSw3IEBAIHZvaWQgQ3VybE1hbmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QoKQogICAgIH0KIH0K
IAotYm9vbCBDdXJsTWFuYWdlcjo6YWRkVG9DdXJsKENVUkwqIGN1cmxIYW5kbGUpCitib29sIEN1
cmxKb2JNYW5hZ2VyOjphZGRUb0N1cmwoQ1VSTCogY3VybEhhbmRsZSkKIHsKICAgICBDVVJMTWNv
ZGUgcmV0dmFsID0gY3VybF9tdWx0aV9hZGRfaGFuZGxlKG1fY3VybE11bHRpSGFuZGxlLCBjdXJs
SGFuZGxlKTsKICAgICBpZiAocmV0dmFsID09IENVUkxNX09LKSB7CkBAIC0xNjAsNyArMTQxLDcg
QEAgYm9vbCBDdXJsTWFuYWdlcjo6YWRkVG9DdXJsKENVUkwqIGN1cmxIYW5kbGUpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIEN1cmxNYW5hZ2VyOjpyZW1vdmVGcm9tQ3VybChDVVJMKiBj
dXJsSGFuZGxlKQorYm9vbCBDdXJsSm9iTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwoQ1VSTCogY3Vy
bEhhbmRsZSkKIHsKICAgICBpbnQgaGFuZGxlUG9zID0gbV9hY3RpdmVIYW5kbGVMaXN0LmZpbmQo
Y3VybEhhbmRsZSk7CiAKQEAgLTE3NiwxMSArMTU3LDExIEBAIGJvb2wgQ3VybE1hbmFnZXI6OnJl
bW92ZUZyb21DdXJsKENVUkwqIGN1cmxIYW5kbGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIEN1cmxNYW5hZ2VyOjp3b3JrZXJUaHJlYWQodm9pZCogZGF0YSkKK3ZvaWQgQ3VybEpvYk1h
bmFnZXI6OndvcmtlclRocmVhZCh2b2lkKiBkYXRhKQogewogICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwogCi0gICAgQ3VybE1hbmFnZXIqIG1hbmFnZXIgPSByZWludGVycHJldF9jYXN0PEN1
cmxNYW5hZ2VyKj4oZGF0YSk7CisgICAgQ3VybEpvYk1hbmFnZXIqIG1hbmFnZXIgPSByZWludGVy
cHJldF9jYXN0PEN1cmxKb2JNYW5hZ2VyKj4oZGF0YSk7CiAKICAgICB3aGlsZSAobWFuYWdlci0+
cnVuVGhyZWFkKCkpIHsKIApAQCAtMjM2LDUzICsyMTcsNiBAQCB2b2lkIEN1cmxNYW5hZ2VyOjp3
b3JrZXJUaHJlYWQodm9pZCogZGF0YSkKICAgICB9CiB9CiAKLS8vIENVUkwgVXRpbGl0aWVzCi0K
LVVSTCBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChDVVJMKiBoYW5kbGUpCi17Ci0gICAgY29u
c3QgY2hhciogdXJsOwotICAgIENVUkxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKGhhbmRs
ZSwgQ1VSTElORk9fRUZGRUNUSVZFX1VSTCwgJnVybCk7Ci0gICAgaWYgKENVUkxFX09LICE9IGVy
cikKLSAgICAgICAgcmV0dXJuIFVSTCgpOwotICAgIHJldHVybiBVUkwoVVJMKCksIHVybCk7Ci19
Ci0KLS8vIFNoYXJlZCBSZXNvdXJjZSBtYW5hZ2VtZW50ID09PT09PT09PT09PT09PT09PT09PT09
Ci0KLUxvY2sqIEN1cmxTaGFyZWRSZXNvdXJjZXM6Om11dGV4Rm9yKGN1cmxfbG9ja19kYXRhIGRh
dGEpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKExvY2ssIGNvb2tpZU11
dGV4LCAoKSk7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKExvY2ssIGRuc011
dGV4LCAoKSk7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKExvY2ssIHNoYXJl
TXV0ZXgsICgpKTsKLQotICAgIHN3aXRjaCAoZGF0YSkgewotICAgIGNhc2UgQ1VSTF9MT0NLX0RB
VEFfQ09PS0lFOgotICAgICAgICByZXR1cm4gJmNvb2tpZU11dGV4OwotICAgIGNhc2UgQ1VSTF9M
T0NLX0RBVEFfRE5TOgotICAgICAgICByZXR1cm4gJmRuc011dGV4OwotICAgIGNhc2UgQ1VSTF9M
T0NLX0RBVEFfU0hBUkU6Ci0gICAgICAgIHJldHVybiAmc2hhcmVNdXRleDsKLSAgICBkZWZhdWx0
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotfQotCi0vLyBsaWJjdXJsIGRvZXMgbm90IGltcGxlbWVudCBpdHMgb3duIHRocmVh
ZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4KLS8vIHRoZXNlIHR3byBmdW5jdGlvbnMgcHJv
dmlkZSBtdXRleGVzIGZvciBjb29raWVzLCBhbmQgZm9yIHRoZSBnbG9iYWwgRE5TCi0vLyBjYWNo
ZS4KLXZvaWQgQ3VybFNoYXJlZFJlc291cmNlczo6bG9jayhDVVJMKiAvKiBoYW5kbGUgKi8sIGN1
cmxfbG9ja19kYXRhIGRhdGEsIGN1cmxfbG9ja19hY2Nlc3MgLyogYWNjZXNzICovLCB2b2lkKiAv
KiB1c2VyUHRyICovKQotewotICAgIGlmIChMb2NrKiBtdXRleCA9IEN1cmxTaGFyZWRSZXNvdXJj
ZXM6Om11dGV4Rm9yKGRhdGEpKQotICAgICAgICBtdXRleC0+bG9jaygpOwotfQotCi12b2lkIEN1
cmxTaGFyZWRSZXNvdXJjZXM6OnVubG9jayhDVVJMKiAvKiBoYW5kbGUgKi8sIGN1cmxfbG9ja19k
YXRhIGRhdGEsIHZvaWQqIC8qIHVzZXJQdHIgKi8pCi17Ci0gICAgaWYgKExvY2sqIG11dGV4ID0g
Q3VybFNoYXJlZFJlc291cmNlczo6bXV0ZXhGb3IoZGF0YSkpCi0gICAgICAgIG11dGV4LT51bmxv
Y2soKTsKLX0KLQogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmgKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1l
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmgK
cmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFu
YWdlci5oCmluZGV4IDk1MjNkNGNkNDNiLi4xMjk1ODJhM2Y1NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmgKQEAgLTQ2LDIw
ICs0NiwyMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDdXJsSm9iQWN0aW9uIGhhbmRsZUN1cmxN
c2coQ1VSTE1zZyopID0gMDsKIH07CiAKLWNsYXNzIEN1cmxNYW5hZ2VyIHsKK2NsYXNzIEN1cmxK
b2JNYW5hZ2VyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgQ3VybE1hbmFnZXImIHNpbmdsZXRvbigp
CisgICAgc3RhdGljIEN1cmxKb2JNYW5hZ2VyJiBzaW5nbGV0b24oKQogICAgIHsKICAgICAgICAg
Ly8gU2luY2UgaXQncyBhIHN0YXRpYyB2YXJpYWJsZSwgaWYgdGhlIGNsYXNzIGhhcyBhbHJlYWR5
IGJlZW4gY3JlYXRlZCwKICAgICAgICAgLy8gSXQgd29uJ3QgYmUgY3JlYXRlZCBhZ2Fpbi4KICAg
ICAgICAgLy8gQW5kIGl0ICoqaXMqKiB0aHJlYWQtc2FmZSBpbiBDKysxMS4KIAotICAgICAgICBz
dGF0aWMgQ3VybE1hbmFnZXIgc2hhcmVkOworICAgICAgICBzdGF0aWMgQ3VybEpvYk1hbmFnZXIg
c2hhcmVkOwogICAgICAgICByZXR1cm4gc2hhcmVkOwogICAgIH0KIAotICAgIEN1cmxNYW5hZ2Vy
KCk7Ci0gICAgdmlydHVhbCB+Q3VybE1hbmFnZXIoKTsKKyAgICBDdXJsSm9iTWFuYWdlcigpOwor
ICAgIHZpcnR1YWwgfkN1cmxKb2JNYW5hZ2VyKCk7CiAKICAgICBib29sIGFkZChDVVJMKiBjdXJs
SGFuZGxlKTsKICAgICBib29sIHJlbW92ZShDVVJMKiBjdXJsSGFuZGxlKTsKQEAgLTY3LDggKzY3
LDYgQEAgcHVibGljOgogICAgIGludCBnZXRBY3RpdmVDb3VudCgpIGNvbnN0OwogICAgIGludCBn
ZXRQZW5kaW5nQ291bnQoKSBjb25zdDsKIAotICAgIENVUkxTSCogZ2V0Q3VybFNoYXJlSGFuZGxl
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJsU2hhcmVIYW5kbGU7IH0KLQogcHJpdmF0ZToKICAgICB2
b2lkIHN0YXJ0VGhyZWFkSWZOZWVkZWQoKTsKICAgICB2b2lkIHN0b3BUaHJlYWQoKTsKQEAgLTk0
LDE0ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBMb2NrIG1fbXV0ZXg7CiAgICAgYm9v
bCBtX3J1blRocmVhZCB7IGZhbHNlIH07CiAKLSAgICBDVVJMU0gqIG1fY3VybFNoYXJlSGFuZGxl
IHsgbnVsbHB0ciB9OwotCiAgICAgZnJpZW5kIGNsYXNzIEN1cmxKb2I7CiB9OwogCi1jbGFzcyBD
dXJsVXRpbHMgewotcHVibGljOgotICAgIHN0YXRpYyBVUkwgZ2V0RWZmZWN0aXZlVVJMKENVUkwq
IGhhbmRsZSk7Ci19OwotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCmluZGV4IDIwYTkz
NGE5OWI2Li40YmEyN2RlOGI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKQEAgLTQy
LDcgKzQyLDcgQEAKIAogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCiAjaW5jbHVkZSAi
Q3VybENhY2hlTWFuYWdlci5oIgotI2luY2x1ZGUgIkN1cmxNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
Q3VybENvbnRleHQuaCIKICNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlICJI
VFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKQEAgLTYwLDkgKzYw
LDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKICNpZiBPUyhXSU5ET1dT
KQotI2luY2x1ZGUgIldlYkNvcmVCdW5kbGVXaW4uaCIKLSNpbmNsdWRlIDxzaGxvYmouaD4KLSNp
bmNsdWRlIDxzaGx3YXBpLmg+CiAjZWxzZQogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2RlZmlu
ZSBNQVhfUEFUSCBNQVhQQVRITEVOCkBAIC03MywxMyArNzAsOSBAQAogI2lmIEVOQUJMRShXRUJf
VElNSU5HKQogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2VuZGlmCi0jaWYgVVNFKENG
KQotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNlbmRpZgogI2luY2x1ZGUgPHd0Zi9Mb2Nr
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtODgsNjEgKzgxLDYgQEAgc3RhdGljIGNvbnN0IFNlY29uZHMgcG9sbFRpbWUgeyA1MF9tcyB9
OwogY29uc3QgaW50IG1heFJ1bm5pbmdKb2JzID0gMTI4OwogY29uc3QgY2hhciogY29uc3QgZXJy
b3JEb21haW5DdXJsID0gIkN1cmxFcnJvckRvbWFpbiI7CiAKLXN0YXRpYyBjb25zdCBib29sIGln
bm9yZVNTTEVycm9ycyA9IGdldGVudigiV0VCS0lUX0lHTk9SRV9TU0xfRVJST1JTIik7Ci0KLXN0
YXRpYyBDU3RyaW5nIGNlcnRpZmljYXRlUGF0aCgpCi17Ci0gICAgY2hhciogZW52UGF0aCA9IGdl
dGVudigiQ1VSTF9DQV9CVU5ETEVfUEFUSCIpOwotICAgIGlmIChlbnZQYXRoKQotICAgICAgICBy
ZXR1cm4gZW52UGF0aDsKLQotI2lmIFVTRShDRikKLSAgICBDRkJ1bmRsZVJlZiB3ZWJLaXRCdW5k
bGVSZWYgPSB3ZWJLaXRCdW5kbGUoKTsKLSAgICBpZiAod2ViS2l0QnVuZGxlUmVmKSB7Ci0gICAg
ICAgIFJldGFpblB0cjxDRlVSTFJlZj4gY2VydFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5
UmVzb3VyY2VVUkwod2ViS2l0QnVuZGxlUmVmLCBDRlNUUigiY2FjZXJ0IiksIENGU1RSKCJwZW0i
KSwgQ0ZTVFIoImNlcnRpZmljYXRlcyIpKSk7Ci0gICAgICAgIGlmIChjZXJ0VVJMUmVmKSB7Ci0g
ICAgICAgICAgICBjaGFyIHBhdGhbTUFYX1BBVEhdOwotICAgICAgICAgICAgQ0ZVUkxHZXRGaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24oY2VydFVSTFJlZi5nZXQoKSwgZmFsc2UsIHJlaW50ZXJwcmV0
X2Nhc3Q8VUludDgqPihwYXRoKSwgTUFYX1BBVEgpOwotICAgICAgICAgICAgcmV0dXJuIHBhdGg7
Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBDU3RyaW5nKCk7Ci19Ci0K
LXN0YXRpYyBjaGFyKiBjb29raWVKYXJQYXRoKCkKLXsKLSAgICBjaGFyKiBjb29raWVKYXJQYXRo
ID0gZ2V0ZW52KCJDVVJMX0NPT0tJRV9KQVJfUEFUSCIpOwotICAgIGlmIChjb29raWVKYXJQYXRo
KQotICAgICAgICByZXR1cm4gZmFzdFN0ckR1cChjb29raWVKYXJQYXRoKTsKLQotI2lmIE9TKFdJ
TkRPV1MpCi0gICAgY2hhciBleGVjdXRhYmxlUGF0aFtNQVhfUEFUSF07Ci0gICAgY2hhciBhcHBE
YXRhRGlyZWN0b3J5W01BWF9QQVRIXTsKLSAgICBjaGFyIGNvb2tpZUphckZ1bGxQYXRoW01BWF9Q
QVRIXTsKLSAgICBjaGFyIGNvb2tpZUphckRpcmVjdG9yeVtNQVhfUEFUSF07Ci0KLSAgICBpZiAo
RkFJTEVEKDo6U0hHZXRGb2xkZXJQYXRoQSgwLCBDU0lETF9MT0NBTF9BUFBEQVRBIHwgQ1NJRExf
RkxBR19DUkVBVEUsIDAsIDAsIGFwcERhdGFEaXJlY3RvcnkpKQotICAgICAgICB8fCBGQUlMRUQo
OjpHZXRNb2R1bGVGaWxlTmFtZUEoMCwgZXhlY3V0YWJsZVBhdGgsIE1BWF9QQVRIKSkpCi0gICAg
ICAgIHJldHVybiBmYXN0U3RyRHVwKCJjb29raWVzLmRhdCIpOwotCi0gICAgOjpQYXRoUmVtb3Zl
RXh0ZW5zaW9uQShleGVjdXRhYmxlUGF0aCk7Ci0gICAgTFBTVFIgZXhlY3V0YWJsZU5hbWUgPSA6
OlBhdGhGaW5kRmlsZU5hbWVBKGV4ZWN1dGFibGVQYXRoKTsKLSAgICBzcHJpbnRmX3MoY29va2ll
SmFyRGlyZWN0b3J5LCBNQVhfUEFUSCwgIiVzLyVzIiwgYXBwRGF0YURpcmVjdG9yeSwgZXhlY3V0
YWJsZU5hbWUpOwotICAgIHNwcmludGZfcyhjb29raWVKYXJGdWxsUGF0aCwgTUFYX1BBVEgsICIl
cy9jb29raWVzLmRhdCIsIGNvb2tpZUphckRpcmVjdG9yeSk7Ci0KLSAgICBpZiAoOjpTSENyZWF0
ZURpcmVjdG9yeUV4QSgwLCBjb29raWVKYXJEaXJlY3RvcnksIDApICE9IEVSUk9SX1NVQ0NFU1MK
LSAgICAgICAgJiYgOjpHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9GSUxFX0VYSVNUUwotICAgICAg
ICAmJiA6OkdldExhc3RFcnJvcigpICE9IEVSUk9SX0FMUkVBRFlfRVhJU1RTKQotICAgICAgICBy
ZXR1cm4gZmFzdFN0ckR1cCgiY29va2llcy5kYXQiKTsKLQotICAgIHJldHVybiBmYXN0U3RyRHVw
KGNvb2tpZUphckZ1bGxQYXRoKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhc3RTdHJEdXAoImNvb2tp
ZXMuZGF0Iik7Ci0jZW5kaWYKLX0KLQogI2lmIEVOQUJMRShXRUJfVElNSU5HKQogc3RhdGljIHZv
aWQgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKFJlc291cmNlSGFuZGxlSW50ZXJuYWwq
IGQpCiB7CkBAIC0xOTIsNDcgKzEzMCwxNCBAQCBpbmxpbmUgc3RhdGljIGJvb2wgaXNIdHRwTm90
TW9kaWZpZWQoaW50IHN0YXR1c0NvZGUpCiAKIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6UmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyKCkKICAgICA6IG1fZG93bmxvYWRUaW1lcigqdGhpcywgJlJlc291cmNl
SGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKQotICAgICwgbV9jb29raWVKYXJG
aWxlTmFtZShjb29raWVKYXJQYXRoKCkpCi0gICAgLCBtX2NlcnRpZmljYXRlUGF0aChjZXJ0aWZp
Y2F0ZVBhdGgoKSkKICAgICAsIG1fcnVubmluZ0pvYnMoMCkKLSNpZm5kZWYgTkRFQlVHCi0gICAg
LCBtX2xvZ0ZpbGUobnVsbHB0cikKLSNlbmRpZgogewotICAgIENVUkxTSCogaCA9IEN1cmxNYW5h
Z2VyOjpzaW5nbGV0b24oKS5nZXRDdXJsU2hhcmVIYW5kbGUoKTsKLSAgICBtX2N1cmxTaGFyZUhh
bmRsZSA9IGg7Ci0gICAgbV9jdXJsTXVsdGlIYW5kbGUgPSBjdXJsX211bHRpX2luaXQoKTsKLQot
Ci0gICAgaW5pdENvb2tpZVNlc3Npb24oKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBjaGFyKiBs
b2dGaWxlID0gZ2V0ZW52KCJDVVJMX0xPR19GSUxFIik7Ci0gICAgaWYgKGxvZ0ZpbGUpCi0gICAg
ICAgIG1fbG9nRmlsZSA9IGZvcGVuKGxvZ0ZpbGUsICJhIik7Ci0jZW5kaWYKKyAgICBtX2N1cmxN
dWx0aUhhbmRsZSA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRDdXJsU2hhcmVIYW5kbGUo
KTsKIH0KIAogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCkK
IHsKICAgICBjdXJsX211bHRpX2NsZWFudXAobV9jdXJsTXVsdGlIYW5kbGUpOwotICAgIGlmICht
X2Nvb2tpZUphckZpbGVOYW1lKQotICAgICAgICBmYXN0RnJlZShtX2Nvb2tpZUphckZpbGVOYW1l
KTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBpZiAobV9sb2dGaWxlKQotICAgICAgICBmY2xvc2Uo
bV9sb2dGaWxlKTsKLSNlbmRpZgotfQotCi12b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2V0
Q29va2llSmFyRmlsZU5hbWUoY29uc3QgY2hhciogY29va2llSmFyRmlsZU5hbWUpCi17Ci0gICAg
bV9jb29raWVKYXJGaWxlTmFtZSA9IGZhc3RTdHJEdXAoY29va2llSmFyRmlsZU5hbWUpOwotfQot
Ci1jb25zdCBjaGFyKiBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmdldENvb2tpZUphckZpbGVOYW1l
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb29raWVKYXJGaWxlTmFtZTsKIH0KIAogUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyKiBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCkK
QEAgLTI1MCw3ICsxNTUsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25z
ZSAoQ1VSTCogaGFuZGxlLCBSZXNvdXJjZUhhbmRsZSogam9iLCBSZXNvdQogICAgIC8vIHdoaWNo
IG1lYW5zIHRoZSBSZXNvdXJjZUxvYWRlcidzIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gdGhl
IFVSTC4KICAgICAvLyBSdW4gdGhlIGNvZGUgaGVyZSBmb3IgbG9jYWwgZmlsZXMgdG8gcmVzb2x2
ZSB0aGUgaXNzdWUuCiAgICAgLy8gVE9ETzogU2VlIGlmIHRoZXJlIGlzIGEgYmV0dGVyIGFwcHJv
YWNoIGZvciBoYW5kbGluZyB0aGlzLgotICAgIFVSTCB1cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVj
dGl2ZVVSTChoYW5kbGUpOworICAgIFVSTCB1cmwgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCku
Z2V0RWZmZWN0aXZlVVJMKGhhbmRsZSk7CiAgICAgQVNTRVJUKHVybC5pc1ZhbGlkKCkpOwogICAg
IGQtPm1fcmVzcG9uc2Uuc2V0VVJMKHVybCk7CiAgICAgIGlmIChkLT5jbGllbnQoKSkKQEAgLTM2
MSw3ICsyNjYsNyBAQCBzdGF0aWMgYm9vbCBnZXRQcm90ZWN0aW9uU3BhY2UoQ1VSTCogaCwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFByb3RlYwogICAgIGlmIChlcnIgIT0gQ1VS
TEVfT0spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFVSTCB1cmwgPSBDdXJsVXRpbHM6
OmdldEVmZmVjdGl2ZVVSTChoKTsKKyAgICBVUkwgdXJsID0gQ3VybENvbnRleHQ6OnNpbmdsZXRv
bigpLmdldEVmZmVjdGl2ZVVSTChoKTsKICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtNDUwLDcgKzM1NSw3IEBAIHN0YXRpYyBzaXplX3QgaGVhZGVy
Q2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRh
KQogICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhoLCBDVVJMSU5GT19DT05URU5UX0xFTkdUSF9E
T1dOTE9BRCwgJmNvbnRlbnRMZW5ndGgpOwogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEV4cGVj
dGVkQ29udGVudExlbmd0aChzdGF0aWNfY2FzdDxsb25nIGxvbmcgaW50Pihjb250ZW50TGVuZ3Ro
KSk7CiAKLSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRVUkwoQ3VybFV0aWxzOjpnZXRFZmZlY3Rp
dmVVUkwoaCkpOworICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTChDdXJsQ29udGV4dDo6c2lu
Z2xldG9uKCkuZ2V0RWZmZWN0aXZlVVJMKGgpKTsKIAogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNl
dEhUVFBTdGF0dXNDb2RlKGh0dHBDb2RlKTsKICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1l
VHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCkpOwpAQCAtNjU3LDcgKzU2Miw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpk
b3dubG9hZFRpbWVyQ2FsbGJhY2soKQogICAgICAgICAgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6
OmdldEluc3RhbmNlKCkuZGlkRmluaXNoTG9hZGluZygqam9iKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFVSTCB1cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVj
dGl2ZVVSTChkLT5tX2hhbmRsZSk7CisgICAgICAgICAgICBVUkwgdXJsID0gQ3VybENvbnRleHQ6
OnNpbmdsZXRvbigpLmdldEVmZmVjdGl2ZVVSTChkLT5tX2hhbmRsZSk7CiAjaWZuZGVmIE5ERUJV
RwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDdXJsIEVSUk9SIGZvciB1cmw9JyVzJywg
ZXJyb3I6ICclcydcbiIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjdXJsX2Vhc3lfc3Ry
ZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpOwogI2VuZGlmCkBAIC02NzgsMjUgKzU4Myw2IEBAIHZv
aWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2soKQogICAgICAg
ICBtX2Rvd25sb2FkVGltZXIuc3RhcnRPbmVTaG90KHBvbGxUaW1lKTsKIH0KIAotdm9pZCBSZXNv
dXJjZUhhbmRsZU1hbmFnZXI6OnNldFByb3h5SW5mbyhjb25zdCBTdHJpbmcmIGhvc3QsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9ydCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJveHlUeXBlIHR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
dXNlcm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgcGFzc3dvcmQpCi17Ci0gICAgbV9wcm94eVR5cGUgPSB0eXBlOwotCi0gICAgaWYg
KCFob3N0Lmxlbmd0aCgpKSB7Ci0gICAgICAgIG1fcHJveHkgPSBlbXB0eVN0cmluZygpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFN0cmluZyB1c2VyUGFzczsKLSAgICAgICAgaWYgKHVzZXJuYW1l
Lmxlbmd0aCgpIHx8IHBhc3N3b3JkLmxlbmd0aCgpKQotICAgICAgICAgICAgdXNlclBhc3MgPSB1
c2VybmFtZSArICI6IiArIHBhc3N3b3JkICsgIkAiOwotCi0gICAgICAgIG1fcHJveHkgPSBTdHJp
bmcoImh0dHA6Ly8iKSArIHVzZXJQYXNzICsgaG9zdCArICI6IiArIFN0cmluZzo6bnVtYmVyKHBv
cnQpOwotICAgIH0KLX0KLQogdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnJlbW92ZUZyb21D
dXJsKFJlc291cmNlSGFuZGxlKiBqb2IpCiB7CiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCog
ZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKQEAgLTEwMTksNiArOTA1LDggQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZU1hbmFnZXI6OmFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSwKIAogdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5k
bGUoUmVzb3VyY2VIYW5kbGUqIGpvYikKIHsKKyAgICBDdXJsQ29udGV4dCYgY29udGV4dCA9IEN1
cmxDb250ZXh0OjpzaW5nbGV0b24oKTsKKwogICAgIHN0YXRpYyBjb25zdCBpbnQgYWxsb3dlZFBy
b3RvY29scyA9IENVUkxQUk9UT19GSUxFIHwgQ1VSTFBST1RPX0ZUUCB8IENVUkxQUk9UT19GVFBT
IHwgQ1VSTFBST1RPX0hUVFAgfCBDVVJMUFJPVE9fSFRUUFM7CiAgICAgVVJMIHVybCA9IGpvYi0+
Zmlyc3RSZXF1ZXN0KCkudXJsKCk7CiAKQEAgLTEwNDgsMTAgKzkzNiwxMCBAQCB2b2lkIFJlc291
cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9iKQog
ICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCBlcnJvciA9PSBDVVJMRV9PSyk7CiAgICAgfQog
I2lmbmRlZiBOREVCVUcKLSAgICBpZiAoZ2V0ZW52KCJERUJVR19DVVJMIikpCisgICAgaWYgKGNv
bnRleHQuaXNWZXJib3NlKCkpCiAgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUs
IENVUkxPUFRfVkVSQk9TRSwgMSk7Ci0gICAgaWYgKG1fbG9nRmlsZSkKLSAgICAgICAgY3VybF9l
YXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9TVERFUlIsIG1fbG9nRmlsZSk7CisgICAg
aWYgKGNvbnRleHQuZ2V0TG9nRmlsZSgpKQorICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX1NUREVSUiwgY29udGV4dC5nZXRMb2dGaWxlKCkpOwogI2VuZGlmCiAg
ICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwg
MUwpOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfU1NMX1ZFUklG
WUhPU1QsIDJMKTsKQEAgLTEwNjUsMTkgKzk1MywyMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFu
YWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9iKQogICAgIGN1cmxfZWFz
eV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOwogICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfTUFYUkVESVJTLCAxMCk7CiAgICAg
Y3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhf
QU5ZKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1NIQVJFLCBt
X2N1cmxTaGFyZUhhbmRsZSk7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VS
TE9QVF9TSEFSRSwgQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEN1cmxTaGFyZUhhbmRsZSgp
KTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0ROU19DQUNIRV9U
SU1FT1VULCA2MCAqIDUpOyAvLyA1IG1pbnV0ZXMKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX1BST1RPQ09MUywgYWxsb3dlZFByb3RvY29scyk7CiAgICAgY3VybF9l
YXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFMsIGFsbG93ZWRQ
cm90b2NvbHMpOwogICAgIHNldFNTTENsaWVudENlcnRpZmljYXRlKGpvYik7CiAKLSAgICBpZiAo
aWdub3JlU1NMRXJyb3JzKQorICAgIGlmIChjb250ZXh0LnNob3VsZElnbm9yZVNTTEVycm9ycygp
KQogICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1NTTF9WRVJJ
RllQRUVSLCBmYWxzZSk7CiAgICAgZWxzZQogICAgICAgICBzZXRTU0xWZXJpZnlPcHRpb25zKGpv
Yik7CiAKLSAgICBpZiAoIW1fY2VydGlmaWNhdGVQYXRoLmlzTnVsbCgpKQotICAgICAgIGN1cmxf
ZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfQ0FJTkZPLCBtX2NlcnRpZmljYXRlUGF0
aC5kYXRhKCkpOworICAgIGNvbnN0IGNoYXIqIGNlcnRpZmljYXRlID0gY29udGV4dC5nZXRDZXJ0
aWZpY2F0ZVBhdGgoKTsKKyAgICBpZiAoY2VydGlmaWNhdGUpCisgICAgICAgY3VybF9lYXN5X3Nl
dG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9DQUlORk8sIGNlcnRpZmljYXRlKTsKIAogICAgIC8v
IGVuYWJsZSBnemlwIGFuZCBkZWZsYXRlIHRocm91Z2ggQWNjZXB0LUVuY29kaW5nOgogICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfRU5DT0RJTkcsICIiKTsKQEAgLTEw
ODksOCArOTc4LDkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5k
bGUoUmVzb3VyY2VIYW5kbGUqIGpvYikKICAgICBkLT5tX3VybCA9IGZhc3RTdHJEdXAodXJsU3Ry
aW5nLmxhdGluMSgpLmRhdGEoKSk7CiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwg
Q1VSTE9QVF9VUkwsIGQtPm1fdXJsKTsKIAotICAgIGlmIChtX2Nvb2tpZUphckZpbGVOYW1lKQot
ICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0NPT0tJRUpBUiwg
bV9jb29raWVKYXJGaWxlTmFtZSk7CisgICAgY29uc3QgY2hhciogY29va2llSmFyID0gY29udGV4
dC5nZXRDb29raWVKYXJGaWxlTmFtZSgpOworICAgIGlmIChjb29raWVKYXIpCisgICAgICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfQ09PS0lFSkFSLCBjb29raWVKYXIp
OwogCiAgICAgc3RydWN0IGN1cmxfc2xpc3QqIGhlYWRlcnMgPSAwOwogICAgIGlmIChqb2ItPmZp
cnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKS5zaXplKCkgPiAwKSB7CkBAIC0xMTUwLDM0
ICsxMDQwLDE1IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjppbml0aWFsaXplSGFuZGxl
KFJlc291cmNlSGFuZGxlKiBqb2IpCiAgICAgYXBwbHlBdXRoZW50aWNhdGlvblRvUmVxdWVzdChq
b2IsIGpvYi0+Zmlyc3RSZXF1ZXN0KCkpOwogCiAgICAgLy8gU2V0IHByb3h5IG9wdGlvbnMgaWYg
d2UgaGF2ZSB0aGVtLgotICAgIGlmIChtX3Byb3h5Lmxlbmd0aCgpKSB7Ci0gICAgICAgIGN1cmxf
ZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUFJPWFksIG1fcHJveHkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUFJP
WFlUWVBFLCBtX3Byb3h5VHlwZSk7CisgICAgYXV0byBwcm94eSA9IEN1cmxDb250ZXh0OjpzaW5n
bGV0b24oKS5nZXRQcm94eUluZm8oKTsKKyAgICBDdXJsUHJveHlUeXBlIHR5cGUgPSBzdGQ6Omdl
dDxDdXJsUHJveHlUeXBlPihwcm94eSk7CisgICAgaWYgKHR5cGUgIT0gQ3VybFByb3h5VHlwZTo6
SW52YWxpZCkgeworICAgICAgICBjb25zdCBTdHJpbmcmIHVybCA9IHN0ZDo6Z2V0PGNvbnN0IFN0
cmluZyY+KHByb3h5KTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VS
TE9QVF9QUk9YWSwgdXJsLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0
KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BST1hZVFlQRSwgdHlwZSk7CiAgICAgfQogfQogCi12b2lk
IFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdENvb2tpZVNlc3Npb24oKQotewotICAgIC8vIEN1
cmwgc2F2ZXMgYm90aCBwZXJzaXN0ZW50IGNvb2tpZXMsIGFuZCBzZXNzaW9uIGNvb2tpZXMgdG8g
dGhlIGNvb2tpZSBmaWxlLgotICAgIC8vIFRoZSBzZXNzaW9uIGNvb2tpZXMgc2hvdWxkIGJlIGRl
bGV0ZWQgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IHNlc3Npb24uCi0KLSAgICBDVVJMKiBjdXJsID0g
Y3VybF9lYXN5X2luaXQoKTsKLQotICAgIGlmICghY3VybCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NIQVJFLCBtX2N1cmxTaGFyZUhhbmRs
ZSk7Ci0KLSAgICBpZiAobV9jb29raWVKYXJGaWxlTmFtZSkgewotICAgICAgICBjdXJsX2Vhc3lf
c2V0b3B0KGN1cmwsIENVUkxPUFRfQ09PS0lFRklMRSwgbV9jb29raWVKYXJGaWxlTmFtZSk7Ci0g
ICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09LSUVKQVIsIG1fY29va2ll
SmFyRmlsZU5hbWUpOwotICAgIH0KLQotICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9Q
VF9DT09LSUVTRVNTSU9OLCAxKTsKLQotICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOwotfQot
CiB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6Y2FuY2VsKFJlc291cmNlSGFuZGxlKiBqb2Ip
CiB7CiAgICAgaWYgKHJlbW92ZVNjaGVkdWxlZEpvYihqb2IpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdl
ci5oCmluZGV4IDkyNWRiYTQwMjk4Li5mNDFiMDFmNjU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFn
ZXIuaApAQCAtNDYsMjcgKzQ2LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyIHsKIHB1YmxpYzoKLSAgICBlbnVtIFByb3h5VHlwZSB7Ci0gICAg
ICAgIEhUVFAgPSBDVVJMUFJPWFlfSFRUUCwKLSAgICAgICAgU29ja3M0ID0gQ1VSTFBST1hZX1NP
Q0tTNCwKLSAgICAgICAgU29ja3M0QSA9IENVUkxQUk9YWV9TT0NLUzRBLAotICAgICAgICBTb2Nr
czUgPSBDVVJMUFJPWFlfU09DS1M1LAotICAgICAgICBTb2NrczVIb3N0bmFtZSA9IENVUkxQUk9Y
WV9TT0NLUzVfSE9TVE5BTUUKLSAgICB9OwogICAgIHN0YXRpYyBSZXNvdXJjZUhhbmRsZU1hbmFn
ZXIqIHNoYXJlZEluc3RhbmNlKCk7CiAgICAgdm9pZCBhZGQoUmVzb3VyY2VIYW5kbGUqKTsKICAg
ICB2b2lkIGNhbmNlbChSZXNvdXJjZUhhbmRsZSopOwogCi0gICAgdm9pZCBzZXRDb29raWVKYXJG
aWxlTmFtZShjb25zdCBjaGFyKiBjb29raWVKYXJGaWxlTmFtZSk7Ci0gICAgY29uc3QgY2hhciog
Z2V0Q29va2llSmFyRmlsZU5hbWUoKSBjb25zdDsKLQogICAgIHZvaWQgZGlzcGF0Y2hTeW5jaHJv
bm91c0pvYihSZXNvdXJjZUhhbmRsZSopOwogCiAgICAgdm9pZCBzZXR1cFBPU1QoUmVzb3VyY2VI
YW5kbGUqLCBzdHJ1Y3QgY3VybF9zbGlzdCoqKTsKICAgICB2b2lkIHNldHVwUFVUKFJlc291cmNl
SGFuZGxlKiwgc3RydWN0IGN1cmxfc2xpc3QqKik7CiAKLSAgICB2b2lkIHNldFByb3h5SW5mbyhj
b25zdCBTdHJpbmcmIGhvc3QgPSBlbXB0eVN0cmluZygpLCB1bnNpZ25lZCBsb25nIHBvcnQgPSAw
LCBQcm94eVR5cGUgPSBIVFRQLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lID0gZW1wdHlTdHJpbmco
KSwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCA9IGVtcHR5U3RyaW5nKCkpOwotCiBwcml2YXRlOgog
ICAgIFJlc291cmNlSGFuZGxlTWFuYWdlcigpOwogICAgIH5SZXNvdXJjZUhhbmRsZU1hbmFnZXIo
KTsKQEAgLTc5LDIzICs2NywxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBpbml0aWFsaXplSGFu
ZGxlKFJlc291cmNlSGFuZGxlKik7CiAKLSAgICB2b2lkIGluaXRDb29raWVTZXNzaW9uKCk7Ci0K
ICAgICBUaW1lciBtX2Rvd25sb2FkVGltZXI7CiAgICAgQ1VSTE0qIG1fY3VybE11bHRpSGFuZGxl
OwotICAgIENVUkxTSCogbV9jdXJsU2hhcmVIYW5kbGU7Ci0gICAgY2hhciogbV9jb29raWVKYXJG
aWxlTmFtZTsKICAgICBjaGFyIG1fY3VybEVycm9yQnVmZmVyW0NVUkxfRVJST1JfU0laRV07CiAg
ICAgVmVjdG9yPFJlc291cmNlSGFuZGxlKj4gbV9yZXNvdXJjZUhhbmRsZUxpc3Q7Ci0gICAgY29u
c3QgQ1N0cmluZyBtX2NlcnRpZmljYXRlUGF0aDsKICAgICBpbnQgbV9ydW5uaW5nSm9iczsKLSAg
ICAKLSAgICBTdHJpbmcgbV9wcm94eTsKLSAgICBQcm94eVR5cGUgbV9wcm94eVR5cGU7Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgRklMRSogbV9sb2dGaWxlOwotI2VuZGlmCiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313794</attachid>
            <date>2017-06-24 22:44:16 -0700</date>
            <delta_ts>2017-06-25 23:06:59 -0700</delta_ts>
            <desc>Fix style</desc>
            <filename>173629.diff</filename>
            <type>text/plain</type>
            <size>41252</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlMDlmNGExMWM3OC4uZWI5MDVkYzcxOTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NSBAQAorMjAxNy0wNi0yNCAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFNlcGFyYXRlIGdsb2JhbCBjdXJsIHNldHRpbmdzIGZy
b20gUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIGFzIEN1cmxDb250ZXh0IGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM2MjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8u
Y21ha2U6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29va2llc0ZvclNlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2VydGlmaWNhdGVQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUphclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybENvbnRleHQ6OkN1cmxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0
Ojp+Q3VybENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OmluaXRDb29r
aWVTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpnZXRQcm94eUluZm8p
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnNldFByb3h5SW5mbyk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsQ29udGV4dDo6Z2V0RWZmZWN0aXZlVVJMKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxDb250ZXh0OjpjcmVhdGVNdWx0aUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsQ29udGV4dDo6bXV0ZXhGb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6Omxv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnVubG9jayk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5oLgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybENvbnRleHQ6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29u
dGV4dDo6Z2V0Q3VybFNoYXJlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0
OjpnZXRDb29raWVKYXJGaWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6
c2V0Q29va2llSmFyRmlsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6Omdl
dENlcnRpZmljYXRlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6c2hvdWxk
SWdub3JlU1NMRXJyb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpnZXRMb2dG
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0Ojppc1ZlcmJvc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybERvd25sb2FkOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9h
ZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpjYW5jZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpkaWRSZWNlaXZlSGVhZGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmg6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6Q3VybEpvYk1hbmFnZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEpvYk1hbmFnZXI6On5DdXJsSm9iTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsSm9iTWFuYWdlcjo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpy
ZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OmdldEFjdGl2ZUNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpnZXRQZW5kaW5nQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0b3BUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0b3BUaHJlYWRJZklkbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybEpvYk1hbmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEpvYk1hbmFnZXI6OmFkZFRvQ3VybCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9i
TWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFn
ZXI6OndvcmtlclRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxK
b2JNYW5hZ2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybE1hbmFnZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpz
aW5nbGV0b24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpS
ZXNvdXJjZUhhbmRsZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRs
ZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3RlY3Rpb25T
cGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5kbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2VydGlmaWNhdGVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvb2tpZUphclBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyOjpzZXRDb29raWVKYXJGaWxlTmFtZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmdldENvb2tpZUphckZpbGVOYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2V0UHJv
eHlJbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdl
cjo6aW5pdENvb2tpZVNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisK
IDIwMTctMDYtMjIgIEJhc3VrZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNvbnkuY29tPgogCiAg
ICAgICAgIEZpeCBicm9rZW4gV2luQ2Fpcm8gYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNh
aXJvLmNtYWtlCmluZGV4IDU5NzcwNTk3N2VlLi44Mzc1ODJkMzAxMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0zMyw4ICszMyw5IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DcmVkZW50aWFsU3RvcmFnZUN1
cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZUVudHJ5LmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcAorICAgIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybERvd25sb2FkLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5j
cHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuY3BwCiAgICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL0ROU0N1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L0Zvcm1EYXRhU3RyZWFtQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVsdGlw
YXJ0SGFuZGxlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCmluZGV4IDZiNmVjOTk3MGIxLi4zNTQwYjc0NDNmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUph
ckN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29r
aWVKYXJDdXJsLmNwcApAQCAtMjIsOSArMjIsOCBAQAogI2lmIFVTRShDVVJMKQogCiAjaW5jbHVk
ZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiQ3VybE1hbmFnZXIuaCIKKyNpbmNsdWRlICJDdXJsQ29u
dGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAKICNpbmNsdWRlIDx3dGYvRGF0ZU1h
dGguaD4KQEAgLTI0MywxMyArMjQyLDE1IEBAIHN0YXRpYyBTdHJpbmcgZ2V0TmV0c2NhcGVDb29r
aWVGb3JtYXQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIHZvaWQgc2V0
Q29va2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiwg
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CisgICAgQ3VybENvbnRleHQm
IGNvbnRleHQgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCk7CisKICAgICBDVVJMKiBjdXJsID0g
Y3VybF9lYXN5X2luaXQoKTsKIAogICAgIGlmICghY3VybCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgY2hhciogY29va2llSmFyRmlsZU5hbWUgPSBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6
OnNoYXJlZEluc3RhbmNlKCktPmdldENvb2tpZUphckZpbGVOYW1lKCk7Ci0gICAgQ1VSTFNIKiBj
dXJsc2ggPSBDdXJsTWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0Q3VybFNoYXJlSGFuZGxlKCk7Cisg
ICAgY29uc3QgY2hhciogY29va2llSmFyRmlsZU5hbWUgPSBjb250ZXh0LmdldENvb2tpZUphckZp
bGVOYW1lKCk7CisgICAgQ1VSTFNIKiBjdXJsc2ggPSBjb250ZXh0LmdldEN1cmxTaGFyZUhhbmRs
ZSgpOwogCiAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPT0tJRUpBUiwgY29v
a2llSmFyRmlsZU5hbWUpOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TSEFS
RSwgY3VybHNoKTsKQEAgLTI3OCw3ICsyNzksNyBAQCBzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JT
ZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYsIGNvbnN0CiAg
ICAgaWYgKCFjdXJsKQogICAgICAgICByZXR1cm4gY29va2llczsKIAotICAgIENVUkxTSCogY3Vy
bHNoID0gQ3VybE1hbmFnZXI6OnNpbmdsZXRvbigpLmdldEN1cmxTaGFyZUhhbmRsZSgpOworICAg
IENVUkxTSCogY3VybHNoID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEN1cmxTaGFyZUhh
bmRsZSgpOwogCiAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NIQVJFLCBjdXJs
c2gpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTVl
MzlmZmQ1ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCkBAIC0wLDAgKzEsMjQ2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShDVVJMKQorI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCisKKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIE9T
KFdJTkRPV1MpCisjaW5jbHVkZSAiV2ViQ29yZUJ1bmRsZVdpbi5oIgorI2luY2x1ZGUgPHNobG9i
ai5oPgorI2luY2x1ZGUgPHNobHdhcGkuaD4KKyNlbmRpZgorCisjaWYgVVNFKENGKQorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgQ1N0cmluZyBjZXJ0aWZpY2F0ZVBhdGgo
KQoreworICAgIGNoYXIqIGVudlBhdGggPSBnZXRlbnYoIkNVUkxfQ0FfQlVORExFX1BBVEgiKTsK
KyAgICBpZiAoZW52UGF0aCkKKyAgICAgICAgcmV0dXJuIGVudlBhdGg7CisKKyNpZiBVU0UoQ0Yp
CisgICAgQ0ZCdW5kbGVSZWYgd2ViS2l0QnVuZGxlUmVmID0gd2ViS2l0QnVuZGxlKCk7CisgICAg
aWYgKHdlYktpdEJ1bmRsZVJlZikgeworICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNlcnRV
UkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKHdlYktpdEJ1bmRsZVJlZiwg
Q0ZTVFIoImNhY2VydCIpLCBDRlNUUigicGVtIiksIENGU1RSKCJjZXJ0aWZpY2F0ZXMiKSkpOwor
ICAgICAgICBpZiAoY2VydFVSTFJlZikgeworICAgICAgICAgICAgY2hhciBwYXRoW01BWF9QQVRI
XTsKKyAgICAgICAgICAgIENGVVJMR2V0RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNlcnRVUkxS
ZWYuZ2V0KCksIGZhbHNlLCByZWludGVycHJldF9jYXN0PFVJbnQ4Kj4ocGF0aCksIE1BWF9QQVRI
KTsKKyAgICAgICAgICAgIHJldHVybiBwYXRoOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisK
KyAgICByZXR1cm4gQ1N0cmluZygpOworfQorCitzdGF0aWMgQ1N0cmluZyBjb29raWVKYXJQYXRo
KCkKK3sKKyAgICBjaGFyKiBjb29raWVKYXJQYXRoID0gZ2V0ZW52KCJDVVJMX0NPT0tJRV9KQVJf
UEFUSCIpOworICAgIGlmIChjb29raWVKYXJQYXRoKQorICAgICAgICByZXR1cm4gY29va2llSmFy
UGF0aDsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgY2hhciBleGVjdXRhYmxlUGF0aFtNQVhfUEFU
SF07CisgICAgY2hhciBhcHBEYXRhRGlyZWN0b3J5W01BWF9QQVRIXTsKKyAgICBjaGFyIGNvb2tp
ZUphckZ1bGxQYXRoW01BWF9QQVRIXTsKKyAgICBjaGFyIGNvb2tpZUphckRpcmVjdG9yeVtNQVhf
UEFUSF07CisKKyAgICBpZiAoRkFJTEVEKDo6U0hHZXRGb2xkZXJQYXRoQSgwLCBDU0lETF9MT0NB
TF9BUFBEQVRBIHwgQ1NJRExfRkxBR19DUkVBVEUsIDAsIDAsIGFwcERhdGFEaXJlY3RvcnkpKQor
ICAgICAgICB8fCBGQUlMRUQoOjpHZXRNb2R1bGVGaWxlTmFtZUEoMCwgZXhlY3V0YWJsZVBhdGgs
IE1BWF9QQVRIKSkpCisgICAgICAgIHJldHVybiAiY29va2llcy5kYXQiOworCisgICAgOjpQYXRo
UmVtb3ZlRXh0ZW5zaW9uQShleGVjdXRhYmxlUGF0aCk7CisgICAgTFBTVFIgZXhlY3V0YWJsZU5h
bWUgPSA6OlBhdGhGaW5kRmlsZU5hbWVBKGV4ZWN1dGFibGVQYXRoKTsKKyAgICBzcHJpbnRmX3Mo
Y29va2llSmFyRGlyZWN0b3J5LCBNQVhfUEFUSCwgIiVzLyVzIiwgYXBwRGF0YURpcmVjdG9yeSwg
ZXhlY3V0YWJsZU5hbWUpOworICAgIHNwcmludGZfcyhjb29raWVKYXJGdWxsUGF0aCwgTUFYX1BB
VEgsICIlcy9jb29raWVzLmRhdCIsIGNvb2tpZUphckRpcmVjdG9yeSk7CisKKyAgICBpZiAoOjpT
SENyZWF0ZURpcmVjdG9yeUV4QSgwLCBjb29raWVKYXJEaXJlY3RvcnksIDApICE9IEVSUk9SX1NV
Q0NFU1MKKyAgICAgICAgJiYgOjpHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9GSUxFX0VYSVNUUwor
ICAgICAgICAmJiA6OkdldExhc3RFcnJvcigpICE9IEVSUk9SX0FMUkVBRFlfRVhJU1RTKQorICAg
ICAgICByZXR1cm4gImNvb2tpZXMuZGF0IjsKKworICAgIHJldHVybiBjb29raWVKYXJGdWxsUGF0
aDsKKyNlbHNlCisgICAgcmV0dXJuICJjb29raWVzLmRhdCI7CisjZW5kaWYKK30KKworLy8gQ3Vy
bENvbnRleHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCitDdXJsQ29udGV4dDo6Q3VybENvbnRleHQoKQorICAgIDog
bV9jb29raWVKYXJGaWxlTmFtZShjb29raWVKYXJQYXRoKCkpCisgICAgLCBtX2NlcnRpZmljYXRl
UGF0aChjZXJ0aWZpY2F0ZVBhdGgoKSkKKworeworICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9H
TE9CQUxfQUxMKTsKKyAgICBtX2N1cmxTaGFyZUhhbmRsZSA9IGN1cmxfc2hhcmVfaW5pdCgpOwor
ICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hBUkUs
IENVUkxfTE9DS19EQVRBX0NPT0tJRSk7CisgICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hh
cmVIYW5kbGUsIENVUkxTSE9QVF9TSEFSRSwgQ1VSTF9MT0NLX0RBVEFfRE5TKTsKKyAgICBjdXJs
X3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX0xPQ0tGVU5DLCBsb2Nr
KTsKKyAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX1VO
TE9DS0ZVTkMsIHVubG9jayk7CisKKyAgICBpbml0Q29va2llU2Vzc2lvbigpOworCisgICAgbV9p
Z25vcmVTU0xFcnJvcnMgPSBnZXRlbnYoIldFQktJVF9JR05PUkVfU1NMX0VSUk9SUyIpOworCisj
aWZuZGVmIE5ERUJVRworICAgIG1fdmVyYm9zZSA9IGdldGVudigiREVCVUdfQ1VSTCIpOworCisg
ICAgY2hhciogbG9nRmlsZSA9IGdldGVudigiQ1VSTF9MT0dfRklMRSIpOworICAgIGlmIChsb2dG
aWxlKQorICAgICAgICBtX2xvZ0ZpbGUgPSBmb3Blbihsb2dGaWxlLCAiYSIpOworI2VuZGlmCit9
CisKK0N1cmxDb250ZXh0Ojp+Q3VybENvbnRleHQoKQoreworICAgIGN1cmxfc2hhcmVfY2xlYW51
cChtX2N1cmxTaGFyZUhhbmRsZSk7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisjaWZu
ZGVmIE5ERUJVRworICAgIGlmIChtX2xvZ0ZpbGUpCisgICAgICAgIGZjbG9zZShtX2xvZ0ZpbGUp
OworI2VuZGlmCit9CisKKy8vIENvb2tpZSA9PT09PT09PT09PT09PT09PT09PT09PQorCit2b2lk
IEN1cmxDb250ZXh0Ojppbml0Q29va2llU2Vzc2lvbigpCit7CisgICAgLy8gQ3VybCBzYXZlcyBi
b3RoIHBlcnNpc3RlbnQgY29va2llcywgYW5kIHNlc3Npb24gY29va2llcyB0byB0aGUgY29va2ll
IGZpbGUuCisgICAgLy8gVGhlIHNlc3Npb24gY29va2llcyBzaG91bGQgYmUgZGVsZXRlZCBiZWZv
cmUgc3RhcnRpbmcgYSBuZXcgc2Vzc2lvbi4KKworICAgIENVUkwqIGN1cmwgPSBjdXJsX2Vhc3lf
aW5pdCgpOworCisgICAgaWYgKCFjdXJsKQorICAgICAgICByZXR1cm47CisKKyAgICBjdXJsX2Vh
c3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU0hBUkUsIGdldEN1cmxTaGFyZUhhbmRsZSgpKTsKKwor
ICAgIGlmICghbV9jb29raWVKYXJGaWxlTmFtZS5pc051bGwoKSkgeworICAgICAgICBjdXJsX2Vh
c3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ09PS0lFRklMRSwgbV9jb29raWVKYXJGaWxlTmFtZSk7
CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09LSUVKQVIsIG1fY29v
a2llSmFyRmlsZU5hbWUpOworICAgIH0KKworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VS
TE9QVF9DT09LSUVTRVNTSU9OLCAxKTsKKworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOwor
fQorCisvLyBQcm94eSA9PT09PT09PT09PT09PT09PT09PT09PQorCitzdGQ6OnR1cGxlPEN1cmxQ
cm94eVR5cGUsIGNvbnN0IFN0cmluZyY+IEN1cmxDb250ZXh0OjpnZXRQcm94eUluZm8oKSBjb25z
dAoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUobV9wcm94eVR5cGUsIG1fcHJveHkpOwor
fQorCit2b2lkIEN1cmxDb250ZXh0OjpzZXRQcm94eUluZm8oY29uc3QgU3RyaW5nJiBob3N0LAor
ICAgIHVuc2lnbmVkIGxvbmcgcG9ydCwKKyAgICBDdXJsUHJveHlUeXBlIHR5cGUsCisgICAgY29u
c3QgU3RyaW5nJiB1c2VybmFtZSwKKyAgICBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworCisg
ICAgaWYgKCFob3N0Lmxlbmd0aCgpKSB7CisgICAgICAgIG1fcHJveHlUeXBlID0gQ3VybFByb3h5
VHlwZTo6SW52YWxpZDsKKyAgICAgICAgbV9wcm94eSA9IGVtcHR5U3RyaW5nKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9wcm94eVR5cGUgPSB0eXBlOworCisgICAgICAgIFN0cmluZyB1c2Vy
UGFzczsKKyAgICAgICAgaWYgKHVzZXJuYW1lLmxlbmd0aCgpIHx8IHBhc3N3b3JkLmxlbmd0aCgp
KQorICAgICAgICAgICAgdXNlclBhc3MgPSB1c2VybmFtZSArICI6IiArIHBhc3N3b3JkICsgIkAi
OworCisgICAgICAgIG1fcHJveHkgPSBTdHJpbmcoImh0dHA6Ly8iKSArIHVzZXJQYXNzICsgaG9z
dCArICI6IiArIFN0cmluZzo6bnVtYmVyKHBvcnQpOworICAgIH0KK30KKworLy8gQ3VybCBVdGls
aXRpZXMgPT09PT09PT09PT09PT09PT09PT09PT0KKworVVJMIEN1cmxDb250ZXh0OjpnZXRFZmZl
Y3RpdmVVUkwoQ1VSTCogaGFuZGxlKQoreworICAgIGNvbnN0IGNoYXIqIHVybDsKKyAgICBDVVJM
Y29kZSBlcnIgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhoYW5kbGUsIENVUkxJTkZPX0VGRkVDVElWRV9V
UkwsICZ1cmwpOworICAgIGlmIChDVVJMRV9PSyAhPSBlcnIpCisgICAgICAgIHJldHVybiBVUkwo
KTsKKyAgICByZXR1cm4gVVJMKFVSTCgpLCB1cmwpOworfQorCitDVVJMTSogQ3VybENvbnRleHQ6
OmNyZWF0ZU11bHRpSGFuZGxlKCkKK3sKKyAgICByZXR1cm4gY3VybF9tdWx0aV9pbml0KCk7Cit9
CisKKy8vIFNoYXJlZCBSZXNvdXJjZSBtYW5hZ2VtZW50ID09PT09PT09PT09PT09PT09PT09PT09
CisKK0xvY2sqIEN1cmxDb250ZXh0OjptdXRleEZvcihjdXJsX2xvY2tfZGF0YSBkYXRhKQorewor
ICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBjb29raWVNdXRleCwgKCkp
OworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBkbnNNdXRleCwgKCkp
OworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBzaGFyZU11dGV4LCAo
KSk7CisKKyAgICBzd2l0Y2ggKGRhdGEpIHsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX0NPT0tJ
RToKKyAgICAgICAgcmV0dXJuICZjb29raWVNdXRleDsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRB
X0ROUzoKKyAgICAgICAgcmV0dXJuICZkbnNNdXRleDsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRB
X1NIQVJFOgorICAgICAgICByZXR1cm4gJnNoYXJlTXV0ZXg7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
K30KKworLy8gbGliY3VybCBkb2VzIG5vdCBpbXBsZW1lbnQgaXRzIG93biB0aHJlYWQgc3luY2hy
b25pemF0aW9uIHByaW1pdGl2ZXMuCisvLyB0aGVzZSB0d28gZnVuY3Rpb25zIHByb3ZpZGUgbXV0
ZXhlcyBmb3IgY29va2llcywgYW5kIGZvciB0aGUgZ2xvYmFsIEROUworLy8gY2FjaGUuCit2b2lk
IEN1cmxDb250ZXh0Ojpsb2NrKENVUkwqIC8qIGhhbmRsZSAqLywgY3VybF9sb2NrX2RhdGEgZGF0
YSwgY3VybF9sb2NrX2FjY2VzcyAvKiBhY2Nlc3MgKi8sIHZvaWQqIC8qIHVzZXJQdHIgKi8pCit7
CisgICAgaWYgKExvY2sqIG11dGV4ID0gbXV0ZXhGb3IoZGF0YSkpCisgICAgICAgIG11dGV4LT5s
b2NrKCk7Cit9CisKK3ZvaWQgQ3VybENvbnRleHQ6OnVubG9jayhDVVJMKiAvKiBoYW5kbGUgKi8s
IGN1cmxfbG9ja19kYXRhIGRhdGEsIHZvaWQqIC8qIHVzZXJQdHIgKi8pCit7CisgICAgaWYgKExv
Y2sqIG11dGV4ID0gbXV0ZXhGb3IoZGF0YSkpCisgICAgICAgIG11dGV4LT51bmxvY2soKTsKK30K
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjQ3OTdiNWViM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJVUkwuaCIKKworI2luY2x1ZGUgPFdURi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgUExBVEZPUk0o
V0lOKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlm
CisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVt
IGNsYXNzIEN1cmxQcm94eVR5cGUgeworICAgIEludmFsaWQgPSAtMSwKKyAgICBIVFRQID0gQ1VS
TFBST1hZX0hUVFAsCisgICAgU29ja3M0ID0gQ1VSTFBST1hZX1NPQ0tTNCwKKyAgICBTb2NrczRB
ID0gQ1VSTFBST1hZX1NPQ0tTNEEsCisgICAgU29ja3M1ID0gQ1VSTFBST1hZX1NPQ0tTNSwKKyAg
ICBTb2NrczVIb3N0bmFtZSA9IENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUUKK307CisKK2NsYXNz
IEN1cmxDb250ZXh0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJsQ29udGV4dCk7CisK
K3B1YmxpYzoKKworICAgIHN0YXRpYyBDdXJsQ29udGV4dCYgc2luZ2xldG9uKCkKKyAgICB7Cisg
ICAgICAgIC8vIFNpbmNlIGl0J3MgYSBzdGF0aWMgdmFyaWFibGUsIGlmIHRoZSBjbGFzcyBoYXMg
YWxyZWFkeSBiZWVuIGNyZWF0ZWQsCisgICAgICAgIC8vIEl0IHdvbid0IGJlIGNyZWF0ZWQgYWdh
aW4uCisgICAgICAgIC8vIEFuZCBpdCAqKmlzKiogdGhyZWFkLXNhZmUgaW4gQysrMTEuCisKKyAg
ICAgICAgc3RhdGljIEN1cmxDb250ZXh0IHNoYXJlZDsKKyAgICAgICAgcmV0dXJuIHNoYXJlZDsK
KyAgICB9CisKKyAgICBDdXJsQ29udGV4dCgpOworICAgIHZpcnR1YWwgfkN1cmxDb250ZXh0KCk7
CisKKyAgICBDVVJMU0gqIGdldEN1cmxTaGFyZUhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
bFNoYXJlSGFuZGxlOyB9CisKKyAgICBDVVJMTSogY3JlYXRlTXVsdGlIYW5kbGUoKTsKKworICAg
IC8vIENvb2tpZQorICAgIGNvbnN0IGNoYXIqIGdldENvb2tpZUphckZpbGVOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9jb29raWVKYXJGaWxlTmFtZS5kYXRhKCk7IH0KKyAgICB2b2lkIHNldENvb2tp
ZUphckZpbGVOYW1lKGNvbnN0IGNoYXIqIGNvb2tpZUphckZpbGVOYW1lKSB7IG1fY29va2llSmFy
RmlsZU5hbWUgPSBDU3RyaW5nKGNvb2tpZUphckZpbGVOYW1lKTsgfQorCisgICAgLy8gQ2VydGlm
aWNhdGUKKyAgICBjb25zdCBjaGFyKiBnZXRDZXJ0aWZpY2F0ZVBhdGgoKSBjb25zdCB7IHJldHVy
biBtX2NlcnRpZmljYXRlUGF0aC5kYXRhKCk7IH0KKyAgICBib29sIHNob3VsZElnbm9yZVNTTEVy
cm9ycygpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlU1NMRXJyb3JzOyB9CisKKyAgICAvLyBQcm94
eQorICAgIHN0ZDo6dHVwbGU8Q3VybFByb3h5VHlwZSwgY29uc3QgU3RyaW5nJj4gZ2V0UHJveHlJ
bmZvKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQcm94eUluZm8oY29uc3QgU3RyaW5nJiBob3N0ID0g
ZW1wdHlTdHJpbmcoKSwgdW5zaWduZWQgbG9uZyBwb3J0ID0gMCwgQ3VybFByb3h5VHlwZSA9IEN1
cmxQcm94eVR5cGU6OkhUVFAsIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUgPSBlbXB0eVN0cmluZygp
LCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkID0gZW1wdHlTdHJpbmcoKSk7CisKKyAgICAvLyBVdGls
aXRpZXMKKyAgICBVUkwgZ2V0RWZmZWN0aXZlVVJMKENVUkwqIGhhbmRsZSk7CisKKyNpZm5kZWYg
TkRFQlVHCisgICAgRklMRSogZ2V0TG9nRmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9nRmlsZTsg
fQorICAgIGJvb2wgaXNWZXJib3NlKCkgY29uc3QgeyByZXR1cm4gbV92ZXJib3NlOyB9CisjZW5k
aWYKKworcHJpdmF0ZToKKworICAgIENVUkxTSCogbV9jdXJsU2hhcmVIYW5kbGUgeyBudWxscHRy
IH07CisKKyAgICBDU3RyaW5nIG1fY29va2llSmFyRmlsZU5hbWU7CisKKyAgICBDU3RyaW5nIG1f
Y2VydGlmaWNhdGVQYXRoOworICAgIGJvb2wgbV9pZ25vcmVTU0xFcnJvcnMgeyBmYWxzZSB9Owor
CisgICAgU3RyaW5nIG1fcHJveHk7CisgICAgQ3VybFByb3h5VHlwZSBtX3Byb3h5VHlwZSB7IEN1
cmxQcm94eVR5cGU6OkludmFsaWQgfTsKKworICAgIHZvaWQgaW5pdENvb2tpZVNlc3Npb24oKTsK
KworICAgIHN0YXRpYyB2b2lkIGxvY2soQ1VSTCosIGN1cmxfbG9ja19kYXRhLCBjdXJsX2xvY2tf
YWNjZXNzLCB2b2lkKik7CisgICAgc3RhdGljIHZvaWQgdW5sb2NrKENVUkwqLCBjdXJsX2xvY2tf
ZGF0YSwgdm9pZCopOworICAgIHN0YXRpYyBMb2NrKiBtdXRleEZvcihjdXJsX2xvY2tfZGF0YSk7
CisKKyNpZm5kZWYgTkRFQlVHCisgICAgRklMRSogbV9sb2dGaWxlIHsgbnVsbHB0ciB9OworICAg
IGJvb2wgbV92ZXJib3NlIHsgZmFsc2UgfTsKKyNlbmRpZgorfTsKKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAppbmRl
eCA5ODk1MDVlMzMwZi4uNDJiNDY3ZTQyMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCkBAIC0yOSw2ICsyOSw4IEBA
CiAKICNpbmNsdWRlICJDdXJsRG93bmxvYWQuaCIKIAorI2luY2x1ZGUgIkN1cmxDb250ZXh0Lmgi
CisKICNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5o
IgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtODUsNyArODcsNyBAQCB2b2lkIEN1
cmxEb3dubG9hZDo6aW5pdChDdXJsRG93bmxvYWRMaXN0ZW5lciogbGlzdGVuZXIsIGNvbnN0IFVS
TCYgdXJsKQogICAgIGlmIChjZXJ0UGF0aCkKICAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2N1
cmxIYW5kbGUsIENVUkxPUFRfQ0FJTkZPLCBjZXJ0UGF0aCk7CiAKLSAgICBDVVJMU0gqIGN1cmxz
aCA9IEN1cmxNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRDdXJsU2hhcmVIYW5kbGUoKTsKKyAgICBD
VVJMU0gqIGN1cmxzaCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRDdXJsU2hhcmVIYW5k
bGUoKTsKICAgICBpZiAoY3VybHNoKQogICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhh
bmRsZSwgQ1VSTE9QVF9TSEFSRSwgY3VybHNoKTsKIApAQCAtMTA2LDEzICsxMDgsMTMgQEAgdm9p
ZCBDdXJsRG93bmxvYWQ6OmluaXQoQ3VybERvd25sb2FkTGlzdGVuZXIqIGxpc3RlbmVyLCBSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IFIKIAogYm9vbCBDdXJsRG93bmxvYWQ6OnN0YXJ0KCkKIHsKLSAg
ICByZWYoKTsgLy8gQ3VybERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRUaHJlYWQgd2lsbCBjYWxs
IGRlcmVmIHdoZW4gdGhlIGRvd25sb2FkIGhhcyBmaW5pc2hlZC4KLSAgICByZXR1cm4gQ3VybE1h
bmFnZXI6OnNpbmdsZXRvbigpLmFkZChtX2N1cmxIYW5kbGUpOworICAgIHJlZigpOyAvLyBDdXJs
Sm9iTWFuYWdlciB3aWxsIGNhbGwgZGVyZWYgd2hlbiB0aGUgZG93bmxvYWQgaGFzIGZpbmlzaGVk
LgorICAgIHJldHVybiBDdXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkuYWRkKG1fY3VybEhhbmRs
ZSk7CiB9CiAKIGJvb2wgQ3VybERvd25sb2FkOjpjYW5jZWwoKQogewotICAgIHJldHVybiBDdXJs
TWFuYWdlcjo6c2luZ2xldG9uKCkucmVtb3ZlKG1fY3VybEhhbmRsZSk7CisgICAgcmV0dXJuIEN1
cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1vdmUobV9jdXJsSGFuZGxlKTsKIH0KIAogU3Ry
aW5nIEN1cmxEb3dubG9hZDo6Z2V0VGVtcFBhdGgoKSBjb25zdApAQCAtMjAzLDcgKzIwNSw3IEBA
IHZvaWQgQ3VybERvd25sb2FkOjpkaWRSZWNlaXZlSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVy
KQogICAgICAgICBVTlVTRURfUEFSQU0oZXJyKTsKIAogICAgICAgICBpZiAoaHR0cENvZGUgPj0g
MjAwICYmIGh0dHBDb2RlIDwgMzAwKSB7Ci0gICAgICAgICAgICBVUkwgdXJsID0gQ3VybFV0aWxz
OjpnZXRFZmZlY3RpdmVVUkwobV9jdXJsSGFuZGxlKTsKKyAgICAgICAgICAgIFVSTCB1cmwgPSBD
dXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0RWZmZWN0aXZlVVJMKG1fY3VybEhhbmRsZSk7CiAg
ICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB1cmwgPSB1cmwuaXNvbGF0ZWRDb3B5
KCksIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewogICAgICAgICAgICAgICAgIG1f
cmVzcG9uc2Uuc2V0VVJMKHVybCk7CiAgICAgICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRNaW1l
VHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKG1fcmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaAppbmRleCAzMTJlNDcwMDI3
Ni4uZjkwMzA2YzZmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsRG93bmxvYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDx3aW5z
b2NrMi5oPgogI2VuZGlmCiAKLSNpbmNsdWRlICJDdXJsTWFuYWdlci5oIgorI2luY2x1ZGUgIkN1
cmxKb2JNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdlci5jcHAKc2ltaWxh
cml0eSBpbmRleCA2NSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxNYW5hZ2VyLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcAppbmRleCA4ZjJlZWY2NTJjZi4uNTdmMmYy
Y2ZlYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxKb2JNYW5hZ2VyLmNwcApAQCAtMjcsNyArMjcsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogCiAjaWYgVVNFKENVUkwpCi0jaW5jbHVkZSAiQ3VybE1hbmFnZXIuaCIKKyNpbmNsdWRlICJD
dXJsSm9iTWFuYWdlci5oIgorCisjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKIAogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMzYs
MzcgKzM4LDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEN1cmxTaGFyZWRSZXNvdXJjZXMgewotcHVibGljOgotICAgIHN0YXRpYyB2
b2lkIGxvY2soQ1VSTCosIGN1cmxfbG9ja19kYXRhLCBjdXJsX2xvY2tfYWNjZXNzLCB2b2lkKik7
Ci0gICAgc3RhdGljIHZvaWQgdW5sb2NrKENVUkwqLCBjdXJsX2xvY2tfZGF0YSwgdm9pZCopOwot
Ci1wcml2YXRlOgotICAgIHN0YXRpYyBMb2NrKiBtdXRleEZvcihjdXJsX2xvY2tfZGF0YSk7Ci19
OwotCi0vLyBDdXJsRG93bmxvYWRNYW5hZ2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ3VybE1hbmFnZXI6OkN1
cmxNYW5hZ2VyKCkKK0N1cmxKb2JNYW5hZ2VyOjpDdXJsSm9iTWFuYWdlcigpCiB7Ci0gICAgY3Vy
bF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOwotICAgIG1fY3VybE11bHRpSGFuZGxlID0g
Y3VybF9tdWx0aV9pbml0KCk7Ci0gICAgbV9jdXJsU2hhcmVIYW5kbGUgPSBjdXJsX3NoYXJlX2lu
aXQoKTsKLSAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BU
X1NIQVJFLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUpOwotICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1f
Y3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hBUkUsIENVUkxfTE9DS19EQVRBX0ROUyk7Ci0g
ICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9MT0NLRlVO
QywgQ3VybFNoYXJlZFJlc291cmNlczo6bG9jayk7Ci0gICAgY3VybF9zaGFyZV9zZXRvcHQobV9j
dXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9VTkxPQ0tGVU5DLCBDdXJsU2hhcmVkUmVzb3VyY2Vz
Ojp1bmxvY2spOworICAgIG1fY3VybE11bHRpSGFuZGxlID0gQ3VybENvbnRleHQ6OnNpbmdsZXRv
bigpLmNyZWF0ZU11bHRpSGFuZGxlKCk7CiB9CiAKLUN1cmxNYW5hZ2VyOjp+Q3VybE1hbmFnZXIo
KQorQ3VybEpvYk1hbmFnZXI6On5DdXJsSm9iTWFuYWdlcigpCiB7Ci0gICAgc3RvcFRocmVhZCgp
OwogICAgIGN1cmxfbXVsdGlfY2xlYW51cChtX2N1cmxNdWx0aUhhbmRsZSk7Ci0gICAgY3VybF9z
aGFyZV9jbGVhbnVwKG1fY3VybFNoYXJlSGFuZGxlKTsKLSAgICBjdXJsX2dsb2JhbF9jbGVhbnVw
KCk7CiB9CiAKLWJvb2wgQ3VybE1hbmFnZXI6OmFkZChDVVJMKiBjdXJsSGFuZGxlKQorYm9vbCBD
dXJsSm9iTWFuYWdlcjo6YWRkKENVUkwqIGN1cmxIYW5kbGUpCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIApAQCAtODAsNyArNjIsNyBAQCBib29sIEN1cmxNYW5hZ2VyOjphZGQoQ1VS
TCogY3VybEhhbmRsZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDdXJsTWFuYWdlcjo6
cmVtb3ZlKENVUkwqIGN1cmxIYW5kbGUpCitib29sIEN1cmxKb2JNYW5hZ2VyOjpyZW1vdmUoQ1VS
TCogY3VybEhhbmRsZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKIApAQCAt
ODksMTkgKzcxLDE5IEBAIGJvb2wgQ3VybE1hbmFnZXI6OnJlbW92ZShDVVJMKiBjdXJsSGFuZGxl
KQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbnQgQ3VybE1hbmFnZXI6OmdldEFjdGl2ZUNvdW50
KCkgY29uc3QKK2ludCBDdXJsSm9iTWFuYWdlcjo6Z2V0QWN0aXZlQ291bnQoKSBjb25zdAogewog
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOwogICAgIHJldHVybiBtX2FjdGl2ZUhhbmRs
ZUxpc3Quc2l6ZSgpOwogfQogCi1pbnQgQ3VybE1hbmFnZXI6OmdldFBlbmRpbmdDb3VudCgpIGNv
bnN0CitpbnQgQ3VybEpvYk1hbmFnZXI6OmdldFBlbmRpbmdDb3VudCgpIGNvbnN0CiB7CiAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CiAgICAgcmV0dXJuIG1fcGVuZGluZ0hhbmRsZUxp
c3Quc2l6ZSgpOwogfQogCi12b2lkIEN1cmxNYW5hZ2VyOjpzdGFydFRocmVhZElmTmVlZGVkKCkK
K3ZvaWQgQ3VybEpvYk1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAKQEAgLTExMyw3ICs5NSw3IEBAIHZvaWQgQ3VybE1hbmFnZXI6
OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQogICAgIH0KIH0KIAotdm9pZCBDdXJsTWFuYWdlcjo6c3Rv
cFRocmVhZCgpCit2b2lkIEN1cmxKb2JNYW5hZ2VyOjpzdG9wVGhyZWFkKCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0xMjUsMTMgKzEwNywxMyBAQCB2b2lkIEN1cmxNYW5h
Z2VyOjpzdG9wVGhyZWFkKCkKICAgICB9CiB9CiAKLXZvaWQgQ3VybE1hbmFnZXI6OnN0b3BUaHJl
YWRJZklkbGUoKQordm9pZCBDdXJsSm9iTWFuYWdlcjo6c3RvcFRocmVhZElmSWRsZSgpCiB7CiAg
ICAgaWYgKCFnZXRBY3RpdmVDb3VudCgpICYmICFnZXRQZW5kaW5nQ291bnQoKSkKICAgICAgICAg
c2V0UnVuVGhyZWFkKGZhbHNlKTsKIH0KIAotdm9pZCBDdXJsTWFuYWdlcjo6dXBkYXRlSGFuZGxl
TGlzdCgpCit2b2lkIEN1cmxKb2JNYW5hZ2VyOjp1cGRhdGVIYW5kbGVMaXN0KCkKIHsKICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKIApAQCAtMTUwLDcgKzEzMiw3IEBAIHZvaWQgQ3Vy
bE1hbmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QoKQogICAgIH0KIH0KIAotYm9vbCBDdXJsTWFuYWdl
cjo6YWRkVG9DdXJsKENVUkwqIGN1cmxIYW5kbGUpCitib29sIEN1cmxKb2JNYW5hZ2VyOjphZGRU
b0N1cmwoQ1VSTCogY3VybEhhbmRsZSkKIHsKICAgICBDVVJMTWNvZGUgcmV0dmFsID0gY3VybF9t
dWx0aV9hZGRfaGFuZGxlKG1fY3VybE11bHRpSGFuZGxlLCBjdXJsSGFuZGxlKTsKICAgICBpZiAo
cmV0dmFsID09IENVUkxNX09LKSB7CkBAIC0xNjAsNyArMTQyLDcgQEAgYm9vbCBDdXJsTWFuYWdl
cjo6YWRkVG9DdXJsKENVUkwqIGN1cmxIYW5kbGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIEN1cmxNYW5hZ2VyOjpyZW1vdmVGcm9tQ3VybChDVVJMKiBjdXJsSGFuZGxlKQorYm9vbCBD
dXJsSm9iTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwoQ1VSTCogY3VybEhhbmRsZSkKIHsKICAgICBp
bnQgaGFuZGxlUG9zID0gbV9hY3RpdmVIYW5kbGVMaXN0LmZpbmQoY3VybEhhbmRsZSk7CiAKQEAg
LTE3NiwxMSArMTU4LDExIEBAIGJvb2wgQ3VybE1hbmFnZXI6OnJlbW92ZUZyb21DdXJsKENVUkwq
IGN1cmxIYW5kbGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEN1cmxNYW5hZ2VyOjp3
b3JrZXJUaHJlYWQodm9pZCogZGF0YSkKK3ZvaWQgQ3VybEpvYk1hbmFnZXI6OndvcmtlclRocmVh
ZCh2b2lkKiBkYXRhKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgQ3Vy
bE1hbmFnZXIqIG1hbmFnZXIgPSByZWludGVycHJldF9jYXN0PEN1cmxNYW5hZ2VyKj4oZGF0YSk7
CisgICAgQ3VybEpvYk1hbmFnZXIqIG1hbmFnZXIgPSByZWludGVycHJldF9jYXN0PEN1cmxKb2JN
YW5hZ2VyKj4oZGF0YSk7CiAKICAgICB3aGlsZSAobWFuYWdlci0+cnVuVGhyZWFkKCkpIHsKIApA
QCAtMjM2LDUzICsyMTgsNiBAQCB2b2lkIEN1cmxNYW5hZ2VyOjp3b3JrZXJUaHJlYWQodm9pZCog
ZGF0YSkKICAgICB9CiB9CiAKLS8vIENVUkwgVXRpbGl0aWVzCi0KLVVSTCBDdXJsVXRpbHM6Omdl
dEVmZmVjdGl2ZVVSTChDVVJMKiBoYW5kbGUpCi17Ci0gICAgY29uc3QgY2hhciogdXJsOwotICAg
IENVUkxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKGhhbmRsZSwgQ1VSTElORk9fRUZGRUNU
SVZFX1VSTCwgJnVybCk7Ci0gICAgaWYgKENVUkxFX09LICE9IGVycikKLSAgICAgICAgcmV0dXJu
IFVSTCgpOwotICAgIHJldHVybiBVUkwoVVJMKCksIHVybCk7Ci19Ci0KLS8vIFNoYXJlZCBSZXNv
dXJjZSBtYW5hZ2VtZW50ID09PT09PT09PT09PT09PT09PT09PT09Ci0KLUxvY2sqIEN1cmxTaGFy
ZWRSZXNvdXJjZXM6Om11dGV4Rm9yKGN1cmxfbG9ja19kYXRhIGRhdGEpCi17Ci0gICAgREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKExvY2ssIGNvb2tpZU11dGV4LCAoKSk7Ci0gICAgREVQ
UkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKExvY2ssIGRuc011dGV4LCAoKSk7Ci0gICAgREVQ
UkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKExvY2ssIHNoYXJlTXV0ZXgsICgpKTsKLQotICAg
IHN3aXRjaCAoZGF0YSkgewotICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFOgotICAgICAg
ICByZXR1cm4gJmNvb2tpZU11dGV4OwotICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfRE5TOgotICAg
ICAgICByZXR1cm4gJmRuc011dGV4OwotICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfU0hBUkU6Ci0g
ICAgICAgIHJldHVybiAmc2hhcmVNdXRleDsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfQotCi0vLyBs
aWJjdXJsIGRvZXMgbm90IGltcGxlbWVudCBpdHMgb3duIHRocmVhZCBzeW5jaHJvbml6YXRpb24g
cHJpbWl0aXZlcy4KLS8vIHRoZXNlIHR3byBmdW5jdGlvbnMgcHJvdmlkZSBtdXRleGVzIGZvciBj
b29raWVzLCBhbmQgZm9yIHRoZSBnbG9iYWwgRE5TCi0vLyBjYWNoZS4KLXZvaWQgQ3VybFNoYXJl
ZFJlc291cmNlczo6bG9jayhDVVJMKiAvKiBoYW5kbGUgKi8sIGN1cmxfbG9ja19kYXRhIGRhdGEs
IGN1cmxfbG9ja19hY2Nlc3MgLyogYWNjZXNzICovLCB2b2lkKiAvKiB1c2VyUHRyICovKQotewot
ICAgIGlmIChMb2NrKiBtdXRleCA9IEN1cmxTaGFyZWRSZXNvdXJjZXM6Om11dGV4Rm9yKGRhdGEp
KQotICAgICAgICBtdXRleC0+bG9jaygpOwotfQotCi12b2lkIEN1cmxTaGFyZWRSZXNvdXJjZXM6
OnVubG9jayhDVVJMKiAvKiBoYW5kbGUgKi8sIGN1cmxfbG9ja19kYXRhIGRhdGEsIHZvaWQqIC8q
IHVzZXJQdHIgKi8pCi17Ci0gICAgaWYgKExvY2sqIG11dGV4ID0gQ3VybFNoYXJlZFJlc291cmNl
czo6bXV0ZXhGb3IoZGF0YSkpCi0gICAgICAgIG11dGV4LT51bmxvY2soKTsKLX0KLQogfQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxK
b2JNYW5hZ2VyLmgKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmgKcmVuYW1lIHRvIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdlci5oCmluZGV4IDk1MjNk
NGNkNDNiLi4xMmY5MWM0ZDRmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBA
IC0zNSw3ICszNiw2IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPGN1cmwvY3VybC5oPgotI2luY2x1
ZGUgIlVSTC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDIwICs0NiwyMCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBDdXJsSm9iQWN0aW9uIGhhbmRsZUN1cmxNc2coQ1VSTE1zZyop
ID0gMDsKIH07CiAKLWNsYXNzIEN1cmxNYW5hZ2VyIHsKK2NsYXNzIEN1cmxKb2JNYW5hZ2VyIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgQ3VybE1hbmFnZXImIHNpbmdsZXRvbigpCisgICAgc3RhdGlj
IEN1cmxKb2JNYW5hZ2VyJiBzaW5nbGV0b24oKQogICAgIHsKICAgICAgICAgLy8gU2luY2UgaXQn
cyBhIHN0YXRpYyB2YXJpYWJsZSwgaWYgdGhlIGNsYXNzIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRl
ZCwKICAgICAgICAgLy8gSXQgd29uJ3QgYmUgY3JlYXRlZCBhZ2Fpbi4KICAgICAgICAgLy8gQW5k
IGl0ICoqaXMqKiB0aHJlYWQtc2FmZSBpbiBDKysxMS4KIAotICAgICAgICBzdGF0aWMgQ3VybE1h
bmFnZXIgc2hhcmVkOworICAgICAgICBzdGF0aWMgQ3VybEpvYk1hbmFnZXIgc2hhcmVkOwogICAg
ICAgICByZXR1cm4gc2hhcmVkOwogICAgIH0KIAotICAgIEN1cmxNYW5hZ2VyKCk7Ci0gICAgdmly
dHVhbCB+Q3VybE1hbmFnZXIoKTsKKyAgICBDdXJsSm9iTWFuYWdlcigpOworICAgIHZpcnR1YWwg
fkN1cmxKb2JNYW5hZ2VyKCk7CiAKICAgICBib29sIGFkZChDVVJMKiBjdXJsSGFuZGxlKTsKICAg
ICBib29sIHJlbW92ZShDVVJMKiBjdXJsSGFuZGxlKTsKQEAgLTY3LDggKzY3LDYgQEAgcHVibGlj
OgogICAgIGludCBnZXRBY3RpdmVDb3VudCgpIGNvbnN0OwogICAgIGludCBnZXRQZW5kaW5nQ291
bnQoKSBjb25zdDsKIAotICAgIENVUkxTSCogZ2V0Q3VybFNoYXJlSGFuZGxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJsU2hhcmVIYW5kbGU7IH0KLQogcHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0VGhy
ZWFkSWZOZWVkZWQoKTsKICAgICB2b2lkIHN0b3BUaHJlYWQoKTsKQEAgLTk0LDE0ICs5Miw3IEBA
IHByaXZhdGU6CiAgICAgbXV0YWJsZSBMb2NrIG1fbXV0ZXg7CiAgICAgYm9vbCBtX3J1blRocmVh
ZCB7IGZhbHNlIH07CiAKLSAgICBDVVJMU0gqIG1fY3VybFNoYXJlSGFuZGxlIHsgbnVsbHB0ciB9
OwotCiAgICAgZnJpZW5kIGNsYXNzIEN1cmxKb2I7CiB9OwogCi1jbGFzcyBDdXJsVXRpbHMgewot
cHVibGljOgotICAgIHN0YXRpYyBVUkwgZ2V0RWZmZWN0aXZlVVJMKENVUkwqIGhhbmRsZSk7Ci19
OwotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCmluZGV4IDIwYTkzNGE5OWI2Li5kMzJl
MjliYjNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKQEAgLTQyLDcgKzQyLDcgQEAK
IAogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCiAjaW5jbHVkZSAiQ3VybENhY2hlTWFu
YWdlci5oIgotI2luY2x1ZGUgIkN1cmxNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ3VybENvbnRleHQu
aCIKICNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5o
IgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKQEAgLTYwLDkgKzYwLDYgQEAKICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKICNpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUg
IldlYkNvcmVCdW5kbGVXaW4uaCIKLSNpbmNsdWRlIDxzaGxvYmouaD4KLSNpbmNsdWRlIDxzaGx3
YXBpLmg+CiAjZWxzZQogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2RlZmluZSBNQVhfUEFUSCBN
QVhQQVRITEVOCkBAIC03MywxMyArNzAsOSBAQAogI2lmIEVOQUJMRShXRUJfVElNSU5HKQogI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2VuZGlmCi0jaWYgVVNFKENGKQotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLSNlbmRpZgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODgsNjEgKzgx
LDYgQEAgc3RhdGljIGNvbnN0IFNlY29uZHMgcG9sbFRpbWUgeyA1MF9tcyB9OwogY29uc3QgaW50
IG1heFJ1bm5pbmdKb2JzID0gMTI4OwogY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21haW5DdXJs
ID0gIkN1cmxFcnJvckRvbWFpbiI7CiAKLXN0YXRpYyBjb25zdCBib29sIGlnbm9yZVNTTEVycm9y
cyA9IGdldGVudigiV0VCS0lUX0lHTk9SRV9TU0xfRVJST1JTIik7Ci0KLXN0YXRpYyBDU3RyaW5n
IGNlcnRpZmljYXRlUGF0aCgpCi17Ci0gICAgY2hhciogZW52UGF0aCA9IGdldGVudigiQ1VSTF9D
QV9CVU5ETEVfUEFUSCIpOwotICAgIGlmIChlbnZQYXRoKQotICAgICAgICByZXR1cm4gZW52UGF0
aDsKLQotI2lmIFVTRShDRikKLSAgICBDRkJ1bmRsZVJlZiB3ZWJLaXRCdW5kbGVSZWYgPSB3ZWJL
aXRCdW5kbGUoKTsKLSAgICBpZiAod2ViS2l0QnVuZGxlUmVmKSB7Ci0gICAgICAgIFJldGFpblB0
cjxDRlVSTFJlZj4gY2VydFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwo
d2ViS2l0QnVuZGxlUmVmLCBDRlNUUigiY2FjZXJ0IiksIENGU1RSKCJwZW0iKSwgQ0ZTVFIoImNl
cnRpZmljYXRlcyIpKSk7Ci0gICAgICAgIGlmIChjZXJ0VVJMUmVmKSB7Ci0gICAgICAgICAgICBj
aGFyIHBhdGhbTUFYX1BBVEhdOwotICAgICAgICAgICAgQ0ZVUkxHZXRGaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24oY2VydFVSTFJlZi5nZXQoKSwgZmFsc2UsIHJlaW50ZXJwcmV0X2Nhc3Q8VUludDgq
PihwYXRoKSwgTUFYX1BBVEgpOwotICAgICAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAgICAgIH0K
LSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBDU3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBjaGFy
KiBjb29raWVKYXJQYXRoKCkKLXsKLSAgICBjaGFyKiBjb29raWVKYXJQYXRoID0gZ2V0ZW52KCJD
VVJMX0NPT0tJRV9KQVJfUEFUSCIpOwotICAgIGlmIChjb29raWVKYXJQYXRoKQotICAgICAgICBy
ZXR1cm4gZmFzdFN0ckR1cChjb29raWVKYXJQYXRoKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAg
Y2hhciBleGVjdXRhYmxlUGF0aFtNQVhfUEFUSF07Ci0gICAgY2hhciBhcHBEYXRhRGlyZWN0b3J5
W01BWF9QQVRIXTsKLSAgICBjaGFyIGNvb2tpZUphckZ1bGxQYXRoW01BWF9QQVRIXTsKLSAgICBj
aGFyIGNvb2tpZUphckRpcmVjdG9yeVtNQVhfUEFUSF07Ci0KLSAgICBpZiAoRkFJTEVEKDo6U0hH
ZXRGb2xkZXJQYXRoQSgwLCBDU0lETF9MT0NBTF9BUFBEQVRBIHwgQ1NJRExfRkxBR19DUkVBVEUs
IDAsIDAsIGFwcERhdGFEaXJlY3RvcnkpKQotICAgICAgICB8fCBGQUlMRUQoOjpHZXRNb2R1bGVG
aWxlTmFtZUEoMCwgZXhlY3V0YWJsZVBhdGgsIE1BWF9QQVRIKSkpCi0gICAgICAgIHJldHVybiBm
YXN0U3RyRHVwKCJjb29raWVzLmRhdCIpOwotCi0gICAgOjpQYXRoUmVtb3ZlRXh0ZW5zaW9uQShl
eGVjdXRhYmxlUGF0aCk7Ci0gICAgTFBTVFIgZXhlY3V0YWJsZU5hbWUgPSA6OlBhdGhGaW5kRmls
ZU5hbWVBKGV4ZWN1dGFibGVQYXRoKTsKLSAgICBzcHJpbnRmX3MoY29va2llSmFyRGlyZWN0b3J5
LCBNQVhfUEFUSCwgIiVzLyVzIiwgYXBwRGF0YURpcmVjdG9yeSwgZXhlY3V0YWJsZU5hbWUpOwot
ICAgIHNwcmludGZfcyhjb29raWVKYXJGdWxsUGF0aCwgTUFYX1BBVEgsICIlcy9jb29raWVzLmRh
dCIsIGNvb2tpZUphckRpcmVjdG9yeSk7Ci0KLSAgICBpZiAoOjpTSENyZWF0ZURpcmVjdG9yeUV4
QSgwLCBjb29raWVKYXJEaXJlY3RvcnksIDApICE9IEVSUk9SX1NVQ0NFU1MKLSAgICAgICAgJiYg
OjpHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9GSUxFX0VYSVNUUwotICAgICAgICAmJiA6OkdldExh
c3RFcnJvcigpICE9IEVSUk9SX0FMUkVBRFlfRVhJU1RTKQotICAgICAgICByZXR1cm4gZmFzdFN0
ckR1cCgiY29va2llcy5kYXQiKTsKLQotICAgIHJldHVybiBmYXN0U3RyRHVwKGNvb2tpZUphckZ1
bGxQYXRoKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhc3RTdHJEdXAoImNvb2tpZXMuZGF0Iik7Ci0j
ZW5kaWYKLX0KLQogI2lmIEVOQUJMRShXRUJfVElNSU5HKQogc3RhdGljIHZvaWQgY2FsY3VsYXRl
V2ViVGltaW5nSW5mb3JtYXRpb25zKFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQpCiB7CkBAIC0x
OTIsNDcgKzEzMCwxNCBAQCBpbmxpbmUgc3RhdGljIGJvb2wgaXNIdHRwTm90TW9kaWZpZWQoaW50
IHN0YXR1c0NvZGUpCiAKIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6UmVzb3VyY2VIYW5kbGVNYW5h
Z2VyKCkKICAgICA6IG1fZG93bmxvYWRUaW1lcigqdGhpcywgJlJlc291cmNlSGFuZGxlTWFuYWdl
cjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKQotICAgICwgbV9jb29raWVKYXJGaWxlTmFtZShjb29r
aWVKYXJQYXRoKCkpCi0gICAgLCBtX2NlcnRpZmljYXRlUGF0aChjZXJ0aWZpY2F0ZVBhdGgoKSkK
ICAgICAsIG1fcnVubmluZ0pvYnMoMCkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2xvZ0ZpbGUo
bnVsbHB0cikKLSNlbmRpZgogewotICAgIENVUkxTSCogaCA9IEN1cmxNYW5hZ2VyOjpzaW5nbGV0
b24oKS5nZXRDdXJsU2hhcmVIYW5kbGUoKTsKLSAgICBtX2N1cmxTaGFyZUhhbmRsZSA9IGg7Ci0g
ICAgbV9jdXJsTXVsdGlIYW5kbGUgPSBjdXJsX211bHRpX2luaXQoKTsKLQotCi0gICAgaW5pdENv
b2tpZVNlc3Npb24oKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBjaGFyKiBsb2dGaWxlID0gZ2V0
ZW52KCJDVVJMX0xPR19GSUxFIik7Ci0gICAgaWYgKGxvZ0ZpbGUpCi0gICAgICAgIG1fbG9nRmls
ZSA9IGZvcGVuKGxvZ0ZpbGUsICJhIik7Ci0jZW5kaWYKKyAgICBtX2N1cmxNdWx0aUhhbmRsZSA9
IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRDdXJsU2hhcmVIYW5kbGUoKTsKIH0KIAogUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCkKIHsKICAgICBjdXJs
X211bHRpX2NsZWFudXAobV9jdXJsTXVsdGlIYW5kbGUpOwotICAgIGlmIChtX2Nvb2tpZUphckZp
bGVOYW1lKQotICAgICAgICBmYXN0RnJlZShtX2Nvb2tpZUphckZpbGVOYW1lKTsKLQotI2lmbmRl
ZiBOREVCVUcKLSAgICBpZiAobV9sb2dGaWxlKQotICAgICAgICBmY2xvc2UobV9sb2dGaWxlKTsK
LSNlbmRpZgotfQotCi12b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2V0Q29va2llSmFyRmls
ZU5hbWUoY29uc3QgY2hhciogY29va2llSmFyRmlsZU5hbWUpCi17Ci0gICAgbV9jb29raWVKYXJG
aWxlTmFtZSA9IGZhc3RTdHJEdXAoY29va2llSmFyRmlsZU5hbWUpOwotfQotCi1jb25zdCBjaGFy
KiBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmdldENvb2tpZUphckZpbGVOYW1lKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9jb29raWVKYXJGaWxlTmFtZTsKIH0KIAogUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyKiBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCkKQEAgLTI1MCw3ICsx
NTUsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSAoQ1VSTCogaGFu
ZGxlLCBSZXNvdXJjZUhhbmRsZSogam9iLCBSZXNvdQogICAgIC8vIHdoaWNoIG1lYW5zIHRoZSBS
ZXNvdXJjZUxvYWRlcidzIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gdGhlIFVSTC4KICAgICAv
LyBSdW4gdGhlIGNvZGUgaGVyZSBmb3IgbG9jYWwgZmlsZXMgdG8gcmVzb2x2ZSB0aGUgaXNzdWUu
CiAgICAgLy8gVE9ETzogU2VlIGlmIHRoZXJlIGlzIGEgYmV0dGVyIGFwcHJvYWNoIGZvciBoYW5k
bGluZyB0aGlzLgotICAgIFVSTCB1cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChoYW5k
bGUpOworICAgIFVSTCB1cmwgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0RWZmZWN0aXZl
VVJMKGhhbmRsZSk7CiAgICAgQVNTRVJUKHVybC5pc1ZhbGlkKCkpOwogICAgIGQtPm1fcmVzcG9u
c2Uuc2V0VVJMKHVybCk7CiAgICAgIGlmIChkLT5jbGllbnQoKSkKQEAgLTM2MSw3ICsyNjYsNyBA
QCBzdGF0aWMgYm9vbCBnZXRQcm90ZWN0aW9uU3BhY2UoQ1VSTCogaCwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIFByb3RlYwogICAgIGlmIChlcnIgIT0gQ1VSTEVfT0spCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIFVSTCB1cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVjdGl2
ZVVSTChoKTsKKyAgICBVUkwgdXJsID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEVmZmVj
dGl2ZVVSTChoKTsKICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtNDUwLDcgKzM1NSw3IEBAIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hh
ciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogICAgICAgICBj
dXJsX2Vhc3lfZ2V0aW5mbyhoLCBDVVJMSU5GT19DT05URU5UX0xFTkdUSF9ET1dOTE9BRCwgJmNv
bnRlbnRMZW5ndGgpOwogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExl
bmd0aChzdGF0aWNfY2FzdDxsb25nIGxvbmcgaW50Pihjb250ZW50TGVuZ3RoKSk7CiAKLSAgICAg
ICAgZC0+bV9yZXNwb25zZS5zZXRVUkwoQ3VybFV0aWxzOjpnZXRFZmZlY3RpdmVVUkwoaCkpOwor
ICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTChDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0
RWZmZWN0aXZlVVJMKGgpKTsKIAogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXND
b2RlKGh0dHBDb2RlKTsKICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlwZShleHRyYWN0
TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBI
ZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpOwpAQCAt
NjU3LDcgKzU2Miw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVy
Q2FsbGJhY2soKQogICAgICAgICAgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNl
KCkuZGlkRmluaXNoTG9hZGluZygqam9iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIFVSTCB1cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChkLT5t
X2hhbmRsZSk7CisgICAgICAgICAgICBVUkwgdXJsID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigp
LmdldEVmZmVjdGl2ZVVSTChkLT5tX2hhbmRsZSk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDdXJsIEVSUk9SIGZvciB1cmw9JyVzJywgZXJyb3I6ICclcydc
biIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjdXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5k
YXRhLnJlc3VsdCkpOwogI2VuZGlmCkBAIC02NzgsMjUgKzU4Myw2IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2soKQogICAgICAgICBtX2Rvd25sb2Fk
VGltZXIuc3RhcnRPbmVTaG90KHBvbGxUaW1lKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZU1h
bmFnZXI6OnNldFByb3h5SW5mbyhjb25zdCBTdHJpbmcmIGhvc3QsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9ydCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJveHlUeXBlIHR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGFz
c3dvcmQpCi17Ci0gICAgbV9wcm94eVR5cGUgPSB0eXBlOwotCi0gICAgaWYgKCFob3N0Lmxlbmd0
aCgpKSB7Ci0gICAgICAgIG1fcHJveHkgPSBlbXB0eVN0cmluZygpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFN0cmluZyB1c2VyUGFzczsKLSAgICAgICAgaWYgKHVzZXJuYW1lLmxlbmd0aCgpIHx8
IHBhc3N3b3JkLmxlbmd0aCgpKQotICAgICAgICAgICAgdXNlclBhc3MgPSB1c2VybmFtZSArICI6
IiArIHBhc3N3b3JkICsgIkAiOwotCi0gICAgICAgIG1fcHJveHkgPSBTdHJpbmcoImh0dHA6Ly8i
KSArIHVzZXJQYXNzICsgaG9zdCArICI6IiArIFN0cmluZzo6bnVtYmVyKHBvcnQpOwotICAgIH0K
LX0KLQogdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnJlbW92ZUZyb21DdXJsKFJlc291cmNl
SGFuZGxlKiBqb2IpCiB7CiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0
SW50ZXJuYWwoKTsKQEAgLTEwMTksNiArOTA1LDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFn
ZXI6OmFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwK
IAogdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VI
YW5kbGUqIGpvYikKIHsKKyAgICBDdXJsQ29udGV4dCYgY29udGV4dCA9IEN1cmxDb250ZXh0Ojpz
aW5nbGV0b24oKTsKKwogICAgIHN0YXRpYyBjb25zdCBpbnQgYWxsb3dlZFByb3RvY29scyA9IENV
UkxQUk9UT19GSUxFIHwgQ1VSTFBST1RPX0ZUUCB8IENVUkxQUk9UT19GVFBTIHwgQ1VSTFBST1RP
X0hUVFAgfCBDVVJMUFJPVE9fSFRUUFM7CiAgICAgVVJMIHVybCA9IGpvYi0+Zmlyc3RSZXF1ZXN0
KCkudXJsKCk7CiAKQEAgLTEwNDgsMTAgKzkzNiwxMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFu
YWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9iKQogICAgICAgICBBU1NF
UlRfVU5VU0VEKGVycm9yLCBlcnJvciA9PSBDVVJMRV9PSyk7CiAgICAgfQogI2lmbmRlZiBOREVC
VUcKLSAgICBpZiAoZ2V0ZW52KCJERUJVR19DVVJMIikpCisgICAgaWYgKGNvbnRleHQuaXNWZXJi
b3NlKCkpCiAgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfVkVS
Qk9TRSwgMSk7Ci0gICAgaWYgKG1fbG9nRmlsZSkKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChk
LT5tX2hhbmRsZSwgQ1VSTE9QVF9TVERFUlIsIG1fbG9nRmlsZSk7CisgICAgaWYgKGNvbnRleHQu
Z2V0TG9nRmlsZSgpKQorICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJM
T1BUX1NUREVSUiwgY29udGV4dC5nZXRMb2dGaWxlKCkpOwogI2VuZGlmCiAgICAgY3VybF9lYXN5
X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMUwpOwogICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDJMKTsK
QEAgLTEwNjUsMTkgKzk1MywyMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlh
bGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9iKQogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+
bV9oYW5kbGUsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOwogICAgIGN1cmxfZWFzeV9zZXRv
cHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfTUFYUkVESVJTLCAxMCk7CiAgICAgY3VybF9lYXN5X3Nl
dG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKLSAgICBj
dXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1NIQVJFLCBtX2N1cmxTaGFyZUhh
bmRsZSk7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9TSEFSRSwg
Q3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEN1cmxTaGFyZUhhbmRsZSgpKTsKICAgICBjdXJs
X2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0ROU19DQUNIRV9USU1FT1VULCA2MCAq
IDUpOyAvLyA1IG1pbnV0ZXMKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJM
T1BUX1BST1RPQ09MUywgYWxsb3dlZFByb3RvY29scyk7CiAgICAgY3VybF9lYXN5X3NldG9wdChk
LT5tX2hhbmRsZSwgQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFMsIGFsbG93ZWRQcm90b2NvbHMpOwog
ICAgIHNldFNTTENsaWVudENlcnRpZmljYXRlKGpvYik7CiAKLSAgICBpZiAoaWdub3JlU1NMRXJy
b3JzKQorICAgIGlmIChjb250ZXh0LnNob3VsZElnbm9yZVNTTEVycm9ycygpKQogICAgICAgICBj
dXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBmYWxz
ZSk7CiAgICAgZWxzZQogICAgICAgICBzZXRTU0xWZXJpZnlPcHRpb25zKGpvYik7CiAKLSAgICBp
ZiAoIW1fY2VydGlmaWNhdGVQYXRoLmlzTnVsbCgpKQotICAgICAgIGN1cmxfZWFzeV9zZXRvcHQo
ZC0+bV9oYW5kbGUsIENVUkxPUFRfQ0FJTkZPLCBtX2NlcnRpZmljYXRlUGF0aC5kYXRhKCkpOwor
ICAgIGNvbnN0IGNoYXIqIGNlcnRpZmljYXRlID0gY29udGV4dC5nZXRDZXJ0aWZpY2F0ZVBhdGgo
KTsKKyAgICBpZiAoY2VydGlmaWNhdGUpCisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9o
YW5kbGUsIENVUkxPUFRfQ0FJTkZPLCBjZXJ0aWZpY2F0ZSk7CiAKICAgICAvLyBlbmFibGUgZ3pp
cCBhbmQgZGVmbGF0ZSB0aHJvdWdoIEFjY2VwdC1FbmNvZGluZzoKICAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0VOQ09ESU5HLCAiIik7CkBAIC0xMDg5LDggKzk3OCw5
IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjppbml0aWFsaXplSGFuZGxlKFJlc291cmNl
SGFuZGxlKiBqb2IpCiAgICAgZC0+bV91cmwgPSBmYXN0U3RyRHVwKHVybFN0cmluZy5sYXRpbjEo
KS5kYXRhKCkpOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfVVJM
LCBkLT5tX3VybCk7CiAKLSAgICBpZiAobV9jb29raWVKYXJGaWxlTmFtZSkKLSAgICAgICAgY3Vy
bF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9DT09LSUVKQVIsIG1fY29va2llSmFy
RmlsZU5hbWUpOworICAgIGNvbnN0IGNoYXIqIGNvb2tpZUphciA9IGNvbnRleHQuZ2V0Q29va2ll
SmFyRmlsZU5hbWUoKTsKKyAgICBpZiAoY29va2llSmFyKQorICAgICAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0NPT0tJRUpBUiwgY29va2llSmFyKTsKIAogICAgIHN0
cnVjdCBjdXJsX3NsaXN0KiBoZWFkZXJzID0gMDsKICAgICBpZiAoam9iLT5maXJzdFJlcXVlc3Qo
KS5odHRwSGVhZGVyRmllbGRzKCkuc2l6ZSgpID4gMCkgewpAQCAtMTE1MCwzNCArMTA0MCwxNSBA
QCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhh
bmRsZSogam9iKQogICAgIGFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3Qoam9iLCBqb2ItPmZp
cnN0UmVxdWVzdCgpKTsKIAogICAgIC8vIFNldCBwcm94eSBvcHRpb25zIGlmIHdlIGhhdmUgdGhl
bS4KLSAgICBpZiAobV9wcm94eS5sZW5ndGgoKSkgewotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0
KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BST1hZLCBtX3Byb3h5LnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BST1hZVFlQRSwgbV9w
cm94eVR5cGUpOworICAgIGF1dG8gcHJveHkgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0
UHJveHlJbmZvKCk7CisgICAgQ3VybFByb3h5VHlwZSB0eXBlID0gc3RkOjpnZXQ8Q3VybFByb3h5
VHlwZT4ocHJveHkpOworICAgIGlmICh0eXBlICE9IEN1cmxQcm94eVR5cGU6OkludmFsaWQpIHsK
KyAgICAgICAgY29uc3QgU3RyaW5nJiB1cmwgPSBzdGQ6OmdldDxjb25zdCBTdHJpbmcmPihwcm94
eSk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUFJPWFks
IHVybC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRs
ZSwgQ1VSTE9QVF9QUk9YWVRZUEUsIHR5cGUpOwogICAgIH0KIH0KIAotdm9pZCBSZXNvdXJjZUhh
bmRsZU1hbmFnZXI6OmluaXRDb29raWVTZXNzaW9uKCkKLXsKLSAgICAvLyBDdXJsIHNhdmVzIGJv
dGggcGVyc2lzdGVudCBjb29raWVzLCBhbmQgc2Vzc2lvbiBjb29raWVzIHRvIHRoZSBjb29raWUg
ZmlsZS4KLSAgICAvLyBUaGUgc2Vzc2lvbiBjb29raWVzIHNob3VsZCBiZSBkZWxldGVkIGJlZm9y
ZSBzdGFydGluZyBhIG5ldyBzZXNzaW9uLgotCi0gICAgQ1VSTCogY3VybCA9IGN1cmxfZWFzeV9p
bml0KCk7Ci0KLSAgICBpZiAoIWN1cmwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGN1cmxfZWFz
eV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TSEFSRSwgbV9jdXJsU2hhcmVIYW5kbGUpOwotCi0gICAg
aWYgKG1fY29va2llSmFyRmlsZU5hbWUpIHsKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJs
LCBDVVJMT1BUX0NPT0tJRUZJTEUsIG1fY29va2llSmFyRmlsZU5hbWUpOwotICAgICAgICBjdXJs
X2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ09PS0lFSkFSLCBtX2Nvb2tpZUphckZpbGVOYW1l
KTsKLSAgICB9Ci0KLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ09PS0lFU0VT
U0lPTiwgMSk7Ci0KLSAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKLX0KLQogdm9pZCBSZXNv
dXJjZUhhbmRsZU1hbmFnZXI6OmNhbmNlbChSZXNvdXJjZUhhbmRsZSogam9iKQogewogICAgIGlm
IChyZW1vdmVTY2hlZHVsZWRKb2Ioam9iKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaAppbmRleCA5
MjVkYmE0MDI5OC4uZjQxYjAxZjY1NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgKQEAgLTQ2
LDI3ICs0NiwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlc291cmNlSGFuZGxl
TWFuYWdlciB7CiBwdWJsaWM6Ci0gICAgZW51bSBQcm94eVR5cGUgewotICAgICAgICBIVFRQID0g
Q1VSTFBST1hZX0hUVFAsCi0gICAgICAgIFNvY2tzNCA9IENVUkxQUk9YWV9TT0NLUzQsCi0gICAg
ICAgIFNvY2tzNEEgPSBDVVJMUFJPWFlfU09DS1M0QSwKLSAgICAgICAgU29ja3M1ID0gQ1VSTFBS
T1hZX1NPQ0tTNSwKLSAgICAgICAgU29ja3M1SG9zdG5hbWUgPSBDVVJMUFJPWFlfU09DS1M1X0hP
U1ROQU1FCi0gICAgfTsKICAgICBzdGF0aWMgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyKiBzaGFyZWRJ
bnN0YW5jZSgpOwogICAgIHZvaWQgYWRkKFJlc291cmNlSGFuZGxlKik7CiAgICAgdm9pZCBjYW5j
ZWwoUmVzb3VyY2VIYW5kbGUqKTsKIAotICAgIHZvaWQgc2V0Q29va2llSmFyRmlsZU5hbWUoY29u
c3QgY2hhciogY29va2llSmFyRmlsZU5hbWUpOwotICAgIGNvbnN0IGNoYXIqIGdldENvb2tpZUph
ckZpbGVOYW1lKCkgY29uc3Q7Ci0KICAgICB2b2lkIGRpc3BhdGNoU3luY2hyb25vdXNKb2IoUmVz
b3VyY2VIYW5kbGUqKTsKIAogICAgIHZvaWQgc2V0dXBQT1NUKFJlc291cmNlSGFuZGxlKiwgc3Ry
dWN0IGN1cmxfc2xpc3QqKik7CiAgICAgdm9pZCBzZXR1cFBVVChSZXNvdXJjZUhhbmRsZSosIHN0
cnVjdCBjdXJsX3NsaXN0KiopOwogCi0gICAgdm9pZCBzZXRQcm94eUluZm8oY29uc3QgU3RyaW5n
JiBob3N0ID0gZW1wdHlTdHJpbmcoKSwgdW5zaWduZWQgbG9uZyBwb3J0ID0gMCwgUHJveHlUeXBl
ID0gSFRUUCwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSA9IGVtcHR5U3RyaW5nKCksIGNvbnN0IFN0
cmluZyYgcGFzc3dvcmQgPSBlbXB0eVN0cmluZygpKTsKLQogcHJpdmF0ZToKICAgICBSZXNvdXJj
ZUhhbmRsZU1hbmFnZXIoKTsKICAgICB+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCk7CkBAIC03OSwy
MyArNjcsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJj
ZUhhbmRsZSopOwogCi0gICAgdm9pZCBpbml0Q29va2llU2Vzc2lvbigpOwotCiAgICAgVGltZXIg
bV9kb3dubG9hZFRpbWVyOwogICAgIENVUkxNKiBtX2N1cmxNdWx0aUhhbmRsZTsKLSAgICBDVVJM
U0gqIG1fY3VybFNoYXJlSGFuZGxlOwotICAgIGNoYXIqIG1fY29va2llSmFyRmlsZU5hbWU7CiAg
ICAgY2hhciBtX2N1cmxFcnJvckJ1ZmZlcltDVVJMX0VSUk9SX1NJWkVdOwogICAgIFZlY3RvcjxS
ZXNvdXJjZUhhbmRsZSo+IG1fcmVzb3VyY2VIYW5kbGVMaXN0OwotICAgIGNvbnN0IENTdHJpbmcg
bV9jZXJ0aWZpY2F0ZVBhdGg7CiAgICAgaW50IG1fcnVubmluZ0pvYnM7Ci0gICAgCi0gICAgU3Ry
aW5nIG1fcHJveHk7Ci0gICAgUHJveHlUeXBlIG1fcHJveHlUeXBlOwotCi0jaWZuZGVmIE5ERUJV
RwotICAgIEZJTEUqIG1fbG9nRmlsZTsKLSNlbmRpZgogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313861</attachid>
            <date>2017-06-26 12:22:36 -0700</date>
            <delta_ts>2017-06-26 15:05:39 -0700</delta_ts>
            <desc>PATCH2</desc>
            <filename>173629.diff</filename>
            <type>text/plain</type>
            <size>41301</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlMDlmNGExMWM3OC4uZWI5MDVkYzcxOTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NSBAQAorMjAxNy0wNi0yNCAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFNlcGFyYXRlIGdsb2JhbCBjdXJsIHNldHRpbmdzIGZy
b20gUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIGFzIEN1cmxDb250ZXh0IGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM2MjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8u
Y21ha2U6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29va2llc0ZvclNlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2VydGlmaWNhdGVQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUphclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybENvbnRleHQ6OkN1cmxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0
Ojp+Q3VybENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OmluaXRDb29r
aWVTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpnZXRQcm94eUluZm8p
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnNldFByb3h5SW5mbyk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsQ29udGV4dDo6Z2V0RWZmZWN0aXZlVVJMKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxDb250ZXh0OjpjcmVhdGVNdWx0aUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsQ29udGV4dDo6bXV0ZXhGb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6Omxv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnVubG9jayk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5oLgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybENvbnRleHQ6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29u
dGV4dDo6Z2V0Q3VybFNoYXJlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0
OjpnZXRDb29raWVKYXJGaWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6
c2V0Q29va2llSmFyRmlsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6Omdl
dENlcnRpZmljYXRlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6c2hvdWxk
SWdub3JlU1NMRXJyb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpnZXRMb2dG
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0Ojppc1ZlcmJvc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybERvd25sb2FkOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9h
ZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpjYW5jZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpkaWRSZWNlaXZlSGVhZGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmg6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6Q3VybEpvYk1hbmFnZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEpvYk1hbmFnZXI6On5DdXJsSm9iTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsSm9iTWFuYWdlcjo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpy
ZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OmdldEFjdGl2ZUNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpnZXRQZW5kaW5nQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0b3BUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0b3BUaHJlYWRJZklkbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybEpvYk1hbmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEpvYk1hbmFnZXI6OmFkZFRvQ3VybCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9i
TWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFn
ZXI6OndvcmtlclRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxK
b2JNYW5hZ2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybE1hbmFnZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpz
aW5nbGV0b24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpS
ZXNvdXJjZUhhbmRsZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRs
ZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3RlY3Rpb25T
cGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5kbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2VydGlmaWNhdGVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvb2tpZUphclBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyOjpzZXRDb29raWVKYXJGaWxlTmFtZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmdldENvb2tpZUphckZpbGVOYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2V0UHJv
eHlJbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdl
cjo6aW5pdENvb2tpZVNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisK
IDIwMTctMDYtMjIgIEJhc3VrZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNvbnkuY29tPgogCiAg
ICAgICAgIEZpeCBicm9rZW4gV2luQ2Fpcm8gYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNh
aXJvLmNtYWtlCmluZGV4IDU5NzcwNTk3N2VlLi44Mzc1ODJkMzAxMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0zMyw4ICszMyw5IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DcmVkZW50aWFsU3RvcmFnZUN1
cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZUVudHJ5LmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcAorICAgIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybERvd25sb2FkLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5j
cHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuY3BwCiAgICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL0ROU0N1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L0Zvcm1EYXRhU3RyZWFtQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVsdGlw
YXJ0SGFuZGxlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCmluZGV4IDZiNmVjOTk3MGIxLi4zNTQwYjc0NDNmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUph
ckN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29r
aWVKYXJDdXJsLmNwcApAQCAtMjIsOSArMjIsOCBAQAogI2lmIFVTRShDVVJMKQogCiAjaW5jbHVk
ZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiQ3VybE1hbmFnZXIuaCIKKyNpbmNsdWRlICJDdXJsQ29u
dGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAKICNpbmNsdWRlIDx3dGYvRGF0ZU1h
dGguaD4KQEAgLTI0MywxMyArMjQyLDE1IEBAIHN0YXRpYyBTdHJpbmcgZ2V0TmV0c2NhcGVDb29r
aWVGb3JtYXQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIHZvaWQgc2V0
Q29va2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiwg
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CisgICAgQ3VybENvbnRleHQm
IGNvbnRleHQgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCk7CisKICAgICBDVVJMKiBjdXJsID0g
Y3VybF9lYXN5X2luaXQoKTsKIAogICAgIGlmICghY3VybCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgY2hhciogY29va2llSmFyRmlsZU5hbWUgPSBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6
OnNoYXJlZEluc3RhbmNlKCktPmdldENvb2tpZUphckZpbGVOYW1lKCk7Ci0gICAgQ1VSTFNIKiBj
dXJsc2ggPSBDdXJsTWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0Q3VybFNoYXJlSGFuZGxlKCk7Cisg
ICAgY29uc3QgY2hhciogY29va2llSmFyRmlsZU5hbWUgPSBjb250ZXh0LmdldENvb2tpZUphckZp
bGVOYW1lKCk7CisgICAgQ1VSTFNIKiBjdXJsc2ggPSBjb250ZXh0LmdldEN1cmxTaGFyZUhhbmRs
ZSgpOwogCiAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPT0tJRUpBUiwgY29v
a2llSmFyRmlsZU5hbWUpOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TSEFS
RSwgY3VybHNoKTsKQEAgLTI3OCw3ICsyNzksNyBAQCBzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JT
ZXNzaW9uKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYsIGNvbnN0CiAg
ICAgaWYgKCFjdXJsKQogICAgICAgICByZXR1cm4gY29va2llczsKIAotICAgIENVUkxTSCogY3Vy
bHNoID0gQ3VybE1hbmFnZXI6OnNpbmdsZXRvbigpLmdldEN1cmxTaGFyZUhhbmRsZSgpOworICAg
IENVUkxTSCogY3VybHNoID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEN1cmxTaGFyZUhh
bmRsZSgpOwogCiAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NIQVJFLCBjdXJs
c2gpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTVl
MzlmZmQ1ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCkBAIC0wLDAgKzEsMjQ2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShDVVJMKQorI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCisKKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIE9T
KFdJTkRPV1MpCisjaW5jbHVkZSAiV2ViQ29yZUJ1bmRsZVdpbi5oIgorI2luY2x1ZGUgPHNobG9i
ai5oPgorI2luY2x1ZGUgPHNobHdhcGkuaD4KKyNlbmRpZgorCisjaWYgVVNFKENGKQorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgQ1N0cmluZyBjZXJ0aWZpY2F0ZVBhdGgo
KQoreworICAgIGNoYXIqIGVudlBhdGggPSBnZXRlbnYoIkNVUkxfQ0FfQlVORExFX1BBVEgiKTsK
KyAgICBpZiAoZW52UGF0aCkKKyAgICAgICAgcmV0dXJuIGVudlBhdGg7CisKKyNpZiBVU0UoQ0Yp
CisgICAgQ0ZCdW5kbGVSZWYgd2ViS2l0QnVuZGxlUmVmID0gd2ViS2l0QnVuZGxlKCk7CisgICAg
aWYgKHdlYktpdEJ1bmRsZVJlZikgeworICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNlcnRV
UkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKHdlYktpdEJ1bmRsZVJlZiwg
Q0ZTVFIoImNhY2VydCIpLCBDRlNUUigicGVtIiksIENGU1RSKCJjZXJ0aWZpY2F0ZXMiKSkpOwor
ICAgICAgICBpZiAoY2VydFVSTFJlZikgeworICAgICAgICAgICAgY2hhciBwYXRoW01BWF9QQVRI
XTsKKyAgICAgICAgICAgIENGVVJMR2V0RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNlcnRVUkxS
ZWYuZ2V0KCksIGZhbHNlLCByZWludGVycHJldF9jYXN0PFVJbnQ4Kj4ocGF0aCksIE1BWF9QQVRI
KTsKKyAgICAgICAgICAgIHJldHVybiBwYXRoOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisK
KyAgICByZXR1cm4gQ1N0cmluZygpOworfQorCitzdGF0aWMgQ1N0cmluZyBjb29raWVKYXJQYXRo
KCkKK3sKKyAgICBjaGFyKiBjb29raWVKYXJQYXRoID0gZ2V0ZW52KCJDVVJMX0NPT0tJRV9KQVJf
UEFUSCIpOworICAgIGlmIChjb29raWVKYXJQYXRoKQorICAgICAgICByZXR1cm4gY29va2llSmFy
UGF0aDsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgY2hhciBleGVjdXRhYmxlUGF0aFtNQVhfUEFU
SF07CisgICAgY2hhciBhcHBEYXRhRGlyZWN0b3J5W01BWF9QQVRIXTsKKyAgICBjaGFyIGNvb2tp
ZUphckZ1bGxQYXRoW01BWF9QQVRIXTsKKyAgICBjaGFyIGNvb2tpZUphckRpcmVjdG9yeVtNQVhf
UEFUSF07CisKKyAgICBpZiAoRkFJTEVEKDo6U0hHZXRGb2xkZXJQYXRoQSgwLCBDU0lETF9MT0NB
TF9BUFBEQVRBIHwgQ1NJRExfRkxBR19DUkVBVEUsIDAsIDAsIGFwcERhdGFEaXJlY3RvcnkpKQor
ICAgICAgICB8fCBGQUlMRUQoOjpHZXRNb2R1bGVGaWxlTmFtZUEoMCwgZXhlY3V0YWJsZVBhdGgs
IE1BWF9QQVRIKSkpCisgICAgICAgIHJldHVybiAiY29va2llcy5kYXQiOworCisgICAgOjpQYXRo
UmVtb3ZlRXh0ZW5zaW9uQShleGVjdXRhYmxlUGF0aCk7CisgICAgTFBTVFIgZXhlY3V0YWJsZU5h
bWUgPSA6OlBhdGhGaW5kRmlsZU5hbWVBKGV4ZWN1dGFibGVQYXRoKTsKKyAgICBzcHJpbnRmX3Mo
Y29va2llSmFyRGlyZWN0b3J5LCBNQVhfUEFUSCwgIiVzLyVzIiwgYXBwRGF0YURpcmVjdG9yeSwg
ZXhlY3V0YWJsZU5hbWUpOworICAgIHNwcmludGZfcyhjb29raWVKYXJGdWxsUGF0aCwgTUFYX1BB
VEgsICIlcy9jb29raWVzLmRhdCIsIGNvb2tpZUphckRpcmVjdG9yeSk7CisKKyAgICBpZiAoOjpT
SENyZWF0ZURpcmVjdG9yeUV4QSgwLCBjb29raWVKYXJEaXJlY3RvcnksIDApICE9IEVSUk9SX1NV
Q0NFU1MKKyAgICAgICAgJiYgOjpHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9GSUxFX0VYSVNUUwor
ICAgICAgICAmJiA6OkdldExhc3RFcnJvcigpICE9IEVSUk9SX0FMUkVBRFlfRVhJU1RTKQorICAg
ICAgICByZXR1cm4gImNvb2tpZXMuZGF0IjsKKworICAgIHJldHVybiBjb29raWVKYXJGdWxsUGF0
aDsKKyNlbHNlCisgICAgcmV0dXJuICJjb29raWVzLmRhdCI7CisjZW5kaWYKK30KKworLy8gQ3Vy
bENvbnRleHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCitDdXJsQ29udGV4dDo6Q3VybENvbnRleHQoKQorICAgIDog
bV9jb29raWVKYXJGaWxlTmFtZShjb29raWVKYXJQYXRoKCkpCisgICAgLCBtX2NlcnRpZmljYXRl
UGF0aChjZXJ0aWZpY2F0ZVBhdGgoKSkKKworeworICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9H
TE9CQUxfQUxMKTsKKyAgICBtX2N1cmxTaGFyZUhhbmRsZSA9IGN1cmxfc2hhcmVfaW5pdCgpOwor
ICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hBUkUs
IENVUkxfTE9DS19EQVRBX0NPT0tJRSk7CisgICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hh
cmVIYW5kbGUsIENVUkxTSE9QVF9TSEFSRSwgQ1VSTF9MT0NLX0RBVEFfRE5TKTsKKyAgICBjdXJs
X3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX0xPQ0tGVU5DLCBsb2Nr
KTsKKyAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX1VO
TE9DS0ZVTkMsIHVubG9jayk7CisKKyAgICBpbml0Q29va2llU2Vzc2lvbigpOworCisgICAgbV9p
Z25vcmVTU0xFcnJvcnMgPSBnZXRlbnYoIldFQktJVF9JR05PUkVfU1NMX0VSUk9SUyIpOworCisj
aWZuZGVmIE5ERUJVRworICAgIG1fdmVyYm9zZSA9IGdldGVudigiREVCVUdfQ1VSTCIpOworCisg
ICAgY2hhciogbG9nRmlsZSA9IGdldGVudigiQ1VSTF9MT0dfRklMRSIpOworICAgIGlmIChsb2dG
aWxlKQorICAgICAgICBtX2xvZ0ZpbGUgPSBmb3Blbihsb2dGaWxlLCAiYSIpOworI2VuZGlmCit9
CisKK0N1cmxDb250ZXh0Ojp+Q3VybENvbnRleHQoKQoreworICAgIGN1cmxfc2hhcmVfY2xlYW51
cChtX2N1cmxTaGFyZUhhbmRsZSk7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisjaWZu
ZGVmIE5ERUJVRworICAgIGlmIChtX2xvZ0ZpbGUpCisgICAgICAgIGZjbG9zZShtX2xvZ0ZpbGUp
OworI2VuZGlmCit9CisKKy8vIENvb2tpZSA9PT09PT09PT09PT09PT09PT09PT09PQorCit2b2lk
IEN1cmxDb250ZXh0Ojppbml0Q29va2llU2Vzc2lvbigpCit7CisgICAgLy8gQ3VybCBzYXZlcyBi
b3RoIHBlcnNpc3RlbnQgY29va2llcywgYW5kIHNlc3Npb24gY29va2llcyB0byB0aGUgY29va2ll
IGZpbGUuCisgICAgLy8gVGhlIHNlc3Npb24gY29va2llcyBzaG91bGQgYmUgZGVsZXRlZCBiZWZv
cmUgc3RhcnRpbmcgYSBuZXcgc2Vzc2lvbi4KKworICAgIENVUkwqIGN1cmwgPSBjdXJsX2Vhc3lf
aW5pdCgpOworCisgICAgaWYgKCFjdXJsKQorICAgICAgICByZXR1cm47CisKKyAgICBjdXJsX2Vh
c3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU0hBUkUsIGdldEN1cmxTaGFyZUhhbmRsZSgpKTsKKwor
ICAgIGlmICghbV9jb29raWVKYXJGaWxlTmFtZS5pc051bGwoKSkgeworICAgICAgICBjdXJsX2Vh
c3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ09PS0lFRklMRSwgbV9jb29raWVKYXJGaWxlTmFtZSk7
CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09LSUVKQVIsIG1fY29v
a2llSmFyRmlsZU5hbWUpOworICAgIH0KKworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VS
TE9QVF9DT09LSUVTRVNTSU9OLCAxKTsKKworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOwor
fQorCisvLyBQcm94eSA9PT09PT09PT09PT09PT09PT09PT09PQorCitzdGQ6OnR1cGxlPEN1cmxQ
cm94eVR5cGUsIGNvbnN0IFN0cmluZyY+IEN1cmxDb250ZXh0OjpnZXRQcm94eUluZm8oKSBjb25z
dAoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUobV9wcm94eVR5cGUsIG1fcHJveHkpOwor
fQorCit2b2lkIEN1cmxDb250ZXh0OjpzZXRQcm94eUluZm8oY29uc3QgU3RyaW5nJiBob3N0LAor
ICAgIHVuc2lnbmVkIGxvbmcgcG9ydCwKKyAgICBDdXJsUHJveHlUeXBlIHR5cGUsCisgICAgY29u
c3QgU3RyaW5nJiB1c2VybmFtZSwKKyAgICBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworCisg
ICAgaWYgKCFob3N0Lmxlbmd0aCgpKSB7CisgICAgICAgIG1fcHJveHlUeXBlID0gQ3VybFByb3h5
VHlwZTo6SW52YWxpZDsKKyAgICAgICAgbV9wcm94eSA9IGVtcHR5U3RyaW5nKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9wcm94eVR5cGUgPSB0eXBlOworCisgICAgICAgIFN0cmluZyB1c2Vy
UGFzczsKKyAgICAgICAgaWYgKHVzZXJuYW1lLmxlbmd0aCgpIHx8IHBhc3N3b3JkLmxlbmd0aCgp
KQorICAgICAgICAgICAgdXNlclBhc3MgPSB1c2VybmFtZSArICI6IiArIHBhc3N3b3JkICsgIkAi
OworCisgICAgICAgIG1fcHJveHkgPSBTdHJpbmcoImh0dHA6Ly8iKSArIHVzZXJQYXNzICsgaG9z
dCArICI6IiArIFN0cmluZzo6bnVtYmVyKHBvcnQpOworICAgIH0KK30KKworLy8gQ3VybCBVdGls
aXRpZXMgPT09PT09PT09PT09PT09PT09PT09PT0KKworVVJMIEN1cmxDb250ZXh0OjpnZXRFZmZl
Y3RpdmVVUkwoQ1VSTCogaGFuZGxlKQoreworICAgIGNvbnN0IGNoYXIqIHVybDsKKyAgICBDVVJM
Y29kZSBlcnIgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhoYW5kbGUsIENVUkxJTkZPX0VGRkVDVElWRV9V
UkwsICZ1cmwpOworICAgIGlmIChDVVJMRV9PSyAhPSBlcnIpCisgICAgICAgIHJldHVybiBVUkwo
KTsKKyAgICByZXR1cm4gVVJMKFVSTCgpLCB1cmwpOworfQorCitDVVJMTSogQ3VybENvbnRleHQ6
OmNyZWF0ZU11bHRpSGFuZGxlKCkKK3sKKyAgICByZXR1cm4gY3VybF9tdWx0aV9pbml0KCk7Cit9
CisKKy8vIFNoYXJlZCBSZXNvdXJjZSBtYW5hZ2VtZW50ID09PT09PT09PT09PT09PT09PT09PT09
CisKK0xvY2sqIEN1cmxDb250ZXh0OjptdXRleEZvcihjdXJsX2xvY2tfZGF0YSBkYXRhKQorewor
ICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBjb29raWVNdXRleCwgKCkp
OworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBkbnNNdXRleCwgKCkp
OworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBzaGFyZU11dGV4LCAo
KSk7CisKKyAgICBzd2l0Y2ggKGRhdGEpIHsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX0NPT0tJ
RToKKyAgICAgICAgcmV0dXJuICZjb29raWVNdXRleDsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRB
X0ROUzoKKyAgICAgICAgcmV0dXJuICZkbnNNdXRleDsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRB
X1NIQVJFOgorICAgICAgICByZXR1cm4gJnNoYXJlTXV0ZXg7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
K30KKworLy8gbGliY3VybCBkb2VzIG5vdCBpbXBsZW1lbnQgaXRzIG93biB0aHJlYWQgc3luY2hy
b25pemF0aW9uIHByaW1pdGl2ZXMuCisvLyB0aGVzZSB0d28gZnVuY3Rpb25zIHByb3ZpZGUgbXV0
ZXhlcyBmb3IgY29va2llcywgYW5kIGZvciB0aGUgZ2xvYmFsIEROUworLy8gY2FjaGUuCit2b2lk
IEN1cmxDb250ZXh0Ojpsb2NrKENVUkwqIC8qIGhhbmRsZSAqLywgY3VybF9sb2NrX2RhdGEgZGF0
YSwgY3VybF9sb2NrX2FjY2VzcyAvKiBhY2Nlc3MgKi8sIHZvaWQqIC8qIHVzZXJQdHIgKi8pCit7
CisgICAgaWYgKExvY2sqIG11dGV4ID0gbXV0ZXhGb3IoZGF0YSkpCisgICAgICAgIG11dGV4LT5s
b2NrKCk7Cit9CisKK3ZvaWQgQ3VybENvbnRleHQ6OnVubG9jayhDVVJMKiAvKiBoYW5kbGUgKi8s
IGN1cmxfbG9ja19kYXRhIGRhdGEsIHZvaWQqIC8qIHVzZXJQdHIgKi8pCit7CisgICAgaWYgKExv
Y2sqIG11dGV4ID0gbXV0ZXhGb3IoZGF0YSkpCisgICAgICAgIG11dGV4LT51bmxvY2soKTsKK30K
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjIyYTE4Yzc2MjU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJVUkwuaCIKKworI2luY2x1ZGUgPFdURi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgUExBVEZPUk0o
V0lOKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlm
CisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVt
IGNsYXNzIEN1cmxQcm94eVR5cGUgeworICAgIEludmFsaWQgPSAtMSwKKyAgICBIVFRQID0gQ1VS
TFBST1hZX0hUVFAsCisgICAgU29ja3M0ID0gQ1VSTFBST1hZX1NPQ0tTNCwKKyAgICBTb2NrczRB
ID0gQ1VSTFBST1hZX1NPQ0tTNEEsCisgICAgU29ja3M1ID0gQ1VSTFBST1hZX1NPQ0tTNSwKKyAg
ICBTb2NrczVIb3N0bmFtZSA9IENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUUKK307CisKK2NsYXNz
IEN1cmxDb250ZXh0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJsQ29udGV4dCk7CisK
K3B1YmxpYzoKKworICAgIHN0YXRpYyBDdXJsQ29udGV4dCYgc2luZ2xldG9uKCkKKyAgICB7Cisg
ICAgICAgIC8vIFNpbmNlIGl0J3MgYSBzdGF0aWMgdmFyaWFibGUsIGlmIHRoZSBjbGFzcyBoYXMg
YWxyZWFkeSBiZWVuIGNyZWF0ZWQsCisgICAgICAgIC8vIEl0IHdvbid0IGJlIGNyZWF0ZWQgYWdh
aW4uCisgICAgICAgIC8vIEFuZCBpdCAqKmlzKiogdGhyZWFkLXNhZmUgaW4gQysrMTEuCisKKyAg
ICAgICAgc3RhdGljIEN1cmxDb250ZXh0IHNoYXJlZDsKKyAgICAgICAgcmV0dXJuIHNoYXJlZDsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIH5DdXJsQ29udGV4dCgpOworCisgICAgQ1VSTFNIKiBnZXRD
dXJsU2hhcmVIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2N1cmxTaGFyZUhhbmRsZTsgfQorCisg
ICAgQ1VSTE0qIGNyZWF0ZU11bHRpSGFuZGxlKCk7CisKKyAgICAvLyBDb29raWUKKyAgICBjb25z
dCBjaGFyKiBnZXRDb29raWVKYXJGaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29va2llSmFy
RmlsZU5hbWUuZGF0YSgpOyB9CisgICAgdm9pZCBzZXRDb29raWVKYXJGaWxlTmFtZShjb25zdCBj
aGFyKiBjb29raWVKYXJGaWxlTmFtZSkgeyBtX2Nvb2tpZUphckZpbGVOYW1lID0gQ1N0cmluZyhj
b29raWVKYXJGaWxlTmFtZSk7IH0KKworICAgIC8vIENlcnRpZmljYXRlCisgICAgY29uc3QgY2hh
ciogZ2V0Q2VydGlmaWNhdGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jZXJ0aWZpY2F0ZVBhdGgu
ZGF0YSgpOyB9CisgICAgYm9vbCBzaG91bGRJZ25vcmVTU0xFcnJvcnMoKSBjb25zdCB7IHJldHVy
biBtX2lnbm9yZVNTTEVycm9yczsgfQorCisgICAgLy8gUHJveHkKKyAgICBzdGQ6OnR1cGxlPEN1
cmxQcm94eVR5cGUsIGNvbnN0IFN0cmluZyY+IGdldFByb3h5SW5mbygpIGNvbnN0OworICAgIHZv
aWQgc2V0UHJveHlJbmZvKGNvbnN0IFN0cmluZyYgaG9zdCA9IGVtcHR5U3RyaW5nKCksIHVuc2ln
bmVkIGxvbmcgcG9ydCA9IDAsIEN1cmxQcm94eVR5cGUgPSBDdXJsUHJveHlUeXBlOjpIVFRQLCBj
b25zdCBTdHJpbmcmIHVzZXJuYW1lID0gZW1wdHlTdHJpbmcoKSwgY29uc3QgU3RyaW5nJiBwYXNz
d29yZCA9IGVtcHR5U3RyaW5nKCkpOworCisgICAgLy8gVXRpbGl0aWVzCisgICAgVVJMIGdldEVm
ZmVjdGl2ZVVSTChDVVJMKiBoYW5kbGUpOworCisjaWZuZGVmIE5ERUJVRworICAgIEZJTEUqIGdl
dExvZ0ZpbGUoKSBjb25zdCB7IHJldHVybiBtX2xvZ0ZpbGU7IH0KKyAgICBib29sIGlzVmVyYm9z
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVyYm9zZTsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisKKyAg
ICBDVVJMU0gqIG1fY3VybFNoYXJlSGFuZGxlIHsgbnVsbHB0ciB9OworCisgICAgQ1N0cmluZyBt
X2Nvb2tpZUphckZpbGVOYW1lOworCisgICAgQ1N0cmluZyBtX2NlcnRpZmljYXRlUGF0aDsKKyAg
ICBib29sIG1faWdub3JlU1NMRXJyb3JzIHsgZmFsc2UgfTsKKworICAgIFN0cmluZyBtX3Byb3h5
OworICAgIEN1cmxQcm94eVR5cGUgbV9wcm94eVR5cGUgeyBDdXJsUHJveHlUeXBlOjpJbnZhbGlk
IH07CisKKyAgICBDdXJsQ29udGV4dCgpOworICAgIHZvaWQgaW5pdENvb2tpZVNlc3Npb24oKTsK
KworICAgIHN0YXRpYyB2b2lkIGxvY2soQ1VSTCosIGN1cmxfbG9ja19kYXRhLCBjdXJsX2xvY2tf
YWNjZXNzLCB2b2lkKik7CisgICAgc3RhdGljIHZvaWQgdW5sb2NrKENVUkwqLCBjdXJsX2xvY2tf
ZGF0YSwgdm9pZCopOworICAgIHN0YXRpYyBMb2NrKiBtdXRleEZvcihjdXJsX2xvY2tfZGF0YSk7
CisKKyNpZm5kZWYgTkRFQlVHCisgICAgRklMRSogbV9sb2dGaWxlIHsgbnVsbHB0ciB9OworICAg
IGJvb2wgbV92ZXJib3NlIHsgZmFsc2UgfTsKKyNlbmRpZgorfTsKKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAppbmRl
eCA5ODk1MDVlMzMwZi4uNDJiNDY3ZTQyMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCkBAIC0yOSw2ICsyOSw4IEBA
CiAKICNpbmNsdWRlICJDdXJsRG93bmxvYWQuaCIKIAorI2luY2x1ZGUgIkN1cmxDb250ZXh0Lmgi
CisKICNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5o
IgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtODUsNyArODcsNyBAQCB2b2lkIEN1
cmxEb3dubG9hZDo6aW5pdChDdXJsRG93bmxvYWRMaXN0ZW5lciogbGlzdGVuZXIsIGNvbnN0IFVS
TCYgdXJsKQogICAgIGlmIChjZXJ0UGF0aCkKICAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2N1
cmxIYW5kbGUsIENVUkxPUFRfQ0FJTkZPLCBjZXJ0UGF0aCk7CiAKLSAgICBDVVJMU0gqIGN1cmxz
aCA9IEN1cmxNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRDdXJsU2hhcmVIYW5kbGUoKTsKKyAgICBD
VVJMU0gqIGN1cmxzaCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRDdXJsU2hhcmVIYW5k
bGUoKTsKICAgICBpZiAoY3VybHNoKQogICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhh
bmRsZSwgQ1VSTE9QVF9TSEFSRSwgY3VybHNoKTsKIApAQCAtMTA2LDEzICsxMDgsMTMgQEAgdm9p
ZCBDdXJsRG93bmxvYWQ6OmluaXQoQ3VybERvd25sb2FkTGlzdGVuZXIqIGxpc3RlbmVyLCBSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IFIKIAogYm9vbCBDdXJsRG93bmxvYWQ6OnN0YXJ0KCkKIHsKLSAg
ICByZWYoKTsgLy8gQ3VybERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRUaHJlYWQgd2lsbCBjYWxs
IGRlcmVmIHdoZW4gdGhlIGRvd25sb2FkIGhhcyBmaW5pc2hlZC4KLSAgICByZXR1cm4gQ3VybE1h
bmFnZXI6OnNpbmdsZXRvbigpLmFkZChtX2N1cmxIYW5kbGUpOworICAgIHJlZigpOyAvLyBDdXJs
Sm9iTWFuYWdlciB3aWxsIGNhbGwgZGVyZWYgd2hlbiB0aGUgZG93bmxvYWQgaGFzIGZpbmlzaGVk
LgorICAgIHJldHVybiBDdXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkuYWRkKG1fY3VybEhhbmRs
ZSk7CiB9CiAKIGJvb2wgQ3VybERvd25sb2FkOjpjYW5jZWwoKQogewotICAgIHJldHVybiBDdXJs
TWFuYWdlcjo6c2luZ2xldG9uKCkucmVtb3ZlKG1fY3VybEhhbmRsZSk7CisgICAgcmV0dXJuIEN1
cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1vdmUobV9jdXJsSGFuZGxlKTsKIH0KIAogU3Ry
aW5nIEN1cmxEb3dubG9hZDo6Z2V0VGVtcFBhdGgoKSBjb25zdApAQCAtMjAzLDcgKzIwNSw3IEBA
IHZvaWQgQ3VybERvd25sb2FkOjpkaWRSZWNlaXZlSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVy
KQogICAgICAgICBVTlVTRURfUEFSQU0oZXJyKTsKIAogICAgICAgICBpZiAoaHR0cENvZGUgPj0g
MjAwICYmIGh0dHBDb2RlIDwgMzAwKSB7Ci0gICAgICAgICAgICBVUkwgdXJsID0gQ3VybFV0aWxz
OjpnZXRFZmZlY3RpdmVVUkwobV9jdXJsSGFuZGxlKTsKKyAgICAgICAgICAgIFVSTCB1cmwgPSBD
dXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0RWZmZWN0aXZlVVJMKG1fY3VybEhhbmRsZSk7CiAg
ICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB1cmwgPSB1cmwuaXNvbGF0ZWRDb3B5
KCksIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewogICAgICAgICAgICAgICAgIG1f
cmVzcG9uc2Uuc2V0VVJMKHVybCk7CiAgICAgICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRNaW1l
VHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKG1fcmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaAppbmRleCAzMTJlNDcwMDI3
Ni4uZjkwMzA2YzZmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsRG93bmxvYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDx3aW5z
b2NrMi5oPgogI2VuZGlmCiAKLSNpbmNsdWRlICJDdXJsTWFuYWdlci5oIgorI2luY2x1ZGUgIkN1
cmxKb2JNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdlci5jcHAKc2ltaWxh
cml0eSBpbmRleCA2NSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxNYW5hZ2VyLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcAppbmRleCA4ZjJlZWY2NTJjZi4uYjVkMGI2
MGI1YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxKb2JNYW5hZ2VyLmNwcApAQCAtMjcsNyArMjcsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogCiAjaWYgVVNFKENVUkwpCi0jaW5jbHVkZSAiQ3VybE1hbmFnZXIuaCIKKyNpbmNsdWRlICJD
dXJsSm9iTWFuYWdlci5oIgorCisjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKIAogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMzYs
MzcgKzM4LDE4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEN1cmxTaGFyZWRSZXNvdXJjZXMgewotcHVibGljOgotICAgIHN0YXRpYyB2
b2lkIGxvY2soQ1VSTCosIGN1cmxfbG9ja19kYXRhLCBjdXJsX2xvY2tfYWNjZXNzLCB2b2lkKik7
Ci0gICAgc3RhdGljIHZvaWQgdW5sb2NrKENVUkwqLCBjdXJsX2xvY2tfZGF0YSwgdm9pZCopOwot
Ci1wcml2YXRlOgotICAgIHN0YXRpYyBMb2NrKiBtdXRleEZvcihjdXJsX2xvY2tfZGF0YSk7Ci19
OwotCi0vLyBDdXJsRG93bmxvYWRNYW5hZ2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ3VybE1hbmFnZXI6OkN1
cmxNYW5hZ2VyKCkKK0N1cmxKb2JNYW5hZ2VyOjpDdXJsSm9iTWFuYWdlcigpCiB7Ci0gICAgY3Vy
bF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOwotICAgIG1fY3VybE11bHRpSGFuZGxlID0g
Y3VybF9tdWx0aV9pbml0KCk7Ci0gICAgbV9jdXJsU2hhcmVIYW5kbGUgPSBjdXJsX3NoYXJlX2lu
aXQoKTsKLSAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BU
X1NIQVJFLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUpOwotICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1f
Y3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hBUkUsIENVUkxfTE9DS19EQVRBX0ROUyk7Ci0g
ICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9MT0NLRlVO
QywgQ3VybFNoYXJlZFJlc291cmNlczo6bG9jayk7Ci0gICAgY3VybF9zaGFyZV9zZXRvcHQobV9j
dXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9VTkxPQ0tGVU5DLCBDdXJsU2hhcmVkUmVzb3VyY2Vz
Ojp1bmxvY2spOworICAgIG1fY3VybE11bHRpSGFuZGxlID0gQ3VybENvbnRleHQ6OnNpbmdsZXRv
bigpLmNyZWF0ZU11bHRpSGFuZGxlKCk7CiB9CiAKLUN1cmxNYW5hZ2VyOjp+Q3VybE1hbmFnZXIo
KQorQ3VybEpvYk1hbmFnZXI6On5DdXJsSm9iTWFuYWdlcigpCiB7CiAgICAgc3RvcFRocmVhZCgp
OwogICAgIGN1cmxfbXVsdGlfY2xlYW51cChtX2N1cmxNdWx0aUhhbmRsZSk7Ci0gICAgY3VybF9z
aGFyZV9jbGVhbnVwKG1fY3VybFNoYXJlSGFuZGxlKTsKLSAgICBjdXJsX2dsb2JhbF9jbGVhbnVw
KCk7CiB9CiAKLWJvb2wgQ3VybE1hbmFnZXI6OmFkZChDVVJMKiBjdXJsSGFuZGxlKQorYm9vbCBD
dXJsSm9iTWFuYWdlcjo6YWRkKENVUkwqIGN1cmxIYW5kbGUpCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIApAQCAtODAsNyArNjMsNyBAQCBib29sIEN1cmxNYW5hZ2VyOjphZGQoQ1VS
TCogY3VybEhhbmRsZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDdXJsTWFuYWdlcjo6
cmVtb3ZlKENVUkwqIGN1cmxIYW5kbGUpCitib29sIEN1cmxKb2JNYW5hZ2VyOjpyZW1vdmUoQ1VS
TCogY3VybEhhbmRsZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKIApAQCAt
ODksMTkgKzcyLDE5IEBAIGJvb2wgQ3VybE1hbmFnZXI6OnJlbW92ZShDVVJMKiBjdXJsSGFuZGxl
KQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbnQgQ3VybE1hbmFnZXI6OmdldEFjdGl2ZUNvdW50
KCkgY29uc3QKK2ludCBDdXJsSm9iTWFuYWdlcjo6Z2V0QWN0aXZlQ291bnQoKSBjb25zdAogewog
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOwogICAgIHJldHVybiBtX2FjdGl2ZUhhbmRs
ZUxpc3Quc2l6ZSgpOwogfQogCi1pbnQgQ3VybE1hbmFnZXI6OmdldFBlbmRpbmdDb3VudCgpIGNv
bnN0CitpbnQgQ3VybEpvYk1hbmFnZXI6OmdldFBlbmRpbmdDb3VudCgpIGNvbnN0CiB7CiAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CiAgICAgcmV0dXJuIG1fcGVuZGluZ0hhbmRsZUxp
c3Quc2l6ZSgpOwogfQogCi12b2lkIEN1cmxNYW5hZ2VyOjpzdGFydFRocmVhZElmTmVlZGVkKCkK
K3ZvaWQgQ3VybEpvYk1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAKQEAgLTExMywxMCArOTYsOCBAQCB2b2lkIEN1cmxNYW5hZ2Vy
OjpzdGFydFRocmVhZElmTmVlZGVkKCkKICAgICB9CiB9CiAKLXZvaWQgQ3VybE1hbmFnZXI6OnN0
b3BUaHJlYWQoKQordm9pZCBDdXJsSm9iTWFuYWdlcjo6c3RvcFRocmVhZCgpCiB7Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLQogICAgIHNldFJ1blRocmVhZChmYWxzZSk7CiAKICAgICBp
ZiAobV90aHJlYWQpIHsKQEAgLTEyNSwxMyArMTA2LDEzIEBAIHZvaWQgQ3VybE1hbmFnZXI6OnN0
b3BUaHJlYWQoKQogICAgIH0KIH0KIAotdm9pZCBDdXJsTWFuYWdlcjo6c3RvcFRocmVhZElmSWRs
ZSgpCit2b2lkIEN1cmxKb2JNYW5hZ2VyOjpzdG9wVGhyZWFkSWZJZGxlKCkKIHsKICAgICBpZiAo
IWdldEFjdGl2ZUNvdW50KCkgJiYgIWdldFBlbmRpbmdDb3VudCgpKQogICAgICAgICBzZXRSdW5U
aHJlYWQoZmFsc2UpOwogfQogCi12b2lkIEN1cmxNYW5hZ2VyOjp1cGRhdGVIYW5kbGVMaXN0KCkK
K3ZvaWQgQ3VybEpvYk1hbmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QoKQogewogICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbXV0ZXgpOwogCkBAIC0xNTAsNyArMTMxLDcgQEAgdm9pZCBDdXJsTWFuYWdl
cjo6dXBkYXRlSGFuZGxlTGlzdCgpCiAgICAgfQogfQogCi1ib29sIEN1cmxNYW5hZ2VyOjphZGRU
b0N1cmwoQ1VSTCogY3VybEhhbmRsZSkKK2Jvb2wgQ3VybEpvYk1hbmFnZXI6OmFkZFRvQ3VybChD
VVJMKiBjdXJsSGFuZGxlKQogewogICAgIENVUkxNY29kZSByZXR2YWwgPSBjdXJsX211bHRpX2Fk
ZF9oYW5kbGUobV9jdXJsTXVsdGlIYW5kbGUsIGN1cmxIYW5kbGUpOwogICAgIGlmIChyZXR2YWwg
PT0gQ1VSTE1fT0spIHsKQEAgLTE2MCw3ICsxNDEsNyBAQCBib29sIEN1cmxNYW5hZ2VyOjphZGRU
b0N1cmwoQ1VSTCogY3VybEhhbmRsZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQ3Vy
bE1hbmFnZXI6OnJlbW92ZUZyb21DdXJsKENVUkwqIGN1cmxIYW5kbGUpCitib29sIEN1cmxKb2JN
YW5hZ2VyOjpyZW1vdmVGcm9tQ3VybChDVVJMKiBjdXJsSGFuZGxlKQogewogICAgIGludCBoYW5k
bGVQb3MgPSBtX2FjdGl2ZUhhbmRsZUxpc3QuZmluZChjdXJsSGFuZGxlKTsKIApAQCAtMTc2LDEx
ICsxNTcsMTEgQEAgYm9vbCBDdXJsTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwoQ1VSTCogY3VybEhh
bmRsZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQ3VybE1hbmFnZXI6OndvcmtlclRo
cmVhZCh2b2lkKiBkYXRhKQordm9pZCBDdXJsSm9iTWFuYWdlcjo6d29ya2VyVGhyZWFkKHZvaWQq
IGRhdGEpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKLSAgICBDdXJsTWFuYWdl
ciogbWFuYWdlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q3VybE1hbmFnZXIqPihkYXRhKTsKKyAgICBD
dXJsSm9iTWFuYWdlciogbWFuYWdlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q3VybEpvYk1hbmFnZXIq
PihkYXRhKTsKIAogICAgIHdoaWxlIChtYW5hZ2VyLT5ydW5UaHJlYWQoKSkgewogCkBAIC0yMzYs
NTMgKzIxNyw2IEBAIHZvaWQgQ3VybE1hbmFnZXI6OndvcmtlclRocmVhZCh2b2lkKiBkYXRhKQog
ICAgIH0KIH0KIAotLy8gQ1VSTCBVdGlsaXRpZXMKLQotVVJMIEN1cmxVdGlsczo6Z2V0RWZmZWN0
aXZlVVJMKENVUkwqIGhhbmRsZSkKLXsKLSAgICBjb25zdCBjaGFyKiB1cmw7Ci0gICAgQ1VSTGNv
ZGUgZXJyID0gY3VybF9lYXN5X2dldGluZm8oaGFuZGxlLCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJM
LCAmdXJsKTsKLSAgICBpZiAoQ1VSTEVfT0sgIT0gZXJyKQotICAgICAgICByZXR1cm4gVVJMKCk7
Ci0gICAgcmV0dXJuIFVSTChVUkwoKSwgdXJsKTsKLX0KLQotLy8gU2hhcmVkIFJlc291cmNlIG1h
bmFnZW1lbnQgPT09PT09PT09PT09PT09PT09PT09PT0KLQotTG9jayogQ3VybFNoYXJlZFJlc291
cmNlczo6bXV0ZXhGb3IoY3VybF9sb2NrX2RhdGEgZGF0YSkKLXsKLSAgICBERVBSRUNBVEVEX0RF
RklORV9TVEFUSUNfTE9DQUwoTG9jaywgY29va2llTXV0ZXgsICgpKTsKLSAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoTG9jaywgZG5zTXV0ZXgsICgpKTsKLSAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoTG9jaywgc2hhcmVNdXRleCwgKCkpOwotCi0gICAgc3dpdGNo
IChkYXRhKSB7Ci0gICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9DT09LSUU6Ci0gICAgICAgIHJldHVy
biAmY29va2llTXV0ZXg7Ci0gICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9ETlM6Ci0gICAgICAgIHJl
dHVybiAmZG5zTXV0ZXg7Ci0gICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9TSEFSRToKLSAgICAgICAg
cmV0dXJuICZzaGFyZU11dGV4OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLS8vIGxpYmN1cmwg
ZG9lcyBub3QgaW1wbGVtZW50IGl0cyBvd24gdGhyZWFkIHN5bmNocm9uaXphdGlvbiBwcmltaXRp
dmVzLgotLy8gdGhlc2UgdHdvIGZ1bmN0aW9ucyBwcm92aWRlIG11dGV4ZXMgZm9yIGNvb2tpZXMs
IGFuZCBmb3IgdGhlIGdsb2JhbCBETlMKLS8vIGNhY2hlLgotdm9pZCBDdXJsU2hhcmVkUmVzb3Vy
Y2VzOjpsb2NrKENVUkwqIC8qIGhhbmRsZSAqLywgY3VybF9sb2NrX2RhdGEgZGF0YSwgY3VybF9s
b2NrX2FjY2VzcyAvKiBhY2Nlc3MgKi8sIHZvaWQqIC8qIHVzZXJQdHIgKi8pCi17Ci0gICAgaWYg
KExvY2sqIG11dGV4ID0gQ3VybFNoYXJlZFJlc291cmNlczo6bXV0ZXhGb3IoZGF0YSkpCi0gICAg
ICAgIG11dGV4LT5sb2NrKCk7Ci19Ci0KLXZvaWQgQ3VybFNoYXJlZFJlc291cmNlczo6dW5sb2Nr
KENVUkwqIC8qIGhhbmRsZSAqLywgY3VybF9sb2NrX2RhdGEgZGF0YSwgdm9pZCogLyogdXNlclB0
ciAqLykKLXsKLSAgICBpZiAoTG9jayogbXV0ZXggPSBDdXJsU2hhcmVkUmVzb3VyY2VzOjptdXRl
eEZvcihkYXRhKSkKLSAgICAgICAgbXV0ZXgtPnVubG9jaygpOwotfQotCiB9CiAKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5h
Z2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFn
ZXIuaApzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmgKaW5kZXggOTUyM2Q0Y2Q0M2Iu
LjEyZjkxYzRkNGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybEpvYk1hbmFnZXIuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiAjaWYgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTM1LDcg
KzM2LDYgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+Ci0jaW5jbHVkZSAiVVJM
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsMjAgKzQ2LDIwIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIEN1cmxKb2JBY3Rpb24gaGFuZGxlQ3VybE1zZyhDVVJMTXNnKikgPSAwOwog
fTsKIAotY2xhc3MgQ3VybE1hbmFnZXIgeworY2xhc3MgQ3VybEpvYk1hbmFnZXIgewogcHVibGlj
OgotICAgIHN0YXRpYyBDdXJsTWFuYWdlciYgc2luZ2xldG9uKCkKKyAgICBzdGF0aWMgQ3VybEpv
Yk1hbmFnZXImIHNpbmdsZXRvbigpCiAgICAgewogICAgICAgICAvLyBTaW5jZSBpdCdzIGEgc3Rh
dGljIHZhcmlhYmxlLCBpZiB0aGUgY2xhc3MgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLAogICAg
ICAgICAvLyBJdCB3b24ndCBiZSBjcmVhdGVkIGFnYWluLgogICAgICAgICAvLyBBbmQgaXQgKipp
cyoqIHRocmVhZC1zYWZlIGluIEMrKzExLgogCi0gICAgICAgIHN0YXRpYyBDdXJsTWFuYWdlciBz
aGFyZWQ7CisgICAgICAgIHN0YXRpYyBDdXJsSm9iTWFuYWdlciBzaGFyZWQ7CiAgICAgICAgIHJl
dHVybiBzaGFyZWQ7CiAgICAgfQogCi0gICAgQ3VybE1hbmFnZXIoKTsKLSAgICB2aXJ0dWFsIH5D
dXJsTWFuYWdlcigpOworICAgIEN1cmxKb2JNYW5hZ2VyKCk7CisgICAgdmlydHVhbCB+Q3VybEpv
Yk1hbmFnZXIoKTsKIAogICAgIGJvb2wgYWRkKENVUkwqIGN1cmxIYW5kbGUpOwogICAgIGJvb2wg
cmVtb3ZlKENVUkwqIGN1cmxIYW5kbGUpOwpAQCAtNjcsOCArNjcsNiBAQCBwdWJsaWM6CiAgICAg
aW50IGdldEFjdGl2ZUNvdW50KCkgY29uc3Q7CiAgICAgaW50IGdldFBlbmRpbmdDb3VudCgpIGNv
bnN0OwogCi0gICAgQ1VSTFNIKiBnZXRDdXJsU2hhcmVIYW5kbGUoKSBjb25zdCB7IHJldHVybiBt
X2N1cmxTaGFyZUhhbmRsZTsgfQotCiBwcml2YXRlOgogICAgIHZvaWQgc3RhcnRUaHJlYWRJZk5l
ZWRlZCgpOwogICAgIHZvaWQgc3RvcFRocmVhZCgpOwpAQCAtOTQsMTQgKzkyLDcgQEAgcHJpdmF0
ZToKICAgICBtdXRhYmxlIExvY2sgbV9tdXRleDsKICAgICBib29sIG1fcnVuVGhyZWFkIHsgZmFs
c2UgfTsKIAotICAgIENVUkxTSCogbV9jdXJsU2hhcmVIYW5kbGUgeyBudWxscHRyIH07Ci0KICAg
ICBmcmllbmQgY2xhc3MgQ3VybEpvYjsKIH07CiAKLWNsYXNzIEN1cmxVdGlscyB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFVSTCBnZXRFZmZlY3RpdmVVUkwoQ1VSTCogaGFuZGxlKTsKLX07Ci0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKaW5kZXggMjBhOTM0YTk5YjYuLjJkZWQ2NDQyMTM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcApAQCAtNDIsNyArNDIsNyBAQAogCiAjaW5j
bHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKICNpbmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgi
Ci0jaW5jbHVkZSAiQ3VybE1hbmFnZXIuaCIKKyNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtNjAsOSArNjAsNiBAQAogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogI2lmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSAiV2ViQ29y
ZUJ1bmRsZVdpbi5oIgotI2luY2x1ZGUgPHNobG9iai5oPgotI2luY2x1ZGUgPHNobHdhcGkuaD4K
ICNlbHNlCiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjZGVmaW5lIE1BWF9QQVRIIE1BWFBBVEhM
RU4KQEAgLTczLDEzICs3MCw5IEBACiAjaWYgRU5BQkxFKFdFQl9USU1JTkcpCiAjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CiAjZW5kaWYKLSNpZiBVU0UoQ0YpCi0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04OCw2MSArODEsNiBAQCBz
dGF0aWMgY29uc3QgU2Vjb25kcyBwb2xsVGltZSB7IDUwX21zIH07CiBjb25zdCBpbnQgbWF4UnVu
bmluZ0pvYnMgPSAxMjg7CiBjb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpbkN1cmwgPSAiQ3Vy
bEVycm9yRG9tYWluIjsKIAotc3RhdGljIGNvbnN0IGJvb2wgaWdub3JlU1NMRXJyb3JzID0gZ2V0
ZW52KCJXRUJLSVRfSUdOT1JFX1NTTF9FUlJPUlMiKTsKLQotc3RhdGljIENTdHJpbmcgY2VydGlm
aWNhdGVQYXRoKCkKLXsKLSAgICBjaGFyKiBlbnZQYXRoID0gZ2V0ZW52KCJDVVJMX0NBX0JVTkRM
RV9QQVRIIik7Ci0gICAgaWYgKGVudlBhdGgpCi0gICAgICAgIHJldHVybiBlbnZQYXRoOwotCi0j
aWYgVVNFKENGKQotICAgIENGQnVuZGxlUmVmIHdlYktpdEJ1bmRsZVJlZiA9IHdlYktpdEJ1bmRs
ZSgpOwotICAgIGlmICh3ZWJLaXRCdW5kbGVSZWYpIHsKLSAgICAgICAgUmV0YWluUHRyPENGVVJM
UmVmPiBjZXJ0VVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTCh3ZWJLaXRC
dW5kbGVSZWYsIENGU1RSKCJjYWNlcnQiKSwgQ0ZTVFIoInBlbSIpLCBDRlNUUigiY2VydGlmaWNh
dGVzIikpKTsKLSAgICAgICAgaWYgKGNlcnRVUkxSZWYpIHsKLSAgICAgICAgICAgIGNoYXIgcGF0
aFtNQVhfUEFUSF07Ci0gICAgICAgICAgICBDRlVSTEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihjZXJ0VVJMUmVmLmdldCgpLCBmYWxzZSwgcmVpbnRlcnByZXRfY2FzdDxVSW50OCo+KHBhdGgp
LCBNQVhfUEFUSCk7Ci0gICAgICAgICAgICByZXR1cm4gcGF0aDsKLSAgICAgICAgfQotICAgIH0K
LSNlbmRpZgotCi0gICAgcmV0dXJuIENTdHJpbmcoKTsKLX0KLQotc3RhdGljIGNoYXIqIGNvb2tp
ZUphclBhdGgoKQotewotICAgIGNoYXIqIGNvb2tpZUphclBhdGggPSBnZXRlbnYoIkNVUkxfQ09P
S0lFX0pBUl9QQVRIIik7Ci0gICAgaWYgKGNvb2tpZUphclBhdGgpCi0gICAgICAgIHJldHVybiBm
YXN0U3RyRHVwKGNvb2tpZUphclBhdGgpOwotCi0jaWYgT1MoV0lORE9XUykKLSAgICBjaGFyIGV4
ZWN1dGFibGVQYXRoW01BWF9QQVRIXTsKLSAgICBjaGFyIGFwcERhdGFEaXJlY3RvcnlbTUFYX1BB
VEhdOwotICAgIGNoYXIgY29va2llSmFyRnVsbFBhdGhbTUFYX1BBVEhdOwotICAgIGNoYXIgY29v
a2llSmFyRGlyZWN0b3J5W01BWF9QQVRIXTsKLQotICAgIGlmIChGQUlMRUQoOjpTSEdldEZvbGRl
clBhdGhBKDAsIENTSURMX0xPQ0FMX0FQUERBVEEgfCBDU0lETF9GTEFHX0NSRUFURSwgMCwgMCwg
YXBwRGF0YURpcmVjdG9yeSkpCi0gICAgICAgIHx8IEZBSUxFRCg6OkdldE1vZHVsZUZpbGVOYW1l
QSgwLCBleGVjdXRhYmxlUGF0aCwgTUFYX1BBVEgpKSkKLSAgICAgICAgcmV0dXJuIGZhc3RTdHJE
dXAoImNvb2tpZXMuZGF0Iik7Ci0KLSAgICA6OlBhdGhSZW1vdmVFeHRlbnNpb25BKGV4ZWN1dGFi
bGVQYXRoKTsKLSAgICBMUFNUUiBleGVjdXRhYmxlTmFtZSA9IDo6UGF0aEZpbmRGaWxlTmFtZUEo
ZXhlY3V0YWJsZVBhdGgpOwotICAgIHNwcmludGZfcyhjb29raWVKYXJEaXJlY3RvcnksIE1BWF9Q
QVRILCAiJXMvJXMiLCBhcHBEYXRhRGlyZWN0b3J5LCBleGVjdXRhYmxlTmFtZSk7Ci0gICAgc3By
aW50Zl9zKGNvb2tpZUphckZ1bGxQYXRoLCBNQVhfUEFUSCwgIiVzL2Nvb2tpZXMuZGF0IiwgY29v
a2llSmFyRGlyZWN0b3J5KTsKLQotICAgIGlmICg6OlNIQ3JlYXRlRGlyZWN0b3J5RXhBKDAsIGNv
b2tpZUphckRpcmVjdG9yeSwgMCkgIT0gRVJST1JfU1VDQ0VTUwotICAgICAgICAmJiA6OkdldExh
c3RFcnJvcigpICE9IEVSUk9SX0ZJTEVfRVhJU1RTCi0gICAgICAgICYmIDo6R2V0TGFzdEVycm9y
KCkgIT0gRVJST1JfQUxSRUFEWV9FWElTVFMpCi0gICAgICAgIHJldHVybiBmYXN0U3RyRHVwKCJj
b29raWVzLmRhdCIpOwotCi0gICAgcmV0dXJuIGZhc3RTdHJEdXAoY29va2llSmFyRnVsbFBhdGgp
OwotI2Vsc2UKLSAgICByZXR1cm4gZmFzdFN0ckR1cCgiY29va2llcy5kYXQiKTsKLSNlbmRpZgot
fQotCiAjaWYgRU5BQkxFKFdFQl9USU1JTkcpCiBzdGF0aWMgdm9pZCBjYWxjdWxhdGVXZWJUaW1p
bmdJbmZvcm1hdGlvbnMoUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCkKIHsKQEAgLTE5Miw0NyAr
MTMwLDE0IEBAIGlubGluZSBzdGF0aWMgYm9vbCBpc0h0dHBOb3RNb2RpZmllZChpbnQgc3RhdHVz
Q29kZSkKIAogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXIoKQog
ICAgIDogbV9kb3dubG9hZFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3du
bG9hZFRpbWVyQ2FsbGJhY2spCi0gICAgLCBtX2Nvb2tpZUphckZpbGVOYW1lKGNvb2tpZUphclBh
dGgoKSkKLSAgICAsIG1fY2VydGlmaWNhdGVQYXRoKGNlcnRpZmljYXRlUGF0aCgpKQogICAgICwg
bV9ydW5uaW5nSm9icygwKQotI2lmbmRlZiBOREVCVUcKLSAgICAsIG1fbG9nRmlsZShudWxscHRy
KQotI2VuZGlmCiB7Ci0gICAgQ1VSTFNIKiBoID0gQ3VybE1hbmFnZXI6OnNpbmdsZXRvbigpLmdl
dEN1cmxTaGFyZUhhbmRsZSgpOwotICAgIG1fY3VybFNoYXJlSGFuZGxlID0gaDsKLSAgICBtX2N1
cmxNdWx0aUhhbmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOwotCi0KLSAgICBpbml0Q29va2llU2Vz
c2lvbigpOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIGNoYXIqIGxvZ0ZpbGUgPSBnZXRlbnYoIkNV
UkxfTE9HX0ZJTEUiKTsKLSAgICBpZiAobG9nRmlsZSkKLSAgICAgICAgbV9sb2dGaWxlID0gZm9w
ZW4obG9nRmlsZSwgImEiKTsKLSNlbmRpZgorICAgIG1fY3VybE11bHRpSGFuZGxlID0gQ3VybENv
bnRleHQ6OnNpbmdsZXRvbigpLmNyZWF0ZU11bHRpSGFuZGxlKCk7CiB9CiAKIFJlc291cmNlSGFu
ZGxlTWFuYWdlcjo6flJlc291cmNlSGFuZGxlTWFuYWdlcigpCiB7CiAgICAgY3VybF9tdWx0aV9j
bGVhbnVwKG1fY3VybE11bHRpSGFuZGxlKTsKLSAgICBpZiAobV9jb29raWVKYXJGaWxlTmFtZSkK
LSAgICAgICAgZmFzdEZyZWUobV9jb29raWVKYXJGaWxlTmFtZSk7Ci0KLSNpZm5kZWYgTkRFQlVH
Ci0gICAgaWYgKG1fbG9nRmlsZSkKLSAgICAgICAgZmNsb3NlKG1fbG9nRmlsZSk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNldENvb2tpZUphckZpbGVOYW1lKGNv
bnN0IGNoYXIqIGNvb2tpZUphckZpbGVOYW1lKQotewotICAgIG1fY29va2llSmFyRmlsZU5hbWUg
PSBmYXN0U3RyRHVwKGNvb2tpZUphckZpbGVOYW1lKTsKLX0KLQotY29uc3QgY2hhciogUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyOjpnZXRDb29raWVKYXJGaWxlTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fY29va2llSmFyRmlsZU5hbWU7CiB9CiAKIFJlc291cmNlSGFuZGxlTWFuYWdlciogUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpCkBAIC0yNTAsNyArMTU1LDcgQEAg
c3RhdGljIHZvaWQgaGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UgKENVUkwqIGhhbmRsZSwgUmVz
b3VyY2VIYW5kbGUqIGpvYiwgUmVzb3UKICAgICAvLyB3aGljaCBtZWFucyB0aGUgUmVzb3VyY2VM
b2FkZXIncyByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIHRoZSBVUkwuCiAgICAgLy8gUnVuIHRo
ZSBjb2RlIGhlcmUgZm9yIGxvY2FsIGZpbGVzIHRvIHJlc29sdmUgdGhlIGlzc3VlLgogICAgIC8v
IFRPRE86IFNlZSBpZiB0aGVyZSBpcyBhIGJldHRlciBhcHByb2FjaCBmb3IgaGFuZGxpbmcgdGhp
cy4KLSAgICBVUkwgdXJsID0gQ3VybFV0aWxzOjpnZXRFZmZlY3RpdmVVUkwoaGFuZGxlKTsKKyAg
ICBVUkwgdXJsID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEVmZmVjdGl2ZVVSTChoYW5k
bGUpOwogICAgIEFTU0VSVCh1cmwuaXNWYWxpZCgpKTsKICAgICBkLT5tX3Jlc3BvbnNlLnNldFVS
TCh1cmwpOwogICAgICBpZiAoZC0+Y2xpZW50KCkpCkBAIC0zNjEsNyArMjY2LDcgQEAgc3RhdGlj
IGJvb2wgZ2V0UHJvdGVjdGlvblNwYWNlKENVUkwqIGgsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBQcm90ZWMKICAgICBpZiAoZXJyICE9IENVUkxFX09LKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBVUkwgdXJsID0gQ3VybFV0aWxzOjpnZXRFZmZlY3RpdmVVUkwoaCk7
CisgICAgVVJMIHVybCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRFZmZlY3RpdmVVUkwo
aCk7CiAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTQ1MCw3ICszNTUsNyBAQCBzdGF0aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwg
c2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKICAgICAgICAgY3VybF9lYXN5
X2dldGluZm8oaCwgQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfRE9XTkxPQUQsICZjb250ZW50TGVu
Z3RoKTsKICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nIGludD4oY29udGVudExlbmd0aCkpOwogCi0gICAgICAgIGQtPm1f
cmVzcG9uc2Uuc2V0VVJMKEN1cmxVdGlsczo6Z2V0RWZmZWN0aXZlVVJMKGgpKTsKKyAgICAgICAg
ZC0+bV9yZXNwb25zZS5zZXRVUkwoQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEVmZmVjdGl2
ZVVSTChoKSk7CiAKICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShodHRw
Q29kZSk7CiAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBl
RnJvbU1lZGlhVHlwZShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6Q29udGVudFR5cGUpKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKQEAgLTY1Nyw3ICs1
NjIsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNr
KCkKICAgICAgICAgICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZEZp
bmlzaExvYWRpbmcoKmpvYik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBVUkwgdXJsID0gQ3VybFV0aWxzOjpnZXRFZmZlY3RpdmVVUkwoZC0+bV9oYW5kbGUp
OworICAgICAgICAgICAgVVJMIHVybCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRFZmZl
Y3RpdmVVUkwoZC0+bV9oYW5kbGUpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiQ3VybCBFUlJPUiBmb3IgdXJsPSclcycsIGVycm9yOiAnJXMnXG4iLCB1cmwu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgY3VybF9lYXN5X3N0cmVycm9yKG1zZy0+ZGF0YS5yZXN1
bHQpKTsKICNlbmRpZgpAQCAtNjc4LDI1ICs1ODMsNiBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFu
YWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKCkKICAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0
YXJ0T25lU2hvdChwb2xsVGltZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpz
ZXRQcm94eUluZm8oY29uc3QgU3RyaW5nJiBob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBvcnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFByb3h5VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVzZXJuYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQot
ewotICAgIG1fcHJveHlUeXBlID0gdHlwZTsKLQotICAgIGlmICghaG9zdC5sZW5ndGgoKSkgewot
ICAgICAgICBtX3Byb3h5ID0gZW1wdHlTdHJpbmcoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBT
dHJpbmcgdXNlclBhc3M7Ci0gICAgICAgIGlmICh1c2VybmFtZS5sZW5ndGgoKSB8fCBwYXNzd29y
ZC5sZW5ndGgoKSkKLSAgICAgICAgICAgIHVzZXJQYXNzID0gdXNlcm5hbWUgKyAiOiIgKyBwYXNz
d29yZCArICJAIjsKLQotICAgICAgICBtX3Byb3h5ID0gU3RyaW5nKCJodHRwOi8vIikgKyB1c2Vy
UGFzcyArIGhvc3QgKyAiOiIgKyBTdHJpbmc6Om51bWJlcihwb3J0KTsKLSAgICB9Ci19Ci0KIHZv
aWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpyZW1vdmVGcm9tQ3VybChSZXNvdXJjZUhhbmRsZSog
am9iKQogewogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFs
KCk7CkBAIC0xMDE5LDYgKzkwNSw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjphcHBs
eUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsCiAKIHZvaWQg
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjppbml0aWFsaXplSGFuZGxlKFJlc291cmNlSGFuZGxlKiBq
b2IpCiB7CisgICAgQ3VybENvbnRleHQmIGNvbnRleHQgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9u
KCk7CisKICAgICBzdGF0aWMgY29uc3QgaW50IGFsbG93ZWRQcm90b2NvbHMgPSBDVVJMUFJPVE9f
RklMRSB8IENVUkxQUk9UT19GVFAgfCBDVVJMUFJPVE9fRlRQUyB8IENVUkxQUk9UT19IVFRQIHwg
Q1VSTFBST1RPX0hUVFBTOwogICAgIFVSTCB1cmwgPSBqb2ItPmZpcnN0UmVxdWVzdCgpLnVybCgp
OwogCkBAIC0xMDQ4LDEwICs5MzYsMTAgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6Omlu
aXRpYWxpemVIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGpvYikKICAgICAgICAgQVNTRVJUX1VOVVNF
RChlcnJvciwgZXJyb3IgPT0gQ1VSTEVfT0spOwogICAgIH0KICNpZm5kZWYgTkRFQlVHCi0gICAg
aWYgKGdldGVudigiREVCVUdfQ1VSTCIpKQorICAgIGlmIChjb250ZXh0LmlzVmVyYm9zZSgpKQog
ICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1ZFUkJPU0UsIDEp
OwotICAgIGlmIChtX2xvZ0ZpbGUpCi0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5k
bGUsIENVUkxPUFRfU1RERVJSLCBtX2xvZ0ZpbGUpOworICAgIGlmIChjb250ZXh0LmdldExvZ0Zp
bGUoKSkKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9TVERF
UlIsIGNvbnRleHQuZ2V0TG9nRmlsZSgpKTsKICNlbmRpZgogICAgIGN1cmxfZWFzeV9zZXRvcHQo
ZC0+bV9oYW5kbGUsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDFMKTsKICAgICBjdXJsX2Vhc3lf
c2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAyTCk7CkBAIC0xMDY1
LDE5ICs5NTMsMjAgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5k
bGUoUmVzb3VyY2VIYW5kbGUqIGpvYikKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxl
LCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX01BWFJFRElSUywgMTApOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+
bV9oYW5kbGUsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0FOWSk7Ci0gICAgY3VybF9lYXN5
X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9TSEFSRSwgbV9jdXJsU2hhcmVIYW5kbGUpOwor
ICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfU0hBUkUsIEN1cmxDb250
ZXh0OjpzaW5nbGV0b24oKS5nZXRDdXJsU2hhcmVIYW5kbGUoKSk7CiAgICAgY3VybF9lYXN5X3Nl
dG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9ETlNfQ0FDSEVfVElNRU9VVCwgNjAgKiA1KTsgLy8g
NSBtaW51dGVzCiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QUk9U
T0NPTFMsIGFsbG93ZWRQcm90b2NvbHMpOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5k
bGUsIENVUkxPUFRfUkVESVJfUFJPVE9DT0xTLCBhbGxvd2VkUHJvdG9jb2xzKTsKICAgICBzZXRT
U0xDbGllbnRDZXJ0aWZpY2F0ZShqb2IpOwogCi0gICAgaWYgKGlnbm9yZVNTTEVycm9ycykKKyAg
ICBpZiAoY29udGV4dC5zaG91bGRJZ25vcmVTU0xFcnJvcnMoKSkKICAgICAgICAgY3VybF9lYXN5
X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgZmFsc2UpOwogICAg
IGVsc2UKICAgICAgICAgc2V0U1NMVmVyaWZ5T3B0aW9ucyhqb2IpOwogCi0gICAgaWYgKCFtX2Nl
cnRpZmljYXRlUGF0aC5pc051bGwoKSkKLSAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFu
ZGxlLCBDVVJMT1BUX0NBSU5GTywgbV9jZXJ0aWZpY2F0ZVBhdGguZGF0YSgpKTsKKyAgICBjb25z
dCBjaGFyKiBjZXJ0aWZpY2F0ZSA9IGNvbnRleHQuZ2V0Q2VydGlmaWNhdGVQYXRoKCk7CisgICAg
aWYgKGNlcnRpZmljYXRlKQorICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX0NBSU5GTywgY2VydGlmaWNhdGUpOwogCiAgICAgLy8gZW5hYmxlIGd6aXAgYW5kIGRl
ZmxhdGUgdGhyb3VnaCBBY2NlcHQtRW5jb2Rpbmc6CiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5t
X2hhbmRsZSwgQ1VSTE9QVF9FTkNPRElORywgIiIpOwpAQCAtMTA4OSw4ICs5NzgsOSBAQCB2b2lk
IFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSog
am9iKQogICAgIGQtPm1fdXJsID0gZmFzdFN0ckR1cCh1cmxTdHJpbmcubGF0aW4xKCkuZGF0YSgp
KTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VSTCwgZC0+bV91
cmwpOwogCi0gICAgaWYgKG1fY29va2llSmFyRmlsZU5hbWUpCi0gICAgICAgIGN1cmxfZWFzeV9z
ZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfQ09PS0lFSkFSLCBtX2Nvb2tpZUphckZpbGVOYW1l
KTsKKyAgICBjb25zdCBjaGFyKiBjb29raWVKYXIgPSBjb250ZXh0LmdldENvb2tpZUphckZpbGVO
YW1lKCk7CisgICAgaWYgKGNvb2tpZUphcikKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5t
X2hhbmRsZSwgQ1VSTE9QVF9DT09LSUVKQVIsIGNvb2tpZUphcik7CiAKICAgICBzdHJ1Y3QgY3Vy
bF9zbGlzdCogaGVhZGVycyA9IDA7CiAgICAgaWYgKGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEhl
YWRlckZpZWxkcygpLnNpemUoKSA+IDApIHsKQEAgLTExNTAsMzQgKzEwNDAsMTUgQEAgdm9pZCBS
ZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGpv
YikKICAgICBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KGpvYiwgam9iLT5maXJzdFJlcXVl
c3QoKSk7CiAKICAgICAvLyBTZXQgcHJveHkgb3B0aW9ucyBpZiB3ZSBoYXZlIHRoZW0uCi0gICAg
aWYgKG1fcHJveHkubGVuZ3RoKCkpIHsKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hh
bmRsZSwgQ1VSTE9QVF9QUk9YWSwgbV9wcm94eS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgY3Vy
bF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QUk9YWVRZUEUsIG1fcHJveHlUeXBl
KTsKKyAgICBhdXRvIHByb3h5ID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldFByb3h5SW5m
bygpOworICAgIEN1cmxQcm94eVR5cGUgdHlwZSA9IHN0ZDo6Z2V0PEN1cmxQcm94eVR5cGU+KHBy
b3h5KTsKKyAgICBpZiAodHlwZSAhPSBDdXJsUHJveHlUeXBlOjpJbnZhbGlkKSB7CisgICAgICAg
IGNvbnN0IFN0cmluZyYgdXJsID0gc3RkOjpnZXQ8Y29uc3QgU3RyaW5nJj4ocHJveHkpOworICAg
ICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BST1hZLCB1cmwudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxP
UFRfUFJPWFlUWVBFLCB0eXBlKTsKICAgICB9CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyOjppbml0Q29va2llU2Vzc2lvbigpCi17Ci0gICAgLy8gQ3VybCBzYXZlcyBib3RoIHBlcnNp
c3RlbnQgY29va2llcywgYW5kIHNlc3Npb24gY29va2llcyB0byB0aGUgY29va2llIGZpbGUuCi0g
ICAgLy8gVGhlIHNlc3Npb24gY29va2llcyBzaG91bGQgYmUgZGVsZXRlZCBiZWZvcmUgc3RhcnRp
bmcgYSBuZXcgc2Vzc2lvbi4KLQotICAgIENVUkwqIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOwot
Ci0gICAgaWYgKCFjdXJsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjdXJsX2Vhc3lfc2V0b3B0
KGN1cmwsIENVUkxPUFRfU0hBUkUsIG1fY3VybFNoYXJlSGFuZGxlKTsKLQotICAgIGlmIChtX2Nv
b2tpZUphckZpbGVOYW1lKSB7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9Q
VF9DT09LSUVGSUxFLCBtX2Nvb2tpZUphckZpbGVOYW1lKTsKLSAgICAgICAgY3VybF9lYXN5X3Nl
dG9wdChjdXJsLCBDVVJMT1BUX0NPT0tJRUpBUiwgbV9jb29raWVKYXJGaWxlTmFtZSk7Ci0gICAg
fQotCi0gICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPT0tJRVNFU1NJT04sIDEp
OwotCi0gICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7Ci19Ci0KIHZvaWQgUmVzb3VyY2VIYW5k
bGVNYW5hZ2VyOjpjYW5jZWwoUmVzb3VyY2VIYW5kbGUqIGpvYikKIHsKICAgICBpZiAocmVtb3Zl
U2NoZWR1bGVkSm9iKGpvYikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgKaW5kZXggOTI1ZGJhNDAy
OTguLmY0MWIwMWY2NTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCkBAIC00NiwyNyArNDYs
MTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZXNvdXJjZUhhbmRsZU1hbmFnZXIg
ewogcHVibGljOgotICAgIGVudW0gUHJveHlUeXBlIHsKLSAgICAgICAgSFRUUCA9IENVUkxQUk9Y
WV9IVFRQLAotICAgICAgICBTb2NrczQgPSBDVVJMUFJPWFlfU09DS1M0LAotICAgICAgICBTb2Nr
czRBID0gQ1VSTFBST1hZX1NPQ0tTNEEsCi0gICAgICAgIFNvY2tzNSA9IENVUkxQUk9YWV9TT0NL
UzUsCi0gICAgICAgIFNvY2tzNUhvc3RuYW1lID0gQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRQot
ICAgIH07CiAgICAgc3RhdGljIFJlc291cmNlSGFuZGxlTWFuYWdlciogc2hhcmVkSW5zdGFuY2Uo
KTsKICAgICB2b2lkIGFkZChSZXNvdXJjZUhhbmRsZSopOwogICAgIHZvaWQgY2FuY2VsKFJlc291
cmNlSGFuZGxlKik7CiAKLSAgICB2b2lkIHNldENvb2tpZUphckZpbGVOYW1lKGNvbnN0IGNoYXIq
IGNvb2tpZUphckZpbGVOYW1lKTsKLSAgICBjb25zdCBjaGFyKiBnZXRDb29raWVKYXJGaWxlTmFt
ZSgpIGNvbnN0OwotCiAgICAgdm9pZCBkaXNwYXRjaFN5bmNocm9ub3VzSm9iKFJlc291cmNlSGFu
ZGxlKik7CiAKICAgICB2b2lkIHNldHVwUE9TVChSZXNvdXJjZUhhbmRsZSosIHN0cnVjdCBjdXJs
X3NsaXN0KiopOwogICAgIHZvaWQgc2V0dXBQVVQoUmVzb3VyY2VIYW5kbGUqLCBzdHJ1Y3QgY3Vy
bF9zbGlzdCoqKTsKIAotICAgIHZvaWQgc2V0UHJveHlJbmZvKGNvbnN0IFN0cmluZyYgaG9zdCA9
IGVtcHR5U3RyaW5nKCksIHVuc2lnbmVkIGxvbmcgcG9ydCA9IDAsIFByb3h5VHlwZSA9IEhUVFAs
IGNvbnN0IFN0cmluZyYgdXNlcm5hbWUgPSBlbXB0eVN0cmluZygpLCBjb25zdCBTdHJpbmcmIHBh
c3N3b3JkID0gZW1wdHlTdHJpbmcoKSk7Ci0KIHByaXZhdGU6CiAgICAgUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyKCk7CiAgICAgflJlc291cmNlSGFuZGxlTWFuYWdlcigpOwpAQCAtNzksMjMgKzY3LDEx
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VIYW5kbGUq
KTsKIAotICAgIHZvaWQgaW5pdENvb2tpZVNlc3Npb24oKTsKLQogICAgIFRpbWVyIG1fZG93bmxv
YWRUaW1lcjsKICAgICBDVVJMTSogbV9jdXJsTXVsdGlIYW5kbGU7Ci0gICAgQ1VSTFNIKiBtX2N1
cmxTaGFyZUhhbmRsZTsKLSAgICBjaGFyKiBtX2Nvb2tpZUphckZpbGVOYW1lOwogICAgIGNoYXIg
bV9jdXJsRXJyb3JCdWZmZXJbQ1VSTF9FUlJPUl9TSVpFXTsKICAgICBWZWN0b3I8UmVzb3VyY2VI
YW5kbGUqPiBtX3Jlc291cmNlSGFuZGxlTGlzdDsKLSAgICBjb25zdCBDU3RyaW5nIG1fY2VydGlm
aWNhdGVQYXRoOwogICAgIGludCBtX3J1bm5pbmdKb2JzOwotICAgIAotICAgIFN0cmluZyBtX3By
b3h5OwotICAgIFByb3h5VHlwZSBtX3Byb3h5VHlwZTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBG
SUxFKiBtX2xvZ0ZpbGU7Ci0jZW5kaWYKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313871</attachid>
            <date>2017-06-26 15:05:39 -0700</date>
            <delta_ts>2017-06-28 19:43:13 -0700</delta_ts>
            <desc>PATH with fix for thread change</desc>
            <filename>173629.diff</filename>
            <type>text/plain</type>
            <size>41059</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlYWRmY2U4MjA3ZS4uOTMyNzc5Njg3MGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MyBAQAorMjAxNy0wNi0yNiAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFNlcGFyYXRlIGdsb2JhbCBjdXJsIHNldHRpbmdzIGZy
b20gUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIGFzIEN1cmxDb250ZXh0IGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM2MjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8u
Y21ha2U6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29va2llc0ZvclNlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2VydGlmaWNhdGVQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUphclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybENvbnRleHQ6OkN1cmxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0
Ojp+Q3VybENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OmluaXRDb29r
aWVTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpnZXRQcm94eUluZm8p
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnNldFByb3h5SW5mbyk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsQ29udGV4dDo6Z2V0RWZmZWN0aXZlVVJMKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxDb250ZXh0OjpjcmVhdGVNdWx0aUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsQ29udGV4dDo6bXV0ZXhGb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6Omxv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnVubG9jayk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5oLgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybENvbnRleHQ6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29u
dGV4dDo6Z2V0Q3VybFNoYXJlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0
OjpnZXRDb29raWVKYXJGaWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6
c2V0Q29va2llSmFyRmlsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6Omdl
dENlcnRpZmljYXRlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6c2hvdWxk
SWdub3JlU1NMRXJyb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpnZXRMb2dG
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0Ojppc1ZlcmJvc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybERvd25sb2FkOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9h
ZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpjYW5jZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpkaWRSZWNlaXZlSGVhZGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmg6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6Q3VybEpvYk1hbmFnZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEpvYk1hbmFnZXI6On5DdXJsSm9iTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsSm9iTWFuYWdlcjo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpy
ZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OmdldEFjdGl2ZUNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpnZXRQZW5kaW5nQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0b3BUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0b3BUaHJlYWRJZklkbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybEpvYk1hbmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEpvYk1hbmFnZXI6OmFkZFRvQ3VybCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9i
TWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFn
ZXI6OndvcmtlclRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxK
b2JNYW5hZ2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybE1hbmFnZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpz
aW5nbGV0b24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpS
ZXNvdXJjZUhhbmRsZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRs
ZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3RlY3Rpb25T
cGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5kbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2VydGlmaWNhdGVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvb2tpZUphclBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyOjpzZXRDb29raWVKYXJGaWxlTmFtZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmdldENvb2tpZUphckZpbGVOYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2V0UHJv
eHlJbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdl
cjo6aW5pdENvb2tpZVNlc3Npb24pOiBEZWxldGVkLgorCiAyMDE3LTA2LTI2ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSW1hZ2VGcmFtZUNhY2hlOjpzdGFydEFz
eW5jRGVjb2RpbmdRdWV1ZSgpIHVuc2FmZWx5IHBhc3NlcyBTdHJpbmdzIGFjcm9zcyB0aHJlYWRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCA1OTc3MDU5NzdlZS4uODM3
NTgyZDMwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQpAQCAtMzMsOCAr
MzMsOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3JlZGVudGlhbFN0b3JhZ2VDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsQ2FjaGVFbnRyeS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hl
TWFuYWdlci5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKLSAgICBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxKb2JNYW5hZ2VyLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9ETlNDdXJsLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Gb3JtRGF0YVN0cmVhbUN1cmwuY3BwCiAgICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL011bHRpcGFydEhhbmRsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAppbmRleCA2
YjZlYzk5NzBiMS4uMzU0MGI3NDQzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKQEAgLTIyLDkgKzIyLDggQEAK
ICNpZiBVU0UoQ1VSTCkKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkN1cmxNYW5h
Z2VyLmgiCisjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlTWFuYWdlci5oIgogI2luY2x1ZGUgIlVSTC5o
IgogCiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CkBAIC0yNDMsMTMgKzI0MiwxNSBAQCBzdGF0
aWMgU3RyaW5nIGdldE5ldHNjYXBlQ29va2llRm9ybWF0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQogCiB2b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogeworICAgIEN1cmxDb250ZXh0JiBjb250ZXh0ID0gQ3VybENvbnRleHQ6OnNpbmdsZXRv
bigpOworCiAgICAgQ1VSTCogY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CiAKICAgICBpZiAoIWN1
cmwpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IGNoYXIqIGNvb2tpZUphckZpbGVOYW1l
ID0gUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpLT5nZXRDb29raWVKYXJG
aWxlTmFtZSgpOwotICAgIENVUkxTSCogY3VybHNoID0gQ3VybE1hbmFnZXI6OnNpbmdsZXRvbigp
LmdldEN1cmxTaGFyZUhhbmRsZSgpOworICAgIGNvbnN0IGNoYXIqIGNvb2tpZUphckZpbGVOYW1l
ID0gY29udGV4dC5nZXRDb29raWVKYXJGaWxlTmFtZSgpOworICAgIENVUkxTSCogY3VybHNoID0g
Y29udGV4dC5nZXRDdXJsU2hhcmVIYW5kbGUoKTsKIAogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3Vy
bCwgQ1VSTE9QVF9DT09LSUVKQVIsIGNvb2tpZUphckZpbGVOYW1lKTsKICAgICBjdXJsX2Vhc3lf
c2V0b3B0KGN1cmwsIENVUkxPUFRfU0hBUkUsIGN1cmxzaCk7CkBAIC0yNzgsNyArMjc5LDcgQEAg
c3RhdGljIFN0cmluZyBjb29raWVzRm9yU2Vzc2lvbihjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Np
b24mLCBjb25zdCBVUkwmLCBjb25zdAogICAgIGlmICghY3VybCkKICAgICAgICAgcmV0dXJuIGNv
b2tpZXM7CiAKLSAgICBDVVJMU0gqIGN1cmxzaCA9IEN1cmxNYW5hZ2VyOjpzaW5nbGV0b24oKS5n
ZXRDdXJsU2hhcmVIYW5kbGUoKTsKKyAgICBDVVJMU0gqIGN1cmxzaCA9IEN1cmxDb250ZXh0Ojpz
aW5nbGV0b24oKS5nZXRDdXJsU2hhcmVIYW5kbGUoKTsKIAogICAgIGN1cmxfZWFzeV9zZXRvcHQo
Y3VybCwgQ1VSTE9QVF9TSEFSRSwgY3VybHNoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk1ZTM5ZmZkNWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcApAQCAtMCww
ICsxLDI0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ1VSTCkKKyNpbmNsdWRlICJDdXJs
Q29udGV4dC5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKKyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgIldlYkNvcmVCdW5k
bGVXaW4uaCIKKyNpbmNsdWRlIDxzaGxvYmouaD4KKyNpbmNsdWRlIDxzaGx3YXBpLmg+CisjZW5k
aWYKKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IENTdHJpbmcgY2VydGlmaWNhdGVQYXRoKCkKK3sKKyAgICBjaGFyKiBlbnZQYXRoID0gZ2V0ZW52
KCJDVVJMX0NBX0JVTkRMRV9QQVRIIik7CisgICAgaWYgKGVudlBhdGgpCisgICAgICAgIHJldHVy
biBlbnZQYXRoOworCisjaWYgVVNFKENGKQorICAgIENGQnVuZGxlUmVmIHdlYktpdEJ1bmRsZVJl
ZiA9IHdlYktpdEJ1bmRsZSgpOworICAgIGlmICh3ZWJLaXRCdW5kbGVSZWYpIHsKKyAgICAgICAg
UmV0YWluUHRyPENGVVJMUmVmPiBjZXJ0VVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNv
dXJjZVVSTCh3ZWJLaXRCdW5kbGVSZWYsIENGU1RSKCJjYWNlcnQiKSwgQ0ZTVFIoInBlbSIpLCBD
RlNUUigiY2VydGlmaWNhdGVzIikpKTsKKyAgICAgICAgaWYgKGNlcnRVUkxSZWYpIHsKKyAgICAg
ICAgICAgIGNoYXIgcGF0aFtNQVhfUEFUSF07CisgICAgICAgICAgICBDRlVSTEdldEZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihjZXJ0VVJMUmVmLmdldCgpLCBmYWxzZSwgcmVpbnRlcnByZXRfY2Fz
dDxVSW50OCo+KHBhdGgpLCBNQVhfUEFUSCk7CisgICAgICAgICAgICByZXR1cm4gcGF0aDsKKyAg
ICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIENTdHJpbmcoKTsKK30KKworc3Rh
dGljIENTdHJpbmcgY29va2llSmFyUGF0aCgpCit7CisgICAgY2hhciogY29va2llSmFyUGF0aCA9
IGdldGVudigiQ1VSTF9DT09LSUVfSkFSX1BBVEgiKTsKKyAgICBpZiAoY29va2llSmFyUGF0aCkK
KyAgICAgICAgcmV0dXJuIGNvb2tpZUphclBhdGg7CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIGNo
YXIgZXhlY3V0YWJsZVBhdGhbTUFYX1BBVEhdOworICAgIGNoYXIgYXBwRGF0YURpcmVjdG9yeVtN
QVhfUEFUSF07CisgICAgY2hhciBjb29raWVKYXJGdWxsUGF0aFtNQVhfUEFUSF07CisgICAgY2hh
ciBjb29raWVKYXJEaXJlY3RvcnlbTUFYX1BBVEhdOworCisgICAgaWYgKEZBSUxFRCg6OlNIR2V0
Rm9sZGVyUGF0aEEoMCwgQ1NJRExfTE9DQUxfQVBQREFUQSB8IENTSURMX0ZMQUdfQ1JFQVRFLCAw
LCAwLCBhcHBEYXRhRGlyZWN0b3J5KSkKKyAgICAgICAgfHwgRkFJTEVEKDo6R2V0TW9kdWxlRmls
ZU5hbWVBKDAsIGV4ZWN1dGFibGVQYXRoLCBNQVhfUEFUSCkpKQorICAgICAgICByZXR1cm4gImNv
b2tpZXMuZGF0IjsKKworICAgIDo6UGF0aFJlbW92ZUV4dGVuc2lvbkEoZXhlY3V0YWJsZVBhdGgp
OworICAgIExQU1RSIGV4ZWN1dGFibGVOYW1lID0gOjpQYXRoRmluZEZpbGVOYW1lQShleGVjdXRh
YmxlUGF0aCk7CisgICAgc3ByaW50Zl9zKGNvb2tpZUphckRpcmVjdG9yeSwgTUFYX1BBVEgsICIl
cy8lcyIsIGFwcERhdGFEaXJlY3RvcnksIGV4ZWN1dGFibGVOYW1lKTsKKyAgICBzcHJpbnRmX3Mo
Y29va2llSmFyRnVsbFBhdGgsIE1BWF9QQVRILCAiJXMvY29va2llcy5kYXQiLCBjb29raWVKYXJE
aXJlY3RvcnkpOworCisgICAgaWYgKDo6U0hDcmVhdGVEaXJlY3RvcnlFeEEoMCwgY29va2llSmFy
RGlyZWN0b3J5LCAwKSAhPSBFUlJPUl9TVUNDRVNTCisgICAgICAgICYmIDo6R2V0TGFzdEVycm9y
KCkgIT0gRVJST1JfRklMRV9FWElTVFMKKyAgICAgICAgJiYgOjpHZXRMYXN0RXJyb3IoKSAhPSBF
UlJPUl9BTFJFQURZX0VYSVNUUykKKyAgICAgICAgcmV0dXJuICJjb29raWVzLmRhdCI7CisKKyAg
ICByZXR1cm4gY29va2llSmFyRnVsbFBhdGg7CisjZWxzZQorICAgIHJldHVybiAiY29va2llcy5k
YXQiOworI2VuZGlmCit9CisKKy8vIEN1cmxDb250ZXh0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3VybENvbnRl
eHQ6OkN1cmxDb250ZXh0KCkKKyAgICA6IG1fY29va2llSmFyRmlsZU5hbWUoY29va2llSmFyUGF0
aCgpKQorICAgICwgbV9jZXJ0aWZpY2F0ZVBhdGgoY2VydGlmaWNhdGVQYXRoKCkpCisKK3sKKyAg
ICBjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisgICAgbV9jdXJsU2hhcmVIYW5k
bGUgPSBjdXJsX3NoYXJlX2luaXQoKTsKKyAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFy
ZUhhbmRsZSwgQ1VSTFNIT1BUX1NIQVJFLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUpOworICAgIGN1
cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hBUkUsIENVUkxf
TE9DS19EQVRBX0ROUyk7CisgICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5kbGUs
IENVUkxTSE9QVF9MT0NLRlVOQywgbG9jayk7CisgICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJs
U2hhcmVIYW5kbGUsIENVUkxTSE9QVF9VTkxPQ0tGVU5DLCB1bmxvY2spOworCisgICAgaW5pdENv
b2tpZVNlc3Npb24oKTsKKworICAgIG1faWdub3JlU1NMRXJyb3JzID0gZ2V0ZW52KCJXRUJLSVRf
SUdOT1JFX1NTTF9FUlJPUlMiKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBtX3ZlcmJvc2UgPSBn
ZXRlbnYoIkRFQlVHX0NVUkwiKTsKKworICAgIGNoYXIqIGxvZ0ZpbGUgPSBnZXRlbnYoIkNVUkxf
TE9HX0ZJTEUiKTsKKyAgICBpZiAobG9nRmlsZSkKKyAgICAgICAgbV9sb2dGaWxlID0gZm9wZW4o
bG9nRmlsZSwgImEiKTsKKyNlbmRpZgorfQorCitDdXJsQ29udGV4dDo6fkN1cmxDb250ZXh0KCkK
K3sKKyAgICBjdXJsX3NoYXJlX2NsZWFudXAobV9jdXJsU2hhcmVIYW5kbGUpOworICAgIGN1cmxf
Z2xvYmFsX2NsZWFudXAoKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAobV9sb2dGaWxlKQor
ICAgICAgICBmY2xvc2UobV9sb2dGaWxlKTsKKyNlbmRpZgorfQorCisvLyBDb29raWUgPT09PT09
PT09PT09PT09PT09PT09PT0KKwordm9pZCBDdXJsQ29udGV4dDo6aW5pdENvb2tpZVNlc3Npb24o
KQoreworICAgIC8vIEN1cmwgc2F2ZXMgYm90aCBwZXJzaXN0ZW50IGNvb2tpZXMsIGFuZCBzZXNz
aW9uIGNvb2tpZXMgdG8gdGhlIGNvb2tpZSBmaWxlLgorICAgIC8vIFRoZSBzZXNzaW9uIGNvb2tp
ZXMgc2hvdWxkIGJlIGRlbGV0ZWQgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IHNlc3Npb24uCisKKyAg
ICBDVVJMKiBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKworICAgIGlmICghY3VybCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NIQVJFLCBn
ZXRDdXJsU2hhcmVIYW5kbGUoKSk7CisKKyAgICBpZiAoIW1fY29va2llSmFyRmlsZU5hbWUuaXNO
dWxsKCkpIHsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPT0tJRUZJ
TEUsIG1fY29va2llSmFyRmlsZU5hbWUpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmws
IENVUkxPUFRfQ09PS0lFSkFSLCBtX2Nvb2tpZUphckZpbGVOYW1lKTsKKyAgICB9CisKKyAgICBj
dXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ09PS0lFU0VTU0lPTiwgMSk7CisKKyAgICBj
dXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKK30KKworLy8gUHJveHkgPT09PT09PT09PT09PT09PT09
PT09PT0KKworc3RkOjp0dXBsZTxDdXJsUHJveHlUeXBlLCBjb25zdCBTdHJpbmcmPiBDdXJsQ29u
dGV4dDo6Z2V0UHJveHlJbmZvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxl
KG1fcHJveHlUeXBlLCBtX3Byb3h5KTsKK30KKwordm9pZCBDdXJsQ29udGV4dDo6c2V0UHJveHlJ
bmZvKGNvbnN0IFN0cmluZyYgaG9zdCwKKyAgICB1bnNpZ25lZCBsb25nIHBvcnQsCisgICAgQ3Vy
bFByb3h5VHlwZSB0eXBlLAorICAgIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUsCisgICAgY29uc3Qg
U3RyaW5nJiBwYXNzd29yZCkKK3sKKworICAgIGlmICghaG9zdC5sZW5ndGgoKSkgeworICAgICAg
ICBtX3Byb3h5VHlwZSA9IEN1cmxQcm94eVR5cGU6OkludmFsaWQ7CisgICAgICAgIG1fcHJveHkg
PSBlbXB0eVN0cmluZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcHJveHlUeXBlID0gdHlw
ZTsKKworICAgICAgICBTdHJpbmcgdXNlclBhc3M7CisgICAgICAgIGlmICh1c2VybmFtZS5sZW5n
dGgoKSB8fCBwYXNzd29yZC5sZW5ndGgoKSkKKyAgICAgICAgICAgIHVzZXJQYXNzID0gdXNlcm5h
bWUgKyAiOiIgKyBwYXNzd29yZCArICJAIjsKKworICAgICAgICBtX3Byb3h5ID0gU3RyaW5nKCJo
dHRwOi8vIikgKyB1c2VyUGFzcyArIGhvc3QgKyAiOiIgKyBTdHJpbmc6Om51bWJlcihwb3J0KTsK
KyAgICB9Cit9CisKKy8vIEN1cmwgVXRpbGl0aWVzID09PT09PT09PT09PT09PT09PT09PT09CisK
K1VSTCBDdXJsQ29udGV4dDo6Z2V0RWZmZWN0aXZlVVJMKENVUkwqIGhhbmRsZSkKK3sKKyAgICBj
b25zdCBjaGFyKiB1cmw7CisgICAgQ1VSTGNvZGUgZXJyID0gY3VybF9lYXN5X2dldGluZm8oaGFu
ZGxlLCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmdXJsKTsKKyAgICBpZiAoQ1VSTEVfT0sgIT0g
ZXJyKQorICAgICAgICByZXR1cm4gVVJMKCk7CisgICAgcmV0dXJuIFVSTChVUkwoKSwgdXJsKTsK
K30KKworQ1VSTE0qIEN1cmxDb250ZXh0OjpjcmVhdGVNdWx0aUhhbmRsZSgpCit7CisgICAgcmV0
dXJuIGN1cmxfbXVsdGlfaW5pdCgpOworfQorCisvLyBTaGFyZWQgUmVzb3VyY2UgbWFuYWdlbWVu
dCA9PT09PT09PT09PT09PT09PT09PT09PQorCitMb2NrKiBDdXJsQ29udGV4dDo6bXV0ZXhGb3Io
Y3VybF9sb2NrX2RhdGEgZGF0YSkKK3sKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9D
QUwoTG9jaywgY29va2llTXV0ZXgsICgpKTsKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNf
TE9DQUwoTG9jaywgZG5zTXV0ZXgsICgpKTsKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNf
TE9DQUwoTG9jaywgc2hhcmVNdXRleCwgKCkpOworCisgICAgc3dpdGNoIChkYXRhKSB7CisgICAg
Y2FzZSBDVVJMX0xPQ0tfREFUQV9DT09LSUU6CisgICAgICAgIHJldHVybiAmY29va2llTXV0ZXg7
CisgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9ETlM6CisgICAgICAgIHJldHVybiAmZG5zTXV0ZXg7
CisgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9TSEFSRToKKyAgICAgICAgcmV0dXJuICZzaGFyZU11
dGV4OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKKy8vIGxpYmN1cmwgZG9lcyBub3QgaW1wbGVt
ZW50IGl0cyBvd24gdGhyZWFkIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLgorLy8gdGhlc2Ug
dHdvIGZ1bmN0aW9ucyBwcm92aWRlIG11dGV4ZXMgZm9yIGNvb2tpZXMsIGFuZCBmb3IgdGhlIGds
b2JhbCBETlMKKy8vIGNhY2hlLgordm9pZCBDdXJsQ29udGV4dDo6bG9jayhDVVJMKiAvKiBoYW5k
bGUgKi8sIGN1cmxfbG9ja19kYXRhIGRhdGEsIGN1cmxfbG9ja19hY2Nlc3MgLyogYWNjZXNzICov
LCB2b2lkKiAvKiB1c2VyUHRyICovKQoreworICAgIGlmIChMb2NrKiBtdXRleCA9IG11dGV4Rm9y
KGRhdGEpKQorICAgICAgICBtdXRleC0+bG9jaygpOworfQorCit2b2lkIEN1cmxDb250ZXh0Ojp1
bmxvY2soQ1VSTCogLyogaGFuZGxlICovLCBjdXJsX2xvY2tfZGF0YSBkYXRhLCB2b2lkKiAvKiB1
c2VyUHRyICovKQoreworICAgIGlmIChMb2NrKiBtdXRleCA9IG11dGV4Rm9yKGRhdGEpKQorICAg
ICAgICBtdXRleC0+dW5sb2NrKCk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMmExOGM3NjI1OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCkBAIC0w
LDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVVJMLmgiCisKKyNpbmNsdWRlIDxXVEYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5j
bHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBDdXJsUHJveHlUeXBlIHsKKyAgICBJbnZh
bGlkID0gLTEsCisgICAgSFRUUCA9IENVUkxQUk9YWV9IVFRQLAorICAgIFNvY2tzNCA9IENVUkxQ
Uk9YWV9TT0NLUzQsCisgICAgU29ja3M0QSA9IENVUkxQUk9YWV9TT0NLUzRBLAorICAgIFNvY2tz
NSA9IENVUkxQUk9YWV9TT0NLUzUsCisgICAgU29ja3M1SG9zdG5hbWUgPSBDVVJMUFJPWFlfU09D
S1M1X0hPU1ROQU1FCit9OworCitjbGFzcyBDdXJsQ29udGV4dCB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ3VybENvbnRleHQpOworCitwdWJsaWM6CisKKyAgICBzdGF0aWMgQ3VybENvbnRl
eHQmIHNpbmdsZXRvbigpCisgICAgeworICAgICAgICAvLyBTaW5jZSBpdCdzIGEgc3RhdGljIHZh
cmlhYmxlLCBpZiB0aGUgY2xhc3MgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLAorICAgICAgICAv
LyBJdCB3b24ndCBiZSBjcmVhdGVkIGFnYWluLgorICAgICAgICAvLyBBbmQgaXQgKippcyoqIHRo
cmVhZC1zYWZlIGluIEMrKzExLgorCisgICAgICAgIHN0YXRpYyBDdXJsQ29udGV4dCBzaGFyZWQ7
CisgICAgICAgIHJldHVybiBzaGFyZWQ7CisgICAgfQorCisgICAgdmlydHVhbCB+Q3VybENvbnRl
eHQoKTsKKworICAgIENVUkxTSCogZ2V0Q3VybFNoYXJlSGFuZGxlKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJsU2hhcmVIYW5kbGU7IH0KKworICAgIENVUkxNKiBjcmVhdGVNdWx0aUhhbmRsZSgpOwor
CisgICAgLy8gQ29va2llCisgICAgY29uc3QgY2hhciogZ2V0Q29va2llSmFyRmlsZU5hbWUoKSBj
b25zdCB7IHJldHVybiBtX2Nvb2tpZUphckZpbGVOYW1lLmRhdGEoKTsgfQorICAgIHZvaWQgc2V0
Q29va2llSmFyRmlsZU5hbWUoY29uc3QgY2hhciogY29va2llSmFyRmlsZU5hbWUpIHsgbV9jb29r
aWVKYXJGaWxlTmFtZSA9IENTdHJpbmcoY29va2llSmFyRmlsZU5hbWUpOyB9CisKKyAgICAvLyBD
ZXJ0aWZpY2F0ZQorICAgIGNvbnN0IGNoYXIqIGdldENlcnRpZmljYXRlUGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2VydGlmaWNhdGVQYXRoLmRhdGEoKTsgfQorICAgIGJvb2wgc2hvdWxkSWdub3Jl
U1NMRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVTU0xFcnJvcnM7IH0KKworICAgIC8v
IFByb3h5CisgICAgc3RkOjp0dXBsZTxDdXJsUHJveHlUeXBlLCBjb25zdCBTdHJpbmcmPiBnZXRQ
cm94eUluZm8oKSBjb25zdDsKKyAgICB2b2lkIHNldFByb3h5SW5mbyhjb25zdCBTdHJpbmcmIGhv
c3QgPSBlbXB0eVN0cmluZygpLCB1bnNpZ25lZCBsb25nIHBvcnQgPSAwLCBDdXJsUHJveHlUeXBl
ID0gQ3VybFByb3h5VHlwZTo6SFRUUCwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSA9IGVtcHR5U3Ry
aW5nKCksIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQgPSBlbXB0eVN0cmluZygpKTsKKworICAgIC8v
IFV0aWxpdGllcworICAgIFVSTCBnZXRFZmZlY3RpdmVVUkwoQ1VSTCogaGFuZGxlKTsKKworI2lm
bmRlZiBOREVCVUcKKyAgICBGSUxFKiBnZXRMb2dGaWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb2dG
aWxlOyB9CisgICAgYm9vbCBpc1ZlcmJvc2UoKSBjb25zdCB7IHJldHVybiBtX3ZlcmJvc2U7IH0K
KyNlbmRpZgorCitwcml2YXRlOgorCisgICAgQ1VSTFNIKiBtX2N1cmxTaGFyZUhhbmRsZSB7IG51
bGxwdHIgfTsKKworICAgIENTdHJpbmcgbV9jb29raWVKYXJGaWxlTmFtZTsKKworICAgIENTdHJp
bmcgbV9jZXJ0aWZpY2F0ZVBhdGg7CisgICAgYm9vbCBtX2lnbm9yZVNTTEVycm9ycyB7IGZhbHNl
IH07CisKKyAgICBTdHJpbmcgbV9wcm94eTsKKyAgICBDdXJsUHJveHlUeXBlIG1fcHJveHlUeXBl
IHsgQ3VybFByb3h5VHlwZTo6SW52YWxpZCB9OworCisgICAgQ3VybENvbnRleHQoKTsKKyAgICB2
b2lkIGluaXRDb29raWVTZXNzaW9uKCk7CisKKyAgICBzdGF0aWMgdm9pZCBsb2NrKENVUkwqLCBj
dXJsX2xvY2tfZGF0YSwgY3VybF9sb2NrX2FjY2Vzcywgdm9pZCopOworICAgIHN0YXRpYyB2b2lk
IHVubG9jayhDVVJMKiwgY3VybF9sb2NrX2RhdGEsIHZvaWQqKTsKKyAgICBzdGF0aWMgTG9jayog
bXV0ZXhGb3IoY3VybF9sb2NrX2RhdGEpOworCisjaWZuZGVmIE5ERUJVRworICAgIEZJTEUqIG1f
bG9nRmlsZSB7IG51bGxwdHIgfTsKKyAgICBib29sIG1fdmVyYm9zZSB7IGZhbHNlIH07CisjZW5k
aWYKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsRG93bmxvYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxEb3dubG9hZC5jcHAKaW5kZXggOTg5NTA1ZTMzMGYuLjQyYjQ2N2U0MjE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2Fk
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25s
b2FkLmNwcApAQCAtMjksNiArMjksOCBAQAogCiAjaW5jbHVkZSAiQ3VybERvd25sb2FkLmgiCiAK
KyNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgorCiAjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgi
CiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
QEAgLTg1LDcgKzg3LDcgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OmluaXQoQ3VybERvd25sb2FkTGlz
dGVuZXIqIGxpc3RlbmVyLCBjb25zdCBVUkwmIHVybCkKICAgICBpZiAoY2VydFBhdGgpCiAgICAg
ICAgIGN1cmxfZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxlLCBDVVJMT1BUX0NBSU5GTywgY2VydFBh
dGgpOwogCi0gICAgQ1VSTFNIKiBjdXJsc2ggPSBDdXJsTWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0
Q3VybFNoYXJlSGFuZGxlKCk7CisgICAgQ1VSTFNIKiBjdXJsc2ggPSBDdXJsQ29udGV4dDo6c2lu
Z2xldG9uKCkuZ2V0Q3VybFNoYXJlSGFuZGxlKCk7CiAgICAgaWYgKGN1cmxzaCkKICAgICAgICAg
Y3VybF9lYXN5X3NldG9wdChtX2N1cmxIYW5kbGUsIENVUkxPUFRfU0hBUkUsIGN1cmxzaCk7CiAK
QEAgLTEwNiwxMyArMTA4LDEzIEBAIHZvaWQgQ3VybERvd25sb2FkOjppbml0KEN1cmxEb3dubG9h
ZExpc3RlbmVyKiBsaXN0ZW5lciwgUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSCiAKIGJvb2wgQ3Vy
bERvd25sb2FkOjpzdGFydCgpCiB7Ci0gICAgcmVmKCk7IC8vIEN1cmxEb3dubG9hZE1hbmFnZXI6
OmRvd25sb2FkVGhyZWFkIHdpbGwgY2FsbCBkZXJlZiB3aGVuIHRoZSBkb3dubG9hZCBoYXMgZmlu
aXNoZWQuCi0gICAgcmV0dXJuIEN1cmxNYW5hZ2VyOjpzaW5nbGV0b24oKS5hZGQobV9jdXJsSGFu
ZGxlKTsKKyAgICByZWYoKTsgLy8gQ3VybEpvYk1hbmFnZXIgd2lsbCBjYWxsIGRlcmVmIHdoZW4g
dGhlIGRvd25sb2FkIGhhcyBmaW5pc2hlZC4KKyAgICByZXR1cm4gQ3VybEpvYk1hbmFnZXI6OnNp
bmdsZXRvbigpLmFkZChtX2N1cmxIYW5kbGUpOwogfQogCiBib29sIEN1cmxEb3dubG9hZDo6Y2Fu
Y2VsKCkKIHsKLSAgICByZXR1cm4gQ3VybE1hbmFnZXI6OnNpbmdsZXRvbigpLnJlbW92ZShtX2N1
cmxIYW5kbGUpOworICAgIHJldHVybiBDdXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkucmVtb3Zl
KG1fY3VybEhhbmRsZSk7CiB9CiAKIFN0cmluZyBDdXJsRG93bmxvYWQ6OmdldFRlbXBQYXRoKCkg
Y29uc3QKQEAgLTIwMyw3ICsyMDUsNyBAQCB2b2lkIEN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2ZUhl
YWRlcihjb25zdCBTdHJpbmcmIGhlYWRlcikKICAgICAgICAgVU5VU0VEX1BBUkFNKGVycik7CiAK
ICAgICAgICAgaWYgKGh0dHBDb2RlID49IDIwMCAmJiBodHRwQ29kZSA8IDMwMCkgewotICAgICAg
ICAgICAgVVJMIHVybCA9IEN1cmxVdGlsczo6Z2V0RWZmZWN0aXZlVVJMKG1fY3VybEhhbmRsZSk7
CisgICAgICAgICAgICBVUkwgdXJsID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEVmZmVj
dGl2ZVVSTChtX2N1cmxIYW5kbGUpOwogICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhp
cywgdXJsID0gdXJsLmlzb2xhdGVkQ29weSgpLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyldIHsKICAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldFVSTCh1cmwpOwogICAgICAgICAg
ICAgICAgIG1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlw
ZShtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUp
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bERvd25sb2FkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmgKaW5kZXggMzEyZTQ3MDAyNzYuLmY5MDMwNmM2ZjA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCkBAIC0zNiw3
ICszNiw3IEBACiAjaW5jbHVkZSA8d2luc29jazIuaD4KICNlbmRpZgogCi0jaW5jbHVkZSAiQ3Vy
bE1hbmFnZXIuaCIKKyNpbmNsdWRlICJDdXJsSm9iTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybEpvYk1hbmFnZXIuY3BwCnNpbWlsYXJpdHkgaW5kZXggNjUlCnJlbmFtZSBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5jcHAKcmVuYW1lIHRv
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdlci5jcHAK
aW5kZXggMDU5ZmZlMjY4NzcuLjNkMDBlZTM3ODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdlci5jcHAKQEAgLTI3LDcgKzI3
LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmIFVTRShDVVJMKQotI2luY2x1ZGUgIkN1
cmxNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ3VybEpvYk1hbmFnZXIuaCIKKworI2luY2x1ZGUgIkN1
cmxDb250ZXh0LmgiCiAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTM2LDM3ICszOCwxOCBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDdXJsU2hhcmVkUmVzb3VyY2Vz
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBsb2NrKENVUkwqLCBjdXJsX2xvY2tfZGF0YSwg
Y3VybF9sb2NrX2FjY2Vzcywgdm9pZCopOwotICAgIHN0YXRpYyB2b2lkIHVubG9jayhDVVJMKiwg
Y3VybF9sb2NrX2RhdGEsIHZvaWQqKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgTG9jayogbXV0
ZXhGb3IoY3VybF9sb2NrX2RhdGEpOwotfTsKLQotLy8gQ3VybERvd25sb2FkTWFuYWdlciAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLUN1cmxNYW5hZ2VyOjpDdXJsTWFuYWdlcigpCitDdXJsSm9iTWFuYWdlcjo6Q3Vy
bEpvYk1hbmFnZXIoKQogewotICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsK
LSAgICBtX2N1cmxNdWx0aUhhbmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOwotICAgIG1fY3VybFNo
YXJlSGFuZGxlID0gY3VybF9zaGFyZV9pbml0KCk7Ci0gICAgY3VybF9zaGFyZV9zZXRvcHQobV9j
dXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9TSEFSRSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFKTsK
LSAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX1NIQVJF
LCBDVVJMX0xPQ0tfREFUQV9ETlMpOwotICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJl
SGFuZGxlLCBDVVJMU0hPUFRfTE9DS0ZVTkMsIEN1cmxTaGFyZWRSZXNvdXJjZXM6OmxvY2spOwot
ICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfVU5MT0NL
RlVOQywgQ3VybFNoYXJlZFJlc291cmNlczo6dW5sb2NrKTsKKyAgICBtX2N1cmxNdWx0aUhhbmRs
ZSA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5jcmVhdGVNdWx0aUhhbmRsZSgpOwogfQogCi1D
dXJsTWFuYWdlcjo6fkN1cmxNYW5hZ2VyKCkKK0N1cmxKb2JNYW5hZ2VyOjp+Q3VybEpvYk1hbmFn
ZXIoKQogewogICAgIHN0b3BUaHJlYWQoKTsKICAgICBjdXJsX211bHRpX2NsZWFudXAobV9jdXJs
TXVsdGlIYW5kbGUpOwotICAgIGN1cmxfc2hhcmVfY2xlYW51cChtX2N1cmxTaGFyZUhhbmRsZSk7
Ci0gICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOwogfQogCi1ib29sIEN1cmxNYW5hZ2VyOjphZGQo
Q1VSTCogY3VybEhhbmRsZSkKK2Jvb2wgQ3VybEpvYk1hbmFnZXI6OmFkZChDVVJMKiBjdXJsSGFu
ZGxlKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKQEAgLTgwLDcgKzYzLDcgQEAg
Ym9vbCBDdXJsTWFuYWdlcjo6YWRkKENVUkwqIGN1cmxIYW5kbGUpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgQ3VybE1hbmFnZXI6OnJlbW92ZShDVVJMKiBjdXJsSGFuZGxlKQorYm9vbCBD
dXJsSm9iTWFuYWdlcjo6cmVtb3ZlKENVUkwqIGN1cmxIYW5kbGUpCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9tdXRleCk7CiAKQEAgLTg5LDE5ICs3MiwxOSBAQCBib29sIEN1cmxNYW5hZ2Vy
OjpyZW1vdmUoQ1VSTCogY3VybEhhbmRsZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IEN1
cmxNYW5hZ2VyOjpnZXRBY3RpdmVDb3VudCgpIGNvbnN0CitpbnQgQ3VybEpvYk1hbmFnZXI6Omdl
dEFjdGl2ZUNvdW50KCkgY29uc3QKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsK
ICAgICByZXR1cm4gbV9hY3RpdmVIYW5kbGVMaXN0LnNpemUoKTsKIH0KIAotaW50IEN1cmxNYW5h
Z2VyOjpnZXRQZW5kaW5nQ291bnQoKSBjb25zdAoraW50IEN1cmxKb2JNYW5hZ2VyOjpnZXRQZW5k
aW5nQ291bnQoKSBjb25zdAogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOwogICAg
IHJldHVybiBtX3BlbmRpbmdIYW5kbGVMaXN0LnNpemUoKTsKIH0KIAotdm9pZCBDdXJsTWFuYWdl
cjo6c3RhcnRUaHJlYWRJZk5lZWRlZCgpCit2b2lkIEN1cmxKb2JNYW5hZ2VyOjpzdGFydFRocmVh
ZElmTmVlZGVkKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0xMTUsMTAg
Kzk4LDggQEAgdm9pZCBDdXJsTWFuYWdlcjo6c3RhcnRUaHJlYWRJZk5lZWRlZCgpCiAgICAgfQog
fQogCi12b2lkIEN1cmxNYW5hZ2VyOjpzdG9wVGhyZWFkKCkKK3ZvaWQgQ3VybEpvYk1hbmFnZXI6
OnN0b3BUaHJlYWQoKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KICAgICBzZXRS
dW5UaHJlYWQoZmFsc2UpOwogCiAgICAgaWYgKG1fdGhyZWFkKSB7CkBAIC0xMjcsMTMgKzEwOCwx
MyBAQCB2b2lkIEN1cmxNYW5hZ2VyOjpzdG9wVGhyZWFkKCkKICAgICB9CiB9CiAKLXZvaWQgQ3Vy
bE1hbmFnZXI6OnN0b3BUaHJlYWRJZklkbGUoKQordm9pZCBDdXJsSm9iTWFuYWdlcjo6c3RvcFRo
cmVhZElmSWRsZSgpCiB7CiAgICAgaWYgKCFnZXRBY3RpdmVDb3VudCgpICYmICFnZXRQZW5kaW5n
Q291bnQoKSkKICAgICAgICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKIH0KIAotdm9pZCBDdXJsTWFu
YWdlcjo6dXBkYXRlSGFuZGxlTGlzdCgpCit2b2lkIEN1cmxKb2JNYW5hZ2VyOjp1cGRhdGVIYW5k
bGVMaXN0KCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKIApAQCAtMTUyLDcg
KzEzMyw3IEBAIHZvaWQgQ3VybE1hbmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QoKQogICAgIH0KIH0K
IAotYm9vbCBDdXJsTWFuYWdlcjo6YWRkVG9DdXJsKENVUkwqIGN1cmxIYW5kbGUpCitib29sIEN1
cmxKb2JNYW5hZ2VyOjphZGRUb0N1cmwoQ1VSTCogY3VybEhhbmRsZSkKIHsKICAgICBDVVJMTWNv
ZGUgcmV0dmFsID0gY3VybF9tdWx0aV9hZGRfaGFuZGxlKG1fY3VybE11bHRpSGFuZGxlLCBjdXJs
SGFuZGxlKTsKICAgICBpZiAocmV0dmFsID09IENVUkxNX09LKSB7CkBAIC0xNjIsNyArMTQzLDcg
QEAgYm9vbCBDdXJsTWFuYWdlcjo6YWRkVG9DdXJsKENVUkwqIGN1cmxIYW5kbGUpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIEN1cmxNYW5hZ2VyOjpyZW1vdmVGcm9tQ3VybChDVVJMKiBj
dXJsSGFuZGxlKQorYm9vbCBDdXJsSm9iTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwoQ1VSTCogY3Vy
bEhhbmRsZSkKIHsKICAgICBpbnQgaGFuZGxlUG9zID0gbV9hY3RpdmVIYW5kbGVMaXN0LmZpbmQo
Y3VybEhhbmRsZSk7CiAKQEAgLTE3OCw3ICsxNTksNyBAQCBib29sIEN1cmxNYW5hZ2VyOjpyZW1v
dmVGcm9tQ3VybChDVVJMKiBjdXJsSGFuZGxlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBDdXJsTWFuYWdlcjo6d29ya2VyVGhyZWFkKCkKK3ZvaWQgQ3VybEpvYk1hbmFnZXI6Ondvcmtl
clRocmVhZCgpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAgLTIzNiw1MyAr
MjE3LDYgQEAgdm9pZCBDdXJsTWFuYWdlcjo6d29ya2VyVGhyZWFkKCkKICAgICB9CiB9CiAKLS8v
IENVUkwgVXRpbGl0aWVzCi0KLVVSTCBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChDVVJMKiBo
YW5kbGUpCi17Ci0gICAgY29uc3QgY2hhciogdXJsOwotICAgIENVUkxjb2RlIGVyciA9IGN1cmxf
ZWFzeV9nZXRpbmZvKGhhbmRsZSwgQ1VSTElORk9fRUZGRUNUSVZFX1VSTCwgJnVybCk7Ci0gICAg
aWYgKENVUkxFX09LICE9IGVycikKLSAgICAgICAgcmV0dXJuIFVSTCgpOwotICAgIHJldHVybiBV
UkwoVVJMKCksIHVybCk7Ci19Ci0KLS8vIFNoYXJlZCBSZXNvdXJjZSBtYW5hZ2VtZW50ID09PT09
PT09PT09PT09PT09PT09PT09Ci0KLUxvY2sqIEN1cmxTaGFyZWRSZXNvdXJjZXM6Om11dGV4Rm9y
KGN1cmxfbG9ja19kYXRhIGRhdGEpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xP
Q0FMKExvY2ssIGNvb2tpZU11dGV4LCAoKSk7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElD
X0xPQ0FMKExvY2ssIGRuc011dGV4LCAoKSk7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElD
X0xPQ0FMKExvY2ssIHNoYXJlTXV0ZXgsICgpKTsKLQotICAgIHN3aXRjaCAoZGF0YSkgewotICAg
IGNhc2UgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFOgotICAgICAgICByZXR1cm4gJmNvb2tpZU11dGV4
OwotICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfRE5TOgotICAgICAgICByZXR1cm4gJmRuc011dGV4
OwotICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfU0hBUkU6Ci0gICAgICAgIHJldHVybiAmc2hhcmVN
dXRleDsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfQotCi0vLyBsaWJjdXJsIGRvZXMgbm90IGltcGxl
bWVudCBpdHMgb3duIHRocmVhZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4KLS8vIHRoZXNl
IHR3byBmdW5jdGlvbnMgcHJvdmlkZSBtdXRleGVzIGZvciBjb29raWVzLCBhbmQgZm9yIHRoZSBn
bG9iYWwgRE5TCi0vLyBjYWNoZS4KLXZvaWQgQ3VybFNoYXJlZFJlc291cmNlczo6bG9jayhDVVJM
KiAvKiBoYW5kbGUgKi8sIGN1cmxfbG9ja19kYXRhIGRhdGEsIGN1cmxfbG9ja19hY2Nlc3MgLyog
YWNjZXNzICovLCB2b2lkKiAvKiB1c2VyUHRyICovKQotewotICAgIGlmIChMb2NrKiBtdXRleCA9
IEN1cmxTaGFyZWRSZXNvdXJjZXM6Om11dGV4Rm9yKGRhdGEpKQotICAgICAgICBtdXRleC0+bG9j
aygpOwotfQotCi12b2lkIEN1cmxTaGFyZWRSZXNvdXJjZXM6OnVubG9jayhDVVJMKiAvKiBoYW5k
bGUgKi8sIGN1cmxfbG9ja19kYXRhIGRhdGEsIHZvaWQqIC8qIHVzZXJQdHIgKi8pCi17Ci0gICAg
aWYgKExvY2sqIG11dGV4ID0gQ3VybFNoYXJlZFJlc291cmNlczo6bXV0ZXhGb3IoZGF0YSkpCi0g
ICAgICAgIG11dGV4LT51bmxvY2soKTsKLX0KLQogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmgKc2ltaWxhcml0
eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxNYW5hZ2VyLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsSm9iTWFuYWdlci5oCmluZGV4IDU0ODJlYzE2ZWZmLi44MjliNDZkYWQxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5h
Z2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JN
YW5hZ2VyLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFBM
QVRGT1JNKFdJTikKICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBAIC0zNSw3ICszNiw2IEBACiAjZW5k
aWYKIAogI2luY2x1ZGUgPGN1cmwvY3VybC5oPgotI2luY2x1ZGUgIlVSTC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDIwICs0NiwyMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBD
dXJsSm9iQWN0aW9uIGhhbmRsZUN1cmxNc2coQ1VSTE1zZyopID0gMDsKIH07CiAKLWNsYXNzIEN1
cmxNYW5hZ2VyIHsKK2NsYXNzIEN1cmxKb2JNYW5hZ2VyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
Q3VybE1hbmFnZXImIHNpbmdsZXRvbigpCisgICAgc3RhdGljIEN1cmxKb2JNYW5hZ2VyJiBzaW5n
bGV0b24oKQogICAgIHsKICAgICAgICAgLy8gU2luY2UgaXQncyBhIHN0YXRpYyB2YXJpYWJsZSwg
aWYgdGhlIGNsYXNzIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCwKICAgICAgICAgLy8gSXQgd29u
J3QgYmUgY3JlYXRlZCBhZ2Fpbi4KICAgICAgICAgLy8gQW5kIGl0ICoqaXMqKiB0aHJlYWQtc2Fm
ZSBpbiBDKysxMS4KIAotICAgICAgICBzdGF0aWMgQ3VybE1hbmFnZXIgc2hhcmVkOworICAgICAg
ICBzdGF0aWMgQ3VybEpvYk1hbmFnZXIgc2hhcmVkOwogICAgICAgICByZXR1cm4gc2hhcmVkOwog
ICAgIH0KIAotICAgIEN1cmxNYW5hZ2VyKCk7Ci0gICAgdmlydHVhbCB+Q3VybE1hbmFnZXIoKTsK
KyAgICBDdXJsSm9iTWFuYWdlcigpOworICAgIHZpcnR1YWwgfkN1cmxKb2JNYW5hZ2VyKCk7CiAK
ICAgICBib29sIGFkZChDVVJMKiBjdXJsSGFuZGxlKTsKICAgICBib29sIHJlbW92ZShDVVJMKiBj
dXJsSGFuZGxlKTsKQEAgLTY3LDggKzY3LDYgQEAgcHVibGljOgogICAgIGludCBnZXRBY3RpdmVD
b3VudCgpIGNvbnN0OwogICAgIGludCBnZXRQZW5kaW5nQ291bnQoKSBjb25zdDsKIAotICAgIENV
UkxTSCogZ2V0Q3VybFNoYXJlSGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJsU2hhcmVIYW5k
bGU7IH0KLQogcHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0VGhyZWFkSWZOZWVkZWQoKTsKICAgICB2
b2lkIHN0b3BUaHJlYWQoKTsKQEAgLTk0LDE0ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJs
ZSBMb2NrIG1fbXV0ZXg7CiAgICAgYm9vbCBtX3J1blRocmVhZCB7IGZhbHNlIH07CiAKLSAgICBD
VVJMU0gqIG1fY3VybFNoYXJlSGFuZGxlIHsgbnVsbHB0ciB9OwotCiAgICAgZnJpZW5kIGNsYXNz
IEN1cmxKb2I7CiB9OwogCi1jbGFzcyBDdXJsVXRpbHMgewotcHVibGljOgotICAgIHN0YXRpYyBV
UkwgZ2V0RWZmZWN0aXZlVVJMKENVUkwqIGhhbmRsZSk7Ci19OwotCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuY3BwCmluZGV4IDIwYTkzNGE5OWI2Li4yZGVkNjQ0MjEzNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlTWFuYWdlci5jcHAKQEAgLTQyLDcgKzQyLDcgQEAKIAogI2luY2x1ZGUgIkNyZWRlbnRp
YWxTdG9yYWdlLmgiCiAjaW5jbHVkZSAiQ3VybENhY2hlTWFuYWdlci5oIgotI2luY2x1ZGUgIkN1
cmxNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKICNpbmNsdWRlICJIVFRQSGVh
ZGVyTmFtZXMuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKQEAgLTYwLDkgKzYwLDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdW
aWV3Lmg+CiAKICNpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgIldlYkNvcmVCdW5kbGVXaW4uaCIK
LSNpbmNsdWRlIDxzaGxvYmouaD4KLSNpbmNsdWRlIDxzaGx3YXBpLmg+CiAjZWxzZQogI2luY2x1
ZGUgPHN5cy9wYXJhbS5oPgogI2RlZmluZSBNQVhfUEFUSCBNQVhQQVRITEVOCkBAIC03MywxMyAr
NzAsOSBAQAogI2lmIEVOQUJMRShXRUJfVElNSU5HKQogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2VuZGlmCi0jaWYgVVNFKENGKQotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNl
bmRpZgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODgsNjEgKzgxLDYgQEAgc3RhdGljIGNvbnN0IFNl
Y29uZHMgcG9sbFRpbWUgeyA1MF9tcyB9OwogY29uc3QgaW50IG1heFJ1bm5pbmdKb2JzID0gMTI4
OwogY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21haW5DdXJsID0gIkN1cmxFcnJvckRvbWFpbiI7
CiAKLXN0YXRpYyBjb25zdCBib29sIGlnbm9yZVNTTEVycm9ycyA9IGdldGVudigiV0VCS0lUX0lH
Tk9SRV9TU0xfRVJST1JTIik7Ci0KLXN0YXRpYyBDU3RyaW5nIGNlcnRpZmljYXRlUGF0aCgpCi17
Ci0gICAgY2hhciogZW52UGF0aCA9IGdldGVudigiQ1VSTF9DQV9CVU5ETEVfUEFUSCIpOwotICAg
IGlmIChlbnZQYXRoKQotICAgICAgICByZXR1cm4gZW52UGF0aDsKLQotI2lmIFVTRShDRikKLSAg
ICBDRkJ1bmRsZVJlZiB3ZWJLaXRCdW5kbGVSZWYgPSB3ZWJLaXRCdW5kbGUoKTsKLSAgICBpZiAo
d2ViS2l0QnVuZGxlUmVmKSB7Ci0gICAgICAgIFJldGFpblB0cjxDRlVSTFJlZj4gY2VydFVSTFJl
ZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwod2ViS2l0QnVuZGxlUmVmLCBDRlNU
UigiY2FjZXJ0IiksIENGU1RSKCJwZW0iKSwgQ0ZTVFIoImNlcnRpZmljYXRlcyIpKSk7Ci0gICAg
ICAgIGlmIChjZXJ0VVJMUmVmKSB7Ci0gICAgICAgICAgICBjaGFyIHBhdGhbTUFYX1BBVEhdOwot
ICAgICAgICAgICAgQ0ZVUkxHZXRGaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY2VydFVSTFJlZi5n
ZXQoKSwgZmFsc2UsIHJlaW50ZXJwcmV0X2Nhc3Q8VUludDgqPihwYXRoKSwgTUFYX1BBVEgpOwot
ICAgICAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAg
IHJldHVybiBDU3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBjaGFyKiBjb29raWVKYXJQYXRoKCkKLXsK
LSAgICBjaGFyKiBjb29raWVKYXJQYXRoID0gZ2V0ZW52KCJDVVJMX0NPT0tJRV9KQVJfUEFUSCIp
OwotICAgIGlmIChjb29raWVKYXJQYXRoKQotICAgICAgICByZXR1cm4gZmFzdFN0ckR1cChjb29r
aWVKYXJQYXRoKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgY2hhciBleGVjdXRhYmxlUGF0aFtN
QVhfUEFUSF07Ci0gICAgY2hhciBhcHBEYXRhRGlyZWN0b3J5W01BWF9QQVRIXTsKLSAgICBjaGFy
IGNvb2tpZUphckZ1bGxQYXRoW01BWF9QQVRIXTsKLSAgICBjaGFyIGNvb2tpZUphckRpcmVjdG9y
eVtNQVhfUEFUSF07Ci0KLSAgICBpZiAoRkFJTEVEKDo6U0hHZXRGb2xkZXJQYXRoQSgwLCBDU0lE
TF9MT0NBTF9BUFBEQVRBIHwgQ1NJRExfRkxBR19DUkVBVEUsIDAsIDAsIGFwcERhdGFEaXJlY3Rv
cnkpKQotICAgICAgICB8fCBGQUlMRUQoOjpHZXRNb2R1bGVGaWxlTmFtZUEoMCwgZXhlY3V0YWJs
ZVBhdGgsIE1BWF9QQVRIKSkpCi0gICAgICAgIHJldHVybiBmYXN0U3RyRHVwKCJjb29raWVzLmRh
dCIpOwotCi0gICAgOjpQYXRoUmVtb3ZlRXh0ZW5zaW9uQShleGVjdXRhYmxlUGF0aCk7Ci0gICAg
TFBTVFIgZXhlY3V0YWJsZU5hbWUgPSA6OlBhdGhGaW5kRmlsZU5hbWVBKGV4ZWN1dGFibGVQYXRo
KTsKLSAgICBzcHJpbnRmX3MoY29va2llSmFyRGlyZWN0b3J5LCBNQVhfUEFUSCwgIiVzLyVzIiwg
YXBwRGF0YURpcmVjdG9yeSwgZXhlY3V0YWJsZU5hbWUpOwotICAgIHNwcmludGZfcyhjb29raWVK
YXJGdWxsUGF0aCwgTUFYX1BBVEgsICIlcy9jb29raWVzLmRhdCIsIGNvb2tpZUphckRpcmVjdG9y
eSk7Ci0KLSAgICBpZiAoOjpTSENyZWF0ZURpcmVjdG9yeUV4QSgwLCBjb29raWVKYXJEaXJlY3Rv
cnksIDApICE9IEVSUk9SX1NVQ0NFU1MKLSAgICAgICAgJiYgOjpHZXRMYXN0RXJyb3IoKSAhPSBF
UlJPUl9GSUxFX0VYSVNUUwotICAgICAgICAmJiA6OkdldExhc3RFcnJvcigpICE9IEVSUk9SX0FM
UkVBRFlfRVhJU1RTKQotICAgICAgICByZXR1cm4gZmFzdFN0ckR1cCgiY29va2llcy5kYXQiKTsK
LQotICAgIHJldHVybiBmYXN0U3RyRHVwKGNvb2tpZUphckZ1bGxQYXRoKTsKLSNlbHNlCi0gICAg
cmV0dXJuIGZhc3RTdHJEdXAoImNvb2tpZXMuZGF0Iik7Ci0jZW5kaWYKLX0KLQogI2lmIEVOQUJM
RShXRUJfVElNSU5HKQogc3RhdGljIHZvaWQgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25z
KFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQpCiB7CkBAIC0xOTIsNDcgKzEzMCwxNCBAQCBpbmxp
bmUgc3RhdGljIGJvb2wgaXNIdHRwTm90TW9kaWZpZWQoaW50IHN0YXR1c0NvZGUpCiAKIFJlc291
cmNlSGFuZGxlTWFuYWdlcjo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCkKICAgICA6IG1fZG93bmxv
YWRUaW1lcigqdGhpcywgJlJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRUaW1lckNhbGxi
YWNrKQotICAgICwgbV9jb29raWVKYXJGaWxlTmFtZShjb29raWVKYXJQYXRoKCkpCi0gICAgLCBt
X2NlcnRpZmljYXRlUGF0aChjZXJ0aWZpY2F0ZVBhdGgoKSkKICAgICAsIG1fcnVubmluZ0pvYnMo
MCkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2xvZ0ZpbGUobnVsbHB0cikKLSNlbmRpZgogewot
ICAgIENVUkxTSCogaCA9IEN1cmxNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRDdXJsU2hhcmVIYW5k
bGUoKTsKLSAgICBtX2N1cmxTaGFyZUhhbmRsZSA9IGg7Ci0gICAgbV9jdXJsTXVsdGlIYW5kbGUg
PSBjdXJsX211bHRpX2luaXQoKTsKLQotCi0gICAgaW5pdENvb2tpZVNlc3Npb24oKTsKLQotI2lm
bmRlZiBOREVCVUcKLSAgICBjaGFyKiBsb2dGaWxlID0gZ2V0ZW52KCJDVVJMX0xPR19GSUxFIik7
Ci0gICAgaWYgKGxvZ0ZpbGUpCi0gICAgICAgIG1fbG9nRmlsZSA9IGZvcGVuKGxvZ0ZpbGUsICJh
Iik7Ci0jZW5kaWYKKyAgICBtX2N1cmxNdWx0aUhhbmRsZSA9IEN1cmxDb250ZXh0OjpzaW5nbGV0
b24oKS5jcmVhdGVNdWx0aUhhbmRsZSgpOwogfQogCiBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6On5S
ZXNvdXJjZUhhbmRsZU1hbmFnZXIoKQogewogICAgIGN1cmxfbXVsdGlfY2xlYW51cChtX2N1cmxN
dWx0aUhhbmRsZSk7Ci0gICAgaWYgKG1fY29va2llSmFyRmlsZU5hbWUpCi0gICAgICAgIGZhc3RG
cmVlKG1fY29va2llSmFyRmlsZU5hbWUpOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIGlmIChtX2xv
Z0ZpbGUpCi0gICAgICAgIGZjbG9zZShtX2xvZ0ZpbGUpOwotI2VuZGlmCi19Ci0KLXZvaWQgUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyOjpzZXRDb29raWVKYXJGaWxlTmFtZShjb25zdCBjaGFyKiBjb29r
aWVKYXJGaWxlTmFtZSkKLXsKLSAgICBtX2Nvb2tpZUphckZpbGVOYW1lID0gZmFzdFN0ckR1cChj
b29raWVKYXJGaWxlTmFtZSk7Ci19Ci0KLWNvbnN0IGNoYXIqIFJlc291cmNlSGFuZGxlTWFuYWdl
cjo6Z2V0Q29va2llSmFyRmlsZU5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX2Nvb2tpZUph
ckZpbGVOYW1lOwogfQogCiBSZXNvdXJjZUhhbmRsZU1hbmFnZXIqIFJlc291cmNlSGFuZGxlTWFu
YWdlcjo6c2hhcmVkSW5zdGFuY2UoKQpAQCAtMjUwLDcgKzE1NSw3IEBAIHN0YXRpYyB2b2lkIGhh
bmRsZUxvY2FsUmVjZWl2ZVJlc3BvbnNlIChDVVJMKiBoYW5kbGUsIFJlc291cmNlSGFuZGxlKiBq
b2IsIFJlc291CiAgICAgLy8gd2hpY2ggbWVhbnMgdGhlIFJlc291cmNlTG9hZGVyJ3MgcmVzcG9u
c2UgZG9lcyBub3QgY29udGFpbiB0aGUgVVJMLgogICAgIC8vIFJ1biB0aGUgY29kZSBoZXJlIGZv
ciBsb2NhbCBmaWxlcyB0byByZXNvbHZlIHRoZSBpc3N1ZS4KICAgICAvLyBUT0RPOiBTZWUgaWYg
dGhlcmUgaXMgYSBiZXR0ZXIgYXBwcm9hY2ggZm9yIGhhbmRsaW5nIHRoaXMuCi0gICAgVVJMIHVy
bCA9IEN1cmxVdGlsczo6Z2V0RWZmZWN0aXZlVVJMKGhhbmRsZSk7CisgICAgVVJMIHVybCA9IEN1
cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRFZmZlY3RpdmVVUkwoaGFuZGxlKTsKICAgICBBU1NF
UlQodXJsLmlzVmFsaWQoKSk7CiAgICAgZC0+bV9yZXNwb25zZS5zZXRVUkwodXJsKTsKICAgICAg
aWYgKGQtPmNsaWVudCgpKQpAQCAtMzYxLDcgKzI2Niw3IEBAIHN0YXRpYyBib29sIGdldFByb3Rl
Y3Rpb25TcGFjZShDVVJMKiBoLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUHJv
dGVjCiAgICAgaWYgKGVyciAhPSBDVVJMRV9PSykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgVVJMIHVybCA9IEN1cmxVdGlsczo6Z2V0RWZmZWN0aXZlVVJMKGgpOworICAgIFVSTCB1cmwg
PSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0RWZmZWN0aXZlVVJMKGgpOwogICAgIGlmICgh
dXJsLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00NTAsNyArMzU1LDcg
QEAgc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBz
aXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCiAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGgsIENV
UkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RPV05MT0FELCAmY29udGVudExlbmd0aCk7CiAgICAgICAg
IGQtPm1fcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKHN0YXRpY19jYXN0PGxvbmcg
bG9uZyBpbnQ+KGNvbnRlbnRMZW5ndGgpKTsKIAotICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVS
TChDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChoKSk7CisgICAgICAgIGQtPm1fcmVzcG9uc2Uu
c2V0VVJMKEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRFZmZlY3RpdmVVUkwoaCkpOwogCiAg
ICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cENvZGUpOwogICAgICAg
ICBkLT5tX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUo
ZC0+bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBl
KSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CkBAIC02NTcsNyArNTYyLDcgQEAgdm9pZCBS
ZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjaygpCiAgICAgICAgICAg
ICAgICAgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRGaW5pc2hMb2FkaW5nKCpq
b2IpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVVJMIHVy
bCA9IEN1cmxVdGlsczo6Z2V0RWZmZWN0aXZlVVJMKGQtPm1faGFuZGxlKTsKKyAgICAgICAgICAg
IFVSTCB1cmwgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0RWZmZWN0aXZlVVJMKGQtPm1f
aGFuZGxlKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkN1
cmwgRVJST1IgZm9yIHVybD0nJXMnLCBlcnJvcjogJyVzJ1xuIiwgdXJsLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCksIGN1cmxfZWFzeV9zdHJlcnJvcihtc2ctPmRhdGEucmVzdWx0KSk7CiAjZW5kaWYK
QEAgLTY3OCwyNSArNTgzLDYgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2Fk
VGltZXJDYWxsYmFjaygpCiAgICAgICAgIG1fZG93bmxvYWRUaW1lci5zdGFydE9uZVNob3QocG9s
bFRpbWUpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2V0UHJveHlJbmZvKGNv
bnN0IFN0cmluZyYgaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbG9uZyBwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQcm94eVR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiB1c2VybmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKLXsKLSAgICBtX3Byb3h5
VHlwZSA9IHR5cGU7Ci0KLSAgICBpZiAoIWhvc3QubGVuZ3RoKCkpIHsKLSAgICAgICAgbV9wcm94
eSA9IGVtcHR5U3RyaW5nKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU3RyaW5nIHVzZXJQYXNz
OwotICAgICAgICBpZiAodXNlcm5hbWUubGVuZ3RoKCkgfHwgcGFzc3dvcmQubGVuZ3RoKCkpCi0g
ICAgICAgICAgICB1c2VyUGFzcyA9IHVzZXJuYW1lICsgIjoiICsgcGFzc3dvcmQgKyAiQCI7Ci0K
LSAgICAgICAgbV9wcm94eSA9IFN0cmluZygiaHR0cDovLyIpICsgdXNlclBhc3MgKyBob3N0ICsg
IjoiICsgU3RyaW5nOjpudW1iZXIocG9ydCk7Ci0gICAgfQotfQotCiB2b2lkIFJlc291cmNlSGFu
ZGxlTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwoUmVzb3VyY2VIYW5kbGUqIGpvYikKIHsKICAgICBS
ZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwpAQCAtMTAxOSw2
ICs5MDUsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6YXBwbHlBdXRoZW50aWNhdGlv
blRvUmVxdWVzdChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLAogCiB2b2lkIFJlc291cmNlSGFuZGxl
TWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9iKQogeworICAgIEN1
cmxDb250ZXh0JiBjb250ZXh0ID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpOworCiAgICAgc3Rh
dGljIGNvbnN0IGludCBhbGxvd2VkUHJvdG9jb2xzID0gQ1VSTFBST1RPX0ZJTEUgfCBDVVJMUFJP
VE9fRlRQIHwgQ1VSTFBST1RPX0ZUUFMgfCBDVVJMUFJPVE9fSFRUUCB8IENVUkxQUk9UT19IVFRQ
UzsKICAgICBVUkwgdXJsID0gam9iLT5maXJzdFJlcXVlc3QoKS51cmwoKTsKIApAQCAtMTA0OCwx
MCArOTM2LDEwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjppbml0aWFsaXplSGFuZGxl
KFJlc291cmNlSGFuZGxlKiBqb2IpCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZXJyb3IsIGVycm9y
ID09IENVUkxFX09LKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwotICAgIGlmIChnZXRlbnYoIkRF
QlVHX0NVUkwiKSkKKyAgICBpZiAoY29udGV4dC5pc1ZlcmJvc2UoKSkKICAgICAgICAgY3VybF9l
YXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9WRVJCT1NFLCAxKTsKLSAgICBpZiAobV9s
b2dGaWxlKQotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1NU
REVSUiwgbV9sb2dGaWxlKTsKKyAgICBpZiAoY29udGV4dC5nZXRMb2dGaWxlKCkpCisgICAgICAg
IGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfU1RERVJSLCBjb250ZXh0Lmdl
dExvZ0ZpbGUoKSk7CiAjZW5kaWYKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX1NTTF9WRVJJRllQRUVSLCAxTCk7CiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hh
bmRsZSwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMkwpOwpAQCAtMTA2NSwxOSArOTUzLDIwIEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjppbml0aWFsaXplSGFuZGxlKFJlc291cmNlSGFu
ZGxlKiBqb2IpCiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9GT0xM
T1dMT0NBVElPTiwgMSk7CiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9Q
VF9NQVhSRURJUlMsIDEwKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJM
T1BUX0hUVFBBVVRILCBDVVJMQVVUSF9BTlkpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9o
YW5kbGUsIENVUkxPUFRfU0hBUkUsIG1fY3VybFNoYXJlSGFuZGxlKTsKKyAgICBjdXJsX2Vhc3lf
c2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1NIQVJFLCBDdXJsQ29udGV4dDo6c2luZ2xldG9u
KCkuZ2V0Q3VybFNoYXJlSGFuZGxlKCkpOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5k
bGUsIENVUkxPUFRfRE5TX0NBQ0hFX1RJTUVPVVQsIDYwICogNSk7IC8vIDUgbWludXRlcwogICAg
IGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUFJPVE9DT0xTLCBhbGxvd2Vk
UHJvdG9jb2xzKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1JF
RElSX1BST1RPQ09MUywgYWxsb3dlZFByb3RvY29scyk7CiAgICAgc2V0U1NMQ2xpZW50Q2VydGlm
aWNhdGUoam9iKTsKIAotICAgIGlmIChpZ25vcmVTU0xFcnJvcnMpCisgICAgaWYgKGNvbnRleHQu
c2hvdWxkSWdub3JlU1NMRXJyb3JzKCkpCiAgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9o
YW5kbGUsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIGZhbHNlKTsKICAgICBlbHNlCiAgICAgICAg
IHNldFNTTFZlcmlmeU9wdGlvbnMoam9iKTsKIAotICAgIGlmICghbV9jZXJ0aWZpY2F0ZVBhdGgu
aXNOdWxsKCkpCi0gICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9D
QUlORk8sIG1fY2VydGlmaWNhdGVQYXRoLmRhdGEoKSk7CisgICAgY29uc3QgY2hhciogY2VydGlm
aWNhdGUgPSBjb250ZXh0LmdldENlcnRpZmljYXRlUGF0aCgpOworICAgIGlmIChjZXJ0aWZpY2F0
ZSkKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9DQUlORk8s
IGNlcnRpZmljYXRlKTsKIAogICAgIC8vIGVuYWJsZSBnemlwIGFuZCBkZWZsYXRlIHRocm91Z2gg
QWNjZXB0LUVuY29kaW5nOgogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxP
UFRfRU5DT0RJTkcsICIiKTsKQEAgLTEwODksOCArOTc4LDkgQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZU1hbmFnZXI6OmluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGpvYikKICAgICBkLT5t
X3VybCA9IGZhc3RTdHJEdXAodXJsU3RyaW5nLmxhdGluMSgpLmRhdGEoKSk7CiAgICAgY3VybF9l
YXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9VUkwsIGQtPm1fdXJsKTsKIAotICAgIGlm
IChtX2Nvb2tpZUphckZpbGVOYW1lKQotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFu
ZGxlLCBDVVJMT1BUX0NPT0tJRUpBUiwgbV9jb29raWVKYXJGaWxlTmFtZSk7CisgICAgY29uc3Qg
Y2hhciogY29va2llSmFyID0gY29udGV4dC5nZXRDb29raWVKYXJGaWxlTmFtZSgpOworICAgIGlm
IChjb29raWVKYXIpCisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxP
UFRfQ09PS0lFSkFSLCBjb29raWVKYXIpOwogCiAgICAgc3RydWN0IGN1cmxfc2xpc3QqIGhlYWRl
cnMgPSAwOwogICAgIGlmIChqb2ItPmZpcnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKS5z
aXplKCkgPiAwKSB7CkBAIC0xMTUwLDM0ICsxMDQwLDE1IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjppbml0aWFsaXplSGFuZGxlKFJlc291cmNlSGFuZGxlKiBqb2IpCiAgICAgYXBwbHlB
dXRoZW50aWNhdGlvblRvUmVxdWVzdChqb2IsIGpvYi0+Zmlyc3RSZXF1ZXN0KCkpOwogCiAgICAg
Ly8gU2V0IHByb3h5IG9wdGlvbnMgaWYgd2UgaGF2ZSB0aGVtLgotICAgIGlmIChtX3Byb3h5Lmxl
bmd0aCgpKSB7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRf
UFJPWFksIG1fcHJveHkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQo
ZC0+bV9oYW5kbGUsIENVUkxPUFRfUFJPWFlUWVBFLCBtX3Byb3h5VHlwZSk7CisgICAgYXV0byBw
cm94eSA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRQcm94eUluZm8oKTsKKyAgICBDdXJs
UHJveHlUeXBlIHR5cGUgPSBzdGQ6OmdldDxDdXJsUHJveHlUeXBlPihwcm94eSk7CisgICAgaWYg
KHR5cGUgIT0gQ3VybFByb3h5VHlwZTo6SW52YWxpZCkgeworICAgICAgICBjb25zdCBTdHJpbmcm
IHVybCA9IHN0ZDo6Z2V0PGNvbnN0IFN0cmluZyY+KHByb3h5KTsKKyAgICAgICAgY3VybF9lYXN5
X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QUk9YWSwgdXJsLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BST1hZVFlQRSwg
dHlwZSk7CiAgICAgfQogfQogCi12b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdENvb2tp
ZVNlc3Npb24oKQotewotICAgIC8vIEN1cmwgc2F2ZXMgYm90aCBwZXJzaXN0ZW50IGNvb2tpZXMs
IGFuZCBzZXNzaW9uIGNvb2tpZXMgdG8gdGhlIGNvb2tpZSBmaWxlLgotICAgIC8vIFRoZSBzZXNz
aW9uIGNvb2tpZXMgc2hvdWxkIGJlIGRlbGV0ZWQgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IHNlc3Np
b24uCi0KLSAgICBDVVJMKiBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKLQotICAgIGlmICghY3Vy
bCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BU
X1NIQVJFLCBtX2N1cmxTaGFyZUhhbmRsZSk7Ci0KLSAgICBpZiAobV9jb29raWVKYXJGaWxlTmFt
ZSkgewotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ09PS0lFRklMRSwg
bV9jb29raWVKYXJGaWxlTmFtZSk7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VS
TE9QVF9DT09LSUVKQVIsIG1fY29va2llSmFyRmlsZU5hbWUpOwotICAgIH0KLQotICAgIGN1cmxf
ZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09LSUVTRVNTSU9OLCAxKTsKLQotICAgIGN1cmxf
ZWFzeV9jbGVhbnVwKGN1cmwpOwotfQotCiB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6Y2Fu
Y2VsKFJlc291cmNlSGFuZGxlKiBqb2IpCiB7CiAgICAgaWYgKHJlbW92ZVNjaGVkdWxlZEpvYihq
b2IpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCmluZGV4IDkyNWRiYTQwMjk4Li5mNDFiMDFmNjU3
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaApAQCAtNDYsMjcgKzQ2LDE1IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIHsKIHB1YmxpYzoKLSAg
ICBlbnVtIFByb3h5VHlwZSB7Ci0gICAgICAgIEhUVFAgPSBDVVJMUFJPWFlfSFRUUCwKLSAgICAg
ICAgU29ja3M0ID0gQ1VSTFBST1hZX1NPQ0tTNCwKLSAgICAgICAgU29ja3M0QSA9IENVUkxQUk9Y
WV9TT0NLUzRBLAotICAgICAgICBTb2NrczUgPSBDVVJMUFJPWFlfU09DS1M1LAotICAgICAgICBT
b2NrczVIb3N0bmFtZSA9IENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUUKLSAgICB9OwogICAgIHN0
YXRpYyBSZXNvdXJjZUhhbmRsZU1hbmFnZXIqIHNoYXJlZEluc3RhbmNlKCk7CiAgICAgdm9pZCBh
ZGQoUmVzb3VyY2VIYW5kbGUqKTsKICAgICB2b2lkIGNhbmNlbChSZXNvdXJjZUhhbmRsZSopOwog
Ci0gICAgdm9pZCBzZXRDb29raWVKYXJGaWxlTmFtZShjb25zdCBjaGFyKiBjb29raWVKYXJGaWxl
TmFtZSk7Ci0gICAgY29uc3QgY2hhciogZ2V0Q29va2llSmFyRmlsZU5hbWUoKSBjb25zdDsKLQog
ICAgIHZvaWQgZGlzcGF0Y2hTeW5jaHJvbm91c0pvYihSZXNvdXJjZUhhbmRsZSopOwogCiAgICAg
dm9pZCBzZXR1cFBPU1QoUmVzb3VyY2VIYW5kbGUqLCBzdHJ1Y3QgY3VybF9zbGlzdCoqKTsKICAg
ICB2b2lkIHNldHVwUFVUKFJlc291cmNlSGFuZGxlKiwgc3RydWN0IGN1cmxfc2xpc3QqKik7CiAK
LSAgICB2b2lkIHNldFByb3h5SW5mbyhjb25zdCBTdHJpbmcmIGhvc3QgPSBlbXB0eVN0cmluZygp
LCB1bnNpZ25lZCBsb25nIHBvcnQgPSAwLCBQcm94eVR5cGUgPSBIVFRQLCBjb25zdCBTdHJpbmcm
IHVzZXJuYW1lID0gZW1wdHlTdHJpbmcoKSwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCA9IGVtcHR5
U3RyaW5nKCkpOwotCiBwcml2YXRlOgogICAgIFJlc291cmNlSGFuZGxlTWFuYWdlcigpOwogICAg
IH5SZXNvdXJjZUhhbmRsZU1hbmFnZXIoKTsKQEAgLTc5LDIzICs2NywxMSBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBpbml0aWFsaXplSGFuZGxlKFJlc291cmNlSGFuZGxlKik7CiAKLSAgICB2b2lk
IGluaXRDb29raWVTZXNzaW9uKCk7Ci0KICAgICBUaW1lciBtX2Rvd25sb2FkVGltZXI7CiAgICAg
Q1VSTE0qIG1fY3VybE11bHRpSGFuZGxlOwotICAgIENVUkxTSCogbV9jdXJsU2hhcmVIYW5kbGU7
Ci0gICAgY2hhciogbV9jb29raWVKYXJGaWxlTmFtZTsKICAgICBjaGFyIG1fY3VybEVycm9yQnVm
ZmVyW0NVUkxfRVJST1JfU0laRV07CiAgICAgVmVjdG9yPFJlc291cmNlSGFuZGxlKj4gbV9yZXNv
dXJjZUhhbmRsZUxpc3Q7Ci0gICAgY29uc3QgQ1N0cmluZyBtX2NlcnRpZmljYXRlUGF0aDsKICAg
ICBpbnQgbV9ydW5uaW5nSm9iczsKLSAgICAKLSAgICBTdHJpbmcgbV9wcm94eTsKLSAgICBQcm94
eVR5cGUgbV9wcm94eVR5cGU7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgRklMRSogbV9sb2dGaWxl
OwotI2VuZGlmCiB9OwogCiB9Cg==
</data>
<flag name="review"
          id="334768"
          type_id="1"
          status="-"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314094</attachid>
            <date>2017-06-28 19:43:13 -0700</date>
            <delta_ts>2017-06-28 19:52:29 -0700</delta_ts>
            <desc>PATCH with reviewed advices</desc>
            <filename>173629-5.diff</filename>
            <type>text/plain</type>
            <size>41013</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3OTNkMzllYmY2Mi4uOGI5Y2VjNzJmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NyBAQAorMjAxNy0wNi0yOCAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFNlcGFyYXRlIGdsb2JhbCBjdXJsIHNldHRpbmdzIGZy
b20gUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIGFzIEN1cmxDb250ZXh0IGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM2MjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8u
Y21ha2U6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29va2llc0ZvclNlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2VydGlmaWNhdGVQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUphclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybENvbnRleHQ6OkN1cmxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0
Ojp+Q3VybENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OmluaXRDb29r
aWVTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpQcm94eUluZm86OnVy
bCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6c2V0UHJveHlJbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpnZXRFZmZlY3RpdmVVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybENvbnRleHQ6OmNyZWF0ZU11bHRpSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxDb250ZXh0OjptdXRleEZvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6
bG9jayk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6dW5sb2NrKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDdXJsQ29udGV4dDo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxD
b250ZXh0OjpjdXJsU2hhcmVIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6
OmdldENvb2tpZUphckZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0Ojpz
ZXRDb29raWVKYXJGaWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6Z2V0
Q2VydGlmaWNhdGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpzaG91bGRJ
Z25vcmVTU0xFcnJvcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnByb3h5SW5m
byk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6c2V0UHJveHlJbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpnZXRMb2dGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxDb250ZXh0Ojppc1ZlcmJvc2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsRG93bmxvYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjppbml0
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZDo6c3RhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybERvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25s
b2FkOjpkaWRSZWNlaXZlSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybERvd25sb2FkLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JN
YW5hZ2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsTWFuYWdlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6
Q3VybEpvYk1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6On5DdXJs
Sm9iTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6YWRkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEpvYk1hbmFnZXI6OmdldEFjdGl2ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxKb2JNYW5hZ2VyOjpnZXRQZW5kaW5nQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpv
Yk1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpv
Yk1hbmFnZXI6OnN0b3BUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6
OnN0b3BUaHJlYWRJZklkbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnVw
ZGF0ZUhhbmRsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OmFkZFRv
Q3VybCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OndvcmtlclRocmVhZCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24pOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVN
YW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKToK
KyAgICAgICAgKFdlYkNvcmU6OmdldFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFn
ZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2VydGlm
aWNhdGVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUphclBhdGgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzZXRDb29r
aWVKYXJGaWxlTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZU1hbmFnZXI6OmdldENvb2tpZUphckZpbGVOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2V0UHJveHlJbmZvKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdENvb2tpZVNlc3Npb24pOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1h
bmFnZXIuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisKIDIwMTctMDYtMjggIERldmluIFJvdXNz
byAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEluc3RydW1l
bnQgYWN0aXZlIHBpeGVsIG1lbW9yeSB1c2VkIGJ5IGNhbnZhc2VzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1XaW5DYWlyby5jbWFrZQppbmRleCA1OTc3MDU5NzdlZS4uODM3NTgyZDMwMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQpAQCAtMzMsOCArMzMsOSBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3JlZGVudGlhbFN0
b3JhZ2VDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVFbnRyeS5j
cHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5jcHAKKyAgICBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1h
bmFnZXIuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9ETlNDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9Gb3JtRGF0YVN0cmVhbUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L011bHRpcGFydEhhbmRsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAppbmRleCA2YjZlYzk5NzBiMS4uMWFkMzAx
NmU5YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
b29raWVKYXJDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ29va2llSmFyQ3VybC5jcHAKQEAgLTIyLDkgKzIyLDggQEAKICNpZiBVU0UoQ1VSTCkKIAog
I2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkN1cmxNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
Q3VybENvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlTWFuYWdlci5oIgogI2luY2x1ZGUgIlVSTC5oIgogCiAjaW5jbHVkZSA8d3Rm
L0RhdGVNYXRoLmg+CkBAIC0yNDMsMTMgKzI0MiwxNSBAQCBzdGF0aWMgU3RyaW5nIGdldE5ldHNj
YXBlQ29va2llRm9ybWF0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogCiB2
b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0
IFVSTCYsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogeworICAgIGNvbnN0
IEN1cmxDb250ZXh0JiBjb250ZXh0ID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpOworCiAgICAg
Q1VSTCogY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CiAKICAgICBpZiAoIWN1cmwpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGNvbnN0IGNoYXIqIGNvb2tpZUphckZpbGVOYW1lID0gUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpLT5nZXRDb29raWVKYXJGaWxlTmFtZSgpOwot
ICAgIENVUkxTSCogY3VybHNoID0gQ3VybE1hbmFnZXI6OnNpbmdsZXRvbigpLmdldEN1cmxTaGFy
ZUhhbmRsZSgpOworICAgIGNvbnN0IGNoYXIqIGNvb2tpZUphckZpbGVOYW1lID0gY29udGV4dC5n
ZXRDb29raWVKYXJGaWxlTmFtZSgpOworICAgIENVUkxTSCogY3VybHNoID0gY29udGV4dC5jdXJs
U2hhcmVIYW5kbGUoKTsKIAogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09L
SUVKQVIsIGNvb2tpZUphckZpbGVOYW1lKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENV
UkxPUFRfU0hBUkUsIGN1cmxzaCk7CkBAIC0yNzgsNyArMjc5LDcgQEAgc3RhdGljIFN0cmluZyBj
b29raWVzRm9yU2Vzc2lvbihjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBVUkwm
LCBjb25zdAogICAgIGlmICghY3VybCkKICAgICAgICAgcmV0dXJuIGNvb2tpZXM7CiAKLSAgICBD
VVJMU0gqIGN1cmxzaCA9IEN1cmxNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRDdXJsU2hhcmVIYW5k
bGUoKTsKKyAgICBDVVJMU0gqIGN1cmxzaCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5jdXJs
U2hhcmVIYW5kbGUoKTsKIAogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TSEFS
RSwgY3VybHNoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmVlZjg1ZGRiYjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcApAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQ1VSTCkKKyNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgorCisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgIldlYkNvcmVCdW5kbGVXaW4uaCIKKyNpbmNsdWRl
IDxzaGxvYmouaD4KKyNpbmNsdWRlIDxzaGx3YXBpLmg+CisjZW5kaWYKKworI2lmIFVTRShDRikK
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIENTdHJpbmcgY2VydGlmaWNh
dGVQYXRoKCkKK3sKKyAgICBjaGFyKiBlbnZQYXRoID0gZ2V0ZW52KCJDVVJMX0NBX0JVTkRMRV9Q
QVRIIik7CisgICAgaWYgKGVudlBhdGgpCisgICAgICAgIHJldHVybiBlbnZQYXRoOworCisjaWYg
VVNFKENGKQorICAgIENGQnVuZGxlUmVmIHdlYktpdEJ1bmRsZVJlZiA9IHdlYktpdEJ1bmRsZSgp
OworICAgIGlmICh3ZWJLaXRCdW5kbGVSZWYpIHsKKyAgICAgICAgUmV0YWluUHRyPENGVVJMUmVm
PiBjZXJ0VVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTCh3ZWJLaXRCdW5k
bGVSZWYsIENGU1RSKCJjYWNlcnQiKSwgQ0ZTVFIoInBlbSIpLCBDRlNUUigiY2VydGlmaWNhdGVz
IikpKTsKKyAgICAgICAgaWYgKGNlcnRVUkxSZWYpIHsKKyAgICAgICAgICAgIGNoYXIgcGF0aFtN
QVhfUEFUSF07CisgICAgICAgICAgICBDRlVSTEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihj
ZXJ0VVJMUmVmLmdldCgpLCBmYWxzZSwgcmVpbnRlcnByZXRfY2FzdDxVSW50OCo+KHBhdGgpLCBN
QVhfUEFUSCk7CisgICAgICAgICAgICByZXR1cm4gcGF0aDsKKyAgICAgICAgfQorICAgIH0KKyNl
bmRpZgorCisgICAgcmV0dXJuIENTdHJpbmcoKTsKK30KKworc3RhdGljIENTdHJpbmcgY29va2ll
SmFyUGF0aCgpCit7CisgICAgY2hhciogY29va2llSmFyUGF0aCA9IGdldGVudigiQ1VSTF9DT09L
SUVfSkFSX1BBVEgiKTsKKyAgICBpZiAoY29va2llSmFyUGF0aCkKKyAgICAgICAgcmV0dXJuIGNv
b2tpZUphclBhdGg7CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIGNoYXIgZXhlY3V0YWJsZVBhdGhb
TUFYX1BBVEhdOworICAgIGNoYXIgYXBwRGF0YURpcmVjdG9yeVtNQVhfUEFUSF07CisgICAgY2hh
ciBjb29raWVKYXJGdWxsUGF0aFtNQVhfUEFUSF07CisgICAgY2hhciBjb29raWVKYXJEaXJlY3Rv
cnlbTUFYX1BBVEhdOworCisgICAgaWYgKEZBSUxFRCg6OlNIR2V0Rm9sZGVyUGF0aEEoMCwgQ1NJ
RExfTE9DQUxfQVBQREFUQSB8IENTSURMX0ZMQUdfQ1JFQVRFLCAwLCAwLCBhcHBEYXRhRGlyZWN0
b3J5KSkKKyAgICAgICAgfHwgRkFJTEVEKDo6R2V0TW9kdWxlRmlsZU5hbWVBKDAsIGV4ZWN1dGFi
bGVQYXRoLCBNQVhfUEFUSCkpKQorICAgICAgICByZXR1cm4gImNvb2tpZXMuZGF0IjsKKworICAg
IDo6UGF0aFJlbW92ZUV4dGVuc2lvbkEoZXhlY3V0YWJsZVBhdGgpOworICAgIExQU1RSIGV4ZWN1
dGFibGVOYW1lID0gOjpQYXRoRmluZEZpbGVOYW1lQShleGVjdXRhYmxlUGF0aCk7CisgICAgc3By
aW50Zl9zKGNvb2tpZUphckRpcmVjdG9yeSwgTUFYX1BBVEgsICIlcy8lcyIsIGFwcERhdGFEaXJl
Y3RvcnksIGV4ZWN1dGFibGVOYW1lKTsKKyAgICBzcHJpbnRmX3MoY29va2llSmFyRnVsbFBhdGgs
IE1BWF9QQVRILCAiJXMvY29va2llcy5kYXQiLCBjb29raWVKYXJEaXJlY3RvcnkpOworCisgICAg
aWYgKDo6U0hDcmVhdGVEaXJlY3RvcnlFeEEoMCwgY29va2llSmFyRGlyZWN0b3J5LCAwKSAhPSBF
UlJPUl9TVUNDRVNTCisgICAgICAgICYmIDo6R2V0TGFzdEVycm9yKCkgIT0gRVJST1JfRklMRV9F
WElTVFMKKyAgICAgICAgJiYgOjpHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9BTFJFQURZX0VYSVNU
UykKKyAgICAgICAgcmV0dXJuICJjb29raWVzLmRhdCI7CisKKyAgICByZXR1cm4gY29va2llSmFy
RnVsbFBhdGg7CisjZWxzZQorICAgIHJldHVybiAiY29va2llcy5kYXQiOworI2VuZGlmCit9CisK
Ky8vIEN1cmxDb250ZXh0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3VybENvbnRleHQ6OkN1cmxDb250ZXh0KCkK
KyAgICA6IG1fY29va2llSmFyRmlsZU5hbWUoY29va2llSmFyUGF0aCgpKQorICAgICwgbV9jZXJ0
aWZpY2F0ZVBhdGgoY2VydGlmaWNhdGVQYXRoKCkpCit7CisgICAgY3VybF9nbG9iYWxfaW5pdChD
VVJMX0dMT0JBTF9BTEwpOworICAgIG1fY3VybFNoYXJlSGFuZGxlID0gY3VybF9zaGFyZV9pbml0
KCk7CisgICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9T
SEFSRSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFKTsKKyAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1
cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX1NIQVJFLCBDVVJMX0xPQ0tfREFUQV9ETlMpOworICAg
IGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfTE9DS0ZVTkMs
IGxvY2spOworICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hP
UFRfVU5MT0NLRlVOQywgdW5sb2NrKTsKKworICAgIGluaXRDb29raWVTZXNzaW9uKCk7CisKKyAg
ICBtX2lnbm9yZVNTTEVycm9ycyA9IGdldGVudigiV0VCS0lUX0lHTk9SRV9TU0xfRVJST1JTIik7
CisKKyNpZm5kZWYgTkRFQlVHCisgICAgbV92ZXJib3NlID0gZ2V0ZW52KCJERUJVR19DVVJMIik7
CisKKyAgICBjaGFyKiBsb2dGaWxlID0gZ2V0ZW52KCJDVVJMX0xPR19GSUxFIik7CisgICAgaWYg
KGxvZ0ZpbGUpCisgICAgICAgIG1fbG9nRmlsZSA9IGZvcGVuKGxvZ0ZpbGUsICJhIik7CisjZW5k
aWYKK30KKworQ3VybENvbnRleHQ6On5DdXJsQ29udGV4dCgpCit7CisgICAgY3VybF9zaGFyZV9j
bGVhbnVwKG1fY3VybFNoYXJlSGFuZGxlKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisK
KyNpZm5kZWYgTkRFQlVHCisgICAgaWYgKG1fbG9nRmlsZSkKKyAgICAgICAgZmNsb3NlKG1fbG9n
RmlsZSk7CisjZW5kaWYKK30KKworLy8gQ29va2llID09PT09PT09PT09PT09PT09PT09PT09CisK
K3ZvaWQgQ3VybENvbnRleHQ6OmluaXRDb29raWVTZXNzaW9uKCkKK3sKKyAgICAvLyBDdXJsIHNh
dmVzIGJvdGggcGVyc2lzdGVudCBjb29raWVzLCBhbmQgc2Vzc2lvbiBjb29raWVzIHRvIHRoZSBj
b29raWUgZmlsZS4KKyAgICAvLyBUaGUgc2Vzc2lvbiBjb29raWVzIHNob3VsZCBiZSBkZWxldGVk
IGJlZm9yZSBzdGFydGluZyBhIG5ldyBzZXNzaW9uLgorCisgICAgQ1VSTCogY3VybCA9IGN1cmxf
ZWFzeV9pbml0KCk7CisKKyAgICBpZiAoIWN1cmwpCisgICAgICAgIHJldHVybjsKKworICAgIGN1
cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TSEFSRSwgY3VybFNoYXJlSGFuZGxlKCkpOwor
CisgICAgaWYgKCFtX2Nvb2tpZUphckZpbGVOYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGN1cmxf
ZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09LSUVGSUxFLCBtX2Nvb2tpZUphckZpbGVOYW1l
KTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPT0tJRUpBUiwgbV9j
b29raWVKYXJGaWxlTmFtZSk7CisgICAgfQorCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBD
VVJMT1BUX0NPT0tJRVNFU1NJT04sIDEpOworCisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7
Cit9CisKKy8vIFByb3h5ID09PT09PT09PT09PT09PT09PT09PT09CisKK2NvbnN0IFN0cmluZyBD
dXJsQ29udGV4dDo6UHJveHlJbmZvOjp1cmwoKSBjb25zdAoreworICAgIFN0cmluZyB1c2VyUGFz
czsKKyAgICBpZiAodXNlcm5hbWUubGVuZ3RoKCkgfHwgcGFzc3dvcmQubGVuZ3RoKCkpCisgICAg
ICAgIHVzZXJQYXNzID0gdXNlcm5hbWUgKyAiOiIgKyBwYXNzd29yZCArICJAIjsKKworICAgIHJl
dHVybiBTdHJpbmcoImh0dHA6Ly8iKSArIHVzZXJQYXNzICsgaG9zdCArICI6IiArIFN0cmluZzo6
bnVtYmVyKHBvcnQpOworfQorCit2b2lkIEN1cmxDb250ZXh0OjpzZXRQcm94eUluZm8oY29uc3Qg
U3RyaW5nJiBob3N0LAorICAgIHVuc2lnbmVkIGxvbmcgcG9ydCwKKyAgICBDdXJsUHJveHlUeXBl
IHR5cGUsCisgICAgY29uc3QgU3RyaW5nJiB1c2VybmFtZSwKKyAgICBjb25zdCBTdHJpbmcmIHBh
c3N3b3JkKQoreworICAgIFByb3h5SW5mbyBpbmZvOworCisgICAgaW5mby5ob3N0ID0gaG9zdDsK
KyAgICBpbmZvLnBvcnQgPSBwb3J0OworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby51
c2VybmFtZSA9IHVzZXJuYW1lOworICAgIGluZm8ucGFzc3dvcmQgPSBwYXNzd29yZDsKKworICAg
IHNldFByb3h5SW5mbyhpbmZvKTsKK30KKworLy8gQ3VybCBVdGlsaXRpZXMgPT09PT09PT09PT09
PT09PT09PT09PT0KKworVVJMIEN1cmxDb250ZXh0OjpnZXRFZmZlY3RpdmVVUkwoQ1VSTCogaGFu
ZGxlKQoreworICAgIGNvbnN0IGNoYXIqIHVybDsKKyAgICBDVVJMY29kZSBlcnIgPSBjdXJsX2Vh
c3lfZ2V0aW5mbyhoYW5kbGUsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZ1cmwpOworICAgIGlm
IChDVVJMRV9PSyAhPSBlcnIpCisgICAgICAgIHJldHVybiBVUkwoKTsKKyAgICByZXR1cm4gVVJM
KFVSTCgpLCB1cmwpOworfQorCitDVVJMTSogQ3VybENvbnRleHQ6OmNyZWF0ZU11bHRpSGFuZGxl
KCkKK3sKKyAgICByZXR1cm4gY3VybF9tdWx0aV9pbml0KCk7Cit9CisKKy8vIFNoYXJlZCBSZXNv
dXJjZSBtYW5hZ2VtZW50ID09PT09PT09PT09PT09PT09PT09PT09CisKK0xvY2sqIEN1cmxDb250
ZXh0OjptdXRleEZvcihjdXJsX2xvY2tfZGF0YSBkYXRhKQoreworICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChMb2NrLCBjb29raWVNdXRleCwgKCkpOworICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBkbnNNdXRleCwgKCkpOworICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBzaGFyZU11dGV4LCAoKSk7CisKKyAgICBzd2l0Y2gg
KGRhdGEpIHsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX0NPT0tJRToKKyAgICAgICAgcmV0dXJu
ICZjb29raWVNdXRleDsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX0ROUzoKKyAgICAgICAgcmV0
dXJuICZkbnNNdXRleDsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX1NIQVJFOgorICAgICAgICBy
ZXR1cm4gJnNoYXJlTXV0ZXg7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworLy8gbGliY3VybCBk
b2VzIG5vdCBpbXBsZW1lbnQgaXRzIG93biB0aHJlYWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2
ZXMuCisvLyB0aGVzZSB0d28gZnVuY3Rpb25zIHByb3ZpZGUgbXV0ZXhlcyBmb3IgY29va2llcywg
YW5kIGZvciB0aGUgZ2xvYmFsIEROUworLy8gY2FjaGUuCit2b2lkIEN1cmxDb250ZXh0Ojpsb2Nr
KENVUkwqIC8qIGhhbmRsZSAqLywgY3VybF9sb2NrX2RhdGEgZGF0YSwgY3VybF9sb2NrX2FjY2Vz
cyAvKiBhY2Nlc3MgKi8sIHZvaWQqIC8qIHVzZXJQdHIgKi8pCit7CisgICAgaWYgKExvY2sqIG11
dGV4ID0gbXV0ZXhGb3IoZGF0YSkpCisgICAgICAgIG11dGV4LT5sb2NrKCk7Cit9CisKK3ZvaWQg
Q3VybENvbnRleHQ6OnVubG9jayhDVVJMKiAvKiBoYW5kbGUgKi8sIGN1cmxfbG9ja19kYXRhIGRh
dGEsIHZvaWQqIC8qIHVzZXJQdHIgKi8pCit7CisgICAgaWYgKExvY2sqIG11dGV4ID0gbXV0ZXhG
b3IoZGF0YSkpCisgICAgICAgIG11dGV4LT51bmxvY2soKTsKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA1ZWFhMGY4ZTllCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxD
b250ZXh0LmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJVUkwuaCIKKwor
I2luY2x1ZGUgPFdURi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5k
b3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9j
dXJsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBDdXJsUHJveHlUeXBl
IHsKKyAgICBJbnZhbGlkID0gLTEsCisgICAgSFRUUCA9IENVUkxQUk9YWV9IVFRQLAorICAgIFNv
Y2tzNCA9IENVUkxQUk9YWV9TT0NLUzQsCisgICAgU29ja3M0QSA9IENVUkxQUk9YWV9TT0NLUzRB
LAorICAgIFNvY2tzNSA9IENVUkxQUk9YWV9TT0NLUzUsCisgICAgU29ja3M1SG9zdG5hbWUgPSBD
VVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FCit9OworCitjbGFzcyBDdXJsQ29udGV4dCB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VybENvbnRleHQpOworCitwdWJsaWM6CisgICAgc3RydWN0
IFByb3h5SW5mb3sKKyAgICAgICAgU3RyaW5nIGhvc3Q7CisgICAgICAgIHVuc2lnbmVkIGxvbmcg
cG9ydDsKKyAgICAgICAgQ3VybFByb3h5VHlwZSB0eXBlIHsgQ3VybFByb3h5VHlwZTo6SW52YWxp
ZCB9OworICAgICAgICBTdHJpbmcgdXNlcm5hbWU7CisgICAgICAgIFN0cmluZyBwYXNzd29yZDsK
KworICAgICAgICBjb25zdCBTdHJpbmcgdXJsKCkgY29uc3Q7CisgICAgfTsKKworICAgIHN0YXRp
YyBDdXJsQ29udGV4dCYgc2luZ2xldG9uKCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBDdXJsQ29u
dGV4dCBzaGFyZWQ7CisgICAgICAgIHJldHVybiBzaGFyZWQ7CisgICAgfQorCisgICAgfkN1cmxD
b250ZXh0KCk7CisKKyAgICBDVVJMU0gqIGN1cmxTaGFyZUhhbmRsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY3VybFNoYXJlSGFuZGxlOyB9CisKKyAgICBDVVJMTSogY3JlYXRlTXVsdGlIYW5kbGUoKTsK
KworICAgIC8vIENvb2tpZQorICAgIGNvbnN0IGNoYXIqIGdldENvb2tpZUphckZpbGVOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9jb29raWVKYXJGaWxlTmFtZS5kYXRhKCk7IH0KKyAgICB2b2lkIHNl
dENvb2tpZUphckZpbGVOYW1lKGNvbnN0IGNoYXIqIGNvb2tpZUphckZpbGVOYW1lKSB7IG1fY29v
a2llSmFyRmlsZU5hbWUgPSBDU3RyaW5nKGNvb2tpZUphckZpbGVOYW1lKTsgfQorCisgICAgLy8g
Q2VydGlmaWNhdGUKKyAgICBjb25zdCBjaGFyKiBnZXRDZXJ0aWZpY2F0ZVBhdGgoKSBjb25zdCB7
IHJldHVybiBtX2NlcnRpZmljYXRlUGF0aC5kYXRhKCk7IH0KKyAgICBib29sIHNob3VsZElnbm9y
ZVNTTEVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlU1NMRXJyb3JzOyB9CisKKyAgICAv
LyBQcm94eQorICAgIGNvbnN0IFByb3h5SW5mbyYgcHJveHlJbmZvKCkgY29uc3QgeyByZXR1cm4g
bV9wcm94eTsgfQorICAgIHZvaWQgc2V0UHJveHlJbmZvKGNvbnN0IFByb3h5SW5mbyYgaW5mbykg
eyBtX3Byb3h5ID0gaW5mbzsgIH0KKyAgICB2b2lkIHNldFByb3h5SW5mbyhjb25zdCBTdHJpbmcm
IGhvc3QgPSBlbXB0eVN0cmluZygpLCB1bnNpZ25lZCBsb25nIHBvcnQgPSAwLCBDdXJsUHJveHlU
eXBlID0gQ3VybFByb3h5VHlwZTo6SFRUUCwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSA9IGVtcHR5
U3RyaW5nKCksIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQgPSBlbXB0eVN0cmluZygpKTsKKworICAg
IC8vIFV0aWxpdGllcworICAgIFVSTCBnZXRFZmZlY3RpdmVVUkwoQ1VSTCogaGFuZGxlKTsKKwor
I2lmbmRlZiBOREVCVUcKKyAgICBGSUxFKiBnZXRMb2dGaWxlKCkgY29uc3QgeyByZXR1cm4gbV9s
b2dGaWxlOyB9CisgICAgYm9vbCBpc1ZlcmJvc2UoKSBjb25zdCB7IHJldHVybiBtX3ZlcmJvc2U7
IH0KKyNlbmRpZgorCitwcml2YXRlOgorCisgICAgQ1VSTFNIKiBtX2N1cmxTaGFyZUhhbmRsZSB7
IG51bGxwdHIgfTsKKworICAgIENTdHJpbmcgbV9jb29raWVKYXJGaWxlTmFtZTsKKworICAgIENT
dHJpbmcgbV9jZXJ0aWZpY2F0ZVBhdGg7CisgICAgYm9vbCBtX2lnbm9yZVNTTEVycm9ycyB7IGZh
bHNlIH07CisKKyAgICBQcm94eUluZm8gbV9wcm94eTsKKworICAgIEN1cmxDb250ZXh0KCk7Cisg
ICAgdm9pZCBpbml0Q29va2llU2Vzc2lvbigpOworCisgICAgc3RhdGljIHZvaWQgbG9jayhDVVJM
KiwgY3VybF9sb2NrX2RhdGEsIGN1cmxfbG9ja19hY2Nlc3MsIHZvaWQqKTsKKyAgICBzdGF0aWMg
dm9pZCB1bmxvY2soQ1VSTCosIGN1cmxfbG9ja19kYXRhLCB2b2lkKik7CisgICAgc3RhdGljIExv
Y2sqIG11dGV4Rm9yKGN1cmxfbG9ja19kYXRhKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBGSUxF
KiBtX2xvZ0ZpbGUgeyBudWxscHRyIH07CisgICAgYm9vbCBtX3ZlcmJvc2UgeyBmYWxzZSB9Owor
I2VuZGlmCit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCmluZGV4IDk4OTUwNWUzMzBmLi5kMzMyY2Y1NzIwYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3du
bG9hZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxE
b3dubG9hZC5jcHAKQEAgLTI5LDYgKzI5LDggQEAKIAogI2luY2x1ZGUgIkN1cmxEb3dubG9hZC5o
IgogCisjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKKwogI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1l
cy5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCkBAIC04NSw3ICs4Nyw3IEBAIHZvaWQgQ3VybERvd25sb2FkOjppbml0KEN1cmxEb3dubG9h
ZExpc3RlbmVyKiBsaXN0ZW5lciwgY29uc3QgVVJMJiB1cmwpCiAgICAgaWYgKGNlcnRQYXRoKQog
ICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9DQUlORk8sIGNl
cnRQYXRoKTsKIAotICAgIENVUkxTSCogY3VybHNoID0gQ3VybE1hbmFnZXI6OnNpbmdsZXRvbigp
LmdldEN1cmxTaGFyZUhhbmRsZSgpOworICAgIENVUkxTSCogY3VybHNoID0gQ3VybENvbnRleHQ6
OnNpbmdsZXRvbigpLmN1cmxTaGFyZUhhbmRsZSgpOwogICAgIGlmIChjdXJsc2gpCiAgICAgICAg
IGN1cmxfZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxlLCBDVVJMT1BUX1NIQVJFLCBjdXJsc2gpOwog
CkBAIC0xMDYsMTMgKzEwOCwxMyBAQCB2b2lkIEN1cmxEb3dubG9hZDo6aW5pdChDdXJsRG93bmxv
YWRMaXN0ZW5lciogbGlzdGVuZXIsIFJlc291cmNlSGFuZGxlKiwgY29uc3QgUgogCiBib29sIEN1
cmxEb3dubG9hZDo6c3RhcnQoKQogewotICAgIHJlZigpOyAvLyBDdXJsRG93bmxvYWRNYW5hZ2Vy
Ojpkb3dubG9hZFRocmVhZCB3aWxsIGNhbGwgZGVyZWYgd2hlbiB0aGUgZG93bmxvYWQgaGFzIGZp
bmlzaGVkLgotICAgIHJldHVybiBDdXJsTWFuYWdlcjo6c2luZ2xldG9uKCkuYWRkKG1fY3VybEhh
bmRsZSk7CisgICAgcmVmKCk7IC8vIEN1cmxKb2JNYW5hZ2VyIHdpbGwgY2FsbCBkZXJlZiB3aGVu
IHRoZSBkb3dubG9hZCBoYXMgZmluaXNoZWQuCisgICAgcmV0dXJuIEN1cmxKb2JNYW5hZ2VyOjpz
aW5nbGV0b24oKS5hZGQobV9jdXJsSGFuZGxlKTsKIH0KIAogYm9vbCBDdXJsRG93bmxvYWQ6OmNh
bmNlbCgpCiB7Ci0gICAgcmV0dXJuIEN1cmxNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1vdmUobV9j
dXJsSGFuZGxlKTsKKyAgICByZXR1cm4gQ3VybEpvYk1hbmFnZXI6OnNpbmdsZXRvbigpLnJlbW92
ZShtX2N1cmxIYW5kbGUpOwogfQogCiBTdHJpbmcgQ3VybERvd25sb2FkOjpnZXRUZW1wUGF0aCgp
IGNvbnN0CkBAIC0yMDMsNyArMjA1LDcgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OmRpZFJlY2VpdmVI
ZWFkZXIoY29uc3QgU3RyaW5nJiBoZWFkZXIpCiAgICAgICAgIFVOVVNFRF9QQVJBTShlcnIpOwog
CiAgICAgICAgIGlmIChodHRwQ29kZSA+PSAyMDAgJiYgaHR0cENvZGUgPCAzMDApIHsKLSAgICAg
ICAgICAgIFVSTCB1cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChtX2N1cmxIYW5kbGUp
OworICAgICAgICAgICAgVVJMIHVybCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRFZmZl
Y3RpdmVVUkwobV9jdXJsSGFuZGxlKTsKICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Ro
aXMsIHVybCA9IHVybC5pc29sYXRlZENvcHkoKSwgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpXSB7CiAgICAgICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRVUkwodXJsKTsKICAgICAgICAg
ICAgICAgICBtX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5
cGUobV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBl
KSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxEb3dubG9hZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxE
b3dubG9hZC5oCmluZGV4IDMxMmU0NzAwMjc2Li5mOTAzMDZjNmYwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaApAQCAtMzYs
NyArMzYsNyBAQAogI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgIkN1
cmxNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ3VybEpvYk1hbmFnZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxKb2JNYW5hZ2VyLmNwcApzaW1pbGFyaXR5IGluZGV4IDY1JQpyZW5hbWUgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIuY3BwCnJlbmFtZSB0
byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuY3Bw
CmluZGV4IDA1OWZmZTI2ODc3Li4zZDAwZWUzNzg1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuY3BwCkBAIC0yNyw3ICsy
Nyw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBVU0UoQ1VSTCkKLSNpbmNsdWRlICJD
dXJsTWFuYWdlci5oIgorI2luY2x1ZGUgIkN1cmxKb2JNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJD
dXJsQ29udGV4dC5oIgogCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0zNiwzNyArMzgsMTggQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ3VybFNoYXJlZFJlc291cmNl
cyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgbG9jayhDVVJMKiwgY3VybF9sb2NrX2RhdGEs
IGN1cmxfbG9ja19hY2Nlc3MsIHZvaWQqKTsKLSAgICBzdGF0aWMgdm9pZCB1bmxvY2soQ1VSTCos
IGN1cmxfbG9ja19kYXRhLCB2b2lkKik7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIExvY2sqIG11
dGV4Rm9yKGN1cmxfbG9ja19kYXRhKTsKLX07Ci0KLS8vIEN1cmxEb3dubG9hZE1hbmFnZXIgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1DdXJsTWFuYWdlcjo6Q3VybE1hbmFnZXIoKQorQ3VybEpvYk1hbmFnZXI6OkN1
cmxKb2JNYW5hZ2VyKCkKIHsKLSAgICBjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7
Ci0gICAgbV9jdXJsTXVsdGlIYW5kbGUgPSBjdXJsX211bHRpX2luaXQoKTsKLSAgICBtX2N1cmxT
aGFyZUhhbmRsZSA9IGN1cmxfc2hhcmVfaW5pdCgpOwotICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1f
Y3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hBUkUsIENVUkxfTE9DS19EQVRBX0NPT0tJRSk7
Ci0gICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9TSEFS
RSwgQ1VSTF9MT0NLX0RBVEFfRE5TKTsKLSAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFy
ZUhhbmRsZSwgQ1VSTFNIT1BUX0xPQ0tGVU5DLCBDdXJsU2hhcmVkUmVzb3VyY2VzOjpsb2NrKTsK
LSAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX1VOTE9D
S0ZVTkMsIEN1cmxTaGFyZWRSZXNvdXJjZXM6OnVubG9jayk7CisgICAgbV9jdXJsTXVsdGlIYW5k
bGUgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuY3JlYXRlTXVsdGlIYW5kbGUoKTsKIH0KIAot
Q3VybE1hbmFnZXI6On5DdXJsTWFuYWdlcigpCitDdXJsSm9iTWFuYWdlcjo6fkN1cmxKb2JNYW5h
Z2VyKCkKIHsKICAgICBzdG9wVGhyZWFkKCk7CiAgICAgY3VybF9tdWx0aV9jbGVhbnVwKG1fY3Vy
bE11bHRpSGFuZGxlKTsKLSAgICBjdXJsX3NoYXJlX2NsZWFudXAobV9jdXJsU2hhcmVIYW5kbGUp
OwotICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKIH0KIAotYm9vbCBDdXJsTWFuYWdlcjo6YWRk
KENVUkwqIGN1cmxIYW5kbGUpCitib29sIEN1cmxKb2JNYW5hZ2VyOjphZGQoQ1VSTCogY3VybEhh
bmRsZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC04MCw3ICs2Myw3IEBA
IGJvb2wgQ3VybE1hbmFnZXI6OmFkZChDVVJMKiBjdXJsSGFuZGxlKQogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIEN1cmxNYW5hZ2VyOjpyZW1vdmUoQ1VSTCogY3VybEhhbmRsZSkKK2Jvb2wg
Q3VybEpvYk1hbmFnZXI6OnJlbW92ZShDVVJMKiBjdXJsSGFuZGxlKQogewogICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbXV0ZXgpOwogCkBAIC04OSwxOSArNzIsMTkgQEAgYm9vbCBDdXJsTWFuYWdl
cjo6cmVtb3ZlKENVUkwqIGN1cmxIYW5kbGUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBD
dXJsTWFuYWdlcjo6Z2V0QWN0aXZlQ291bnQoKSBjb25zdAoraW50IEN1cmxKb2JNYW5hZ2VyOjpn
ZXRBY3RpdmVDb3VudCgpIGNvbnN0CiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7
CiAgICAgcmV0dXJuIG1fYWN0aXZlSGFuZGxlTGlzdC5zaXplKCk7CiB9CiAKLWludCBDdXJsTWFu
YWdlcjo6Z2V0UGVuZGluZ0NvdW50KCkgY29uc3QKK2ludCBDdXJsSm9iTWFuYWdlcjo6Z2V0UGVu
ZGluZ0NvdW50KCkgY29uc3QKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKICAg
ICByZXR1cm4gbV9wZW5kaW5nSGFuZGxlTGlzdC5zaXplKCk7CiB9CiAKLXZvaWQgQ3VybE1hbmFn
ZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQordm9pZCBDdXJsSm9iTWFuYWdlcjo6c3RhcnRUaHJl
YWRJZk5lZWRlZCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtMTE1LDEw
ICs5OCw4IEBAIHZvaWQgQ3VybE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQogICAgIH0K
IH0KIAotdm9pZCBDdXJsTWFuYWdlcjo6c3RvcFRocmVhZCgpCit2b2lkIEN1cmxKb2JNYW5hZ2Vy
OjpzdG9wVGhyZWFkKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCiAgICAgc2V0
UnVuVGhyZWFkKGZhbHNlKTsKIAogICAgIGlmIChtX3RocmVhZCkgewpAQCAtMTI3LDEzICsxMDgs
MTMgQEAgdm9pZCBDdXJsTWFuYWdlcjo6c3RvcFRocmVhZCgpCiAgICAgfQogfQogCi12b2lkIEN1
cmxNYW5hZ2VyOjpzdG9wVGhyZWFkSWZJZGxlKCkKK3ZvaWQgQ3VybEpvYk1hbmFnZXI6OnN0b3BU
aHJlYWRJZklkbGUoKQogewogICAgIGlmICghZ2V0QWN0aXZlQ291bnQoKSAmJiAhZ2V0UGVuZGlu
Z0NvdW50KCkpCiAgICAgICAgIHNldFJ1blRocmVhZChmYWxzZSk7CiB9CiAKLXZvaWQgQ3VybE1h
bmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QoKQordm9pZCBDdXJsSm9iTWFuYWdlcjo6dXBkYXRlSGFu
ZGxlTGlzdCgpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CiAKQEAgLTE1Miw3
ICsxMzMsNyBAQCB2b2lkIEN1cmxNYW5hZ2VyOjp1cGRhdGVIYW5kbGVMaXN0KCkKICAgICB9CiB9
CiAKLWJvb2wgQ3VybE1hbmFnZXI6OmFkZFRvQ3VybChDVVJMKiBjdXJsSGFuZGxlKQorYm9vbCBD
dXJsSm9iTWFuYWdlcjo6YWRkVG9DdXJsKENVUkwqIGN1cmxIYW5kbGUpCiB7CiAgICAgQ1VSTE1j
b2RlIHJldHZhbCA9IGN1cmxfbXVsdGlfYWRkX2hhbmRsZShtX2N1cmxNdWx0aUhhbmRsZSwgY3Vy
bEhhbmRsZSk7CiAgICAgaWYgKHJldHZhbCA9PSBDVVJMTV9PSykgewpAQCAtMTYyLDcgKzE0Myw3
IEBAIGJvb2wgQ3VybE1hbmFnZXI6OmFkZFRvQ3VybChDVVJMKiBjdXJsSGFuZGxlKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBDdXJsTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwoQ1VSTCog
Y3VybEhhbmRsZSkKK2Jvb2wgQ3VybEpvYk1hbmFnZXI6OnJlbW92ZUZyb21DdXJsKENVUkwqIGN1
cmxIYW5kbGUpCiB7CiAgICAgaW50IGhhbmRsZVBvcyA9IG1fYWN0aXZlSGFuZGxlTGlzdC5maW5k
KGN1cmxIYW5kbGUpOwogCkBAIC0xNzgsNyArMTU5LDcgQEAgYm9vbCBDdXJsTWFuYWdlcjo6cmVt
b3ZlRnJvbUN1cmwoQ1VSTCogY3VybEhhbmRsZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgQ3VybE1hbmFnZXI6OndvcmtlclRocmVhZCgpCit2b2lkIEN1cmxKb2JNYW5hZ2VyOjp3b3Jr
ZXJUaHJlYWQoKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yMzYsNTMg
KzIxNyw2IEBAIHZvaWQgQ3VybE1hbmFnZXI6OndvcmtlclRocmVhZCgpCiAgICAgfQogfQogCi0v
LyBDVVJMIFV0aWxpdGllcwotCi1VUkwgQ3VybFV0aWxzOjpnZXRFZmZlY3RpdmVVUkwoQ1VSTCog
aGFuZGxlKQotewotICAgIGNvbnN0IGNoYXIqIHVybDsKLSAgICBDVVJMY29kZSBlcnIgPSBjdXJs
X2Vhc3lfZ2V0aW5mbyhoYW5kbGUsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZ1cmwpOwotICAg
IGlmIChDVVJMRV9PSyAhPSBlcnIpCi0gICAgICAgIHJldHVybiBVUkwoKTsKLSAgICByZXR1cm4g
VVJMKFVSTCgpLCB1cmwpOwotfQotCi0vLyBTaGFyZWQgUmVzb3VyY2UgbWFuYWdlbWVudCA9PT09
PT09PT09PT09PT09PT09PT09PQotCi1Mb2NrKiBDdXJsU2hhcmVkUmVzb3VyY2VzOjptdXRleEZv
cihjdXJsX2xvY2tfZGF0YSBkYXRhKQotewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19M
T0NBTChMb2NrLCBjb29raWVNdXRleCwgKCkpOwotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChMb2NrLCBkbnNNdXRleCwgKCkpOwotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChMb2NrLCBzaGFyZU11dGV4LCAoKSk7Ci0KLSAgICBzd2l0Y2ggKGRhdGEpIHsKLSAg
ICBjYXNlIENVUkxfTE9DS19EQVRBX0NPT0tJRToKLSAgICAgICAgcmV0dXJuICZjb29raWVNdXRl
eDsKLSAgICBjYXNlIENVUkxfTE9DS19EQVRBX0ROUzoKLSAgICAgICAgcmV0dXJuICZkbnNNdXRl
eDsKLSAgICBjYXNlIENVUkxfTE9DS19EQVRBX1NIQVJFOgotICAgICAgICByZXR1cm4gJnNoYXJl
TXV0ZXg7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX0KLQotLy8gbGliY3VybCBkb2VzIG5vdCBpbXBs
ZW1lbnQgaXRzIG93biB0aHJlYWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuCi0vLyB0aGVz
ZSB0d28gZnVuY3Rpb25zIHByb3ZpZGUgbXV0ZXhlcyBmb3IgY29va2llcywgYW5kIGZvciB0aGUg
Z2xvYmFsIEROUwotLy8gY2FjaGUuCi12b2lkIEN1cmxTaGFyZWRSZXNvdXJjZXM6OmxvY2soQ1VS
TCogLyogaGFuZGxlICovLCBjdXJsX2xvY2tfZGF0YSBkYXRhLCBjdXJsX2xvY2tfYWNjZXNzIC8q
IGFjY2VzcyAqLywgdm9pZCogLyogdXNlclB0ciAqLykKLXsKLSAgICBpZiAoTG9jayogbXV0ZXgg
PSBDdXJsU2hhcmVkUmVzb3VyY2VzOjptdXRleEZvcihkYXRhKSkKLSAgICAgICAgbXV0ZXgtPmxv
Y2soKTsKLX0KLQotdm9pZCBDdXJsU2hhcmVkUmVzb3VyY2VzOjp1bmxvY2soQ1VSTCogLyogaGFu
ZGxlICovLCBjdXJsX2xvY2tfZGF0YSBkYXRhLCB2b2lkKiAvKiB1c2VyUHRyICovKQotewotICAg
IGlmIChMb2NrKiBtdXRleCA9IEN1cmxTaGFyZWRSZXNvdXJjZXM6Om11dGV4Rm9yKGRhdGEpKQot
ICAgICAgICBtdXRleC0+dW5sb2NrKCk7Ci19Ci0KIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdlci5oCnNpbWlsYXJp
dHkgaW5kZXggODklCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsTWFuYWdlci5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuaAppbmRleCA1NDgyZWMxNmVmZi4uODI5YjQ2ZGFkMWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFu
YWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9i
TWFuYWdlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBQ
TEFURk9STShXSU4pCiAjaW5jbHVkZSA8d2luZG93cy5oPgpAQCAtMzUsNyArMzYsNiBAQAogI2Vu
ZGlmCiAKICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KLSNpbmNsdWRlICJVUkwuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC00NiwyMCArNDYsMjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Q3VybEpvYkFjdGlvbiBoYW5kbGVDdXJsTXNnKENVUkxNc2cqKSA9IDA7CiB9OwogCi1jbGFzcyBD
dXJsTWFuYWdlciB7CitjbGFzcyBDdXJsSm9iTWFuYWdlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IEN1cmxNYW5hZ2VyJiBzaW5nbGV0b24oKQorICAgIHN0YXRpYyBDdXJsSm9iTWFuYWdlciYgc2lu
Z2xldG9uKCkKICAgICB7CiAgICAgICAgIC8vIFNpbmNlIGl0J3MgYSBzdGF0aWMgdmFyaWFibGUs
IGlmIHRoZSBjbGFzcyBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQsCiAgICAgICAgIC8vIEl0IHdv
bid0IGJlIGNyZWF0ZWQgYWdhaW4uCiAgICAgICAgIC8vIEFuZCBpdCAqKmlzKiogdGhyZWFkLXNh
ZmUgaW4gQysrMTEuCiAKLSAgICAgICAgc3RhdGljIEN1cmxNYW5hZ2VyIHNoYXJlZDsKKyAgICAg
ICAgc3RhdGljIEN1cmxKb2JNYW5hZ2VyIHNoYXJlZDsKICAgICAgICAgcmV0dXJuIHNoYXJlZDsK
ICAgICB9CiAKLSAgICBDdXJsTWFuYWdlcigpOwotICAgIHZpcnR1YWwgfkN1cmxNYW5hZ2VyKCk7
CisgICAgQ3VybEpvYk1hbmFnZXIoKTsKKyAgICB2aXJ0dWFsIH5DdXJsSm9iTWFuYWdlcigpOwog
CiAgICAgYm9vbCBhZGQoQ1VSTCogY3VybEhhbmRsZSk7CiAgICAgYm9vbCByZW1vdmUoQ1VSTCog
Y3VybEhhbmRsZSk7CkBAIC02Nyw4ICs2Nyw2IEBAIHB1YmxpYzoKICAgICBpbnQgZ2V0QWN0aXZl
Q291bnQoKSBjb25zdDsKICAgICBpbnQgZ2V0UGVuZGluZ0NvdW50KCkgY29uc3Q7CiAKLSAgICBD
VVJMU0gqIGdldEN1cmxTaGFyZUhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VybFNoYXJlSGFu
ZGxlOyB9Ci0KIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydFRocmVhZElmTmVlZGVkKCk7CiAgICAg
dm9pZCBzdG9wVGhyZWFkKCk7CkBAIC05NCwxNCArOTIsNyBAQCBwcml2YXRlOgogICAgIG11dGFi
bGUgTG9jayBtX211dGV4OwogICAgIGJvb2wgbV9ydW5UaHJlYWQgeyBmYWxzZSB9OwogCi0gICAg
Q1VSTFNIKiBtX2N1cmxTaGFyZUhhbmRsZSB7IG51bGxwdHIgfTsKLQogICAgIGZyaWVuZCBjbGFz
cyBDdXJsSm9iOwogfTsKIAotY2xhc3MgQ3VybFV0aWxzIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
VVJMIGdldEVmZmVjdGl2ZVVSTChDVVJMKiBoYW5kbGUpOwotfTsKLQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5k
bGVNYW5hZ2VyLmNwcAppbmRleCAyMGE5MzRhOTliNi4uNGNhNGNkMjRmMTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZU1hbmFnZXIuY3BwCkBAIC00Miw3ICs0Miw3IEBACiAKICNpbmNsdWRlICJDcmVkZW50
aWFsU3RvcmFnZS5oIgogI2luY2x1ZGUgIkN1cmxDYWNoZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJD
dXJsTWFuYWdlci5oIgorI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRUUEhl
YWRlck5hbWVzLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCkBAIC02MCw5ICs2MCw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
Vmlldy5oPgogCiAjaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlICJXZWJDb3JlQnVuZGxlV2luLmgi
Ci0jaW5jbHVkZSA8c2hsb2JqLmg+Ci0jaW5jbHVkZSA8c2hsd2FwaS5oPgogI2Vsc2UKICNpbmNs
dWRlIDxzeXMvcGFyYW0uaD4KICNkZWZpbmUgTUFYX1BBVEggTUFYUEFUSExFTgpAQCAtNzMsMTMg
KzcwLDkgQEAKICNpZiBFTkFCTEUoV0VCX1RJTUlORykKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KICNlbmRpZgotI2lmIFVTRShDRikKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0j
ZW5kaWYKICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg4LDYxICs4MSw2IEBAIHN0YXRpYyBjb25zdCBT
ZWNvbmRzIHBvbGxUaW1lIHsgNTBfbXMgfTsKIGNvbnN0IGludCBtYXhSdW5uaW5nSm9icyA9IDEy
ODsKIGNvbnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluQ3VybCA9ICJDdXJsRXJyb3JEb21haW4i
OwogCi1zdGF0aWMgY29uc3QgYm9vbCBpZ25vcmVTU0xFcnJvcnMgPSBnZXRlbnYoIldFQktJVF9J
R05PUkVfU1NMX0VSUk9SUyIpOwotCi1zdGF0aWMgQ1N0cmluZyBjZXJ0aWZpY2F0ZVBhdGgoKQot
ewotICAgIGNoYXIqIGVudlBhdGggPSBnZXRlbnYoIkNVUkxfQ0FfQlVORExFX1BBVEgiKTsKLSAg
ICBpZiAoZW52UGF0aCkKLSAgICAgICAgcmV0dXJuIGVudlBhdGg7Ci0KLSNpZiBVU0UoQ0YpCi0g
ICAgQ0ZCdW5kbGVSZWYgd2ViS2l0QnVuZGxlUmVmID0gd2ViS2l0QnVuZGxlKCk7Ci0gICAgaWYg
KHdlYktpdEJ1bmRsZVJlZikgewotICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNlcnRVUkxS
ZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKHdlYktpdEJ1bmRsZVJlZiwgQ0ZT
VFIoImNhY2VydCIpLCBDRlNUUigicGVtIiksIENGU1RSKCJjZXJ0aWZpY2F0ZXMiKSkpOwotICAg
ICAgICBpZiAoY2VydFVSTFJlZikgewotICAgICAgICAgICAgY2hhciBwYXRoW01BWF9QQVRIXTsK
LSAgICAgICAgICAgIENGVVJMR2V0RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNlcnRVUkxSZWYu
Z2V0KCksIGZhbHNlLCByZWludGVycHJldF9jYXN0PFVJbnQ4Kj4ocGF0aCksIE1BWF9QQVRIKTsK
LSAgICAgICAgICAgIHJldHVybiBwYXRoOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICByZXR1cm4gQ1N0cmluZygpOwotfQotCi1zdGF0aWMgY2hhciogY29va2llSmFyUGF0aCgpCi17
Ci0gICAgY2hhciogY29va2llSmFyUGF0aCA9IGdldGVudigiQ1VSTF9DT09LSUVfSkFSX1BBVEgi
KTsKLSAgICBpZiAoY29va2llSmFyUGF0aCkKLSAgICAgICAgcmV0dXJuIGZhc3RTdHJEdXAoY29v
a2llSmFyUGF0aCk7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIGNoYXIgZXhlY3V0YWJsZVBhdGhb
TUFYX1BBVEhdOwotICAgIGNoYXIgYXBwRGF0YURpcmVjdG9yeVtNQVhfUEFUSF07Ci0gICAgY2hh
ciBjb29raWVKYXJGdWxsUGF0aFtNQVhfUEFUSF07Ci0gICAgY2hhciBjb29raWVKYXJEaXJlY3Rv
cnlbTUFYX1BBVEhdOwotCi0gICAgaWYgKEZBSUxFRCg6OlNIR2V0Rm9sZGVyUGF0aEEoMCwgQ1NJ
RExfTE9DQUxfQVBQREFUQSB8IENTSURMX0ZMQUdfQ1JFQVRFLCAwLCAwLCBhcHBEYXRhRGlyZWN0
b3J5KSkKLSAgICAgICAgfHwgRkFJTEVEKDo6R2V0TW9kdWxlRmlsZU5hbWVBKDAsIGV4ZWN1dGFi
bGVQYXRoLCBNQVhfUEFUSCkpKQotICAgICAgICByZXR1cm4gZmFzdFN0ckR1cCgiY29va2llcy5k
YXQiKTsKLQotICAgIDo6UGF0aFJlbW92ZUV4dGVuc2lvbkEoZXhlY3V0YWJsZVBhdGgpOwotICAg
IExQU1RSIGV4ZWN1dGFibGVOYW1lID0gOjpQYXRoRmluZEZpbGVOYW1lQShleGVjdXRhYmxlUGF0
aCk7Ci0gICAgc3ByaW50Zl9zKGNvb2tpZUphckRpcmVjdG9yeSwgTUFYX1BBVEgsICIlcy8lcyIs
IGFwcERhdGFEaXJlY3RvcnksIGV4ZWN1dGFibGVOYW1lKTsKLSAgICBzcHJpbnRmX3MoY29va2ll
SmFyRnVsbFBhdGgsIE1BWF9QQVRILCAiJXMvY29va2llcy5kYXQiLCBjb29raWVKYXJEaXJlY3Rv
cnkpOwotCi0gICAgaWYgKDo6U0hDcmVhdGVEaXJlY3RvcnlFeEEoMCwgY29va2llSmFyRGlyZWN0
b3J5LCAwKSAhPSBFUlJPUl9TVUNDRVNTCi0gICAgICAgICYmIDo6R2V0TGFzdEVycm9yKCkgIT0g
RVJST1JfRklMRV9FWElTVFMKLSAgICAgICAgJiYgOjpHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9B
TFJFQURZX0VYSVNUUykKLSAgICAgICAgcmV0dXJuIGZhc3RTdHJEdXAoImNvb2tpZXMuZGF0Iik7
Ci0KLSAgICByZXR1cm4gZmFzdFN0ckR1cChjb29raWVKYXJGdWxsUGF0aCk7Ci0jZWxzZQotICAg
IHJldHVybiBmYXN0U3RyRHVwKCJjb29raWVzLmRhdCIpOwotI2VuZGlmCi19Ci0KICNpZiBFTkFC
TEUoV0VCX1RJTUlORykKIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVdlYlRpbWluZ0luZm9ybWF0aW9u
cyhSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkKQogewpAQCAtMTkyLDQ3ICsxMzAsMTQgQEAgaW5s
aW5lIHN0YXRpYyBib29sIGlzSHR0cE5vdE1vZGlmaWVkKGludCBzdGF0dXNDb2RlKQogCiBSZXNv
dXJjZUhhbmRsZU1hbmFnZXI6OlJlc291cmNlSGFuZGxlTWFuYWdlcigpCiAgICAgOiBtX2Rvd25s
b2FkVGltZXIoKnRoaXMsICZSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxs
YmFjaykKLSAgICAsIG1fY29va2llSmFyRmlsZU5hbWUoY29va2llSmFyUGF0aCgpKQotICAgICwg
bV9jZXJ0aWZpY2F0ZVBhdGgoY2VydGlmaWNhdGVQYXRoKCkpCiAgICAgLCBtX3J1bm5pbmdKb2Jz
KDApCi0jaWZuZGVmIE5ERUJVRwotICAgICwgbV9sb2dGaWxlKG51bGxwdHIpCi0jZW5kaWYKIHsK
LSAgICBDVVJMU0gqIGggPSBDdXJsTWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0Q3VybFNoYXJlSGFu
ZGxlKCk7Ci0gICAgbV9jdXJsU2hhcmVIYW5kbGUgPSBoOwotICAgIG1fY3VybE11bHRpSGFuZGxl
ID0gY3VybF9tdWx0aV9pbml0KCk7Ci0KLQotICAgIGluaXRDb29raWVTZXNzaW9uKCk7Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgY2hhciogbG9nRmlsZSA9IGdldGVudigiQ1VSTF9MT0dfRklMRSIp
OwotICAgIGlmIChsb2dGaWxlKQotICAgICAgICBtX2xvZ0ZpbGUgPSBmb3Blbihsb2dGaWxlLCAi
YSIpOwotI2VuZGlmCisgICAgbV9jdXJsTXVsdGlIYW5kbGUgPSBDdXJsQ29udGV4dDo6c2luZ2xl
dG9uKCkuY3JlYXRlTXVsdGlIYW5kbGUoKTsKIH0KIAogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjp+
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCkKIHsKICAgICBjdXJsX211bHRpX2NsZWFudXAobV9jdXJs
TXVsdGlIYW5kbGUpOwotICAgIGlmIChtX2Nvb2tpZUphckZpbGVOYW1lKQotICAgICAgICBmYXN0
RnJlZShtX2Nvb2tpZUphckZpbGVOYW1lKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBpZiAobV9s
b2dGaWxlKQotICAgICAgICBmY2xvc2UobV9sb2dGaWxlKTsKLSNlbmRpZgotfQotCi12b2lkIFJl
c291cmNlSGFuZGxlTWFuYWdlcjo6c2V0Q29va2llSmFyRmlsZU5hbWUoY29uc3QgY2hhciogY29v
a2llSmFyRmlsZU5hbWUpCi17Ci0gICAgbV9jb29raWVKYXJGaWxlTmFtZSA9IGZhc3RTdHJEdXAo
Y29va2llSmFyRmlsZU5hbWUpOwotfQotCi1jb25zdCBjaGFyKiBSZXNvdXJjZUhhbmRsZU1hbmFn
ZXI6OmdldENvb2tpZUphckZpbGVOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb29raWVK
YXJGaWxlTmFtZTsKIH0KIAogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyKiBSZXNvdXJjZUhhbmRsZU1h
bmFnZXI6OnNoYXJlZEluc3RhbmNlKCkKQEAgLTI1MCw3ICsxNTUsNyBAQCBzdGF0aWMgdm9pZCBo
YW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSAoQ1VSTCogaGFuZGxlLCBSZXNvdXJjZUhhbmRsZSog
am9iLCBSZXNvdQogICAgIC8vIHdoaWNoIG1lYW5zIHRoZSBSZXNvdXJjZUxvYWRlcidzIHJlc3Bv
bnNlIGRvZXMgbm90IGNvbnRhaW4gdGhlIFVSTC4KICAgICAvLyBSdW4gdGhlIGNvZGUgaGVyZSBm
b3IgbG9jYWwgZmlsZXMgdG8gcmVzb2x2ZSB0aGUgaXNzdWUuCiAgICAgLy8gVE9ETzogU2VlIGlm
IHRoZXJlIGlzIGEgYmV0dGVyIGFwcHJvYWNoIGZvciBoYW5kbGluZyB0aGlzLgotICAgIFVSTCB1
cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChoYW5kbGUpOworICAgIFVSTCB1cmwgPSBD
dXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0RWZmZWN0aXZlVVJMKGhhbmRsZSk7CiAgICAgQVNT
RVJUKHVybC5pc1ZhbGlkKCkpOwogICAgIGQtPm1fcmVzcG9uc2Uuc2V0VVJMKHVybCk7CiAgICAg
IGlmIChkLT5jbGllbnQoKSkKQEAgLTM2MSw3ICsyNjYsNyBAQCBzdGF0aWMgYm9vbCBnZXRQcm90
ZWN0aW9uU3BhY2UoQ1VSTCogaCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFBy
b3RlYwogICAgIGlmIChlcnIgIT0gQ1VSTEVfT0spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFVSTCB1cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChoKTsKKyAgICBVUkwgdXJs
ID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEVmZmVjdGl2ZVVSTChoKTsKICAgICBpZiAo
IXVybC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDUwLDcgKzM1NSw3
IEBAIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwg
c2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhoLCBD
VVJMSU5GT19DT05URU5UX0xFTkdUSF9ET1dOTE9BRCwgJmNvbnRlbnRMZW5ndGgpOwogICAgICAg
ICBkLT5tX3Jlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzdGF0aWNfY2FzdDxsb25n
IGxvbmcgaW50Pihjb250ZW50TGVuZ3RoKSk7CiAKLSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRV
UkwoQ3VybFV0aWxzOjpnZXRFZmZlY3RpdmVVUkwoaCkpOworICAgICAgICBkLT5tX3Jlc3BvbnNl
LnNldFVSTChDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0RWZmZWN0aXZlVVJMKGgpKTsKIAog
ICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBDb2RlKTsKICAgICAg
ICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBl
KGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlw
ZSkpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpOwpAQCAtNjU3LDcgKzU2Miw3IEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2soKQogICAgICAgICAg
ICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlkRmluaXNoTG9hZGluZygq
am9iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFVSTCB1
cmwgPSBDdXJsVXRpbHM6OmdldEVmZmVjdGl2ZVVSTChkLT5tX2hhbmRsZSk7CisgICAgICAgICAg
ICBVUkwgdXJsID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEVmZmVjdGl2ZVVSTChkLT5t
X2hhbmRsZSk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJD
dXJsIEVSUk9SIGZvciB1cmw9JyVzJywgZXJyb3I6ICclcydcbiIsIHVybC5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBjdXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpOwogI2VuZGlm
CkBAIC02NzgsMjUgKzU4Myw2IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9h
ZFRpbWVyQ2FsbGJhY2soKQogICAgICAgICBtX2Rvd25sb2FkVGltZXIuc3RhcnRPbmVTaG90KHBv
bGxUaW1lKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNldFByb3h5SW5mbyhj
b25zdCBTdHJpbmcmIGhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUHJveHlUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCi17Ci0gICAgbV9wcm94
eVR5cGUgPSB0eXBlOwotCi0gICAgaWYgKCFob3N0Lmxlbmd0aCgpKSB7Ci0gICAgICAgIG1fcHJv
eHkgPSBlbXB0eVN0cmluZygpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFN0cmluZyB1c2VyUGFz
czsKLSAgICAgICAgaWYgKHVzZXJuYW1lLmxlbmd0aCgpIHx8IHBhc3N3b3JkLmxlbmd0aCgpKQot
ICAgICAgICAgICAgdXNlclBhc3MgPSB1c2VybmFtZSArICI6IiArIHBhc3N3b3JkICsgIkAiOwot
Ci0gICAgICAgIG1fcHJveHkgPSBTdHJpbmcoImh0dHA6Ly8iKSArIHVzZXJQYXNzICsgaG9zdCAr
ICI6IiArIFN0cmluZzo6bnVtYmVyKHBvcnQpOwotICAgIH0KLX0KLQogdm9pZCBSZXNvdXJjZUhh
bmRsZU1hbmFnZXI6OnJlbW92ZUZyb21DdXJsKFJlc291cmNlSGFuZGxlKiBqb2IpCiB7CiAgICAg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKQEAgLTEwMTks
NiArOTA1LDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmFwcGx5QXV0aGVudGljYXRp
b25Ub1JlcXVlc3QoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwKIAogdm9pZCBSZXNvdXJjZUhhbmRs
ZU1hbmFnZXI6OmluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGpvYikKIHsKKyAgICBD
dXJsQ29udGV4dCYgY29udGV4dCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKTsKKwogICAgIHN0
YXRpYyBjb25zdCBpbnQgYWxsb3dlZFByb3RvY29scyA9IENVUkxQUk9UT19GSUxFIHwgQ1VSTFBS
T1RPX0ZUUCB8IENVUkxQUk9UT19GVFBTIHwgQ1VSTFBST1RPX0hUVFAgfCBDVVJMUFJPVE9fSFRU
UFM7CiAgICAgVVJMIHVybCA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCkudXJsKCk7CiAKQEAgLTEwNDgs
MTAgKzkzNiwxMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRs
ZShSZXNvdXJjZUhhbmRsZSogam9iKQogICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCBlcnJv
ciA9PSBDVVJMRV9PSyk7CiAgICAgfQogI2lmbmRlZiBOREVCVUcKLSAgICBpZiAoZ2V0ZW52KCJE
RUJVR19DVVJMIikpCisgICAgaWYgKGNvbnRleHQuaXNWZXJib3NlKCkpCiAgICAgICAgIGN1cmxf
ZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfVkVSQk9TRSwgMSk7Ci0gICAgaWYgKG1f
bG9nRmlsZSkKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9T
VERFUlIsIG1fbG9nRmlsZSk7CisgICAgaWYgKGNvbnRleHQuZ2V0TG9nRmlsZSgpKQorICAgICAg
ICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1NUREVSUiwgY29udGV4dC5n
ZXRMb2dGaWxlKCkpOwogI2VuZGlmCiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwg
Q1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMUwpOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9o
YW5kbGUsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDJMKTsKQEAgLTEwNjUsMTkgKzk1MywyMCBA
QCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhh
bmRsZSogam9iKQogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfRk9M
TE9XTE9DQVRJT04sIDEpOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxP
UFRfTUFYUkVESVJTLCAxMCk7CiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VS
TE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX1NIQVJFLCBtX2N1cmxTaGFyZUhhbmRsZSk7CisgICAgY3VybF9lYXN5
X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9TSEFSRSwgQ3VybENvbnRleHQ6OnNpbmdsZXRv
bigpLmN1cmxTaGFyZUhhbmRsZSgpKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxl
LCBDVVJMT1BUX0ROU19DQUNIRV9USU1FT1VULCA2MCAqIDUpOyAvLyA1IG1pbnV0ZXMKICAgICBj
dXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BST1RPQ09MUywgYWxsb3dlZFBy
b3RvY29scyk7CiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9SRURJ
Ul9QUk9UT0NPTFMsIGFsbG93ZWRQcm90b2NvbHMpOwogICAgIHNldFNTTENsaWVudENlcnRpZmlj
YXRlKGpvYik7CiAKLSAgICBpZiAoaWdub3JlU1NMRXJyb3JzKQorICAgIGlmIChjb250ZXh0LnNo
b3VsZElnbm9yZVNTTEVycm9ycygpKQogICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFu
ZGxlLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBmYWxzZSk7CiAgICAgZWxzZQogICAgICAgICBz
ZXRTU0xWZXJpZnlPcHRpb25zKGpvYik7CiAKLSAgICBpZiAoIW1fY2VydGlmaWNhdGVQYXRoLmlz
TnVsbCgpKQotICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfQ0FJ
TkZPLCBtX2NlcnRpZmljYXRlUGF0aC5kYXRhKCkpOworICAgIGNvbnN0IGNoYXIqIGNlcnRpZmlj
YXRlID0gY29udGV4dC5nZXRDZXJ0aWZpY2F0ZVBhdGgoKTsKKyAgICBpZiAoY2VydGlmaWNhdGUp
CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfQ0FJTkZPLCBj
ZXJ0aWZpY2F0ZSk7CiAKICAgICAvLyBlbmFibGUgZ3ppcCBhbmQgZGVmbGF0ZSB0aHJvdWdoIEFj
Y2VwdC1FbmNvZGluZzoKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BU
X0VOQ09ESU5HLCAiIik7CkBAIC0xMDg5LDggKzk3OCw5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjppbml0aWFsaXplSGFuZGxlKFJlc291cmNlSGFuZGxlKiBqb2IpCiAgICAgZC0+bV91
cmwgPSBmYXN0U3RyRHVwKHVybFN0cmluZy5sYXRpbjEoKS5kYXRhKCkpOwogICAgIGN1cmxfZWFz
eV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfVVJMLCBkLT5tX3VybCk7CiAKLSAgICBpZiAo
bV9jb29raWVKYXJGaWxlTmFtZSkKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRs
ZSwgQ1VSTE9QVF9DT09LSUVKQVIsIG1fY29va2llSmFyRmlsZU5hbWUpOworICAgIGNvbnN0IGNo
YXIqIGNvb2tpZUphciA9IGNvbnRleHQuZ2V0Q29va2llSmFyRmlsZU5hbWUoKTsKKyAgICBpZiAo
Y29va2llSmFyKQorICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BU
X0NPT0tJRUpBUiwgY29va2llSmFyKTsKIAogICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBoZWFkZXJz
ID0gMDsKICAgICBpZiAoam9iLT5maXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCkuc2l6
ZSgpID4gMCkgewpAQCAtMTE1MCwzNCArMTA0MCwxMyBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFu
YWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9iKQogICAgIGFwcGx5QXV0
aGVudGljYXRpb25Ub1JlcXVlc3Qoam9iLCBqb2ItPmZpcnN0UmVxdWVzdCgpKTsKIAogICAgIC8v
IFNldCBwcm94eSBvcHRpb25zIGlmIHdlIGhhdmUgdGhlbS4KLSAgICBpZiAobV9wcm94eS5sZW5n
dGgoKSkgewotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BS
T1hZLCBtX3Byb3h5LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQt
Pm1faGFuZGxlLCBDVVJMT1BUX1BST1hZVFlQRSwgbV9wcm94eVR5cGUpOworICAgIGF1dG8mIHBy
b3h5ID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnByb3h5SW5mbygpOworICAgIGlmIChwcm94
eS50eXBlICE9IEN1cmxQcm94eVR5cGU6OkludmFsaWQpIHsKKyAgICAgICAgY3VybF9lYXN5X3Nl
dG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QUk9YWSwgcHJveHkudXJsKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUFJPWFlU
WVBFLCBwcm94eS50eXBlKTsKICAgICB9CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
Ojppbml0Q29va2llU2Vzc2lvbigpCi17Ci0gICAgLy8gQ3VybCBzYXZlcyBib3RoIHBlcnNpc3Rl
bnQgY29va2llcywgYW5kIHNlc3Npb24gY29va2llcyB0byB0aGUgY29va2llIGZpbGUuCi0gICAg
Ly8gVGhlIHNlc3Npb24gY29va2llcyBzaG91bGQgYmUgZGVsZXRlZCBiZWZvcmUgc3RhcnRpbmcg
YSBuZXcgc2Vzc2lvbi4KLQotICAgIENVUkwqIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOwotCi0g
ICAgaWYgKCFjdXJsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1
cmwsIENVUkxPUFRfU0hBUkUsIG1fY3VybFNoYXJlSGFuZGxlKTsKLQotICAgIGlmIChtX2Nvb2tp
ZUphckZpbGVOYW1lKSB7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9D
T09LSUVGSUxFLCBtX2Nvb2tpZUphckZpbGVOYW1lKTsKLSAgICAgICAgY3VybF9lYXN5X3NldG9w
dChjdXJsLCBDVVJMT1BUX0NPT0tJRUpBUiwgbV9jb29raWVKYXJGaWxlTmFtZSk7Ci0gICAgfQot
Ci0gICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPT0tJRVNFU1NJT04sIDEpOwot
Ci0gICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7Ci19Ci0KIHZvaWQgUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjpjYW5jZWwoUmVzb3VyY2VIYW5kbGUqIGpvYikKIHsKICAgICBpZiAocmVtb3ZlU2No
ZWR1bGVkSm9iKGpvYikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgKaW5kZXggOTI1ZGJhNDAyOTgu
LmY0MWIwMWY2NTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCkBAIC00NiwyNyArNDYsMTUg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZXNvdXJjZUhhbmRsZU1hbmFnZXIgewog
cHVibGljOgotICAgIGVudW0gUHJveHlUeXBlIHsKLSAgICAgICAgSFRUUCA9IENVUkxQUk9YWV9I
VFRQLAotICAgICAgICBTb2NrczQgPSBDVVJMUFJPWFlfU09DS1M0LAotICAgICAgICBTb2NrczRB
ID0gQ1VSTFBST1hZX1NPQ0tTNEEsCi0gICAgICAgIFNvY2tzNSA9IENVUkxQUk9YWV9TT0NLUzUs
Ci0gICAgICAgIFNvY2tzNUhvc3RuYW1lID0gQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRQotICAg
IH07CiAgICAgc3RhdGljIFJlc291cmNlSGFuZGxlTWFuYWdlciogc2hhcmVkSW5zdGFuY2UoKTsK
ICAgICB2b2lkIGFkZChSZXNvdXJjZUhhbmRsZSopOwogICAgIHZvaWQgY2FuY2VsKFJlc291cmNl
SGFuZGxlKik7CiAKLSAgICB2b2lkIHNldENvb2tpZUphckZpbGVOYW1lKGNvbnN0IGNoYXIqIGNv
b2tpZUphckZpbGVOYW1lKTsKLSAgICBjb25zdCBjaGFyKiBnZXRDb29raWVKYXJGaWxlTmFtZSgp
IGNvbnN0OwotCiAgICAgdm9pZCBkaXNwYXRjaFN5bmNocm9ub3VzSm9iKFJlc291cmNlSGFuZGxl
Kik7CiAKICAgICB2b2lkIHNldHVwUE9TVChSZXNvdXJjZUhhbmRsZSosIHN0cnVjdCBjdXJsX3Ns
aXN0KiopOwogICAgIHZvaWQgc2V0dXBQVVQoUmVzb3VyY2VIYW5kbGUqLCBzdHJ1Y3QgY3VybF9z
bGlzdCoqKTsKIAotICAgIHZvaWQgc2V0UHJveHlJbmZvKGNvbnN0IFN0cmluZyYgaG9zdCA9IGVt
cHR5U3RyaW5nKCksIHVuc2lnbmVkIGxvbmcgcG9ydCA9IDAsIFByb3h5VHlwZSA9IEhUVFAsIGNv
bnN0IFN0cmluZyYgdXNlcm5hbWUgPSBlbXB0eVN0cmluZygpLCBjb25zdCBTdHJpbmcmIHBhc3N3
b3JkID0gZW1wdHlTdHJpbmcoKSk7Ci0KIHByaXZhdGU6CiAgICAgUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyKCk7CiAgICAgflJlc291cmNlSGFuZGxlTWFuYWdlcigpOwpAQCAtNzksMjMgKzY3LDExIEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VIYW5kbGUqKTsK
IAotICAgIHZvaWQgaW5pdENvb2tpZVNlc3Npb24oKTsKLQogICAgIFRpbWVyIG1fZG93bmxvYWRU
aW1lcjsKICAgICBDVVJMTSogbV9jdXJsTXVsdGlIYW5kbGU7Ci0gICAgQ1VSTFNIKiBtX2N1cmxT
aGFyZUhhbmRsZTsKLSAgICBjaGFyKiBtX2Nvb2tpZUphckZpbGVOYW1lOwogICAgIGNoYXIgbV9j
dXJsRXJyb3JCdWZmZXJbQ1VSTF9FUlJPUl9TSVpFXTsKICAgICBWZWN0b3I8UmVzb3VyY2VIYW5k
bGUqPiBtX3Jlc291cmNlSGFuZGxlTGlzdDsKLSAgICBjb25zdCBDU3RyaW5nIG1fY2VydGlmaWNh
dGVQYXRoOwogICAgIGludCBtX3J1bm5pbmdKb2JzOwotICAgIAotICAgIFN0cmluZyBtX3Byb3h5
OwotICAgIFByb3h5VHlwZSBtX3Byb3h5VHlwZTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBGSUxF
KiBtX2xvZ0ZpbGU7Ci0jZW5kaWYKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314095</attachid>
            <date>2017-06-28 19:52:29 -0700</date>
            <delta_ts>2017-06-29 11:07:36 -0700</delta_ts>
            <desc>Fix style again</desc>
            <filename>173629-6.diff</filename>
            <type>text/plain</type>
            <size>41014</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3OTNkMzllYmY2Mi4uOGI5Y2VjNzJmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NyBAQAorMjAxNy0wNi0yOCAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFNlcGFyYXRlIGdsb2JhbCBjdXJsIHNldHRpbmdzIGZy
b20gUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIGFzIEN1cmxDb250ZXh0IGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM2MjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8u
Y21ha2U6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29va2llc0ZvclNlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2VydGlmaWNhdGVQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUphclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybENvbnRleHQ6OkN1cmxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0
Ojp+Q3VybENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OmluaXRDb29r
aWVTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpQcm94eUluZm86OnVy
bCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6c2V0UHJveHlJbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpnZXRFZmZlY3RpdmVVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybENvbnRleHQ6OmNyZWF0ZU11bHRpSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxDb250ZXh0OjptdXRleEZvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6
bG9jayk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6dW5sb2NrKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDdXJsQ29udGV4dDo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxD
b250ZXh0OjpjdXJsU2hhcmVIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6
OmdldENvb2tpZUphckZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0Ojpz
ZXRDb29raWVKYXJGaWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6Z2V0
Q2VydGlmaWNhdGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpzaG91bGRJ
Z25vcmVTU0xFcnJvcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnByb3h5SW5m
byk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6c2V0UHJveHlJbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpnZXRMb2dGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxDb250ZXh0Ojppc1ZlcmJvc2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsRG93bmxvYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjppbml0
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZDo6c3RhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybERvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25s
b2FkOjpkaWRSZWNlaXZlSGVhZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybERvd25sb2FkLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JN
YW5hZ2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsTWFuYWdlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6
Q3VybEpvYk1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6On5DdXJs
Sm9iTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6YWRkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEpvYk1hbmFnZXI6OmdldEFjdGl2ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxKb2JNYW5hZ2VyOjpnZXRQZW5kaW5nQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpv
Yk1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpv
Yk1hbmFnZXI6OnN0b3BUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6
OnN0b3BUaHJlYWRJZklkbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnVw
ZGF0ZUhhbmRsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OmFkZFRv
Q3VybCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OndvcmtlclRocmVhZCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1hbmFnZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24pOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVN
YW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKToK
KyAgICAgICAgKFdlYkNvcmU6OmdldFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFn
ZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2VydGlm
aWNhdGVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUphclBhdGgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzZXRDb29r
aWVKYXJGaWxlTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZU1hbmFnZXI6OmdldENvb2tpZUphckZpbGVOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2V0UHJveHlJbmZvKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdENvb2tpZVNlc3Npb24pOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1h
bmFnZXIuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisKIDIwMTctMDYtMjggIERldmluIFJvdXNz
byAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEluc3RydW1l
bnQgYWN0aXZlIHBpeGVsIG1lbW9yeSB1c2VkIGJ5IGNhbnZhc2VzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1XaW5DYWlyby5jbWFrZQppbmRleCA1OTc3MDU5NzdlZS4uODM3NTgyZDMwMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQpAQCAtMzMsOCArMzMsOSBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3JlZGVudGlhbFN0
b3JhZ2VDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVFbnRyeS5j
cHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5jcHAKKyAgICBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1h
bmFnZXIuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9ETlNDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9Gb3JtRGF0YVN0cmVhbUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L011bHRpcGFydEhhbmRsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAppbmRleCA2YjZlYzk5NzBiMS4uMWFkMzAx
NmU5YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
b29raWVKYXJDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ29va2llSmFyQ3VybC5jcHAKQEAgLTIyLDkgKzIyLDggQEAKICNpZiBVU0UoQ1VSTCkKIAog
I2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkN1cmxNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
Q3VybENvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlTWFuYWdlci5oIgogI2luY2x1ZGUgIlVSTC5oIgogCiAjaW5jbHVkZSA8d3Rm
L0RhdGVNYXRoLmg+CkBAIC0yNDMsMTMgKzI0MiwxNSBAQCBzdGF0aWMgU3RyaW5nIGdldE5ldHNj
YXBlQ29va2llRm9ybWF0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogCiB2
b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0
IFVSTCYsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogeworICAgIGNvbnN0
IEN1cmxDb250ZXh0JiBjb250ZXh0ID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpOworCiAgICAg
Q1VSTCogY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CiAKICAgICBpZiAoIWN1cmwpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGNvbnN0IGNoYXIqIGNvb2tpZUphckZpbGVOYW1lID0gUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpLT5nZXRDb29raWVKYXJGaWxlTmFtZSgpOwot
ICAgIENVUkxTSCogY3VybHNoID0gQ3VybE1hbmFnZXI6OnNpbmdsZXRvbigpLmdldEN1cmxTaGFy
ZUhhbmRsZSgpOworICAgIGNvbnN0IGNoYXIqIGNvb2tpZUphckZpbGVOYW1lID0gY29udGV4dC5n
ZXRDb29raWVKYXJGaWxlTmFtZSgpOworICAgIENVUkxTSCogY3VybHNoID0gY29udGV4dC5jdXJs
U2hhcmVIYW5kbGUoKTsKIAogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09L
SUVKQVIsIGNvb2tpZUphckZpbGVOYW1lKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENV
UkxPUFRfU0hBUkUsIGN1cmxzaCk7CkBAIC0yNzgsNyArMjc5LDcgQEAgc3RhdGljIFN0cmluZyBj
b29raWVzRm9yU2Vzc2lvbihjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBVUkwm
LCBjb25zdAogICAgIGlmICghY3VybCkKICAgICAgICAgcmV0dXJuIGNvb2tpZXM7CiAKLSAgICBD
VVJMU0gqIGN1cmxzaCA9IEN1cmxNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRDdXJsU2hhcmVIYW5k
bGUoKTsKKyAgICBDVVJMU0gqIGN1cmxzaCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5jdXJs
U2hhcmVIYW5kbGUoKTsKIAogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TSEFS
RSwgY3VybHNoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmVlZjg1ZGRiYjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcApAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQ1VSTCkKKyNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgorCisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgIldlYkNvcmVCdW5kbGVXaW4uaCIKKyNpbmNsdWRl
IDxzaGxvYmouaD4KKyNpbmNsdWRlIDxzaGx3YXBpLmg+CisjZW5kaWYKKworI2lmIFVTRShDRikK
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIENTdHJpbmcgY2VydGlmaWNh
dGVQYXRoKCkKK3sKKyAgICBjaGFyKiBlbnZQYXRoID0gZ2V0ZW52KCJDVVJMX0NBX0JVTkRMRV9Q
QVRIIik7CisgICAgaWYgKGVudlBhdGgpCisgICAgICAgIHJldHVybiBlbnZQYXRoOworCisjaWYg
VVNFKENGKQorICAgIENGQnVuZGxlUmVmIHdlYktpdEJ1bmRsZVJlZiA9IHdlYktpdEJ1bmRsZSgp
OworICAgIGlmICh3ZWJLaXRCdW5kbGVSZWYpIHsKKyAgICAgICAgUmV0YWluUHRyPENGVVJMUmVm
PiBjZXJ0VVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTCh3ZWJLaXRCdW5k
bGVSZWYsIENGU1RSKCJjYWNlcnQiKSwgQ0ZTVFIoInBlbSIpLCBDRlNUUigiY2VydGlmaWNhdGVz
IikpKTsKKyAgICAgICAgaWYgKGNlcnRVUkxSZWYpIHsKKyAgICAgICAgICAgIGNoYXIgcGF0aFtN
QVhfUEFUSF07CisgICAgICAgICAgICBDRlVSTEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihj
ZXJ0VVJMUmVmLmdldCgpLCBmYWxzZSwgcmVpbnRlcnByZXRfY2FzdDxVSW50OCo+KHBhdGgpLCBN
QVhfUEFUSCk7CisgICAgICAgICAgICByZXR1cm4gcGF0aDsKKyAgICAgICAgfQorICAgIH0KKyNl
bmRpZgorCisgICAgcmV0dXJuIENTdHJpbmcoKTsKK30KKworc3RhdGljIENTdHJpbmcgY29va2ll
SmFyUGF0aCgpCit7CisgICAgY2hhciogY29va2llSmFyUGF0aCA9IGdldGVudigiQ1VSTF9DT09L
SUVfSkFSX1BBVEgiKTsKKyAgICBpZiAoY29va2llSmFyUGF0aCkKKyAgICAgICAgcmV0dXJuIGNv
b2tpZUphclBhdGg7CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIGNoYXIgZXhlY3V0YWJsZVBhdGhb
TUFYX1BBVEhdOworICAgIGNoYXIgYXBwRGF0YURpcmVjdG9yeVtNQVhfUEFUSF07CisgICAgY2hh
ciBjb29raWVKYXJGdWxsUGF0aFtNQVhfUEFUSF07CisgICAgY2hhciBjb29raWVKYXJEaXJlY3Rv
cnlbTUFYX1BBVEhdOworCisgICAgaWYgKEZBSUxFRCg6OlNIR2V0Rm9sZGVyUGF0aEEoMCwgQ1NJ
RExfTE9DQUxfQVBQREFUQSB8IENTSURMX0ZMQUdfQ1JFQVRFLCAwLCAwLCBhcHBEYXRhRGlyZWN0
b3J5KSkKKyAgICAgICAgfHwgRkFJTEVEKDo6R2V0TW9kdWxlRmlsZU5hbWVBKDAsIGV4ZWN1dGFi
bGVQYXRoLCBNQVhfUEFUSCkpKQorICAgICAgICByZXR1cm4gImNvb2tpZXMuZGF0IjsKKworICAg
IDo6UGF0aFJlbW92ZUV4dGVuc2lvbkEoZXhlY3V0YWJsZVBhdGgpOworICAgIExQU1RSIGV4ZWN1
dGFibGVOYW1lID0gOjpQYXRoRmluZEZpbGVOYW1lQShleGVjdXRhYmxlUGF0aCk7CisgICAgc3By
aW50Zl9zKGNvb2tpZUphckRpcmVjdG9yeSwgTUFYX1BBVEgsICIlcy8lcyIsIGFwcERhdGFEaXJl
Y3RvcnksIGV4ZWN1dGFibGVOYW1lKTsKKyAgICBzcHJpbnRmX3MoY29va2llSmFyRnVsbFBhdGgs
IE1BWF9QQVRILCAiJXMvY29va2llcy5kYXQiLCBjb29raWVKYXJEaXJlY3RvcnkpOworCisgICAg
aWYgKDo6U0hDcmVhdGVEaXJlY3RvcnlFeEEoMCwgY29va2llSmFyRGlyZWN0b3J5LCAwKSAhPSBF
UlJPUl9TVUNDRVNTCisgICAgICAgICYmIDo6R2V0TGFzdEVycm9yKCkgIT0gRVJST1JfRklMRV9F
WElTVFMKKyAgICAgICAgJiYgOjpHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9BTFJFQURZX0VYSVNU
UykKKyAgICAgICAgcmV0dXJuICJjb29raWVzLmRhdCI7CisKKyAgICByZXR1cm4gY29va2llSmFy
RnVsbFBhdGg7CisjZWxzZQorICAgIHJldHVybiAiY29va2llcy5kYXQiOworI2VuZGlmCit9CisK
Ky8vIEN1cmxDb250ZXh0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3VybENvbnRleHQ6OkN1cmxDb250ZXh0KCkK
KyAgICA6IG1fY29va2llSmFyRmlsZU5hbWUoY29va2llSmFyUGF0aCgpKQorICAgICwgbV9jZXJ0
aWZpY2F0ZVBhdGgoY2VydGlmaWNhdGVQYXRoKCkpCit7CisgICAgY3VybF9nbG9iYWxfaW5pdChD
VVJMX0dMT0JBTF9BTEwpOworICAgIG1fY3VybFNoYXJlSGFuZGxlID0gY3VybF9zaGFyZV9pbml0
KCk7CisgICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9T
SEFSRSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFKTsKKyAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1
cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX1NIQVJFLCBDVVJMX0xPQ0tfREFUQV9ETlMpOworICAg
IGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfTE9DS0ZVTkMs
IGxvY2spOworICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hP
UFRfVU5MT0NLRlVOQywgdW5sb2NrKTsKKworICAgIGluaXRDb29raWVTZXNzaW9uKCk7CisKKyAg
ICBtX2lnbm9yZVNTTEVycm9ycyA9IGdldGVudigiV0VCS0lUX0lHTk9SRV9TU0xfRVJST1JTIik7
CisKKyNpZm5kZWYgTkRFQlVHCisgICAgbV92ZXJib3NlID0gZ2V0ZW52KCJERUJVR19DVVJMIik7
CisKKyAgICBjaGFyKiBsb2dGaWxlID0gZ2V0ZW52KCJDVVJMX0xPR19GSUxFIik7CisgICAgaWYg
KGxvZ0ZpbGUpCisgICAgICAgIG1fbG9nRmlsZSA9IGZvcGVuKGxvZ0ZpbGUsICJhIik7CisjZW5k
aWYKK30KKworQ3VybENvbnRleHQ6On5DdXJsQ29udGV4dCgpCit7CisgICAgY3VybF9zaGFyZV9j
bGVhbnVwKG1fY3VybFNoYXJlSGFuZGxlKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisK
KyNpZm5kZWYgTkRFQlVHCisgICAgaWYgKG1fbG9nRmlsZSkKKyAgICAgICAgZmNsb3NlKG1fbG9n
RmlsZSk7CisjZW5kaWYKK30KKworLy8gQ29va2llID09PT09PT09PT09PT09PT09PT09PT09CisK
K3ZvaWQgQ3VybENvbnRleHQ6OmluaXRDb29raWVTZXNzaW9uKCkKK3sKKyAgICAvLyBDdXJsIHNh
dmVzIGJvdGggcGVyc2lzdGVudCBjb29raWVzLCBhbmQgc2Vzc2lvbiBjb29raWVzIHRvIHRoZSBj
b29raWUgZmlsZS4KKyAgICAvLyBUaGUgc2Vzc2lvbiBjb29raWVzIHNob3VsZCBiZSBkZWxldGVk
IGJlZm9yZSBzdGFydGluZyBhIG5ldyBzZXNzaW9uLgorCisgICAgQ1VSTCogY3VybCA9IGN1cmxf
ZWFzeV9pbml0KCk7CisKKyAgICBpZiAoIWN1cmwpCisgICAgICAgIHJldHVybjsKKworICAgIGN1
cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TSEFSRSwgY3VybFNoYXJlSGFuZGxlKCkpOwor
CisgICAgaWYgKCFtX2Nvb2tpZUphckZpbGVOYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGN1cmxf
ZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09LSUVGSUxFLCBtX2Nvb2tpZUphckZpbGVOYW1l
KTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPT0tJRUpBUiwgbV9j
b29raWVKYXJGaWxlTmFtZSk7CisgICAgfQorCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBD
VVJMT1BUX0NPT0tJRVNFU1NJT04sIDEpOworCisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7
Cit9CisKKy8vIFByb3h5ID09PT09PT09PT09PT09PT09PT09PT09CisKK2NvbnN0IFN0cmluZyBD
dXJsQ29udGV4dDo6UHJveHlJbmZvOjp1cmwoKSBjb25zdAoreworICAgIFN0cmluZyB1c2VyUGFz
czsKKyAgICBpZiAodXNlcm5hbWUubGVuZ3RoKCkgfHwgcGFzc3dvcmQubGVuZ3RoKCkpCisgICAg
ICAgIHVzZXJQYXNzID0gdXNlcm5hbWUgKyAiOiIgKyBwYXNzd29yZCArICJAIjsKKworICAgIHJl
dHVybiBTdHJpbmcoImh0dHA6Ly8iKSArIHVzZXJQYXNzICsgaG9zdCArICI6IiArIFN0cmluZzo6
bnVtYmVyKHBvcnQpOworfQorCit2b2lkIEN1cmxDb250ZXh0OjpzZXRQcm94eUluZm8oY29uc3Qg
U3RyaW5nJiBob3N0LAorICAgIHVuc2lnbmVkIGxvbmcgcG9ydCwKKyAgICBDdXJsUHJveHlUeXBl
IHR5cGUsCisgICAgY29uc3QgU3RyaW5nJiB1c2VybmFtZSwKKyAgICBjb25zdCBTdHJpbmcmIHBh
c3N3b3JkKQoreworICAgIFByb3h5SW5mbyBpbmZvOworCisgICAgaW5mby5ob3N0ID0gaG9zdDsK
KyAgICBpbmZvLnBvcnQgPSBwb3J0OworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby51
c2VybmFtZSA9IHVzZXJuYW1lOworICAgIGluZm8ucGFzc3dvcmQgPSBwYXNzd29yZDsKKworICAg
IHNldFByb3h5SW5mbyhpbmZvKTsKK30KKworLy8gQ3VybCBVdGlsaXRpZXMgPT09PT09PT09PT09
PT09PT09PT09PT0KKworVVJMIEN1cmxDb250ZXh0OjpnZXRFZmZlY3RpdmVVUkwoQ1VSTCogaGFu
ZGxlKQoreworICAgIGNvbnN0IGNoYXIqIHVybDsKKyAgICBDVVJMY29kZSBlcnIgPSBjdXJsX2Vh
c3lfZ2V0aW5mbyhoYW5kbGUsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZ1cmwpOworICAgIGlm
IChDVVJMRV9PSyAhPSBlcnIpCisgICAgICAgIHJldHVybiBVUkwoKTsKKyAgICByZXR1cm4gVVJM
KFVSTCgpLCB1cmwpOworfQorCitDVVJMTSogQ3VybENvbnRleHQ6OmNyZWF0ZU11bHRpSGFuZGxl
KCkKK3sKKyAgICByZXR1cm4gY3VybF9tdWx0aV9pbml0KCk7Cit9CisKKy8vIFNoYXJlZCBSZXNv
dXJjZSBtYW5hZ2VtZW50ID09PT09PT09PT09PT09PT09PT09PT09CisKK0xvY2sqIEN1cmxDb250
ZXh0OjptdXRleEZvcihjdXJsX2xvY2tfZGF0YSBkYXRhKQoreworICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChMb2NrLCBjb29raWVNdXRleCwgKCkpOworICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBkbnNNdXRleCwgKCkpOworICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChMb2NrLCBzaGFyZU11dGV4LCAoKSk7CisKKyAgICBzd2l0Y2gg
KGRhdGEpIHsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX0NPT0tJRToKKyAgICAgICAgcmV0dXJu
ICZjb29raWVNdXRleDsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX0ROUzoKKyAgICAgICAgcmV0
dXJuICZkbnNNdXRleDsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX1NIQVJFOgorICAgICAgICBy
ZXR1cm4gJnNoYXJlTXV0ZXg7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworLy8gbGliY3VybCBk
b2VzIG5vdCBpbXBsZW1lbnQgaXRzIG93biB0aHJlYWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2
ZXMuCisvLyB0aGVzZSB0d28gZnVuY3Rpb25zIHByb3ZpZGUgbXV0ZXhlcyBmb3IgY29va2llcywg
YW5kIGZvciB0aGUgZ2xvYmFsIEROUworLy8gY2FjaGUuCit2b2lkIEN1cmxDb250ZXh0Ojpsb2Nr
KENVUkwqIC8qIGhhbmRsZSAqLywgY3VybF9sb2NrX2RhdGEgZGF0YSwgY3VybF9sb2NrX2FjY2Vz
cyAvKiBhY2Nlc3MgKi8sIHZvaWQqIC8qIHVzZXJQdHIgKi8pCit7CisgICAgaWYgKExvY2sqIG11
dGV4ID0gbXV0ZXhGb3IoZGF0YSkpCisgICAgICAgIG11dGV4LT5sb2NrKCk7Cit9CisKK3ZvaWQg
Q3VybENvbnRleHQ6OnVubG9jayhDVVJMKiAvKiBoYW5kbGUgKi8sIGN1cmxfbG9ja19kYXRhIGRh
dGEsIHZvaWQqIC8qIHVzZXJQdHIgKi8pCit7CisgICAgaWYgKExvY2sqIG11dGV4ID0gbXV0ZXhG
b3IoZGF0YSkpCisgICAgICAgIG11dGV4LT51bmxvY2soKTsKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE5ODgyMjFkNjg5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxD
b250ZXh0LmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJVUkwuaCIKKwor
I2luY2x1ZGUgPFdURi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5k
b3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9j
dXJsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBDdXJsUHJveHlUeXBl
IHsKKyAgICBJbnZhbGlkID0gLTEsCisgICAgSFRUUCA9IENVUkxQUk9YWV9IVFRQLAorICAgIFNv
Y2tzNCA9IENVUkxQUk9YWV9TT0NLUzQsCisgICAgU29ja3M0QSA9IENVUkxQUk9YWV9TT0NLUzRB
LAorICAgIFNvY2tzNSA9IENVUkxQUk9YWV9TT0NLUzUsCisgICAgU29ja3M1SG9zdG5hbWUgPSBD
VVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FCit9OworCitjbGFzcyBDdXJsQ29udGV4dCB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VybENvbnRleHQpOworCitwdWJsaWM6CisgICAgc3RydWN0
IFByb3h5SW5mbyB7CisgICAgICAgIFN0cmluZyBob3N0OworICAgICAgICB1bnNpZ25lZCBsb25n
IHBvcnQ7CisgICAgICAgIEN1cmxQcm94eVR5cGUgdHlwZSB7IEN1cmxQcm94eVR5cGU6OkludmFs
aWQgfTsKKyAgICAgICAgU3RyaW5nIHVzZXJuYW1lOworICAgICAgICBTdHJpbmcgcGFzc3dvcmQ7
CisKKyAgICAgICAgY29uc3QgU3RyaW5nIHVybCgpIGNvbnN0OworICAgIH07CisKKyAgICBzdGF0
aWMgQ3VybENvbnRleHQmIHNpbmdsZXRvbigpCisgICAgeworICAgICAgICBzdGF0aWMgQ3VybENv
bnRleHQgc2hhcmVkOworICAgICAgICByZXR1cm4gc2hhcmVkOworICAgIH0KKworICAgIH5DdXJs
Q29udGV4dCgpOworCisgICAgQ1VSTFNIKiBjdXJsU2hhcmVIYW5kbGUoKSBjb25zdCB7IHJldHVy
biBtX2N1cmxTaGFyZUhhbmRsZTsgfQorCisgICAgQ1VSTE0qIGNyZWF0ZU11bHRpSGFuZGxlKCk7
CisKKyAgICAvLyBDb29raWUKKyAgICBjb25zdCBjaGFyKiBnZXRDb29raWVKYXJGaWxlTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29va2llSmFyRmlsZU5hbWUuZGF0YSgpOyB9CisgICAgdm9pZCBz
ZXRDb29raWVKYXJGaWxlTmFtZShjb25zdCBjaGFyKiBjb29raWVKYXJGaWxlTmFtZSkgeyBtX2Nv
b2tpZUphckZpbGVOYW1lID0gQ1N0cmluZyhjb29raWVKYXJGaWxlTmFtZSk7IH0KKworICAgIC8v
IENlcnRpZmljYXRlCisgICAgY29uc3QgY2hhciogZ2V0Q2VydGlmaWNhdGVQYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9jZXJ0aWZpY2F0ZVBhdGguZGF0YSgpOyB9CisgICAgYm9vbCBzaG91bGRJZ25v
cmVTU0xFcnJvcnMoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZVNTTEVycm9yczsgfQorCisgICAg
Ly8gUHJveHkKKyAgICBjb25zdCBQcm94eUluZm8mIHByb3h5SW5mbygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJveHk7IH0KKyAgICB2b2lkIHNldFByb3h5SW5mbyhjb25zdCBQcm94eUluZm8mIGluZm8p
IHsgbV9wcm94eSA9IGluZm87ICB9CisgICAgdm9pZCBzZXRQcm94eUluZm8oY29uc3QgU3RyaW5n
JiBob3N0ID0gZW1wdHlTdHJpbmcoKSwgdW5zaWduZWQgbG9uZyBwb3J0ID0gMCwgQ3VybFByb3h5
VHlwZSA9IEN1cmxQcm94eVR5cGU6OkhUVFAsIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUgPSBlbXB0
eVN0cmluZygpLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkID0gZW1wdHlTdHJpbmcoKSk7CisKKyAg
ICAvLyBVdGlsaXRpZXMKKyAgICBVUkwgZ2V0RWZmZWN0aXZlVVJMKENVUkwqIGhhbmRsZSk7CisK
KyNpZm5kZWYgTkRFQlVHCisgICAgRklMRSogZ2V0TG9nRmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9nRmlsZTsgfQorICAgIGJvb2wgaXNWZXJib3NlKCkgY29uc3QgeyByZXR1cm4gbV92ZXJib3Nl
OyB9CisjZW5kaWYKKworcHJpdmF0ZToKKworICAgIENVUkxTSCogbV9jdXJsU2hhcmVIYW5kbGUg
eyBudWxscHRyIH07CisKKyAgICBDU3RyaW5nIG1fY29va2llSmFyRmlsZU5hbWU7CisKKyAgICBD
U3RyaW5nIG1fY2VydGlmaWNhdGVQYXRoOworICAgIGJvb2wgbV9pZ25vcmVTU0xFcnJvcnMgeyBm
YWxzZSB9OworCisgICAgUHJveHlJbmZvIG1fcHJveHk7CisKKyAgICBDdXJsQ29udGV4dCgpOwor
ICAgIHZvaWQgaW5pdENvb2tpZVNlc3Npb24oKTsKKworICAgIHN0YXRpYyB2b2lkIGxvY2soQ1VS
TCosIGN1cmxfbG9ja19kYXRhLCBjdXJsX2xvY2tfYWNjZXNzLCB2b2lkKik7CisgICAgc3RhdGlj
IHZvaWQgdW5sb2NrKENVUkwqLCBjdXJsX2xvY2tfZGF0YSwgdm9pZCopOworICAgIHN0YXRpYyBM
b2NrKiBtdXRleEZvcihjdXJsX2xvY2tfZGF0YSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgRklM
RSogbV9sb2dGaWxlIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV92ZXJib3NlIHsgZmFsc2UgfTsK
KyNlbmRpZgorfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAppbmRleCA5ODk1MDVlMzMwZi4uZDMzMmNmNTcyMGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93
bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
RG93bmxvYWQuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAKICNpbmNsdWRlICJDdXJsRG93bmxvYWQu
aCIKIAorI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCisKICNpbmNsdWRlICJIVFRQSGVhZGVyTmFt
ZXMuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgpAQCAtODUsNyArODcsNyBAQCB2b2lkIEN1cmxEb3dubG9hZDo6aW5pdChDdXJsRG93bmxv
YWRMaXN0ZW5lciogbGlzdGVuZXIsIGNvbnN0IFVSTCYgdXJsKQogICAgIGlmIChjZXJ0UGF0aCkK
ICAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2N1cmxIYW5kbGUsIENVUkxPUFRfQ0FJTkZPLCBj
ZXJ0UGF0aCk7CiAKLSAgICBDVVJMU0gqIGN1cmxzaCA9IEN1cmxNYW5hZ2VyOjpzaW5nbGV0b24o
KS5nZXRDdXJsU2hhcmVIYW5kbGUoKTsKKyAgICBDVVJMU0gqIGN1cmxzaCA9IEN1cmxDb250ZXh0
OjpzaW5nbGV0b24oKS5jdXJsU2hhcmVIYW5kbGUoKTsKICAgICBpZiAoY3VybHNoKQogICAgICAg
ICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9TSEFSRSwgY3VybHNoKTsK
IApAQCAtMTA2LDEzICsxMDgsMTMgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OmluaXQoQ3VybERvd25s
b2FkTGlzdGVuZXIqIGxpc3RlbmVyLCBSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFIKIAogYm9vbCBD
dXJsRG93bmxvYWQ6OnN0YXJ0KCkKIHsKLSAgICByZWYoKTsgLy8gQ3VybERvd25sb2FkTWFuYWdl
cjo6ZG93bmxvYWRUaHJlYWQgd2lsbCBjYWxsIGRlcmVmIHdoZW4gdGhlIGRvd25sb2FkIGhhcyBm
aW5pc2hlZC4KLSAgICByZXR1cm4gQ3VybE1hbmFnZXI6OnNpbmdsZXRvbigpLmFkZChtX2N1cmxI
YW5kbGUpOworICAgIHJlZigpOyAvLyBDdXJsSm9iTWFuYWdlciB3aWxsIGNhbGwgZGVyZWYgd2hl
biB0aGUgZG93bmxvYWQgaGFzIGZpbmlzaGVkLgorICAgIHJldHVybiBDdXJsSm9iTWFuYWdlcjo6
c2luZ2xldG9uKCkuYWRkKG1fY3VybEhhbmRsZSk7CiB9CiAKIGJvb2wgQ3VybERvd25sb2FkOjpj
YW5jZWwoKQogewotICAgIHJldHVybiBDdXJsTWFuYWdlcjo6c2luZ2xldG9uKCkucmVtb3ZlKG1f
Y3VybEhhbmRsZSk7CisgICAgcmV0dXJuIEN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1v
dmUobV9jdXJsSGFuZGxlKTsKIH0KIAogU3RyaW5nIEN1cmxEb3dubG9hZDo6Z2V0VGVtcFBhdGgo
KSBjb25zdApAQCAtMjAzLDcgKzIwNSw3IEBAIHZvaWQgQ3VybERvd25sb2FkOjpkaWRSZWNlaXZl
SGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyKQogICAgICAgICBVTlVTRURfUEFSQU0oZXJyKTsK
IAogICAgICAgICBpZiAoaHR0cENvZGUgPj0gMjAwICYmIGh0dHBDb2RlIDwgMzAwKSB7Ci0gICAg
ICAgICAgICBVUkwgdXJsID0gQ3VybFV0aWxzOjpnZXRFZmZlY3RpdmVVUkwobV9jdXJsSGFuZGxl
KTsKKyAgICAgICAgICAgIFVSTCB1cmwgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0RWZm
ZWN0aXZlVVJMKG1fY3VybEhhbmRsZSk7CiAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0
aGlzLCB1cmwgPSB1cmwuaXNvbGF0ZWRDb3B5KCksIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKV0gewogICAgICAgICAgICAgICAgIG1fcmVzcG9uc2Uuc2V0VVJMKHVybCk7CiAgICAgICAg
ICAgICAgICAgbV9yZXNwb25zZS5zZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFU
eXBlKG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlw
ZSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
RG93bmxvYWQuaAppbmRleCAzMTJlNDcwMDI3Ni4uZjkwMzA2YzZmMDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKQEAgLTM2
LDcgKzM2LDcgQEAKICNpbmNsdWRlIDx3aW5zb2NrMi5oPgogI2VuZGlmCiAKLSNpbmNsdWRlICJD
dXJsTWFuYWdlci5oIgorI2luY2x1ZGUgIkN1cmxKb2JNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsSm9iTWFuYWdlci5jcHAKc2ltaWxhcml0eSBpbmRleCA2NSUKcmVuYW1lIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmNwcApyZW5hbWUg
dG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNw
cAppbmRleCAwNTlmZmUyNjg3Ny4uM2QwMGVlMzc4NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcApAQCAtMjcsNyAr
MjcsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgVVNFKENVUkwpCi0jaW5jbHVkZSAi
Q3VybE1hbmFnZXIuaCIKKyNpbmNsdWRlICJDdXJsSm9iTWFuYWdlci5oIgorCisjaW5jbHVkZSAi
Q3VybENvbnRleHQuaCIKIAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMzYsMzcgKzM4LDE4IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEN1cmxTaGFyZWRSZXNvdXJj
ZXMgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGxvY2soQ1VSTCosIGN1cmxfbG9ja19kYXRh
LCBjdXJsX2xvY2tfYWNjZXNzLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgdW5sb2NrKENVUkwq
LCBjdXJsX2xvY2tfZGF0YSwgdm9pZCopOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBMb2NrKiBt
dXRleEZvcihjdXJsX2xvY2tfZGF0YSk7Ci19OwotCi0vLyBDdXJsRG93bmxvYWRNYW5hZ2VyIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotQ3VybE1hbmFnZXI6OkN1cmxNYW5hZ2VyKCkKK0N1cmxKb2JNYW5hZ2VyOjpD
dXJsSm9iTWFuYWdlcigpCiB7Ci0gICAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwp
OwotICAgIG1fY3VybE11bHRpSGFuZGxlID0gY3VybF9tdWx0aV9pbml0KCk7Ci0gICAgbV9jdXJs
U2hhcmVIYW5kbGUgPSBjdXJsX3NoYXJlX2luaXQoKTsKLSAgICBjdXJsX3NoYXJlX3NldG9wdCht
X2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX1NIQVJFLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUp
OwotICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hB
UkUsIENVUkxfTE9DS19EQVRBX0ROUyk7Ci0gICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hh
cmVIYW5kbGUsIENVUkxTSE9QVF9MT0NLRlVOQywgQ3VybFNoYXJlZFJlc291cmNlczo6bG9jayk7
Ci0gICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5kbGUsIENVUkxTSE9QVF9VTkxP
Q0tGVU5DLCBDdXJsU2hhcmVkUmVzb3VyY2VzOjp1bmxvY2spOworICAgIG1fY3VybE11bHRpSGFu
ZGxlID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmNyZWF0ZU11bHRpSGFuZGxlKCk7CiB9CiAK
LUN1cmxNYW5hZ2VyOjp+Q3VybE1hbmFnZXIoKQorQ3VybEpvYk1hbmFnZXI6On5DdXJsSm9iTWFu
YWdlcigpCiB7CiAgICAgc3RvcFRocmVhZCgpOwogICAgIGN1cmxfbXVsdGlfY2xlYW51cChtX2N1
cmxNdWx0aUhhbmRsZSk7Ci0gICAgY3VybF9zaGFyZV9jbGVhbnVwKG1fY3VybFNoYXJlSGFuZGxl
KTsKLSAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CiB9CiAKLWJvb2wgQ3VybE1hbmFnZXI6OmFk
ZChDVVJMKiBjdXJsSGFuZGxlKQorYm9vbCBDdXJsSm9iTWFuYWdlcjo6YWRkKENVUkwqIGN1cmxI
YW5kbGUpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtODAsNyArNjMsNyBA
QCBib29sIEN1cmxNYW5hZ2VyOjphZGQoQ1VSTCogY3VybEhhbmRsZSkKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBDdXJsTWFuYWdlcjo6cmVtb3ZlKENVUkwqIGN1cmxIYW5kbGUpCitib29s
IEN1cmxKb2JNYW5hZ2VyOjpyZW1vdmUoQ1VSTCogY3VybEhhbmRsZSkKIHsKICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX211dGV4KTsKIApAQCAtODksMTkgKzcyLDE5IEBAIGJvb2wgQ3VybE1hbmFn
ZXI6OnJlbW92ZShDVVJMKiBjdXJsSGFuZGxlKQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbnQg
Q3VybE1hbmFnZXI6OmdldEFjdGl2ZUNvdW50KCkgY29uc3QKK2ludCBDdXJsSm9iTWFuYWdlcjo6
Z2V0QWN0aXZlQ291bnQoKSBjb25zdAogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgp
OwogICAgIHJldHVybiBtX2FjdGl2ZUhhbmRsZUxpc3Quc2l6ZSgpOwogfQogCi1pbnQgQ3VybE1h
bmFnZXI6OmdldFBlbmRpbmdDb3VudCgpIGNvbnN0CitpbnQgQ3VybEpvYk1hbmFnZXI6OmdldFBl
bmRpbmdDb3VudCgpIGNvbnN0CiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CiAg
ICAgcmV0dXJuIG1fcGVuZGluZ0hhbmRsZUxpc3Quc2l6ZSgpOwogfQogCi12b2lkIEN1cmxNYW5h
Z2VyOjpzdGFydFRocmVhZElmTmVlZGVkKCkKK3ZvaWQgQ3VybEpvYk1hbmFnZXI6OnN0YXJ0VGhy
ZWFkSWZOZWVkZWQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKQEAgLTExNSwx
MCArOTgsOCBAQCB2b2lkIEN1cmxNYW5hZ2VyOjpzdGFydFRocmVhZElmTmVlZGVkKCkKICAgICB9
CiB9CiAKLXZvaWQgQ3VybE1hbmFnZXI6OnN0b3BUaHJlYWQoKQordm9pZCBDdXJsSm9iTWFuYWdl
cjo6c3RvcFRocmVhZCgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQogICAgIHNl
dFJ1blRocmVhZChmYWxzZSk7CiAKICAgICBpZiAobV90aHJlYWQpIHsKQEAgLTEyNywxMyArMTA4
LDEzIEBAIHZvaWQgQ3VybE1hbmFnZXI6OnN0b3BUaHJlYWQoKQogICAgIH0KIH0KIAotdm9pZCBD
dXJsTWFuYWdlcjo6c3RvcFRocmVhZElmSWRsZSgpCit2b2lkIEN1cmxKb2JNYW5hZ2VyOjpzdG9w
VGhyZWFkSWZJZGxlKCkKIHsKICAgICBpZiAoIWdldEFjdGl2ZUNvdW50KCkgJiYgIWdldFBlbmRp
bmdDb3VudCgpKQogICAgICAgICBzZXRSdW5UaHJlYWQoZmFsc2UpOwogfQogCi12b2lkIEN1cmxN
YW5hZ2VyOjp1cGRhdGVIYW5kbGVMaXN0KCkKK3ZvaWQgQ3VybEpvYk1hbmFnZXI6OnVwZGF0ZUhh
bmRsZUxpc3QoKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOwogCkBAIC0xNTIs
NyArMTMzLDcgQEAgdm9pZCBDdXJsTWFuYWdlcjo6dXBkYXRlSGFuZGxlTGlzdCgpCiAgICAgfQog
fQogCi1ib29sIEN1cmxNYW5hZ2VyOjphZGRUb0N1cmwoQ1VSTCogY3VybEhhbmRsZSkKK2Jvb2wg
Q3VybEpvYk1hbmFnZXI6OmFkZFRvQ3VybChDVVJMKiBjdXJsSGFuZGxlKQogewogICAgIENVUkxN
Y29kZSByZXR2YWwgPSBjdXJsX211bHRpX2FkZF9oYW5kbGUobV9jdXJsTXVsdGlIYW5kbGUsIGN1
cmxIYW5kbGUpOwogICAgIGlmIChyZXR2YWwgPT0gQ1VSTE1fT0spIHsKQEAgLTE2Miw3ICsxNDMs
NyBAQCBib29sIEN1cmxNYW5hZ2VyOjphZGRUb0N1cmwoQ1VSTCogY3VybEhhbmRsZSkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQ3VybE1hbmFnZXI6OnJlbW92ZUZyb21DdXJsKENVUkwq
IGN1cmxIYW5kbGUpCitib29sIEN1cmxKb2JNYW5hZ2VyOjpyZW1vdmVGcm9tQ3VybChDVVJMKiBj
dXJsSGFuZGxlKQogewogICAgIGludCBoYW5kbGVQb3MgPSBtX2FjdGl2ZUhhbmRsZUxpc3QuZmlu
ZChjdXJsSGFuZGxlKTsKIApAQCAtMTc4LDcgKzE1OSw3IEBAIGJvb2wgQ3VybE1hbmFnZXI6OnJl
bW92ZUZyb21DdXJsKENVUkwqIGN1cmxIYW5kbGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIEN1cmxNYW5hZ2VyOjp3b3JrZXJUaHJlYWQoKQordm9pZCBDdXJsSm9iTWFuYWdlcjo6d29y
a2VyVGhyZWFkKCkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIApAQCAtMjM2LDUz
ICsyMTcsNiBAQCB2b2lkIEN1cmxNYW5hZ2VyOjp3b3JrZXJUaHJlYWQoKQogICAgIH0KIH0KIAot
Ly8gQ1VSTCBVdGlsaXRpZXMKLQotVVJMIEN1cmxVdGlsczo6Z2V0RWZmZWN0aXZlVVJMKENVUkwq
IGhhbmRsZSkKLXsKLSAgICBjb25zdCBjaGFyKiB1cmw7Ci0gICAgQ1VSTGNvZGUgZXJyID0gY3Vy
bF9lYXN5X2dldGluZm8oaGFuZGxlLCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmdXJsKTsKLSAg
ICBpZiAoQ1VSTEVfT0sgIT0gZXJyKQotICAgICAgICByZXR1cm4gVVJMKCk7Ci0gICAgcmV0dXJu
IFVSTChVUkwoKSwgdXJsKTsKLX0KLQotLy8gU2hhcmVkIFJlc291cmNlIG1hbmFnZW1lbnQgPT09
PT09PT09PT09PT09PT09PT09PT0KLQotTG9jayogQ3VybFNoYXJlZFJlc291cmNlczo6bXV0ZXhG
b3IoY3VybF9sb2NrX2RhdGEgZGF0YSkKLXsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNf
TE9DQUwoTG9jaywgY29va2llTXV0ZXgsICgpKTsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoTG9jaywgZG5zTXV0ZXgsICgpKTsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoTG9jaywgc2hhcmVNdXRleCwgKCkpOwotCi0gICAgc3dpdGNoIChkYXRhKSB7Ci0g
ICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9DT09LSUU6Ci0gICAgICAgIHJldHVybiAmY29va2llTXV0
ZXg7Ci0gICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9ETlM6Ci0gICAgICAgIHJldHVybiAmZG5zTXV0
ZXg7Ci0gICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9TSEFSRToKLSAgICAgICAgcmV0dXJuICZzaGFy
ZU11dGV4OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLS8vIGxpYmN1cmwgZG9lcyBub3QgaW1w
bGVtZW50IGl0cyBvd24gdGhyZWFkIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLgotLy8gdGhl
c2UgdHdvIGZ1bmN0aW9ucyBwcm92aWRlIG11dGV4ZXMgZm9yIGNvb2tpZXMsIGFuZCBmb3IgdGhl
IGdsb2JhbCBETlMKLS8vIGNhY2hlLgotdm9pZCBDdXJsU2hhcmVkUmVzb3VyY2VzOjpsb2NrKENV
UkwqIC8qIGhhbmRsZSAqLywgY3VybF9sb2NrX2RhdGEgZGF0YSwgY3VybF9sb2NrX2FjY2VzcyAv
KiBhY2Nlc3MgKi8sIHZvaWQqIC8qIHVzZXJQdHIgKi8pCi17Ci0gICAgaWYgKExvY2sqIG11dGV4
ID0gQ3VybFNoYXJlZFJlc291cmNlczo6bXV0ZXhGb3IoZGF0YSkpCi0gICAgICAgIG11dGV4LT5s
b2NrKCk7Ci19Ci0KLXZvaWQgQ3VybFNoYXJlZFJlc291cmNlczo6dW5sb2NrKENVUkwqIC8qIGhh
bmRsZSAqLywgY3VybF9sb2NrX2RhdGEgZGF0YSwgdm9pZCogLyogdXNlclB0ciAqLykKLXsKLSAg
ICBpZiAoTG9jayogbXV0ZXggPSBDdXJsU2hhcmVkUmVzb3VyY2VzOjptdXRleEZvcihkYXRhKSkK
LSAgICAgICAgbXV0ZXgtPnVubG9jaygpOwotfQotCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNYW5hZ2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuaApzaW1pbGFy
aXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybE1hbmFnZXIuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmgKaW5kZXggNTQ4MmVjMTZlZmYuLjgyOWI0NmRhZDFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybE1h
bmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpv
Yk1hbmFnZXIuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYg
UExBVEZPUk0oV0lOKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTM1LDcgKzM2LDYgQEAKICNl
bmRpZgogCiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+Ci0jaW5jbHVkZSAiVVJMLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsMjAgKzQ2LDIwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IEN1cmxKb2JBY3Rpb24gaGFuZGxlQ3VybE1zZyhDVVJMTXNnKikgPSAwOwogfTsKIAotY2xhc3Mg
Q3VybE1hbmFnZXIgeworY2xhc3MgQ3VybEpvYk1hbmFnZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBDdXJsTWFuYWdlciYgc2luZ2xldG9uKCkKKyAgICBzdGF0aWMgQ3VybEpvYk1hbmFnZXImIHNp
bmdsZXRvbigpCiAgICAgewogICAgICAgICAvLyBTaW5jZSBpdCdzIGEgc3RhdGljIHZhcmlhYmxl
LCBpZiB0aGUgY2xhc3MgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLAogICAgICAgICAvLyBJdCB3
b24ndCBiZSBjcmVhdGVkIGFnYWluLgogICAgICAgICAvLyBBbmQgaXQgKippcyoqIHRocmVhZC1z
YWZlIGluIEMrKzExLgogCi0gICAgICAgIHN0YXRpYyBDdXJsTWFuYWdlciBzaGFyZWQ7CisgICAg
ICAgIHN0YXRpYyBDdXJsSm9iTWFuYWdlciBzaGFyZWQ7CiAgICAgICAgIHJldHVybiBzaGFyZWQ7
CiAgICAgfQogCi0gICAgQ3VybE1hbmFnZXIoKTsKLSAgICB2aXJ0dWFsIH5DdXJsTWFuYWdlcigp
OworICAgIEN1cmxKb2JNYW5hZ2VyKCk7CisgICAgdmlydHVhbCB+Q3VybEpvYk1hbmFnZXIoKTsK
IAogICAgIGJvb2wgYWRkKENVUkwqIGN1cmxIYW5kbGUpOwogICAgIGJvb2wgcmVtb3ZlKENVUkwq
IGN1cmxIYW5kbGUpOwpAQCAtNjcsOCArNjcsNiBAQCBwdWJsaWM6CiAgICAgaW50IGdldEFjdGl2
ZUNvdW50KCkgY29uc3Q7CiAgICAgaW50IGdldFBlbmRpbmdDb3VudCgpIGNvbnN0OwogCi0gICAg
Q1VSTFNIKiBnZXRDdXJsU2hhcmVIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2N1cmxTaGFyZUhh
bmRsZTsgfQotCiBwcml2YXRlOgogICAgIHZvaWQgc3RhcnRUaHJlYWRJZk5lZWRlZCgpOwogICAg
IHZvaWQgc3RvcFRocmVhZCgpOwpAQCAtOTQsMTQgKzkyLDcgQEAgcHJpdmF0ZToKICAgICBtdXRh
YmxlIExvY2sgbV9tdXRleDsKICAgICBib29sIG1fcnVuVGhyZWFkIHsgZmFsc2UgfTsKIAotICAg
IENVUkxTSCogbV9jdXJsU2hhcmVIYW5kbGUgeyBudWxscHRyIH07Ci0KICAgICBmcmllbmQgY2xh
c3MgQ3VybEpvYjsKIH07CiAKLWNsYXNzIEN1cmxVdGlscyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFVSTCBnZXRFZmZlY3RpdmVVUkwoQ1VSTCogaGFuZGxlKTsKLX07Ci0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlTWFuYWdlci5jcHAKaW5kZXggMjBhOTM0YTk5YjYuLjRjYTRjZDI0ZjE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyLmNwcApAQCAtNDIsNyArNDIsNyBAQAogCiAjaW5jbHVkZSAiQ3JlZGVu
dGlhbFN0b3JhZ2UuaCIKICNpbmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCi0jaW5jbHVkZSAi
Q3VybE1hbmFnZXIuaCIKKyNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUVFBI
ZWFkZXJOYW1lcy5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgpAQCAtNjAsOSArNjAsNiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z1ZpZXcuaD4KIAogI2lmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSAiV2ViQ29yZUJ1bmRsZVdpbi5o
IgotI2luY2x1ZGUgPHNobG9iai5oPgotI2luY2x1ZGUgPHNobHdhcGkuaD4KICNlbHNlCiAjaW5j
bHVkZSA8c3lzL3BhcmFtLmg+CiAjZGVmaW5lIE1BWF9QQVRIIE1BWFBBVEhMRU4KQEAgLTczLDEz
ICs3MCw5IEBACiAjaWYgRU5BQkxFKFdFQl9USU1JTkcpCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAjZW5kaWYKLSNpZiBVU0UoQ0YpCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
I2VuZGlmCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04OCw2MSArODEsNiBAQCBzdGF0aWMgY29uc3Qg
U2Vjb25kcyBwb2xsVGltZSB7IDUwX21zIH07CiBjb25zdCBpbnQgbWF4UnVubmluZ0pvYnMgPSAx
Mjg7CiBjb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpbkN1cmwgPSAiQ3VybEVycm9yRG9tYWlu
IjsKIAotc3RhdGljIGNvbnN0IGJvb2wgaWdub3JlU1NMRXJyb3JzID0gZ2V0ZW52KCJXRUJLSVRf
SUdOT1JFX1NTTF9FUlJPUlMiKTsKLQotc3RhdGljIENTdHJpbmcgY2VydGlmaWNhdGVQYXRoKCkK
LXsKLSAgICBjaGFyKiBlbnZQYXRoID0gZ2V0ZW52KCJDVVJMX0NBX0JVTkRMRV9QQVRIIik7Ci0g
ICAgaWYgKGVudlBhdGgpCi0gICAgICAgIHJldHVybiBlbnZQYXRoOwotCi0jaWYgVVNFKENGKQot
ICAgIENGQnVuZGxlUmVmIHdlYktpdEJ1bmRsZVJlZiA9IHdlYktpdEJ1bmRsZSgpOwotICAgIGlm
ICh3ZWJLaXRCdW5kbGVSZWYpIHsKLSAgICAgICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZXJ0VVJM
UmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTCh3ZWJLaXRCdW5kbGVSZWYsIENG
U1RSKCJjYWNlcnQiKSwgQ0ZTVFIoInBlbSIpLCBDRlNUUigiY2VydGlmaWNhdGVzIikpKTsKLSAg
ICAgICAgaWYgKGNlcnRVUkxSZWYpIHsKLSAgICAgICAgICAgIGNoYXIgcGF0aFtNQVhfUEFUSF07
Ci0gICAgICAgICAgICBDRlVSTEdldEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjZXJ0VVJMUmVm
LmdldCgpLCBmYWxzZSwgcmVpbnRlcnByZXRfY2FzdDxVSW50OCo+KHBhdGgpLCBNQVhfUEFUSCk7
Ci0gICAgICAgICAgICByZXR1cm4gcGF0aDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0g
ICAgcmV0dXJuIENTdHJpbmcoKTsKLX0KLQotc3RhdGljIGNoYXIqIGNvb2tpZUphclBhdGgoKQot
ewotICAgIGNoYXIqIGNvb2tpZUphclBhdGggPSBnZXRlbnYoIkNVUkxfQ09PS0lFX0pBUl9QQVRI
Iik7Ci0gICAgaWYgKGNvb2tpZUphclBhdGgpCi0gICAgICAgIHJldHVybiBmYXN0U3RyRHVwKGNv
b2tpZUphclBhdGgpOwotCi0jaWYgT1MoV0lORE9XUykKLSAgICBjaGFyIGV4ZWN1dGFibGVQYXRo
W01BWF9QQVRIXTsKLSAgICBjaGFyIGFwcERhdGFEaXJlY3RvcnlbTUFYX1BBVEhdOwotICAgIGNo
YXIgY29va2llSmFyRnVsbFBhdGhbTUFYX1BBVEhdOwotICAgIGNoYXIgY29va2llSmFyRGlyZWN0
b3J5W01BWF9QQVRIXTsKLQotICAgIGlmIChGQUlMRUQoOjpTSEdldEZvbGRlclBhdGhBKDAsIENT
SURMX0xPQ0FMX0FQUERBVEEgfCBDU0lETF9GTEFHX0NSRUFURSwgMCwgMCwgYXBwRGF0YURpcmVj
dG9yeSkpCi0gICAgICAgIHx8IEZBSUxFRCg6OkdldE1vZHVsZUZpbGVOYW1lQSgwLCBleGVjdXRh
YmxlUGF0aCwgTUFYX1BBVEgpKSkKLSAgICAgICAgcmV0dXJuIGZhc3RTdHJEdXAoImNvb2tpZXMu
ZGF0Iik7Ci0KLSAgICA6OlBhdGhSZW1vdmVFeHRlbnNpb25BKGV4ZWN1dGFibGVQYXRoKTsKLSAg
ICBMUFNUUiBleGVjdXRhYmxlTmFtZSA9IDo6UGF0aEZpbmRGaWxlTmFtZUEoZXhlY3V0YWJsZVBh
dGgpOwotICAgIHNwcmludGZfcyhjb29raWVKYXJEaXJlY3RvcnksIE1BWF9QQVRILCAiJXMvJXMi
LCBhcHBEYXRhRGlyZWN0b3J5LCBleGVjdXRhYmxlTmFtZSk7Ci0gICAgc3ByaW50Zl9zKGNvb2tp
ZUphckZ1bGxQYXRoLCBNQVhfUEFUSCwgIiVzL2Nvb2tpZXMuZGF0IiwgY29va2llSmFyRGlyZWN0
b3J5KTsKLQotICAgIGlmICg6OlNIQ3JlYXRlRGlyZWN0b3J5RXhBKDAsIGNvb2tpZUphckRpcmVj
dG9yeSwgMCkgIT0gRVJST1JfU1VDQ0VTUwotICAgICAgICAmJiA6OkdldExhc3RFcnJvcigpICE9
IEVSUk9SX0ZJTEVfRVhJU1RTCi0gICAgICAgICYmIDo6R2V0TGFzdEVycm9yKCkgIT0gRVJST1Jf
QUxSRUFEWV9FWElTVFMpCi0gICAgICAgIHJldHVybiBmYXN0U3RyRHVwKCJjb29raWVzLmRhdCIp
OwotCi0gICAgcmV0dXJuIGZhc3RTdHJEdXAoY29va2llSmFyRnVsbFBhdGgpOwotI2Vsc2UKLSAg
ICByZXR1cm4gZmFzdFN0ckR1cCgiY29va2llcy5kYXQiKTsKLSNlbmRpZgotfQotCiAjaWYgRU5B
QkxFKFdFQl9USU1JTkcpCiBzdGF0aWMgdm9pZCBjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlv
bnMoUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCkKIHsKQEAgLTE5Miw0NyArMTMwLDE0IEBAIGlu
bGluZSBzdGF0aWMgYm9vbCBpc0h0dHBOb3RNb2RpZmllZChpbnQgc3RhdHVzQ29kZSkKIAogUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXIoKQogICAgIDogbV9kb3du
bG9hZFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2Fs
bGJhY2spCi0gICAgLCBtX2Nvb2tpZUphckZpbGVOYW1lKGNvb2tpZUphclBhdGgoKSkKLSAgICAs
IG1fY2VydGlmaWNhdGVQYXRoKGNlcnRpZmljYXRlUGF0aCgpKQogICAgICwgbV9ydW5uaW5nSm9i
cygwKQotI2lmbmRlZiBOREVCVUcKLSAgICAsIG1fbG9nRmlsZShudWxscHRyKQotI2VuZGlmCiB7
Ci0gICAgQ1VSTFNIKiBoID0gQ3VybE1hbmFnZXI6OnNpbmdsZXRvbigpLmdldEN1cmxTaGFyZUhh
bmRsZSgpOwotICAgIG1fY3VybFNoYXJlSGFuZGxlID0gaDsKLSAgICBtX2N1cmxNdWx0aUhhbmRs
ZSA9IGN1cmxfbXVsdGlfaW5pdCgpOwotCi0KLSAgICBpbml0Q29va2llU2Vzc2lvbigpOwotCi0j
aWZuZGVmIE5ERUJVRwotICAgIGNoYXIqIGxvZ0ZpbGUgPSBnZXRlbnYoIkNVUkxfTE9HX0ZJTEUi
KTsKLSAgICBpZiAobG9nRmlsZSkKLSAgICAgICAgbV9sb2dGaWxlID0gZm9wZW4obG9nRmlsZSwg
ImEiKTsKLSNlbmRpZgorICAgIG1fY3VybE11bHRpSGFuZGxlID0gQ3VybENvbnRleHQ6OnNpbmds
ZXRvbigpLmNyZWF0ZU11bHRpSGFuZGxlKCk7CiB9CiAKIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6
flJlc291cmNlSGFuZGxlTWFuYWdlcigpCiB7CiAgICAgY3VybF9tdWx0aV9jbGVhbnVwKG1fY3Vy
bE11bHRpSGFuZGxlKTsKLSAgICBpZiAobV9jb29raWVKYXJGaWxlTmFtZSkKLSAgICAgICAgZmFz
dEZyZWUobV9jb29raWVKYXJGaWxlTmFtZSk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgaWYgKG1f
bG9nRmlsZSkKLSAgICAgICAgZmNsb3NlKG1fbG9nRmlsZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBS
ZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNldENvb2tpZUphckZpbGVOYW1lKGNvbnN0IGNoYXIqIGNv
b2tpZUphckZpbGVOYW1lKQotewotICAgIG1fY29va2llSmFyRmlsZU5hbWUgPSBmYXN0U3RyRHVw
KGNvb2tpZUphckZpbGVOYW1lKTsKLX0KLQotY29uc3QgY2hhciogUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyOjpnZXRDb29raWVKYXJGaWxlTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29va2ll
SmFyRmlsZU5hbWU7CiB9CiAKIFJlc291cmNlSGFuZGxlTWFuYWdlciogUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpCkBAIC0yNTAsNyArMTU1LDcgQEAgc3RhdGljIHZvaWQg
aGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UgKENVUkwqIGhhbmRsZSwgUmVzb3VyY2VIYW5kbGUq
IGpvYiwgUmVzb3UKICAgICAvLyB3aGljaCBtZWFucyB0aGUgUmVzb3VyY2VMb2FkZXIncyByZXNw
b25zZSBkb2VzIG5vdCBjb250YWluIHRoZSBVUkwuCiAgICAgLy8gUnVuIHRoZSBjb2RlIGhlcmUg
Zm9yIGxvY2FsIGZpbGVzIHRvIHJlc29sdmUgdGhlIGlzc3VlLgogICAgIC8vIFRPRE86IFNlZSBp
ZiB0aGVyZSBpcyBhIGJldHRlciBhcHByb2FjaCBmb3IgaGFuZGxpbmcgdGhpcy4KLSAgICBVUkwg
dXJsID0gQ3VybFV0aWxzOjpnZXRFZmZlY3RpdmVVUkwoaGFuZGxlKTsKKyAgICBVUkwgdXJsID0g
Q3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEVmZmVjdGl2ZVVSTChoYW5kbGUpOwogICAgIEFT
U0VSVCh1cmwuaXNWYWxpZCgpKTsKICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTCh1cmwpOwogICAg
ICBpZiAoZC0+Y2xpZW50KCkpCkBAIC0zNjEsNyArMjY2LDcgQEAgc3RhdGljIGJvb2wgZ2V0UHJv
dGVjdGlvblNwYWNlKENVUkwqIGgsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBQ
cm90ZWMKICAgICBpZiAoZXJyICE9IENVUkxFX09LKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBVUkwgdXJsID0gQ3VybFV0aWxzOjpnZXRFZmZlY3RpdmVVUkwoaCk7CisgICAgVVJMIHVy
bCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRFZmZlY3RpdmVVUkwoaCk7CiAgICAgaWYg
KCF1cmwuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ1MCw3ICszNTUs
NyBAQCBzdGF0aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUs
IHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oaCwg
Q1VSTElORk9fQ09OVEVOVF9MRU5HVEhfRE9XTkxPQUQsICZjb250ZW50TGVuZ3RoKTsKICAgICAg
ICAgZC0+bV9yZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoc3RhdGljX2Nhc3Q8bG9u
ZyBsb25nIGludD4oY29udGVudExlbmd0aCkpOwogCi0gICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0
VVJMKEN1cmxVdGlsczo6Z2V0RWZmZWN0aXZlVVJMKGgpKTsKKyAgICAgICAgZC0+bV9yZXNwb25z
ZS5zZXRVUkwoQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEVmZmVjdGl2ZVVSTChoKSk7CiAK
ICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShodHRwQ29kZSk7CiAgICAg
ICAgIGQtPm1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlw
ZShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5
cGUpKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKQEAgLTY1Nyw3ICs1NjIsNyBAQCB2b2lk
IFJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKCkKICAgICAgICAg
ICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZEZpbmlzaExvYWRpbmco
KmpvYik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBVUkwg
dXJsID0gQ3VybFV0aWxzOjpnZXRFZmZlY3RpdmVVUkwoZC0+bV9oYW5kbGUpOworICAgICAgICAg
ICAgVVJMIHVybCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRFZmZlY3RpdmVVUkwoZC0+
bV9oYW5kbGUpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q3VybCBFUlJPUiBmb3IgdXJsPSclcycsIGVycm9yOiAnJXMnXG4iLCB1cmwuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgY3VybF9lYXN5X3N0cmVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpKTsKICNlbmRp
ZgpAQCAtNjc4LDI1ICs1ODMsNiBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxv
YWRUaW1lckNhbGxiYWNrKCkKICAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0YXJ0T25lU2hvdChw
b2xsVGltZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzZXRQcm94eUluZm8o
Y29uc3QgU3RyaW5nJiBob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsb25nIHBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFByb3h5VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVzZXJuYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQotewotICAgIG1fcHJv
eHlUeXBlID0gdHlwZTsKLQotICAgIGlmICghaG9zdC5sZW5ndGgoKSkgewotICAgICAgICBtX3By
b3h5ID0gZW1wdHlTdHJpbmcoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBTdHJpbmcgdXNlclBh
c3M7Ci0gICAgICAgIGlmICh1c2VybmFtZS5sZW5ndGgoKSB8fCBwYXNzd29yZC5sZW5ndGgoKSkK
LSAgICAgICAgICAgIHVzZXJQYXNzID0gdXNlcm5hbWUgKyAiOiIgKyBwYXNzd29yZCArICJAIjsK
LQotICAgICAgICBtX3Byb3h5ID0gU3RyaW5nKCJodHRwOi8vIikgKyB1c2VyUGFzcyArIGhvc3Qg
KyAiOiIgKyBTdHJpbmc6Om51bWJlcihwb3J0KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyOjpyZW1vdmVGcm9tQ3VybChSZXNvdXJjZUhhbmRsZSogam9iKQogewogICAg
IFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7CkBAIC0xMDE5
LDYgKzkwNSw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjphcHBseUF1dGhlbnRpY2F0
aW9uVG9SZXF1ZXN0KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsCiAKIHZvaWQgUmVzb3VyY2VIYW5k
bGVNYW5hZ2VyOjppbml0aWFsaXplSGFuZGxlKFJlc291cmNlSGFuZGxlKiBqb2IpCiB7CisgICAg
Q3VybENvbnRleHQmIGNvbnRleHQgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCk7CisKICAgICBz
dGF0aWMgY29uc3QgaW50IGFsbG93ZWRQcm90b2NvbHMgPSBDVVJMUFJPVE9fRklMRSB8IENVUkxQ
Uk9UT19GVFAgfCBDVVJMUFJPVE9fRlRQUyB8IENVUkxQUk9UT19IVFRQIHwgQ1VSTFBST1RPX0hU
VFBTOwogICAgIFVSTCB1cmwgPSBqb2ItPmZpcnN0UmVxdWVzdCgpLnVybCgpOwogCkBAIC0xMDQ4
LDEwICs5MzYsMTAgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5k
bGUoUmVzb3VyY2VIYW5kbGUqIGpvYikKICAgICAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgZXJy
b3IgPT0gQ1VSTEVfT0spOwogICAgIH0KICNpZm5kZWYgTkRFQlVHCi0gICAgaWYgKGdldGVudigi
REVCVUdfQ1VSTCIpKQorICAgIGlmIChjb250ZXh0LmlzVmVyYm9zZSgpKQogICAgICAgICBjdXJs
X2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1ZFUkJPU0UsIDEpOwotICAgIGlmICht
X2xvZ0ZpbGUpCi0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRf
U1RERVJSLCBtX2xvZ0ZpbGUpOworICAgIGlmIChjb250ZXh0LmdldExvZ0ZpbGUoKSkKKyAgICAg
ICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9TVERFUlIsIGNvbnRleHQu
Z2V0TG9nRmlsZSgpKTsKICNlbmRpZgogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUs
IENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDFMKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAyTCk7CkBAIC0xMDY1LDE5ICs5NTMsMjAg
QEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VI
YW5kbGUqIGpvYikKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0ZP
TExPV0xPQ0FUSU9OLCAxKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJM
T1BUX01BWFJFRElSUywgMTApOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENV
UkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0FOWSk7Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5t
X2hhbmRsZSwgQ1VSTE9QVF9TSEFSRSwgbV9jdXJsU2hhcmVIYW5kbGUpOworICAgIGN1cmxfZWFz
eV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfU0hBUkUsIEN1cmxDb250ZXh0OjpzaW5nbGV0
b24oKS5jdXJsU2hhcmVIYW5kbGUoKSk7CiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRs
ZSwgQ1VSTE9QVF9ETlNfQ0FDSEVfVElNRU9VVCwgNjAgKiA1KTsgLy8gNSBtaW51dGVzCiAgICAg
Y3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QUk9UT0NPTFMsIGFsbG93ZWRQ
cm90b2NvbHMpOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUkVE
SVJfUFJPVE9DT0xTLCBhbGxvd2VkUHJvdG9jb2xzKTsKICAgICBzZXRTU0xDbGllbnRDZXJ0aWZp
Y2F0ZShqb2IpOwogCi0gICAgaWYgKGlnbm9yZVNTTEVycm9ycykKKyAgICBpZiAoY29udGV4dC5z
aG91bGRJZ25vcmVTU0xFcnJvcnMoKSkKICAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hh
bmRsZSwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgZmFsc2UpOwogICAgIGVsc2UKICAgICAgICAg
c2V0U1NMVmVyaWZ5T3B0aW9ucyhqb2IpOwogCi0gICAgaWYgKCFtX2NlcnRpZmljYXRlUGF0aC5p
c051bGwoKSkKLSAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0NB
SU5GTywgbV9jZXJ0aWZpY2F0ZVBhdGguZGF0YSgpKTsKKyAgICBjb25zdCBjaGFyKiBjZXJ0aWZp
Y2F0ZSA9IGNvbnRleHQuZ2V0Q2VydGlmaWNhdGVQYXRoKCk7CisgICAgaWYgKGNlcnRpZmljYXRl
KQorICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0NBSU5GTywg
Y2VydGlmaWNhdGUpOwogCiAgICAgLy8gZW5hYmxlIGd6aXAgYW5kIGRlZmxhdGUgdGhyb3VnaCBB
Y2NlcHQtRW5jb2Rpbmc6CiAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9Q
VF9FTkNPRElORywgIiIpOwpAQCAtMTA4OSw4ICs5NzgsOSBAQCB2b2lkIFJlc291cmNlSGFuZGxl
TWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9iKQogICAgIGQtPm1f
dXJsID0gZmFzdFN0ckR1cCh1cmxTdHJpbmcubGF0aW4xKCkuZGF0YSgpKTsKICAgICBjdXJsX2Vh
c3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VSTCwgZC0+bV91cmwpOwogCi0gICAgaWYg
KG1fY29va2llSmFyRmlsZU5hbWUpCi0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5k
bGUsIENVUkxPUFRfQ09PS0lFSkFSLCBtX2Nvb2tpZUphckZpbGVOYW1lKTsKKyAgICBjb25zdCBj
aGFyKiBjb29raWVKYXIgPSBjb250ZXh0LmdldENvb2tpZUphckZpbGVOYW1lKCk7CisgICAgaWYg
KGNvb2tpZUphcikKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9Q
VF9DT09LSUVKQVIsIGNvb2tpZUphcik7CiAKICAgICBzdHJ1Y3QgY3VybF9zbGlzdCogaGVhZGVy
cyA9IDA7CiAgICAgaWYgKGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEhlYWRlckZpZWxkcygpLnNp
emUoKSA+IDApIHsKQEAgLTExNTAsMzQgKzEwNDAsMTMgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1h
bmFnZXI6OmluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGpvYikKICAgICBhcHBseUF1
dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KGpvYiwgam9iLT5maXJzdFJlcXVlc3QoKSk7CiAKICAgICAv
LyBTZXQgcHJveHkgb3B0aW9ucyBpZiB3ZSBoYXZlIHRoZW0uCi0gICAgaWYgKG1fcHJveHkubGVu
Z3RoKCkpIHsKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9Q
Uk9YWSwgbV9wcm94eS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChk
LT5tX2hhbmRsZSwgQ1VSTE9QVF9QUk9YWVRZUEUsIG1fcHJveHlUeXBlKTsKKyAgICBhdXRvJiBw
cm94eSA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5wcm94eUluZm8oKTsKKyAgICBpZiAocHJv
eHkudHlwZSAhPSBDdXJsUHJveHlUeXBlOjpJbnZhbGlkKSB7CisgICAgICAgIGN1cmxfZWFzeV9z
ZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUFJPWFksIHByb3h5LnVybCgpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BST1hZ
VFlQRSwgcHJveHkudHlwZSk7CiAgICAgfQogfQogCi12b2lkIFJlc291cmNlSGFuZGxlTWFuYWdl
cjo6aW5pdENvb2tpZVNlc3Npb24oKQotewotICAgIC8vIEN1cmwgc2F2ZXMgYm90aCBwZXJzaXN0
ZW50IGNvb2tpZXMsIGFuZCBzZXNzaW9uIGNvb2tpZXMgdG8gdGhlIGNvb2tpZSBmaWxlLgotICAg
IC8vIFRoZSBzZXNzaW9uIGNvb2tpZXMgc2hvdWxkIGJlIGRlbGV0ZWQgYmVmb3JlIHN0YXJ0aW5n
IGEgbmV3IHNlc3Npb24uCi0KLSAgICBDVVJMKiBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKLQot
ICAgIGlmICghY3VybCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3VybF9lYXN5X3NldG9wdChj
dXJsLCBDVVJMT1BUX1NIQVJFLCBtX2N1cmxTaGFyZUhhbmRsZSk7Ci0KLSAgICBpZiAobV9jb29r
aWVKYXJGaWxlTmFtZSkgewotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRf
Q09PS0lFRklMRSwgbV9jb29raWVKYXJGaWxlTmFtZSk7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRv
cHQoY3VybCwgQ1VSTE9QVF9DT09LSUVKQVIsIG1fY29va2llSmFyRmlsZU5hbWUpOwotICAgIH0K
LQotICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09LSUVTRVNTSU9OLCAxKTsK
LQotICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOwotfQotCiB2b2lkIFJlc291cmNlSGFuZGxl
TWFuYWdlcjo6Y2FuY2VsKFJlc291cmNlSGFuZGxlKiBqb2IpCiB7CiAgICAgaWYgKHJlbW92ZVNj
aGVkdWxlZEpvYihqb2IpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCmluZGV4IDkyNWRiYTQwMjk4
Li5mNDFiMDFmNjU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaApAQCAtNDYsMjcgKzQ2LDE1
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIHsK
IHB1YmxpYzoKLSAgICBlbnVtIFByb3h5VHlwZSB7Ci0gICAgICAgIEhUVFAgPSBDVVJMUFJPWFlf
SFRUUCwKLSAgICAgICAgU29ja3M0ID0gQ1VSTFBST1hZX1NPQ0tTNCwKLSAgICAgICAgU29ja3M0
QSA9IENVUkxQUk9YWV9TT0NLUzRBLAotICAgICAgICBTb2NrczUgPSBDVVJMUFJPWFlfU09DS1M1
LAotICAgICAgICBTb2NrczVIb3N0bmFtZSA9IENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUUKLSAg
ICB9OwogICAgIHN0YXRpYyBSZXNvdXJjZUhhbmRsZU1hbmFnZXIqIHNoYXJlZEluc3RhbmNlKCk7
CiAgICAgdm9pZCBhZGQoUmVzb3VyY2VIYW5kbGUqKTsKICAgICB2b2lkIGNhbmNlbChSZXNvdXJj
ZUhhbmRsZSopOwogCi0gICAgdm9pZCBzZXRDb29raWVKYXJGaWxlTmFtZShjb25zdCBjaGFyKiBj
b29raWVKYXJGaWxlTmFtZSk7Ci0gICAgY29uc3QgY2hhciogZ2V0Q29va2llSmFyRmlsZU5hbWUo
KSBjb25zdDsKLQogICAgIHZvaWQgZGlzcGF0Y2hTeW5jaHJvbm91c0pvYihSZXNvdXJjZUhhbmRs
ZSopOwogCiAgICAgdm9pZCBzZXR1cFBPU1QoUmVzb3VyY2VIYW5kbGUqLCBzdHJ1Y3QgY3VybF9z
bGlzdCoqKTsKICAgICB2b2lkIHNldHVwUFVUKFJlc291cmNlSGFuZGxlKiwgc3RydWN0IGN1cmxf
c2xpc3QqKik7CiAKLSAgICB2b2lkIHNldFByb3h5SW5mbyhjb25zdCBTdHJpbmcmIGhvc3QgPSBl
bXB0eVN0cmluZygpLCB1bnNpZ25lZCBsb25nIHBvcnQgPSAwLCBQcm94eVR5cGUgPSBIVFRQLCBj
b25zdCBTdHJpbmcmIHVzZXJuYW1lID0gZW1wdHlTdHJpbmcoKSwgY29uc3QgU3RyaW5nJiBwYXNz
d29yZCA9IGVtcHR5U3RyaW5nKCkpOwotCiBwcml2YXRlOgogICAgIFJlc291cmNlSGFuZGxlTWFu
YWdlcigpOwogICAgIH5SZXNvdXJjZUhhbmRsZU1hbmFnZXIoKTsKQEAgLTc5LDIzICs2NywxMSBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBpbml0aWFsaXplSGFuZGxlKFJlc291cmNlSGFuZGxlKik7
CiAKLSAgICB2b2lkIGluaXRDb29raWVTZXNzaW9uKCk7Ci0KICAgICBUaW1lciBtX2Rvd25sb2Fk
VGltZXI7CiAgICAgQ1VSTE0qIG1fY3VybE11bHRpSGFuZGxlOwotICAgIENVUkxTSCogbV9jdXJs
U2hhcmVIYW5kbGU7Ci0gICAgY2hhciogbV9jb29raWVKYXJGaWxlTmFtZTsKICAgICBjaGFyIG1f
Y3VybEVycm9yQnVmZmVyW0NVUkxfRVJST1JfU0laRV07CiAgICAgVmVjdG9yPFJlc291cmNlSGFu
ZGxlKj4gbV9yZXNvdXJjZUhhbmRsZUxpc3Q7Ci0gICAgY29uc3QgQ1N0cmluZyBtX2NlcnRpZmlj
YXRlUGF0aDsKICAgICBpbnQgbV9ydW5uaW5nSm9iczsKLSAgICAKLSAgICBTdHJpbmcgbV9wcm94
eTsKLSAgICBQcm94eVR5cGUgbV9wcm94eVR5cGU7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgRklM
RSogbV9sb2dGaWxlOwotI2VuZGlmCiB9OwogCiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>