<?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>197078</bug_id>
          
          <creation_ts>2019-04-18 15:45:46 -0700</creation_ts>
          <short_desc>WKContentRuleLists should have a maximum FileProtection of CompleteUnlessOpen</short_desc>
          <delta_ts>2019-04-26 14:37:52 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1528631</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-04-18 15:45:46 -0700</bug_when>
    <thetext>WKContentRuleLists should have a maximum FileProtection of CompleteUnlessOpen</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528634</commentid>
    <comment_count>1</comment_count>
      <attachid>367767</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-04-18 15:51:23 -0700</bug_when>
    <thetext>Created attachment 367767
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528635</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-04-18 15:51:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/49564348&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528852</commentid>
    <comment_count>3</comment_count>
      <attachid>367822</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-04-19 13:58:51 -0700</bug_when>
    <thetext>Created attachment 367822
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529279</commentid>
    <comment_count>4</comment_count>
      <attachid>367822</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-04-22 10:01:36 -0700</bug_when>
    <thetext>Comment on attachment 367822
Patch

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

r=me

&gt; Source/WebKit/NetworkProcess/cache/NetworkCacheFileSystemCocoa.mm:39
&gt; +    // FIXME: For the network cache we should either use makeSafeToUseMemoryMapForPath instead of this
&gt; +    // or we should listen to UIApplicationProtectedDataWillBecomeUnavailable and unmap files.

Can you address this FIXME in a follow-up patch? Should be pretty straight-forward. (We probably can&apos;t close the Radar until we fix both cases.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530049</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-04-24 10:46:45 -0700</bug_when>
    <thetext>http://trac.webkit.org/r244597</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530322</commentid>
    <comment_count>6</comment_count>
      <attachid>367822</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-04-25 00:35:00 -0700</bug_when>
    <thetext>Comment on attachment 367822
Patch

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

&gt; Source/WebKit/NetworkProcess/cache/NetworkCacheFileSystemCocoa.mm:41
&gt; +    NSDictionary&lt;NSFileAttributeKey, id&gt; *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:&amp;error];

This constructs a dictionary with all kinds of attributes that we don&apos;t care about. Should we worry about performance here? How about using the C API like the existing code does?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530809</commentid>
    <comment_count>7</comment_count>
      <attachid>367822</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-04-26 14:37:20 -0700</bug_when>
    <thetext>Comment on attachment 367822
Patch

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

&gt;&gt; Source/WebKit/NetworkProcess/cache/NetworkCacheFileSystemCocoa.mm:41
&gt;&gt; +    NSDictionary&lt;NSFileAttributeKey, id&gt; *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:&amp;error];
&gt; 
&gt; This constructs a dictionary with all kinds of attributes that we don&apos;t care about. Should we worry about performance here? How about using the C API like the existing code does?

I don&apos;t think this is a significant performance regression.  We could switch back if we find it to be worth it, but the lack of magic numbers and mysterious structures here makes the code much more maintainable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530810</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-04-26 14:37:52 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #4)
&gt; Comment on attachment 367822 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=367822&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/cache/NetworkCacheFileSystemCocoa.mm:39
&gt; &gt; +    // FIXME: For the network cache we should either use makeSafeToUseMemoryMapForPath instead of this
&gt; &gt; +    // or we should listen to UIApplicationProtectedDataWillBecomeUnavailable and unmap files.
&gt; 
&gt; Can you address this FIXME in a follow-up patch? Should be pretty
&gt; straight-forward. (We probably can&apos;t close the Radar until we fix both
&gt; cases.)

Done in https://bugs.webkit.org/show_bug.cgi?id=197264</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367767</attachid>
            <date>2019-04-18 15:51:23 -0700</date>
            <delta_ts>2019-04-19 13:58:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197078-20190418155121.patch</filename>
            <type>text/plain</type>
            <size>41322</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDQ0MDMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBACisyMDE5LTA0LTE4ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgV0tDb250ZW50UnVs
