<?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>26698</bug_id>
          
          <creation_ts>2009-06-24 17:34:50 -0700</creation_ts>
          <short_desc>Combined LocalStorageArea and SessionStorageArea into StorageArea</short_desc>
          <delta_ts>2009-06-25 14:33:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>25376</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>michaeln</cc>
    
    <cc>playmobil</cc>
    
    <cc>sam</cc>
    
    <cc>yael</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>128041</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-24 17:34:50 -0700</bug_when>
    <thetext>Combined LocalStorageArea and SessionStorageArea into StorageArea since (after my other refactorings) there are no longer substantial differences between the two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128057</commentid>
    <comment_count>1</comment_count>
      <attachid>31823</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-24 18:28:49 -0700</bug_when>
    <thetext>Created attachment 31823
patch v1

Combined LocalStorageArea and SessionStorageArea into StorageArea since (after my other refactorings) there are no longer substantial differences between the two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128059</commentid>
    <comment_count>2</comment_count>
      <attachid>31824</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-24 18:31:17 -0700</bug_when>
    <thetext>Created attachment 31824
patch v2

oops.  Fix extra return in the change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128098</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-06-24 23:17:09 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/45144</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128124</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-25 01:20:14 -0700</bug_when>
    <thetext>Reverted as:
Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/GNUmakefile.am
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/WebCoreSources.bkl
	M	WebCore/storage/LocalStorage.cpp
	M	WebCore/storage/LocalStorage.h
	M	WebCore/storage/SessionStorage.cpp
	M	WebCore/storage/SessionStorage.h
	M	WebCore/storage/StorageArea.cpp
	M	WebCore/storage/StorageArea.h
	M	WebCore/storage/StorageAreaSync.cpp
	M	WebCore/storage/StorageAreaSync.h
	M	WebCore/storage/StorageSyncManager.h
Committed r45162

Broke 18 layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128127</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-25 01:27:52 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/storage/LocalStorageArea.cpp
	A	WebCore/storage/LocalStorageArea.h
	A	WebCore/storage/SessionStorageArea.cpp
	A	WebCore/storage/SessionStorageArea.h
