<?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>166825</bug_id>
          
          <creation_ts>2017-01-08 13:52:08 -0800</creation_ts>
          <short_desc>Move cache coders to WTF</short_desc>
          <delta_ts>2017-01-09 05:42:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1264846</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-01-08 13:52:08 -0800</bug_when>
    <thetext>Make it possible to use robust serialization of WTF types on the lower levels of the stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264856</commentid>
    <comment_count>1</comment_count>
      <attachid>298317</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-01-08 14:35:11 -0800</bug_when>
    <thetext>Created attachment 298317
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264857</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-08 14:36:13 -0800</bug_when>
    <thetext>Attachment 298317 did not pass style-queue:


ERROR: Source/WTF/wtf/persistence/Encoder.h:94:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:95:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:96:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:97:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:98:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:99:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:100:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:103:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 10 in 21 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>1264859</commentid>
    <comment_count>3</comment_count>
      <attachid>298318</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-01-08 15:13:45 -0800</bug_when>
    <thetext>Created attachment 298318
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264860</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-08 15:15:36 -0800</bug_when>
    <thetext>Attachment 298318 did not pass style-queue:


ERROR: Source/WTF/wtf/persistence/Encoder.h:94:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:95:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:96:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:97:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:98:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:99:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:100:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:103:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 10 in 20 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>1264861</commentid>
    <comment_count>5</comment_count>
      <attachid>298319</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-01-08 15:18:59 -0800</bug_when>
    <thetext>Created attachment 298319
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264862</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-08 15:20:36 -0800</bug_when>
    <thetext>Attachment 298319 did not pass style-queue:


ERROR: Source/WTF/wtf/persistence/Encoder.h:94:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:95:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:96:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:97:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:98:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:99:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:100:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:103:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 10 in 21 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>1264868</commentid>
    <comment_count>7</comment_count>
      <attachid>298322</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-01-08 15:58:12 -0800</bug_when>
    <thetext>Created attachment 298322
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264869</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-08 15:59:50 -0800</bug_when>
    <thetext>Attachment 298322 did not pass style-queue:


ERROR: Source/WTF/wtf/persistence/Encoder.h:94:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:95:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:96:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:97:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:98:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:99:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:100:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:103:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 10 in 21 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>1264870</commentid>
    <comment_count>9</comment_count>
      <attachid>298319</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-08 16:19:03 -0800</bug_when>
    <thetext>Comment on attachment 298319
patch

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

&gt; Source/WTF/wtf/persistence/Coders.cpp:35
&gt; +#include &quot;NetworkCacheCoders.h&quot;
&gt; +
&gt; +#if ENABLE(NETWORK_CACHE)
&gt; +
&gt; +#include &lt;wtf/text/CString.h&gt;
&gt; +#include &lt;wtf/text/WTFString.h&gt;
&gt; +
&gt; +namespace WebKit {
&gt; +namespace NetworkCache {

Are you planning to get rid of the ENABLE(NETWORK_CACHE) and namespace NetworkCache?

&gt; Source/WTF/wtf/persistence/Coders.cpp:160
&gt; +// Store common HTTP headers as strings instead of using their value in the HTTPHeaderName enumeration
&gt; +// so that the headers stored in the cache stays valid even after HTTPHeaderName.in gets updated.
&gt; +void Coder&lt;WebCore::HTTPHeaderMap&gt;::encode(Encoder&amp; encoder, const WebCore::HTTPHeaderMap&amp; headers)

Er, surely WTF cannot depend on WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264871</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-01-08 16:31:21 -0800</bug_when>
    <thetext>&gt; Are you planning to get rid of the ENABLE(NETWORK_CACHE) and namespace
&gt; NetworkCache?
&gt; Er, surely WTF cannot depend on WebCore.

If you look further in the patch you see them changed appropriately. This is just how move/edit patches end up looking like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264872</commentid>
    <comment_count>11</comment_count>
      <attachid>298323</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-01-08 16:34:06 -0800</bug_when>
    <thetext>Created attachment 298323
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264873</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-08 16:35:14 -0800</bug_when>
    <thetext>Attachment 298323 did not pass style-queue:


ERROR: Source/WTF/wtf/persistence/Encoder.h:94:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:95:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:96:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:97:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:98:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:99:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:100:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/persistence/Encoder.h:103:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 10 in 22 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>1264874</commentid>
    <comment_count>13</comment_count>
      <attachid>298323</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-08 18:05:13 -0800</bug_when>
    <thetext>Comment on attachment 298323
patch

Looks good, rs=me. What do you plan on persisting now :) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264875</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-08 18:08:37 -0800</bug_when>
    <thetext>Probably useful to move NetworkCache::Data, NetworkCache::IOChannel, and the helpers in NetworkCacheFileSystem.h at some point. (As well as WebKit::SharedMemory I guess).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264938</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-01-09 04:21:09 -0800</bug_when>
    <thetext>&gt; Looks good, rs=me. What do you plan on persisting now :) ?

JS related things!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264940</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-01-09 04:45:20 -0800</bug_when>
    <thetext>https://trac.webkit.org/r210502</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264943</commentid>
    <comment_count>17</comment_count>
      <attachid>298323</attachid>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-01-09 05:12:15 -0800</bug_when>
    <thetext>Comment on attachment 298323
patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.h:43
&gt; +namespace Persistence {

It does not feel right to have code in namespace WTF inside WebKit2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264956</commentid>
    <comment_count>18</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-01-09 05:42:15 -0800</bug_when>
    <thetext>&gt; It does not feel right to have code in namespace WTF inside WebKit2

Nevertheless it is a rather common pattern for traits-like templates (search for it in WebCore).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298317</attachid>
            <date>2017-01-08 14:35:11 -0800</date>
            <delta_ts>2017-01-08 15:13:45 -0800</delta_ts>
            <desc>patch</desc>
            <filename>cache-coder-wtf-3.patch</filename>
            <type>text/plain</type>
            <size>109569</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE3LTAxLTA4ICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGNhY2hlIGNvZGVycyB0byBXVEYKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgaXQgcG9zc2li
bGUgdG8gdXNlIHJvYnVzdCBzZXJpYWxpemF0aW9uIG9mIFdURiB0eXBlcyBvbiB0aGUgbG93ZXIg
bGV2ZWxzIG9mIHRoZSBzdGFjay4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZTogQWRkZWQuCisgICAgICAgICogd3Rm
L3BlcnNpc3RlbmNlL0NvZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyLmguCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3Rl
bmNlL0NvZGVycy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6Q29kZXI8QXRvbWljU3RyaW5nPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+OjplbmNvZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVy
PFN0cmluZz46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6ZGVjb2RlU3RyaW5nVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6Q29kZXI8U3RyaW5nPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6
SFRUUEhlYWRlck1hcD46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD46OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuaC4KKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxzdGQ6Om9wdGlvbmFsPFQ+Pjo6ZW5jb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxzdGQ6Om9w
dGlvbmFsPFQ+Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2Uv
RGVjb2Rlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OkRlY29kZXI6OkRlY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkRlY29kZXI6On5EZWNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRlY29k
ZXI6OmRlY29kZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6RGVjb2Rlcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL0RlY29kZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5oLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkRlY29kZXI6Omxlbmd0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6RGVjb2Rlcjo6Y3VycmVudE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGVjb2Rlcjo6ZGVjb2RlRW51bSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGVjb2Rlcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVuY29kZXIuY3BwLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29k
ZXI6OkVuY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVu
Y29kZXI6On5FbmNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjpncm93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW5jb2Rlcjo6ZW5jb2RlTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbmNvZGVyOjplbmNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OmVu
Y29kZUNoZWNrc3VtKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvRW5jb2Rl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVFbmNvZGVyLmguCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW5jb2Rl
cjo6ZW5jb2RlRW51bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
RW5jb2Rlcjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjpvcGVyYXRvcjw8KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpFbmNvZGVyOjpidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkVuY29kZXI6OmJ1ZmZlclNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKTogRGVsZXRl
ZC4KKwogMjAxNy0wMS0wOCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+
CiAKICAgICAgICAgSW50cm9kdWNlIENQVShYODZfU1NFMikgaW5zdGVhZCBvZiB2YXJpb3VzIFNT
RTIgY2hlY2tzCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2ICszNTMsMTMgQEAKIAkJREU1QTA5RkMxQkEz
Njk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU1QTA5RkIxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1v
bkNyeXB0b1NQSS5oICovOyB9OwogCQlFMTU1NTZGNTE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTU1NTZGMzE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxp
dGllcy5jcHAgKi87IH07CiAJCUUxNTU1NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFw
aGljVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5o
ICovOyB9OworCQlFNDNBNDY5NTFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTAxRTIyOEI5MTAw
Mjc2QjA1IC8qIERlY29kZXIuaCAqLzsgfTsKKwkJRTQzQTQ2OTYxRTIyOEI5MTAwMjc2QjA1IC8q
IEVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0M0E0NjkxMUUyMjhCOTEwMDI3NkIwNSAvKiBFbmNvZGVyLmggKi87IH07CisJCUU0M0E0Njk3
MUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0M0E0NjkyMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVy
LmNwcCAqLzsgfTsKKwkJRTQzQTQ2OTgxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTMxRTIy
OEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICovOyB9OworCQlFNDNBNDY5OTFFMjI4QjkxMDAy
NzZCMDUgLyogQ29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0M0E0Njk0MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oICovOyB9OworCQlFNDNB
NDY5QjFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBNDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJz
LmggKi87IH07CisJCUU0M0E0NjlEMUUyMjhGRDUwMDI3NkIwNSAvKiBDb2RlcnMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OUMxRTIyOEZE
NTAwMjc2QjA1IC8qIENvZGVycy5jcHAgKi87IH07CiAJCUU0QTBBRDM5MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRBMEFEMzcxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07
CiAJCUU0QTBBRDNBMUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTBBRDM4MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuaCAqLzsgfTsKIAkJRTRBMEFEM0QxQTk2MjUzQzAwNTM2REY2IC8qIFdv
cmtRdWV1ZUNvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QTBBRDNDMUE5NjI1M0MwMDUzNkRGNiAvKiBXb3JrUXVldWVDb2NvYS5jcHAgKi87
IH07CkBAIC03MjUsNiArNzMyLDEzIEBACiAJCURFNUEwOUZCMUJBMzY5OTIwMDNENDQyNCAvKiBD
b21tb25DcnlwdG9TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9u
Q3J5cHRvU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTU1NkYzMThBMEND
MTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlw
dG9ncmFwaGljVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0M0E0
NjkwMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQzQTQ2
OTExRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRW5jb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDNBNDY5
MjFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTQzQTQ2OTMxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRW5jb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUU0M0E0Njk0MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNDNBNDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NDNBNDY5QzFFMjI4RkQ1MDAyNzZCMDUgLyogQ29kZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0QTBBRDM3MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTRBMEFEMzgxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrUXVldWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTRBMEFEM0MxQTk2MjUzQzAwNTM2REY2IC8qIFdvcmtRdWV1ZUNv
Y29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZUNv
Y29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2OSw2ICs4ODMsNyBAQAog
CQkJCUE4QTQ3MjgxMTUxQTgyNUEwMDQxMjNGRiAvKiBkdG9hICovLAogCQkJCTFGQTQ3Qzg3MTUy
NTAyREEwMDU2OEQxQiAvKiBpb3MgKi8sCiAJCQkJQThBNDcyQzQxNTFBODI1QTAwNDEyM0ZGIC8q
IG1hYyAqLywKKwkJCQlFNDNBNDY4NTFFMjI4QjU3MDAyNzZCMDUgLyogcGVyc2lzdGVuY2UgKi8s
CiAJCQkJQ0VGNDgyMEMxOURBMzQ3NjAwQ0MwNEI4IC8qIHNwaSAqLywKIAkJCQlBOEE0NzMxQjE1
MUE4MjVCMDA0MTIzRkYgLyogdGV4dCAqLywKIAkJCQlBOEE0NzMzOTE1MUE4MjVCMDA0MTIzRkYg
LyogdGhyZWFkcyAqLywKQEAgLTEyNzcsNiArMTI5MiwyMCBAQAogCQkJbmFtZSA9IGNmOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJRTQzQTQ2ODUxRTIyOEI1NzAwMjc2QjA1
IC8qIHBlcnNpc3RlbmNlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQlFNDNBNDY5NDFFMjI4QjkxMDAyNzZCMDUgLyogQ29kZXIuaCAqLywKKwkJCQlFNDNB
NDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggKi8sCisJCQkJRTQzQTQ2OUMxRTIyOEZE
NTAwMjc2QjA1IC8qIENvZGVycy5jcHAgKi8sCisJCQkJRTQzQTQ2OTIxRTIyOEI5MTAwMjc2QjA1
IC8qIERlY29kZXIuY3BwICovLAorCQkJCUU0M0E0NjkwMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNv
ZGVyLmggKi8sCisJCQkJRTQzQTQ2OTMxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICov
LAorCQkJCUU0M0E0NjkxMUUyMjhCOTEwMDI3NkIwNSAvKiBFbmNvZGVyLmggKi8sCisJCQkpOwor
CQkJcGF0aCA9IHBlcnNpc3RlbmNlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
IAkJRTRBMEFEM0IxQTk2MjUxOTAwNTM2REY2IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEzMjksNiArMTM1OCw3IEBACiAJCQkJQThBNDcz
OTExNTFBODI1QjAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFQjk1RTFGMDE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNBRDE1MUE4MjVCMDA0MTIzRkYgLyogY2FjaGVkLXBvd2Vycy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTQzQTQ2OUIxRTIyOEZCMjAwMjc2QjA1IC8qIENvZGVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRENFRTIxRkIxQ0VBNzUzODAwMEMyMzk2IC8qIENGQnVuZGxlU1BJ
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1RTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hhcmFj
dGVyTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzk0MTUxQTgyNUIwMDQxMjNGRiAv
KiBDaGVja2VkQXJpdGhtZXRpYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzYyLDYgKzEzOTIsNyBA
QAogCQkJCUE4QTQ3M0IyMTUxQTgyNUIwMDQxMjNGRiAvKiBkb3VibGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3M0E3MTUxQTgyNUIwMDQxMjNGRiAvKiBEb3VibHlMaW5rZWRMaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzNCQjE1MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRTQzQTQ2OTYxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRERFOTMyMUNEQzA1MkQwMEZEMzQ5MSAvKiBkeWxkU1BJLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQUVBODhFMjFENkJCQ0Y0MDBFNUFENjQgLyogRW51bVRyYWl0cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ3QzQzNEIxREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVk
LmggaW4gSGVhZGVycyAqLywKQEAgLTE1MDgsNiArMTUzOSw3IEBACiAJCQkJQThBNDc0NTQxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQ1NTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU3BlY2lmaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjZCMjkxMURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0M0E0Njk1MUUyMjhCOTEwMDI3NkIwNSAvKiBE
ZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTMwNzFDQTFDNDA0MjcyMDAzODQ4OTggLyog
VGlueUxSVUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNF
MTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ5RUYxNjMxNkJCRkUwRDAw
MEE0MzMxIC8qIFRyaVN0YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTE1MzUsNiArMTU2Nyw3IEBA
CiAJCQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUU0M0E0Njk5MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0xNjkzLDggKzE3MjYsMTAgQEAKIAkJCQlBOEE0NzQxNDE1MUE4MjVCMDA0
MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFBMTUx
QTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTQzQTQ2OTgxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDY5NDE5MzE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVy
Q0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQzQTQ2OUQxRTIyOEZENTAwMjc2QjA1IC8qIENv
ZGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5NDE5OTE2RUFCMDQxMDAyNEUxNDYgLyog
U2NoZWR1bGVQYWlyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2OTQxOTcxNkVBQUZGODAw
MjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGNjZCMjhF
MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTcwOSw2
ICsxNzQ0LDcgQEAKIAkJCQlBNUJBMTVGQzE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nSW1wbENG
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUY1MTgyNDM0ODAwMEE4MkU2OSAvKiBTdHJp
bmdJbXBsTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RjMxODI0MzNBOTAwQTgyRTY5
IC8qIFN0cmluZ01hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUU0M0E0Njk3MUUyMjhCOTEwMDI3
NkIwNSAvKiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkE3MTY2NkRGQTMw
MEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzQ0MzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5M0YxOTkzRTE5RDc5NThEMDBDMjM5MEIgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvQ29kZXIuaAkocmV2aXNpb24gMjEwMzMw
KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVD
b2Rlci5oOjIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
TmV0d29ya0NhY2hlQ29kZXJfaAorI2RlZmluZSBOZXR3b3JrQ2FjaGVDb2Rlcl9oCisKKyNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0
d29ya0NhY2hlIHsKKworY2xhc3MgRGVjb2RlcjsKK2NsYXNzIEVuY29kZXI7CisgICAgCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29kZXIgeworICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUJiB0KQorICAgIHsKKyAgICAgICAgdC5lbmNvZGUoZW5j
b2Rlcik7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFQmIHQpCisgICAgeworICAgICAgICByZXR1cm4gVDo6ZGVjb2RlKGRlY29kZXIsIHQpOworICAg
IH0KK307CisKK30KK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL0NvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvQ29kZXIuaAkocmV2aXNpb24gMjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvQ29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTMgKzIzLDEwIEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOZXR3b3JrQ2FjaGVDb2Rl
cl9oCi0jZGVmaW5lIE5ldHdvcmtDYWNoZUNvZGVyX2gKKyNwcmFnbWEgb25jZQogCi0jaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEUpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdv
cmtDYWNoZSB7CituYW1lc3BhY2UgV1RGIHsKK25hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKIGNs
YXNzIERlY29kZXI7CiBjbGFzcyBFbmNvZGVyOwpAQCAtNDgsNiArNDUsMyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29kZXIgewogCiB9CiB9Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5jcHAJKHJldmlzaW9uIDIxMDMzMCkJKGZy
b20gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJz
LmNwcDoyMTAzMzApCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCisKKyNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Citu
YW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKwordm9pZCBDb2RlcjxBdG9taWNTdHJpbmc+OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCit7
CisgICAgZW5jb2RlciA8PCBhdG9taWNTdHJpbmcuc3RyaW5nKCk7Cit9CisKK2Jvb2wgQ29kZXI8
QXRvbWljU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEF0b21pY1N0cmluZyYgYXRv
bWljU3RyaW5nKQoreworICAgIFN0cmluZyBzdHJpbmc7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdHJpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdG9taWNTdHJpbmcgPSBz
dHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpCit7CisgICAgLy8gU3Bl
Y2lhbCBjYXNlIHRoZSBudWxsIHN0cmluZy4KKyAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7Cisg
ICAgICAgIGVuY29kZXIgPDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxl
bmd0aCgpOworICAgIGVuY29kZXIgPDwgbGVuZ3RoOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5kYXRhKCkp
LCBsZW5ndGgpOworfQorCitib29sIENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgQ1N0cmluZyYgcmVzdWx0KQoreworICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChsZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CisgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIG51bGwgc3RyaW5nLgorICAgICAgICByZXN1bHQgPSBDU3RyaW5n
KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEJlZm9yZSBhbGxvY2F0
aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcg
ZW5vdWdoLgorICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPGNo
YXI+KGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNoYXIqIGJ1ZmZlcjsK
KyAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBi
dWZmZXIpOworICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmVzdWx0ID0gc3RyaW5nOworICAgIHJldHVybiB0cnVlOworfQorCisKK3ZvaWQg
Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQoreworICAgIC8vIFNwZWNpYWwgY2FzZSB0aGUgbnVsbCBzdHJpbmcuCisgICAgaWYgKHN0
cmluZy5pc051bGwoKSkgeworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVpbnQzMl90
IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhC
aXQoKTsKKworICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKKworICAgIGlmIChpczhC
aXQpCisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzOCgpKSwgbGVuZ3RoICogc2l6ZW9m
KExDaGFyKSk7CisgICAgZWxzZQorICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVyczE2KCkp
LCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgZGVjb2RlU3RyaW5nVGV4dChEZWNvZGVyJiBk
ZWNvZGVyLCB1aW50MzJfdCBsZW5ndGgsIFN0cmluZyYgcmVzdWx0KQoreworICAgIC8vIEJlZm9y
ZSBhbGxvY2F0aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZl
ciBpcyBiaWcgZW5vdWdoLgorICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9D
b250YWluPENoYXJhY3RlclR5cGU+KGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKKyAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpj
cmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxl
bmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXN1bHQgPSBzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7ICAgIAorfQorCitib29s
IENvZGVyPFN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTdHJpbmcmIHJlc3VsdCkK
K3sKKyAgICB1aW50MzJfdCBsZW5ndGg7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsZW5ndGgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobGVuZ3RoID09IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBudWxs
IHN0cmluZy4KKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGJvb2wgaXM4Qml0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXM4
Qml0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGlzOEJpdCkKKyAgICAgICAg
cmV0dXJuIGRlY29kZVN0cmluZ1RleHQ8TENoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsK
KyAgICByZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxVQ2hhcj4oZGVjb2RlciwgbGVuZ3RoLCByZXN1
bHQpOworfQorCisKK3ZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQoreworICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKK30KKworYm9v
bCBDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU0hBMTo6RGln
ZXN0JiBkaWdlc3QpCit7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKK30KKworLy8gU3RvcmUgY29tbW9uIEhU
VFAgaGVhZGVycyBhcyBzdHJpbmdzIGluc3RlYWQgb2YgdXNpbmcgdGhlaXIgdmFsdWUgaW4gdGhl
IEhUVFBIZWFkZXJOYW1lIGVudW1lcmF0aW9uCisvLyBzbyB0aGF0IHRoZSBoZWFkZXJzIHN0b3Jl
ZCBpbiB0aGUgY2FjaGUgc3RheXMgdmFsaWQgZXZlbiBhZnRlciBIVFRQSGVhZGVyTmFtZS5pbiBn
ZXRzIHVwZGF0ZWQuCit2b2lkIENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYgaGVhZGVycykK
K3sKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihoZWFkZXJzLnNpemUoKSk7
CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IGhlYWRlcnMpIHsKKyAgICAgICAgZW5jb2RlciA8
PCBrZXlWYWx1ZS5rZXk7CisgICAgICAgIGVuY29kZXIgPDwga2V5VmFsdWUudmFsdWU7CisgICAg
fQorfQorCitib29sIENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYgaGVhZGVycykKK3sKKyAgICB1aW50
NjRfdCBoZWFkZXJzU2l6ZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhlYWRlcnNTaXplKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBoZWFk
ZXJzU2l6ZTsgKytpKSB7CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTdHJp
bmcgdmFsdWU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBoZWFkZXJzLmFkZChuYW1lLCB2YWx1ZSk7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCit9Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dU
Ri93dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuY3BwCShyZXZpc2lvbiAyMTAzMzApCisrKyBTb3VyY2UvV1RG
L3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNSArMjQs
MTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hl
Q29kZXJzLmgiCi0KLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyNpbmNsdWRlICJDb2RlcnMu
aCIKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hl
IHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogdm9pZCBDb2Rl
cjxBdG9taWNTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdG9taWNTdHJpbmcpCiB7CkBAIC0xNDQsNyArMTQyLDYgQEAgYm9vbCBDb2RlcjxTdHJp
bmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjbwogICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PFVD
aGFyPihkZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7CiB9CiAKLQogdm9pZCBDb2RlcjxTSEExOjpE
aWdlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGlnZXN0JiBkaWdl
c3QpCiB7CiAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwg
c2l6ZW9mKGRpZ2VzdCkpOwpAQCAtMTU1LDM1ICsxNTIsNSBAQCBib29sIENvZGVyPFNIQTE6OkRp
Z2VzdD46OmRlY29kZShEZWNvZGVyCiAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKIH0KIAotLy8gU3RvcmUgY29t
bW9uIEhUVFAgaGVhZGVycyBhcyBzdHJpbmdzIGluc3RlYWQgb2YgdXNpbmcgdGhlaXIgdmFsdWUg
aW4gdGhlIEhUVFBIZWFkZXJOYW1lIGVudW1lcmF0aW9uCi0vLyBzbyB0aGF0IHRoZSBoZWFkZXJz
IHN0b3JlZCBpbiB0aGUgY2FjaGUgc3RheXMgdmFsaWQgZXZlbiBhZnRlciBIVFRQSGVhZGVyTmFt
ZS5pbiBnZXRzIHVwZGF0ZWQuCi12b2lkIENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYgaGVh
ZGVycykKLXsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihoZWFkZXJzLnNp
emUoKSk7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IGhlYWRlcnMpIHsKLSAgICAgICAgZW5j
b2RlciA8PCBrZXlWYWx1ZS5rZXk7Ci0gICAgICAgIGVuY29kZXIgPDwga2V5VmFsdWUudmFsdWU7
Ci0gICAgfQotfQotCi1ib29sIENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYgaGVhZGVycykKLXsKLSAg
ICB1aW50NjRfdCBoZWFkZXJzU2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhlYWRlcnNT
aXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkg
PCBoZWFkZXJzU2l6ZTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBTdHJpbmcgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBoZWFkZXJzLmFkZChuYW1lLCB2YWx1ZSk7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCiB9CiB9Ci0KLSNlbmRpZgpJbmRleDogU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmgJKHJldmlzaW9uIDIxMDMzMCkJKGZyb20gU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmg6MjEwMzMw
KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNv
ZGVyLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVyTWFwLmg+
CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
U0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Citu
YW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gc3RydWN0IENvZGVyPHN0ZDo6cGFpcjxULCBVPj4geworICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBzdGQ6OnBhaXI8VCwgVT4mIHBhaXIpCisgICAgewor
ICAgICAgICBlbmNvZGVyIDw8IHBhaXIuZmlyc3QgPDwgcGFpci5zZWNvbmQ7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6cGFpcjxULCBVPiYg
cGFpcikKKyAgICB7CisgICAgICAgIFQgZmlyc3Q7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoZmlyc3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFUgc2Vjb25k
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNlY29uZCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgcGFpci5maXJzdCA9IGZpcnN0OworICAgICAgICBwYWlyLnNl
Y29uZCA9IHNlY29uZDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgUmVwLCB0eXBlbmFtZSBQZXJpb2Q+IHN0cnVjdCBDb2RlcjxzdGQ6OmNocm9u
bzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIGR1
cmF0aW9uKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPFJl
cD46OnZhbHVlICYmIHN0ZDo6aXNfc2lnbmVkPFJlcD46OnZhbHVlICYmIHNpemVvZihSZXApIDw9
IHNpemVvZihpbnQ2NF90KSwgIlNlcmlhbGl6YXRpb24gb2YgdGhpcyBSZXAgdHlwZSBpcyBub3Qg
c3VwcG9ydGVkIHlldC4gT25seSBzaWduZWQgaW50ZWdlciB0eXBlIHdoaWNoIGNhbiBiZSBmaXQg
aW4gYW4gaW50NjRfdCBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLiIpOworICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGludDY0X3Q+KGR1cmF0aW9uLmNvdW50KCkpOworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OmNocm9ubzo6ZHVyYXRp
b248UmVwLCBQZXJpb2Q+JiByZXN1bHQpCisgICAgeworICAgICAgICBpbnQ2NF90IGNvdW50Owor
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmVzdWx0ID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9k
PihzdGF0aWNfY2FzdDxSZXA+KGNvdW50KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlcjxzdGQ6Om9wdGlvbmFsPFQ+
PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8VD4mIG9wdGlvbmFsKQorICAgIHsKKyAgICAgICAgaWYgKCFvcHRpb25hbCkgewor
ICAgICAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgZW5jb2RlciA8PCB0cnVlOworICAgICAgICBlbmNvZGVy
IDw8IG9wdGlvbmFsLnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6Om9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKKyAgICB7Cisg
ICAgICAgIGJvb2wgaXNFbmdhZ2VkOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRW5n
YWdlZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAo
IWlzRW5nYWdlZCkgeworICAgICAgICAgICAgb3B0aW9uYWwgPSBzdGQ6Om51bGxvcHQ7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVCB2YWx1
ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBvcHRpb25hbCA9IFdURk1vdmUodmFsdWUpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlU
eXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBDb2RlcjxXVEY6OktleVZhbHVlUGFpcjxL
ZXlUeXBlLCBWYWx1ZVR5cGU+PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIp
CisgICAgeworICAgICAgICBlbmNvZGVyIDw8IHBhaXIua2V5IDw8IHBhaXIudmFsdWU7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdURjo6S2V5VmFs
dWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCisgICAgeworICAgICAgICBLZXlUeXBl
IGtleTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIFZhbHVlVHlwZSB2YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
cGFpci5rZXkgPSBrZXk7CisgICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8Ym9vbCBmaXhlZFNpemVFbGVtZW50cywg
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IFZlY3Rv
ckNvZGVyPGZhbHNlLCBULCBpbmxpbmVDYXBhY2l0eT4geworICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpCisgICAgeworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0
b3Iuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHZlY3RvcltpXTsKKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgdWludDY0X3Qgc2l6ZTsKKyAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRtcDsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIFQgZWxlbWVudDsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZWxlbWVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICB0bXAuYXBwZW5kKFdURk1vdmUoZWxl
bWVudCkpOworICAgICAgICB9CisKKyAgICAgICAgdG1wLnNocmlua1RvRml0KCk7CisgICAgICAg
IHZlY3Rvci5zd2FwKHRtcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IFZlY3RvckNv
ZGVyPHRydWUsIFQsIGlubGluZUNhcGFjaXR5PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikK
KyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5z
aXplKCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNp
emVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisg
ICAgeworICAgICAgICB1aW50NjRfdCBzaXplOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIFNpbmNlIHdl
IGtub3cgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGVsZW1lbnRzLCB3ZSBjYW4gYWxsb2NhdGUgdGhl
IHZlY3RvciBpbgorICAgICAgICAvLyBvbmUgZmVsbCBzd29vcC4gQmVmb3JlIGFsbG9jYXRpbmcg
d2UgbXVzdCBob3dldmVyIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlcgorICAgICAg
ICAvLyBpcyBiaWcgZW5vdWdoLgorICAgICAgICBpZiAoIWRlY29kZXIuYnVmZmVySXNMYXJnZUVu
b3VnaFRvQ29udGFpbjxUPihzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CisgICAgICAgIHRlbXAucmVzaXpl
KHNpemUpOworCisgICAgICAgIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSk7CisKKyAg
ICAgICAgdmVjdG9yLnN3YXAodGVtcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IENv
ZGVyPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IDogVmVjdG9yQ29kZXI8c3RkOjppc19hcml0
aG1ldGljPFQ+Ojp2YWx1ZSwgVCwgaW5saW5lQ2FwYWNpdHk+IHsgfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPiBzdHJ1Y3QgQ29kZXI8
SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRU
cmFpdHNBcmc+PiB7CisgICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4gSGFzaE1hcFR5cGU7CisKKyAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSGFzaE1hcFR5cGUmIGhh
c2hNYXApCisgICAgeworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Piho
YXNoTWFwLnNpemUoKSk7CisgICAgICAgIGZvciAodHlwZW5hbWUgSGFzaE1hcFR5cGU6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaGFzaE1hcC5iZWdpbigpLCBlbmQgPSBoYXNoTWFwLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgICAgICBlbmNvZGVyIDw8ICppdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hNYXAp
CisgICAgeworICAgICAgICB1aW50NjRfdCBoYXNoTWFwU2l6ZTsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShoYXNoTWFwU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgSGFzaE1hcFR5cGUgdGVtcEhhc2hNYXA7CisgICAgICAgIGZvciAodWludDY0X3QgaSA9
IDA7IGkgPCBoYXNoTWFwU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBLZXlBcmcga2V5OworICAg
ICAgICAgICAgTWFwcGVkQXJnIHZhbHVlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShrZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgaWYgKCF0ZW1wSGFzaE1hcC5hZGQoa2V5LCB2YWx1ZSkuaXNOZXdFbnRyeSkg
eworICAgICAgICAgICAgICAgIC8vIFRoZSBoYXNoIG1hcCBhbHJlYWR5IGhhcyB0aGUgc3BlY2lm
aWVkIGtleSwgYmFpbC4KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBoYXNoTWFwLnN3YXAodGVtcEhhc2hNYXApOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZz4gc3RydWN0IENvZGVyPEhh
c2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+PiB7CisgICAgdHlwZWRlZiBIYXNo
U2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPiBIYXNoU2V0VHlwZTsKKworICAgIHN0
YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNoU2V0VHlwZSYgaGFz
aFNldCkKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhh
c2hTZXQuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBIYXNoU2V0VHlwZTo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBoYXNoU2V0LmJlZ2luKCksIGVuZCA9IGhhc2hTZXQuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgKml0OworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBIYXNoU2V0VHlwZSYgaGFzaFNldCkK
KyAgICB7CisgICAgICAgIHVpbnQ2NF90IGhhc2hTZXRTaXplOworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGhhc2hTZXRTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBIYXNoU2V0VHlwZSB0ZW1wSGFzaFNldDsKKyAgICAgICAgZm9yICh1aW50NjRfdCBpID0g
MDsgaSA8IGhhc2hTZXRTaXplOyArK2kpIHsKKyAgICAgICAgICAgIEtleUFyZyBrZXk7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICBpZiAoIXRlbXBIYXNoU2V0LmFkZChrZXkpLmlzTmV3RW50
cnkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNw
ZWNpZmllZCBrZXksIGJhaWwuCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaGFzaFNldC5zd2FwKHRlbXBIYXNoU2V0KTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29k
ZXI8QXRvbWljU3RyaW5nPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25z
dCBBdG9taWNTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIEF0b21p
Y1N0cmluZyYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8Q1N0cmluZz4geworICAg
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgQ1N0cmluZyYpOworICAgIHN0YXRp
YyBib29sIGRlY29kZShEZWNvZGVyJiwgQ1N0cmluZyYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29kZXI8U3RyaW5nPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25z
dCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFN0cmluZyYpOwor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiB7
CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkNl
cnRpZmljYXRlSW5mbyYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8U0hBMTo6RGln
ZXN0PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBTSEExOjpEaWdl
c3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFNIQTE6OkRpZ2VzdCYpOwor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD4gewor
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRl
ck1hcCYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6SFRUUEhl
YWRlck1hcCYpOworfTsKKworfQorfQorI2VuZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJz
aXN0ZW5jZS9Db2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9Db2RlcnMuaAkocmV2aXNpb24gMjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvQ29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDIxICsyNSwxNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotCi0jaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlRGVjb2Rlci5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRl
ck1hcC5oPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1NIQTEuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3Bl
cnNpc3RlbmNlL0RlY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5o
PgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworbmFtZXNw
YWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQ29kZXI8c3RkOjpwYWlyPFQsIFU+PiB7CiAgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxULCBVPiYgcGFp
cikKQEAgLTI2NiwzNSArMjYyLDI0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgSGFzaEEKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPEF0b21pY1N0cmluZz4gewot
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgQXRvbWljU3RyaW5nJik7Ci0g
ICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBBdG9taWNTdHJpbmcmKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBBdG9taWNT
dHJpbmcmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBBdG9taWNTdHJpbmcmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPENTdHJp
bmc+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IENTdHJpbmcmKTsK
LSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIENTdHJpbmcmKTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBDU3RyaW5nJik7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQ1N0
cmluZyYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8U3RyaW5nPiB7Ci0gICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoRGVjb2RlciYsIFN0cmluZyYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29k
ZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKLSAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN0cmluZyYp
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFN0
cmluZyYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8U0hBMTo6RGlnZXN0PiB7Ci0g
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBTSEExOjpEaWdlc3QmKTsKLSAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFNIQTE6OkRpZ2VzdCYpOwotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD4gewotICAgIHN0YXRp
YyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYpOwot
ICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYp
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBk
ZWNvZGUoRGVjb2RlciYsIFNIQTE6OkRpZ2VzdCYpOwogfTsKIAogfQogfQotI2VuZGlmCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmNwcAkocmV2aXNpb24gMjEwMzMwKQko
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNv
ZGVyLmNwcDoyMTAzMzApCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCwgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgi
CisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVu
Y29kZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsK
KworRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJT
aXplKQorICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZm
ZXIpCisgICAgLCBtX2J1ZmZlckVuZChidWZmZXIgKyBidWZmZXJTaXplKQoreworfQorCitEZWNv
ZGVyOjp+RGVjb2RlcigpCit7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6YnVmZmVySXNMYXJnZUVub3Vn
aFRvQ29udGFpbihzaXplX3Qgc2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZSA8PSBzdGF0
aWNfY2FzdDxzaXplX3Q+KG1fYnVmZmVyRW5kIC0gbV9idWZmZXJQb3NpdGlvbik7Cit9CisKK2Jv
b2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKQoreworICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVyUG9zaXRpb24s
IHNpemUpOworICAgIG1fYnVmZmVyUG9zaXRpb24gKz0gc2l6ZTsKKworICAgIEVuY29kZXI6OnVw
ZGF0ZUNoZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEsIHNpemUpOworICAgIHJldHVybiB0cnVl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgorYm9vbCBEZWNvZGVyOjpkZWNvZGVOdW1i
ZXIoVHlwZSYgdmFsdWUpCit7CisgICAgaWYgKCFidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWlu
KHNpemVvZih2YWx1ZSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtZW1jcHkoJnZh
bHVlLCBtX2J1ZmZlclBvc2l0aW9uLCBzaXplb2YodmFsdWUpKTsKKyAgICBtX2J1ZmZlclBvc2l0
aW9uICs9IHNpemVvZihUeXBlKTsKKworICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVt
YmVyKG1fc2hhMSwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERlY29kZXI6
OmRlY29kZShib29sJiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQp
OworfQorCitib29sIERlY29kZXI6OmRlY29kZSh1aW50OF90JiByZXN1bHQpCit7CisgICAgcmV0
dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OmRlY29kZSh1aW50
MTZfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKK30KKwor
Ym9vbCBEZWNvZGVyOjpkZWNvZGUodWludDMyX3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVj
b2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ2NF90JiBy
ZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIERl
Y29kZXI6OmRlY29kZShpbnQzMl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZU51bWJl
cihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OmRlY29kZShpbnQ2NF90JiByZXN1bHQpCit7
CisgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OmRl
Y29kZShmbG9hdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsK
K30KKworYm9vbCBEZWNvZGVyOjpkZWNvZGUoZG91YmxlJiByZXN1bHQpCit7CisgICAgcmV0dXJu
IGRlY29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3Vt
KCkKK3sKKyAgICBTSEExOjpEaWdlc3QgY29tcHV0ZWRIYXNoOworICAgIG1fc2hhMS5jb21wdXRl
SGFzaChjb21wdXRlZEhhc2gpOworCisgICAgU0hBMTo6RGlnZXN0IHNhdmVkSGFzaDsKKyAgICBp
ZiAoIWRlY29kZUZpeGVkTGVuZ3RoRGF0YShzYXZlZEhhc2guZGF0YSgpLCBzaXplb2Yoc2F2ZWRI
YXNoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjb21wdXRlZEhhc2gg
PT0gc2F2ZWRIYXNoOworfQorCit9Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYv
cGVyc2lzdGVuY2UvRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL0RlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNCArMjQsMTIg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRGVj
b2Rlci5oIgorI2luY2x1ZGUgIkRlY29kZXIuaCIKIAotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hF
KQorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmg+CiAKLSNpbmNsdWRlICJOZXR3
b3JrQ2FjaGVFbmNvZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdv
cmtDYWNoZSB7CituYW1lc3BhY2UgV1RGIHsKK25hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKIERl
Y29kZXI6OkRlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkK
ICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKQEAgLTEzMyw1ICsxMzEsMyBAQCBib29sIERlY29kZXI6
OnZlcmlmeUNoZWNrc3VtKCkKIAogfQogfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL0RlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJz
aXN0ZW5jZS9EZWNvZGVyLmgJKHJldmlzaW9uIDIxMDMzMCkJKGZyb20gU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5oOjIxMDMzMCkKKysrIFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTmV0d29ya0NhY2hlRGVjb2Rlcl9oCisj
ZGVmaW5lIE5ldHdvcmtDYWNoZURlY29kZXJfaAorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUp
CisKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2Rlci5oIgorI2luY2x1ZGUgPHd0Zi9TSEExLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CisKK2NsYXNz
IERlY29kZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERl
Y29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7CisgICAgdmly
dHVhbCB+RGVjb2RlcigpOworCisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
YnVmZmVyRW5kIC0gbV9idWZmZXI7IH0KKyAgICBzaXplX3QgY3VycmVudE9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyUG9zaXRpb24gLSBtX2J1ZmZlcjsgfQorCisgICAgYm9vbCB2ZXJp
ZnlDaGVja3N1bSgpOworCisgICAgYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCos
IHNpemVfdCk7CisKKyAgICBib29sIGRlY29kZShib29sJik7CisgICAgYm9vbCBkZWNvZGUodWlu
dDhfdCYpOworICAgIGJvb2wgZGVjb2RlKHVpbnQxNl90Jik7CisgICAgYm9vbCBkZWNvZGUodWlu
dDMyX3QmKTsKKyAgICBib29sIGRlY29kZSh1aW50NjRfdCYpOworICAgIGJvb2wgZGVjb2RlKGlu
dDMyX3QmKTsKKyAgICBib29sIGRlY29kZShpbnQ2NF90Jik7CisgICAgYm9vbCBkZWNvZGUoZmxv
YXQmKTsKKyAgICBib29sIGRlY29kZShkb3VibGUmKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGJvb2wgZGVjb2RlRW51bShUJiByZXN1bHQpCisgICAgeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihUKSA8PSA4LCAiRW51bSB0eXBlIFQgbXVzdCBub3QgYmUgbGFyZ2VyIHRoYW4g
NjQgYml0cyEiKTsKKworICAgICAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNv
ZGUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAg
cmVzdWx0ID0gc3RhdGljX2Nhc3Q8VD4odmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZShUJiB0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIENvZGVyPFQ+OjpkZWNvZGUoKnRoaXMsIHQpOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250
YWluKHNpemVfdCBudW1FbGVtZW50cykgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSwgIlR5cGUgVCBtdXN0IGhhdmUgYSBmaXhl
ZCwga25vd24gZW5jb2RlZCBzaXplISIpOworCisgICAgICAgIGlmIChudW1FbGVtZW50cyA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0Nv
bnRhaW4obnVtRWxlbWVudHMgKiBzaXplb2YoVCkpOworICAgIH0KKworICAgIHN0YXRpYyBjb25z
dCBib29sIGlzSVBDRGVjb2RlciA9IGZhbHNlOworCitwcml2YXRlOgorICAgIGJvb2wgYnVmZmVy
SXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplX3QpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+IGJvb2wgZGVjb2RlTnVtYmVyKFR5cGUmKTsKKworICAgIGNvbnN0IHVpbnQ4X3Qq
IG1fYnVmZmVyOworICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29u
c3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisKKyAgICBTSEExIG1fc2hhMTsKK307CisKK30gCit9
CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNv
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5o
CShyZXZpc2lvbiAyMTAzMzApCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDM5ICsyMywzNiBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgTmV0d29ya0NhY2hlRGVjb2Rlcl9oCi0j
ZGVmaW5lIE5ldHdvcmtDYWNoZURlY29kZXJfaAorI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKLQotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvQ29kZXIuaD4KIAotbmFt
ZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKK25hbWVzcGFjZSBXVEYg
eworbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogY2xhc3MgRGVjb2RlciB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRGVjb2Rlcihjb25zdCB1aW50OF90KiBi
dWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKLSAgICB2aXJ0dWFsIH5EZWNvZGVyKCk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3Qg
YnVmZmVyU2l6ZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBz
aXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQog
ICAgIHNpemVfdCBjdXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3NpdGlv
biAtIG1fYnVmZmVyOyB9CiAKLSAgICBib29sIHZlcmlmeUNoZWNrc3VtKCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdmVyaWZ5Q2hlY2tzdW0oKTsKIAotICAgIGJvb2wgZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBi
b29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90Kiwgc2l6ZV90KTsKIAotICAgIGJvb2wg
ZGVjb2RlKGJvb2wmKTsKLSAgICBib29sIGRlY29kZSh1aW50OF90Jik7Ci0gICAgYm9vbCBkZWNv
ZGUodWludDE2X3QmKTsKLSAgICBib29sIGRlY29kZSh1aW50MzJfdCYpOwotICAgIGJvb2wgZGVj
b2RlKHVpbnQ2NF90Jik7Ci0gICAgYm9vbCBkZWNvZGUoaW50MzJfdCYpOwotICAgIGJvb2wgZGVj
b2RlKGludDY0X3QmKTsKLSAgICBib29sIGRlY29kZShmbG9hdCYpOwotICAgIGJvb2wgZGVjb2Rl
KGRvdWJsZSYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZShib29sJik7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKHVpbnQ4X3QmKTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWludDE2X3QmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgYm9vbCBkZWNvZGUodWludDMyX3QmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBk
ZWNvZGUodWludDY0X3QmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUoaW50
MzJfdCYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZShpbnQ2NF90Jik7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKGZsb2F0Jik7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgZGVjb2RlKGRvdWJsZSYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gYm9vbCBkZWNvZGVFbnVtKFQmIHJlc3VsdCkKICAgICB7CkBAIC04OCw3ICs4NSw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0lQQ0RlY29kZXIgPSBmYWxzZTsKIAogcHJp
dmF0ZToKLSAgICBib29sIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90KSBjb25z
dDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250
YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gYm9vbCBkZWNv
ZGVOdW1iZXIoVHlwZSYpOwogCiAgICAgY29uc3QgdWludDhfdCogbV9idWZmZXI7CkBAIC0xMDEs
NSArOTgsMyBAQCBwcml2YXRlOgogfSAKIH0KIAotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuY3BwCShyZXZpc2lvbiAyMTAzMzApCShmcm9tIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuY3Bw
OjIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKKworI2lmIEVOQUJM
RShORVRXT1JLX0NBQ0hFKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3Jr
Q2FjaGUgeworCitFbmNvZGVyOjpFbmNvZGVyKCkKK3sKK30KKworRW5jb2Rlcjo6fkVuY29kZXIo
KQoreworfQorCit1aW50OF90KiBFbmNvZGVyOjpncm93KHNpemVfdCBzaXplKQoreworICAgIHNp
emVfdCBuZXdQb3NpdGlvbiA9IG1fYnVmZmVyLnNpemUoKTsKKyAgICBtX2J1ZmZlci5ncm93KG1f
YnVmZmVyLnNpemUoKSArIHNpemUpOworICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCkgKyBuZXdQ
b3NpdGlvbjsKK30KKwordm9pZCBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYg
c2hhMSwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgYXV0byB0eXBl
U2FsdCA9IFNhbHQ8dWludDhfdCo+Ojp2YWx1ZTsKKyAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KCZ0eXBlU2FsdCksIHNpemVvZih0eXBlU2FsdCkpOworICAgIHNo
YTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIHVwZGF0
ZUNoZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEsIHNpemUpOworCisgICAgdWludDhfdCogYnVm
ZmVyID0gZ3JvdyhzaXplKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUg
dmFsdWUpCit7CisgICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2
YWx1ZSk7CisKKyAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVvZihUeXBlKSk7CisgICAg
bWVtY3B5KGJ1ZmZlciwgJnZhbHVlLCBzaXplb2YoVHlwZSkpOworfQorCit2b2lkIEVuY29kZXI6
OmVuY29kZShib29sIHZhbHVlKQoreworICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Cit9CisKK3Zv
aWQgRW5jb2Rlcjo6ZW5jb2RlKHVpbnQ4X3QgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZh
bHVlKTsKK30KKwordm9pZCBFbmNvZGVyOjplbmNvZGUodWludDE2X3QgdmFsdWUpCit7CisgICAg
ZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30KKwordm9pZCBFbmNvZGVyOjplbmNvZGUodWludDMyX3Qg
dmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30KKwordm9pZCBFbmNvZGVyOjpl
bmNvZGUodWludDY0X3QgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30KKwor
dm9pZCBFbmNvZGVyOjplbmNvZGUoaW50MzJfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIo
dmFsdWUpOworfQorCit2b2lkIEVuY29kZXI6OmVuY29kZShpbnQ2NF90IHZhbHVlKQoreworICAg
IGVuY29kZU51bWJlcih2YWx1ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGZsb2F0IHZh
bHVlKQoreworICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5j
b2RlKGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lk
IEVuY29kZXI6OmVuY29kZUNoZWNrc3VtKCkKK3sKKyAgICBTSEExOjpEaWdlc3QgaGFzaDsKKyAg
ICBtX3NoYTEuY29tcHV0ZUhhc2goaGFzaCk7CisgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGhh
c2guZGF0YSgpLCBoYXNoLnNpemUoKSk7Cit9CisKK30KK30KKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmNwcAkocmV2aXNpb24gMjEwMzMwKQorKysgU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDEyICsyNCwxMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOZXR3
b3JrQ2FjaGVFbmNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5oIgogCi0jaWYgRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCisjaW5jbHVkZSAiU0hBMS5oIgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lz
dGVuY2UgewogCiBFbmNvZGVyOjpFbmNvZGVyKCkKIHsKQEAgLTEyNCw1ICsxMjQsMyBAQCB2b2lk
IEVuY29kZXI6OmVuY29kZUNoZWNrc3VtKCkKIAogfQogfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmgJKHJldmlzaW9uIDIxMDMzMCkJKGZyb20gU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5oOjIxMDMz
MCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTmV0d29ya0NhY2hlRW5j
b2Rlcl9oCisjZGVmaW5lIE5ldHdvcmtDYWNoZUVuY29kZXJfaAorCisjaWYgRU5BQkxFKE5FVFdP
UktfQ0FDSEUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2Rlci5oIgorI2luY2x1ZGUgPHd0
Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCitjbGFzcyBFbmNvZGVyOworY2xhc3MgRGF0YVJl
ZmVyZW5jZTsKKworY2xhc3MgRW5jb2RlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgRW5jb2RlcigpOworICAgIHZpcnR1YWwgfkVuY29kZXIoKTsKKworICAg
IHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShj
b25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
ZW5jb2RlRW51bShUIHQpCisgICAgeworICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoVCkg
PD0gc2l6ZW9mKHVpbnQ2NF90KSwgZW51bV90eXBlX211c3Rfbm90X2JlX2xhcmdlcl90aGFuXzY0
X2JpdHMpOworCisgICAgICAgIGVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odCkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW5jb2RlKGNvbnN0IFQmIHQpCisg
ICAgeworICAgICAgICBDb2RlcjxUPjo6ZW5jb2RlKCp0aGlzLCB0KTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFbmNvZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFQmIHQpCisgICAg
eworICAgICAgICBlbmNvZGUodCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7
IH0KKyAgICBzaXplX3QgYnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLnNpemUo
KTsgfQorCisgICAgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25z
dCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RhdGlj
IHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYsIFR5cGUpOworCisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CisKK3ByaXZhdGU6CisgICAgdm9pZCBl
bmNvZGUoYm9vbCk7CisgICAgdm9pZCBlbmNvZGUodWludDhfdCk7CisgICAgdm9pZCBlbmNvZGUo
dWludDE2X3QpOworICAgIHZvaWQgZW5jb2RlKHVpbnQzMl90KTsKKyAgICB2b2lkIGVuY29kZSh1
aW50NjRfdCk7CisgICAgdm9pZCBlbmNvZGUoaW50MzJfdCk7CisgICAgdm9pZCBlbmNvZGUoaW50
NjRfdCk7CisgICAgdm9pZCBlbmNvZGUoZmxvYXQpOworICAgIHZvaWQgZW5jb2RlKGRvdWJsZSk7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiB2b2lkIGVuY29kZU51bWJlcihUeXBlKTsK
KworICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
eXBlPiBzdHJ1Y3QgU2FsdDsKKworICAgIFZlY3Rvcjx1aW50OF90LCA0MDk2PiBtX2J1ZmZlcjsK
KyAgICBTSEExIG1fc2hhMTsKK307CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0
PGJvb2w+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMzsgfTsKK3RlbXBsYXRlIDw+
IHN0cnVjdCBFbmNvZGVyOjpTYWx0PHVpbnQ4X3Q+IHsgc3RhdGljIGNvbnN0ICB1bnNpZ25lZCB2
YWx1ZSA9IDU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50MTZfdD4g
eyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSA3OyB9OwordGVtcGxhdGUgPD4gc3RydWN0
IEVuY29kZXI6OlNhbHQ8dWludDMyX3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0g
MTE7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50NjRfdD4geyBzdGF0
aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAxMzsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNv
ZGVyOjpTYWx0PGludDMyX3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMTc7IH07
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDxpbnQ2NF90PiB7IHN0YXRpYyBjb25z
dCB1bnNpZ25lZCB2YWx1ZSA9IDE5OyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNh
bHQ8ZmxvYXQ+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMjM7IH07Cit0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDxkb3VibGU+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHZhbHVlID0gMjk7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50OF90
Kj4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAxMDE7IH07CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUeXBlPgordm9pZCBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEEx
JiBzaGExLCBUeXBlIHZhbHVlKQoreworICAgIGF1dG8gdHlwZVNhbHQgPSBTYWx0PFR5cGU+Ojp2
YWx1ZTsKKyAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0eXBl
U2FsdCksIHNpemVvZih0eXBlU2FsdCkpOworICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7Cit9CisKK30KK30KKworI2Vu
ZGlmCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmgJKHJldmlz
aW9uIDIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjMsMTcgKzIzLDE0IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOZXR3b3JrQ2FjaGVFbmNvZGVyX2gKLSNkZWZpbmUg
TmV0d29ya0NhY2hlRW5jb2Rlcl9oCisjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQotCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXIuaCIKICNpbmNsdWRlIDx3dGYv
U0hBMS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVu
Y2UvQ29kZXIuaD4KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hl
IHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogY2xhc3MgRW5j
b2RlcjsKIGNsYXNzIERhdGFSZWZlcmVuY2U7CkBAIC00MSwxMSArMzgsMTEgQEAgY2xhc3MgRGF0
YVJlZmVyZW5jZTsKIGNsYXNzIEVuY29kZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIEVuY29kZXIoKTsKLSAgICB2aXJ0dWFsIH5FbmNvZGVyKCk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXIoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkVu
Y29kZXIoKTsKIAotICAgIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICB2b2lkIGVuY29kZUZp
eGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGVDaGVja3N1bSgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW5jb2RlRW51bShUIHQpCiAgICAgewpAQCAtNjgsMjEg
KzY1LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBjb25zdCB7IHJl
dHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KICAgICBzaXplX3QgYnVmZmVyU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQogCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tz
dW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1
aW50OF90Kiwgc2l6ZV90KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RhdGljIHZv
aWQgdXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYsIFR5cGUpOwogCiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBlbmNv
ZGUoYm9vbCk7Ci0gICAgdm9pZCBlbmNvZGUodWludDhfdCk7Ci0gICAgdm9pZCBlbmNvZGUodWlu
dDE2X3QpOwotICAgIHZvaWQgZW5jb2RlKHVpbnQzMl90KTsKLSAgICB2b2lkIGVuY29kZSh1aW50
NjRfdCk7Ci0gICAgdm9pZCBlbmNvZGUoaW50MzJfdCk7Ci0gICAgdm9pZCBlbmNvZGUoaW50NjRf
dCk7Ci0gICAgdm9pZCBlbmNvZGUoZmxvYXQpOwotICAgIHZvaWQgZW5jb2RlKGRvdWJsZSk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGJvb2wpOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGVuY29kZSh1aW50OF90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGUodWludDE2X3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZSh1
aW50MzJfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKHVpbnQ2NF90KTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoaW50MzJfdCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGludDY0X3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGVuY29kZShmbG9hdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2Rl
KGRvdWJsZSk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiB2b2lkIGVuY29kZU51bWJl
cihUeXBlKTsKIApAQCAtMTE1LDYgKzExMiwzIEBAIHZvaWQgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tz
dW1Gb3JOdW1iZXIoU0gKIAogfQogfQotCi0jZW5kaWYKLSNlbmRpZgpJbmRleDogU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
cmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTctMDEtMDggIEFudHRpIEtvaXZpc3RvICA8YW50dGlA
YXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgY2FjaGUgY29kZXJzIHRvIFdURgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGUuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVDb2Rlci5oOiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUNvZGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
Q29kZXI8QXRvbWljU3RyaW5nPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+OjplbmNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+OjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFN0cmlu
Zz46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVj
b2RlU3RyaW5nVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
Q29kZXI8U3RyaW5nPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6SFRUUEhl
YWRlck1hcD46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6Q29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD46OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmg6CisgICAgICAg
ICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPHN0ZDo6
b3B0aW9uYWw8VD4+OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkNvZGVyPHN0ZDo6b3B0aW9uYWw8VD4+OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyc0NvY29hLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjplbmNvZGVDRkRhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmRlY29kZUNGRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZW5jb2RlU2VjVHJ1c3RSZWYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmRlY29kZVNlY1RydXN0UmVmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjplbmNvZGVDZXJ0aWZpY2F0ZUNoYWlu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpkZWNvZGVDZXJ0aWZp
Y2F0ZUNoYWluKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2Rl
cjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmRl
Y29kZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGVjb2Rlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGVjb2Rlci5oOiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OktleTo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVLZXkuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpk
ZWNvZGVSZWNvcmRNZXRhRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZW5j
b2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpTdWJyZXNvdXJjZUluZm86OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6U3VicmVzb3VyY2VJbmZvOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OlN1YnJlc291cmNlc0VudHJ5OjplbmNvZGVBc1N0b3JhZ2VSZWNvcmQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlc0VudHJ5OjpkZWNvZGVTdG9yYWdl
UmVjb3JkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJy
ZXNvdXJjZXNFbnRyeS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5jcHA6CisgICAgICAgIChBUEk6OmVuY29kZUNvbnRlbnRFeHRlbnNpb25N
ZXRhRGF0YSk6CisgICAgICAgIChBUEk6OmRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSk6
CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE3LTAx
LTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUGFz
c1JlZlB0ciB1c2UgZnJvbSAiaW5zcGVjdG9yIiwgInBsYXRmb3JtL3NxbCIsIGFuZCAicGxhdGZv
cm0vdGV4dCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRQYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDIx
MDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQCB2b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjplbmNvCiAgICAgZW5jb2RlciA8PCBzaG91bGRD
bGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0OwogICAgIGVuY29kZXIgPDwgZGVmZXJz
TG9hZGluZzsKICAgICBlbmNvZGVyIDw8IG5lZWRzQ2VydGlmaWNhdGVJbmZvOworICAgIGVuY29k
ZXIgPDwgcmVsYXRlZERhdGFUb1JldHJpZXZlVHlwZTsKICAgICBlbmNvZGVyIDw8IG1heGltdW1C
dWZmZXJpbmdUaW1lOwogfQogCkBAIC0xMzksNiArMTQwLDggQEAgYm9vbCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVyczo6ZGVjbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQubmVlZHNDZXJ0aWZpY2F0ZUluZm8pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucmVsYXRlZERhdGFUb1Jl
dHJpZXZlVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5tYXhpbXVtQnVmZmVyaW5nVGltZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVDb2Rlci5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2Rlci5oCShub25leGlzdGVudCkK
QEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTmV0d29ya0NhY2hl
Q29kZXJfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVDb2Rlcl9oCi0KLSNpZiBFTkFCTEUoTkVUV09S
S19DQUNIRSkKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsK
LQotY2xhc3MgRGVjb2RlcjsKLWNsYXNzIEVuY29kZXI7Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29kZXIgewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBUJiB0KQotICAgIHsKLSAgICAgICAgdC5lbmNvZGUoZW5jb2Rlcik7Ci0gICAg
fQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFQmIHQpCi0gICAg
ewotICAgICAgICByZXR1cm4gVDo6ZGVjb2RlKGRlY29kZXIsIHQpOwotICAgIH0KLX07Ci0KLX0K
LX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAkocmV2aXNpb24g
MjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlQ29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMyICsyOCw4IEBACiAKICNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1l
c3BhY2UgTmV0d29ya0NhY2hlIHsKLQotdm9pZCBDb2RlcjxBdG9taWNTdHJpbmc+OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCi17Ci0g
ICAgZW5jb2RlciA8PCBhdG9taWNTdHJpbmcuc3RyaW5nKCk7Ci19Ci0KLWJvb2wgQ29kZXI8QXRv
bWljU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEF0b21pY1N0cmluZyYgYXRvbWlj
U3RyaW5nKQotewotICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
dHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdG9taWNTdHJpbmcgPSBzdHJp
bmc7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgLy8gU3BlY2lh
bCBjYXNlIHRoZSBudWxsIHN0cmluZy4KLSAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIGVuY29kZXIgPDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0
aCgpOwotICAgIGVuY29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5kYXRhKCkpLCBs
ZW5ndGgpOwotfQotCi1ib29sIENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgQ1N0cmluZyYgcmVzdWx0KQotewotICAgIHVpbnQzMl90IGxlbmd0aDsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChs
ZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7Ci0gICAgICAg
IC8vIFRoaXMgaXMgdGhlIG51bGwgc3RyaW5nLgotICAgICAgICByZXN1bHQgPSBDU3RyaW5nKCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIEJlZm9yZSBhbGxvY2F0aW5n
IHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcgZW5v
dWdoLgotICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPGNoYXI+
KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNoYXIqIGJ1ZmZlcjsKLSAg
ICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZm
ZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmVzdWx0ID0gc3RyaW5nOwotICAgIHJldHVybiB0cnVlOwotfQotCi0KLXZvaWQgQ29k
ZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5n
KQotewotICAgIC8vIFNwZWNpYWwgY2FzZSB0aGUgbnVsbCBzdHJpbmcuCi0gICAgaWYgKHN0cmlu
Zy5pc051bGwoKSkgewotICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVpbnQzMl90IGxl
bmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQo
KTsKLQotICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQp
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzOCgpKSwgbGVuZ3RoICogc2l6ZW9mKExD
aGFyKSk7Ci0gICAgZWxzZQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVyczE2KCkpLCBs
ZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgZGVjb2RlU3RyaW5nVGV4dChEZWNvZGVyJiBkZWNv
ZGVyLCB1aW50MzJfdCBsZW5ndGgsIFN0cmluZyYgcmVzdWx0KQotewotICAgIC8vIEJlZm9yZSBh
bGxvY2F0aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBp
cyBiaWcgZW5vdWdoLgotICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250
YWluPENoYXJhY3RlclR5cGU+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKLSAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpjcmVh
dGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0
aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICByZXN1bHQgPSBzdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7ICAgIAotfQotCi1ib29sIENv
ZGVyPFN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTdHJpbmcmIHJlc3VsdCkKLXsK
LSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShsZW5ndGgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobGVuZ3RoID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSkgewotICAgICAgICAvLyBUaGlzIGlzIHRoZSBudWxsIHN0
cmluZy4KLSAgICAgICAgcmVzdWx0ID0gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGJvb2wgaXM4Qml0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXM4Qml0
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGlzOEJpdCkKLSAgICAgICAgcmV0
dXJuIGRlY29kZVN0cmluZ1RleHQ8TENoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKLSAg
ICByZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxVQ2hhcj4oZGVjb2RlciwgbGVuZ3RoLCByZXN1bHQp
OwotfQotCi0KLXZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQotewotICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKLX0KLQotYm9vbCBD
b2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU0hBMTo6RGlnZXN0
JiBkaWdlc3QpCi17Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRp
Z2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKLX0KK25hbWVzcGFjZSBXVEYgeworbmFtZXNw
YWNlIFBlcnNpc3RlbmNlIHsKIAogLy8gU3RvcmUgY29tbW9uIEhUVFAgaGVhZGVycyBhcyBzdHJp
bmdzIGluc3RlYWQgb2YgdXNpbmcgdGhlaXIgdmFsdWUgaW4gdGhlIEhUVFBIZWFkZXJOYW1lIGVu
dW1lcmF0aW9uCiAvLyBzbyB0aGF0IHRoZSBoZWFkZXJzIHN0b3JlZCBpbiB0aGUgY2FjaGUgc3Rh
eXMgdmFsaWQgZXZlbiBhZnRlciBIVFRQSGVhZGVyTmFtZS5pbiBnZXRzIHVwZGF0ZWQuCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVDb2RlcnMuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDggKzI3LDYgQEAKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCi0jaW5jbHVkZSAi
TmV0d29ya0NhY2hlRGVjb2Rlci5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SFRUUEhlYWRlck1hcC5oPgogI2luY2x1ZGUgPHV0aWxpdHk+CkBAIC0zNywyNTkgKzM1LDE4IEBA
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmg+Cisj
aW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lz
dGVuY2UvRW5jb2Rlci5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3Jr
Q2FjaGUgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQ29kZXI8
c3RkOjpwYWlyPFQsIFU+PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IHN0ZDo6cGFpcjxULCBVPiYgcGFpcikKLSAgICB7Ci0gICAgICAgIGVuY29kZXIg
PDwgcGFpci5maXJzdCA8PCBwYWlyLnNlY29uZDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwgc3RkOjpwYWlyPFQsIFU+JiBwYWlyKQotICAgIHsKLSAg
ICAgICAgVCBmaXJzdDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShmaXJzdCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgVSBzZWNvbmQ7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoc2Vjb25kKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBwYWlyLmZpcnN0ID0gZmlyc3Q7Ci0gICAgICAgIHBhaXIuc2Vjb25kID0gc2Vjb25kOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXAs
IHR5cGVuYW1lIFBlcmlvZD4gc3RydWN0IENvZGVyPHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAs
IFBlcmlvZD4+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiYgZHVyYXRpb24pCi0gICAgewot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8UmVwPjo6dmFsdWUgJiYgc3Rk
Ojppc19zaWduZWQ8UmVwPjo6dmFsdWUgJiYgc2l6ZW9mKFJlcCkgPD0gc2l6ZW9mKGludDY0X3Qp
LCAiU2VyaWFsaXphdGlvbiBvZiB0aGlzIFJlcCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBP
bmx5IHNpZ25lZCBpbnRlZ2VyIHR5cGUgd2hpY2ggY2FuIGJlIGZpdCBpbiBhbiBpbnQ2NF90IGlz
IGN1cnJlbnRseSBzdXBwb3J0ZWQuIik7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
aW50NjRfdD4oZHVyYXRpb24uY291bnQoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4m
IHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIGludDY0X3QgY291bnQ7Ci0gICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoY291bnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBy
ZXN1bHQgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+KHN0YXRpY19jYXN0PFJl
cD4oY291bnQpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvZGVyPHN0ZDo6b3B0aW9uYWw8VD4+IHsKLSAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpvcHRpb25hbDxUPiYgb3B0
aW9uYWwpCi0gICAgewotICAgICAgICBpZiAoIW9wdGlvbmFsKSB7Ci0gICAgICAgICAgICBlbmNv
ZGVyIDw8IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAgICAgIGVuY29kZXIgPDwgb3B0aW9uYWwudmFs
dWUoKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIHN0ZDo6b3B0aW9uYWw8VD4mIG9wdGlvbmFsKQotICAgIHsKLSAgICAgICAgYm9vbCBpc0Vu
Z2FnZWQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFbmdhZ2VkKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaXNFbmdhZ2VkKSB7Ci0g
ICAgICAgICAgICBvcHRpb25hbCA9IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBUIHZhbHVlOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCi0gICAgICAgIG9wdGlvbmFsID0gV1RGTW92ZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZh
bHVlVHlwZT4gc3RydWN0IENvZGVyPFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlw
ZT4+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RG
OjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKLSAgICB7Ci0gICAgICAg
IGVuY29kZXIgPDwgcGFpci5rZXkgPDwgcGFpci52YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwg
VmFsdWVUeXBlPiYgcGFpcikKLSAgICB7Ci0gICAgICAgIEtleVR5cGUga2V5OwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgVmFsdWVUeXBlIHZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBwYWlyLmtleSA9IGtleTsK
LSAgICAgICAgcGFpci52YWx1ZSA9IHZhbHVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTxib29sIGZpeGVkU2l6ZUVsZW1lbnRzLCB0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+IHN0cnVjdCBWZWN0b3JDb2RlcjsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8ZmFsc2UsIFQs
IGlubGluZUNhcGFjaXR5PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIGVuY29kZXIgPDwgdmVjdG9yW2ldOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0g
ICAgewotICAgICAgICB1aW50NjRfdCBzaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT4gdG1wOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICAgICAgVCBlbGVtZW50OwotICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShlbGVtZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHRtcC5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB0bXAuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgdmVjdG9yLnN3YXAodG1w
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8dHJ1ZSwgVCwgaW5s
aW5lQ2FwYWNpdHk+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7Ci0gICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9m
KFQpKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIHVp
bnQ2NF90IHNpemU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2luY2Ugd2Uga25vdyB0aGUgdG90YWwg
c2l6ZSBvZiB0aGUgZWxlbWVudHMsIHdlIGNhbiBhbGxvY2F0ZSB0aGUgdmVjdG9yIGluCi0gICAg
ICAgIC8vIG9uZSBmZWxsIHN3b29wLiBCZWZvcmUgYWxsb2NhdGluZyB3ZSBtdXN0IGhvd2V2ZXIg
bWFrZSBzdXJlIHRoYXQgdGhlIGRlY29kZXIgYnVmZmVyCi0gICAgICAgIC8vIGlzIGJpZyBlbm91
Z2guCi0gICAgICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPFQ+
KHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT4gdGVtcDsKLSAgICAgICAgdGVtcC5yZXNpemUoc2l6ZSk7Ci0KLSAgICAg
ICAgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4odGVtcC5kYXRhKCkpLCBzaXplICogc2l6ZW9mKFQpKTsKLQotICAgICAgICB2ZWN0b3Iuc3dh
cCh0ZW1wKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgQ29kZXI8VmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5Pj4gOiBWZWN0b3JDb2RlcjxzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVl
LCBULCBpbmxpbmVDYXBhY2l0eT4geyB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+IHN0cnVjdCBDb2RlcjxIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4+IHsKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
ZywgTWFwcGVkVHJhaXRzQXJnPiBIYXNoTWFwVHlwZTsKLQotICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKLSAgICB7Ci0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhhc2hNYXAuc2l6ZSgpKTsK
LSAgICAgICAgZm9yICh0eXBlbmFtZSBIYXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBo
YXNoTWFwLmJlZ2luKCksIGVuZCA9IGhhc2hNYXAuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIGVuY29kZXIgPDwgKml0OwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKLSAgICB7Ci0gICAgICAg
IHVpbnQ2NF90IGhhc2hNYXBTaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc2hN
YXBTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBIYXNoTWFwVHlw
ZSB0ZW1wSGFzaE1hcDsKLSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hNYXBT
aXplOyArK2kpIHsKLSAgICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBNYXBwZWRB
cmcgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2
YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAo
IXRlbXBIYXNoTWFwLmFkZChrZXksIHZhbHVlKS5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVGhlIGhhc2ggbWFwIGFscmVhZHkgaGFzIHRoZSBzcGVjaWZpZWQga2V5LCBiYWlsLgot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGhhc2hNYXAuc3dhcCh0ZW1wSGFzaE1hcCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQ29kZXI8SGFzaFNldDxLZXlBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZz4+IHsKLSAgICB0eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmc+IEhhc2hTZXRUeXBlOwotCi0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hTZXRUeXBlJiBoYXNoU2V0KQotICAgIHsKLSAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaGFzaFNldC5zaXplKCkpOwot
ICAgICAgICBmb3IgKHR5cGVuYW1lIEhhc2hTZXRUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IGhh
c2hTZXQuYmVnaW4oKSwgZW5kID0gaGFzaFNldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgZW5jb2RlciA8PCAqaXQ7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIEhhc2hTZXRUeXBlJiBoYXNoU2V0KQotICAgIHsKLSAgICAgICAg
dWludDY0X3QgaGFzaFNldFNpemU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzaFNl
dFNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEhhc2hTZXRUeXBl
IHRlbXBIYXNoU2V0OwotICAgICAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgaGFzaFNldFNp
emU7ICsraSkgewotICAgICAgICAgICAgS2V5QXJnIGtleTsKLSAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoa2V5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIGlmICghdGVtcEhhc2hTZXQuYWRkKGtleSkuaXNOZXdFbnRyeSkgewotICAgICAgICAg
ICAgICAgIC8vIFRoZSBoYXNoIG1hcCBhbHJlYWR5IGhhcyB0aGUgc3BlY2lmaWVkIGtleSwgYmFp
bC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBoYXNoU2V0LnN3YXAodGVtcEhhc2hTZXQpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxBdG9taWNTdHJpbmc+
IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IEF0b21pY1N0cmluZyYp
OwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQXRvbWljU3RyaW5nJik7Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxDU3RyaW5nPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImLCBjb25zdCBDU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERl
Y29kZXImLCBDU3RyaW5nJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxTdHJpbmc+
IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN0cmluZyYpOwotICAg
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU3RyaW5nJik7Ci19OworbmFtZXNwYWNlIFdU
RiB7CituYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwogICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CiB9OwogCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb2RlcjxTSEExOjpEaWdlc3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYsIGNvbnN0IFNIQTE6OkRpZ2VzdCYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShE
ZWNvZGVyJiwgU0hBMTo6RGlnZXN0Jik7Ci19OwotCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxX
ZWJDb3JlOjpIVFRQSGVhZGVyTWFwPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXIm
LCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImLCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnNDb2NvYS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXJzQ29jb2EuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnNDb2NvYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRlIDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJ
Lmg+CiAjZW5kaWYKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hl
IHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogc3RhdGljIHZv
aWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZXIsIENGRGF0YVJlZiBkYXRhKQogewpJbmRl
eDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwCShub25leGlz
dGVudCkKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRGVjb2Rlci5oIgotCi0jaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEUpCi0KLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVyLmgiCi0K
LW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7Ci0KLURlY29kZXI6
OkRlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKLSAgICA6
IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAsIG1fYnVmZmVyUG9zaXRpb24oYnVmZmVyKQotICAgICwg
bV9idWZmZXJFbmQoYnVmZmVyICsgYnVmZmVyU2l6ZSkKLXsKLX0KLQotRGVjb2Rlcjo6fkRlY29k
ZXIoKQotewotfQotCi1ib29sIERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4o
c2l6ZV90IHNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNpemUgPD0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX2J1ZmZlckVuZCAtIG1fYnVmZmVyUG9zaXRpb24pOwotfQotCi1ib29sIERlY29kZXI6
OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKLSAg
ICBpZiAoIWJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlclBvc2l0aW9uLCBzaXplKTsKLSAg
ICBtX2J1ZmZlclBvc2l0aW9uICs9IHNpemU7Ci0KLSAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1
bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlTnVtYmVyKFR5cGUmIHZh
bHVlKQotewotICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplb2YodmFs
dWUpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbWVtY3B5KCZ2YWx1ZSwgbV9idWZm
ZXJQb3NpdGlvbiwgc2l6ZW9mKHZhbHVlKSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXpl
b2YoVHlwZSk7Ci0KLSAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvck51bWJlcihtX3NoYTEs
IHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUoYm9v
bCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKLX0KLQotYm9v
bCBEZWNvZGVyOjpkZWNvZGUodWludDhfdCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVO
dW1iZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDE2X3QmIHJlc3Vs
dCkKLXsKLSAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Ci19Ci0KLWJvb2wgRGVjb2Rl
cjo6ZGVjb2RlKHVpbnQzMl90JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZU51bWJlcihy
ZXN1bHQpOwotfQotCi1ib29sIERlY29kZXI6OmRlY29kZSh1aW50NjRfdCYgcmVzdWx0KQotewot
ICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNv
ZGUoaW50MzJfdCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsK
LX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUoaW50NjRfdCYgcmVzdWx0KQotewotICAgIHJldHVy
biBkZWNvZGVOdW1iZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUoZmxvYXQm
IHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Ci19Ci0KLWJvb2wg
RGVjb2Rlcjo6ZGVjb2RlKGRvdWJsZSYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVOdW1i
ZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSgpCi17Ci0gICAg
U0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKLSAgICBtX3NoYTEuY29tcHV0ZUhhc2goY29tcHV0
ZWRIYXNoKTsKLQotICAgIFNIQTE6OkRpZ2VzdCBzYXZlZEhhc2g7Ci0gICAgaWYgKCFkZWNvZGVG
aXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKHNhdmVkSGFzaCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gY29tcHV0ZWRIYXNoID09IHNhdmVkSGFz
aDsKLX0KLQotfQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmgJKHJldmlzaW9u
IDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURlY29kZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBOZXR3b3JrQ2FjaGVEZWNvZGVyX2gKLSNkZWZpbmUgTmV0d29ya0NhY2hlRGVj
b2Rlcl9oCi0KLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLQotI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZUNvZGVyLmgiCi0jaW5jbHVkZSA8d3RmL1NIQTEuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKLQotY2xhc3MgRGVjb2RlciB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRGVjb2Rlcihjb25zdCB1aW50OF90KiBi
dWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKLSAgICB2aXJ0dWFsIH5EZWNvZGVyKCk7Ci0KLSAg
ICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsg
fQotICAgIHNpemVfdCBjdXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3Np
dGlvbiAtIG1fYnVmZmVyOyB9Ci0KLSAgICBib29sIHZlcmlmeUNoZWNrc3VtKCk7Ci0KLSAgICBi
b29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90Kiwgc2l6ZV90KTsKLQotICAgIGJvb2wg
ZGVjb2RlKGJvb2wmKTsKLSAgICBib29sIGRlY29kZSh1aW50OF90Jik7Ci0gICAgYm9vbCBkZWNv
ZGUodWludDE2X3QmKTsKLSAgICBib29sIGRlY29kZSh1aW50MzJfdCYpOwotICAgIGJvb2wgZGVj
b2RlKHVpbnQ2NF90Jik7Ci0gICAgYm9vbCBkZWNvZGUoaW50MzJfdCYpOwotICAgIGJvb2wgZGVj
b2RlKGludDY0X3QmKTsKLSAgICBib29sIGRlY29kZShmbG9hdCYpOwotICAgIGJvb2wgZGVjb2Rl
KGRvdWJsZSYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBkZWNvZGVFbnVtKFQm
IHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpIDw9IDgsICJF
bnVtIHR5cGUgVCBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBiaXRzISIpOwotCi0gICAgICAg
IHVpbnQ2NF90IHZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxU
Pih2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGJvb2wgZGVjb2RlKFQmIHQpCi0gICAgewotICAgICAgICByZXR1cm4gQ29kZXI8
VD46OmRlY29kZSgqdGhpcywgdCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICBib29sIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IG51bUVsZW1lbnRz
KSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8
VD46OnZhbHVlLCAiVHlwZSBUIG11c3QgaGF2ZSBhIGZpeGVkLCBrbm93biBlbmNvZGVkIHNpemUh
Iik7Ci0KLSAgICAgICAgaWYgKG51bUVsZW1lbnRzID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSAvIHNpemVvZihUKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICByZXR1cm4gYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihudW1FbGVtZW50cyAqIHNp
emVvZihUKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENEZWNvZGVyID0g
ZmFsc2U7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWlu
KHNpemVfdCkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gYm9vbCBkZWNvZGVO
dW1iZXIoVHlwZSYpOwotCi0gICAgY29uc3QgdWludDhfdCogbV9idWZmZXI7Ci0gICAgY29uc3Qg
dWludDhfdCogbV9idWZmZXJQb3NpdGlvbjsKLSAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlckVu
ZDsKLQotICAgIFNIQTEgbV9zaGExOwotfTsKLQotfSAKLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29k
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUVuY29kZXIuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcAkobm9uZXhp
c3RlbnQpCkBAIC0xLDEyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKLQotI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgewotCi1FbmNvZGVyOjpFbmNvZGVyKCkKLXsKLX0KLQotRW5jb2Rlcjo6fkVuY29kZXIoKQot
ewotfQotCi11aW50OF90KiBFbmNvZGVyOjpncm93KHNpemVfdCBzaXplKQotewotICAgIHNpemVf
dCBuZXdQb3NpdGlvbiA9IG1fYnVmZmVyLnNpemUoKTsKLSAgICBtX2J1ZmZlci5ncm93KG1fYnVm
ZmVyLnNpemUoKSArIHNpemUpOwotICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCkgKyBuZXdQb3Np
dGlvbjsKLX0KLQotdm9pZCBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYgc2hh
MSwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgYXV0byB0eXBlU2Fs
dCA9IFNhbHQ8dWludDhfdCo+Ojp2YWx1ZTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KCZ0eXBlU2FsdCksIHNpemVvZih0eXBlU2FsdCkpOwotICAgIHNoYTEu
YWRkQnl0ZXMoZGF0YSwgc2l6ZSk7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIHVwZGF0ZUNo
ZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEsIHNpemUpOwotCi0gICAgdWludDhfdCogYnVmZmVy
ID0gZ3JvdyhzaXplKTsKLSAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFs
dWUpCi17Ci0gICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1
ZSk7Ci0KLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVvZihUeXBlKSk7Ci0gICAgbWVt
Y3B5KGJ1ZmZlciwgJnZhbHVlLCBzaXplb2YoVHlwZSkpOwotfQotCi12b2lkIEVuY29kZXI6OmVu
Y29kZShib29sIHZhbHVlKQotewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Ci19Ci0KLXZvaWQg
RW5jb2Rlcjo6ZW5jb2RlKHVpbnQ4X3QgdmFsdWUpCi17Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVl
KTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGUodWludDE2X3QgdmFsdWUpCi17Ci0gICAgZW5j
b2RlTnVtYmVyKHZhbHVlKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGUodWludDMyX3QgdmFs
dWUpCi17Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNv
ZGUodWludDY0X3QgdmFsdWUpCi17Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKLX0KLQotdm9p
ZCBFbmNvZGVyOjplbmNvZGUoaW50MzJfdCB2YWx1ZSkKLXsKLSAgICBlbmNvZGVOdW1iZXIodmFs
dWUpOwotfQotCi12b2lkIEVuY29kZXI6OmVuY29kZShpbnQ2NF90IHZhbHVlKQotewotICAgIGVu
Y29kZU51bWJlcih2YWx1ZSk7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGZsb2F0IHZhbHVl
KQotewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2Rl
KGRvdWJsZSB2YWx1ZSkKLXsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwotfQotCi12b2lkIEVu
Y29kZXI6OmVuY29kZUNoZWNrc3VtKCkKLXsKLSAgICBTSEExOjpEaWdlc3QgaGFzaDsKLSAgICBt
X3NoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGhhc2gu
ZGF0YSgpLCBoYXNoLnNpemUoKSk7Ci19Ci0KLX0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RW5jb2Rlci5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTmV0d29ya0NhY2hlRW5jb2Rlcl9oCi0jZGVm
aW5lIE5ldHdvcmtDYWNoZUVuY29kZXJfaAotCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0K
LSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2Rlci5oIgotI2luY2x1ZGUgPHd0Zi9TSEExLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBO
ZXR3b3JrQ2FjaGUgewotCi1jbGFzcyBFbmNvZGVyOwotY2xhc3MgRGF0YVJlZmVyZW5jZTsKLQot
Y2xhc3MgRW5jb2RlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgRW5jb2RlcigpOwotICAgIHZpcnR1YWwgfkVuY29kZXIoKTsKLQotICAgIHZvaWQgZW5jb2Rl
Q2hlY2tzdW0oKTsKLSAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90
Kiwgc2l6ZV90KTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW5jb2RlRW51bShU
IHQpCi0gICAgewotICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoVCkgPD0gc2l6ZW9mKHVp
bnQ2NF90KSwgZW51bV90eXBlX211c3Rfbm90X2JlX2xhcmdlcl90aGFuXzY0X2JpdHMpOwotCi0g
ICAgICAgIGVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odCkpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW5jb2RlKGNvbnN0IFQmIHQpCi0gICAgewotICAgICAg
ICBDb2RlcjxUPjo6ZW5jb2RlKCp0aGlzLCB0KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBFbmNvZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFQmIHQpCi0gICAgewotICAgICAgICBl
bmNvZGUodCk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBjb25zdCB1aW50
OF90KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KLSAgICBzaXpl
X3QgYnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQotCi0gICAg
c3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90KTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RhdGljIHZvaWQgdXBkYXRl
Q2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYsIFR5cGUpOwotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNJUENFbmNvZGVyID0gZmFsc2U7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBlbmNvZGUoYm9vbCk7
Ci0gICAgdm9pZCBlbmNvZGUodWludDhfdCk7Ci0gICAgdm9pZCBlbmNvZGUodWludDE2X3QpOwot
ICAgIHZvaWQgZW5jb2RlKHVpbnQzMl90KTsKLSAgICB2b2lkIGVuY29kZSh1aW50NjRfdCk7Ci0g
ICAgdm9pZCBlbmNvZGUoaW50MzJfdCk7Ci0gICAgdm9pZCBlbmNvZGUoaW50NjRfdCk7Ci0gICAg
dm9pZCBlbmNvZGUoZmxvYXQpOwotICAgIHZvaWQgZW5jb2RlKGRvdWJsZSk7Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPiB2b2lkIGVuY29kZU51bWJlcihUeXBlKTsKLQotICAgIHVpbnQ4
X3QqIGdyb3coc2l6ZV90KTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBzdHJ1Y3Qg
U2FsdDsKLQotICAgIFZlY3Rvcjx1aW50OF90LCA0MDk2PiBtX2J1ZmZlcjsKLSAgICBTSEExIG1f
c2hhMTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGJvb2w+IHsgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMzsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBFbmNv
ZGVyOjpTYWx0PHVpbnQ4X3Q+IHsgc3RhdGljIGNvbnN0ICB1bnNpZ25lZCB2YWx1ZSA9IDU7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50MTZfdD4geyBzdGF0aWMgY29u
c3QgdW5zaWduZWQgdmFsdWUgPSA3OyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNh
bHQ8dWludDMyX3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMTE7IH07Ci10ZW1w
bGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50NjRfdD4geyBzdGF0aWMgY29uc3QgdW5z
aWduZWQgdmFsdWUgPSAxMzsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGlu
dDMyX3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMTc7IH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDxpbnQ2NF90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2
YWx1ZSA9IDE5OyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8ZmxvYXQ+IHsg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMjM7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
RW5jb2Rlcjo6U2FsdDxkb3VibGU+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMjk7
IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50OF90Kj4geyBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgdmFsdWUgPSAxMDE7IH07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBl
Pgotdm9pZCBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiBzaGExLCBUeXBl
IHZhbHVlKQotewotICAgIGF1dG8gdHlwZVNhbHQgPSBTYWx0PFR5cGU+Ojp2YWx1ZTsKLSAgICBz
aGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0eXBlU2FsdCksIHNpemVv
Zih0eXBlU2FsdCkpOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7Ci19Ci0KLX0KLX0KLQotI2VuZGlmCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVu
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsOCArMjgsNiBAQAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZUNvZGVycy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURlY29kZXIuaCIK
LSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTgzLDcgKzgxLDcgQEAgRW50cnk6OkVu
dHJ5KGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcgogCiBTdG9yYWdlOjpSZWNvcmQgRW50cnk6
OmVuY29kZUFzU3RvcmFnZVJlY29yZCgpIGNvbnN0CiB7Ci0gICAgRW5jb2RlciBlbmNvZGVyOwor
ICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBlbmNvZGVyIDw8IG1f
cmVzcG9uc2U7CiAKICAgICBib29sIGhhc1ZhcnlpbmdSZXF1ZXN0SGVhZGVycyA9ICFtX3Zhcnlp
bmdSZXF1ZXN0SGVhZGVycy5pc0VtcHR5KCk7CkBAIC0xMTAsNyArMTA4LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlU3RvcgogewogICAgIGF1dG8gZW50cnkgPSBzdGQ6
Om1ha2VfdW5pcXVlPEVudHJ5PihzdG9yYWdlRW50cnkpOwogCi0gICAgRGVjb2RlciBkZWNvZGVy
KHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7
CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFk
ZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShlbnRyeS0+bV9yZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IGVudHJ5LT5tX3Jlc3BvbnNlLnNldFNvdXJjZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpT
b3VyY2U6OkRpc2tDYWNoZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJKHJldmlzaW9uIDIxMDQ5NikK
KysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBib29sIEtleTo6b3BlcmF0b3I9
PShjb25zdCBLZXkmIG90aGVyKSBjCiAgICAgcmV0dXJuIG1faGFzaCA9PSBvdGhlci5tX2hhc2gg
JiYgbV9wYXJ0aXRpb24gPT0gb3RoZXIubV9wYXJ0aXRpb24gJiYgbV90eXBlID09IG90aGVyLm1f
dHlwZSAmJiBtX2lkZW50aWZpZXIgPT0gb3RoZXIubV9pZGVudGlmaWVyICYmIG1fcmFuZ2UgPT0g
b3RoZXIubV9yYW5nZTsKIH0KIAotdm9pZCBLZXk6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAordm9pZCBLZXk6OmVuY29kZShXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbV9wYXJ0aXRpb247CiAgICAgZW5jb2RlciA8PCBt
X3R5cGU7CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBLZXk6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbV9wYXJ0aXRpb25IYXNoOwogfQogCi1ib29sIEtl
eTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEtleSYga2V5KQorYm9vbCBLZXk6OmRlY29kZShX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiBkZWNvZGVyLCBLZXkmIGtleSkKIHsKICAgICByZXR1
cm4gZGVjb2Rlci5kZWNvZGUoa2V5Lm1fcGFydGl0aW9uKSAmJiBkZWNvZGVyLmRlY29kZShrZXku
bV90eXBlKSAmJiBkZWNvZGVyLmRlY29kZShrZXkubV9pZGVudGlmaWVyKSAmJiBkZWNvZGVyLmRl
Y29kZShrZXkubV9yYW5nZSkgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1faGFzaCkgJiYgZGVjb2Rl
ci5kZWNvZGUoa2V5Lm1fcGFydGl0aW9uSGFzaCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuaAkocmV2aXNp
b24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE0ICszMCwxMyBAQAogCiAjaW5jbHVk
ZSAiTmV0d29ya0NhY2hlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8
d3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRW5j
b2Rlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi1jbGFzcyBFbmNvZGVyOwotY2xhc3Mg
RGVjb2RlcjsKLQogY2xhc3MgS2V5IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFNIQTE6OkRpZ2Vz
dCBIYXNoVHlwZTsKQEAgLTY5LDggKzY4LDggQEAgcHVibGljOgogICAgIFN0cmluZyBoYXNoQXNT
dHJpbmcoKSBjb25zdCB7IHJldHVybiBoYXNoQXNTdHJpbmcobV9oYXNoKTsgfQogICAgIFN0cmlu
ZyBwYXJ0aXRpb25IYXNoQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBoYXNoQXNTdHJpbmcobV9w
YXJ0aXRpb25IYXNoKTsgfQogCi0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgS2V5Jik7CisgICAgdm9pZCBlbmNvZGUoV1RG
OjpQZXJzaXN0ZW5jZTo6RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiwgS2V5Jik7CiAKICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgS2V5JikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtleSYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw3
ICszODAsNyBAQCBzdGF0aWMgYm9vbCBkZWNvZGVSZWNvcmRNZXRhRGF0YShSZWNvcmRNCiB7CiAg
ICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwg
JnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIERl
Y29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1l
dGFEYXRhLmNhY2hlU3RvcmFnZVZlcnNpb24pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmtleSkpCkBAIC00NjQsNyArNDY0
LDcgQEAgdm9pZCBTdG9yYWdlOjpyZWFkUmVjb3JkKFJlYWRPcGVyYXRpb24mIAogCiBzdGF0aWMg
RGF0YSBlbmNvZGVSZWNvcmRNZXRhRGF0YShjb25zdCBSZWNvcmRNZXRhRGF0YSYgbWV0YURhdGEp
CiB7Ci0gICAgRW5jb2RlciBlbmNvZGVyOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIg
ZW5jb2RlcjsKIAogICAgIGVuY29kZXIgPDwgbWV0YURhdGEuY2FjaGVTdG9yYWdlVmVyc2lvbjsK
ICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmtleTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dWJyZXNvdXJjZXNFbnRyeS5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTMgKzMwLDExIEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hl
RGVjb2Rlci5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotdm9pZCBTdWJyZXNvdXJjZUlu
Zm86OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordm9pZCBTdWJyZXNvdXJjZUluZm86
OmVuY29kZShXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAg
IGVuY29kZXIgPDwgbV9pc1RyYW5zaWVudDsKIApAQCAtNDgsNyArNDYsNyBAQCB2b2lkIFN1YnJl
c291cmNlSW5mbzo6ZW5jb2RlKEVuY29kZXImIGVuCiAgICAgZW5jb2RlciA8PCBtX3JlcXVlc3RI
ZWFkZXJzOwogfQogCi1ib29sIFN1YnJlc291cmNlSW5mbzo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIFN1YnJlc291cmNlSW5mbyYgaW5mbykKK2Jvb2wgU3VicmVzb3VyY2VJbmZvOjpkZWNvZGUo
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYgZGVjb2RlciwgU3VicmVzb3VyY2VJbmZvJiBpbmZv
KQogewogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX2lzVHJhbnNpZW50KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNjcsNyArNjUsNyBAQCBib29sIFN1YnJlc291cmNlSW5mbzo6
ZGVjb2RlKERlY29kZXImIGRlCiAKIFN0b3JhZ2U6OlJlY29yZCBTdWJyZXNvdXJjZXNFbnRyeTo6
ZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCkgY29uc3QKIHsKLSAgICBFbmNvZGVyIGVuY29kZXI7Cisg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIGVuY29kZXIgPDwgbV9z
dWJyZXNvdXJjZXM7CiAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7CkBAIC03OSw3ICs3
Nyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRyeT4gU3VicmUKIHsKICAgICBh
dXRvIGVudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxTdWJyZXNvdXJjZXNFbnRyeT4oc3RvcmFnZUVu
dHJ5KTsKIAotICAgIERlY29kZXIgZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwg
c3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRl
ci5zaXplKCkpOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZW50cnktPm1fc3VicmVzb3VyY2Vz
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Vi
cmVzb3VyY2VzRW50cnkuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOCArMjgsNiBAQAogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BF
Q1VMQVRJVkVfUkVWQUxJREFUSU9OKQogCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRGVjb2Rlci5o
IgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2Fj
aGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1VSTC5oPgpAQCAtNDEsOCArMzksOCBAQCBuYW1lc3BhY2UgTmV0d29ya0Nh
Y2hlIHsKIGNsYXNzIFN1YnJlc291cmNlSW5mbyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRp
YyBib29sIGRlY29kZShEZWNvZGVyJiwgU3VicmVzb3VyY2VJbmZvJik7CisgICAgdm9pZCBlbmNv
ZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRl
Y29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiwgU3VicmVzb3VyY2VJbmZvJik7CiAKICAg
ICBTdWJyZXNvdXJjZUluZm8oKSA9IGRlZmF1bHQ7CiAgICAgU3VicmVzb3VyY2VJbmZvKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBpc1RyYW5zaWVudCA9IGZh
bHNlKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw2IEBACiAKICNpbmNsdWRlICJBUElV
c2VyQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKLSNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5j
b2Rlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJT
aGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIK
QEAgLTQxLDYgKzM5LDggQEAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRl
IDx3dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9F
bmNvZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTsKIApAQCAt
OTksNyArOTksNyBAQCBzdHJ1Y3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIHsKIAogc3RhdGlj
IERhdGEgZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKGNvbnN0IENvbnRlbnRFeHRlbnNp
b25NZXRhRGF0YSYgbWV0YURhdGEpCiB7Ci0gICAgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29k
ZXIgZW5jb2RlcjsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAKICAg
ICBlbmNvZGVyIDw8IG1ldGFEYXRhLnZlcnNpb247CiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5h
Y3Rpb25zU2l6ZTsKQEAgLTEyMCw3ICsxMjAsNyBAQCBzdGF0aWMgYm9vbCBkZWNvZGVDb250ZW50
RXh0ZW5zaW9uTWV0YURhCiAgICAgICAgIGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
bWV0YURhdGEudmVyc2lvbikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuYWN0aW9uc1NpemUpKQpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODkzLDEzICsxODkzLDggQEAKIAkJRTQ0MzZFRDAxQTBE
MDQwQjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0MzZFQzMxQTBDRkRCMjAwRUFEMjA0IC8q
IE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwICovOyB9OwogCQlFNDY5N0NDRDFCMjVFQjhGMDAxQjBB
NkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDY5N0NDQzFCMjVFQjhGMDAxQjBBNkMgLyogTmV0d29y
a0NhY2hlRmlsZVN5c3RlbS5jcHAgKi87IH07CiAJCUU0N0QxRTk4MUIwNjQ5RkIwMDI2NzZBOCAv
KiBOZXR3b3JrQ2FjaGVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0N0QxRTk2MUIwNjJCNjYwMDI2NzZBOCAvKiBOZXR3b3JrQ2FjaGVEYXRh
LmNwcCAqLzsgfTsKLQkJRTQ4OUQyOEExQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNv
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5
RDI4MzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXIuaCAqLzsgfTsKIAkJRTQ4
OUQyOEIxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5RDI4NDFBMEEyREI4MDA3
OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXJzLmNwcCAqLzsgfTsKIAkJRTQ4OUQyOEMxQTBBMkRC
ODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQyODUxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdv
cmtDYWNoZUNvZGVycy5oICovOyB9OwotCQlFNDg5RDI4RDFBMEEyREI4MDA3OEMwNkEgLyogTmV0
d29ya0NhY2hlRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDg5RDI4NjFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rl
ci5jcHAgKi87IH07Ci0JCUU0ODlEMjhFMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVE
ZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NDg5RDI4NzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5oICovOyB9Owot
CQlFNDg5RDI4RjFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5RDI4ODFBMEEy
REI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5jcHAgKi87IH07Ci0JCUU0ODlEMjkw
MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5RDI4OTFBMEEyREI4MDA3OEMwNkEg
LyogTmV0d29ya0NhY2hlRW5jb2Rlci5oICovOyB9OwogCQlFNDlENDBENzFBRDNGQjE3MDA2NkI3
QjkgLyogTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OUQ0MEQ2MUFEM0ZCMTcwMDY2QjdCOSAvKiBOZXR3b3Jr
Q2FjaGVCbG9iU3RvcmFnZS5oICovOyB9OwogCQlFNDlENDBEOTFBRDNGQjIxMDA2NkI3QjkgLyog
TmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQ5RDQwRDgxQUQzRkIyMTAwNjZCN0I5IC8qIE5ldHdvcmtDYWNo
ZUJsb2JTdG9yYWdlLmNwcCAqLzsgfTsKIAkJRTRFODY0OTIxQjE2NzUwMTAwQzgyRjQwIC8qIFZl
cnNpb25DaGVja3MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNEU4NjQ4RjFCMTY3M0ZCMDBDODJGNDAgLyogVmVyc2lvbkNoZWNrcy5tbSAqLzsgfTsK
QEAgLTQxMDAsMTMgKzQwOTUsOCBAQAogCQlFNDQzNkVDMzFBMENGREIyMDBFQUQyMDQgLyogTmV0
d29ya0NhY2hlU3RvcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBOZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQ2OTdDQ0MxQjI1RUI4RjAwMUIwQTZDIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlRmlsZVN5c3Rl
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0QxRTk2MUIwNjJCNjYwMDI2
NzZBOCAvKiBOZXR3b3JrQ2FjaGVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE5ldHdvcmtDYWNoZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlFNDg5RDI4MzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlQ29kZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4OUQyODQxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdv
cmtDYWNoZUNvZGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBO
ZXR3b3JrQ2FjaGVDb2RlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDg5
RDI4NTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXJzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZUNvZGVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlFNDg5RDI4NjFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hl
RGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3Jr
Q2FjaGVEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ4OUQyODcx
QTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlFNDg5RDI4ODFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5j
b2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2Fj
aGVFbmNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ4OUQyODkxQTBB
MkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlRW5jb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNDlENDBENjFBRDNGQjE3MDA2NkI3QjkgLyogTmV0d29ya0NhY2hlQmxvYlN0
b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlQmxv
YlN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5RDQwRDgxQUQzRkIy
MTAwNjZCN0I5IC8qIE5ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRFODY0OEUxQjE2NzNGQjAwQzgyRjQwIC8qIFZlcnNp
b25DaGVja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVyc2lvbkNoZWNr
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzU2OSwxNyArNzU1OSwxMiBAQAog
CQkJCUU0NDM2RUJGMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGUuaCAqLywKIAkJCQlF
NDlENDBEODFBRDNGQjIxMDA2NkI3QjkgLyogTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwICov
LAogCQkJCUU0OUQ0MEQ2MUFEM0ZCMTcwMDY2QjdCOSAvKiBOZXR3b3JrQ2FjaGVCbG9iU3RvcmFn
ZS5oICovLAotCQkJCUU0ODlEMjgzMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rl
ci5oICovLAogCQkJCUU0ODlEMjg0MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rl
cnMuY3BwICovLAogCQkJCUU0ODlEMjg1MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVD
b2RlcnMuaCAqLywKIAkJCQk3Q0FCOTM3OTFENDU5RTRCMDA3MEY1NDAgLyogTmV0d29ya0NhY2hl
Q29kZXJzQ29jb2EuY3BwICovLAogCQkJCUU0N0QxRTk2MUIwNjJCNjYwMDI2NzZBOCAvKiBOZXR3
b3JrQ2FjaGVEYXRhLmNwcCAqLywKIAkJCQlFNDJFMDYxMTFBQTc1QUJEMDBCMTE2OTkgLyogTmV0
d29ya0NhY2hlRGF0YS5oICovLAogCQkJCUU0MkUwNjEzMUFBNzVCNzAwMEIxMTY5OSAvKiBOZXR3
b3JrQ2FjaGVEYXRhQ29jb2EubW0gKi8sCi0JCQkJRTQ4OUQyODYxQTBBMkRCODAwNzhDMDZBIC8q
IE5ldHdvcmtDYWNoZURlY29kZXIuY3BwICovLAotCQkJCUU0ODlEMjg3MUEwQTJEQjgwMDc4QzA2
QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmggKi8sCi0JCQkJRTQ4OUQyODgxQTBBMkRCODAwNzhD
MDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuY3BwICovLAotCQkJCUU0ODlEMjg5MUEwQTJEQjgw
MDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmggKi8sCiAJCQkJRTQxM0Y1OUUxQUMxQUY5
RDAwMzQ1MzYwIC8qIE5ldHdvcmtDYWNoZUVudHJ5LmNwcCAqLywKIAkJCQlFNDEzRjU5QjFBQzFB
REI2MDAzNDUzNjAgLyogTmV0d29ya0NhY2hlRW50cnkuaCAqLywKIAkJCQlFNDY5N0NDQzFCMjVF
QjhGMDAxQjBBNkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgKi8sCkBAIC03OTAzLDEx
ICs3ODg4LDggQEAKIAkJCQlFMTc5OEM3QTE2RTY4MTg4MDAyNDAxMzkgLyogTmV0d29ya0Jsb2JS
ZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0MzZFQ0MxQTBEMDQwQjAwRUFEMjA0IC8q
IE5ldHdvcmtDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5RDQwRDcxQUQzRkIxNzAwNjZC
N0I5IC8qIE5ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDg5
RDI4QTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUU0ODlEMjhDMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0MkUwNjEyMUFBNzVBQkQwMEIxMTY5OSAvKiBOZXR3b3JrQ2Fj
aGVEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDg5RDI4RTFBMEEyREI4MDA3OEMwNkEgLyog
TmV0d29ya0NhY2hlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ4OUQyOTAxQTBBMkRC
ODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
MTNGNTlEMUFDMUFEQzQwMDM0NTM2MCAvKiBOZXR3b3JrQ2FjaGVFbnRyeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODM0QjI1MEYxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0
ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MkUwNjEwMUFBNzUyM0IwMEIxMTY5OSAvKiBOZXR3
b3JrQ2FjaGVJT0NoYW5uZWwuaCBpbiBIZWFkZXJzICovLApAQCAtOTQwNyw4ICs5Mzg5LDYgQEAK
IAkJCQk3Q0FCOTM3QTFENDU5RTUxMDA3MEY1NDAgLyogTmV0d29ya0NhY2hlQ29kZXJzQ29jb2Eu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ3RDFFOTgxQjA2NDlGQjAwMjY3NkE4IC8qIE5ldHdv
cmtDYWNoZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQyRTA2MTQxQUE3NUI3MDAwQjEx
Njk5IC8qIE5ldHdvcmtDYWNoZURhdGFDb2NvYS5tbSBpbiBTb3VyY2VzICovLAotCQkJCUU0ODlE
MjhEMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUU0ODlEMjhGMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0MTNGNTlGMUFDMUFGOUQwMDM0NTM2MCAvKiBOZXR3
b3JrQ2FjaGVFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDY5N0NDRDFCMjVFQjhGMDAx
QjBBNkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
NDJFMDYwRjFBQTc1MjM0MDBCMTE2OTkgLyogTmV0d29ya0NhY2hlSU9DaGFubmVsQ29jb2EubW0g
aW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298318</attachid>
            <date>2017-01-08 15:13:45 -0800</date>
            <delta_ts>2017-01-08 15:18:59 -0800</delta_ts>
            <desc>patch</desc>
            <filename>cache-coder-wtf-4.patch</filename>
            <type>text/plain</type>
            <size>108664</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE3LTAxLTA4ICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGNhY2hlIGNvZGVycyB0byBXVEYKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgaXQgcG9zc2li
bGUgdG8gdXNlIHJvYnVzdCBzZXJpYWxpemF0aW9uIG9mIFdURiB0eXBlcyBvbiB0aGUgbG93ZXIg
bGV2ZWxzIG9mIHRoZSBzdGFjay4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZTogQWRkZWQuCisgICAgICAgICogd3Rm
L3BlcnNpc3RlbmNlL0NvZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyLmguCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3Rl
bmNlL0NvZGVycy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6Q29kZXI8QXRvbWljU3RyaW5nPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+OjplbmNvZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVy
PFN0cmluZz46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6ZGVjb2RlU3RyaW5nVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6Q29kZXI8U3RyaW5nPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6
SFRUUEhlYWRlck1hcD46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD46OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuaC4KKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxzdGQ6Om9wdGlvbmFsPFQ+Pjo6ZW5jb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxzdGQ6Om9w
dGlvbmFsPFQ+Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2Uv
RGVjb2Rlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OkRlY29kZXI6OkRlY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkRlY29kZXI6On5EZWNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRlY29k
ZXI6OmRlY29kZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6RGVjb2Rlcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL0RlY29kZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5oLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkRlY29kZXI6Omxlbmd0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6RGVjb2Rlcjo6Y3VycmVudE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGVjb2Rlcjo6ZGVjb2RlRW51bSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGVjb2Rlcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVuY29kZXIuY3BwLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29k
ZXI6OkVuY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVu
Y29kZXI6On5FbmNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjpncm93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW5jb2Rlcjo6ZW5jb2RlTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbmNvZGVyOjplbmNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OmVu
Y29kZUNoZWNrc3VtKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvRW5jb2Rl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVFbmNvZGVyLmguCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW5jb2Rl
cjo6ZW5jb2RlRW51bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
RW5jb2Rlcjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjpvcGVyYXRvcjw8KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpFbmNvZGVyOjpidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkVuY29kZXI6OmJ1ZmZlclNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKTogRGVsZXRl
ZC4KKwogMjAxNy0wMS0wOCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+
CiAKICAgICAgICAgSW50cm9kdWNlIENQVShYODZfU1NFMikgaW5zdGVhZCBvZiB2YXJpb3VzIFNT
RTIgY2hlY2tzCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2ICszNTMsMTMgQEAKIAkJREU1QTA5RkMxQkEz
Njk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU1QTA5RkIxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1v
bkNyeXB0b1NQSS5oICovOyB9OwogCQlFMTU1NTZGNTE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTU1NTZGMzE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxp
dGllcy5jcHAgKi87IH07CiAJCUUxNTU1NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFw
aGljVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5o
ICovOyB9OworCQlFNDNBNDY5NTFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTAxRTIyOEI5MTAw
Mjc2QjA1IC8qIERlY29kZXIuaCAqLzsgfTsKKwkJRTQzQTQ2OTYxRTIyOEI5MTAwMjc2QjA1IC8q
IEVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0M0E0NjkxMUUyMjhCOTEwMDI3NkIwNSAvKiBFbmNvZGVyLmggKi87IH07CisJCUU0M0E0Njk3
MUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0M0E0NjkyMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVy
LmNwcCAqLzsgfTsKKwkJRTQzQTQ2OTgxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTMxRTIy
OEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICovOyB9OworCQlFNDNBNDY5OTFFMjI4QjkxMDAy
NzZCMDUgLyogQ29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0M0E0Njk0MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oICovOyB9OworCQlFNDNB
NDY5QjFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBNDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJz
LmggKi87IH07CisJCUU0M0E0NjlEMUUyMjhGRDUwMDI3NkIwNSAvKiBDb2RlcnMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OUMxRTIyOEZE
NTAwMjc2QjA1IC8qIENvZGVycy5jcHAgKi87IH07CiAJCUU0QTBBRDM5MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRBMEFEMzcxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07
CiAJCUU0QTBBRDNBMUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTBBRDM4MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuaCAqLzsgfTsKIAkJRTRBMEFEM0QxQTk2MjUzQzAwNTM2REY2IC8qIFdv
cmtRdWV1ZUNvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QTBBRDNDMUE5NjI1M0MwMDUzNkRGNiAvKiBXb3JrUXVldWVDb2NvYS5jcHAgKi87
IH07CkBAIC03MjUsNiArNzMyLDEzIEBACiAJCURFNUEwOUZCMUJBMzY5OTIwMDNENDQyNCAvKiBD
b21tb25DcnlwdG9TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9u
Q3J5cHRvU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTU1NkYzMThBMEND
MTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlw
dG9ncmFwaGljVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0M0E0
NjkwMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQzQTQ2
OTExRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRW5jb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDNBNDY5
MjFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTQzQTQ2OTMxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRW5jb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUU0M0E0Njk0MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNDNBNDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NDNBNDY5QzFFMjI4RkQ1MDAyNzZCMDUgLyogQ29kZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0QTBBRDM3MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTRBMEFEMzgxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrUXVldWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTRBMEFEM0MxQTk2MjUzQzAwNTM2REY2IC8qIFdvcmtRdWV1ZUNv
Y29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZUNv
Y29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2OSw2ICs4ODMsNyBAQAog
CQkJCUE4QTQ3MjgxMTUxQTgyNUEwMDQxMjNGRiAvKiBkdG9hICovLAogCQkJCTFGQTQ3Qzg3MTUy
NTAyREEwMDU2OEQxQiAvKiBpb3MgKi8sCiAJCQkJQThBNDcyQzQxNTFBODI1QTAwNDEyM0ZGIC8q
IG1hYyAqLywKKwkJCQlFNDNBNDY4NTFFMjI4QjU3MDAyNzZCMDUgLyogcGVyc2lzdGVuY2UgKi8s
CiAJCQkJQ0VGNDgyMEMxOURBMzQ3NjAwQ0MwNEI4IC8qIHNwaSAqLywKIAkJCQlBOEE0NzMxQjE1
MUE4MjVCMDA0MTIzRkYgLyogdGV4dCAqLywKIAkJCQlBOEE0NzMzOTE1MUE4MjVCMDA0MTIzRkYg
LyogdGhyZWFkcyAqLywKQEAgLTEyNzcsNiArMTI5MiwyMCBAQAogCQkJbmFtZSA9IGNmOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJRTQzQTQ2ODUxRTIyOEI1NzAwMjc2QjA1
IC8qIHBlcnNpc3RlbmNlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQlFNDNBNDY5NDFFMjI4QjkxMDAyNzZCMDUgLyogQ29kZXIuaCAqLywKKwkJCQlFNDNB
NDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggKi8sCisJCQkJRTQzQTQ2OUMxRTIyOEZE
NTAwMjc2QjA1IC8qIENvZGVycy5jcHAgKi8sCisJCQkJRTQzQTQ2OTIxRTIyOEI5MTAwMjc2QjA1
IC8qIERlY29kZXIuY3BwICovLAorCQkJCUU0M0E0NjkwMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNv
ZGVyLmggKi8sCisJCQkJRTQzQTQ2OTMxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICov
LAorCQkJCUU0M0E0NjkxMUUyMjhCOTEwMDI3NkIwNSAvKiBFbmNvZGVyLmggKi8sCisJCQkpOwor
CQkJcGF0aCA9IHBlcnNpc3RlbmNlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
IAkJRTRBMEFEM0IxQTk2MjUxOTAwNTM2REY2IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEzMjksNiArMTM1OCw3IEBACiAJCQkJQThBNDcz
OTExNTFBODI1QjAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFQjk1RTFGMDE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNBRDE1MUE4MjVCMDA0MTIzRkYgLyogY2FjaGVkLXBvd2Vycy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTQzQTQ2OUIxRTIyOEZCMjAwMjc2QjA1IC8qIENvZGVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRENFRTIxRkIxQ0VBNzUzODAwMEMyMzk2IC8qIENGQnVuZGxlU1BJ
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1RTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hhcmFj
dGVyTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzk0MTUxQTgyNUIwMDQxMjNGRiAv
KiBDaGVja2VkQXJpdGhtZXRpYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzYyLDYgKzEzOTIsNyBA
QAogCQkJCUE4QTQ3M0IyMTUxQTgyNUIwMDQxMjNGRiAvKiBkb3VibGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3M0E3MTUxQTgyNUIwMDQxMjNGRiAvKiBEb3VibHlMaW5rZWRMaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzNCQjE1MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRTQzQTQ2OTYxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRERFOTMyMUNEQzA1MkQwMEZEMzQ5MSAvKiBkeWxkU1BJLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQUVBODhFMjFENkJCQ0Y0MDBFNUFENjQgLyogRW51bVRyYWl0cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ3QzQzNEIxREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVk
LmggaW4gSGVhZGVycyAqLywKQEAgLTE1MDgsNiArMTUzOSw3IEBACiAJCQkJQThBNDc0NTQxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQ1NTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU3BlY2lmaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjZCMjkxMURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0M0E0Njk1MUUyMjhCOTEwMDI3NkIwNSAvKiBE
ZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTMwNzFDQTFDNDA0MjcyMDAzODQ4OTggLyog
VGlueUxSVUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNF
MTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ5RUYxNjMxNkJCRkUwRDAw
MEE0MzMxIC8qIFRyaVN0YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTE1MzUsNiArMTU2Nyw3IEBA
CiAJCQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUU0M0E0Njk5MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0xNjkzLDggKzE3MjYsMTAgQEAKIAkJCQlBOEE0NzQxNDE1MUE4MjVCMDA0
MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFBMTUx
QTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTQzQTQ2OTgxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDY5NDE5MzE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVy
Q0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQzQTQ2OUQxRTIyOEZENTAwMjc2QjA1IC8qIENv
ZGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5NDE5OTE2RUFCMDQxMDAyNEUxNDYgLyog
U2NoZWR1bGVQYWlyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2OTQxOTcxNkVBQUZGODAw
MjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGNjZCMjhF
MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTcwOSw2
ICsxNzQ0LDcgQEAKIAkJCQlBNUJBMTVGQzE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nSW1wbENG
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUY1MTgyNDM0ODAwMEE4MkU2OSAvKiBTdHJp
bmdJbXBsTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RjMxODI0MzNBOTAwQTgyRTY5
IC8qIFN0cmluZ01hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUU0M0E0Njk3MUUyMjhCOTEwMDI3
NkIwNSAvKiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkE3MTY2NkRGQTMw
MEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzQ0MzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5M0YxOTkzRTE5RDc5NThEMDBDMjM5MEIgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvQ29kZXIuaAkocmV2aXNpb24gMjEwMzMw
KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVD
b2Rlci5oOjIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
TmV0d29ya0NhY2hlQ29kZXJfaAorI2RlZmluZSBOZXR3b3JrQ2FjaGVDb2Rlcl9oCisKKyNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0
d29ya0NhY2hlIHsKKworY2xhc3MgRGVjb2RlcjsKK2NsYXNzIEVuY29kZXI7CisgICAgCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29kZXIgeworICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUJiB0KQorICAgIHsKKyAgICAgICAgdC5lbmNvZGUoZW5j
b2Rlcik7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFQmIHQpCisgICAgeworICAgICAgICByZXR1cm4gVDo6ZGVjb2RlKGRlY29kZXIsIHQpOworICAg
IH0KK307CisKK30KK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL0NvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvQ29kZXIuaAkocmV2aXNpb24gMjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvQ29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTMgKzIzLDEwIEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOZXR3b3JrQ2FjaGVDb2Rl
cl9oCi0jZGVmaW5lIE5ldHdvcmtDYWNoZUNvZGVyX2gKKyNwcmFnbWEgb25jZQogCi0jaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEUpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdv
cmtDYWNoZSB7CituYW1lc3BhY2UgV1RGIHsKK25hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKIGNs
YXNzIERlY29kZXI7CiBjbGFzcyBFbmNvZGVyOwpAQCAtNDgsNiArNDUsMyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29kZXIgewogCiB9CiB9Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5jcHAJKHJldmlzaW9uIDIxMDMzMCkJKGZy
b20gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJz
LmNwcDoyMTAzMzApCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCisKKyNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Citu
YW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKwordm9pZCBDb2RlcjxBdG9taWNTdHJpbmc+OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCit7
CisgICAgZW5jb2RlciA8PCBhdG9taWNTdHJpbmcuc3RyaW5nKCk7Cit9CisKK2Jvb2wgQ29kZXI8
QXRvbWljU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEF0b21pY1N0cmluZyYgYXRv
bWljU3RyaW5nKQoreworICAgIFN0cmluZyBzdHJpbmc7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdHJpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdG9taWNTdHJpbmcgPSBz
dHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpCit7CisgICAgLy8gU3Bl
Y2lhbCBjYXNlIHRoZSBudWxsIHN0cmluZy4KKyAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7Cisg
ICAgICAgIGVuY29kZXIgPDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxl
bmd0aCgpOworICAgIGVuY29kZXIgPDwgbGVuZ3RoOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5kYXRhKCkp
LCBsZW5ndGgpOworfQorCitib29sIENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgQ1N0cmluZyYgcmVzdWx0KQoreworICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChsZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CisgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIG51bGwgc3RyaW5nLgorICAgICAgICByZXN1bHQgPSBDU3RyaW5n
KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEJlZm9yZSBhbGxvY2F0
aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcg
ZW5vdWdoLgorICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPGNo
YXI+KGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNoYXIqIGJ1ZmZlcjsK
KyAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBi
dWZmZXIpOworICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmVzdWx0ID0gc3RyaW5nOworICAgIHJldHVybiB0cnVlOworfQorCisKK3ZvaWQg
Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQoreworICAgIC8vIFNwZWNpYWwgY2FzZSB0aGUgbnVsbCBzdHJpbmcuCisgICAgaWYgKHN0
cmluZy5pc051bGwoKSkgeworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVpbnQzMl90
IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhC
aXQoKTsKKworICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKKworICAgIGlmIChpczhC
aXQpCisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzOCgpKSwgbGVuZ3RoICogc2l6ZW9m
KExDaGFyKSk7CisgICAgZWxzZQorICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0
YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVyczE2KCkp
LCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgZGVjb2RlU3RyaW5nVGV4dChEZWNvZGVyJiBk
ZWNvZGVyLCB1aW50MzJfdCBsZW5ndGgsIFN0cmluZyYgcmVzdWx0KQoreworICAgIC8vIEJlZm9y
ZSBhbGxvY2F0aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZl
ciBpcyBiaWcgZW5vdWdoLgorICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9D
b250YWluPENoYXJhY3RlclR5cGU+KGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKKyAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpj
cmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxl
bmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXN1bHQgPSBzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7ICAgIAorfQorCitib29s
IENvZGVyPFN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTdHJpbmcmIHJlc3VsdCkK
K3sKKyAgICB1aW50MzJfdCBsZW5ndGg7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsZW5ndGgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobGVuZ3RoID09IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBudWxs
IHN0cmluZy4KKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGJvb2wgaXM4Qml0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXM4
Qml0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGlzOEJpdCkKKyAgICAgICAg
cmV0dXJuIGRlY29kZVN0cmluZ1RleHQ8TENoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsK
KyAgICByZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxVQ2hhcj4oZGVjb2RlciwgbGVuZ3RoLCByZXN1
bHQpOworfQorCisKK3ZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQoreworICAgIGVuY29kZXIuZW5jb2Rl
Rml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKK30KKworYm9v
bCBDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU0hBMTo6RGln
ZXN0JiBkaWdlc3QpCit7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKK30KKworLy8gU3RvcmUgY29tbW9uIEhU
VFAgaGVhZGVycyBhcyBzdHJpbmdzIGluc3RlYWQgb2YgdXNpbmcgdGhlaXIgdmFsdWUgaW4gdGhl
IEhUVFBIZWFkZXJOYW1lIGVudW1lcmF0aW9uCisvLyBzbyB0aGF0IHRoZSBoZWFkZXJzIHN0b3Jl
ZCBpbiB0aGUgY2FjaGUgc3RheXMgdmFsaWQgZXZlbiBhZnRlciBIVFRQSGVhZGVyTmFtZS5pbiBn
ZXRzIHVwZGF0ZWQuCit2b2lkIENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYgaGVhZGVycykK
K3sKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihoZWFkZXJzLnNpemUoKSk7
CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IGhlYWRlcnMpIHsKKyAgICAgICAgZW5jb2RlciA8
PCBrZXlWYWx1ZS5rZXk7CisgICAgICAgIGVuY29kZXIgPDwga2V5VmFsdWUudmFsdWU7CisgICAg
fQorfQorCitib29sIENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYgaGVhZGVycykKK3sKKyAgICB1aW50
NjRfdCBoZWFkZXJzU2l6ZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhlYWRlcnNTaXplKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBoZWFk
ZXJzU2l6ZTsgKytpKSB7CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTdHJp
bmcgdmFsdWU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBoZWFkZXJzLmFkZChuYW1lLCB2YWx1ZSk7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCit9Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dU
Ri93dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuY3BwCShyZXZpc2lvbiAyMTAzMzApCisrKyBTb3VyY2UvV1RG
L3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNSArMjQs
MTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hl
Q29kZXJzLmgiCi0KLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyNpbmNsdWRlICJDb2RlcnMu
aCIKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hl
IHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogdm9pZCBDb2Rl
cjxBdG9taWNTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdG9taWNTdHJpbmcpCiB7CkBAIC0xNDQsNyArMTQyLDYgQEAgYm9vbCBDb2RlcjxTdHJp
bmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjbwogICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PFVD
aGFyPihkZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7CiB9CiAKLQogdm9pZCBDb2RlcjxTSEExOjpE
aWdlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGlnZXN0JiBkaWdl
c3QpCiB7CiAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwg
c2l6ZW9mKGRpZ2VzdCkpOwpAQCAtMTU1LDM1ICsxNTIsNSBAQCBib29sIENvZGVyPFNIQTE6OkRp
Z2VzdD46OmRlY29kZShEZWNvZGVyCiAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKIH0KIAotLy8gU3RvcmUgY29t
bW9uIEhUVFAgaGVhZGVycyBhcyBzdHJpbmdzIGluc3RlYWQgb2YgdXNpbmcgdGhlaXIgdmFsdWUg
aW4gdGhlIEhUVFBIZWFkZXJOYW1lIGVudW1lcmF0aW9uCi0vLyBzbyB0aGF0IHRoZSBoZWFkZXJz
IHN0b3JlZCBpbiB0aGUgY2FjaGUgc3RheXMgdmFsaWQgZXZlbiBhZnRlciBIVFRQSGVhZGVyTmFt
ZS5pbiBnZXRzIHVwZGF0ZWQuCi12b2lkIENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYgaGVh
ZGVycykKLXsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihoZWFkZXJzLnNp
emUoKSk7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IGhlYWRlcnMpIHsKLSAgICAgICAgZW5j
b2RlciA8PCBrZXlWYWx1ZS5rZXk7Ci0gICAgICAgIGVuY29kZXIgPDwga2V5VmFsdWUudmFsdWU7
Ci0gICAgfQotfQotCi1ib29sIENvZGVyPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYgaGVhZGVycykKLXsKLSAg
ICB1aW50NjRfdCBoZWFkZXJzU2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhlYWRlcnNT
aXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkg
PCBoZWFkZXJzU2l6ZTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBTdHJpbmcgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBoZWFkZXJzLmFkZChuYW1lLCB2YWx1ZSk7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCiB9CiB9Ci0KLSNlbmRpZgpJbmRleDogU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmgJKHJldmlzaW9uIDIxMDMzMCkJKGZyb20gU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmg6MjEwMzMw
KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNv
ZGVyLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVyTWFwLmg+
CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
U0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Citu
YW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gc3RydWN0IENvZGVyPHN0ZDo6cGFpcjxULCBVPj4geworICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBzdGQ6OnBhaXI8VCwgVT4mIHBhaXIpCisgICAgewor
ICAgICAgICBlbmNvZGVyIDw8IHBhaXIuZmlyc3QgPDwgcGFpci5zZWNvbmQ7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6cGFpcjxULCBVPiYg
cGFpcikKKyAgICB7CisgICAgICAgIFQgZmlyc3Q7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoZmlyc3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFUgc2Vjb25k
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNlY29uZCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgcGFpci5maXJzdCA9IGZpcnN0OworICAgICAgICBwYWlyLnNl
Y29uZCA9IHNlY29uZDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgUmVwLCB0eXBlbmFtZSBQZXJpb2Q+IHN0cnVjdCBDb2RlcjxzdGQ6OmNocm9u
bzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIGR1
cmF0aW9uKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPFJl
cD46OnZhbHVlICYmIHN0ZDo6aXNfc2lnbmVkPFJlcD46OnZhbHVlICYmIHNpemVvZihSZXApIDw9
IHNpemVvZihpbnQ2NF90KSwgIlNlcmlhbGl6YXRpb24gb2YgdGhpcyBSZXAgdHlwZSBpcyBub3Qg
c3VwcG9ydGVkIHlldC4gT25seSBzaWduZWQgaW50ZWdlciB0eXBlIHdoaWNoIGNhbiBiZSBmaXQg
aW4gYW4gaW50NjRfdCBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLiIpOworICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGludDY0X3Q+KGR1cmF0aW9uLmNvdW50KCkpOworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OmNocm9ubzo6ZHVyYXRp
b248UmVwLCBQZXJpb2Q+JiByZXN1bHQpCisgICAgeworICAgICAgICBpbnQ2NF90IGNvdW50Owor
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmVzdWx0ID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9k
PihzdGF0aWNfY2FzdDxSZXA+KGNvdW50KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlcjxzdGQ6Om9wdGlvbmFsPFQ+
PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8VD4mIG9wdGlvbmFsKQorICAgIHsKKyAgICAgICAgaWYgKCFvcHRpb25hbCkgewor
ICAgICAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgZW5jb2RlciA8PCB0cnVlOworICAgICAgICBlbmNvZGVy
IDw8IG9wdGlvbmFsLnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6Om9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKKyAgICB7Cisg
ICAgICAgIGJvb2wgaXNFbmdhZ2VkOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRW5n
YWdlZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAo
IWlzRW5nYWdlZCkgeworICAgICAgICAgICAgb3B0aW9uYWwgPSBzdGQ6Om51bGxvcHQ7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVCB2YWx1
ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBvcHRpb25hbCA9IFdURk1vdmUodmFsdWUpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlU
eXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBDb2RlcjxXVEY6OktleVZhbHVlUGFpcjxL
ZXlUeXBlLCBWYWx1ZVR5cGU+PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIp
CisgICAgeworICAgICAgICBlbmNvZGVyIDw8IHBhaXIua2V5IDw8IHBhaXIudmFsdWU7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdURjo6S2V5VmFs
dWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCisgICAgeworICAgICAgICBLZXlUeXBl
IGtleTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIFZhbHVlVHlwZSB2YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
cGFpci5rZXkgPSBrZXk7CisgICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8Ym9vbCBmaXhlZFNpemVFbGVtZW50cywg
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IFZlY3Rv
ckNvZGVyPGZhbHNlLCBULCBpbmxpbmVDYXBhY2l0eT4geworICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpCisgICAgeworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0
b3Iuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHZlY3RvcltpXTsKKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgdWludDY0X3Qgc2l6ZTsKKyAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRtcDsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIFQgZWxlbWVudDsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZWxlbWVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICB0bXAuYXBwZW5kKFdURk1vdmUoZWxl
bWVudCkpOworICAgICAgICB9CisKKyAgICAgICAgdG1wLnNocmlua1RvRml0KCk7CisgICAgICAg
IHZlY3Rvci5zd2FwKHRtcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IFZlY3RvckNv
ZGVyPHRydWUsIFQsIGlubGluZUNhcGFjaXR5PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikK
KyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5z
aXplKCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNp
emVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisg
ICAgeworICAgICAgICB1aW50NjRfdCBzaXplOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIFNpbmNlIHdl
IGtub3cgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGVsZW1lbnRzLCB3ZSBjYW4gYWxsb2NhdGUgdGhl
IHZlY3RvciBpbgorICAgICAgICAvLyBvbmUgZmVsbCBzd29vcC4gQmVmb3JlIGFsbG9jYXRpbmcg
d2UgbXVzdCBob3dldmVyIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlcgorICAgICAg
ICAvLyBpcyBiaWcgZW5vdWdoLgorICAgICAgICBpZiAoIWRlY29kZXIuYnVmZmVySXNMYXJnZUVu
b3VnaFRvQ29udGFpbjxUPihzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CisgICAgICAgIHRlbXAucmVzaXpl
KHNpemUpOworCisgICAgICAgIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSk7CisKKyAg
ICAgICAgdmVjdG9yLnN3YXAodGVtcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IENv
ZGVyPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IDogVmVjdG9yQ29kZXI8c3RkOjppc19hcml0
aG1ldGljPFQ+Ojp2YWx1ZSwgVCwgaW5saW5lQ2FwYWNpdHk+IHsgfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPiBzdHJ1Y3QgQ29kZXI8
SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRU
cmFpdHNBcmc+PiB7CisgICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4gSGFzaE1hcFR5cGU7CisKKyAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSGFzaE1hcFR5cGUmIGhh
c2hNYXApCisgICAgeworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Piho
YXNoTWFwLnNpemUoKSk7CisgICAgICAgIGZvciAodHlwZW5hbWUgSGFzaE1hcFR5cGU6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaGFzaE1hcC5iZWdpbigpLCBlbmQgPSBoYXNoTWFwLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgICAgICBlbmNvZGVyIDw8ICppdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hNYXAp
CisgICAgeworICAgICAgICB1aW50NjRfdCBoYXNoTWFwU2l6ZTsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShoYXNoTWFwU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgSGFzaE1hcFR5cGUgdGVtcEhhc2hNYXA7CisgICAgICAgIGZvciAodWludDY0X3QgaSA9
IDA7IGkgPCBoYXNoTWFwU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBLZXlBcmcga2V5OworICAg
ICAgICAgICAgTWFwcGVkQXJnIHZhbHVlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShrZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgaWYgKCF0ZW1wSGFzaE1hcC5hZGQoa2V5LCB2YWx1ZSkuaXNOZXdFbnRyeSkg
eworICAgICAgICAgICAgICAgIC8vIFRoZSBoYXNoIG1hcCBhbHJlYWR5IGhhcyB0aGUgc3BlY2lm
aWVkIGtleSwgYmFpbC4KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBoYXNoTWFwLnN3YXAodGVtcEhhc2hNYXApOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZz4gc3RydWN0IENvZGVyPEhh
c2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+PiB7CisgICAgdHlwZWRlZiBIYXNo
U2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPiBIYXNoU2V0VHlwZTsKKworICAgIHN0
YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNoU2V0VHlwZSYgaGFz
aFNldCkKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhh
c2hTZXQuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBIYXNoU2V0VHlwZTo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBoYXNoU2V0LmJlZ2luKCksIGVuZCA9IGhhc2hTZXQuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgKml0OworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBIYXNoU2V0VHlwZSYgaGFzaFNldCkK
KyAgICB7CisgICAgICAgIHVpbnQ2NF90IGhhc2hTZXRTaXplOworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGhhc2hTZXRTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBIYXNoU2V0VHlwZSB0ZW1wSGFzaFNldDsKKyAgICAgICAgZm9yICh1aW50NjRfdCBpID0g
MDsgaSA8IGhhc2hTZXRTaXplOyArK2kpIHsKKyAgICAgICAgICAgIEtleUFyZyBrZXk7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICBpZiAoIXRlbXBIYXNoU2V0LmFkZChrZXkpLmlzTmV3RW50
cnkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNw
ZWNpZmllZCBrZXksIGJhaWwuCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaGFzaFNldC5zd2FwKHRlbXBIYXNoU2V0KTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29k
ZXI8QXRvbWljU3RyaW5nPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25z
dCBBdG9taWNTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIEF0b21p
Y1N0cmluZyYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8Q1N0cmluZz4geworICAg
IHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgQ1N0cmluZyYpOworICAgIHN0YXRp
YyBib29sIGRlY29kZShEZWNvZGVyJiwgQ1N0cmluZyYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29kZXI8U3RyaW5nPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25z
dCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFN0cmluZyYpOwor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiB7
CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkNl
cnRpZmljYXRlSW5mbyYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8U0hBMTo6RGln
ZXN0PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBTSEExOjpEaWdl
c3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFNIQTE6OkRpZ2VzdCYpOwor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD4gewor
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRl
ck1hcCYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6SFRUUEhl
YWRlck1hcCYpOworfTsKKworfQorfQorI2VuZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJz
aXN0ZW5jZS9Db2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9Db2RlcnMuaAkocmV2aXNpb24gMjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvQ29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDIxICsyNSwxNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotCi0jaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlRGVjb2Rlci5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRl
ck1hcC5oPgogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1NIQTEuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3Bl
cnNpc3RlbmNlL0RlY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5o
PgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworbmFtZXNw
YWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQ29kZXI8c3RkOjpwYWlyPFQsIFU+PiB7CiAgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxULCBVPiYgcGFp
cikKQEAgLTI2NiwzNSArMjYyLDI0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgSGFzaEEKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPEF0b21pY1N0cmluZz4gewot
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgQXRvbWljU3RyaW5nJik7Ci0g
ICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBBdG9taWNTdHJpbmcmKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBBdG9taWNT
dHJpbmcmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBBdG9taWNTdHJpbmcmKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPENTdHJp
bmc+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IENTdHJpbmcmKTsK
LSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIENTdHJpbmcmKTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBDU3RyaW5nJik7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQ1N0
cmluZyYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8U3RyaW5nPiB7Ci0gICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoRGVjb2RlciYsIFN0cmluZyYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29k
ZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKLSAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN0cmluZyYp
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFN0
cmluZyYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8U0hBMTo6RGlnZXN0PiB7Ci0g
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBTSEExOjpEaWdlc3QmKTsKLSAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFNIQTE6OkRpZ2VzdCYpOwotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD4gewotICAgIHN0YXRp
YyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYpOwot
ICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYp
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNv
bnN0IFNIQTE6OkRpZ2VzdCYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBk
ZWNvZGUoRGVjb2RlciYsIFNIQTE6OkRpZ2VzdCYpOwogfTsKIAogfQogfQotI2VuZGlmCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmNwcAkocmV2aXNpb24gMjEwMzMwKQko
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNv
ZGVyLmNwcDoyMTAzMzApCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCwgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgi
CisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVu
Y29kZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsK
KworRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJT
aXplKQorICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZm
ZXIpCisgICAgLCBtX2J1ZmZlckVuZChidWZmZXIgKyBidWZmZXJTaXplKQoreworfQorCitEZWNv
ZGVyOjp+RGVjb2RlcigpCit7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6YnVmZmVySXNMYXJnZUVub3Vn
aFRvQ29udGFpbihzaXplX3Qgc2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZSA8PSBzdGF0
aWNfY2FzdDxzaXplX3Q+KG1fYnVmZmVyRW5kIC0gbV9idWZmZXJQb3NpdGlvbik7Cit9CisKK2Jv
b2wgRGVjb2Rlcjo6ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBz
aXplKQoreworICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVyUG9zaXRpb24s
IHNpemUpOworICAgIG1fYnVmZmVyUG9zaXRpb24gKz0gc2l6ZTsKKworICAgIEVuY29kZXI6OnVw
ZGF0ZUNoZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEsIHNpemUpOworICAgIHJldHVybiB0cnVl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgorYm9vbCBEZWNvZGVyOjpkZWNvZGVOdW1i
ZXIoVHlwZSYgdmFsdWUpCit7CisgICAgaWYgKCFidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWlu
KHNpemVvZih2YWx1ZSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtZW1jcHkoJnZh
bHVlLCBtX2J1ZmZlclBvc2l0aW9uLCBzaXplb2YodmFsdWUpKTsKKyAgICBtX2J1ZmZlclBvc2l0
aW9uICs9IHNpemVvZihUeXBlKTsKKworICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVt
YmVyKG1fc2hhMSwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERlY29kZXI6
OmRlY29kZShib29sJiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQp
OworfQorCitib29sIERlY29kZXI6OmRlY29kZSh1aW50OF90JiByZXN1bHQpCit7CisgICAgcmV0
dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OmRlY29kZSh1aW50
MTZfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKK30KKwor
Ym9vbCBEZWNvZGVyOjpkZWNvZGUodWludDMyX3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVj
b2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ2NF90JiBy
ZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIERl
Y29kZXI6OmRlY29kZShpbnQzMl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZU51bWJl
cihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OmRlY29kZShpbnQ2NF90JiByZXN1bHQpCit7
CisgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OmRl
Y29kZShmbG9hdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsK
K30KKworYm9vbCBEZWNvZGVyOjpkZWNvZGUoZG91YmxlJiByZXN1bHQpCit7CisgICAgcmV0dXJu
IGRlY29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3Vt
KCkKK3sKKyAgICBTSEExOjpEaWdlc3QgY29tcHV0ZWRIYXNoOworICAgIG1fc2hhMS5jb21wdXRl
SGFzaChjb21wdXRlZEhhc2gpOworCisgICAgU0hBMTo6RGlnZXN0IHNhdmVkSGFzaDsKKyAgICBp
ZiAoIWRlY29kZUZpeGVkTGVuZ3RoRGF0YShzYXZlZEhhc2guZGF0YSgpLCBzaXplb2Yoc2F2ZWRI
YXNoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjb21wdXRlZEhhc2gg
PT0gc2F2ZWRIYXNoOworfQorCit9Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYv
cGVyc2lzdGVuY2UvRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL0RlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNCArMjQsMTIg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRGVj
b2Rlci5oIgorI2luY2x1ZGUgIkRlY29kZXIuaCIKIAotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hF
KQorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmg+CiAKLSNpbmNsdWRlICJOZXR3
b3JrQ2FjaGVFbmNvZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdv
cmtDYWNoZSB7CituYW1lc3BhY2UgV1RGIHsKK25hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKIERl
Y29kZXI6OkRlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkK
ICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKQEAgLTEzMyw1ICsxMzEsMyBAQCBib29sIERlY29kZXI6
OnZlcmlmeUNoZWNrc3VtKCkKIAogfQogfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL0RlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJz
aXN0ZW5jZS9EZWNvZGVyLmgJKHJldmlzaW9uIDIxMDMzMCkJKGZyb20gU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5oOjIxMDMzMCkKKysrIFNv
dXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTmV0d29ya0NhY2hlRGVjb2Rlcl9oCisj
ZGVmaW5lIE5ldHdvcmtDYWNoZURlY29kZXJfaAorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUp
CisKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2Rlci5oIgorI2luY2x1ZGUgPHd0Zi9TSEExLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CisKK2NsYXNz
IERlY29kZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERl
Y29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7CisgICAgdmly
dHVhbCB+RGVjb2RlcigpOworCisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
YnVmZmVyRW5kIC0gbV9idWZmZXI7IH0KKyAgICBzaXplX3QgY3VycmVudE9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyUG9zaXRpb24gLSBtX2J1ZmZlcjsgfQorCisgICAgYm9vbCB2ZXJp
ZnlDaGVja3N1bSgpOworCisgICAgYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCos
IHNpemVfdCk7CisKKyAgICBib29sIGRlY29kZShib29sJik7CisgICAgYm9vbCBkZWNvZGUodWlu
dDhfdCYpOworICAgIGJvb2wgZGVjb2RlKHVpbnQxNl90Jik7CisgICAgYm9vbCBkZWNvZGUodWlu
dDMyX3QmKTsKKyAgICBib29sIGRlY29kZSh1aW50NjRfdCYpOworICAgIGJvb2wgZGVjb2RlKGlu
dDMyX3QmKTsKKyAgICBib29sIGRlY29kZShpbnQ2NF90Jik7CisgICAgYm9vbCBkZWNvZGUoZmxv
YXQmKTsKKyAgICBib29sIGRlY29kZShkb3VibGUmKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGJvb2wgZGVjb2RlRW51bShUJiByZXN1bHQpCisgICAgeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihUKSA8PSA4LCAiRW51bSB0eXBlIFQgbXVzdCBub3QgYmUgbGFyZ2VyIHRoYW4g
NjQgYml0cyEiKTsKKworICAgICAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNv
ZGUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAg
cmVzdWx0ID0gc3RhdGljX2Nhc3Q8VD4odmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZShUJiB0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIENvZGVyPFQ+OjpkZWNvZGUoKnRoaXMsIHQpOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250
YWluKHNpemVfdCBudW1FbGVtZW50cykgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSwgIlR5cGUgVCBtdXN0IGhhdmUgYSBmaXhl
ZCwga25vd24gZW5jb2RlZCBzaXplISIpOworCisgICAgICAgIGlmIChudW1FbGVtZW50cyA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0Nv
bnRhaW4obnVtRWxlbWVudHMgKiBzaXplb2YoVCkpOworICAgIH0KKworICAgIHN0YXRpYyBjb25z
dCBib29sIGlzSVBDRGVjb2RlciA9IGZhbHNlOworCitwcml2YXRlOgorICAgIGJvb2wgYnVmZmVy
SXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplX3QpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+IGJvb2wgZGVjb2RlTnVtYmVyKFR5cGUmKTsKKworICAgIGNvbnN0IHVpbnQ4X3Qq
IG1fYnVmZmVyOworICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29u
c3QgdWludDhfdCogbV9idWZmZXJFbmQ7CisKKyAgICBTSEExIG1fc2hhMTsKK307CisKK30gCit9
CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNv
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5o
CShyZXZpc2lvbiAyMTAzMzApCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDM5ICsyMywzNiBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgTmV0d29ya0NhY2hlRGVjb2Rlcl9oCi0j
ZGVmaW5lIE5ldHdvcmtDYWNoZURlY29kZXJfaAorI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKLQotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvQ29kZXIuaD4KIAotbmFt
ZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKK25hbWVzcGFjZSBXVEYg
eworbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogY2xhc3MgRGVjb2RlciB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRGVjb2Rlcihjb25zdCB1aW50OF90KiBi
dWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKLSAgICB2aXJ0dWFsIH5EZWNvZGVyKCk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIERlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3Qg
YnVmZmVyU2l6ZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5EZWNvZGVyKCk7CiAKICAgICBz
aXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQog
ICAgIHNpemVfdCBjdXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3NpdGlv
biAtIG1fYnVmZmVyOyB9CiAKLSAgICBib29sIHZlcmlmeUNoZWNrc3VtKCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdmVyaWZ5Q2hlY2tzdW0oKTsKIAotICAgIGJvb2wgZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBi
b29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90Kiwgc2l6ZV90KTsKIAotICAgIGJvb2wg
ZGVjb2RlKGJvb2wmKTsKLSAgICBib29sIGRlY29kZSh1aW50OF90Jik7Ci0gICAgYm9vbCBkZWNv
ZGUodWludDE2X3QmKTsKLSAgICBib29sIGRlY29kZSh1aW50MzJfdCYpOwotICAgIGJvb2wgZGVj
b2RlKHVpbnQ2NF90Jik7Ci0gICAgYm9vbCBkZWNvZGUoaW50MzJfdCYpOwotICAgIGJvb2wgZGVj
b2RlKGludDY0X3QmKTsKLSAgICBib29sIGRlY29kZShmbG9hdCYpOwotICAgIGJvb2wgZGVjb2Rl
KGRvdWJsZSYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZShib29sJik7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKHVpbnQ4X3QmKTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWludDE2X3QmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgYm9vbCBkZWNvZGUodWludDMyX3QmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBk
ZWNvZGUodWludDY0X3QmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUoaW50
MzJfdCYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZShpbnQ2NF90Jik7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKGZsb2F0Jik7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgZGVjb2RlKGRvdWJsZSYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gYm9vbCBkZWNvZGVFbnVtKFQmIHJlc3VsdCkKICAgICB7CkBAIC04OCw3ICs4NSw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0lQQ0RlY29kZXIgPSBmYWxzZTsKIAogcHJp
dmF0ZToKLSAgICBib29sIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90KSBjb25z
dDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250
YWluKHNpemVfdCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gYm9vbCBkZWNv
ZGVOdW1iZXIoVHlwZSYpOwogCiAgICAgY29uc3QgdWludDhfdCogbV9idWZmZXI7CkBAIC0xMDEs
NSArOTgsMyBAQCBwcml2YXRlOgogfSAKIH0KIAotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuY3BwCShyZXZpc2lvbiAyMTAzMzApCShmcm9tIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuY3Bw
OjIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKKworI2lmIEVOQUJM
RShORVRXT1JLX0NBQ0hFKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3Jr
Q2FjaGUgeworCitFbmNvZGVyOjpFbmNvZGVyKCkKK3sKK30KKworRW5jb2Rlcjo6fkVuY29kZXIo
KQoreworfQorCit1aW50OF90KiBFbmNvZGVyOjpncm93KHNpemVfdCBzaXplKQoreworICAgIHNp
emVfdCBuZXdQb3NpdGlvbiA9IG1fYnVmZmVyLnNpemUoKTsKKyAgICBtX2J1ZmZlci5ncm93KG1f
YnVmZmVyLnNpemUoKSArIHNpemUpOworICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCkgKyBuZXdQ
b3NpdGlvbjsKK30KKwordm9pZCBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYg
c2hhMSwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgYXV0byB0eXBl
U2FsdCA9IFNhbHQ8dWludDhfdCo+Ojp2YWx1ZTsKKyAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KCZ0eXBlU2FsdCksIHNpemVvZih0eXBlU2FsdCkpOworICAgIHNo
YTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIHVwZGF0
ZUNoZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEsIHNpemUpOworCisgICAgdWludDhfdCogYnVm
ZmVyID0gZ3JvdyhzaXplKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUg
dmFsdWUpCit7CisgICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2
YWx1ZSk7CisKKyAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVvZihUeXBlKSk7CisgICAg
bWVtY3B5KGJ1ZmZlciwgJnZhbHVlLCBzaXplb2YoVHlwZSkpOworfQorCit2b2lkIEVuY29kZXI6
OmVuY29kZShib29sIHZhbHVlKQoreworICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Cit9CisKK3Zv
aWQgRW5jb2Rlcjo6ZW5jb2RlKHVpbnQ4X3QgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZh
bHVlKTsKK30KKwordm9pZCBFbmNvZGVyOjplbmNvZGUodWludDE2X3QgdmFsdWUpCit7CisgICAg
ZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30KKwordm9pZCBFbmNvZGVyOjplbmNvZGUodWludDMyX3Qg
dmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30KKwordm9pZCBFbmNvZGVyOjpl
bmNvZGUodWludDY0X3QgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30KKwor
dm9pZCBFbmNvZGVyOjplbmNvZGUoaW50MzJfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIo
dmFsdWUpOworfQorCit2b2lkIEVuY29kZXI6OmVuY29kZShpbnQ2NF90IHZhbHVlKQoreworICAg
IGVuY29kZU51bWJlcih2YWx1ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGZsb2F0IHZh
bHVlKQoreworICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5j
b2RlKGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lk
IEVuY29kZXI6OmVuY29kZUNoZWNrc3VtKCkKK3sKKyAgICBTSEExOjpEaWdlc3QgaGFzaDsKKyAg
ICBtX3NoYTEuY29tcHV0ZUhhc2goaGFzaCk7CisgICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGhh
c2guZGF0YSgpLCBoYXNoLnNpemUoKSk7Cit9CisKK30KK30KKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmNwcAkocmV2aXNpb24gMjEwMzMwKQorKysgU291
cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDEyICsyNCwxMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOZXR3
b3JrQ2FjaGVFbmNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5oIgogCi0jaWYgRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCisjaW5jbHVkZSAiU0hBMS5oIgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lz
dGVuY2UgewogCiBFbmNvZGVyOjpFbmNvZGVyKCkKIHsKQEAgLTEyNCw1ICsxMjQsMyBAQCB2b2lk
IEVuY29kZXI6OmVuY29kZUNoZWNrc3VtKCkKIAogfQogfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmgJKHJldmlzaW9uIDIxMDMzMCkJKGZyb20gU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5oOjIxMDMz
MCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTmV0d29ya0NhY2hlRW5j
b2Rlcl9oCisjZGVmaW5lIE5ldHdvcmtDYWNoZUVuY29kZXJfaAorCisjaWYgRU5BQkxFKE5FVFdP
UktfQ0FDSEUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2Rlci5oIgorI2luY2x1ZGUgPHd0
Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCitjbGFzcyBFbmNvZGVyOworY2xhc3MgRGF0YVJl
ZmVyZW5jZTsKKworY2xhc3MgRW5jb2RlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgRW5jb2RlcigpOworICAgIHZpcnR1YWwgfkVuY29kZXIoKTsKKworICAg
IHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKKyAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShj
b25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
ZW5jb2RlRW51bShUIHQpCisgICAgeworICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoVCkg
PD0gc2l6ZW9mKHVpbnQ2NF90KSwgZW51bV90eXBlX211c3Rfbm90X2JlX2xhcmdlcl90aGFuXzY0
X2JpdHMpOworCisgICAgICAgIGVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odCkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW5jb2RlKGNvbnN0IFQmIHQpCisg
ICAgeworICAgICAgICBDb2RlcjxUPjo6ZW5jb2RlKCp0aGlzLCB0KTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFbmNvZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFQmIHQpCisgICAg
eworICAgICAgICBlbmNvZGUodCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7
IH0KKyAgICBzaXplX3QgYnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLnNpemUo
KTsgfQorCisgICAgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25z
dCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RhdGlj
IHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYsIFR5cGUpOworCisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CisKK3ByaXZhdGU6CisgICAgdm9pZCBl
bmNvZGUoYm9vbCk7CisgICAgdm9pZCBlbmNvZGUodWludDhfdCk7CisgICAgdm9pZCBlbmNvZGUo
dWludDE2X3QpOworICAgIHZvaWQgZW5jb2RlKHVpbnQzMl90KTsKKyAgICB2b2lkIGVuY29kZSh1
aW50NjRfdCk7CisgICAgdm9pZCBlbmNvZGUoaW50MzJfdCk7CisgICAgdm9pZCBlbmNvZGUoaW50
NjRfdCk7CisgICAgdm9pZCBlbmNvZGUoZmxvYXQpOworICAgIHZvaWQgZW5jb2RlKGRvdWJsZSk7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiB2b2lkIGVuY29kZU51bWJlcihUeXBlKTsK
KworICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
eXBlPiBzdHJ1Y3QgU2FsdDsKKworICAgIFZlY3Rvcjx1aW50OF90LCA0MDk2PiBtX2J1ZmZlcjsK
KyAgICBTSEExIG1fc2hhMTsKK307CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0
PGJvb2w+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMzsgfTsKK3RlbXBsYXRlIDw+
IHN0cnVjdCBFbmNvZGVyOjpTYWx0PHVpbnQ4X3Q+IHsgc3RhdGljIGNvbnN0ICB1bnNpZ25lZCB2
YWx1ZSA9IDU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50MTZfdD4g
eyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSA3OyB9OwordGVtcGxhdGUgPD4gc3RydWN0
IEVuY29kZXI6OlNhbHQ8dWludDMyX3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0g
MTE7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50NjRfdD4geyBzdGF0
aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAxMzsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNv
ZGVyOjpTYWx0PGludDMyX3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMTc7IH07
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDxpbnQ2NF90PiB7IHN0YXRpYyBjb25z
dCB1bnNpZ25lZCB2YWx1ZSA9IDE5OyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNh
bHQ8ZmxvYXQ+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMjM7IH07Cit0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDxkb3VibGU+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHZhbHVlID0gMjk7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50OF90
Kj4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAxMDE7IH07CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUeXBlPgordm9pZCBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEEx
JiBzaGExLCBUeXBlIHZhbHVlKQoreworICAgIGF1dG8gdHlwZVNhbHQgPSBTYWx0PFR5cGU+Ojp2
YWx1ZTsKKyAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0eXBl
U2FsdCksIHNpemVvZih0eXBlU2FsdCkpOworICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7Cit9CisKK30KK30KKworI2Vu
ZGlmCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmgJKHJldmlz
aW9uIDIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjMsMTcgKzIzLDE0IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOZXR3b3JrQ2FjaGVFbmNvZGVyX2gKLSNkZWZpbmUg
TmV0d29ya0NhY2hlRW5jb2Rlcl9oCisjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQotCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXIuaCIKICNpbmNsdWRlIDx3dGYv
U0hBMS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVu
Y2UvQ29kZXIuaD4KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hl
IHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogY2xhc3MgRW5j
b2RlcjsKIGNsYXNzIERhdGFSZWZlcmVuY2U7CkBAIC00MSwxMSArMzgsMTEgQEAgY2xhc3MgRGF0
YVJlZmVyZW5jZTsKIGNsYXNzIEVuY29kZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIEVuY29kZXIoKTsKLSAgICB2aXJ0dWFsIH5FbmNvZGVyKCk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIEVuY29kZXIoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkVu
Y29kZXIoKTsKIAotICAgIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICB2b2lkIGVuY29kZUZp
eGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBlbmNvZGVDaGVja3N1bSgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW5jb2RlRW51bShUIHQpCiAgICAgewpAQCAtNjgsMjEg
KzY1LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBjb25zdCB7IHJl
dHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KICAgICBzaXplX3QgYnVmZmVyU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQogCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tz
dW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1
aW50OF90Kiwgc2l6ZV90KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RhdGljIHZv
aWQgdXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYsIFR5cGUpOwogCiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBlbmNv
ZGUoYm9vbCk7Ci0gICAgdm9pZCBlbmNvZGUodWludDhfdCk7Ci0gICAgdm9pZCBlbmNvZGUodWlu
dDE2X3QpOwotICAgIHZvaWQgZW5jb2RlKHVpbnQzMl90KTsKLSAgICB2b2lkIGVuY29kZSh1aW50
NjRfdCk7Ci0gICAgdm9pZCBlbmNvZGUoaW50MzJfdCk7Ci0gICAgdm9pZCBlbmNvZGUoaW50NjRf
dCk7Ci0gICAgdm9pZCBlbmNvZGUoZmxvYXQpOwotICAgIHZvaWQgZW5jb2RlKGRvdWJsZSk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGJvb2wpOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGVuY29kZSh1aW50OF90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGUodWludDE2X3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZSh1
aW50MzJfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKHVpbnQ2NF90KTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoaW50MzJfdCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGludDY0X3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGVuY29kZShmbG9hdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2Rl
KGRvdWJsZSk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiB2b2lkIGVuY29kZU51bWJl
cihUeXBlKTsKIApAQCAtMTE1LDYgKzExMiwzIEBAIHZvaWQgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tz
dW1Gb3JOdW1iZXIoU0gKIAogfQogfQotCi0jZW5kaWYKLSNlbmRpZgpJbmRleDogU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
cmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTctMDEtMDggIEFudHRpIEtvaXZpc3RvICA8YW50dGlA
YXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgY2FjaGUgY29kZXJzIHRvIFdURgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODI1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGUuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVDb2Rlci5oOiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUNvZGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
Q29kZXI8QXRvbWljU3RyaW5nPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+OjplbmNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+OjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFN0cmlu
Zz46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVj
b2RlU3RyaW5nVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
Q29kZXI8U3RyaW5nPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6SFRUUEhl
YWRlck1hcD46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6Q29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD46OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmg6CisgICAgICAg
ICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPHN0ZDo6
b3B0aW9uYWw8VD4+OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkNvZGVyPHN0ZDo6b3B0aW9uYWw8VD4+OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyc0NvY29hLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjplbmNvZGVDRkRhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmRlY29kZUNGRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZW5jb2RlU2VjVHJ1c3RSZWYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmRlY29kZVNlY1RydXN0UmVmKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjplbmNvZGVDZXJ0aWZpY2F0ZUNoYWlu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpkZWNvZGVDZXJ0aWZp
Y2F0ZUNoYWluKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2Rl
cjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmRl
Y29kZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRGVjb2Rlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGVjb2Rlci5oOiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OktleTo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVLZXkuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpk
ZWNvZGVSZWNvcmRNZXRhRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZW5j
b2RlUmVjb3JkTWV0YURhdGEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpTdWJyZXNvdXJjZUluZm86OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6U3VicmVzb3VyY2VJbmZvOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OlN1YnJlc291cmNlc0VudHJ5OjplbmNvZGVBc1N0b3JhZ2VSZWNvcmQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlc0VudHJ5OjpkZWNvZGVTdG9yYWdl
UmVjb3JkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJy
ZXNvdXJjZXNFbnRyeS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5jcHA6CisgICAgICAgIChBUEk6OmVuY29kZUNvbnRlbnRFeHRlbnNpb25N
ZXRhRGF0YSk6CisgICAgICAgIChBUEk6OmRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSk6
CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE3LTAx
LTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUGFz
c1JlZlB0ciB1c2UgZnJvbSAiaW5zcGVjdG9yIiwgInBsYXRmb3JtL3NxbCIsIGFuZCAicGxhdGZv
cm0vdGV4dCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXIuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXIuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE5ldHdv
cmtDYWNoZUNvZGVyX2gKLSNkZWZpbmUgTmV0d29ya0NhY2hlQ29kZXJfaAotCi0jaWYgRU5BQkxF
KE5FVFdPUktfQ0FDSEUpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdvcmtD
YWNoZSB7Ci0KLWNsYXNzIERlY29kZXI7Ci1jbGFzcyBFbmNvZGVyOwotICAgIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvZGVyIHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgVCYgdCkKLSAgICB7Ci0gICAgICAgIHQuZW5jb2RlKGVuY29kZXIp
OwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUJiB0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFQ6OmRlY29kZShkZWNvZGVyLCB0KTsKLSAgICB9Ci19
OwotCi19Ci19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAJKHJl
dmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUNvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEzMiArMjgsOCBAQAog
CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7Ci0KLXZvaWQgQ29kZXI8QXRvbWljU3RyaW5nPjo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgYXRvbWljU3RyaW5n
KQotewotICAgIGVuY29kZXIgPDwgYXRvbWljU3RyaW5nLnN0cmluZygpOwotfQotCi1ib29sIENv
ZGVyPEF0b21pY1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBBdG9taWNTdHJpbmcm
IGF0b21pY1N0cmluZykKLXsKLSAgICBTdHJpbmcgc3RyaW5nOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXRvbWljU3RyaW5n
ID0gc3RyaW5nOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvZGVyPENTdHJpbmc+Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ1N0cmluZyYgc3RyaW5nKQotewotICAgIC8v
IFNwZWNpYWwgY2FzZSB0aGUgbnVsbCBzdHJpbmcuCi0gICAgaWYgKHN0cmluZy5pc051bGwoKSkg
ewotICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKTsKLSAgICBlbmNvZGVyIDw8IGxlbmd0aDsKLSAgICBlbmNvZGVyLmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuZGF0
YSgpKSwgbGVuZ3RoKTsKLX0KLQotYm9vbCBDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIENTdHJpbmcmIHJlc3VsdCkKLXsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAobGVuZ3RoID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgewot
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBudWxsIHN0cmluZy4KLSAgICAgICAgcmVzdWx0ID0gQ1N0
cmluZygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBCZWZvcmUgYWxs
b2NhdGluZyB0aGUgc3RyaW5nLCBtYWtlIHN1cmUgdGhhdCB0aGUgZGVjb2RlciBidWZmZXIgaXMg
YmlnIGVub3VnaC4KLSAgICBpZiAoIWRlY29kZXIuYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFp
bjxjaGFyPihsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjaGFyKiBidWZm
ZXI7Ci0gICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0
aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJlc3VsdCA9IHN0cmluZzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi12
b2lkIENvZGVyPFN0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKLXsKLSAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51bGwgc3RyaW5nLgotICAgIGlm
IChzdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgZW5jb2RlciA8PCBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB1aW50
MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgYm9vbCBpczhCaXQgPSBzdHJpbmcu
aXM4Qml0KCk7Ci0KLSAgICBlbmNvZGVyIDw8IGxlbmd0aCA8PCBpczhCaXQ7Ci0KLSAgICBpZiAo
aXM4Qml0KQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVyczgoKSksIGxlbmd0aCAqIHNp
emVvZihMQ2hhcikpOwotICAgIGVsc2UKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMx
NigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIGRlY29kZVN0cmluZ1RleHQoRGVjb2Rl
ciYgZGVjb2RlciwgdWludDMyX3QgbGVuZ3RoLCBTdHJpbmcmIHJlc3VsdCkKLXsKLSAgICAvLyBC
ZWZvcmUgYWxsb2NhdGluZyB0aGUgc3RyaW5nLCBtYWtlIHN1cmUgdGhhdCB0aGUgZGVjb2RlciBi
dWZmZXIgaXMgYmlnIGVub3VnaC4KLSAgICBpZiAoIWRlY29kZXIuYnVmZmVySXNMYXJnZUVub3Vn
aFRvQ29udGFpbjxDaGFyYWN0ZXJUeXBlPihsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7Ci0gICAgU3RyaW5nIHN0cmluZyA9IFN0cmlu
Zzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIp
LCBsZW5ndGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgcmVzdWx0ID0gc3RyaW5nOwotICAgIHJldHVybiB0cnVlOyAgICAKLX0KLQot
Ym9vbCBDb2RlcjxTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiByZXN1
bHQpCi17Ci0gICAgdWludDMyX3QgbGVuZ3RoOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGVu
Z3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGxlbmd0aCA9PSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpIHsKLSAgICAgICAgLy8gVGhpcyBpcyB0aGUg
bnVsbCBzdHJpbmcuCi0gICAgICAgIHJlc3VsdCA9IFN0cmluZygpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIGlzOEJpdDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGlzOEJpdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpczhCaXQpCi0gICAg
ICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PExDaGFyPihkZWNvZGVyLCBsZW5ndGgsIHJlc3Vs
dCk7Ci0gICAgcmV0dXJuIGRlY29kZVN0cmluZ1RleHQ8VUNoYXI+KGRlY29kZXIsIGxlbmd0aCwg
cmVzdWx0KTsKLX0KLQotCi12b2lkIENvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKLXsKLSAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7Ci19Ci0K
LWJvb2wgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNIQTE6
OkRpZ2VzdCYgZGlnZXN0KQotewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7Ci19CituYW1lc3BhY2UgV1RGIHsK
K25hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKIC8vIFN0b3JlIGNvbW1vbiBIVFRQIGhlYWRlcnMg
YXMgc3RyaW5ncyBpbnN0ZWFkIG9mIHVzaW5nIHRoZWlyIHZhbHVlIGluIHRoZSBIVFRQSGVhZGVy
TmFtZSBlbnVtZXJhdGlvbgogLy8gc28gdGhhdCB0aGUgaGVhZGVycyBzdG9yZWQgaW4gdGhlIGNh
Y2hlIHN0YXlzIHZhbGlkIGV2ZW4gYWZ0ZXIgSFRUUEhlYWRlck5hbWUuaW4gZ2V0cyB1cGRhdGVk
LgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlQ29kZXJzLmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKIAotI2lu
Y2x1ZGUgIk5ldHdvcmtDYWNoZURlY29kZXIuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNv
ZGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0hUVFBIZWFkZXJNYXAuaD4KICNpbmNsdWRlIDx1dGlsaXR5PgpAQCAtMzcsMjU5ICsz
NSwxOCBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0NvZGVy
cy5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmg+CisjaW5jbHVkZSA8d3Rm
L3BlcnNpc3RlbmNlL0VuY29kZXIuaD4KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2Ug
TmV0d29ya0NhY2hlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0
IENvZGVyPHN0ZDo6cGFpcjxULCBVPj4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBzdGQ6OnBhaXI8VCwgVT4mIHBhaXIpCi0gICAgewotICAgICAgICBl
bmNvZGVyIDw8IHBhaXIuZmlyc3QgPDwgcGFpci5zZWNvbmQ7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6cGFpcjxULCBVPiYgcGFpcikKLSAg
ICB7Ci0gICAgICAgIFQgZmlyc3Q7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZmlyc3Qp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFUgc2Vjb25kOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHNlY29uZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgcGFpci5maXJzdCA9IGZpcnN0OwotICAgICAgICBwYWlyLnNlY29uZCA9IHNl
Y29uZDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgUmVwLCB0eXBlbmFtZSBQZXJpb2Q+IHN0cnVjdCBDb2RlcjxzdGQ6OmNocm9ubzo6ZHVyYXRp
b248UmVwLCBQZXJpb2Q+PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIGR1cmF0aW9uKQot
ICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPFJlcD46OnZhbHVl
ICYmIHN0ZDo6aXNfc2lnbmVkPFJlcD46OnZhbHVlICYmIHNpemVvZihSZXApIDw9IHNpemVvZihp
bnQ2NF90KSwgIlNlcmlhbGl6YXRpb24gb2YgdGhpcyBSZXAgdHlwZSBpcyBub3Qgc3VwcG9ydGVk
IHlldC4gT25seSBzaWduZWQgaW50ZWdlciB0eXBlIHdoaWNoIGNhbiBiZSBmaXQgaW4gYW4gaW50
NjRfdCBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLiIpOwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PGludDY0X3Q+KGR1cmF0aW9uLmNvdW50KCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBi
b29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQ
ZXJpb2Q+JiByZXN1bHQpCi0gICAgewotICAgICAgICBpbnQ2NF90IGNvdW50OwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGNvdW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgcmVzdWx0ID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPihzdGF0aWNf
Y2FzdDxSZXA+KGNvdW50KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlcjxzdGQ6Om9wdGlvbmFsPFQ+PiB7Ci0gICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
VD4mIG9wdGlvbmFsKQotICAgIHsKLSAgICAgICAgaWYgKCFvcHRpb25hbCkgewotICAgICAgICAg
ICAgZW5jb2RlciA8PCBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgZW5jb2RlciA8PCB0cnVlOwotICAgICAgICBlbmNvZGVyIDw8IG9wdGlv
bmFsLnZhbHVlKCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBzdGQ6Om9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKLSAgICB7Ci0gICAgICAgIGJv
b2wgaXNFbmdhZ2VkOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRW5nYWdlZCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWlzRW5nYWdl
ZCkgewotICAgICAgICAgICAgb3B0aW9uYWwgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVCB2YWx1ZTsKLSAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIAotICAgICAgICBvcHRpb25hbCA9IFdURk1vdmUodmFsdWUpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBl
bmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBDb2RlcjxXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBW
YWx1ZVR5cGU+PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCi0gICAgewot
ICAgICAgICBlbmNvZGVyIDw8IHBhaXIua2V5IDw8IHBhaXIudmFsdWU7Ci0gICAgfQotCi0gICAg
c3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdURjo6S2V5VmFsdWVQYWlyPEtl
eVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCi0gICAgewotICAgICAgICBLZXlUeXBlIGtleTsKLSAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIFZhbHVlVHlwZSB2YWx1ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcGFpci5rZXkg
PSBrZXk7Ci0gICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8Ym9vbCBmaXhlZFNpemVFbGVtZW50cywgdHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IFZlY3RvckNvZGVyPGZh
bHNlLCBULCBpbmxpbmVDYXBhY2l0eT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAg
ewotICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgp
KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICBlbmNvZGVyIDw8IHZlY3RvcltpXTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVj
dG9yKQotICAgIHsKLSAgICAgICAgdWludDY0X3Qgc2l6ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShzaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRtcDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIFQgZWxlbWVudDsKLSAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoZWxlbWVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICB0bXAuYXBwZW5kKFdURk1vdmUoZWxlbWVudCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdG1wLnNocmlua1RvRml0KCk7Ci0gICAgICAgIHZlY3Rvci5z
d2FwKHRtcCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IFZlY3RvckNvZGVyPHRydWUs
IFQsIGlubGluZUNhcGFjaXR5PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwot
ICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSwg
YWxpZ25vZihUKSk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAg
ICAgICB1aW50NjRfdCBzaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFNpbmNlIHdlIGtub3cgdGhl
IHRvdGFsIHNpemUgb2YgdGhlIGVsZW1lbnRzLCB3ZSBjYW4gYWxsb2NhdGUgdGhlIHZlY3RvciBp
bgotICAgICAgICAvLyBvbmUgZmVsbCBzd29vcC4gQmVmb3JlIGFsbG9jYXRpbmcgd2UgbXVzdCBo
b3dldmVyIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlcgotICAgICAgICAvLyBpcyBi
aWcgZW5vdWdoLgotICAgICAgICBpZiAoIWRlY29kZXIuYnVmZmVySXNMYXJnZUVub3VnaFRvQ29u
dGFpbjxUPihzaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7Ci0gICAgICAgIHRlbXAucmVzaXplKHNpemUpOwot
Ci0gICAgICAgIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSk7Ci0KLSAgICAgICAgdmVj
dG9yLnN3YXAodGVtcCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IENvZGVyPFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eT4+IDogVmVjdG9yQ29kZXI8c3RkOjppc19hcml0aG1ldGljPFQ+
Ojp2YWx1ZSwgVCwgaW5saW5lQ2FwYWNpdHk+IHsgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPiBzdHJ1Y3QgQ29kZXI8SGFzaE1hcDxL
ZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+
PiB7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4gSGFzaE1hcFR5cGU7Ci0KLSAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSGFzaE1hcFR5cGUmIGhhc2hNYXApCi0g
ICAgewotICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihoYXNoTWFwLnNp
emUoKSk7Ci0gICAgICAgIGZvciAodHlwZW5hbWUgSGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gaGFzaE1hcC5iZWdpbigpLCBlbmQgPSBoYXNoTWFwLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgICAgICBlbmNvZGVyIDw8ICppdDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hNYXApCi0gICAgewot
ICAgICAgICB1aW50NjRfdCBoYXNoTWFwU2l6ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShoYXNoTWFwU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgSGFz
aE1hcFR5cGUgdGVtcEhhc2hNYXA7Ci0gICAgICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBo
YXNoTWFwU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBLZXlBcmcga2V5OwotICAgICAgICAgICAg
TWFwcGVkQXJnIHZhbHVlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAg
ICAgaWYgKCF0ZW1wSGFzaE1hcC5hZGQoa2V5LCB2YWx1ZSkuaXNOZXdFbnRyeSkgewotICAgICAg
ICAgICAgICAgIC8vIFRoZSBoYXNoIG1hcCBhbHJlYWR5IGhhcyB0aGUgc3BlY2lmaWVkIGtleSwg
YmFpbC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBoYXNoTWFwLnN3YXAodGVtcEhhc2hNYXApOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZz4gc3RydWN0IENvZGVyPEhhc2hTZXQ8S2V5
QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+PiB7Ci0gICAgdHlwZWRlZiBIYXNoU2V0PEtleUFy
ZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPiBIYXNoU2V0VHlwZTsKLQotICAgIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNoU2V0VHlwZSYgaGFzaFNldCkKLSAg
ICB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhhc2hTZXQuc2l6
ZSgpKTsKLSAgICAgICAgZm9yICh0eXBlbmFtZSBIYXNoU2V0VHlwZTo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBoYXNoU2V0LmJlZ2luKCksIGVuZCA9IGhhc2hTZXQuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgICAgIGVuY29kZXIgPDwgKml0OwotICAgIH0KLQotICAgIHN0YXRpYyBib29s
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBIYXNoU2V0VHlwZSYgaGFzaFNldCkKLSAgICB7Ci0g
ICAgICAgIHVpbnQ2NF90IGhhc2hTZXRTaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGhhc2hTZXRTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBIYXNo
U2V0VHlwZSB0ZW1wSGFzaFNldDsKLSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhh
c2hTZXRTaXplOyArK2kpIHsKLSAgICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgICAgICBpZiAoIXRlbXBIYXNoU2V0LmFkZChrZXkpLmlzTmV3RW50cnkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNwZWNpZmllZCBr
ZXksIGJhaWwuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaGFzaFNldC5zd2FwKHRlbXBIYXNoU2V0KTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8QXRvbWlj
U3RyaW5nPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBBdG9taWNT
dHJpbmcmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIEF0b21pY1N0cmluZyYp
OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8Q1N0cmluZz4gewotICAgIHN0YXRpYyB2
b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgQ1N0cmluZyYpOwotICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiwgQ1N0cmluZyYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8
U3RyaW5nPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBTdHJpbmcm
KTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFN0cmluZyYpOwotfTsKK25hbWVz
cGFjZSBXVEYgeworbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKICAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwogfTsKIAot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8U0hBMTo6RGlnZXN0PiB7Ci0gICAgc3RhdGljIHZvaWQg
ZW5jb2RlKEVuY29kZXImLCBjb25zdCBTSEExOjpEaWdlc3QmKTsKLSAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoRGVjb2RlciYsIFNIQTE6OkRpZ2VzdCYpOwotfTsKLQogdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYpOwogICAgIHN0YXRpYyBib29s
IGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6SFRUUEhlYWRlck1hcCYpOwpJbmRleDogU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzQ29jb2EuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUNvZGVyc0NvY29hLmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzQ29jb2EuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBACiAjaW5jbHVkZSA8d3RmL3NwaS9jb2NvYS9TZWN1
cml0eVNQSS5oPgogI2VuZGlmCiAKLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdv
cmtDYWNoZSB7CituYW1lc3BhY2UgV1RGIHsKK25hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKIHN0
YXRpYyB2b2lkIGVuY29kZUNGRGF0YShFbmNvZGVyJiBlbmNvZGVyLCBDRkRhdGFSZWYgZGF0YSkK
IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcAko
bm9uZXhpc3RlbnQpCkBAIC0xLDEzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURlY29kZXIuaCIKLQot
I2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rl
ci5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewotCi1E
ZWNvZGVyOjpEZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUp
Ci0gICAgOiBtX2J1ZmZlcihidWZmZXIpCi0gICAgLCBtX2J1ZmZlclBvc2l0aW9uKGJ1ZmZlcikK
LSAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlciArIGJ1ZmZlclNpemUpCi17Ci19Ci0KLURlY29kZXI6
On5EZWNvZGVyKCkKLXsKLX0KLQotYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9D
b250YWluKHNpemVfdCBzaXplKSBjb25zdAotewotICAgIHJldHVybiBzaXplIDw9IHN0YXRpY19j
YXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKLX0KLQotYm9vbCBE
ZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
Ci17Ci0gICAgaWYgKCFidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtZW1jcHkoZGF0YSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6
ZSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplOwotCi0gICAgRW5jb2Rlcjo6dXBkYXRl
Q2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci1ib29sIERlY29kZXI6OmRlY29kZU51bWJlcihU
eXBlJiB2YWx1ZSkKLXsKLSAgICBpZiAoIWJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6
ZW9mKHZhbHVlKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1lbWNweSgmdmFsdWUs
IG1fYnVmZmVyUG9zaXRpb24sIHNpemVvZih2YWx1ZSkpOwotICAgIG1fYnVmZmVyUG9zaXRpb24g
Kz0gc2l6ZW9mKFR5cGUpOwotCi0gICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIo
bV9zaGExLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVj
b2RlKGJvb2wmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Ci19
Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ4X3QmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4g
ZGVjb2RlTnVtYmVyKHJlc3VsdCk7Ci19Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQxNl90
JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwotfQotCi1ib29s
IERlY29kZXI6OmRlY29kZSh1aW50MzJfdCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVO
dW1iZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDY0X3QmIHJlc3Vs
dCkKLXsKLSAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Ci19Ci0KLWJvb2wgRGVjb2Rl
cjo6ZGVjb2RlKGludDMyX3QmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJl
c3VsdCk7Ci19Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGludDY0X3QmIHJlc3VsdCkKLXsKLSAg
ICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Ci19Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVjb2Rl
KGZsb2F0JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwotfQot
Ci1ib29sIERlY29kZXI6OmRlY29kZShkb3VibGUmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVj
b2RlTnVtYmVyKHJlc3VsdCk7Ci19Ci0KLWJvb2wgRGVjb2Rlcjo6dmVyaWZ5Q2hlY2tzdW0oKQot
ewotICAgIFNIQTE6OkRpZ2VzdCBjb21wdXRlZEhhc2g7Ci0gICAgbV9zaGExLmNvbXB1dGVIYXNo
KGNvbXB1dGVkSGFzaCk7Ci0KLSAgICBTSEExOjpEaWdlc3Qgc2F2ZWRIYXNoOwotICAgIGlmICgh
ZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHNhdmVkSGFzaC5kYXRhKCksIHNpemVvZihzYXZlZEhhc2gp
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGNvbXB1dGVkSGFzaCA9PSBz
YXZlZEhhc2g7Ci19Ci0KLX0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5oCShy
ZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVEZWNvZGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgTmV0d29ya0NhY2hlRGVjb2Rlcl9oCi0jZGVmaW5lIE5ldHdvcmtD
YWNoZURlY29kZXJfaAotCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0KLSNpbmNsdWRlICJO
ZXR3b3JrQ2FjaGVDb2Rlci5oIgotI2luY2x1ZGUgPHd0Zi9TSEExLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7Ci0KLWNsYXNzIERlY29kZXIgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIERlY29kZXIoY29uc3QgdWlu
dDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7Ci0gICAgdmlydHVhbCB+RGVjb2Rlcigp
OwotCi0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyRW5kIC0gbV9i
dWZmZXI7IH0KLSAgICBzaXplX3QgY3VycmVudE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVm
ZmVyUG9zaXRpb24gLSBtX2J1ZmZlcjsgfQotCi0gICAgYm9vbCB2ZXJpZnlDaGVja3N1bSgpOwot
Ci0gICAgYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCosIHNpemVfdCk7Ci0KLSAg
ICBib29sIGRlY29kZShib29sJik7Ci0gICAgYm9vbCBkZWNvZGUodWludDhfdCYpOwotICAgIGJv
b2wgZGVjb2RlKHVpbnQxNl90Jik7Ci0gICAgYm9vbCBkZWNvZGUodWludDMyX3QmKTsKLSAgICBi
b29sIGRlY29kZSh1aW50NjRfdCYpOwotICAgIGJvb2wgZGVjb2RlKGludDMyX3QmKTsKLSAgICBi
b29sIGRlY29kZShpbnQ2NF90Jik7Ci0gICAgYm9vbCBkZWNvZGUoZmxvYXQmKTsKLSAgICBib29s
IGRlY29kZShkb3VibGUmKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgZGVjb2Rl
RW51bShUJiByZXN1bHQpCi0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA8
PSA4LCAiRW51bSB0eXBlIFQgbXVzdCBub3QgYmUgbGFyZ2VyIHRoYW4gNjQgYml0cyEiKTsKLQot
ICAgICAgICB1aW50NjRfdCB2YWx1ZTsKLSAgICAgICAgaWYgKCFkZWNvZGUodmFsdWUpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8VD4odmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZShUJiB0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IENvZGVyPFQ+OjpkZWNvZGUoKnRoaXMsIHQpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemVfdCBudW1F
bGVtZW50cykgY29uc3QKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19hcml0
aG1ldGljPFQ+Ojp2YWx1ZSwgIlR5cGUgVCBtdXN0IGhhdmUgYSBmaXhlZCwga25vd24gZW5jb2Rl
ZCBzaXplISIpOwotCi0gICAgICAgIGlmIChudW1FbGVtZW50cyA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgcmV0dXJuIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4obnVtRWxlbWVu
dHMgKiBzaXplb2YoVCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzSVBDRGVj
b2RlciA9IGZhbHNlOwotCi1wcml2YXRlOgotICAgIGJvb2wgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihzaXplX3QpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IGJvb2wg
ZGVjb2RlTnVtYmVyKFR5cGUmKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyOwotICAg
IGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247Ci0gICAgY29uc3QgdWludDhfdCogbV9i
dWZmZXJFbmQ7Ci0KLSAgICBTSEExIG1fc2hhMTsKLX07Ci0KLX0gCi19Ci0KLSNlbmRpZgotI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVFbmNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVyLmgiCi0KLSNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0
d29ya0NhY2hlIHsKLQotRW5jb2Rlcjo6RW5jb2RlcigpCi17Ci19Ci0KLUVuY29kZXI6On5FbmNv
ZGVyKCkKLXsKLX0KLQotdWludDhfdCogRW5jb2Rlcjo6Z3JvdyhzaXplX3Qgc2l6ZSkKLXsKLSAg
ICBzaXplX3QgbmV3UG9zaXRpb24gPSBtX2J1ZmZlci5zaXplKCk7Ci0gICAgbV9idWZmZXIuZ3Jv
dyhtX2J1ZmZlci5zaXplKCkgKyBzaXplKTsKLSAgICByZXR1cm4gbV9idWZmZXIuZGF0YSgpICsg
bmV3UG9zaXRpb247Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNI
QTEmIHNoYTEsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGF1dG8g
dHlwZVNhbHQgPSBTYWx0PHVpbnQ4X3QqPjo6dmFsdWU7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdHlwZVNhbHQpLCBzaXplb2YodHlwZVNhbHQpKTsKLSAg
ICBzaGExLmFkZEJ5dGVzKGRhdGEsIHNpemUpOwotfQotCi12b2lkIEVuY29kZXI6OmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICB1
cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsKLQotICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IGdyb3coc2l6ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEVuY29kZXI6OmVuY29kZU51bWJlcihU
eXBlIHZhbHVlKQotewotICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hh
MSwgdmFsdWUpOwotCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOwot
ICAgIG1lbWNweShidWZmZXIsICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKLX0KLQotdm9pZCBFbmNv
ZGVyOjplbmNvZGUoYm9vbCB2YWx1ZSkKLXsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwotfQot
Ci12b2lkIEVuY29kZXI6OmVuY29kZSh1aW50OF90IHZhbHVlKQotewotICAgIGVuY29kZU51bWJl
cih2YWx1ZSk7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHVpbnQxNl90IHZhbHVlKQotewot
ICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHVpbnQz
Ml90IHZhbHVlKQotewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Ci19Ci0KLXZvaWQgRW5jb2Rl
cjo6ZW5jb2RlKHVpbnQ2NF90IHZhbHVlKQotewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Ci19
Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGludDMyX3QgdmFsdWUpCi17Ci0gICAgZW5jb2RlTnVt
YmVyKHZhbHVlKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGUoaW50NjRfdCB2YWx1ZSkKLXsK
LSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwotfQotCi12b2lkIEVuY29kZXI6OmVuY29kZShmbG9h
dCB2YWx1ZSkKLXsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwotfQotCi12b2lkIEVuY29kZXI6
OmVuY29kZShkb3VibGUgdmFsdWUpCi17Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKLX0KLQot
dm9pZCBFbmNvZGVyOjplbmNvZGVDaGVja3N1bSgpCi17Ci0gICAgU0hBMTo6RGlnZXN0IGhhc2g7
Ci0gICAgbV9zaGExLmNvbXB1dGVIYXNoKGhhc2gpOwotICAgIGVuY29kZUZpeGVkTGVuZ3RoRGF0
YShoYXNoLmRhdGEoKSwgaGFzaC5zaXplKCkpOwotfQotCi19Ci19Ci0KLSNlbmRpZgpJbmRleDog
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVuY29kZXIuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5oCShub25leGlzdGVudCkKQEAg
LTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE5ldHdvcmtDYWNoZUVuY29kZXJf
aAotI2RlZmluZSBOZXR3b3JrQ2FjaGVFbmNvZGVyX2gKLQotI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFKQotCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXIuaCIKLSNpbmNsdWRlIDx3dGYvU0hB
MS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1l
c3BhY2UgTmV0d29ya0NhY2hlIHsKLQotY2xhc3MgRW5jb2RlcjsKLWNsYXNzIERhdGFSZWZlcmVu
Y2U7Ci0KLWNsYXNzIEVuY29kZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIEVuY29kZXIoKTsKLSAgICB2aXJ0dWFsIH5FbmNvZGVyKCk7Ci0KLSAgICB2b2lk
IGVuY29kZUNoZWNrc3VtKCk7Ci0gICAgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3Qg
dWludDhfdCosIHNpemVfdCk7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVuY29k
ZUVudW0oVCB0KQotICAgIHsKLSAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFQpIDw9IHNp
emVvZih1aW50NjRfdCksIGVudW1fdHlwZV9tdXN0X25vdF9iZV9sYXJnZXJfdGhhbl82NF9iaXRz
KTsKLQotICAgICAgICBlbmNvZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHQpKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVuY29kZShjb25zdCBUJiB0KQotICAgIHsK
LSAgICAgICAgQ29kZXI8VD46OmVuY29kZSgqdGhpcywgdCk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQotICAgIHsKLSAg
ICAgICAgZW5jb2RlKHQpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgY29u
c3QgdWludDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9Ci0g
ICAgc2l6ZV90IGJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0K
LQotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEExJiwgY29uc3QgdWlu
dDhfdCosIHNpemVfdCk7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+IHN0YXRpYyB2b2lk
IHVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNIQTEmLCBUeXBlKTsKLQotICAgIHN0YXRpYyBjb25z
dCBib29sIGlzSVBDRW5jb2RlciA9IGZhbHNlOwotCi1wcml2YXRlOgotICAgIHZvaWQgZW5jb2Rl
KGJvb2wpOwotICAgIHZvaWQgZW5jb2RlKHVpbnQ4X3QpOwotICAgIHZvaWQgZW5jb2RlKHVpbnQx
Nl90KTsKLSAgICB2b2lkIGVuY29kZSh1aW50MzJfdCk7Ci0gICAgdm9pZCBlbmNvZGUodWludDY0
X3QpOwotICAgIHZvaWQgZW5jb2RlKGludDMyX3QpOwotICAgIHZvaWQgZW5jb2RlKGludDY0X3Qp
OwotICAgIHZvaWQgZW5jb2RlKGZsb2F0KTsKLSAgICB2b2lkIGVuY29kZShkb3VibGUpOwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gdm9pZCBlbmNvZGVOdW1iZXIoVHlwZSk7Ci0KLSAg
ICB1aW50OF90KiBncm93KHNpemVfdCk7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4g
c3RydWN0IFNhbHQ7Ci0KLSAgICBWZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7Ci0gICAg
U0hBMSBtX3NoYTE7Ci19OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDxib29s
PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDM7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgRW5jb2Rlcjo6U2FsdDx1aW50OF90PiB7IHN0YXRpYyBjb25zdCAgdW5zaWduZWQgdmFsdWUg
PSA1OyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8dWludDE2X3Q+IHsgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gNzsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBFbmNv
ZGVyOjpTYWx0PHVpbnQzMl90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDExOyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8dWludDY0X3Q+IHsgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHZhbHVlID0gMTM7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6
U2FsdDxpbnQzMl90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDE3OyB9OwotdGVt
cGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8aW50NjRfdD4geyBzdGF0aWMgY29uc3QgdW5z
aWduZWQgdmFsdWUgPSAxOTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGZs
b2F0PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDIzOyB9OwotdGVtcGxhdGUgPD4g
c3RydWN0IEVuY29kZXI6OlNhbHQ8ZG91YmxlPiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1
ZSA9IDI5OyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8dWludDhfdCo+IHsg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMTAxOyB9OwotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVHlwZT4KLXZvaWQgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYgc2hh
MSwgVHlwZSB2YWx1ZSkKLXsKLSAgICBhdXRvIHR5cGVTYWx0ID0gU2FsdDxUeXBlPjo6dmFsdWU7
Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdHlwZVNhbHQp
LCBzaXplb2YodHlwZVNhbHQpKTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSkpOwotfQotCi19Ci19Ci0KLSNlbmRpZgot
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDYgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNv
ZGVyLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkBAIC04Myw3ICs4MSw3IEBAIEVu
dHJ5OjpFbnRyeShjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3IKIAogU3RvcmFnZTo6UmVjb3Jk
IEVudHJ5OjplbmNvZGVBc1N0b3JhZ2VSZWNvcmQoKSBjb25zdAogewotICAgIEVuY29kZXIgZW5j
b2RlcjsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAgICAgZW5jb2Rl
ciA8PCBtX3Jlc3BvbnNlOwogCiAgICAgYm9vbCBoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnMgPSAh
bV92YXJ5aW5nUmVxdWVzdEhlYWRlcnMuaXNFbXB0eSgpOwpAQCAtMTEwLDcgKzEwOCw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxFbnRyeT4gRW50cnk6OmRlY29kZVN0b3IKIHsKICAgICBhdXRvIGVudHJ5
ID0gc3RkOjptYWtlX3VuaXF1ZTxFbnRyeT4oc3RvcmFnZUVudHJ5KTsKIAotICAgIERlY29kZXIg
ZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5z
aXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlRW50
cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoZW50cnktPm1fcmVzcG9uc2UpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICBlbnRyeS0+bV9yZXNwb25zZS5zZXRTb3VyY2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZTo6U291cmNlOjpEaXNrQ2FjaGUpOwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCShyZXZpc2lvbiAy
MTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcgQEAgYm9vbCBLZXk6Om9w
ZXJhdG9yPT0oY29uc3QgS2V5JiBvdGhlcikgYwogICAgIHJldHVybiBtX2hhc2ggPT0gb3RoZXIu
bV9oYXNoICYmIG1fcGFydGl0aW9uID09IG90aGVyLm1fcGFydGl0aW9uICYmIG1fdHlwZSA9PSBv
dGhlci5tX3R5cGUgJiYgbV9pZGVudGlmaWVyID09IG90aGVyLm1faWRlbnRpZmllciAmJiBtX3Jh
bmdlID09IG90aGVyLm1fcmFuZ2U7CiB9CiAKLXZvaWQgS2V5OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKK3ZvaWQgS2V5OjplbmNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1fcGFydGl0aW9uOwogICAgIGVuY29k
ZXIgPDwgbV90eXBlOwpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgS2V5OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IG1fcGFydGl0aW9uSGFzaDsKIH0KIAot
Ym9vbCBLZXk6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBLZXkmIGtleSkKK2Jvb2wgS2V5Ojpk
ZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYgZGVjb2RlciwgS2V5JiBrZXkpCiB7CiAg
ICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGtleS5tX3BhcnRpdGlvbikgJiYgZGVjb2Rlci5kZWNv
ZGUoa2V5Lm1fdHlwZSkgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1faWRlbnRpZmllcikgJiYgZGVj
b2Rlci5kZWNvZGUoa2V5Lm1fcmFuZ2UpICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX2hhc2gpICYm
IGRlY29kZXIuZGVjb2RlKGtleS5tX3BhcnRpdGlvbkhhc2gpOwogfQpJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmgJ
KHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUtleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNCArMzAsMTMgQEAKIAog
I2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2lu
Y2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNpc3Rl
bmNlL0VuY29kZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotY2xhc3MgRW5jb2RlcjsK
LWNsYXNzIERlY29kZXI7Ci0KIGNsYXNzIEtleSB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBTSEEx
OjpEaWdlc3QgSGFzaFR5cGU7CkBAIC02OSw4ICs2OCw4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcg
aGFzaEFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gaGFzaEFzU3RyaW5nKG1faGFzaCk7IH0KICAg
ICBTdHJpbmcgcGFydGl0aW9uSGFzaEFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gaGFzaEFzU3Ry
aW5nKG1fcGFydGl0aW9uSGFzaCk7IH0KIAotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIEtleSYpOworICAgIHZvaWQgZW5j
b2RlKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYsIEtleSYpOwogCiAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEtleSYpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLZXkm
IG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQpJbmRleDogU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zODAsNyArMzgwLDcgQEAgc3RhdGljIGJvb2wgZGVjb2RlUmVjb3JkTWV0YURhdGEoUmVjb3Jk
TQogewogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgIGZpbGVEYXRhLmFwcGx5KFsmbWV0
YURhdGEsICZzdWNjZXNzXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAg
ICAgICBEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7CisgICAgICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShtZXRhRGF0YS5jYWNoZVN0b3JhZ2VWZXJzaW9uKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5rZXkpKQpAQCAtNDY0
LDcgKzQ2NCw3IEBAIHZvaWQgU3RvcmFnZTo6cmVhZFJlY29yZChSZWFkT3BlcmF0aW9uJiAKIAog
c3RhdGljIERhdGEgZW5jb2RlUmVjb3JkTWV0YURhdGEoY29uc3QgUmVjb3JkTWV0YURhdGEmIG1l
dGFEYXRhKQogewotICAgIEVuY29kZXIgZW5jb2RlcjsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpF
bmNvZGVyIGVuY29kZXI7CiAKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNhY2hlU3RvcmFnZVZl
cnNpb247CiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5rZXk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRy
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxMSBAQAogCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5oIgotI2luY2x1ZGUgIk5ldHdv
cmtDYWNoZURlY29kZXIuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKLXZvaWQgU3VicmVz
b3VyY2VJbmZvOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3ZvaWQgU3VicmVzb3Vy
Y2VJbmZvOjplbmNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
IHsKICAgICBlbmNvZGVyIDw8IG1faXNUcmFuc2llbnQ7CiAKQEAgLTQ4LDcgKzQ2LDcgQEAgdm9p
ZCBTdWJyZXNvdXJjZUluZm86OmVuY29kZShFbmNvZGVyJiBlbgogICAgIGVuY29kZXIgPDwgbV9y
ZXF1ZXN0SGVhZGVyczsKIH0KIAotYm9vbCBTdWJyZXNvdXJjZUluZm86OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBTdWJyZXNvdXJjZUluZm8mIGluZm8pCitib29sIFN1YnJlc291cmNlSW5mbzo6
ZGVjb2RlKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXImIGRlY29kZXIsIFN1YnJlc291cmNlSW5m
byYgaW5mbykKIHsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9pc1RyYW5zaWVudCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY3LDcgKzY1LDcgQEAgYm9vbCBTdWJyZXNvdXJj
ZUluZm86OmRlY29kZShEZWNvZGVyJiBkZQogCiBTdG9yYWdlOjpSZWNvcmQgU3VicmVzb3VyY2Vz
RW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCgpIGNvbnN0CiB7Ci0gICAgRW5jb2RlciBlbmNv
ZGVyOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBlbmNvZGVy
IDw8IG1fc3VicmVzb3VyY2VzOwogCiAgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOwpAQCAt
NzksNyArNzcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U3VicmVzb3VyY2VzRW50cnk+IFN1YnJlCiB7
CiAgICAgYXV0byBlbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8U3VicmVzb3VyY2VzRW50cnk+KHN0
b3JhZ2VFbnRyeSk7CiAKLSAgICBEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5k
YXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRy
eS5oZWFkZXIuc2l6ZSgpKTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGVudHJ5LT5tX3N1YnJl
c291cmNlcykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN1YnJlc291cmNlc0VudHJ5LmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDYgQEAKIAogI2lmIEVOQUJMRShORVRXT1JLX0NB
Q0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikKIAotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURl
Y29kZXIuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVyLmgiCiAjaW5jbHVkZSAiTmV0
d29ya0NhY2hlU3RvcmFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KQEAgLTQxLDggKzM5LDggQEAgbmFtZXNwYWNlIE5l
dHdvcmtDYWNoZSB7CiBjbGFzcyBTdWJyZXNvdXJjZUluZm8gewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFN1YnJlc291cmNlSW5mbyYpOworICAgIHZv
aWQgZW5jb2RlKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYsIFN1YnJlc291cmNlSW5mbyYp
OwogCiAgICAgU3VicmVzb3VyY2VJbmZvKCkgPSBkZWZhdWx0OwogICAgIFN1YnJlc291cmNlSW5m
byhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgaXNUcmFuc2ll
bnQgPSBmYWxzZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAkocmV2aXNpb24gMjEw
NDk2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsNiBAQAogCiAjaW5jbHVk
ZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEYXRh
LmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRGVjb2Rlci5oIgotI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZUVuY29kZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmgiCiAjaW5j
bHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uLmgiCkBAIC00MSw2ICszOSw4IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+Cisj
aW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lz
dGVuY2UvRW5jb2Rlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OjpOZXR3b3JrQ2FjaGU7
CiAKQEAgLTk5LDcgKzk5LDcgQEAgc3RydWN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSB7CiAK
IHN0YXRpYyBEYXRhIGVuY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShjb25zdCBDb250ZW50
RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhKQogewotICAgIFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyIGVuY29kZXI7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVy
OwogCiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS52ZXJzaW9uOwogICAgIGVuY29kZXIgPDwgbWV0
YURhdGEuYWN0aW9uc1NpemU7CkBAIC0xMjAsNyArMTIwLDcgQEAgc3RhdGljIGJvb2wgZGVjb2Rl
Q29udGVudEV4dGVuc2lvbk1ldGFEYQogICAgICAgICBpZiAoc2l6ZSAhPSBmaWxlRGF0YS5zaXpl
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwogICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKG1ldGFEYXRhLnZlcnNpb24pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmFjdGlvbnNTaXplKSkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTg5MywxMyArMTg5Myw4IEBACiAJCUU0NDM2
RUQwMUEwRDA0MEIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDM2RUMzMUEwQ0ZEQjIwMEVB
RDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcCAqLzsgfTsKIAkJRTQ2OTdDQ0QxQjI1RUI4
RjAwMUIwQTZDIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2OTdDQ0MxQjI1RUI4RjAwMUIwQTZDIC8q
IE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwICovOyB9OwogCQlFNDdEMUU5ODFCMDY0OUZCMDAy
Njc2QTggLyogTmV0d29ya0NhY2hlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdEMUU5NjFCMDYyQjY2MDAyNjc2QTggLyogTmV0d29ya0Nh
Y2hlRGF0YS5jcHAgKi87IH07Ci0JCUU0ODlEMjhBMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3Jr
Q2FjaGVDb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ4OUQyODMxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVyLmggKi87IH07
CiAJCUU0ODlEMjhCMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQyODQxQTBB
MkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5jcHAgKi87IH07CiAJCUU0ODlEMjhD
MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODlEMjg1MUEwQTJEQjgwMDc4QzA2QSAv
KiBOZXR3b3JrQ2FjaGVDb2RlcnMuaCAqLzsgfTsKLQkJRTQ4OUQyOEQxQTBBMkRCODAwNzhDMDZB
IC8qIE5ldHdvcmtDYWNoZURlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQyODYxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNo
ZURlY29kZXIuY3BwICovOyB9OwotCQlFNDg5RDI4RTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29y
a0NhY2hlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTQ4OUQyODcxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuaCAq
LzsgfTsKLQkJRTQ4OUQyOEYxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQy
ODgxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuY3BwICovOyB9OwotCQlF
NDg5RDI5MDFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQyODkxQTBBMkRCODAw
NzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuaCAqLzsgfTsKIAkJRTQ5RDQwRDcxQUQzRkIx
NzAwNjZCN0I5IC8qIE5ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlENDBENjFBRDNGQjE3MDA2NkI3QjkgLyog
TmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuaCAqLzsgfTsKIAkJRTQ5RDQwRDkxQUQzRkIyMTAwNjZC
N0I5IC8qIE5ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OUQ0MEQ4MUFEM0ZCMjEwMDY2QjdCOSAvKiBOZXR3
b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAgKi87IH07CiAJCUU0RTg2NDkyMUIxNjc1MDEwMEM4MkY0
MCAvKiBWZXJzaW9uQ2hlY2tzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTRFODY0OEYxQjE2NzNGQjAwQzgyRjQwIC8qIFZlcnNpb25DaGVja3MubW0g
Ki87IH07CkBAIC00MTAwLDEzICs0MDk1LDggQEAKIAkJRTQ0MzZFQzMxQTBDRkRCMjAwRUFEMjA0
IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTmV0d29ya0NhY2hlU3RvcmFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0Njk3Q0NDMUIyNUVCOEYwMDFCMEE2QyAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVt
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZUZp
bGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdEMUU5NjFCMDYy
QjY2MDAyNjc2QTggLyogTmV0d29ya0NhY2hlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRTQ4OUQyODMxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZUNvZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODlEMjg0MUEwQTJEQjgwMDc4QzA2QSAv
KiBOZXR3b3JrQ2FjaGVDb2RlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTmV0d29ya0NhY2hlQ29kZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ4OUQyODUxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVDb2RlcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ4OUQyODYxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdv
cmtDYWNoZURlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TmV0d29ya0NhY2hlRGVjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0
ODlEMjg3MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZURlY29kZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ4OUQyODgxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtD
YWNoZUVuY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0
d29ya0NhY2hlRW5jb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0ODlE
Mjg5MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZUVuY29kZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5RDQwRDYxQUQzRkIxNzAwNjZCN0I5IC8qIE5ldHdvcmtDYWNo
ZUJsb2JTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtD
YWNoZUJsb2JTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0OUQ0MEQ4
MUFEM0ZCMjEwMDY2QjdCOSAvKiBOZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RTg2NDhFMUIxNjczRkIwMEM4MkY0MCAv
KiBWZXJzaW9uQ2hlY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcnNp
b25DaGVja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc1NjksMTcgKzc1NTks
MTIgQEAKIAkJCQlFNDQzNkVCRjFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlLmggKi8s
CiAJCQkJRTQ5RDQwRDgxQUQzRkIyMTAwNjZCN0I5IC8qIE5ldHdvcmtDYWNoZUJsb2JTdG9yYWdl
LmNwcCAqLywKIAkJCQlFNDlENDBENjFBRDNGQjE3MDA2NkI3QjkgLyogTmV0d29ya0NhY2hlQmxv
YlN0b3JhZ2UuaCAqLywKLQkJCQlFNDg5RDI4MzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0Nh
Y2hlQ29kZXIuaCAqLywKIAkJCQlFNDg5RDI4NDFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0Nh
Y2hlQ29kZXJzLmNwcCAqLywKIAkJCQlFNDg5RDI4NTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29y
a0NhY2hlQ29kZXJzLmggKi8sCiAJCQkJN0NBQjkzNzkxRDQ1OUU0QjAwNzBGNTQwIC8qIE5ldHdv
cmtDYWNoZUNvZGVyc0NvY29hLmNwcCAqLywKIAkJCQlFNDdEMUU5NjFCMDYyQjY2MDAyNjc2QTgg
LyogTmV0d29ya0NhY2hlRGF0YS5jcHAgKi8sCiAJCQkJRTQyRTA2MTExQUE3NUFCRDAwQjExNjk5
IC8qIE5ldHdvcmtDYWNoZURhdGEuaCAqLywKIAkJCQlFNDJFMDYxMzFBQTc1QjcwMDBCMTE2OTkg
LyogTmV0d29ya0NhY2hlRGF0YUNvY29hLm1tICovLAotCQkJCUU0ODlEMjg2MUEwQTJEQjgwMDc4
QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcCAqLywKLQkJCQlFNDg5RDI4NzFBMEEyREI4
MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5oICovLAotCQkJCUU0ODlEMjg4MUEwQTJE
QjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcCAqLywKLQkJCQlFNDg5RDI4OTFB
MEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5oICovLAogCQkJCUU0MTNGNTlF
MUFDMUFGOUQwMDM0NTM2MCAvKiBOZXR3b3JrQ2FjaGVFbnRyeS5jcHAgKi8sCiAJCQkJRTQxM0Y1
OUIxQUMxQURCNjAwMzQ1MzYwIC8qIE5ldHdvcmtDYWNoZUVudHJ5LmggKi8sCiAJCQkJRTQ2OTdD
Q0MxQjI1RUI4RjAwMUIwQTZDIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwICovLApAQCAt
NzkwMywxMSArNzg4OCw4IEBACiAJCQkJRTE3OThDN0ExNkU2ODE4ODAwMjQwMTM5IC8qIE5ldHdv
cmtCbG9iUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDM2RUNDMUEwRDA0MEIwMEVB
RDIwNCAvKiBOZXR3b3JrQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OUQ0MEQ3MUFEM0ZC
MTcwMDY2QjdCOSAvKiBOZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJRTQ4OUQyOEExQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNDg5RDI4QzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29k
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDJFMDYxMjFBQTc1QUJEMDBCMTE2OTkgLyogTmV0
d29ya0NhY2hlRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ4OUQyOEUxQTBBMkRCODAwNzhD
MDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0ODlEMjkw
MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDEzRjU5RDFBQzFBREM0MDAzNDUzNjAgLyogTmV0d29ya0NhY2hlRW50cnkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTgzNEIyNTBGMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVG
aWxlU3lzdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDJFMDYxMDFBQTc1MjNCMDBCMTE2OTkg
LyogTmV0d29ya0NhY2hlSU9DaGFubmVsLmggaW4gSGVhZGVycyAqLywKQEAgLTk0MDcsOCArOTM4
OSw2IEBACiAJCQkJN0NBQjkzN0ExRDQ1OUU1MTAwNzBGNTQwIC8qIE5ldHdvcmtDYWNoZUNvZGVy
c0NvY29hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0N0QxRTk4MUIwNjQ5RkIwMDI2NzZBOCAv
KiBOZXR3b3JrQ2FjaGVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0MkUwNjE0MUFBNzVC
NzAwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0gaW4gU291cmNlcyAqLywKLQkJ
CQlFNDg5RDI4RDFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlFNDg5RDI4RjFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hl
RW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDEzRjU5RjFBQzFBRjlEMDAzNDUzNjAg
LyogTmV0d29ya0NhY2hlRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ2OTdDQ0QxQjI1
RUI4RjAwMUIwQTZDIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTQyRTA2MEYxQUE3NTIzNDAwQjExNjk5IC8qIE5ldHdvcmtDYWNoZUlPQ2hhbm5lbENv
Y29hLm1tIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298319</attachid>
            <date>2017-01-08 15:18:59 -0800</date>
            <delta_ts>2017-01-08 15:58:12 -0800</delta_ts>
            <desc>patch</desc>
            <filename>cache-coder-wtf-5.patch</filename>
            <type>text/plain</type>
            <size>109368</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE3LTAxLTA4ICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGNhY2hlIGNvZGVycyB0byBXVEYKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgaXQgcG9zc2li
bGUgdG8gdXNlIHJvYnVzdCBzZXJpYWxpemF0aW9uIG9mIFdURiB0eXBlcyBvbiB0aGUgbG93ZXIg
bGV2ZWxzIG9mIHRoZSBzdGFjay4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZTogQWRkZWQuCisgICAgICAgICogd3Rm
L3BlcnNpc3RlbmNlL0NvZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyLmguCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3Rl
bmNlL0NvZGVycy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6Q29kZXI8QXRvbWljU3RyaW5nPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+OjplbmNvZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVy
PFN0cmluZz46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6ZGVjb2RlU3RyaW5nVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6Q29kZXI8U3RyaW5nPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6
SFRUUEhlYWRlck1hcD46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD46OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuaC4KKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxzdGQ6Om9wdGlvbmFsPFQ+Pjo6ZW5jb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxzdGQ6Om9w
dGlvbmFsPFQ+Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2Uv
RGVjb2Rlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OkRlY29kZXI6OkRlY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkRlY29kZXI6On5EZWNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRlY29k
ZXI6OmRlY29kZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6RGVjb2Rlcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL0RlY29kZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5oLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkRlY29kZXI6Omxlbmd0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6RGVjb2Rlcjo6Y3VycmVudE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGVjb2Rlcjo6ZGVjb2RlRW51bSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGVjb2Rlcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVuY29kZXIuY3BwLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29k
ZXI6OkVuY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVu
Y29kZXI6On5FbmNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjpncm93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW5jb2Rlcjo6ZW5jb2RlTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbmNvZGVyOjplbmNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OmVu
Y29kZUNoZWNrc3VtKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvRW5jb2Rl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVFbmNvZGVyLmguCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW5jb2Rl
cjo6ZW5jb2RlRW51bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
RW5jb2Rlcjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjpvcGVyYXRvcjw8KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpFbmNvZGVyOjpidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkVuY29kZXI6OmJ1ZmZlclNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKTogRGVsZXRl
ZC4KKwogMjAxNy0wMS0wOCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+
CiAKICAgICAgICAgSW50cm9kdWNlIENQVShYODZfU1NFMikgaW5zdGVhZCBvZiB2YXJpb3VzIFNT
RTIgY2hlY2tzCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2ICszNTMsMTMgQEAKIAkJREU1QTA5RkMxQkEz
Njk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU1QTA5RkIxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1v
bkNyeXB0b1NQSS5oICovOyB9OwogCQlFMTU1NTZGNTE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTU1NTZGMzE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxp
dGllcy5jcHAgKi87IH07CiAJCUUxNTU1NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFw
aGljVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5o
ICovOyB9OworCQlFNDNBNDY5NTFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTAxRTIyOEI5MTAw
Mjc2QjA1IC8qIERlY29kZXIuaCAqLzsgfTsKKwkJRTQzQTQ2OTYxRTIyOEI5MTAwMjc2QjA1IC8q
IEVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0M0E0NjkxMUUyMjhCOTEwMDI3NkIwNSAvKiBFbmNvZGVyLmggKi87IH07CisJCUU0M0E0Njk3
MUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0M0E0NjkyMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVy
LmNwcCAqLzsgfTsKKwkJRTQzQTQ2OTgxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTMxRTIy
OEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICovOyB9OworCQlFNDNBNDY5OTFFMjI4QjkxMDAy
NzZCMDUgLyogQ29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0M0E0Njk0MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oICovOyB9OworCQlFNDNB
NDY5QjFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBNDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJz
LmggKi87IH07CisJCUU0M0E0NjlEMUUyMjhGRDUwMDI3NkIwNSAvKiBDb2RlcnMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OUMxRTIyOEZE
NTAwMjc2QjA1IC8qIENvZGVycy5jcHAgKi87IH07CiAJCUU0QTBBRDM5MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRBMEFEMzcxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07
CiAJCUU0QTBBRDNBMUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTBBRDM4MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuaCAqLzsgfTsKIAkJRTRBMEFEM0QxQTk2MjUzQzAwNTM2REY2IC8qIFdv
cmtRdWV1ZUNvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QTBBRDNDMUE5NjI1M0MwMDUzNkRGNiAvKiBXb3JrUXVldWVDb2NvYS5jcHAgKi87
IH07CkBAIC03MjUsNiArNzMyLDEzIEBACiAJCURFNUEwOUZCMUJBMzY5OTIwMDNENDQyNCAvKiBD
b21tb25DcnlwdG9TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9u
Q3J5cHRvU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTU1NkYzMThBMEND
MTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlw
dG9ncmFwaGljVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0M0E0
NjkwMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQzQTQ2
OTExRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRW5jb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDNBNDY5
MjFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTQzQTQ2OTMxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRW5jb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUU0M0E0Njk0MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNDNBNDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NDNBNDY5QzFFMjI4RkQ1MDAyNzZCMDUgLyogQ29kZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0QTBBRDM3MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTRBMEFEMzgxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrUXVldWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTRBMEFEM0MxQTk2MjUzQzAwNTM2REY2IC8qIFdvcmtRdWV1ZUNv
Y29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZUNv
Y29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2OSw2ICs4ODMsNyBAQAog
CQkJCUE4QTQ3MjgxMTUxQTgyNUEwMDQxMjNGRiAvKiBkdG9hICovLAogCQkJCTFGQTQ3Qzg3MTUy
NTAyREEwMDU2OEQxQiAvKiBpb3MgKi8sCiAJCQkJQThBNDcyQzQxNTFBODI1QTAwNDEyM0ZGIC8q
IG1hYyAqLywKKwkJCQlFNDNBNDY4NTFFMjI4QjU3MDAyNzZCMDUgLyogcGVyc2lzdGVuY2UgKi8s
CiAJCQkJQ0VGNDgyMEMxOURBMzQ3NjAwQ0MwNEI4IC8qIHNwaSAqLywKIAkJCQlBOEE0NzMxQjE1
MUE4MjVCMDA0MTIzRkYgLyogdGV4dCAqLywKIAkJCQlBOEE0NzMzOTE1MUE4MjVCMDA0MTIzRkYg
LyogdGhyZWFkcyAqLywKQEAgLTEyNzcsNiArMTI5MiwyMCBAQAogCQkJbmFtZSA9IGNmOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJRTQzQTQ2ODUxRTIyOEI1NzAwMjc2QjA1
IC8qIHBlcnNpc3RlbmNlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQlFNDNBNDY5NDFFMjI4QjkxMDAyNzZCMDUgLyogQ29kZXIuaCAqLywKKwkJCQlFNDNB
NDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggKi8sCisJCQkJRTQzQTQ2OUMxRTIyOEZE
NTAwMjc2QjA1IC8qIENvZGVycy5jcHAgKi8sCisJCQkJRTQzQTQ2OTIxRTIyOEI5MTAwMjc2QjA1
IC8qIERlY29kZXIuY3BwICovLAorCQkJCUU0M0E0NjkwMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNv
ZGVyLmggKi8sCisJCQkJRTQzQTQ2OTMxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICov
LAorCQkJCUU0M0E0NjkxMUUyMjhCOTEwMDI3NkIwNSAvKiBFbmNvZGVyLmggKi8sCisJCQkpOwor
CQkJcGF0aCA9IHBlcnNpc3RlbmNlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
IAkJRTRBMEFEM0IxQTk2MjUxOTAwNTM2REY2IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEzMjksNiArMTM1OCw3IEBACiAJCQkJQThBNDcz
OTExNTFBODI1QjAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFQjk1RTFGMDE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNBRDE1MUE4MjVCMDA0MTIzRkYgLyogY2FjaGVkLXBvd2Vycy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTQzQTQ2OUIxRTIyOEZCMjAwMjc2QjA1IC8qIENvZGVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRENFRTIxRkIxQ0VBNzUzODAwMEMyMzk2IC8qIENGQnVuZGxlU1BJ
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1RTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hhcmFj
dGVyTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzk0MTUxQTgyNUIwMDQxMjNGRiAv
KiBDaGVja2VkQXJpdGhtZXRpYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzYyLDYgKzEzOTIsNyBA
QAogCQkJCUE4QTQ3M0IyMTUxQTgyNUIwMDQxMjNGRiAvKiBkb3VibGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3M0E3MTUxQTgyNUIwMDQxMjNGRiAvKiBEb3VibHlMaW5rZWRMaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzNCQjE1MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRTQzQTQ2OTYxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRERFOTMyMUNEQzA1MkQwMEZEMzQ5MSAvKiBkeWxkU1BJLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQUVBODhFMjFENkJCQ0Y0MDBFNUFENjQgLyogRW51bVRyYWl0cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ3QzQzNEIxREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVk
LmggaW4gSGVhZGVycyAqLywKQEAgLTE1MDgsNiArMTUzOSw3IEBACiAJCQkJQThBNDc0NTQxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQ1NTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU3BlY2lmaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjZCMjkxMURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0M0E0Njk1MUUyMjhCOTEwMDI3NkIwNSAvKiBE
ZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTMwNzFDQTFDNDA0MjcyMDAzODQ4OTggLyog
VGlueUxSVUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNF
MTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ5RUYxNjMxNkJCRkUwRDAw
MEE0MzMxIC8qIFRyaVN0YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTE1MzUsNiArMTU2Nyw3IEBA
CiAJCQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUU0M0E0Njk5MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0xNjkzLDggKzE3MjYsMTAgQEAKIAkJCQlBOEE0NzQxNDE1MUE4MjVCMDA0
MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFBMTUx
QTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTQzQTQ2OTgxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDY5NDE5MzE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVy
Q0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQzQTQ2OUQxRTIyOEZENTAwMjc2QjA1IC8qIENv
ZGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5NDE5OTE2RUFCMDQxMDAyNEUxNDYgLyog
U2NoZWR1bGVQYWlyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2OTQxOTcxNkVBQUZGODAw
MjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGNjZCMjhF
MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTcwOSw2
ICsxNzQ0LDcgQEAKIAkJCQlBNUJBMTVGQzE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nSW1wbENG
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUY1MTgyNDM0ODAwMEE4MkU2OSAvKiBTdHJp
bmdJbXBsTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RjMxODI0MzNBOTAwQTgyRTY5
IC8qIFN0cmluZ01hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUU0M0E0Njk3MUUyMjhCOTEwMDI3
NkIwNSAvKiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkE3MTY2NkRGQTMw
MEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzQ0MzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5M0YxOTkzRTE5RDc5NThEMDBDMjM5MEIgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDYgKzI0MCwx
MCBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBkdG9hL2ZpeGVkLWR0b2EuY2MKICAgICBkdG9hL3N0
cnRvZC5jYwogCisgICAgcGVyc2lzdGVuY2UvQ29kZXJzLmNwcAorICAgIHBlcnNpc3RlbmNlL0Rl
Y29kZXIuY3BwCisgICAgcGVyc2lzdGVuY2UvRW5jb2Rlci5jcHAKKwogICAgIHRleHQvQXRvbWlj
U3RyaW5nLmNwcAogICAgIHRleHQvQXRvbWljU3RyaW5nSW1wbC5jcHAKICAgICB0ZXh0L0F0b21p
Y1N0cmluZ1RhYmxlLmNwcApAQCAtMjY4LDYgKzI3Miw3IEBAIHNldChXVEZfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke1dURl9ESVJ9IgogICAgICIke1dURl9ESVJ9L3d0ZiIKICAgICAiJHtX
VEZfRElSfS93dGYvZHRvYSIKKyAgICAiJHtXVEZfRElSfS93dGYvcGVyc2lzdGVuY2UiCiAgICAg
IiR7V1RGX0RJUn0vd3RmL3RleHQiCiAgICAgIiR7V1RGX0RJUn0vd3RmL3RleHQvaWN1IgogICAg
ICIke1dURl9ESVJ9L3d0Zi90aHJlYWRzIgpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvQ29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2Rl
ci5oCShyZXZpc2lvbiAyMTAzMzApCShmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyLmg6MjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvQ29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrQ2FjaGVDb2Rlcl9oCisjZGVmaW5lIE5ldHdvcmtD
YWNoZUNvZGVyX2gKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCitjbGFzcyBEZWNvZGVyOworY2xhc3Mg
RW5jb2RlcjsKKyAgICAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlciB7CisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFQmIHQpCisgICAgewor
ICAgICAgICB0LmVuY29kZShlbmNvZGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKKyAgICB7CisgICAgICAgIHJldHVybiBUOjpkZWNv
ZGUoZGVjb2RlciwgdCk7CisgICAgfQorfTsKKworfQorfQorCisjZW5kaWYKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvQ29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2Rlci5oCShyZXZpc2lvbiAyMTAzMzApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMyAr
MjMsMTAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIE5ldHdvcmtDYWNoZUNvZGVyX2gKLSNkZWZpbmUgTmV0d29ya0NhY2hlQ29kZXJfaAorI3By
YWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNl
IFBlcnNpc3RlbmNlIHsKIAogY2xhc3MgRGVjb2RlcjsKIGNsYXNzIEVuY29kZXI7CkBAIC00OCw2
ICs0NSwzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlciB7CiAKIH0KIH0KLQot
I2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmNwcAko
cmV2aXNpb24gMjEwMzMwKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVDb2RlcnMuY3BwOjIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNp
c3RlbmNlL0NvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVDb2RlcnMuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCit2b2lkIENvZGVy
PEF0b21pY1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBdG9taWNTdHJp
bmcmIGF0b21pY1N0cmluZykKK3sKKyAgICBlbmNvZGVyIDw8IGF0b21pY1N0cmluZy5zdHJpbmco
KTsKK30KKworYm9vbCBDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCit7CisgICAgU3RyaW5nIHN0cmluZzsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0cmluZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF0b21pY1N0cmluZyA9IHN0cmluZzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBD
b2RlcjxDU3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENTdHJpbmcmIHN0
cmluZykKK3sKKyAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51bGwgc3RyaW5nLgorICAgIGlmIChz
dHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1aW50MzJf
dCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgZW5jb2RlciA8PCBsZW5ndGg7CisgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oc3RyaW5nLmRhdGEoKSksIGxlbmd0aCk7Cit9CisKK2Jvb2wgQ29kZXI8Q1N0cmluZz46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDU3RyaW5nJiByZXN1bHQpCit7CisgICAgdWludDMy
X3QgbGVuZ3RoOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGVuZ3RoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKGxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgbnVsbCBzdHJpbmcuCisgICAg
ICAgIHJlc3VsdCA9IENTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgLy8gQmVmb3JlIGFsbG9jYXRpbmcgdGhlIHN0cmluZywgbWFrZSBzdXJlIHRoYXQgdGhlIGRl
Y29kZXIgYnVmZmVyIGlzIGJpZyBlbm91Z2guCisgICAgaWYgKCFkZWNvZGVyLmJ1ZmZlcklzTGFy
Z2VFbm91Z2hUb0NvbnRhaW48Y2hhcj4obGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY2hhciogYnVmZmVyOworICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5p
bml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBzdHJpbmc7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKKwordm9pZCBDb2RlcjxTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBudWxs
IHN0cmluZy4KKyAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGVuY29kZXIgPDwg
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIGJvb2wg
aXM4Qml0ID0gc3RyaW5nLmlzOEJpdCgpOworCisgICAgZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4
Qml0OworCisgICAgaWYgKGlzOEJpdCkKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnM4
KCkpLCBsZW5ndGggKiBzaXplb2YoTENoYXIpKTsKKyAgICBlbHNlCisgICAgICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0
cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCBkZWNvZGVT
dHJpbmdUZXh0KERlY29kZXImIGRlY29kZXIsIHVpbnQzMl90IGxlbmd0aCwgU3RyaW5nJiByZXN1
bHQpCit7CisgICAgLy8gQmVmb3JlIGFsbG9jYXRpbmcgdGhlIHN0cmluZywgbWFrZSBzdXJlIHRo
YXQgdGhlIGRlY29kZXIgYnVmZmVyIGlzIGJpZyBlbm91Z2guCisgICAgaWYgKCFkZWNvZGVyLmJ1
ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48Q2hhcmFjdGVyVHlwZT4obGVuZ3RoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyOworICAgIFN0cmlu
ZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJlc3VsdCA9IHN0cmluZzsKKyAgICByZXR1cm4g
dHJ1ZTsgICAgCit9CisKK2Jvb2wgQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIFN0cmluZyYgcmVzdWx0KQoreworICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChs
ZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CisgICAgICAg
IC8vIFRoaXMgaXMgdGhlIG51bGwgc3RyaW5nLgorICAgICAgICByZXN1bHQgPSBTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBpczhCaXQ7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShpczhCaXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoaXM4Qml0KQorICAgICAgICByZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxMQ2hhcj4oZGVjb2Rl
ciwgbGVuZ3RoLCByZXN1bHQpOworICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PFVDaGFyPihk
ZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7Cit9CisKKwordm9pZCBDb2RlcjxTSEExOjpEaWdlc3Q+
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCit7
CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9m
KGRpZ2VzdCkpOworfQorCitib29sIENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKK3sKKyAgICByZXR1cm4gZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCkpOworfQor
CisvLyBTdG9yZSBjb21tb24gSFRUUCBoZWFkZXJzIGFzIHN0cmluZ3MgaW5zdGVhZCBvZiB1c2lu
ZyB0aGVpciB2YWx1ZSBpbiB0aGUgSFRUUEhlYWRlck5hbWUgZW51bWVyYXRpb24KKy8vIHNvIHRo
YXQgdGhlIGhlYWRlcnMgc3RvcmVkIGluIHRoZSBjYWNoZSBzdGF5cyB2YWxpZCBldmVuIGFmdGVy
IEhUVFBIZWFkZXJOYW1lLmluIGdldHMgdXBkYXRlZC4KK3ZvaWQgQ29kZXI8V2ViQ29yZTo6SFRU
UEhlYWRlck1hcD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpIVFRQ
SGVhZGVyTWFwJiBoZWFkZXJzKQoreworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGhlYWRlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogaGVhZGVycykg
eworICAgICAgICBlbmNvZGVyIDw8IGtleVZhbHVlLmtleTsKKyAgICAgICAgZW5jb2RlciA8PCBr
ZXlWYWx1ZS52YWx1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29kZXI8V2ViQ29yZTo6SFRUUEhlYWRl
ck1hcD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiBo
ZWFkZXJzKQoreworICAgIHVpbnQ2NF90IGhlYWRlcnNTaXplOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaGVhZGVyc1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1aW50
NjRfdCBpID0gMDsgaSA8IGhlYWRlcnNTaXplOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIG5hbWU7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGhlYWRlcnMuYWRk
KG5hbWUsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KK30KKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5jcHAJKHJldmlzaW9uIDIx
MDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDE1ICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKLQotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hF
KQorI2luY2x1ZGUgIkNvZGVycy5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lz
dGVuY2UgewogCiB2b2lkIENvZGVyPEF0b21pY1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0b21pY1N0cmluZykKIHsKQEAgLTE0NCw3ICsxNDIs
NiBAQCBib29sIENvZGVyPFN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvCiAgICAgcmV0dXJu
IGRlY29kZVN0cmluZ1RleHQ8VUNoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKIH0KIAot
CiB2b2lkIENvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7CkBAIC0xNTUsMzUgKzE1Miw1IEBA
IGJvb2wgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXIKICAgICByZXR1cm4gZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCkp
OwogfQogCi0vLyBTdG9yZSBjb21tb24gSFRUUCBoZWFkZXJzIGFzIHN0cmluZ3MgaW5zdGVhZCBv
ZiB1c2luZyB0aGVpciB2YWx1ZSBpbiB0aGUgSFRUUEhlYWRlck5hbWUgZW51bWVyYXRpb24KLS8v
IHNvIHRoYXQgdGhlIGhlYWRlcnMgc3RvcmVkIGluIHRoZSBjYWNoZSBzdGF5cyB2YWxpZCBldmVu
IGFmdGVyIEhUVFBIZWFkZXJOYW1lLmluIGdldHMgdXBkYXRlZC4KLXZvaWQgQ29kZXI8V2ViQ29y
ZTo6SFRUUEhlYWRlck1hcD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3Jl
OjpIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQotewotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGhlYWRlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogaGVh
ZGVycykgewotICAgICAgICBlbmNvZGVyIDw8IGtleVZhbHVlLmtleTsKLSAgICAgICAgZW5jb2Rl
ciA8PCBrZXlWYWx1ZS52YWx1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29kZXI8V2ViQ29yZTo6SFRU
UEhlYWRlck1hcD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpIVFRQSGVhZGVy
TWFwJiBoZWFkZXJzKQotewotICAgIHVpbnQ2NF90IGhlYWRlcnNTaXplOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoaGVhZGVyc1NpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9y
ICh1aW50NjRfdCBpID0gMDsgaSA8IGhlYWRlcnNTaXplOyArK2kpIHsKLSAgICAgICAgU3RyaW5n
IG5hbWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGhlYWRl
cnMuYWRkKG5hbWUsIHZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0KIH0K
LQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuaAkocmV2aXNpb24g
MjEwMzMwKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVDb2RlcnMuaDoyMTAzMzApCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2Rl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1
ZGUgIk5ldHdvcmtDYWNoZURlY29kZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0hUVFBIZWFkZXJNYXAuaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQ29kZXI8c3RkOjpwYWlyPFQsIFU+PiB7Cisg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxU
LCBVPiYgcGFpcikKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgcGFpci5maXJzdCA8PCBwYWly
LnNlY29uZDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjpwYWlyPFQsIFU+JiBwYWlyKQorICAgIHsKKyAgICAgICAgVCBmaXJzdDsKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShmaXJzdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgVSBzZWNvbmQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2Vjb25k
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBwYWlyLmZpcnN0ID0gZmly
c3Q7CisgICAgICAgIHBhaXIuc2Vjb25kID0gc2Vjb25kOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXAsIHR5cGVuYW1lIFBlcmlvZD4gc3Ry
dWN0IENvZGVyPHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4+IHsKKyAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0
aW9uPFJlcCwgUGVyaW9kPiYgZHVyYXRpb24pCisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfaW50ZWdyYWw8UmVwPjo6dmFsdWUgJiYgc3RkOjppc19zaWduZWQ8UmVwPjo6dmFs
dWUgJiYgc2l6ZW9mKFJlcCkgPD0gc2l6ZW9mKGludDY0X3QpLCAiU2VyaWFsaXphdGlvbiBvZiB0
aGlzIFJlcCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBPbmx5IHNpZ25lZCBpbnRlZ2VyIHR5
cGUgd2hpY2ggY2FuIGJlIGZpdCBpbiBhbiBpbnQ2NF90IGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQu
Iik7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZHVyYXRpb24uY291
bnQoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIHJlc3VsdCkKKyAgICB7CisgICAg
ICAgIGludDY0X3QgY291bnQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY291bnQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQgPSBzdGQ6OmNocm9ubzo6
ZHVyYXRpb248UmVwLCBQZXJpb2Q+KHN0YXRpY19jYXN0PFJlcD4oY291bnQpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
ZGVyPHN0ZDo6b3B0aW9uYWw8VD4+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3Qgc3RkOjpvcHRpb25hbDxUPiYgb3B0aW9uYWwpCisgICAgeworICAgICAg
ICBpZiAoIW9wdGlvbmFsKSB7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBlbmNvZGVyIDw8IHRy
dWU7CisgICAgICAgIGVuY29kZXIgPDwgb3B0aW9uYWwudmFsdWUoKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6b3B0aW9uYWw8VD4m
IG9wdGlvbmFsKQorICAgIHsKKyAgICAgICAgYm9vbCBpc0VuZ2FnZWQ7CisgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaXNFbmdhZ2VkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghaXNFbmdhZ2VkKSB7CisgICAgICAgICAgICBvcHRpb25hbCA9
IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBUIHZhbHVlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG9wdGlvbmFs
ID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4gc3RydWN0IENvZGVy
PFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4+IHsKKyAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlw
ZSwgVmFsdWVUeXBlPiYgcGFpcikKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgcGFpci5rZXkg
PDwgcGFpci52YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKKyAg
ICB7CisgICAgICAgIEtleVR5cGUga2V5OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtl
eSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVmFsdWVUeXBlIHZhbHVl
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBwYWlyLmtleSA9IGtleTsKKyAgICAgICAgcGFpci52YWx1ZSA9
IHZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxib29s
IGZpeGVkU2l6ZUVsZW1lbnRzLCB0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHN0
cnVjdCBWZWN0b3JDb2RlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8ZmFsc2UsIFQsIGlubGluZUNhcGFjaXR5PiB7Cisg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdmVjdG9y
W2ldOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICB1aW50NjRf
dCBzaXplOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4gdG1wOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAg
VCBlbGVtZW50OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShlbGVtZW50KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRt
cC5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CisgICAgICAgIH0KKworICAgICAgICB0bXAuc2hy
aW5rVG9GaXQoKTsKKyAgICAgICAgdmVjdG9yLnN3YXAodG1wKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8dHJ1ZSwgVCwgaW5saW5lQ2FwYWNpdHk+IHsKKyAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkp
LCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IHNpemU7CisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgLy8gU2luY2Ugd2Uga25vdyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZWxlbWVudHMs
IHdlIGNhbiBhbGxvY2F0ZSB0aGUgdmVjdG9yIGluCisgICAgICAgIC8vIG9uZSBmZWxsIHN3b29w
LiBCZWZvcmUgYWxsb2NhdGluZyB3ZSBtdXN0IGhvd2V2ZXIgbWFrZSBzdXJlIHRoYXQgdGhlIGRl
Y29kZXIgYnVmZmVyCisgICAgICAgIC8vIGlzIGJpZyBlbm91Z2guCisgICAgICAgIGlmICghZGVj
b2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPFQ+KHNpemUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4gdGVtcDsK
KyAgICAgICAgdGVtcC5yZXNpemUoc2l6ZSk7CisKKyAgICAgICAgZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGVtcC5kYXRhKCkpLCBzaXpl
ICogc2l6ZW9mKFQpKTsKKworICAgICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5PiBzdHJ1Y3QgQ29kZXI8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gOiBWZWN0
b3JDb2RlcjxzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlLCBULCBpbmxpbmVDYXBhY2l0eT4g
eyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHNBcmc+IHN0cnVjdCBDb2RlcjxIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBL
ZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4+IHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPiBI
YXNoTWFwVHlwZTsKKworICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGhhc2hNYXAuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh0eXBlbmFt
ZSBIYXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoYXNoTWFwLmJlZ2luKCksIGVuZCA9
IGhhc2hNYXAuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIGVuY29kZXIgPDwg
Kml0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBI
YXNoTWFwVHlwZSYgaGFzaE1hcCkKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IGhhc2hNYXBTaXpl
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc2hNYXBTaXplKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBIYXNoTWFwVHlwZSB0ZW1wSGFzaE1hcDsKKyAgICAg
ICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hNYXBTaXplOyArK2kpIHsKKyAgICAgICAg
ICAgIEtleUFyZyBrZXk7CisgICAgICAgICAgICBNYXBwZWRBcmcgdmFsdWU7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoIXRlbXBIYXNoTWFwLmFkZChrZXks
IHZhbHVlKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGhhc2ggbWFwIGFs
cmVhZHkgaGFzIHRoZSBzcGVjaWZpZWQga2V5LCBiYWlsLgorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGhhc2hNYXAuc3dh
cCh0ZW1wSGFzaE1hcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnPiBzdHJ1Y3QgQ29kZXI8SGFzaFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4+
IHsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IEhh
c2hTZXRUeXBlOworCisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IEhhc2hTZXRUeXBlJiBoYXNoU2V0KQorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oaGFzaFNldC5zaXplKCkpOworICAgICAgICBmb3IgKHR5cGVuYW1l
IEhhc2hTZXRUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IGhhc2hTZXQuYmVnaW4oKSwgZW5kID0g
aGFzaFNldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZW5jb2RlciA8PCAq
aXQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEhh
c2hTZXRUeXBlJiBoYXNoU2V0KQorICAgIHsKKyAgICAgICAgdWludDY0X3QgaGFzaFNldFNpemU7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzaFNldFNpemUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIEhhc2hTZXRUeXBlIHRlbXBIYXNoU2V0OworICAgICAg
ICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgaGFzaFNldFNpemU7ICsraSkgeworICAgICAgICAg
ICAgS2V5QXJnIGtleTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoa2V5KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICghdGVtcEhhc2hT
ZXQuYWRkKGtleSkuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBoYXNoIG1h
cCBhbHJlYWR5IGhhcyB0aGUgc3BlY2lmaWVkIGtleSwgYmFpbC4KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBoYXNoU2V0
LnN3YXAodGVtcEhhc2hTZXQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxBdG9taWNTdHJpbmc+IHsKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYsIGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiwgQXRvbWljU3RyaW5nJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b2RlcjxDU3RyaW5nPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBD
U3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBDU3RyaW5nJik7Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxTdHJpbmc+IHsKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYsIGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShE
ZWNvZGVyJiwgU3RyaW5nJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNv
bnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShE
ZWNvZGVyJiwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb2RlcjxTSEExOjpEaWdlc3Q+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIGNvbnN0IFNIQTE6OkRpZ2VzdCYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVy
JiwgU0hBMTo6RGlnZXN0Jik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3Jl
OjpIVFRQSGVhZGVyTWFwPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25z
dCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7Cit9OworCit9Cit9CisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5oCShyZXZpc2lvbiAyMTAzMzApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMjEg
KzI1LDE3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0K
LSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hl
RW5jb2Rlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9IVFRQSGVhZGVyTWFwLmg+CiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9w
ZXJzaXN0ZW5jZS9FbmNvZGVyLmg+CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5l
dHdvcmtDYWNoZSB7CituYW1lc3BhY2UgV1RGIHsKK25hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCBDb2RlcjxzdGQ6OnBhaXI8
VCwgVT4+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
c3RkOjpwYWlyPFQsIFU+JiBwYWlyKQpAQCAtMjY2LDM1ICsyNjIsMjQgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29k
ZXI8QXRvbWljU3RyaW5nPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25z
dCBBdG9taWNTdHJpbmcmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIEF0b21p
Y1N0cmluZyYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYsIGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIEF0b21pY1N0cmluZyYpOwogfTsKIAogdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29kZXI8Q1N0cmluZz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiwgY29uc3QgQ1N0cmluZyYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQ1N0
cmluZyYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIGNvbnN0IENTdHJpbmcmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
ZGVjb2RlKERlY29kZXImLCBDU3RyaW5nJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2Rl
cjxTdHJpbmc+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN0cmlu
ZyYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU3RyaW5nJik7Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
byYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiwgY29uc3QgU3RyaW5nJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGRlY29kZShEZWNvZGVyJiwgU3RyaW5nJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2Rl
cjxTSEExOjpEaWdlc3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0
IFNIQTE6OkRpZ2VzdCYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU0hBMTo6
RGlnZXN0Jik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3JlOjpIVFRQSGVh
ZGVyTWFwPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3Jl
OjpIVFRQSGVhZGVyTWFwJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJD
b3JlOjpIVFRQSGVhZGVyTWFwJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiwgY29uc3QgU0hBMTo6RGlnZXN0Jik7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU0hBMTo6RGlnZXN0Jik7CiB9Owog
CiB9CiB9Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0RlY29kZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuY3Bw
CShyZXZpc2lvbiAyMTAzMzApCShmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwOjIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL0RlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZURlY29kZXIuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5j
bHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVz
cGFjZSBOZXR3b3JrQ2FjaGUgeworCitEZWNvZGVyOjpEZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1
ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCisgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBt
X2J1ZmZlclBvc2l0aW9uKGJ1ZmZlcikKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlciArIGJ1ZmZl
clNpemUpCit7Cit9CisKK0RlY29kZXI6On5EZWNvZGVyKCkKK3sKK30KKworYm9vbCBEZWNvZGVy
OjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemVfdCBzaXplKSBjb25zdAoreworICAg
IHJldHVybiBzaXplIDw9IHN0YXRpY19jYXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZl
clBvc2l0aW9uKTsKK30KKworYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKCFidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtZW1jcHkoZGF0
YSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZSk7CisgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXpl
OworCisgICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Citib29s
IERlY29kZXI6OmRlY29kZU51bWJlcihUeXBlJiB2YWx1ZSkKK3sKKyAgICBpZiAoIWJ1ZmZlcklz
TGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZW9mKHZhbHVlKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG1lbWNweSgmdmFsdWUsIG1fYnVmZmVyUG9zaXRpb24sIHNpemVvZih2YWx1ZSkp
OworICAgIG1fYnVmZmVyUG9zaXRpb24gKz0gc2l6ZW9mKFR5cGUpOworCisgICAgRW5jb2Rlcjo6
dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKGJvb2wmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4g
ZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ4X3Qm
IHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wg
RGVjb2Rlcjo6ZGVjb2RlKHVpbnQxNl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZU51
bWJlcihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OmRlY29kZSh1aW50MzJfdCYgcmVzdWx0
KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKK30KKworYm9vbCBEZWNvZGVy
OjpkZWNvZGUodWludDY0X3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJl
c3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKGludDMyX3QmIHJlc3VsdCkKK3sKKyAg
ICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2Rl
KGludDY0X3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9
CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKGZsb2F0JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRl
Y29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OmRlY29kZShkb3VibGUmIHJl
c3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVj
b2Rlcjo6dmVyaWZ5Q2hlY2tzdW0oKQoreworICAgIFNIQTE6OkRpZ2VzdCBjb21wdXRlZEhhc2g7
CisgICAgbV9zaGExLmNvbXB1dGVIYXNoKGNvbXB1dGVkSGFzaCk7CisKKyAgICBTSEExOjpEaWdl
c3Qgc2F2ZWRIYXNoOworICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHNhdmVkSGFzaC5k
YXRhKCksIHNpemVvZihzYXZlZEhhc2gpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGNvbXB1dGVkSGFzaCA9PSBzYXZlZEhhc2g7Cit9CisKK30KK30KKworI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmNwcAkocmV2aXNpb24gMjEwMzMw
KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDE0ICsyNCwxMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgiCisjaW5jbHVkZSAiRGVjb2Rlci5oIgogCi0jaWYg
RU5BQkxFKE5FVFdPUktfQ0FDSEUpCisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0VuY29kZXIu
aD4KIAotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNl
IFBlcnNpc3RlbmNlIHsKIAogRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIs
IHNpemVfdCBidWZmZXJTaXplKQogICAgIDogbV9idWZmZXIoYnVmZmVyKQpAQCAtMTMzLDUgKzEz
MSwzIEBAIGJvb2wgRGVjb2Rlcjo6dmVyaWZ5Q2hlY2tzdW0oKQogCiB9CiB9Ci0KLSNlbmRpZgpJ
bmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaAkocmV2aXNpb24gMjEwMzMwKQko
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNv
ZGVyLmg6MjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3
b3JrQ2FjaGVEZWNvZGVyX2gKKyNkZWZpbmUgTmV0d29ya0NhY2hlRGVjb2Rlcl9oCisKKyNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVyLmgiCisj
aW5jbHVkZSA8d3RmL1NIQTEuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0
d29ya0NhY2hlIHsKKworY2xhc3MgRGVjb2RlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgRGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBi
dWZmZXJTaXplKTsKKyAgICB2aXJ0dWFsIH5EZWNvZGVyKCk7CisKKyAgICBzaXplX3QgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQorICAgIHNpemVfdCBj
dXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3NpdGlvbiAtIG1fYnVmZmVy
OyB9CisKKyAgICBib29sIHZlcmlmeUNoZWNrc3VtKCk7CisKKyAgICBib29sIGRlY29kZUZpeGVk
TGVuZ3RoRGF0YSh1aW50OF90Kiwgc2l6ZV90KTsKKworICAgIGJvb2wgZGVjb2RlKGJvb2wmKTsK
KyAgICBib29sIGRlY29kZSh1aW50OF90Jik7CisgICAgYm9vbCBkZWNvZGUodWludDE2X3QmKTsK
KyAgICBib29sIGRlY29kZSh1aW50MzJfdCYpOworICAgIGJvb2wgZGVjb2RlKHVpbnQ2NF90Jik7
CisgICAgYm9vbCBkZWNvZGUoaW50MzJfdCYpOworICAgIGJvb2wgZGVjb2RlKGludDY0X3QmKTsK
KyAgICBib29sIGRlY29kZShmbG9hdCYpOworICAgIGJvb2wgZGVjb2RlKGRvdWJsZSYpOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBkZWNvZGVFbnVtKFQmIHJlc3VsdCkKKyAgICB7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpIDw9IDgsICJFbnVtIHR5cGUgVCBtdXN0
IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBiaXRzISIpOworCisgICAgICAgIHVpbnQ2NF90IHZhbHVl
OworICAgICAgICBpZiAoIWRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxUPih2YWx1ZSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wg
ZGVjb2RlKFQmIHQpCisgICAgeworICAgICAgICByZXR1cm4gQ29kZXI8VD46OmRlY29kZSgqdGhp
cywgdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGJ1ZmZl
cklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IG51bUVsZW1lbnRzKSBjb25zdAorICAgIHsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlLCAiVHlw
ZSBUIG11c3QgaGF2ZSBhIGZpeGVkLCBrbm93biBlbmNvZGVkIHNpemUhIik7CisKKyAgICAgICAg
aWYgKG51bUVsZW1lbnRzID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAvIHNp
emVvZihUKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gYnVm
ZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CisgICAg
fQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENEZWNvZGVyID0gZmFsc2U7CisKK3ByaXZh
dGU6CisgICAgYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemVfdCkgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gYm9vbCBkZWNvZGVOdW1iZXIoVHlwZSYpOwor
CisgICAgY29uc3QgdWludDhfdCogbV9idWZmZXI7CisgICAgY29uc3QgdWludDhfdCogbV9idWZm
ZXJQb3NpdGlvbjsKKyAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlckVuZDsKKworICAgIFNIQTEg
bV9zaGExOworfTsKKworfSAKK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9w
ZXJzaXN0ZW5jZS9EZWNvZGVyLmgJKHJldmlzaW9uIDIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMzkgKzIzLDM2IEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOZXR3
b3JrQ2FjaGVEZWNvZGVyX2gKLSNkZWZpbmUgTmV0d29ya0NhY2hlRGVjb2Rlcl9oCisjcHJhZ21h
IG9uY2UKIAotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotCi0jaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlQ29kZXIuaCIKICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0
ZW5jZS9Db2Rlci5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgeworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiBjbGFzcyBE
ZWNvZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBEZWNv
ZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOwotICAgIHZpcnR1
YWwgfkRlY29kZXIoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2Rlcihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
fkRlY29kZXIoKTsKIAogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZl
ckVuZCAtIG1fYnVmZmVyOyB9CiAgICAgc2l6ZV90IGN1cnJlbnRPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX2J1ZmZlclBvc2l0aW9uIC0gbV9idWZmZXI7IH0KIAotICAgIGJvb2wgdmVyaWZ5Q2hl
Y2tzdW0oKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB2ZXJpZnlDaGVja3N1bSgpOwog
Ci0gICAgYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCosIHNpemVfdCk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBz
aXplX3QpOwogCi0gICAgYm9vbCBkZWNvZGUoYm9vbCYpOwotICAgIGJvb2wgZGVjb2RlKHVpbnQ4
X3QmKTsKLSAgICBib29sIGRlY29kZSh1aW50MTZfdCYpOwotICAgIGJvb2wgZGVjb2RlKHVpbnQz
Ml90Jik7Ci0gICAgYm9vbCBkZWNvZGUodWludDY0X3QmKTsKLSAgICBib29sIGRlY29kZShpbnQz
Ml90Jik7Ci0gICAgYm9vbCBkZWNvZGUoaW50NjRfdCYpOwotICAgIGJvb2wgZGVjb2RlKGZsb2F0
Jik7Ci0gICAgYm9vbCBkZWNvZGUoZG91YmxlJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgZGVjb2RlKGJvb2wmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWlu
dDhfdCYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50MTZfdCYpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50MzJfdCYpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50NjRfdCYpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGRlY29kZShpbnQzMl90Jik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
ZGVjb2RlKGludDY0X3QmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUoZmxv
YXQmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUoZG91YmxlJik7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZUVudW0oVCYgcmVzdWx0KQogICAgIHsK
QEAgLTg4LDcgKzg1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBib29sIGlzSVBDRGVj
b2RlciA9IGZhbHNlOwogCiBwcml2YXRlOgotICAgIGJvb2wgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihzaXplX3QpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGJ1ZmZl
cklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90KSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUeXBlPiBib29sIGRlY29kZU51bWJlcihUeXBlJik7CiAKICAgICBjb25zdCB1aW50OF90
KiBtX2J1ZmZlcjsKQEAgLTEwMSw1ICs5OCwzIEBAIHByaXZhdGU6CiB9IAogfQogCi0jZW5kaWYK
LSNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5jcHAJKHJldmlz
aW9uIDIxMDMzMCkJKGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRW5jb2Rlci5jcHA6MjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5j
b2Rlci5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKK25hbWVzcGFjZSBXZWJLaXQg
eworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CisKK0VuY29kZXI6OkVuY29kZXIoKQoreworfQor
CitFbmNvZGVyOjp+RW5jb2RlcigpCit7Cit9CisKK3VpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6
ZV90IHNpemUpCit7CisgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwor
ICAgIG1fYnVmZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CisgICAgcmV0dXJuIG1f
YnVmZmVyLmRhdGEoKSArIG5ld1Bvc2l0aW9uOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNo
ZWNrc3VtRm9yRGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6
ZSkKK3sKKyAgICBhdXRvIHR5cGVTYWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOworICAgIHNo
YTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9m
KHR5cGVTYWx0KSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKK30KKwordm9pZCBF
bmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUpCit7CisgICAgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7
CisKKyAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemUpOworICAgIG1lbWNweShidWZmZXIs
IGRhdGEsIHNpemUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBFbmNvZGVy
OjplbmNvZGVOdW1iZXIoVHlwZSB2YWx1ZSkKK3sKKyAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1
bUZvck51bWJlcihtX3NoYTEsIHZhbHVlKTsKKworICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3co
c2l6ZW9mKFR5cGUpKTsKKyAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUsIHNpemVvZihUeXBlKSk7
Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGJvb2wgdmFsdWUpCit7CisgICAgZW5jb2RlTnVt
YmVyKHZhbHVlKTsKK30KKwordm9pZCBFbmNvZGVyOjplbmNvZGUodWludDhfdCB2YWx1ZSkKK3sK
KyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lkIEVuY29kZXI6OmVuY29kZSh1aW50
MTZfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lkIEVuY29k
ZXI6OmVuY29kZSh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwor
fQorCit2b2lkIEVuY29kZXI6OmVuY29kZSh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVO
dW1iZXIodmFsdWUpOworfQorCit2b2lkIEVuY29kZXI6OmVuY29kZShpbnQzMl90IHZhbHVlKQor
eworICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGlu
dDY0X3QgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30KKwordm9pZCBFbmNv
ZGVyOjplbmNvZGUoZmxvYXQgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30K
Kwordm9pZCBFbmNvZGVyOjplbmNvZGUoZG91YmxlIHZhbHVlKQoreworICAgIGVuY29kZU51bWJl
cih2YWx1ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQoreworICAgIFNI
QTE6OkRpZ2VzdCBoYXNoOworICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKKyAgICBlbmNv
ZGVGaXhlZExlbmd0aERhdGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKK30KKworfQorfQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuY3BwCShyZXZp
c2lvbiAyMTAzMzApCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsMTIgKzI0LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKKyNpbmNsdWRlICJFbmNvZGVy
LmgiCiAKLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyNpbmNsdWRlICJTSEExLmgiCiAKLW5h
bWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CituYW1lc3BhY2UgV1RG
IHsKK25hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKIEVuY29kZXI6OkVuY29kZXIoKQogewpAQCAt
MTI0LDUgKzEyNCwzIEBAIHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogCiB9CiB9Ci0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaAkocmV2aXNpb24g
MjEwMzMwKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVFbmNvZGVyLmg6MjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5j
b2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBOZXR3b3JrQ2FjaGVFbmNvZGVyX2gKKyNkZWZpbmUgTmV0d29ya0NhY2hlRW5jb2Rlcl9o
CisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNv
ZGVyLmgiCisjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CisKK2NsYXNzIEVu
Y29kZXI7CitjbGFzcyBEYXRhUmVmZXJlbmNlOworCitjbGFzcyBFbmNvZGVyIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBFbmNvZGVyKCk7CisgICAgdmlydHVh
bCB+RW5jb2RlcigpOworCisgICAgdm9pZCBlbmNvZGVDaGVja3N1bSgpOworICAgIHZvaWQgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVFbnVtKFQgdCkKKyAgICB7CisgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihUKSA8PSBzaXplb2YodWludDY0X3QpLCBlbnVtX3R5cGVfbXVzdF9u
b3RfYmVfbGFyZ2VyX3RoYW5fNjRfYml0cyk7CisKKyAgICAgICAgZW5jb2RlKHN0YXRpY19jYXN0
PHVpbnQ2NF90Pih0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBl
bmNvZGUoY29uc3QgVCYgdCkKKyAgICB7CisgICAgICAgIENvZGVyPFQ+OjplbmNvZGUoKnRoaXMs
IHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEVuY29kZXImIG9wZXJhdG9y
PDwoY29uc3QgVCYgdCkKKyAgICB7CisgICAgICAgIGVuY29kZSh0KTsKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKworICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQorICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9CisKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1
bUZvckRhdGEoU0hBMSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUeXBlPiBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwg
VHlwZSk7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0lQQ0VuY29kZXIgPSBmYWxzZTsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIGVuY29kZShib29sKTsKKyAgICB2b2lkIGVuY29kZSh1aW50OF90
KTsKKyAgICB2b2lkIGVuY29kZSh1aW50MTZfdCk7CisgICAgdm9pZCBlbmNvZGUodWludDMyX3Qp
OworICAgIHZvaWQgZW5jb2RlKHVpbnQ2NF90KTsKKyAgICB2b2lkIGVuY29kZShpbnQzMl90KTsK
KyAgICB2b2lkIGVuY29kZShpbnQ2NF90KTsKKyAgICB2b2lkIGVuY29kZShmbG9hdCk7CisgICAg
dm9pZCBlbmNvZGUoZG91YmxlKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IHZvaWQg
ZW5jb2RlTnVtYmVyKFR5cGUpOworCisgICAgdWludDhfdCogZ3JvdyhzaXplX3QpOworCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+IHN0cnVjdCBTYWx0OworCisgICAgVmVjdG9yPHVpbnQ4
X3QsIDQwOTY+IG1fYnVmZmVyOworICAgIFNIQTEgbV9zaGExOworfTsKKwordGVtcGxhdGUgPD4g
c3RydWN0IEVuY29kZXI6OlNhbHQ8Ym9vbD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUg
PSAzOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8dWludDhfdD4geyBzdGF0
aWMgY29uc3QgIHVuc2lnbmVkIHZhbHVlID0gNTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNv
ZGVyOjpTYWx0PHVpbnQxNl90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDc7IH07
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50MzJfdD4geyBzdGF0aWMgY29u
c3QgdW5zaWduZWQgdmFsdWUgPSAxMTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpT
YWx0PHVpbnQ2NF90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDEzOyB9OwordGVt
cGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8aW50MzJfdD4geyBzdGF0aWMgY29uc3QgdW5z
aWduZWQgdmFsdWUgPSAxNzsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGlu
dDY0X3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMTk7IH07Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDxmbG9hdD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFs
dWUgPSAyMzsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGRvdWJsZT4geyBz
dGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAyOTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBF
bmNvZGVyOjpTYWx0PHVpbnQ4X3QqPiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDEw
MTsgfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEVuY29kZXI6OnVwZGF0ZUNo
ZWNrc3VtRm9yTnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCit7CisgICAgYXV0byB0eXBl
U2FsdCA9IFNhbHQ8VHlwZT46OnZhbHVlOworICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7CisgICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUp
KTsKK30KKworfQorfQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3Rl
bmNlL0VuY29kZXIuaAkocmV2aXNpb24gMjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lz
dGVuY2UvRW5jb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNyArMjMsMTQgQEAKICAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE5ldHdvcmtDYWNo
ZUVuY29kZXJfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVFbmNvZGVyX2gKKyNwcmFnbWEgb25jZQog
Ci0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0KLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2Rl
ci5oIgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9Db2Rlci5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lz
dGVuY2UgewogCiBjbGFzcyBFbmNvZGVyOwogY2xhc3MgRGF0YVJlZmVyZW5jZTsKQEAgLTQxLDEx
ICszOCwxMSBAQCBjbGFzcyBEYXRhUmVmZXJlbmNlOwogY2xhc3MgRW5jb2RlciB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRW5jb2RlcigpOwotICAgIHZpcnR1
YWwgfkVuY29kZXIoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlcigpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCi0gICAgdm9pZCBlbmNvZGVDaGVja3N1bSgp
OwotICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUNoZWNrc3VtKCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVFbnVtKFQg
dCkKICAgICB7CkBAIC02OCwyMSArNjUsMjEgQEAgcHVibGljOgogICAgIGNvbnN0IHVpbnQ4X3Qq
IGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQogICAgIHNpemVfdCBi
dWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9CiAKLSAgICBzdGF0
aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZv
ckRhdGEoU0hBMSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUeXBlPiBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlw
ZSk7CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0lQQ0VuY29kZXIgPSBmYWxzZTsKIAogcHJp
dmF0ZToKLSAgICB2b2lkIGVuY29kZShib29sKTsKLSAgICB2b2lkIGVuY29kZSh1aW50OF90KTsK
LSAgICB2b2lkIGVuY29kZSh1aW50MTZfdCk7Ci0gICAgdm9pZCBlbmNvZGUodWludDMyX3QpOwot
ICAgIHZvaWQgZW5jb2RlKHVpbnQ2NF90KTsKLSAgICB2b2lkIGVuY29kZShpbnQzMl90KTsKLSAg
ICB2b2lkIGVuY29kZShpbnQ2NF90KTsKLSAgICB2b2lkIGVuY29kZShmbG9hdCk7Ci0gICAgdm9p
ZCBlbmNvZGUoZG91YmxlKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoYm9v
bCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKHVpbnQ4X3QpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZSh1aW50MTZfdCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZW5jb2RlKHVpbnQzMl90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGUodWludDY0X3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShp
bnQzMl90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoaW50NjRfdCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGZsb2F0KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBlbmNvZGUoZG91YmxlKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5
cGU+IHZvaWQgZW5jb2RlTnVtYmVyKFR5cGUpOwogCkBAIC0xMTUsNiArMTEyLDMgQEAgdm9pZCBF
bmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSAogCiB9CiB9Ci0KLSNlbmRpZgotI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2MiBAQAorMjAxNy0wMS0wOCAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBjYWNoZSBjb2Rl
cnMgdG8gV1RGCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjY4MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxBdG9taWNTdHJpbmc+OjplbmNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPEF0b21pY1N0cmluZz46OmRl
Y29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8Q1N0
cmluZz46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
Q29kZXI8Q1N0cmluZz46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpkZWNvZGVTdHJpbmdUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxTdHJpbmc+OjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8U0hBMTo6RGln
ZXN0Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpD
b2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVDb2RlcnMuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI8c3RkOjpvcHRpb25hbDxUPj46OmVuY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8c3RkOjpvcHRpb25hbDxUPj46OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXJzQ29jb2EuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZUNG
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlQ0ZE
YXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjplbmNvZGVTZWNU
cnVzdFJlZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2Rl
U2VjVHJ1c3RSZWYpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVu
Y29kZUNlcnRpZmljYXRlQ2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OmRlY29kZUNlcnRpZmljYXRlQ2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmg6IFJlbW92ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVu
dHJ5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6ZW5jb2RlQXNT
dG9yYWdlUmVjb3JkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6ZGVj
b2RlU3RvcmFnZVJlY29yZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlS2V5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpLZXk6OmVuY29k
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5OjpkZWNvZGUpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OmRlY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjplbmNvZGVSZWNvcmRNZXRhRGF0YSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlSW5mbzo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdWJyZXNvdXJjZUluZm86OmRlY29kZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3Rv
cmFnZVJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2Vz
RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6ZW5j
b2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVu
dEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMTctMDEtMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbW92ZSBQYXNzUmVmUHRyIHVzZSBmcm9tICJpbnNwZWN0b3IiLCAicGxhdGZv
cm0vc3FsIiwgYW5kICJwbGF0Zm9ybS90ZXh0IgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2Rlci5oCShyZXZpc2lv
biAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVDb2Rlci5oCShub25leGlzdGVudCkKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgTmV0d29ya0NhY2hlQ29kZXJfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVD
b2Rlcl9oCi0KLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKLQotY2xhc3MgRGVjb2RlcjsKLWNsYXNzIEVuY29k
ZXI7Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29kZXIgewotICAgIHN0YXRp
YyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUJiB0KQotICAgIHsKLSAgICAg
ICAgdC5lbmNvZGUoZW5jb2Rlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIFQmIHQpCi0gICAgewotICAgICAgICByZXR1cm4gVDo6ZGVjb2RlKGRl
Y29kZXIsIHQpOwotICAgIH0KLX07Ci0KLX0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlQ29kZXJzLmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsMTMyICsyOCw4IEBACiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKIAotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKLQotdm9pZCBD
b2RlcjxBdG9taWNTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQXRvbWlj
U3RyaW5nJiBhdG9taWNTdHJpbmcpCi17Ci0gICAgZW5jb2RlciA8PCBhdG9taWNTdHJpbmcuc3Ry
aW5nKCk7Ci19Ci0KLWJvb2wgQ29kZXI8QXRvbWljU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIsIEF0b21pY1N0cmluZyYgYXRvbWljU3RyaW5nKQotewotICAgIFN0cmluZyBzdHJpbmc7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdG9taWNTdHJpbmcgPSBzdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgQ29kZXI8Q1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDU3RyaW5n
JiBzdHJpbmcpCi17Ci0gICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBudWxsIHN0cmluZy4KLSAgICBp
ZiAoc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdWlu
dDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIGVuY29kZXIgPDwgbGVuZ3RoOwot
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHN0cmluZy5kYXRhKCkpLCBsZW5ndGgpOwotfQotCi1ib29sIENvZGVyPENTdHJp
bmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQ1N0cmluZyYgcmVzdWx0KQotewotICAgIHVp
bnQzMl90IGxlbmd0aDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxlbmd0aCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIG51bGwgc3RyaW5nLgot
ICAgICAgICByZXN1bHQgPSBDU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIC8vIEJlZm9yZSBhbGxvY2F0aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRo
ZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcgZW5vdWdoLgotICAgIGlmICghZGVjb2Rlci5idWZmZXJJ
c0xhcmdlRW5vdWdoVG9Db250YWluPGNoYXI+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGNoYXIqIGJ1ZmZlcjsKLSAgICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5l
d1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVG
aXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3Ro
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzdWx0ID0gc3RyaW5nOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi0KLXZvaWQgQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIC8vIFNwZWNpYWwgY2FzZSB0aGUg
bnVsbCBzdHJpbmcuCi0gICAgaWYgKHN0cmluZy5pc051bGwoKSkgewotICAgICAgICBlbmNvZGVy
IDw8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBi
b29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQoKTsKLQotICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8
IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQpCi0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0
ZXJzOCgpKSwgbGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7Ci0gICAgZWxzZQotICAgICAgICBlbmNv
ZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihzdHJpbmcuY2hhcmFjdGVyczE2KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgZGVj
b2RlU3RyaW5nVGV4dChEZWNvZGVyJiBkZWNvZGVyLCB1aW50MzJfdCBsZW5ndGgsIFN0cmluZyYg
cmVzdWx0KQotewotICAgIC8vIEJlZm9yZSBhbGxvY2F0aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3Vy
ZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcgZW5vdWdoLgotICAgIGlmICghZGVjb2Rl
ci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPENoYXJhY3RlclR5cGU+KGxlbmd0aCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKLSAgICBT
dHJpbmcgc3RyaW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVy
KTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXN1bHQgPSBzdHJpbmc7Ci0gICAgcmV0
dXJuIHRydWU7ICAgIAotfQotCi1ib29sIENvZGVyPFN0cmluZz46OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCBTdHJpbmcmIHJlc3VsdCkKLXsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShsZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAobGVuZ3RoID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgewotICAg
ICAgICAvLyBUaGlzIGlzIHRoZSBudWxsIHN0cmluZy4KLSAgICAgICAgcmVzdWx0ID0gU3RyaW5n
KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgaXM4Qml0OwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaXM4Qml0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKGlzOEJpdCkKLSAgICAgICAgcmV0dXJuIGRlY29kZVN0cmluZ1RleHQ8TENoYXI+KGRl
Y29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKLSAgICByZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxVQ2hh
cj4oZGVjb2RlciwgbGVuZ3RoLCByZXN1bHQpOwotfQotCi0KLXZvaWQgQ29kZXI8U0hBMTo6RGln
ZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0
KQotewotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNp
emVvZihkaWdlc3QpKTsKLX0KLQotYm9vbCBDb2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCi17Ci0gICAgcmV0dXJuIGRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsK
LX0KK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogLy8gU3RvcmUg
Y29tbW9uIEhUVFAgaGVhZGVycyBhcyBzdHJpbmdzIGluc3RlYWQgb2YgdXNpbmcgdGhlaXIgdmFs
dWUgaW4gdGhlIEhUVFBIZWFkZXJOYW1lIGVudW1lcmF0aW9uCiAvLyBzbyB0aGF0IHRoZSBoZWFk
ZXJzIHN0b3JlZCBpbiB0aGUgY2FjaGUgc3RheXMgdmFsaWQgZXZlbiBhZnRlciBIVFRQSGVhZGVy
TmFtZS5pbiBnZXRzIHVwZGF0ZWQuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuaAkocmV2aXNpb24gMjEw
NDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYgQEAKIAogI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQogCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRGVjb2Rlci5oIgotI2luY2x1
ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRl
SW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck1hcC5oPgogI2luY2x1ZGUgPHV0
aWxpdHk+CkBAIC0zNywyNTkgKzM1LDE4IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvU0hBMS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0RlY29k
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5oPgogCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQ29kZXI8c3RkOjpwYWlyPFQsIFU+PiB7Ci0gICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxULCBVPiYgcGFp
cikKLSAgICB7Ci0gICAgICAgIGVuY29kZXIgPDwgcGFpci5maXJzdCA8PCBwYWlyLnNlY29uZDsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwgc3RkOjpw
YWlyPFQsIFU+JiBwYWlyKQotICAgIHsKLSAgICAgICAgVCBmaXJzdDsKLSAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShmaXJzdCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgVSBzZWNvbmQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2Vjb25kKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBwYWlyLmZpcnN0ID0gZmlyc3Q7Ci0gICAg
ICAgIHBhaXIuc2Vjb25kID0gc2Vjb25kOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXAsIHR5cGVuYW1lIFBlcmlvZD4gc3RydWN0IENvZGVy
PHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4+IHsKLSAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwg
UGVyaW9kPiYgZHVyYXRpb24pCi0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
aW50ZWdyYWw8UmVwPjo6dmFsdWUgJiYgc3RkOjppc19zaWduZWQ8UmVwPjo6dmFsdWUgJiYgc2l6
ZW9mKFJlcCkgPD0gc2l6ZW9mKGludDY0X3QpLCAiU2VyaWFsaXphdGlvbiBvZiB0aGlzIFJlcCB0
eXBlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBPbmx5IHNpZ25lZCBpbnRlZ2VyIHR5cGUgd2hpY2gg
Y2FuIGJlIGZpdCBpbiBhbiBpbnQ2NF90IGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuIik7Ci0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZHVyYXRpb24uY291bnQoKSk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6Y2hy
b25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIGludDY0
X3QgY291bnQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY291bnQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb248
UmVwLCBQZXJpb2Q+KHN0YXRpY19jYXN0PFJlcD4oY291bnQpKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvZGVyPHN0ZDo6
b3B0aW9uYWw8VD4+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3Qgc3RkOjpvcHRpb25hbDxUPiYgb3B0aW9uYWwpCi0gICAgewotICAgICAgICBpZiAoIW9w
dGlvbmFsKSB7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IGZhbHNlOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAg
ICAgIGVuY29kZXIgPDwgb3B0aW9uYWwudmFsdWUoKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGlj
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6b3B0aW9uYWw8VD4mIG9wdGlvbmFs
KQotICAgIHsKLSAgICAgICAgYm9vbCBpc0VuZ2FnZWQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaXNFbmdhZ2VkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghaXNFbmdhZ2VkKSB7Ci0gICAgICAgICAgICBvcHRpb25hbCA9IHN0ZDo6bnVs
bG9wdDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBUIHZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIG9wdGlvbmFsID0gV1RGTW92
ZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4gc3RydWN0IENvZGVyPFdURjo6S2V5
VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVU
eXBlPiYgcGFpcikKLSAgICB7Ci0gICAgICAgIGVuY29kZXIgPDwgcGFpci5rZXkgPDwgcGFpci52
YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
V1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKLSAgICB7Ci0gICAg
ICAgIEtleVR5cGUga2V5OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgVmFsdWVUeXBlIHZhbHVlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBwYWlyLmtleSA9IGtleTsKLSAgICAgICAgcGFpci52YWx1ZSA9IHZhbHVlOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTxib29sIGZpeGVkU2l6
ZUVsZW1lbnRzLCB0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHN0cnVjdCBWZWN0
b3JDb2RlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBz
dHJ1Y3QgVmVjdG9yQ29kZXI8ZmFsc2UsIFQsIGlubGluZUNhcGFjaXR5PiB7Ci0gICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHZlY3Rvci5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZl
Y3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGVuY29kZXIgPDwgdmVjdG9yW2ldOwotICAg
IH0KLQotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICB1aW50NjRfdCBzaXplOwot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4gdG1wOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgVCBlbGVtZW50
OwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShlbGVtZW50KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHRtcC5hcHBlbmQo
V1RGTW92ZShlbGVtZW50KSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0bXAuc2hyaW5rVG9GaXQo
KTsKLSAgICAgICAgdmVjdG9yLnN3YXAodG1wKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1
Y3QgVmVjdG9yQ29kZXI8dHJ1ZSwgVCwgaW5saW5lQ2FwYWNpdHk+IHsKLSAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4odmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iu
c2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGlj
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4m
IHZlY3RvcikKLSAgICB7Ci0gICAgICAgIHVpbnQ2NF90IHNpemU7Ci0gICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoc2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
Ly8gU2luY2Ugd2Uga25vdyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZWxlbWVudHMsIHdlIGNhbiBh
bGxvY2F0ZSB0aGUgdmVjdG9yIGluCi0gICAgICAgIC8vIG9uZSBmZWxsIHN3b29wLiBCZWZvcmUg
YWxsb2NhdGluZyB3ZSBtdXN0IGhvd2V2ZXIgbWFrZSBzdXJlIHRoYXQgdGhlIGRlY29kZXIgYnVm
ZmVyCi0gICAgICAgIC8vIGlzIGJpZyBlbm91Z2guCi0gICAgICAgIGlmICghZGVjb2Rlci5idWZm
ZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPFQ+KHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4gdGVtcDsKLSAgICAgICAg
dGVtcC5yZXNpemUoc2l6ZSk7Ci0KLSAgICAgICAgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERh
dGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGVtcC5kYXRhKCkpLCBzaXplICogc2l6ZW9m
KFQpKTsKLQotICAgICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PiBzdHJ1Y3QgQ29kZXI8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gOiBWZWN0b3JDb2Rlcjxz
dGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlLCBULCBpbmxpbmVDYXBhY2l0eT4geyB9OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+IHN0
cnVjdCBDb2RlcjxIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNB
cmcsIE1hcHBlZFRyYWl0c0FyZz4+IHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPiBIYXNoTWFwVHlw
ZTsKLQotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNo
TWFwVHlwZSYgaGFzaE1hcCkKLSAgICB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGhhc2hNYXAuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh0eXBlbmFtZSBIYXNoTWFw
VHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoYXNoTWFwLmJlZ2luKCksIGVuZCA9IGhhc2hNYXAu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGVuY29kZXIgPDwgKml0OwotICAg
IH0KLQotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBIYXNoTWFwVHlw
ZSYgaGFzaE1hcCkKLSAgICB7Ci0gICAgICAgIHVpbnQ2NF90IGhhc2hNYXBTaXplOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc2hNYXBTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBIYXNoTWFwVHlwZSB0ZW1wSGFzaE1hcDsKLSAgICAgICAgZm9yICh1
aW50NjRfdCBpID0gMDsgaSA8IGhhc2hNYXBTaXplOyArK2kpIHsKLSAgICAgICAgICAgIEtleUFy
ZyBrZXk7Ci0gICAgICAgICAgICBNYXBwZWRBcmcgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoIXRlbXBIYXNoTWFwLmFkZChrZXksIHZhbHVlKS5p
c05ld0VudHJ5KSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGhhc2ggbWFwIGFscmVhZHkgaGFz
IHRoZSBzcGVjaWZpZWQga2V5LCBiYWlsLgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGhhc2hNYXAuc3dhcCh0ZW1wSGFz
aE1hcCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1
Y3QgQ29kZXI8SGFzaFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4+IHsKLSAgICB0
eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IEhhc2hTZXRUeXBl
OwotCi0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hT
ZXRUeXBlJiBoYXNoU2V0KQotICAgIHsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oaGFzaFNldC5zaXplKCkpOwotICAgICAgICBmb3IgKHR5cGVuYW1lIEhhc2hTZXRU
eXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IGhhc2hTZXQuYmVnaW4oKSwgZW5kID0gaGFzaFNldC5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZW5jb2RlciA8PCAqaXQ7Ci0gICAg
fQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEhhc2hTZXRUeXBl
JiBoYXNoU2V0KQotICAgIHsKLSAgICAgICAgdWludDY0X3QgaGFzaFNldFNpemU7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaGFzaFNldFNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIEhhc2hTZXRUeXBlIHRlbXBIYXNoU2V0OwotICAgICAgICBmb3IgKHVp
bnQ2NF90IGkgPSAwOyBpIDwgaGFzaFNldFNpemU7ICsraSkgewotICAgICAgICAgICAgS2V5QXJn
IGtleTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoa2V5KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmICghdGVtcEhhc2hTZXQuYWRkKGtl
eSkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBoYXNoIG1hcCBhbHJlYWR5
IGhhcyB0aGUgc3BlY2lmaWVkIGtleSwgYmFpbC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBoYXNoU2V0LnN3YXAodGVt
cEhhc2hTZXQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb2RlcjxBdG9taWNTdHJpbmc+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYsIGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNv
ZGVyJiwgQXRvbWljU3RyaW5nJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxDU3Ry
aW5nPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBDU3RyaW5nJik7
Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBDU3RyaW5nJik7Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb2RlcjxTdHJpbmc+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYsIGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwg
U3RyaW5nJik7Ci19OworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lzdGVuY2Ugewog
CiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IHsKICAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbyYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvJik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxTSEExOjpEaWdlc3Q+
IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFNIQTE6OkRpZ2VzdCYp
OwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU0hBMTo6RGlnZXN0Jik7Ci19Owot
CiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPiB7CiAgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFw
Jik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpIVFRQSGVhZGVy
TWFwJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVDb2RlcnNDb2NvYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzQ29jb2EuY3BwCShyZXZpc2lvbiAyMTA0
OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVD
b2RlcnNDb2NvYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRl
IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+CiAjZW5kaWYKIAotbmFtZXNwYWNlIFdlYktp
dCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNl
IFBlcnNpc3RlbmNlIHsKIAogc3RhdGljIHZvaWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29k
ZXIsIENGRGF0YVJlZiBkYXRhKQogewpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5jcHAJKHJldmlz
aW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURlY29kZXIuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29y
a0NhY2hlRGVjb2Rlci5oIgotCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0KLSNpbmNsdWRl
ICJOZXR3b3JrQ2FjaGVFbmNvZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNl
IE5ldHdvcmtDYWNoZSB7Ci0KLURlY29kZXI6OkRlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVy
LCBzaXplX3QgYnVmZmVyU2l6ZSkKLSAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAsIG1fYnVm
ZmVyUG9zaXRpb24oYnVmZmVyKQotICAgICwgbV9idWZmZXJFbmQoYnVmZmVyICsgYnVmZmVyU2l6
ZSkKLXsKLX0KLQotRGVjb2Rlcjo6fkRlY29kZXIoKQotewotfQotCi1ib29sIERlY29kZXI6OmJ1
ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IHNpemUpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHNpemUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2J1ZmZlckVuZCAtIG1fYnVmZmVyUG9z
aXRpb24pOwotfQotCi1ib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90
KiBkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBpZiAoIWJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0Nv
bnRhaW4oc2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1lbWNweShkYXRhLCBt
X2J1ZmZlclBvc2l0aW9uLCBzaXplKTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uICs9IHNpemU7Ci0K
LSAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLWJvb2wgRGVj
b2Rlcjo6ZGVjb2RlTnVtYmVyKFR5cGUmIHZhbHVlKQotewotICAgIGlmICghYnVmZmVySXNMYXJn
ZUVub3VnaFRvQ29udGFpbihzaXplb2YodmFsdWUpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgbWVtY3B5KCZ2YWx1ZSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZW9mKHZhbHVlKSk7Ci0g
ICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplb2YoVHlwZSk7Ci0KLSAgICBFbmNvZGVyOjp1cGRh
dGVDaGVja3N1bUZvck51bWJlcihtX3NoYTEsIHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBEZWNvZGVyOjpkZWNvZGUoYm9vbCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNv
ZGVOdW1iZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDhfdCYgcmVz
dWx0KQotewotICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNv
ZGVyOjpkZWNvZGUodWludDE2X3QmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlTnVtYmVy
KHJlc3VsdCk7Ci19Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQzMl90JiByZXN1bHQpCi17
Ci0gICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwotfQotCi1ib29sIERlY29kZXI6OmRl
Y29kZSh1aW50NjRfdCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0
KTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUoaW50MzJfdCYgcmVzdWx0KQotewotICAgIHJl
dHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUoaW50
NjRfdCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKLX0KLQot
Ym9vbCBEZWNvZGVyOjpkZWNvZGUoZmxvYXQmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2Rl
TnVtYmVyKHJlc3VsdCk7Ci19Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGRvdWJsZSYgcmVzdWx0
KQotewotICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVy
Ojp2ZXJpZnlDaGVja3N1bSgpCi17Ci0gICAgU0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKLSAg
ICBtX3NoYTEuY29tcHV0ZUhhc2goY29tcHV0ZWRIYXNoKTsKLQotICAgIFNIQTE6OkRpZ2VzdCBz
YXZlZEhhc2g7Ci0gICAgaWYgKCFkZWNvZGVGaXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRhdGEo
KSwgc2l6ZW9mKHNhdmVkSGFzaCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gY29tcHV0ZWRIYXNoID09IHNhdmVkSGFzaDsKLX0KLQotfQotfQotCi0jZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURlY29kZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEZWNvZGVyLmgJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURlY29kZXIuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOZXR3b3JrQ2FjaGVEZWNvZGVy
X2gKLSNkZWZpbmUgTmV0d29ya0NhY2hlRGVjb2Rlcl9oCi0KLSNpZiBFTkFCTEUoTkVUV09SS19D
QUNIRSkKLQotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVyLmgiCi0jaW5jbHVkZSA8d3RmL1NI
QTEuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKLQot
Y2xhc3MgRGVjb2RlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgRGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKLSAg
ICB2aXJ0dWFsIH5EZWNvZGVyKCk7Ci0KLSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQotICAgIHNpemVfdCBjdXJyZW50T2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3NpdGlvbiAtIG1fYnVmZmVyOyB9Ci0KLSAgICBib29s
IHZlcmlmeUNoZWNrc3VtKCk7Ci0KLSAgICBib29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50
OF90Kiwgc2l6ZV90KTsKLQotICAgIGJvb2wgZGVjb2RlKGJvb2wmKTsKLSAgICBib29sIGRlY29k
ZSh1aW50OF90Jik7Ci0gICAgYm9vbCBkZWNvZGUodWludDE2X3QmKTsKLSAgICBib29sIGRlY29k
ZSh1aW50MzJfdCYpOwotICAgIGJvb2wgZGVjb2RlKHVpbnQ2NF90Jik7Ci0gICAgYm9vbCBkZWNv
ZGUoaW50MzJfdCYpOwotICAgIGJvb2wgZGVjb2RlKGludDY0X3QmKTsKLSAgICBib29sIGRlY29k
ZShmbG9hdCYpOwotICAgIGJvb2wgZGVjb2RlKGRvdWJsZSYpOwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gYm9vbCBkZWNvZGVFbnVtKFQmIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKFQpIDw9IDgsICJFbnVtIHR5cGUgVCBtdXN0IG5vdCBiZSBsYXJnZXIg
dGhhbiA2NCBiaXRzISIpOwotCi0gICAgICAgIHVpbnQ2NF90IHZhbHVlOwotICAgICAgICBpZiAo
IWRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAg
ICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxUPih2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgZGVjb2RlKFQmIHQpCi0g
ICAgewotICAgICAgICByZXR1cm4gQ29kZXI8VD46OmRlY29kZSgqdGhpcywgdCk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBib29sIGJ1ZmZlcklzTGFyZ2VFbm91Z2hU
b0NvbnRhaW4oc2l6ZV90IG51bUVsZW1lbnRzKSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlLCAiVHlwZSBUIG11c3QgaGF2ZSBh
IGZpeGVkLCBrbm93biBlbmNvZGVkIHNpemUhIik7Ci0KLSAgICAgICAgaWYgKG51bUVsZW1lbnRz
ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAvIHNpemVvZihUKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gYnVmZmVySXNMYXJnZUVub3Vn
aFRvQ29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNJUENEZWNvZGVyID0gZmFsc2U7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBi
dWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemVfdCkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVHlwZT4gYm9vbCBkZWNvZGVOdW1iZXIoVHlwZSYpOwotCi0gICAgY29uc3QgdWlu
dDhfdCogbV9idWZmZXI7Ci0gICAgY29uc3QgdWludDhfdCogbV9idWZmZXJQb3NpdGlvbjsKLSAg
ICBjb25zdCB1aW50OF90KiBtX2J1ZmZlckVuZDsKLQotICAgIFNIQTEgbV9zaGExOwotfTsKLQot
fSAKLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuY3BwCShyZXZp
c2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVFbmNvZGVyLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyOCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZUVuY29kZXIuaCIKLQotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLW5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewotCi1FbmNvZGVyOjpFbmNvZGVyKCkKLXsK
LX0KLQotRW5jb2Rlcjo6fkVuY29kZXIoKQotewotfQotCi11aW50OF90KiBFbmNvZGVyOjpncm93
KHNpemVfdCBzaXplKQotewotICAgIHNpemVfdCBuZXdQb3NpdGlvbiA9IG1fYnVmZmVyLnNpemUo
KTsKLSAgICBtX2J1ZmZlci5ncm93KG1fYnVmZmVyLnNpemUoKSArIHNpemUpOwotICAgIHJldHVy
biBtX2J1ZmZlci5kYXRhKCkgKyBuZXdQb3NpdGlvbjsKLX0KLQotdm9pZCBFbmNvZGVyOjp1cGRh
dGVDaGVja3N1bUZvckRhdGEoU0hBMSYgc2hhMSwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUpCi17Ci0gICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8dWludDhfdCo+Ojp2YWx1ZTsKLSAg
ICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0eXBlU2FsdCksIHNp
emVvZih0eXBlU2FsdCkpOwotICAgIHNoYTEuYWRkQnl0ZXMoZGF0YSwgc2l6ZSk7Ci19Ci0KLXZv
aWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKQotewotICAgIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEsIHNp
emUpOwotCi0gICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplKTsKLSAgICBtZW1jcHkoYnVm
ZmVyLCBkYXRhLCBzaXplKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLXZvaWQgRW5j
b2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFsdWUpCi17Ci0gICAgRW5jb2Rlcjo6dXBkYXRlQ2hl
Y2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7Ci0KLSAgICB1aW50OF90KiBidWZmZXIgPSBn
cm93KHNpemVvZihUeXBlKSk7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgJnZhbHVlLCBzaXplb2YoVHlw
ZSkpOwotfQotCi12b2lkIEVuY29kZXI6OmVuY29kZShib29sIHZhbHVlKQotewotICAgIGVuY29k
ZU51bWJlcih2YWx1ZSk7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHVpbnQ4X3QgdmFsdWUp
Ci17Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGUo
dWludDE2X3QgdmFsdWUpCi17Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKLX0KLQotdm9pZCBF
bmNvZGVyOjplbmNvZGUodWludDMyX3QgdmFsdWUpCi17Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVl
KTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGUodWludDY0X3QgdmFsdWUpCi17Ci0gICAgZW5j
b2RlTnVtYmVyKHZhbHVlKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGUoaW50MzJfdCB2YWx1
ZSkKLXsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwotfQotCi12b2lkIEVuY29kZXI6OmVuY29k
ZShpbnQ2NF90IHZhbHVlKQotewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Ci19Ci0KLXZvaWQg
RW5jb2Rlcjo6ZW5jb2RlKGZsb2F0IHZhbHVlKQotewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7
Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGRvdWJsZSB2YWx1ZSkKLXsKLSAgICBlbmNvZGVO
dW1iZXIodmFsdWUpOwotfQotCi12b2lkIEVuY29kZXI6OmVuY29kZUNoZWNrc3VtKCkKLXsKLSAg
ICBTSEExOjpEaWdlc3QgaGFzaDsKLSAgICBtX3NoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAg
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSk7Ci19Ci0KLX0K
LX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5oCShyZXZpc2lvbiAyMTA0OTYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVy
LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
TmV0d29ya0NhY2hlRW5jb2Rlcl9oCi0jZGVmaW5lIE5ldHdvcmtDYWNoZUVuY29kZXJfaAotCi0j
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0KLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2Rlci5o
IgotI2luY2x1ZGUgPHd0Zi9TSEExLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewotCi1jbGFzcyBFbmNvZGVy
OwotY2xhc3MgRGF0YVJlZmVyZW5jZTsKLQotY2xhc3MgRW5jb2RlciB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRW5jb2RlcigpOwotICAgIHZpcnR1YWwgfkVu
Y29kZXIoKTsKLQotICAgIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKLSAgICB2b2lkIGVuY29kZUZp
eGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHZvaWQgZW5jb2RlRW51bShUIHQpCi0gICAgewotICAgICAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoVCkgPD0gc2l6ZW9mKHVpbnQ2NF90KSwgZW51bV90eXBlX211c3Rfbm90X2Jl
X2xhcmdlcl90aGFuXzY0X2JpdHMpOwotCi0gICAgICAgIGVuY29kZShzdGF0aWNfY2FzdDx1aW50
NjRfdD4odCkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW5jb2Rl
KGNvbnN0IFQmIHQpCi0gICAgewotICAgICAgICBDb2RlcjxUPjo6ZW5jb2RlKCp0aGlzLCB0KTsK
LSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFbmNvZGVyJiBvcGVyYXRvcjw8KGNv
bnN0IFQmIHQpCi0gICAgewotICAgICAgICBlbmNvZGUodCk7Ci0gICAgICAgIHJldHVybiAqdGhp
czsKLSAgICB9Ci0KLSAgICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBt
X2J1ZmZlci5kYXRhKCk7IH0KLSAgICBzaXplX3QgYnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYnVmZmVyLnNpemUoKTsgfQotCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JE
YXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVHlwZT4gc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYsIFR5cGUp
OwotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENFbmNvZGVyID0gZmFsc2U7Ci0KLXByaXZh
dGU6Ci0gICAgdm9pZCBlbmNvZGUoYm9vbCk7Ci0gICAgdm9pZCBlbmNvZGUodWludDhfdCk7Ci0g
ICAgdm9pZCBlbmNvZGUodWludDE2X3QpOwotICAgIHZvaWQgZW5jb2RlKHVpbnQzMl90KTsKLSAg
ICB2b2lkIGVuY29kZSh1aW50NjRfdCk7Ci0gICAgdm9pZCBlbmNvZGUoaW50MzJfdCk7Ci0gICAg
dm9pZCBlbmNvZGUoaW50NjRfdCk7Ci0gICAgdm9pZCBlbmNvZGUoZmxvYXQpOwotICAgIHZvaWQg
ZW5jb2RlKGRvdWJsZSk7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiB2b2lkIGVuY29k
ZU51bWJlcihUeXBlKTsKLQotICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90KTsKLQotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUeXBlPiBzdHJ1Y3QgU2FsdDsKLQotICAgIFZlY3Rvcjx1aW50OF90LCA0
MDk2PiBtX2J1ZmZlcjsKLSAgICBTSEExIG1fc2hhMTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVj
dCBFbmNvZGVyOjpTYWx0PGJvb2w+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMzsg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PHVpbnQ4X3Q+IHsgc3RhdGljIGNv
bnN0ICB1bnNpZ25lZCB2YWx1ZSA9IDU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6
U2FsdDx1aW50MTZfdD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSA3OyB9OwotdGVt
cGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8dWludDMyX3Q+IHsgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHZhbHVlID0gMTE7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1
aW50NjRfdD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAxMzsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGludDMyX3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHZhbHVlID0gMTc7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDxpbnQ2NF90
PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDE5OyB9OwotdGVtcGxhdGUgPD4gc3Ry
dWN0IEVuY29kZXI6OlNhbHQ8ZmxvYXQ+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0g
MjM7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDxkb3VibGU+IHsgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMjk7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rl
cjo6U2FsdDx1aW50OF90Kj4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAxMDE7IH07
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotdm9pZCBFbmNvZGVyOjp1cGRhdGVDaGVja3N1
bUZvck51bWJlcihTSEExJiBzaGExLCBUeXBlIHZhbHVlKQotewotICAgIGF1dG8gdHlwZVNhbHQg
PSBTYWx0PFR5cGU+Ojp2YWx1ZTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KCZ0eXBlU2FsdCksIHNpemVvZih0eXBlU2FsdCkpOwotICAgIHNoYTEuYWRkQnl0
ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7Ci19
Ci0KLX0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJldmlz
aW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNiBAQAogCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5oIgotI2luY2x1
ZGUgIk5ldHdvcmtDYWNoZURlY29kZXIuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVy
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
QEAgLTgzLDcgKzgxLDcgQEAgRW50cnk6OkVudHJ5KGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3Rv
cgogCiBTdG9yYWdlOjpSZWNvcmQgRW50cnk6OmVuY29kZUFzU3RvcmFnZVJlY29yZCgpIGNvbnN0
CiB7Ci0gICAgRW5jb2RlciBlbmNvZGVyOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIg
ZW5jb2RlcjsKICAgICBlbmNvZGVyIDw8IG1fcmVzcG9uc2U7CiAKICAgICBib29sIGhhc1Zhcnlp
bmdSZXF1ZXN0SGVhZGVycyA9ICFtX3ZhcnlpbmdSZXF1ZXN0SGVhZGVycy5pc0VtcHR5KCk7CkBA
IC0xMTAsNyArMTA4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlU3Rv
cgogewogICAgIGF1dG8gZW50cnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEVudHJ5PihzdG9yYWdlRW50
cnkpOwogCi0gICAgRGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBz
dG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2Rl
ciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVy
LnNpemUoKSk7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShlbnRyeS0+bV9yZXNwb25zZSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGVudHJ5LT5tX3Jlc3BvbnNlLnNldFNvdXJjZShX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUtleS5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsx
NTUsNyBAQCBib29sIEtleTo6b3BlcmF0b3I9PShjb25zdCBLZXkmIG90aGVyKSBjCiAgICAgcmV0
dXJuIG1faGFzaCA9PSBvdGhlci5tX2hhc2ggJiYgbV9wYXJ0aXRpb24gPT0gb3RoZXIubV9wYXJ0
aXRpb24gJiYgbV90eXBlID09IG90aGVyLm1fdHlwZSAmJiBtX2lkZW50aWZpZXIgPT0gb3RoZXIu
bV9pZGVudGlmaWVyICYmIG1fcmFuZ2UgPT0gb3RoZXIubV9yYW5nZTsKIH0KIAotdm9pZCBLZXk6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordm9pZCBLZXk6OmVuY29kZShXVEY6OlBl
cnNpc3RlbmNlOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbV9w
YXJ0aXRpb247CiAgICAgZW5jb2RlciA8PCBtX3R5cGU7CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9p
ZCBLZXk6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbV9w
YXJ0aXRpb25IYXNoOwogfQogCi1ib29sIEtleTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEtl
eSYga2V5KQorYm9vbCBLZXk6OmRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiBkZWNv
ZGVyLCBLZXkmIGtleSkKIHsKICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGUoa2V5Lm1fcGFydGl0
aW9uKSAmJiBkZWNvZGVyLmRlY29kZShrZXkubV90eXBlKSAmJiBkZWNvZGVyLmRlY29kZShrZXku
bV9pZGVudGlmaWVyKSAmJiBkZWNvZGVyLmRlY29kZShrZXkubV9yYW5nZSkgJiYgZGVjb2Rlci5k
ZWNvZGUoa2V5Lm1faGFzaCkgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1fcGFydGl0aW9uSGFzaCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVLZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVLZXkuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDE0ICszMCwxMyBAQAogCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0YS5oIgogI2luY2x1
ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaD4KKyNp
bmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUg
ewogCi1jbGFzcyBFbmNvZGVyOwotY2xhc3MgRGVjb2RlcjsKLQogY2xhc3MgS2V5IHsKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIFNIQTE6OkRpZ2VzdCBIYXNoVHlwZTsKQEAgLTY5LDggKzY4LDggQEAg
cHVibGljOgogICAgIFN0cmluZyBoYXNoQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBoYXNoQXNT
dHJpbmcobV9oYXNoKTsgfQogICAgIFN0cmluZyBwYXJ0aXRpb25IYXNoQXNTdHJpbmcoKSBjb25z
dCB7IHJldHVybiBoYXNoQXNTdHJpbmcobV9wYXJ0aXRpb25IYXNoKTsgfQogCi0gICAgdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwg
S2V5Jik7CisgICAgdm9pZCBlbmNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciYpIGNvbnN0
OworICAgIHN0YXRpYyBib29sIGRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiwgS2V5
Jik7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5JikgY29uc3Q7CiAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEtleSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysg
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw3ICszODAsNyBAQCBzdGF0aWMgYm9vbCBkZWNvZGVS
ZWNvcmRNZXRhRGF0YShSZWNvcmRNCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAg
ZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKSB7Ci0gICAgICAgIERlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAg
ICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwogICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmNhY2hlU3RvcmFnZVZlcnNpb24pKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1l
dGFEYXRhLmtleSkpCkBAIC00NjQsNyArNDY0LDcgQEAgdm9pZCBTdG9yYWdlOjpyZWFkUmVjb3Jk
KFJlYWRPcGVyYXRpb24mIAogCiBzdGF0aWMgRGF0YSBlbmNvZGVSZWNvcmRNZXRhRGF0YShjb25z
dCBSZWNvcmRNZXRhRGF0YSYgbWV0YURhdGEpCiB7Ci0gICAgRW5jb2RlciBlbmNvZGVyOworICAg
IFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKIAogICAgIGVuY29kZXIgPDwgbWV0
YURhdGEuY2FjaGVTdG9yYWdlVmVyc2lvbjsKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmtleTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1
YnJlc291cmNlc0VudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAJKHJldmlzaW9u
IDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTMgKzMwLDEx
IEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJz
LmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRGVjb2Rlci5oIgotI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZUVuY29kZXIuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0Nh
Y2hlIHsKIAotdm9pZCBTdWJyZXNvdXJjZUluZm86OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAordm9pZCBTdWJyZXNvdXJjZUluZm86OmVuY29kZShXVEY6OlBlcnNpc3RlbmNlOjpFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbV9pc1RyYW5zaWVudDsKIApA
QCAtNDgsNyArNDYsNyBAQCB2b2lkIFN1YnJlc291cmNlSW5mbzo6ZW5jb2RlKEVuY29kZXImIGVu
CiAgICAgZW5jb2RlciA8PCBtX3JlcXVlc3RIZWFkZXJzOwogfQogCi1ib29sIFN1YnJlc291cmNl
SW5mbzo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFN1YnJlc291cmNlSW5mbyYgaW5mbykKK2Jv
b2wgU3VicmVzb3VyY2VJbmZvOjpkZWNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYgZGVj
b2RlciwgU3VicmVzb3VyY2VJbmZvJiBpbmZvKQogewogICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
aW5mby5tX2lzVHJhbnNpZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjcsNyArNjUs
NyBAQCBib29sIFN1YnJlc291cmNlSW5mbzo6ZGVjb2RlKERlY29kZXImIGRlCiAKIFN0b3JhZ2U6
OlJlY29yZCBTdWJyZXNvdXJjZXNFbnRyeTo6ZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCkgY29uc3QK
IHsKLSAgICBFbmNvZGVyIGVuY29kZXI7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBl
bmNvZGVyOwogICAgIGVuY29kZXIgPDwgbV9zdWJyZXNvdXJjZXM7CiAKICAgICBlbmNvZGVyLmVu
Y29kZUNoZWNrc3VtKCk7CkBAIC03OSw3ICs3Nyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxTdWJyZXNv
dXJjZXNFbnRyeT4gU3VicmUKIHsKICAgICBhdXRvIGVudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxT
dWJyZXNvdXJjZXNFbnRyeT4oc3RvcmFnZUVudHJ5KTsKIAotICAgIERlY29kZXIgZGVjb2Rlcihz
dG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOwor
ICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVy
LmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOwogICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoZW50cnktPm1fc3VicmVzb3VyY2VzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1
YnJlc291cmNlc0VudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaAkocmV2aXNpb24gMjEw
NDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3VicmVzb3VyY2VzRW50cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNiBAQAogCiAj
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKQogCi0jaW5j
bHVkZSAiTmV0d29ya0NhY2hlRGVjb2Rlci5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29k
ZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgpAQCAtNDEsOCAr
MzksOCBAQCBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIGNsYXNzIFN1YnJlc291cmNlSW5mbyB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU3VicmVz
b3VyY2VJbmZvJik7CisgICAgdm9pZCBlbmNvZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciYp
IGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVy
JiwgU3VicmVzb3VyY2VJbmZvJik7CiAKICAgICBTdWJyZXNvdXJjZUluZm8oKSA9IGRlZmF1bHQ7
CiAgICAgU3VicmVzb3VyY2VJbmZvKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgYm9vbCBpc1RyYW5zaWVudCA9IGZhbHNlKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4
ICszMCw2IEBACiAKICNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1
ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgi
Ci0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKQEAgLTQxLDYgKzM5LDggQEAKICNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUg
PHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oPgor
I2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTsKIApAQCAtOTksNyArOTksNyBAQCBzdHJ1Y3QgQ29udGVudEV4
dGVuc2lvbk1ldGFEYXRhIHsKIAogc3RhdGljIERhdGEgZW5jb2RlQ29udGVudEV4dGVuc2lvbk1l
dGFEYXRhKGNvbnN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEpCiB7Ci0gICAg
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXIgZW5jb2RlcjsKKyAgICBXVEY6OlBlcnNpc3Rl
bmNlOjpFbmNvZGVyIGVuY29kZXI7CiAKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLnZlcnNpb247
CiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5hY3Rpb25zU2l6ZTsKQEAgLTEyMCw3ICsxMjAsNyBA
QCBzdGF0aWMgYm9vbCBkZWNvZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhCiAgICAgICAgIGlmIChz
aXplICE9IGZpbGVEYXRhLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwor
ICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7CiAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEudmVyc2lvbikpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuYWN0
aW9uc1NpemUpKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODkzLDEz
ICsxODkzLDggQEAKIAkJRTQ0MzZFRDAxQTBEMDQwQjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0
b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ0MzZFQzMxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwICovOyB9
OwogCQlFNDY5N0NDRDFCMjVFQjhGMDAxQjBBNkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDY5N0ND
QzFCMjVFQjhGMDAxQjBBNkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgKi87IH07CiAJ
CUU0N0QxRTk4MUIwNjQ5RkIwMDI2NzZBOCAvKiBOZXR3b3JrQ2FjaGVEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0QxRTk2MUIwNjJCNjYw
MDI2NzZBOCAvKiBOZXR3b3JrQ2FjaGVEYXRhLmNwcCAqLzsgfTsKLQkJRTQ4OUQyOEExQTBBMkRC
ODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5RDI4MzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29y
a0NhY2hlQ29kZXIuaCAqLzsgfTsKIAkJRTQ4OUQyOEIxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdv
cmtDYWNoZUNvZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDg5RDI4NDFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXJzLmNw
cCAqLzsgfTsKIAkJRTQ4OUQyOEMxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVy
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQy
ODUxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5oICovOyB9OwotCQlFNDg5
RDI4RDFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5RDI4NjFBMEEyREI4MDA3
OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5jcHAgKi87IH07Ci0JCUU0ODlEMjhFMUEwQTJE
QjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5RDI4NzFBMEEyREI4MDA3OEMwNkEgLyogTmV0
d29ya0NhY2hlRGVjb2Rlci5oICovOyB9OwotCQlFNDg5RDI4RjFBMEEyREI4MDA3OEMwNkEgLyog
TmV0d29ya0NhY2hlRW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDg5RDI4ODFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5j
b2Rlci5jcHAgKi87IH07Ci0JCUU0ODlEMjkwMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2Fj
aGVFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDg5RDI4OTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5oICovOyB9
OwogCQlFNDlENDBENzFBRDNGQjE3MDA2NkI3QjkgLyogTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OUQ0MEQ2
MUFEM0ZCMTcwMDY2QjdCOSAvKiBOZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5oICovOyB9OwogCQlF
NDlENDBEOTFBRDNGQjIxMDA2NkI3QjkgLyogTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5RDQwRDgxQUQz
RkIyMTAwNjZCN0I5IC8qIE5ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcCAqLzsgfTsKIAkJRTRF
ODY0OTIxQjE2NzUwMTAwQzgyRjQwIC8qIFZlcnNpb25DaGVja3MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU4NjQ4RjFCMTY3M0ZCMDBDODJGNDAg
LyogVmVyc2lvbkNoZWNrcy5tbSAqLzsgfTsKQEAgLTQxMDAsMTMgKzQwOTUsOCBAQAogCQlFNDQz
NkVDMzFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ2OTdDQ0MxQjI1RUI4RjAwMUIwQTZDIC8qIE5l
dHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0N0QxRTk2MUIwNjJCNjYwMDI2NzZBOCAvKiBOZXR3b3JrQ2FjaGVEYXRhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZURhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDg5RDI4MzFBMEEyREI4MDA3OEMwNkEg
LyogTmV0d29ya0NhY2hlQ29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TmV0d29ya0NhY2hlQ29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4OUQy
ODQxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVDb2RlcnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDg5RDI4NTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29y
a0NhY2hlQ29kZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtD
YWNoZUNvZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDg5RDI4NjFBMEEy
REI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRTQ4OUQyODcxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNo
ZURlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hl
RGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDg5RDI4ODFBMEEyREI4
MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRTQ4OUQyODkxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVu
Y29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlRW5j
b2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDlENDBENjFBRDNGQjE3MDA2
NkI3QjkgLyogTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ5RDQwRDgxQUQzRkIyMTAwNjZCN0I5IC8qIE5ldHdvcmtDYWNoZUJsb2JT
dG9yYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtD
YWNoZUJsb2JTdG9yYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRFODY0
OEUxQjE2NzNGQjAwQzgyRjQwIC8qIFZlcnNpb25DaGVja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmVyc2lvbkNoZWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNzU2OSwxNyArNzU1OSwxMiBAQAogCQkJCUU0NDM2RUJGMUEwQ0ZEQjIwMEVBRDIwNCAv
KiBOZXR3b3JrQ2FjaGUuaCAqLywKIAkJCQlFNDlENDBEODFBRDNGQjIxMDA2NkI3QjkgLyogTmV0
d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwICovLAogCQkJCUU0OUQ0MEQ2MUFEM0ZCMTcwMDY2QjdC
OSAvKiBOZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5oICovLAotCQkJCUU0ODlEMjgzMUEwQTJEQjgw
MDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rlci5oICovLAogCQkJCUU0ODlEMjg0MUEwQTJEQjgw
MDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuY3BwICovLAogCQkJCUU0ODlEMjg1MUEwQTJE
QjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuaCAqLywKIAkJCQk3Q0FCOTM3OTFENDU5
RTRCMDA3MEY1NDAgLyogTmV0d29ya0NhY2hlQ29kZXJzQ29jb2EuY3BwICovLAogCQkJCUU0N0Qx
RTk2MUIwNjJCNjYwMDI2NzZBOCAvKiBOZXR3b3JrQ2FjaGVEYXRhLmNwcCAqLywKIAkJCQlFNDJF
MDYxMTFBQTc1QUJEMDBCMTE2OTkgLyogTmV0d29ya0NhY2hlRGF0YS5oICovLAogCQkJCUU0MkUw
NjEzMUFBNzVCNzAwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVEYXRhQ29jb2EubW0gKi8sCi0JCQkJ
RTQ4OUQyODYxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuY3BwICovLAot
CQkJCUU0ODlEMjg3MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmggKi8s
Ci0JCQkJRTQ4OUQyODgxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuY3Bw
ICovLAotCQkJCUU0ODlEMjg5MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVy
LmggKi8sCiAJCQkJRTQxM0Y1OUUxQUMxQUY5RDAwMzQ1MzYwIC8qIE5ldHdvcmtDYWNoZUVudHJ5
LmNwcCAqLywKIAkJCQlFNDEzRjU5QjFBQzFBREI2MDAzNDUzNjAgLyogTmV0d29ya0NhY2hlRW50
cnkuaCAqLywKIAkJCQlFNDY5N0NDQzFCMjVFQjhGMDAxQjBBNkMgLyogTmV0d29ya0NhY2hlRmls
ZVN5c3RlbS5jcHAgKi8sCkBAIC03OTAzLDExICs3ODg4LDggQEAKIAkJCQlFMTc5OEM3QTE2RTY4
MTg4MDAyNDAxMzkgLyogTmV0d29ya0Jsb2JSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTQ0MzZFQ0MxQTBEMDQwQjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTQ5RDQwRDcxQUQzRkIxNzAwNjZCN0I5IC8qIE5ldHdvcmtDYWNoZUJsb2JTdG9yYWdl
LmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDg5RDI4QTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29y
a0NhY2hlQ29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0ODlEMjhDMUEwQTJEQjgwMDc4QzA2
QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MkUwNjEyMUFB
NzVBQkQwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQlF
NDg5RDI4RTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJRTQ4OUQyOTAxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29k
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MTNGNTlEMUFDMUFEQzQwMDM0NTM2MCAvKiBOZXR3
b3JrQ2FjaGVFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM0QjI1MEYxQTgzMUE4RDAwQ0ZC
MTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MkUw
NjEwMUFBNzUyM0IwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTQwNyw4ICs5Mzg5LDYgQEAKIAkJCQk3Q0FCOTM3QTFENDU5RTUxMDA3MEY1NDAg
LyogTmV0d29ya0NhY2hlQ29kZXJzQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ3RDFF
OTgxQjA2NDlGQjAwMjY3NkE4IC8qIE5ldHdvcmtDYWNoZURhdGEuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTQyRTA2MTQxQUE3NUI3MDAwQjExNjk5IC8qIE5ldHdvcmtDYWNoZURhdGFDb2NvYS5t
bSBpbiBTb3VyY2VzICovLAotCQkJCUU0ODlEMjhEMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3Jr
Q2FjaGVEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUU0ODlEMjhGMUEwQTJEQjgwMDc4
QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0MTNG
NTlGMUFDMUFGOUQwMDM0NTM2MCAvKiBOZXR3b3JrQ2FjaGVFbnRyeS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlFNDY5N0NDRDFCMjVFQjhGMDAxQjBBNkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3Rl
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDJFMDYwRjFBQTc1MjM0MDBCMTE2OTkgLyogTmV0
d29ya0NhY2hlSU9DaGFubmVsQ29jb2EubW0gaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298322</attachid>
            <date>2017-01-08 15:58:12 -0800</date>
            <delta_ts>2017-01-08 16:34:06 -0800</delta_ts>
            <desc>patch</desc>
            <filename>cache-coder-wtf-6.patch</filename>
            <type>text/plain</type>
            <size>110025</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE3LTAxLTA4ICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGNhY2hlIGNvZGVycyB0byBXVEYKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgaXQgcG9zc2li
bGUgdG8gdXNlIHJvYnVzdCBzZXJpYWxpemF0aW9uIG9mIFdURiB0eXBlcyBvbiB0aGUgbG93ZXIg
bGV2ZWxzIG9mIHRoZSBzdGFjay4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZTogQWRkZWQuCisgICAgICAgICogd3Rm
L3BlcnNpc3RlbmNlL0NvZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyLmguCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3Rl
bmNlL0NvZGVycy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6Q29kZXI8QXRvbWljU3RyaW5nPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+OjplbmNvZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVy
PFN0cmluZz46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6ZGVjb2RlU3RyaW5nVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6Q29kZXI8U3RyaW5nPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6
SFRUUEhlYWRlck1hcD46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD46OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuaC4KKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxzdGQ6Om9wdGlvbmFsPFQ+Pjo6ZW5jb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxzdGQ6Om9w
dGlvbmFsPFQ+Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2Uv
RGVjb2Rlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OkRlY29kZXI6OkRlY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkRlY29kZXI6On5EZWNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRlY29k
ZXI6OmRlY29kZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6RGVjb2Rlcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL0RlY29kZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5oLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkRlY29kZXI6Omxlbmd0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6RGVjb2Rlcjo6Y3VycmVudE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGVjb2Rlcjo6ZGVjb2RlRW51bSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGVjb2Rlcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVuY29kZXIuY3BwLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29k
ZXI6OkVuY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVu
Y29kZXI6On5FbmNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjpncm93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW5jb2Rlcjo6ZW5jb2RlTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbmNvZGVyOjplbmNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OmVu
Y29kZUNoZWNrc3VtKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvRW5jb2Rl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVFbmNvZGVyLmguCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW5jb2Rl
cjo6ZW5jb2RlRW51bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
RW5jb2Rlcjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjpvcGVyYXRvcjw8KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpFbmNvZGVyOjpidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkVuY29kZXI6OmJ1ZmZlclNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKTogRGVsZXRl
ZC4KKwogMjAxNy0wMS0wOCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+
CiAKICAgICAgICAgSW50cm9kdWNlIENQVShYODZfU1NFMikgaW5zdGVhZCBvZiB2YXJpb3VzIFNT
RTIgY2hlY2tzCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2ICszNTMsMTMgQEAKIAkJREU1QTA5RkMxQkEz
Njk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU1QTA5RkIxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1v
bkNyeXB0b1NQSS5oICovOyB9OwogCQlFMTU1NTZGNTE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTU1NTZGMzE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxp
dGllcy5jcHAgKi87IH07CiAJCUUxNTU1NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFw
aGljVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5o
ICovOyB9OworCQlFNDNBNDY5NTFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTAxRTIyOEI5MTAw
Mjc2QjA1IC8qIERlY29kZXIuaCAqLzsgfTsKKwkJRTQzQTQ2OTYxRTIyOEI5MTAwMjc2QjA1IC8q
IEVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0M0E0NjkxMUUyMjhCOTEwMDI3NkIwNSAvKiBFbmNvZGVyLmggKi87IH07CisJCUU0M0E0Njk3
MUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0M0E0NjkyMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVy
LmNwcCAqLzsgfTsKKwkJRTQzQTQ2OTgxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTMxRTIy
OEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICovOyB9OworCQlFNDNBNDY5OTFFMjI4QjkxMDAy
NzZCMDUgLyogQ29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0M0E0Njk0MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oICovOyB9OworCQlFNDNB
NDY5QjFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBNDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJz
LmggKi87IH07CisJCUU0M0E0NjlEMUUyMjhGRDUwMDI3NkIwNSAvKiBDb2RlcnMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OUMxRTIyOEZE
NTAwMjc2QjA1IC8qIENvZGVycy5jcHAgKi87IH07CiAJCUU0QTBBRDM5MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRBMEFEMzcxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07
CiAJCUU0QTBBRDNBMUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTBBRDM4MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuaCAqLzsgfTsKIAkJRTRBMEFEM0QxQTk2MjUzQzAwNTM2REY2IC8qIFdv
cmtRdWV1ZUNvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QTBBRDNDMUE5NjI1M0MwMDUzNkRGNiAvKiBXb3JrUXVldWVDb2NvYS5jcHAgKi87
IH07CkBAIC03MjUsNiArNzMyLDEzIEBACiAJCURFNUEwOUZCMUJBMzY5OTIwMDNENDQyNCAvKiBD
b21tb25DcnlwdG9TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9u
Q3J5cHRvU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTU1NkYzMThBMEND
MTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlw
dG9ncmFwaGljVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0M0E0
NjkwMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQzQTQ2
OTExRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRW5jb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDNBNDY5
MjFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTQzQTQ2OTMxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRW5jb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUU0M0E0Njk0MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNDNBNDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NDNBNDY5QzFFMjI4RkQ1MDAyNzZCMDUgLyogQ29kZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0QTBBRDM3MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTRBMEFEMzgxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrUXVldWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTRBMEFEM0MxQTk2MjUzQzAwNTM2REY2IC8qIFdvcmtRdWV1ZUNv
Y29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZUNv
Y29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2OSw2ICs4ODMsNyBAQAog
CQkJCUE4QTQ3MjgxMTUxQTgyNUEwMDQxMjNGRiAvKiBkdG9hICovLAogCQkJCTFGQTQ3Qzg3MTUy
NTAyREEwMDU2OEQxQiAvKiBpb3MgKi8sCiAJCQkJQThBNDcyQzQxNTFBODI1QTAwNDEyM0ZGIC8q
IG1hYyAqLywKKwkJCQlFNDNBNDY4NTFFMjI4QjU3MDAyNzZCMDUgLyogcGVyc2lzdGVuY2UgKi8s
CiAJCQkJQ0VGNDgyMEMxOURBMzQ3NjAwQ0MwNEI4IC8qIHNwaSAqLywKIAkJCQlBOEE0NzMxQjE1
MUE4MjVCMDA0MTIzRkYgLyogdGV4dCAqLywKIAkJCQlBOEE0NzMzOTE1MUE4MjVCMDA0MTIzRkYg
LyogdGhyZWFkcyAqLywKQEAgLTEyNzcsNiArMTI5MiwyMCBAQAogCQkJbmFtZSA9IGNmOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJRTQzQTQ2ODUxRTIyOEI1NzAwMjc2QjA1
IC8qIHBlcnNpc3RlbmNlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQlFNDNBNDY5NDFFMjI4QjkxMDAyNzZCMDUgLyogQ29kZXIuaCAqLywKKwkJCQlFNDNB
NDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggKi8sCisJCQkJRTQzQTQ2OUMxRTIyOEZE
NTAwMjc2QjA1IC8qIENvZGVycy5jcHAgKi8sCisJCQkJRTQzQTQ2OTIxRTIyOEI5MTAwMjc2QjA1
IC8qIERlY29kZXIuY3BwICovLAorCQkJCUU0M0E0NjkwMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNv
ZGVyLmggKi8sCisJCQkJRTQzQTQ2OTMxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICov
LAorCQkJCUU0M0E0NjkxMUUyMjhCOTEwMDI3NkIwNSAvKiBFbmNvZGVyLmggKi8sCisJCQkpOwor
CQkJcGF0aCA9IHBlcnNpc3RlbmNlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
IAkJRTRBMEFEM0IxQTk2MjUxOTAwNTM2REY2IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEzMjksNiArMTM1OCw3IEBACiAJCQkJQThBNDcz
OTExNTFBODI1QjAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFQjk1RTFGMDE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNBRDE1MUE4MjVCMDA0MTIzRkYgLyogY2FjaGVkLXBvd2Vycy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTQzQTQ2OUIxRTIyOEZCMjAwMjc2QjA1IC8qIENvZGVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRENFRTIxRkIxQ0VBNzUzODAwMEMyMzk2IC8qIENGQnVuZGxlU1BJ
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1RTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hhcmFj
dGVyTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzk0MTUxQTgyNUIwMDQxMjNGRiAv
KiBDaGVja2VkQXJpdGhtZXRpYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzYyLDYgKzEzOTIsNyBA
QAogCQkJCUE4QTQ3M0IyMTUxQTgyNUIwMDQxMjNGRiAvKiBkb3VibGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3M0E3MTUxQTgyNUIwMDQxMjNGRiAvKiBEb3VibHlMaW5rZWRMaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzNCQjE1MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRTQzQTQ2OTYxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRERFOTMyMUNEQzA1MkQwMEZEMzQ5MSAvKiBkeWxkU1BJLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQUVBODhFMjFENkJCQ0Y0MDBFNUFENjQgLyogRW51bVRyYWl0cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ3QzQzNEIxREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVk
LmggaW4gSGVhZGVycyAqLywKQEAgLTE1MDgsNiArMTUzOSw3IEBACiAJCQkJQThBNDc0NTQxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQ1NTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU3BlY2lmaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjZCMjkxMURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0M0E0Njk1MUUyMjhCOTEwMDI3NkIwNSAvKiBE
ZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTMwNzFDQTFDNDA0MjcyMDAzODQ4OTggLyog
VGlueUxSVUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNF
MTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ5RUYxNjMxNkJCRkUwRDAw
MEE0MzMxIC8qIFRyaVN0YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTE1MzUsNiArMTU2Nyw3IEBA
CiAJCQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUU0M0E0Njk5MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0xNjkzLDggKzE3MjYsMTAgQEAKIAkJCQlBOEE0NzQxNDE1MUE4MjVCMDA0
MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFBMTUx
QTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTQzQTQ2OTgxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDY5NDE5MzE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVy
Q0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQzQTQ2OUQxRTIyOEZENTAwMjc2QjA1IC8qIENv
ZGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5NDE5OTE2RUFCMDQxMDAyNEUxNDYgLyog
U2NoZWR1bGVQYWlyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2OTQxOTcxNkVBQUZGODAw
MjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGNjZCMjhF
MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTcwOSw2
ICsxNzQ0LDcgQEAKIAkJCQlBNUJBMTVGQzE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nSW1wbENG
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUY1MTgyNDM0ODAwMEE4MkU2OSAvKiBTdHJp
bmdJbXBsTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RjMxODI0MzNBOTAwQTgyRTY5
IC8qIFN0cmluZ01hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUU0M0E0Njk3MUUyMjhCOTEwMDI3
NkIwNSAvKiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkE3MTY2NkRGQTMw
MEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzQ0MzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5M0YxOTkzRTE5RDc5NThEMDBDMjM5MEIgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDYgKzI0MCwx
MCBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBkdG9hL2ZpeGVkLWR0b2EuY2MKICAgICBkdG9hL3N0
cnRvZC5jYwogCisgICAgcGVyc2lzdGVuY2UvQ29kZXJzLmNwcAorICAgIHBlcnNpc3RlbmNlL0Rl
Y29kZXIuY3BwCisgICAgcGVyc2lzdGVuY2UvRW5jb2Rlci5jcHAKKwogICAgIHRleHQvQXRvbWlj
U3RyaW5nLmNwcAogICAgIHRleHQvQXRvbWljU3RyaW5nSW1wbC5jcHAKICAgICB0ZXh0L0F0b21p
Y1N0cmluZ1RhYmxlLmNwcApAQCAtMjY4LDYgKzI3Miw3IEBAIHNldChXVEZfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke1dURl9ESVJ9IgogICAgICIke1dURl9ESVJ9L3d0ZiIKICAgICAiJHtX
VEZfRElSfS93dGYvZHRvYSIKKyAgICAiJHtXVEZfRElSfS93dGYvcGVyc2lzdGVuY2UiCiAgICAg
IiR7V1RGX0RJUn0vd3RmL3RleHQiCiAgICAgIiR7V1RGX0RJUn0vd3RmL3RleHQvaWN1IgogICAg
ICIke1dURl9ESVJ9L3d0Zi90aHJlYWRzIgpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvQ29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2Rl
ci5oCShyZXZpc2lvbiAyMTAzMzApCShmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyLmg6MjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvQ29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrQ2FjaGVDb2Rlcl9oCisjZGVmaW5lIE5ldHdvcmtD
YWNoZUNvZGVyX2gKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCitjbGFzcyBEZWNvZGVyOworY2xhc3Mg
RW5jb2RlcjsKKyAgICAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlciB7CisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFQmIHQpCisgICAgewor
ICAgICAgICB0LmVuY29kZShlbmNvZGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKKyAgICB7CisgICAgICAgIHJldHVybiBUOjpkZWNv
ZGUoZGVjb2RlciwgdCk7CisgICAgfQorfTsKKworfQorfQorCisjZW5kaWYKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvQ29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2Rlci5oCShyZXZpc2lvbiAyMTAzMzApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMyAr
MjMsMTAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIE5ldHdvcmtDYWNoZUNvZGVyX2gKLSNkZWZpbmUgTmV0d29ya0NhY2hlQ29kZXJfaAorI3By
YWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNl
IFBlcnNpc3RlbmNlIHsKIAogY2xhc3MgRGVjb2RlcjsKIGNsYXNzIEVuY29kZXI7CkBAIC00OCw2
ICs0NSwzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlciB7CiAKIH0KIH0KLQot
I2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmNwcAko
cmV2aXNpb24gMjEwMzMwKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVDb2RlcnMuY3BwOjIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNp
c3RlbmNlL0NvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVDb2RlcnMuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCit2b2lkIENvZGVy
PEF0b21pY1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBdG9taWNTdHJp
bmcmIGF0b21pY1N0cmluZykKK3sKKyAgICBlbmNvZGVyIDw8IGF0b21pY1N0cmluZy5zdHJpbmco
KTsKK30KKworYm9vbCBDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCit7CisgICAgU3RyaW5nIHN0cmluZzsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0cmluZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF0b21pY1N0cmluZyA9IHN0cmluZzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBD
b2RlcjxDU3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENTdHJpbmcmIHN0
cmluZykKK3sKKyAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51bGwgc3RyaW5nLgorICAgIGlmIChz
dHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1aW50MzJf
dCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgZW5jb2RlciA8PCBsZW5ndGg7CisgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oc3RyaW5nLmRhdGEoKSksIGxlbmd0aCk7Cit9CisKK2Jvb2wgQ29kZXI8Q1N0cmluZz46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDU3RyaW5nJiByZXN1bHQpCit7CisgICAgdWludDMy
X3QgbGVuZ3RoOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGVuZ3RoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKGxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgbnVsbCBzdHJpbmcuCisgICAg
ICAgIHJlc3VsdCA9IENTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgLy8gQmVmb3JlIGFsbG9jYXRpbmcgdGhlIHN0cmluZywgbWFrZSBzdXJlIHRoYXQgdGhlIGRl
Y29kZXIgYnVmZmVyIGlzIGJpZyBlbm91Z2guCisgICAgaWYgKCFkZWNvZGVyLmJ1ZmZlcklzTGFy
Z2VFbm91Z2hUb0NvbnRhaW48Y2hhcj4obGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY2hhciogYnVmZmVyOworICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5p
bml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBzdHJpbmc7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKKwordm9pZCBDb2RlcjxTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBudWxs
IHN0cmluZy4KKyAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGVuY29kZXIgPDwg
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIGJvb2wg
aXM4Qml0ID0gc3RyaW5nLmlzOEJpdCgpOworCisgICAgZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4
Qml0OworCisgICAgaWYgKGlzOEJpdCkKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnM4
KCkpLCBsZW5ndGggKiBzaXplb2YoTENoYXIpKTsKKyAgICBlbHNlCisgICAgICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0
cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCBkZWNvZGVT
dHJpbmdUZXh0KERlY29kZXImIGRlY29kZXIsIHVpbnQzMl90IGxlbmd0aCwgU3RyaW5nJiByZXN1
bHQpCit7CisgICAgLy8gQmVmb3JlIGFsbG9jYXRpbmcgdGhlIHN0cmluZywgbWFrZSBzdXJlIHRo
YXQgdGhlIGRlY29kZXIgYnVmZmVyIGlzIGJpZyBlbm91Z2guCisgICAgaWYgKCFkZWNvZGVyLmJ1
ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48Q2hhcmFjdGVyVHlwZT4obGVuZ3RoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyOworICAgIFN0cmlu
ZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJlc3VsdCA9IHN0cmluZzsKKyAgICByZXR1cm4g
dHJ1ZTsgICAgCit9CisKK2Jvb2wgQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIFN0cmluZyYgcmVzdWx0KQoreworICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChs
ZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CisgICAgICAg
IC8vIFRoaXMgaXMgdGhlIG51bGwgc3RyaW5nLgorICAgICAgICByZXN1bHQgPSBTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBpczhCaXQ7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShpczhCaXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoaXM4Qml0KQorICAgICAgICByZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxMQ2hhcj4oZGVjb2Rl
ciwgbGVuZ3RoLCByZXN1bHQpOworICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PFVDaGFyPihk
ZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7Cit9CisKKwordm9pZCBDb2RlcjxTSEExOjpEaWdlc3Q+
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCit7
CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9m
KGRpZ2VzdCkpOworfQorCitib29sIENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKK3sKKyAgICByZXR1cm4gZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCkpOworfQor
CisvLyBTdG9yZSBjb21tb24gSFRUUCBoZWFkZXJzIGFzIHN0cmluZ3MgaW5zdGVhZCBvZiB1c2lu
ZyB0aGVpciB2YWx1ZSBpbiB0aGUgSFRUUEhlYWRlck5hbWUgZW51bWVyYXRpb24KKy8vIHNvIHRo
YXQgdGhlIGhlYWRlcnMgc3RvcmVkIGluIHRoZSBjYWNoZSBzdGF5cyB2YWxpZCBldmVuIGFmdGVy
IEhUVFBIZWFkZXJOYW1lLmluIGdldHMgdXBkYXRlZC4KK3ZvaWQgQ29kZXI8V2ViQ29yZTo6SFRU
UEhlYWRlck1hcD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpIVFRQ
SGVhZGVyTWFwJiBoZWFkZXJzKQoreworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGhlYWRlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogaGVhZGVycykg
eworICAgICAgICBlbmNvZGVyIDw8IGtleVZhbHVlLmtleTsKKyAgICAgICAgZW5jb2RlciA8PCBr
ZXlWYWx1ZS52YWx1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29kZXI8V2ViQ29yZTo6SFRUUEhlYWRl
ck1hcD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiBo
ZWFkZXJzKQoreworICAgIHVpbnQ2NF90IGhlYWRlcnNTaXplOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaGVhZGVyc1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1aW50
NjRfdCBpID0gMDsgaSA8IGhlYWRlcnNTaXplOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIG5hbWU7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGhlYWRlcnMuYWRk
KG5hbWUsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KK30KKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5jcHAJKHJldmlzaW9uIDIx
MDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDE1ICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKLQotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hF
KQorI2luY2x1ZGUgIkNvZGVycy5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lz
dGVuY2UgewogCiB2b2lkIENvZGVyPEF0b21pY1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0b21pY1N0cmluZykKIHsKQEAgLTE0NCw3ICsxNDIs
NiBAQCBib29sIENvZGVyPFN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvCiAgICAgcmV0dXJu
IGRlY29kZVN0cmluZ1RleHQ8VUNoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKIH0KIAot
CiB2b2lkIENvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7CkBAIC0xNTUsMzUgKzE1Miw1IEBA
IGJvb2wgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXIKICAgICByZXR1cm4gZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCkp
OwogfQogCi0vLyBTdG9yZSBjb21tb24gSFRUUCBoZWFkZXJzIGFzIHN0cmluZ3MgaW5zdGVhZCBv
ZiB1c2luZyB0aGVpciB2YWx1ZSBpbiB0aGUgSFRUUEhlYWRlck5hbWUgZW51bWVyYXRpb24KLS8v
IHNvIHRoYXQgdGhlIGhlYWRlcnMgc3RvcmVkIGluIHRoZSBjYWNoZSBzdGF5cyB2YWxpZCBldmVu
IGFmdGVyIEhUVFBIZWFkZXJOYW1lLmluIGdldHMgdXBkYXRlZC4KLXZvaWQgQ29kZXI8V2ViQ29y
ZTo6SFRUUEhlYWRlck1hcD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3Jl
OjpIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQotewotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGhlYWRlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogaGVh
ZGVycykgewotICAgICAgICBlbmNvZGVyIDw8IGtleVZhbHVlLmtleTsKLSAgICAgICAgZW5jb2Rl
ciA8PCBrZXlWYWx1ZS52YWx1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29kZXI8V2ViQ29yZTo6SFRU
UEhlYWRlck1hcD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpIVFRQSGVhZGVy
TWFwJiBoZWFkZXJzKQotewotICAgIHVpbnQ2NF90IGhlYWRlcnNTaXplOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoaGVhZGVyc1NpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9y
ICh1aW50NjRfdCBpID0gMDsgaSA8IGhlYWRlcnNTaXplOyArK2kpIHsKLSAgICAgICAgU3RyaW5n
IG5hbWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGhlYWRl
cnMuYWRkKG5hbWUsIHZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0KIH0K
LQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuaAkocmV2aXNpb24g
MjEwMzMwKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVDb2RlcnMuaDoyMTAzMzApCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2Rl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1
ZGUgIk5ldHdvcmtDYWNoZURlY29kZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0hUVFBIZWFkZXJNYXAuaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQ29kZXI8c3RkOjpwYWlyPFQsIFU+PiB7Cisg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxU
LCBVPiYgcGFpcikKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgcGFpci5maXJzdCA8PCBwYWly
LnNlY29uZDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjpwYWlyPFQsIFU+JiBwYWlyKQorICAgIHsKKyAgICAgICAgVCBmaXJzdDsKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShmaXJzdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgVSBzZWNvbmQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2Vjb25k
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBwYWlyLmZpcnN0ID0gZmly
c3Q7CisgICAgICAgIHBhaXIuc2Vjb25kID0gc2Vjb25kOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXAsIHR5cGVuYW1lIFBlcmlvZD4gc3Ry
dWN0IENvZGVyPHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4+IHsKKyAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0
aW9uPFJlcCwgUGVyaW9kPiYgZHVyYXRpb24pCisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfaW50ZWdyYWw8UmVwPjo6dmFsdWUgJiYgc3RkOjppc19zaWduZWQ8UmVwPjo6dmFs
dWUgJiYgc2l6ZW9mKFJlcCkgPD0gc2l6ZW9mKGludDY0X3QpLCAiU2VyaWFsaXphdGlvbiBvZiB0
aGlzIFJlcCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBPbmx5IHNpZ25lZCBpbnRlZ2VyIHR5
cGUgd2hpY2ggY2FuIGJlIGZpdCBpbiBhbiBpbnQ2NF90IGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQu
Iik7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZHVyYXRpb24uY291
bnQoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIHJlc3VsdCkKKyAgICB7CisgICAg
ICAgIGludDY0X3QgY291bnQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY291bnQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQgPSBzdGQ6OmNocm9ubzo6
ZHVyYXRpb248UmVwLCBQZXJpb2Q+KHN0YXRpY19jYXN0PFJlcD4oY291bnQpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
ZGVyPHN0ZDo6b3B0aW9uYWw8VD4+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3Qgc3RkOjpvcHRpb25hbDxUPiYgb3B0aW9uYWwpCisgICAgeworICAgICAg
ICBpZiAoIW9wdGlvbmFsKSB7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBlbmNvZGVyIDw8IHRy
dWU7CisgICAgICAgIGVuY29kZXIgPDwgb3B0aW9uYWwudmFsdWUoKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6b3B0aW9uYWw8VD4m
IG9wdGlvbmFsKQorICAgIHsKKyAgICAgICAgYm9vbCBpc0VuZ2FnZWQ7CisgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaXNFbmdhZ2VkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghaXNFbmdhZ2VkKSB7CisgICAgICAgICAgICBvcHRpb25hbCA9
IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBUIHZhbHVlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG9wdGlvbmFs
ID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4gc3RydWN0IENvZGVy
PFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4+IHsKKyAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlw
ZSwgVmFsdWVUeXBlPiYgcGFpcikKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgcGFpci5rZXkg
PDwgcGFpci52YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKKyAg
ICB7CisgICAgICAgIEtleVR5cGUga2V5OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtl
eSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVmFsdWVUeXBlIHZhbHVl
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBwYWlyLmtleSA9IGtleTsKKyAgICAgICAgcGFpci52YWx1ZSA9
IHZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxib29s
IGZpeGVkU2l6ZUVsZW1lbnRzLCB0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHN0
cnVjdCBWZWN0b3JDb2RlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8ZmFsc2UsIFQsIGlubGluZUNhcGFjaXR5PiB7Cisg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdmVjdG9y
W2ldOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICB1aW50NjRf
dCBzaXplOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4gdG1wOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAg
VCBlbGVtZW50OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShlbGVtZW50KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRt
cC5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CisgICAgICAgIH0KKworICAgICAgICB0bXAuc2hy
aW5rVG9GaXQoKTsKKyAgICAgICAgdmVjdG9yLnN3YXAodG1wKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8dHJ1ZSwgVCwgaW5saW5lQ2FwYWNpdHk+IHsKKyAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkp
LCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IHNpemU7CisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgLy8gU2luY2Ugd2Uga25vdyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZWxlbWVudHMs
IHdlIGNhbiBhbGxvY2F0ZSB0aGUgdmVjdG9yIGluCisgICAgICAgIC8vIG9uZSBmZWxsIHN3b29w
LiBCZWZvcmUgYWxsb2NhdGluZyB3ZSBtdXN0IGhvd2V2ZXIgbWFrZSBzdXJlIHRoYXQgdGhlIGRl
Y29kZXIgYnVmZmVyCisgICAgICAgIC8vIGlzIGJpZyBlbm91Z2guCisgICAgICAgIGlmICghZGVj
b2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPFQ+KHNpemUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4gdGVtcDsK
KyAgICAgICAgdGVtcC5yZXNpemUoc2l6ZSk7CisKKyAgICAgICAgZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGVtcC5kYXRhKCkpLCBzaXpl
ICogc2l6ZW9mKFQpKTsKKworICAgICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5PiBzdHJ1Y3QgQ29kZXI8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gOiBWZWN0
b3JDb2RlcjxzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlLCBULCBpbmxpbmVDYXBhY2l0eT4g
eyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHNBcmc+IHN0cnVjdCBDb2RlcjxIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBL
ZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4+IHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPiBI
YXNoTWFwVHlwZTsKKworICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGhhc2hNYXAuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh0eXBlbmFt
ZSBIYXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoYXNoTWFwLmJlZ2luKCksIGVuZCA9
IGhhc2hNYXAuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIGVuY29kZXIgPDwg
Kml0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBI
YXNoTWFwVHlwZSYgaGFzaE1hcCkKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IGhhc2hNYXBTaXpl
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc2hNYXBTaXplKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBIYXNoTWFwVHlwZSB0ZW1wSGFzaE1hcDsKKyAgICAg
ICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hNYXBTaXplOyArK2kpIHsKKyAgICAgICAg
ICAgIEtleUFyZyBrZXk7CisgICAgICAgICAgICBNYXBwZWRBcmcgdmFsdWU7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoIXRlbXBIYXNoTWFwLmFkZChrZXks
IHZhbHVlKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGhhc2ggbWFwIGFs
cmVhZHkgaGFzIHRoZSBzcGVjaWZpZWQga2V5LCBiYWlsLgorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGhhc2hNYXAuc3dh
cCh0ZW1wSGFzaE1hcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnPiBzdHJ1Y3QgQ29kZXI8SGFzaFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4+
IHsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IEhh
c2hTZXRUeXBlOworCisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IEhhc2hTZXRUeXBlJiBoYXNoU2V0KQorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oaGFzaFNldC5zaXplKCkpOworICAgICAgICBmb3IgKHR5cGVuYW1l
IEhhc2hTZXRUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IGhhc2hTZXQuYmVnaW4oKSwgZW5kID0g
aGFzaFNldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZW5jb2RlciA8PCAq
aXQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEhh
c2hTZXRUeXBlJiBoYXNoU2V0KQorICAgIHsKKyAgICAgICAgdWludDY0X3QgaGFzaFNldFNpemU7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzaFNldFNpemUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIEhhc2hTZXRUeXBlIHRlbXBIYXNoU2V0OworICAgICAg
ICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgaGFzaFNldFNpemU7ICsraSkgeworICAgICAgICAg
ICAgS2V5QXJnIGtleTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoa2V5KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICghdGVtcEhhc2hT
ZXQuYWRkKGtleSkuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBoYXNoIG1h
cCBhbHJlYWR5IGhhcyB0aGUgc3BlY2lmaWVkIGtleSwgYmFpbC4KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBoYXNoU2V0
LnN3YXAodGVtcEhhc2hTZXQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxBdG9taWNTdHJpbmc+IHsKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYsIGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiwgQXRvbWljU3RyaW5nJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b2RlcjxDU3RyaW5nPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBD
U3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBDU3RyaW5nJik7Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxTdHJpbmc+IHsKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYsIGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShE
ZWNvZGVyJiwgU3RyaW5nJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNv
bnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShE
ZWNvZGVyJiwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb2RlcjxTSEExOjpEaWdlc3Q+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIGNvbnN0IFNIQTE6OkRpZ2VzdCYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVy
JiwgU0hBMTo6RGlnZXN0Jik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3Jl
OjpIVFRQSGVhZGVyTWFwPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25z
dCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7Cit9OworCit9Cit9CisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5oCShyZXZpc2lvbiAyMTAzMzApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMjEg
KzI1LDE3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0K
LSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hl
RW5jb2Rlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9IVFRQSGVhZGVyTWFwLmg+CiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9w
ZXJzaXN0ZW5jZS9FbmNvZGVyLmg+CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5l
dHdvcmtDYWNoZSB7CituYW1lc3BhY2UgV1RGIHsKK25hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCBDb2RlcjxzdGQ6OnBhaXI8
VCwgVT4+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
c3RkOjpwYWlyPFQsIFU+JiBwYWlyKQpAQCAtMjY2LDM1ICsyNjIsMjQgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29k
ZXI8QXRvbWljU3RyaW5nPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25z
dCBBdG9taWNTdHJpbmcmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIEF0b21p
Y1N0cmluZyYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYsIGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIEF0b21pY1N0cmluZyYpOwogfTsKIAogdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29kZXI8Q1N0cmluZz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiwgY29uc3QgQ1N0cmluZyYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQ1N0
cmluZyYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIGNvbnN0IENTdHJpbmcmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
ZGVjb2RlKERlY29kZXImLCBDU3RyaW5nJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2Rl
cjxTdHJpbmc+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN0cmlu
ZyYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU3RyaW5nJik7Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
byYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiwgY29uc3QgU3RyaW5nJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGRlY29kZShEZWNvZGVyJiwgU3RyaW5nJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2Rl
cjxTSEExOjpEaWdlc3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0
IFNIQTE6OkRpZ2VzdCYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU0hBMTo6
RGlnZXN0Jik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3JlOjpIVFRQSGVh
ZGVyTWFwPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3Jl
OjpIVFRQSGVhZGVyTWFwJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJD
b3JlOjpIVFRQSGVhZGVyTWFwJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiwgY29uc3QgU0hBMTo6RGlnZXN0Jik7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU0hBMTo6RGlnZXN0Jik7CiB9Owog
CiB9CiB9Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0RlY29kZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuY3Bw
CShyZXZpc2lvbiAyMTAzMzApCShmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwOjIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL0RlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZURlY29kZXIuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5j
bHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVz
cGFjZSBOZXR3b3JrQ2FjaGUgeworCitEZWNvZGVyOjpEZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1
ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCisgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBt
X2J1ZmZlclBvc2l0aW9uKGJ1ZmZlcikKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlciArIGJ1ZmZl
clNpemUpCit7Cit9CisKK0RlY29kZXI6On5EZWNvZGVyKCkKK3sKK30KKworYm9vbCBEZWNvZGVy
OjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemVfdCBzaXplKSBjb25zdAoreworICAg
IHJldHVybiBzaXplIDw9IHN0YXRpY19jYXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZl
clBvc2l0aW9uKTsKK30KKworYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKCFidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtZW1jcHkoZGF0
YSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZSk7CisgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXpl
OworCisgICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Citib29s
IERlY29kZXI6OmRlY29kZU51bWJlcihUeXBlJiB2YWx1ZSkKK3sKKyAgICBpZiAoIWJ1ZmZlcklz
TGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZW9mKHZhbHVlKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG1lbWNweSgmdmFsdWUsIG1fYnVmZmVyUG9zaXRpb24sIHNpemVvZih2YWx1ZSkp
OworICAgIG1fYnVmZmVyUG9zaXRpb24gKz0gc2l6ZW9mKFR5cGUpOworCisgICAgRW5jb2Rlcjo6
dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKGJvb2wmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4g
ZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ4X3Qm
IHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wg
RGVjb2Rlcjo6ZGVjb2RlKHVpbnQxNl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZU51
bWJlcihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OmRlY29kZSh1aW50MzJfdCYgcmVzdWx0
KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKK30KKworYm9vbCBEZWNvZGVy
OjpkZWNvZGUodWludDY0X3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJl
c3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKGludDMyX3QmIHJlc3VsdCkKK3sKKyAg
ICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2Rl
KGludDY0X3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9
CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKGZsb2F0JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRl
Y29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OmRlY29kZShkb3VibGUmIHJl
c3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVj
b2Rlcjo6dmVyaWZ5Q2hlY2tzdW0oKQoreworICAgIFNIQTE6OkRpZ2VzdCBjb21wdXRlZEhhc2g7
CisgICAgbV9zaGExLmNvbXB1dGVIYXNoKGNvbXB1dGVkSGFzaCk7CisKKyAgICBTSEExOjpEaWdl
c3Qgc2F2ZWRIYXNoOworICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHNhdmVkSGFzaC5k
YXRhKCksIHNpemVvZihzYXZlZEhhc2gpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGNvbXB1dGVkSGFzaCA9PSBzYXZlZEhhc2g7Cit9CisKK30KK30KKworI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmNwcAkocmV2aXNpb24gMjEwMzMw
KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDE0ICsyNCwxMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgiCisjaW5jbHVkZSAiRGVjb2Rlci5oIgogCi0jaWYg
RU5BQkxFKE5FVFdPUktfQ0FDSEUpCisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0VuY29kZXIu
aD4KIAotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNl
IFBlcnNpc3RlbmNlIHsKIAogRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIs
IHNpemVfdCBidWZmZXJTaXplKQogICAgIDogbV9idWZmZXIoYnVmZmVyKQpAQCAtMTMzLDUgKzEz
MSwzIEBAIGJvb2wgRGVjb2Rlcjo6dmVyaWZ5Q2hlY2tzdW0oKQogCiB9CiB9Ci0KLSNlbmRpZgpJ
bmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaAkocmV2aXNpb24gMjEwMzMwKQko
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNv
ZGVyLmg6MjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3
b3JrQ2FjaGVEZWNvZGVyX2gKKyNkZWZpbmUgTmV0d29ya0NhY2hlRGVjb2Rlcl9oCisKKyNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVyLmgiCisj
aW5jbHVkZSA8d3RmL1NIQTEuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0
d29ya0NhY2hlIHsKKworY2xhc3MgRGVjb2RlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgRGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBi
dWZmZXJTaXplKTsKKyAgICB2aXJ0dWFsIH5EZWNvZGVyKCk7CisKKyAgICBzaXplX3QgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQorICAgIHNpemVfdCBj
dXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3NpdGlvbiAtIG1fYnVmZmVy
OyB9CisKKyAgICBib29sIHZlcmlmeUNoZWNrc3VtKCk7CisKKyAgICBib29sIGRlY29kZUZpeGVk
TGVuZ3RoRGF0YSh1aW50OF90Kiwgc2l6ZV90KTsKKworICAgIGJvb2wgZGVjb2RlKGJvb2wmKTsK
KyAgICBib29sIGRlY29kZSh1aW50OF90Jik7CisgICAgYm9vbCBkZWNvZGUodWludDE2X3QmKTsK
KyAgICBib29sIGRlY29kZSh1aW50MzJfdCYpOworICAgIGJvb2wgZGVjb2RlKHVpbnQ2NF90Jik7
CisgICAgYm9vbCBkZWNvZGUoaW50MzJfdCYpOworICAgIGJvb2wgZGVjb2RlKGludDY0X3QmKTsK
KyAgICBib29sIGRlY29kZShmbG9hdCYpOworICAgIGJvb2wgZGVjb2RlKGRvdWJsZSYpOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBkZWNvZGVFbnVtKFQmIHJlc3VsdCkKKyAgICB7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpIDw9IDgsICJFbnVtIHR5cGUgVCBtdXN0
IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBiaXRzISIpOworCisgICAgICAgIHVpbnQ2NF90IHZhbHVl
OworICAgICAgICBpZiAoIWRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxUPih2YWx1ZSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wg
ZGVjb2RlKFQmIHQpCisgICAgeworICAgICAgICByZXR1cm4gQ29kZXI8VD46OmRlY29kZSgqdGhp
cywgdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGJ1ZmZl
cklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IG51bUVsZW1lbnRzKSBjb25zdAorICAgIHsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlLCAiVHlw
ZSBUIG11c3QgaGF2ZSBhIGZpeGVkLCBrbm93biBlbmNvZGVkIHNpemUhIik7CisKKyAgICAgICAg
aWYgKG51bUVsZW1lbnRzID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAvIHNp
emVvZihUKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gYnVm
ZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CisgICAg
fQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENEZWNvZGVyID0gZmFsc2U7CisKK3ByaXZh
dGU6CisgICAgYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemVfdCkgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gYm9vbCBkZWNvZGVOdW1iZXIoVHlwZSYpOwor
CisgICAgY29uc3QgdWludDhfdCogbV9idWZmZXI7CisgICAgY29uc3QgdWludDhfdCogbV9idWZm
ZXJQb3NpdGlvbjsKKyAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlckVuZDsKKworICAgIFNIQTEg
bV9zaGExOworfTsKKworfSAKK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9w
ZXJzaXN0ZW5jZS9EZWNvZGVyLmgJKHJldmlzaW9uIDIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMzkgKzIzLDM2IEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOZXR3
b3JrQ2FjaGVEZWNvZGVyX2gKLSNkZWZpbmUgTmV0d29ya0NhY2hlRGVjb2Rlcl9oCisjcHJhZ21h
IG9uY2UKIAotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotCi0jaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlQ29kZXIuaCIKICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0
ZW5jZS9Db2Rlci5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgeworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiBjbGFzcyBE
ZWNvZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBEZWNv
ZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOwotICAgIHZpcnR1
YWwgfkRlY29kZXIoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2Rlcihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
fkRlY29kZXIoKTsKIAogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZl
ckVuZCAtIG1fYnVmZmVyOyB9CiAgICAgc2l6ZV90IGN1cnJlbnRPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX2J1ZmZlclBvc2l0aW9uIC0gbV9idWZmZXI7IH0KIAotICAgIGJvb2wgdmVyaWZ5Q2hl
Y2tzdW0oKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB2ZXJpZnlDaGVja3N1bSgpOwog
Ci0gICAgYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCosIHNpemVfdCk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBz
aXplX3QpOwogCi0gICAgYm9vbCBkZWNvZGUoYm9vbCYpOwotICAgIGJvb2wgZGVjb2RlKHVpbnQ4
X3QmKTsKLSAgICBib29sIGRlY29kZSh1aW50MTZfdCYpOwotICAgIGJvb2wgZGVjb2RlKHVpbnQz
Ml90Jik7Ci0gICAgYm9vbCBkZWNvZGUodWludDY0X3QmKTsKLSAgICBib29sIGRlY29kZShpbnQz
Ml90Jik7Ci0gICAgYm9vbCBkZWNvZGUoaW50NjRfdCYpOwotICAgIGJvb2wgZGVjb2RlKGZsb2F0
Jik7Ci0gICAgYm9vbCBkZWNvZGUoZG91YmxlJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgZGVjb2RlKGJvb2wmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWlu
dDhfdCYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50MTZfdCYpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50MzJfdCYpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50NjRfdCYpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGRlY29kZShpbnQzMl90Jik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
ZGVjb2RlKGludDY0X3QmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUoZmxv
YXQmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUoZG91YmxlJik7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZUVudW0oVCYgcmVzdWx0KQogICAgIHsK
QEAgLTg4LDcgKzg1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBib29sIGlzSVBDRGVj
b2RlciA9IGZhbHNlOwogCiBwcml2YXRlOgotICAgIGJvb2wgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihzaXplX3QpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGJ1ZmZl
cklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90KSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUeXBlPiBib29sIGRlY29kZU51bWJlcihUeXBlJik7CiAKICAgICBjb25zdCB1aW50OF90
KiBtX2J1ZmZlcjsKQEAgLTEwMSw1ICs5OCwzIEBAIHByaXZhdGU6CiB9IAogfQogCi0jZW5kaWYK
LSNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5jcHAJKHJldmlz
aW9uIDIxMDMzMCkJKGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRW5jb2Rlci5jcHA6MjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5j
b2Rlci5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKK25hbWVzcGFjZSBXZWJLaXQg
eworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CisKK0VuY29kZXI6OkVuY29kZXIoKQoreworfQor
CitFbmNvZGVyOjp+RW5jb2RlcigpCit7Cit9CisKK3VpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6
ZV90IHNpemUpCit7CisgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwor
ICAgIG1fYnVmZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CisgICAgcmV0dXJuIG1f
YnVmZmVyLmRhdGEoKSArIG5ld1Bvc2l0aW9uOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNo
ZWNrc3VtRm9yRGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6
ZSkKK3sKKyAgICBhdXRvIHR5cGVTYWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOworICAgIHNo
YTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9m
KHR5cGVTYWx0KSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKK30KKwordm9pZCBF
bmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUpCit7CisgICAgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7
CisKKyAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemUpOworICAgIG1lbWNweShidWZmZXIs
IGRhdGEsIHNpemUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBFbmNvZGVy
OjplbmNvZGVOdW1iZXIoVHlwZSB2YWx1ZSkKK3sKKyAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1
bUZvck51bWJlcihtX3NoYTEsIHZhbHVlKTsKKworICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3co
c2l6ZW9mKFR5cGUpKTsKKyAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUsIHNpemVvZihUeXBlKSk7
Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGJvb2wgdmFsdWUpCit7CisgICAgZW5jb2RlTnVt
YmVyKHZhbHVlKTsKK30KKwordm9pZCBFbmNvZGVyOjplbmNvZGUodWludDhfdCB2YWx1ZSkKK3sK
KyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lkIEVuY29kZXI6OmVuY29kZSh1aW50
MTZfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lkIEVuY29k
ZXI6OmVuY29kZSh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwor
fQorCit2b2lkIEVuY29kZXI6OmVuY29kZSh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVO
dW1iZXIodmFsdWUpOworfQorCit2b2lkIEVuY29kZXI6OmVuY29kZShpbnQzMl90IHZhbHVlKQor
eworICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGlu
dDY0X3QgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30KKwordm9pZCBFbmNv
ZGVyOjplbmNvZGUoZmxvYXQgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30K
Kwordm9pZCBFbmNvZGVyOjplbmNvZGUoZG91YmxlIHZhbHVlKQoreworICAgIGVuY29kZU51bWJl
cih2YWx1ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQoreworICAgIFNI
QTE6OkRpZ2VzdCBoYXNoOworICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKKyAgICBlbmNv
ZGVGaXhlZExlbmd0aERhdGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKK30KKworfQorfQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuY3BwCShyZXZp
c2lvbiAyMTAzMzApCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsMTIgKzI0LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKKyNpbmNsdWRlICJFbmNvZGVy
LmgiCiAKLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyNpbmNsdWRlICJTSEExLmgiCiAKLW5h
bWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CituYW1lc3BhY2UgV1RG
IHsKK25hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKIEVuY29kZXI6OkVuY29kZXIoKQogewpAQCAt
MTI0LDUgKzEyNCwzIEBAIHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogCiB9CiB9Ci0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaAkocmV2aXNpb24g
MjEwMzMwKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVFbmNvZGVyLmg6MjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5j
b2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBOZXR3b3JrQ2FjaGVFbmNvZGVyX2gKKyNkZWZpbmUgTmV0d29ya0NhY2hlRW5jb2Rlcl9o
CisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNv
ZGVyLmgiCisjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CisKK2NsYXNzIEVu
Y29kZXI7CitjbGFzcyBEYXRhUmVmZXJlbmNlOworCitjbGFzcyBFbmNvZGVyIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBFbmNvZGVyKCk7CisgICAgdmlydHVh
bCB+RW5jb2RlcigpOworCisgICAgdm9pZCBlbmNvZGVDaGVja3N1bSgpOworICAgIHZvaWQgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVFbnVtKFQgdCkKKyAgICB7CisgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihUKSA8PSBzaXplb2YodWludDY0X3QpLCBlbnVtX3R5cGVfbXVzdF9u
b3RfYmVfbGFyZ2VyX3RoYW5fNjRfYml0cyk7CisKKyAgICAgICAgZW5jb2RlKHN0YXRpY19jYXN0
PHVpbnQ2NF90Pih0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBl
bmNvZGUoY29uc3QgVCYgdCkKKyAgICB7CisgICAgICAgIENvZGVyPFQ+OjplbmNvZGUoKnRoaXMs
IHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEVuY29kZXImIG9wZXJhdG9y
PDwoY29uc3QgVCYgdCkKKyAgICB7CisgICAgICAgIGVuY29kZSh0KTsKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKworICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQorICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9CisKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1
bUZvckRhdGEoU0hBMSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUeXBlPiBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwg
VHlwZSk7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0lQQ0VuY29kZXIgPSBmYWxzZTsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIGVuY29kZShib29sKTsKKyAgICB2b2lkIGVuY29kZSh1aW50OF90
KTsKKyAgICB2b2lkIGVuY29kZSh1aW50MTZfdCk7CisgICAgdm9pZCBlbmNvZGUodWludDMyX3Qp
OworICAgIHZvaWQgZW5jb2RlKHVpbnQ2NF90KTsKKyAgICB2b2lkIGVuY29kZShpbnQzMl90KTsK
KyAgICB2b2lkIGVuY29kZShpbnQ2NF90KTsKKyAgICB2b2lkIGVuY29kZShmbG9hdCk7CisgICAg
dm9pZCBlbmNvZGUoZG91YmxlKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IHZvaWQg
ZW5jb2RlTnVtYmVyKFR5cGUpOworCisgICAgdWludDhfdCogZ3JvdyhzaXplX3QpOworCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+IHN0cnVjdCBTYWx0OworCisgICAgVmVjdG9yPHVpbnQ4
X3QsIDQwOTY+IG1fYnVmZmVyOworICAgIFNIQTEgbV9zaGExOworfTsKKwordGVtcGxhdGUgPD4g
c3RydWN0IEVuY29kZXI6OlNhbHQ8Ym9vbD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUg
PSAzOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8dWludDhfdD4geyBzdGF0
aWMgY29uc3QgIHVuc2lnbmVkIHZhbHVlID0gNTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNv
ZGVyOjpTYWx0PHVpbnQxNl90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDc7IH07
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50MzJfdD4geyBzdGF0aWMgY29u
c3QgdW5zaWduZWQgdmFsdWUgPSAxMTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpT
YWx0PHVpbnQ2NF90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDEzOyB9OwordGVt
cGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8aW50MzJfdD4geyBzdGF0aWMgY29uc3QgdW5z
aWduZWQgdmFsdWUgPSAxNzsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGlu
dDY0X3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMTk7IH07Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDxmbG9hdD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFs
dWUgPSAyMzsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGRvdWJsZT4geyBz
dGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAyOTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBF
bmNvZGVyOjpTYWx0PHVpbnQ4X3QqPiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDEw
MTsgfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEVuY29kZXI6OnVwZGF0ZUNo
ZWNrc3VtRm9yTnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCit7CisgICAgYXV0byB0eXBl
U2FsdCA9IFNhbHQ8VHlwZT46OnZhbHVlOworICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7CisgICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUp
KTsKK30KKworfQorfQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3Rl
bmNlL0VuY29kZXIuaAkocmV2aXNpb24gMjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lz
dGVuY2UvRW5jb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNyArMjMsMTQgQEAKICAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE5ldHdvcmtDYWNo
ZUVuY29kZXJfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVFbmNvZGVyX2gKKyNwcmFnbWEgb25jZQog
Ci0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0KLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2Rl
ci5oIgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9Db2Rlci5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lz
dGVuY2UgewogCiBjbGFzcyBFbmNvZGVyOwogY2xhc3MgRGF0YVJlZmVyZW5jZTsKQEAgLTQxLDEx
ICszOCwxMSBAQCBjbGFzcyBEYXRhUmVmZXJlbmNlOwogY2xhc3MgRW5jb2RlciB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRW5jb2RlcigpOwotICAgIHZpcnR1
YWwgfkVuY29kZXIoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlcigpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCi0gICAgdm9pZCBlbmNvZGVDaGVja3N1bSgp
OwotICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUNoZWNrc3VtKCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVFbnVtKFQg
dCkKICAgICB7CkBAIC02OCwyMSArNjUsMjEgQEAgcHVibGljOgogICAgIGNvbnN0IHVpbnQ4X3Qq
IGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQogICAgIHNpemVfdCBi
dWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9CiAKLSAgICBzdGF0
aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZv
ckRhdGEoU0hBMSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUeXBlPiBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlw
ZSk7CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0lQQ0VuY29kZXIgPSBmYWxzZTsKIAogcHJp
dmF0ZToKLSAgICB2b2lkIGVuY29kZShib29sKTsKLSAgICB2b2lkIGVuY29kZSh1aW50OF90KTsK
LSAgICB2b2lkIGVuY29kZSh1aW50MTZfdCk7Ci0gICAgdm9pZCBlbmNvZGUodWludDMyX3QpOwot
ICAgIHZvaWQgZW5jb2RlKHVpbnQ2NF90KTsKLSAgICB2b2lkIGVuY29kZShpbnQzMl90KTsKLSAg
ICB2b2lkIGVuY29kZShpbnQ2NF90KTsKLSAgICB2b2lkIGVuY29kZShmbG9hdCk7Ci0gICAgdm9p
ZCBlbmNvZGUoZG91YmxlKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoYm9v
bCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKHVpbnQ4X3QpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZSh1aW50MTZfdCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZW5jb2RlKHVpbnQzMl90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGUodWludDY0X3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShp
bnQzMl90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoaW50NjRfdCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGZsb2F0KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBlbmNvZGUoZG91YmxlKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5
cGU+IHZvaWQgZW5jb2RlTnVtYmVyKFR5cGUpOwogCkBAIC0xMTUsNiArMTEyLDMgQEAgdm9pZCBF
bmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSAogCiB9CiB9Ci0KLSNlbmRpZgotI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2MiBAQAorMjAxNy0wMS0wOCAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBjYWNoZSBjb2Rl
cnMgdG8gV1RGCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjY4MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxBdG9taWNTdHJpbmc+OjplbmNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPEF0b21pY1N0cmluZz46OmRl
Y29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8Q1N0
cmluZz46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
Q29kZXI8Q1N0cmluZz46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpkZWNvZGVTdHJpbmdUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxTdHJpbmc+OjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8U0hBMTo6RGln
ZXN0Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpD
b2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVDb2RlcnMuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI8c3RkOjpvcHRpb25hbDxUPj46OmVuY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8c3RkOjpvcHRpb25hbDxUPj46OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXJzQ29jb2EuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZUNG
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlQ0ZE
YXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjplbmNvZGVTZWNU
cnVzdFJlZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2Rl
U2VjVHJ1c3RSZWYpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVu
Y29kZUNlcnRpZmljYXRlQ2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OmRlY29kZUNlcnRpZmljYXRlQ2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmg6IFJlbW92ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVu
dHJ5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6ZW5jb2RlQXNT
dG9yYWdlUmVjb3JkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6ZGVj
b2RlU3RvcmFnZVJlY29yZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlS2V5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpLZXk6OmVuY29k
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5OjpkZWNvZGUpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OmRlY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjplbmNvZGVSZWNvcmRNZXRhRGF0YSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlSW5mbzo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdWJyZXNvdXJjZUluZm86OmRlY29kZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3Rv
cmFnZVJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2Vz
RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6ZW5j
b2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVu
dEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMTctMDEtMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbW92ZSBQYXNzUmVmUHRyIHVzZSBmcm9tICJpbnNwZWN0b3IiLCAicGxhdGZv
cm0vc3FsIiwgYW5kICJwbGF0Zm9ybS90ZXh0IgpJbmRleDogU291cmNlL1dlYktpdDIvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMTAsOCArMTEwLDYgQEAgc2V0KE5ldHdvcmtQcm9jZXNzX0NPTU1PTl9TT1VS
Q0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3Bw
CiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAogICAgIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCi0gICAgTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVudHJ5LmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZp
bGVTeXN0ZW0uY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNw
cApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVDb2Rlci5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2Rlci5oCShub25leGlzdGVudCkK
QEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTmV0d29ya0NhY2hl
Q29kZXJfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVDb2Rlcl9oCi0KLSNpZiBFTkFCTEUoTkVUV09S
S19DQUNIRSkKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsK
LQotY2xhc3MgRGVjb2RlcjsKLWNsYXNzIEVuY29kZXI7Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29kZXIgewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBUJiB0KQotICAgIHsKLSAgICAgICAgdC5lbmNvZGUoZW5jb2Rlcik7Ci0gICAg
fQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFQmIHQpCi0gICAg
ewotICAgICAgICByZXR1cm4gVDo6ZGVjb2RlKGRlY29kZXIsIHQpOwotICAgIH0KLX07Ci0KLX0K
LX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAkocmV2aXNpb24g
MjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlQ29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMyICsyOCw4IEBACiAKICNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1l
c3BhY2UgTmV0d29ya0NhY2hlIHsKLQotdm9pZCBDb2RlcjxBdG9taWNTdHJpbmc+OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCi17Ci0g
ICAgZW5jb2RlciA8PCBhdG9taWNTdHJpbmcuc3RyaW5nKCk7Ci19Ci0KLWJvb2wgQ29kZXI8QXRv
bWljU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEF0b21pY1N0cmluZyYgYXRvbWlj
U3RyaW5nKQotewotICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
dHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdG9taWNTdHJpbmcgPSBzdHJp
bmc7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgLy8gU3BlY2lh
bCBjYXNlIHRoZSBudWxsIHN0cmluZy4KLSAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIGVuY29kZXIgPDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0
aCgpOwotICAgIGVuY29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5kYXRhKCkpLCBs
ZW5ndGgpOwotfQotCi1ib29sIENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgQ1N0cmluZyYgcmVzdWx0KQotewotICAgIHVpbnQzMl90IGxlbmd0aDsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChs
ZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7Ci0gICAgICAg
IC8vIFRoaXMgaXMgdGhlIG51bGwgc3RyaW5nLgotICAgICAgICByZXN1bHQgPSBDU3RyaW5nKCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIEJlZm9yZSBhbGxvY2F0aW5n
IHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcgZW5v
dWdoLgotICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPGNoYXI+
KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNoYXIqIGJ1ZmZlcjsKLSAg
ICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZm
ZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmVzdWx0ID0gc3RyaW5nOwotICAgIHJldHVybiB0cnVlOwotfQotCi0KLXZvaWQgQ29k
ZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5n
KQotewotICAgIC8vIFNwZWNpYWwgY2FzZSB0aGUgbnVsbCBzdHJpbmcuCi0gICAgaWYgKHN0cmlu
Zy5pc051bGwoKSkgewotICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVpbnQzMl90IGxl
bmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQo
KTsKLQotICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQp
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzOCgpKSwgbGVuZ3RoICogc2l6ZW9mKExD
aGFyKSk7Ci0gICAgZWxzZQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVyczE2KCkpLCBs
ZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgZGVjb2RlU3RyaW5nVGV4dChEZWNvZGVyJiBkZWNv
ZGVyLCB1aW50MzJfdCBsZW5ndGgsIFN0cmluZyYgcmVzdWx0KQotewotICAgIC8vIEJlZm9yZSBh
bGxvY2F0aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBp
cyBiaWcgZW5vdWdoLgotICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250
YWluPENoYXJhY3RlclR5cGU+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKLSAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpjcmVh
dGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0
aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICByZXN1bHQgPSBzdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7ICAgIAotfQotCi1ib29sIENv
ZGVyPFN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTdHJpbmcmIHJlc3VsdCkKLXsK
LSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShsZW5ndGgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobGVuZ3RoID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSkgewotICAgICAgICAvLyBUaGlzIGlzIHRoZSBudWxsIHN0
cmluZy4KLSAgICAgICAgcmVzdWx0ID0gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGJvb2wgaXM4Qml0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXM4Qml0
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGlzOEJpdCkKLSAgICAgICAgcmV0
dXJuIGRlY29kZVN0cmluZ1RleHQ8TENoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKLSAg
ICByZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxVQ2hhcj4oZGVjb2RlciwgbGVuZ3RoLCByZXN1bHQp
OwotfQotCi0KLXZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQotewotICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKLX0KLQotYm9vbCBD
b2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU0hBMTo6RGlnZXN0
JiBkaWdlc3QpCi17Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRp
Z2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKLX0KK25hbWVzcGFjZSBXVEYgeworbmFtZXNw
YWNlIFBlcnNpc3RlbmNlIHsKIAogLy8gU3RvcmUgY29tbW9uIEhUVFAgaGVhZGVycyBhcyBzdHJp
bmdzIGluc3RlYWQgb2YgdXNpbmcgdGhlaXIgdmFsdWUgaW4gdGhlIEhUVFBIZWFkZXJOYW1lIGVu
dW1lcmF0aW9uCiAvLyBzbyB0aGF0IHRoZSBoZWFkZXJzIHN0b3JlZCBpbiB0aGUgY2FjaGUgc3Rh
eXMgdmFsaWQgZXZlbiBhZnRlciBIVFRQSGVhZGVyTmFtZS5pbiBnZXRzIHVwZGF0ZWQuCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVDb2RlcnMuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDggKzI3LDYgQEAKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCi0jaW5jbHVkZSAi
TmV0d29ya0NhY2hlRGVjb2Rlci5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SFRUUEhlYWRlck1hcC5oPgogI2luY2x1ZGUgPHV0aWxpdHk+CkBAIC0zNywyNTkgKzM1LDE4IEBA
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmg+Cisj
aW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lz
dGVuY2UvRW5jb2Rlci5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3Jr
Q2FjaGUgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQ29kZXI8
c3RkOjpwYWlyPFQsIFU+PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IHN0ZDo6cGFpcjxULCBVPiYgcGFpcikKLSAgICB7Ci0gICAgICAgIGVuY29kZXIg
PDwgcGFpci5maXJzdCA8PCBwYWlyLnNlY29uZDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwgc3RkOjpwYWlyPFQsIFU+JiBwYWlyKQotICAgIHsKLSAg
ICAgICAgVCBmaXJzdDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShmaXJzdCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgVSBzZWNvbmQ7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoc2Vjb25kKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBwYWlyLmZpcnN0ID0gZmlyc3Q7Ci0gICAgICAgIHBhaXIuc2Vjb25kID0gc2Vjb25kOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXAs
IHR5cGVuYW1lIFBlcmlvZD4gc3RydWN0IENvZGVyPHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAs
IFBlcmlvZD4+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiYgZHVyYXRpb24pCi0gICAgewot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8UmVwPjo6dmFsdWUgJiYgc3Rk
Ojppc19zaWduZWQ8UmVwPjo6dmFsdWUgJiYgc2l6ZW9mKFJlcCkgPD0gc2l6ZW9mKGludDY0X3Qp
LCAiU2VyaWFsaXphdGlvbiBvZiB0aGlzIFJlcCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBP
bmx5IHNpZ25lZCBpbnRlZ2VyIHR5cGUgd2hpY2ggY2FuIGJlIGZpdCBpbiBhbiBpbnQ2NF90IGlz
IGN1cnJlbnRseSBzdXBwb3J0ZWQuIik7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
aW50NjRfdD4oZHVyYXRpb24uY291bnQoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4m
IHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIGludDY0X3QgY291bnQ7Ci0gICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoY291bnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBy
ZXN1bHQgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+KHN0YXRpY19jYXN0PFJl
cD4oY291bnQpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvZGVyPHN0ZDo6b3B0aW9uYWw8VD4+IHsKLSAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpvcHRpb25hbDxUPiYgb3B0
aW9uYWwpCi0gICAgewotICAgICAgICBpZiAoIW9wdGlvbmFsKSB7Ci0gICAgICAgICAgICBlbmNv
ZGVyIDw8IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAgICAgIGVuY29kZXIgPDwgb3B0aW9uYWwudmFs
dWUoKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIHN0ZDo6b3B0aW9uYWw8VD4mIG9wdGlvbmFsKQotICAgIHsKLSAgICAgICAgYm9vbCBpc0Vu
Z2FnZWQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFbmdhZ2VkKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaXNFbmdhZ2VkKSB7Ci0g
ICAgICAgICAgICBvcHRpb25hbCA9IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBUIHZhbHVlOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCi0gICAgICAgIG9wdGlvbmFsID0gV1RGTW92ZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZh
bHVlVHlwZT4gc3RydWN0IENvZGVyPFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlw
ZT4+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RG
OjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKLSAgICB7Ci0gICAgICAg
IGVuY29kZXIgPDwgcGFpci5rZXkgPDwgcGFpci52YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwg
VmFsdWVUeXBlPiYgcGFpcikKLSAgICB7Ci0gICAgICAgIEtleVR5cGUga2V5OwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgVmFsdWVUeXBlIHZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBwYWlyLmtleSA9IGtleTsK
LSAgICAgICAgcGFpci52YWx1ZSA9IHZhbHVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTxib29sIGZpeGVkU2l6ZUVsZW1lbnRzLCB0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+IHN0cnVjdCBWZWN0b3JDb2RlcjsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8ZmFsc2UsIFQs
IGlubGluZUNhcGFjaXR5PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIGVuY29kZXIgPDwgdmVjdG9yW2ldOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0g
ICAgewotICAgICAgICB1aW50NjRfdCBzaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT4gdG1wOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICAgICAgVCBlbGVtZW50OwotICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShlbGVtZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHRtcC5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB0bXAuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgdmVjdG9yLnN3YXAodG1w
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8dHJ1ZSwgVCwgaW5s
aW5lQ2FwYWNpdHk+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7Ci0gICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9m
KFQpKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIHVp
bnQ2NF90IHNpemU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2luY2Ugd2Uga25vdyB0aGUgdG90YWwg
c2l6ZSBvZiB0aGUgZWxlbWVudHMsIHdlIGNhbiBhbGxvY2F0ZSB0aGUgdmVjdG9yIGluCi0gICAg
ICAgIC8vIG9uZSBmZWxsIHN3b29wLiBCZWZvcmUgYWxsb2NhdGluZyB3ZSBtdXN0IGhvd2V2ZXIg
bWFrZSBzdXJlIHRoYXQgdGhlIGRlY29kZXIgYnVmZmVyCi0gICAgICAgIC8vIGlzIGJpZyBlbm91
Z2guCi0gICAgICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPFQ+
KHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT4gdGVtcDsKLSAgICAgICAgdGVtcC5yZXNpemUoc2l6ZSk7Ci0KLSAgICAg
ICAgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4odGVtcC5kYXRhKCkpLCBzaXplICogc2l6ZW9mKFQpKTsKLQotICAgICAgICB2ZWN0b3Iuc3dh
cCh0ZW1wKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgQ29kZXI8VmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5Pj4gOiBWZWN0b3JDb2RlcjxzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVl
LCBULCBpbmxpbmVDYXBhY2l0eT4geyB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+IHN0cnVjdCBDb2RlcjxIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4+IHsKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
ZywgTWFwcGVkVHJhaXRzQXJnPiBIYXNoTWFwVHlwZTsKLQotICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKLSAgICB7Ci0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhhc2hNYXAuc2l6ZSgpKTsK
LSAgICAgICAgZm9yICh0eXBlbmFtZSBIYXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBo
YXNoTWFwLmJlZ2luKCksIGVuZCA9IGhhc2hNYXAuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIGVuY29kZXIgPDwgKml0OwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKLSAgICB7Ci0gICAgICAg
IHVpbnQ2NF90IGhhc2hNYXBTaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc2hN
YXBTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBIYXNoTWFwVHlw
ZSB0ZW1wSGFzaE1hcDsKLSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hNYXBT
aXplOyArK2kpIHsKLSAgICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBNYXBwZWRB
cmcgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2
YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAo
IXRlbXBIYXNoTWFwLmFkZChrZXksIHZhbHVlKS5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVGhlIGhhc2ggbWFwIGFscmVhZHkgaGFzIHRoZSBzcGVjaWZpZWQga2V5LCBiYWlsLgot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGhhc2hNYXAuc3dhcCh0ZW1wSGFzaE1hcCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQ29kZXI8SGFzaFNldDxLZXlBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZz4+IHsKLSAgICB0eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmc+IEhhc2hTZXRUeXBlOwotCi0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hTZXRUeXBlJiBoYXNoU2V0KQotICAgIHsKLSAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaGFzaFNldC5zaXplKCkpOwot
ICAgICAgICBmb3IgKHR5cGVuYW1lIEhhc2hTZXRUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IGhh
c2hTZXQuYmVnaW4oKSwgZW5kID0gaGFzaFNldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgZW5jb2RlciA8PCAqaXQ7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIEhhc2hTZXRUeXBlJiBoYXNoU2V0KQotICAgIHsKLSAgICAgICAg
dWludDY0X3QgaGFzaFNldFNpemU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzaFNl
dFNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEhhc2hTZXRUeXBl
IHRlbXBIYXNoU2V0OwotICAgICAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgaGFzaFNldFNp
emU7ICsraSkgewotICAgICAgICAgICAgS2V5QXJnIGtleTsKLSAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoa2V5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIGlmICghdGVtcEhhc2hTZXQuYWRkKGtleSkuaXNOZXdFbnRyeSkgewotICAgICAgICAg
ICAgICAgIC8vIFRoZSBoYXNoIG1hcCBhbHJlYWR5IGhhcyB0aGUgc3BlY2lmaWVkIGtleSwgYmFp
bC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBoYXNoU2V0LnN3YXAodGVtcEhhc2hTZXQpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxBdG9taWNTdHJpbmc+
IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IEF0b21pY1N0cmluZyYp
OwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQXRvbWljU3RyaW5nJik7Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxDU3RyaW5nPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImLCBjb25zdCBDU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERl
Y29kZXImLCBDU3RyaW5nJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxTdHJpbmc+
IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN0cmluZyYpOwotICAg
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU3RyaW5nJik7Ci19OworbmFtZXNwYWNlIFdU
RiB7CituYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwogICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CiB9OwogCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb2RlcjxTSEExOjpEaWdlc3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYsIGNvbnN0IFNIQTE6OkRpZ2VzdCYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShE
ZWNvZGVyJiwgU0hBMTo6RGlnZXN0Jik7Ci19OwotCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxX
ZWJDb3JlOjpIVFRQSGVhZGVyTWFwPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXIm
LCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImLCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnNDb2NvYS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXJzQ29jb2EuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnNDb2NvYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRlIDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJ
Lmg+CiAjZW5kaWYKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hl
IHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogc3RhdGljIHZv
aWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZXIsIENGRGF0YVJlZiBkYXRhKQogewpJbmRl
eDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwCShub25leGlz
dGVudCkKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRGVjb2Rlci5oIgotCi0jaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEUpCi0KLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVyLmgiCi0K
LW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7Ci0KLURlY29kZXI6
OkRlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKLSAgICA6
IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAsIG1fYnVmZmVyUG9zaXRpb24oYnVmZmVyKQotICAgICwg
bV9idWZmZXJFbmQoYnVmZmVyICsgYnVmZmVyU2l6ZSkKLXsKLX0KLQotRGVjb2Rlcjo6fkRlY29k
ZXIoKQotewotfQotCi1ib29sIERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4o
c2l6ZV90IHNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNpemUgPD0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX2J1ZmZlckVuZCAtIG1fYnVmZmVyUG9zaXRpb24pOwotfQotCi1ib29sIERlY29kZXI6
OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKLSAg
ICBpZiAoIWJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlclBvc2l0aW9uLCBzaXplKTsKLSAg
ICBtX2J1ZmZlclBvc2l0aW9uICs9IHNpemU7Ci0KLSAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1
bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlTnVtYmVyKFR5cGUmIHZh
bHVlKQotewotICAgIGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplb2YodmFs
dWUpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbWVtY3B5KCZ2YWx1ZSwgbV9idWZm
ZXJQb3NpdGlvbiwgc2l6ZW9mKHZhbHVlKSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXpl
b2YoVHlwZSk7Ci0KLSAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvck51bWJlcihtX3NoYTEs
IHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUoYm9v
bCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKLX0KLQotYm9v
bCBEZWNvZGVyOjpkZWNvZGUodWludDhfdCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVO
dW1iZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDE2X3QmIHJlc3Vs
dCkKLXsKLSAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Ci19Ci0KLWJvb2wgRGVjb2Rl
cjo6ZGVjb2RlKHVpbnQzMl90JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZU51bWJlcihy
ZXN1bHQpOwotfQotCi1ib29sIERlY29kZXI6OmRlY29kZSh1aW50NjRfdCYgcmVzdWx0KQotewot
ICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNv
ZGUoaW50MzJfdCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsK
LX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUoaW50NjRfdCYgcmVzdWx0KQotewotICAgIHJldHVy
biBkZWNvZGVOdW1iZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUoZmxvYXQm
IHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Ci19Ci0KLWJvb2wg
RGVjb2Rlcjo6ZGVjb2RlKGRvdWJsZSYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVOdW1i
ZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSgpCi17Ci0gICAg
U0hBMTo6RGlnZXN0IGNvbXB1dGVkSGFzaDsKLSAgICBtX3NoYTEuY29tcHV0ZUhhc2goY29tcHV0
ZWRIYXNoKTsKLQotICAgIFNIQTE6OkRpZ2VzdCBzYXZlZEhhc2g7Ci0gICAgaWYgKCFkZWNvZGVG
aXhlZExlbmd0aERhdGEoc2F2ZWRIYXNoLmRhdGEoKSwgc2l6ZW9mKHNhdmVkSGFzaCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gY29tcHV0ZWRIYXNoID09IHNhdmVkSGFz
aDsKLX0KLQotfQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmgJKHJldmlzaW9u
IDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZURlY29kZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBOZXR3b3JrQ2FjaGVEZWNvZGVyX2gKLSNkZWZpbmUgTmV0d29ya0NhY2hlRGVj
b2Rlcl9oCi0KLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLQotI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZUNvZGVyLmgiCi0jaW5jbHVkZSA8d3RmL1NIQTEuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKLQotY2xhc3MgRGVjb2RlciB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRGVjb2Rlcihjb25zdCB1aW50OF90KiBi
dWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKLSAgICB2aXJ0dWFsIH5EZWNvZGVyKCk7Ci0KLSAg
ICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsg
fQotICAgIHNpemVfdCBjdXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3Np
dGlvbiAtIG1fYnVmZmVyOyB9Ci0KLSAgICBib29sIHZlcmlmeUNoZWNrc3VtKCk7Ci0KLSAgICBi
b29sIGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90Kiwgc2l6ZV90KTsKLQotICAgIGJvb2wg
ZGVjb2RlKGJvb2wmKTsKLSAgICBib29sIGRlY29kZSh1aW50OF90Jik7Ci0gICAgYm9vbCBkZWNv
ZGUodWludDE2X3QmKTsKLSAgICBib29sIGRlY29kZSh1aW50MzJfdCYpOwotICAgIGJvb2wgZGVj
b2RlKHVpbnQ2NF90Jik7Ci0gICAgYm9vbCBkZWNvZGUoaW50MzJfdCYpOwotICAgIGJvb2wgZGVj
b2RlKGludDY0X3QmKTsKLSAgICBib29sIGRlY29kZShmbG9hdCYpOwotICAgIGJvb2wgZGVjb2Rl
KGRvdWJsZSYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBkZWNvZGVFbnVtKFQm
IHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpIDw9IDgsICJF
bnVtIHR5cGUgVCBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBiaXRzISIpOwotCi0gICAgICAg
IHVpbnQ2NF90IHZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxU
Pih2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGJvb2wgZGVjb2RlKFQmIHQpCi0gICAgewotICAgICAgICByZXR1cm4gQ29kZXI8
VD46OmRlY29kZSgqdGhpcywgdCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICBib29sIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IG51bUVsZW1lbnRz
KSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8
VD46OnZhbHVlLCAiVHlwZSBUIG11c3QgaGF2ZSBhIGZpeGVkLCBrbm93biBlbmNvZGVkIHNpemUh
Iik7Ci0KLSAgICAgICAgaWYgKG51bUVsZW1lbnRzID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSAvIHNpemVvZihUKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICByZXR1cm4gYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihudW1FbGVtZW50cyAqIHNp
emVvZihUKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENEZWNvZGVyID0g
ZmFsc2U7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWlu
KHNpemVfdCkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gYm9vbCBkZWNvZGVO
dW1iZXIoVHlwZSYpOwotCi0gICAgY29uc3QgdWludDhfdCogbV9idWZmZXI7Ci0gICAgY29uc3Qg
dWludDhfdCogbV9idWZmZXJQb3NpdGlvbjsKLSAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlckVu
ZDsKLQotICAgIFNIQTEgbV9zaGExOwotfTsKLQotfSAKLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29k
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUVuY29kZXIuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcAkobm9uZXhp
c3RlbnQpCkBAIC0xLDEyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKLQotI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgewotCi1FbmNvZGVyOjpFbmNvZGVyKCkKLXsKLX0KLQotRW5jb2Rlcjo6fkVuY29kZXIoKQot
ewotfQotCi11aW50OF90KiBFbmNvZGVyOjpncm93KHNpemVfdCBzaXplKQotewotICAgIHNpemVf
dCBuZXdQb3NpdGlvbiA9IG1fYnVmZmVyLnNpemUoKTsKLSAgICBtX2J1ZmZlci5ncm93KG1fYnVm
ZmVyLnNpemUoKSArIHNpemUpOwotICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCkgKyBuZXdQb3Np
dGlvbjsKLX0KLQotdm9pZCBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYgc2hh
MSwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgYXV0byB0eXBlU2Fs
dCA9IFNhbHQ8dWludDhfdCo+Ojp2YWx1ZTsKLSAgICBzaGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KCZ0eXBlU2FsdCksIHNpemVvZih0eXBlU2FsdCkpOwotICAgIHNoYTEu
YWRkQnl0ZXMoZGF0YSwgc2l6ZSk7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIHVwZGF0ZUNo
ZWNrc3VtRm9yRGF0YShtX3NoYTEsIGRhdGEsIHNpemUpOwotCi0gICAgdWludDhfdCogYnVmZmVy
ID0gZ3JvdyhzaXplKTsKLSAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFs
dWUpCi17Ci0gICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1
ZSk7Ci0KLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVvZihUeXBlKSk7Ci0gICAgbWVt
Y3B5KGJ1ZmZlciwgJnZhbHVlLCBzaXplb2YoVHlwZSkpOwotfQotCi12b2lkIEVuY29kZXI6OmVu
Y29kZShib29sIHZhbHVlKQotewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Ci19Ci0KLXZvaWQg
RW5jb2Rlcjo6ZW5jb2RlKHVpbnQ4X3QgdmFsdWUpCi17Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVl
KTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGUodWludDE2X3QgdmFsdWUpCi17Ci0gICAgZW5j
b2RlTnVtYmVyKHZhbHVlKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGUodWludDMyX3QgdmFs
dWUpCi17Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNv
ZGUodWludDY0X3QgdmFsdWUpCi17Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKLX0KLQotdm9p
ZCBFbmNvZGVyOjplbmNvZGUoaW50MzJfdCB2YWx1ZSkKLXsKLSAgICBlbmNvZGVOdW1iZXIodmFs
dWUpOwotfQotCi12b2lkIEVuY29kZXI6OmVuY29kZShpbnQ2NF90IHZhbHVlKQotewotICAgIGVu
Y29kZU51bWJlcih2YWx1ZSk7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGZsb2F0IHZhbHVl
KQotewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2Rl
KGRvdWJsZSB2YWx1ZSkKLXsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwotfQotCi12b2lkIEVu
Y29kZXI6OmVuY29kZUNoZWNrc3VtKCkKLXsKLSAgICBTSEExOjpEaWdlc3QgaGFzaDsKLSAgICBt
X3NoYTEuY29tcHV0ZUhhc2goaGFzaCk7Ci0gICAgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGhhc2gu
ZGF0YSgpLCBoYXNoLnNpemUoKSk7Ci19Ci0KLX0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
RW5jb2Rlci5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTmV0d29ya0NhY2hlRW5jb2Rlcl9oCi0jZGVm
aW5lIE5ldHdvcmtDYWNoZUVuY29kZXJfaAotCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0K
LSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2Rlci5oIgotI2luY2x1ZGUgPHd0Zi9TSEExLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBO
ZXR3b3JrQ2FjaGUgewotCi1jbGFzcyBFbmNvZGVyOwotY2xhc3MgRGF0YVJlZmVyZW5jZTsKLQot
Y2xhc3MgRW5jb2RlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgRW5jb2RlcigpOwotICAgIHZpcnR1YWwgfkVuY29kZXIoKTsKLQotICAgIHZvaWQgZW5jb2Rl
Q2hlY2tzdW0oKTsKLSAgICB2b2lkIGVuY29kZUZpeGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90
Kiwgc2l6ZV90KTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW5jb2RlRW51bShU
IHQpCi0gICAgewotICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoVCkgPD0gc2l6ZW9mKHVp
bnQ2NF90KSwgZW51bV90eXBlX211c3Rfbm90X2JlX2xhcmdlcl90aGFuXzY0X2JpdHMpOwotCi0g
ICAgICAgIGVuY29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odCkpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW5jb2RlKGNvbnN0IFQmIHQpCi0gICAgewotICAgICAg
ICBDb2RlcjxUPjo6ZW5jb2RlKCp0aGlzLCB0KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBFbmNvZGVyJiBvcGVyYXRvcjw8KGNvbnN0IFQmIHQpCi0gICAgewotICAgICAgICBl
bmNvZGUodCk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBjb25zdCB1aW50
OF90KiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KLSAgICBzaXpl
X3QgYnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQotCi0gICAg
c3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKFNIQTEmLCBjb25zdCB1aW50OF90Kiwg
c2l6ZV90KTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RhdGljIHZvaWQgdXBkYXRl
Q2hlY2tzdW1Gb3JOdW1iZXIoU0hBMSYsIFR5cGUpOwotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNJUENFbmNvZGVyID0gZmFsc2U7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBlbmNvZGUoYm9vbCk7
Ci0gICAgdm9pZCBlbmNvZGUodWludDhfdCk7Ci0gICAgdm9pZCBlbmNvZGUodWludDE2X3QpOwot
ICAgIHZvaWQgZW5jb2RlKHVpbnQzMl90KTsKLSAgICB2b2lkIGVuY29kZSh1aW50NjRfdCk7Ci0g
ICAgdm9pZCBlbmNvZGUoaW50MzJfdCk7Ci0gICAgdm9pZCBlbmNvZGUoaW50NjRfdCk7Ci0gICAg
dm9pZCBlbmNvZGUoZmxvYXQpOwotICAgIHZvaWQgZW5jb2RlKGRvdWJsZSk7Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPiB2b2lkIGVuY29kZU51bWJlcihUeXBlKTsKLQotICAgIHVpbnQ4
X3QqIGdyb3coc2l6ZV90KTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBzdHJ1Y3Qg
U2FsdDsKLQotICAgIFZlY3Rvcjx1aW50OF90LCA0MDk2PiBtX2J1ZmZlcjsKLSAgICBTSEExIG1f
c2hhMTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGJvb2w+IHsgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMzsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBFbmNv
ZGVyOjpTYWx0PHVpbnQ4X3Q+IHsgc3RhdGljIGNvbnN0ICB1bnNpZ25lZCB2YWx1ZSA9IDU7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50MTZfdD4geyBzdGF0aWMgY29u
c3QgdW5zaWduZWQgdmFsdWUgPSA3OyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNh
bHQ8dWludDMyX3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMTE7IH07Ci10ZW1w
bGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50NjRfdD4geyBzdGF0aWMgY29uc3QgdW5z
aWduZWQgdmFsdWUgPSAxMzsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGlu
dDMyX3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMTc7IH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDxpbnQ2NF90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2
YWx1ZSA9IDE5OyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8ZmxvYXQ+IHsg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMjM7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
RW5jb2Rlcjo6U2FsdDxkb3VibGU+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMjk7
IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50OF90Kj4geyBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgdmFsdWUgPSAxMDE7IH07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBl
Pgotdm9pZCBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiBzaGExLCBUeXBl
IHZhbHVlKQotewotICAgIGF1dG8gdHlwZVNhbHQgPSBTYWx0PFR5cGU+Ojp2YWx1ZTsKLSAgICBz
aGExLmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0eXBlU2FsdCksIHNpemVv
Zih0eXBlU2FsdCkpOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVlKSk7Ci19Ci0KLX0KLX0KLQotI2VuZGlmCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVu
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsOCArMjgsNiBAQAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZUNvZGVycy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURlY29kZXIuaCIK
LSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTgzLDcgKzgxLDcgQEAgRW50cnk6OkVu
dHJ5KGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcgogCiBTdG9yYWdlOjpSZWNvcmQgRW50cnk6
OmVuY29kZUFzU3RvcmFnZVJlY29yZCgpIGNvbnN0CiB7Ci0gICAgRW5jb2RlciBlbmNvZGVyOwor
ICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBlbmNvZGVyIDw8IG1f
cmVzcG9uc2U7CiAKICAgICBib29sIGhhc1ZhcnlpbmdSZXF1ZXN0SGVhZGVycyA9ICFtX3Zhcnlp
bmdSZXF1ZXN0SGVhZGVycy5pc0VtcHR5KCk7CkBAIC0xMTAsNyArMTA4LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlU3RvcgogewogICAgIGF1dG8gZW50cnkgPSBzdGQ6
Om1ha2VfdW5pcXVlPEVudHJ5PihzdG9yYWdlRW50cnkpOwogCi0gICAgRGVjb2RlciBkZWNvZGVy
KHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7
CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFk
ZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7CiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShlbnRyeS0+bV9yZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IGVudHJ5LT5tX3Jlc3BvbnNlLnNldFNvdXJjZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpT
b3VyY2U6OkRpc2tDYWNoZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAJKHJldmlzaW9uIDIxMDQ5NikK
KysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBib29sIEtleTo6b3BlcmF0b3I9
PShjb25zdCBLZXkmIG90aGVyKSBjCiAgICAgcmV0dXJuIG1faGFzaCA9PSBvdGhlci5tX2hhc2gg
JiYgbV9wYXJ0aXRpb24gPT0gb3RoZXIubV9wYXJ0aXRpb24gJiYgbV90eXBlID09IG90aGVyLm1f
dHlwZSAmJiBtX2lkZW50aWZpZXIgPT0gb3RoZXIubV9pZGVudGlmaWVyICYmIG1fcmFuZ2UgPT0g
b3RoZXIubV9yYW5nZTsKIH0KIAotdm9pZCBLZXk6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAordm9pZCBLZXk6OmVuY29kZShXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbV9wYXJ0aXRpb247CiAgICAgZW5jb2RlciA8PCBt
X3R5cGU7CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBLZXk6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbV9wYXJ0aXRpb25IYXNoOwogfQogCi1ib29sIEtl
eTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEtleSYga2V5KQorYm9vbCBLZXk6OmRlY29kZShX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiBkZWNvZGVyLCBLZXkmIGtleSkKIHsKICAgICByZXR1
cm4gZGVjb2Rlci5kZWNvZGUoa2V5Lm1fcGFydGl0aW9uKSAmJiBkZWNvZGVyLmRlY29kZShrZXku
bV90eXBlKSAmJiBkZWNvZGVyLmRlY29kZShrZXkubV9pZGVudGlmaWVyKSAmJiBkZWNvZGVyLmRl
Y29kZShrZXkubV9yYW5nZSkgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1faGFzaCkgJiYgZGVjb2Rl
ci5kZWNvZGUoa2V5Lm1fcGFydGl0aW9uSGFzaCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuaAkocmV2aXNp
b24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE0ICszMCwxMyBAQAogCiAjaW5jbHVk
ZSAiTmV0d29ya0NhY2hlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8
d3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRW5j
b2Rlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi1jbGFzcyBFbmNvZGVyOwotY2xhc3Mg
RGVjb2RlcjsKLQogY2xhc3MgS2V5IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFNIQTE6OkRpZ2Vz
dCBIYXNoVHlwZTsKQEAgLTY5LDggKzY4LDggQEAgcHVibGljOgogICAgIFN0cmluZyBoYXNoQXNT
dHJpbmcoKSBjb25zdCB7IHJldHVybiBoYXNoQXNTdHJpbmcobV9oYXNoKTsgfQogICAgIFN0cmlu
ZyBwYXJ0aXRpb25IYXNoQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBoYXNoQXNTdHJpbmcobV9w
YXJ0aXRpb25IYXNoKTsgfQogCi0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgS2V5Jik7CisgICAgdm9pZCBlbmNvZGUoV1RG
OjpQZXJzaXN0ZW5jZTo6RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShX
VEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiwgS2V5Jik7CiAKICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgS2V5JikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtleSYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw3
ICszODAsNyBAQCBzdGF0aWMgYm9vbCBkZWNvZGVSZWNvcmRNZXRhRGF0YShSZWNvcmRNCiB7CiAg
ICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwg
JnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIERl
Y29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVj
b2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1l
dGFEYXRhLmNhY2hlU3RvcmFnZVZlcnNpb24pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmtleSkpCkBAIC00NjQsNyArNDY0
LDcgQEAgdm9pZCBTdG9yYWdlOjpyZWFkUmVjb3JkKFJlYWRPcGVyYXRpb24mIAogCiBzdGF0aWMg
RGF0YSBlbmNvZGVSZWNvcmRNZXRhRGF0YShjb25zdCBSZWNvcmRNZXRhRGF0YSYgbWV0YURhdGEp
CiB7Ci0gICAgRW5jb2RlciBlbmNvZGVyOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIg
ZW5jb2RlcjsKIAogICAgIGVuY29kZXIgPDwgbWV0YURhdGEuY2FjaGVTdG9yYWdlVmVyc2lvbjsK
ICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmtleTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dWJyZXNvdXJjZXNFbnRyeS5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTMgKzMwLDExIEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hl
RGVjb2Rlci5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIAotdm9pZCBTdWJyZXNvdXJjZUlu
Zm86OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordm9pZCBTdWJyZXNvdXJjZUluZm86
OmVuY29kZShXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAg
IGVuY29kZXIgPDwgbV9pc1RyYW5zaWVudDsKIApAQCAtNDgsNyArNDYsNyBAQCB2b2lkIFN1YnJl
c291cmNlSW5mbzo6ZW5jb2RlKEVuY29kZXImIGVuCiAgICAgZW5jb2RlciA8PCBtX3JlcXVlc3RI
ZWFkZXJzOwogfQogCi1ib29sIFN1YnJlc291cmNlSW5mbzo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIFN1YnJlc291cmNlSW5mbyYgaW5mbykKK2Jvb2wgU3VicmVzb3VyY2VJbmZvOjpkZWNvZGUo
V1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciYgZGVjb2RlciwgU3VicmVzb3VyY2VJbmZvJiBpbmZv
KQogewogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX2lzVHJhbnNpZW50KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNjcsNyArNjUsNyBAQCBib29sIFN1YnJlc291cmNlSW5mbzo6
ZGVjb2RlKERlY29kZXImIGRlCiAKIFN0b3JhZ2U6OlJlY29yZCBTdWJyZXNvdXJjZXNFbnRyeTo6
ZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCkgY29uc3QKIHsKLSAgICBFbmNvZGVyIGVuY29kZXI7Cisg
ICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIGVuY29kZXIgPDwgbV9z
dWJyZXNvdXJjZXM7CiAKICAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7CkBAIC03OSw3ICs3
Nyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxTdWJyZXNvdXJjZXNFbnRyeT4gU3VicmUKIHsKICAgICBh
dXRvIGVudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxTdWJyZXNvdXJjZXNFbnRyeT4oc3RvcmFnZUVu
dHJ5KTsKIAotICAgIERlY29kZXIgZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwg
c3RvcmFnZUVudHJ5LmhlYWRlci5zaXplKCkpOworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgZGVjb2RlcihzdG9yYWdlRW50cnkuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZUVudHJ5LmhlYWRl
ci5zaXplKCkpOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZW50cnktPm1fc3VicmVzb3VyY2Vz
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Vi
cmVzb3VyY2VzRW50cnkuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOCArMjgsNiBAQAogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BF
Q1VMQVRJVkVfUkVWQUxJREFUSU9OKQogCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRGVjb2Rlci5o
IgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2Fj
aGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1VSTC5oPgpAQCAtNDEsOCArMzksOCBAQCBuYW1lc3BhY2UgTmV0d29ya0Nh
Y2hlIHsKIGNsYXNzIFN1YnJlc291cmNlSW5mbyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRp
YyBib29sIGRlY29kZShEZWNvZGVyJiwgU3VicmVzb3VyY2VJbmZvJik7CisgICAgdm9pZCBlbmNv
ZGUoV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRl
Y29kZShXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyJiwgU3VicmVzb3VyY2VJbmZvJik7CiAKICAg
ICBTdWJyZXNvdXJjZUluZm8oKSA9IGRlZmF1bHQ7CiAgICAgU3VicmVzb3VyY2VJbmZvKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBpc1RyYW5zaWVudCA9IGZh
bHNlKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw2IEBACiAKICNpbmNsdWRlICJBUElV
c2VyQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKLSNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5j
b2Rlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJT
aGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIK
QEAgLTQxLDYgKzM5LDggQEAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRl
IDx3dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9F
bmNvZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTsKIApAQCAt
OTksNyArOTksNyBAQCBzdHJ1Y3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIHsKIAogc3RhdGlj
IERhdGEgZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKGNvbnN0IENvbnRlbnRFeHRlbnNp
b25NZXRhRGF0YSYgbWV0YURhdGEpCiB7Ci0gICAgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29k
ZXIgZW5jb2RlcjsKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAKICAg
ICBlbmNvZGVyIDw8IG1ldGFEYXRhLnZlcnNpb247CiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5h
Y3Rpb25zU2l6ZTsKQEAgLTEyMCw3ICsxMjAsNyBAQCBzdGF0aWMgYm9vbCBkZWNvZGVDb250ZW50
RXh0ZW5zaW9uTWV0YURhCiAgICAgICAgIGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpE
ZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
bWV0YURhdGEudmVyc2lvbikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuYWN0aW9uc1NpemUpKQpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODkzLDEzICsxODkzLDggQEAKIAkJRTQ0MzZFRDAxQTBE
MDQwQjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0MzZFQzMxQTBDRkRCMjAwRUFEMjA0IC8q
IE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwICovOyB9OwogCQlFNDY5N0NDRDFCMjVFQjhGMDAxQjBB
NkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDY5N0NDQzFCMjVFQjhGMDAxQjBBNkMgLyogTmV0d29y
a0NhY2hlRmlsZVN5c3RlbS5jcHAgKi87IH07CiAJCUU0N0QxRTk4MUIwNjQ5RkIwMDI2NzZBOCAv
KiBOZXR3b3JrQ2FjaGVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0N0QxRTk2MUIwNjJCNjYwMDI2NzZBOCAvKiBOZXR3b3JrQ2FjaGVEYXRh
LmNwcCAqLzsgfTsKLQkJRTQ4OUQyOEExQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNv
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5
RDI4MzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXIuaCAqLzsgfTsKIAkJRTQ4
OUQyOEIxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5RDI4NDFBMEEyREI4MDA3
OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXJzLmNwcCAqLzsgfTsKIAkJRTQ4OUQyOEMxQTBBMkRC
ODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQyODUxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdv
cmtDYWNoZUNvZGVycy5oICovOyB9OwotCQlFNDg5RDI4RDFBMEEyREI4MDA3OEMwNkEgLyogTmV0
d29ya0NhY2hlRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDg5RDI4NjFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rl
ci5jcHAgKi87IH07Ci0JCUU0ODlEMjhFMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVE
ZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NDg5RDI4NzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5oICovOyB9Owot
CQlFNDg5RDI4RjFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5RDI4ODFBMEEy
REI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5jcHAgKi87IH07Ci0JCUU0ODlEMjkw
MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5RDI4OTFBMEEyREI4MDA3OEMwNkEg
LyogTmV0d29ya0NhY2hlRW5jb2Rlci5oICovOyB9OwogCQlFNDlENDBENzFBRDNGQjE3MDA2NkI3
QjkgLyogTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OUQ0MEQ2MUFEM0ZCMTcwMDY2QjdCOSAvKiBOZXR3b3Jr
Q2FjaGVCbG9iU3RvcmFnZS5oICovOyB9OwogCQlFNDlENDBEOTFBRDNGQjIxMDA2NkI3QjkgLyog
TmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQ5RDQwRDgxQUQzRkIyMTAwNjZCN0I5IC8qIE5ldHdvcmtDYWNo
ZUJsb2JTdG9yYWdlLmNwcCAqLzsgfTsKIAkJRTRFODY0OTIxQjE2NzUwMTAwQzgyRjQwIC8qIFZl
cnNpb25DaGVja3MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNEU4NjQ4RjFCMTY3M0ZCMDBDODJGNDAgLyogVmVyc2lvbkNoZWNrcy5tbSAqLzsgfTsK
QEAgLTQxMDAsMTMgKzQwOTUsOCBAQAogCQlFNDQzNkVDMzFBMENGREIyMDBFQUQyMDQgLyogTmV0
d29ya0NhY2hlU3RvcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBOZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQ2OTdDQ0MxQjI1RUI4RjAwMUIwQTZDIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlRmlsZVN5c3Rl
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0QxRTk2MUIwNjJCNjYwMDI2
NzZBOCAvKiBOZXR3b3JrQ2FjaGVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE5ldHdvcmtDYWNoZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlFNDg5RDI4MzFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlQ29kZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4OUQyODQxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdv
cmtDYWNoZUNvZGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBO
ZXR3b3JrQ2FjaGVDb2RlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDg5
RDI4NTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXJzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZUNvZGVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlFNDg5RDI4NjFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hl
RGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3Jr
Q2FjaGVEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ4OUQyODcx
QTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlFNDg5RDI4ODFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRW5j
b2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2Fj
aGVFbmNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ4OUQyODkxQTBB
MkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlRW5jb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNDlENDBENjFBRDNGQjE3MDA2NkI3QjkgLyogTmV0d29ya0NhY2hlQmxvYlN0
b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlQmxv
YlN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5RDQwRDgxQUQzRkIy
MTAwNjZCN0I5IC8qIE5ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRFODY0OEUxQjE2NzNGQjAwQzgyRjQwIC8qIFZlcnNp
b25DaGVja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVyc2lvbkNoZWNr
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzU2OSwxNyArNzU1OSwxMiBAQAog
CQkJCUU0NDM2RUJGMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGUuaCAqLywKIAkJCQlF
NDlENDBEODFBRDNGQjIxMDA2NkI3QjkgLyogTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwICov
LAogCQkJCUU0OUQ0MEQ2MUFEM0ZCMTcwMDY2QjdCOSAvKiBOZXR3b3JrQ2FjaGVCbG9iU3RvcmFn
ZS5oICovLAotCQkJCUU0ODlEMjgzMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rl
ci5oICovLAogCQkJCUU0ODlEMjg0MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rl
cnMuY3BwICovLAogCQkJCUU0ODlEMjg1MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVD
b2RlcnMuaCAqLywKIAkJCQk3Q0FCOTM3OTFENDU5RTRCMDA3MEY1NDAgLyogTmV0d29ya0NhY2hl
Q29kZXJzQ29jb2EuY3BwICovLAogCQkJCUU0N0QxRTk2MUIwNjJCNjYwMDI2NzZBOCAvKiBOZXR3
b3JrQ2FjaGVEYXRhLmNwcCAqLywKIAkJCQlFNDJFMDYxMTFBQTc1QUJEMDBCMTE2OTkgLyogTmV0
d29ya0NhY2hlRGF0YS5oICovLAogCQkJCUU0MkUwNjEzMUFBNzVCNzAwMEIxMTY5OSAvKiBOZXR3
b3JrQ2FjaGVEYXRhQ29jb2EubW0gKi8sCi0JCQkJRTQ4OUQyODYxQTBBMkRCODAwNzhDMDZBIC8q
IE5ldHdvcmtDYWNoZURlY29kZXIuY3BwICovLAotCQkJCUU0ODlEMjg3MUEwQTJEQjgwMDc4QzA2
QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmggKi8sCi0JCQkJRTQ4OUQyODgxQTBBMkRCODAwNzhD
MDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuY3BwICovLAotCQkJCUU0ODlEMjg5MUEwQTJEQjgw
MDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmggKi8sCiAJCQkJRTQxM0Y1OUUxQUMxQUY5
RDAwMzQ1MzYwIC8qIE5ldHdvcmtDYWNoZUVudHJ5LmNwcCAqLywKIAkJCQlFNDEzRjU5QjFBQzFB
REI2MDAzNDUzNjAgLyogTmV0d29ya0NhY2hlRW50cnkuaCAqLywKIAkJCQlFNDY5N0NDQzFCMjVF
QjhGMDAxQjBBNkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgKi8sCkBAIC03OTAzLDEx
ICs3ODg4LDggQEAKIAkJCQlFMTc5OEM3QTE2RTY4MTg4MDAyNDAxMzkgLyogTmV0d29ya0Jsb2JS
ZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0MzZFQ0MxQTBEMDQwQjAwRUFEMjA0IC8q
IE5ldHdvcmtDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5RDQwRDcxQUQzRkIxNzAwNjZC
N0I5IC8qIE5ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDg5
RDI4QTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUU0ODlEMjhDMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0MkUwNjEyMUFBNzVBQkQwMEIxMTY5OSAvKiBOZXR3b3JrQ2Fj
aGVEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDg5RDI4RTFBMEEyREI4MDA3OEMwNkEgLyog
TmV0d29ya0NhY2hlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ4OUQyOTAxQTBBMkRC
ODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
MTNGNTlEMUFDMUFEQzQwMDM0NTM2MCAvKiBOZXR3b3JrQ2FjaGVFbnRyeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODM0QjI1MEYxQTgzMUE4RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0
ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MkUwNjEwMUFBNzUyM0IwMEIxMTY5OSAvKiBOZXR3
b3JrQ2FjaGVJT0NoYW5uZWwuaCBpbiBIZWFkZXJzICovLApAQCAtOTQwNyw4ICs5Mzg5LDYgQEAK
IAkJCQk3Q0FCOTM3QTFENDU5RTUxMDA3MEY1NDAgLyogTmV0d29ya0NhY2hlQ29kZXJzQ29jb2Eu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ3RDFFOTgxQjA2NDlGQjAwMjY3NkE4IC8qIE5ldHdv
cmtDYWNoZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQyRTA2MTQxQUE3NUI3MDAwQjEx
Njk5IC8qIE5ldHdvcmtDYWNoZURhdGFDb2NvYS5tbSBpbiBTb3VyY2VzICovLAotCQkJCUU0ODlE
MjhEMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUU0ODlEMjhGMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0MTNGNTlGMUFDMUFGOUQwMDM0NTM2MCAvKiBOZXR3
b3JrQ2FjaGVFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDY5N0NDRDFCMjVFQjhGMDAx
QjBBNkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
NDJFMDYwRjFBQTc1MjM0MDBCMTE2OTkgLyogTmV0d29ya0NhY2hlSU9DaGFubmVsQ29jb2EubW0g
aW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298323</attachid>
            <date>2017-01-08 16:34:06 -0800</date>
            <delta_ts>2017-01-08 18:05:13 -0800</delta_ts>
            <desc>patch</desc>
            <filename>cache-coder-wtf-7.patch</filename>
            <type>text/plain</type>
            <size>110585</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE3LTAxLTA4ICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGNhY2hlIGNvZGVycyB0byBXVEYKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjgyNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgaXQgcG9zc2li
bGUgdG8gdXNlIHJvYnVzdCBzZXJpYWxpemF0aW9uIG9mIFdURiB0eXBlcyBvbiB0aGUgbG93ZXIg
bGV2ZWxzIG9mIHRoZSBzdGFjay4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZTogQWRkZWQuCisgICAgICAgICogd3Rm
L3BlcnNpc3RlbmNlL0NvZGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyLmguCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3BlcnNpc3Rl
bmNlL0NvZGVycy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6Q29kZXI8QXRvbWljU3RyaW5nPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+OjplbmNvZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPENTdHJpbmc+
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVy
PFN0cmluZz46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6ZGVjb2RlU3RyaW5nVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6Q29kZXI8U3RyaW5nPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpDb2RlcjxTSEExOjpEaWdlc3Q+OjplbmNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6
SFRUUEhlYWRlck1hcD46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6SFRUUEhlYWRlck1hcD46OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuaC4KKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxzdGQ6Om9wdGlvbmFsPFQ+Pjo6ZW5jb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxzdGQ6Om9w
dGlvbmFsPFQ+Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2Uv
RGVjb2Rlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OkRlY29kZXI6OkRlY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkRlY29kZXI6On5EZWNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEZWNvZGVyOjpkZWNvZGVGaXhlZExl
bmd0aERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRlY29k
ZXI6OmRlY29kZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6RGVjb2Rlcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlOjpEZWNvZGVyOjp2ZXJpZnlDaGVja3N1bSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3Bl
cnNpc3RlbmNlL0RlY29kZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5oLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkRlY29kZXI6Omxlbmd0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6RGVjb2Rlcjo6Y3VycmVudE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGVjb2Rlcjo6ZGVjb2RlRW51bSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGVjb2Rlcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVuY29kZXIuY3BwLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29k
ZXI6OkVuY29kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVu
Y29kZXI6On5FbmNvZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjpncm93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvckRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OmVuY29kZUZpeGVkTGVuZ3RoRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW5jb2Rlcjo6ZW5jb2RlTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbmNvZGVyOjplbmNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OmVu
Y29kZUNoZWNrc3VtKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvRW5jb2Rl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVFbmNvZGVyLmguCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW5jb2Rl
cjo6ZW5jb2RlRW51bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
RW5jb2Rlcjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpFbmNvZGVyOjpvcGVyYXRvcjw8KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpFbmNvZGVyOjpidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OkVuY29kZXI6OmJ1ZmZlclNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKTogRGVsZXRl
ZC4KKwogMjAxNy0wMS0wOCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+
CiAKICAgICAgICAgSW50cm9kdWNlIENQVShYODZfU1NFMikgaW5zdGVhZCBvZiB2YXJpb3VzIFNT
RTIgY2hlY2tzCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2ICszNTMsMTMgQEAKIAkJREU1QTA5RkMxQkEz
Njk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU1QTA5RkIxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1v
bkNyeXB0b1NQSS5oICovOyB9OwogCQlFMTU1NTZGNTE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTU1NTZGMzE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxp
dGllcy5jcHAgKi87IH07CiAJCUUxNTU1NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFw
aGljVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5o
ICovOyB9OworCQlFNDNBNDY5NTFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTAxRTIyOEI5MTAw
Mjc2QjA1IC8qIERlY29kZXIuaCAqLzsgfTsKKwkJRTQzQTQ2OTYxRTIyOEI5MTAwMjc2QjA1IC8q
IEVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0M0E0NjkxMUUyMjhCOTEwMDI3NkIwNSAvKiBFbmNvZGVyLmggKi87IH07CisJCUU0M0E0Njk3
MUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0M0E0NjkyMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVy
LmNwcCAqLzsgfTsKKwkJRTQzQTQ2OTgxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTMxRTIy
OEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICovOyB9OworCQlFNDNBNDY5OTFFMjI4QjkxMDAy
NzZCMDUgLyogQ29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0M0E0Njk0MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oICovOyB9OworCQlFNDNB
NDY5QjFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBNDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJz
LmggKi87IH07CisJCUU0M0E0NjlEMUUyMjhGRDUwMDI3NkIwNSAvKiBDb2RlcnMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OUMxRTIyOEZE
NTAwMjc2QjA1IC8qIENvZGVycy5jcHAgKi87IH07CiAJCUU0QTBBRDM5MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRBMEFEMzcxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07
CiAJCUU0QTBBRDNBMUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTBBRDM4MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuaCAqLzsgfTsKIAkJRTRBMEFEM0QxQTk2MjUzQzAwNTM2REY2IC8qIFdv
cmtRdWV1ZUNvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QTBBRDNDMUE5NjI1M0MwMDUzNkRGNiAvKiBXb3JrUXVldWVDb2NvYS5jcHAgKi87
IH07CkBAIC03MjUsNiArNzMyLDEzIEBACiAJCURFNUEwOUZCMUJBMzY5OTIwMDNENDQyNCAvKiBD
b21tb25DcnlwdG9TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9u
Q3J5cHRvU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTU1NkYzMThBMEND
MTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlw
dG9ncmFwaGljVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0M0E0
NjkwMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQzQTQ2
OTExRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRW5jb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDNBNDY5
MjFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTQzQTQ2OTMxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRW5jb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUU0M0E0Njk0MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNDNBNDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NDNBNDY5QzFFMjI4RkQ1MDAyNzZCMDUgLyogQ29kZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0QTBBRDM3MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTRBMEFEMzgxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrUXVldWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTRBMEFEM0MxQTk2MjUzQzAwNTM2REY2IC8qIFdvcmtRdWV1ZUNv
Y29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZUNv
Y29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2OSw2ICs4ODMsNyBAQAog
CQkJCUE4QTQ3MjgxMTUxQTgyNUEwMDQxMjNGRiAvKiBkdG9hICovLAogCQkJCTFGQTQ3Qzg3MTUy
NTAyREEwMDU2OEQxQiAvKiBpb3MgKi8sCiAJCQkJQThBNDcyQzQxNTFBODI1QTAwNDEyM0ZGIC8q
IG1hYyAqLywKKwkJCQlFNDNBNDY4NTFFMjI4QjU3MDAyNzZCMDUgLyogcGVyc2lzdGVuY2UgKi8s
CiAJCQkJQ0VGNDgyMEMxOURBMzQ3NjAwQ0MwNEI4IC8qIHNwaSAqLywKIAkJCQlBOEE0NzMxQjE1
MUE4MjVCMDA0MTIzRkYgLyogdGV4dCAqLywKIAkJCQlBOEE0NzMzOTE1MUE4MjVCMDA0MTIzRkYg
LyogdGhyZWFkcyAqLywKQEAgLTEyNzcsNiArMTI5MiwyMCBAQAogCQkJbmFtZSA9IGNmOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJRTQzQTQ2ODUxRTIyOEI1NzAwMjc2QjA1
IC8qIHBlcnNpc3RlbmNlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQlFNDNBNDY5NDFFMjI4QjkxMDAyNzZCMDUgLyogQ29kZXIuaCAqLywKKwkJCQlFNDNB
NDY5QTFFMjI4RkIyMDAyNzZCMDUgLyogQ29kZXJzLmggKi8sCisJCQkJRTQzQTQ2OUMxRTIyOEZE
NTAwMjc2QjA1IC8qIENvZGVycy5jcHAgKi8sCisJCQkJRTQzQTQ2OTIxRTIyOEI5MTAwMjc2QjA1
IC8qIERlY29kZXIuY3BwICovLAorCQkJCUU0M0E0NjkwMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNv
ZGVyLmggKi8sCisJCQkJRTQzQTQ2OTMxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwICov
LAorCQkJCUU0M0E0NjkxMUUyMjhCOTEwMDI3NkIwNSAvKiBFbmNvZGVyLmggKi8sCisJCQkpOwor
CQkJcGF0aCA9IHBlcnNpc3RlbmNlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
IAkJRTRBMEFEM0IxQTk2MjUxOTAwNTM2REY2IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEzMjksNiArMTM1OCw3IEBACiAJCQkJQThBNDcz
OTExNTFBODI1QjAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFQjk1RTFGMDE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNBRDE1MUE4MjVCMDA0MTIzRkYgLyogY2FjaGVkLXBvd2Vycy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTQzQTQ2OUIxRTIyOEZCMjAwMjc2QjA1IC8qIENvZGVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRENFRTIxRkIxQ0VBNzUzODAwMEMyMzk2IC8qIENGQnVuZGxlU1BJ
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1RTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hhcmFj
dGVyTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzk0MTUxQTgyNUIwMDQxMjNGRiAv
KiBDaGVja2VkQXJpdGhtZXRpYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzYyLDYgKzEzOTIsNyBA
QAogCQkJCUE4QTQ3M0IyMTUxQTgyNUIwMDQxMjNGRiAvKiBkb3VibGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3M0E3MTUxQTgyNUIwMDQxMjNGRiAvKiBEb3VibHlMaW5rZWRMaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzNCQjE1MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRTQzQTQ2OTYxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRERFOTMyMUNEQzA1MkQwMEZEMzQ5MSAvKiBkeWxkU1BJLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQUVBODhFMjFENkJCQ0Y0MDBFNUFENjQgLyogRW51bVRyYWl0cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ3QzQzNEIxREQyQTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVk
LmggaW4gSGVhZGVycyAqLywKQEAgLTE1MDgsNiArMTUzOSw3IEBACiAJCQkJQThBNDc0NTQxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQ1NTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU3BlY2lmaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjZCMjkxMURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0M0E0Njk1MUUyMjhCOTEwMDI3NkIwNSAvKiBE
ZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTMwNzFDQTFDNDA0MjcyMDAzODQ4OTggLyog
VGlueUxSVUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNF
MTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ5RUYxNjMxNkJCRkUwRDAw
MEE0MzMxIC8qIFRyaVN0YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTE1MzUsNiArMTU2Nyw3IEBA
CiAJCQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUU0M0E0Njk5MUUyMjhCOTEwMDI3NkIwNSAvKiBDb2Rlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0xNjkzLDggKzE3MjYsMTAgQEAKIAkJCQlBOEE0NzQxNDE1MUE4MjVCMDA0
MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFBMTUx
QTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTQzQTQ2OTgxRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDY5NDE5MzE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVy
Q0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQzQTQ2OUQxRTIyOEZENTAwMjc2QjA1IC8qIENv
ZGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5NDE5OTE2RUFCMDQxMDAyNEUxNDYgLyog
U2NoZWR1bGVQYWlyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2OTQxOTcxNkVBQUZGODAw
MjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGNjZCMjhF
MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTcwOSw2
ICsxNzQ0LDcgQEAKIAkJCQlBNUJBMTVGQzE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nSW1wbENG
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUY1MTgyNDM0ODAwMEE4MkU2OSAvKiBTdHJp
bmdJbXBsTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RjMxODI0MzNBOTAwQTgyRTY5
IC8qIFN0cmluZ01hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUU0M0E0Njk3MUUyMjhCOTEwMDI3
NkIwNSAvKiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkE3MTY2NkRGQTMw
MEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzQ0MzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5M0YxOTkzRTE5RDc5NThEMDBDMjM5MEIgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDYgKzI0MCwx
MCBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBkdG9hL2ZpeGVkLWR0b2EuY2MKICAgICBkdG9hL3N0
cnRvZC5jYwogCisgICAgcGVyc2lzdGVuY2UvQ29kZXJzLmNwcAorICAgIHBlcnNpc3RlbmNlL0Rl
Y29kZXIuY3BwCisgICAgcGVyc2lzdGVuY2UvRW5jb2Rlci5jcHAKKwogICAgIHRleHQvQXRvbWlj
U3RyaW5nLmNwcAogICAgIHRleHQvQXRvbWljU3RyaW5nSW1wbC5jcHAKICAgICB0ZXh0L0F0b21p
Y1N0cmluZ1RhYmxlLmNwcApAQCAtMjY4LDYgKzI3Miw3IEBAIHNldChXVEZfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke1dURl9ESVJ9IgogICAgICIke1dURl9ESVJ9L3d0ZiIKICAgICAiJHtX
VEZfRElSfS93dGYvZHRvYSIKKyAgICAiJHtXVEZfRElSfS93dGYvcGVyc2lzdGVuY2UiCiAgICAg
IiR7V1RGX0RJUn0vd3RmL3RleHQiCiAgICAgIiR7V1RGX0RJUn0vd3RmL3RleHQvaWN1IgogICAg
ICIke1dURl9ESVJ9L3d0Zi90aHJlYWRzIgpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvQ29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2Rl
ci5oCShyZXZpc2lvbiAyMTAzMzApCShmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyLmg6MjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvQ29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrQ2FjaGVDb2Rlcl9oCisjZGVmaW5lIE5ldHdvcmtD
YWNoZUNvZGVyX2gKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCitjbGFzcyBEZWNvZGVyOworY2xhc3Mg
RW5jb2RlcjsKKyAgICAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlciB7CisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFQmIHQpCisgICAgewor
ICAgICAgICB0LmVuY29kZShlbmNvZGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKKyAgICB7CisgICAgICAgIHJldHVybiBUOjpkZWNv
ZGUoZGVjb2RlciwgdCk7CisgICAgfQorfTsKKworfQorfQorCisjZW5kaWYKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvQ29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2Rlci5oCShyZXZpc2lvbiAyMTAzMzApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMyAr
MjMsMTAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIE5ldHdvcmtDYWNoZUNvZGVyX2gKLSNkZWZpbmUgTmV0d29ya0NhY2hlQ29kZXJfaAorI3By
YWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNl
IFBlcnNpc3RlbmNlIHsKIAogY2xhc3MgRGVjb2RlcjsKIGNsYXNzIEVuY29kZXI7CkBAIC00OCw2
ICs0NSwzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlciB7CiAKIH0KIH0KLQot
I2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmNwcAko
cmV2aXNpb24gMjEwMzMwKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVDb2RlcnMuY3BwOjIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNp
c3RlbmNlL0NvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVDb2RlcnMuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCit2b2lkIENvZGVy
PEF0b21pY1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBdG9taWNTdHJp
bmcmIGF0b21pY1N0cmluZykKK3sKKyAgICBlbmNvZGVyIDw8IGF0b21pY1N0cmluZy5zdHJpbmco
KTsKK30KKworYm9vbCBDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCit7CisgICAgU3RyaW5nIHN0cmluZzsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0cmluZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF0b21pY1N0cmluZyA9IHN0cmluZzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBD
b2RlcjxDU3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENTdHJpbmcmIHN0
cmluZykKK3sKKyAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51bGwgc3RyaW5nLgorICAgIGlmIChz
dHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1aW50MzJf
dCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgZW5jb2RlciA8PCBsZW5ndGg7CisgICAg
ZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oc3RyaW5nLmRhdGEoKSksIGxlbmd0aCk7Cit9CisKK2Jvb2wgQ29kZXI8Q1N0cmluZz46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDU3RyaW5nJiByZXN1bHQpCit7CisgICAgdWludDMy
X3QgbGVuZ3RoOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGVuZ3RoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKGxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgbnVsbCBzdHJpbmcuCisgICAg
ICAgIHJlc3VsdCA9IENTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgLy8gQmVmb3JlIGFsbG9jYXRpbmcgdGhlIHN0cmluZywgbWFrZSBzdXJlIHRoYXQgdGhlIGRl
Y29kZXIgYnVmZmVyIGlzIGJpZyBlbm91Z2guCisgICAgaWYgKCFkZWNvZGVyLmJ1ZmZlcklzTGFy
Z2VFbm91Z2hUb0NvbnRhaW48Y2hhcj4obGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY2hhciogYnVmZmVyOworICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmluZzo6bmV3VW5p
bml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBzdHJpbmc7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKKwordm9pZCBDb2RlcjxTdHJpbmc+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBudWxs
IHN0cmluZy4KKyAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGVuY29kZXIgPDwg
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIGJvb2wg
aXM4Qml0ID0gc3RyaW5nLmlzOEJpdCgpOworCisgICAgZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4
Qml0OworCisgICAgaWYgKGlzOEJpdCkKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0
aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnM4
KCkpLCBsZW5ndGggKiBzaXplb2YoTENoYXIpKTsKKyAgICBlbHNlCisgICAgICAgIGVuY29kZXIu
ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0
cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCBkZWNvZGVT
dHJpbmdUZXh0KERlY29kZXImIGRlY29kZXIsIHVpbnQzMl90IGxlbmd0aCwgU3RyaW5nJiByZXN1
bHQpCit7CisgICAgLy8gQmVmb3JlIGFsbG9jYXRpbmcgdGhlIHN0cmluZywgbWFrZSBzdXJlIHRo
YXQgdGhlIGRlY29kZXIgYnVmZmVyIGlzIGJpZyBlbm91Z2guCisgICAgaWYgKCFkZWNvZGVyLmJ1
ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48Q2hhcmFjdGVyVHlwZT4obGVuZ3RoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyOworICAgIFN0cmlu
ZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJlc3VsdCA9IHN0cmluZzsKKyAgICByZXR1cm4g
dHJ1ZTsgICAgCit9CisKK2Jvb2wgQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIFN0cmluZyYgcmVzdWx0KQoreworICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChs
ZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CisgICAgICAg
IC8vIFRoaXMgaXMgdGhlIG51bGwgc3RyaW5nLgorICAgICAgICByZXN1bHQgPSBTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBpczhCaXQ7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShpczhCaXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoaXM4Qml0KQorICAgICAgICByZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxMQ2hhcj4oZGVjb2Rl
ciwgbGVuZ3RoLCByZXN1bHQpOworICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0PFVDaGFyPihk
ZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7Cit9CisKKwordm9pZCBDb2RlcjxTSEExOjpEaWdlc3Q+
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU0hBMTo6RGlnZXN0JiBkaWdlc3QpCit7
CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9m
KGRpZ2VzdCkpOworfQorCitib29sIENvZGVyPFNIQTE6OkRpZ2VzdD46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKK3sKKyAgICByZXR1cm4gZGVjb2Rlci5k
ZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCkpOworfQor
CisvLyBTdG9yZSBjb21tb24gSFRUUCBoZWFkZXJzIGFzIHN0cmluZ3MgaW5zdGVhZCBvZiB1c2lu
ZyB0aGVpciB2YWx1ZSBpbiB0aGUgSFRUUEhlYWRlck5hbWUgZW51bWVyYXRpb24KKy8vIHNvIHRo
YXQgdGhlIGhlYWRlcnMgc3RvcmVkIGluIHRoZSBjYWNoZSBzdGF5cyB2YWxpZCBldmVuIGFmdGVy
IEhUVFBIZWFkZXJOYW1lLmluIGdldHMgdXBkYXRlZC4KK3ZvaWQgQ29kZXI8V2ViQ29yZTo6SFRU
UEhlYWRlck1hcD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpIVFRQ
SGVhZGVyTWFwJiBoZWFkZXJzKQoreworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGhlYWRlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogaGVhZGVycykg
eworICAgICAgICBlbmNvZGVyIDw8IGtleVZhbHVlLmtleTsKKyAgICAgICAgZW5jb2RlciA8PCBr
ZXlWYWx1ZS52YWx1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQ29kZXI8V2ViQ29yZTo6SFRUUEhlYWRl
ck1hcD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiBo
ZWFkZXJzKQoreworICAgIHVpbnQ2NF90IGhlYWRlcnNTaXplOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaGVhZGVyc1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1aW50
NjRfdCBpID0gMDsgaSA8IGhlYWRlcnNTaXplOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIG5hbWU7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGhlYWRlcnMuYWRk
KG5hbWUsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KK30KKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5jcHAJKHJldmlzaW9uIDIx
MDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDE1ICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKLQotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hF
KQorI2luY2x1ZGUgIkNvZGVycy5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lz
dGVuY2UgewogCiB2b2lkIENvZGVyPEF0b21pY1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0b21pY1N0cmluZykKIHsKQEAgLTE0NCw3ICsxNDIs
NiBAQCBib29sIENvZGVyPFN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvCiAgICAgcmV0dXJu
IGRlY29kZVN0cmluZ1RleHQ8VUNoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKIH0KIAot
CiB2b2lkIENvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBTSEExOjpEaWdlc3QmIGRpZ2VzdCkKIHsKICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3Ro
RGF0YShkaWdlc3QuZGF0YSgpLCBzaXplb2YoZGlnZXN0KSk7CkBAIC0xNTUsMzUgKzE1Miw1IEBA
IGJvb2wgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZGVjb2RlKERlY29kZXIKICAgICByZXR1cm4gZGVj
b2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGlnZXN0LmRhdGEoKSwgc2l6ZW9mKGRpZ2VzdCkp
OwogfQogCi0vLyBTdG9yZSBjb21tb24gSFRUUCBoZWFkZXJzIGFzIHN0cmluZ3MgaW5zdGVhZCBv
ZiB1c2luZyB0aGVpciB2YWx1ZSBpbiB0aGUgSFRUUEhlYWRlck5hbWUgZW51bWVyYXRpb24KLS8v
IHNvIHRoYXQgdGhlIGhlYWRlcnMgc3RvcmVkIGluIHRoZSBjYWNoZSBzdGF5cyB2YWxpZCBldmVu
IGFmdGVyIEhUVFBIZWFkZXJOYW1lLmluIGdldHMgdXBkYXRlZC4KLXZvaWQgQ29kZXI8V2ViQ29y
ZTo6SFRUUEhlYWRlck1hcD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3Jl
OjpIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQotewotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGhlYWRlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogaGVh
ZGVycykgewotICAgICAgICBlbmNvZGVyIDw8IGtleVZhbHVlLmtleTsKLSAgICAgICAgZW5jb2Rl
ciA8PCBrZXlWYWx1ZS52YWx1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29kZXI8V2ViQ29yZTo6SFRU
UEhlYWRlck1hcD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpIVFRQSGVhZGVy
TWFwJiBoZWFkZXJzKQotewotICAgIHVpbnQ2NF90IGhlYWRlcnNTaXplOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoaGVhZGVyc1NpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9y
ICh1aW50NjRfdCBpID0gMDsgaSA8IGhlYWRlcnNTaXplOyArK2kpIHsKLSAgICAgICAgU3RyaW5n
IG5hbWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGhlYWRl
cnMuYWRkKG5hbWUsIHZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0KIH0K
LQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuaAkocmV2aXNpb24g
MjEwMzMwKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVDb2RlcnMuaDoyMTAzMzApCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2Rl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1
ZGUgIk5ldHdvcmtDYWNoZURlY29kZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0hUVFBIZWFkZXJNYXAuaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQ29kZXI8c3RkOjpwYWlyPFQsIFU+PiB7Cisg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6cGFpcjxU
LCBVPiYgcGFpcikKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgcGFpci5maXJzdCA8PCBwYWly
LnNlY29uZDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjpwYWlyPFQsIFU+JiBwYWlyKQorICAgIHsKKyAgICAgICAgVCBmaXJzdDsKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShmaXJzdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgVSBzZWNvbmQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2Vjb25k
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBwYWlyLmZpcnN0ID0gZmly
c3Q7CisgICAgICAgIHBhaXIuc2Vjb25kID0gc2Vjb25kOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXAsIHR5cGVuYW1lIFBlcmlvZD4gc3Ry
dWN0IENvZGVyPHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4+IHsKKyAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0
aW9uPFJlcCwgUGVyaW9kPiYgZHVyYXRpb24pCisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfaW50ZWdyYWw8UmVwPjo6dmFsdWUgJiYgc3RkOjppc19zaWduZWQ8UmVwPjo6dmFs
dWUgJiYgc2l6ZW9mKFJlcCkgPD0gc2l6ZW9mKGludDY0X3QpLCAiU2VyaWFsaXphdGlvbiBvZiB0
aGlzIFJlcCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBPbmx5IHNpZ25lZCBpbnRlZ2VyIHR5
cGUgd2hpY2ggY2FuIGJlIGZpdCBpbiBhbiBpbnQ2NF90IGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQu
Iik7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZHVyYXRpb24uY291
bnQoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIHJlc3VsdCkKKyAgICB7CisgICAg
ICAgIGludDY0X3QgY291bnQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY291bnQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQgPSBzdGQ6OmNocm9ubzo6
ZHVyYXRpb248UmVwLCBQZXJpb2Q+KHN0YXRpY19jYXN0PFJlcD4oY291bnQpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
ZGVyPHN0ZDo6b3B0aW9uYWw8VD4+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3Qgc3RkOjpvcHRpb25hbDxUPiYgb3B0aW9uYWwpCisgICAgeworICAgICAg
ICBpZiAoIW9wdGlvbmFsKSB7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBlbmNvZGVyIDw8IHRy
dWU7CisgICAgICAgIGVuY29kZXIgPDwgb3B0aW9uYWwudmFsdWUoKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6b3B0aW9uYWw8VD4m
IG9wdGlvbmFsKQorICAgIHsKKyAgICAgICAgYm9vbCBpc0VuZ2FnZWQ7CisgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaXNFbmdhZ2VkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghaXNFbmdhZ2VkKSB7CisgICAgICAgICAgICBvcHRpb25hbCA9
IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBUIHZhbHVlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG9wdGlvbmFs
ID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4gc3RydWN0IENvZGVy
PFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4+IHsKKyAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlw
ZSwgVmFsdWVUeXBlPiYgcGFpcikKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgcGFpci5rZXkg
PDwgcGFpci52YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKKyAg
ICB7CisgICAgICAgIEtleVR5cGUga2V5OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtl
eSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVmFsdWVUeXBlIHZhbHVl
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBwYWlyLmtleSA9IGtleTsKKyAgICAgICAgcGFpci52YWx1ZSA9
IHZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxib29s
IGZpeGVkU2l6ZUVsZW1lbnRzLCB0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHN0
cnVjdCBWZWN0b3JDb2RlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8ZmFsc2UsIFQsIGlubGluZUNhcGFjaXR5PiB7Cisg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdmVjdG9y
W2ldOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICB1aW50NjRf
dCBzaXplOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4gdG1wOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAg
VCBlbGVtZW50OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShlbGVtZW50KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRt
cC5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CisgICAgICAgIH0KKworICAgICAgICB0bXAuc2hy
aW5rVG9GaXQoKTsKKyAgICAgICAgdmVjdG9yLnN3YXAodG1wKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8dHJ1ZSwgVCwgaW5saW5lQ2FwYWNpdHk+IHsKKyAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkp
LCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IHNpemU7CisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgLy8gU2luY2Ugd2Uga25vdyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZWxlbWVudHMs
IHdlIGNhbiBhbGxvY2F0ZSB0aGUgdmVjdG9yIGluCisgICAgICAgIC8vIG9uZSBmZWxsIHN3b29w
LiBCZWZvcmUgYWxsb2NhdGluZyB3ZSBtdXN0IGhvd2V2ZXIgbWFrZSBzdXJlIHRoYXQgdGhlIGRl
Y29kZXIgYnVmZmVyCisgICAgICAgIC8vIGlzIGJpZyBlbm91Z2guCisgICAgICAgIGlmICghZGVj
b2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPFQ+KHNpemUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4gdGVtcDsK
KyAgICAgICAgdGVtcC5yZXNpemUoc2l6ZSk7CisKKyAgICAgICAgZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGVtcC5kYXRhKCkpLCBzaXpl
ICogc2l6ZW9mKFQpKTsKKworICAgICAgICB2ZWN0b3Iuc3dhcCh0ZW1wKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5PiBzdHJ1Y3QgQ29kZXI8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gOiBWZWN0
b3JDb2RlcjxzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlLCBULCBpbmxpbmVDYXBhY2l0eT4g
eyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHNBcmc+IHN0cnVjdCBDb2RlcjxIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBL
ZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4+IHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPiBI
YXNoTWFwVHlwZTsKKworICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGhhc2hNYXAuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh0eXBlbmFt
ZSBIYXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoYXNoTWFwLmJlZ2luKCksIGVuZCA9
IGhhc2hNYXAuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIGVuY29kZXIgPDwg
Kml0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBI
YXNoTWFwVHlwZSYgaGFzaE1hcCkKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IGhhc2hNYXBTaXpl
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc2hNYXBTaXplKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBIYXNoTWFwVHlwZSB0ZW1wSGFzaE1hcDsKKyAgICAg
ICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hNYXBTaXplOyArK2kpIHsKKyAgICAgICAg
ICAgIEtleUFyZyBrZXk7CisgICAgICAgICAgICBNYXBwZWRBcmcgdmFsdWU7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoIXRlbXBIYXNoTWFwLmFkZChrZXks
IHZhbHVlKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGhhc2ggbWFwIGFs
cmVhZHkgaGFzIHRoZSBzcGVjaWZpZWQga2V5LCBiYWlsLgorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGhhc2hNYXAuc3dh
cCh0ZW1wSGFzaE1hcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnPiBzdHJ1Y3QgQ29kZXI8SGFzaFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4+
IHsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IEhh
c2hTZXRUeXBlOworCisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IEhhc2hTZXRUeXBlJiBoYXNoU2V0KQorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oaGFzaFNldC5zaXplKCkpOworICAgICAgICBmb3IgKHR5cGVuYW1l
IEhhc2hTZXRUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IGhhc2hTZXQuYmVnaW4oKSwgZW5kID0g
aGFzaFNldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZW5jb2RlciA8PCAq
aXQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEhh
c2hTZXRUeXBlJiBoYXNoU2V0KQorICAgIHsKKyAgICAgICAgdWludDY0X3QgaGFzaFNldFNpemU7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzaFNldFNpemUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIEhhc2hTZXRUeXBlIHRlbXBIYXNoU2V0OworICAgICAg
ICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgaGFzaFNldFNpemU7ICsraSkgeworICAgICAgICAg
ICAgS2V5QXJnIGtleTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoa2V5KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICghdGVtcEhhc2hT
ZXQuYWRkKGtleSkuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBoYXNoIG1h
cCBhbHJlYWR5IGhhcyB0aGUgc3BlY2lmaWVkIGtleSwgYmFpbC4KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBoYXNoU2V0
LnN3YXAodGVtcEhhc2hTZXQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxBdG9taWNTdHJpbmc+IHsKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYsIGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiwgQXRvbWljU3RyaW5nJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b2RlcjxDU3RyaW5nPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBD
U3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBDU3RyaW5nJik7Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxTdHJpbmc+IHsKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYsIGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShE
ZWNvZGVyJiwgU3RyaW5nJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNv
bnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShE
ZWNvZGVyJiwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb2RlcjxTSEExOjpEaWdlc3Q+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIGNvbnN0IFNIQTE6OkRpZ2VzdCYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVy
JiwgU0hBMTo6RGlnZXN0Jik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3Jl
OjpIVFRQSGVhZGVyTWFwPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25z
dCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29k
ZXImLCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7Cit9OworCit9Cit9CisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0NvZGVycy5oCShyZXZpc2lvbiAyMTAzMzApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Db2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMjEg
KzI1LDE3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0K
LSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hl
RW5jb2Rlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9IVFRQSGVhZGVyTWFwLmg+CiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9w
ZXJzaXN0ZW5jZS9FbmNvZGVyLmg+CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5l
dHdvcmtDYWNoZSB7CituYW1lc3BhY2UgV1RGIHsKK25hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCBDb2RlcjxzdGQ6OnBhaXI8
VCwgVT4+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
c3RkOjpwYWlyPFQsIFU+JiBwYWlyKQpAQCAtMjY2LDM1ICsyNjIsMjQgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29k
ZXI8QXRvbWljU3RyaW5nPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25z
dCBBdG9taWNTdHJpbmcmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIEF0b21p
Y1N0cmluZyYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYsIGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIEF0b21pY1N0cmluZyYpOwogfTsKIAogdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29kZXI8Q1N0cmluZz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiwgY29uc3QgQ1N0cmluZyYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQ1N0
cmluZyYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIGNvbnN0IENTdHJpbmcmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
ZGVjb2RlKERlY29kZXImLCBDU3RyaW5nJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2Rl
cjxTdHJpbmc+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN0cmlu
ZyYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU3RyaW5nJik7Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
byYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiwgY29uc3QgU3RyaW5nJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGRlY29kZShEZWNvZGVyJiwgU3RyaW5nJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2Rl
cjxTSEExOjpEaWdlc3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0
IFNIQTE6OkRpZ2VzdCYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU0hBMTo6
RGlnZXN0Jik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxXZWJDb3JlOjpIVFRQSGVh
ZGVyTWFwPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3Jl
OjpIVFRQSGVhZGVyTWFwJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJD
b3JlOjpIVFRQSGVhZGVyTWFwJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiwgY29uc3QgU0hBMTo6RGlnZXN0Jik7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU0hBMTo6RGlnZXN0Jik7CiB9Owog
CiB9CiB9Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0RlY29kZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuY3Bw
CShyZXZpc2lvbiAyMTAzMzApCShmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwOjIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3RmL3Bl
cnNpc3RlbmNlL0RlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZURlY29kZXIuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5j
bHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVz
cGFjZSBOZXR3b3JrQ2FjaGUgeworCitEZWNvZGVyOjpEZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1
ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCisgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBt
X2J1ZmZlclBvc2l0aW9uKGJ1ZmZlcikKKyAgICAsIG1fYnVmZmVyRW5kKGJ1ZmZlciArIGJ1ZmZl
clNpemUpCit7Cit9CisKK0RlY29kZXI6On5EZWNvZGVyKCkKK3sKK30KKworYm9vbCBEZWNvZGVy
OjpidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemVfdCBzaXplKSBjb25zdAoreworICAg
IHJldHVybiBzaXplIDw9IHN0YXRpY19jYXN0PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZl
clBvc2l0aW9uKTsKK30KKworYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKCFidWZmZXJJc0xhcmdlRW5vdWdo
VG9Db250YWluKHNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtZW1jcHkoZGF0
YSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZSk7CisgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXpl
OworCisgICAgRW5jb2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Citib29s
IERlY29kZXI6OmRlY29kZU51bWJlcihUeXBlJiB2YWx1ZSkKK3sKKyAgICBpZiAoIWJ1ZmZlcklz
TGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZW9mKHZhbHVlKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG1lbWNweSgmdmFsdWUsIG1fYnVmZmVyUG9zaXRpb24sIHNpemVvZih2YWx1ZSkp
OworICAgIG1fYnVmZmVyUG9zaXRpb24gKz0gc2l6ZW9mKFR5cGUpOworCisgICAgRW5jb2Rlcjo6
dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9zaGExLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKGJvb2wmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4g
ZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ4X3Qm
IHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wg
RGVjb2Rlcjo6ZGVjb2RlKHVpbnQxNl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZU51
bWJlcihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OmRlY29kZSh1aW50MzJfdCYgcmVzdWx0
KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKK30KKworYm9vbCBEZWNvZGVy
OjpkZWNvZGUodWludDY0X3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJl
c3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKGludDMyX3QmIHJlc3VsdCkKK3sKKyAg
ICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2Rl
KGludDY0X3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9
CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKGZsb2F0JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRl
Y29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OmRlY29kZShkb3VibGUmIHJl
c3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVj
b2Rlcjo6dmVyaWZ5Q2hlY2tzdW0oKQoreworICAgIFNIQTE6OkRpZ2VzdCBjb21wdXRlZEhhc2g7
CisgICAgbV9zaGExLmNvbXB1dGVIYXNoKGNvbXB1dGVkSGFzaCk7CisKKyAgICBTSEExOjpEaWdl
c3Qgc2F2ZWRIYXNoOworICAgIGlmICghZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHNhdmVkSGFzaC5k
YXRhKCksIHNpemVvZihzYXZlZEhhc2gpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGNvbXB1dGVkSGFzaCA9PSBzYXZlZEhhc2g7Cit9CisKK30KK30KKworI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmNwcAkocmV2aXNpb24gMjEwMzMw
KQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDE0ICsyNCwxMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgiCisjaW5jbHVkZSAiRGVjb2Rlci5oIgogCi0jaWYg
RU5BQkxFKE5FVFdPUktfQ0FDSEUpCisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0VuY29kZXIu
aD4KIAotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNl
IFBlcnNpc3RlbmNlIHsKIAogRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIs
IHNpemVfdCBidWZmZXJTaXplKQogICAgIDogbV9idWZmZXIoYnVmZmVyKQpAQCAtMTMzLDUgKzEz
MSwzIEBAIGJvb2wgRGVjb2Rlcjo6dmVyaWZ5Q2hlY2tzdW0oKQogCiB9CiB9Ci0KLSNlbmRpZgpJ
bmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaAkocmV2aXNpb24gMjEwMzMwKQko
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNv
ZGVyLmg6MjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3
b3JrQ2FjaGVEZWNvZGVyX2gKKyNkZWZpbmUgTmV0d29ya0NhY2hlRGVjb2Rlcl9oCisKKyNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVyLmgiCisj
aW5jbHVkZSA8d3RmL1NIQTEuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0
d29ya0NhY2hlIHsKKworY2xhc3MgRGVjb2RlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgRGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBi
dWZmZXJTaXplKTsKKyAgICB2aXJ0dWFsIH5EZWNvZGVyKCk7CisKKyAgICBzaXplX3QgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQorICAgIHNpemVfdCBj
dXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3NpdGlvbiAtIG1fYnVmZmVy
OyB9CisKKyAgICBib29sIHZlcmlmeUNoZWNrc3VtKCk7CisKKyAgICBib29sIGRlY29kZUZpeGVk
TGVuZ3RoRGF0YSh1aW50OF90Kiwgc2l6ZV90KTsKKworICAgIGJvb2wgZGVjb2RlKGJvb2wmKTsK
KyAgICBib29sIGRlY29kZSh1aW50OF90Jik7CisgICAgYm9vbCBkZWNvZGUodWludDE2X3QmKTsK
KyAgICBib29sIGRlY29kZSh1aW50MzJfdCYpOworICAgIGJvb2wgZGVjb2RlKHVpbnQ2NF90Jik7
CisgICAgYm9vbCBkZWNvZGUoaW50MzJfdCYpOworICAgIGJvb2wgZGVjb2RlKGludDY0X3QmKTsK
KyAgICBib29sIGRlY29kZShmbG9hdCYpOworICAgIGJvb2wgZGVjb2RlKGRvdWJsZSYpOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBkZWNvZGVFbnVtKFQmIHJlc3VsdCkKKyAgICB7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpIDw9IDgsICJFbnVtIHR5cGUgVCBtdXN0
IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBiaXRzISIpOworCisgICAgICAgIHVpbnQ2NF90IHZhbHVl
OworICAgICAgICBpZiAoIWRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxUPih2YWx1ZSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wg
ZGVjb2RlKFQmIHQpCisgICAgeworICAgICAgICByZXR1cm4gQ29kZXI8VD46OmRlY29kZSgqdGhp
cywgdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGJ1ZmZl
cklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IG51bUVsZW1lbnRzKSBjb25zdAorICAgIHsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlLCAiVHlw
ZSBUIG11c3QgaGF2ZSBhIGZpeGVkLCBrbm93biBlbmNvZGVkIHNpemUhIik7CisKKyAgICAgICAg
aWYgKG51bUVsZW1lbnRzID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAvIHNp
emVvZihUKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gYnVm
ZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihUKSk7CisgICAg
fQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENEZWNvZGVyID0gZmFsc2U7CisKK3ByaXZh
dGU6CisgICAgYm9vbCBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemVfdCkgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gYm9vbCBkZWNvZGVOdW1iZXIoVHlwZSYpOwor
CisgICAgY29uc3QgdWludDhfdCogbV9idWZmZXI7CisgICAgY29uc3QgdWludDhfdCogbV9idWZm
ZXJQb3NpdGlvbjsKKyAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlckVuZDsKKworICAgIFNIQTEg
bV9zaGExOworfTsKKworfSAKK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9w
ZXJzaXN0ZW5jZS9EZWNvZGVyLmgJKHJldmlzaW9uIDIxMDMzMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L3BlcnNpc3RlbmNlL0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMzkgKzIzLDM2IEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBOZXR3
b3JrQ2FjaGVEZWNvZGVyX2gKLSNkZWZpbmUgTmV0d29ya0NhY2hlRGVjb2Rlcl9oCisjcHJhZ21h
IG9uY2UKIAotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotCi0jaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlQ29kZXIuaCIKICNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0
ZW5jZS9Db2Rlci5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgeworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiBjbGFzcyBE
ZWNvZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBEZWNv
ZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOwotICAgIHZpcnR1
YWwgfkRlY29kZXIoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2Rlcihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
fkRlY29kZXIoKTsKIAogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZl
ckVuZCAtIG1fYnVmZmVyOyB9CiAgICAgc2l6ZV90IGN1cnJlbnRPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX2J1ZmZlclBvc2l0aW9uIC0gbV9idWZmZXI7IH0KIAotICAgIGJvb2wgdmVyaWZ5Q2hl
Y2tzdW0oKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB2ZXJpZnlDaGVja3N1bSgpOwog
Ci0gICAgYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCosIHNpemVfdCk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBz
aXplX3QpOwogCi0gICAgYm9vbCBkZWNvZGUoYm9vbCYpOwotICAgIGJvb2wgZGVjb2RlKHVpbnQ4
X3QmKTsKLSAgICBib29sIGRlY29kZSh1aW50MTZfdCYpOwotICAgIGJvb2wgZGVjb2RlKHVpbnQz
Ml90Jik7Ci0gICAgYm9vbCBkZWNvZGUodWludDY0X3QmKTsKLSAgICBib29sIGRlY29kZShpbnQz
Ml90Jik7Ci0gICAgYm9vbCBkZWNvZGUoaW50NjRfdCYpOwotICAgIGJvb2wgZGVjb2RlKGZsb2F0
Jik7Ci0gICAgYm9vbCBkZWNvZGUoZG91YmxlJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgZGVjb2RlKGJvb2wmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWlu
dDhfdCYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50MTZfdCYpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50MzJfdCYpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50NjRfdCYpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGRlY29kZShpbnQzMl90Jik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
ZGVjb2RlKGludDY0X3QmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUoZmxv
YXQmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUoZG91YmxlJik7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZUVudW0oVCYgcmVzdWx0KQogICAgIHsK
QEAgLTg4LDcgKzg1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBib29sIGlzSVBDRGVj
b2RlciA9IGZhbHNlOwogCiBwcml2YXRlOgotICAgIGJvb2wgYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbihzaXplX3QpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGJ1ZmZl
cklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90KSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUeXBlPiBib29sIGRlY29kZU51bWJlcihUeXBlJik7CiAKICAgICBjb25zdCB1aW50OF90
KiBtX2J1ZmZlcjsKQEAgLTEwMSw1ICs5OCwzIEBAIHByaXZhdGU6CiB9IAogfQogCi0jZW5kaWYK
LSNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5jcHAJKHJldmlz
aW9uIDIxMDMzMCkJKGZyb20gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlRW5jb2Rlci5jcHA6MjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvRW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5j
b2Rlci5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKK25hbWVzcGFjZSBXZWJLaXQg
eworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CisKK0VuY29kZXI6OkVuY29kZXIoKQoreworfQor
CitFbmNvZGVyOjp+RW5jb2RlcigpCit7Cit9CisKK3VpbnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6
ZV90IHNpemUpCit7CisgICAgc2l6ZV90IG5ld1Bvc2l0aW9uID0gbV9idWZmZXIuc2l6ZSgpOwor
ICAgIG1fYnVmZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgpICsgc2l6ZSk7CisgICAgcmV0dXJuIG1f
YnVmZmVyLmRhdGEoKSArIG5ld1Bvc2l0aW9uOworfQorCit2b2lkIEVuY29kZXI6OnVwZGF0ZUNo
ZWNrc3VtRm9yRGF0YShTSEExJiBzaGExLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6
ZSkKK3sKKyAgICBhdXRvIHR5cGVTYWx0ID0gU2FsdDx1aW50OF90Kj46OnZhbHVlOworICAgIHNo
YTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9m
KHR5cGVTYWx0KSk7CisgICAgc2hhMS5hZGRCeXRlcyhkYXRhLCBzaXplKTsKK30KKwordm9pZCBF
bmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUpCit7CisgICAgdXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7
CisKKyAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemUpOworICAgIG1lbWNweShidWZmZXIs
IGRhdGEsIHNpemUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgordm9pZCBFbmNvZGVy
OjplbmNvZGVOdW1iZXIoVHlwZSB2YWx1ZSkKK3sKKyAgICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1
bUZvck51bWJlcihtX3NoYTEsIHZhbHVlKTsKKworICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3co
c2l6ZW9mKFR5cGUpKTsKKyAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUsIHNpemVvZihUeXBlKSk7
Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGJvb2wgdmFsdWUpCit7CisgICAgZW5jb2RlTnVt
YmVyKHZhbHVlKTsKK30KKwordm9pZCBFbmNvZGVyOjplbmNvZGUodWludDhfdCB2YWx1ZSkKK3sK
KyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lkIEVuY29kZXI6OmVuY29kZSh1aW50
MTZfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lkIEVuY29k
ZXI6OmVuY29kZSh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwor
fQorCit2b2lkIEVuY29kZXI6OmVuY29kZSh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVO
dW1iZXIodmFsdWUpOworfQorCit2b2lkIEVuY29kZXI6OmVuY29kZShpbnQzMl90IHZhbHVlKQor
eworICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGlu
dDY0X3QgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30KKwordm9pZCBFbmNv
ZGVyOjplbmNvZGUoZmxvYXQgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30K
Kwordm9pZCBFbmNvZGVyOjplbmNvZGUoZG91YmxlIHZhbHVlKQoreworICAgIGVuY29kZU51bWJl
cih2YWx1ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQoreworICAgIFNI
QTE6OkRpZ2VzdCBoYXNoOworICAgIG1fc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKKyAgICBlbmNv
ZGVGaXhlZExlbmd0aERhdGEoaGFzaC5kYXRhKCksIGhhc2guc2l6ZSgpKTsKK30KKworfQorfQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuY3BwCShyZXZp
c2lvbiAyMTAzMzApCisrKyBTb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsMTIgKzI0LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKKyNpbmNsdWRlICJFbmNvZGVy
LmgiCiAKLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKyNpbmNsdWRlICJTSEExLmgiCiAKLW5h
bWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CituYW1lc3BhY2UgV1RG
IHsKK25hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKIEVuY29kZXI6OkVuY29kZXIoKQogewpAQCAt
MTI0LDUgKzEyNCwzIEBAIHZvaWQgRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQogCiB9CiB9Ci0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaAkocmV2aXNpb24g
MjEwMzMwKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVFbmNvZGVyLmg6MjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvRW5j
b2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBOZXR3b3JrQ2FjaGVFbmNvZGVyX2gKKyNkZWZpbmUgTmV0d29ya0NhY2hlRW5jb2Rlcl9o
CisKKyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNv
ZGVyLmgiCisjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CisKK2NsYXNzIEVu
Y29kZXI7CitjbGFzcyBEYXRhUmVmZXJlbmNlOworCitjbGFzcyBFbmNvZGVyIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBFbmNvZGVyKCk7CisgICAgdmlydHVh
bCB+RW5jb2RlcigpOworCisgICAgdm9pZCBlbmNvZGVDaGVja3N1bSgpOworICAgIHZvaWQgZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVFbnVtKFQgdCkKKyAgICB7CisgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihUKSA8PSBzaXplb2YodWludDY0X3QpLCBlbnVtX3R5cGVfbXVzdF9u
b3RfYmVfbGFyZ2VyX3RoYW5fNjRfYml0cyk7CisKKyAgICAgICAgZW5jb2RlKHN0YXRpY19jYXN0
PHVpbnQ2NF90Pih0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBl
bmNvZGUoY29uc3QgVCYgdCkKKyAgICB7CisgICAgICAgIENvZGVyPFQ+OjplbmNvZGUoKnRoaXMs
IHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEVuY29kZXImIG9wZXJhdG9y
PDwoY29uc3QgVCYgdCkKKyAgICB7CisgICAgICAgIGVuY29kZSh0KTsKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKworICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQorICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9CisKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1
bUZvckRhdGEoU0hBMSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUeXBlPiBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwg
VHlwZSk7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0lQQ0VuY29kZXIgPSBmYWxzZTsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIGVuY29kZShib29sKTsKKyAgICB2b2lkIGVuY29kZSh1aW50OF90
KTsKKyAgICB2b2lkIGVuY29kZSh1aW50MTZfdCk7CisgICAgdm9pZCBlbmNvZGUodWludDMyX3Qp
OworICAgIHZvaWQgZW5jb2RlKHVpbnQ2NF90KTsKKyAgICB2b2lkIGVuY29kZShpbnQzMl90KTsK
KyAgICB2b2lkIGVuY29kZShpbnQ2NF90KTsKKyAgICB2b2lkIGVuY29kZShmbG9hdCk7CisgICAg
dm9pZCBlbmNvZGUoZG91YmxlKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IHZvaWQg
ZW5jb2RlTnVtYmVyKFR5cGUpOworCisgICAgdWludDhfdCogZ3JvdyhzaXplX3QpOworCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+IHN0cnVjdCBTYWx0OworCisgICAgVmVjdG9yPHVpbnQ4
X3QsIDQwOTY+IG1fYnVmZmVyOworICAgIFNIQTEgbV9zaGExOworfTsKKwordGVtcGxhdGUgPD4g
c3RydWN0IEVuY29kZXI6OlNhbHQ8Ym9vbD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUg
PSAzOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8dWludDhfdD4geyBzdGF0
aWMgY29uc3QgIHVuc2lnbmVkIHZhbHVlID0gNTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNv
ZGVyOjpTYWx0PHVpbnQxNl90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDc7IH07
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50MzJfdD4geyBzdGF0aWMgY29u
c3QgdW5zaWduZWQgdmFsdWUgPSAxMTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpT
YWx0PHVpbnQ2NF90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDEzOyB9OwordGVt
cGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8aW50MzJfdD4geyBzdGF0aWMgY29uc3QgdW5z
aWduZWQgdmFsdWUgPSAxNzsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGlu
dDY0X3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMTk7IH07Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDxmbG9hdD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFs
dWUgPSAyMzsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PGRvdWJsZT4geyBz
dGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAyOTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBF
bmNvZGVyOjpTYWx0PHVpbnQ4X3QqPiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDEw
MTsgfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEVuY29kZXI6OnVwZGF0ZUNo
ZWNrc3VtRm9yTnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCit7CisgICAgYXV0byB0eXBl
U2FsdCA9IFNhbHQ8VHlwZT46OnZhbHVlOworICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7CisgICAgc2hhMS5h
ZGRCeXRlcyhyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUpLCBzaXplb2YodmFsdWUp
KTsKK30KKworfQorfQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvcGVy
c2lzdGVuY2UvRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3BlcnNpc3Rl
bmNlL0VuY29kZXIuaAkocmV2aXNpb24gMjEwMzMwKQorKysgU291cmNlL1dURi93dGYvcGVyc2lz
dGVuY2UvRW5jb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNyArMjMsMTQgQEAKICAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE5ldHdvcmtDYWNo
ZUVuY29kZXJfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVFbmNvZGVyX2gKKyNwcmFnbWEgb25jZQog
Ci0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0KLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2Rl
ci5oIgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9Db2Rlci5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5h
bWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworbmFtZXNwYWNlIFdURiB7CituYW1lc3BhY2UgUGVyc2lz
dGVuY2UgewogCiBjbGFzcyBFbmNvZGVyOwogY2xhc3MgRGF0YVJlZmVyZW5jZTsKQEAgLTQxLDEx
ICszOCwxMSBAQCBjbGFzcyBEYXRhUmVmZXJlbmNlOwogY2xhc3MgRW5jb2RlciB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRW5jb2RlcigpOwotICAgIHZpcnR1
YWwgfkVuY29kZXIoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRW5jb2RlcigpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB+RW5jb2RlcigpOwogCi0gICAgdm9pZCBlbmNvZGVDaGVja3N1bSgp
OwotICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZUNoZWNrc3VtKCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVFbnVtKFQg
dCkKICAgICB7CkBAIC02OCwyMSArNjUsMjEgQEAgcHVibGljOgogICAgIGNvbnN0IHVpbnQ4X3Qq
IGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQogICAgIHNpemVfdCBi
dWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9CiAKLSAgICBzdGF0
aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZv
ckRhdGEoU0hBMSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUeXBlPiBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSEExJiwgVHlw
ZSk7CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0lQQ0VuY29kZXIgPSBmYWxzZTsKIAogcHJp
dmF0ZToKLSAgICB2b2lkIGVuY29kZShib29sKTsKLSAgICB2b2lkIGVuY29kZSh1aW50OF90KTsK
LSAgICB2b2lkIGVuY29kZSh1aW50MTZfdCk7Ci0gICAgdm9pZCBlbmNvZGUodWludDMyX3QpOwot
ICAgIHZvaWQgZW5jb2RlKHVpbnQ2NF90KTsKLSAgICB2b2lkIGVuY29kZShpbnQzMl90KTsKLSAg
ICB2b2lkIGVuY29kZShpbnQ2NF90KTsKLSAgICB2b2lkIGVuY29kZShmbG9hdCk7Ci0gICAgdm9p
ZCBlbmNvZGUoZG91YmxlKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoYm9v
bCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKHVpbnQ4X3QpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZSh1aW50MTZfdCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZW5jb2RlKHVpbnQzMl90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGUodWludDY0X3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShp
bnQzMl90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoaW50NjRfdCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGZsb2F0KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBlbmNvZGUoZG91YmxlKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5
cGU+IHZvaWQgZW5jb2RlTnVtYmVyKFR5cGUpOwogCkBAIC0xMTUsNiArMTEyLDMgQEAgdm9pZCBF
bmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvck51bWJlcihTSAogCiB9CiB9Ci0KLSNlbmRpZgotI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2MiBAQAorMjAxNy0wMS0wOCAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBjYWNoZSBjb2Rl
cnMgdG8gV1RGCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjY4MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxBdG9taWNTdHJpbmc+OjplbmNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPEF0b21pY1N0cmluZz46OmRl
Y29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8Q1N0
cmluZz46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
Q29kZXI8Q1N0cmluZz46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpkZWNvZGVTdHJpbmdUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxTdHJpbmc+OjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFNIQTE6OkRpZ2VzdD46OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8U0hBMTo6RGln
ZXN0Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpD
b2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjpDb2RlcjxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPjo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVDb2RlcnMuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6Q29kZXI8c3RkOjpvcHRpb25hbDxUPj46OmVuY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8c3RkOjpvcHRpb25hbDxUPj46OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXJzQ29jb2EuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVuY29kZUNG
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2RlQ0ZE
YXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjplbmNvZGVTZWNU
cnVzdFJlZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZGVjb2Rl
U2VjVHJ1c3RSZWYpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmVu
Y29kZUNlcnRpZmljYXRlQ2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OmRlY29kZUNlcnRpZmljYXRlQ2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkNvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q29kZXI8V2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmg6IFJlbW92ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVu
dHJ5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6ZW5jb2RlQXNT
dG9yYWdlUmVjb3JkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6ZGVj
b2RlU3RvcmFnZVJlY29yZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlS2V5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpLZXk6OmVuY29k
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6S2V5OjpkZWNvZGUpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OmRlY29kZVJlY29yZE1ldGFEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjplbmNvZGVSZWNvcmRNZXRhRGF0YSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN1YnJlc291cmNlSW5mbzo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdWJyZXNvdXJjZUluZm86OmRlY29kZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2VzRW50cnk6OmVuY29kZUFzU3Rv
cmFnZVJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3VicmVzb3VyY2Vz
RW50cnk6OmRlY29kZVN0b3JhZ2VSZWNvcmQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6ZW5j
b2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVu
dEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMTctMDEtMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbW92ZSBQYXNzUmVmUHRyIHVzZSBmcm9tICJpbnNwZWN0b3IiLCAicGxhdGZv
cm0vc3FsIiwgYW5kICJwbGF0Zm9ybS90ZXh0IgpJbmRleDogU291cmNlL1dlYktpdDIvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMTAsOCArMTEwLDYgQEAgc2V0KE5ldHdvcmtQcm9jZXNzX0NPTU1PTl9TT1VS
Q0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3Bw
CiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAogICAgIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGEuY3BwCi0gICAgTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVudHJ5LmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZp
bGVTeXN0ZW0uY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNw
cApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVDb2Rlci5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2Rlci5oCShub25leGlzdGVudCkK
QEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTmV0d29ya0NhY2hl
Q29kZXJfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVDb2Rlcl9oCi0KLSNpZiBFTkFCTEUoTkVUV09S
S19DQUNIRSkKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsK
LQotY2xhc3MgRGVjb2RlcjsKLWNsYXNzIEVuY29kZXI7Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29kZXIgewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBUJiB0KQotICAgIHsKLSAgICAgICAgdC5lbmNvZGUoZW5jb2Rlcik7Ci0gICAg
fQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFQmIHQpCi0gICAg
ewotICAgICAgICByZXR1cm4gVDo6ZGVjb2RlKGRlY29kZXIsIHQpOwotICAgIH0KLX07Ci0KLX0K
LX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAkocmV2aXNpb24g
MjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlQ29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMyICsyOCw4IEBACiAKICNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1l
c3BhY2UgTmV0d29ya0NhY2hlIHsKLQotdm9pZCBDb2RlcjxBdG9taWNTdHJpbmc+OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCi17Ci0g
ICAgZW5jb2RlciA8PCBhdG9taWNTdHJpbmcuc3RyaW5nKCk7Ci19Ci0KLWJvb2wgQ29kZXI8QXRv
bWljU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEF0b21pY1N0cmluZyYgYXRvbWlj
U3RyaW5nKQotewotICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
dHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdG9taWNTdHJpbmcgPSBzdHJp
bmc7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29kZXI8Q1N0cmluZz46OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgLy8gU3BlY2lh
bCBjYXNlIHRoZSBudWxsIHN0cmluZy4KLSAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIGVuY29kZXIgPDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0
aCgpOwotICAgIGVuY29kZXIgPDwgbGVuZ3RoOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5kYXRhKCkpLCBs
ZW5ndGgpOwotfQotCi1ib29sIENvZGVyPENTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgQ1N0cmluZyYgcmVzdWx0KQotewotICAgIHVpbnQzMl90IGxlbmd0aDsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChs
ZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7Ci0gICAgICAg
IC8vIFRoaXMgaXMgdGhlIG51bGwgc3RyaW5nLgotICAgICAgICByZXN1bHQgPSBDU3RyaW5nKCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIEJlZm9yZSBhbGxvY2F0aW5n
IHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBiaWcgZW5v
dWdoLgotICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPGNoYXI+
KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNoYXIqIGJ1ZmZlcjsKLSAg
ICBDU3RyaW5nIHN0cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZm
ZXIpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmVzdWx0ID0gc3RyaW5nOwotICAgIHJldHVybiB0cnVlOwotfQotCi0KLXZvaWQgQ29k
ZXI8U3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5n
KQotewotICAgIC8vIFNwZWNpYWwgY2FzZSB0aGUgbnVsbCBzdHJpbmcuCi0gICAgaWYgKHN0cmlu
Zy5pc051bGwoKSkgewotICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVpbnQzMl90IGxl
bmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBib29sIGlzOEJpdCA9IHN0cmluZy5pczhCaXQo
KTsKLQotICAgIGVuY29kZXIgPDwgbGVuZ3RoIDw8IGlzOEJpdDsKLQotICAgIGlmIChpczhCaXQp
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzOCgpKSwgbGVuZ3RoICogc2l6ZW9mKExD
aGFyKSk7Ci0gICAgZWxzZQotICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVyczE2KCkpLCBs
ZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgZGVjb2RlU3RyaW5nVGV4dChEZWNvZGVyJiBkZWNv
ZGVyLCB1aW50MzJfdCBsZW5ndGgsIFN0cmluZyYgcmVzdWx0KQotewotICAgIC8vIEJlZm9yZSBh
bGxvY2F0aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBp
cyBiaWcgZW5vdWdoLgotICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250
YWluPENoYXJhY3RlclR5cGU+KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKLSAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpjcmVh
dGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0
aCAqIHNpemVvZihDaGFyYWN0ZXJUeXBlKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICByZXN1bHQgPSBzdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7ICAgIAotfQotCi1ib29sIENv
ZGVyPFN0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTdHJpbmcmIHJlc3VsdCkKLXsK
LSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShsZW5ndGgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobGVuZ3RoID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSkgewotICAgICAgICAvLyBUaGlzIGlzIHRoZSBudWxsIHN0
cmluZy4KLSAgICAgICAgcmVzdWx0ID0gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGJvb2wgaXM4Qml0OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXM4Qml0
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGlzOEJpdCkKLSAgICAgICAgcmV0
dXJuIGRlY29kZVN0cmluZ1RleHQ8TENoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKLSAg
ICByZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxVQ2hhcj4oZGVjb2RlciwgbGVuZ3RoLCByZXN1bHQp
OwotfQotCi0KLXZvaWQgQ29kZXI8U0hBMTo6RGlnZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFNIQTE6OkRpZ2VzdCYgZGlnZXN0KQotewotICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKGRpZ2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKLX0KLQotYm9vbCBD
b2RlcjxTSEExOjpEaWdlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU0hBMTo6RGlnZXN0
JiBkaWdlc3QpCi17Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGRp
Z2VzdC5kYXRhKCksIHNpemVvZihkaWdlc3QpKTsKLX0KK25hbWVzcGFjZSBXVEYgeworbmFtZXNw
YWNlIFBlcnNpc3RlbmNlIHsKIAogLy8gU3RvcmUgY29tbW9uIEhUVFAgaGVhZGVycyBhcyBzdHJp
bmdzIGluc3RlYWQgb2YgdXNpbmcgdGhlaXIgdmFsdWUgaW4gdGhlIEhUVFBIZWFkZXJOYW1lIGVu
dW1lcmF0aW9uCiAvLyBzbyB0aGF0IHRoZSBoZWFkZXJzIHN0b3JlZCBpbiB0aGUgY2FjaGUgc3Rh
eXMgdmFsaWQgZXZlbiBhZnRlciBIVFRQSGVhZGVyTmFtZS5pbiBnZXRzIHVwZGF0ZWQuCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVDb2RlcnMuaAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDggKzI3LDYgQEAKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogCi0jaW5jbHVkZSAi
TmV0d29ya0NhY2hlRGVjb2Rlci5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SFRUUEhlYWRlck1hcC5oPgogI2luY2x1ZGUgPHV0aWxpdHk+CkBAIC0zNywyNTkgKzM1LDE4IEBA
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU0hBMS5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvQ29kZXJzLmg+Cisj
aW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lz
dGVuY2UvRW5jb2Rlci5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3Jr
Q2FjaGUgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQ29kZXI8
c3RkOjpwYWlyPFQsIFU+PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IHN0ZDo6cGFpcjxULCBVPiYgcGFpcikKLSAgICB7Ci0gICAgICAgIGVuY29kZXIg
PDwgcGFpci5maXJzdCA8PCBwYWlyLnNlY29uZDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwgc3RkOjpwYWlyPFQsIFU+JiBwYWlyKQotICAgIHsKLSAg
ICAgICAgVCBmaXJzdDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShmaXJzdCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgVSBzZWNvbmQ7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoc2Vjb25kKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBwYWlyLmZpcnN0ID0gZmlyc3Q7Ci0gICAgICAgIHBhaXIuc2Vjb25kID0gc2Vjb25kOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXAs
IHR5cGVuYW1lIFBlcmlvZD4gc3RydWN0IENvZGVyPHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAs
IFBlcmlvZD4+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiYgZHVyYXRpb24pCi0gICAgewot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8UmVwPjo6dmFsdWUgJiYgc3Rk
Ojppc19zaWduZWQ8UmVwPjo6dmFsdWUgJiYgc2l6ZW9mKFJlcCkgPD0gc2l6ZW9mKGludDY0X3Qp
LCAiU2VyaWFsaXphdGlvbiBvZiB0aGlzIFJlcCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBP
bmx5IHNpZ25lZCBpbnRlZ2VyIHR5cGUgd2hpY2ggY2FuIGJlIGZpdCBpbiBhbiBpbnQ2NF90IGlz
IGN1cnJlbnRseSBzdXBwb3J0ZWQuIik7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
aW50NjRfdD4oZHVyYXRpb24uY291bnQoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4m
IHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIGludDY0X3QgY291bnQ7Ci0gICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoY291bnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBy
ZXN1bHQgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+KHN0YXRpY19jYXN0PFJl
cD4oY291bnQpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvZGVyPHN0ZDo6b3B0aW9uYWw8VD4+IHsKLSAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpvcHRpb25hbDxUPiYgb3B0
aW9uYWwpCi0gICAgewotICAgICAgICBpZiAoIW9wdGlvbmFsKSB7Ci0gICAgICAgICAgICBlbmNv
ZGVyIDw8IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAgICAgIGVuY29kZXIgPDwgb3B0aW9uYWwudmFs
dWUoKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIHN0ZDo6b3B0aW9uYWw8VD4mIG9wdGlvbmFsKQotICAgIHsKLSAgICAgICAgYm9vbCBpc0Vu
Z2FnZWQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFbmdhZ2VkKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaXNFbmdhZ2VkKSB7Ci0g
ICAgICAgICAgICBvcHRpb25hbCA9IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBUIHZhbHVlOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCi0gICAgICAgIG9wdGlvbmFsID0gV1RGTW92ZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZh
bHVlVHlwZT4gc3RydWN0IENvZGVyPFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlw
ZT4+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RG
OjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKLSAgICB7Ci0gICAgICAg
IGVuY29kZXIgPDwgcGFpci5rZXkgPDwgcGFpci52YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwg
VmFsdWVUeXBlPiYgcGFpcikKLSAgICB7Ci0gICAgICAgIEtleVR5cGUga2V5OwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgVmFsdWVUeXBlIHZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBwYWlyLmtleSA9IGtleTsK
LSAgICAgICAgcGFpci52YWx1ZSA9IHZhbHVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTxib29sIGZpeGVkU2l6ZUVsZW1lbnRzLCB0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+IHN0cnVjdCBWZWN0b3JDb2RlcjsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8ZmFsc2UsIFQs
IGlubGluZUNhcGFjaXR5PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIGVuY29kZXIgPDwgdmVjdG9yW2ldOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0g
ICAgewotICAgICAgICB1aW50NjRfdCBzaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT4gdG1wOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICAgICAgVCBlbGVtZW50OwotICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShlbGVtZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHRtcC5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB0bXAuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgdmVjdG9yLnN3YXAodG1w
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8dHJ1ZSwgVCwgaW5s
aW5lQ2FwYWNpdHk+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7Ci0gICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9m
KFQpKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIHVp
bnQ2NF90IHNpemU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2luY2Ugd2Uga25vdyB0aGUgdG90YWwg
c2l6ZSBvZiB0aGUgZWxlbWVudHMsIHdlIGNhbiBhbGxvY2F0ZSB0aGUgdmVjdG9yIGluCi0gICAg
ICAgIC8vIG9uZSBmZWxsIHN3b29wLiBCZWZvcmUgYWxsb2NhdGluZyB3ZSBtdXN0IGhvd2V2ZXIg
bWFrZSBzdXJlIHRoYXQgdGhlIGRlY29kZXIgYnVmZmVyCi0gICAgICAgIC8vIGlzIGJpZyBlbm91
Z2guCi0gICAgICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPFQ+
KHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT4gdGVtcDsKLSAgICAgICAgdGVtcC5yZXNpemUoc2l6ZSk7Ci0KLSAgICAg
ICAgZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4odGVtcC5kYXRhKCkpLCBzaXplICogc2l6ZW9mKFQpKTsKLQotICAgICAgICB2ZWN0b3Iuc3dh
cCh0ZW1wKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgQ29kZXI8VmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5Pj4gOiBWZWN0b3JDb2RlcjxzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVl
LCBULCBpbmxpbmVDYXBhY2l0eT4geyB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+IHN0cnVjdCBDb2RlcjxIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4+IHsKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
ZywgTWFwcGVkVHJhaXRzQXJnPiBIYXNoTWFwVHlwZTsKLQotICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKLSAgICB7Ci0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhhc2hNYXAuc2l6ZSgpKTsK
LSAgICAgICAgZm9yICh0eXBlbmFtZSBIYXNoTWFwVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBo
YXNoTWFwLmJlZ2luKCksIGVuZCA9IGhhc2hNYXAuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIGVuY29kZXIgPDwgKml0OwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKLSAgICB7Ci0gICAgICAg
IHVpbnQ2NF90IGhhc2hNYXBTaXplOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc2hN
YXBTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBIYXNoTWFwVHlw
ZSB0ZW1wSGFzaE1hcDsKLSAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hNYXBT
aXplOyArK2kpIHsKLSAgICAgICAgICAgIEtleUFyZyBrZXk7Ci0gICAgICAgICAgICBNYXBwZWRB
cmcgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2
YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAo
IXRlbXBIYXNoTWFwLmFkZChrZXksIHZhbHVlKS5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVGhlIGhhc2ggbWFwIGFscmVhZHkgaGFzIHRoZSBzcGVjaWZpZWQga2V5LCBiYWlsLgot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGhhc2hNYXAuc3dhcCh0ZW1wSGFzaE1hcCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQ29kZXI8SGFzaFNldDxLZXlBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZz4+IHsKLSAgICB0eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmc+IEhhc2hTZXRUeXBlOwotCi0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hTZXRUeXBlJiBoYXNoU2V0KQotICAgIHsKLSAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaGFzaFNldC5zaXplKCkpOwot
ICAgICAgICBmb3IgKHR5cGVuYW1lIEhhc2hTZXRUeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IGhh
c2hTZXQuYmVnaW4oKSwgZW5kID0gaGFzaFNldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICAgICAgZW5jb2RlciA8PCAqaXQ7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIEhhc2hTZXRUeXBlJiBoYXNoU2V0KQotICAgIHsKLSAgICAgICAg
dWludDY0X3QgaGFzaFNldFNpemU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzaFNl
dFNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEhhc2hTZXRUeXBl
IHRlbXBIYXNoU2V0OwotICAgICAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgaGFzaFNldFNp
emU7ICsraSkgewotICAgICAgICAgICAgS2V5QXJnIGtleTsKLSAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoa2V5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIGlmICghdGVtcEhhc2hTZXQuYWRkKGtleSkuaXNOZXdFbnRyeSkgewotICAgICAgICAg
ICAgICAgIC8vIFRoZSBoYXNoIG1hcCBhbHJlYWR5IGhhcyB0aGUgc3BlY2lmaWVkIGtleSwgYmFp
bC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBoYXNoU2V0LnN3YXAodGVtcEhhc2hTZXQpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxBdG9taWNTdHJpbmc+
IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IEF0b21pY1N0cmluZyYp
OwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQXRvbWljU3RyaW5nJik7Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxDU3RyaW5nPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImLCBjb25zdCBDU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERl
Y29kZXImLCBDU3RyaW5nJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxTdHJpbmc+
IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFN0cmluZyYpOwotICAg
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU3RyaW5nJik7Ci19OworbmFtZXNwYWNlIFdU
RiB7CituYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwogICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CiB9OwogCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb2RlcjxTSEExOjpEaWdlc3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYsIGNvbnN0IFNIQTE6OkRpZ2VzdCYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShE
ZWNvZGVyJiwgU0hBMTo6RGlnZXN0Jik7Ci19OwotCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb2RlcjxX
ZWJDb3JlOjpIVFRQSGVhZGVyTWFwPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXIm
LCBjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImLCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnNDb2NvYS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXJzQ29jb2EuY3BwCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnNDb2NvYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRlIDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJ
Lmg+CiAjZW5kaWYKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hl
IHsKK25hbWVzcGFjZSBXVEYgeworbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogc3RhdGljIHZv
aWQgZW5jb2RlQ0ZEYXRhKEVuY29kZXImIGVuY29kZXIsIENGRGF0YVJlZiBkYXRhKQogewpJbmRl
eDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJz
U291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlQ29kZXJzU291cC5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyc1NvdXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoTkVUV09SS19D
QUNIRSkKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKK25h
bWVzcGFjZSBXVEYgeworbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogdm9pZCBDb2RlcjxXZWJD
b3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCiB7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEZWNvZGVyLmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rlci5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSwxMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgiCi0KLSNpZiBFTkFCTEUoTkVUV09S
S19DQUNIRSkKLQotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKLQotRGVjb2Rlcjo6RGVjb2Rlcihj
b25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQotICAgIDogbV9idWZmZXIo
YnVmZmVyKQotICAgICwgbV9idWZmZXJQb3NpdGlvbihidWZmZXIpCi0gICAgLCBtX2J1ZmZlckVu
ZChidWZmZXIgKyBidWZmZXJTaXplKQotewotfQotCi1EZWNvZGVyOjp+RGVjb2RlcigpCi17Ci19
Ci0KLWJvb2wgRGVjb2Rlcjo6YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplX3Qgc2l6
ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc2l6ZSA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYnVm
ZmVyRW5kIC0gbV9idWZmZXJQb3NpdGlvbik7Ci19Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGlmICghYnVm
ZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVyUG9zaXRpb24sIHNpemUpOwotICAgIG1fYnVmZmVy
UG9zaXRpb24gKz0gc2l6ZTsKLQotICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YSht
X3NoYTEsIGRhdGEsIHNpemUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUeXBlPgotYm9vbCBEZWNvZGVyOjpkZWNvZGVOdW1iZXIoVHlwZSYgdmFsdWUpCi17Ci0g
ICAgaWYgKCFidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKHNpemVvZih2YWx1ZSkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtZW1jcHkoJnZhbHVlLCBtX2J1ZmZlclBvc2l0aW9u
LCBzaXplb2YodmFsdWUpKTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uICs9IHNpemVvZihUeXBlKTsK
LQotICAgIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKG1fc2hhMSwgdmFsdWUpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERlY29kZXI6OmRlY29kZShib29sJiByZXN1bHQp
Ci17Ci0gICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwotfQotCi1ib29sIERlY29kZXI6
OmRlY29kZSh1aW50OF90JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1
bHQpOwotfQotCi1ib29sIERlY29kZXI6OmRlY29kZSh1aW50MTZfdCYgcmVzdWx0KQotewotICAg
IHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVyOjpkZWNvZGUo
dWludDMyX3QmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Ci19
Ci0KLWJvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQ2NF90JiByZXN1bHQpCi17Ci0gICAgcmV0dXJu
IGRlY29kZU51bWJlcihyZXN1bHQpOwotfQotCi1ib29sIERlY29kZXI6OmRlY29kZShpbnQzMl90
JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwotfQotCi1ib29s
IERlY29kZXI6OmRlY29kZShpbnQ2NF90JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZU51
bWJlcihyZXN1bHQpOwotfQotCi1ib29sIERlY29kZXI6OmRlY29kZShmbG9hdCYgcmVzdWx0KQot
ewotICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKLX0KLQotYm9vbCBEZWNvZGVyOjpk
ZWNvZGUoZG91YmxlJiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQp
OwotfQotCi1ib29sIERlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkKLXsKLSAgICBTSEExOjpEaWdl
c3QgY29tcHV0ZWRIYXNoOwotICAgIG1fc2hhMS5jb21wdXRlSGFzaChjb21wdXRlZEhhc2gpOwot
Ci0gICAgU0hBMTo6RGlnZXN0IHNhdmVkSGFzaDsKLSAgICBpZiAoIWRlY29kZUZpeGVkTGVuZ3Ro
RGF0YShzYXZlZEhhc2guZGF0YSgpLCBzaXplb2Yoc2F2ZWRIYXNoKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiBjb21wdXRlZEhhc2ggPT0gc2F2ZWRIYXNoOwotfQotCi19
Ci19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURlY29kZXIuaAkocmV2aXNpb24gMjEwNDk2KQor
KysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGVjb2Rl
ci5oCShub25leGlzdGVudCkKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IE5ldHdvcmtDYWNoZURlY29kZXJfaAotI2RlZmluZSBOZXR3b3JrQ2FjaGVEZWNvZGVyX2gKLQot
I2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXIu
aCIKLSNpbmNsdWRlIDx3dGYvU0hBMS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFj
ZSBOZXR3b3JrQ2FjaGUgewotCi1jbGFzcyBEZWNvZGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6
ZV90IGJ1ZmZlclNpemUpOwotICAgIHZpcnR1YWwgfkRlY29kZXIoKTsKLQotICAgIHNpemVfdCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlckVuZCAtIG1fYnVmZmVyOyB9Ci0gICAgc2l6
ZV90IGN1cnJlbnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclBvc2l0aW9uIC0gbV9i
dWZmZXI7IH0KLQotICAgIGJvb2wgdmVyaWZ5Q2hlY2tzdW0oKTsKLQotICAgIGJvb2wgZGVjb2Rl
Rml4ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqLCBzaXplX3QpOwotCi0gICAgYm9vbCBkZWNvZGUoYm9v
bCYpOwotICAgIGJvb2wgZGVjb2RlKHVpbnQ4X3QmKTsKLSAgICBib29sIGRlY29kZSh1aW50MTZf
dCYpOwotICAgIGJvb2wgZGVjb2RlKHVpbnQzMl90Jik7Ci0gICAgYm9vbCBkZWNvZGUodWludDY0
X3QmKTsKLSAgICBib29sIGRlY29kZShpbnQzMl90Jik7Ci0gICAgYm9vbCBkZWNvZGUoaW50NjRf
dCYpOwotICAgIGJvb2wgZGVjb2RlKGZsb2F0Jik7Ci0gICAgYm9vbCBkZWNvZGUoZG91YmxlJik7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZUVudW0oVCYgcmVzdWx0KQot
ICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0gOCwgIkVudW0gdHlwZSBU
IG11c3Qgbm90IGJlIGxhcmdlciB0aGFuIDY0IGJpdHMhIik7Ci0KLSAgICAgICAgdWludDY0X3Qg
dmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2RlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PFQ+KHZhbHVlKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Ym9vbCBkZWNvZGUoVCYgdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlcjxUPjo6ZGVjb2Rl
KCp0aGlzLCB0KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGJvb2wg
YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplX3QgbnVtRWxlbWVudHMpIGNvbnN0Ci0g
ICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUs
ICJUeXBlIFQgbXVzdCBoYXZlIGEgZml4ZWQsIGtub3duIGVuY29kZWQgc2l6ZSEiKTsKLQotICAg
ICAgICBpZiAobnVtRWxlbWVudHMgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
IC8gc2l6ZW9mKFQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVy
biBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKG51bUVsZW1lbnRzICogc2l6ZW9mKFQpKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0lQQ0RlY29kZXIgPSBmYWxzZTsKLQot
cHJpdmF0ZToKLSAgICBib29sIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90KSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBib29sIGRlY29kZU51bWJlcihUeXBl
Jik7Ci0KLSAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlcjsKLSAgICBjb25zdCB1aW50OF90KiBt
X2J1ZmZlclBvc2l0aW9uOwotICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyRW5kOwotCi0gICAg
U0hBMSBtX3NoYTE7Ci19OwotCi19IAotfQotCi0jZW5kaWYKLSNlbmRpZgpJbmRleDogU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW5jb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRW5jb2Rlci5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuY3BwCShub25leGlzdGVudCkKQEAg
LTEsMTI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgotCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FD
SEUpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7Ci0KLUVu
Y29kZXI6OkVuY29kZXIoKQotewotfQotCi1FbmNvZGVyOjp+RW5jb2RlcigpCi17Ci19Ci0KLXVp
bnQ4X3QqIEVuY29kZXI6Omdyb3coc2l6ZV90IHNpemUpCi17Ci0gICAgc2l6ZV90IG5ld1Bvc2l0
aW9uID0gbV9idWZmZXIuc2l6ZSgpOwotICAgIG1fYnVmZmVyLmdyb3cobV9idWZmZXIuc2l6ZSgp
ICsgc2l6ZSk7Ci0gICAgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKSArIG5ld1Bvc2l0aW9uOwotfQot
Ci12b2lkIEVuY29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yRGF0YShTSEExJiBzaGExLCBjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBhdXRvIHR5cGVTYWx0ID0gU2FsdDx1
aW50OF90Kj46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhk
YXRhLCBzaXplKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgdXBkYXRlQ2hlY2tzdW1Gb3JE
YXRhKG1fc2hhMSwgZGF0YSwgc2l6ZSk7Ci0KLSAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNp
emUpOwotICAgIG1lbWNweShidWZmZXIsIGRhdGEsIHNpemUpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUeXBlPgotdm9pZCBFbmNvZGVyOjplbmNvZGVOdW1iZXIoVHlwZSB2YWx1ZSkKLXsKLSAg
ICBFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvck51bWJlcihtX3NoYTEsIHZhbHVlKTsKLQotICAg
IHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coc2l6ZW9mKFR5cGUpKTsKLSAgICBtZW1jcHkoYnVmZmVy
LCAmdmFsdWUsIHNpemVvZihUeXBlKSk7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGJvb2wg
dmFsdWUpCi17Ci0gICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKLX0KLQotdm9pZCBFbmNvZGVyOjpl
bmNvZGUodWludDhfdCB2YWx1ZSkKLXsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwotfQotCi12
b2lkIEVuY29kZXI6OmVuY29kZSh1aW50MTZfdCB2YWx1ZSkKLXsKLSAgICBlbmNvZGVOdW1iZXIo
dmFsdWUpOwotfQotCi12b2lkIEVuY29kZXI6OmVuY29kZSh1aW50MzJfdCB2YWx1ZSkKLXsKLSAg
ICBlbmNvZGVOdW1iZXIodmFsdWUpOwotfQotCi12b2lkIEVuY29kZXI6OmVuY29kZSh1aW50NjRf
dCB2YWx1ZSkKLXsKLSAgICBlbmNvZGVOdW1iZXIodmFsdWUpOwotfQotCi12b2lkIEVuY29kZXI6
OmVuY29kZShpbnQzMl90IHZhbHVlKQotewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Ci19Ci0K
LXZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGludDY0X3QgdmFsdWUpCi17Ci0gICAgZW5jb2RlTnVtYmVy
KHZhbHVlKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGUoZmxvYXQgdmFsdWUpCi17Ci0gICAg
ZW5jb2RlTnVtYmVyKHZhbHVlKTsKLX0KLQotdm9pZCBFbmNvZGVyOjplbmNvZGUoZG91YmxlIHZh
bHVlKQotewotICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Ci19Ci0KLXZvaWQgRW5jb2Rlcjo6ZW5j
b2RlQ2hlY2tzdW0oKQotewotICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwotICAgIG1fc2hhMS5jb21w
dXRlSGFzaChoYXNoKTsKLSAgICBlbmNvZGVGaXhlZExlbmd0aERhdGEoaGFzaC5kYXRhKCksIGhh
c2guc2l6ZSgpKTsKLX0KLQotfQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmgJ
KHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUVuY29kZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBOZXR3b3JrQ2FjaGVFbmNvZGVyX2gKLSNkZWZpbmUgTmV0d29y
a0NhY2hlRW5jb2Rlcl9oCi0KLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLQotI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZUNvZGVyLmgiCi0jaW5jbHVkZSA8d3RmL1NIQTEuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdvcmtDYWNo
ZSB7Ci0KLWNsYXNzIEVuY29kZXI7Ci1jbGFzcyBEYXRhUmVmZXJlbmNlOwotCi1jbGFzcyBFbmNv
ZGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBFbmNvZGVy
KCk7Ci0gICAgdmlydHVhbCB+RW5jb2RlcigpOwotCi0gICAgdm9pZCBlbmNvZGVDaGVja3N1bSgp
OwotICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVFbnVtKFQgdCkKLSAgICB7
Ci0gICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUKSA8PSBzaXplb2YodWludDY0X3QpLCBl
bnVtX3R5cGVfbXVzdF9ub3RfYmVfbGFyZ2VyX3RoYW5fNjRfYml0cyk7Ci0KLSAgICAgICAgZW5j
b2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0KSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBlbmNvZGUoY29uc3QgVCYgdCkKLSAgICB7Ci0gICAgICAgIENvZGVyPFQ+
OjplbmNvZGUoKnRoaXMsIHQpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEVu
Y29kZXImIG9wZXJhdG9yPDwoY29uc3QgVCYgdCkKLSAgICB7Ci0gICAgICAgIGVuY29kZSh0KTsK
LSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQotICAgIHNpemVfdCBidWZmZXJT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9Ci0KLSAgICBzdGF0aWMgdm9p
ZCB1cGRhdGVDaGVja3N1bUZvckRhdGEoU0hBMSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwot
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZv
ck51bWJlcihTSEExJiwgVHlwZSk7Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0lQQ0VuY29k
ZXIgPSBmYWxzZTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGVuY29kZShib29sKTsKLSAgICB2b2lk
IGVuY29kZSh1aW50OF90KTsKLSAgICB2b2lkIGVuY29kZSh1aW50MTZfdCk7Ci0gICAgdm9pZCBl
bmNvZGUodWludDMyX3QpOwotICAgIHZvaWQgZW5jb2RlKHVpbnQ2NF90KTsKLSAgICB2b2lkIGVu
Y29kZShpbnQzMl90KTsKLSAgICB2b2lkIGVuY29kZShpbnQ2NF90KTsKLSAgICB2b2lkIGVuY29k
ZShmbG9hdCk7Ci0gICAgdm9pZCBlbmNvZGUoZG91YmxlKTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFR5cGU+IHZvaWQgZW5jb2RlTnVtYmVyKFR5cGUpOwotCi0gICAgdWludDhfdCogZ3Jvdyhz
aXplX3QpOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+IHN0cnVjdCBTYWx0OwotCi0g
ICAgVmVjdG9yPHVpbnQ4X3QsIDQwOTY+IG1fYnVmZmVyOwotICAgIFNIQTEgbV9zaGExOwotfTsK
LQotdGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8Ym9vbD4geyBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgdmFsdWUgPSAzOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8
dWludDhfdD4geyBzdGF0aWMgY29uc3QgIHVuc2lnbmVkIHZhbHVlID0gNTsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PHVpbnQxNl90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCB2YWx1ZSA9IDc7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDx1aW50MzJf
dD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAxMTsgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBFbmNvZGVyOjpTYWx0PHVpbnQ2NF90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1
ZSA9IDEzOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEVuY29kZXI6OlNhbHQ8aW50MzJfdD4geyBz
dGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAxNzsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBF
bmNvZGVyOjpTYWx0PGludDY0X3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMTk7
IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRW5jb2Rlcjo6U2FsdDxmbG9hdD4geyBzdGF0aWMgY29u
c3QgdW5zaWduZWQgdmFsdWUgPSAyMzsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpT
YWx0PGRvdWJsZT4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAyOTsgfTsKLXRlbXBs
YXRlIDw+IHN0cnVjdCBFbmNvZGVyOjpTYWx0PHVpbnQ4X3QqPiB7IHN0YXRpYyBjb25zdCB1bnNp
Z25lZCB2YWx1ZSA9IDEwMTsgfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEVu
Y29kZXI6OnVwZGF0ZUNoZWNrc3VtRm9yTnVtYmVyKFNIQTEmIHNoYTEsIFR5cGUgdmFsdWUpCi17
Ci0gICAgYXV0byB0eXBlU2FsdCA9IFNhbHQ8VHlwZT46OnZhbHVlOwotICAgIHNoYTEuYWRkQnl0
ZXMocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnR5cGVTYWx0KSwgc2l6ZW9mKHR5cGVTYWx0
KSk7Ci0gICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdmFsdWUp
LCBzaXplb2YodmFsdWUpKTsKLX0KLQotfQotfQotCi0jZW5kaWYKLSNlbmRpZgpJbmRleDogU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUVudHJ5LmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw4ICsyOCw2IEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlQ29kZXJzLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRGVjb2Rlci5oIgotI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZUVuY29kZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVz
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtODMsNyArODEsNyBAQCBFbnRyeTo6RW50cnkoY29uc3Qg
U3RvcmFnZTo6UmVjb3JkJiBzdG9yCiAKIFN0b3JhZ2U6OlJlY29yZCBFbnRyeTo6ZW5jb2RlQXNT
dG9yYWdlUmVjb3JkKCkgY29uc3QKIHsKLSAgICBFbmNvZGVyIGVuY29kZXI7CisgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwogICAgIGVuY29kZXIgPDwgbV9yZXNwb25zZTsK
IAogICAgIGJvb2wgaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzID0gIW1fdmFyeWluZ1JlcXVlc3RI
ZWFkZXJzLmlzRW1wdHkoKTsKQEAgLTExMCw3ICsxMDgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RW50
cnk+IEVudHJ5OjpkZWNvZGVTdG9yCiB7CiAgICAgYXV0byBlbnRyeSA9IHN0ZDo6bWFrZV91bmlx
dWU8RW50cnk+KHN0b3JhZ2VFbnRyeSk7CiAKLSAgICBEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVu
dHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBXVEY6
OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRhKCks
IHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGVu
dHJ5LT5tX3Jlc3BvbnNlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgZW50cnktPm1f
cmVzcG9uc2Uuc2V0U291cmNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlz
a0NhY2hlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUtleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIGJvb2wgS2V5OjpvcGVyYXRvcj09KGNvbnN0IEtl
eSYgb3RoZXIpIGMKICAgICByZXR1cm4gbV9oYXNoID09IG90aGVyLm1faGFzaCAmJiBtX3BhcnRp
dGlvbiA9PSBvdGhlci5tX3BhcnRpdGlvbiAmJiBtX3R5cGUgPT0gb3RoZXIubV90eXBlICYmIG1f
aWRlbnRpZmllciA9PSBvdGhlci5tX2lkZW50aWZpZXIgJiYgbV9yYW5nZSA9PSBvdGhlci5tX3Jh
bmdlOwogfQogCi12b2lkIEtleTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit2b2lk
IEtleTo6ZW5jb2RlKFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7
CiAgICAgZW5jb2RlciA8PCBtX3BhcnRpdGlvbjsKICAgICBlbmNvZGVyIDw8IG1fdHlwZTsKQEAg
LTE2NSw3ICsxNjUsNyBAQCB2b2lkIEtleTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiAgICAgZW5jb2RlciA8PCBtX3BhcnRpdGlvbkhhc2g7CiB9CiAKLWJvb2wgS2V5OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgS2V5JiBrZXkpCitib29sIEtleTo6ZGVjb2RlKFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXImIGRlY29kZXIsIEtleSYga2V5KQogewogICAgIHJldHVybiBkZWNvZGVy
LmRlY29kZShrZXkubV9wYXJ0aXRpb24pICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX3R5cGUpICYm
IGRlY29kZXIuZGVjb2RlKGtleS5tX2lkZW50aWZpZXIpICYmIGRlY29kZXIuZGVjb2RlKGtleS5t
X3JhbmdlKSAmJiBkZWNvZGVyLmRlY29kZShrZXkubV9oYXNoKSAmJiBkZWNvZGVyLmRlY29kZShr
ZXkubV9wYXJ0aXRpb25IYXNoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5oCShyZXZpc2lvbiAyMTA0OTYp
CisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXku
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTQgKzMwLDEzIEBACiAKICNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lz
dGVuY2UvRGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogbmFt
ZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKLWNsYXNzIEVuY29kZXI7Ci1jbGFzcyBEZWNvZGVyOwot
CiBjbGFzcyBLZXkgewogcHVibGljOgogICAgIHR5cGVkZWYgU0hBMTo6RGlnZXN0IEhhc2hUeXBl
OwpAQCAtNjksOCArNjgsOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGhhc2hBc1N0cmluZygpIGNv
bnN0IHsgcmV0dXJuIGhhc2hBc1N0cmluZyhtX2hhc2gpOyB9CiAgICAgU3RyaW5nIHBhcnRpdGlv
bkhhc2hBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIGhhc2hBc1N0cmluZyhtX3BhcnRpdGlvbkhh
c2gpOyB9CiAKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgc3RhdGljIGJv
b2wgZGVjb2RlKERlY29kZXImLCBLZXkmKTsKKyAgICB2b2lkIGVuY29kZShXVEY6OlBlcnNpc3Rl
bmNlOjpFbmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKFdURjo6UGVyc2lz
dGVuY2U6OkRlY29kZXImLCBLZXkmKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkm
KSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgS2V5JiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCShy
ZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwLDcgKzM4MCw3IEBA
IHN0YXRpYyBib29sIGRlY29kZVJlY29yZE1ldGFEYXRhKFJlY29yZE0KIHsKICAgICBib29sIHN1
Y2Nlc3MgPSBmYWxzZTsKICAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2Vzc10o
Y29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgRGVjb2RlciBkZWNv
ZGVyKGRhdGEsIHNpemUpOworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29k
ZXIoZGF0YSwgc2l6ZSk7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuY2Fj
aGVTdG9yYWdlVmVyc2lvbikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEua2V5KSkKQEAgLTQ2NCw3ICs0NjQsNyBAQCB2b2lk
IFN0b3JhZ2U6OnJlYWRSZWNvcmQoUmVhZE9wZXJhdGlvbiYgCiAKIHN0YXRpYyBEYXRhIGVuY29k
ZVJlY29yZE1ldGFEYXRhKGNvbnN0IFJlY29yZE1ldGFEYXRhJiBtZXRhRGF0YSkKIHsKLSAgICBF
bmNvZGVyIGVuY29kZXI7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwog
CiAgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5jYWNoZVN0b3JhZ2VWZXJzaW9uOwogICAgIGVuY29k
ZXIgPDwgbWV0YURhdGEua2V5OwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNl
c0VudHJ5LmNwcAkocmV2aXNpb24gMjEwNDk2KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxMyArMzAsMTEgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgi
Ci0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCi12b2lkIFN1YnJlc291cmNlSW5mbzo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit2b2lkIFN1YnJlc291cmNlSW5mbzo6ZW5jb2RlKFdU
Rjo6UGVyc2lzdGVuY2U6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8
PCBtX2lzVHJhbnNpZW50OwogCkBAIC00OCw3ICs0Niw3IEBAIHZvaWQgU3VicmVzb3VyY2VJbmZv
OjplbmNvZGUoRW5jb2RlciYgZW4KICAgICBlbmNvZGVyIDw8IG1fcmVxdWVzdEhlYWRlcnM7CiB9
CiAKLWJvb2wgU3VicmVzb3VyY2VJbmZvOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU3VicmVz
b3VyY2VJbmZvJiBpbmZvKQorYm9vbCBTdWJyZXNvdXJjZUluZm86OmRlY29kZShXVEY6OlBlcnNp
c3RlbmNlOjpEZWNvZGVyJiBkZWNvZGVyLCBTdWJyZXNvdXJjZUluZm8mIGluZm8pCiB7CiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1faXNUcmFuc2llbnQpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC02Nyw3ICs2NSw3IEBAIGJvb2wgU3VicmVzb3VyY2VJbmZvOjpkZWNvZGUoRGVj
b2RlciYgZGUKIAogU3RvcmFnZTo6UmVjb3JkIFN1YnJlc291cmNlc0VudHJ5OjplbmNvZGVBc1N0
b3JhZ2VSZWNvcmQoKSBjb25zdAogewotICAgIEVuY29kZXIgZW5jb2RlcjsKKyAgICBXVEY6OlBl
cnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAgICAgZW5jb2RlciA8PCBtX3N1YnJlc291cmNl
czsKIAogICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKQEAgLTc5LDcgKzc3LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFN1YnJlc291cmNlc0VudHJ5PiBTdWJyZQogewogICAgIGF1dG8gZW50cnkg
PSBzdGQ6Om1ha2VfdW5pcXVlPFN1YnJlc291cmNlc0VudHJ5PihzdG9yYWdlRW50cnkpOwogCi0g
ICAgRGVjb2RlciBkZWNvZGVyKHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50
cnkuaGVhZGVyLnNpemUoKSk7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVy
KHN0b3JhZ2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBzdG9yYWdlRW50cnkuaGVhZGVyLnNpemUoKSk7
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShlbnRyeS0+bV9zdWJyZXNvdXJjZXMpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNF
bnRyeS5oCShyZXZpc2lvbiAyMTA0OTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw4ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9S
RVZBTElEQVRJT04pCiAKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgiCi0jaW5jbHVk
ZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2Uu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVVJMLmg+CkBAIC00MSw4ICszOSw4IEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogY2xh
c3MgU3VicmVzb3VyY2VJbmZvIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgZGVj
b2RlKERlY29kZXImLCBTdWJyZXNvdXJjZUluZm8mKTsKKyAgICB2b2lkIGVuY29kZShXVEY6OlBl
cnNpc3RlbmNlOjpFbmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKFdURjo6
UGVyc2lzdGVuY2U6OkRlY29kZXImLCBTdWJyZXNvdXJjZUluZm8mKTsKIAogICAgIFN1YnJlc291
cmNlSW5mbygpID0gZGVmYXVsdDsKICAgICBTdWJyZXNvdXJjZUluZm8oY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIGlzVHJhbnNpZW50ID0gZmFsc2UpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHJldmlzaW9uIDIxMDQ5NikKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDYgQEAKIAogI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50
RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0YS5oIgotI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZURlY29kZXIuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVyLmgiCiAj
aW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNoYXJlZE1lbW9y
eS5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgpAQCAtNDEsNiAr
MzksOCBAQAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9wZXJz
aXN0ZW5jZS9EZWNvZGVyLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDo6TmV0d29ya0NhY2hlOwogCkBAIC05OSw3ICs5OSw3
IEBAIHN0cnVjdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgewogCiBzdGF0aWMgRGF0YSBlbmNv
ZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEoY29uc3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRh
JiBtZXRhRGF0YSkKIHsKLSAgICBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW5jb2RlciBlbmNvZGVy
OworICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKIAogICAgIGVuY29kZXIg
PDwgbWV0YURhdGEudmVyc2lvbjsKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmFjdGlvbnNTaXpl
OwpAQCAtMTIwLDcgKzEyMCw3IEBAIHN0YXRpYyBib29sIGRlY29kZUNvbnRlbnRFeHRlbnNpb25N
ZXRhRGEKICAgICAgICAgaWYgKHNpemUgIT0gZmlsZURhdGEuc2l6ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEZWNvZGVyIGRl
Y29kZXIoZGF0YSwgc2l6ZSk7CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVj
b2RlcihkYXRhLCBzaXplKTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS52
ZXJzaW9uKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShtZXRhRGF0YS5hY3Rpb25zU2l6ZSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTA0OTYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTE4OTMsMTMgKzE4OTMsOCBAQAogCQlFNDQzNkVEMDFBMEQwNDBCMDBFQUQy
MDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQzNkVDMzFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0Nh
Y2hlU3RvcmFnZS5jcHAgKi87IH07CiAJCUU0Njk3Q0NEMUIyNUVCOEYwMDFCMEE2QyAvKiBOZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0Njk3Q0NDMUIyNUVCOEYwMDFCMEE2QyAvKiBOZXR3b3JrQ2FjaGVGaWxl
U3lzdGVtLmNwcCAqLzsgfTsKIAkJRTQ3RDFFOTgxQjA2NDlGQjAwMjY3NkE4IC8qIE5ldHdvcmtD
YWNoZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ3RDFFOTYxQjA2MkI2NjAwMjY3NkE4IC8qIE5ldHdvcmtDYWNoZURhdGEuY3BwICovOyB9
OwotCQlFNDg5RDI4QTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODlEMjgzMUEwQTJE
QjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rlci5oICovOyB9OwogCQlFNDg5RDI4QjFBMEEy
REI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODlEMjg0MUEwQTJEQjgwMDc4QzA2QSAvKiBO
ZXR3b3JrQ2FjaGVDb2RlcnMuY3BwICovOyB9OwogCQlFNDg5RDI4QzFBMEEyREI4MDA3OEMwNkEg
LyogTmV0d29ya0NhY2hlQ29kZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDg5RDI4NTFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29k
ZXJzLmggKi87IH07Ci0JCUU0ODlEMjhEMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVE
ZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0ODlEMjg2MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmNwcCAqLzsg
fTsKLQkJRTQ4OUQyOEUxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODlEMjg3MUEw
QTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmggKi87IH07Ci0JCUU0ODlEMjhG
MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODlEMjg4MUEwQTJEQjgwMDc4QzA2
QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcCAqLzsgfTsKLQkJRTQ4OUQyOTAxQTBBMkRCODAw
NzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODlEMjg5MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3Jr
Q2FjaGVFbmNvZGVyLmggKi87IH07CiAJCUU0OUQ0MEQ3MUFEM0ZCMTcwMDY2QjdCOSAvKiBOZXR3
b3JrQ2FjaGVCbG9iU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ5RDQwRDYxQUQzRkIxNzAwNjZCN0I5IC8qIE5ldHdvcmtDYWNoZUJsb2JT
dG9yYWdlLmggKi87IH07CiAJCUU0OUQ0MEQ5MUFEM0ZCMjEwMDY2QjdCOSAvKiBOZXR3b3JrQ2Fj
aGVCbG9iU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDlENDBEODFBRDNGQjIxMDA2NkI3QjkgLyogTmV0d29ya0NhY2hlQmxvYlN0b3Jh
Z2UuY3BwICovOyB9OwogCQlFNEU4NjQ5MjFCMTY3NTAxMDBDODJGNDAgLyogVmVyc2lvbkNoZWNr
cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTg2
NDhGMUIxNjczRkIwMEM4MkY0MCAvKiBWZXJzaW9uQ2hlY2tzLm1tICovOyB9OwpAQCAtNDEwMCwx
MyArNDA5NSw4IEBACiAJCUU0NDM2RUMzMUEwQ0ZEQjIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVT
dG9yYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtD
YWNoZVN0b3JhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDY5N0NDQzFC
MjVFQjhGMDAxQjBBNkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3RDFFOTYxQjA2MkI2NjAwMjY3NkE4IC8qIE5l
dHdvcmtDYWNoZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TmV0d29ya0NhY2hlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0ODlE
MjgzMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVDb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDg5RDI4NDFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29k
ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNo
ZUNvZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODlEMjg1MUEwQTJE
QjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTmV0d29ya0NhY2hlQ29kZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUU0ODlEMjg2MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZURlY29k
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDg5RDI4NzFBMEEyREI4MDA3
OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOZXR3b3JrQ2FjaGVEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUU0ODlEMjg4MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZUVuY29kZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDg5RDI4OTFBMEEyREI4MDA3OEMw
NkEgLyogTmV0d29ya0NhY2hlRW5jb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBOZXR3b3JrQ2FjaGVFbmNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0OUQ0MEQ2MUFEM0ZCMTcwMDY2QjdCOSAvKiBOZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDlENDBEODFBRDNGQjIxMDA2NkI3Qjkg
LyogTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTmV0d29ya0NhY2hlQmxvYlN0b3JhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNEU4NjQ4RTFCMTY3M0ZCMDBDODJGNDAgLyogVmVyc2lvbkNoZWNrcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZXJzaW9uQ2hlY2tzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NTY5LDE3ICs3NTU5LDEyIEBACiAJCQkJRTQ0MzZF
QkYxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZS5oICovLAogCQkJCUU0OUQ0MEQ4MUFE
M0ZCMjEwMDY2QjdCOSAvKiBOZXR3b3JrQ2FjaGVCbG9iU3RvcmFnZS5jcHAgKi8sCiAJCQkJRTQ5
RDQwRDYxQUQzRkIxNzAwNjZCN0I5IC8qIE5ldHdvcmtDYWNoZUJsb2JTdG9yYWdlLmggKi8sCi0J
CQkJRTQ4OUQyODMxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVyLmggKi8sCiAJ
CQkJRTQ4OUQyODQxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5jcHAgKi8s
CiAJCQkJRTQ4OUQyODUxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5oICov
LAogCQkJCTdDQUI5Mzc5MUQ0NTlFNEIwMDcwRjU0MCAvKiBOZXR3b3JrQ2FjaGVDb2RlcnNDb2Nv
YS5jcHAgKi8sCiAJCQkJRTQ3RDFFOTYxQjA2MkI2NjAwMjY3NkE4IC8qIE5ldHdvcmtDYWNoZURh
dGEuY3BwICovLAogCQkJCUU0MkUwNjExMUFBNzVBQkQwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVE
YXRhLmggKi8sCiAJCQkJRTQyRTA2MTMxQUE3NUI3MDAwQjExNjk5IC8qIE5ldHdvcmtDYWNoZURh
dGFDb2NvYS5tbSAqLywKLQkJCQlFNDg5RDI4NjFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0Nh
Y2hlRGVjb2Rlci5jcHAgKi8sCi0JCQkJRTQ4OUQyODcxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdv
cmtDYWNoZURlY29kZXIuaCAqLywKLQkJCQlFNDg5RDI4ODFBMEEyREI4MDA3OEMwNkEgLyogTmV0
d29ya0NhY2hlRW5jb2Rlci5jcHAgKi8sCi0JCQkJRTQ4OUQyODkxQTBBMkRCODAwNzhDMDZBIC8q
IE5ldHdvcmtDYWNoZUVuY29kZXIuaCAqLywKIAkJCQlFNDEzRjU5RTFBQzFBRjlEMDAzNDUzNjAg
LyogTmV0d29ya0NhY2hlRW50cnkuY3BwICovLAogCQkJCUU0MTNGNTlCMUFDMUFEQjYwMDM0NTM2
MCAvKiBOZXR3b3JrQ2FjaGVFbnRyeS5oICovLAogCQkJCUU0Njk3Q0NDMUIyNUVCOEYwMDFCMEE2
QyAvKiBOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcCAqLywKQEAgLTc5MDMsMTEgKzc4ODgsOCBA
QAogCQkJCUUxNzk4QzdBMTZFNjgxODgwMDI0MDEzOSAvKiBOZXR3b3JrQmxvYlJlZ2lzdHJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDQzNkVDQzFBMEQwNDBCMDBFQUQyMDQgLyogTmV0d29ya0Nh
Y2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlENDBENzFBRDNGQjE3MDA2NkI3QjkgLyogTmV0
d29ya0NhY2hlQmxvYlN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0ODlEMjhBMUEwQTJE
QjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ4
OUQyOEMxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTQyRTA2MTIxQUE3NUFCRDAwQjExNjk5IC8qIE5ldHdvcmtDYWNoZURhdGEuaCBp
biBIZWFkZXJzICovLAotCQkJCUU0ODlEMjhFMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2Fj
aGVEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDg5RDI5MDFBMEEyREI4MDA3OEMwNkEg
LyogTmV0d29ya0NhY2hlRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQxM0Y1OUQxQUMx
QURDNDAwMzQ1MzYwIC8qIE5ldHdvcmtDYWNoZUVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
MzRCMjUwRjFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTQyRTA2MTAxQUE3NTIzQjAwQjExNjk5IC8qIE5ldHdvcmtDYWNoZUlP
Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCkBAIC05NDA3LDggKzkzODksNiBAQAogCQkJCTdDQUI5
MzdBMUQ0NTlFNTEwMDcwRjU0MCAvKiBOZXR3b3JrQ2FjaGVDb2RlcnNDb2NvYS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFNDdEMUU5ODFCMDY0OUZCMDAyNjc2QTggLyogTmV0d29ya0NhY2hlRGF0
YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDJFMDYxNDFBQTc1QjcwMDBCMTE2OTkgLyogTmV0
d29ya0NhY2hlRGF0YUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJRTQ4OUQyOEQxQTBBMkRC
ODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
RTQ4OUQyOEYxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTQxM0Y1OUYxQUMxQUY5RDAwMzQ1MzYwIC8qIE5ldHdvcmtDYWNoZUVu
dHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0Njk3Q0NEMUIyNUVCOEYwMDFCMEE2QyAvKiBO
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0MkUwNjBGMUFB
NzUyMzQwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbSBpbiBTb3VyY2Vz
ICovLAo=
</data>
<flag name="review"
          id="320511"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>