ZUxpc3RzIHNob3VsZCBoYXZlIGEgbWF4aW11bSBGaWxlUHJvdGVjdGlvbiBvZiBDb21wbGV0ZVVu
bGVzc09wZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NzA3OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDk1NjQzNDg+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcjI0MjczNSB3YXMgYSBmaXggZm9y
IGNyYXNoZXMgd2hlbiB1c2luZyBtbWFwJ2QgbWVtb3J5IGluIGFwcHMgd2l0aCBkZWZhdWx0IEZp
bGVQcm90ZWN0aW9uIG9mIE5TRmlsZVByb3RlY3Rpb25Db21wbGV0ZS4KKyAgICAgICAgSXQgaXMg
bW9yZSBtZW1vcnkgZWZmaWNpZW50IGFuZCBqdXN0IGFzIHNlY3VyZSB0byByZWR1Y2UgdGhlIEZp
bGVQcm90ZWN0aW9uIG9mIHRoZXNlIGZpbGVzIHRvIE5TRmlsZVByb3RlY3Rpb25Db21wbGV0ZVVu
bGVzc09wZW4uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVG
aWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjppc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om1ha2VT
YWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpwYXRoUmVnaXN0ZXJlZEFzVW5zYWZlVG9NZW1vcnlNYXBGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpyZWdpc3RlclBhdGhBc1Vuc2FmZVRvTWVt
b3J5TWFwRm9yVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Db2NvYS5tbTogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6aXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjptYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aCk6Cisg
ICAgICAgICogU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OmNvbmRpdGlvbnNBcHBseU9ubHlU
b0RvbWFpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0OjpmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0OjpmaWx0ZXJzV2l0aENvbmRpdGlvbnNC
eXRlY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0Ojp0b3BVUkxGaWx0ZXJzQnl0ZWNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b21waWxlZENvbnRlbnRSdWxlTGlzdDo6YWN0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0Ojp1c2VzQ29waWVkTWVtb3J5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuaDoKKyAg
ICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGE6OmRlY29k
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YTo6c2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1
bGVMaXN0RGF0YTo6ZGF0YVBvaW50ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhOjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERh
dGEpOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3QuY3BwOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxpc3Q6
OnVzZXNDb3BpZWRNZW1vcnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQVBJQ29udGVudFJ1bGVMaXN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50UnVsZUxpc3RTdG9yZS5jcHA6CisgICAgICAgIChBUEk6Om9wZW5BbmRNYXBPckNvcHlDb250
ZW50UnVsZUxpc3QpOgorICAgICAgICAoQVBJOjpjb21waWxlZFRvRmlsZSk6CisgICAgICAgIChB
UEk6OmNyZWF0ZUV4dGVuc2lvbik6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3Jl
OjpnZXRDb250ZW50UnVsZUxpc3RTb3VyY2UpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxp
c3RTdG9yZTo6cmVhZENvbnRlbnRzT2ZGaWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6TWFw
cGVkT3JDb3BpZWREYXRhOjpkYXRhUG9pbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmVDb2NvYS5tbToKKyAgICAgICAg
KEFQSTo6Q29udGVudFJ1bGVMaXN0U3RvcmU6OnJlYWRDb250ZW50c09mRmlsZSk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1t
OgorICAgICAgICAoK1tXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIF9yZWdpc3RlclBhdGhBc1Vuc2Fm
ZVRvTWVtb3J5TWFwRm9yVGVzdGluZzpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5tbToKKyAgICAgICAgKC1bX1dL
VXNlckNvbnRlbnRGaWx0ZXIgdXNlc0NvcGllZE1lbW9yeV0pOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmg6CisgICAg
ICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMDQtMTcgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtl
IFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YSBub24tZGVmYXVsdC1jb25zdHJ1Y3RpYmxl
LCBtb3ZlIGl0cyBub25zZXJpYWxpemVkIG1lbWJlciB0byBBUEk6OkNvbnRlbnRSdWxlTGlzdApJ
bmRleDogU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkocmV2aXNpb24gMjQ0MzU5KQorKysgU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAv
LyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQorTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRmlsZVN5c3RlbUNvY29hLm1tCiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJ
T0NoYW5uZWxDb2NvYS5tbQogCiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrQWN0aXZpdHlU
cmFja2VyQ29jb2EubW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
MjQ0MzU5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVGaWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDUxICsxNDUsMTUgQEAgdm9p
ZCB1cGRhdGVGaWxlTW9kaWZpY2F0aW9uVGltZUlmTmVlZGVkKAogI2VuZGlmCiB9CiAKLXN0YXRp
YyBTdHJpbmcmIHBhdGhSZWdpc3RlcmVkQXNVbnNhZmVUb01lbW9yeU1hcEZvclRlc3RpbmcoKQor
I2lmICFQTEFURk9STShDT0NPQSkKK2Jvb2wgaXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGNv
bnN0IFN0cmluZyYpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gcGF0aDsK
LSAgICByZXR1cm4gcGF0aC5nZXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KLQotdm9pZCByZWdp
c3RlclBhdGhBc1Vuc2FmZVRvTWVtb3J5TWFwRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIHBhdGgp
Cit2b2lkIG1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGNvbnN0IFN0cmluZyYpCiB7Ci0g
ICAgcGF0aFJlZ2lzdGVyZWRBc1Vuc2FmZVRvTWVtb3J5TWFwRm9yVGVzdGluZygpID0gcGF0aDsK
IH0KLQotICAgIAotYm9vbCBpc1NhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5n
JiBwYXRoKQotewotICAgIGlmIChwYXRoID09IHBhdGhSZWdpc3RlcmVkQXNVbnNhZmVUb01lbW9y
eU1hcEZvclRlc3RpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKElPU19GQU1JTFlfU0lNVUxBVE9SKQotICAgIHN0cnVj
dCB7Ci0gICAgICAgIHVpbnQzMl90IGxlbmd0aDsKLSAgICAgICAgdWludDMyX3QgcHJvdGVjdGlv
bkNsYXNzOwotICAgIH0gYXR0ckJ1ZmZlcjsKLQotICAgIGF0dHJsaXN0IGF0dHJMaXN0ID0geyB9
OwotICAgIGF0dHJMaXN0LmJpdG1hcGNvdW50ID0gQVRUUl9CSVRfTUFQX0NPVU5UOwotICAgIGF0
dHJMaXN0LmNvbW1vbmF0dHIgPSBBVFRSX0NNTl9EQVRBX1BST1RFQ1RfRkxBR1M7Ci0gICAgaW50
MzJfdCBlcnJvciA9IGdldGF0dHJsaXN0KEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbihwYXRoKS5kYXRhKCksICZhdHRyTGlzdCwgJmF0dHJCdWZmZXIsIHNpemVvZihhdHRyQnVm
ZmVyKSwgRlNPUFRfTk9GT0xMT1cpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihOZXR3b3JrLCAiVW5hYmxlIHRvIGdldCBjYWNoZSBkaXJlY3RvcnkgcHJvdGVj
dGlvbiBjbGFzcywgZGlzYWJsaW5nIHVzZSBvZiBzaGFyZWQgbWFwcGVkIG1lbW9yeSIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRm9yIHN0cmljdGVyIHByb3RlY3Rp
b24gY2xhc3NlcyBzaGFyZWQgbWFwcyBjb3VsZCBkaXNhcHBlYXIgd2hlbiBkZXZpY2UgaXMgbG9j
a2VkLgotICAgIGNvbnN0IHVpbnQzMl90IGZpbGVQcm90ZWN0aW9uQ29tcGxldGVVbnRpbEZpcnN0
VXNlckF1dGhlbnRpY2F0aW9uID0gMzsKLSAgICBib29sIGlzU2FmZSA9IGF0dHJCdWZmZXIucHJv
dGVjdGlvbkNsYXNzID49IGZpbGVQcm90ZWN0aW9uQ29tcGxldGVVbnRpbEZpcnN0VXNlckF1dGhl
bnRpY2F0aW9uOwotCi0gICAgaWYgKCFpc1NhZmUpCi0gICAgICAgIFJFTEVBU0VfTE9HKE5ldHdv
cmssICJEaXNhbGxvd2luZyB1c2Ugb2Ygc2hhcmVkIG1hcHBlZCBtZW1vcnkgZHVlIHRvIGNvbnRh
aW5lciBwcm90ZWN0aW9uIGNsYXNzICV1IiwgYXR0ckJ1ZmZlci5wcm90ZWN0aW9uQ2xhc3MpOwot
Ci0gICAgcmV0dXJuIGlzU2FmZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBhdGgpOwotICAg
IHJldHVybiB0cnVlOwogI2VuZGlmCi19CiAKIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3Rl
bS5oCShyZXZpc2lvbiAyNDQzNTkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIs
OCBAQCBzdHJ1Y3QgRmlsZVRpbWVzIHsKIEZpbGVUaW1lcyBmaWxlVGltZXMoY29uc3QgU3RyaW5n
JiBwYXRoKTsKIHZvaWQgdXBkYXRlRmlsZU1vZGlmaWNhdGlvblRpbWVJZk5lZWRlZChjb25zdCBT
dHJpbmcmIHBhdGgpOwogCi1ib29sIGlzU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBT
dHJpbmcmIHBhdGgpOwotdm9pZCByZWdpc3RlclBhdGhBc1Vuc2FmZVRvTWVtb3J5TWFwRm9yVGVz
dGluZyhjb25zdCBTdHJpbmcmKTsKK2Jvb2wgaXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGNv
bnN0IFN0cmluZyYpOwordm9pZCBtYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBT
dHJpbmcmKTsKIAogfQogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtQ29jb2EubW0J
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVGaWxlU3lzdGVtQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2Fj
aGVGaWxlU3lzdGVtLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhY2hl
IHsKKworYm9vbCBpc1NhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRo
KQoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShJT1NfRkFNSUxZX1NJ
TVVMQVRPUikKKyAgICAvLyBGSVhNRTogRm9yIHRoZSBuZXR3b3JrIGNhY2hlIHdlIHNob3VsZCBl
aXRoZXIgdXNlIG1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoIGluc3RlYWQgb2YgdGhpcwor
ICAgIC8vIG9yIHdlIHNob3VsZCBsaXN0ZW4gdG8gVUlBcHBsaWNhdGlvblByb3RlY3RlZERhdGFX
aWxsQmVjb21lVW5hdmFpbGFibGUgYW5kIHVubWFwIGZpbGVzLgorICAgIE5TRXJyb3IgKmVycm9y
ID0gbmlsOworICAgIE5TRGljdGlvbmFyeTxOU0ZpbGVBdHRyaWJ1dGVLZXksIGlkPiAqYXR0cmli
dXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gYXR0cmlidXRlc09mSXRlbUF0
UGF0aDpwYXRoIGVycm9yOiZlcnJvcl07CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICJVbmFibGUgdG8gZ2V0IGNhY2hlIGRpcmVjdG9yeSBwcm90
ZWN0aW9uIGNsYXNzLCBkaXNhYmxpbmcgdXNlIG9mIHNoYXJlZCBtYXBwZWQgbWVtb3J5Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKFtbYXR0cmlidXRlcyBvYmplY3RG
b3JLZXk6TlNGaWxlUHJvdGVjdGlvbktleV0gaXNFcXVhbFRvU3RyaW5nOk5TRmlsZVByb3RlY3Rp
b25Db21wbGV0ZV0pIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTmV0d29yaywgIkRpc2FsbG93aW5n
IHVzZSBvZiBzaGFyZWQgbWFwcGVkIG1lbW9yeSBkdWUgdG8gY29udGFpbmVyIHByb3RlY3Rpb24g
Y2xhc3MgTlNGaWxlUHJvdGVjdGlvbkNvbXBsZXRlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBtYWtlU2FmZVRvVXNl
TWVtb3J5TWFwRm9yUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaWYgKGlzU2FmZVRv
VXNlTWVtb3J5TWFwRm9yUGF0aChwYXRoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNFcnJv
ciAqZXJyb3IgPSBuaWw7CisgICAgQk9PTCBzdWNjZXNzID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXSBzZXRBdHRyaWJ1dGVzOkB7IE5TRmlsZVByb3RlY3Rpb25LZXk6IE5TRmlsZVBy
b3RlY3Rpb25Db21wbGV0ZVVubGVzc09wZW4gfSBvZkl0ZW1BdFBhdGg6cGF0aCBlcnJvcjomZXJy
b3JdOworICAgIEFTU0VSVCghZXJyb3IpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3Vj
Y2Vzcyk7Cit9CisKK30KK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5jcHAJKHJldmlzaW9uIDI0NDM1OSkKKysrIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsMTkgKzQ0LDE0IEBAIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0Ojp+V2Vi
Q29tcGlsZWQKIHsKIH0KIAotYm9vbCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6dXNlc0Nv
cGllZE1lbW9yeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+KG1fZGF0YS5kYXRhKTsKLX0KLQogYm9vbCBX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6Y29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2RhdGEuZGF0YVBvaW50ZXIoKSkgKyBt
X2RhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0KTsKKyAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihtX2RhdGEuZGF0YS0+ZGF0YSgpKSArIG1fZGF0YS5jb25kaXRpb25zQXBwbHlPbmx5
VG9Eb21haW5PZmZzZXQpOwogfQogCiBjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBQnl0ZWNvZGUqIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0OjpmaWx0ZXJzV2l0aG91dENv
bmRpdGlvbnNCeXRlY29kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSo+KG1fZGF0YS5kYXRhUG9p
bnRlcigpKSArIG1fZGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldDsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkRGQUJ5dGVjb2RlKj4obV9kYXRhLmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuZmlsdGVyc1dpdGhv
dXRDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQ7CiB9CiAKIHVuc2lnbmVkIFdlYkNvbXBpbGVkQ29u
dGVudFJ1bGVMaXN0OjpmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZUxlbmd0aCgpIGNv
bnN0CkBAIC02Niw3ICs2MSw3IEBAIHVuc2lnbmVkIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0
OjpmaWwKIAogY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6ZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGUo
KSBjb25zdAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqPihtX2RhdGEuZGF0YVBvaW50ZXIoKSkgKyBtX2RhdGEu
ZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQ7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSo+KG1fZGF0
YS5kYXRhLT5kYXRhKCkpICsgbV9kYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlT2Zm
c2V0OwogfQogCiB1bnNpZ25lZCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6ZmlsdGVyc1dp
dGhDb25kaXRpb25zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdApAQCAtNzYsNyArNzEsNyBAQCB1bnNp
Z25lZCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6ZmlsCiAKIGNvbnN0IFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6
OnRvcFVSTEZpbHRlcnNCeXRlY29kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSo+KG1fZGF0YS5k
YXRhUG9pbnRlcigpKSArIG1fZGF0YS50b3BVUkxGaWx0ZXJzQnl0ZWNvZGVPZmZzZXQ7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFC
eXRlY29kZSo+KG1fZGF0YS5kYXRhLT5kYXRhKCkpICsgbV9kYXRhLnRvcFVSTEZpbHRlcnNCeXRl
Y29kZU9mZnNldDsKIH0KIAogdW5zaWduZWQgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OnRv
cFVSTEZpbHRlcnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0CkBAIC04Niw3ICs4MSw3IEBAIHVuc2ln
bmVkIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0Ojp0b3AKIAogY29uc3QgV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBXZWJDb21waWxlZENvbnRlbnRS
dWxlTGlzdDo6YWN0aW9ucygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZSo+KG1fZGF0
YS5kYXRhUG9pbnRlcigpKSArIG1fZGF0YS5hY3Rpb25zT2Zmc2V0OworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXplZEFjdGlv
bkJ5dGUqPihtX2RhdGEuZGF0YS0+ZGF0YSgpKSArIG1fZGF0YS5hY3Rpb25zT2Zmc2V0OwogfQog
CiB1bnNpZ25lZCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6YWN0aW9uc0xlbmd0aCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVu
dFJ1bGVMaXN0LmgJKHJldmlzaW9uIDI0NDM1OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDYg
QEAgcHVibGljOgogCiAgICAgY29uc3QgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhJiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKLSAgICBib29sIHVzZXNDb3BpZWRNZW1v
cnkoKSBjb25zdDsKLSAgICAKIHByaXZhdGU6CiAgICAgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxp
c3QoV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhJiYpOwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5j
cHAJKHJldmlzaW9uIDI0NDQwMykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDMxICszNCwxMSBA
QAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc2l6ZV90IFdlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0RGF0YTo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24oZGF0YSwg
W10gKGNvbnN0IGF1dG8mIHNoYXJlZE1lbW9yeU9yQnVmZmVyKSB7Ci0gICAgICAgIHJldHVybiBz
aGFyZWRNZW1vcnlPckJ1ZmZlci0+c2l6ZSgpOwotICAgIH0pOwotfQotCi1jb25zdCB2b2lkKiBX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGE6OmRhdGFQb2ludGVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbihkYXRhLCBbXSAoY29uc3QgYXV0byYgc2hhcmVkTWVtb3J5
T3JCdWZmZXIpIC0+IGNvbnN0IHZvaWQqIHsKLSAgICAgICAgcmV0dXJuIHNoYXJlZE1lbW9yeU9y
QnVmZmVyLT5kYXRhKCk7Ci0gICAgfSk7Ci19Ci0KIHZvaWQgV2ViQ29tcGlsZWRDb250ZW50UnVs
ZUxpc3REYXRhOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGlm
IChhdXRvIHNoYXJlZE1lbW9yeSA9IFdURjo6Z2V0X2lmPFJlZlB0cjxTaGFyZWRNZW1vcnk+Pihk
YXRhKSkgewotICAgICAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAgICAgIFNoYXJlZE1lbW9yeTo6
SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgc2hhcmVkTWVtb3J5LT5nZXQoKS0+Y3JlYXRlSGFuZGxl
KGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0gICAgICAgIGVu
Y29kZXIgPDwgaGFuZGxlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVuY29kZXIgPDwgZmFsc2U7
Ci0gICAgICAgIGVuY29kZXIgPDwgSVBDOjpTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlIHsgKldU
Rjo6Z2V0PFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PihkYXRhKSB9OwotICAgIH0KKyAg
ICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgZGF0YS0+Y3JlYXRlSGFuZGxlKGhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgZW5jb2RlciA8
PCBoYW5kbGU7CiAKICAgICBlbmNvZGVyIDw8IGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9m
ZnNldDsKICAgICBlbmNvZGVyIDw8IGFjdGlvbnNPZmZzZXQ7CkBAIC03MywyNCArNTMsMTAgQEAg
dm9pZCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGE6OmVuYwogCiBPcHRpb25hbDxXZWJD
b21waWxlZENvbnRlbnRSdWxlTGlzdERhdGE+IFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0
YTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBWYXJpYW50PFJlZlB0cjxT
aGFyZWRNZW1vcnk+LCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4gZGF0YTsKLQotICAg
IE9wdGlvbmFsPGJvb2w+IGhhc1NoYXJlZE1lbW9yeTsKLSAgICBkZWNvZGVyID4+IGhhc1NoYXJl
ZE1lbW9yeTsKLSAgICBpZiAoIWhhc1NoYXJlZE1lbW9yeSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIGlmICgqaGFzU2hhcmVkTWVtb3J5KSB7Ci0gICAgICAgIFNoYXJlZE1l
bW9yeTo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUp
KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgZGF0YSA9IHsgU2hh
cmVkTWVtb3J5OjptYXAoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5
KSB9OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJl
bmNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGFSZWZlcmVuY2UpKQotICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgZGF0YSA9IHsgUmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4oV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YVJlZmVy
ZW5jZS5kYXRhKCksIGRhdGFSZWZlcmVuY2Uuc2l6ZSgpKSkgfTsKLSAgICB9CisgICAgU2hhcmVk
TWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFuZGxlKSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBk
YXRhID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246
OlJlYWRPbmx5KTsKIAogICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBjb25kaXRpb25zQXBwbHlPbmx5
VG9Eb21haW5PZmZzZXQ7CiAgICAgZGVjb2RlciA+PiBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21h
aW5PZmZzZXQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRS
dWxlTGlzdERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb21w
aWxlZENvbnRlbnRSdWxlTGlzdERhdGEuaAkocmV2aXNpb24gMjQ0NDAzKQorKysgU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkNvbXBp
bGVkQ29udGVudFJ1bGVMaXN0RGF0YSB7CiBwdWJsaWM6Ci0gICAgV2ViQ29tcGlsZWRDb250ZW50
UnVsZUxpc3REYXRhKFZhcmlhbnQ8UmVmUHRyPFNoYXJlZE1lbW9yeT4sIFJlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+PiYmIGRhdGEsIHVuc2lnbmVkIGNvbmRpdGlvbnNBcHBseU9ubHlUb0Rv
bWFpbk9mZnNldCwgdW5zaWduZWQgYWN0aW9uc09mZnNldCwgdW5zaWduZWQgYWN0aW9uc1NpemUs
IHVuc2lnbmVkIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0LCB1bnNpZ25l
ZCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUsIHVuc2lnbmVkIGZpbHRlcnNX
aXRoQ29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCBmaWx0ZXJzV2l0aENvbmRpdGlv
bnNCeXRlY29kZVNpemUsIHVuc2lnbmVkIHRvcFVSTEZpbHRlcnNCeXRlY29kZU9mZnNldCwgdW5z
aWduZWQgdG9wVVJMRmlsdGVyc0J5dGVjb2RlU2l6ZSkKKyAgICBXZWJDb21waWxlZENvbnRlbnRS
dWxlTGlzdERhdGEoUmVmUHRyPFNoYXJlZE1lbW9yeT4mJiBkYXRhLCB1bnNpZ25lZCBjb25kaXRp
b25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQsIHVuc2lnbmVkIGFjdGlvbnNPZmZzZXQsIHVuc2ln
bmVkIGFjdGlvbnNTaXplLCB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29k
ZU9mZnNldCwgdW5zaWduZWQgZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplLCB1
bnNpZ25lZCBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCwgdW5zaWduZWQgZmls
dGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplLCB1bnNpZ25lZCB0b3BVUkxGaWx0ZXJzQnl0
ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIHRvcFVSTEZpbHRlcnNCeXRlY29kZVNpemUpCiAgICAgICAg
IDogZGF0YShXVEZNb3ZlKGRhdGEpKQogICAgICAgICAsIGNvbmRpdGlvbnNBcHBseU9ubHlUb0Rv
bWFpbk9mZnNldChjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQpCiAgICAgICAgICwg
YWN0aW9uc09mZnNldChhY3Rpb25zT2Zmc2V0KQpAQCAtNTgsMTAgKzU4LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwogICAgIHN0YXRpYyBPcHRpb25h
bDxXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGE+IGRlY29kZShJUEM6OkRlY29kZXImKTsK
IAotICAgIHNpemVfdCBzaXplKCkgY29uc3Q7Ci0gICAgY29uc3Qgdm9pZCogZGF0YVBvaW50ZXIo
KSBjb25zdDsKLSAgICAKLSAgICBWYXJpYW50PFJlZlB0cjxTaGFyZWRNZW1vcnk+LCBSZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4gZGF0YTsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBk
YXRhOwogICAgIHVuc2lnbmVkIGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9mZnNldCB7IDAg
fTsKICAgICB1bnNpZ25lZCBhY3Rpb25zT2Zmc2V0IHsgMCB9OwogICAgIHVuc2lnbmVkIGFjdGlv
bnNTaXplIHsgMCB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRl
bnRSdWxlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSUNvbnRlbnRSdWxlTGlzdC5jcHAJKHJldmlzaW9uIDI0NDQwMykKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MywxMSArNDMsNiBAQCBDb250ZW50UnVsZUxpc3Q6On5Db250ZW50UnVsZUxpc3QoKQogewog
fQogCi1ib29sIENvbnRlbnRSdWxlTGlzdDo6dXNlc0NvcGllZE1lbW9yeSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY29tcGlsZWRSdWxlTGlzdC0+dXNlc0NvcGllZE1lbW9yeSgpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBBUEkKIAogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxl
TGlzdC5oCShyZXZpc2lvbiAyNDQ0MDMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJQ29udGVudFJ1bGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDYgQEAgcHVi
bGljOgogICAgIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
OyB9CiAgICAgY29uc3QgV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdCYgY29tcGls
ZWRSdWxlTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsZWRSdWxlTGlzdC5nZXQoKTsgfQog
Ci0gICAgYm9vbCB1c2VzQ29waWVkTWVtb3J5KCkgY29uc3Q7Ci0KIHByaXZhdGU6CiAgICAgV1RG
OjpTdHJpbmcgbV9uYW1lOwogICAgIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0PiBtX2NvbXBpbGVkUnVsZUxpc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI0
NDQwMykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RT
dG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw0MCArMjAxLDE0IEBAIHN0YXRpYyBPcHRp
b25hbDxDb250ZW50UnVsZUxpc3RNZXRhRGF0YT4KICAgICByZXR1cm4gbWV0YURhdGE7CiB9CiAK
LSNpZiAhUExBVEZPUk0oQ09DT0EpCi1SZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBDb250
ZW50UnVsZUxpc3RTdG9yZTo6cmVhZENvbnRlbnRzT2ZGaWxlKGNvbnN0IFdURjo6U3RyaW5nJiBm
aWxlUGF0aCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLSNlbmRpZgotCi1zdHJ1Y3QgTWFwcGVkT3JDb3BpZWREYXRhIHsKK3N0cnVjdCBNYXBw
ZWREYXRhIHsKICAgICBDb250ZW50UnVsZUxpc3RNZXRhRGF0YSBtZXRhRGF0YTsKLSAgICBWYXJp
YW50PFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPj4gZGF0YTsKLSAgICAKLSAgICBjb25zdCB1aW50OF90KiBkYXRhUG9pbnRlcigpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihkYXRhLCBbXSAoY29uc3QgV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIHJldHVybiBkYXRh
LmRhdGEoKTsKLSAgICAgICAgfSwgW10gKGNvbnN0IFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+JiBzaGFyZWRCdWZmZXIpIHsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihzaGFyZWRCdWZmZXItPmRhdGEoKSk7Ci0gICAgICAgIH0pOwotICAg
IH0KKyAgICBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSBkYXRhOwogfTsKIAotc3RhdGljIE9w
dGlvbmFsPE1hcHBlZE9yQ29waWVkRGF0YT4gb3BlbkFuZE1hcE9yQ29weUNvbnRlbnRSdWxlTGlz
dChjb25zdCBXVEY6OlN0cmluZyYgcGF0aCkKK3N0YXRpYyBPcHRpb25hbDxNYXBwZWREYXRhPiBv
cGVuQW5kTWFwT3JDb3B5Q29udGVudFJ1bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5nJiBwYXRoKQog
ewotICAgIGlmICghV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmlzU2FmZVRvVXNlTWVtb3J5TWFwRm9y
UGF0aChwYXRoKSkgewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZm
ZXIgPSBDb250ZW50UnVsZUxpc3RTdG9yZTo6cmVhZENvbnRlbnRzT2ZGaWxlKHBhdGgpOwotICAg
ICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
ICAgIGF1dG8gbWV0YURhdGEgPSBkZWNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSgqYnVmZmVy
KTsKLSAgICAgICAgaWYgKCFtZXRhRGF0YSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgICAgIHJldHVybiB7eyBXVEZNb3ZlKCptZXRhRGF0YSksIHsgYnVmZmVyLnJlbGVh
c2VOb25OdWxsKCkgfX19OwotICAgIH0KLQorICAgIFdlYktpdDo6TmV0d29ya0NhY2hlOjptYWtl
U2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChwYXRoKTsKICAgICBXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6RGF0YSBmaWxlRGF0YSA9IG1hcEZpbGUoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
LmRhdGEoKSk7CiAgICAgaWYgKGZpbGVEYXRhLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwpAQCAtMjU4LDcgKzIzMiw3IEBAIHN0YXRpYyBib29sIHdyaXRlRGF0YVRvRmls
ZShjb25zdCBXZWJLaXQKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAotc3RhdGljIEV4cGVjdGVk
PE1hcHBlZE9yQ29waWVkRGF0YSwgc3RkOjplcnJvcl9jb2RlPiBjb21waWxlZFRvRmlsZShXVEY6
OlN0cmluZyYmIGpzb24sIFZlY3RvcjxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVu
dEV4dGVuc2lvblJ1bGU+JiYgcGFyc2VkUnVsZXMsIGNvbnN0IFdURjo6U3RyaW5nJiBmaW5hbEZp
bGVQYXRoKQorc3RhdGljIEV4cGVjdGVkPE1hcHBlZERhdGEsIHN0ZDo6ZXJyb3JfY29kZT4gY29t
cGlsZWRUb0ZpbGUoV1RGOjpTdHJpbmcmJiBqc29uLCBWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25SdWxlPiYmIHBhcnNlZFJ1bGVzLCBjb25zdCBXVEY6
OlN0cmluZyYgZmluYWxGaWxlUGF0aCkKIHsKICAgICB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM7CiAKQEAgLTQxMSwzNCArMzg1LDIzIEBAIHN0YXRpYyBFeHBlY3Rl
ZDxNYXBwZWRPckNvcGllZERhdGEsIHN0ZDoKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDb250ZW50
IFJ1bGUgTGlzdCBjb21waWxpbmcgZmFpbGVkOiBNb3ZpbmcgZmlsZSBmYWlsZWQuIik7CiAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50UnVsZUxpc3RTdG9yZTo6RXJyb3I6OkNv
bXBpbGVGYWlsZWQpOwogICAgIH0KLQotICAgIGlmICghaXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQ
YXRoKGZpbmFsRmlsZVBhdGgpKSB7Ci0gICAgICAgIGF1dG8gY29udGVudHMgPSBDb250ZW50UnVs
ZUxpc3RTdG9yZTo6cmVhZENvbnRlbnRzT2ZGaWxlKGZpbmFsRmlsZVBhdGgpOwotICAgICAgICBp
ZiAoIWNvbnRlbnRzKQotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRS
dWxlTGlzdFN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZCk7Ci0gICAgICAgIHJldHVybiB7eyBX
VEZNb3ZlKG1ldGFEYXRhKSwgV1RGTW92ZShjb250ZW50cykgfX07Ci0gICAgfQorICAgIAorICAg
IG1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGZpbmFsRmlsZVBhdGgpOwogICAgIAogICAg
IHJldHVybiB7eyBXVEZNb3ZlKG1ldGFEYXRhKSwgV1RGTW92ZShtYXBwZWREYXRhKSB9fTsKIH0K
IAotc3RhdGljIFJlZjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4gY3JlYXRlRXh0ZW5zaW9uKGNvbnN0
IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBNYXBwZWRPckNvcGllZERhdGEmJiBkYXRhKQorc3Rh
dGljIFJlZjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4gY3JlYXRlRXh0ZW5zaW9uKGNvbnN0IFdURjo6
U3RyaW5nJiBpZGVudGlmaWVyLCBNYXBwZWREYXRhJiYgZGF0YSkKIHsKLSAgICBSZWZQdHI8V2Vi
S2l0OjpTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeTsKLSAgICBpZiAoYXV0byBtYXBwZWRGaWxl
RGF0YSA9IFdURjo6Z2V0X2lmPFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhPihkYXRhLmRhdGEp
KSB7Ci0gICAgICAgIHNoYXJlZE1lbW9yeSA9IG1hcHBlZEZpbGVEYXRhLT50cnlDcmVhdGVTaGFy
ZWRNZW1vcnkoKTsKLQotICAgICAgICAvLyBDb250ZW50IGV4dGVuc2lvbnMgYXJlIGFsd2F5cyBj
b21waWxlZCB0byBmaWxlcywgYW5kIGF0IHRoaXMgcG9pbnQgdGhlIGZpbGUKLSAgICAgICAgLy8g
aGFzIGJlZW4gYWxyZWFkeSBtYXBwZWQsIHRoZXJlZm9yZSB0cnlDcmVhdGVTaGFyZWRNZW1vcnko
KSBjYW5ub3QgZmFpbC4KLSAgICAgICAgQVNTRVJUKHNoYXJlZE1lbW9yeSk7Ci0gICAgfQotICAg
IGF1dG8gbWFwcGVkT3JDb3BpZWRGaWxlRGF0YSA9IHNoYXJlZE1lbW9yeSA/Ci0gICAgICAgIFZh
cmlhbnQ8UmVmUHRyPFdlYktpdDo6U2hhcmVkTWVtb3J5PiwgUmVmUHRyPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4+IHsgc2hhcmVkTWVtb3J5IH0KLSAgICAgICAgOiBWYXJpYW50PFJlZlB0cjxXZWJL
aXQ6OlNoYXJlZE1lbW9yeT4sIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiB7IFdURk1v
dmUoV1RGOjpnZXQ8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+KGRhdGEuZGF0YSkpIH07
CisgICAgYXV0byBzaGFyZWRNZW1vcnkgPSBkYXRhLmRhdGEudHJ5Q3JlYXRlU2hhcmVkTWVtb3J5
KCk7CisKKyAgICAvLyBDb250ZW50IGV4dGVuc2lvbnMgYXJlIGFsd2F5cyBjb21waWxlZCB0byBm
aWxlcywgYW5kIGF0IHRoaXMgcG9pbnQgdGhlIGZpbGUKKyAgICAvLyBoYXMgYmVlbiBhbHJlYWR5
IG1hcHBlZCwgdGhlcmVmb3JlIHRyeUNyZWF0ZVNoYXJlZE1lbW9yeSgpIGNhbm5vdCBmYWlsLgor
ICAgIEFTU0VSVChzaGFyZWRNZW1vcnkpOwogCiAgICAgY29uc3Qgc2l6ZV90IGhlYWRlckFuZFNv
dXJjZVNpemUgPSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSArIGRhdGEubWV0YURhdGEu
c291cmNlU2l6ZTsKICAgICBhdXRvIGNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YSA9IFdlYktp
dDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhKAotICAgICAgICBXVEZNb3ZlKG1hcHBl
ZE9yQ29waWVkRmlsZURhdGEpLAorICAgICAgICBXVEZNb3ZlKHNoYXJlZE1lbW9yeSksCiAgICAg
ICAgIENvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9mZnNldCwKICAgICAgICAgaGVhZGVyQW5k
U291cmNlU2l6ZSwKICAgICAgICAgZGF0YS5tZXRhRGF0YS5hY3Rpb25zU2l6ZSwKQEAgLTQ1Niw3
ICs0MTksNyBAQCBzdGF0aWMgUmVmPEFQSTo6Q29udGVudFJ1bGVMaXN0PiBjcmVhdGVFCiAgICAg
ICAgIGRhdGEubWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplCiAgICAgKTsK
ICAgICBhdXRvIGNvbXBpbGVkQ29udGVudFJ1bGVMaXN0ID0gV2ViS2l0OjpXZWJDb21waWxlZENv
bnRlbnRSdWxlTGlzdDo6Y3JlYXRlKFdURk1vdmUoY29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRh
KSk7Ci0gICAgcmV0dXJuIEFQSTo6Q29udGVudFJ1bGVMaXN0OjpjcmVhdGUoaWRlbnRpZmllciwg
V1RGTW92ZShjb21waWxlZENvbnRlbnRSdWxlTGlzdCksIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkRhdGE+KGRhdGEuZGF0YSkgPyBXVEY6OmdldDxXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6RGF0YT4oZGF0YS5kYXRhKSA6IFdlYktpdDo6TmV0d29ya0NhY2hlOjpE
YXRhIHsgfSk7CisgICAgcmV0dXJuIEFQSTo6Q29udGVudFJ1bGVMaXN0OjpjcmVhdGUoaWRlbnRp
ZmllciwgV1RGTW92ZShjb21waWxlZENvbnRlbnRSdWxlTGlzdCksIFdURk1vdmUoZGF0YS5kYXRh
KSk7CiB9CiAKIHZvaWQgQ29udGVudFJ1bGVMaXN0U3RvcmU6Omxvb2t1cENvbnRlbnRSdWxlTGlz
dChjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChS
ZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTU4OCwxNCArNTUxLDE0IEBAIHZvaWQgQ29udGVudFJ1bGVMaXN0U3RvcmU6
OmdldENvbnRlbnRSdWwKICAgICAgICAgICAgICAgICBjb21wbGV0ZSh7IH0pOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJvb2wgaXM4Qml0ID0g
Y29udGVudFJ1bGVMaXN0LT5kYXRhUG9pbnRlcigpW0NvbnRlbnRSdWxlTGlzdEZpbGVIZWFkZXJT
aXplXTsKKyAgICAgICAgICAgIGJvb2wgaXM4Qml0ID0gY29udGVudFJ1bGVMaXN0LT5kYXRhLmRh
dGEoKVtDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZV07CiAgICAgICAgICAgICBzaXplX3Qg
c3RhcnQgPSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSArIHNpemVvZihib29sKTsKICAg
ICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBjb250ZW50UnVsZUxpc3QtPm1ldGFEYXRhLnNvdXJj
ZVNpemUgLSBzaXplb2YoYm9vbCk7CiAgICAgICAgICAgICBpZiAoaXM4Qml0KQotICAgICAgICAg
ICAgICAgIGNvbXBsZXRlKFdURjo6U3RyaW5nKGNvbnRlbnRSdWxlTGlzdC0+ZGF0YVBvaW50ZXIo
KSArIHN0YXJ0LCBsZW5ndGgpKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZShXVEY6OlN0cmlu
Zyhjb250ZW50UnVsZUxpc3QtPmRhdGEuZGF0YSgpICsgc3RhcnQsIGxlbmd0aCkpOwogICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCEobGVuZ3RoICUgc2l6ZW9mKFVD
aGFyKSkpOwotICAgICAgICAgICAgICAgIGNvbXBsZXRlKFdURjo6U3RyaW5nKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVUNoYXIqPihjb250ZW50UnVsZUxpc3QtPmRhdGFQb2ludGVyKCkgKyBzdGFy
dCksIGxlbmd0aCAvIHNpemVvZihVQ2hhcikpKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZShX
VEY6OlN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oY29udGVudFJ1bGVMaXN0
LT5kYXRhLmRhdGEoKSArIHN0YXJ0KSwgbGVuZ3RoIC8gc2l6ZW9mKFVDaGFyKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaAko
cmV2aXNpb24gMjQ0MzU5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRl
bnRSdWxlTGlzdFN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDggKzc2LDYgQEAgcHVibGlj
OgogICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRSdWxlTGlzdFZlcnNpb24oY29uc3QgV1RGOjpT
dHJpbmcmIGlkZW50aWZpZXIpOwogICAgIHZvaWQgZ2V0Q29udGVudFJ1bGVMaXN0U291cmNlKGNv
bnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdURjo6
U3RyaW5nKT4pOwogCi0gICAgc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IHJl
YWRDb250ZW50c09mRmlsZShjb25zdCBXVEY6OlN0cmluZyYgcGF0aCk7Ci0KIHByaXZhdGU6CiAg
ICAgV1RGOjpTdHJpbmcgZGVmYXVsdFN0b3JlUGF0aChib29sIGxlZ2FjeUZpbGVuYW1lKTsKICAg
ICBzdGF0aWMgQ29udGVudFJ1bGVMaXN0U3RvcmUmIGxlZ2FjeURlZmF1bHRTdG9yZSgpOwpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL0FQSUNvbnRlbnRSdWxlTGlzdFN0
b3JlQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlQ29jb2EubW0JKHJldmlzaW9uIDI0NDM1OSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElDb250ZW50UnVsZUxpc3RTdG9y
ZUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxNSArNjQsNiBAQCBXVEY6OlN0cmluZyBD
b250ZW50UnVsZUxpc3RTdG9yZTo6ZGVmYXVsCiAgICAgcmV0dXJuIGNvbnRlbnRSdWxlTGlzdFN0
b3JlVVJMLmFic29sdXRlVVJMLnBhdGguZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOwogfQogCi1S
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBDb250ZW50UnVsZUxpc3RTdG9yZTo6cmVhZENv
bnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCi17Ci0gICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7Ci0gICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRz
T2ZVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpmaWxlUGF0aCBpc0RpcmVjdG9yeTpOT11dOwot
ICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBBUEkK
IAogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxp
c3RTdG9yZS5tbQkocmV2aXNpb24gMjQ0MzU5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEy
NiwxMSArMTI2LDYgQEAgLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIAogLy8gRm9yIHRlc3Rp
bmcgb25seS4KIAotKyAodm9pZClfcmVnaXN0ZXJQYXRoQXNVbnNhZmVUb01lbW9yeU1hcEZvclRl
c3Rpbmc6KE5TU3RyaW5nICopZmlsZW5hbWUKLXsKLSAgICBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6
cmVnaXN0ZXJQYXRoQXNVbnNhZmVUb01lbW9yeU1hcEZvclRlc3RpbmcoZmlsZW5hbWUpOwotfQot
CiAtICh2b2lkKV9yZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzCiB7CiAgICAgX2NvbnRlbnRSdWxl
TGlzdFN0b3JlLT5zeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHMoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3Jl
UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oCShyZXZpc2lvbiAyNDQzNTkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZVBy
aXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogLSAodm9pZClfcmVtb3Zl
QWxsQ29udGVudFJ1bGVMaXN0czsKIC0gKHZvaWQpX2ludmFsaWRhdGVDb250ZW50UnVsZUxpc3RW
ZXJzaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyOwogLSAodm9pZClfZ2V0
Q29udGVudFJ1bGVMaXN0U291cmNlRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVy
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1N0cmluZyopKWNvbXBsZXRpb25IYW5kbGVy
OwotKyAodm9pZClfcmVnaXN0ZXJQYXRoQXNVbnNhZmVUb01lbW9yeU1hcEZvclRlc3Rpbmc6KE5T
U3RyaW5nICopZmlsZW5hbWU7CiAKIC8vIE5TX1JFTEVBU0VTX0FSR1VNRU5UIHRvIGtlZXAgcGVh
ayBtZW1vcnkgdXNhZ2UgbG93LgogLSAodm9pZClfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklk
ZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihO
U1N0cmluZyAqKSBOU19SRUxFQVNFU19BUkdVTUVOVCBlbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICop
KWNvbXBsZXRpb25IYW5kbGVyOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5tbQkocmV2aXNpb24gMjQ0
MzU5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50
RmlsdGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1Niw0IEBAIC0gKGlkKV9pbml0V2l0
aFdLQ29udGVudFJ1bGVMaXN0OihXS0NvbnQKICAgICByZXR1cm4gc2VsZjsKIH0KIAotLSAoQk9P
TCl1c2VzQ29waWVkTWVtb3J5Ci17Ci0gICAgcmV0dXJuIF9jb250ZW50UnVsZUxpc3QtPl9jb250
ZW50UnVsZUxpc3QtPnVzZXNDb3BpZWRNZW1vcnkoKTsKLX0KLQogQGVuZApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
Q29udGVudEZpbHRlclByaXZhdGUuaAkocmV2aXNpb24gMjQ0MzU5KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw1IEBACiBAaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50Rmls
dGVyIChXS1ByaXZhdGUpCiAKIC0gKGlkKV9pbml0V2l0aFdLQ29udGVudFJ1bGVMaXN0OihXS0Nv
bnRlbnRSdWxlTGlzdCopY29udGVudFJ1bGVMaXN0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMpLCBpb3MoMTEuMCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHVz
ZXNDb3BpZWRNZW1vcnk7CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjQ0MzU5KQorKysgU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MzUzOSw2ICszNTM5LDcgQEAKIAkJNUNCQzlCODkxQzY1MjRBNTAwQThGRENGIC8qIE5ldHdvcmtE
YXRhVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrRGF0YVRh
c2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzlCOEIxQzY1MjU3MzAwQThG
RENGIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gTmV0d29ya0RhdGFUYXNrQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVDQzVEQjkxMjE0ODhFMTYwMDZDQjhBOCAvKiBTaGFyZWRCdWZmZXJEYXRh
UmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZEJ1ZmZl
ckRhdGFSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNEMTUwNzYy
MjY4RjdGMDAwNkZCNEFGIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Db2NvYS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1D
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNEMjg2NDkxRTcyMkY0NDAw
OTRGREM4IC8qIF9XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBfV0tVc2VyQ29udGVudEZpbHRlclByaXZhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNEMjg2NEExRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVu
dFJ1bGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudFJ1
bGVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDRDI4NjRCMUU3MjJGNDQw
MDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdLQ29udGVudFJ1bGVMaXN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtODkyMCw2ICs4OTIxLDcgQEAKIAkJCQlFNDEzRjU5QjFBQzFBREI2MDAzNDUz
NjAgLyogTmV0d29ya0NhY2hlRW50cnkuaCAqLywKIAkJCQlFNDY5N0NDQzFCMjVFQjhGMDAxQjBB
NkMgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgKi8sCiAJCQkJODM0QjI1MEUxQTgzMUE4
RDAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCAqLywKKwkJCQk1Q0QxNTA3NjIy
NjhGN0YwMDA2RkI0QUYgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbUNvY29hLm1tICovLAogCQkJ
CUU0MkUwNjBCMUFBNzQ0MEQwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaCAqLywK
IAkJCQlFNDJFMDYwRDFBQTc1MEU1MDBCMTE2OTkgLyogTmV0d29ya0NhY2hlSU9DaGFubmVsQ29j
b2EubW0gKi8sCiAJCQkJRTQ0MzZFQzAxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZUtl
eS5jcHAgKi8sCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNDQ0NDIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNyBAQAorMjAxOS0wNC0xOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFdLQ29udGVudFJ1bGVMaXN0cyBzaG91bGQg
aGF2ZSBhIG1heGltdW0gRmlsZVByb3RlY3Rpb24gb2YgQ29tcGxldGVVbmxlc3NPcGVuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcwNzgKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzQ5NTY0MzQ4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9X
S0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbToKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAgICgt
W1Rlc3RTY2hlbWVIYW5kbGVyU3VicmVzb3VyY2VTaG91bGRCZUJsb2NrZWQgd2ViVmlldzpzdGFy
dFVSTFNjaGVtZVRhc2s6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1Rlc3RTY2hlbWVIYW5kbGVy
U3VicmVzb3VyY2VTaG91bGRCZUJsb2NrZWQgd2ViVmlldzpzdG9wVVJMU2NoZW1lVGFzazpdKTog
RGVsZXRlZC4KKyAgICAgICAgVW5mb3J0dW5hdGVseSwgc2V0dGluZyB0aGUgTlNGaWxlUHJvdGVj
dGlvbktleSBhdHRyaWJ1dGUgaXMgb25seSBzdXBwb3J0ZWQgb24gaU9TIGRldmljZXMuCisKIDIw
MTktMDQtMTggIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRk
IHN1cHBvcnQgZm9yIHBhcnNpbmcgRmFpclBsYXlTdHJlYW1pbmcgUFNTSCBib3hlcy4KSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24gMjQ0MzU5KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDkgQEAKIAogI2ltcG9ydCAiUGxhdGZv
cm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3QuaCIKLSNpbXBvcnQgIlRlc3RXS1dlYlZpZXcu
aCIKICNpbXBvcnQgPFdlYktpdC9XS0NvbnRlbnRSdWxlTGlzdC5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvX1dLVXNl
ckNvbnRlbnRGaWx0ZXJQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1w
b3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZS5oPgotI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJz
Lmg+CiAKIGNsYXNzIFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0IDogcHVibGljIHRlc3Rpbmc6
OlRlc3QgewogcHVibGljOgpAQCAtMzgzLDEwMSArMzc4LDU3IEBAIFRFU1RfRihXS0NvbnRlbnRS
dWxlTGlzdFN0b3JlVGVzdCwgQWRkUmUKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJl
Y2VpdmVkQWxlcnQpOwogfQogCi1AaW50ZXJmYWNlIFRlc3RTY2hlbWVIYW5kbGVyU3VicmVzb3Vy
Y2VTaG91bGRCZUJsb2NrZWQgOiBOU09iamVjdCA8V0tVUkxTY2hlbWVIYW5kbGVyPgotQGVuZAot
QGltcGxlbWVudGF0aW9uIFRlc3RTY2hlbWVIYW5kbGVyU3VicmVzb3VyY2VTaG91bGRCZUJsb2Nr
ZWQKLS0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzdGFydFVSTFNjaGVtZVRh
c2s6KGlkIDxXS1VSTFNjaGVtZVRhc2s+KXRhc2sKLXsKLSAgICBFWFBFQ1RfVFJVRShbdGFzay5y
ZXF1ZXN0LlVSTC5wYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9zaG91bGRsb2FkIl0pOwotICAgIFt0
YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVS
TDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRM
ZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsKLSAgICBbdGFzayBk
aWRGaW5pc2hdOwotfQotLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHN0b3BV
UkxTY2hlbWVUYXNrOihpZCA8V0tVUkxTY2hlbWVUYXNrPil0YXNrCi17Ci0gICAgRVhQRUNUX1RS
VUUoZmFsc2UpOwotfQotQGVuZAotCiBURVNUX0YoV0tDb250ZW50UnVsZUxpc3RTdG9yZVRlc3Qs
IFVuc2FmZU1NYXApCiB7CiAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiB0ZW1wRGlyID0gW05TVGVt
cG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiVW5zYWZl
TU1hcFRlc3QiXTsKICAgICBSZXRhaW5QdHI8V0tDb250ZW50UnVsZUxpc3RTdG9yZT4gc3RvcmUg
PSBbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBzdG9yZVdpdGhVUkw6W05TVVJMIGZpbGVVUkxXaXRo
UGF0aDp0ZW1wRGlyLmdldCgpIGlzRGlyZWN0b3J5OllFU11dOwotICAgIHN0YXRpYyBOU1N0cmlu
ZyAqaWRlbnRpZmllciA9IEAiVGVzdFJ1bGVMaXN0IjsKLSAgICBzdGF0aWMgTlNTdHJpbmcgKmZp
bGVOYW1lID0gQCJDb250ZW50UnVsZUxpc3QtVGVzdFJ1bGVMaXN0IjsKKyAgICBzdGF0aWMgTlNT
dHJpbmcgKmNvbXBpbGVkSWRlbnRpZmllciA9IEAiQ29tcGlsZWRSdWxlTGlzdCI7CisgICAgc3Rh
dGljIE5TU3RyaW5nICpjb3BpZWRJZGVudGlmaWVyID0gQCJDb3BpZWRSdWxlTGlzdCI7CiAgICAg
c3RhdGljIE5TU3RyaW5nICpydWxlTGlzdFNvdXJjZVN0cmluZyA9IEAiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImJsb2NrZWRz
dWJyZXNvdXJjZVwifX1dIjsKLSAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGZpbGVQYXRoID0gW3Rl
bXBEaXIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OmZpbGVOYW1lXTsKLQotICAgIGF1
dG8gcnVuVGVzdCA9IFsmXSAoYm9vbCBzaG91bGRVc2VDb3BpZWRNZW1vcnkpIHsKLSAgICAgICAg
RVhQRUNUX0ZBTFNFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0
UGF0aDpmaWxlUGF0aC5nZXQoKV0pOwotICAgICAgICAKLSAgICAgICAgX19ibG9jayBib29sIGRv
bmVDb21waWxpbmcgPSBmYWxzZTsKLSAgICAgICAgX19ibG9jayBSZXRhaW5QdHI8V0tDb250ZW50
UnVsZUxpc3Q+IHJ1bGVMaXN0OwotICAgICAgICBbc3RvcmUgY29tcGlsZUNvbnRlbnRSdWxlTGlz
dEZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OnJ1bGVMaXN0
U291cmNlU3RyaW5nIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3QgKmZpbHRl
ciwgTlNFcnJvciAqZXJyb3IpIHsKLSAgICAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIp
OwotICAgICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwotICAgICAgICAgICAgZG9uZUNvbXBp
bGluZyA9IHRydWU7Ci0gICAgICAgICAgICBydWxlTGlzdCA9IGZpbHRlcjsKLSAgICAgICAgICAg
IEVYUEVDVF9UUlVFKFtbW1tfV0tVc2VyQ29udGVudEZpbHRlciBhbGxvY10gX2luaXRXaXRoV0tD
b250ZW50UnVsZUxpc3Q6ZmlsdGVyXSBhdXRvcmVsZWFzZV0gdXNlc0NvcGllZE1lbW9yeV0gPT0g
c2hvdWxkVXNlQ29waWVkTWVtb3J5KTsKLSAgICAgICAgfV07Ci0gICAgICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7Ci0gICAgICAgIAotICAgICAgICBFWFBFQ1Rf
VFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6Zmls
ZVBhdGguZ2V0KCldKTsKLQotICAgICAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtUZXN0U2No
ZW1lSGFuZGxlclN1YnJlc291cmNlU2hvdWxkQmVCbG9ja2VkIG5ld10pOwotICAgICAgICBhdXRv
IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIG5ld10pOwot
ICAgICAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0KCkg
Zm9yVVJMU2NoZW1lOkAidGVzdG1tYXAiXTsKLSAgICAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJD
b250ZW50Q29udHJvbGxlcl0gYWRkQ29udGVudFJ1bGVMaXN0OnJ1bGVMaXN0LmdldCgpXTsKLSAg
ICAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1
cmF0aW9uLmdldCgpXSk7Ci0gICAgICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0
cmluZzpAIjxodG1sPm1haW4gcmVzb3VyY2UgY29udGVudDwvaHRtbD4iIGJhc2VVUkw6W05TVVJM
IFVSTFdpdGhTdHJpbmc6QCJ0ZXN0bW1hcDovL3dlYmtpdC5vcmcvbWFpbnJlc291cmNlIl1dOwot
Ci0gICAgICAgIGF1dG8gbG9hZGluZ1Nob3VsZFN1Y2NlZWQgPSBbJl0gKE5TU3RyaW5nICpyZXNv
dXJjZVBhdGgsIE5TU3RyaW5nICpzaG91bGRTdWNjZWVkKSB7Ci0gICAgICAgICAgICBfX2Jsb2Nr
IGJvb2wgZG9uZUV2YWx1YXRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIFt3ZWJWaWV3IGV2YWx1
YXRlSmF2YVNjcmlwdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInZhciBjYXVnaHQgPSBm
YWxzZTsgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOyB4aHIub3BlbignR0VUJywgJyVA
JywgZmFsc2UpOyB0cnl7IHhoci5zZW5kKCkgfSBjYXRjaChlKSB7IGNhdWdodCA9IHRydWU7IH07
IGNhdWdodCAhPSAlQCA/ICdzdWNjZXNzJyA6ICdmYWlsdXJlJyIsIHJlc291cmNlUGF0aCwgc2hv
dWxkU3VjY2VlZF0gY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9y
KSB7Ci0gICAgICAgICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwotICAgICAgICAgICAgICAg
IEVYUEVDVF9UUlVFKFtAInN1Y2Nlc3MiIGlzRXF1YWxUb1N0cmluZzpyZXN1bHRdKTsKLSAgICAg
ICAgICAgICAgICBkb25lRXZhbHVhdGluZyA9IHRydWU7Ci0gICAgICAgICAgICB9XTsKLSAgICAg
ICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUV2YWx1YXRpbmcpOwotICAgICAg
ICB9OwotICAgICAgICBsb2FkaW5nU2hvdWxkU3VjY2VlZChAIi9zaG91bGRsb2FkIiwgQCJ0cnVl
Iik7Ci0gICAgICAgIGxvYWRpbmdTaG91bGRTdWNjZWVkKEAiL2Jsb2NrZWRzdWJyZXNvdXJjZSIs
IEAiZmFsc2UiKTsKLQotICAgICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9s
bGVyXSByZW1vdmVDb250ZW50UnVsZUxpc3Q6cnVsZUxpc3QuZ2V0KCldOwotICAgICAgICAKLSAg
ICAgICAgX19ibG9jayBib29sIGRvbmVMb29raW5nVXAgPSBmYWxzZTsKLSAgICAgICAgW3N0b3Jl
IGxvb2tVcENvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6aWRlbnRpZmllciBjb21wbGV0aW9u
SGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0ICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7Ci0g
ICAgICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKLSAgICAgICAgICAgIEVYUEVDVF9O
VUxMKGVycm9yKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9uZUxvb2tpbmdVcCA9IHRy
dWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEVYUEVDVF9UUlVFKFtbW1tfV0tVc2VyQ29u
dGVudEZpbHRlciBhbGxvY10gX2luaXRXaXRoV0tDb250ZW50UnVsZUxpc3Q6ZmlsdGVyXSBhdXRv
cmVsZWFzZV0gdXNlc0NvcGllZE1lbW9yeV0gPT0gc2hvdWxkVXNlQ29waWVkTWVtb3J5KTsKLSAg
ICAgICAgICAgIHJ1bGVMaXN0ID0gZmlsdGVyOwotICAgICAgICB9XTsKLSAgICAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZkb25lTG9va2luZ1VwKTsKKyAgICBSZXRhaW5QdHI8TlNTdHJp
bmc+IGNvbXBpbGVkRmlsZVBhdGggPSBbdGVtcERpciBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21w
b25lbnQ6QCJDb250ZW50UnVsZUxpc3QtQ29tcGlsZWRSdWxlTGlzdCJdOworICAgIFJldGFpblB0
cjxOU1N0cmluZz4gY29waWVkRmlsZVBhdGggPSBbdGVtcERpciBzdHJpbmdCeUFwcGVuZGluZ1Bh
dGhDb21wb25lbnQ6QCJDb250ZW50UnVsZUxpc3QtQ29waWVkUnVsZUxpc3QiXTsKIAotICAgICAg
ICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRDb250ZW50UnVsZUxp
c3Q6cnVsZUxpc3QuZ2V0KCldOwotICAgICAgICBsb2FkaW5nU2hvdWxkU3VjY2VlZChAIi9zaG91
bGRsb2FkIiwgQCJ0cnVlIik7Ci0gICAgICAgIGxvYWRpbmdTaG91bGRTdWNjZWVkKEAiL2Jsb2Nr
ZWRzdWJyZXNvdXJjZSIsIEAiZmFsc2UiKTsKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGlu
ZyA9IGZhbHNlOworICAgIFtzdG9yZSBjb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmll
cjpjb21waWxlZElkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpydWxlTGlzdFNvdXJj
ZVN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0ICpmaWx0ZXIsIE5T
RXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOworICAgICAg
ICBFWFBFQ1RfTlVMTChlcnJvcik7CisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAg
IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CiAKLSAg
ICAgICAgX19ibG9jayBib29sIGRvbmVDaGVja2luZ1NvdXJjZSA9IGZhbHNlOwotICAgICAgICBb
c3RvcmUgX2dldENvbnRlbnRSdWxlTGlzdFNvdXJjZUZvcklkZW50aWZpZXI6aWRlbnRpZmllciBj
b21wbGV0aW9uSGFuZGxlcjpeKE5TU3RyaW5nICpzb3VyY2UpIHsKLSAgICAgICAgICAgIEVYUEVD
VF9UUlVFKFtzb3VyY2UgaXNFcXVhbFRvU3RyaW5nOnJ1bGVMaXN0U291cmNlU3RyaW5nXSk7Ci0g
ICAgICAgICAgICBkb25lQ2hlY2tpbmdTb3VyY2UgPSB0cnVlOwotICAgICAgICB9XTsKLSAgICAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ2hlY2tpbmdTb3VyY2UpOwotICAgICAg
ICAKLSAgICAgICAgX19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOwotICAgICAgICBb
c3RvcmUgcmVtb3ZlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGNvbXBs
ZXRpb25IYW5kbGVyOl4oTlNFcnJvciAqZXJyb3IpIHsKKyAgICBhdXRvIGhhc0NvbXBsZXRlUHJv
dGVjdGlvbiA9IFtdIChjb25zdCBSZXRhaW5QdHI8TlNTdHJpbmc+JiBwYXRoKSB7CisgICAgICAg
IE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgICAgICBOU0RpY3Rpb25hcnk8TlNGaWxlQXR0cmli
dXRlS2V5LCBpZD4gKmF0dHJpYnV0ZXMgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGF0dHJpYnV0ZXNPZkl0ZW1BdFBhdGg6cGF0aC5nZXQoKSBlcnJvcjomZXJyb3JdOworICAgICAg
ICBFWFBFQ1RfTlVMTChlcnJvcik7CisgICAgICAgIHJldHVybiBbW2F0dHJpYnV0ZXMgb2JqZWN0
Rm9yS2V5Ok5TRmlsZVByb3RlY3Rpb25LZXldIGlzRXF1YWxUb1N0cmluZzpOU0ZpbGVQcm90ZWN0
aW9uQ29tcGxldGVdOworICAgIH07CisgICAgCisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7Cisg
ICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjb3B5SXRlbUF0UGF0aDpjb21waWxl
ZEZpbGVQYXRoLmdldCgpIHRvUGF0aDpjb3BpZWRGaWxlUGF0aC5nZXQoKSBlcnJvcjomZXJyb3Jd
OworICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKyAgICBFWFBFQ1RfRkFMU0UoaGFzQ29tcGxldGVQ
cm90ZWN0aW9uKGNvcGllZEZpbGVQYXRoKSk7CisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSBzZXRBdHRyaWJ1dGVzOkB7IE5TRmlsZVByb3RlY3Rpb25LZXk6IE5TRmlsZVByb3Rl
Y3Rpb25Db21wbGV0ZSB9IG9mSXRlbUF0UGF0aDpjb3BpZWRGaWxlUGF0aC5nZXQoKSBlcnJvcjom
ZXJyb3JdOworICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCisgICAgRVhQRUNUX1RSVUUoaGFz
Q29tcGxldGVQcm90ZWN0aW9uKGNvcGllZEZpbGVQYXRoKSk7CisjZW5kaWYKKyAgICAKKyAgICBf
X2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdVcCA9IGZhbHNlOworICAgIFtzdG9yZSBsb29rVXBDb250
ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmNvcGllZElkZW50aWZpZXIgY29tcGxldGlvbkhhbmRs
ZXI6XihXS0NvbnRlbnRSdWxlTGlzdCAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgICAg
ICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwor
ICAgICAgICBkb25lTG9va2luZ1VwID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmVMb29raW5nVXApOworICAgIEVYUEVDVF9GQUxTRShoYXNDb21wbGV0
ZVByb3RlY3Rpb24oY29waWVkRmlsZVBhdGgpKTsKKyAgICAKKyAgICBfX2Jsb2NrIGJvb2wgZG9u
ZVJlbW92aW5nID0gZmFsc2U7CisgICAgW3N0b3JlIHJlbW92ZUNvbnRlbnRSdWxlTGlzdEZvcklk
ZW50aWZpZXI6Y29tcGlsZWRJZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNFcnJvciAq
ZXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworICAgICAgICBbc3RvcmUgcmVt
b3ZlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjpjb3BpZWRJZGVudGlmaWVyIGNvbXBsZXRp
b25IYW5kbGVyOl4oTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgICAgIEVYUEVDVF9OVUxMKGVy
cm9yKTsKICAgICAgICAgICAgIGRvbmVSZW1vdmluZyA9IHRydWU7CiAgICAgICAgIH1dOwotICAg
ICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVSZW1vdmluZyk7Ci0KLSAgICAgICAg
RVhQRUNUX0ZBTFNFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0
UGF0aDpmaWxlUGF0aC5nZXQoKV0pOwotICAgIH07Ci0gICAgCi0gICAgcnVuVGVzdChmYWxzZSk7
Ci0gICAgW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgX3JlZ2lzdGVyUGF0aEFzVW5zYWZlVG9NZW1v
cnlNYXBGb3JUZXN0aW5nOmZpbGVQYXRoLmdldCgpXTsKLSAgICBydW5UZXN0KHRydWUpOworICAg
IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367822</attachid>
            <date>2019-04-19 13:58:51 -0700</date>
            <delta_ts>2019-04-22 10:01:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197078-20190419135850.patch</filename>
            <type>text/plain</type>
            <size>41344</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDQ0MDMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBACisyMDE5LTA0LTE4ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgV0tDb250ZW50UnVs