Committed r45165
http://trac.webkit.org/changeset/45165</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128130</commentid>
    <comment_count>6</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-25 01:41:15 -0700</bug_when>
    <thetext>Must have forgotten to run the layout tests before submitting the patch.  Sorry guys.  :-(

I think the change is a one liner.  Will send a new patch tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128233</commentid>
    <comment_count>7</comment_count>
      <attachid>31869</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-25 12:09:32 -0700</bug_when>
    <thetext>Created attachment 31869
patch v3

Rebuilt on HEAD and ran all layout tests again to make sure I don&apos;t break the build again.

Only change is in StorageArea&apos;s constructor for SessionStorage.  Instead of passing in a StorageArea pointer (that could be NULL dereferenced), I pass in a storageMap PassRefPtr (or 0 when it&apos;s not a clone).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128244</commentid>
    <comment_count>8</comment_count>
      <attachid>31869</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-06-25 12:53:24 -0700</bug_when>
    <thetext>Comment on attachment 31869
patch v3

&gt; Index: WebCore/storage/StorageArea.cpp
...
&gt; +PassRefPtr&lt;StorageArea&gt; StorageArea::createLocalStorage(SecurityOrigin* origin, PassRefPtr&lt;StorageSyncManager&gt; syncManager)
...
&gt; +StorageArea::StorageArea(SecurityOrigin* origin, PassRefPtr&lt;StorageSyncManager&gt; syncManager)
...
&gt; +PassRefPtr&lt;StorageArea&gt; StorageArea::createSessionStorage(SecurityOrigin* origin, Page* page)
...
&gt; +PassRefPtr&lt;StorageArea&gt; StorageArea::copy(SecurityOrigin* origin, Page* page)
...
&gt; +StorageArea::StorageArea(SecurityOrigin* origin, Page* page, PassRefPtr&lt;StorageMap&gt; storageMap)

stylistic nit: it is usually good to make the order of the methods in the .cpp file match the
order in which the methods are declared in the .h file.  maybe you can fix this up in a follow
up patch.

still, r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31823</attachid>
            <date>2009-06-24 18:28:49 -0700</date>
            <delta_ts>2009-06-24 18:31:17 -0700</delta_ts>
            <desc>patch v1</desc>
            <filename>4.20090624.patch</filename>
            <type>text/plain</type>
            <size>40488</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTEyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDkgKzEsNTUgQEAKKzIwMDktMDYtMjQgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2Njk4CisKKyAgICAgICAg
Q29tYmluZWQgTG9jYWxTdG9yYWdlQXJlYSBhbmQgU2Vzc2lvblN0b3JhZ2VBcmVhIGludG8gU3Rv
cmFnZUFyZWEgc2luY2UKKyAgICAgICAgKGFmdGVyIG15IG90aGVyIHJlZmFjdG9yaW5ncykgdGhl
cmUgYXJlIG5vIGxvbmdlciBzdWJzdGFudGlhbAorICAgICAgICBkaWZmZXJlbmNlcyBiZXR3ZWVu
IHRoZSB0d28uCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAgICAqIHN0
b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZTo6
c3RvcmFnZUFyZWEpOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlLmg6CisgICAgICAg
ICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9y
YWdlL0xvY2FsU3RvcmFnZUFyZWEuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1Nlc3Np
b25TdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlc3Npb25TdG9yYWdlOjpjb3B5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNlc3Npb25TdG9yYWdlOjpzdG9yYWdlQXJlYSk6CisgICAgICAg
ICogc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oOgorICAgICAgICAqIHN0b3JhZ2UvU2Vzc2lvblN0
b3JhZ2VBcmVhLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1Nlc3Npb25TdG9yYWdl
QXJlYS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OmNyZWF0ZUxvY2FsU3RvcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZUFyZWE6OmNyZWF0ZVNlc3Npb25TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpzZXRJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
QXJlYTo6c2NoZWR1bGVGaW5hbFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6
OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJl
YTo6ZGlzcGF0Y2hTdG9yYWdlRXZlbnQpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEu
aDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlQXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlRmluYWxTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VB
cmVhU3luYy5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmg6CisKIDIw
MDktMDYtMjQgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZp
eCBhbGwgYnVpbGRzLgogCiAgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0Zhc3RBbGxv
Y0Jhc2UuaDogQWRkZWQuCiAKKwogMjAwOS0wNi0yNCAgSmVyZW15IE9ybG93ICA8am9ybG93QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUu
YW0JKHJldmlzaW9uIDQ1MTI4KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBj
b3B5KQpAQCAtMjA4NywxNiArMjA4NywxMiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZS5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaCBcCi0JV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwIFwKLQlXZWJDb3JlL3N0b3JhZ2UvTG9j
YWxTdG9yYWdlQXJlYS5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAg
XAogCVdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmggXAogCVdlYkNvcmUvc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdl
VGhyZWFkLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5jcHAgXAogCVdlYkNv
cmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oIFwKLQlXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0
b3JhZ2VBcmVhLmNwcCBcCi0JV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5oIFwK
IAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
LmggXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAgXApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5i
a2wJKHJldmlzaW9uIDQ1MTI4KQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtp
bmcgY29weSkKQEAgLTEwMTEsNyArMTAxMSw2IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlz
dCBvZiBmaWxlcyBuZWUKICAgICAgICAgc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAKICAgICAg
ICAgc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCiAgICAgICAgIHN0b3JhZ2UvTG9jYWxTdG9y
YWdlLmNwcAotICAgICAgICBzdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCiAgICAgICAgIHN0
b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKICAgICAgICAgc3RvcmFnZS9Mb2NhbFN0b3JhZ2VU
aHJlYWQuY3BwCiAgICAgICAgIHN0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcApAQCAtMTAy
NSw3ICsxMDI0LDYgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZQog
ICAgICAgICBzdG9yYWdlL1N0b3JhZ2VFdmVudC5jcHAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdl
TWFwLmNwcAogICAgICAgICBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNwcAotICAgICAgICBzdG9y
YWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5jcHAKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYVN5
bmMuY3BwCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAogICAgIDwvc2V0
PgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0NTEy
OCkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTI5OTk1LDE0ICsyOTk5NSw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcTG9jYWxTdG9yYWdlQXJlYS5jcHAiDQot
CQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9y
YWdlXExvY2FsU3RvcmFnZUFyZWEuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0K
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcTG9jYWxTdG9yYWdlVGFzay5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzAwNDMsMTQgKzMwMDM1LDYgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTZXNzaW9uU3Rv
cmFnZUFyZWEuY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3RvcmFnZVxTZXNzaW9uU3RvcmFnZUFyZWEuaCINCi0JCQkJPg0KLQkJCTwv
RmlsZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMQ2FsbGJh
Y2suaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDUxMjgpCisrKyBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzc2LDEwICs3NzYs
NiBAQAogCQk1MTQxODVFRjBDRDY1RjA0MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0MTg1
RUQwQ0Q2NUYwNDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCAqLzsgfTsKIAkJ
NTE0QjNGNzMwQzcyMjA0NzAwMDUzMERGIC8qIEZpbGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEIzRjcyMEM3MjIwNDcwMDA1MzBERiAv
KiBGaWxlU3lzdGVtLmggKi87IH07CiAJCTUxNEIzRjc2MEM3MjIwNTUwMDA1MzBERiAvKiBGaWxl
U3lzdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE0QjNGNzUwQzcyMjA1NTAwMDUzMERGIC8qIEZpbGVTeXN0ZW1NYWMubW0gKi87IH07Ci0J
CTUxNEI0OURCMERCNkQ2QUQwMDFDMzc3MCAvKiBMb2NhbFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRCNDlEOTBEQjZENkFEMDAx
QzM3NzAgLyogTG9jYWxTdG9yYWdlQXJlYS5oICovOyB9OwotCQk1MTRCNDlEQzBEQjZENkFEMDAx
QzM3NzAgLyogTG9jYWxTdG9yYWdlQXJlYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRCNDlEQTBEQjZENkFEMDAxQzM3NzAgLyogTG9jYWxTdG9y
YWdlQXJlYS5jcHAgKi87IH07Ci0JCTUxNEI0OURGMERCNkQ2QjYwMDFDMzc3MCAvKiBTZXNzaW9u
U3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNEI0OUREMERCNkQ2QjYwMDFDMzc3MCAvKiBTZXNzaW9uU3RvcmFnZUFyZWEuaCAqLzsg
fTsKLQkJNTE0QjQ5RTAwREI2RDZCNjAwMUMzNzcwIC8qIFNlc3Npb25TdG9yYWdlQXJlYS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRCNDlERTBE
QjZENkI2MDAxQzM3NzAgLyogU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcCAqLzsgfTsKIAkJNTE0Qzc2
MzcwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2MzUwQ0U5MjI1RTAwN0VGM0NEIC8qIEpT
U1FMRXJyb3IuY3BwICovOyB9OwogCQk1MTRDNzYzODBDRTkyMjVFMDA3RUYzQ0QgLyogSlNTUUxU
cmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTRDNzYzNjBDRTkyMjVFMDA3RUYzQ0QgLyogSlNTUUxUcmFuc2FjdGlvbi5jcHAgKi87
IH07CiAJCTUxNEM3NjRDMENFOTIzNEUwMDdFRjNDRCAvKiBBdXRoZW50aWNhdGlvbk1hYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NDIwQ0U5
MjM0RTAwN0VGM0NEIC8qIEF1dGhlbnRpY2F0aW9uTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU3MzYsMTAgKzU3MzIsNiBAQAogCQk1MTQx
ODVFRDBDRDY1RjA0MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRCM0Y3MjBDNzIyMDQ3MDAwNTMwREYgLyog
RmlsZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlU3lzdGVt
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNEIzRjc1MEM3MjIwNTUwMDA1MzBE
RiAvKiBGaWxlU3lzdGVtTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gRmlsZVN5c3RlbU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE0
QjQ5RDkwREI2RDZBRDAwMUMzNzcwIC8qIExvY2FsU3RvcmFnZUFyZWEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxTdG9yYWdlQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MTRCNDlEQTBEQjZENkFEMDAxQzM3NzAgLyogTG9jYWxTdG9yYWdlQXJl
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NhbFN0b3JhZ2VB
cmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE0QjQ5REQwREI2RDZCNjAw
MUMzNzcwIC8qIFNlc3Npb25TdG9yYWdlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTZXNzaW9uU3RvcmFnZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNTE0QjQ5REUwREI2RDZCNjAwMUMzNzcwIC8qIFNlc3Npb25TdG9yYWdlQXJlYS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXNzaW9uU3RvcmFnZUFyZWEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRDNzYzNTBDRTkyMjVFMDA3RUYzQ0Qg
LyogSlNTUUxFcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1NRTEVycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0Qzc2MzYwQ0U5
MjI1RTAwN0VGM0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTUUxUcmFuc2FjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxNEM3NjQyMENFOTIzNEUwMDdFRjNDRCAvKiBBdXRoZW50aWNhdGlvbk1h
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXRoZW50aWNhdGlvbk1hYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTY4Miw4ICs5Njc0LDYgQEAKIAkJCQk1
MUZBRkUzMzBDRUNCRjJEMDBCQjNGMjQgLyogRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi8sCiAJ
CQkJNTFCRTM4MjYwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5jcHAgKi8sCiAJCQkJ
NTFCRTM4MjcwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5oICovLAotCQkJCTUxNEI0
OURBMERCNkQ2QUQwMDFDMzc3MCAvKiBMb2NhbFN0b3JhZ2VBcmVhLmNwcCAqLywKLQkJCQk1MTRC
NDlEOTBEQjZENkFEMDAxQzM3NzAgLyogTG9jYWxTdG9yYWdlQXJlYS5oICovLAogCQkJCTUxMUYy
MzEzMERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUYXNrLmNwcCAqLywKIAkJCQk1MTFG
MjMxNDBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGFzay5oICovLAogCQkJCTUxMUYy
MzE1MERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUaHJlYWQuY3BwICovLApAQCAtOTcx
MSw4ICs5NzAxLDYgQEAKIAkJCQkxQTdDQ0IxODBDRDk0NjlBMDBCN0I2NEUgLyogU1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrLmggKi8sCiAJCQkJNTFFMEJCMjIwREE1NzJBNjAwQTlFNDE3IC8q
IFNlc3Npb25TdG9yYWdlLmNwcCAqLywKIAkJCQk1MUUwQkIyMTBEQTU3MkE2MDBBOUU0MTcgLyog
U2Vzc2lvblN0b3JhZ2UuaCAqLywKLQkJCQk1MTRCNDlERTBEQjZENkI2MDAxQzM3NzAgLyogU2Vz
c2lvblN0b3JhZ2VBcmVhLmNwcCAqLywKLQkJCQk1MTRCNDlERDBEQjZENkI2MDAxQzM3NzAgLyog
U2Vzc2lvblN0b3JhZ2VBcmVhLmggKi8sCiAJCQkJNTFFM0Y5QzUwREEwNTlEQzAwMjUwOTExIC8q
IFN0b3JhZ2UuY3BwICovLAogCQkJCTUxRTNGOUM0MERBMDU5REMwMDI1MDkxMSAvKiBTdG9yYWdl
LmggKi8sCiAJCQkJNTFFM0Y5RDEwREEwNUQ3MTAwMjUwOTExIC8qIFN0b3JhZ2UuaWRsICovLApA
QCAtMTYxODQsNyArMTYxNzIsNiBAQAogCQkJCTY1NkQzNzMyMEFEQkE1REUwMEE0NTU0RCAvKiBM
b2FkZXJOU1VSTEV4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDZFODFFRDcwQUI1RDVFOTAw
Qzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTFCRTM4MjkwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTE0QjQ5REIwREI2RDZBRDAwMUMzNzcwIC8qIExvY2FsU3RvcmFnZUFyZWEuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxMUYyMzE4MERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3Jh
Z2VUYXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTFGMjMxQTBEQzE2MERBMDA0RjAwMzIgLyog
TG9jYWxTdG9yYWdlVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzUyMDdCRTA5QkQ0MTBB
MDBGMjAzOEQgLyogTG9jYWxpemVkU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjYyNCw3
ICsxNjYxMSw2IEBACiAJCQkJOTMzMDlFMEUwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlvbkNv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAv
KiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUUwQkIyMzBEQTU3MkE2
MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNEI0OURG
MERCNkQ2QjYwMDFDMzc3MCAvKiBTZXNzaW9uU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzMzA5RTEwMDk5RTY0OTIwMDU2RTU4MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5NEYwODI0NUU1OTAwMUU5QUJDIC8qIFNldHRpbmdz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjhDNDBFODIwMzFCMDBCMjU5NjUgLyogU2hhZG93
RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODI2OSw3ICsxODI1NSw2IEBACiAJCQkJNjU2RDM3
MzMwQURCQTVERTAwQTQ1NTREIC8qIExvYWRlck5TVVJMRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDZFODFFRUMwQUI1REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29u
dGV4dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxQkUzODI4MERBRUY3REEwMDEwODVGQyAvKiBM
b2NhbFN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE0QjQ5REMwREI2RDZBRDAwMUMz
NzcwIC8qIExvY2FsU3RvcmFnZUFyZWEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRjIzMTcw
REMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRhc2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTExRjIzMTkwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRocmVhZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5MzUyMDdDMDA5QkQ0MTIxMDBGMjAzOEQgLyogTG9jYWxpemVkU3Ry
aW5nc01hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtMTg2NzAsNyArMTg2NTUsNiBAQAogCQkJCTRB
OEM5NkVCMEJFNjkwMzIwMDRFRUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM3RkE2ODIwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFMEJCMjQwREE1NzJBNjAwQTlFNDE3IC8qIFNl
c3Npb25TdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxNEI0OUUwMERCNkQ2QjYwMDFD
Mzc3MCAvKiBTZXNzaW9uU3RvcmFnZUFyZWEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
MEYwOTlFNjQ5MjAwNTZFNTgxIC8qIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0QzlBNUVBMEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzVFQjhDMzBFODIwMzFCMDBCMjU5NjUgLyogU2hhZG93RGF0YS5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCShyZXZpc2lv
biA0NTEyOCkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdl
QXJlYS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNs
dWRlICJTdG9yYWdlQXJlYS5oIgpAQCAtOTAsMTEgKzg5LDExIEBAIFBhc3NSZWZQdHI8U3RvcmFn
ZUFyZWE+IExvY2FsU3RvcmFnZTo6c3QKICAgICAvLyBGSVhNRTogSWYgdGhlIHN0b3JhZ2UgYXJl
YSBpcyBiZWluZyBlc3RhYmxpc2hlZCBmb3IgdGhlIGZpcnN0IHRpbWUgaGVyZSwgd2UgbmVlZCB0
byAKICAgICAvLyBzeW5jIGl0cyBleGlzdGFuY2UgYW5kIHF1b3RhIG91dCB0byBkaXNrIHZpYSBh
biB0YXNrIG9mIHR5cGUgQXJlYVN5bmMKIAotICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBz
dG9yYWdlQXJlYTsKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhOwogICAgIGlm
IChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCiAgICAgICAgIHJl
dHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CiAKLSAgICBzdG9yYWdlQXJlYSA9IExvY2FsU3Rv
cmFnZUFyZWE6OmNyZWF0ZShvcmlnaW4sIG1fc3luY01hbmFnZXIpOworICAgIHN0b3JhZ2VBcmVh
ID0gU3RvcmFnZUFyZWE6OmNyZWF0ZUxvY2FsU3RvcmFnZShvcmlnaW4sIG1fc3luY01hbmFnZXIp
OwogICAgIG1fc3RvcmFnZUFyZWFNYXAuc2V0KG9yaWdpbiwgc3RvcmFnZUFyZWEpOwogICAgIHJl
dHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9j
YWxTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5o
CShyZXZpc2lvbiA0NTEyOCkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQog
Ci0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
SGFzaC5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTUyLDcgKzUxLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIExvY2FsU3RvcmFnZShjb25z
dCBTdHJpbmcmIHBhdGgpOwogCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+LCBSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4g
TG9jYWxTdG9yYWdlQXJlYU1hcDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gTG9j
YWxTdG9yYWdlQXJlYU1hcDsKICAgICAgICAgTG9jYWxTdG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VB
cmVhTWFwOwogCiAgICAgICAgIFN0cmluZyBtX3BhdGg7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlQXJlYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2Fs
U3RvcmFnZUFyZWEuY3BwCShyZXZpc2lvbiA0NTEyOCkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgotCi0jaWYgRU5BQkxFKERP
TV9TVE9SQUdFKQotCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5o
IgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5o
IgotI2luY2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5o
IgotI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLVBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gTG9jYWxTdG9yYWdlQXJlYTo6Y3JlYXRl
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBz
eW5jTWFuYWdlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZUFyZWEo
b3JpZ2luLCBzeW5jTWFuYWdlcikpOwotfQotCi1Mb2NhbFN0b3JhZ2VBcmVhOjpMb2NhbFN0b3Jh
Z2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5h
Z2VyPiBzeW5jTWFuYWdlcikKLSAgICA6IFN0b3JhZ2VBcmVhKG9yaWdpbikKLSAgICAsIG1fc3Rv
cmFnZUFyZWFTeW5jKFN0b3JhZ2VBcmVhU3luYzo6Y3JlYXRlKHN5bmNNYW5hZ2VyLCB0aGlzKSkK
LSAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKHN5bmNNYW5hZ2VyKQotewotfQotCi12b2lkIExv
Y2FsU3RvcmFnZUFyZWE6OnNjaGVkdWxlRmluYWxTeW5jKCkKLXsKLSAgICBtX3N0b3JhZ2VBcmVh
U3luYy0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpp
dGVtQ2hhbmdlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29u
c3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQotewotICAgIG1fc3RvcmFn
ZUFyZWFTeW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwgbmV3VmFsdWUpOwotICAgIGRpc3Bh
dGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFtZSk7Ci19
Ci0KLXZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6aXRlbVJlbW92ZWQoY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKLXsKLSAgICBtX3N0
b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIFN0cmluZygpKTsKLSAgICBk
aXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgc291cmNlRnJhbWUp
OwotfQotCi12b2lkIExvY2FsU3RvcmFnZUFyZWE6OmFyZWFDbGVhcmVkKEZyYW1lKiBzb3VyY2VG
cmFtZSkKLXsKLSAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOwotICAgIGRp
c3BhdGNoU3RvcmFnZUV2ZW50KFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCksIHNvdXJjZUZy
YW1lKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpibG9ja1VudGlsSW1wb3J0Q29tcGxl
dGUoKSBjb25zdAotewotICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5ibG9ja1VudGlsSW1wb3J0Q29t
cGxldGUoKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVu
dChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5n
JiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0KLSAgICBQYWdlKiBwYWdlID0gc291cmNlRnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAo
IXBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE5lZWQgdG8gY29weSBhbGwgcmVsZXZh
bnQgZnJhbWVzIGZyb20gZXZlcnkgcGFnZSB0byBhIHZlY3Rvciwgc2luY2Ugc2VuZGluZyB0aGUg
ZXZlbnQgdG8gb25lIGZyYW1lIG1pZ2h0IG11dGF0ZSB0aGUgZnJhbWUgdHJlZQotICAgIC8vIG9m
IGFueSBnaXZlbiBwYWdlIGluIHRoZSBncm91cCwgb3IgbXV0YXRlIHRoZSBwYWdlIGdyb3VwIGl0
c2VsZgotICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+ID4gZnJhbWVzOwotICAgIGNvbnN0IEhhc2hT
ZXQ8UGFnZSo+JiBwYWdlcyA9IHBhZ2UtPmdyb3VwKCkucGFnZXMoKTsKLSAgICAKLSAgICBIYXNo
U2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFnZXMuZW5kKCk7Ci0gICAgZm9yIChI
YXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0KS0+bWFpbkZyYW1l
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNl
Y3VyaXR5T3JpZ2luKCkpKQotICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZnJhbWUpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5z
aXplKCk7ICsraSkKLSAgICAgICAgZnJhbWVzW2ldLT5kb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRv
d0V2ZW50KFN0b3JhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGtl
eSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRV
UkkoKSwgc291cmNlRnJhbWUtPmRvbVdpbmRvdygpLCBmcmFtZXNbaV0tPmRvbVdpbmRvdygpLT5s
b2NhbFN0b3JhZ2UoKSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoRE9NX1NUT1JBR0UpCi0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEu
aAkocmV2aXNpb24gNDUxMjgpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMb2NhbFN0b3JhZ2VBcmVhX2gK
LSNkZWZpbmUgTG9jYWxTdG9yYWdlQXJlYV9oCi0KLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0K
LSNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0g
ICAgY2xhc3MgU3RvcmFnZUFyZWFTeW5jOwotICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsK
LSAgICAKLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2VBcmVhIDogcHVibGljIFN0b3JhZ2VBcmVhIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+
IGNyZWF0ZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFu
YWdlcj4gc3luY01hbmFnZXIpOwotCi0gICAgICAgIHZvaWQgc2NoZWR1bGVGaW5hbFN5bmMoKTsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIExvY2FsU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4q
LCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpOwotCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBpdGVtQ2hhbmdlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1SZW1vdmVkKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIG9sZFZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgYXJlYUNsZWFyZWQoRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgZGlz
cGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFs
dWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0KLSAgICAg
ICAgUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gbV9zdG9yYWdlQXJlYVN5bmM7Ci0gICAgICAgIFJl
ZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3RvcmFnZVN5bmNNYW5hZ2VyOwotICAgIH07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkK
LQotI2VuZGlmIC8vIExvY2FsU3RvcmFnZUFyZWFfaApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nl
c3Npb25TdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0
b3JhZ2UuY3BwCShyZXZpc2lvbiA0NTEyOCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3Rv
cmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgUGFzc1JlZlB0cjxTZXNz
aW9uU3RvcmFnZT4gU2Vzc2lvblN0b3JhZwogICAgIAogICAgIFNlc3Npb25TdG9yYWdlQXJlYU1h
cDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFNlc3Np
b25TdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaSA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsg
aSAhPSBlbmQ7ICsraSkgewotICAgICAgICBSZWZQdHI8U2Vzc2lvblN0b3JhZ2VBcmVhPiBhcmVh
Q29weSA9IGktPnNlY29uZC0+Y29weShpLT5maXJzdC5nZXQoKSwgbmV3UGFnZSk7CisgICAgICAg
IFJlZlB0cjxTdG9yYWdlQXJlYT4gYXJlYUNvcHkgPSBpLT5zZWNvbmQtPmNvcHkoaS0+Zmlyc3Qu
Z2V0KCksIG5ld1BhZ2UpOwogICAgICAgICBuZXdTZXNzaW9uLT5tX3N0b3JhZ2VBcmVhTWFwLnNl
dChpLT5maXJzdCwgYXJlYUNvcHkucmVsZWFzZSgpKTsKICAgICB9CiAgICAgCkBAIC02NSwxMSAr
NjUsMTEgQEAgUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZT4gU2Vzc2lvblN0b3JhZwogCiBQYXNz
UmVmUHRyPFN0b3JhZ2VBcmVhPiBTZXNzaW9uU3RvcmFnZTo6c3RvcmFnZUFyZWEoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbikKIHsKLSAgICBSZWZQdHI8U2Vzc2lvblN0b3JhZ2VBcmVhPiBzdG9yYWdl
QXJlYTsKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhOwogICAgIGlmIChzdG9y
YWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCiAgICAgICAgIHJldHVybiBz
dG9yYWdlQXJlYS5yZWxlYXNlKCk7CiAgICAgICAgIAotICAgIHN0b3JhZ2VBcmVhID0gU2Vzc2lv
blN0b3JhZ2VBcmVhOjpjcmVhdGUob3JpZ2luLCBtX3BhZ2UpOworICAgIHN0b3JhZ2VBcmVhID0g
U3RvcmFnZUFyZWE6OmNyZWF0ZVNlc3Npb25TdG9yYWdlKG9yaWdpbiwgbV9wYWdlKTsKICAgICBt
X3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKICAgICByZXR1cm4gc3Rv
cmFnZUFyZWEucmVsZWFzZSgpOwogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9y
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmgJKHJl
dmlzaW9uIDQ1MTI4KQorKysgV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKLSNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZUFy
ZWEuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgUGFnZSogbV9wYWdlOwogICAgICAgICAKLSAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTZXNzaW9uU3Rv
cmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IFNlc3Npb25TdG9yYWdlQXJlYU1hcDsKKyAg
ICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9y
YWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gU2Vzc2lvblN0b3JhZ2VBcmVhTWFwOwogICAg
ICAgICBTZXNzaW9uU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKICAgICB9OwogCklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcAkocmV2aXNpb24gNDUxMjgp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZUFy
ZWEuaCIKLQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLQotI2luY2x1ZGUgIkRPTVdpbmRvdy5o
IgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lVHJlZS5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiUGFnZS5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKLSNpbmNsdWRlICJTdG9yYWdlRXZlbnQuaCIKLSNpbmNsdWRlICJTdG9yYWdlTWFwLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZUFyZWE+IFNl
c3Npb25TdG9yYWdlQXJlYTo6Y29weShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYWdlKiBwYWdl
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Vzc2lvblN0b3JhZ2VBcmVhKG9yaWdpbiwg
cGFnZSwgdGhpcykpOwotfQotCi1TZXNzaW9uU3RvcmFnZUFyZWE6OlNlc3Npb25TdG9yYWdlQXJl
YShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYWdlKiBwYWdlKQotICAgIDogU3RvcmFnZUFyZWEo
b3JpZ2luKQotICAgICwgbV9wYWdlKHBhZ2UpCi17Ci0gICAgQVNTRVJUKHBhZ2UpOwotfQotCi1T
ZXNzaW9uU3RvcmFnZUFyZWE6OlNlc3Npb25TdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3Jp
Z2luLCBQYWdlKiBwYWdlLCBTZXNzaW9uU3RvcmFnZUFyZWEqIGFyZWEpCi0gICAgOiBTdG9yYWdl
QXJlYShvcmlnaW4sIGFyZWEpCi0gICAgLCBtX3BhZ2UocGFnZSkKLXsKLSAgICBBU1NFUlQocGFn
ZSk7Ci19Ci0KLXZvaWQgU2Vzc2lvblN0b3JhZ2VBcmVhOjppdGVtQ2hhbmdlZChjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwg
RnJhbWUqIHNvdXJjZUZyYW1lKQotewotICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xk
VmFsdWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFtZSk7Ci19Ci0KLXZvaWQgU2Vzc2lvblN0b3JhZ2VB
cmVhOjppdGVtUmVtb3ZlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1
ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQotewotICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwg
b2xkVmFsdWUsIFN0cmluZygpLCBzb3VyY2VGcmFtZSk7Ci19Ci0KLXZvaWQgU2Vzc2lvblN0b3Jh
Z2VBcmVhOjphcmVhQ2xlYXJlZChGcmFtZSogc291cmNlRnJhbWUpCi17Ci0gICAgZGlzcGF0Y2hT
dG9yYWdlRXZlbnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgc291cmNlRnJhbWUpOwot
fQotCi12b2lkIFNlc3Npb25TdG9yYWdlQXJlYTo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkg
Y29uc3QKLXsKLX0KLQotdm9pZCBTZXNzaW9uU3RvcmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZUV2
ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJp
bmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCi17Ci0gICAgLy8gRm9yIFNlc3Npb25T
dG9yYWdlIGV2ZW50cywgZWFjaCBmcmFtZSBpbiB0aGUgcGFnZSdzIGZyYW1ldHJlZSB3aXRoIHRo
ZSBzYW1lIG9yaWdpbiBhcyB0aGlzIFN0b3JhZ2VBcmVhIG5lZWRzIHRvIGJlIG5vdGlmaWVkIG9m
IHRoZSBjaGFuZ2UKLSAgICBWZWN0b3I8UmVmUHRyPEZyYW1lPiA+IGZyYW1lczsKLSAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCi0gICAgICAgICAg
ICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCkt
PmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0
b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVu
dCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+
ZG9tV2luZG93KCktPnNlc3Npb25TdG9yYWdlKCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQotCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L1Nlc3Npb25TdG9yYWdlQXJlYS5oCShyZXZpc2lvbiA0NTEyOCkKKysrIFdlYkNvcmUvc3RvcmFn
ZS9TZXNzaW9uU3RvcmFnZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU2Vz
c2lvblN0b3JhZ2VBcmVhX2gKLSNkZWZpbmUgU2Vzc2lvblN0b3JhZ2VBcmVhX2gKLQotI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKLQotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFBhZ2U7Ci0gICAgCi0gICAgY2xhc3MgU2Vzc2lvblN0
b3JhZ2VBcmVhIDogcHVibGljIFN0b3JhZ2VBcmVhIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlQXJlYT4gY3JlYXRlKFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4sIFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXNzaW9uU3RvcmFn
ZUFyZWEob3JpZ2luLCBwYWdlKSk7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFn
ZUFyZWE+IGNvcHkoU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBTZXNzaW9uU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7Ci0gICAgICAg
IFNlc3Npb25TdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhZ2UqLCBTZXNzaW9uU3RvcmFn
ZUFyZWEqKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgaXRlbUNoYW5nZWQoY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZy
YW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBpdGVtUmVtb3ZlZChjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1l
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFyZWFDbGVhcmVkKEZyYW1lKiBzb3VyY2VGcmFtZSk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdDsK
LQotICAgICAgICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291
cmNlRnJhbWUpOwotICAgICAgICAKLSAgICAgICAgUGFnZSogbV9wYWdlOwotICAgIH07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKLQot
I2VuZGlmIC8vIFNlc3Npb25TdG9yYWdlQXJlYV9oCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5j
cHAJKHJldmlzaW9uIDQ1MTI4KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsMzAgKzI4LDY0IEBACiAKICNpZiBFTkFCTEUoRE9NX1NUT1JB
R0UpCiAKLSNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCisjaW5j
bHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgorI2luY2x1
ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0b3Jh
Z2VBcmVhOjpTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQorUGFzc1JlZlB0cjxT
dG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNyZWF0ZUxvY2FsU3RvcmFnZShTZWN1cml0eU9yaWdp
biogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShvcmlnaW4sIHN5bmNNYW5hZ2Vy
KSk7Cit9CisKK1N0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2lu
LCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCiAgICAgOiBtX3Nl
Y3VyaXR5T3JpZ2luKG9yaWdpbikKICAgICAsIG1fc3RvcmFnZU1hcChTdG9yYWdlTWFwOjpjcmVh
dGUoKSkKKyAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKHN5bmNNYW5hZ2VyKQorICAgICwgbV9z
ZXNzaW9uU3RvcmFnZVBhZ2UoMCkKIHsKKyAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdpbik7Cisg
ICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlcmUncyBubyBi
YWNraW5nIHN0b3JhZ2UgZm9yIExvY2FsU3RvcmFnZSwgdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2
aW9yIHNob3VsZCBiZSB0aGF0IG9mIHByaXZhdGUgYnJvd3NpbmcsCisgICAgLy8gbm90IHNpbGVu
dGx5IGlnbm9yaW5nIGl0LiAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI1ODk0CisgICAgaWYgKG1fc3RvcmFnZVN5bmNNYW5hZ2VyKSB7CisgICAgICAgIG1fc3RvcmFn
ZUFyZWFTeW5jID0gU3RvcmFnZUFyZWFTeW5jOjpjcmVhdGUobV9zdG9yYWdlU3luY01hbmFnZXIs
IHRoaXMpOworICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYVN5bmMpOworICAgIH0KIH0KIAot
U3RvcmFnZUFyZWE6OlN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFN0b3JhZ2VB
cmVhKiBhcmVhKQotICAgIDogbV9zZWN1cml0eU9yaWdpbihvcmlnaW4pCi0gICAgLCBtX3N0b3Jh
Z2VNYXAoYXJlYS0+bV9zdG9yYWdlTWFwKQorUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFn
ZUFyZWE6OmNyZWF0ZVNlc3Npb25TdG9yYWdlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhZ2Uq
IHBhZ2UpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShvcmlnaW4sIHBh
Z2UsIDApKTsKIH0KIAotU3RvcmFnZUFyZWE6On5TdG9yYWdlQXJlYSgpCitQYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6Y29weShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYWdl
KiBwYWdlKQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEob3JpZ2luLCBw
YWdlLCB0aGlzKSk7Cit9CisKK1N0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdp
biogb3JpZ2luLCBQYWdlKiBwYWdlLCBTdG9yYWdlQXJlYSogYXJlYSkKKyAgICA6IG1fc2VjdXJp
dHlPcmlnaW4ob3JpZ2luKQorICAgICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkK
KyAgICAsIG1fc2Vzc2lvblN0b3JhZ2VQYWdlKHBhZ2UpCit7CisgICAgQVNTRVJUKG1fc2VjdXJp
dHlPcmlnaW4pOworICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlUGFnZSk7CisKKyAgICBpZiAo
IW1fc3RvcmFnZU1hcCkgeworICAgICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVh
dGUoKTsKKyAgICAgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7CisgICAgfQogfQogCiB1bnNpZ25l
ZCBTdG9yYWdlQXJlYTo6bGVuZ3RoKCkgY29uc3QKQEAgLTEwNCw4ICsxMzgsMTEgQEAgdm9pZCBT
dG9yYWdlQXJlYTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIAogICAgICAgICBtX3N0b3JhZ2VNYXAg
PSBuZXdNYXAucmVsZWFzZSgpOwogCiAgICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBh
biBpdGVtIHdhcyBhY3R1YWxseSBjaGFuZ2VkCi0gICAgaWYgKG9sZFZhbHVlICE9IHZhbHVlKQot
ICAgICAgICBpdGVtQ2hhbmdlZChrZXksIG9sZFZhbHVlLCB2YWx1ZSwgZnJhbWUpOworICAgIGlm
IChvbGRWYWx1ZSAhPSB2YWx1ZSkgeworICAgICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisg
ICAgICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIHZh
bHVlKTsKKyAgICAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgdmFsdWUs
IGZyYW1lKTsKKyAgICB9CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oY29uc3Qg
U3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKQEAgLTEyMSw4ICsxNTgsMTEgQEAgdm9pZCBTdG9y
YWdlQXJlYTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbgogICAgICAgICBtX3N0b3JhZ2VNYXAgPSBu
ZXdNYXAucmVsZWFzZSgpOwogCiAgICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBp
dGVtIHdhcyBhY3R1YWxseSByZW1vdmVkCi0gICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkKLSAg
ICAgICAgaXRlbVJlbW92ZWQoa2V5LCBvbGRWYWx1ZSwgZnJhbWUpOworICAgIGlmICghb2xkVmFs
dWUuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICAg
ICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlSXRlbUZvclN5bmMoa2V5LCBTdHJpbmcoKSk7
CisgICAgICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBm
cmFtZSk7CisgICAgfQogfQogCiB2b2lkIFN0b3JhZ2VBcmVhOjpjbGVhcihGcmFtZSogZnJhbWUp
CkBAIC0xMzQsNyArMTc0LDkgQEAgdm9pZCBTdG9yYWdlQXJlYTo6Y2xlYXIoRnJhbWUqIGZyYW1l
KQogICAgIAogICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZSgpOwogICAgIAot
ICAgIGFyZWFDbGVhcmVkKGZyYW1lKTsKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAg
ICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNsZWFyKCk7CisgICAgZGlzcGF0Y2hTdG9y
YWdlRXZlbnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgZnJhbWUpOwogfQogCiBib29s
IFN0b3JhZ2VBcmVhOjpjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKQEAgLTE0OSw2
ICsxOTEsNTQgQEAgdm9pZCBTdG9yYWdlQXJlYTo6aW1wb3J0SXRlbShjb25zdCBTdHJpbgogICAg
IG1fc3RvcmFnZU1hcC0+aW1wb3J0SXRlbShrZXksIHZhbHVlKTsKIH0KIAordm9pZCBTdG9yYWdl
QXJlYTo6c2NoZWR1bGVGaW5hbFN5bmMoKQoreworICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykK
KyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlRmluYWxTeW5jKCk7Cit9CisKK3Zv
aWQgU3RvcmFnZUFyZWE6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAg
aWYgKG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+YmxvY2tV
bnRpbEltcG9ydENvbXBsZXRlKCk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWE6OmRpc3BhdGNoU3Rv
cmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25z
dCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCit7CisgICAgLy8gV2UgbmVl
ZCB0byBjb3B5IGFsbCByZWxldmFudCBmcmFtZXMgZnJvbSBldmVyeSBwYWdlIHRvIGEgdmVjdG9y
IHNpbmNlIHNlbmRpbmcgdGhlIGV2ZW50IHRvIG9uZSBmcmFtZSBtaWdodCBtdXRhdGUgdGhlIGZy
YW1lIHRyZWUKKyAgICAvLyBvZiBhbnkgZ2l2ZW4gcGFnZSBpbiB0aGUgZ3JvdXAgb3IgbXV0YXRl
IHRoZSBwYWdlIGdyb3VwIGl0c2VsZi4KKyAgICBWZWN0b3I8UmVmUHRyPEZyYW1lPiA+IGZyYW1l
czsKKworICAgIGlmIChtX3Nlc3Npb25TdG9yYWdlUGFnZSkgeworICAgICAgICAvLyBTZW5kIGV2
ZW50cyBvbmx5IHRvIG91ciBwYWdlLgorICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fc2Vz
c2lvblN0b3JhZ2VQYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS0+dHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICAg
ICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBm
cmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUs
IHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+ZG9t
V2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPnNlc3Npb25TdG9yYWdlKCkpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogV2hlbiBjYW4gdGhpcyBvY2N1cj8KKyAgICAg
ICAgUGFnZSogcGFnZSA9IHNvdXJjZUZyYW1lLT5wYWdlKCk7CisgICAgICAgIGlmICghcGFnZSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBTZW5kIGV2ZW50cyB0byBldmVyeSBw
YWdlLgorICAgICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgp
LnBhZ2VzKCk7CisgICAgICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBw
YWdlcy5lbmQoKTsKKyAgICAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBwYWdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAg
ICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZnJhbWUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWVz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgZnJhbWVzW2ldLT5kb2N1bWVudCgpLT5kaXNwYXRj
aFdpbmRvd0V2ZW50KFN0b3JhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZl
bnQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9j
dW1lbnRVUkkoKSwgc291cmNlRnJhbWUtPmRvbVdpbmRvdygpLCBmcmFtZXNbaV0tPmRvbVdpbmRv
dygpLT5sb2NhbFN0b3JhZ2UoKSkpOworICAgIH0gICAgICAgIAorfQorCiB9CiAKICNlbmRpZiAv
LyBFTkFCTEUoRE9NX1NUT1JBR0UpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAkocmV2aXNpb24g
NDUxMjgpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksMTAgQEAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAi
U3RvcmFnZUFyZWFTeW5jLmgiCisjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgorI2luY2x1ZGUgIlN0
b3JhZ2VTeW5jTWFuYWdlci5oIgogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtMzgsMTQgKzQyLDE5IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBQYWdlOwogICAgIGNsYXNzIFNlY3Vy
aXR5T3JpZ2luOworICAgIGNsYXNzIFN0b3JhZ2VBcmVhU3luYzsKICAgICBjbGFzcyBTdG9yYWdl
TWFwOworICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKICAgICB0eXBlZGVmIGludCBFeGNl
cHRpb25Db2RlOwogCiAgICAgY2xhc3MgU3RvcmFnZUFyZWEgOiBwdWJsaWMgVGhyZWFkU2FmZVNo
YXJlZDxTdG9yYWdlQXJlYT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+U3RvcmFn
ZUFyZWEoKTsKLSAgICAgICAgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVh
PiBjcmVhdGVMb2NhbFN0b3JhZ2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxT
dG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RvcmFnZUFyZWE+IGNyZWF0ZVNlc3Npb25TdG9yYWdlKFNlY3VyaXR5T3JpZ2luKiBvcmln
aW4sIFBhZ2UqIHBhZ2UpOworICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBjb3B5KFNl
Y3VyaXR5T3JpZ2luKiwgUGFnZSopOworCiAgICAgICAgIC8vIFRoZSBIVE1MNSBET00gU3RvcmFn
ZSBBUEkKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBr
ZXkodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdDsKQEAgLTU1LDIzICs2
NCwyOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2xlYXIoRnJhbWUqIHNv
dXJjZUZyYW1lKTsKIAogICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBj
b25zdDsKKyAgICAgICAgdm9pZCBzY2hlZHVsZUZpbmFsU3luYygpOwogCiAgICAgICAgIC8vIENv
dWxkIGJlIGNhbGxlZCBmcm9tIGEgYmFja2dyb3VuZCB0aHJlYWQuCiAgICAgICAgIHZvaWQgaW1w
b3J0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAg
IFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIHsgcmV0dXJuIG1fc2VjdXJpdHlPcmln
aW4uZ2V0KCk7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgU3RvcmFnZUFyZWEoU2VjdXJp
dHlPcmlnaW4qKTsKLSAgICAgICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBTdG9yYWdl
QXJlYSopOworICAgICAgICBTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQdHI8
U3RvcmFnZVN5bmNNYW5hZ2VyPik7CisgICAgICAgIFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2lu
KiwgUGFnZSopOworICAgICAgICBTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhZ2UqLCBT
dG9yYWdlQXJlYSopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1D
aGFuZ2VkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBT
dHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpID0gMDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGl0ZW1SZW1vdmVkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZh
bHVlLCBGcmFtZSogc291cmNlRnJhbWUpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFyZWFD
bGVhcmVkKEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYmxv
Y2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QgPSAwOworICAgICAgICB2b2lkIGJsb2NrVW50
aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0OworCisgICAgICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdl
RXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0
cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CiAKICAgICAgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogICAgICAgICBSZWZQdHI8U3RvcmFnZU1h
cD4gbV9zdG9yYWdlTWFwOworCisgICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IG1fc3Rv
cmFnZUFyZWFTeW5jOworICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N0b3Jh
Z2VTeW5jTWFuYWdlcjsKKyAgICAgICAgUGFnZSogbV9zZXNzaW9uU3RvcmFnZVBhZ2U7ICAvLyBO
VUxMIGlmZiBpdCdzIExvY2FsU3RvcmFnZQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCShyZXZpc2lvbiA0NTEyOCkK
KysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1NywxMSBAQCBTdG9yYWdlQXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyhQYXNzUmVm
CiAgICAgLCBtX2ltcG9ydENvbXBsZXRlKGZhbHNlKQogewogICAgIEFTU0VSVChtX3N0b3JhZ2VB
cmVhKTsKLSAgICBpZiAoIW1fc3luY01hbmFnZXIgfHwgIW1fc3luY01hbmFnZXItPnNjaGVkdWxl
SW1wb3J0KHRoaXMpKQorICAgIEFTU0VSVChtX3N5bmNNYW5hZ2VyKTsKKworICAgIC8vIEZJWE1F
OiBJZiBpdCBjYW4ndCBpbXBvcnQsIHRoZW4gdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2aW9yIHNo
b3VsZCBiZSB0aGF0IG9mIHByaXZhdGUgYnJvd3NpbmcsCisgICAgLy8gbm90IHNpbGVudGx5IGln
bm9yaW5nIGl0LiAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODk0
CisgICAgaWYgKCFtX3N5bmNNYW5hZ2VyLT5zY2hlZHVsZUltcG9ydCh0aGlzKSkKICAgICAgICAg
bV9pbXBvcnRDb21wbGV0ZSA9IHRydWU7CiB9CiAKQEAgLTcxLDggKzc1LDYgQEAgU3RvcmFnZUFy
ZWFTeW5jOjp+U3RvcmFnZUFyZWFTeW5jKCkKIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVs
ZUZpbmFsU3luYygpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1f
c3luY01hbmFnZXIpCi0gICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAobV9zeW5jVGltZXIu
aXNBY3RpdmUoKSkKICAgICAgICAgbV9zeW5jVGltZXIuc3RvcCgpOwpAQCAtMTIxLDggKzEyMyw2
IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNsZWFyKCkKIHZvaWQgU3RvcmFnZUFy
ZWFTeW5jOjpzeW5jVGltZXJGaXJlZChUaW1lcjxTdG9yYWdlQXJlYVN5bmM+KikKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV9zeW5jTWFuYWdlcikKLSAgICAgICAg
cmV0dXJuOwogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gbV9j
aGFuZ2VkSXRlbXMuYmVnaW4oKTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0
b3IgZW5kID0gbV9jaGFuZ2VkSXRlbXMuZW5kKCk7CkBAIC0xNjEsOCArMTYxLDYgQEAgdm9pZCBT
dG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQogewogICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwogICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgaWYgKCFtX3N5
bmNNYW5hZ2VyKQotICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFt
ZSA9IG1fc3luY01hbmFnZXItPmZ1bGxEYXRhYmFzZUZpbGVuYW1lKG1fc3RvcmFnZUFyZWEtPnNl
Y3VyaXR5T3JpZ2luKCkpOwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5j
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCShyZXZp
c2lvbiA0NTEyOCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBj
bGFzcyBGcmFtZTsKICAgICBjbGFzcyBTdG9yYWdlQXJlYTsgICAgCiAgICAgY2xhc3MgU3RvcmFn
ZVN5bmNNYW5hZ2VyOwogICAgIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFu
YWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIu
aAkocmV2aXNpb24gNDUxMjgpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDkgQEAKIAogI2lmIEVOQUJMRShET01fU1RP
UkFHRSkKIAotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKICNpbmNsdWRlICJMb2NhbFN0
b3JhZ2VUYXNrLmgiCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCisjaW5jbHVkZSAi
U3RvcmFnZUFyZWEuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKIAogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31824</attachid>
            <date>2009-06-24 18:31:17 -0700</date>
            <delta_ts>2009-06-25 01:41:04 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>4.20090624.patch</filename>
            <type>text/plain</type>
            <size>40311</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTEyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDkgKzEsNTUgQEAKKzIwMDktMDYtMjQgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2Njk4CisKKyAgICAgICAg
Q29tYmluZWQgTG9jYWxTdG9yYWdlQXJlYSBhbmQgU2Vzc2lvblN0b3JhZ2VBcmVhIGludG8gU3Rv
cmFnZUFyZWEgc2luY2UKKyAgICAgICAgKGFmdGVyIG15IG90aGVyIHJlZmFjdG9yaW5ncykgdGhl
cmUgYXJlIG5vIGxvbmdlciBzdWJzdGFudGlhbAorICAgICAgICBkaWZmZXJlbmNlcyBiZXR3ZWVu
IHRoZSB0d28uCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAgICAqIHN0
b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZTo6
c3RvcmFnZUFyZWEpOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlLmg6CisgICAgICAg
ICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9y
YWdlL0xvY2FsU3RvcmFnZUFyZWEuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1Nlc3Np
b25TdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlc3Npb25TdG9yYWdlOjpjb3B5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNlc3Npb25TdG9yYWdlOjpzdG9yYWdlQXJlYSk6CisgICAgICAg
ICogc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oOgorICAgICAgICAqIHN0b3JhZ2UvU2Vzc2lvblN0
b3JhZ2VBcmVhLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdG9yYWdlL1Nlc3Npb25TdG9yYWdl
QXJlYS5oOiBSZW1vdmVkLgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OmNyZWF0ZUxvY2FsU3RvcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZUFyZWE6OmNyZWF0ZVNlc3Npb25TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpzZXRJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
QXJlYTo6c2NoZWR1bGVGaW5hbFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6
OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJl
YTo6ZGlzcGF0Y2hTdG9yYWdlRXZlbnQpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEu
aDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlQXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlRmluYWxTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VB
cmVhU3luYy5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmg6CisKIDIw
MDktMDYtMjQgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZp
eCBhbGwgYnVpbGRzLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA0NTEyOCkKKysrIFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIwODcsMTYgKzIwODcsMTIgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAg
XAogCVdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlLmggXAotCVdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcCBc
Ci0JV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaCBcCiAJV2ViQ29yZS9zdG9yYWdl
L0xvY2FsU3RvcmFnZVRhc2suY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFz
ay5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcCBcCiAJV2ViQ29y
ZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lv
blN0b3JhZ2UuY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuaCBcCi0JV2Vi
Q29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5jcHAgXAotCVdlYkNvcmUvc3RvcmFnZS9T
ZXNzaW9uU3RvcmFnZUFyZWEuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuY3BwIFwKIAlX
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEu
Y3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0NTEyOCkKKysrIFdlYkNvcmUvV2Vi
Q29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xMDExLDcgKzEwMTEsNiBAQCBUaGlz
IGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgICAgIHN0b3JhZ2UvRGF0
YWJhc2VUaHJlYWQuY3BwCiAgICAgICAgIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAogICAg
ICAgICBzdG9yYWdlL0xvY2FsU3RvcmFnZS5jcHAKLSAgICAgICAgc3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VBcmVhLmNwcAogICAgICAgICBzdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCiAgICAgICAg
IHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcAogICAgICAgICBzdG9yYWdlL09yaWdpblF1
b3RhTWFuYWdlci5jcHAKQEAgLTEwMjUsNyArMTAyNCw2IEBAIFRoaXMgZmlsZSBjb250YWlucyB0
aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwCiAg
ICAgICAgIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKICAgICAgICAgc3RvcmFnZS9TZXNzaW9uU3Rv
cmFnZS5jcHAKLSAgICAgICAgc3RvcmFnZS9TZXNzaW9uU3RvcmFnZUFyZWEuY3BwCiAgICAgICAg
IHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5j
TWFuYWdlci5jcHAKICAgICA8L3NldD4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkocmV2aXNpb24gNDUxMjgpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOTk5NSwxNCArMjk5OTUsNiBAQAogCQkJCT4K
IAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXExvY2Fs
U3RvcmFnZUFyZWEuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdG9yYWdlXExvY2FsU3RvcmFnZUFyZWEuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxMb2NhbFN0b3JhZ2VUYXNr
LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0zMDA0MywxNCArMzAwMzUsNiBAQAogCQkJCT4K
IAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNlc3Np
b25TdG9yYWdlQXJlYS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU2Vzc2lvblN0b3JhZ2VBcmVhLmgiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMQ2FsbGJhY2su
aCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gNDUxMjgpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzc2LDEwICs3NzYsNiBAQAog
CQk1MTQxODVFRjBDRDY1RjA0MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0MTg1RUQwQ0Q2
NUYwNDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCAqLzsgfTsKIAkJNTE0QjNG
NzMwQzcyMjA0NzAwMDUzMERGIC8qIEZpbGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEIzRjcyMEM3MjIwNDcwMDA1MzBERiAvKiBGaWxl
U3lzdGVtLmggKi87IH07CiAJCTUxNEIzRjc2MEM3MjIwNTUwMDA1MzBERiAvKiBGaWxlU3lzdGVt
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0
QjNGNzUwQzcyMjA1NTAwMDUzMERGIC8qIEZpbGVTeXN0ZW1NYWMubW0gKi87IH07Ci0JCTUxNEI0
OURCMERCNkQ2QUQwMDFDMzc3MCAvKiBMb2NhbFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRCNDlEOTBEQjZENkFEMDAxQzM3NzAg
LyogTG9jYWxTdG9yYWdlQXJlYS5oICovOyB9OwotCQk1MTRCNDlEQzBEQjZENkFEMDAxQzM3NzAg
LyogTG9jYWxTdG9yYWdlQXJlYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTRCNDlEQTBEQjZENkFEMDAxQzM3NzAgLyogTG9jYWxTdG9yYWdlQXJl
YS5jcHAgKi87IH07Ci0JCTUxNEI0OURGMERCNkQ2QjYwMDFDMzc3MCAvKiBTZXNzaW9uU3RvcmFn
ZUFyZWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NEI0OUREMERCNkQ2QjYwMDFDMzc3MCAvKiBTZXNzaW9uU3RvcmFnZUFyZWEuaCAqLzsgfTsKLQkJ
NTE0QjQ5RTAwREI2RDZCNjAwMUMzNzcwIC8qIFNlc3Npb25TdG9yYWdlQXJlYS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRCNDlERTBEQjZENkI2
MDAxQzM3NzAgLyogU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcCAqLzsgfTsKIAkJNTE0Qzc2MzcwQ0U5
MjI1RTAwN0VGM0NEIC8qIEpTU1FMRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2MzUwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMRXJy
b3IuY3BwICovOyB9OwogCQk1MTRDNzYzODBDRTkyMjVFMDA3RUYzQ0QgLyogSlNTUUxUcmFuc2Fj
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTRDNzYzNjBDRTkyMjVFMDA3RUYzQ0QgLyogSlNTUUxUcmFuc2FjdGlvbi5jcHAgKi87IH07CiAJ
CTUxNEM3NjRDMENFOTIzNEUwMDdFRjNDRCAvKiBBdXRoZW50aWNhdGlvbk1hYy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NDIwQ0U5MjM0RTAw
N0VGM0NEIC8qIEF1dGhlbnRpY2F0aW9uTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU3MzYsMTAgKzU3MzIsNiBAQAogCQk1MTQxODVFRDBD
RDY1RjA0MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRCM0Y3MjBDNzIyMDQ3MDAwNTMwREYgLyogRmlsZVN5
c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlU3lzdGVtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNEIzRjc1MEM3MjIwNTUwMDA1MzBERiAvKiBG
aWxlU3lzdGVtTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RmlsZVN5c3RlbU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE0QjQ5RDkw
REI2RDZBRDAwMUMzNzcwIC8qIExvY2FsU3RvcmFnZUFyZWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTG9jYWxTdG9yYWdlQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MTRCNDlEQTBEQjZENkFEMDAxQzM3NzAgLyogTG9jYWxTdG9yYWdlQXJlYS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NhbFN0b3JhZ2VBcmVhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE0QjQ5REQwREI2RDZCNjAwMUMzNzcw
IC8qIFNlc3Npb25TdG9yYWdlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTZXNzaW9uU3RvcmFnZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE0
QjQ5REUwREI2RDZCNjAwMUMzNzcwIC8qIFNlc3Npb25TdG9yYWdlQXJlYS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXNzaW9uU3RvcmFnZUFyZWEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRDNzYzNTBDRTkyMjVFMDA3RUYzQ0QgLyogSlNT
UUxFcnJvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTEVy
cm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0Qzc2MzYwQ0U5MjI1RTAw
N0VGM0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNTUUxUcmFuc2FjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxNEM3NjQyMENFOTIzNEUwMDdFRjNDRCAvKiBBdXRoZW50aWNhdGlvbk1hYy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXRoZW50aWNhdGlvbk1hYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTY4Miw4ICs5Njc0LDYgQEAKIAkJCQk1MUZBRkUz
MzBDRUNCRjJEMDBCQjNGMjQgLyogRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggKi8sCiAJCQkJNTFC
RTM4MjYwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5jcHAgKi8sCiAJCQkJNTFCRTM4
MjcwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5oICovLAotCQkJCTUxNEI0OURBMERC
NkQ2QUQwMDFDMzc3MCAvKiBMb2NhbFN0b3JhZ2VBcmVhLmNwcCAqLywKLQkJCQk1MTRCNDlEOTBE
QjZENkFEMDAxQzM3NzAgLyogTG9jYWxTdG9yYWdlQXJlYS5oICovLAogCQkJCTUxMUYyMzEzMERD
MTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUYXNrLmNwcCAqLywKIAkJCQk1MTFGMjMxNDBE
QzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGFzay5oICovLAogCQkJCTUxMUYyMzE1MERD
MTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUaHJlYWQuY3BwICovLApAQCAtOTcxMSw4ICs5
NzAxLDYgQEAKIAkJCQkxQTdDQ0IxODBDRDk0NjlBMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrLmggKi8sCiAJCQkJNTFFMEJCMjIwREE1NzJBNjAwQTlFNDE3IC8qIFNlc3Np
b25TdG9yYWdlLmNwcCAqLywKIAkJCQk1MUUwQkIyMTBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lv
blN0b3JhZ2UuaCAqLywKLQkJCQk1MTRCNDlERTBEQjZENkI2MDAxQzM3NzAgLyogU2Vzc2lvblN0
b3JhZ2VBcmVhLmNwcCAqLywKLQkJCQk1MTRCNDlERDBEQjZENkI2MDAxQzM3NzAgLyogU2Vzc2lv
blN0b3JhZ2VBcmVhLmggKi8sCiAJCQkJNTFFM0Y5QzUwREEwNTlEQzAwMjUwOTExIC8qIFN0b3Jh
Z2UuY3BwICovLAogCQkJCTUxRTNGOUM0MERBMDU5REMwMDI1MDkxMSAvKiBTdG9yYWdlLmggKi8s
CiAJCQkJNTFFM0Y5RDEwREEwNUQ3MTAwMjUwOTExIC8qIFN0b3JhZ2UuaWRsICovLApAQCAtMTYx
ODQsNyArMTYxNzIsNiBAQAogCQkJCTY1NkQzNzMyMEFEQkE1REUwMEE0NTU0RCAvKiBMb2FkZXJO
U1VSTEV4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDZFODFFRDcwQUI1RDVFOTAwQzg3ODM3
IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFC
RTM4MjkwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNTE0QjQ5REIwREI2RDZBRDAwMUMzNzcwIC8qIExvY2FsU3RvcmFnZUFyZWEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxMUYyMzE4MERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUYXNr
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTFGMjMxQTBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxT
dG9yYWdlVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzUyMDdCRTA5QkQ0MTBBMDBGMjAz
OEQgLyogTG9jYWxpemVkU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjYyNCw3ICsxNjYx
MSw2IEBACiAJCQkJOTMzMDlFMEUwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxl
Y3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUUwQkIyMzBEQTU3MkE2MDBBOUU0
MTcgLyogU2Vzc2lvblN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNEI0OURGMERCNkQ2
QjYwMDFDMzc3MCAvKiBTZXNzaW9uU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
MzA5RTEwMDk5RTY0OTIwMDU2RTU4MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTNGMTk5NEYwODI0NUU1OTAwMUU5QUJDIC8qIFNldHRpbmdzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzVFQjhDNDBFODIwMzFCMDBCMjU5NjUgLyogU2hhZG93RGF0YS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xODI2OSw3ICsxODI1NSw2IEBACiAJCQkJNjU2RDM3MzMwQURC
QTVERTAwQTQ1NTREIC8qIExvYWRlck5TVVJMRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MDZFODFFRUMwQUI1REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTUxQkUzODI4MERBRUY3REEwMDEwODVGQyAvKiBMb2NhbFN0
b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE0QjQ5REMwREI2RDZBRDAwMUMzNzcwIC8q
IExvY2FsU3RvcmFnZUFyZWEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRjIzMTcwREMxNjBE
QTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRhc2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEx
RjIzMTkwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRocmVhZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5MzUyMDdDMDA5QkQ0MTIxMDBGMjAzOEQgLyogTG9jYWxpemVkU3RyaW5nc01h
Yy5tbSBpbiBTb3VyY2VzICovLApAQCAtMTg2NzAsNyArMTg2NTUsNiBAQAogCQkJCTRBOEM5NkVC
MEJFNjkwMzIwMDRFRUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM3RkE2ODIwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFMEJCMjQwREE1NzJBNjAwQTlFNDE3IC8qIFNlc3Npb25T
dG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxNEI0OUUwMERCNkQ2QjYwMDFDMzc3MCAv
KiBTZXNzaW9uU3RvcmFnZUFyZWEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMEYwOTlF
NjQ5MjAwNTZFNTgxIC8qIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0QzlBNUVBMEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzVFQjhDMzBFODIwMzFCMDBCMjU5NjUgLyogU2hhZG93RGF0YS5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCShyZXZpc2lvbiA0NTEy
OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJT
dG9yYWdlQXJlYS5oIgpAQCAtOTAsMTEgKzg5LDExIEBAIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+
IExvY2FsU3RvcmFnZTo6c3QKICAgICAvLyBGSVhNRTogSWYgdGhlIHN0b3JhZ2UgYXJlYSBpcyBi
ZWluZyBlc3RhYmxpc2hlZCBmb3IgdGhlIGZpcnN0IHRpbWUgaGVyZSwgd2UgbmVlZCB0byAKICAg
ICAvLyBzeW5jIGl0cyBleGlzdGFuY2UgYW5kIHF1b3RhIG91dCB0byBkaXNrIHZpYSBhbiB0YXNr
IG9mIHR5cGUgQXJlYVN5bmMKIAotICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBzdG9yYWdl
QXJlYTsKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhOwogICAgIGlmIChzdG9y
YWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCiAgICAgICAgIHJldHVybiBz
dG9yYWdlQXJlYS5yZWxlYXNlKCk7CiAKLSAgICBzdG9yYWdlQXJlYSA9IExvY2FsU3RvcmFnZUFy
ZWE6OmNyZWF0ZShvcmlnaW4sIG1fc3luY01hbmFnZXIpOworICAgIHN0b3JhZ2VBcmVhID0gU3Rv
cmFnZUFyZWE6OmNyZWF0ZUxvY2FsU3RvcmFnZShvcmlnaW4sIG1fc3luY01hbmFnZXIpOwogICAg
IG1fc3RvcmFnZUFyZWFNYXAuc2V0KG9yaWdpbiwgc3RvcmFnZUFyZWEpOwogICAgIHJldHVybiBz
dG9yYWdlQXJlYS5yZWxlYXNlKCk7CiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9y
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oCShyZXZp
c2lvbiA0NTEyOCkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogCi0jaW5j
bHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5o
IgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTUyLDcgKzUxLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIExvY2FsU3RvcmFnZShjb25zdCBTdHJp
bmcmIHBhdGgpOwogCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmln
aW4+LCBSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gTG9jYWxT
dG9yYWdlQXJlYU1hcDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gTG9jYWxTdG9y
YWdlQXJlYU1hcDsKICAgICAgICAgTG9jYWxTdG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFw
OwogCiAgICAgICAgIFN0cmluZyBtX3BhdGg7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxT
dG9yYWdlQXJlYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFn
ZUFyZWEuY3BwCShyZXZpc2lvbiA0NTEyOCkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgotCi0jaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQotCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgotI2lu
Y2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgotI2lu
Y2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBh
c3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gTG9jYWxTdG9yYWdlQXJlYTo6Y3JlYXRlKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFu
YWdlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZUFyZWEob3JpZ2lu
LCBzeW5jTWFuYWdlcikpOwotfQotCi1Mb2NhbFN0b3JhZ2VBcmVhOjpMb2NhbFN0b3JhZ2VBcmVh
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBz
eW5jTWFuYWdlcikKLSAgICA6IFN0b3JhZ2VBcmVhKG9yaWdpbikKLSAgICAsIG1fc3RvcmFnZUFy
ZWFTeW5jKFN0b3JhZ2VBcmVhU3luYzo6Y3JlYXRlKHN5bmNNYW5hZ2VyLCB0aGlzKSkKLSAgICAs
IG1fc3RvcmFnZVN5bmNNYW5hZ2VyKHN5bmNNYW5hZ2VyKQotewotfQotCi12b2lkIExvY2FsU3Rv
cmFnZUFyZWE6OnNjaGVkdWxlRmluYWxTeW5jKCkKLXsKLSAgICBtX3N0b3JhZ2VBcmVhU3luYy0+
c2NoZWR1bGVGaW5hbFN5bmMoKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjppdGVtQ2hh
bmdlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3Ry
aW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQotewotICAgIG1fc3RvcmFnZUFyZWFT
eW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwgbmV3VmFsdWUpOwotICAgIGRpc3BhdGNoU3Rv
cmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFtZSk7Ci19Ci0KLXZv
aWQgTG9jYWxTdG9yYWdlQXJlYTo6aXRlbVJlbW92ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgb2xkVmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKLXsKLSAgICBtX3N0b3JhZ2VB
cmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIFN0cmluZygpKTsKLSAgICBkaXNwYXRj
aFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgc291cmNlRnJhbWUpOwotfQot
Ci12b2lkIExvY2FsU3RvcmFnZUFyZWE6OmFyZWFDbGVhcmVkKEZyYW1lKiBzb3VyY2VGcmFtZSkK
LXsKLSAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOwotICAgIGRpc3BhdGNo
U3RvcmFnZUV2ZW50KFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCksIHNvdXJjZUZyYW1lKTsK
LX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBj
b25zdAotewotICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5ibG9ja1VudGlsSW1wb3J0Q29tcGxldGUo
KTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdW
YWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICBQYWdlKiBwYWdlID0gc291cmNlRnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE5lZWQgdG8gY29weSBhbGwgcmVsZXZhbnQgZnJh
bWVzIGZyb20gZXZlcnkgcGFnZSB0byBhIHZlY3Rvciwgc2luY2Ugc2VuZGluZyB0aGUgZXZlbnQg
dG8gb25lIGZyYW1lIG1pZ2h0IG11dGF0ZSB0aGUgZnJhbWUgdHJlZQotICAgIC8vIG9mIGFueSBn
aXZlbiBwYWdlIGluIHRoZSBncm91cCwgb3IgbXV0YXRlIHRoZSBwYWdlIGdyb3VwIGl0c2VsZgot
ICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+ID4gZnJhbWVzOwotICAgIGNvbnN0IEhhc2hTZXQ8UGFn
ZSo+JiBwYWdlcyA9IHBhZ2UtPmdyb3VwKCkucGFnZXMoKTsKLSAgICAKLSAgICBIYXNoU2V0PFBh
Z2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFnZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0
PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0KS0+bWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5
T3JpZ2luKCkpKQotICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZnJhbWUpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7
ICsraSkKLSAgICAgICAgZnJhbWVzW2ldLT5kb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50
KFN0b3JhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGtleSwgb2xk
VmFsdWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRVUkkoKSwg
c291cmNlRnJhbWUtPmRvbVdpbmRvdygpLCBmcmFtZXNbaV0tPmRvbVdpbmRvdygpLT5sb2NhbFN0
b3JhZ2UoKSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoRE9NX1NUT1JBR0UpCi0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaAkocmV2
aXNpb24gNDUxMjgpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMb2NhbFN0b3JhZ2VBcmVhX2gKLSNkZWZp
bmUgTG9jYWxTdG9yYWdlQXJlYV9oCi0KLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0KLSNpbmNs
dWRlICJTdG9yYWdlQXJlYS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0gICAgY2xh
c3MgU3RvcmFnZUFyZWFTeW5jOwotICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKLSAgICAK
LSAgICBjbGFzcyBMb2NhbFN0b3JhZ2VBcmVhIDogcHVibGljIFN0b3JhZ2VBcmVhIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGNyZWF0
ZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4g
c3luY01hbmFnZXIpOwotCi0gICAgICAgIHZvaWQgc2NoZWR1bGVGaW5hbFN5bmMoKTsKLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIExvY2FsU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQYXNz
UmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpOwotCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBpdGVtQ2hhbmdlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRW
YWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGl0ZW1SZW1vdmVkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIG9sZFZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
YXJlYUNsZWFyZWQoRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGJs
b2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgZGlzcGF0Y2hT
dG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNv
bnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0KLSAgICAgICAgUmVm
UHRyPFN0b3JhZ2VBcmVhU3luYz4gbV9zdG9yYWdlQXJlYVN5bmM7Ci0gICAgICAgIFJlZlB0cjxT
dG9yYWdlU3luY01hbmFnZXI+IG1fc3RvcmFnZVN5bmNNYW5hZ2VyOwotICAgIH07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKLQotI2Vu
ZGlmIC8vIExvY2FsU3RvcmFnZUFyZWFfaApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25T
dG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2Uu
Y3BwCShyZXZpc2lvbiA0NTEyOCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgUGFzc1JlZlB0cjxTZXNzaW9uU3Rv
cmFnZT4gU2Vzc2lvblN0b3JhZwogICAgIAogICAgIFNlc3Npb25TdG9yYWdlQXJlYU1hcDo6aXRl
cmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKFNlc3Npb25TdG9y
YWdlQXJlYU1hcDo6aXRlcmF0b3IgaSA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaSAhPSBl
bmQ7ICsraSkgewotICAgICAgICBSZWZQdHI8U2Vzc2lvblN0b3JhZ2VBcmVhPiBhcmVhQ29weSA9
IGktPnNlY29uZC0+Y29weShpLT5maXJzdC5nZXQoKSwgbmV3UGFnZSk7CisgICAgICAgIFJlZlB0
cjxTdG9yYWdlQXJlYT4gYXJlYUNvcHkgPSBpLT5zZWNvbmQtPmNvcHkoaS0+Zmlyc3QuZ2V0KCks
IG5ld1BhZ2UpOwogICAgICAgICBuZXdTZXNzaW9uLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChpLT5m
aXJzdCwgYXJlYUNvcHkucmVsZWFzZSgpKTsKICAgICB9CiAgICAgCkBAIC02NSwxMSArNjUsMTEg
QEAgUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZT4gU2Vzc2lvblN0b3JhZwogCiBQYXNzUmVmUHRy
PFN0b3JhZ2VBcmVhPiBTZXNzaW9uU3RvcmFnZTo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbikKIHsKLSAgICBSZWZQdHI8U2Vzc2lvblN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsK
KyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhOwogICAgIGlmIChzdG9yYWdlQXJl
YSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCiAgICAgICAgIHJldHVybiBzdG9yYWdl
QXJlYS5yZWxlYXNlKCk7CiAgICAgICAgIAotICAgIHN0b3JhZ2VBcmVhID0gU2Vzc2lvblN0b3Jh
Z2VBcmVhOjpjcmVhdGUob3JpZ2luLCBtX3BhZ2UpOworICAgIHN0b3JhZ2VBcmVhID0gU3RvcmFn
ZUFyZWE6OmNyZWF0ZVNlc3Npb25TdG9yYWdlKG9yaWdpbiwgbV9wYWdlKTsKICAgICBtX3N0b3Jh
Z2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKICAgICByZXR1cm4gc3RvcmFnZUFy
ZWEucmVsZWFzZSgpOwogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmgJKHJldmlzaW9u
IDQ1MTI4KQorKysgV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbkhhc2guaCIKLSNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZUFyZWEuaCIK
KyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgUGFnZSogbV9wYWdlOwogICAgICAgICAKLSAgICAgICAgdHlwZWRl
ZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTZXNzaW9uU3RvcmFnZUFy
ZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IFNlc3Npb25TdG9yYWdlQXJlYU1hcDsKKyAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJl
YT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gU2Vzc2lvblN0b3JhZ2VBcmVhTWFwOwogICAgICAgICBT
ZXNzaW9uU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKICAgICB9OwogCkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcAkocmV2aXNpb24gNDUxMjgpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZUFyZWEuaCIK
LQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLQotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1l
VHJlZS5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNp
bmNsdWRlICJTdG9yYWdlRXZlbnQuaCIKLSNpbmNsdWRlICJTdG9yYWdlTWFwLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZUFyZWE+IFNlc3Npb25T
dG9yYWdlQXJlYTo6Y29weShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYWdlKiBwYWdlKQotewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Vzc2lvblN0b3JhZ2VBcmVhKG9yaWdpbiwgcGFnZSwg
dGhpcykpOwotfQotCi1TZXNzaW9uU3RvcmFnZUFyZWE6OlNlc3Npb25TdG9yYWdlQXJlYShTZWN1
cml0eU9yaWdpbiogb3JpZ2luLCBQYWdlKiBwYWdlKQotICAgIDogU3RvcmFnZUFyZWEob3JpZ2lu
KQotICAgICwgbV9wYWdlKHBhZ2UpCi17Ci0gICAgQVNTRVJUKHBhZ2UpOwotfQotCi1TZXNzaW9u
U3RvcmFnZUFyZWE6OlNlc3Npb25TdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQ
YWdlKiBwYWdlLCBTZXNzaW9uU3RvcmFnZUFyZWEqIGFyZWEpCi0gICAgOiBTdG9yYWdlQXJlYShv
cmlnaW4sIGFyZWEpCi0gICAgLCBtX3BhZ2UocGFnZSkKLXsKLSAgICBBU1NFUlQocGFnZSk7Ci19
Ci0KLXZvaWQgU2Vzc2lvblN0b3JhZ2VBcmVhOjppdGVtQ2hhbmdlZChjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUq
IHNvdXJjZUZyYW1lKQotewotICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUs
IG5ld1ZhbHVlLCBzb3VyY2VGcmFtZSk7Ci19Ci0KLXZvaWQgU2Vzc2lvblN0b3JhZ2VBcmVhOjpp
dGVtUmVtb3ZlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgRnJh
bWUqIHNvdXJjZUZyYW1lKQotewotICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFs
dWUsIFN0cmluZygpLCBzb3VyY2VGcmFtZSk7Ci19Ci0KLXZvaWQgU2Vzc2lvblN0b3JhZ2VBcmVh
OjphcmVhQ2xlYXJlZChGcmFtZSogc291cmNlRnJhbWUpCi17Ci0gICAgZGlzcGF0Y2hTdG9yYWdl
RXZlbnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgc291cmNlRnJhbWUpOwotfQotCi12
b2lkIFNlc3Npb25TdG9yYWdlQXJlYTo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QK
LXsKLX0KLQotdm9pZCBTZXNzaW9uU3RvcmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5l
d1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCi17Ci0gICAgLy8gRm9yIFNlc3Npb25TdG9yYWdl
IGV2ZW50cywgZWFjaCBmcmFtZSBpbiB0aGUgcGFnZSdzIGZyYW1ldHJlZSB3aXRoIHRoZSBzYW1l
IG9yaWdpbiBhcyB0aGlzIFN0b3JhZ2VBcmVhIG5lZWRzIHRvIGJlIG5vdGlmaWVkIG9mIHRoZSBj
aGFuZ2UKLSAgICBWZWN0b3I8UmVmUHRyPEZyYW1lPiA+IGZyYW1lczsKLSAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCi0gICAgICAgICAgICBmcmFt
ZXMuYXBwZW5kKGZyYW1lKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3Bh
dGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VF
dmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5k
b2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2lu
ZG93KCktPnNlc3Npb25TdG9yYWdlKCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQotCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
U2Vzc2lvblN0b3JhZ2VBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1Nlc3Np
b25TdG9yYWdlQXJlYS5oCShyZXZpc2lvbiA0NTEyOCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNz
aW9uU3RvcmFnZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU2Vzc2lvblN0
b3JhZ2VBcmVhX2gKLSNkZWZpbmUgU2Vzc2lvblN0b3JhZ2VBcmVhX2gKLQotI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKLQotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotICAgIGNsYXNzIFBhZ2U7Ci0gICAgCi0gICAgY2xhc3MgU2Vzc2lvblN0b3JhZ2VB
cmVhIDogcHVibGljIFN0b3JhZ2VBcmVhIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlQXJlYT4gY3JlYXRlKFNlY3VyaXR5T3JpZ2luKiBvcmln
aW4sIFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXNzaW9uU3RvcmFnZUFyZWEo
b3JpZ2luLCBwYWdlKSk7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZUFyZWE+
IGNvcHkoU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBT
ZXNzaW9uU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7Ci0gICAgICAgIFNlc3Np
b25TdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhZ2UqLCBTZXNzaW9uU3RvcmFnZUFyZWEq
KTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgaXRlbUNoYW5nZWQoY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBz
b3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBpdGVtUmVtb3ZlZChjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGFyZWFDbGVhcmVkKEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdDsKLQotICAg
ICAgICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJh
bWUpOwotICAgICAgICAKLSAgICAgICAgUGFnZSogbV9wYWdlOwotICAgIH07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKLQotI2VuZGlm
IC8vIFNlc3Npb25TdG9yYWdlQXJlYV9oCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFy
ZWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAJKHJl
dmlzaW9uIDQ1MTI4KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMzAgKzI4LDY0IEBACiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAK
LSNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCisjaW5jbHVkZSAi
U3RvcmFnZUFyZWFTeW5jLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgorI2luY2x1ZGUgIlN0
b3JhZ2VTeW5jTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0b3JhZ2VBcmVh
OjpTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQorUGFzc1JlZlB0cjxTdG9yYWdl
QXJlYT4gU3RvcmFnZUFyZWE6OmNyZWF0ZUxvY2FsU3RvcmFnZShTZWN1cml0eU9yaWdpbiogb3Jp
Z2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShvcmlnaW4sIHN5bmNNYW5hZ2VyKSk7Cit9
CisKK1N0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNz
UmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCiAgICAgOiBtX3NlY3VyaXR5
T3JpZ2luKG9yaWdpbikKICAgICAsIG1fc3RvcmFnZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUoKSkK
KyAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKHN5bmNNYW5hZ2VyKQorICAgICwgbV9zZXNzaW9u
U3RvcmFnZVBhZ2UoMCkKIHsKKyAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdpbik7CisgICAgQVNT
RVJUKG1fc3RvcmFnZU1hcCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlcmUncyBubyBiYWNraW5n
IHN0b3JhZ2UgZm9yIExvY2FsU3RvcmFnZSwgdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2aW9yIHNo
b3VsZCBiZSB0aGF0IG9mIHByaXZhdGUgYnJvd3NpbmcsCisgICAgLy8gbm90IHNpbGVudGx5IGln
bm9yaW5nIGl0LiAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODk0
CisgICAgaWYgKG1fc3RvcmFnZVN5bmNNYW5hZ2VyKSB7CisgICAgICAgIG1fc3RvcmFnZUFyZWFT
eW5jID0gU3RvcmFnZUFyZWFTeW5jOjpjcmVhdGUobV9zdG9yYWdlU3luY01hbmFnZXIsIHRoaXMp
OworICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYVN5bmMpOworICAgIH0KIH0KIAotU3RvcmFn
ZUFyZWE6OlN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFN0b3JhZ2VBcmVhKiBh
cmVhKQotICAgIDogbV9zZWN1cml0eU9yaWdpbihvcmlnaW4pCi0gICAgLCBtX3N0b3JhZ2VNYXAo
YXJlYS0+bV9zdG9yYWdlTWFwKQorUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6
OmNyZWF0ZVNlc3Npb25TdG9yYWdlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2Up
CiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShvcmlnaW4sIHBhZ2UsIDAp
KTsKIH0KIAotU3RvcmFnZUFyZWE6On5TdG9yYWdlQXJlYSgpCitQYXNzUmVmUHRyPFN0b3JhZ2VB
cmVhPiBTdG9yYWdlQXJlYTo6Y29weShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYWdlKiBwYWdl
KQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEob3JpZ2luLCBwYWdlLCB0
aGlzKSk7Cit9CisKK1N0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3Jp
Z2luLCBQYWdlKiBwYWdlLCBTdG9yYWdlQXJlYSogYXJlYSkKKyAgICA6IG1fc2VjdXJpdHlPcmln
aW4ob3JpZ2luKQorICAgICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKKyAgICAs
IG1fc2Vzc2lvblN0b3JhZ2VQYWdlKHBhZ2UpCit7CisgICAgQVNTRVJUKG1fc2VjdXJpdHlPcmln
aW4pOworICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlUGFnZSk7CisKKyAgICBpZiAoIW1fc3Rv
cmFnZU1hcCkgeworICAgICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUoKTsK
KyAgICAgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7CisgICAgfQogfQogCiB1bnNpZ25lZCBTdG9y
YWdlQXJlYTo6bGVuZ3RoKCkgY29uc3QKQEAgLTEwNCw4ICsxMzgsMTEgQEAgdm9pZCBTdG9yYWdl
QXJlYTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIAogICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdN
YXAucmVsZWFzZSgpOwogCiAgICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBpdGVt
IHdhcyBhY3R1YWxseSBjaGFuZ2VkCi0gICAgaWYgKG9sZFZhbHVlICE9IHZhbHVlKQotICAgICAg
ICBpdGVtQ2hhbmdlZChrZXksIG9sZFZhbHVlLCB2YWx1ZSwgZnJhbWUpOworICAgIGlmIChvbGRW
YWx1ZSAhPSB2YWx1ZSkgeworICAgICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAg
ICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIHZhbHVlKTsK
KyAgICAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgdmFsdWUsIGZyYW1l
KTsKKyAgICB9CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5n
JiBrZXksIEZyYW1lKiBmcmFtZSkKQEAgLTEyMSw4ICsxNTgsMTEgQEAgdm9pZCBTdG9yYWdlQXJl
YTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbgogICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdNYXAu
cmVsZWFzZSgpOwogCiAgICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBpdGVtIHdh
cyBhY3R1YWxseSByZW1vdmVkCi0gICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkKLSAgICAgICAg
aXRlbVJlbW92ZWQoa2V5LCBvbGRWYWx1ZSwgZnJhbWUpOworICAgIGlmICghb2xkVmFsdWUuaXNO
dWxsKCkpIHsKKyAgICAgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICAgICAgbV9z
dG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlSXRlbUZvclN5bmMoa2V5LCBTdHJpbmcoKSk7CisgICAg
ICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBmcmFtZSk7
CisgICAgfQogfQogCiB2b2lkIFN0b3JhZ2VBcmVhOjpjbGVhcihGcmFtZSogZnJhbWUpCkBAIC0x
MzQsNyArMTc0LDkgQEAgdm9pZCBTdG9yYWdlQXJlYTo6Y2xlYXIoRnJhbWUqIGZyYW1lKQogICAg
IAogICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZSgpOwogICAgIAotICAgIGFy
ZWFDbGVhcmVkKGZyYW1lKTsKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1f
c3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNsZWFyKCk7CisgICAgZGlzcGF0Y2hTdG9yYWdlRXZl
bnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgZnJhbWUpOwogfQogCiBib29sIFN0b3Jh
Z2VBcmVhOjpjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKQEAgLTE0OSw2ICsxOTEs
NTQgQEAgdm9pZCBTdG9yYWdlQXJlYTo6aW1wb3J0SXRlbShjb25zdCBTdHJpbgogICAgIG1fc3Rv
cmFnZU1hcC0+aW1wb3J0SXRlbShrZXksIHZhbHVlKTsKIH0KIAordm9pZCBTdG9yYWdlQXJlYTo6
c2NoZWR1bGVGaW5hbFN5bmMoKQoreworICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAg
ICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlRmluYWxTeW5jKCk7Cit9CisKK3ZvaWQgU3Rv
cmFnZUFyZWE6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1f
c3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+YmxvY2tVbnRpbElt
cG9ydENvbXBsZXRlKCk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZUV2
ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJp
bmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCit7CisgICAgLy8gV2UgbmVlZCB0byBj
b3B5IGFsbCByZWxldmFudCBmcmFtZXMgZnJvbSBldmVyeSBwYWdlIHRvIGEgdmVjdG9yIHNpbmNl
IHNlbmRpbmcgdGhlIGV2ZW50IHRvIG9uZSBmcmFtZSBtaWdodCBtdXRhdGUgdGhlIGZyYW1lIHRy
ZWUKKyAgICAvLyBvZiBhbnkgZ2l2ZW4gcGFnZSBpbiB0aGUgZ3JvdXAgb3IgbXV0YXRlIHRoZSBw
YWdlIGdyb3VwIGl0c2VsZi4KKyAgICBWZWN0b3I8UmVmUHRyPEZyYW1lPiA+IGZyYW1lczsKKwor
ICAgIGlmIChtX3Nlc3Npb25TdG9yYWdlUGFnZSkgeworICAgICAgICAvLyBTZW5kIGV2ZW50cyBv
bmx5IHRvIG91ciBwYWdlLgorICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fc2Vzc2lvblN0
b3JhZ2VQYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJh
dmVyc2VOZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICAgICAgZnJh
bWVzLmFwcGVuZChmcmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBmcmFtZXNb
aV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJj
ZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+ZG9tV2luZG93
KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPnNlc3Npb25TdG9yYWdlKCkpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBGSVhNRTogV2hlbiBjYW4gdGhpcyBvY2N1cj8KKyAgICAgICAgUGFn
ZSogcGFnZSA9IHNvdXJjZUZyYW1lLT5wYWdlKCk7CisgICAgICAgIGlmICghcGFnZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBTZW5kIGV2ZW50cyB0byBldmVyeSBwYWdlLgor
ICAgICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2Vz
KCk7CisgICAgICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5l
bmQoKTsKKyAgICAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
YWdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LT50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAg
ICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZnJhbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWVzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgZnJhbWVzW2ldLT5kb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRv
d0V2ZW50KFN0b3JhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGtl
eSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRV
UkkoKSwgc291cmNlRnJhbWUtPmRvbVdpbmRvdygpLCBmcmFtZXNbaV0tPmRvbVdpbmRvdygpLT5s
b2NhbFN0b3JhZ2UoKSkpOworICAgIH0gICAgICAgIAorfQorCiB9CiAKICNlbmRpZiAvLyBFTkFC
TEUoRE9NX1NUT1JBR0UpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAkocmV2aXNpb24gNDUxMjgp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksMTAgQEAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU3RvcmFn
ZUFyZWFTeW5jLmgiCisjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VT
eW5jTWFuYWdlci5oIgogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgpAQCAtMzgsMTQgKzQyLDE5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBQYWdlOwogICAgIGNsYXNzIFNlY3VyaXR5T3Jp
Z2luOworICAgIGNsYXNzIFN0b3JhZ2VBcmVhU3luYzsKICAgICBjbGFzcyBTdG9yYWdlTWFwOwor
ICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOwogCiAgICAgY2xhc3MgU3RvcmFnZUFyZWEgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxT
dG9yYWdlQXJlYT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+U3RvcmFnZUFyZWEo
KTsKLSAgICAgICAgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBjcmVh
dGVMb2NhbFN0b3JhZ2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdl
U3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Rv
cmFnZUFyZWE+IGNyZWF0ZVNlc3Npb25TdG9yYWdlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBh
Z2UqIHBhZ2UpOworICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBjb3B5KFNlY3VyaXR5
T3JpZ2luKiwgUGFnZSopOworCiAgICAgICAgIC8vIFRoZSBIVE1MNSBET00gU3RvcmFnZSBBUEkK
ICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBrZXkodW5z
aWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdDsKQEAgLTU1LDIzICs2NCwyOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2xlYXIoRnJhbWUqIHNvdXJjZUZy
YW1lKTsKIAogICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsK
KyAgICAgICAgdm9pZCBzY2hlZHVsZUZpbmFsU3luYygpOwogCiAgICAgICAgIC8vIENvdWxkIGJl
IGNhbGxlZCBmcm9tIGEgYmFja2dyb3VuZCB0aHJlYWQuCiAgICAgICAgIHZvaWQgaW1wb3J0SXRl
bShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgIFNlY3Vy
aXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW4uZ2V0
KCk7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmln
aW4qKTsKLSAgICAgICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBTdG9yYWdlQXJlYSop
OworICAgICAgICBTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPik7CisgICAgICAgIFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwgUGFn
ZSopOworICAgICAgICBTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhZ2UqLCBTdG9yYWdl
QXJlYSopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1DaGFuZ2Vk
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcm
IG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGl0ZW1SZW1vdmVkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBG
cmFtZSogc291cmNlRnJhbWUpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFyZWFDbGVhcmVk
KEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYmxvY2tVbnRp
bEltcG9ydENvbXBsZXRlKCkgY29uc3QgPSAwOworICAgICAgICB2b2lkIGJsb2NrVW50aWxJbXBv
cnRDb21wbGV0ZSgpIGNvbnN0OworCisgICAgICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQo
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYg
bmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CiAKICAgICAgICAgUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogICAgICAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbV9z
dG9yYWdlTWFwOworCisgICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IG1fc3RvcmFnZUFy
ZWFTeW5jOworICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N0b3JhZ2VTeW5j
TWFuYWdlcjsKKyAgICAgICAgUGFnZSogbV9zZXNzaW9uU3RvcmFnZVBhZ2U7ICAvLyBOVUxMIGlm
ZiBpdCdzIExvY2FsU3RvcmFnZQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCShyZXZpc2lvbiA0NTEyOCkKKysrIFdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3
ICs1NywxMSBAQCBTdG9yYWdlQXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyhQYXNzUmVmCiAgICAg
LCBtX2ltcG9ydENvbXBsZXRlKGZhbHNlKQogewogICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhKTsK
LSAgICBpZiAoIW1fc3luY01hbmFnZXIgfHwgIW1fc3luY01hbmFnZXItPnNjaGVkdWxlSW1wb3J0
KHRoaXMpKQorICAgIEFTU0VSVChtX3N5bmNNYW5hZ2VyKTsKKworICAgIC8vIEZJWE1FOiBJZiBp
dCBjYW4ndCBpbXBvcnQsIHRoZW4gdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2aW9yIHNob3VsZCBi
ZSB0aGF0IG9mIHByaXZhdGUgYnJvd3NpbmcsCisgICAgLy8gbm90IHNpbGVudGx5IGlnbm9yaW5n
IGl0LiAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODk0CisgICAg
aWYgKCFtX3N5bmNNYW5hZ2VyLT5zY2hlZHVsZUltcG9ydCh0aGlzKSkKICAgICAgICAgbV9pbXBv
cnRDb21wbGV0ZSA9IHRydWU7CiB9CiAKQEAgLTcxLDggKzc1LDYgQEAgU3RvcmFnZUFyZWFTeW5j
Ojp+U3RvcmFnZUFyZWFTeW5jKCkKIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUZpbmFs
U3luYygpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fc3luY01h
bmFnZXIpCi0gICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAobV9zeW5jVGltZXIuaXNBY3Rp
dmUoKSkKICAgICAgICAgbV9zeW5jVGltZXIuc3RvcCgpOwpAQCAtMTIxLDggKzEyMyw2IEBAIHZv
aWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNsZWFyKCkKIHZvaWQgU3RvcmFnZUFyZWFTeW5j
OjpzeW5jVGltZXJGaXJlZChUaW1lcjxTdG9yYWdlQXJlYVN5bmM+KikKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV9zeW5jTWFuYWdlcikKLSAgICAgICAgcmV0dXJu
OwogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gbV9jaGFuZ2Vk
SXRlbXMuYmVnaW4oKTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgZW5k
ID0gbV9jaGFuZ2VkSXRlbXMuZW5kKCk7CkBAIC0xNjEsOCArMTYxLDYgQEAgdm9pZCBTdG9yYWdl
QXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OwogICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgaWYgKCFtX3N5bmNNYW5h
Z2VyKQotICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1f
c3luY01hbmFnZXItPmZ1bGxEYXRhYmFzZUZpbGVuYW1lKG1fc3RvcmFnZUFyZWEtPnNlY3VyaXR5
T3JpZ2luKCkpOwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCShyZXZpc2lvbiA0
NTEyOCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBG
cmFtZTsKICAgICBjbGFzcyBTdG9yYWdlQXJlYTsgICAgCiAgICAgY2xhc3MgU3RvcmFnZVN5bmNN
YW5hZ2VyOwogICAgIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaAkocmV2
aXNpb24gNDUxMjgpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDkgQEAKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
IAotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VU
YXNrLmgiCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCisjaW5jbHVkZSAiU3RvcmFn
ZUFyZWEuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKIAogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4K
</data>
<flag name="review"
          id="16403"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31869</attachid>
            <date>2009-06-25 12:09:32 -0700</date>
            <delta_ts>2009-06-25 12:53:24 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>4.20090625.patch</filename>
            <type>text/plain</type>
            <size>40419</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTE3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKyAyMDA5LTA2LTI1ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21p
dW0ub3JnPgorCisgICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2Njk4CisKKyAgICAg
ICAgIENvbWJpbmVkIExvY2FsU3RvcmFnZUFyZWEgYW5kIFNlc3Npb25TdG9yYWdlQXJlYSBpbnRv
IFN0b3JhZ2VBcmVhIHNpbmNlCisgICAgICAgICAoYWZ0ZXIgbXkgb3RoZXIgcmVmYWN0b3Jpbmdz
KSB0aGVyZSBhcmUgbm8gbG9uZ2VyIHN1YnN0YW50aWFsCisgICAgICAgICBkaWZmZXJlbmNlcyBi
ZXR3ZWVuIHRoZSB0d28uCisKKyAgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAg
ICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwOgorICAgICAgICAgKFdlYkNvcmU6Okxv
Y2FsU3RvcmFnZTo6c3RvcmFnZUFyZWEpOgorICAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFn
ZS5oOgorICAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaDogUmVtb3ZlZC4KKyAgICAgICAg
ICogc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5jcHA6CisgICAgICAgICAoV2ViQ29yZTo6U2Vzc2lv
blN0b3JhZ2U6OmNvcHkpOgorICAgICAgICAgKFdlYkNvcmU6OlNlc3Npb25TdG9yYWdlOjpzdG9y
YWdlQXJlYSk6CisgICAgICAgICAqIHN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuaDoKKyAgICAgICAg
ICogc3RvcmFnZS9TZXNzaW9uU3RvcmFnZUFyZWEuY3BwOiBSZW1vdmVkLgorICAgICAgICAgKiBz
dG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5oOiBSZW1vdmVkLgorICAgICAgICAgKiBzdG9yYWdl
L1N0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6Y3JlYXRl
TG9jYWxTdG9yYWdlKToKKyAgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6U3RvcmFnZUFy
ZWEpOgorICAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpjcmVhdGVTZXNzaW9uU3RvcmFn
ZSk6CisgICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OmNvcHkpOgorICAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VBcmVhOjpzZXRJdGVtKToKKyAgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
QXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWE6OmNsZWFy
KToKKyAgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6c2NoZWR1bGVGaW5hbFN5bmMpOgor
ICAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUp
OgorICAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVudCk6
CisgICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEuaDoKKyAgICAgICAgICogc3RvcmFnZS9T
dG9yYWdlQXJlYVN5bmMuY3BwOgorICAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6
U3RvcmFnZUFyZWFTeW5jKToKKyAgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnNj
aGVkdWxlRmluYWxTeW5jKToKKyAgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnN5
bmNUaW1lckZpcmVkKToKKyAgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnBlcmZv
cm1JbXBvcnQpOgorICAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oOgorICAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oOgorCiAyMDA5LTA2LTI1ICBEaW1pdHJp
IEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
YnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA0NTE3NykKKysrIFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIwODcsMTYgKzIwODcsMTIgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAgXAog
CVdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvTG9j
YWxTdG9yYWdlLmggXAotCVdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcCBcCi0J
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZVRhc2suY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5o
IFwKIAlXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcCBcCiAJV2ViQ29yZS9z
dG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0
b3JhZ2UuY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuaCBcCi0JV2ViQ29y
ZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5jcHAgXAotCVdlYkNvcmUvc3RvcmFnZS9TZXNz
aW9uU3RvcmFnZUFyZWEuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuY3BwIFwKIAlXZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZS5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3Bw
IFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0NTE3NykKKysrIFdlYkNvcmUvV2ViQ29y
ZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xMDExLDcgKzEwMTEsNiBAQCBUaGlzIGZp
bGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgICAgIHN0b3JhZ2UvRGF0YWJh
c2VUaHJlYWQuY3BwCiAgICAgICAgIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAogICAgICAg
ICBzdG9yYWdlL0xvY2FsU3RvcmFnZS5jcHAKLSAgICAgICAgc3RvcmFnZS9Mb2NhbFN0b3JhZ2VB
cmVhLmNwcAogICAgICAgICBzdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCiAgICAgICAgIHN0
b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcAogICAgICAgICBzdG9yYWdlL09yaWdpblF1b3Rh
TWFuYWdlci5jcHAKQEAgLTEwMjUsNyArMTAyNCw2IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUg
bGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwCiAgICAg
ICAgIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKICAgICAgICAgc3RvcmFnZS9TZXNzaW9uU3RvcmFn
ZS5jcHAKLSAgICAgICAgc3RvcmFnZS9TZXNzaW9uU3RvcmFnZUFyZWEuY3BwCiAgICAgICAgIHN0
b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFu
YWdlci5jcHAKICAgICA8L3NldD4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkocmV2aXNpb24gNDUxNzcpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOTk5NSwxNCArMjk5OTUsNiBAQAogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXExvY2Fs
U3RvcmFnZUFyZWEuY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxMb2NhbFN0b3JhZ2VBcmVhLmgiDQotCQkJCT4NCi0JCQk8
L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXExvY2FsU3Rv
cmFnZVRhc2suY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTMwMDQzLDE0ICszMDAzNSw2
IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHN0b3JhZ2VcU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0J
CQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU2Vzc2lvblN0b3JhZ2VBcmVh
LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlxzdG9yYWdlXFNRTENhbGxiYWNrLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQ1MTc3KQor
KysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTc3NiwxMCArNzc2LDYgQEAKIAkJNTE0MTg1RUYwQ0Q2NUYwNDAwNzYzQzk5IC8qIENo
YW5nZVZlcnNpb25XcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNDE4NUVEMENENjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3Jh
cHBlci5jcHAgKi87IH07CiAJCTUxNEIzRjczMEM3MjIwNDcwMDA1MzBERiAvKiBGaWxlU3lzdGVt
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRCM0Y3
MjBDNzIyMDQ3MDAwNTMwREYgLyogRmlsZVN5c3RlbS5oICovOyB9OwogCQk1MTRCM0Y3NjBDNzIy
MDU1MDAwNTMwREYgLyogRmlsZVN5c3RlbU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEIzRjc1MEM3MjIwNTUwMDA1MzBERiAvKiBGaWxlU3lz
dGVtTWFjLm1tICovOyB9OwotCQk1MTRCNDlEQjBEQjZENkFEMDAxQzM3NzAgLyogTG9jYWxTdG9y
YWdlQXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE0QjQ5RDkwREI2RDZBRDAwMUMzNzcwIC8qIExvY2FsU3RvcmFnZUFyZWEuaCAqLzsgfTsKLQkJ
NTE0QjQ5REMwREI2RDZBRDAwMUMzNzcwIC8qIExvY2FsU3RvcmFnZUFyZWEuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0QjQ5REEwREI2RDZBRDAw
MUMzNzcwIC8qIExvY2FsU3RvcmFnZUFyZWEuY3BwICovOyB9OwotCQk1MTRCNDlERjBEQjZENkI2
MDAxQzM3NzAgLyogU2Vzc2lvblN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRCNDlERDBEQjZENkI2MDAxQzM3NzAgLyogU2Vzc2lv
blN0b3JhZ2VBcmVhLmggKi87IH07Ci0JCTUxNEI0OUUwMERCNkQ2QjYwMDFDMzc3MCAvKiBTZXNz
aW9uU3RvcmFnZUFyZWEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE0QjQ5REUwREI2RDZCNjAwMUMzNzcwIC8qIFNlc3Npb25TdG9yYWdlQXJlYS5j
cHAgKi87IH07CiAJCTUxNEM3NjM3MENFOTIyNUUwMDdFRjNDRCAvKiBKU1NRTEVycm9yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjM1MENF
OTIyNUUwMDdFRjNDRCAvKiBKU1NRTEVycm9yLmNwcCAqLzsgfTsKIAkJNTE0Qzc2MzgwQ0U5MjI1
RTAwN0VGM0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2MzYwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FM
VHJhbnNhY3Rpb24uY3BwICovOyB9OwogCQk1MTRDNzY0QzBDRTkyMzRFMDA3RUYzQ0QgLyogQXV0
aGVudGljYXRpb25NYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNEM3NjQyMENFOTIzNEUwMDdFRjNDRCAvKiBBdXRoZW50aWNhdGlvbk1hYy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NzM2LDEw
ICs1NzMyLDYgQEAKIAkJNTE0MTg1RUQwQ0Q2NUYwNDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25X
cmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoYW5nZVZl
cnNpb25XcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0QjNGNzIw
QzcyMjA0NzAwMDUzMERGIC8qIEZpbGVTeXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmlsZVN5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRC
M0Y3NTBDNzIyMDU1MDAwNTMwREYgLyogRmlsZVN5c3RlbU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpbGVTeXN0ZW1NYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTUxNEI0OUQ5MERCNkQ2QUQwMDFDMzc3MCAvKiBMb2NhbFN0b3JhZ2VB
cmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsU3RvcmFnZUFyZWEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE0QjQ5REEwREI2RDZBRDAwMUMzNzcw
IC8qIExvY2FsU3RvcmFnZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTG9jYWxTdG9yYWdlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTUxNEI0OUREMERCNkQ2QjYwMDFDMzc3MCAvKiBTZXNzaW9uU3RvcmFnZUFyZWEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vzc2lvblN0b3JhZ2VBcmVhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNEI0OURFMERCNkQ2QjYwMDFDMzc3MCAvKiBTZXNzaW9u
U3RvcmFnZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vz
c2lvblN0b3JhZ2VBcmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0Qzc2
MzUwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMRXJyb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTUUxFcnJvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxNEM3NjM2MENFOTIyNUUwMDdFRjNDRCAvKiBKU1NRTFRyYW5zYWN0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRDNzY0MjBDRTkyMzRFMDA3RUYzQ0Qg
LyogQXV0aGVudGljYXRpb25NYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXV0aGVudGljYXRpb25NYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2ODIs
OCArOTY3NCw2IEBACiAJCQkJNTFGQUZFMzMwQ0VDQkYyRDAwQkIzRjI0IC8qIERhdGFiYXNlVHJh
Y2tlckNsaWVudC5oICovLAogCQkJCTUxQkUzODI2MERBRUY3REEwMDEwODVGQyAvKiBMb2NhbFN0
b3JhZ2UuY3BwICovLAogCQkJCTUxQkUzODI3MERBRUY3REEwMDEwODVGQyAvKiBMb2NhbFN0b3Jh
Z2UuaCAqLywKLQkJCQk1MTRCNDlEQTBEQjZENkFEMDAxQzM3NzAgLyogTG9jYWxTdG9yYWdlQXJl
YS5jcHAgKi8sCi0JCQkJNTE0QjQ5RDkwREI2RDZBRDAwMUMzNzcwIC8qIExvY2FsU3RvcmFnZUFy
ZWEuaCAqLywKIAkJCQk1MTFGMjMxMzBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGFz
ay5jcHAgKi8sCiAJCQkJNTExRjIzMTQwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRh
c2suaCAqLywKIAkJCQk1MTFGMjMxNTBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGhy
ZWFkLmNwcCAqLywKQEAgLTk3MTEsOCArOTcwMSw2IEBACiAJCQkJMUE3Q0NCMTgwQ0Q5NDY5QTAw
QjdCNjRFIC8qIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oICovLAogCQkJCTUxRTBCQjIy
MERBNTcyQTYwMEE5RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5jcHAgKi8sCiAJCQkJNTFFMEJCMjEw
REE1NzJBNjAwQTlFNDE3IC8qIFNlc3Npb25TdG9yYWdlLmggKi8sCi0JCQkJNTE0QjQ5REUwREI2
RDZCNjAwMUMzNzcwIC8qIFNlc3Npb25TdG9yYWdlQXJlYS5jcHAgKi8sCi0JCQkJNTE0QjQ5REQw
REI2RDZCNjAwMUMzNzcwIC8qIFNlc3Npb25TdG9yYWdlQXJlYS5oICovLAogCQkJCTUxRTNGOUM1
MERBMDU5REMwMDI1MDkxMSAvKiBTdG9yYWdlLmNwcCAqLywKIAkJCQk1MUUzRjlDNDBEQTA1OURD
MDAyNTA5MTEgLyogU3RvcmFnZS5oICovLAogCQkJCTUxRTNGOUQxMERBMDVENzEwMDI1MDkxMSAv
KiBTdG9yYWdlLmlkbCAqLywKQEAgLTE2MTg0LDcgKzE2MTcyLDYgQEAKIAkJCQk2NTZEMzczMjBB
REJBNURFMDBBNDU1NEQgLyogTG9hZGVyTlNVUkxFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTA2RTgxRUQ3MEFCNUQ1RTkwMEM4NzgzNyAvKiBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxQkUzODI5MERBRUY3REEwMDEwODVGQyAvKiBMb2NhbFN0
b3JhZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNEI0OURCMERCNkQ2QUQwMDFDMzc3MCAvKiBM
b2NhbFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTFGMjMxODBEQzE2MERBMDA0
RjAwMzIgLyogTG9jYWxTdG9yYWdlVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExRjIzMUEw
REMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTM1MjA3QkUwOUJENDEwQTAwRjIwMzhEIC8qIExvY2FsaXplZFN0cmluZ3MuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTY2MjQsNyArMTY2MTEsNiBAQAogCQkJCTkzMzA5RTBFMDk5RTY0OTIwMDU2
RTU4MSAvKiBTZWxlY3Rpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdGQTY4
MTBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTFFMEJCMjMwREE1NzJBNjAwQTlFNDE3IC8qIFNlc3Npb25TdG9yYWdlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk1MTRCNDlERjBEQjZENkI2MDAxQzM3NzAgLyogU2Vzc2lvblN0b3JhZ2VBcmVh
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxMDA5OUU2NDkyMDA1NkU1ODEgLyogU2V0Tm9k
ZUF0dHJpYnV0ZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTRGMDgyNDVFNTkw
MDFFOUFCQyAvKiBTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI4QzQwRTgyMDMx
QjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMTgyNjksNyArMTgy
NTUsNiBAQAogCQkJCTY1NkQzNzMzMEFEQkE1REUwMEE0NTU0RCAvKiBMb2FkZXJOU1VSTEV4dHJh
cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA2RTgxRUVDMEFCNURBOTcwMEM4NzgzNyAvKiBMb2Nh
bEN1cnJlbnRHcmFwaGljc0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUJFMzgyODBE
QUVGN0RBMDAxMDg1RkMgLyogTG9jYWxTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUx
NEI0OURDMERCNkQ2QUQwMDFDMzc3MCAvKiBMb2NhbFN0b3JhZ2VBcmVhLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxMUYyMzE3MERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUYXNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxMUYyMzE5MERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0
b3JhZ2VUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1MjA3QzAwOUJENDEyMTAwRjIw
MzhEIC8qIExvY2FsaXplZFN0cmluZ3NNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTE4NjcwLDcg
KzE4NjU1LDYgQEAKIAkJCQk0QThDOTZFQjBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29u
dHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDN0ZBNjgyMEQxRjE2NzkwMERCMjJB
OSAvKiBTZWxlY3Rvck5vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTBCQjI0MERB
NTcyQTYwMEE5RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1
MTRCNDlFMDBEQjZENkI2MDAxQzM3NzAgLyogU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzMzA5RTBGMDk5RTY0OTIwMDU2RTU4MSAvKiBTZXROb2RlQXR0cmlidXRl
Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEM5QTVFQTBCM0QxMDVGMDA1QTAyMzIg
LyogU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI4QzMwRTgyMDMxQjAwQjI1
OTY1IC8qIFNoYWRvd0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxT
dG9yYWdlLmNwcAkocmV2aXNpb24gNDUxNzcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9y
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkZpbGVT
eXN0ZW0uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgotI2lu
Y2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKQEAgLTkwLDExICs4OSwxMSBA
QCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBMb2NhbFN0b3JhZ2U6OnN0CiAgICAgLy8gRklYTUU6
IElmIHRoZSBzdG9yYWdlIGFyZWEgaXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0
aW1lIGhlcmUsIHdlIG5lZWQgdG8gCiAgICAgLy8gc3luYyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90
YSBvdXQgdG8gZGlzayB2aWEgYW4gdGFzayBvZiB0eXBlIEFyZWFTeW5jCiAKLSAgICBSZWZQdHI8
TG9jYWxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWE7CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBz
dG9yYWdlQXJlYTsKICAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhTWFwLmdldChv
cmlnaW4pKQogICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwogCi0gICAgc3Rv
cmFnZUFyZWEgPSBMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUob3JpZ2luLCBtX3N5bmNNYW5hZ2Vy
KTsKKyAgICBzdG9yYWdlQXJlYSA9IFN0b3JhZ2VBcmVhOjpjcmVhdGVMb2NhbFN0b3JhZ2Uob3Jp
Z2luLCBtX3N5bmNNYW5hZ2VyKTsKICAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0
b3JhZ2VBcmVhKTsKICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwogfQpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2UuaAkocmV2aXNpb24gNDUxNzcpCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKIAotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKICNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKIAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBA
IC01Miw3ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAg
ICBMb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAotICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+LCBT
ZWN1cml0eU9yaWdpbkhhc2g+IExvY2FsU3RvcmFnZUFyZWFNYXA7CisgICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBSZWZQdHI8U3RvcmFnZUFyZWE+LCBTZWN1
cml0eU9yaWdpbkhhc2g+IExvY2FsU3RvcmFnZUFyZWFNYXA7CiAgICAgICAgIExvY2FsU3RvcmFn
ZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKIAogICAgICAgICBTdHJpbmcgbV9wYXRoOwpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcAkocmV2aXNpb24gNDUxNzcpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEu
aCIKLQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLQotI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNp
bmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAi
RnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNp
bmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJTdG9yYWdlRXZlbnQuaCIKLSNpbmNsdWRl
ICJTdG9yYWdlQXJlYVN5bmMuaCIKLSNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IExvY2Fs
U3RvcmFnZUFyZWE6OmNyZWF0ZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0
b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBMb2NhbFN0b3JhZ2VBcmVhKG9yaWdpbiwgc3luY01hbmFnZXIpKTsKLX0KLQotTG9jYWxTdG9y
YWdlQXJlYTo6TG9jYWxTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVm
UHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCi0gICAgOiBTdG9yYWdlQXJlYShv
cmlnaW4pCi0gICAgLCBtX3N0b3JhZ2VBcmVhU3luYyhTdG9yYWdlQXJlYVN5bmM6OmNyZWF0ZShz
eW5jTWFuYWdlciwgdGhpcykpCi0gICAgLCBtX3N0b3JhZ2VTeW5jTWFuYWdlcihzeW5jTWFuYWdl
cikKLXsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpzY2hlZHVsZUZpbmFsU3luYygpCi17
Ci0gICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlRmluYWxTeW5jKCk7Ci19Ci0KLXZvaWQg
TG9jYWxTdG9yYWdlQXJlYTo6aXRlbUNoYW5nZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFt
ZSkKLXsKLSAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIG5l
d1ZhbHVlKTsKLSAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBuZXdWYWx1
ZSwgc291cmNlRnJhbWUpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZUFyZWE6Oml0ZW1SZW1vdmVk
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBGcmFtZSogc291cmNl
RnJhbWUpCi17Ci0gICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlSXRlbUZvclN5bmMoa2V5
LCBTdHJpbmcoKSk7Ci0gICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgU3Ry
aW5nKCksIHNvdXJjZUZyYW1lKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjphcmVhQ2xl
YXJlZChGcmFtZSogc291cmNlRnJhbWUpCi17Ci0gICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVk
dWxlQ2xlYXIoKTsKLSAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChTdHJpbmcoKSwgU3RyaW5nKCks
IFN0cmluZygpLCBzb3VyY2VGcmFtZSk7Ci19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6Ymxv
Y2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBtX3N0b3JhZ2VBcmVhU3luYy0+
YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6
ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xk
VmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgUGFnZSogcGFnZSA9IHNvdXJjZUZyYW1l
LT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOZWVk
IHRvIGNvcHkgYWxsIHJlbGV2YW50IGZyYW1lcyBmcm9tIGV2ZXJ5IHBhZ2UgdG8gYSB2ZWN0b3Is
IHNpbmNlIHNlbmRpbmcgdGhlIGV2ZW50IHRvIG9uZSBmcmFtZSBtaWdodCBtdXRhdGUgdGhlIGZy
YW1lIHRyZWUKLSAgICAvLyBvZiBhbnkgZ2l2ZW4gcGFnZSBpbiB0aGUgZ3JvdXAsIG9yIG11dGF0
ZSB0aGUgcGFnZSBncm91cCBpdHNlbGYKLSAgICBWZWN0b3I8UmVmUHRyPEZyYW1lPiA+IGZyYW1l
czsKLSAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2Vz
KCk7Ci0gICAgCi0gICAgSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2Vz
LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFn
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2
ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgICAgICAgICBmcmFt
ZXMuYXBwZW5kKGZyYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1l
bnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChTdG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUtPmRv
Y3VtZW50KCktPmRvY3VtZW50VVJJKCksIHNvdXJjZUZyYW1lLT5kb21XaW5kb3coKSwgZnJhbWVz
W2ldLT5kb21XaW5kb3coKS0+bG9jYWxTdG9yYWdlKCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQotCkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VBcmVhLmgJKHJldmlzaW9uIDQ1MTc3KQorKysgV2ViQ29yZS9zdG9yYWdl
L0xvY2FsU3RvcmFnZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
TG9jYWxTdG9yYWdlQXJlYV9oCi0jZGVmaW5lIExvY2FsU3RvcmFnZUFyZWFfaAotCi0jaWYgRU5B
QkxFKERPTV9TVE9SQUdFKQotCi0jaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIAotICAgIGNsYXNzIFN0b3JhZ2VBcmVhU3luYzsKLSAgICBjbGFzcyBT
dG9yYWdlU3luY01hbmFnZXI7Ci0gICAgCi0gICAgY2xhc3MgTG9jYWxTdG9yYWdlQXJlYSA6IHB1
YmxpYyBTdG9yYWdlQXJlYSB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxMb2NhbFN0b3JhZ2VBcmVhPiBjcmVhdGUoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1Jl
ZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKTsKLQotICAgICAgICB2b2lkIHNj
aGVkdWxlRmluYWxTeW5jKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBMb2NhbFN0b3JhZ2VB
cmVhKFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNN
YW5hZ2VyKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgaXRlbUNoYW5nZWQoY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZy
YW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBpdGVtUmVtb3ZlZChjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1l
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFyZWFDbGVhcmVkKEZyYW1lKiBzb3VyY2VGcmFtZSk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdDsK
LQotICAgICAgICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291
cmNlRnJhbWUpOwotCi0gICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IG1fc3RvcmFnZUFy
ZWFTeW5jOwotICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N0b3JhZ2VTeW5j
TWFuYWdlcjsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoRE9NX1NUT1JBR0UpCi0KLSNlbmRpZiAvLyBMb2NhbFN0b3JhZ2VBcmVhX2gKSW5kZXg6
IFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNwcAkocmV2aXNpb24gNDUxNzcpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3
IEBAIFBhc3NSZWZQdHI8U2Vzc2lvblN0b3JhZ2U+IFNlc3Npb25TdG9yYWcKICAgICAKICAgICBT
ZXNzaW9uU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5k
KCk7CiAgICAgZm9yIChTZXNzaW9uU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGkgPSBtX3N0b3Jh
Z2VBcmVhTWFwLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPFNlc3Np
b25TdG9yYWdlQXJlYT4gYXJlYUNvcHkgPSBpLT5zZWNvbmQtPmNvcHkoaS0+Zmlyc3QuZ2V0KCks
IG5ld1BhZ2UpOworICAgICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IGFyZWFDb3B5ID0gaS0+c2Vj
b25kLT5jb3B5KGktPmZpcnN0LmdldCgpLCBuZXdQYWdlKTsKICAgICAgICAgbmV3U2Vzc2lvbi0+
bV9zdG9yYWdlQXJlYU1hcC5zZXQoaS0+Zmlyc3QsIGFyZWFDb3B5LnJlbGVhc2UoKSk7CiAgICAg
fQogICAgIApAQCAtNjUsMTEgKzY1LDExIEBAIFBhc3NSZWZQdHI8U2Vzc2lvblN0b3JhZ2U+IFNl
c3Npb25TdG9yYWcKIAogUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU2Vzc2lvblN0b3JhZ2U6OnN0
b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiB7Ci0gICAgUmVmUHRyPFNlc3Npb25T
dG9yYWdlQXJlYT4gc3RvcmFnZUFyZWE7CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdl
QXJlYTsKICAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhTWFwLmdldChvcmlnaW4p
KQogICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwogICAgICAgICAKLSAgICBz
dG9yYWdlQXJlYSA9IFNlc3Npb25TdG9yYWdlQXJlYTo6Y3JlYXRlKG9yaWdpbiwgbV9wYWdlKTsK
KyAgICBzdG9yYWdlQXJlYSA9IFN0b3JhZ2VBcmVhOjpjcmVhdGVTZXNzaW9uU3RvcmFnZShvcmln
aW4sIG1fcGFnZSk7CiAgICAgbV9zdG9yYWdlQXJlYU1hcC5zZXQob3JpZ2luLCBzdG9yYWdlQXJl
YSk7CiAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKIH0KSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9T
ZXNzaW9uU3RvcmFnZS5oCShyZXZpc2lvbiA0NTE3NykKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNz
aW9uU3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQogCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCi0jaW5jbHVk
ZSAiU2Vzc2lvblN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTU2
LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFBhZ2UqIG1fcGFnZTsK
ICAgICAgICAgCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
LCBSZWZQdHI8U2Vzc2lvblN0b3JhZ2VBcmVhPiwgU2VjdXJpdHlPcmlnaW5IYXNoPiBTZXNzaW9u
U3RvcmFnZUFyZWFNYXA7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCBSZWZQdHI8U3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IFNlc3Npb25T
dG9yYWdlQXJlYU1hcDsKICAgICAgICAgU2Vzc2lvblN0b3JhZ2VBcmVhTWFwIG1fc3RvcmFnZUFy
ZWFNYXA7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJl
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5j
cHAJKHJldmlzaW9uIDQ1MTc3KQorKysgV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJl
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU2Vzc2lvblN0b3JhZ2VBcmVhLmgiCi0KLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0KLSNp
bmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAi
RnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCi0jaW5jbHVk
ZSAiU3RvcmFnZU1hcC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8U2Vz
c2lvblN0b3JhZ2VBcmVhPiBTZXNzaW9uU3RvcmFnZUFyZWE6OmNvcHkoU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiwgUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlc3Npb25T
dG9yYWdlQXJlYShvcmlnaW4sIHBhZ2UsIHRoaXMpKTsKLX0KLQotU2Vzc2lvblN0b3JhZ2VBcmVh
OjpTZXNzaW9uU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFnZSogcGFnZSkK
LSAgICA6IFN0b3JhZ2VBcmVhKG9yaWdpbikKLSAgICAsIG1fcGFnZShwYWdlKQotewotICAgIEFT
U0VSVChwYWdlKTsKLX0KLQotU2Vzc2lvblN0b3JhZ2VBcmVhOjpTZXNzaW9uU3RvcmFnZUFyZWEo
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFnZSogcGFnZSwgU2Vzc2lvblN0b3JhZ2VBcmVhKiBh
cmVhKQotICAgIDogU3RvcmFnZUFyZWEob3JpZ2luLCBhcmVhKQotICAgICwgbV9wYWdlKHBhZ2Up
Ci17Ci0gICAgQVNTRVJUKHBhZ2UpOwotfQotCi12b2lkIFNlc3Npb25TdG9yYWdlQXJlYTo6aXRl
bUNoYW5nZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0
IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKLXsKLSAgICBkaXNwYXRjaFN0
b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUpOwotfQotCi12
b2lkIFNlc3Npb25TdG9yYWdlQXJlYTo6aXRlbVJlbW92ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgb2xkVmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKLXsKLSAgICBkaXNwYXRj
aFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgc291cmNlRnJhbWUpOwotfQot
Ci12b2lkIFNlc3Npb25TdG9yYWdlQXJlYTo6YXJlYUNsZWFyZWQoRnJhbWUqIHNvdXJjZUZyYW1l
KQotewotICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5n
KCksIHNvdXJjZUZyYW1lKTsKLX0KLQotdm9pZCBTZXNzaW9uU3RvcmFnZUFyZWE6OmJsb2NrVW50
aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0Ci17Ci19Ci0KLXZvaWQgU2Vzc2lvblN0b3JhZ2VBcmVh
OjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBv
bGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQotewot
ICAgIC8vIEZvciBTZXNzaW9uU3RvcmFnZSBldmVudHMsIGVhY2ggZnJhbWUgaW4gdGhlIHBhZ2Un
cyBmcmFtZXRyZWUgd2l0aCB0aGUgc2FtZSBvcmlnaW4gYXMgdGhpcyBTdG9yYWdlQXJlYSBuZWVk
cyB0byBiZSBub3RpZmllZCBvZiB0aGUgY2hhbmdlCi0gICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4g
PiBmcmFtZXM7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBp
ZiAoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5T3Jp
Z2luKCkpKQotICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7Ci0gICAgfQotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgZnJh
bWVzW2ldLT5kb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KFN0b3JhZ2VFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBz
b3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRVUkkoKSwgc291cmNlRnJhbWUtPmRvbVdp
bmRvdygpLCBmcmFtZXNbaV0tPmRvbVdpbmRvdygpLT5zZXNzaW9uU3RvcmFnZSgpKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkK
LQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZUFyZWEuaAkocmV2aXNpb24gNDUxNzcp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIFNlc3Npb25TdG9yYWdlQXJlYV9oCi0jZGVmaW5lIFNlc3Npb25TdG9y
YWdlQXJlYV9oCi0KLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0KLSNpbmNsdWRlICJTdG9yYWdl
QXJlYS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBQYWdlOwotICAgIAot
ICAgIGNsYXNzIFNlc3Npb25TdG9yYWdlQXJlYSA6IHB1YmxpYyBTdG9yYWdlQXJlYSB7Ci0gICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZUFyZWE+IGNy
ZWF0ZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYWdlKiBwYWdlKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgU2Vzc2lvblN0b3JhZ2VBcmVhKG9yaWdpbiwgcGFnZSkpOyB9Ci0gICAgICAgIFBhc3NS
ZWZQdHI8U2Vzc2lvblN0b3JhZ2VBcmVhPiBjb3B5KFNlY3VyaXR5T3JpZ2luKiwgUGFnZSopOwot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgU2Vzc2lvblN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2lu
KiwgUGFnZSopOwotICAgICAgICBTZXNzaW9uU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQ
YWdlKiwgU2Vzc2lvblN0b3JhZ2VBcmVhKik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1D
aGFuZ2VkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBT
dHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgaXRlbVJlbW92ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUs
IEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhcmVhQ2xlYXJlZChG
cmFtZSogc291cmNlRnJhbWUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYmxvY2tVbnRpbEltcG9y
dENvbXBsZXRlKCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBkaXNwYXRjaFN0b3JhZ2VFdmVudChj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBu
ZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgCi0gICAgICAgIFBhZ2UqIG1f
cGFnZTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoRE9NX1NUT1JBR0UpCi0KLSNlbmRpZiAvLyBTZXNzaW9uU3RvcmFnZUFyZWFfaApJbmRleDog
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCShyZXZpc2lvbiA0NTE3NykKKysrIFdlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlQXJlYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDMwICsyOCw2NCBAQAogCiAj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQogCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0
b3JhZ2VFdmVudC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgogI2luY2x1ZGUgIlN0
b3JhZ2VNYXAuaCIKKyNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1TdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbikKK1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpjcmVhdGVMb2NhbFN0
b3JhZ2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFn
ZXI+IHN5bmNNYW5hZ2VyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEo
b3JpZ2luLCBzeW5jTWFuYWdlcikpOworfQorCitTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNN
YW5hZ2VyKQogICAgIDogbV9zZWN1cml0eU9yaWdpbihvcmlnaW4pCiAgICAgLCBtX3N0b3JhZ2VN
YXAoU3RvcmFnZU1hcDo6Y3JlYXRlKCkpCisgICAgLCBtX3N0b3JhZ2VTeW5jTWFuYWdlcihzeW5j
TWFuYWdlcikKKyAgICAsIG1fc2Vzc2lvblN0b3JhZ2VQYWdlKDApCiB7CisgICAgQVNTRVJUKG1f
c2VjdXJpdHlPcmlnaW4pOworICAgIEFTU0VSVChtX3N0b3JhZ2VNYXApOworCisgICAgLy8gRklY
TUU6IElmIHRoZXJlJ3Mgbm8gYmFja2luZyBzdG9yYWdlIGZvciBMb2NhbFN0b3JhZ2UsIHRoZSBk
ZWZhdWx0IFdlYktpdCBiZWhhdmlvciBzaG91bGQgYmUgdGhhdCBvZiBwcml2YXRlIGJyb3dzaW5n
LAorICAgIC8vIG5vdCBzaWxlbnRseSBpZ25vcmluZyBpdC4gIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNTg5NAorICAgIGlmIChtX3N0b3JhZ2VTeW5jTWFuYWdlcikg
eworICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYyA9IFN0b3JhZ2VBcmVhU3luYzo6Y3JlYXRlKG1f
c3RvcmFnZVN5bmNNYW5hZ2VyLCB0aGlzKTsKKyAgICAgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFT
eW5jKTsKKyAgICB9CiB9CiAKLVN0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdp
biogb3JpZ2luLCBTdG9yYWdlQXJlYSogYXJlYSkKLSAgICA6IG1fc2VjdXJpdHlPcmlnaW4ob3Jp
Z2luKQotICAgICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKK1Bhc3NSZWZQdHI8
U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpjcmVhdGVTZXNzaW9uU3RvcmFnZShTZWN1cml0eU9y
aWdpbiogb3JpZ2luLCBQYWdlKiBwYWdlKQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Rv
cmFnZUFyZWEob3JpZ2luLCBwYWdlLCAwKSk7CiB9CiAKLVN0b3JhZ2VBcmVhOjp+U3RvcmFnZUFy
ZWEoKQorUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNvcHkoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiwgUGFnZSogcGFnZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0
b3JhZ2VBcmVhKG9yaWdpbiwgcGFnZSwgbV9zdG9yYWdlTWFwKSk7Cit9CisKK1N0b3JhZ2VBcmVh
OjpTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYWdlKiBwYWdlLCBQYXNzUmVm
UHRyPFN0b3JhZ2VNYXA+IHN0b3JhZ2VNYXApCisgICAgOiBtX3NlY3VyaXR5T3JpZ2luKG9yaWdp
bikKKyAgICAsIG1fc3RvcmFnZU1hcChzdG9yYWdlTWFwKQorICAgICwgbV9zZXNzaW9uU3RvcmFn
ZVBhZ2UocGFnZSkKK3sKKyAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdpbik7CisgICAgQVNTRVJU
KG1fc2Vzc2lvblN0b3JhZ2VQYWdlKTsKKworICAgIGlmICghbV9zdG9yYWdlTWFwKSB7CisgICAg
ICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZSgpOworICAgICAgICBBU1NFUlQo
bV9zdG9yYWdlTWFwKTsKKyAgICB9CiB9CiAKIHVuc2lnbmVkIFN0b3JhZ2VBcmVhOjpsZW5ndGgo
KSBjb25zdApAQCAtMTA0LDggKzEzOCwxMSBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpzZXRJdGVtKGNv
bnN0IFN0cmluZyYgCiAgICAgICAgIG1fc3RvcmFnZU1hcCA9IG5ld01hcC5yZWxlYXNlKCk7CiAK
ICAgICAvLyBPbmx5IG5vdGlmeSB0aGUgY2xpZW50IGlmIGFuIGl0ZW0gd2FzIGFjdHVhbGx5IGNo
YW5nZWQKLSAgICBpZiAob2xkVmFsdWUgIT0gdmFsdWUpCi0gICAgICAgIGl0ZW1DaGFuZ2VkKGtl
eSwgb2xkVmFsdWUsIHZhbHVlLCBmcmFtZSk7CisgICAgaWYgKG9sZFZhbHVlICE9IHZhbHVlKSB7
CisgICAgICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgICAgIG1fc3RvcmFnZUFy
ZWFTeW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwgdmFsdWUpOworICAgICAgICBkaXNwYXRj
aFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCB2YWx1ZSwgZnJhbWUpOworICAgIH0KIH0KIAog
dm9pZCBTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZy
YW1lKQpAQCAtMTIxLDggKzE1OCwxMSBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKGNv
bnN0IFN0cmluCiAgICAgICAgIG1fc3RvcmFnZU1hcCA9IG5ld01hcC5yZWxlYXNlKCk7CiAKICAg
ICAvLyBPbmx5IG5vdGlmeSB0aGUgY2xpZW50IGlmIGFuIGl0ZW0gd2FzIGFjdHVhbGx5IHJlbW92
ZWQKLSAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKQotICAgICAgICBpdGVtUmVtb3ZlZChrZXks
IG9sZFZhbHVlLCBmcmFtZSk7CisgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkgeworICAgICAg
ICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+
c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIFN0cmluZygpKTsKKyAgICAgICAgZGlzcGF0Y2hTdG9y
YWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCksIGZyYW1lKTsKKyAgICB9CiB9CiAKIHZv
aWQgU3RvcmFnZUFyZWE6OmNsZWFyKEZyYW1lKiBmcmFtZSkKQEAgLTEzNCw3ICsxNzQsOSBAQCB2
b2lkIFN0b3JhZ2VBcmVhOjpjbGVhcihGcmFtZSogZnJhbWUpCiAgICAgCiAgICAgbV9zdG9yYWdl
TWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKCk7CiAgICAgCi0gICAgYXJlYUNsZWFyZWQoZnJhbWUp
OworICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMt
PnNjaGVkdWxlQ2xlYXIoKTsKKyAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChTdHJpbmcoKSwgU3Ry
aW5nKCksIFN0cmluZygpLCBmcmFtZSk7CiB9CiAKIGJvb2wgU3RvcmFnZUFyZWE6OmNvbnRhaW5z
KGNvbnN0IFN0cmluZyYga2V5KSBjb25zdApAQCAtMTQ5LDYgKzE5MSw1NCBAQCB2b2lkIFN0b3Jh
Z2VBcmVhOjppbXBvcnRJdGVtKGNvbnN0IFN0cmluCiAgICAgbV9zdG9yYWdlTWFwLT5pbXBvcnRJ
dGVtKGtleSwgdmFsdWUpOwogfQogCit2b2lkIFN0b3JhZ2VBcmVhOjpzY2hlZHVsZUZpbmFsU3lu
YygpCit7CisgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVh
U3luYy0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYTo6YmxvY2tV
bnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMp
CisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5ibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsK
K30KKwordm9pZCBTdG9yYWdlQXJlYTo6ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZy
YW1lKiBzb3VyY2VGcmFtZSkKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGNvcHkgYWxsIHJlbGV2YW50
IGZyYW1lcyBmcm9tIGV2ZXJ5IHBhZ2UgdG8gYSB2ZWN0b3Igc2luY2Ugc2VuZGluZyB0aGUgZXZl
bnQgdG8gb25lIGZyYW1lIG1pZ2h0IG11dGF0ZSB0aGUgZnJhbWUgdHJlZQorICAgIC8vIG9mIGFu
eSBnaXZlbiBwYWdlIGluIHRoZSBncm91cCBvciBtdXRhdGUgdGhlIHBhZ2UgZ3JvdXAgaXRzZWxm
LgorICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+ID4gZnJhbWVzOworCisgICAgaWYgKG1fc2Vzc2lv
blN0b3JhZ2VQYWdlKSB7CisgICAgICAgIC8vIFNlbmQgZXZlbnRzIG9ubHkgdG8gb3VyIHBhZ2Uu
CisgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9zZXNzaW9uU3RvcmFnZVBhZ2UtPm1haW5G
cmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewor
ICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVh
bChzZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1l
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGZyYW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+
ZGlzcGF0Y2hXaW5kb3dFdmVudChTdG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3Rv
cmFnZUV2ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50
KCktPmRvY3VtZW50VVJJKCksIHNvdXJjZUZyYW1lLT5kb21XaW5kb3coKSwgZnJhbWVzW2ldLT5k
b21XaW5kb3coKS0+c2Vzc2lvblN0b3JhZ2UoKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IEZJWE1FOiBXaGVuIGNhbiB0aGlzIG9jY3VyPworICAgICAgICBQYWdlKiBwYWdlID0gc291cmNl
RnJhbWUtPnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIC8vIFNlbmQgZXZlbnRzIHRvIGV2ZXJ5IHBhZ2UuCisgICAgICAgIGNvbnN0IEhh
c2hTZXQ8UGFnZSo+JiBwYWdlcyA9IHBhZ2UtPmdyb3VwKCkucGFnZXMoKTsKKyAgICAgICAgSGFz
aFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgpOworICAgICAgICBm
b3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0KS0+
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVz
LmFwcGVuZChmcmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3
VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFt
ZS0+ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPmxvY2FsU3RvcmFnZSgpKSk7
CisgICAgfSAgICAgICAgCit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCShyZXZpc2lvbiA0NTE3NykKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlQXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMCBAQAogI2lm
IEVOQUJMRShET01fU1RPUkFHRSkKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKKyNp
bmNsdWRlICJTdG9yYWdlTWFwLmgiCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCiAK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBA
IC0zOCwxNCArNDIsMTkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZyYW1l
OworICAgIGNsYXNzIFBhZ2U7CiAgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CisgICAgY2xhc3Mg
U3RvcmFnZUFyZWFTeW5jOwogICAgIGNsYXNzIFN0b3JhZ2VNYXA7CisgICAgY2xhc3MgU3RvcmFn
ZVN5bmNNYW5hZ2VyOwogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKICAgICBjbGFz
cyBTdG9yYWdlQXJlYSA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFN0b3JhZ2VBcmVhPiB7CiAg
ICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5TdG9yYWdlQXJlYSgpOwotICAgICAgICAKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IGNyZWF0ZUxvY2FsU3RvcmFnZShT
ZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3lu
Y01hbmFnZXIpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gY3JlYXRl
U2Vzc2lvblN0b3JhZ2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFnZSogcGFnZSk7CisgICAg
ICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IGNvcHkoU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7
CisKICAgICAgICAgLy8gVGhlIEhUTUw1IERPTSBTdG9yYWdlIEFQSQogICAgICAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdDsKICAgICAgICAgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIGNvbnN0OwpAQCAtNTUsMjMgKzY0LDI4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdm9pZCBjbGVhcihGcmFtZSogc291cmNlRnJhbWUpOwogCiAgICAgICAg
IGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0OworICAgICAgICB2b2lkIHNj
aGVkdWxlRmluYWxTeW5jKCk7CiAKICAgICAgICAgLy8gQ291bGQgYmUgY2FsbGVkIGZyb20gYSBi
YWNrZ3JvdW5kIHRocmVhZC4KICAgICAgICAgdm9pZCBpbXBvcnRJdGVtKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICAgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5T3JpZ2luKCkgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsgfQogCiAgICAgcHJv
dGVjdGVkOgotICAgICAgICBTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiopOwotICAgICAgICBT
dG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFN0b3JhZ2VBcmVhKik7CisgICAgICAgIFN0b3Jh
Z2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+KTsK
KyAgICAgICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7CisgICAgICAgIFN0
b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwgUGFnZSosIFBhc3NSZWZQdHI8U3RvcmFnZU1hcD4p
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1DaGFuZ2VkKGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1Zh
bHVlLCBGcmFtZSogc291cmNlRnJhbWUpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1S
ZW1vdmVkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBGcmFtZSog
c291cmNlRnJhbWUpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFyZWFDbGVhcmVkKEZyYW1l
KiBzb3VyY2VGcmFtZSkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYmxvY2tVbnRpbEltcG9y
dENvbXBsZXRlKCkgY29uc3QgPSAwOworICAgICAgICB2b2lkIGJsb2NrVW50aWxJbXBvcnRDb21w
bGV0ZSgpIGNvbnN0OworCisgICAgICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFs
dWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CiAKICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBtX3NlY3VyaXR5T3JpZ2luOwogICAgICAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbV9zdG9yYWdl
TWFwOworCisgICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IG1fc3RvcmFnZUFyZWFTeW5j
OworICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N0b3JhZ2VTeW5jTWFuYWdl
cjsKKyAgICAgICAgUGFnZSogbV9zZXNzaW9uU3RvcmFnZVBhZ2U7ICAvLyBOVUxMIGlmZiBpdCdz
IExvY2FsU3RvcmFnZQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCShyZXZpc2lvbiA0NTE3NykKKysrIFdlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nywx
MSBAQCBTdG9yYWdlQXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyhQYXNzUmVmCiAgICAgLCBtX2lt
cG9ydENvbXBsZXRlKGZhbHNlKQogewogICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhKTsKLSAgICBp
ZiAoIW1fc3luY01hbmFnZXIgfHwgIW1fc3luY01hbmFnZXItPnNjaGVkdWxlSW1wb3J0KHRoaXMp
KQorICAgIEFTU0VSVChtX3N5bmNNYW5hZ2VyKTsKKworICAgIC8vIEZJWE1FOiBJZiBpdCBjYW4n
dCBpbXBvcnQsIHRoZW4gdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2aW9yIHNob3VsZCBiZSB0aGF0
IG9mIHByaXZhdGUgYnJvd3NpbmcsCisgICAgLy8gbm90IHNpbGVudGx5IGlnbm9yaW5nIGl0LiAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODk0CisgICAgaWYgKCFt
X3N5bmNNYW5hZ2VyLT5zY2hlZHVsZUltcG9ydCh0aGlzKSkKICAgICAgICAgbV9pbXBvcnRDb21w
bGV0ZSA9IHRydWU7CiB9CiAKQEAgLTcxLDggKzc1LDYgQEAgU3RvcmFnZUFyZWFTeW5jOjp+U3Rv
cmFnZUFyZWFTeW5jKCkKIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUZpbmFsU3luYygp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fc3luY01hbmFnZXIp
Ci0gICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAobV9zeW5jVGltZXIuaXNBY3RpdmUoKSkK
ICAgICAgICAgbV9zeW5jVGltZXIuc3RvcCgpOwpAQCAtMTIxLDggKzEyMyw2IEBAIHZvaWQgU3Rv
cmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNsZWFyKCkKIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5j
VGltZXJGaXJlZChUaW1lcjxTdG9yYWdlQXJlYVN5bmM+KikKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIGlmICghbV9zeW5jTWFuYWdlcikKLSAgICAgICAgcmV0dXJuOwogCiAg
ICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gbV9jaGFuZ2VkSXRlbXMu
YmVnaW4oKTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgZW5kID0gbV9j
aGFuZ2VkSXRlbXMuZW5kKCk7CkBAIC0xNjEsOCArMTYxLDYgQEAgdm9pZCBTdG9yYWdlQXJlYVN5
bmM6OnBlcmZvcm1JbXBvcnQoKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgaWYgKCFtX3N5bmNNYW5hZ2VyKQot
ICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1fc3luY01h
bmFnZXItPmZ1bGxEYXRhYmFzZUZpbGVuYW1lKG1fc3RvcmFnZUFyZWEtPnNlY3VyaXR5T3JpZ2lu
KCkpOwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCShyZXZpc2lvbiA0NTE3NykK
KysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNiArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBGcmFtZTsK
ICAgICBjbGFzcyBTdG9yYWdlQXJlYTsgICAgCiAgICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2Vy
OwogICAgIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaAkocmV2aXNpb24g
NDUxNzcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDkgKzI4LDkgQEAKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAotI2lu
Y2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUYXNrLmgi
CiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWEu
aCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKIAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4K
</data>
<flag name="review"
          id="16431"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>