<?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>154363</bug_id>
          
          <creation_ts>2016-02-17 16:09:17 -0800</creation_ts>
          <short_desc>Modern IDB: Rename some &quot;UniqueIDBDatabase&quot; classes that conflict with new classes in WebCore</short_desc>
          <delta_ts>2016-02-17 17:25:24 -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>WebKit2</component>
          <version>Safari 9</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>
          
          <blocked>149117</blocked>
    
    <blocked>153808</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1165782</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-17 16:09:17 -0800</bug_when>
    <thetext>Modern IDB: Rename some &quot;UniqueIDBDatabase&quot; classes that conflict with new classes in WebCore

Even though they&apos;re in different namespaces, especially with header guards being the same, this is making https://bugs.webkit.org/show_bug.cgi?id=153808 hard to work on</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165789</commentid>
    <comment_count>1</comment_count>
      <attachid>271602</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-17 16:14:39 -0800</bug_when>
    <thetext>Created attachment 271602
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165791</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-17 16:16:51 -0800</bug_when>
    <thetext>Attachment 271602 did not pass style-queue:


ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:84:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:86:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:88:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:89:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:90:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:91:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:94:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:96:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:97:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:98:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:99:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:101:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:102:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:104:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:105:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:106:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:108:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:109:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h:141:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:191:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:215:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:286:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:291:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:296:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:301:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:306:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:311:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:350:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:412:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:440:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:467:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:490:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:524:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:558:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:581:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:604:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:627:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:648:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:669:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp:690:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 43 in 15 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>1165818</commentid>
    <comment_count>3</comment_count>
      <attachid>271602</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-17 17:25:21 -0800</bug_when>
    <thetext>Comment on attachment 271602
Patch v1

Clearing flags on attachment: 271602

Committed r196735: &lt;http://trac.webkit.org/changeset/196735&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165819</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-17 17:25:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271602</attachid>
            <date>2016-02-17 16:14:39 -0800</date>
            <delta_ts>2016-02-17 17:25:21 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>189340</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggMmFmMjdiNi4uM2M5OGZhOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTE5Niw4ICsxOTYsOCBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBEYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwCiAg
ICAgRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJTZXJpYWxpemF0aW9uLmNwcAotICAgIERh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCi0gICAgRGF0YWJh
c2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwCisgICAg
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9MZWdhY3lVbmlxdWVJREJEYXRhYmFzZS5jcHAKKyAg
ICBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0xlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRp
Zmllci5jcHAKICAgICBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25U
b0NsaWVudC5jcHAKIAogICAgIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0
ZUlEQkN1cnNvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA2MjJlMTZlLi42Mjk2ODBiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDUgKzEsMTMwIEBACiAyMDE2LTAyLTE3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KIAorICAgICAgICBNb2Rlcm4gSURCOiBSZW5hbWUgc29tZSAiVW5pcXVlSURCRGF0
YWJhc2UiIGNsYXNzZXMgdGhhdCBjb25mbGljdCB3aXRoIG5ldyBjbGFzc2VzIGluIFdlYkNvcmUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQzNjMu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5n
ICJMZWdhY3kiIHRvIHRoZSBmcm9udCBvZiB0aGUgbmFtZSBmaXhlcyBwcm9ibGVtcyBmb3Igbm93
LgorICAgICAgICAKKyAgICAgICAgQW5kIGFsbCBvZiB0aGlzIGd1bmsgd2lsbCBnbyBhd2F5IGFm
dGVyIE1vZGVybiBJREIgaXMgZG9uZSwgYW55d2F5cy4KKyAgICAgICAgCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzczo6Z2V0T3JDcmVhdGVMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzczo6cmVt
b3ZlTGVnYWN5VW5pcXVlSURCRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVBy
b2Nlc3M6OmdldE9yQ3JlYXRlVW5pcXVlSURCRGF0YWJhc2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OnJlbW92ZVVuaXF1ZUlEQkRhdGFiYXNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmg6CisgICAgICAg
ICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6ZXN0
YWJsaXNoQ29ubmVjdGlvbik6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9E
YXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmg6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9MZWdhY3lVbmlxdWVJREJEYXRhYmFzZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNw
cC4KKyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNhbGN1bGF0ZUFi
c29sdXRlRGF0YWJhc2VGaWxlbmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlE
QkRhdGFiYXNlOjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6Okxl
Z2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjp+TGVnYWN5VW5pcXVlSURCRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZmlsZW5hbWVGb3JEYXRhYmFzZU5h
bWUpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGF0YWJhc2VG
aWxlbmFtZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRh
YmFzZTo6Y2FuU2hhcmVEYXRhYmFzZXMpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZTo6cmVnaXN0ZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5
VW5pcXVlSURCRGF0YWJhc2U6OnVucmVnaXN0ZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duKToKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZFNodXRkb3duQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZURhdGFi
YXNlKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmdldE9yRXN0
YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRhKToKKyAgICAgICAg
KFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmVBbmRS
ZWFkTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6
b3BlblRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJh
c2U6OmJlZ2luVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJE
YXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlx
dWVJREJEYXRhYmFzZTo6cmVzZXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkxlZ2Fj
eVVuaXF1ZUlEQkRhdGFiYXNlOjpyb2xsYmFja1RyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OnBvc3RUcmFuc2FjdGlvbk9wZXJhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRDb21wbGV0ZVRyYW5z
YWN0aW9uT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJh
c2U6OmNoYW5nZURhdGFiYXNlVmVyc2lvbik6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRDaGFuZ2VEYXRhYmFzZVZlcnNpb24pOgorICAgICAgICAoV2ViS2l0
OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAg
ICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlT2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ2xlYXJPYmpl
Y3RTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRD
cmVhdGVJbmRleCk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWREZWxldGVJbmRleCk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRDb21wbGV0ZUJvb2xSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVl
SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5
VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2Vi
S2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2Vi
S2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2Vi
S2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYktp
dDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6
OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmN1cnNvckFkdmFuY2UpOgorICAgICAgICAoV2ViS2l0
OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y3Vyc29ySXRlcmF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpjb3VudCk6CisgICAgICAgIChXZWJLaXQ6Okxl
Z2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6Okxl
Z2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6YmVnaW5CYWNraW5nU3RvcmVU
cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpj
b21taXRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVu
aXF1ZUlEQkRhdGFiYXNlOjpyZXNldEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OnJvbGxiYWNrQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y2hh
bmdlRGF0YWJhc2VWZXJzaW9uSW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVJbkJhY2tpbmdTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9y
ZUluQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJh
c2U6OmNsZWFyT2JqZWN0U3RvcmVJbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Okxl
Z2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleEluQmFja2luZ1N0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4SW5CYWNraW5n
U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6cHV0UmVj
b3JkSW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUHV0UmVjb3JkSW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkRnJvbUJhY2tpbmdTdG9yZSk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRHZXRSZWNvcmRGcm9tQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5D
dXJzb3JJbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRPcGVuQ3Vyc29ySW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpM
ZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6YWR2YW5jZUN1cnNvckluQmFja2luZ1N0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZEFkdmFuY2VDdXJzb3JJ
bkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNl
OjppdGVyYXRlQ3Vyc29ySW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkSXRlcmF0ZUN1cnNvckluQmFja2luZ1N0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNvdW50SW5CYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ291bnRJbkJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpk
ZWxldGVSYW5nZUluQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVl
SURCRGF0YWJhc2U6OmRpZERlbGV0ZVJhbmdlSW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2Vi
S2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRXN0YWJsaXNoVHJhbnNhY3Rpb24pOgor
ICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUmVzZXRUcmFuc2Fj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpyZXNldEFs
bFRyYW5zYWN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNl
OjpmaW5hbGl6ZVJvbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0
YWJhc2U6OmFic29sdXRlRGF0YWJhc2VEaXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZTo6cG9zdE1haW5UaHJlYWRUYXNrKToKKyAgICAgICAgKFdlYktp
dDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1OZXh0TWFpblRocmVhZFRhc2spOgor
ICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFz
ayk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtTmV4
dERhdGFiYXNlVGFzayk6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9MZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oLgorICAgICAgICAoV2ViS2l0
OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TGVn
YWN5VW5pcXVlSURCRGF0YWJhc2U6OmlkZW50aWZpZXIpOgorICAgICAgICAqIERhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcC4KKyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyOjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIp
OgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI6Omlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVlSURC
RGF0YWJhc2VJZGVudGlmaWVyOjpoYXNoKToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyOjppc051bGwpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJL
aXQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvTGVn
YWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
ci5oLgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI6
OmRhdGFiYXNlTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNl
SWRlbnRpZmllcjo6b3BlbmluZ09yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6bWFpbkZyYW1lT3JpZ2luKToKKyAgICAgICAgKFdlYktp
dDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVySGFzaDo6aGFzaCk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllckhhc2g6OmVxdWFsKToK
KyAgICAgICAgKFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVySGFzaFRy
YWl0czo6aXNFbXB0eVZhbHVlKToKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERC
L3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpVbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpnZXRPckVzdGFibGlzaE1ldGFkYXRhKToKKyAgICAg
ICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJh
Y2tpbmdTdG9yZVNRTGl0ZS5oOgorICAgICAgICAqIFNoYXJlZC9XZWJDcm9zc1RocmVhZENvcGll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZp
ZXI+Ojpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
cj46OmNvcHkpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJDcm9zc1RocmVhZENvcGll
ci5oOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworMjAx
Ni0wMi0xNyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKICAgICAgICAgTW9k
ZXJuIElEQjogTW9yZSBFbmNvZGVyL0RlY29kZXIvTWVzc2FnaW5nIHNjYWZmb2xkaW5nIGZvciBX
SzIgSVBDLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU0MzU2CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRh
YmFzZVByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNl
UHJvY2Vzcy5jcHAKaW5kZXggZmEzNDBiMi4uMGM1ZDkyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKQEAgLTMyLDcgKzMyLDcg
QEAKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRvV2ViUHJvY2Vz
c0Nvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUg
IkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiV2ViQ3Jvc3NUaHJlYWRDb3Bp
ZXIuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Jvc3NU
aHJlYWRUYXNrLmg+CkBAIC05NiwyMSArOTYsMjEgQEAgdm9pZCBEYXRhYmFzZVByb2Nlc3M6OmRp
ZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmUK
IH0KIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotUmVmUHRyPFVuaXF1ZUlEQkRhdGFi
YXNlPiBEYXRhYmFzZVByb2Nlc3M6OmdldE9yQ3JlYXRlVW5pcXVlSURCRGF0YWJhc2UoY29uc3Qg
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorUmVmUHRyPExlZ2FjeVVu
aXF1ZUlEQkRhdGFiYXNlPiBEYXRhYmFzZVByb2Nlc3M6OmdldE9yQ3JlYXRlTGVnYWN5VW5pcXVl
SURCRGF0YWJhc2UoY29uc3QgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVu
dGlmaWVyKQogewogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pZGJEYXRhYmFzZXMuYWRkKGlkZW50
aWZpZXIsIG51bGxwdHIpOwogCiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAg
ICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAKLSAgICBSZWZQdHI8VW5pcXVl
SURCRGF0YWJhc2U+IGRhdGFiYXNlID0gVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZShpZGVudGlm
aWVyKTsKKyAgICBSZWZQdHI8TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U+IGRhdGFiYXNlID0gTGVn
YWN5VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZShpZGVudGlmaWVyKTsKICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gZGF0YWJhc2UuZ2V0KCk7CiAgICAgcmV0dXJuIGRhdGFiYXNlOwog
fQogCi12b2lkIERhdGFiYXNlUHJvY2Vzczo6cmVtb3ZlVW5pcXVlSURCRGF0YWJhc2UoY29uc3Qg
VW5pcXVlSURCRGF0YWJhc2UmIGRhdGFiYXNlKQordm9pZCBEYXRhYmFzZVByb2Nlc3M6OnJlbW92
ZUxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlJiBk
YXRhYmFzZSkKIHsKLSAgICBjb25zdCBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50
aWZpZXIgPSBkYXRhYmFzZS5pZGVudGlmaWVyKCk7CisgICAgY29uc3QgTGVnYWN5VW5pcXVlSURC
RGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyID0gZGF0YWJhc2UuaWRlbnRpZmllcigpOwog
ICAgIEFTU0VSVChtX2lkYkRhdGFiYXNlcy5jb250YWlucyhpZGVudGlmaWVyKSk7CiAKICAgICBt
X2lkYkRhdGFiYXNlcy5yZW1vdmUoaWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKaW5kZXggYzJmZjBlNi4uZjc0MzBkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vz
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3Mu
aApAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQogCiAjaW5j
bHVkZSAiQ2hpbGRQcm9jZXNzLmgiCi0jaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSAiTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTQxLDcgKzQxLDcgQEAgc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBjbGFzcyBEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb247Ci1jbGFzcyBVbmlx
dWVJREJEYXRhYmFzZTsKK2NsYXNzIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOwogCiBzdHJ1Y3Qg
RGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogCkBAIC01NSw4ICs1NSw4IEBAIHB1
YmxpYzoKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBjb25zdCBTdHJpbmcmIGlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5OyB9CiAKLSAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2U+IGdldE9yQ3JlYXRl
VW5pcXVlSURCRGF0YWJhc2UoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJik7Ci0g
ICAgdm9pZCByZW1vdmVVbmlxdWVJREJEYXRhYmFzZShjb25zdCBVbmlxdWVJREJEYXRhYmFzZSYp
OworICAgIFJlZlB0cjxMZWdhY3lVbmlxdWVJREJEYXRhYmFzZT4gZ2V0T3JDcmVhdGVMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZShjb25zdCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIm
KTsKKyAgICB2b2lkIHJlbW92ZUxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IExlZ2FjeVVu
aXF1ZUlEQkRhdGFiYXNlJik7CiAKICAgICB2b2lkIGVuc3VyZUluZGV4ZWREYXRhYmFzZVJlbGF0
aXZlUGF0aEV4aXN0cyhjb25zdCBTdHJpbmcmKTsKICAgICBTdHJpbmcgYWJzb2x1dGVJbmRleGVk
RGF0YWJhc2VQYXRoRnJvbURhdGFiYXNlUmVsYXRpdmVQYXRoKGNvbnN0IFN0cmluZyYpOwpAQCAt
MTA5LDcgKzEwOSw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAg
ICAgU3RyaW5nIG1faW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogCi0gICAgSGFzaE1hcDxVbmlx
dWVJREJEYXRhYmFzZUlkZW50aWZpZXIsIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZT4+IG1faWRi
RGF0YWJhc2VzOworICAgIEhhc2hNYXA8TGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVy
LCBSZWZQdHI8TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U+PiBtX2lkYkRhdGFiYXNlczsKICNlbmRp
ZgogCiAgICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkNyb3NzVGhyZWFkVGFzaz4+
IG1fZGF0YWJhc2VUYXNrczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5l
Y3Rpb24uY3BwCmluZGV4IDU1MzJjM2UuLjMyOGJhOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUg
IkRhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIklEQklkZW50aWZp
ZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJMZWdhY3lVbmlxdWVJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYklEQlNlcnZlckNvbm5lY3Rpb25NZXNz
YWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSURCRGF0YWJhc2VNZXRhZGF0YS5oPgpAQCAtNzEs
NyArNzEsNyBAQCB2b2lkIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OmRpc2Nvbm5lY3Rl
ZEZyb21XZWJQcm9jZXNzKCkKIAogdm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpl
c3RhYmxpc2hDb25uZWN0aW9uKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYg
bWFpbkZyYW1lT3JpZ2luKQogewotICAgIG1fdW5pcXVlSURCRGF0YWJhc2UgPSBEYXRhYmFzZVBy
b2Nlc3M6OnNpbmdsZXRvbigpLmdldE9yQ3JlYXRlVW5pcXVlSURCRGF0YWJhc2UoVW5pcXVlSURC
RGF0YWJhc2VJZGVudGlmaWVyKGRhdGFiYXNlTmFtZSwgb3BlbmluZ09yaWdpbiwgbWFpbkZyYW1l
T3JpZ2luKSk7CisgICAgbV91bmlxdWVJREJEYXRhYmFzZSA9IERhdGFiYXNlUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZ2V0T3JDcmVhdGVMZWdhY3lVbmlxdWVJREJEYXRhYmFzZShMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXIoZGF0YWJhc2VOYW1lLCBvcGVuaW5nT3JpZ2luLCBtYWluRnJh
bWVPcmlnaW4pKTsKICAgICBtX3VuaXF1ZUlEQkRhdGFiYXNlLT5yZWdpc3RlckNvbm5lY3Rpb24o
KnRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5o
CmluZGV4IGM1MWM4MDkuLjU1MDI2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbi5oCkBAIC0zMSw3ICszMSw3IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiRGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbk1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJh
c2VJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlm
aWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDMsNyArNDMsNyBAQCBzdHJ1Y3QgSURCS2V5
UmFuZ2VEYXRhOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERhdGFiYXNlVG9XZWJQcm9j
ZXNzQ29ubmVjdGlvbjsKLWNsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlOworY2xhc3MgTGVnYWN5VW5p
cXVlSURCRGF0YWJhc2U7CiAKIGNsYXNzIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24gOiBw
dWJsaWMgUmVmQ291bnRlZDxEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uPiwgcHVibGljIElQ
Qzo6TWVzc2FnZVNlbmRlciB7CiBwdWJsaWM6CkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAg
ICAgUmVmPERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwogICAg
IHVpbnQ2NF90IG1fc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXI7CiAKLSAgICBSZWZQdHI8VW5p
cXVlSURCRGF0YWJhc2U+IG1fdW5pcXVlSURCRGF0YWJhc2U7CisgICAgUmVmUHRyPExlZ2FjeVVu
aXF1ZUlEQkRhdGFiYXNlPiBtX3VuaXF1ZUlEQkRhdGFiYXNlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5k
ZXhlZERCL0xlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvTGVnYWN5VW5pcXVlSURCRGF0YWJhc2UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYmJmYjkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0xlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlLmNwcApAQCAtMCwwICsxLDEyMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTGVnYWN5VW5pcXVlSURCRGF0YWJhc2UuaCIKKworI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKworI2luY2x1
ZGUgIkFzeW5jUmVxdWVzdC5oIgorI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbmNsdWRl
ICJEYXRhYmFzZVByb2Nlc3MuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0
aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlU1FMaXRlLmgiCisjaW5jbHVkZSAiV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0Nyb3NzVGhyZWFkVGFzay5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSURCRGF0YWJhc2VNZXRhZGF0YS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSURCR2V0UmVzdWx0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JREJL
ZXlEYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JREJLZXlSYW5nZURhdGEuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTdHJpbmcgTGVnYWN5VW5pcXVlSURCRGF0YWJh
c2U6OmNhbGN1bGF0ZUFic29sdXRlRGF0YWJhc2VGaWxlbmFtZShjb25zdCBTdHJpbmcmIGFic29s
dXRlRGF0YWJhc2VEaXJlY3RvcnkpCit7CisgICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChhYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5LCAiSW5kZXhlZERCLnNxbGl0ZTMiKTsKK30K
KworTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0
IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICA6IG1f
aWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgICwgbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cyh0cnVl
KQorICAgICwgbV9kaWRHZXRNZXRhZGF0YUZyb21CYWNraW5nU3RvcmUoZmFsc2UpCit7CisgICAg
bV9pbk1lbW9yeSA9ICFjYW5TaGFyZURhdGFiYXNlcyhpZGVudGlmaWVyLm9wZW5pbmdPcmlnaW4o
KSwgaWRlbnRpZmllci5tYWluRnJhbWVPcmlnaW4oKSk7CisgICAgaWYgKG1faW5NZW1vcnkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vICoqKioqKioqKgorICAgIC8vIElNUE9SVEFOVDogRG8g
bm90IGNoYW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMg
b24gZGlzayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8
cmRhcjovL3Byb2JsZW0vMTc0NTQ3MTI+KQorICAgIC8vICoqKioqKioqKgorCisgICAgLy8gRWFj
aCB1bmlxdWUgSW5kZXhlZCBEYXRhYmFzZSBleGlzdHMgaW4gYSBkaXJlY3RvcnkgbmFtZWQgZm9y
IHRoZSBkYXRhYmFzZSwgd2hpY2ggZXhpc3RzIGluIGEgZGlyZWN0b3J5IHJlcHJlc2VudGluZyBp
dHMgb3BlbmluZyBvcmlnaW4uCisgICAgbV9kYXRhYmFzZVJlbGF0aXZlRGlyZWN0b3J5ID0gcGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRhdGFiYXNlRmlsZW5hbWVJZGVudGlmaWVyKGlkZW50aWZp
ZXIub3BlbmluZ09yaWdpbigpKSwgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoKSk7CisKKyAgICBE
YXRhYmFzZVByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUluZGV4ZWREYXRhYmFzZVJlbGF0aXZl
UGF0aEV4aXN0cyhtX2RhdGFiYXNlUmVsYXRpdmVEaXJlY3RvcnkpOworfQorCitMZWdhY3lVbmlx
dWVJREJEYXRhYmFzZTo6fkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQo
IW1fYWNjZXB0aW5nTmV3UmVxdWVzdHMpOworICAgIEFTU0VSVChtX3BlbmRpbmdNZXRhZGF0YVJl
cXVlc3RzLmlzRW1wdHkoKSk7Cit9CisKK1N0cmluZyBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6
ZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoKSBjb25zdAoreworICAgIEFTU0VSVCghbV9pZGVudGlm
aWVyLmRhdGFiYXNlTmFtZSgpLmlzTnVsbCgpKTsKKworICAgIGlmIChtX2lkZW50aWZpZXIuZGF0
YWJhc2VOYW1lKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gIiUwMCI7CisKKyAgICBTdHJp
bmcgZmlsZW5hbWUgPSBlbmNvZGVGb3JGaWxlTmFtZShtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1l
KCkpOworICAgIGZpbGVuYW1lLnJlcGxhY2UoJy4nLCAiJTJFIik7CisKKyAgICByZXR1cm4gZmls
ZW5hbWU7Cit9CisKK1N0cmluZyBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGF0YWJhc2VGaWxl
bmFtZUlkZW50aWZpZXIoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW5EYXRhKSBjb25z
dAoreworICAgIFJlZjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4oU2VjdXJpdHlPcmln
aW46OmNyZWF0ZShvcmlnaW5EYXRhLnByb3RvY29sLCBvcmlnaW5EYXRhLmhvc3QsIG9yaWdpbkRh
dGEucG9ydCkpOworICAgIHJldHVybiBzZWN1cml0eU9yaWdpbi5nZXQoKS5kYXRhYmFzZUlkZW50
aWZpZXIoKTsKK30KKworYm9vbCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y2FuU2hhcmVEYXRh
YmFzZXMoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcGVuaW5nT3JpZ2luLCBjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG1haW5GcmFtZU9yaWdpbikgY29uc3QKK3sKKyAgICAvLyBGb3Igbm93
LCBhbiBvcmlnaW4ncyBkYXRhYmFzZSBhY2Nlc3MgaXMgcHJlZGljYXRlZCBvbiBlcXVhbGl0eSB3
aXRoIHRoZSBvdGhlciBvcmlnaW4uCisgICAgLy8gV2UgbWlnaHQgbmVlZCB0byBtYWtlIHRoaXMg
bW9yZSBudWFuY2VkIGxhdGVyLgorICAgIHJldHVybiBvcGVuaW5nT3JpZ2luID09IG1haW5GcmFt
ZU9yaWdpbjsKK30KKwordm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6cmVnaXN0ZXJDb25u
ZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCit7CisgICAg
QVNTRVJUKCFtX2Nvbm5lY3Rpb25zLmNvbnRhaW5zKCZjb25uZWN0aW9uKSk7CisgICAgbV9jb25u
ZWN0aW9ucy5hZGQoJmNvbm5lY3Rpb24pOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlOjp1bnJlZ2lzdGVyQ29ubmVjdGlvbihEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uJiBj
b25uZWN0aW9uKQoreworICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25zLmNvbnRhaW5zKCZjb25uZWN0
aW9uKSk7CisgICAgcmVzZXRBbGxUcmFuc2FjdGlvbnMoY29ubmVjdGlvbik7CisgICAgbV9jb25u
ZWN0aW9ucy5yZW1vdmUoJmNvbm5lY3Rpb24pOworCisgICAgaWYgKG1fY29ubmVjdGlvbnMuaXNF
bXB0eSgpICYmIG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJhY2tzLmlzRW1wdHkoKSkgeworICAg
ICAgICBzaHV0ZG93bihMZWdhY3lVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlwZTo6Tm9ybWFs
U2h1dGRvd24pOworICAgICAgICBEYXRhYmFzZVByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZUxl
Z2FjeVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgTGVnYWN5VW5p
cXVlSURCRGF0YWJhc2U6OnNodXRkb3duKExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25U
eXBlIHR5cGUpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICgh
bV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hY2NlcHRp
bmdOZXdSZXF1ZXN0cyA9IGZhbHNlOworCisgICAgLy8gQmFsYW5jZWQgYnkgYW4gYWRvcHRSZWYg
aW4gOjpkaWRTaHV0ZG93bkJhY2tpbmdTdG9yZSgpCisgICAgcmVmKCk7CisKKyAgICB7CisgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZGF0YWJhc2VUYXNrTXV0ZXgpOworICAgICAgICBtX2Rh
dGFiYXNlVGFza3MuY2xlYXIoKTsKKyAgICB9CisKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93
bkJhY2tpbmdTdG9yZSwgdHlwZSwgYWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSgpKSwgRGF0YWJh
c2VUYXNrVHlwZTo6U2h1dGRvd24pOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNl
OjpzaHV0ZG93bkJhY2tpbmdTdG9yZShMZWdhY3lVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlw
ZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOworCisg
ICAgaWYgKHR5cGUgPT0gTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGU6OkRlbGV0
ZVNodXRkb3duKSB7CisgICAgICAgIFN0cmluZyBkYkZpbGVuYW1lID0gTGVnYWN5VW5pcXVlSURC
RGF0YWJhc2U6OmNhbGN1bGF0ZUFic29sdXRlRGF0YWJhc2VGaWxlbmFtZShkYXRhYmFzZURpcmVj
dG9yeSk7CisgICAgICAgIExPRyhJREIsICJMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRv
d25CYWNraW5nU3RvcmUgZGVsZXRpbmcgZmlsZSAnJXMnIG9uIGRpc2siLCBkYkZpbGVuYW1lLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICBkZWxldGVGaWxlKGRiRmlsZW5hbWUpOworICAgICAgICBk
ZWxldGVFbXB0eURpcmVjdG9yeShkYXRhYmFzZURpcmVjdG9yeSk7CisgICAgfQorCisgICAgcG9z
dE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRTaHV0ZG93bkJhY2tpbmdTdG9yZSwgdHlwZSksIERhdGFiYXNlVGFz
a1R5cGU6OlNodXRkb3duKTsKK30KKwordm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
U2h1dGRvd25CYWNraW5nU3RvcmUoTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGUg
dHlwZSkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gQmFsYW5j
ZWQgYnkgYSByZWYgaW4gOjpzaHV0ZG93bigpCisgICAgUmVmUHRyPExlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlPiBwcm90ZWN0b3IoYWRvcHRSZWYodGhpcykpOworCisgICAgLy8gRW1wdHkgb3V0IHJl
bWFpbmluZyBtYWluIHRocmVhZCB0YXNrcy4KKyAgICB3aGlsZSAocGVyZm9ybU5leHRNYWluVGhy
ZWFkVGFzaygpKSB7CisgICAgfQorCisgICAgLy8gTm8gbW9yZSByZXF1ZXN0cyB3aWxsIGJlIGhh
bmRsZWQsIHNvIGFib3J0IGFsbCBvdXRzdGFuZGluZyByZXF1ZXN0cy4KKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHJlcXVlc3QgOiBtX3BlbmRpbmdNZXRhZGF0YVJlcXVlc3RzKQorICAgICAgICByZXF1
ZXN0LT5yZXF1ZXN0QWJvcnRlZCgpOworICAgIGZvciAoY29uc3QgYXV0byYgcmVxdWVzdCA6IG1f
cGVuZGluZ1RyYW5zYWN0aW9uUmVxdWVzdHMudmFsdWVzKCkpCisgICAgICAgIHJlcXVlc3QtPnJl
cXVlc3RBYm9ydGVkKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiByZXF1ZXN0IDogbV9wZW5kaW5n
RGF0YWJhc2VUYXNrcy52YWx1ZXMoKSkKKyAgICAgICAgcmVxdWVzdC0+cmVxdWVzdEFib3J0ZWQo
KTsKKworICAgIG1fcGVuZGluZ01ldGFkYXRhUmVxdWVzdHMuY2xlYXIoKTsKKyAgICBtX3BlbmRp
bmdUcmFuc2FjdGlvblJlcXVlc3RzLmNsZWFyKCk7CisgICAgbV9wZW5kaW5nRGF0YWJhc2VUYXNr
cy5jbGVhcigpOworCisgICAgaWYgKG1fcGVuZGluZ1NodXRkb3duVGFzaykKKyAgICAgICAgbV9w
ZW5kaW5nU2h1dGRvd25UYXNrLT5jb21wbGV0ZVJlcXVlc3QodHlwZSk7CisKKyAgICBtX3BlbmRp
bmdTaHV0ZG93blRhc2sgPSBudWxscHRyOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlOjpkZWxldGVEYXRhYmFzZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2Fs
bGJhY2spCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICghbV9h
Y2NlcHRpbmdOZXdSZXF1ZXN0cykgeworICAgICAgICAvLyBTb21lb25lIGVsc2UgaGFzIGFscmVh
ZHkgc2h1dGRvd24gdGhpcyBkYXRhYmFzZSwgc28gd2UgY2FuJ3QgcmVxdWVzdCBhIGRlbGV0ZS4K
KyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbc3VjY2Vzc0NhbGxiYWNrXSB7CisgICAgICAgICAg
ICBzdWNjZXNzQ2FsbGJhY2soZmFsc2UpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFJlZlB0cjxMZWdhY3lVbmlxdWVJREJEYXRhYmFzZT4gcHJvdGVjdG9yKHRo
aXMpOworICAgIG1fcGVuZGluZ1NodXRkb3duVGFzayA9IEFzeW5jUmVxdWVzdEltcGw8TGVnYWN5
VW5pcXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGU+OjpjcmVhdGUoW3RoaXMsIHByb3RlY3Rvciwg
c3VjY2Vzc0NhbGxiYWNrXShMZWdhY3lVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlwZSB0eXBl
KSB7CisgICAgICAgIC8vIElmIHRoZSBzaHV0ZG93biBqdXN0IGNvbXBsZXRlZCB3YXMgYSBEZWxl
dGUgc2h1dGRvd24gdGhlbiB3ZSBzdWNjZWVkZWQuCisgICAgICAgIC8vIElmIG5vdCByZXBvcnQg
ZmFpbHVyZSBpbnN0ZWFkIG9mIHRyeWluZyBhZ2Fpbi4KKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNr
KHR5cGUgPT0gTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGU6OkRlbGV0ZVNodXRk
b3duKTsKKyAgICB9LCBbdGhpcywgcHJvdGVjdG9yLCBzdWNjZXNzQ2FsbGJhY2tdIHsKKyAgICAg
ICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNlKTsKKyAgICB9KTsKKworICAgIHNodXRkb3duKExlZ2Fj
eVVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBlOjpEZWxldGVTaHV0ZG93bik7Cit9CisKK3Zv
aWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRh
ZGF0YShzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEm
KT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBpZiAoIW1fYWNjZXB0aW5nTmV3UmVxdWVzdHMpIHsKKyAgICAgICAgY29tcGxldGlv
bkNhbGxiYWNrKGZhbHNlLCBJREJEYXRhYmFzZU1ldGFkYXRhKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gSWYgd2UndmUgYWxyZWFkeSByZXRyaWV2ZWQgbWV0YWRhdGEgZnJv
bSB0aGUgYmFja2luZyBzdG9yZSwgcmV0dXJuIGl0IG5vdy4KKyAgICBpZiAobV9kaWRHZXRNZXRh
ZGF0YUZyb21CYWNraW5nU3RvcmUpIHsKKyAgICAgICAgaWYgKG1fbWV0YWRhdGEpCisgICAgICAg
ICAgICBjb21wbGV0aW9uQ2FsbGJhY2sodHJ1ZSwgKm1fbWV0YWRhdGEpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soZmFsc2UsIElEQkRhdGFiYXNlTWV0YWRh
dGEoKSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElmIHRoaXMgaXMgdGhl
IGZpcnN0IHVuYW5zd2VyZWQgbWV0YWRhdGEgcmVxdWVzdCwgdGhlbiBsYXRlciB3ZSBuZWVkIHRv
CisgICAgLy8gcG9zdCBhIHRhc2sgdG8gb3BlbiB0aGUgYmFja2luZyBzdG9yZSBhbmQgZ2V0IG1l
dGFkYXRhLgorICAgIGJvb2wgc2hvdWxkT3BlbkJhY2tpbmdTdG9yZSA9IG1fcGVuZGluZ01ldGFk
YXRhUmVxdWVzdHMuaXNFbXB0eSgpOworCisgICAgLy8gVGhlbiByZW1lbWJlciB0aGlzIG1ldGFk
YXRhIHJlcXVlc3QgdG8gYmUgYW5zd2VyZWQgbGF0ZXIuCisgICAgUmVmUHRyPEFzeW5jUmVxdWVz
dD4gcmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8Pjo6Y3JlYXRlKFtjb21wbGV0aW9uQ2FsbGJh
Y2ssIHRoaXNdIHsKKyAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCEhbV9tZXRhZGF0YSwgbV9t
ZXRhZGF0YSA/ICptX21ldGFkYXRhIDogSURCRGF0YWJhc2VNZXRhZGF0YSgpKTsKKyAgICB9LCBb
Y29tcGxldGlvbkNhbGxiYWNrXSB7CisgICAgICAgIC8vIFRoZSBib29sZWFuIGZsYWcgdG8gdGhl
IGNvbXBsZXRpb24gY2FsbGJhY2sgcmVwcmVzZW50cyB3aGV0aGVyIHRoZQorICAgICAgICAvLyBh
dHRlbXB0IHRvIGdldC9lc3RhYmxpc2ggbWV0YWRhdGEgc3VjY2VlZGVkIG9yIGZhaWxlZC4KKyAg
ICAgICAgLy8gU2luY2Ugd2UncmUgYWJvcnRpbmcgdGhlIGF0dGVtcHQsIGl0IGZhaWxlZCwgc28g
d2UgYWx3YXlzIHBhc3MgaW4gZmFsc2UuCisgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhmYWxz
ZSwgSURCRGF0YWJhc2VNZXRhZGF0YSgpKTsKKyAgICB9KTsKKworICAgIG1fcGVuZGluZ01ldGFk
YXRhUmVxdWVzdHMuYXBwZW5kKHJlcXVlc3QucmVsZWFzZSgpKTsKKworICAgIGlmIChzaG91bGRP
cGVuQmFja2luZ1N0b3JlKQorICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3Jl
QW5kUmVhZE1ldGFkYXRhLCBtX2lkZW50aWZpZXIsIGFic29sdXRlRGF0YWJhc2VEaXJlY3Rvcnko
KSkpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3Jl
QW5kUmVhZE1ldGFkYXRhKGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYg
aWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeSkKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlKTsKKwor
ICAgIGlmIChtX2luTWVtb3J5KSB7CisgICAgICAgIExPR19FUlJPUigiU3VwcG9ydCBmb3IgaW4t
bWVtb3J5IGRhdGFiYXNlcyBub3QgeWV0IGltcGxlbWVudGVkIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX2JhY2tpbmdTdG9yZSA9IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlOjpjcmVhdGUoaWRlbnRpZmllciwgZGF0YWJhc2VEaXJlY3RvcnkpOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBtZXRhZGF0YSA9IG1fYmFja2luZ1N0
b3JlLT5nZXRPckVzdGFibGlzaE1ldGFkYXRhKCk7CisKKyAgICBwb3N0TWFpblRocmVhZFRhc2so
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRp
ZE9wZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEsIG1ldGFkYXRhID8gKm1ldGFkYXRhIDog
SURCRGF0YWJhc2VNZXRhZGF0YSgpLCAhIW1ldGFkYXRhKSk7Cit9CisKK3ZvaWQgTGVnYWN5VW5p
cXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEoY29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGJvb2wgc3VjY2VzcykKK3sKKyAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVCghbV9tZXRhZGF0YSk7CisKKyAgICBt
X2RpZEdldE1ldGFkYXRhRnJvbUJhY2tpbmdTdG9yZSA9IHRydWU7CisKKyAgICBpZiAoc3VjY2Vz
cykKKyAgICAgICAgbV9tZXRhZGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VNZXRh
ZGF0YT4obWV0YWRhdGEpOworCisgICAgd2hpbGUgKCFtX3BlbmRpbmdNZXRhZGF0YVJlcXVlc3Rz
LmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0gbV9w
ZW5kaW5nTWV0YWRhdGFSZXF1ZXN0cy50YWtlRmlyc3QoKTsKKyAgICAgICAgcmVxdWVzdC0+Y29t
cGxldGVSZXF1ZXN0KCk7CisgICAgfQorfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNl
OjpvcGVuVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSURzLCBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZSBtb2RlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2Fs
bGJhY2spCit7CisgICAgcG9zdFRyYW5zYWN0aW9uT3BlcmF0aW9uKHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJh
c2U6Om9wZW5CYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBv
YmplY3RTdG9yZUlEcywgbW9kZSksIHN1Y2Nlc3NDYWxsYmFjayk7Cit9CisKK3ZvaWQgTGVnYWN5
VW5pcXVlSURCRGF0YWJhc2U6OmJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNz
Q2FsbGJhY2spCit7CisgICAgcG9zdFRyYW5zYWN0aW9uT3BlcmF0aW9uKHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0
YWJhc2U6OmJlZ2luQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciksIHN1Y2Nlc3NDYWxsYmFjayk7Cit9CisKK3ZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6
OmNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKQoreworICAg
IHBvc3RUcmFuc2FjdGlvbk9wZXJhdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSwgc3VjY2Vzc0NhbGxi
YWNrKTsKK30KKwordm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6cmVzZXRUcmFuc2FjdGlv
bihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFjaykKK3sKKyAgICBwb3N0VHJhbnNhY3Rpb25P
cGVyYXRpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6cmVzZXRCYWNraW5nU3RvcmVUcmFuc2FjdGlv
biwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSwgc3VjY2Vzc0NhbGxiYWNrKTsKK30KKwordm9pZCBM
ZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6cm9sbGJhY2tUcmFuc2FjdGlvbihjb25zdCBJREJJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+
IHN1Y2Nlc3NDYWxsYmFjaykKK3sKKyAgICBwb3N0VHJhbnNhY3Rpb25PcGVyYXRpb24odHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlx
dWVJREJEYXRhYmFzZTo6cm9sbGJhY2tCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rp
b25JZGVudGlmaWVyKSwgc3VjY2Vzc0NhbGxiYWNrKTsKK30KKwordm9pZCBMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZTo6cG9zdFRyYW5zYWN0aW9uT3BlcmF0aW9uKGNvbnN0IElEQklkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhyZWFkVGFzaz4g
dGFzaywgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoIW1fYWNjZXB0aW5nTmV3UmVx
dWVzdHMpIHsKKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3BlbmRpbmdUcmFuc2FjdGlvblJlcXVlc3RzLmNvbnRhaW5z
KHRyYW5zYWN0aW9uSWRlbnRpZmllcikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0aW5n
IHRvIHF1ZXVlIGFuIG9wZXJhdGlvbiBmb3IgYSB0cmFuc2FjdGlvbiB0aGF0IGFscmVhZHkgaGFz
IGFuIG9wZXJhdGlvbiBwZW5kaW5nLiBFYWNoIHRyYW5zYWN0aW9uIHNob3VsZCBvbmx5IGhhdmUg
b25lIG9wZXJhdGlvbiBwZW5kaW5nIGF0IGEgdGltZS4iKTsKKyAgICAgICAgc3VjY2Vzc0NhbGxi
YWNrKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBvc3REYXRhYmFzZVRh
c2soV1RGTW92ZSh0YXNrKSk7CisKKyAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0g
QXN5bmNSZXF1ZXN0SW1wbDxib29sPjo6Y3JlYXRlKFtzdWNjZXNzQ2FsbGJhY2tdKGJvb2wgc3Vj
Y2VzcykgeworICAgICAgICBzdWNjZXNzQ2FsbGJhY2soc3VjY2Vzcyk7CisgICAgfSwgW3N1Y2Nl
c3NDYWxsYmFja10geworICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZmFsc2UpOworICAgIH0pOwor
CisgICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25SZXF1ZXN0cy5hZGQodHJhbnNhY3Rpb25JZGVudGlm
aWVyLCByZXF1ZXN0LnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJh
c2U6OmRpZENvbXBsZXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oY29uc3QgSURCSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBib29sIHN1Y2Nlc3MpCit7CisgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBtX3Bl
bmRpbmdUcmFuc2FjdGlvblJlcXVlc3RzLnRha2UodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKwor
ICAgIGlmIChyZXF1ZXN0KQorICAgICAgICByZXF1ZXN0LT5jb21wbGV0ZVJlcXVlc3Qoc3VjY2Vz
cyk7CisKKyAgICBpZiAobV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3MuY29udGFpbnModHJh
bnNhY3Rpb25JZGVudGlmaWVyKSkKKyAgICAgICAgZmluYWxpemVSb2xsYmFjayh0cmFuc2FjdGlv
bklkZW50aWZpZXIpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpjaGFuZ2VE
YXRhYmFzZVZlcnNpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCB1aW50NjRfdCBuZXdWZXJzaW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNz
Q2FsbGJhY2spCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICgh
bV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykgeworICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZmFsc2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWludDY0X3Qgb2xkVmVyc2lvbiA9IG1f
bWV0YWRhdGEtPnZlcnNpb247CisgICAgbV9tZXRhZGF0YS0+dmVyc2lvbiA9IG5ld1ZlcnNpb247
CisKKyAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDxi
b29sPjo6Y3JlYXRlKFt0aGlzLCBvbGRWZXJzaW9uLCBzdWNjZXNzQ2FsbGJhY2tdKGJvb2wgc3Vj
Y2VzcykgeworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICBtX21ldGFkYXRhLT52
ZXJzaW9uID0gb2xkVmVyc2lvbjsKKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3MpOwor
ICAgIH0sIFt0aGlzLCBvbGRWZXJzaW9uLCBzdWNjZXNzQ2FsbGJhY2tdIHsKKyAgICAgICAgbV9t
ZXRhZGF0YS0+dmVyc2lvbiA9IG9sZFZlcnNpb247CisgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhm
YWxzZSk7CisgICAgfSk7CisKKyAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSByZXF1ZXN0LT5yZXF1
ZXN0SUQoKTsKKyAgICBtX3BlbmRpbmdEYXRhYmFzZVRhc2tzLmFkZChyZXF1ZXN0SUQsIHJlcXVl
c3QucmVsZWFzZSgpKTsKKworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNoYW5nZURhdGFiYXNlVmVyc2lv
bkluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgbmV3VmVy
c2lvbikpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRDaGFuZ2VEYXRh
YmFzZVZlcnNpb24odWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MpCit7CisgICAgZGlk
Q29tcGxldGVCb29sUmVxdWVzdChyZXF1ZXN0SUQsIHN1Y2Nlc3MpOworfQorCit2b2lkIExlZ2Fj
eVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRDcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCByZXF1ZXN0
SUQsIGJvb2wgc3VjY2VzcykKK3sKKyAgICBkaWRDb21wbGV0ZUJvb2xSZXF1ZXN0KHJlcXVlc3RJ
RCwgc3VjY2Vzcyk7Cit9CisKK3ZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0
ZU9iamVjdFN0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKQoreworICAgIGRp
ZENvbXBsZXRlQm9vbFJlcXVlc3QocmVxdWVzdElELCBzdWNjZXNzKTsKK30KKwordm9pZCBMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCByZXF1ZXN0
SUQsIGJvb2wgc3VjY2VzcykKK3sKKyAgICBkaWRDb21wbGV0ZUJvb2xSZXF1ZXN0KHJlcXVlc3RJ
RCwgc3VjY2Vzcyk7Cit9CisKK3ZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZENyZWF0
ZUluZGV4KHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKQoreworICAgIGRpZENvbXBs
ZXRlQm9vbFJlcXVlc3QocmVxdWVzdElELCBzdWNjZXNzKTsKK30KKwordm9pZCBMZWdhY3lVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlSW5kZXgodWludDY0X3QgcmVxdWVzdElELCBib29sIHN1
Y2Nlc3MpCit7CisgICAgZGlkQ29tcGxldGVCb29sUmVxdWVzdChyZXF1ZXN0SUQsIHN1Y2Nlc3Mp
OworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRDb21wbGV0ZUJvb2xSZXF1
ZXN0KHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKQoreworICAgIG1fcGVuZGluZ0Rh
dGFiYXNlVGFza3MudGFrZShyZXF1ZXN0SUQpLmdldCgpLmNvbXBsZXRlUmVxdWVzdChzdWNjZXNz
KTsKK30KKwordm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUo
Y29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3Vj
Y2Vzc0NhbGxiYWNrKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBp
ZiAoIW1fYWNjZXB0aW5nTmV3UmVxdWVzdHMpIHsKKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZh
bHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVCghbV9tZXRhZGF0YS0+
b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG1ldGFkYXRhLmlkKSk7CisgICAgbV9tZXRhZGF0YS0+b2Jq
ZWN0U3RvcmVzLnNldChtZXRhZGF0YS5pZCwgbWV0YWRhdGEpOworICAgIGludDY0X3QgYWRkZWRP
YmplY3RTdG9yZUlEID0gbWV0YWRhdGEuaWQ7CisKKyAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiBy
ZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDxib29sPjo6Y3JlYXRlKFt0aGlzLCBhZGRlZE9iamVj
dFN0b3JlSUQsIHN1Y2Nlc3NDYWxsYmFja10oYm9vbCBzdWNjZXNzKSB7CisgICAgICAgIGlmICgh
c3VjY2VzcykKKyAgICAgICAgICAgIG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5yZW1vdmUoYWRk
ZWRPYmplY3RTdG9yZUlEKTsKKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3MpOworICAg
IH0sIFt0aGlzLCBhZGRlZE9iamVjdFN0b3JlSUQsIHN1Y2Nlc3NDYWxsYmFja10geworICAgICAg
ICBtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMucmVtb3ZlKGFkZGVkT2JqZWN0U3RvcmVJRCk7Cisg
ICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhmYWxzZSk7CisgICAgfSk7CisKKyAgICB1aW50NjRfdCBy
ZXF1ZXN0SUQgPSByZXF1ZXN0LT5yZXF1ZXN0SUQoKTsKKyAgICBtX3BlbmRpbmdEYXRhYmFzZVRh
c2tzLmFkZChyZXF1ZXN0SUQsIHJlcXVlc3QucmVsZWFzZSgpKTsKKworICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJh
c2U6OmNyZWF0ZU9iamVjdFN0b3JlSW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBtZXRhZGF0YSkpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29s
KT4gc3VjY2Vzc0NhbGxiYWNrKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBpZiAoIW1fYWNjZXB0aW5nTmV3UmVxdWVzdHMpIHsKKyAgICAgICAgc3VjY2Vzc0NhbGxi
YWNrKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX21ldGFk
YXRhLT5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJRCkpOworICAgIElEQk9iamVj
dFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEgPSBtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMudGFrZShv
YmplY3RTdG9yZUlEKTsKKworICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3lu
Y1JlcXVlc3RJbXBsPGJvb2w+OjpjcmVhdGUoW3RoaXMsIG1ldGFkYXRhLCBzdWNjZXNzQ2FsbGJh
Y2tdKGJvb2wgc3VjY2VzcykgeworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICBt
X21ldGFkYXRhLT5vYmplY3RTdG9yZXMuc2V0KG1ldGFkYXRhLmlkLCBtZXRhZGF0YSk7CisgICAg
ICAgIHN1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzKTsKKyAgICB9LCBbdGhpcywgbWV0YWRhdGEsIHN1
Y2Nlc3NDYWxsYmFja10geworICAgICAgICBtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMuc2V0KG1l
dGFkYXRhLmlkLCBtZXRhZGF0YSk7CisgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhmYWxzZSk7Cisg
ICAgfSk7CisKKyAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSByZXF1ZXN0LT5yZXF1ZXN0SUQoKTsK
KyAgICBtX3BlbmRpbmdEYXRhYmFzZVRhc2tzLmFkZChyZXF1ZXN0SUQsIHJlcXVlc3QucmVsZWFz
ZSgpKTsKKworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlSW5CYWNraW5nU3Rv
cmUsIHJlcXVlc3RJRCwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlEKSk7Cit9
CisKK3ZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUoY29uc3Qg
SURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFjaykKK3sKKyAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFtX2FjY2VwdGluZ05ld1JlcXVl
c3RzKSB7CisgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhmYWxzZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS0+b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9i
amVjdFN0b3JlSUQpKTsKKworICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3lu
Y1JlcXVlc3RJbXBsPGJvb2w+OjpjcmVhdGUoW3RoaXMsIHN1Y2Nlc3NDYWxsYmFja10oYm9vbCBz
dWNjZXNzKSB7CisgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzKTsKKyAgICB9LCBbdGhp
cywgc3VjY2Vzc0NhbGxiYWNrXSB7CisgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhmYWxzZSk7Cisg
ICAgfSk7CisKKyAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSByZXF1ZXN0LT5yZXF1ZXN0SUQoKTsK
KyAgICBtX3BlbmRpbmdEYXRhYmFzZVRhc2tzLmFkZChyZXF1ZXN0SUQsIHJlcXVlc3QucmVsZWFz
ZSgpKTsKKworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmVJbkJhY2tpbmdTdG9y
ZSwgcmVxdWVzdElELCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSUQpKTsKK30K
Kwordm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURCSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmIG1ldGFkYXRhLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wp
PiBzdWNjZXNzQ2FsbGJhY2spCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykgeworICAgICAgICBzdWNjZXNzQ2FsbGJh
Y2soZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1fbWV0YWRh
dGEtPm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlEKSk7CisgICAgQVNTRVJUKCFt
X21ldGFkYXRhLT5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSUQpLmluZGV4ZXMuY29udGFp
bnMobWV0YWRhdGEuaWQpKTsKKyAgICBtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMuZ2V0KG9iamVj
dFN0b3JlSUQpLmluZGV4ZXMuc2V0KG1ldGFkYXRhLmlkLCBtZXRhZGF0YSk7CisgICAgaW50NjRf
dCBhZGRlZEluZGV4SUQgPSBtZXRhZGF0YS5pZDsKKworICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+
IHJlcXVlc3QgPSBBc3luY1JlcXVlc3RJbXBsPGJvb2w+OjpjcmVhdGUoW3RoaXMsIG9iamVjdFN0
b3JlSUQsIGFkZGVkSW5kZXhJRCwgc3VjY2Vzc0NhbGxiYWNrXShib29sIHN1Y2Nlc3MpIHsKKyAg
ICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBhdXRvIG9iamVjdFN0b3JlRmluZCA9
IG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5maW5kKG9iamVjdFN0b3JlSUQpOworICAgICAgICAg
ICAgaWYgKG9iamVjdFN0b3JlRmluZCAhPSBtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMuZW5kKCkp
CisgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmVGaW5kLT52YWx1ZS5pbmRleGVzLnJlbW92ZShh
ZGRlZEluZGV4SUQpOworICAgICAgICB9CisgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhzdWNjZXNz
KTsKKyAgICB9LCBbdGhpcywgb2JqZWN0U3RvcmVJRCwgYWRkZWRJbmRleElELCBzdWNjZXNzQ2Fs
bGJhY2tdIHsKKyAgICAgICAgYXV0byBvYmplY3RTdG9yZUZpbmQgPSBtX21ldGFkYXRhLT5vYmpl
Y3RTdG9yZXMuZmluZChvYmplY3RTdG9yZUlEKTsKKyAgICAgICAgaWYgKG9iamVjdFN0b3JlRmlu
ZCAhPSBtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMuZW5kKCkpCisgICAgICAgICAgICBvYmplY3RT
dG9yZUZpbmQtPnZhbHVlLmluZGV4ZXMucmVtb3ZlKGFkZGVkSW5kZXhJRCk7CisgICAgICAgIHN1
Y2Nlc3NDYWxsYmFjayhmYWxzZSk7CisgICAgfSk7CisKKyAgICB1aW50NjRfdCByZXF1ZXN0SUQg
PSByZXF1ZXN0LT5yZXF1ZXN0SUQoKTsKKyAgICBtX3BlbmRpbmdEYXRhYmFzZVRhc2tzLmFkZChy
ZXF1ZXN0SUQsIHJlcXVlc3QucmVsZWFzZSgpKTsKKworICAgIHBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0
ZUluZGV4SW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBv
YmplY3RTdG9yZUlELCBtZXRhZGF0YSkpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlOjpkZWxldGVJbmRleChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykgeworICAgICAgICBz
dWNjZXNzQ2FsbGJhY2soZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNT
RVJUKG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlEKSk7Cisg
ICAgQVNTRVJUKG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJRCkuaW5k
ZXhlcy5jb250YWlucyhpbmRleElEKSk7CisKKyAgICBJREJJbmRleE1ldGFkYXRhIG1ldGFkYXRh
ID0gbV9tZXRhZGF0YS0+b2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlEKS5pbmRleGVzLnRh
a2UoaW5kZXhJRCk7CisKKyAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0gQXN5bmNS
ZXF1ZXN0SW1wbDxib29sPjo6Y3JlYXRlKFt0aGlzLCBvYmplY3RTdG9yZUlELCBtZXRhZGF0YSwg
c3VjY2Vzc0NhbGxiYWNrXShib29sIHN1Y2Nlc3MpIHsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7
CisgICAgICAgICAgICBhdXRvIG9iamVjdFN0b3JlRmluZCA9IG1fbWV0YWRhdGEtPm9iamVjdFN0
b3Jlcy5maW5kKG9iamVjdFN0b3JlSUQpOworICAgICAgICAgICAgaWYgKG9iamVjdFN0b3JlRmlu
ZCAhPSBtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMuZW5kKCkpCisgICAgICAgICAgICAgICAgb2Jq
ZWN0U3RvcmVGaW5kLT52YWx1ZS5pbmRleGVzLnNldChtZXRhZGF0YS5pZCwgbWV0YWRhdGEpOwor
ICAgICAgICB9CisgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzKTsKKyAgICB9LCBbdGhp
cywgb2JqZWN0U3RvcmVJRCwgbWV0YWRhdGEsIHN1Y2Nlc3NDYWxsYmFja10geworICAgICAgICBh
dXRvIG9iamVjdFN0b3JlRmluZCA9IG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5maW5kKG9iamVj
dFN0b3JlSUQpOworICAgICAgICBpZiAob2JqZWN0U3RvcmVGaW5kICE9IG1fbWV0YWRhdGEtPm9i
amVjdFN0b3Jlcy5lbmQoKSkKKyAgICAgICAgICAgIG9iamVjdFN0b3JlRmluZC0+dmFsdWUuaW5k
ZXhlcy5zZXQobWV0YWRhdGEuaWQsIG1ldGFkYXRhKTsKKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNr
KGZhbHNlKTsKKyAgICB9KTsKKworICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3QtPnJl
cXVlc3RJRCgpOworICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJRCwgcmVx
dWVzdC5yZWxlYXNlKCkpOworCisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhJbkJhY2tp
bmdTdG9yZSwgcmVxdWVzdElELCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSUQs
IGluZGV4SUQpKTsKK30KKwordm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6cHV0UmVjb3Jk
KGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlELCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmIHZhbHVlLCBpbnQ2NF90IHB1dE1vZGUsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5k
ZXhJRHMsIGNvbnN0IFZlY3RvcjxWZWN0b3I8SURCS2V5RGF0YT4+JiBpbmRleEtleXMsIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCS2V5RGF0YSYsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcm
KT4gY2FsbGJhY2spCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlm
ICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykgeworICAgICAgICBjYWxsYmFjayhJREJLZXlEYXRh
KCksIElOVkFMSURfU1RBVEVfRVJSLCAiVW5hYmxlIHRvIHB1dCByZWNvcmQgaW50byBkYXRhYmFz
ZSBiZWNhdXNlIGl0IGhhcyBzaHV0IGRvd24iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEFTU0VSVChtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJ
RCkpOworCisgICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9IEFzeW5jUmVxdWVzdElt
cGw8SURCS2V5RGF0YSwgdWludDMyX3QsIFN0cmluZz46OmNyZWF0ZShbdGhpcywgY2FsbGJhY2td
KGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpIHsKKyAgICAgICAgY2FsbGJhY2soa2V5RGF0YSwgZXJyb3JDb2Rl
LCBlcnJvck1lc3NhZ2UpOworICAgIH0sIFt0aGlzLCBjYWxsYmFja10geworICAgICAgICBjYWxs
YmFjayhJREJLZXlEYXRhKCksIElOVkFMSURfU1RBVEVfRVJSLCAiVW5hYmxlIHRvIHB1dCByZWNv
cmQgaW50byBkYXRhYmFzZSIpOworICAgIH0pOworCisgICAgdWludDY0X3QgcmVxdWVzdElEID0g
cmVxdWVzdC0+cmVxdWVzdElEKCk7CisgICAgbV9wZW5kaW5nRGF0YWJhc2VUYXNrcy5hZGQocmVx
dWVzdElELCByZXF1ZXN0LnJlbGVhc2UoKSk7CisKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRSZWNv
cmRJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG1fbWV0
YWRhdGEtPm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJRCksIGtleURhdGEsIHZhbHVlLnZl
Y3RvcigpLCBwdXRNb2RlLCBpbmRleElEcywgaW5kZXhLZXlzKSk7Cit9CisKK3ZvaWQgTGVnYWN5
VW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBj
b25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgSW5kZXhlZERCOjpDdXJzb3JUeXBl
IGN1cnNvclR5cGUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCR2V0UmVzdWx0JiwgdWlu
dDMyX3QsIGNvbnN0IFN0cmluZyYpPiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgaWYgKCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKSB7CisgICAgICAg
IGNhbGxiYWNrKElEQkdldFJlc3VsdCgpLCBJTlZBTElEX1NUQVRFX0VSUiwgIlVuYWJsZSB0byBn
ZXQgcmVjb3JkIGZyb20gZGF0YWJhc2UgYmVjYXVzZSBpdCBoYXMgc2h1dCBkb3duIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS0+b2JqZWN0U3RvcmVz
LmNvbnRhaW5zKG9iamVjdFN0b3JlSUQpKTsKKworICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJl
cXVlc3QgPSBBc3luY1JlcXVlc3RJbXBsPElEQkdldFJlc3VsdCwgdWludDMyX3QsIFN0cmluZz46
OmNyZWF0ZShbdGhpcywgY2FsbGJhY2tdKGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0LCB1aW50
MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7CisgICAgICAgIGNh
bGxiYWNrKHJlc3VsdCwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpOworICAgIH0sIFt0aGlzLCBj
YWxsYmFja10geworICAgICAgICBjYWxsYmFjayhJREJHZXRSZXN1bHQoKSwgSU5WQUxJRF9TVEFU
RV9FUlIsICJVbmFibGUgdG8gZ2V0IHJlY29yZCBmcm9tIGRhdGFiYXNlIik7CisgICAgfSk7CisK
KyAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSByZXF1ZXN0LT5yZXF1ZXN0SUQoKTsKKyAgICBtX3Bl
bmRpbmdEYXRhYmFzZVRhc2tzLmFkZChyZXF1ZXN0SUQsIHJlcXVlc3QucmVsZWFzZSgpKTsKKwor
ICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5
VW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZEZyb21CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMuZ2V0KG9iamVj
dFN0b3JlSUQpLCBpbmRleElELCBrZXlSYW5nZURhdGEsIGN1cnNvclR5cGUpKTsKK30KKwordm9p
ZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvcihjb25zdCBJREJJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBp
bmRleElELCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBjdXJzb3JEaXJlY3Rpb24sIEluZGV4
ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBl
IHRhc2tUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgc3RkOjpmdW5j
dGlvbjx2b2lkIChpbnQ2NF90LCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCS2V5RGF0YSYs
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYpPiBjYWxs
YmFjaykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFtX2Fj
Y2VwdGluZ05ld1JlcXVlc3RzKSB7CisgICAgICAgIGNhbGxiYWNrKDAsIG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIsIElOVkFMSURfU1RBVEVfRVJSLCAiVW5hYmxlIHRvIG9wZW4gY3Vyc29yIGlu
IGRhdGFiYXNlIGJlY2F1c2UgaXQgaGFzIHNodXQgZG93biIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgQVNTRVJUKG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmpl
Y3RTdG9yZUlEKSk7CisKKyAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0gQXN5bmNS
ZXF1ZXN0SW1wbDxpbnQ2NF90LCBJREJLZXlEYXRhLCBJREJLZXlEYXRhLCBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4sIHVpbnQzMl90LCBTdHJpbmc+OjpjcmVhdGUoW3RoaXMsIGNhbGxiYWNrXShp
bnQ2NF90IGN1cnNvcklELCBjb25zdCBJREJLZXlEYXRhJiBrZXksIGNvbnN0IElEQktleURhdGEm
IHByaW1hcnlLZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgdWludDMyX3QgZXJy
b3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgeworICAgICAgICBjYWxsYmFjayhj
dXJzb3JJRCwga2V5LCBwcmltYXJ5S2V5LCB2YWx1ZSwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2Up
OworICAgIH0sIFt0aGlzLCBjYWxsYmFja10geworICAgICAgICBjYWxsYmFjaygwLCBudWxscHRy
LCBudWxscHRyLCBudWxscHRyLCBJTlZBTElEX1NUQVRFX0VSUiwgIlVuYWJsZSB0byBnZXQgcmVj
b3JkIGZyb20gZGF0YWJhc2UiKTsKKyAgICB9KTsKKworICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9
IHJlcXVlc3QtPnJlcXVlc3RJRCgpOworICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJl
cXVlc3RJRCwgcmVxdWVzdC5yZWxlYXNlKCkpOworCisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1
cnNvckluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2Jq
ZWN0U3RvcmVJRCwgaW5kZXhJRCwgY3Vyc29yRGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0YXNrVHlw
ZSwga2V5UmFuZ2VEYXRhKSk7Cit9CisKK3ZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmN1
cnNvckFkdmFuY2UoY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgdWludDY0
X3QgY291bnQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElE
QktleURhdGEmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIHVpbnQzMl90LCBjb25zdCBTdHJp
bmcmKT4gY2FsbGJhY2spCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykgeworICAgICAgICBjYWxsYmFjayhudWxscHRy
LCBudWxscHRyLCBudWxscHRyLCBJTlZBTElEX1NUQVRFX0VSUiwgIlVuYWJsZSB0byBhZHZhbmNl
IGN1cnNvciBpbiBkYXRhYmFzZSBiZWNhdXNlIGl0IGhhcyBzaHV0IGRvd24iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3lu
Y1JlcXVlc3RJbXBsPElEQktleURhdGEsIElEQktleURhdGEsIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiwgdWludDMyX3QsIFN0cmluZz46OmNyZWF0ZShbdGhpcywgY2FsbGJhY2tdKGNvbnN0IElE
QktleURhdGEmIGtleSwgY29uc3QgSURCS2V5RGF0YSYgcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IHZhbHVlLCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKSB7CisgICAgICAgIGNhbGxiYWNrKGtleSwgcHJpbWFyeUtleSwgdmFsdWUsIGVy
cm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsKKyAgICB9LCBbdGhpcywgY2FsbGJhY2tdIHsKKyAgICAg
ICAgY2FsbGJhY2sobnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgSU5WQUxJRF9TVEFURV9FUlIs
ICJVbmFibGUgdG8gYWR2YW5jZSBjdXJzb3IgaW4gZGF0YWJhc2UiKTsKKyAgICB9KTsKKworICAg
IHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3QtPnJlcXVlc3RJRCgpOworICAgIG1fcGVuZGlu
Z0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJRCwgcmVxdWVzdC5yZWxlYXNlKCkpOworCisgICAg
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlx
dWVJREJEYXRhYmFzZTo6YWR2YW5jZUN1cnNvckluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIGN1
cnNvcklkZW50aWZpZXIsIGNvdW50KSk7Cit9CisKK3ZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJh
c2U6OmN1cnNvckl0ZXJhdGUoY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwg
Y29uc3QgSURCS2V5RGF0YSYga2V5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IElEQktleURh
dGEmLCBjb25zdCBJREJLZXlEYXRhJiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCB1aW50MzJf
dCwgY29uc3QgU3RyaW5nJik+IGNhbGxiYWNrKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBpZiAoIW1fYWNjZXB0aW5nTmV3UmVxdWVzdHMpIHsKKyAgICAgICAgY2Fs
bGJhY2sobnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgSU5WQUxJRF9TVEFURV9FUlIsICJVbmFi
bGUgdG8gaXRlcmF0ZSBjdXJzb3IgaW4gZGF0YWJhc2UgYmVjYXVzZSBpdCBoYXMgc2h1dCBkb3du
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiBy
ZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDxJREJLZXlEYXRhLCBJREJLZXlEYXRhLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4sIHVpbnQzMl90LCBTdHJpbmc+OjpjcmVhdGUoW3RoaXMsIGNhbGxi
YWNrXShjb25zdCBJREJLZXlEYXRhJiBrZXksIGNvbnN0IElEQktleURhdGEmIHByaW1hcnlLZXks
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgdWludDMyX3QgZXJyb3JDb2RlLCBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgeworICAgICAgICBjYWxsYmFjayhrZXksIHByaW1hcnlL
ZXksIHZhbHVlLCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7CisgICAgfSwgW3RoaXMsIGNhbGxi
YWNrXSB7CisgICAgICAgIGNhbGxiYWNrKG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIElOVkFM
SURfU1RBVEVfRVJSLCAiVW5hYmxlIHRvIGl0ZXJhdGUgY3Vyc29yIGluIGRhdGFiYXNlIik7Cisg
ICAgfSk7CisKKyAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSByZXF1ZXN0LT5yZXF1ZXN0SUQoKTsK
KyAgICBtX3BlbmRpbmdEYXRhYmFzZVRhc2tzLmFkZChyZXF1ZXN0SUQsIHJlcXVlc3QucmVsZWFz
ZSgpKTsKKworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3JJbkJhY2tpbmdTdG9yZSwg
cmVxdWVzdElELCBjdXJzb3JJZGVudGlmaWVyLCBrZXkpKTsKK30KKwordm9pZCBMZWdhY3lVbmlx
dWVJREJEYXRhYmFzZTo6Y291bnQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoaW50NjRfdCwg
dWludDMyX3QsIGNvbnN0IFN0cmluZyYpPiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgaWYgKCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKSB7CisgICAg
ICAgIGNhbGxiYWNrKDAsIElOVkFMSURfU1RBVEVfRVJSLCAiVW5hYmxlIHRvIGdldCBjb3VudCBm
cm9tIGRhdGFiYXNlIGJlY2F1c2UgaXQgaGFzIHNodXQgZG93biIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9IEFzeW5jUmVxdWVz
dEltcGw8aW50NjRfdCwgdWludDMyX3QsIFN0cmluZz46OmNyZWF0ZShbdGhpcywgY2FsbGJhY2td
KGludDY0X3QgY291bnQsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UpIHsKKyAgICAgICAgY2FsbGJhY2soY291bnQsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdl
KTsKKyAgICB9LCBbdGhpcywgY2FsbGJhY2tdIHsKKyAgICAgICAgY2FsbGJhY2soMCwgSU5WQUxJ
RF9TVEFURV9FUlIsICJVbmFibGUgdG8gZ2V0IGNvdW50IGZyb20gZGF0YWJhc2UiKTsKKyAgICB9
KTsKKworICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3QtPnJlcXVlc3RJRCgpOworICAg
IG1fcGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJRCwgcmVxdWVzdC5yZWxlYXNlKCkp
OworCisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZM
ZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y291bnRJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSUQsIGluZGV4SUQsIGtleVJhbmdlRGF0
YSkpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSYW5nZShjb25z
dCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJRCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAodWludDMyX3QsIGNvbnN0IFN0cmluZyYpPiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKSB7
CisgICAgICAgIGNhbGxiYWNrKElOVkFMSURfU1RBVEVfRVJSLCAiVW5hYmxlIHRvIGRlbGV0ZVJh
bmdlIGZyb20gZGF0YWJhc2UgYmVjYXVzZSBpdCBoYXMgc2h1dCBkb3duIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0gQXN5bmNS
ZXF1ZXN0SW1wbDx1aW50MzJfdCwgU3RyaW5nPjo6Y3JlYXRlKFtjYWxsYmFja10odWludDMyX3Qg
ZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgeworICAgICAgICBjYWxsYmFj
ayhlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7CisgICAgfSwgW2NhbGxiYWNrXSB7CisgICAgICAg
IGNhbGxiYWNrKElOVkFMSURfU1RBVEVfRVJSLCAiVW5hYmxlIHRvIGRlbGV0ZVJhbmdlIGZyb20g
ZGF0YWJhc2UiKTsKKyAgICB9KTsKKworICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3Qt
PnJlcXVlc3RJRCgpOworICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJRCwg
cmVxdWVzdC5yZWxlYXNlKCkpOworCisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmFuZ2VJbkJh
Y2tpbmdTdG9yZSwgcmVxdWVzdElELCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SUQsIGtleVJhbmdlRGF0YSkpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpv
cGVuQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSURzLCBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CisKKyAgICBib29sIHN1Y2Nlc3Mg
PSBtX2JhY2tpbmdTdG9yZS0+ZXN0YWJsaXNoVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBvYmplY3RTdG9yZUlEcywgbW9kZSk7CisKKyAgICBwb3N0TWFpblRocmVhZFRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZEVz
dGFibGlzaFRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHN1Y2Nlc3MpKTsKKyAg
ICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5
VW5pcXVlSURCRGF0YWJhc2U6OmRpZENvbXBsZXRlVHJhbnNhY3Rpb25PcGVyYXRpb24sIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgc3VjY2VzcykpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlOjpiZWdpbkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworCisgICAgYm9vbCBzdWNjZXNzID0gbV9i
YWNraW5nU3RvcmUtPmJlZ2luVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKwor
ICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ29tcGxldGVUcmFuc2FjdGlvbk9wZXJhdGlvbiwgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBzdWNjZXNzKSk7Cit9CisKK3ZvaWQgTGVnYWN5VW5pcXVlSURC
RGF0YWJhc2U6OmNvbW1pdEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworCisgICAgYm9vbCBzdWNjZXNzID0g
bV9iYWNraW5nU3RvcmUtPmNvbW1pdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7
CisKKyAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZENvbXBsZXRlVHJhbnNhY3Rpb25PcGVyYXRpb24s
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3VjY2VzcykpOworfQorCit2b2lkIExlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlOjpyZXNldEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworCisgICAgYm9vbCBzdWNjZXNz
ID0gbV9iYWNraW5nU3RvcmUtPnJlc2V0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVy
KTsKKworICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUmVzZXRUcmFuc2FjdGlvbiwgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBzdWNjZXNzKSk7CisgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRDb21wbGV0
ZVRyYW5zYWN0aW9uT3BlcmF0aW9uLCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHN1Y2Nlc3MpKTsK
K30KKwordm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6cm9sbGJhY2tCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0
b3JlKTsKKworICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5yb2xsYmFja1RyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisKKyAgICBwb3N0TWFpblRocmVhZFRhc2so
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRp
ZENvbXBsZXRlVHJhbnNhY3Rpb25PcGVyYXRpb24sIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3Vj
Y2VzcykpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpjaGFuZ2VEYXRhYmFz
ZVZlcnNpb25JbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElEQklkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3QgbmV3VmVyc2lvbikKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUp
OworCisgICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPmNoYW5nZURhdGFiYXNlVmVy
c2lvbih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG5ld1ZlcnNpb24pOworCisgICAgcG9zdE1haW5U
aHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRDaGFuZ2VEYXRhYmFzZVZlcnNpb24sIHJlcXVlc3RJRCwgc3VjY2VzcykpOwor
fQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZUluQmFj
a2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSkK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQobV9iYWNraW5n
U3RvcmUpOworCisgICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVj
dFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgbWV0YWRhdGEpOworCisgICAgcG9zdE1haW5U
aHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRDcmVhdGVPYmplY3RTdG9yZSwgcmVxdWVzdElELCBzdWNjZXNzKSk7Cit9CisK
K3ZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlSW5CYWNraW5n
U3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworCisgICAgYm9vbCBz
dWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgb2JqZWN0U3RvcmVJRCk7CisKKyAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0
ZU9iamVjdFN0b3JlLCByZXF1ZXN0SUQsIHN1Y2Nlc3MpKTsKK30KKwordm9pZCBMZWdhY3lVbmlx
dWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJl
cXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2
NF90IG9iamVjdFN0b3JlSUQpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Cisg
ICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKKworICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2lu
Z1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3Rv
cmVJRCk7CisKKyAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZENsZWFyT2JqZWN0U3RvcmUsIHJlcXVl
c3RJRCwgc3VjY2VzcykpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVh
dGVJbmRleEluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmIG1ldGFkYXRhKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CisKKyAgICBib29sIHN1Y2Nlc3Mg
PSBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmpl
Y3RTdG9yZUlELCBtZXRhZGF0YSk7CisKKyAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZENyZWF0ZUlu
ZGV4LCByZXF1ZXN0SUQsIHN1Y2Nlc3MpKTsKK30KKwordm9pZCBMZWdhY3lVbmlxdWVJREJEYXRh
YmFzZTo6ZGVsZXRlSW5kZXhJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0
IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9y
ZUlELCBpbnQ2NF90IGluZGV4SUQpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKKworICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFj
a2luZ1N0b3JlLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SUQsIGluZGV4SUQpOworCisgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVJbmRleCwgcmVx
dWVzdElELCBzdWNjZXNzKSk7Cit9CisKK3ZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OnB1
dFJlY29yZEluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0
b3JlTWV0YWRhdGEsIGNvbnN0IElEQktleURhdGEmIGlucHV0S2V5RGF0YSwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiB2YWx1ZSwgaW50NjRfdCBwdXRNb2RlLCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IGluZGV4SURzLCBjb25zdCBWZWN0b3I8VmVjdG9yPElEQktleURhdGE+PiYgaW5kZXhLZXlzKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChtX2JhY2tpbmdT
dG9yZSk7CisKKyAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9IGZhbHNlOworICAgIElEQktleURh
dGEga2V5OworICAgIGludDY0X3Qga2V5TnVtYmVyID0gMDsKKworICAgIGlmIChwdXRNb2RlICE9
IElEQkRhdGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRlICYmIG9iamVjdFN0b3JlTWV0YWRhdGEu
YXV0b0luY3JlbWVudCAmJiBpbnB1dEtleURhdGEuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKCFt
X2JhY2tpbmdTdG9yZS0+Z2VuZXJhdGVLZXlOdW1iZXIodHJhbnNhY3Rpb24sIG9iamVjdFN0b3Jl
TWV0YWRhdGEuaWQsIGtleU51bWJlcikpIHsKKyAgICAgICAgICAgIHBvc3RNYWluVGhyZWFkVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUHV0UmVjb3JkSW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgSURCS2V5RGF0YSgpLCBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkludGVybmFsIGJh
Y2tpbmcgc3RvcmUgZXJyb3IgY2hlY2tpbmcgZm9yIGtleSBleGlzdGVuY2UiKSkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGtleS5zZXROdW1iZXJWYWx1ZShrZXlO
dW1iZXIpOworICAgICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOworICAgIH0gZWxzZQorICAg
ICAgICBrZXkgPSBpbnB1dEtleURhdGE7CisKKyAgICBpZiAocHV0TW9kZSA9PSBJREJEYXRhYmFz
ZUJhY2tlbmQ6OkFkZE9ubHkpIHsKKyAgICAgICAgYm9vbCBrZXlFeGlzdHM7CisgICAgICAgIGlm
ICghbV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24sIG9i
amVjdFN0b3JlTWV0YWRhdGEuaWQsIGtleSwga2V5RXhpc3RzKSkgeworICAgICAgICAgICAgcG9z
dE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQdXRSZWNvcmRJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCBJREJL
ZXlEYXRhKCksIElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiSW50ZXJuYWwgYmFja2luZyBzdG9yZSBlcnJvciBjaGVja2luZyBmb3Iga2V5IGV4aXN0ZW5j
ZSIpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleUV4
aXN0cykgeworICAgICAgICAgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQdXRSZWNvcmRJbkJhY2tp
bmdTdG9yZSwgcmVxdWVzdElELCBJREJLZXlEYXRhKCksIElEQkRhdGFiYXNlRXhjZXB0aW9uOjpD
b25zdHJhaW50RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBv
YmplY3Qgc3RvcmUiKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGF0IGV2ZW4gaWYgd2UncmUgYWJvdXQgdG8gb3Zlcndy
aXRlIHRoZSByZWNvcmQsIHBlcmZvcm0gdGhlIHN0ZXBzIHRvIGRlbGV0ZSBpdCBmaXJzdC4KKyAg
ICAvLyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGZvcm1hbGx5IGRlbGV0aW5nIGl0IGZyb20g
ZnJvbSB0aGUgb2JqZWN0IHN0b3JlIGFsc28gcmVtb3ZlcyBpdCBmcm9tIHRoZSBhcHByb3ByaWF0
ZSBpbmRleGVzLgorICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJlY29yZCh0cmFuc2Fj
dGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwga2V5KSkgeworICAgICAgICBwb3N0TWFpblRo
cmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0
YWJhc2U6OmRpZFB1dFJlY29yZEluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQktleURhdGEo
KSwgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJSZXBs
YWNpbmcgYW4gZXhpc3Rpbmcga2V5IGluIGJhY2tpbmcgc3RvcmUsIHVuYWJsZSB0byBkZWxldGUg
cHJldmlvdXMgcmVjb3JkLiIpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IW1fYmFja2luZ1N0b3JlLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTWV0YWRh
dGEuaWQsIGtleSwgdmFsdWUuZGF0YSgpLCB2YWx1ZS5zaXplKCkpKSB7CisgICAgICAgIHBvc3RN
YWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUHV0UmVjb3JkSW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgSURCS2V5
RGF0YSgpLCBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwo
IkludGVybmFsIGJhY2tpbmcgc3RvcmUgZXJyb3IgcHV0dGluZyBhIHJlY29yZCIpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoaW5kZXhJRHMuc2l6ZSgpID09IGluZGV4
S2V5cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhJRHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBpbmRleEtleXNbaV0uc2l6
ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUtPnB1dEluZGV4UmVj
b3JkKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkLCBpbmRleElEc1tpXSwga2V5
LCBpbmRleEtleXNbaV1bal0pKSB7CisgICAgICAgICAgICAgICAgcG9zdE1haW5UaHJlYWRUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQdXRSZWNvcmRJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCBJREJLZXlEYXRhKCksIElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiSW50ZXJuYWwgYmFj
a2luZyBzdG9yZSBlcnJvciB3cml0aW5nIGluZGV4IGtleSIpKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbV9iYWNraW5n
U3RvcmUtPm5vdGlmeUN1cnNvcnNPZkNoYW5nZXModHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTWV0
YWRhdGEuaWQpOworCisgICAgaWYgKHB1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5kOjpDdXJz
b3JVcGRhdGUgJiYgb2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50ICYmIGtleS50eXBl
KCkgPT0gS2V5VHlwZTo6TnVtYmVyKSB7CisgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUtPnVw
ZGF0ZUtleUdlbmVyYXRvck51bWJlcih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YS5p
ZCwga2V5TnVtYmVyLCBrZXlXYXNHZW5lcmF0ZWQpKSB7CisgICAgICAgICAgICBwb3N0TWFpblRo
cmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0
YWJhc2U6OmRpZFB1dFJlY29yZEluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQktleURhdGEo
KSwgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJJbnRl
cm5hbCBiYWNraW5nIHN0b3JlIGVycm9yIHVwZGF0aW5nIGtleSBnZW5lcmF0b3IiKSkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgcG9zdE1haW5UaHJlYWRU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQdXRSZWNvcmRJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCBrZXksIDAsIFN0cmluZyhT
dHJpbmdJbXBsOjplbXB0eSgpKSkpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQdXRSZWNvcmRJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElE
QktleURhdGEmIGtleURhdGEsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpCit7CisgICAgbV9wZW5kaW5nRGF0YWJhc2VUYXNrcy50YWtlKHJlcXVlc3RJRCku
Z2V0KCkuY29tcGxldGVSZXF1ZXN0KGtleURhdGEsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsK
K30KKwordm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkRnJvbUJhY2tpbmdT
dG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9u
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhLCBpbnQ2
NF90IGluZGV4SUQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBJbmRleGVk
REI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworCisgICAgUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSA9IGtleVJhbmdlRGF0YS5tYXliZUNyZWF0ZUlEQktleVJhbmdlKCk7Cisg
ICAgQVNTRVJUKGtleVJhbmdlKTsKKyAgICBpZiAoIWtleVJhbmdlKSB7CisgICAgICAgIHBvc3RN
YWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkR2V0UmVjb3JkRnJvbUJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCBJREJH
ZXRSZXN1bHQoKSwgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRl
cmFsKCJJbnZhbGlkIElEQktleVJhbmdlIHJlcXVlc3RlZCBmcm9tIGJhY2tpbmcgc3RvcmUiKSkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGluZGV4SUQgPT0gSURCSW5kZXhN
ZXRhZGF0YTo6SW52YWxpZElkKSB7CisgICAgICAgIC8vIElEQk9iamVjdFN0b3JlIGdldCByZWNv
cmQKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzdWx0OworCisgICAgICAgIGlmIChr
ZXlSYW5nZS0+aXNPbmx5S2V5KCkpIHsKKyAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUt
PmdldEtleVJlY29yZEZyb21PYmplY3RTdG9yZSh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRh
ZGF0YS5pZCwgKmtleVJhbmdlLT5sb3dlcigpLCByZXN1bHQpKQorICAgICAgICAgICAgICAgIHBv
c3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkR2V0UmVjb3JkRnJvbUJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCBJ
REJHZXRSZXN1bHQoKSwgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZ2V0IGtleSByZWNvcmQgZnJvbSBvYmplY3Qgc3RvcmUgaW4gYmFj
a2luZyBzdG9yZSIpKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBJREJH
ZXRSZXN1bHQgZ2V0UmVzdWx0ID0gcmVzdWx0ID8gSURCR2V0UmVzdWx0KHJlc3VsdC5yZWxlYXNl
KCksIGtleVJhbmdlLT5sb3dlcigpLCBvYmplY3RTdG9yZU1ldGFkYXRhLmtleVBhdGgpIDogSURC
R2V0UmVzdWx0KCk7CisgICAgICAgICAgICAgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRHZXRSZWNv
cmRGcm9tQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIGdldFJlc3VsdCwgMCwgU3RyaW5nKFN0cmlu
Z0ltcGw6OmVtcHR5KCkpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIFJlZlB0cjxJREJLZXk+IHJlc3VsdEtleTsKKworICAgICAg
ICBpZiAoIW1fYmFja2luZ1N0b3JlLT5nZXRLZXlSYW5nZVJlY29yZEZyb21PYmplY3RTdG9yZSh0
cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwgKmtleVJhbmdlLCByZXN1bHQsIHJl
c3VsdEtleSkpCisgICAgICAgICAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZEdldFJlY29yZEZyb21C
YWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgSURCR2V0UmVzdWx0KCksIElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGdldCBrZXkgcmFuZ2Ug
cmVjb3JkIGZyb20gb2JqZWN0IHN0b3JlIGluIGJhY2tpbmcgc3RvcmUiKSkpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIElEQkdldFJlc3VsdCBnZXRSZXN1bHQgPSByZXN1bHQgPyBJREJH
ZXRSZXN1bHQocmVzdWx0LnJlbGVhc2UoKSwgcmVzdWx0S2V5LnJlbGVhc2UoKSwgb2JqZWN0U3Rv
cmVNZXRhZGF0YS5rZXlQYXRoKSA6IElEQkdldFJlc3VsdCgpOworICAgICAgICAgICAgcG9zdE1h
aW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRHZXRSZWNvcmRGcm9tQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIGdldFJl
c3VsdCwgMCwgU3RyaW5nKFN0cmluZ0ltcGw6OmVtcHR5KCkpKSk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSURCSW5kZXggZ2V0IHJlY29yZAorCisgICAg
SURCR2V0UmVzdWx0IHJlc3VsdDsKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5nZXRJbmRleFJl
Y29yZCh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwgaW5kZXhJRCwga2V5UmFu
Z2VEYXRhLCBjdXJzb3JUeXBlLCByZXN1bHQpKSB7CisgICAgICAgIHBvc3RNYWluVGhyZWFkVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkR2V0UmVjb3JkRnJvbUJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCBJREJHZXRSZXN1bHQoKSwg
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQg
dG8gZ2V0IGluZGV4IHJlY29yZCBmcm9tIGJhY2tpbmcgc3RvcmUiKSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gV2UgbXVzdCByZXR1cm4gYSBrZXkgcGF0aCB0byBrbm93IGhv
dyB0byBpbmplY3QgdGhlIHJlc3VsdCBrZXkgaW50byB0aGUgcmVzdWx0IHZhbHVlIG9iamVjdC4K
KyAgICByZXN1bHQuc2V0S2V5UGF0aChvYmplY3RTdG9yZU1ldGFkYXRhLmtleVBhdGgpOworCisg
ICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2Fj
eVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRHZXRSZWNvcmRGcm9tQmFja2luZ1N0b3JlLCByZXF1ZXN0
SUQsIHJlc3VsdCwgMCwgU3RyaW5nKFN0cmluZ0ltcGw6OmVtcHR5KCkpKSk7Cit9CisKK3ZvaWQg
TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZEdldFJlY29yZEZyb21CYWNraW5nU3RvcmUodWlu
dDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCwgdWludDMyX3QgZXJy
b3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICBtX3BlbmRpbmdEYXRh
YmFzZVRhc2tzLnRha2UocmVxdWVzdElEKS5nZXQoKS5jb21wbGV0ZVJlcXVlc3QocmVzdWx0LCBl
cnJvckNvZGUsIGVycm9yTWVzc2FnZSk7Cit9CisKK3ZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJh
c2U6Om9wZW5DdXJzb3JJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElE
QklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlE
LCBpbnQ2NF90IGluZGV4SUQsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGN1cnNvckRpcmVj
dGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2Vu
ZDo6VGFza1R5cGUgdGFza1R5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UpCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0
b3JlKTsKKworICAgIGludDY0X3QgY3Vyc29ySUQgPSAwOworICAgIElEQktleURhdGEga2V5Owor
ICAgIElEQktleURhdGEgcHJpbWFyeUtleTsKKyAgICBWZWN0b3I8dWludDhfdD4gdmFsdWVCdWZm
ZXI7CisgICAgaW50MzJfdCBlcnJvckNvZGUgPSAwOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7
CisgICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPm9wZW5DdXJzb3IodHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlELCBpbmRleElELCBjdXJzb3JEaXJlY3Rpb24sIGN1
cnNvclR5cGUsIHRhc2tUeXBlLCBrZXlSYW5nZSwgY3Vyc29ySUQsIGtleSwgcHJpbWFyeUtleSwg
dmFsdWVCdWZmZXIpOworCisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIGVycm9yQ29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3I7CisgICAgICAgIGVycm9yTWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiVW5rbm93biBlcnJvciBvcGVuaW5nIGN1cnNvciBpbiBiYWNraW5n
IHN0b3JlIik7CisgICAgfQorCisgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQ3Vyc29ySW5C
YWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgY3Vyc29ySUQsIGtleSwgcHJpbWFyeUtleSwgdmFsdWVC
dWZmZXIsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKSk7Cit9CisKK3ZvaWQgTGVnYWN5VW5pcXVl
SURCRGF0YWJhc2U6OmRpZE9wZW5DdXJzb3JJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0
SUQsIGludDY0X3QgY3Vyc29ySUQsIGNvbnN0IElEQktleURhdGEmIGtleSwgY29uc3QgSURCS2V5
RGF0YSYgcHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZUJ1ZmZlciwgdWlu
dDMyX3QgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICBtX3Bl
bmRpbmdEYXRhYmFzZVRhc2tzLnRha2UocmVxdWVzdElEKS5nZXQoKS5jb21wbGV0ZVJlcXVlc3Qo
Y3Vyc29ySUQsIGtleSwgcHJpbWFyeUtleSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUodmFsdWVCdWZm
ZXIuZGF0YSgpLCB2YWx1ZUJ1ZmZlci5zaXplKCkpLCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7
Cit9CisKK3ZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmFkdmFuY2VDdXJzb3JJbkJhY2tp
bmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElEQklkZW50aWZpZXImIGN1cnNvcklk
ZW50aWZpZXIsIHVpbnQ2NF90IGNvdW50KQoreworICAgIElEQktleURhdGEga2V5OworICAgIElE
QktleURhdGEgcHJpbWFyeUtleTsKKyAgICBWZWN0b3I8dWludDhfdD4gdmFsdWVCdWZmZXI7Cisg
ICAgaW50MzJfdCBlcnJvckNvZGUgPSAwOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAg
Ym9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPmFkdmFuY2VDdXJzb3IoY3Vyc29ySWRlbnRp
ZmllciwgY291bnQsIGtleSwgcHJpbWFyeUtleSwgdmFsdWVCdWZmZXIpOworCisgICAgaWYgKCFz
dWNjZXNzKSB7CisgICAgICAgIGVycm9yQ29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtu
b3duRXJyb3I7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiVW5rbm93biBl
cnJvciBhZHZhbmNpbmcgY3Vyc29yIGluIGJhY2tpbmcgc3RvcmUiKTsKKyAgICB9CisKKyAgICBw
b3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5p
cXVlSURCRGF0YWJhc2U6OmRpZEFkdmFuY2VDdXJzb3JJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElE
LCBrZXksIHByaW1hcnlLZXksIHZhbHVlQnVmZmVyLCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSkp
OworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRBZHZhbmNlQ3Vyc29ySW5C
YWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJLZXlEYXRhJiBrZXksIGNv
bnN0IElEQktleURhdGEmIHByaW1hcnlLZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWVC
dWZmZXIsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7
CisgICAgbV9wZW5kaW5nRGF0YWJhc2VUYXNrcy50YWtlKHJlcXVlc3RJRCkuZ2V0KCkuY29tcGxl
dGVSZXF1ZXN0KGtleSwgcHJpbWFyeUtleSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUodmFsdWVCdWZm
ZXIuZGF0YSgpLCB2YWx1ZUJ1ZmZlci5zaXplKCkpLCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7
Cit9CisKK3ZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3JJbkJhY2tp
bmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElEQklkZW50aWZpZXImIGN1cnNvcklk
ZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmIGl0ZXJhdGVLZXkpCit7CisgICAgSURCS2V5RGF0
YSBrZXk7CisgICAgSURCS2V5RGF0YSBwcmltYXJ5S2V5OworICAgIFZlY3Rvcjx1aW50OF90PiB2
YWx1ZUJ1ZmZlcjsKKyAgICBpbnQzMl90IGVycm9yQ29kZSA9IDA7CisgICAgU3RyaW5nIGVycm9y
TWVzc2FnZTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+aXRlcmF0ZUN1cnNv
cihjdXJzb3JJZGVudGlmaWVyLCBpdGVyYXRlS2V5LCBrZXksIHByaW1hcnlLZXksIHZhbHVlQnVm
ZmVyKTsKKworICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBlcnJvckNvZGUgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yOworICAgICAgICBlcnJvck1lc3NhZ2UgPSBBU0NJ
SUxpdGVyYWwoIlVua25vd24gZXJyb3IgaXRlcmF0aW5nIGN1cnNvciBpbiBiYWNraW5nIHN0b3Jl
Iik7CisgICAgfQorCisgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRJdGVyYXRlQ3Vyc29ySW5CYWNr
aW5nU3RvcmUsIHJlcXVlc3RJRCwga2V5LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlciwgZXJyb3JD
b2RlLCBlcnJvck1lc3NhZ2UpKTsKK30KKwordm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkSXRlcmF0ZUN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3Qg
SURCS2V5RGF0YSYga2V5LCBjb25zdCBJREJLZXlEYXRhJiBwcmltYXJ5S2V5LCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIHZhbHVlQnVmZmVyLCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKQoreworICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MudGFrZShyZXF1
ZXN0SUQpLmdldCgpLmNvbXBsZXRlUmVxdWVzdChrZXksIHByaW1hcnlLZXksIFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKHZhbHVlQnVmZmVyLmRhdGEoKSwgdmFsdWVCdWZmZXIuc2l6ZSgpKSwgZXJyb3JD
b2RlLCBlcnJvck1lc3NhZ2UpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpj
b3VudEluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3Qg
aW5kZXhJRCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEpCit7CisgICAgaW50
NjRfdCBjb3VudDsKKworICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmNvdW50KHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgb2JqZWN0U3RvcmVJRCwgaW5kZXhJRCwga2V5UmFuZ2VEYXRhLCBjb3VudCkp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGNvdW50IGZyb20gYmFja2luZyBz
dG9yZS4iKTsKKyAgICAgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRDb3VudEluQmFja2luZ1N0b3Jl
LCByZXF1ZXN0SUQsIDAsIElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIGdldCBjb3VudCBmcm9tIGJhY2tpbmcgc3RvcmUiKSkpOworCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZENvdW50SW5C
YWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgY291bnQsIDAsIFN0cmluZyhTdHJpbmdJbXBsOjplbXB0
eSgpKSkpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRDb3VudEluQmFj
a2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCBjb3VudCwgdWludDMyX3QgZXJy
b3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICBtX3BlbmRpbmdEYXRh
YmFzZVRhc2tzLnRha2UocmVxdWVzdElEKS5nZXQoKS5jb21wbGV0ZVJlcXVlc3QoY291bnQsIGVy
cm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsKK30KKwordm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFz
ZTo6ZGVsZXRlUmFuZ2VJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElE
QklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlE
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSkKK3sKKyAgICBpZiAoIW1fYmFj
a2luZ1N0b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SUQsIGtleVJhbmdlRGF0YSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVsZXRl
IHJhbmdlIGZyb20gYmFja2luZyBzdG9yZS4iKTsKKyAgICAgICAgcG9zdE1haW5UaHJlYWRUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWREZWxldGVSYW5nZUluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGdldCBjb3VudCBmcm9t
IGJhY2tpbmcgc3RvcmUiKSkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Jh
Y2tpbmdTdG9yZS0+bm90aWZ5Q3Vyc29yc09mQ2hhbmdlcyh0cmFuc2FjdGlvbklkZW50aWZpZXIs
IG9iamVjdFN0b3JlSUQpOworCisgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVSYW5nZUlu
QmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIDAsIFN0cmluZyhTdHJpbmdJbXBsOjplbXB0eSgpKSkp
OworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVSYW5nZUluQmFj
a2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgdWludDMyX3QgZXJyb3JDb2RlLCBjb25zdCBT
dHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICBtX3BlbmRpbmdEYXRhYmFzZVRhc2tzLnRha2Uo
cmVxdWVzdElEKS5nZXQoKS5jb21wbGV0ZVJlcXVlc3QoZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2Up
OworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRFc3RhYmxpc2hUcmFuc2Fj
dGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGJvb2wgc3Vj
Y2VzcykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmICghc3VjY2Vz
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvbnMgPSBtX2VzdGFibGlz
aGVkVHJhbnNhY3Rpb25zLmFkZCgmdHJhbnNhY3Rpb25JZGVudGlmaWVyLmNvbm5lY3Rpb24oKSwg
SGFzaFNldDxJREJJZGVudGlmaWVyPigpKTsKKyAgICB0cmFuc2FjdGlvbnMuaXRlcmF0b3ItPnZh
bHVlLmFkZCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRSZXNldFRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgYm9vbCBzdWNjZXNzKQoreworICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IHRyYW5zYWN0aW9ucyA9IG1fZXN0YWJsaXNoZWRUcmFuc2FjdGlvbnMuZmluZCgmdHJhbnNhY3Rp
b25JZGVudGlmaWVyLmNvbm5lY3Rpb24oKSk7CisgICAgaWYgKHRyYW5zYWN0aW9ucyAhPSBtX2Vz
dGFibGlzaGVkVHJhbnNhY3Rpb25zLmVuZCgpKQorICAgICAgICB0cmFuc2FjdGlvbnMuZ2V0KCkt
PnZhbHVlLnJlbW92ZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOworfQorCit2b2lkIExlZ2FjeVVu
aXF1ZUlEQkRhdGFiYXNlOjpyZXNldEFsbFRyYW5zYWN0aW9ucyhjb25zdCBEYXRhYmFzZVByb2Nl
c3NJREJDb25uZWN0aW9uJiBjb25uZWN0aW9uKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CisgICAgYXV0byB0cmFuc2FjdGlvbnMgPSBtX2VzdGFibGlzaGVkVHJhbnNhY3Rpb25z
LmZpbmQoJmNvbm5lY3Rpb24pOworICAgIGlmICh0cmFuc2FjdGlvbnMgPT0gbV9lc3RhYmxpc2hl
ZFRyYW5zYWN0aW9ucy5lbmQoKSB8fCAhbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykKKyAgICAgICAg
cmV0dXJuOworCisgICAgZm9yIChhdXRvJiB0cmFuc2FjdGlvbklkZW50aWZpZXIgOiB0cmFuc2Fj
dGlvbnMuZ2V0KCktPnZhbHVlKSB7CisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJh
Y2tzLmFkZCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOworICAgICAgICBpZiAoIW1fcGVuZGluZ1Ry
YW5zYWN0aW9uUmVxdWVzdHMuY29udGFpbnModHJhbnNhY3Rpb25JZGVudGlmaWVyKSkKKyAgICAg
ICAgICAgIGZpbmFsaXplUm9sbGJhY2sodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICB9Cit9
CisKK3ZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmZpbmFsaXplUm9sbGJhY2soY29uc3Qg
V2ViS2l0OjpJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkKQoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJhY2tz
LmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAgICBBU1NFUlQoIW1fcGVuZGluZ1RyYW5zYWN0
aW9uUmVxdWVzdHMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpOworICAgIHJvbGxiYWNrVHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb25JZCwgW3RoaXMsIHRyYW5zYWN0aW9uSWRdKGJvb2wpIHsKKyAgICAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgaWYgKG1fcGVuZGluZ1RyYW5z
YWN0aW9uUmVxdWVzdHMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgQVNTRVJUKG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJhY2tzLmNvbnRh
aW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAgICAgICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFj
a3MucmVtb3ZlKHRyYW5zYWN0aW9uSWQpOworICAgICAgICByZXNldFRyYW5zYWN0aW9uKHRyYW5z
YWN0aW9uSWQsIFt0aGlzLCB0cmFuc2FjdGlvbklkXShib29sKSB7CisgICAgICAgICAgICBpZiAo
bV9hY2NlcHRpbmdOZXdSZXF1ZXN0cyAmJiBtX2Nvbm5lY3Rpb25zLmlzRW1wdHkoKSAmJiBtX3Bl
bmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBz
aHV0ZG93bihMZWdhY3lVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlwZTo6Tm9ybWFsU2h1dGRv
d24pOworICAgICAgICAgICAgICAgIERhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3Zl
TGVnYWN5VW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKyAgICB9KTsKK30KKworU3RyaW5nIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjphYnNvbHV0
ZURhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIHJldHVybiBEYXRhYmFzZVByb2Nlc3M6OnNpbmdsZXRvbigpLmFic29sdXRlSW5k
ZXhlZERhdGFiYXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0aChtX2RhdGFiYXNlUmVsYXRp
dmVEaXJlY3RvcnkpOworfQorCit2b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0TWFp
blRocmVhZFRhc2soc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhyZWFkVGFzaz4gdGFzaywgRGF0YWJh
c2VUYXNrVHlwZSB0YXNrVHlwZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cyAmJiB0YXNrVHlwZSA9PSBEYXRhYmFz
ZVRhc2tUeXBlOjpOb3JtYWwpCisgICAgICAgIHJldHVybjsKKworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbWFpblRocmVhZFRhc2tNdXRleCk7CisKKyAgICBtX21haW5UaHJlYWRUYXNrcy5hcHBl
bmQoV1RGTW92ZSh0YXNrKSk7CisKKyAgICBSZWZQdHI8TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U+
IGRhdGFiYXNlKHRoaXMpOworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbZGF0YWJhc2Vd
IHsKKyAgICAgICAgZGF0YWJhc2UtPnBlcmZvcm1OZXh0TWFpblRocmVhZFRhc2soKTsKKyAgICB9
KTsKK30KKworYm9vbCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU5leHRNYWluVGhy
ZWFkVGFzaygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGJvb2wg
bW9yZVRhc2tzOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhyZWFkVGFzaz4gdGFzazsK
KyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbWFpblRocmVhZFRhc2tNdXRleCk7
CisKKyAgICAgICAgLy8gVGhpcyBkYXRhYmFzZSBtaWdodCBiZSBzaHV0dGluZyBkb3duLCBpbiB3
aGljaCBjYXNlIHRoZSB0YXNrIHF1ZXVlIG1pZ2h0IGJlIGVtcHR5LgorICAgICAgICBpZiAobV9t
YWluVGhyZWFkVGFza3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIHRhc2sgPSBtX21haW5UaHJlYWRUYXNrcy50YWtlRmlyc3QoKTsKKyAgICAgICAgbW9y
ZVRhc2tzID0gIW1fbWFpblRocmVhZFRhc2tzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICB0YXNr
LT5wZXJmb3JtVGFzaygpOworCisgICAgcmV0dXJuIG1vcmVUYXNrczsKK30KKwordm9pZCBMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8Q3Jv
c3NUaHJlYWRUYXNrPiB0YXNrLCBEYXRhYmFzZVRhc2tUeXBlIHRhc2tUeXBlKQoreworICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoIW1fYWNjZXB0aW5nTmV3UmVxdWVz
dHMgJiYgdGFza1R5cGUgPT0gRGF0YWJhc2VUYXNrVHlwZTo6Tm9ybWFsKQorICAgICAgICByZXR1
cm47CisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2RhdGFiYXNlVGFza011dGV4KTsKKworICAg
IG1fZGF0YWJhc2VUYXNrcy5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CisKKyAgICBSZWZQdHI8TGVn
YWN5VW5pcXVlSURCRGF0YWJhc2U+IGRhdGFiYXNlKHRoaXMpOworICAgIERhdGFiYXNlUHJvY2Vz
czo6c2luZ2xldG9uKCkucXVldWUoKS5kaXNwYXRjaChbZGF0YWJhc2VdIHsKKyAgICAgICAgZGF0
YWJhc2UtPnBlcmZvcm1OZXh0RGF0YWJhc2VUYXNrKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTGVn
YWN5VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1OZXh0RGF0YWJhc2VUYXNrKCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQg
dGhpcyBkYXRhYmFzZSBtaWdodCBiZSBzaHV0dGluZyBkb3duIG9uIHRoZSBtYWluIHRocmVhZC4K
KyAgICAvLyBJbiB0aGlzIGNhc2UsIGltbWVkaWF0ZWx5IGFmdGVyIHJlbGVhc2luZyBtX2RhdGFi
YXNlVGFza011dGV4LCB0aGlzIGRhdGFiYXNlIG1pZ2h0IGdldCBkZWxldGVkLgorICAgIC8vIFdl
IHRha2UgYSByZWYoKSB0byBtYWtlIHN1cmUgdGhlIGRhdGFiYXNlIGlzIHN0aWxsIGxpdmUgd2hp
bGUgdGhpcyBsYXN0IHRhc2sgaXMgcGVyZm9ybWVkLgorICAgIFJlZlB0cjxMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZT4gcHJvdGVjdG9yKHRoaXMpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENyb3Nz
VGhyZWFkVGFzaz4gdGFzazsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZGF0
YWJhc2VUYXNrTXV0ZXgpOworCisgICAgICAgIC8vIFRoaXMgZGF0YWJhc2UgbWlnaHQgYmUgc2h1
dHRpbmcgZG93biBvbiB0aGUgbWFpbiB0aHJlYWQsIGluIHdoaWNoIGNhc2UgdGhlIHRhc2sgcXVl
dWUgbWlnaHQgYmUgZW1wdHkuCisgICAgICAgIGlmIChtX2RhdGFiYXNlVGFza3MuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRhc2sgPSBtX2RhdGFiYXNlVGFza3Mu
dGFrZUZpcnN0KCk7CisgICAgfQorCisgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkg
JiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0xlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0xlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyM2NlYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvTGVn
YWN5VW5pcXVlSURCRGF0YWJhc2UuaApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VfaAorI2RlZmluZSBMZWdhY3lVbmlxdWVJREJE
YXRhYmFzZV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFC
QVNFX1BST0NFU1MpCisKKyNpbmNsdWRlICJBc3luY1JlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJJ
ZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JREJEYXRhYmFzZUJhY2tlbmQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0luZGV4ZWREQi5oPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3Rm
L0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgRGF0YVJlZmVyZW5jZTsKK30K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ3Jvc3NUaHJlYWRUYXNrOworY2xhc3MgSURC
R2V0UmVzdWx0OworY2xhc3MgSURCS2V5RGF0YTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworc3Ry
dWN0IElEQkRhdGFiYXNlTWV0YWRhdGE7CitzdHJ1Y3QgSURCS2V5UmFuZ2VEYXRhOworc3RydWN0
IFNlY3VyaXR5T3JpZ2luRGF0YTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIERh
dGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb247CitjbGFzcyBVbmlxdWVJREJEYXRhYmFzZUJhY2tp
bmdTdG9yZTsKKworZW51bSBjbGFzcyBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlw
ZSB7CisgICAgTm9ybWFsU2h1dGRvd24sCisgICAgRGVsZXRlU2h1dGRvd24KK307CisKK2NsYXNz
IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPExl
Z2FjeVVuaXF1ZUlEQkRhdGFiYXNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZT4gY3JlYXRlKGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRl
bnRpZmllciYgaWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlKGlkZW50aWZpZXIpKTsKKyAgICB9CisKKyAgICB+TGVn
YWN5VW5pcXVlSURCRGF0YWJhc2UoKTsKKworICAgIHN0YXRpYyBTdHJpbmcgY2FsY3VsYXRlQWJz
b2x1dGVEYXRhYmFzZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgYWJzb2x1dGVEYXRhYmFzZURpcmVj
dG9yeSk7CisKKyAgICBjb25zdCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGlk
ZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIHZvaWQgcmVn
aXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mKTsKKyAgICB2b2lk
IHVucmVnaXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mKTsKKwor
ICAgIHZvaWQgZGVsZXRlRGF0YWJhc2Uoc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vz
c0NhbGxiYWNrKTsKKworICAgIHZvaWQgZ2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRh
KHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCwgY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRh
ZGF0YSYpPiBjb21wbGV0aW9uQ2FsbGJhY2spOworCisgICAgdm9pZCBvcGVuVHJhbnNhY3Rpb24o
Y29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIG9iamVjdFN0b3JlSURzLCBXZWJDb3JlOjpJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKTsKKyAgICB2
b2lkIGJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spOworICAg
IHZvaWQgY29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spOwor
ICAgIHZvaWQgcmVzZXRUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFjayk7
CisgICAgdm9pZCByb2xsYmFja1RyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxi
YWNrKTsKKworICAgIHZvaWQgY2hhbmdlRGF0YWJhc2VWZXJzaW9uKGNvbnN0IElEQklkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3QgbmV3VmVyc2lvbiwgc3RkOjpmdW5j
dGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKTsKKyAgICB2b2lkIGNyZWF0ZU9iamVj
dFN0b3JlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3Qg
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9v
bCk+IHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBJ
REJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
RCwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKTsKKyAgICB2b2lk
IGNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1
Y2Nlc3NDYWxsYmFjayk7CisgICAgdm9pZCBjcmVhdGVJbmRleChjb25zdCBJREJJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2Vi
Q29yZTo6SURCSW5kZXhNZXRhZGF0YSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nl
c3NDYWxsYmFjayk7CisgICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBJREJJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRl
eElELCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spOworCisgICAg
dm9pZCBwdXRSZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmLCBjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmIHZhbHVlLCBpbnQ2NF90IHB1dE1vZGUsIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90PiYgaW5kZXhJRHMsIGNvbnN0IFZlY3RvcjxWZWN0b3I8V2ViQ29yZTo6SURCS2V5
RGF0YT4+JiBpbmRleEtleXMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgV2ViQ29yZTo6SURC
S2V5RGF0YSYsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmKT4gY2FsbGJhY2spOworICAgIHZvaWQg
Z2V0UmVjb3JkKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50
NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0IFdlYkNvcmU6OklEQktl
eVJhbmdlRGF0YSYsIFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgc3RkOjpmdW5jdGlv
bjx2b2lkIChjb25zdCBXZWJDb3JlOjpJREJHZXRSZXN1bHQmLCB1aW50MzJfdCwgY29uc3QgU3Ry
aW5nJik+IGNhbGxiYWNrKTsKKworICAgIHZvaWQgb3BlbkN1cnNvcihjb25zdCBJREJJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRf
dCBpbmRleElELCBXZWJDb3JlOjpJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgV2ViQ29yZTo6
SW5kZXhlZERCOjpDdXJzb3JUeXBlLCBXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlLCBjb25zdCBXZWJDb3JlOjpJREJLZXlSYW5nZURhdGEmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KGludDY0X3QsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmLCBjb25zdCBXZWJDb3JlOjpJREJL
ZXlEYXRhJiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCB1aW50MzJfdCwgY29u
c3QgU3RyaW5nJik+IGNhbGxiYWNrKTsKKyAgICB2b2lkIGN1cnNvckFkdmFuY2UoY29uc3QgSURC
SWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgdWludDY0X3QgY291bnQsIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYsIGNvbnN0IFdlYkNvcmU6OklEQktl
eURhdGEmLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4sIHVpbnQzMl90LCBjb25z
dCBTdHJpbmcmKT4gY2FsbGJhY2spOworICAgIHZvaWQgY3Vyc29ySXRlcmF0ZShjb25zdCBJREJJ
ZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwg
c3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgY29uc3QgV2Vi
Q29yZTo6SURCS2V5RGF0YSYsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiwgdWlu
dDMyX3QsIGNvbnN0IFN0cmluZyYpPiBjYWxsYmFjayk7CisKKyAgICB2b2lkIGNvdW50KGNvbnN0
IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9y
ZUlELCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0IFdlYkNvcmU6OklEQktleVJhbmdlRGF0YSYsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoaW50NjRfdCwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYpPiBjYWxs
YmFjayk7CisgICAgdm9pZCBkZWxldGVSYW5nZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURC
S2V5UmFuZ2VEYXRhJiwgc3RkOjpmdW5jdGlvbjx2b2lkICh1aW50MzJfdCwgY29uc3QgU3RyaW5n
Jik+IGNhbGxiYWNrKTsKKworcHJpdmF0ZToKKyAgICBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZShj
b25zdCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKKworICAgIExlZ2FjeVVu
aXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisKKyAgICBib29sIG1faW5N
ZW1vcnk7CisgICAgU3RyaW5nIG1fZGF0YWJhc2VSZWxhdGl2ZURpcmVjdG9yeTsKKworICAgIEhh
c2hTZXQ8UmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+PiBtX2Nvbm5lY3Rpb25z
OworICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX2RhdGFiYXNl
UmVxdWVzdHM7CisKKyAgICBTdHJpbmcgYWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0
OworCisgICAgZW51bSBjbGFzcyBEYXRhYmFzZVRhc2tUeXBlIHsKKyAgICAgICAgTm9ybWFsLAor
ICAgICAgICBTaHV0ZG93bgorICAgIH07CisgICAgdm9pZCBwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpDcm9zc1RocmVhZFRhc2s+LCBEYXRhYmFzZVRhc2tUeXBlID0g
RGF0YWJhc2VUYXNrVHlwZTo6Tm9ybWFsKTsKKworICAgIHZvaWQgc2h1dGRvd24oTGVnYWN5VW5p
cXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGUpOworCisgICAgLy8gTWV0aG9kIHRoYXQgYXR0ZW1w
dHMgdG8gbWFrZSBsZWdhbCBmaWxlbmFtZXMgZnJvbSBhbGwgbGVnYWwgZGF0YWJhc2UgbmFtZXMK
KyAgICBTdHJpbmcgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoKSBjb25zdDsKKworICAgIC8vIFJl
dHVybnMgYSBzdHJpbmcgdGhhdCBpcyBhcHByb3ByaWF0ZSBmb3IgdXNlIGFzIGEgdW5pcXVlIGZp
bGVuYW1lCisgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWVJZGVudGlmaWVyKGNvbnN0IFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoaXMgb3JpZ2luIGNhbiB1c2UgdGhlIHNhbWUgZGF0YWJhc2VzIGFzIHRoZSBnaXZlbiBvcmln
aW4uCisgICAgYm9vbCBjYW5TaGFyZURhdGFiYXNlcyhjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGEmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmKSBjb25zdDsKKwor
ICAgIHZvaWQgcG9zdFRyYW5zYWN0aW9uT3BlcmF0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkNyb3NzVGhyZWFk
VGFzaz4sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFjayk7CisgICAg
CisgICAgLy8gVG8gYmUgY2FsbGVkIGZyb20gdGhlIGRhdGFiYXNlIHdvcmtxdWV1ZSB0aHJlYWQg
b25seQorICAgIHZvaWQgcGVyZm9ybU5leHREYXRhYmFzZVRhc2soKTsKKyAgICB2b2lkIHBvc3RN
YWluVGhyZWFkVGFzayhzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrPiwg
RGF0YWJhc2VUYXNrVHlwZSA9IERhdGFiYXNlVGFza1R5cGU6Ok5vcm1hbCk7CisgICAgdm9pZCBv
cGVuQmFja2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOworICAgIHZv
aWQgb3BlbkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlEcywg
V2ViQ29yZTo6SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpOworICAgIHZvaWQgYmVnaW5CYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJik7CisgICAgdm9pZCBjb21t
aXRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJik7CisgICAgdm9p
ZCByZXNldEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImKTsKKyAg
ICB2b2lkIHJvbGxiYWNrQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmll
ciYpOworCisgICAgdm9pZCBjaGFuZ2VEYXRhYmFzZVZlcnNpb25JbkJhY2tpbmdTdG9yZSh1aW50
NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3QgbmV3VmVyc2lvbik7CisgICAgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUluQmFj
a2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJREJPYmplY3RTdG9yZU1ldGFkYXRhJik7
CisgICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZUluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVl
c3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90
IG9iamVjdFN0b3JlSUQpOworICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZUluQmFja2luZ1N0b3Jl
KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpOworCisgICAgdm9pZCBjcmVhdGVJbmRleElu
QmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6
OklEQkluZGV4TWV0YWRhdGEmKTsKKyAgICB2b2lkIGRlbGV0ZUluZGV4SW5CYWNraW5nU3RvcmUo
dWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElEKTsKKworICAgIHZv
aWQgcHV0UmVjb3JkSW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlTWV0YWRhdGEmLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiB2YWx1ZSwgaW50NjRfdCBwdXRNb2RlLCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IGluZGV4SURzLCBjb25zdCBWZWN0b3I8VmVjdG9yPFdlYkNvcmU6OklEQktleURhdGE+PiYgaW5k
ZXhLZXlzKTsKKyAgICB2b2lkIGdldFJlY29yZEZyb21CYWNraW5nU3RvcmUodWludDY0X3QgcmVx
dWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0
IFdlYkNvcmU6OklEQktleVJhbmdlRGF0YSYsIFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSk7CisgICAgdm9pZCBvcGVuQ3Vyc29ySW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElE
LCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBXZWJDb3JlOjpJbmRleGVkREI6OkN1cnNvckRp
cmVjdGlvbiwgV2ViQ29yZTo6SW5kZXhlZERCOjpDdXJzb3JUeXBlLCBXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBjb25zdCBXZWJDb3JlOjpJREJLZXlSYW5nZURhdGEmKTsK
KyAgICB2b2lkIGFkdmFuY2VDdXJzb3JJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQs
IGNvbnN0IElEQklkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIHVpbnQ2NF90IGNvdW50KTsK
KyAgICB2b2lkIGl0ZXJhdGVDdXJzb3JJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQs
IGNvbnN0IElEQklkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OklE
QktleURhdGEmKTsKKyAgICB2b2lkIGNvdW50SW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVz
dElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qg
b2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlSYW5n
ZURhdGEmKTsKKyAgICB2b2lkIGRlbGV0ZVJhbmdlSW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVx
dWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0
X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5UmFuZ2VEYXRhJik7CisKKyAg
ICB2b2lkIHNodXRkb3duQmFja2luZ1N0b3JlKExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRv
d25UeXBlLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KTsKKworICAgIC8vIENhbGxi
YWNrcyBmcm9tIHRoZSBkYXRhYmFzZSB3b3JrcXVldWUgdGhyZWFkLCB0byBiZSBwZXJmb3JtZWQg
b24gdGhlIG1haW4gdGhyZWFkIG9ubHkKKyAgICBib29sIHBlcmZvcm1OZXh0TWFpblRocmVhZFRh
c2soKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEoY29uc3Qg
V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYsIGJvb2wgc3VjY2Vzcyk7CisgICAgdm9pZCBk
aWRDb21wbGV0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgYm9vbCBzdWNjZXNzKTsKKyAgICB2b2lkIGRpZENoYW5nZURhdGFi
YXNlVmVyc2lvbih1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vzcyk7CisgICAgdm9pZCBk
aWRDcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vzcyk7Cisg
ICAgdm9pZCBkaWREZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3Vj
Y2Vzcyk7CisgICAgdm9pZCBkaWRDbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwg
Ym9vbCBzdWNjZXNzKTsKKyAgICB2b2lkIGRpZENyZWF0ZUluZGV4KHVpbnQ2NF90IHJlcXVlc3RJ
RCwgYm9vbCBzdWNjZXNzKTsKKyAgICB2b2lkIGRpZERlbGV0ZUluZGV4KHVpbnQ2NF90IHJlcXVl
c3RJRCwgYm9vbCBzdWNjZXNzKTsKKyAgICB2b2lkIGRpZFB1dFJlY29yZEluQmFja2luZ1N0b3Jl
KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYsIHVpbnQzMl90
IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworICAgIHZvaWQgZGlkR2V0
UmVjb3JkRnJvbUJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNvcmU6
OklEQkdldFJlc3VsdCYsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UpOworICAgIHZvaWQgZGlkT3BlbkN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJl
cXVlc3RJRCwgaW50NjRfdCBjdXJzb3JJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYsIGNv
bnN0IFdlYkNvcmU6OklEQktleURhdGEmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCB1aW50MzJf
dCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICB2b2lkIGRpZEFk
dmFuY2VDdXJzb3JJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNv
cmU6OklEQktleURhdGEmLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiwgdWludDMyX3QgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSk7CisgICAgdm9pZCBkaWRJdGVyYXRlQ3Vyc29ySW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVx
dWVzdElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgY29uc3QgV2ViQ29yZTo6SURCS2V5
RGF0YSYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpOworICAgIHZvaWQgZGlkQ291bnRJbkJhY2tpbmdTdG9yZSh1
aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgY291bnQsIHVpbnQzMl90IGVycm9yQ29kZSwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworICAgIHZvaWQgZGlkRGVsZXRlUmFuZ2VJbkJhY2tp
bmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpOworCisgICAgdm9pZCBkaWRTaHV0ZG93bkJhY2tpbmdTdG9yZShM
ZWdhY3lVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlwZSk7CisgICAgdm9pZCBkaWRDb21wbGV0
ZUJvb2xSZXF1ZXN0KHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKTsKKworICAgIHZv
aWQgZGlkRXN0YWJsaXNoVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBib29sIHN1Y2Nlc3MpOworICAgIHZvaWQgZGlkUmVzZXRUcmFuc2FjdGlv
bihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGJvb2wgc3VjY2Vz
cyk7CisgICAgdm9pZCByZXNldEFsbFRyYW5zYWN0aW9ucyhjb25zdCBEYXRhYmFzZVByb2Nlc3NJ
REJDb25uZWN0aW9uJik7CisgICAgdm9pZCBmaW5hbGl6ZVJvbGxiYWNrKGNvbnN0IElEQklkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWQpOworCisgICAgYm9vbCBtX2FjY2VwdGluZ05ld1JlcXVlc3Rz
OworCisgICAgSGFzaE1hcDxjb25zdCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uKiwgSGFz
aFNldDxJREJJZGVudGlmaWVyPj4gbV9lc3RhYmxpc2hlZFRyYW5zYWN0aW9uczsKKyAgICBEZXF1
ZTxSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0czsKKyAgICBI
YXNoTWFwPElEQklkZW50aWZpZXIsIFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX3BlbmRpbmdUcmFu
c2FjdGlvblJlcXVlc3RzOworICAgIEhhc2hTZXQ8SURCSWRlbnRpZmllcj4gbV9wZW5kaW5nVHJh
bnNhY3Rpb25Sb2xsYmFja3M7CisgICAgQXN5bmNSZXF1ZXN0TWFwIG1fcGVuZGluZ0RhdGFiYXNl
VGFza3M7CisgICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gbV9wZW5kaW5nU2h1dGRvd25UYXNrOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGE+IG1fbWV0
YWRhdGE7CisgICAgYm9vbCBtX2RpZEdldE1ldGFkYXRhRnJvbUJhY2tpbmdTdG9yZTsKKworICAg
IFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisK
KyAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrPj4gbV9k
YXRhYmFzZVRhc2tzOworICAgIExvY2sgbV9kYXRhYmFzZVRhc2tNdXRleDsKKworICAgIERlcXVl
PHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpDcm9zc1RocmVhZFRhc2s+PiBtX21haW5UaHJlYWRU
YXNrczsKKyAgICBMb2NrIG1fbWFpblRocmVhZFRhc2tNdXRleDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJM
RShEQVRBQkFTRV9QUk9DRVNTKQorI2VuZGlmIC8vIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvTGVn
YWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTQxNzE2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9MZWdhY3lV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllci5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJM
RShEQVRBQkFTRV9QUk9DRVNTKQorCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlm
aWVyOjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIoKQoreworfQorCitMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRp
Zmllcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiBvcGVuaW5nT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGEmIG1haW5GcmFtZU9yaWdpbikKKyAgICA6IG1fZGF0YWJhc2VOYW1lKGRhdGFiYXNlTmFtZSkK
KyAgICAsIG1fb3BlbmluZ09yaWdpbihvcGVuaW5nT3JpZ2luKQorICAgICwgbV9tYWluRnJhbWVP
cmlnaW4obWFpbkZyYW1lT3JpZ2luKQoreworICAgIC8vIFdoaWxlIGl0IGlzIHZhbGlkIHRvIGhh
dmUgYW4gZW1wdHkgZGF0YWJhc2UgbmFtZSwgaXQgaXMgbm90IHZhbGlkIHRvIGhhdmUgYSBudWxs
IG9uZS4KKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VOYW1lLmlzTnVsbCgpKTsKK30KKworTGVnYWN5
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyOjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50
aWZpZXIoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgIDogbV9kYXRhYmFzZU5h
bWUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCit7Cit9CisKK2Jvb2wgTGVnYWN5VW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZGF0YWJhc2VOYW1lLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7Cit9
CisKK3Vuc2lnbmVkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6aGFzaCgpIGNv
bnN0Cit7CisgICAgdW5zaWduZWQgaGFzaENvZGVzWzddID0geworICAgICAgICBtX2RhdGFiYXNl
TmFtZS5pbXBsKCkgPyBtX2RhdGFiYXNlTmFtZS5pbXBsKCktPmhhc2goKSA6IDAsCisgICAgICAg
IG1fb3BlbmluZ09yaWdpbi5wcm90b2NvbC5pbXBsKCkgPyBtX29wZW5pbmdPcmlnaW4ucHJvdG9j
b2wuaW1wbCgpLT5oYXNoKCkgOiAwLAorICAgICAgICBtX29wZW5pbmdPcmlnaW4uaG9zdC5pbXBs
KCkgPyBtX29wZW5pbmdPcmlnaW4uaG9zdC5pbXBsKCktPmhhc2goKSA6IDAsCisgICAgICAgIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtX29wZW5pbmdPcmlnaW4ucG9ydCksCisgICAgICAgIG1fbWFp
bkZyYW1lT3JpZ2luLnByb3RvY29sLmltcGwoKSA/IG1fbWFpbkZyYW1lT3JpZ2luLnByb3RvY29s
LmltcGwoKS0+aGFzaCgpIDogMCwKKyAgICAgICAgbV9tYWluRnJhbWVPcmlnaW4uaG9zdC5pbXBs
KCkgPyBtX21haW5GcmFtZU9yaWdpbi5ob3N0LmltcGwoKS0+aGFzaCgpIDogMCwKKyAgICAgICAg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbWFpbkZyYW1lT3JpZ2luLnBvcnQpCisgICAgfTsKKyAg
ICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihoYXNoQ29kZXMpPihoYXNo
Q29kZXMpOworfQorCitib29sIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6aXNO
dWxsKCkgY29uc3QKK3sKKyAgICAvLyBPbmx5IGEgZGVmYXVsdCBjb25zdHJ1Y3RlZCBMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIgY2FuIGhhdmUgYSBudWxsIGRhdGFiYXNlIG5hbWUu
CisgICAgcmV0dXJuIG1fZGF0YWJhc2VOYW1lLmlzTnVsbCgpOworfQorCitMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXIgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyOjpp
c29sYXRlZENvcHkoKSBjb25zdAoreworICAgIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRp
ZmllciByZXN1bHQ7CisKKyAgICByZXN1bHQubV9kYXRhYmFzZU5hbWUgPSBtX2RhdGFiYXNlTmFt
ZS5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQubV9vcGVuaW5nT3JpZ2luID0gbV9vcGVuaW5n
T3JpZ2luLmlzb2xhdGVkQ29weSgpOworICAgIHJlc3VsdC5tX21haW5GcmFtZU9yaWdpbiA9IG1f
bWFpbkZyYW1lT3JpZ2luLmlzb2xhdGVkQ29weSgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworYm9vbCBvcGVyYXRvcj09KGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
ciYgYSwgY29uc3QgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBiKQoreworICAg
IGlmICgmYSA9PSAmYikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gYS5kYXRh
YmFzZU5hbWUoKSA9PSBiLmRhdGFiYXNlTmFtZSgpCisgICAgICAgICYmIGEub3BlbmluZ09yaWdp
bigpID09IGIub3BlbmluZ09yaWdpbigpCisgICAgICAgICYmIGEubWFpbkZyYW1lT3JpZ2luKCkg
PT0gYi5tYWluRnJhbWVPcmlnaW4oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERC
L0xlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9MZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTE2N2FhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9MZWdhY3lV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXJfaAorI2RlZmluZSBM
ZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXJfaAorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorCisjaW5jbHVkZSA8V2ViQ29y
ZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlk
ZW50aWZpZXIgeworcHVibGljOgorICAgIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
cigpOworICAgIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcihjb25zdCBTdHJpbmcm
IGRhdGFiYXNlTmFtZSwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBvcGVuaW5n
T3JpZ2luLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIG1haW5GcmFtZU9yaWdp
bik7CisKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0OworCisgICAgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlTmFtZTsgfQorICAgIGNvbnN0IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgb3BlbmluZ09yaWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fb3BlbmluZ09yaWdpbjsgfQorICAgIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYgbWFpbkZyYW1lT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYWluRnJhbWVPcmlnaW47IH0K
KworICAgIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcihXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpOworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25z
dDsKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisKKyAgICBMZWdhY3lVbmlxdWVJREJEYXRh
YmFzZUlkZW50aWZpZXIgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3Ry
aW5nIG1fZGF0YWJhc2VOYW1lOworICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBtX29w
ZW5pbmdPcmlnaW47CisgICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIG1fbWFpbkZyYW1l
T3JpZ2luOworfTsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllciYsIGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYp
OworCitzdHJ1Y3QgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVySGFzaCB7CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlm
aWVyJiBpZGVudGlmaWVyKSB7IHJldHVybiBpZGVudGlmaWVyLmhhc2goKTsgfQorICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgYSwg
Y29uc3QgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBiKSB7IHJldHVybiBhID09
IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IGZhbHNlOworfTsKKworc3RydWN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
ckhhc2hUcmFpdHMgOiBXVEY6OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxMZWdhY3lVbmlxdWVJREJE
YXRhYmFzZUlkZW50aWZpZXI+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJc0VtcHR5VmFs
dWVGdW5jdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IExl
Z2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaW5mbykgeyByZXR1cm4gaW5mby5pc051
bGwoKTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0
YWJhc2VJZGVudGlmaWVyPiA6IFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlm
aWVySGFzaFRyYWl0cyB7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJLaXQ6
OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcj4geworICAgIHR5cGVkZWYgV2ViS2l0
OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXJIYXNoIEhhc2g7Cit9OworCit9IC8v
IG5hbWVzcGFlYyBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBF
TkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKyNlbmRpZiAvLyBMZWdhY3lVbmlxdWVJREJEYXRhYmFz
ZUlkZW50aWZpZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTM0YzUwNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEyMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQotCi0jaW5jbHVkZSAiQXN5bmNSZXF1ZXN0
LmgiCi0jaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vz
cy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxp
dGUuaCIKLSNpbmNsdWRlICJXZWJDcm9zc1RocmVhZENvcGllci5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvQ3Jvc3NUaHJlYWRUYXNrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9JREJEYXRhYmFzZU1ldGFkYXRhLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9JREJHZXRSZXN1bHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lEQktleURhdGEuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0lEQktleVJhbmdlRGF0YS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJp
dHlPcmlnaW4uaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLVN0cmluZyBVbmlxdWVJREJEYXRhYmFzZTo6Y2FsY3VsYXRlQWJzb2x1dGVE
YXRhYmFzZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgYWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSkK
LXsKLSAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGFic29sdXRlRGF0YWJhc2VE
aXJlY3RvcnksICJJbmRleGVkREIuc3FsaXRlMyIpOwotfQotCi1VbmlxdWVJREJEYXRhYmFzZTo6
VW5pcXVlSURCRGF0YWJhc2UoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVu
dGlmaWVyKQotICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX2FjY2VwdGlu
Z05ld1JlcXVlc3RzKHRydWUpCi0gICAgLCBtX2RpZEdldE1ldGFkYXRhRnJvbUJhY2tpbmdTdG9y
ZShmYWxzZSkKLXsKLSAgICBtX2luTWVtb3J5ID0gIWNhblNoYXJlRGF0YWJhc2VzKGlkZW50aWZp
ZXIub3BlbmluZ09yaWdpbigpLCBpZGVudGlmaWVyLm1haW5GcmFtZU9yaWdpbigpKTsKLSAgICBp
ZiAobV9pbk1lbW9yeSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gKioqKioqKioqCi0gICAg
Ly8gSU1QT1JUQU5UOiBEbyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBp
bmRleGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQgZmlyc3QgY29uc3VsdGluZyBhIHJldmll
d2VyIGZyb20gQXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAgLy8gKioqKioq
KioqCi0KLSAgICAvLyBFYWNoIHVuaXF1ZSBJbmRleGVkIERhdGFiYXNlIGV4aXN0cyBpbiBhIGRp
cmVjdG9yeSBuYW1lZCBmb3IgdGhlIGRhdGFiYXNlLCB3aGljaCBleGlzdHMgaW4gYSBkaXJlY3Rv
cnkgcmVwcmVzZW50aW5nIGl0cyBvcGVuaW5nIG9yaWdpbi4KLSAgICBtX2RhdGFiYXNlUmVsYXRp
dmVEaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGF0YWJhc2VGaWxlbmFtZUlk
ZW50aWZpZXIoaWRlbnRpZmllci5vcGVuaW5nT3JpZ2luKCkpLCBmaWxlbmFtZUZvckRhdGFiYXNl
TmFtZSgpKTsKLQotICAgIERhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlSW5kZXhl
ZERhdGFiYXNlUmVsYXRpdmVQYXRoRXhpc3RzKG1fZGF0YWJhc2VSZWxhdGl2ZURpcmVjdG9yeSk7
Ci19Ci0KLVVuaXF1ZUlEQkRhdGFiYXNlOjp+VW5pcXVlSURCRGF0YWJhc2UoKQotewotICAgIEFT
U0VSVCghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cyk7Ci0gICAgQVNTRVJUKG1fcGVuZGluZ01ldGFk
YXRhUmVxdWVzdHMuaXNFbXB0eSgpKTsKLX0KLQotU3RyaW5nIFVuaXF1ZUlEQkRhdGFiYXNlOjpm
aWxlbmFtZUZvckRhdGFiYXNlTmFtZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lkZW50aWZp
ZXIuZGF0YWJhc2VOYW1lKCkuaXNOdWxsKCkpOwotCi0gICAgaWYgKG1faWRlbnRpZmllci5kYXRh
YmFzZU5hbWUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiJTAwIjsKLQotICAgIFN0cmlu
ZyBmaWxlbmFtZSA9IGVuY29kZUZvckZpbGVOYW1lKG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUo
KSk7Ci0gICAgZmlsZW5hbWUucmVwbGFjZSgnLicsICIlMkUiKTsKLQotICAgIHJldHVybiBmaWxl
bmFtZTsKLX0KLQotU3RyaW5nIFVuaXF1ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZUZpbGVuYW1lSWRl
bnRpZmllcihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbkRhdGEpIGNvbnN0Ci17Ci0g
ICAgUmVmPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbihTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlKG9yaWdpbkRhdGEucHJvdG9jb2wsIG9yaWdpbkRhdGEuaG9zdCwgb3JpZ2luRGF0YS5wb3J0
KSk7Ci0gICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luLmdldCgpLmRhdGFiYXNlSWRlbnRpZmllcigp
OwotfQotCi1ib29sIFVuaXF1ZUlEQkRhdGFiYXNlOjpjYW5TaGFyZURhdGFiYXNlcyhjb25zdCBT
ZWN1cml0eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0
YSYgbWFpbkZyYW1lT3JpZ2luKSBjb25zdAotewotICAgIC8vIEZvciBub3csIGFuIG9yaWdpbidz
IGRhdGFiYXNlIGFjY2VzcyBpcyBwcmVkaWNhdGVkIG9uIGVxdWFsaXR5IHdpdGggdGhlIG90aGVy
IG9yaWdpbi4KLSAgICAvLyBXZSBtaWdodCBuZWVkIHRvIG1ha2UgdGhpcyBtb3JlIG51YW5jZWQg
bGF0ZXIuCi0gICAgcmV0dXJuIG9wZW5pbmdPcmlnaW4gPT0gbWFpbkZyYW1lT3JpZ2luOwotfQot
Ci12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZWdpc3RlckNvbm5lY3Rpb24oRGF0YWJhc2VQcm9j
ZXNzSURCQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKLXsKLSAgICBBU1NFUlQoIW1fY29ubmVjdGlv
bnMuY29udGFpbnMoJmNvbm5lY3Rpb24pKTsKLSAgICBtX2Nvbm5lY3Rpb25zLmFkZCgmY29ubmVj
dGlvbik7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnVucmVnaXN0ZXJDb25uZWN0aW9u
KERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCi17Ci0gICAgQVNTRVJU
KG1fY29ubmVjdGlvbnMuY29udGFpbnMoJmNvbm5lY3Rpb24pKTsKLSAgICByZXNldEFsbFRyYW5z
YWN0aW9ucyhjb25uZWN0aW9uKTsKLSAgICBtX2Nvbm5lY3Rpb25zLnJlbW92ZSgmY29ubmVjdGlv
bik7Ci0KLSAgICBpZiAobV9jb25uZWN0aW9ucy5pc0VtcHR5KCkgJiYgbV9wZW5kaW5nVHJhbnNh
Y3Rpb25Sb2xsYmFja3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNodXRkb3duKFVuaXF1ZUlEQkRh
dGFiYXNlU2h1dGRvd25UeXBlOjpOb3JtYWxTaHV0ZG93bik7Ci0gICAgICAgIERhdGFiYXNlUHJv
Y2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOwotICAgIH0K
LX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd24oVW5pcXVlSURCRGF0YWJhc2VT
aHV0ZG93blR5cGUgdHlwZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgaWYgKCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2FjY2VwdGluZ05ld1JlcXVlc3RzID0gZmFsc2U7Ci0KLSAgICAvLyBCYWxhbmNlZCBieSBhbiBh
ZG9wdFJlZiBpbiA6OmRpZFNodXRkb3duQmFja2luZ1N0b3JlKCkKLSAgICByZWYoKTsKLQotICAg
IHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9kYXRhYmFzZVRhc2tNdXRleCk7Ci0gICAg
ICAgIG1fZGF0YWJhc2VUYXNrcy5jbGVhcigpOwotICAgIH0KLQotICAgIHBvc3REYXRhYmFzZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnNodXRk
b3duQmFja2luZ1N0b3JlLCB0eXBlLCBhYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5KCkpLCBEYXRh
YmFzZVRhc2tUeXBlOjpTaHV0ZG93bik7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnNo
dXRkb3duQmFja2luZ1N0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7Ci0KLSAgICBpZiAodHlw
ZSA9PSBVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlwZTo6RGVsZXRlU2h1dGRvd24pIHsKLSAg
ICAgICAgU3RyaW5nIGRiRmlsZW5hbWUgPSBVbmlxdWVJREJEYXRhYmFzZTo6Y2FsY3VsYXRlQWJz
b2x1dGVEYXRhYmFzZUZpbGVuYW1lKGRhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICAgICAgTE9HKElE
QiwgIlVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkJhY2tpbmdTdG9yZSBkZWxldGluZyBmaWxl
ICclcycgb24gZGlzayIsIGRiRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGRlbGV0
ZUZpbGUoZGJGaWxlbmFtZSk7Ci0gICAgICAgIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGRhdGFiYXNl
RGlyZWN0b3J5KTsKLSAgICB9Ci0KLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFNodXRkb3duQmFja2luZ1N0
b3JlLCB0eXBlKSwgRGF0YWJhc2VUYXNrVHlwZTo6U2h1dGRvd24pOwotfQotCi12b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRTaHV0ZG93bkJhY2tpbmdTdG9yZShVbmlxdWVJREJEYXRhYmFzZVNo
dXRkb3duVHlwZSB0eXBlKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICAvLyBCYWxhbmNlZCBieSBhIHJlZiBpbiA6OnNodXRkb3duKCkKLSAgICBSZWZQdHI8VW5pcXVl
SURCRGF0YWJhc2U+IHByb3RlY3RvcihhZG9wdFJlZih0aGlzKSk7Ci0KLSAgICAvLyBFbXB0eSBv
dXQgcmVtYWluaW5nIG1haW4gdGhyZWFkIHRhc2tzLgotICAgIHdoaWxlIChwZXJmb3JtTmV4dE1h
aW5UaHJlYWRUYXNrKCkpIHsKLSAgICB9Ci0KLSAgICAvLyBObyBtb3JlIHJlcXVlc3RzIHdpbGwg
YmUgaGFuZGxlZCwgc28gYWJvcnQgYWxsIG91dHN0YW5kaW5nIHJlcXVlc3RzLgotICAgIGZvciAo
Y29uc3QgYXV0byYgcmVxdWVzdCA6IG1fcGVuZGluZ01ldGFkYXRhUmVxdWVzdHMpCi0gICAgICAg
IHJlcXVlc3QtPnJlcXVlc3RBYm9ydGVkKCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiByZXF1ZXN0
IDogbV9wZW5kaW5nVHJhbnNhY3Rpb25SZXF1ZXN0cy52YWx1ZXMoKSkKLSAgICAgICAgcmVxdWVz
dC0+cmVxdWVzdEFib3J0ZWQoKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJlcXVlc3QgOiBtX3Bl
bmRpbmdEYXRhYmFzZVRhc2tzLnZhbHVlcygpKQotICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0QWJv
cnRlZCgpOwotCi0gICAgbV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0cy5jbGVhcigpOwotICAgIG1f
cGVuZGluZ1RyYW5zYWN0aW9uUmVxdWVzdHMuY2xlYXIoKTsKLSAgICBtX3BlbmRpbmdEYXRhYmFz
ZVRhc2tzLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9wZW5kaW5nU2h1dGRvd25UYXNrKQotICAgICAg
ICBtX3BlbmRpbmdTaHV0ZG93blRhc2stPmNvbXBsZXRlUmVxdWVzdCh0eXBlKTsKLQotICAgIG1f
cGVuZGluZ1NodXRkb3duVGFzayA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRlbGV0ZURhdGFiYXNlKHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxs
YmFjaykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFtX2Fj
Y2VwdGluZ05ld1JlcXVlc3RzKSB7Ci0gICAgICAgIC8vIFNvbWVvbmUgZWxzZSBoYXMgYWxyZWFk
eSBzaHV0ZG93biB0aGlzIGRhdGFiYXNlLCBzbyB3ZSBjYW4ndCByZXF1ZXN0IGEgZGVsZXRlLgot
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtzdWNjZXNzQ2FsbGJhY2tdIHsKLSAgICAgICAgICAg
IHN1Y2Nlc3NDYWxsYmFjayhmYWxzZSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlPiBwcm90ZWN0b3IodGhpcyk7Ci0g
ICAgbV9wZW5kaW5nU2h1dGRvd25UYXNrID0gQXN5bmNSZXF1ZXN0SW1wbDxVbmlxdWVJREJEYXRh
YmFzZVNodXRkb3duVHlwZT46OmNyZWF0ZShbdGhpcywgcHJvdGVjdG9yLCBzdWNjZXNzQ2FsbGJh
Y2tdKFVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBlIHR5cGUpIHsKLSAgICAgICAgLy8gSWYg
dGhlIHNodXRkb3duIGp1c3QgY29tcGxldGVkIHdhcyBhIERlbGV0ZSBzaHV0ZG93biB0aGVuIHdl
IHN1Y2NlZWRlZC4KLSAgICAgICAgLy8gSWYgbm90IHJlcG9ydCBmYWlsdXJlIGluc3RlYWQgb2Yg
dHJ5aW5nIGFnYWluLgotICAgICAgICBzdWNjZXNzQ2FsbGJhY2sodHlwZSA9PSBVbmlxdWVJREJE
YXRhYmFzZVNodXRkb3duVHlwZTo6RGVsZXRlU2h1dGRvd24pOwotICAgIH0sIFt0aGlzLCBwcm90
ZWN0b3IsIHN1Y2Nlc3NDYWxsYmFja10gewotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZmFsc2Up
OwotICAgIH0pOwotCi0gICAgc2h1dGRvd24oVW5pcXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGU6
OkRlbGV0ZVNodXRkb3duKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0T3JFc3Rh
Ymxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCwgY29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSYpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykg
ewotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soZmFsc2UsIElEQkRhdGFiYXNlTWV0YWRhdGEo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IHJl
dHJpZXZlZCBtZXRhZGF0YSBmcm9tIHRoZSBiYWNraW5nIHN0b3JlLCByZXR1cm4gaXQgbm93Lgot
ICAgIGlmIChtX2RpZEdldE1ldGFkYXRhRnJvbUJhY2tpbmdTdG9yZSkgewotICAgICAgICBpZiAo
bV9tZXRhZGF0YSkKLSAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayh0cnVlLCAqbV9tZXRh
ZGF0YSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhmYWxz
ZSwgSURCRGF0YWJhc2VNZXRhZGF0YSgpKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdW5hbnN3ZXJlZCBtZXRhZGF0YSByZXF1ZXN0LCB0
aGVuIGxhdGVyIHdlIG5lZWQgdG8KLSAgICAvLyBwb3N0IGEgdGFzayB0byBvcGVuIHRoZSBiYWNr
aW5nIHN0b3JlIGFuZCBnZXQgbWV0YWRhdGEuCi0gICAgYm9vbCBzaG91bGRPcGVuQmFja2luZ1N0
b3JlID0gbV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0cy5pc0VtcHR5KCk7Ci0KLSAgICAvLyBUaGVu
IHJlbWVtYmVyIHRoaXMgbWV0YWRhdGEgcmVxdWVzdCB0byBiZSBhbnN3ZXJlZCBsYXRlci4KLSAg
ICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDw+OjpjcmVh
dGUoW2NvbXBsZXRpb25DYWxsYmFjaywgdGhpc10gewotICAgICAgICBjb21wbGV0aW9uQ2FsbGJh
Y2soISFtX21ldGFkYXRhLCBtX21ldGFkYXRhID8gKm1fbWV0YWRhdGEgOiBJREJEYXRhYmFzZU1l
dGFkYXRhKCkpOwotICAgIH0sIFtjb21wbGV0aW9uQ2FsbGJhY2tdIHsKLSAgICAgICAgLy8gVGhl
IGJvb2xlYW4gZmxhZyB0byB0aGUgY29tcGxldGlvbiBjYWxsYmFjayByZXByZXNlbnRzIHdoZXRo
ZXIgdGhlCi0gICAgICAgIC8vIGF0dGVtcHQgdG8gZ2V0L2VzdGFibGlzaCBtZXRhZGF0YSBzdWNj
ZWVkZWQgb3IgZmFpbGVkLgotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhYm9ydGluZyB0aGUgYXR0
ZW1wdCwgaXQgZmFpbGVkLCBzbyB3ZSBhbHdheXMgcGFzcyBpbiBmYWxzZS4KLSAgICAgICAgY29t
cGxldGlvbkNhbGxiYWNrKGZhbHNlLCBJREJEYXRhYmFzZU1ldGFkYXRhKCkpOwotICAgIH0pOwot
Ci0gICAgbV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0cy5hcHBlbmQocmVxdWVzdC5yZWxlYXNlKCkp
OwotCi0gICAgaWYgKHNob3VsZE9wZW5CYWNraW5nU3RvcmUpCi0gICAgICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6Om9w
ZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEsIG1faWRlbnRpZmllciwgYWJzb2x1dGVEYXRh
YmFzZURpcmVjdG9yeSgpKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNr
aW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVy
JiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KQotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmUpOwot
Ci0gICAgaWYgKG1faW5NZW1vcnkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJTdXBwb3J0IGZvciBp
bi1tZW1vcnkgZGF0YWJhc2VzIG5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fYmFja2luZ1N0b3JlID0gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5n
U3RvcmVTUUxpdGU6OmNyZWF0ZShpZGVudGlmaWVyLCBkYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IG1ldGFkYXRhID0gbV9iYWNraW5n
U3RvcmUtPmdldE9yRXN0YWJsaXNoTWV0YWRhdGEoKTsKLQotICAgIHBvc3RNYWluVGhyZWFkVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3Bl
bkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YSwgbWV0YWRhdGEgPyAqbWV0YWRhdGEgOiBJREJE
YXRhYmFzZU1ldGFkYXRhKCksICEhbWV0YWRhdGEpKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YShjb25zdCBJREJEYXRhYmFz
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgYm9vbCBzdWNjZXNzKQotewotICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgQVNTRVJUKCFtX21ldGFkYXRhKTsKLQotICAgIG1fZGlkR2V0TWV0
YWRhdGFGcm9tQmFja2luZ1N0b3JlID0gdHJ1ZTsKLQotICAgIGlmIChzdWNjZXNzKQotICAgICAg
ICBtX21ldGFkYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZU1ldGFkYXRhPihtZXRh
ZGF0YSk7Ci0KLSAgICB3aGlsZSAoIW1fcGVuZGluZ01ldGFkYXRhUmVxdWVzdHMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBtX3BlbmRpbmdNZXRh
ZGF0YVJlcXVlc3RzLnRha2VGaXJzdCgpOwotICAgICAgICByZXF1ZXN0LT5jb21wbGV0ZVJlcXVl
c3QoKTsKLSAgICB9Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5UcmFuc2FjdGlv
bihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJRHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1v
ZGUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFjaykKLXsKLSAgICBw
b3N0VHJhbnNhY3Rpb25PcGVyYXRpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uLCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSURzLCBtb2RlKSwg
c3VjY2Vzc0NhbGxiYWNrKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YmVnaW5UcmFu
c2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFjaykKLXsKLSAgICBwb3N0VHJhbnNh
Y3Rpb25PcGVyYXRpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6YmVnaW5CYWNraW5nU3RvcmVUcmFuc2FjdGlv
biwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSwgc3VjY2Vzc0NhbGxiYWNrKTsKLX0KLQotdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNz
Q2FsbGJhY2spCi17Ci0gICAgcG9zdFRyYW5zYWN0aW9uT3BlcmF0aW9uKHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmNvbW1pdEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbklkZW50aWZpZXIpLCBz
dWNjZXNzQ2FsbGJhY2spOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZXNldFRyYW5z
YWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3RkOjpm
dW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKQotewotICAgIHBvc3RUcmFuc2Fj
dGlvbk9wZXJhdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpyZXNldEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
LCB0cmFuc2FjdGlvbklkZW50aWZpZXIpLCBzdWNjZXNzQ2FsbGJhY2spOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpyb2xsYmFja1RyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vz
c0NhbGxiYWNrKQotewotICAgIHBvc3RUcmFuc2FjdGlvbk9wZXJhdGlvbih0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
Ojpyb2xsYmFja0JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbklkZW50aWZpZXIp
LCBzdWNjZXNzQ2FsbGJhY2spOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0VHJh
bnNhY3Rpb25PcGVyYXRpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiB0YXNrLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKLQotICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykgewotICAgICAgICBz
dWNjZXNzQ2FsbGJhY2soZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KG1fcGVuZGluZ1RyYW5zYWN0aW9uUmVxdWVzdHMuY29udGFpbnModHJhbnNhY3Rpb25JZGVudGlm
aWVyKSkgewotICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHRpbmcgdG8gcXVldWUgYW4gb3BlcmF0
aW9uIGZvciBhIHRyYW5zYWN0aW9uIHRoYXQgYWxyZWFkeSBoYXMgYW4gb3BlcmF0aW9uIHBlbmRp
bmcuIEVhY2ggdHJhbnNhY3Rpb24gc2hvdWxkIG9ubHkgaGF2ZSBvbmUgb3BlcmF0aW9uIHBlbmRp
bmcgYXQgYSB0aW1lLiIpOwotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZmFsc2UpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9zdERhdGFiYXNlVGFzayhXVEZNb3ZlKHRhc2spKTsK
LQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3luY1JlcXVlc3RJbXBsPGJv
b2w+OjpjcmVhdGUoW3N1Y2Nlc3NDYWxsYmFja10oYm9vbCBzdWNjZXNzKSB7Ci0gICAgICAgIHN1
Y2Nlc3NDYWxsYmFjayhzdWNjZXNzKTsKLSAgICB9LCBbc3VjY2Vzc0NhbGxiYWNrXSB7Ci0gICAg
ICAgIHN1Y2Nlc3NDYWxsYmFjayhmYWxzZSk7Ci0gICAgfSk7Ci0KLSAgICBtX3BlbmRpbmdUcmFu
c2FjdGlvblJlcXVlc3RzLmFkZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIHJlcXVlc3QucmVsZWFz
ZSgpKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ29tcGxldGVUcmFuc2FjdGlv
bk9wZXJhdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGJv
b2wgc3VjY2VzcykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgUmVm
UHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9IG1fcGVuZGluZ1RyYW5zYWN0aW9uUmVxdWVzdHMu
dGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwotCi0gICAgaWYgKHJlcXVlc3QpCi0gICAgICAg
IHJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdChzdWNjZXNzKTsKLQotICAgIGlmIChtX3BlbmRpbmdU
cmFuc2FjdGlvblJvbGxiYWNrcy5jb250YWlucyh0cmFuc2FjdGlvbklkZW50aWZpZXIpKQotICAg
ICAgICBmaW5hbGl6ZVJvbGxiYWNrKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmNoYW5nZURhdGFiYXNlVmVyc2lvbihjb25zdCBJREJJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG5ld1ZlcnNpb24sIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKSB7Ci0gICAg
ICAgIHN1Y2Nlc3NDYWxsYmFjayhmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICB1aW50NjRfdCBvbGRWZXJzaW9uID0gbV9tZXRhZGF0YS0+dmVyc2lvbjsKLSAgICBtX21ldGFk
YXRhLT52ZXJzaW9uID0gbmV3VmVyc2lvbjsKLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJl
cXVlc3QgPSBBc3luY1JlcXVlc3RJbXBsPGJvb2w+OjpjcmVhdGUoW3RoaXMsIG9sZFZlcnNpb24s
IHN1Y2Nlc3NDYWxsYmFja10oYm9vbCBzdWNjZXNzKSB7Ci0gICAgICAgIGlmICghc3VjY2VzcykK
LSAgICAgICAgICAgIG1fbWV0YWRhdGEtPnZlcnNpb24gPSBvbGRWZXJzaW9uOwotICAgICAgICBz
dWNjZXNzQ2FsbGJhY2soc3VjY2Vzcyk7Ci0gICAgfSwgW3RoaXMsIG9sZFZlcnNpb24sIHN1Y2Nl
c3NDYWxsYmFja10gewotICAgICAgICBtX21ldGFkYXRhLT52ZXJzaW9uID0gb2xkVmVyc2lvbjsK
LSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNlKTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90
IHJlcXVlc3RJRCA9IHJlcXVlc3QtPnJlcXVlc3RJRCgpOwotICAgIG1fcGVuZGluZ0RhdGFiYXNl
VGFza3MuYWRkKHJlcXVlc3RJRCwgcmVxdWVzdC5yZWxlYXNlKCkpOwotCi0gICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
Y2hhbmdlRGF0YWJhc2VWZXJzaW9uSW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBuZXdWZXJzaW9uKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZENoYW5nZURhdGFiYXNlVmVyc2lvbih1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vz
cykKLXsKLSAgICBkaWRDb21wbGV0ZUJvb2xSZXF1ZXN0KHJlcXVlc3RJRCwgc3VjY2Vzcyk7Ci19
Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZENyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90
IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKQotewotICAgIGRpZENvbXBsZXRlQm9vbFJlcXVlc3Qo
cmVxdWVzdElELCBzdWNjZXNzKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVs
ZXRlT2JqZWN0U3RvcmUodWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MpCi17Ci0gICAg
ZGlkQ29tcGxldGVCb29sUmVxdWVzdChyZXF1ZXN0SUQsIHN1Y2Nlc3MpOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRDbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwg
Ym9vbCBzdWNjZXNzKQotewotICAgIGRpZENvbXBsZXRlQm9vbFJlcXVlc3QocmVxdWVzdElELCBz
dWNjZXNzKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ3JlYXRlSW5kZXgodWlu
dDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MpCi17Ci0gICAgZGlkQ29tcGxldGVCb29sUmVx
dWVzdChyZXF1ZXN0SUQsIHN1Y2Nlc3MpOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWREZWxldGVJbmRleCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2VzcykKLXsKLSAgICBk
aWRDb21wbGV0ZUJvb2xSZXF1ZXN0KHJlcXVlc3RJRCwgc3VjY2Vzcyk7Ci19Ci0KLXZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZENvbXBsZXRlQm9vbFJlcXVlc3QodWludDY0X3QgcmVxdWVzdElE
LCBib29sIHN1Y2Nlc3MpCi17Ci0gICAgbV9wZW5kaW5nRGF0YWJhc2VUYXNrcy50YWtlKHJlcXVl
c3RJRCkuZ2V0KCkuY29tcGxldGVSZXF1ZXN0KHN1Y2Nlc3MpOwotfQotCi12b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRhLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spCi17Ci0gICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykg
ewotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKCFtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMuY29udGFpbnMobWV0YWRh
dGEuaWQpKTsKLSAgICBtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMuc2V0KG1ldGFkYXRhLmlkLCBt
ZXRhZGF0YSk7Ci0gICAgaW50NjRfdCBhZGRlZE9iamVjdFN0b3JlSUQgPSBtZXRhZGF0YS5pZDsK
LQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3luY1JlcXVlc3RJbXBsPGJv
b2w+OjpjcmVhdGUoW3RoaXMsIGFkZGVkT2JqZWN0U3RvcmVJRCwgc3VjY2Vzc0NhbGxiYWNrXShi
b29sIHN1Y2Nlc3MpIHsKLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgICAgbV9tZXRh
ZGF0YS0+b2JqZWN0U3RvcmVzLnJlbW92ZShhZGRlZE9iamVjdFN0b3JlSUQpOwotICAgICAgICBz
dWNjZXNzQ2FsbGJhY2soc3VjY2Vzcyk7Ci0gICAgfSwgW3RoaXMsIGFkZGVkT2JqZWN0U3RvcmVJ
RCwgc3VjY2Vzc0NhbGxiYWNrXSB7Ci0gICAgICAgIG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5y
ZW1vdmUoYWRkZWRPYmplY3RTdG9yZUlEKTsKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNl
KTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3QtPnJlcXVlc3RJ
RCgpOwotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJRCwgcmVxdWVzdC5y
ZWxlYXNlKCkpOwotCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVJbkJhY2tpbmdTdG9y
ZSwgcmVxdWVzdElELCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG1ldGFkYXRhKSk7Ci19Ci0KLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQklkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykgewotICAg
ICAgICBzdWNjZXNzQ2FsbGJhY2soZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQVNTRVJUKG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlE
KSk7Ci0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YSA9IG1fbWV0YWRhdGEtPm9i
amVjdFN0b3Jlcy50YWtlKG9iamVjdFN0b3JlSUQpOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVz
dD4gcmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8Ym9vbD46OmNyZWF0ZShbdGhpcywgbWV0YWRh
dGEsIHN1Y2Nlc3NDYWxsYmFja10oYm9vbCBzdWNjZXNzKSB7Ci0gICAgICAgIGlmICghc3VjY2Vz
cykKLSAgICAgICAgICAgIG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5zZXQobWV0YWRhdGEuaWQs
IG1ldGFkYXRhKTsKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3MpOwotICAgIH0sIFt0
aGlzLCBtZXRhZGF0YSwgc3VjY2Vzc0NhbGxiYWNrXSB7Ci0gICAgICAgIG1fbWV0YWRhdGEtPm9i
amVjdFN0b3Jlcy5zZXQobWV0YWRhdGEuaWQsIG1ldGFkYXRhKTsKLSAgICAgICAgc3VjY2Vzc0Nh
bGxiYWNrKGZhbHNlKTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVl
c3QtPnJlcXVlc3RJRCgpOwotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJ
RCwgcmVxdWVzdC5yZWxlYXNlKCkpOwotCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmVJ
bkJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0
b3JlSUQpKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZShj
b25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0
U3RvcmVJRCwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKQotewot
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIW1fYWNjZXB0aW5nTmV3
UmVxdWVzdHMpIHsKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMuY29udGFp
bnMob2JqZWN0U3RvcmVJRCkpOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9
IEFzeW5jUmVxdWVzdEltcGw8Ym9vbD46OmNyZWF0ZShbdGhpcywgc3VjY2Vzc0NhbGxiYWNrXShi
b29sIHN1Y2Nlc3MpIHsKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3MpOwotICAgIH0s
IFt0aGlzLCBzdWNjZXNzQ2FsbGJhY2tdIHsKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNl
KTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3QtPnJlcXVlc3RJ
RCgpOwotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJRCwgcmVxdWVzdC5y
ZWxlYXNlKCkpOwotCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUluQmFja2luZ1N0b3Jl
LCByZXF1ZXN0SUQsIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJRCkpOwotfQot
Ci12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleChjb25zdCBJREJJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nl
c3NDYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYg
KCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKSB7Ci0gICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhmYWxz
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS0+b2Jq
ZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSUQpKTsKLSAgICBBU1NFUlQoIW1fbWV0YWRh
dGEtPm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJRCkuaW5kZXhlcy5jb250YWlucyhtZXRh
ZGF0YS5pZCkpOwotICAgIG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJ
RCkuaW5kZXhlcy5zZXQobWV0YWRhdGEuaWQsIG1ldGFkYXRhKTsKLSAgICBpbnQ2NF90IGFkZGVk
SW5kZXhJRCA9IG1ldGFkYXRhLmlkOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVz
dCA9IEFzeW5jUmVxdWVzdEltcGw8Ym9vbD46OmNyZWF0ZShbdGhpcywgb2JqZWN0U3RvcmVJRCwg
YWRkZWRJbmRleElELCBzdWNjZXNzQ2FsbGJhY2tdKGJvb2wgc3VjY2VzcykgewotICAgICAgICBp
ZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmVGaW5kID0gbV9tZXRh
ZGF0YS0+b2JqZWN0U3RvcmVzLmZpbmQob2JqZWN0U3RvcmVJRCk7Ci0gICAgICAgICAgICBpZiAo
b2JqZWN0U3RvcmVGaW5kICE9IG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5lbmQoKSkKLSAgICAg
ICAgICAgICAgICBvYmplY3RTdG9yZUZpbmQtPnZhbHVlLmluZGV4ZXMucmVtb3ZlKGFkZGVkSW5k
ZXhJRCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3MpOwotICAg
IH0sIFt0aGlzLCBvYmplY3RTdG9yZUlELCBhZGRlZEluZGV4SUQsIHN1Y2Nlc3NDYWxsYmFja10g
ewotICAgICAgICBhdXRvIG9iamVjdFN0b3JlRmluZCA9IG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jl
cy5maW5kKG9iamVjdFN0b3JlSUQpOwotICAgICAgICBpZiAob2JqZWN0U3RvcmVGaW5kICE9IG1f
bWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5lbmQoKSkKLSAgICAgICAgICAgIG9iamVjdFN0b3JlRmlu
ZC0+dmFsdWUuaW5kZXhlcy5yZW1vdmUoYWRkZWRJbmRleElEKTsKLSAgICAgICAgc3VjY2Vzc0Nh
bGxiYWNrKGZhbHNlKTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVl
c3QtPnJlcXVlc3RJRCgpOwotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJ
RCwgcmVxdWVzdC5yZWxlYXNlKCkpOwotCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhJbkJhY2tp
bmdTdG9yZSwgcmVxdWVzdElELCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSUQs
IG1ldGFkYXRhKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4KGNv
bnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RT
dG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nl
c3NDYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYg
KCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKSB7Ci0gICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhmYWxz
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS0+b2Jq
ZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSUQpKTsKLSAgICBBU1NFUlQobV9tZXRhZGF0
YS0+b2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlEKS5pbmRleGVzLmNvbnRhaW5zKGluZGV4
SUQpKTsKLQotICAgIElEQkluZGV4TWV0YWRhdGEgbWV0YWRhdGEgPSBtX21ldGFkYXRhLT5vYmpl
Y3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSUQpLmluZGV4ZXMudGFrZShpbmRleElEKTsKLQotICAg
IFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3luY1JlcXVlc3RJbXBsPGJvb2w+Ojpj
cmVhdGUoW3RoaXMsIG9iamVjdFN0b3JlSUQsIG1ldGFkYXRhLCBzdWNjZXNzQ2FsbGJhY2tdKGJv
b2wgc3VjY2VzcykgewotICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgIGF1dG8g
b2JqZWN0U3RvcmVGaW5kID0gbV9tZXRhZGF0YS0+b2JqZWN0U3RvcmVzLmZpbmQob2JqZWN0U3Rv
cmVJRCk7Ci0gICAgICAgICAgICBpZiAob2JqZWN0U3RvcmVGaW5kICE9IG1fbWV0YWRhdGEtPm9i
amVjdFN0b3Jlcy5lbmQoKSkKLSAgICAgICAgICAgICAgICBvYmplY3RTdG9yZUZpbmQtPnZhbHVl
LmluZGV4ZXMuc2V0KG1ldGFkYXRhLmlkLCBtZXRhZGF0YSk7Ci0gICAgICAgIH0KLSAgICAgICAg
c3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3MpOwotICAgIH0sIFt0aGlzLCBvYmplY3RTdG9yZUlELCBt
ZXRhZGF0YSwgc3VjY2Vzc0NhbGxiYWNrXSB7Ci0gICAgICAgIGF1dG8gb2JqZWN0U3RvcmVGaW5k
ID0gbV9tZXRhZGF0YS0+b2JqZWN0U3RvcmVzLmZpbmQob2JqZWN0U3RvcmVJRCk7Ci0gICAgICAg
IGlmIChvYmplY3RTdG9yZUZpbmQgIT0gbV9tZXRhZGF0YS0+b2JqZWN0U3RvcmVzLmVuZCgpKQot
ICAgICAgICAgICAgb2JqZWN0U3RvcmVGaW5kLT52YWx1ZS5pbmRleGVzLnNldChtZXRhZGF0YS5p
ZCwgbWV0YWRhdGEpOwotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZmFsc2UpOwotICAgIH0pOwot
Ci0gICAgdWludDY0X3QgcmVxdWVzdElEID0gcmVxdWVzdC0+cmVxdWVzdElEKCk7Ci0gICAgbV9w
ZW5kaW5nRGF0YWJhc2VUYXNrcy5hZGQocmVxdWVzdElELCByZXF1ZXN0LnJlbGVhc2UoKSk7Ci0K
LSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleEluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJRCwgaW5kZXhJRCkpOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwdXRSZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQktleURhdGEmIGtl
eURhdGEsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgdmFsdWUsIGludDY0X3QgcHV0TW9kZSwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElEcywgY29uc3QgVmVjdG9yPFZlY3RvcjxJREJL
ZXlEYXRhPj4mIGluZGV4S2V5cywgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBJREJLZXlEYXRh
JiwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYpPiBjYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKSB7Ci0g
ICAgICAgIGNhbGxiYWNrKElEQktleURhdGEoKSwgSU5WQUxJRF9TVEFURV9FUlIsICJVbmFibGUg
dG8gcHV0IHJlY29yZCBpbnRvIGRhdGFiYXNlIGJlY2F1c2UgaXQgaGFzIHNodXQgZG93biIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fbWV0YWRhdGEtPm9iamVjdFN0
b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlEKSk7Ci0KLSAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0
PiByZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDxJREJLZXlEYXRhLCB1aW50MzJfdCwgU3RyaW5n
Pjo6Y3JlYXRlKFt0aGlzLCBjYWxsYmFja10oY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgdWlu
dDMyX3QgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgewotICAgICAgICBj
YWxsYmFjayhrZXlEYXRhLCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7Ci0gICAgfSwgW3RoaXMs
IGNhbGxiYWNrXSB7Ci0gICAgICAgIGNhbGxiYWNrKElEQktleURhdGEoKSwgSU5WQUxJRF9TVEFU
RV9FUlIsICJVbmFibGUgdG8gcHV0IHJlY29yZCBpbnRvIGRhdGFiYXNlIik7Ci0gICAgfSk7Ci0K
LSAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSByZXF1ZXN0LT5yZXF1ZXN0SUQoKTsKLSAgICBtX3Bl
bmRpbmdEYXRhYmFzZVRhc2tzLmFkZChyZXF1ZXN0SUQsIHJlcXVlc3QucmVsZWFzZSgpKTsKLQot
ICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OnB1dFJlY29yZEluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgbV9tZXRhZGF0YS0+b2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlE
KSwga2V5RGF0YSwgdmFsdWUudmVjdG9yKCksIHB1dE1vZGUsIGluZGV4SURzLCBpbmRleEtleXMp
KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQklkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2
NF90IGluZGV4SUQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBJbmRleGVk
REI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBJREJH
ZXRSZXN1bHQmLCB1aW50MzJfdCwgY29uc3QgU3RyaW5nJik+IGNhbGxiYWNrKQotewotICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIW1fYWNjZXB0aW5nTmV3UmVxdWVz
dHMpIHsKLSAgICAgICAgY2FsbGJhY2soSURCR2V0UmVzdWx0KCksIElOVkFMSURfU1RBVEVfRVJS
LCAiVW5hYmxlIHRvIGdldCByZWNvcmQgZnJvbSBkYXRhYmFzZSBiZWNhdXNlIGl0IGhhcyBzaHV0
IGRvd24iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChtX21ldGFkYXRh
LT5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJRCkpOwotCi0gICAgUmVmUHRyPEFz
eW5jUmVxdWVzdD4gcmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8SURCR2V0UmVzdWx0LCB1aW50
MzJfdCwgU3RyaW5nPjo6Y3JlYXRlKFt0aGlzLCBjYWxsYmFja10oY29uc3QgSURCR2V0UmVzdWx0
JiByZXN1bHQsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
IHsKLSAgICAgICAgY2FsbGJhY2socmVzdWx0LCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7Ci0g
ICAgfSwgW3RoaXMsIGNhbGxiYWNrXSB7Ci0gICAgICAgIGNhbGxiYWNrKElEQkdldFJlc3VsdCgp
LCBJTlZBTElEX1NUQVRFX0VSUiwgIlVuYWJsZSB0byBnZXQgcmVjb3JkIGZyb20gZGF0YWJhc2Ui
KTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3QtPnJlcXVlc3RJ
RCgpOwotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJRCwgcmVxdWVzdC5y
ZWxlYXNlKCkpOwotCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkRnJvbUJhY2tpbmdTdG9yZSwgcmVx
dWVzdElELCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5n
ZXQob2JqZWN0U3RvcmVJRCksIGluZGV4SUQsIGtleVJhbmdlRGF0YSwgY3Vyc29yVHlwZSkpOwot
fQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKGNvbnN0IElEQklkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90
IGluZGV4SUQsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGN1cnNvckRpcmVjdGlvbiwgSW5k
ZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5
cGUgdGFza1R5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKGludDY0X3QsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJLZXlEYXRh
JiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCB1aW50MzJfdCwgY29uc3QgU3RyaW5nJik+IGNh
bGxiYWNrKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIW1f
YWNjZXB0aW5nTmV3UmVxdWVzdHMpIHsKLSAgICAgICAgY2FsbGJhY2soMCwgbnVsbHB0ciwgbnVs
bHB0ciwgbnVsbHB0ciwgSU5WQUxJRF9TVEFURV9FUlIsICJVbmFibGUgdG8gb3BlbiBjdXJzb3Ig
aW4gZGF0YWJhc2UgYmVjYXVzZSBpdCBoYXMgc2h1dCBkb3duIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS0+b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9i
amVjdFN0b3JlSUQpKTsKLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3lu
Y1JlcXVlc3RJbXBsPGludDY0X3QsIElEQktleURhdGEsIElEQktleURhdGEsIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiwgdWludDMyX3QsIFN0cmluZz46OmNyZWF0ZShbdGhpcywgY2FsbGJhY2td
KGludDY0X3QgY3Vyc29ySUQsIGNvbnN0IElEQktleURhdGEmIGtleSwgY29uc3QgSURCS2V5RGF0
YSYgcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCB1aW50MzJfdCBl
cnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgIGNhbGxiYWNr
KGN1cnNvcklELCBrZXksIHByaW1hcnlLZXksIHZhbHVlLCBlcnJvckNvZGUsIGVycm9yTWVzc2Fn
ZSk7Ci0gICAgfSwgW3RoaXMsIGNhbGxiYWNrXSB7Ci0gICAgICAgIGNhbGxiYWNrKDAsIG51bGxw
dHIsIG51bGxwdHIsIG51bGxwdHIsIElOVkFMSURfU1RBVEVfRVJSLCAiVW5hYmxlIHRvIGdldCBy
ZWNvcmQgZnJvbSBkYXRhYmFzZSIpOwotICAgIH0pOwotCi0gICAgdWludDY0X3QgcmVxdWVzdElE
ID0gcmVxdWVzdC0+cmVxdWVzdElEKCk7Ci0gICAgbV9wZW5kaW5nRGF0YWJhc2VUYXNrcy5hZGQo
cmVxdWVzdElELCByZXF1ZXN0LnJlbGVhc2UoKSk7Ci0KLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29y
SW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RT
dG9yZUlELCBpbmRleElELCBjdXJzb3JEaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBr
ZXlSYW5nZURhdGEpKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3Vyc29yQWR2YW5j
ZShjb25zdCBJREJJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCB1aW50NjRfdCBjb3VudCwg
c3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCS2V5RGF0YSYs
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYpPiBjYWxs
YmFjaykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFtX2Fj
Y2VwdGluZ05ld1JlcXVlc3RzKSB7Ci0gICAgICAgIGNhbGxiYWNrKG51bGxwdHIsIG51bGxwdHIs
IG51bGxwdHIsIElOVkFMSURfU1RBVEVfRVJSLCAiVW5hYmxlIHRvIGFkdmFuY2UgY3Vyc29yIGlu
IGRhdGFiYXNlIGJlY2F1c2UgaXQgaGFzIHNodXQgZG93biIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9IEFzeW5jUmVxdWVzdElt
cGw8SURCS2V5RGF0YSwgSURCS2V5RGF0YSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCB1aW50
MzJfdCwgU3RyaW5nPjo6Y3JlYXRlKFt0aGlzLCBjYWxsYmFja10oY29uc3QgSURCS2V5RGF0YSYg
a2V5LCBjb25zdCBJREJLZXlEYXRhJiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gdmFsdWUsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
IHsKLSAgICAgICAgY2FsbGJhY2soa2V5LCBwcmltYXJ5S2V5LCB2YWx1ZSwgZXJyb3JDb2RlLCBl
cnJvck1lc3NhZ2UpOwotICAgIH0sIFt0aGlzLCBjYWxsYmFja10gewotICAgICAgICBjYWxsYmFj
ayhudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBJTlZBTElEX1NUQVRFX0VSUiwgIlVuYWJsZSB0
byBhZHZhbmNlIGN1cnNvciBpbiBkYXRhYmFzZSIpOwotICAgIH0pOwotCi0gICAgdWludDY0X3Qg
cmVxdWVzdElEID0gcmVxdWVzdC0+cmVxdWVzdElEKCk7Ci0gICAgbV9wZW5kaW5nRGF0YWJhc2VU
YXNrcy5hZGQocmVxdWVzdElELCByZXF1ZXN0LnJlbGVhc2UoKSk7Ci0KLSAgICBwb3N0RGF0YWJh
c2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjph
ZHZhbmNlQ3Vyc29ySW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgY3Vyc29ySWRlbnRpZmllciwg
Y291bnQpKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3Vyc29ySXRlcmF0ZShjb25z
dCBJREJJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXks
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQktleURhdGEm
LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmKT4gY2Fs
bGJhY2spCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICghbV9h
Y2NlcHRpbmdOZXdSZXF1ZXN0cykgewotICAgICAgICBjYWxsYmFjayhudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCBJTlZBTElEX1NUQVRFX0VSUiwgIlVuYWJsZSB0byBpdGVyYXRlIGN1cnNvciBp
biBkYXRhYmFzZSBiZWNhdXNlIGl0IGhhcyBzaHV0IGRvd24iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3luY1JlcXVlc3RJ
bXBsPElEQktleURhdGEsIElEQktleURhdGEsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgdWlu
dDMyX3QsIFN0cmluZz46OmNyZWF0ZShbdGhpcywgY2FsbGJhY2tdKGNvbnN0IElEQktleURhdGEm
IGtleSwgY29uc3QgSURCS2V5RGF0YSYgcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IHZhbHVlLCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
KSB7Ci0gICAgICAgIGNhbGxiYWNrKGtleSwgcHJpbWFyeUtleSwgdmFsdWUsIGVycm9yQ29kZSwg
ZXJyb3JNZXNzYWdlKTsKLSAgICB9LCBbdGhpcywgY2FsbGJhY2tdIHsKLSAgICAgICAgY2FsbGJh
Y2sobnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgSU5WQUxJRF9TVEFURV9FUlIsICJVbmFibGUg
dG8gaXRlcmF0ZSBjdXJzb3IgaW4gZGF0YWJhc2UiKTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90
IHJlcXVlc3RJRCA9IHJlcXVlc3QtPnJlcXVlc3RJRCgpOwotICAgIG1fcGVuZGluZ0RhdGFiYXNl
VGFza3MuYWRkKHJlcXVlc3RJRCwgcmVxdWVzdC5yZWxlYXNlKCkpOwotCi0gICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
aXRlcmF0ZUN1cnNvckluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIGN1cnNvcklkZW50aWZpZXIs
IGtleSkpOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb3VudChjb25zdCBJREJJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50
NjRfdCBpbmRleElELCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgc3RkOjpm
dW5jdGlvbjx2b2lkIChpbnQ2NF90LCB1aW50MzJfdCwgY29uc3QgU3RyaW5nJik+IGNhbGxiYWNr
KQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIW1fYWNjZXB0
aW5nTmV3UmVxdWVzdHMpIHsKLSAgICAgICAgY2FsbGJhY2soMCwgSU5WQUxJRF9TVEFURV9FUlIs
ICJVbmFibGUgdG8gZ2V0IGNvdW50IGZyb20gZGF0YWJhc2UgYmVjYXVzZSBpdCBoYXMgc2h1dCBk
b3duIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0
PiByZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDxpbnQ2NF90LCB1aW50MzJfdCwgU3RyaW5nPjo6
Y3JlYXRlKFt0aGlzLCBjYWxsYmFja10oaW50NjRfdCBjb3VudCwgdWludDMyX3QgZXJyb3JDb2Rl
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgewotICAgICAgICBjYWxsYmFjayhjb3VudCwg
ZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpOwotICAgIH0sIFt0aGlzLCBjYWxsYmFja10gewotICAg
ICAgICBjYWxsYmFjaygwLCBJTlZBTElEX1NUQVRFX0VSUiwgIlVuYWJsZSB0byBnZXQgY291bnQg
ZnJvbSBkYXRhYmFzZSIpOwotICAgIH0pOwotCi0gICAgdWludDY0X3QgcmVxdWVzdElEID0gcmVx
dWVzdC0+cmVxdWVzdElEKCk7Ci0gICAgbV9wZW5kaW5nRGF0YWJhc2VUYXNrcy5hZGQocmVxdWVz
dElELCByZXF1ZXN0LnJlbGVhc2UoKSk7Ci0KLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpjb3VudEluQmFja2luZ1N0
b3JlLCByZXF1ZXN0SUQsIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJRCwgaW5k
ZXhJRCwga2V5UmFuZ2VEYXRhKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0
ZVJhbmdlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRf
dCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgc3Rk
OjpmdW5jdGlvbjx2b2lkICh1aW50MzJfdCwgY29uc3QgU3RyaW5nJik+IGNhbGxiYWNrKQotewot
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIW1fYWNjZXB0aW5nTmV3
UmVxdWVzdHMpIHsKLSAgICAgICAgY2FsbGJhY2soSU5WQUxJRF9TVEFURV9FUlIsICJVbmFibGUg
dG8gZGVsZXRlUmFuZ2UgZnJvbSBkYXRhYmFzZSBiZWNhdXNlIGl0IGhhcyBzaHV0IGRvd24iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVl
c3QgPSBBc3luY1JlcXVlc3RJbXBsPHVpbnQzMl90LCBTdHJpbmc+OjpjcmVhdGUoW2NhbGxiYWNr
XSh1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7Ci0gICAg
ICAgIGNhbGxiYWNrKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsKLSAgICB9LCBbY2FsbGJhY2td
IHsKLSAgICAgICAgY2FsbGJhY2soSU5WQUxJRF9TVEFURV9FUlIsICJVbmFibGUgdG8gZGVsZXRl
UmFuZ2UgZnJvbSBkYXRhYmFzZSIpOwotICAgIH0pOwotCi0gICAgdWludDY0X3QgcmVxdWVzdElE
ID0gcmVxdWVzdC0+cmVxdWVzdElEKCk7Ci0gICAgbV9wZW5kaW5nRGF0YWJhc2VUYXNrcy5hZGQo
cmVxdWVzdElELCByZXF1ZXN0LnJlbGVhc2UoKSk7Ci0KLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSYW5n
ZUluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0
U3RvcmVJRCwga2V5UmFuZ2VEYXRhKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9w
ZW5CYWNraW5nU3RvcmVUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJRHMsIEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLQotICAgIGJvb2wgc3VjY2VzcyA9
IG1fYmFja2luZ1N0b3JlLT5lc3RhYmxpc2hUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIG9iamVjdFN0b3JlSURzLCBtb2RlKTsKLQotICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRXN0YWJsaXNo
VHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3VjY2VzcykpOwotICAgIHBvc3RN
YWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkQ29tcGxldGVUcmFuc2FjdGlvbk9wZXJhdGlvbiwgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBzdWNjZXNzKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmJlZ2luQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX2Jh
Y2tpbmdTdG9yZSk7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+YmVnaW5U
cmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIpOwotCi0gICAgcG9zdE1haW5UaHJlYWRU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRD
b21wbGV0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uLCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHN1Y2Nl
c3MpKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0QmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQotewot
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9y
ZSk7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+Y29tbWl0VHJhbnNhY3Rp
b24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLQotICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ29tcGxldGVU
cmFuc2FjdGlvbk9wZXJhdGlvbiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBzdWNjZXNzKSk7Ci19
Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlc2V0QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
Y29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KLSAg
ICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+cmVzZXRUcmFuc2FjdGlvbih0cmFuc2Fj
dGlvbklkZW50aWZpZXIpOwotCi0gICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRSZXNldFRyYW5zYWN0aW9uLCB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHN1Y2Nlc3MpKTsKLSAgICBwb3N0TWFpblRocmVhZFRhc2so
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZENvbXBs
ZXRlVHJhbnNhY3Rpb25PcGVyYXRpb24sIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3VjY2Vzcykp
OwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyb2xsYmFja0JhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikKLXsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUp
OwotCi0gICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPnJvbGxiYWNrVHJhbnNhY3Rp
b24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLQotICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ29tcGxldGVU
cmFuc2FjdGlvbk9wZXJhdGlvbiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBzdWNjZXNzKSk7Ci19
Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNoYW5nZURhdGFiYXNlVmVyc2lvbkluQmFja2lu
Z1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBuZXdWZXJzaW9uKQotewotICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KLSAgICBib29sIHN1
Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+Y2hhbmdlRGF0YWJhc2VWZXJzaW9uKHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgbmV3VmVyc2lvbik7Ci0KLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZENoYW5nZURhdGFi
YXNlVmVyc2lvbiwgcmVxdWVzdElELCBzdWNjZXNzKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlSW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElE
LCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRhKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KLSAgICBib29sIHN1Y2Nlc3Mg
PSBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBtZXRhZGF0YSk7Ci0KLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZENyZWF0ZU9iamVjdFN0b3JlLCByZXF1
ZXN0SUQsIHN1Y2Nlc3MpKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2Jq
ZWN0U3RvcmVJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElEQklkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQotewot
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9y
ZSk7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3Rv
cmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlEKTsKLQotICAgIHBvc3RNYWlu
VGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkRGVsZXRlT2JqZWN0U3RvcmUsIHJlcXVlc3RJRCwgc3VjY2VzcykpOwotfQotCi12b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlSW5CYWNraW5nU3RvcmUodWludDY0
X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGludDY0X3Qgb2JqZWN0U3RvcmVJRCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotCi0gICAgYm9vbCBzdWNjZXNzID0gbV9i
YWNraW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmpl
Y3RTdG9yZUlEKTsKLQotICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ2xlYXJPYmplY3RTdG9yZSwgcmVxdWVz
dElELCBzdWNjZXNzKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4
SW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgbWV0YWRhdGEpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLQotICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFj
a2luZ1N0b3JlLT5jcmVhdGVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SUQsIG1ldGFkYXRhKTsKLQotICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ3JlYXRlSW5kZXgsIHJlcXVlc3RJ
RCwgc3VjY2VzcykpOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleElu
QmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJ
RCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQobV9iYWNr
aW5nU3RvcmUpOwotCi0gICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZUlu
ZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJRCwgaW5kZXhJRCk7Ci0KLSAg
ICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZERlbGV0ZUluZGV4LCByZXF1ZXN0SUQsIHN1Y2Nlc3MpKTsKLX0KLQot
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0UmVjb3JkSW5CYWNraW5nU3RvcmUodWludDY0X3Qg
cmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSwgY29uc3QgSURCS2V5RGF0YSYg
aW5wdXRLZXlEYXRhLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlLCBpbnQ2NF90IHB1dE1v
ZGUsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJRHMsIGNvbnN0IFZlY3RvcjxWZWN0b3I8
SURCS2V5RGF0YT4+JiBpbmRleEtleXMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLQotICAgIGJvb2wga2V5V2FzR2VuZXJh
dGVkID0gZmFsc2U7Ci0gICAgSURCS2V5RGF0YSBrZXk7Ci0gICAgaW50NjRfdCBrZXlOdW1iZXIg
PSAwOwotCi0gICAgaWYgKHB1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5kOjpDdXJzb3JVcGRh
dGUgJiYgb2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50ICYmIGlucHV0S2V5RGF0YS5p
c051bGwoKSkgewotICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5nZW5lcmF0ZUtleU51bWJl
cih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwga2V5TnVtYmVyKSkgewotICAg
ICAgICAgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQdXRSZWNvcmRJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElE
LCBJREJLZXlEYXRhKCksIElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJ
TGl0ZXJhbCgiSW50ZXJuYWwgYmFja2luZyBzdG9yZSBlcnJvciBjaGVja2luZyBmb3Iga2V5IGV4
aXN0ZW5jZSIpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAga2V5
LnNldE51bWJlclZhbHVlKGtleU51bWJlcik7Ci0gICAgICAgIGtleVdhc0dlbmVyYXRlZCA9IHRy
dWU7Ci0gICAgfSBlbHNlCi0gICAgICAgIGtleSA9IGlucHV0S2V5RGF0YTsKLQotICAgIGlmIChw
dXRNb2RlID09IElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT25seSkgewotICAgICAgICBib29sIGtl
eUV4aXN0czsKLSAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RT
dG9yZSh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwga2V5LCBrZXlFeGlzdHMp
KSB7Ci0gICAgICAgICAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFB1dFJlY29yZEluQmFja2luZ1N0b3JlLCBy
ZXF1ZXN0SUQsIElEQktleURhdGEoKSwgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJv
ciwgQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBiYWNraW5nIHN0b3JlIGVycm9yIGNoZWNraW5nIGZv
ciBrZXkgZXhpc3RlbmNlIikpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoa2V5RXhpc3RzKSB7Ci0gICAgICAgICAgICBwb3N0TWFpblRocmVhZFRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFB1dFJlY29y
ZEluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQktleURhdGEoKSwgSURCRGF0YWJhc2VFeGNl
cHRpb246OkNvbnN0cmFpbnRFcnJvciwgQVNDSUlMaXRlcmFsKCJLZXkgYWxyZWFkeSBleGlzdHMg
aW4gdGhlIG9iamVjdCBzdG9yZSIpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBUaGUgc3BlYyBzYXlzIHRoYXQgZXZlbiBpZiB3ZSdyZSBhYm91dCB0
byBvdmVyd3JpdGUgdGhlIHJlY29yZCwgcGVyZm9ybSB0aGUgc3RlcHMgdG8gZGVsZXRlIGl0IGZp
cnN0LgotICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgZm9ybWFsbHkgZGVsZXRpbmcg
aXQgZnJvbSBmcm9tIHRoZSBvYmplY3Qgc3RvcmUgYWxzbyByZW1vdmVzIGl0IGZyb20gdGhlIGFw
cHJvcHJpYXRlIGluZGV4ZXMuCi0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmVjb3Jk
KHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkLCBrZXkpKSB7Ci0gICAgICAgIHBv
c3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUHV0UmVjb3JkSW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgSURCS2V5RGF0
YSgpLCBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlJl
cGxhY2luZyBhbiBleGlzdGluZyBrZXkgaW4gYmFja2luZyBzdG9yZSwgdW5hYmxlIHRvIGRlbGV0
ZSBwcmV2aW91cyByZWNvcmQuIikpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICghbV9iYWNraW5nU3RvcmUtPnB1dFJlY29yZCh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRh
ZGF0YS5pZCwga2V5LCB2YWx1ZS5kYXRhKCksIHZhbHVlLnNpemUoKSkpIHsKLSAgICAgICAgcG9z
dE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQdXRSZWNvcmRJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCBJREJLZXlEYXRh
KCksIElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiSW50
ZXJuYWwgYmFja2luZyBzdG9yZSBlcnJvciBwdXR0aW5nIGEgcmVjb3JkIikpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChpbmRleElEcy5zaXplKCkgPT0gaW5kZXhLZXlz
LnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleElEcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGluZGV4S2V5c1tpXS5zaXplKCk7
ICsraikgewotICAgICAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+cHV0SW5kZXhSZWNvcmQo
dHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTWV0YWRhdGEuaWQsIGluZGV4SURzW2ldLCBrZXksIGlu
ZGV4S2V5c1tpXVtqXSkpIHsKLSAgICAgICAgICAgICAgICBwb3N0TWFpblRocmVhZFRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFB1dFJlY29y
ZEluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQktleURhdGEoKSwgSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBiYWNraW5nIHN0b3Jl
IGVycm9yIHdyaXRpbmcgaW5kZXgga2V5IikpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2JhY2tpbmdTdG9yZS0+bm90
aWZ5Q3Vyc29yc09mQ2hhbmdlcyh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCk7
Ci0KLSAgICBpZiAocHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmQ6OkN1cnNvclVwZGF0ZSAm
JiBvYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQgJiYga2V5LnR5cGUoKSA9PSBLZXlU
eXBlOjpOdW1iZXIpIHsKLSAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+dXBkYXRlS2V5R2Vu
ZXJhdG9yTnVtYmVyKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkLCBrZXlOdW1i
ZXIsIGtleVdhc0dlbmVyYXRlZCkpIHsKLSAgICAgICAgICAgIHBvc3RNYWluVGhyZWFkVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUHV0UmVj
b3JkSW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgSURCS2V5RGF0YSgpLCBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkludGVybmFsIGJhY2tpbmcgc3Rv
cmUgZXJyb3IgdXBkYXRpbmcga2V5IGdlbmVyYXRvciIpKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFB1dFJlY29yZEluQmFja2lu
Z1N0b3JlLCByZXF1ZXN0SUQsIGtleSwgMCwgU3RyaW5nKFN0cmluZ0ltcGw6OmVtcHR5KCkpKSk7
Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFB1dFJlY29yZEluQmFja2luZ1N0b3Jl
KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgdWludDMyX3Qg
ZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBtX3BlbmRpbmdE
YXRhYmFzZVRhc2tzLnRha2UocmVxdWVzdElEKS5nZXQoKS5jb21wbGV0ZVJlcXVlc3Qoa2V5RGF0
YSwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpnZXRSZWNvcmRGcm9tQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURC
SWRlbnRpZmllciYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEsIGludDY0X3QgaW5kZXhJRCwgY29uc3QgSURCS2V5UmFuZ2VEYXRh
JiBrZXlSYW5nZURhdGEsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7
Ci0KLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0ga2V5UmFuZ2VEYXRhLm1heWJl
Q3JlYXRlSURCS2V5UmFuZ2UoKTsKLSAgICBBU1NFUlQoa2V5UmFuZ2UpOwotICAgIGlmICgha2V5
UmFuZ2UpIHsKLSAgICAgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRHZXRSZWNvcmRGcm9tQmFja2luZ1N0b3Jl
LCByZXF1ZXN0SUQsIElEQkdldFJlc3VsdCgpLCBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgSURCS2V5UmFuZ2UgcmVxdWVzdGVkIGZyb20g
YmFja2luZyBzdG9yZSIpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaW5k
ZXhJRCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAgLy8gSURCT2Jq
ZWN0U3RvcmUgZ2V0IHJlY29yZAotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiByZXN1bHQ7
Ci0KLSAgICAgICAgaWYgKGtleVJhbmdlLT5pc09ubHlLZXkoKSkgewotICAgICAgICAgICAgaWYg
KCFtX2JhY2tpbmdTdG9yZS0+Z2V0S2V5UmVjb3JkRnJvbU9iamVjdFN0b3JlKHRyYW5zYWN0aW9u
LCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkLCAqa2V5UmFuZ2UtPmxvd2VyKCksIHJlc3VsdCkpCi0g
ICAgICAgICAgICAgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRHZXRSZWNvcmRGcm9tQmFja2luZ1N0b3JlLCBy
ZXF1ZXN0SUQsIElEQkdldFJlc3VsdCgpLCBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVy
cm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBnZXQga2V5IHJlY29yZCBmcm9tIG9iamVjdCBz
dG9yZSBpbiBiYWNraW5nIHN0b3JlIikpKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIElEQkdldFJlc3VsdCBnZXRSZXN1bHQgPSByZXN1bHQgPyBJREJHZXRSZXN1bHQocmVz
dWx0LnJlbGVhc2UoKSwga2V5UmFuZ2UtPmxvd2VyKCksIG9iamVjdFN0b3JlTWV0YWRhdGEua2V5
UGF0aCkgOiBJREJHZXRSZXN1bHQoKTsKLSAgICAgICAgICAgICAgICBwb3N0TWFpblRocmVhZFRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZEdl
dFJlY29yZEZyb21CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgZ2V0UmVzdWx0LCAwLCBTdHJpbmco
U3RyaW5nSW1wbDo6ZW1wdHkoKSkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPElEQktleT4gcmVzdWx0S2V5OwotCi0g
ICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmdldEtleVJhbmdlUmVjb3JkRnJvbU9iamVjdFN0
b3JlKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkLCAqa2V5UmFuZ2UsIHJlc3Vs
dCwgcmVzdWx0S2V5KSkKLSAgICAgICAgICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkR2V0UmVjb3JkRnJvbUJh
Y2tpbmdTdG9yZSwgcmVxdWVzdElELCBJREJHZXRSZXN1bHQoKSwgSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZ2V0IGtleSByYW5nZSBy
ZWNvcmQgZnJvbSBvYmplY3Qgc3RvcmUgaW4gYmFja2luZyBzdG9yZSIpKSk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgSURCR2V0UmVzdWx0IGdldFJlc3VsdCA9IHJlc3VsdCA/IElEQkdl
dFJlc3VsdChyZXN1bHQucmVsZWFzZSgpLCByZXN1bHRLZXkucmVsZWFzZSgpLCBvYmplY3RTdG9y
ZU1ldGFkYXRhLmtleVBhdGgpIDogSURCR2V0UmVzdWx0KCk7Ci0gICAgICAgICAgICBwb3N0TWFp
blRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZEdldFJlY29yZEZyb21CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgZ2V0UmVzdWx0LCAw
LCBTdHJpbmcoU3RyaW5nSW1wbDo6ZW1wdHkoKSkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBJREJJbmRleCBnZXQgcmVjb3JkCi0KLSAgICBJREJHZXRS
ZXN1bHQgcmVzdWx0OwotICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmdldEluZGV4UmVjb3JkKHRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkLCBpbmRleElELCBrZXlSYW5nZURhdGEs
IGN1cnNvclR5cGUsIHJlc3VsdCkpIHsKLSAgICAgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRHZXRSZWNvcmRG
cm9tQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQkdldFJlc3VsdCgpLCBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBnZXQgaW5kZXgg
cmVjb3JkIGZyb20gYmFja2luZyBzdG9yZSIpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBXZSBtdXN0IHJldHVybiBhIGtleSBwYXRoIHRvIGtub3cgaG93IHRvIGluamVjdCB0
aGUgcmVzdWx0IGtleSBpbnRvIHRoZSByZXN1bHQgdmFsdWUgb2JqZWN0LgotICAgIHJlc3VsdC5z
ZXRLZXlQYXRoKG9iamVjdFN0b3JlTWV0YWRhdGEua2V5UGF0aCk7Ci0KLSAgICBwb3N0TWFpblRo
cmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZEdldFJlY29yZEZyb21CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgcmVzdWx0LCAwLCBTdHJp
bmcoU3RyaW5nSW1wbDo6ZW1wdHkoKSkpKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkR2V0UmVjb3JkRnJvbUJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElE
QkdldFJlc3VsdCYgcmVzdWx0LCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKQotewotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MudGFrZShyZXF1ZXN0SUQp
LmdldCgpLmNvbXBsZXRlUmVxdWVzdChyZXN1bHQsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsK
LX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvckluQmFja2luZ1N0b3JlKHVp
bnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgSW5kZXhlZERCOjpD
dXJzb3JEaXJlY3Rpb24gY3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vy
c29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiBrZXlSYW5nZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotCi0gICAgaW50NjRfdCBjdXJzb3JJRCA9
IDA7Ci0gICAgSURCS2V5RGF0YSBrZXk7Ci0gICAgSURCS2V5RGF0YSBwcmltYXJ5S2V5OwotICAg
IFZlY3Rvcjx1aW50OF90PiB2YWx1ZUJ1ZmZlcjsKLSAgICBpbnQzMl90IGVycm9yQ29kZSA9IDA7
Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdT
dG9yZS0+b3BlbkN1cnNvcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSUQsIGlu
ZGV4SUQsIGN1cnNvckRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIGtleVJhbmdlLCBj
dXJzb3JJRCwga2V5LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlcik7Ci0KLSAgICBpZiAoIXN1Y2Nl
c3MpIHsKLSAgICAgICAgZXJyb3JDb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvcjsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJVbmtub3duIGVycm9y
IG9wZW5pbmcgY3Vyc29yIGluIGJhY2tpbmcgc3RvcmUiKTsKLSAgICB9Ci0KLSAgICBwb3N0TWFp
blRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZE9wZW5DdXJzb3JJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCBjdXJzb3JJRCwga2V5
LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlciwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpKTsKLX0K
LQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkN1cnNvckluQmFja2luZ1N0b3JlKHVp
bnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCBjdXJzb3JJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5
LCBjb25zdCBJREJLZXlEYXRhJiBwcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZh
bHVlQnVmZmVyLCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
KQotewotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MudGFrZShyZXF1ZXN0SUQpLmdldCgpLmNv
bXBsZXRlUmVxdWVzdChjdXJzb3JJRCwga2V5LCBwcmltYXJ5S2V5LCBTaGFyZWRCdWZmZXI6OmNy
ZWF0ZSh2YWx1ZUJ1ZmZlci5kYXRhKCksIHZhbHVlQnVmZmVyLnNpemUoKSksIGVycm9yQ29kZSwg
ZXJyb3JNZXNzYWdlKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWR2YW5jZUN1cnNv
ckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYg
Y3Vyc29ySWRlbnRpZmllciwgdWludDY0X3QgY291bnQpCi17Ci0gICAgSURCS2V5RGF0YSBrZXk7
Ci0gICAgSURCS2V5RGF0YSBwcmltYXJ5S2V5OwotICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1ZUJ1
ZmZlcjsKLSAgICBpbnQzMl90IGVycm9yQ29kZSA9IDA7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2Fn
ZTsKLSAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+YWR2YW5jZUN1cnNvcihjdXJz
b3JJZGVudGlmaWVyLCBjb3VudCwga2V5LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlcik7Ci0KLSAg
ICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgZXJyb3JDb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvcjsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJV
bmtub3duIGVycm9yIGFkdmFuY2luZyBjdXJzb3IgaW4gYmFja2luZyBzdG9yZSIpOwotICAgIH0K
LQotICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkQWR2YW5jZUN1cnNvckluQmFja2luZ1N0b3JlLCByZXF1ZXN0
SUQsIGtleSwgcHJpbWFyeUtleSwgdmFsdWVCdWZmZXIsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdl
KSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZEFkdmFuY2VDdXJzb3JJbkJhY2tp
bmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElEQktleURhdGEmIGtleSwgY29uc3Qg
SURCS2V5RGF0YSYgcHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZUJ1ZmZl
ciwgdWludDMyX3QgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAg
ICBtX3BlbmRpbmdEYXRhYmFzZVRhc2tzLnRha2UocmVxdWVzdElEKS5nZXQoKS5jb21wbGV0ZVJl
cXVlc3Qoa2V5LCBwcmltYXJ5S2V5LCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh2YWx1ZUJ1ZmZlci5k
YXRhKCksIHZhbHVlQnVmZmVyLnNpemUoKSksIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsKLX0K
LQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckluQmFja2luZ1N0b3JlKHVp
bnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwg
Y29uc3QgSURCS2V5RGF0YSYgaXRlcmF0ZUtleSkKLXsKLSAgICBJREJLZXlEYXRhIGtleTsKLSAg
ICBJREJLZXlEYXRhIHByaW1hcnlLZXk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVy
OwotICAgIGludDMyX3QgZXJyb3JDb2RlID0gMDsKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwot
ICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5pdGVyYXRlQ3Vyc29yKGN1cnNvcklk
ZW50aWZpZXIsIGl0ZXJhdGVLZXksIGtleSwgcHJpbWFyeUtleSwgdmFsdWVCdWZmZXIpOwotCi0g
ICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIGVycm9yQ29kZSA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3I7Ci0gICAgICAgIGVycm9yTWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgi
VW5rbm93biBlcnJvciBpdGVyYXRpbmcgY3Vyc29yIGluIGJhY2tpbmcgc3RvcmUiKTsKLSAgICB9
Ci0KLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OmRpZEl0ZXJhdGVDdXJzb3JJbkJhY2tpbmdTdG9yZSwgcmVxdWVz
dElELCBrZXksIHByaW1hcnlLZXksIHZhbHVlQnVmZmVyLCBlcnJvckNvZGUsIGVycm9yTWVzc2Fn
ZSkpOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRJdGVyYXRlQ3Vyc29ySW5CYWNr
aW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJLZXlEYXRhJiBrZXksIGNvbnN0
IElEQktleURhdGEmIHByaW1hcnlLZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWVCdWZm
ZXIsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0g
ICAgbV9wZW5kaW5nRGF0YWJhc2VUYXNrcy50YWtlKHJlcXVlc3RJRCkuZ2V0KCkuY29tcGxldGVS
ZXF1ZXN0KGtleSwgcHJpbWFyeUtleSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUodmFsdWVCdWZmZXIu
ZGF0YSgpLCB2YWx1ZUJ1ZmZlci5zaXplKCkpLCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7Ci19
Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvdW50SW5CYWNraW5nU3RvcmUodWludDY0X3Qg
cmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBJREJLZXlSYW5nZURh
dGEmIGtleVJhbmdlRGF0YSkKLXsKLSAgICBpbnQ2NF90IGNvdW50OwotCi0gICAgaWYgKCFtX2Jh
Y2tpbmdTdG9yZS0+Y291bnQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlELCBp
bmRleElELCBrZXlSYW5nZURhdGEsIGNvdW50KSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBnZXQgY291bnQgZnJvbSBiYWNraW5nIHN0b3JlLiIpOwotICAgICAgICBwb3N0TWFpblRo
cmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZENvdW50SW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgMCwgSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZ2V0IGNvdW50IGZyb20g
YmFja2luZyBzdG9yZSIpKSk7Ci0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBvc3RN
YWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkQ291bnRJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCBjb3VudCwgMCwgU3RyaW5n
KFN0cmluZ0ltcGw6OmVtcHR5KCkpKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZENvdW50SW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IGNvdW50LCB1
aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotICAgIG1f
cGVuZGluZ0RhdGFiYXNlVGFza3MudGFrZShyZXF1ZXN0SUQpLmdldCgpLmNvbXBsZXRlUmVxdWVz
dChjb3VudCwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpOwotfQotCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkZWxldGVSYW5nZUluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29u
c3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0
b3JlSUQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhKQotewotICAgIGlmICgh
bV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJhbmdlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0
U3RvcmVJRCwga2V5UmFuZ2VEYXRhKSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBk
ZWxldGUgcmFuZ2UgZnJvbSBiYWNraW5nIHN0b3JlLiIpOwotICAgICAgICBwb3N0TWFpblRocmVh
ZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZERlbGV0ZVJhbmdlSW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZ2V0IGNvdW50IGZyb20g
YmFja2luZyBzdG9yZSIpKSk7Ci0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fYmFj
a2luZ1N0b3JlLT5ub3RpZnlDdXJzb3JzT2ZDaGFuZ2VzKHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
b2JqZWN0U3RvcmVJRCk7Ci0KLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZVJhbmdlSW5CYWNraW5n
U3RvcmUsIHJlcXVlc3RJRCwgMCwgU3RyaW5nKFN0cmluZ0ltcGw6OmVtcHR5KCkpKSk7Ci19Ci0K
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZVJhbmdlSW5CYWNraW5nU3RvcmUodWlu
dDY0X3QgcmVxdWVzdElELCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlKQotewotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MudGFrZShyZXF1ZXN0SUQpLmdl
dCgpLmNvbXBsZXRlUmVxdWVzdChlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7Ci19Ci0KLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZEVzdGFibGlzaFRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgYm9vbCBzdWNjZXNzKQotewotICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9ucyA9IG1fZXN0YWJsaXNoZWRUcmFuc2FjdGlvbnMuYWRk
KCZ0cmFuc2FjdGlvbklkZW50aWZpZXIuY29ubmVjdGlvbigpLCBIYXNoU2V0PElEQklkZW50aWZp
ZXI+KCkpOwotICAgIHRyYW5zYWN0aW9ucy5pdGVyYXRvci0+dmFsdWUuYWRkKHRyYW5zYWN0aW9u
SWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFJlc2V0VHJhbnNh
Y3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBib29sIHN1
Y2Nlc3MpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBpZiAoIXN1Y2Nl
c3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gdHJhbnNhY3Rpb25zID0gbV9lc3RhYmxp
c2hlZFRyYW5zYWN0aW9ucy5maW5kKCZ0cmFuc2FjdGlvbklkZW50aWZpZXIuY29ubmVjdGlvbigp
KTsKLSAgICBpZiAodHJhbnNhY3Rpb25zICE9IG1fZXN0YWJsaXNoZWRUcmFuc2FjdGlvbnMuZW5k
KCkpCi0gICAgICAgIHRyYW5zYWN0aW9ucy5nZXQoKS0+dmFsdWUucmVtb3ZlKHRyYW5zYWN0aW9u
SWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlc2V0QWxsVHJhbnNh
Y3Rpb25zKGNvbnN0IERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCi17
Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBhdXRvIHRyYW5zYWN0aW9ucyA9
IG1fZXN0YWJsaXNoZWRUcmFuc2FjdGlvbnMuZmluZCgmY29ubmVjdGlvbik7Ci0gICAgaWYgKHRy
YW5zYWN0aW9ucyA9PSBtX2VzdGFibGlzaGVkVHJhbnNhY3Rpb25zLmVuZCgpIHx8ICFtX2FjY2Vw
dGluZ05ld1JlcXVlc3RzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIHRyYW5z
YWN0aW9uSWRlbnRpZmllciA6IHRyYW5zYWN0aW9ucy5nZXQoKS0+dmFsdWUpIHsKLSAgICAgICAg
bV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3MuYWRkKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7
Ci0gICAgICAgIGlmICghbV9wZW5kaW5nVHJhbnNhY3Rpb25SZXF1ZXN0cy5jb250YWlucyh0cmFu
c2FjdGlvbklkZW50aWZpZXIpKQotICAgICAgICAgICAgZmluYWxpemVSb2xsYmFjayh0cmFuc2Fj
dGlvbklkZW50aWZpZXIpOwotICAgIH0KLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Zmlu
YWxpemVSb2xsYmFjayhjb25zdCBXZWJLaXQ6OklEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWQp
Ci17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQobV9wZW5kaW5n
VHJhbnNhY3Rpb25Sb2xsYmFja3MuY29udGFpbnModHJhbnNhY3Rpb25JZCkpOwotICAgIEFTU0VS
VCghbV9wZW5kaW5nVHJhbnNhY3Rpb25SZXF1ZXN0cy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7
Ci0gICAgcm9sbGJhY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCBbdGhpcywgdHJhbnNhY3Rp
b25JZF0oYm9vbCkgewotICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgICAg
ICBpZiAobV9wZW5kaW5nVHJhbnNhY3Rpb25SZXF1ZXN0cy5jb250YWlucyh0cmFuc2FjdGlvbklk
KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBBU1NFUlQobV9wZW5kaW5nVHJhbnNh
Y3Rpb25Sb2xsYmFja3MuY29udGFpbnModHJhbnNhY3Rpb25JZCkpOwotICAgICAgICBtX3BlbmRp
bmdUcmFuc2FjdGlvblJvbGxiYWNrcy5yZW1vdmUodHJhbnNhY3Rpb25JZCk7Ci0gICAgICAgIHJl
c2V0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgW3RoaXMsIHRyYW5zYWN0aW9uSWRdKGJvb2wp
IHsKLSAgICAgICAgICAgIGlmIChtX2FjY2VwdGluZ05ld1JlcXVlc3RzICYmIG1fY29ubmVjdGlv
bnMuaXNFbXB0eSgpICYmIG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJhY2tzLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgIHNodXRkb3duKFVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBl
OjpOb3JtYWxTaHV0ZG93bik7Ci0gICAgICAgICAgICAgICAgRGF0YWJhc2VQcm9jZXNzOjpzaW5n
bGV0b24oKS5yZW1vdmVVbmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0pOwotICAgIH0pOwotfQotCi1TdHJpbmcgVW5pcXVlSURCRGF0YWJhc2U6OmFic29s
dXRlRGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdAotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgcmV0dXJuIERhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCkuYWJzb2x1dGVJ
bmRleGVkRGF0YWJhc2VQYXRoRnJvbURhdGFiYXNlUmVsYXRpdmVQYXRoKG1fZGF0YWJhc2VSZWxh
dGl2ZURpcmVjdG9yeSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBvc3RNYWluVGhy
ZWFkVGFzayhzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiB0YXNrLCBEYXRhYmFzZVRh
c2tUeXBlIHRhc2tUeXBlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgaWYgKCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzICYmIHRhc2tUeXBlID09IERhdGFiYXNlVGFz
a1R5cGU6Ok5vcm1hbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9tYWluVGhyZWFkVGFza011dGV4KTsKLQotICAgIG1fbWFpblRocmVhZFRhc2tzLmFwcGVuZChX
VEZNb3ZlKHRhc2spKTsKLQotICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZT4gZGF0YWJhc2Uo
dGhpcyk7Ci0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtkYXRhYmFzZV0gewotICAgICAg
ICBkYXRhYmFzZS0+cGVyZm9ybU5leHRNYWluVGhyZWFkVGFzaygpOwotICAgIH0pOwotfQotCi1i
b29sIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtTmV4dE1haW5UaHJlYWRUYXNrKCkKLXsKLSAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYm9vbCBtb3JlVGFza3M7Ci0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiB0YXNrOwotICAgIHsKLSAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9tYWluVGhyZWFkVGFza011dGV4KTsKLQotICAgICAgICAvLyBU
aGlzIGRhdGFiYXNlIG1pZ2h0IGJlIHNodXR0aW5nIGRvd24sIGluIHdoaWNoIGNhc2UgdGhlIHRh
c2sgcXVldWUgbWlnaHQgYmUgZW1wdHkuCi0gICAgICAgIGlmIChtX21haW5UaHJlYWRUYXNrcy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdGFzayA9IG1f
bWFpblRocmVhZFRhc2tzLnRha2VGaXJzdCgpOwotICAgICAgICBtb3JlVGFza3MgPSAhbV9tYWlu
VGhyZWFkVGFza3MuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7
Ci0KLSAgICByZXR1cm4gbW9yZVRhc2tzOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
b3N0RGF0YWJhc2VUYXNrKHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZFRhc2s+IHRhc2ssIERh
dGFiYXNlVGFza1R5cGUgdGFza1R5cGUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cyAmJiB0YXNrVHlwZSA9PSBEYXRh
YmFzZVRhc2tUeXBlOjpOb3JtYWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fZGF0YWJhc2VUYXNrTXV0ZXgpOwotCi0gICAgbV9kYXRhYmFzZVRhc2tzLmFwcGVu
ZChXVEZNb3ZlKHRhc2spKTsKLQotICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZT4gZGF0YWJh
c2UodGhpcyk7Ci0gICAgRGF0YWJhc2VQcm9jZXNzOjpzaW5nbGV0b24oKS5xdWV1ZSgpLmRpc3Bh
dGNoKFtkYXRhYmFzZV0gewotICAgICAgICBkYXRhYmFzZS0+cGVyZm9ybU5leHREYXRhYmFzZVRh
c2soKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU5leHRE
YXRhYmFzZVRhc2soKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
Ly8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGlzIGRhdGFiYXNlIG1pZ2h0IGJlIHNodXR0aW5nIGRv
d24gb24gdGhlIG1haW4gdGhyZWFkLgotICAgIC8vIEluIHRoaXMgY2FzZSwgaW1tZWRpYXRlbHkg
YWZ0ZXIgcmVsZWFzaW5nIG1fZGF0YWJhc2VUYXNrTXV0ZXgsIHRoaXMgZGF0YWJhc2UgbWlnaHQg
Z2V0IGRlbGV0ZWQuCi0gICAgLy8gV2UgdGFrZSBhIHJlZigpIHRvIG1ha2Ugc3VyZSB0aGUgZGF0
YWJhc2UgaXMgc3RpbGwgbGl2ZSB3aGlsZSB0aGlzIGxhc3QgdGFzayBpcyBwZXJmb3JtZWQuCi0g
ICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlPiBwcm90ZWN0b3IodGhpcyk7Ci0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiB0YXNrOwotICAgIHsKLSAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9kYXRhYmFzZVRhc2tNdXRleCk7Ci0KLSAgICAgICAgLy8gVGhpcyBkYXRh
YmFzZSBtaWdodCBiZSBzaHV0dGluZyBkb3duIG9uIHRoZSBtYWluIHRocmVhZCwgaW4gd2hpY2gg
Y2FzZSB0aGUgdGFzayBxdWV1ZSBtaWdodCBiZSBlbXB0eS4KLSAgICAgICAgaWYgKG1fZGF0YWJh
c2VUYXNrcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGFzayA9
IG1fZGF0YWJhc2VUYXNrcy50YWtlRmlyc3QoKTsKLSAgICB9Ci0KLSAgICB0YXNrLT5wZXJmb3Jt
VGFzaygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJh
c2UuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURC
RGF0YWJhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdkZTFjYy4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlE
QkRhdGFiYXNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgVW5pcXVlSURCRGF0YWJhc2VfaAotI2RlZmluZSBVbmlxdWVJREJEYXRhYmFzZV9o
Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NF
U1MpCi0KLSNpbmNsdWRlICJBc3luY1JlcXVlc3QuaCIKLSNpbmNsdWRlICJJREJJZGVudGlmaWVy
LmgiCi0jaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9JREJEYXRhYmFzZUJhY2tlbmQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luZGV4ZWRE
Qi5oPgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBJUEMgewotY2xhc3MgRGF0YVJlZmVyZW5jZTsKLX0KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotY2xhc3MgQ3Jvc3NUaHJlYWRUYXNrOwotY2xhc3MgSURCR2V0UmVzdWx0OwotY2xh
c3MgSURCS2V5RGF0YTsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQotc3RydWN0IElEQkRhdGFiYXNl
TWV0YWRhdGE7Ci1zdHJ1Y3QgSURCS2V5UmFuZ2VEYXRhOwotc3RydWN0IFNlY3VyaXR5T3JpZ2lu
RGF0YTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIERhdGFiYXNlUHJvY2Vzc0lE
QkNvbm5lY3Rpb247Ci1jbGFzcyBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZTsKLQotZW51
bSBjbGFzcyBVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlwZSB7Ci0gICAgTm9ybWFsU2h1dGRv
d24sCi0gICAgRGVsZXRlU2h1dGRvd24KLX07Ci0KLWNsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFVuaXF1ZUlEQkRhdGFiYXNlPiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxVbmlxdWVJREJEYXRhYmFzZT4gY3JlYXRlKGNvbnN0IFVuaXF1ZUlE
QkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFVuaXF1ZUlEQkRhdGFiYXNlKGlkZW50aWZpZXIpKTsKLSAgICB9Ci0KLSAg
ICB+VW5pcXVlSURCRGF0YWJhc2UoKTsKLQotICAgIHN0YXRpYyBTdHJpbmcgY2FsY3VsYXRlQWJz
b2x1dGVEYXRhYmFzZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgYWJzb2x1dGVEYXRhYmFzZURpcmVj
dG9yeSk7Ci0KLSAgICBjb25zdCBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLQotICAgIHZvaWQgcmVnaXN0ZXJD
b25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mKTsKLSAgICB2b2lkIHVucmVn
aXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mKTsKLQotICAgIHZv
aWQgZGVsZXRlRGF0YWJhc2Uoc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxi
YWNrKTsKLQotICAgIHZvaWQgZ2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHN0ZDo6
ZnVuY3Rpb248dm9pZCAoYm9vbCwgY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYp
PiBjb21wbGV0aW9uQ2FsbGJhY2spOwotCi0gICAgdm9pZCBvcGVuVHJhbnNhY3Rpb24oY29uc3Qg
SURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8aW50NjRf
dD4mIG9iamVjdFN0b3JlSURzLCBXZWJDb3JlOjpJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSwg
c3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICB2b2lkIGJl
Z2luVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spOwotICAgIHZvaWQg
Y29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spOwotICAgIHZv
aWQgcmVzZXRUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAg
dm9pZCByb2xsYmFja1RyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKTsK
LQotICAgIHZvaWQgY2hhbmdlRGF0YWJhc2VWZXJzaW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3QgbmV3VmVyc2lvbiwgc3RkOjpmdW5jdGlvbjx2
b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICB2b2lkIGNyZWF0ZU9iamVjdFN0b3Jl
KGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1
Y2Nlc3NDYWxsYmFjayk7Ci0gICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgc3Rk
OjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICB2b2lkIGNsZWFy
T2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBp
bnQ2NF90IG9iamVjdFN0b3JlSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3ND
YWxsYmFjayk7Ci0gICAgdm9pZCBjcmVhdGVJbmRleChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6
SURCSW5kZXhNZXRhZGF0YSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxs
YmFjayk7Ci0gICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spOwotCi0gICAgdm9pZCBw
dXRSZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2
NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmLCBjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmIHZhbHVlLCBpbnQ2NF90IHB1dE1vZGUsIGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYgaW5kZXhJRHMsIGNvbnN0IFZlY3RvcjxWZWN0b3I8V2ViQ29yZTo6SURCS2V5RGF0YT4+
JiBpbmRleEtleXMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0
YSYsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmKT4gY2FsbGJhY2spOwotICAgIHZvaWQgZ2V0UmVj
b3JkKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBv
YmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0IFdlYkNvcmU6OklEQktleVJhbmdl
RGF0YSYsIFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgc3RkOjpmdW5jdGlvbjx2b2lk
IChjb25zdCBXZWJDb3JlOjpJREJHZXRSZXN1bHQmLCB1aW50MzJfdCwgY29uc3QgU3RyaW5nJik+
IGNhbGxiYWNrKTsKLQotICAgIHZvaWQgb3BlbkN1cnNvcihjb25zdCBJREJJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRl
eElELCBXZWJDb3JlOjpJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgV2ViQ29yZTo6SW5kZXhl
ZERCOjpDdXJzb3JUeXBlLCBXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBj
b25zdCBXZWJDb3JlOjpJREJLZXlSYW5nZURhdGEmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGludDY0
X3QsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRh
JiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCB1aW50MzJfdCwgY29uc3QgU3Ry
aW5nJik+IGNhbGxiYWNrKTsKLSAgICB2b2lkIGN1cnNvckFkdmFuY2UoY29uc3QgSURCSWRlbnRp
ZmllciYgY3Vyc29ySWRlbnRpZmllciwgdWludDY0X3QgY291bnQsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEm
LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4sIHVpbnQzMl90LCBjb25zdCBTdHJp
bmcmKT4gY2FsbGJhY2spOwotICAgIHZvaWQgY3Vyc29ySXRlcmF0ZShjb25zdCBJREJJZGVudGlm
aWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgc3RkOjpm
dW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgY29uc3QgV2ViQ29yZTo6
SURCS2V5RGF0YSYsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiwgdWludDMyX3Qs
IGNvbnN0IFN0cmluZyYpPiBjYWxsYmFjayk7Ci0KLSAgICB2b2lkIGNvdW50KGNvbnN0IElEQklk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBp
bnQ2NF90IGluZGV4SUQsIGNvbnN0IFdlYkNvcmU6OklEQktleVJhbmdlRGF0YSYsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoaW50NjRfdCwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYpPiBjYWxsYmFjayk7
Ci0gICAgdm9pZCBkZWxldGVSYW5nZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5UmFu
Z2VEYXRhJiwgc3RkOjpmdW5jdGlvbjx2b2lkICh1aW50MzJfdCwgY29uc3QgU3RyaW5nJik+IGNh
bGxiYWNrKTsKLQotcHJpdmF0ZToKLSAgICBVbmlxdWVJREJEYXRhYmFzZShjb25zdCBVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXImKTsKLQotICAgIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
ciBtX2lkZW50aWZpZXI7Ci0KLSAgICBib29sIG1faW5NZW1vcnk7Ci0gICAgU3RyaW5nIG1fZGF0
YWJhc2VSZWxhdGl2ZURpcmVjdG9yeTsKLQotICAgIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb24+PiBtX2Nvbm5lY3Rpb25zOwotICAgIEhhc2hNYXA8dWludDY0X3Qs
IFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX2RhdGFiYXNlUmVxdWVzdHM7Ci0KLSAgICBTdHJpbmcg
YWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0OwotCi0gICAgZW51bSBjbGFzcyBEYXRh
YmFzZVRhc2tUeXBlIHsKLSAgICAgICAgTm9ybWFsLAotICAgICAgICBTaHV0ZG93bgotICAgIH07
Ci0gICAgdm9pZCBwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpDcm9z
c1RocmVhZFRhc2s+LCBEYXRhYmFzZVRhc2tUeXBlID0gRGF0YWJhc2VUYXNrVHlwZTo6Tm9ybWFs
KTsKLQotICAgIHZvaWQgc2h1dGRvd24oVW5pcXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGUpOwot
Ci0gICAgLy8gTWV0aG9kIHRoYXQgYXR0ZW1wdHMgdG8gbWFrZSBsZWdhbCBmaWxlbmFtZXMgZnJv
bSBhbGwgbGVnYWwgZGF0YWJhc2UgbmFtZXMKLSAgICBTdHJpbmcgZmlsZW5hbWVGb3JEYXRhYmFz
ZU5hbWUoKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBhcHByb3By
aWF0ZSBmb3IgdXNlIGFzIGEgdW5pcXVlIGZpbGVuYW1lCi0gICAgU3RyaW5nIGRhdGFiYXNlRmls
ZW5hbWVJZGVudGlmaWVyKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYpIGNvbnN0
OwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgb3JpZ2luIGNhbiB1c2UgdGhlIHNhbWUg
ZGF0YWJhc2VzIGFzIHRoZSBnaXZlbiBvcmlnaW4uCi0gICAgYm9vbCBjYW5TaGFyZURhdGFiYXNl
cyhjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEmKSBjb25zdDsKLQotICAgIHZvaWQgcG9zdFRyYW5zYWN0aW9uT3BlcmF0
aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkNyb3NzVGhyZWFkVGFzaz4sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9v
bCk+IHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgCi0gICAgLy8gVG8gYmUgY2FsbGVkIGZyb20gdGhl
IGRhdGFiYXNlIHdvcmtxdWV1ZSB0aHJlYWQgb25seQotICAgIHZvaWQgcGVyZm9ybU5leHREYXRh
YmFzZVRhc2soKTsKLSAgICB2b2lkIHBvc3RNYWluVGhyZWFkVGFzayhzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrPiwgRGF0YWJhc2VUYXNrVHlwZSA9IERhdGFiYXNlVGFz
a1R5cGU6Ok5vcm1hbCk7Ci0gICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRh
KGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VEaXJlY3RvcnkpOwotICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0
IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiBvYmplY3RTdG9yZUlEcywgV2ViQ29yZTo6SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUp
OwotICAgIHZvaWQgYmVnaW5CYWNraW5nU3RvcmVUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlm
aWVyJik7Ci0gICAgdm9pZCBjb21taXRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihjb25zdCBJREJJ
ZGVudGlmaWVyJik7Ci0gICAgdm9pZCByZXNldEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0
IElEQklkZW50aWZpZXImKTsKLSAgICB2b2lkIHJvbGxiYWNrQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oY29uc3QgSURCSWRlbnRpZmllciYpOwotCi0gICAgdm9pZCBjaGFuZ2VEYXRhYmFzZVZlcnNp
b25JbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElEQklkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3QgbmV3VmVyc2lvbik7Ci0gICAgdm9pZCBj
cmVhdGVPYmplY3RTdG9yZUluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3Qg
SURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJREJP
YmplY3RTdG9yZU1ldGFkYXRhJik7Ci0gICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZUluQmFja2lu
Z1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpOwotICAgIHZvaWQgY2xlYXJPYmpl
Y3RTdG9yZUluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpOwotCi0g
ICAgdm9pZCBjcmVhdGVJbmRleEluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29u
c3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0
b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQkluZGV4TWV0YWRhdGEmKTsKLSAgICB2b2lkIGRlbGV0
ZUluZGV4SW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRf
dCBpbmRleElEKTsKLQotICAgIHZvaWQgcHV0UmVjb3JkSW5CYWNraW5nU3RvcmUodWludDY0X3Qg
cmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBjb25zdCBXZWJDb3JlOjpJREJL
ZXlEYXRhJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSwgaW50NjRfdCBwdXRNb2RlLCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SURzLCBjb25zdCBWZWN0b3I8VmVjdG9yPFdlYkNv
cmU6OklEQktleURhdGE+PiYgaW5kZXhLZXlzKTsKLSAgICB2b2lkIGdldFJlY29yZEZyb21CYWNr
aW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBp
bnQ2NF90IGluZGV4SUQsIGNvbnN0IFdlYkNvcmU6OklEQktleVJhbmdlRGF0YSYsIFdlYkNvcmU6
OkluZGV4ZWREQjo6Q3Vyc29yVHlwZSk7Ci0gICAgdm9pZCBvcGVuQ3Vyc29ySW5CYWNraW5nU3Rv
cmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBXZWJDb3Jl
OjpJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgV2ViQ29yZTo6SW5kZXhlZERCOjpDdXJzb3JU
eXBlLCBXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBjb25zdCBXZWJDb3Jl
OjpJREJLZXlSYW5nZURhdGEmKTsKLSAgICB2b2lkIGFkdmFuY2VDdXJzb3JJbkJhY2tpbmdTdG9y
ZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElEQklkZW50aWZpZXImIGN1cnNvcklkZW50aWZp
ZXIsIHVpbnQ2NF90IGNvdW50KTsKLSAgICB2b2lkIGl0ZXJhdGVDdXJzb3JJbkJhY2tpbmdTdG9y
ZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElEQklkZW50aWZpZXImIGN1cnNvcklkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmKTsKLSAgICB2b2lkIGNvdW50SW5CYWNraW5n
U3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25z
dCBXZWJDb3JlOjpJREJLZXlSYW5nZURhdGEmKTsKLSAgICB2b2lkIGRlbGV0ZVJhbmdlSW5CYWNr
aW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURC
S2V5UmFuZ2VEYXRhJik7Ci0KLSAgICB2b2lkIHNodXRkb3duQmFja2luZ1N0b3JlKFVuaXF1ZUlE
QkRhdGFiYXNlU2h1dGRvd25UeXBlLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KTsK
LQotICAgIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBkYXRhYmFzZSB3b3JrcXVldWUgdGhyZWFkLCB0
byBiZSBwZXJmb3JtZWQgb24gdGhlIG1haW4gdGhyZWFkIG9ubHkKLSAgICBib29sIHBlcmZvcm1O
ZXh0TWFpblRocmVhZFRhc2soKTsKLSAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmVBbmRSZWFk
TWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYsIGJvb2wgc3VjY2Vz
cyk7Ci0gICAgdm9pZCBkaWRDb21wbGV0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKGNvbnN0IElEQklk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgYm9vbCBzdWNjZXNzKTsKLSAgICB2b2lk
IGRpZENoYW5nZURhdGFiYXNlVmVyc2lvbih1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vz
cyk7Ci0gICAgdm9pZCBkaWRDcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGJv
b2wgc3VjY2Vzcyk7Ci0gICAgdm9pZCBkaWREZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCByZXF1
ZXN0SUQsIGJvb2wgc3VjY2Vzcyk7Ci0gICAgdm9pZCBkaWRDbGVhck9iamVjdFN0b3JlKHVpbnQ2
NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKTsKLSAgICB2b2lkIGRpZENyZWF0ZUluZGV4KHVp
bnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKTsKLSAgICB2b2lkIGRpZERlbGV0ZUluZGV4
KHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKTsKLSAgICB2b2lkIGRpZFB1dFJlY29y
ZEluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5
RGF0YSYsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwot
ICAgIHZvaWQgZGlkR2V0UmVjb3JkRnJvbUJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQs
IGNvbnN0IFdlYkNvcmU6OklEQkdldFJlc3VsdCYsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotICAgIHZvaWQgZGlkT3BlbkN1cnNvckluQmFja2luZ1N0
b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCBjdXJzb3JJRCwgY29uc3QgV2ViQ29yZTo6
SURCS2V5RGF0YSYsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmLCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mLCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsK
LSAgICB2b2lkIGRpZEFkdmFuY2VDdXJzb3JJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0
SUQsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRh
JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgdWludDMyX3QgZXJyb3JDb2RlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSk7Ci0gICAgdm9pZCBkaWRJdGVyYXRlQ3Vyc29ySW5CYWNraW5nU3Rv
cmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgY29uc3Qg
V2ViQ29yZTo6SURCS2V5RGF0YSYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIHVpbnQzMl90IGVy
cm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotICAgIHZvaWQgZGlkQ291bnRJ
bkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgY291bnQsIHVpbnQzMl90
IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotICAgIHZvaWQgZGlkRGVs
ZXRlUmFuZ2VJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIHVpbnQzMl90IGVycm9y
Q29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotCi0gICAgdm9pZCBkaWRTaHV0ZG93
bkJhY2tpbmdTdG9yZShVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlwZSk7Ci0gICAgdm9pZCBk
aWRDb21wbGV0ZUJvb2xSZXF1ZXN0KHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKTsK
LQotICAgIHZvaWQgZGlkRXN0YWJsaXNoVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBib29sIHN1Y2Nlc3MpOwotICAgIHZvaWQgZGlkUmVzZXRU
cmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGJv
b2wgc3VjY2Vzcyk7Ci0gICAgdm9pZCByZXNldEFsbFRyYW5zYWN0aW9ucyhjb25zdCBEYXRhYmFz
ZVByb2Nlc3NJREJDb25uZWN0aW9uJik7Ci0gICAgdm9pZCBmaW5hbGl6ZVJvbGxiYWNrKGNvbnN0
IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWQpOwotCi0gICAgYm9vbCBtX2FjY2VwdGluZ05l
d1JlcXVlc3RzOwotCi0gICAgSGFzaE1hcDxjb25zdCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0
aW9uKiwgSGFzaFNldDxJREJJZGVudGlmaWVyPj4gbV9lc3RhYmxpc2hlZFRyYW5zYWN0aW9uczsK
LSAgICBEZXF1ZTxSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0
czsKLSAgICBIYXNoTWFwPElEQklkZW50aWZpZXIsIFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX3Bl
bmRpbmdUcmFuc2FjdGlvblJlcXVlc3RzOwotICAgIEhhc2hTZXQ8SURCSWRlbnRpZmllcj4gbV9w
ZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3M7Ci0gICAgQXN5bmNSZXF1ZXN0TWFwIG1fcGVuZGlu
Z0RhdGFiYXNlVGFza3M7Ci0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gbV9wZW5kaW5nU2h1dGRv
d25UYXNrOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRh
dGE+IG1fbWV0YWRhdGE7Ci0gICAgYm9vbCBtX2RpZEdldE1ldGFkYXRhRnJvbUJhY2tpbmdTdG9y
ZTsKLQotICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5n
U3RvcmU7Ci0KLSAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6Q3Jvc3NUaHJlYWRU
YXNrPj4gbV9kYXRhYmFzZVRhc2tzOwotICAgIExvY2sgbV9kYXRhYmFzZVRhc2tNdXRleDsKLQot
ICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpDcm9zc1RocmVhZFRhc2s+PiBtX21h
aW5UaHJlYWRUYXNrczsKLSAgICBMb2NrIG1fbWFpblRocmVhZFRhc2tNdXRleDsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
ICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQotI2VuZGlmIC8vIFVuaXF1ZUlEQkRhdGFiYXNl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc4ZmRjYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCIK
LQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VT
UykKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6VW5pcXVlSURCRGF0YWJhc2VJ
ZGVudGlmaWVyKCkKLXsKLX0KLQotVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyOjpVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgb3BlbmluZ09yaWdpbiwgY29uc3QgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiBtYWluRnJhbWVPcmlnaW4pCi0gICAgOiBtX2RhdGFiYXNlTmFt
ZShkYXRhYmFzZU5hbWUpCi0gICAgLCBtX29wZW5pbmdPcmlnaW4ob3BlbmluZ09yaWdpbikKLSAg
ICAsIG1fbWFpbkZyYW1lT3JpZ2luKG1haW5GcmFtZU9yaWdpbikKLXsKLSAgICAvLyBXaGlsZSBp
dCBpcyB2YWxpZCB0byBoYXZlIGFuIGVtcHR5IGRhdGFiYXNlIG5hbWUsIGl0IGlzIG5vdCB2YWxp
ZCB0byBoYXZlIGEgbnVsbCBvbmUuCi0gICAgQVNTRVJUKCFtX2RhdGFiYXNlTmFtZS5pc051bGwo
KSk7Ci19Ci0KLVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6VW5pcXVlSURCRGF0YWJhc2VJ
ZGVudGlmaWVyKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICA6IG1fZGF0YWJh
c2VOYW1lKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQotewotfQotCi1ib29sIFVuaXF1ZUlE
QkRhdGFiYXNlSWRlbnRpZmllcjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2RhdGFiYXNlTmFtZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwotfQot
Ci11bnNpZ25lZCBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI6Omhhc2goKSBjb25zdAotewot
ICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1s3XSA9IHsKLSAgICAgICAgbV9kYXRhYmFzZU5hbWUuaW1w
bCgpID8gbV9kYXRhYmFzZU5hbWUuaW1wbCgpLT5oYXNoKCkgOiAwLAotICAgICAgICBtX29wZW5p
bmdPcmlnaW4ucHJvdG9jb2wuaW1wbCgpID8gbV9vcGVuaW5nT3JpZ2luLnByb3RvY29sLmltcGwo
KS0+aGFzaCgpIDogMCwKLSAgICAgICAgbV9vcGVuaW5nT3JpZ2luLmhvc3QuaW1wbCgpID8gbV9v
cGVuaW5nT3JpZ2luLmhvc3QuaW1wbCgpLT5oYXNoKCkgOiAwLAotICAgICAgICBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9vcGVuaW5nT3JpZ2luLnBvcnQpLAotICAgICAgICBtX21haW5GcmFtZU9y
aWdpbi5wcm90b2NvbC5pbXBsKCkgPyBtX21haW5GcmFtZU9yaWdpbi5wcm90b2NvbC5pbXBsKCkt
Pmhhc2goKSA6IDAsCi0gICAgICAgIG1fbWFpbkZyYW1lT3JpZ2luLmhvc3QuaW1wbCgpID8gbV9t
YWluRnJhbWVPcmlnaW4uaG9zdC5pbXBsKCktPmhhc2goKSA6IDAsCi0gICAgICAgIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX21haW5GcmFtZU9yaWdpbi5wb3J0KQotICAgIH07Ci0gICAgcmV0dXJu
IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsK
LX0KLQotYm9vbCBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI6OmlzTnVsbCgpIGNvbnN0Ci17
Ci0gICAgLy8gT25seSBhIGRlZmF1bHQgY29uc3RydWN0ZWQgVW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyIGNhbiBoYXZlIGEgbnVsbCBkYXRhYmFzZSBuYW1lLgotICAgIHJldHVybiBtX2RhdGFi
YXNlTmFtZS5pc051bGwoKTsKLX0KLQotVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyIFVuaXF1
ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKLXsKLSAgICBVbmlx
dWVJREJEYXRhYmFzZUlkZW50aWZpZXIgcmVzdWx0OwotCi0gICAgcmVzdWx0Lm1fZGF0YWJhc2VO
YW1lID0gbV9kYXRhYmFzZU5hbWUuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgcmVzdWx0Lm1fb3Blbmlu
Z09yaWdpbiA9IG1fb3BlbmluZ09yaWdpbi5pc29sYXRlZENvcHkoKTsKLSAgICByZXN1bHQubV9t
YWluRnJhbWVPcmlnaW4gPSBtX21haW5GcmFtZU9yaWdpbi5pc29sYXRlZENvcHkoKTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBVbmlxdWVJREJEYXRh
YmFzZUlkZW50aWZpZXImIGEsIGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgYikK
LXsKLSAgICBpZiAoJmEgPT0gJmIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJu
IGEuZGF0YWJhc2VOYW1lKCkgPT0gYi5kYXRhYmFzZU5hbWUoKQotICAgICAgICAmJiBhLm9wZW5p
bmdPcmlnaW4oKSA9PSBiLm9wZW5pbmdPcmlnaW4oKQotICAgICAgICAmJiBhLm1haW5GcmFtZU9y
aWdpbigpID09IGIubWFpbkZyYW1lT3JpZ2luKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFT
RV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NDFhZmIuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50
aWZpZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcl9oCi0jZGVmaW5lIFVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllcl9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxF
KERBVEFCQVNFX1BST0NFU1MpCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0
YS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciB7Ci1wdWJsaWM6Ci0gICAg
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyKCk7Ci0gICAgVW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YSYgbWFpbkZyYW1lT3JpZ2luKTsKLQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7Ci0KLSAg
ICBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VO
YW1lOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBvcGVuaW5nT3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuaW5nT3JpZ2luOyB9Ci0gICAgY29uc3QgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBtYWluRnJhbWVPcmlnaW4oKSBjb25zdCB7IHJldHVybiBt
X21haW5GcmFtZU9yaWdpbjsgfQotCi0gICAgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSk7Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLQotICAgIFVuaXF1
ZUlEQkRhdGFiYXNlSWRlbnRpZmllciBpc29sYXRlZENvcHkoKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBTdHJpbmcgbV9kYXRhYmFzZU5hbWU7Ci0gICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhIG1fb3BlbmluZ09yaWdpbjsKLSAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgbV9t
YWluRnJhbWVPcmlnaW47Ci19OwotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgVW5pcXVlSURCRGF0
YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJik7Ci0K
LXN0cnVjdCBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXJIYXNoIHsKLSAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIp
IHsgcmV0dXJuIGlkZW50aWZpZXIuaGFzaCgpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBhLCBjb25zdCBVbmlxdWVJREJEYXRhYmFz
ZUlkZW50aWZpZXImIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQotICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci19OwotCi1zdHJ1Y3QgVW5p
cXVlSURCRGF0YWJhc2VJZGVudGlmaWVySGFzaFRyYWl0cyA6IFdURjo6U2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcj4gewotICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc0lzRW1wdHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKLSAgICBzdGF0aWMgYm9vbCBpc0Vt
cHR5VmFsdWUoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpbmZvKSB7IHJldHVy
biBpbmZvLmlzTnVsbCgpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotbmFtZXNw
YWNlIFdURiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViS2l0OjpVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXI+IDogV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZp
ZXJIYXNoVHJhaXRzIHsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYktpdDo6
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyPiB7Ci0gICAgdHlwZWRlZiBXZWJLaXQ6OlVuaXF1
ZUlEQkRhdGFiYXNlSWRlbnRpZmllckhhc2ggSGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWVjIFdU
RgotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFT
RV9QUk9DRVNTKQotI2VuZGlmIC8vIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9V
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZVNRTGl0ZS5jcHAKaW5kZXggZWRjODc1MC4uNTA2YzE1MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
LmNwcApAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgaW50NjRfdCBnZW5lcmF0ZURhdGFiYXNlSWQo
KQogICAgIHJldHVybiArK2RhdGFiYXNlSUQ7CiB9CiAKLVVuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlU1FMaXRlOjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZShjb25zdCBV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VEaXJlY3RvcnkpCitVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6VW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUoY29uc3QgTGVnYWN5VW5pcXVlSURCRGF0
YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0
b3J5KQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX2Fic29sdXRlRGF0
YWJhc2VEaXJlY3RvcnkoZGF0YWJhc2VEaXJlY3RvcnkpCiB7CkBAIC00MjcsNyArNDI3LDcgQEAg
c3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IFVuaXF1ZUlEQkRhdGFiYXNlQmFj
a2luZ1N0b3JlU1FMaXRlOjpnZXRPckUKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKIAotICAgIFN0cmluZyBkYkZpbGVuYW1lID0gVW5pcXVlSURCRGF0YWJhc2U6OmNhbGN1bGF0
ZUFic29sdXRlRGF0YWJhc2VGaWxlbmFtZShtX2Fic29sdXRlRGF0YWJhc2VEaXJlY3RvcnkpOwor
ICAgIFN0cmluZyBkYkZpbGVuYW1lID0gTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNhbGN1bGF0
ZUFic29sdXRlRGF0YWJhc2VGaWxlbmFtZShtX2Fic29sdXRlRGF0YWJhc2VEaXJlY3RvcnkpOwog
CiAgICAgbV9zcWxpdGVEQiA9IG9wZW5TUUxpdGVEYXRhYmFzZUF0UGF0aChkYkZpbGVuYW1lKTsK
ICAgICBpZiAoIW1fc3FsaXRlREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNR
TGl0ZS5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUv
VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaAppbmRleCAxMGVjODg2Li44ODlk
MjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERC
L3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIAotI2luY2x1ZGUg
IlVuaXF1ZUlEQkRhdGFiYXNlLmgiIAorI2luY2x1ZGUgIkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNl
LmgiIAogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU3Ryb25nLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
QEAgLTUxLDcgKzUxLDcgQEAgY2xhc3MgU1FMaXRlSURCVHJhbnNhY3Rpb247CiAKIGNsYXNzIFVu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlIGZpbmFsIDogcHVibGljIFVuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFVuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlPiBjcmVhdGUoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KQorICAg
IHN0YXRpYyBSZWY8VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBM
ZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VEaXJlY3RvcnkpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZShpZGVudGlmaWVyLCBkYXRhYmFz
ZURpcmVjdG9yeSkpOwogICAgIH0KQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogICAgIHZvaWQg
dW5yZWdpc3RlckN1cnNvcihTUUxpdGVJREJDdXJzb3IqKTsKIAogcHJpdmF0ZToKLSAgICBVbmlx
dWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZShjb25zdCBVbmlxdWVJREJEYXRhYmFzZUlk
ZW50aWZpZXImLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KTsKKyAgICBVbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZShjb25zdCBMZWdhY3lVbmlxdWVJREJEYXRhYmFz
ZUlkZW50aWZpZXImLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KTsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZT4gb3BlblNRTGl0ZURhdGFiYXNl
QXRQYXRoKGNvbnN0IFN0cmluZyYpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJREJE
YXRhYmFzZU1ldGFkYXRhPiBleHRyYWN0RXhpc3RpbmdNZXRhZGF0YSgpOwpAQCAtMTA4LDcgKzEw
OCw3IEBAIHByaXZhdGU6CiAKICAgICBpbnQgaWRiS2V5Q29sbGF0ZShpbnQgYUxlbmd0aCwgY29u
c3Qgdm9pZCogYSwgaW50IGJMZW5ndGgsIGNvbnN0IHZvaWQqIGIpOwogCi0gICAgVW5pcXVlSURC
RGF0YWJhc2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICBMZWdhY3lVbmlxdWVJREJEYXRh
YmFzZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIFN0cmluZyBtX2Fic29sdXRlRGF0YWJh
c2VEaXJlY3Rvcnk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlRGF0YWJh
c2U+IG1fc3FsaXRlREI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ3Jv
c3NUaHJlYWRDb3BpZXIuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNyb3NzVGhyZWFk
Q29waWVyLmNwcAppbmRleCA4NzIyNDY4Li4wY2ExMmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIklEQklkZW50aWZpZXIuaCIKLSNp
bmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0lEQktleURh
dGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgogCkBAIC0zNiw3
ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxz
ZSwgZmFsc2UsIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcj46OmNvcHkoY29uc3QgVW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorTGVnYWN5VW5pcXVlSURCRGF0YWJh
c2VJZGVudGlmaWVyIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIExlZ2FjeVVu
aXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcj46OmNvcHkoY29uc3QgTGVnYWN5VW5pcXVlSURCRGF0
YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIHJldHVybiBpZGVudGlmaWVyLmlz
b2xhdGVkQ29weSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNy
b3NzVGhyZWFkQ29waWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ3Jvc3NUaHJlYWRD
b3BpZXIuaAppbmRleCAwZWYzZGQ5Li5hYjYyNGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaApAQCAtMzcsOSArMzcsOSBAQCBzdHJ1Y3QgU2VjdXJp
dHlPcmlnaW5EYXRhOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIElEQklkZW50aWZpZXI7
Ci1jbGFzcyBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI7CitjbGFzcyBMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXI7CiAKLWVudW0gY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VTaHV0
ZG93blR5cGU7CitlbnVtIGNsYXNzIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBl
OwogfQogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQ4LDggKzQ4LDggQEAgY2xhc3MgQVNDSUlMaXRl
cmFsOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhy
ZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyPiB7Ci0gICAgc3RhdGljIFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVy
IGNvcHkoY29uc3QgV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKK3RlbXBs
YXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFdlYktpdDo6
TGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyPiB7CisgICAgc3RhdGljIFdlYktpdDo6
TGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyIGNvcHkoY29uc3QgV2ViS2l0OjpMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0
IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFdlYktpdDo6SURCSWRlbnRpZmll
cj4gewpAQCAtNTcsOCArNTcsOCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGll
ckJhc2U8ZmFsc2UsIGZhbHNlLCBXZWJLaXQ6OklEQklkZW50aWZpZXI+IHsKIH07CiAKIAotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgV2ViS2l0
OjpVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlwZT4gewotICAgIHN0YXRpYyBXZWJLaXQ6OlVu
aXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBlIGNvcHkoY29uc3QgV2ViS2l0OjpVbmlxdWVJREJE
YXRhYmFzZVNodXRkb3duVHlwZSYgdHlwZSkKK3RlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFk
Q29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2VT
aHV0ZG93blR5cGU+IHsKKyAgICBzdGF0aWMgV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFz
ZVNodXRkb3duVHlwZSBjb3B5KGNvbnN0IFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2VT
aHV0ZG93blR5cGUmIHR5cGUpCiAgICAgewogICAgICAgICByZXR1cm4gdHlwZTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNGM2ZWM1NS4uZjY1OWI3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODQ4LDYgKzg0OCwxMCBAQAogCQk1MTA1MjM3NTFD
NzNEMzhGMDA3OTkzQ0IgLyogV2ViSURCQ29ubmVjdGlvblRvU2VydmVyTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDUy
MzcyMUM3M0QzN0IwMDc5OTNDQiAvKiBXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwICovOyB9OwogCQk1MTA1MjM3OTFDNzNEQTc3MDA3OTkzQ0IgLyogV2ViSURCQ29u
bmVjdGlvblRvQ2xpZW50TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDUyMzc3MUM3M0RBNzAwMDc5OTNDQiAvKiBXZWJJ
REJDb25uZWN0aW9uVG9DbGllbnRNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MTA1MjM3
QTFDNzNEQTc3MDA3OTkzQ0IgLyogV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50TWVzc2FnZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDUyMzc4MUM3
M0RBNzAwMDc5OTNDQiAvKiBXZWJJREJDb25uZWN0aW9uVG9DbGllbnRNZXNzYWdlcy5oICovOyB9
OworCQk1MTA1MjM3RjFDNzU0MUZGMDA3OTkzQ0IgLyogTGVnYWN5VW5pcXVlSURCRGF0YWJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNTIz
N0IxQzc1NDFGMzAwNzk5M0NCIC8qIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlLmNwcCAqLzsgfTsK
KwkJNTEwNTIzODAxQzc1NDFGRjAwNzk5M0NCIC8qIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA1MjM3QzFD
NzU0MUYzMDA3OTkzQ0IgLyogTGVnYWN5VW5pcXVlSURCRGF0YWJhc2UuaCAqLzsgfTsKKwkJNTEw
NTIzODExQzc1NDFGRjAwNzk5M0NCIC8qIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA1
MjM3RDFDNzU0MUYzMDA3OTkzQ0IgLyogTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVy
LmNwcCAqLzsgfTsKKwkJNTEwNTIzODIxQzc1NDFGRjAwNzk5M0NCIC8qIExlZ2FjeVVuaXF1ZUlE
QkRhdGFiYXNlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTEwNTIzN0UxQzc1NDFGMzAwNzk5M0NCIC8qIExlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlSWRlbnRpZmllci5oICovOyB9OwogCQk1MTA2NEQzNTE4OTc4MUM0MDA0QjJGRUIgLyog
U1FMaXRlSURCQ3Vyc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMDY0RDMzMTg5NzgxQzQwMDRCMkZFQiAvKiBTUUxpdGVJREJDdXJzb3IuY3Bw
ICovOyB9OwogCQk1MTA2NEQzNjE4OTc4MUM0MDA0QjJGRUIgLyogU1FMaXRlSURCQ3Vyc29yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA2NEQzNDE4
OTc4MUM0MDA0QjJGRUIgLyogU1FMaXRlSURCQ3Vyc29yLmggKi87IH07CiAJCTUxMDZEN0MyMThC
REJFNzMwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHREYXRhLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDZEN0JGMThCREJFNzMwMDBBQjE2
NiAvKiBDb250ZXh0TWVudUNvbnRleHREYXRhLmNwcCAqLzsgfTsKQEAgLTkxOCwxMCArOTIyLDYg
QEAKIAkJNTE1RTc3MjgxODNERDZGNjAwMDcyMDNGIC8qIEFzeW5jUmVxdWVzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1RTc3MjYxODNERDZGNjAw
MDcyMDNGIC8qIEFzeW5jUmVxdWVzdC5oICovOyB9OwogCQk1MTVFNzcyQjE4NDAwOEI5MDAwNzIw
M0YgLyogRGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUU3NzI5MTg0MDA4QjkwMDA3MjAz
RiAvKiBEYXRhYmFzZVByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwICovOyB9OwogCQk1MTVF
NzcyQzE4NDAwOEI5MDAwNzIwM0YgLyogRGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVFNzcy
QTE4NDAwOEI5MDAwNzIwM0YgLyogRGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgg
Ki87IH07Ci0JCTUxNUU3NzJGMTg0MDE1ODAwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVFNzcy
RDE4NDAxNTgwMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2UuY3BwICovOyB9OwotCQk1MTVF
NzczMDE4NDAxNTgwMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUU3NzJFMTg0MDE1ODAwMDA3MjAz
RiAvKiBVbmlxdWVJREJEYXRhYmFzZS5oICovOyB9OwotCQk1MTVFNzczMzE4NDAyRDUxMDAwNzIw
M0YgLyogVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUU3NzMxMTg0MDJENTEwMDA3MjAzRiAvKiBV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwICovOyB9OwotCQk1MTVFNzczNDE4NDAyRDUx
MDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVFNzczMjE4NDAyRDUxMDAwNzIwM0Yg
LyogVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmggKi87IH07CiAJCTUxNjBCRkUxMTMzODFE
RjkwMDkxODk5OSAvKiBMb2dnaW5nRm91bmRhdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjBCRkUwMTMzODFERjkwMDkxODk5OSAvKiBMb2dn
aW5nRm91bmRhdGlvbi5tbSAqLzsgfTsKIAkJNTE2MzExODcxODU4NDQ2NjAwNTM0NjQ3IC8qIFdl
YkNyb3NzVGhyZWFkQ29waWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTYzMTE4NjE4NTg0NDY2MDA1MzQ2NDcgLyogV2ViQ3Jvc3NUaHJlYWRDb3Bp
ZXIuaCAqLzsgfTsKIAkJNTE2MzE5OTIxNjI4OTgwQTAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNz
UHJveHlNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTYzMTk5MTE2Mjg5ODBBMDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbSAq
LzsgfTsKQEAgLTI4MzcsNiArMjgzNywxMCBAQAogCQk1MTA1MjM3NjFDNzNEOUY2MDA3OTkzQ0Ig
LyogV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudC5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTEwNTIzNzcxQzczREE3MDAwNzk5M0NCIC8qIFdlYklEQkNvbm5l
Y3Rpb25Ub0NsaWVudE1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJJREJDb25uZWN0aW9uVG9DbGllbnRNZXNzYWdlUmVjZWl2ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTA1MjM3ODFDNzNEQTcwMDA3OTkzQ0Ig
LyogV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50TWVzc2FnZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEwNTIzN0IxQzc1NDFGMzAwNzk5M0NCIC8qIExlZ2Fj
eVVuaXF1ZUlEQkRhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTEwNTIzN0MxQzc1NDFGMzAwNzk5M0NCIC8qIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMDUyMzdEMUM3NTQxRjMwMDc5
OTNDQiAvKiBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlm
aWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEwNTIzN0UxQzc1NDFGMzAw
Nzk5M0NCIC8qIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwNUIwRDQxNjJGN0E3QTAwRTI3NzA5
IC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOyBwYXRoID0gTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTA1QjBENTE2MkY3QTdBMDBFMjc3MDkgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbi5oOyBwYXRoID0gTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwNUIwRjMxNjMwODcyRTAwRTI3NzA5IC8qIE5ldHdv
cmtQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNz
YWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MTUsMTAgKzI5MTksNiBA
QAogCQk1MTVFNzcyNjE4M0RENkY2MDAwNzIwM0YgLyogQXN5bmNSZXF1ZXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFzeW5jUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTVFNzcyOTE4NDAwOEI5MDAwNzIwM0YgLyogRGF0YWJhc2VQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERhdGFiYXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxNUU3NzJBMTg0MDA4QjkwMDA3MjAzRiAvKiBEYXRhYmFzZVByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTUxNUU3NzJEMTg0MDE1ODAwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlxdWVJREJEYXRhYmFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNUU3NzJFMTg0MDE1ODAwMDA3
MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVbmlxdWVJREJEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
MTVFNzczMTE4NDAyRDUxMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuaXF1ZUlEQkRhdGFiYXNl
SWRlbnRpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNUU3NzMyMTg0
MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjBCRkUwMTMzODFERjkwMDkxODk5OSAvKiBM
b2dnaW5nRm91bmRhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IExvZ2dpbmdGb3VuZGF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTYzMTE4NjE4NTg0NDY2MDA1MzQ2NDcgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2MzE5OTExNjI4OTgwQTAwRTIyRjAwIC8qIE5ldHdv
cmtQcm9jZXNzUHJveHlNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5TWFjLm1tOyBwYXRoID0gbWFjL05ldHdvcmtQcm9jZXNz
UHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDE4LDExICs1NDE4
LDExIEBACiAJCQkJNTE3NTA5NTkxODk3MjQ5NzAwNDA4RkFDIC8qIElEQklkZW50aWZpZXIuaCAq
LywKIAkJCQk1MTgzNTNEODE4ODVCRjhDMDBEOUZFNDQgLyogSURCU2VyaWFsaXphdGlvbi5jcHAg
Ki8sCiAJCQkJNTE4MzUzRDkxODg1QkY4QzAwRDlGRTQ0IC8qIElEQlNlcmlhbGl6YXRpb24uaCAq
LywKLQkJCQk1MTVFNzcyRDE4NDAxNTgwMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2UuY3Bw
ICovLAotCQkJCTUxNUU3NzJFMTg0MDE1ODAwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZS5o
ICovLAorCQkJCTUxMDUyMzdCMUM3NTQxRjMwMDc5OTNDQiAvKiBMZWdhY3lVbmlxdWVJREJEYXRh
YmFzZS5jcHAgKi8sCisJCQkJNTEwNTIzN0MxQzc1NDFGMzAwNzk5M0NCIC8qIExlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlLmggKi8sCisJCQkJNTEwNTIzN0QxQzc1NDFGMzAwNzk5M0NCIC8qIExlZ2Fj
eVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAgKi8sCisJCQkJNTEwNTIzN0UxQzc1NDFG
MzAwNzk5M0NCIC8qIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oICovLAogCQkJ
CTUxNjU0RUZGMTg0RUYzNEEwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZS5oICovLAotCQkJCTUxNUU3NzMxMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFz
ZUlkZW50aWZpZXIuY3BwICovLAotCQkJCTUxNUU3NzMyMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlx
dWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCAqLywKIAkJCQk1MTA1MjM2RDFDNzM5M0U5MDA3OTkz
Q0IgLyogV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcCAqLywKIAkJCQk1MTA1MjM2RTFDNzM5
M0U5MDA3OTkzQ0IgLyogV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50LmggKi8sCiAJCQkJNTEwNTIz
NzYxQzczRDlGNjAwNzk5M0NCIC8qIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudC5tZXNzYWdlcy5p
biAqLywKQEAgLTczNTEsOSArNzM1MSwxMSBAQAogCQkJCTUxMjkzNUU0MTI4OEQ5NzgwMEE0QjY5
NSAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTFFRTUzRTMxMUY4Q0ZDMDAwQ0NCRUU0IC8qIEluamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNEUxMEExMjBCOTA1RTAwODI2QzBDIC8q
IEluamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxMDUy
MzgyMUM3NTQxRkYwMDc5OTNDQiAvKiBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk5MEQyOEMxMUM2NTYyNjUwMDk4Njk3NyAvKiBXZWJBdXRv
bWF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1QzY2QTExMzRCOUQzODAwNEZF
MkE4IC8qIEluamVjdGVkQnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQThDNkE5MTFFM0JBNUYwMDgxMkZCNyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VMb2Fk
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxMDUyMzgwMUM3NTQxRkYwMDc5OTNDQiAv
KiBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4MTQ3QTkx
MkY2NENEQTAwN0IyQzMyIC8qIEluamVjdGVkQnVuZGxlUGFnZVBvbGljeUNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNBOEM2QjAxMUUzQzA4NzAwODEyRkI3IC8qIEluamVjdGVkQnVuZGxl
UGFnZVVJQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMzRTBEMTEyNDA4RTg2MDAzNjBG
M0YgLyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NTQ3
LDEwICs3NTQ5LDggQEAKIAkJCQkxQUYwNUQ4NzE0Njg4MzQ4MDA4QjFFODEgLyogVGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGRTQzNjYx
OEI2QzA4MTAwOUM3QTQ4IC8qIFVJRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFRTRB
RTJCMUE1RENGNDMwMDAyRjQ5QiAvKiBVSUtpdFNQSS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE1
RTc3MzAxODQwMTU4MDAwMDcyMDNGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTY1NEYwMDE4NEVGMzRBMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNjU0RUZFMTg0RUYzM0YwMDdEQzgzNyAv
KiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNTE1RTc3MzQxODQwMkQ1MTAwMDcyMDNGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2NDI0NUUxMkRFMjlBMTAwQ0FBRTJDIC8qIFVwZGF0
ZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzEzMzY4MTg1NjVCNTcwMEYzRUMwNSAvKiBV
c2VyRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEEzQ0MxOEIxOUIwNjQwRjAwRDE0QUVGIC8q
IFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLywK
QEAgLTg4MjMsNiArODgyMyw3IEBACiAJCQkJQzBFM0FBN0IxMjA5RTgzNTAwQTQ5RDAxIC8qIE1v
ZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMEUzQUE3QTEyMDlFODMwMDBBNDlEMDEgLyog
TW9kdWxlQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ1MDM2NUUxQkNDNzkzRjAwRTIwQkIz
IC8qIE5hdGl2ZVdlYkdlc3R1cmVFdmVudE1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxMDUy
MzgxMUM3NTQxRkYwMDc5OTNDQiAvKiBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRBOTQ0OUUxODg0RTRGMDAwRUQ4NkRCIC8qIE5hdGl2
ZVdlYktleWJvYXJkRXZlbnRJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMDJCRkYxRTEyNTE1
MDJFMDA5Q0NCRUEgLyogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudE1hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTMxRUEyNUQyMTM0Rjc4QzAwMDVCMTQ1MiAvKiBOYXRpdmVXZWJNb3VzZUV2ZW50TWFj
Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC04ODMyLDYgKzg4MzMsNyBAQAogCQkJCTFBQkMzREY1MTg5
OUU0MzcwMDRGMDYyNiAvKiBOYXZpZ2F0aW9uU3RhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QTZGQkEyQjExRTY4NjI3MDBEQjEzNzEgLyogTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUE2RkJEMjkxMUU2OUJDMjAwREIxMzcxIC8qIE5ldHNjYXBlUGx1Z2lu
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMDUyMzdGMUM3NTQxRkYwMDc5OTNDQiAvKiBMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUU1QjdGQjExRTdB
RUQyMDBCQTY3NjcgLyogTmV0c2NhcGVQbHVnaW5NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QTRBOUM1NTEyQjgxNkNGMDA4RkU5ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUE0QTlDOUExMkI4MjFDRDAwOEZFOTg0IC8qIE5ldHNjYXBlUGx1Z2lu
TW9kdWxlTWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC05MDE1LDkgKzkwMTcsNyBAQAogCQkJCTFB
QUYyNjM4MTQ2ODdDMzkwMDRBMUU4QSAvKiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTFBRjA1RDg2MTQ2ODgzNDgwMDhCMUU4MSAvKiBUaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGRTQz
NjUxOEI2QzA4MTAwOUM3QTQ4IC8qIFVJRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKLQkJCQk1
MTVFNzcyRjE4NDAxNTgwMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTE2NTRFRkQxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlU1FMaXRlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxNUU3NzMzMTg0MDJE
NTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUE2NDI0NUYxMkRFMjlBMTAwQ0FBRTJDIC8qIFVwZGF0ZUluZm8uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFDMTMzNjcxODU2NUI1NzAwRjNFQzA1IC8qIFVzZXJEYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE1NzM5QkJDMUI0MjA0MDMwMEQyNThDMSAvKiBVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>