ZUxpc3RzIHNob3VsZCBoYXZlIGEgbWF4aW11bSBGaWxlUHJvdGVjdGlvbiBvZiBDb21wbGV0ZVVu
bGVzc09wZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NzA3OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDk1NjQzNDg+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcjI0MjczNSB3YXMgYSBmaXggZm9y
IGNyYXNoZXMgd2hlbiB1c2luZyBtbWFwJ2QgbWVtb3J5IGluIGFwcHMgd2l0aCBkZWZhdWx0IEZp
bGVQcm90ZWN0aW9uIG9mIE5TRmlsZVByb3RlY3Rpb25Db21wbGV0ZS4KKyAgICAgICAgSXQgaXMg
bW9yZSBtZW1vcnkgZWZmaWNpZW50IGFuZCBqdXN0IGFzIHNlY3VyZSB0byByZWR1Y2UgdGhlIEZp
bGVQcm90ZWN0aW9uIG9mIHRoZXNlIGZpbGVzIHRvIE5TRmlsZVByb3RlY3Rpb25Db21wbGV0ZVVu
bGVzc09wZW4uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVG
aWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjppc1NhZmVUb1Vz
ZU1lbW9yeU1hcEZvclBhdGgpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om1ha2VT
YWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpwYXRoUmVnaXN0ZXJlZEFzVW5zYWZlVG9NZW1vcnlNYXBGb3JUZXN0aW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpyZWdpc3RlclBhdGhBc1Vuc2FmZVRvTWVt
b3J5TWFwRm9yVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Db2NvYS5tbTogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6aXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjptYWtlU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aCk6Cisg
ICAgICAgICogU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OmNvbmRpdGlvbnNBcHBseU9ubHlU
b0RvbWFpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0OjpmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0OjpmaWx0ZXJzV2l0aENvbmRpdGlvbnNC
eXRlY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0Ojp0b3BVUkxGaWx0ZXJzQnl0ZWNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b21waWxlZENvbnRlbnRSdWxlTGlzdDo6YWN0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0Ojp1c2VzQ29waWVkTWVtb3J5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuaDoKKyAg
ICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGE6OmRlY29k
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YTo6c2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1
bGVMaXN0RGF0YTo6ZGF0YVBvaW50ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhOjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERh
dGEpOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3QuY3BwOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxpc3Q6
OnVzZXNDb3BpZWRNZW1vcnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQVBJQ29udGVudFJ1bGVMaXN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50UnVsZUxpc3RTdG9yZS5jcHA6CisgICAgICAgIChBUEk6Om9wZW5BbmRNYXBPckNvcHlDb250
ZW50UnVsZUxpc3QpOgorICAgICAgICAoQVBJOjpjb21waWxlZFRvRmlsZSk6CisgICAgICAgIChB
UEk6OmNyZWF0ZUV4dGVuc2lvbik6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3Jl
OjpnZXRDb250ZW50UnVsZUxpc3RTb3VyY2UpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxp
c3RTdG9yZTo6cmVhZENvbnRlbnRzT2ZGaWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6TWFw
cGVkT3JDb3BpZWREYXRhOjpkYXRhUG9pbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmVDb2NvYS5tbToKKyAgICAgICAg
KEFQSTo6Q29udGVudFJ1bGVMaXN0U3RvcmU6OnJlYWRDb250ZW50c09mRmlsZSk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1t
OgorICAgICAgICAoK1tXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIF9yZWdpc3RlclBhdGhBc1Vuc2Fm
ZVRvTWVtb3J5TWFwRm9yVGVzdGluZzpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5tbToKKyAgICAgICAgKC1bX1dL
VXNlckNvbnRlbnRGaWx0ZXIgdXNlc0NvcGllZE1lbW9yeV0pOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmg6CisgICAg
ICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMDQtMTcgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtl
IFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YSBub24tZGVmYXVsdC1jb25zdHJ1Y3RpYmxl
LCBtb3ZlIGl0cyBub25zZXJpYWxpemVkIG1lbWJlciB0byBBUEk6OkNvbnRlbnRSdWxlTGlzdApJ
bmRleDogU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkocmV2aXNpb24gMjQ0MzU5KQorKysgU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAv
LyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURhdGFDb2NvYS5tbQorTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlRmlsZVN5c3RlbUNvY29hLm1tCiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJ
T0NoYW5uZWxDb2NvYS5tbQogCiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrQWN0aXZpdHlU
cmFja2VyQ29jb2EubW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmNwcAkocmV2aXNpb24g
MjQ0MzU5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVGaWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDUxICsxNDUsMTUgQEAgdm9p
ZCB1cGRhdGVGaWxlTW9kaWZpY2F0aW9uVGltZUlmTmVlZGVkKAogI2VuZGlmCiB9CiAKLXN0YXRp
YyBTdHJpbmcmIHBhdGhSZWdpc3RlcmVkQXNVbnNhZmVUb01lbW9yeU1hcEZvclRlc3RpbmcoKQor
I2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorYm9vbCBpc1NhZmVUb1VzZU1lbW9yeU1hcEZvclBh
dGgoY29uc3QgU3RyaW5nJikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBw
YXRoOwotICAgIHJldHVybiBwYXRoLmdldCgpOworICAgIHJldHVybiB0cnVlOwogfQotCi12b2lk
IHJlZ2lzdGVyUGF0aEFzVW5zYWZlVG9NZW1vcnlNYXBGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYg
cGF0aCkKK3ZvaWQgbWFrZVNhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJikK
IHsKLSAgICBwYXRoUmVnaXN0ZXJlZEFzVW5zYWZlVG9NZW1vcnlNYXBGb3JUZXN0aW5nKCkgPSBw
YXRoOwogfQotCi0gICAgCi1ib29sIGlzU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChjb25zdCBT
dHJpbmcmIHBhdGgpCi17Ci0gICAgaWYgKHBhdGggPT0gcGF0aFJlZ2lzdGVyZWRBc1Vuc2FmZVRv
TWVtb3J5TWFwRm9yVGVzdGluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCi0gICAg
c3RydWN0IHsKLSAgICAgICAgdWludDMyX3QgbGVuZ3RoOwotICAgICAgICB1aW50MzJfdCBwcm90
ZWN0aW9uQ2xhc3M7Ci0gICAgfSBhdHRyQnVmZmVyOwotCi0gICAgYXR0cmxpc3QgYXR0ckxpc3Qg
PSB7IH07Ci0gICAgYXR0ckxpc3QuYml0bWFwY291bnQgPSBBVFRSX0JJVF9NQVBfQ09VTlQ7Ci0g
ICAgYXR0ckxpc3QuY29tbW9uYXR0ciA9IEFUVFJfQ01OX0RBVEFfUFJPVEVDVF9GTEFHUzsKLSAg
ICBpbnQzMl90IGVycm9yID0gZ2V0YXR0cmxpc3QoRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHBhdGgpLmRhdGEoKSwgJmF0dHJMaXN0LCAmYXR0ckJ1ZmZlciwgc2l6ZW9mKGF0
dHJCdWZmZXIpLCBGU09QVF9OT0ZPTExPVyk7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICJVbmFibGUgdG8gZ2V0IGNhY2hlIGRpcmVjdG9yeSBw
cm90ZWN0aW9uIGNsYXNzLCBkaXNhYmxpbmcgdXNlIG9mIHNoYXJlZCBtYXBwZWQgbWVtb3J5Iik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBGb3Igc3RyaWN0ZXIgcHJv
dGVjdGlvbiBjbGFzc2VzIHNoYXJlZCBtYXBzIGNvdWxkIGRpc2FwcGVhciB3aGVuIGRldmljZSBp
cyBsb2NrZWQuCi0gICAgY29uc3QgdWludDMyX3QgZmlsZVByb3RlY3Rpb25Db21wbGV0ZVVudGls
Rmlyc3RVc2VyQXV0aGVudGljYXRpb24gPSAzOwotICAgIGJvb2wgaXNTYWZlID0gYXR0ckJ1ZmZl
ci5wcm90ZWN0aW9uQ2xhc3MgPj0gZmlsZVByb3RlY3Rpb25Db21wbGV0ZVVudGlsRmlyc3RVc2Vy
QXV0aGVudGljYXRpb247Ci0KLSAgICBpZiAoIWlzU2FmZSkKLSAgICAgICAgUkVMRUFTRV9MT0co
TmV0d29yaywgIkRpc2FsbG93aW5nIHVzZSBvZiBzaGFyZWQgbWFwcGVkIG1lbW9yeSBkdWUgdG8g
Y29udGFpbmVyIHByb3RlY3Rpb24gY2xhc3MgJXUiLCBhdHRyQnVmZmVyLnByb3RlY3Rpb25DbGFz
cyk7Ci0KLSAgICByZXR1cm4gaXNTYWZlOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocGF0aCk7
Ci0gICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLX0KIAogfQogfQpJbmRleDogU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVGaWxl
U3lzdGVtLmgJKHJldmlzaW9uIDI0NDM1OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4
ICs0Miw4IEBAIHN0cnVjdCBGaWxlVGltZXMgewogRmlsZVRpbWVzIGZpbGVUaW1lcyhjb25zdCBT
dHJpbmcmIHBhdGgpOwogdm9pZCB1cGRhdGVGaWxlTW9kaWZpY2F0aW9uVGltZUlmTmVlZGVkKGNv
bnN0IFN0cmluZyYgcGF0aCk7CiAKLWJvb2wgaXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGNv
bnN0IFN0cmluZyYgcGF0aCk7Ci12b2lkIHJlZ2lzdGVyUGF0aEFzVW5zYWZlVG9NZW1vcnlNYXBG
b3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpOworYm9vbCBpc1NhZmVUb1VzZU1lbW9yeU1hcEZvclBh
dGgoY29uc3QgU3RyaW5nJik7Cit2b2lkIG1ha2VTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGNv
bnN0IFN0cmluZyYpOwogCiB9CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Db2NvYS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Db2Nv
YS5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Db2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdv
cmtDYWNoZUZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3Jr
Q2FjaGUgeworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK2Jvb2wgaXNTYWZlVG9Vc2VNZW1v
cnlNYXBGb3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICAvLyBGSVhNRTogRm9yIHRo
ZSBuZXR3b3JrIGNhY2hlIHdlIHNob3VsZCBlaXRoZXIgdXNlIG1ha2VTYWZlVG9Vc2VNZW1vcnlN
YXBGb3JQYXRoIGluc3RlYWQgb2YgdGhpcworICAgIC8vIG9yIHdlIHNob3VsZCBsaXN0ZW4gdG8g
VUlBcHBsaWNhdGlvblByb3RlY3RlZERhdGFXaWxsQmVjb21lVW5hdmFpbGFibGUgYW5kIHVubWFw
IGZpbGVzLgorICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIE5TRGljdGlvbmFyeTxOU0Zp
bGVBdHRyaWJ1dGVLZXksIGlkPiAqYXR0cmlidXRlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0
TWFuYWdlcl0gYXR0cmlidXRlc09mSXRlbUF0UGF0aDpwYXRoIGVycm9yOiZlcnJvcl07CisgICAg
aWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICJVbmFibGUg
dG8gZ2V0IGNhY2hlIGRpcmVjdG9yeSBwcm90ZWN0aW9uIGNsYXNzLCBkaXNhYmxpbmcgdXNlIG9m
IHNoYXJlZCBtYXBwZWQgbWVtb3J5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKFtbYXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGaWxlUHJvdGVjdGlvbktleV0gaXNF
cXVhbFRvU3RyaW5nOk5TRmlsZVByb3RlY3Rpb25Db21wbGV0ZV0pIHsKKyAgICAgICAgUkVMRUFT
RV9MT0coTmV0d29yaywgIkRpc2FsbG93aW5nIHVzZSBvZiBzaGFyZWQgbWFwcGVkIG1lbW9yeSBk
dWUgdG8gY29udGFpbmVyIHByb3RlY3Rpb24gY2xhc3MgTlNGaWxlUHJvdGVjdGlvbkNvbXBsZXRl
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgbWFrZVNhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIGlmIChpc1NhZmVUb1VzZU1lbW9yeU1hcEZvclBhdGgocGF0aCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIEJPT0wgc3VjY2VzcyA9IFtb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gc2V0QXR0cmlidXRlczpAeyBOU0ZpbGVQcm90
ZWN0aW9uS2V5OiBOU0ZpbGVQcm90ZWN0aW9uQ29tcGxldGVVbmxlc3NPcGVuIH0gb2ZJdGVtQXRQ
YXRoOnBhdGggZXJyb3I6JmVycm9yXTsKKyAgICBBU1NFUlQoIWVycm9yKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1J
TFkpCisKK30KK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVu
dFJ1bGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb21w
aWxlZENvbnRlbnRSdWxlTGlzdC5jcHAJKHJldmlzaW9uIDI0NDM1OSkKKysrIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsMTkgKzQ0LDE0IEBAIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0Ojp+V2ViQ29tcGls
ZWQKIHsKIH0KIAotYm9vbCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6dXNlc0NvcGllZE1l
bW9yeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+KG1fZGF0YS5kYXRhKTsKLX0KLQogYm9vbCBXZWJDb21w
aWxlZENvbnRlbnRSdWxlTGlzdDo6Y29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2RhdGEuZGF0YVBvaW50ZXIoKSkgKyBtX2RhdGEu
Y29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0KTsKKyAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihtX2RhdGEuZGF0YS0+ZGF0YSgpKSArIG1fZGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21h
aW5PZmZzZXQpOwogfQogCiBjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0
ZWNvZGUqIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0OjpmaWx0ZXJzV2l0aG91dENvbmRpdGlv
bnNCeXRlY29kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSo+KG1fZGF0YS5kYXRhUG9pbnRlcigp
KSArIG1fZGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldDsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlKj4obV9kYXRhLmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuZmlsdGVyc1dpdGhvdXRDb25k
aXRpb25zQnl0ZWNvZGVPZmZzZXQ7CiB9CiAKIHVuc2lnbmVkIFdlYkNvbXBpbGVkQ29udGVudFJ1
bGVMaXN0OjpmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0CkBA
IC02Niw3ICs2MSw3IEBAIHVuc2lnbmVkIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0OjpmaWwK
IAogY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBXZWJDb21w
aWxlZENvbnRlbnRSdWxlTGlzdDo6ZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGUoKSBjb25z
dAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6REZBQnl0ZWNvZGUqPihtX2RhdGEuZGF0YVBvaW50ZXIoKSkgKyBtX2RhdGEuZmlsdGVy
c1dpdGhDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQ7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSo+KG1fZGF0YS5kYXRh
LT5kYXRhKCkpICsgbV9kYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0Owog
fQogCiB1bnNpZ25lZCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6ZmlsdGVyc1dpdGhDb25k
aXRpb25zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdApAQCAtNzYsNyArNzEsNyBAQCB1bnNpZ25lZCBX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6ZmlsCiAKIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpERkFCeXRlY29kZSogV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OnRvcFVS
TEZpbHRlcnNCeXRlY29kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSo+KG1fZGF0YS5kYXRhUG9p
bnRlcigpKSArIG1fZGF0YS50b3BVUkxGaWx0ZXJzQnl0ZWNvZGVPZmZzZXQ7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29k
ZSo+KG1fZGF0YS5kYXRhLT5kYXRhKCkpICsgbV9kYXRhLnRvcFVSTEZpbHRlcnNCeXRlY29kZU9m
ZnNldDsKIH0KIAogdW5zaWduZWQgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OnRvcFVSTEZp
bHRlcnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0CkBAIC04Niw3ICs4MSw3IEBAIHVuc2lnbmVkIFdl
YkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0Ojp0b3AKIAogY29uc3QgV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlz
dDo6YWN0aW9ucygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZSo+KG1fZGF0YS5kYXRh
UG9pbnRlcigpKSArIG1fZGF0YS5hY3Rpb25zT2Zmc2V0OworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXplZEFjdGlvbkJ5dGUq
PihtX2RhdGEuZGF0YS0+ZGF0YSgpKSArIG1fZGF0YS5hY3Rpb25zT2Zmc2V0OwogfQogCiB1bnNp
Z25lZCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6YWN0aW9uc0xlbmd0aCgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0LmgJKHJldmlzaW9uIDI0NDM1OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbXBp
bGVkQ29udGVudFJ1bGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDYgQEAgcHVi
bGljOgogCiAgICAgY29uc3QgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhJiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKLSAgICBib29sIHVzZXNDb3BpZWRNZW1vcnkoKSBj
b25zdDsKLSAgICAKIHByaXZhdGU6CiAgICAgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QoV2Vi
Q29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhJiYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5jcHAJKHJl
dmlzaW9uIDI0NDQwMykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVu
dFJ1bGVMaXN0RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDMxICszNCwxMSBAQAogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotc2l6ZV90IFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0
YTo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24oZGF0YSwgW10gKGNv
bnN0IGF1dG8mIHNoYXJlZE1lbW9yeU9yQnVmZmVyKSB7Ci0gICAgICAgIHJldHVybiBzaGFyZWRN
ZW1vcnlPckJ1ZmZlci0+c2l6ZSgpOwotICAgIH0pOwotfQotCi1jb25zdCB2b2lkKiBXZWJDb21w
aWxlZENvbnRlbnRSdWxlTGlzdERhdGE6OmRhdGFQb2ludGVyKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbihkYXRhLCBbXSAoY29uc3QgYXV0byYgc2hhcmVkTWVtb3J5T3JCdWZm
ZXIpIC0+IGNvbnN0IHZvaWQqIHsKLSAgICAgICAgcmV0dXJuIHNoYXJlZE1lbW9yeU9yQnVmZmVy
LT5kYXRhKCk7Ci0gICAgfSk7Ci19Ci0KIHZvaWQgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3RE
YXRhOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGlmIChhdXRv
IHNoYXJlZE1lbW9yeSA9IFdURjo6Z2V0X2lmPFJlZlB0cjxTaGFyZWRNZW1vcnk+PihkYXRhKSkg
ewotICAgICAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAgICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxl
IGhhbmRsZTsKLSAgICAgICAgc2hhcmVkTWVtb3J5LT5nZXQoKS0+Y3JlYXRlSGFuZGxlKGhhbmRs
ZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0gICAgICAgIGVuY29kZXIg
PDwgaGFuZGxlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVuY29kZXIgPDwgZmFsc2U7Ci0gICAg
ICAgIGVuY29kZXIgPDwgSVBDOjpTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlIHsgKldURjo6Z2V0
PFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PihkYXRhKSB9OwotICAgIH0KKyAgICBTaGFy
ZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgZGF0YS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwg
U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgZW5jb2RlciA8PCBoYW5k
bGU7CiAKICAgICBlbmNvZGVyIDw8IGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9mZnNldDsK
ICAgICBlbmNvZGVyIDw8IGFjdGlvbnNPZmZzZXQ7CkBAIC03MywyNCArNTMsMTAgQEAgdm9pZCBX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGE6OmVuYwogCiBPcHRpb25hbDxXZWJDb21waWxl
ZENvbnRlbnRSdWxlTGlzdERhdGE+IFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YTo6ZGVj
b2RlKElQQzo6RGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBWYXJpYW50PFJlZlB0cjxTaGFyZWRN
ZW1vcnk+LCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4gZGF0YTsKLQotICAgIE9wdGlv
bmFsPGJvb2w+IGhhc1NoYXJlZE1lbW9yeTsKLSAgICBkZWNvZGVyID4+IGhhc1NoYXJlZE1lbW9y
eTsKLSAgICBpZiAoIWhhc1NoYXJlZE1lbW9yeSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIGlmICgqaGFzU2hhcmVkTWVtb3J5KSB7Ci0gICAgICAgIFNoYXJlZE1lbW9yeTo6
SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUpKQotICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgZGF0YSA9IHsgU2hhcmVkTWVt
b3J5OjptYXAoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KSB9Owot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlOwot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGFSZWZlcmVuY2UpKQotICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgZGF0YSA9IHsgUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4oV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YVJlZmVyZW5jZS5k
YXRhKCksIGRhdGFSZWZlcmVuY2Uuc2l6ZSgpKSkgfTsKLSAgICB9CisgICAgU2hhcmVkTWVtb3J5
OjpIYW5kbGUgaGFuZGxlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFuZGxlKSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBkYXRhID0g
U2hhcmVkTWVtb3J5OjptYXAoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRP
bmx5KTsKIAogICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21h
aW5PZmZzZXQ7CiAgICAgZGVjb2RlciA+PiBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZz
ZXQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlz
dERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb21waWxlZENv
bnRlbnRSdWxlTGlzdERhdGEuaAkocmV2aXNpb24gMjQ0NDAzKQorKysgU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkNvbXBpbGVkQ29u
dGVudFJ1bGVMaXN0RGF0YSB7CiBwdWJsaWM6Ci0gICAgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxp
c3REYXRhKFZhcmlhbnQ8UmVmUHRyPFNoYXJlZE1lbW9yeT4sIFJlZlB0cjxXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI+PiYmIGRhdGEsIHVuc2lnbmVkIGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9m
ZnNldCwgdW5zaWduZWQgYWN0aW9uc09mZnNldCwgdW5zaWduZWQgYWN0aW9uc1NpemUsIHVuc2ln
bmVkIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCBmaWx0
ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUsIHVuc2lnbmVkIGZpbHRlcnNXaXRoQ29u
ZGl0aW9uc0J5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRl
Y29kZVNpemUsIHVuc2lnbmVkIHRvcFVSTEZpbHRlcnNCeXRlY29kZU9mZnNldCwgdW5zaWduZWQg
dG9wVVJMRmlsdGVyc0J5dGVjb2RlU2l6ZSkKKyAgICBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlz
dERhdGEoUmVmUHRyPFNoYXJlZE1lbW9yeT4mJiBkYXRhLCB1bnNpZ25lZCBjb25kaXRpb25zQXBw
bHlPbmx5VG9Eb21haW5PZmZzZXQsIHVuc2lnbmVkIGFjdGlvbnNPZmZzZXQsIHVuc2lnbmVkIGFj
dGlvbnNTaXplLCB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNl
dCwgdW5zaWduZWQgZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplLCB1bnNpZ25l
ZCBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCwgdW5zaWduZWQgZmlsdGVyc1dp
dGhDb25kaXRpb25zQnl0ZWNvZGVTaXplLCB1bnNpZ25lZCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVP
ZmZzZXQsIHVuc2lnbmVkIHRvcFVSTEZpbHRlcnNCeXRlY29kZVNpemUpCiAgICAgICAgIDogZGF0
YShXVEZNb3ZlKGRhdGEpKQogICAgICAgICAsIGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9m
ZnNldChjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQpCiAgICAgICAgICwgYWN0aW9u
c09mZnNldChhY3Rpb25zT2Zmc2V0KQpAQCAtNTgsMTAgKzU4LDcgQEAgcHVibGljOgogICAgIHZv
aWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwogICAgIHN0YXRpYyBPcHRpb25hbDxXZWJD
b21waWxlZENvbnRlbnRSdWxlTGlzdERhdGE+IGRlY29kZShJUEM6OkRlY29kZXImKTsKIAotICAg
IHNpemVfdCBzaXplKCkgY29uc3Q7Ci0gICAgY29uc3Qgdm9pZCogZGF0YVBvaW50ZXIoKSBjb25z
dDsKLSAgICAKLSAgICBWYXJpYW50PFJlZlB0cjxTaGFyZWRNZW1vcnk+LCBSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkQnVmZmVyPj4gZGF0YTsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBkYXRhOwog
ICAgIHVuc2lnbmVkIGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9mZnNldCB7IDAgfTsKICAg
ICB1bnNpZ25lZCBhY3Rpb25zT2Zmc2V0IHsgMCB9OwogICAgIHVuc2lnbmVkIGFjdGlvbnNTaXpl
IHsgMCB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxl
TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNv
bnRlbnRSdWxlTGlzdC5jcHAJKHJldmlzaW9uIDI0NDQwMykKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mywx
MSArNDMsNiBAQCBDb250ZW50UnVsZUxpc3Q6On5Db250ZW50UnVsZUxpc3QoKQogewogfQogCi1i
b29sIENvbnRlbnRSdWxlTGlzdDo6dXNlc0NvcGllZE1lbW9yeSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fY29tcGlsZWRSdWxlTGlzdC0+dXNlc0NvcGllZE1lbW9yeSgpOwotfQotCiB9IC8vIG5h
bWVzcGFjZSBBUEkKIAogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdC5o
CShyZXZpc2lvbiAyNDQ0MDMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29u
dGVudFJ1bGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDYgQEAgcHVibGljOgog
ICAgIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAg
ICAgY29uc3QgV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdCYgY29tcGlsZWRSdWxl
TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsZWRSdWxlTGlzdC5nZXQoKTsgfQogCi0gICAg
Ym9vbCB1c2VzQ29waWVkTWVtb3J5KCkgY29uc3Q7Ci0KIHByaXZhdGU6CiAgICAgV1RGOjpTdHJp
bmcgbV9uYW1lOwogICAgIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0PiBt
X2NvbXBpbGVkUnVsZUxpc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
Q29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHJldmlzaW9uIDI0NDQwMykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw0MCArMjAxLDE0IEBAIHN0YXRpYyBPcHRpb25hbDxD
b250ZW50UnVsZUxpc3RNZXRhRGF0YT4KICAgICByZXR1cm4gbWV0YURhdGE7CiB9CiAKLSNpZiAh
UExBVEZPUk0oQ09DT0EpCi1SZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBDb250ZW50UnVs
ZUxpc3RTdG9yZTo6cmVhZENvbnRlbnRzT2ZGaWxlKGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlUGF0
aCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LSNlbmRpZgotCi1zdHJ1Y3QgTWFwcGVkT3JDb3BpZWREYXRhIHsKK3N0cnVjdCBNYXBwZWREYXRh
IHsKICAgICBDb250ZW50UnVsZUxpc3RNZXRhRGF0YSBtZXRhRGF0YTsKLSAgICBWYXJpYW50PFdl
YktpdDo6TmV0d29ya0NhY2hlOjpEYXRhLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPj4g
ZGF0YTsKLSAgICAKLSAgICBjb25zdCB1aW50OF90KiBkYXRhUG9pbnRlcigpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihkYXRhLCBbXSAoY29uc3QgV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OkRhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGEo
KTsKLSAgICAgICAgfSwgW10gKGNvbnN0IFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiBz
aGFyZWRCdWZmZXIpIHsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihzaGFyZWRCdWZmZXItPmRhdGEoKSk7Ci0gICAgICAgIH0pOwotICAgIH0KKyAg
ICBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0YSBkYXRhOwogfTsKIAotc3RhdGljIE9wdGlvbmFs
PE1hcHBlZE9yQ29waWVkRGF0YT4gb3BlbkFuZE1hcE9yQ29weUNvbnRlbnRSdWxlTGlzdChjb25z
dCBXVEY6OlN0cmluZyYgcGF0aCkKK3N0YXRpYyBPcHRpb25hbDxNYXBwZWREYXRhPiBvcGVuQW5k
TWFwT3JDb3B5Q29udGVudFJ1bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5nJiBwYXRoKQogewotICAg
IGlmICghV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmlzU2FmZVRvVXNlTWVtb3J5TWFwRm9yUGF0aChw
YXRoKSkgewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBD
b250ZW50UnVsZUxpc3RTdG9yZTo6cmVhZENvbnRlbnRzT2ZGaWxlKHBhdGgpOwotICAgICAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGF1
dG8gbWV0YURhdGEgPSBkZWNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSgqYnVmZmVyKTsKLSAg
ICAgICAgaWYgKCFtZXRhRGF0YSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgICAgIHJldHVybiB7eyBXVEZNb3ZlKCptZXRhRGF0YSksIHsgYnVmZmVyLnJlbGVhc2VOb25O
dWxsKCkgfX19OwotICAgIH0KLQorICAgIFdlYktpdDo6TmV0d29ya0NhY2hlOjptYWtlU2FmZVRv
VXNlTWVtb3J5TWFwRm9yUGF0aChwYXRoKTsKICAgICBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RGF0
YSBmaWxlRGF0YSA9IG1hcEZpbGUoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEo
KSk7CiAgICAgaWYgKGZpbGVEYXRhLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwpAQCAtMjU4LDcgKzIzMiw3IEBAIHN0YXRpYyBib29sIHdyaXRlRGF0YVRvRmlsZShjb25z
dCBXZWJLaXQKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAotc3RhdGljIEV4cGVjdGVkPE1hcHBl
ZE9yQ29waWVkRGF0YSwgc3RkOjplcnJvcl9jb2RlPiBjb21waWxlZFRvRmlsZShXVEY6OlN0cmlu
ZyYmIGpzb24sIFZlY3RvcjxXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVu
c2lvblJ1bGU+JiYgcGFyc2VkUnVsZXMsIGNvbnN0IFdURjo6U3RyaW5nJiBmaW5hbEZpbGVQYXRo
KQorc3RhdGljIEV4cGVjdGVkPE1hcHBlZERhdGEsIHN0ZDo6ZXJyb3JfY29kZT4gY29tcGlsZWRU
b0ZpbGUoV1RGOjpTdHJpbmcmJiBqc29uLCBWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkNvbnRlbnRFeHRlbnNpb25SdWxlPiYmIHBhcnNlZFJ1bGVzLCBjb25zdCBXVEY6OlN0cmlu
ZyYgZmluYWxGaWxlUGF0aCkKIHsKICAgICB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM7CiAKQEAgLTQxMSwzNCArMzg1LDIzIEBAIHN0YXRpYyBFeHBlY3RlZDxNYXBw
ZWRPckNvcGllZERhdGEsIHN0ZDoKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDb250ZW50IFJ1bGUg
TGlzdCBjb21waWxpbmcgZmFpbGVkOiBNb3ZpbmcgZmlsZSBmYWlsZWQuIik7CiAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50UnVsZUxpc3RTdG9yZTo6RXJyb3I6OkNvbXBpbGVG
YWlsZWQpOwogICAgIH0KLQotICAgIGlmICghaXNTYWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGZp
bmFsRmlsZVBhdGgpKSB7Ci0gICAgICAgIGF1dG8gY29udGVudHMgPSBDb250ZW50UnVsZUxpc3RT
dG9yZTo6cmVhZENvbnRlbnRzT2ZGaWxlKGZpbmFsRmlsZVBhdGgpOwotICAgICAgICBpZiAoIWNv
bnRlbnRzKQotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRSdWxlTGlz
dFN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZCk7Ci0gICAgICAgIHJldHVybiB7eyBXVEZNb3Zl
KG1ldGFEYXRhKSwgV1RGTW92ZShjb250ZW50cykgfX07Ci0gICAgfQorICAgIAorICAgIG1ha2VT
YWZlVG9Vc2VNZW1vcnlNYXBGb3JQYXRoKGZpbmFsRmlsZVBhdGgpOwogICAgIAogICAgIHJldHVy
biB7eyBXVEZNb3ZlKG1ldGFEYXRhKSwgV1RGTW92ZShtYXBwZWREYXRhKSB9fTsKIH0KIAotc3Rh
dGljIFJlZjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4gY3JlYXRlRXh0ZW5zaW9uKGNvbnN0IFdURjo6
U3RyaW5nJiBpZGVudGlmaWVyLCBNYXBwZWRPckNvcGllZERhdGEmJiBkYXRhKQorc3RhdGljIFJl
ZjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4gY3JlYXRlRXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5n
JiBpZGVudGlmaWVyLCBNYXBwZWREYXRhJiYgZGF0YSkKIHsKLSAgICBSZWZQdHI8V2ViS2l0OjpT
aGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeTsKLSAgICBpZiAoYXV0byBtYXBwZWRGaWxlRGF0YSA9
IFdURjo6Z2V0X2lmPFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhPihkYXRhLmRhdGEpKSB7Ci0g
ICAgICAgIHNoYXJlZE1lbW9yeSA9IG1hcHBlZEZpbGVEYXRhLT50cnlDcmVhdGVTaGFyZWRNZW1v
cnkoKTsKLQotICAgICAgICAvLyBDb250ZW50IGV4dGVuc2lvbnMgYXJlIGFsd2F5cyBjb21waWxl
ZCB0byBmaWxlcywgYW5kIGF0IHRoaXMgcG9pbnQgdGhlIGZpbGUKLSAgICAgICAgLy8gaGFzIGJl
ZW4gYWxyZWFkeSBtYXBwZWQsIHRoZXJlZm9yZSB0cnlDcmVhdGVTaGFyZWRNZW1vcnkoKSBjYW5u
b3QgZmFpbC4KLSAgICAgICAgQVNTRVJUKHNoYXJlZE1lbW9yeSk7Ci0gICAgfQotICAgIGF1dG8g
bWFwcGVkT3JDb3BpZWRGaWxlRGF0YSA9IHNoYXJlZE1lbW9yeSA/Ci0gICAgICAgIFZhcmlhbnQ8
UmVmUHRyPFdlYktpdDo6U2hhcmVkTWVtb3J5PiwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cj4+IHsgc2hhcmVkTWVtb3J5IH0KLSAgICAgICAgOiBWYXJpYW50PFJlZlB0cjxXZWJLaXQ6OlNo
YXJlZE1lbW9yeT4sIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiB7IFdURk1vdmUoV1RG
OjpnZXQ8UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+KGRhdGEuZGF0YSkpIH07CisgICAg
YXV0byBzaGFyZWRNZW1vcnkgPSBkYXRhLmRhdGEudHJ5Q3JlYXRlU2hhcmVkTWVtb3J5KCk7CisK
KyAgICAvLyBDb250ZW50IGV4dGVuc2lvbnMgYXJlIGFsd2F5cyBjb21waWxlZCB0byBmaWxlcywg
YW5kIGF0IHRoaXMgcG9pbnQgdGhlIGZpbGUKKyAgICAvLyBoYXMgYmVlbiBhbHJlYWR5IG1hcHBl
ZCwgdGhlcmVmb3JlIHRyeUNyZWF0ZVNoYXJlZE1lbW9yeSgpIGNhbm5vdCBmYWlsLgorICAgIEFT
U0VSVChzaGFyZWRNZW1vcnkpOwogCiAgICAgY29uc3Qgc2l6ZV90IGhlYWRlckFuZFNvdXJjZVNp
emUgPSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSArIGRhdGEubWV0YURhdGEuc291cmNl
U2l6ZTsKICAgICBhdXRvIGNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YSA9IFdlYktpdDo6V2Vi
Q29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhKAotICAgICAgICBXVEZNb3ZlKG1hcHBlZE9yQ29w
aWVkRmlsZURhdGEpLAorICAgICAgICBXVEZNb3ZlKHNoYXJlZE1lbW9yeSksCiAgICAgICAgIENv
bmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9mZnNldCwKICAgICAgICAgaGVhZGVyQW5kU291cmNl
U2l6ZSwKICAgICAgICAgZGF0YS5tZXRhRGF0YS5hY3Rpb25zU2l6ZSwKQEAgLTQ1Niw3ICs0MTks
NyBAQCBzdGF0aWMgUmVmPEFQSTo6Q29udGVudFJ1bGVMaXN0PiBjcmVhdGVFCiAgICAgICAgIGRh
dGEubWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplCiAgICAgKTsKICAgICBh
dXRvIGNvbXBpbGVkQ29udGVudFJ1bGVMaXN0ID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRS
dWxlTGlzdDo6Y3JlYXRlKFdURk1vdmUoY29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhKSk7Ci0g
ICAgcmV0dXJuIEFQSTo6Q29udGVudFJ1bGVMaXN0OjpjcmVhdGUoaWRlbnRpZmllciwgV1RGTW92
ZShjb21waWxlZENvbnRlbnRSdWxlTGlzdCksIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8V2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkRhdGE+KGRhdGEuZGF0YSkgPyBXVEY6OmdldDxXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6RGF0YT4oZGF0YS5kYXRhKSA6IFdlYktpdDo6TmV0d29ya0NhY2hlOjpEYXRhIHsg
fSk7CisgICAgcmV0dXJuIEFQSTo6Q29udGVudFJ1bGVMaXN0OjpjcmVhdGUoaWRlbnRpZmllciwg
V1RGTW92ZShjb21waWxlZENvbnRlbnRSdWxlTGlzdCksIFdURk1vdmUoZGF0YS5kYXRhKSk7CiB9
CiAKIHZvaWQgQ29udGVudFJ1bGVMaXN0U3RvcmU6Omxvb2t1cENvbnRlbnRSdWxlTGlzdChjb25z
dCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8
QVBJOjpDb250ZW50UnVsZUxpc3Q+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTU4OCwxNCArNTUxLDE0IEBAIHZvaWQgQ29udGVudFJ1bGVMaXN0U3RvcmU6OmdldENv
bnRlbnRSdWwKICAgICAgICAgICAgICAgICBjb21wbGV0ZSh7IH0pOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJvb2wgaXM4Qml0ID0gY29udGVu
dFJ1bGVMaXN0LT5kYXRhUG9pbnRlcigpW0NvbnRlbnRSdWxlTGlzdEZpbGVIZWFkZXJTaXplXTsK
KyAgICAgICAgICAgIGJvb2wgaXM4Qml0ID0gY29udGVudFJ1bGVMaXN0LT5kYXRhLmRhdGEoKVtD
b250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZV07CiAgICAgICAgICAgICBzaXplX3Qgc3RhcnQg
PSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSArIHNpemVvZihib29sKTsKICAgICAgICAg
ICAgIHNpemVfdCBsZW5ndGggPSBjb250ZW50UnVsZUxpc3QtPm1ldGFEYXRhLnNvdXJjZVNpemUg
LSBzaXplb2YoYm9vbCk7CiAgICAgICAgICAgICBpZiAoaXM4Qml0KQotICAgICAgICAgICAgICAg
IGNvbXBsZXRlKFdURjo6U3RyaW5nKGNvbnRlbnRSdWxlTGlzdC0+ZGF0YVBvaW50ZXIoKSArIHN0
YXJ0LCBsZW5ndGgpKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZShXVEY6OlN0cmluZyhjb250
ZW50UnVsZUxpc3QtPmRhdGEuZGF0YSgpICsgc3RhcnQsIGxlbmd0aCkpOwogICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCEobGVuZ3RoICUgc2l6ZW9mKFVDaGFyKSkp
OwotICAgICAgICAgICAgICAgIGNvbXBsZXRlKFdURjo6U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVUNoYXIqPihjb250ZW50UnVsZUxpc3QtPmRhdGFQb2ludGVyKCkgKyBzdGFydCksIGxl
bmd0aCAvIHNpemVvZihVQ2hhcikpKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZShXVEY6OlN0
cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oY29udGVudFJ1bGVMaXN0LT5kYXRh
LmRhdGEoKSArIHN0YXJ0KSwgbGVuZ3RoIC8gc2l6ZW9mKFVDaGFyKSkpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaAkocmV2aXNp
b24gMjQ0MzU5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxl
TGlzdFN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDggKzc2LDYgQEAgcHVibGljOgogICAg
IHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRSdWxlTGlzdFZlcnNpb24oY29uc3QgV1RGOjpTdHJpbmcm
IGlkZW50aWZpZXIpOwogICAgIHZvaWQgZ2V0Q29udGVudFJ1bGVMaXN0U291cmNlKGNvbnN0IFdU
Rjo6U3RyaW5nJiBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdURjo6U3RyaW5n
KT4pOwogCi0gICAgc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IHJlYWRDb250
ZW50c09mRmlsZShjb25zdCBXVEY6OlN0cmluZyYgcGF0aCk7Ci0KIHByaXZhdGU6CiAgICAgV1RG
OjpTdHJpbmcgZGVmYXVsdFN0b3JlUGF0aChib29sIGxlZ2FjeUZpbGVuYW1lKTsKICAgICBzdGF0
aWMgQ29udGVudFJ1bGVMaXN0U3RvcmUmIGxlZ2FjeURlZmF1bHRTdG9yZSgpOwpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL0FQ
SUNvbnRlbnRSdWxlTGlzdFN0b3JlQ29jb2EubW0JKHJldmlzaW9uIDI0NDM1OSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElDb250ZW50UnVsZUxpc3RTdG9yZUNvY29h
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxNSArNjQsNiBAQCBXVEY6OlN0cmluZyBDb250ZW50
UnVsZUxpc3RTdG9yZTo6ZGVmYXVsCiAgICAgcmV0dXJuIGNvbnRlbnRSdWxlTGlzdFN0b3JlVVJM
LmFic29sdXRlVVJMLnBhdGguZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOwogfQogCi1SZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBDb250ZW50UnVsZUxpc3RTdG9yZTo6cmVhZENvbnRlbnRz
T2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7Ci0gICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6
W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpmaWxlUGF0aCBpc0RpcmVjdG9yeTpOT11dOwotICAgIGlm
ICghZGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBBUEkKIAogI2Vu
ZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9y
ZS5tbQkocmV2aXNpb24gMjQ0MzU5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyNiwxMSAr
MTI2LDYgQEAgLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIAogLy8gRm9yIHRlc3Rpbmcgb25s
eS4KIAotKyAodm9pZClfcmVnaXN0ZXJQYXRoQXNVbnNhZmVUb01lbW9yeU1hcEZvclRlc3Rpbmc6
KE5TU3RyaW5nICopZmlsZW5hbWUKLXsKLSAgICBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6cmVnaXN0
ZXJQYXRoQXNVbnNhZmVUb01lbW9yeU1hcEZvclRlc3RpbmcoZmlsZW5hbWUpOwotfQotCiAtICh2
b2lkKV9yZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzCiB7CiAgICAgX2NvbnRlbnRSdWxlTGlzdFN0
b3JlLT5zeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHMoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nv
bnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oCShyZXZpc2lvbiAyNDQzNTkpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZVByaXZhdGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogLSAodm9pZClfcmVtb3ZlQWxsQ29u
dGVudFJ1bGVMaXN0czsKIC0gKHZvaWQpX2ludmFsaWRhdGVDb250ZW50UnVsZUxpc3RWZXJzaW9u
Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyOwogLSAodm9pZClfZ2V0Q29udGVu
dFJ1bGVMaXN0U291cmNlRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShOU1N0cmluZyopKWNvbXBsZXRpb25IYW5kbGVyOwotKyAo
dm9pZClfcmVnaXN0ZXJQYXRoQXNVbnNhZmVUb01lbW9yeU1hcEZvclRlc3Rpbmc6KE5TU3RyaW5n
ICopZmlsZW5hbWU7CiAKIC8vIE5TX1JFTEVBU0VTX0FSR1VNRU5UIHRvIGtlZXAgcGVhayBtZW1v
cnkgdXNhZ2UgbG93LgogLSAodm9pZClfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZp
ZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmlu
ZyAqKSBOU19SRUxFQVNFU19BUkdVTUVOVCBlbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBs
ZXRpb25IYW5kbGVyOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1VzZXJDb250ZW50RmlsdGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5tbQkocmV2aXNpb24gMjQ0MzU5KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVy
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1Niw0IEBAIC0gKGlkKV9pbml0V2l0aFdLQ29u
dGVudFJ1bGVMaXN0OihXS0NvbnQKICAgICByZXR1cm4gc2VsZjsKIH0KIAotLSAoQk9PTCl1c2Vz
Q29waWVkTWVtb3J5Ci17Ci0gICAgcmV0dXJuIF9jb250ZW50UnVsZUxpc3QtPl9jb250ZW50UnVs
ZUxpc3QtPnVzZXNDb3BpZWRNZW1vcnkoKTsKLX0KLQogQGVuZApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVu
dEZpbHRlclByaXZhdGUuaAkocmV2aXNpb24gMjQ0MzU5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw1IEBACiBAaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RmlsdGVyIChX
S1ByaXZhdGUpCiAKIC0gKGlkKV9pbml0V2l0aFdLQ29udGVudFJ1bGVMaXN0OihXS0NvbnRlbnRS
dWxlTGlzdCopY29udGVudFJ1bGVMaXN0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBp
b3MoMTEuMCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIHVzZXNDb3Bp
ZWRNZW1vcnk7CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjQ0MzU5KQorKysgU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUzOSw2
ICszNTM5LDcgQEAKIAkJNUNCQzlCODkxQzY1MjRBNTAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFz
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrRGF0YVRhc2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzlCOEIxQzY1MjU3MzAwQThGRENGIC8q
IE5ldHdvcmtEYXRhVGFza0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gTmV0d29ya0RhdGFUYXNrQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDQzVEQjkxMjE0ODhFMTYwMDZDQjhBOCAvKiBTaGFyZWRCdWZmZXJEYXRhUmVmZXJl
bmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZEJ1ZmZlckRhdGFS
ZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNEMTUwNzYyMjY4RjdG
MDAwNkZCNEFGIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Db2NvYS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW1Db2NvYS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNEMjg2NDkxRTcyMkY0NDAwOTRGREM4
IC8qIF9XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBfV0tVc2VyQ29udGVudEZpbHRlclByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUNEMjg2NEExRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVM
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudFJ1bGVMaXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDRDI4NjRCMUU3MjJGNDQwMDk0RkRD
OCAvKiBXS0NvbnRlbnRSdWxlTGlzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdLQ29udGVudFJ1bGVMaXN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtODkyMCw2ICs4OTIxLDcgQEAKIAkJCQlFNDEzRjU5QjFBQzFBREI2MDAzNDUzNjAgLyog
TmV0d29ya0NhY2hlRW50cnkuaCAqLywKIAkJCQlFNDY5N0NDQzFCMjVFQjhGMDAxQjBBNkMgLyog
TmV0d29ya0NhY2hlRmlsZVN5c3RlbS5jcHAgKi8sCiAJCQkJODM0QjI1MEUxQTgzMUE4RDAwQ0ZC
MTUwIC8qIE5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCAqLywKKwkJCQk1Q0QxNTA3NjIyNjhGN0Yw
MDA2RkI0QUYgLyogTmV0d29ya0NhY2hlRmlsZVN5c3RlbUNvY29hLm1tICovLAogCQkJCUU0MkUw
NjBCMUFBNzQ0MEQwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaCAqLywKIAkJCQlF
NDJFMDYwRDFBQTc1MEU1MDBCMTE2OTkgLyogTmV0d29ya0NhY2hlSU9DaGFubmVsQ29jb2EubW0g
Ki8sCiAJCQkJRTQ0MzZFQzAxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZUtleS5jcHAg
Ki8sCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDQ0NDIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxOS0wNC0xOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgorCisgICAgICAgIFdLQ29udGVudFJ1bGVMaXN0cyBzaG91bGQgaGF2ZSBh
IG1heGltdW0gRmlsZVByb3RlY3Rpb24gb2YgQ29tcGxldGVVbmxlc3NPcGVuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcwNzgKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ5NTY0MzQ4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0NvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbToKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAgICgtW1Rlc3RT
Y2hlbWVIYW5kbGVyU3VicmVzb3VyY2VTaG91bGRCZUJsb2NrZWQgd2ViVmlldzpzdGFydFVSTFNj
aGVtZVRhc2s6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1Rlc3RTY2hlbWVIYW5kbGVyU3VicmVz
b3VyY2VTaG91bGRCZUJsb2NrZWQgd2ViVmlldzpzdG9wVVJMU2NoZW1lVGFzazpdKTogRGVsZXRl
ZC4KKyAgICAgICAgVW5mb3J0dW5hdGVseSwgc2V0dGluZyB0aGUgTlNGaWxlUHJvdGVjdGlvbktl
eSBhdHRyaWJ1dGUgaXMgb25seSBzdXBwb3J0ZWQgb24gaU9TIGRldmljZXMuCisKIDIwMTktMDQt
MTggIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBv
cnQgZm9yIHBhcnNpbmcgRmFpclBsYXlTdHJlYW1pbmcgUFNTSCBib3hlcy4KSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9X
S0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24gMjQ0MzU5KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDkgQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGls
aXRpZXMuaCIKICNpbXBvcnQgIlRlc3QuaCIKLSNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNp
bXBvcnQgPFdlYktpdC9XS0NvbnRlbnRSdWxlTGlzdC5oPgogI2ltcG9ydCA8V2ViS2l0L1dLQ29u
dGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRl
bnRGaWx0ZXJQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRl
bmF0ZS5oPgotI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAK
IGNsYXNzIFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qg
ewogcHVibGljOgpAQCAtMzgzLDEwMSArMzc4LDU5IEBAIFRFU1RfRihXS0NvbnRlbnRSdWxlTGlz
dFN0b3JlVGVzdCwgQWRkUmUKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVk
QWxlcnQpOwogfQogCi1AaW50ZXJmYWNlIFRlc3RTY2hlbWVIYW5kbGVyU3VicmVzb3VyY2VTaG91
bGRCZUJsb2NrZWQgOiBOU09iamVjdCA8V0tVUkxTY2hlbWVIYW5kbGVyPgotQGVuZAotQGltcGxl
bWVudGF0aW9uIFRlc3RTY2hlbWVIYW5kbGVyU3VicmVzb3VyY2VTaG91bGRCZUJsb2NrZWQKLS0g
KHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzdGFydFVSTFNjaGVtZVRhc2s6KGlk
IDxXS1VSTFNjaGVtZVRhc2s+KXRhc2sKLXsKLSAgICBFWFBFQ1RfVFJVRShbdGFzay5yZXF1ZXN0
LlVSTC5wYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9zaG91bGRsb2FkIl0pOwotICAgIFt0YXNrIGRp
ZFJlY2VpdmVSZXNwb25zZTpbW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNr
LnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6
MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsKLSAgICBbdGFzayBkaWRGaW5p
c2hdOwotfQotLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHN0b3BVUkxTY2hl
bWVUYXNrOihpZCA8V0tVUkxTY2hlbWVUYXNrPil0YXNrCi17Ci0gICAgRVhQRUNUX1RSVUUoZmFs
c2UpOwotfQotQGVuZAotCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIFRFU1RfRihXS0NvbnRl
bnRSdWxlTGlzdFN0b3JlVGVzdCwgVW5zYWZlTU1hcCkKIHsKICAgICBSZXRhaW5QdHI8TlNTdHJp
bmc+IHRlbXBEaXIgPSBbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1Bh
dGhDb21wb25lbnQ6QCJVbnNhZmVNTWFwVGVzdCJdOwogICAgIFJldGFpblB0cjxXS0NvbnRlbnRS
dWxlTGlzdFN0b3JlPiBzdG9yZSA9IFtXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIHN0b3JlV2l0aFVS
TDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnRlbXBEaXIuZ2V0KCkgaXNEaXJlY3Rvcnk6WUVTXV07
Ci0gICAgc3RhdGljIE5TU3RyaW5nICppZGVudGlmaWVyID0gQCJUZXN0UnVsZUxpc3QiOwotICAg
IHN0YXRpYyBOU1N0cmluZyAqZmlsZU5hbWUgPSBAIkNvbnRlbnRSdWxlTGlzdC1UZXN0UnVsZUxp
c3QiOworICAgIHN0YXRpYyBOU1N0cmluZyAqY29tcGlsZWRJZGVudGlmaWVyID0gQCJDb21waWxl
ZFJ1bGVMaXN0IjsKKyAgICBzdGF0aWMgTlNTdHJpbmcgKmNvcGllZElkZW50aWZpZXIgPSBAIkNv
cGllZFJ1bGVMaXN0IjsKICAgICBzdGF0aWMgTlNTdHJpbmcgKnJ1bGVMaXN0U291cmNlU3RyaW5n
ID0gQCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJs
LWZpbHRlclwiOlwiYmxvY2tlZHN1YnJlc291cmNlXCJ9fV0iOwotICAgIFJldGFpblB0cjxOU1N0
cmluZz4gZmlsZVBhdGggPSBbdGVtcERpciBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6
ZmlsZU5hbWVdOworICAgIFJldGFpblB0cjxOU1N0cmluZz4gY29tcGlsZWRGaWxlUGF0aCA9IFt0
ZW1wRGlyIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNvbnRlbnRSdWxlTGlzdC1D
b21waWxlZFJ1bGVMaXN0Il07CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBjb3BpZWRGaWxlUGF0
aCA9IFt0ZW1wRGlyIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNvbnRlbnRSdWxl
TGlzdC1Db3BpZWRSdWxlTGlzdCJdOwogCi0gICAgYXV0byBydW5UZXN0ID0gWyZdIChib29sIHNo
b3VsZFVzZUNvcGllZE1lbW9yeSkgewotICAgICAgICBFWFBFQ1RfRkFMU0UoW1tOU0ZpbGVNYW5h
Z2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOmZpbGVQYXRoLmdldCgpXSk7Ci0g
ICAgICAgIAotICAgICAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwotICAg
ICAgICBfX2Jsb2NrIFJldGFpblB0cjxXS0NvbnRlbnRSdWxlTGlzdD4gcnVsZUxpc3Q7Ci0gICAg
ICAgIFtzdG9yZSBjb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVy
IGVuY29kZWRDb250ZW50UnVsZUxpc3Q6cnVsZUxpc3RTb3VyY2VTdHJpbmcgY29tcGxldGlvbkhh
bmRsZXI6XihXS0NvbnRlbnRSdWxlTGlzdCAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgewotICAg
ICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7Ci0gICAgICAgICAgICBFWFBFQ1RfTlVM
TChlcnJvcik7Ci0gICAgICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKLSAgICAgICAgICAg
IHJ1bGVMaXN0ID0gZmlsdGVyOwotICAgICAgICAgICAgRVhQRUNUX1RSVUUoW1tbW19XS1VzZXJD
b250ZW50RmlsdGVyIGFsbG9jXSBfaW5pdFdpdGhXS0NvbnRlbnRSdWxlTGlzdDpmaWx0ZXJdIGF1
dG9yZWxlYXNlXSB1c2VzQ29waWVkTWVtb3J5XSA9PSBzaG91bGRVc2VDb3BpZWRNZW1vcnkpOwot
ICAgICAgICB9XTsKLSAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGls
aW5nKTsKLSAgICAgICAgCi0gICAgICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpmaWxlUGF0aC5nZXQoKV0pOwotCi0gICAgICAg
IGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1Rlc3RTY2hlbWVIYW5kbGVyU3VicmVzb3VyY2VTaG91
bGRCZUJsb2NrZWQgbmV3XSk7Ci0gICAgICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMo
W1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSk7Ci0gICAgICAgIFtjb25maWd1cmF0aW9uIHNl
dFVSTFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJ0ZXN0bW1hcCJd
OwotICAgICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRDb250
ZW50UnVsZUxpc3Q6cnVsZUxpc3QuZ2V0KCldOwotICAgICAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKLSAgICAgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPGh0bWw+bWFpbiByZXNvdXJj
ZSBjb250ZW50PC9odG1sPiIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3RtbWFw
Oi8vd2Via2l0Lm9yZy9tYWlucmVzb3VyY2UiXV07Ci0KLSAgICAgICAgYXV0byBsb2FkaW5nU2hv
dWxkU3VjY2VlZCA9IFsmXSAoTlNTdHJpbmcgKnJlc291cmNlUGF0aCwgTlNTdHJpbmcgKnNob3Vs
ZFN1Y2NlZWQpIHsKLSAgICAgICAgICAgIF9fYmxvY2sgYm9vbCBkb25lRXZhbHVhdGluZyA9IGZh
bHNlOwotICAgICAgICAgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAidmFyIGNhdWdodCA9IGZhbHNlOyB2YXIgeGhyID0gbmV3IFhNTEh0
dHBSZXF1ZXN0KCk7IHhoci5vcGVuKCdHRVQnLCAnJUAnLCBmYWxzZSk7IHRyeXsgeGhyLnNlbmQo
KSB9IGNhdGNoKGUpIHsgY2F1Z2h0ID0gdHJ1ZTsgfTsgY2F1Z2h0ICE9ICVAID8gJ3N1Y2Nlc3Mn
IDogJ2ZhaWx1cmUnIiwgcmVzb3VyY2VQYXRoLCBzaG91bGRTdWNjZWVkXSBjb21wbGV0aW9uSGFu
ZGxlcjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBFWFBF
Q1RfTlVMTChlcnJvcik7Ci0gICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoW0Aic3VjY2VzcyIg
aXNFcXVhbFRvU3RyaW5nOnJlc3VsdF0pOwotICAgICAgICAgICAgICAgIGRvbmVFdmFsdWF0aW5n
ID0gdHJ1ZTsKLSAgICAgICAgICAgIH1dOwotICAgICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lRXZhbHVhdGluZyk7Ci0gICAgICAgIH07Ci0gICAgICAgIGxvYWRpbmdTaG91
bGRTdWNjZWVkKEAiL3Nob3VsZGxvYWQiLCBAInRydWUiKTsKLSAgICAgICAgbG9hZGluZ1Nob3Vs
ZFN1Y2NlZWQoQCIvYmxvY2tlZHN1YnJlc291cmNlIiwgQCJmYWxzZSIpOwotCi0gICAgICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIHJlbW92ZUNvbnRlbnRSdWxlTGlz
dDpydWxlTGlzdC5nZXQoKV07Ci0gICAgICAgIAotICAgICAgICBfX2Jsb2NrIGJvb2wgZG9uZUxv
b2tpbmdVcCA9IGZhbHNlOwotICAgICAgICBbc3RvcmUgbG9va1VwQ29udGVudFJ1bGVMaXN0Rm9y
SWRlbnRpZmllcjppZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxp
c3QgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKLSAgICAgICAgICAgIEVYUEVDVF9OT1RfTlVM
TChmaWx0ZXIpOwotICAgICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBkb25lTG9va2luZ1VwID0gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgRVhQRUNUX1RSVUUoW1tbW19XS1VzZXJDb250ZW50RmlsdGVyIGFsbG9jXSBfaW5pdFdp
dGhXS0NvbnRlbnRSdWxlTGlzdDpmaWx0ZXJdIGF1dG9yZWxlYXNlXSB1c2VzQ29waWVkTWVtb3J5
XSA9PSBzaG91bGRVc2VDb3BpZWRNZW1vcnkpOwotICAgICAgICAgICAgcnVsZUxpc3QgPSBmaWx0
ZXI7Ci0gICAgICAgIH1dOwotICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVM
b29raW5nVXApOworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7CisgICAg
W3N0b3JlIGNvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmNvbXBpbGVkSWRlbnRp
ZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OnJ1bGVMaXN0U291cmNlU3RyaW5nIGNvbXBsZXRp
b25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3QgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsK
KyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVy
cm9yKTsKKyAgICAgICAgZG9uZUNvbXBpbGluZyA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKIAotICAgICAgICBbW2NvbmZpZ3Vy
YXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRDb250ZW50UnVsZUxpc3Q6cnVsZUxpc3Qu
Z2V0KCldOwotICAgICAgICBsb2FkaW5nU2hvdWxkU3VjY2VlZChAIi9zaG91bGRsb2FkIiwgQCJ0
cnVlIik7Ci0gICAgICAgIGxvYWRpbmdTaG91bGRTdWNjZWVkKEAiL2Jsb2NrZWRzdWJyZXNvdXJj
ZSIsIEAiZmFsc2UiKTsKKyAgICBhdXRvIGhhc0NvbXBsZXRlUHJvdGVjdGlvbiA9IFtdIChjb25z
dCBSZXRhaW5QdHI8TlNTdHJpbmc+JiBwYXRoKSB7CisgICAgICAgIE5TRXJyb3IgKmVycm9yID0g
bmlsOworICAgICAgICBOU0RpY3Rpb25hcnk8TlNGaWxlQXR0cmlidXRlS2V5LCBpZD4gKmF0dHJp
YnV0ZXMgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGF0dHJpYnV0ZXNPZkl0ZW1B
dFBhdGg6cGF0aC5nZXQoKSBlcnJvcjomZXJyb3JdOworICAgICAgICBFWFBFQ1RfTlVMTChlcnJv
cik7CisgICAgICAgIHJldHVybiBbW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRmlsZVByb3Rl
Y3Rpb25LZXldIGlzRXF1YWxUb1N0cmluZzpOU0ZpbGVQcm90ZWN0aW9uQ29tcGxldGVdOworICAg
IH07CisgICAgCisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgW1tOU0ZpbGVNYW5hZ2Vy
IGRlZmF1bHRNYW5hZ2VyXSBjb3B5SXRlbUF0UGF0aDpjb21waWxlZEZpbGVQYXRoLmdldCgpIHRv
UGF0aDpjb3BpZWRGaWxlUGF0aC5nZXQoKSBlcnJvcjomZXJyb3JdOworICAgIEVYUEVDVF9OVUxM
KGVycm9yKTsKKyAgICBFWFBFQ1RfRkFMU0UoaGFzQ29tcGxldGVQcm90ZWN0aW9uKGNvcGllZEZp
bGVQYXRoKSk7CisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBzZXRBdHRyaWJ1
dGVzOkB7IE5TRmlsZVByb3RlY3Rpb25LZXk6IE5TRmlsZVByb3RlY3Rpb25Db21wbGV0ZSB9IG9m
SXRlbUF0UGF0aDpjb3BpZWRGaWxlUGF0aC5nZXQoKSBlcnJvcjomZXJyb3JdOworICAgIEVYUEVD
VF9OVUxMKGVycm9yKTsKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCisgICAg
RVhQRUNUX1RSVUUoaGFzQ29tcGxldGVQcm90ZWN0aW9uKGNvcGllZEZpbGVQYXRoKSk7CisjZW5k
aWYKIAotICAgICAgICBfX2Jsb2NrIGJvb2wgZG9uZUNoZWNraW5nU291cmNlID0gZmFsc2U7Ci0g
ICAgICAgIFtzdG9yZSBfZ2V0Q29udGVudFJ1bGVMaXN0U291cmNlRm9ySWRlbnRpZmllcjppZGVu
dGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNTdHJpbmcgKnNvdXJjZSkgewotICAgICAgICAg
ICAgRVhQRUNUX1RSVUUoW3NvdXJjZSBpc0VxdWFsVG9TdHJpbmc6cnVsZUxpc3RTb3VyY2VTdHJp
bmddKTsKLSAgICAgICAgICAgIGRvbmVDaGVja2luZ1NvdXJjZSA9IHRydWU7Ci0gICAgICAgIH1d
OwotICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDaGVja2luZ1NvdXJjZSk7
Ci0gICAgICAgIAotICAgICAgICBfX2Jsb2NrIGJvb2wgZG9uZVJlbW92aW5nID0gZmFsc2U7Ci0g
ICAgICAgIFtzdG9yZSByZW1vdmVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmlkZW50aWZp
ZXIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgeworICAgIF9fYmxvY2sgYm9v
bCBkb25lTG9va2luZ1VwID0gZmFsc2U7CisgICAgW3N0b3JlIGxvb2tVcENvbnRlbnRSdWxlTGlz
dEZvcklkZW50aWZpZXI6Y29waWVkSWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29u
dGVudFJ1bGVMaXN0ICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9O
T1RfTlVMTChmaWx0ZXIpOworICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CisgICAgICAgIGRv
bmVMb29raW5nVXAgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZUxvb2tpbmdVcCk7CisgICAgRVhQRUNUX0ZBTFNFKGhhc0NvbXBsZXRlUHJvdGVjdGlv
bihjb3BpZWRGaWxlUGF0aCkpOworICAgIAorICAgIF9fYmxvY2sgYm9vbCBkb25lUmVtb3Zpbmcg
PSBmYWxzZTsKKyAgICBbc3RvcmUgcmVtb3ZlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjpj
b21waWxlZElkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgewor
ICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CisgICAgICAgIFtzdG9yZSByZW1vdmVDb250ZW50
UnVsZUxpc3RGb3JJZGVudGlmaWVyOmNvcGllZElkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6
XihOU0Vycm9yICplcnJvcikgewogICAgICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogICAg
ICAgICAgICAgZG9uZVJlbW92aW5nID0gdHJ1ZTsKICAgICAgICAgfV07Ci0gICAgICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsKLQotICAgICAgICBFWFBFQ1RfRkFM
U0UoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOmZpbGVQ
YXRoLmdldCgpXSk7Ci0gICAgfTsKLSAgICAKLSAgICBydW5UZXN0KGZhbHNlKTsKLSAgICBbV0tD
b250ZW50UnVsZUxpc3RTdG9yZSBfcmVnaXN0ZXJQYXRoQXNVbnNhZmVUb01lbW9yeU1hcEZvclRl
c3Rpbmc6ZmlsZVBhdGguZ2V0KCldOwotICAgIHJ1blRlc3QodHJ1ZSk7CisgICAgfV07CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lUmVtb3ZpbmcpOwogfQorI2VuZGlmIC8vIFBM
QVRGT1JNKElPU19GQU1JTFkpCg==
</data>
<flag name="review"
          id="384169"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>