<?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>197064</bug_id>
          
          <creation_ts>2019-04-18 11:08:44 -0700</creation_ts>
          <short_desc>Add support for parsing FairPlayStreaming PSSH boxes.</short_desc>
          <delta_ts>2019-04-18 15:08:05 -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="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1528512</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-04-18 11:08:44 -0700</bug_when>
    <thetext>Add support for parsing FairPlayStreaming PSSH boxes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528513</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-04-18 11:11:41 -0700</bug_when>
    <thetext>&lt;rdar://problem/50021692&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528514</commentid>
    <comment_count>2</comment_count>
      <attachid>367737</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-04-18 11:11:52 -0700</bug_when>
    <thetext>Created attachment 367737
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528536</commentid>
    <comment_count>3</comment_count>
      <attachid>367737</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2019-04-18 13:00:21 -0700</bug_when>
    <thetext>Comment on attachment 367737
Patch

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

Here are a couple of minor nits to consider while you redo the parts we talked about in person.

&gt; Source/WebCore/platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:189
&gt; +    SchemeAndKeyResult result;

Minor nit: you can define this just before the loop so it isn&apos;t allocated if the array buffer allocation fails.

&gt; Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.cpp:64
&gt; +    if (m_size - (localOffset - offset) &lt; 16)
&gt; +        return false;
&gt; +
&gt; +    auto buffer = view.possiblySharedBuffer();
&gt; +    if (!buffer)
&gt; +        return false;
&gt; +
&gt; +    auto keyID = buffer-&gt;slice(localOffset, localOffset + 16);
&gt; +    localOffset += 16;
&gt; +
&gt; +    m_keyID.resize(16);
&gt; +    memcpy(m_keyID.data(), keyID-&gt;data(), 16);

Nit: &quot;16&quot; should be a named constant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528544</commentid>
    <comment_count>4</comment_count>
      <attachid>367744</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-04-18 13:14:07 -0700</bug_when>
    <thetext>Created attachment 367744
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528547</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-04-18 13:23:24 -0700</bug_when>
    <thetext>Attachment 367744 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:35:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:37:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:47:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:50:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:60:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:61:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:71:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:72:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:82:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:83:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:93:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:95:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:96:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:97:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:98:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:111:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:113:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:114:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:127:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
Total errors found: 19 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528554</commentid>
    <comment_count>6</comment_count>
      <attachid>367745</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-04-18 13:38:04 -0700</bug_when>
    <thetext>Created attachment 367745
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528555</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-04-18 13:40:01 -0700</bug_when>
    <thetext>Attachment 367745 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:35:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:37:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:47:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:50:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:60:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:61:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:71:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:72:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:82:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:83:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:93:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:95:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:96:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:97:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:98:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:111:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:113:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:114:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:127:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
Total errors found: 19 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528615</commentid>
    <comment_count>8</comment_count>
      <attachid>367745</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-18 15:08:02 -0700</bug_when>
    <thetext>Comment on attachment 367745
Patch

Clearing flags on attachment: 367745

Committed r244439: &lt;https://trac.webkit.org/changeset/244439&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528616</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-18 15:08:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367737</attachid>
            <date>2019-04-18 11:11:52 -0700</date>
            <delta_ts>2019-04-18 13:14:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197064-20190418111144.patch</filename>
            <type>text/plain</type>
            <size>31814</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0NDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGFlZmJhZjllYTU0ZWVmNzJmZWYyY2I2
MmZjZTY5MWM2N2NjNDViOTMuLjU4YjAxMzExZjJkYTY1ODczYjg4YTc0NWE1ZTFiYTdhZDZmODE1
MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTktMDQtMTggIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHBhcnNpbmcgRmFpclBsYXlT
dHJlYW1pbmcgUFNTSCBib3hlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTktMDQtMTYgIEplciBOb2JsZSAg
PGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIEhBVkVfQVZGT1VOREFUSU9O
X1ZJREVPX09VVFBVVCBvbiBQTEFURk9STShJT1NNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU1OGIyYzMy
MzU5MTIwYjI5MmJlYWYzMzhiZGNjODc1Y2UxM2I2NC4uM2VlOWMxZTc0YmIzYmFkYThmYzhhYjE5
ZTc2MmFkZTExOTdkNmY5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE5LTA0LTE4
ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0
IGZvciBwYXJzaW5nIEZhaXJQbGF5U3RyZWFtaW5nIFBTU0ggYm94ZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcwNjQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBUEkgVGVzdHM6IElTTy5JU09GYWly
UGxheVN0cmVhbWluZ1Bzc2hCb3gKKworICAgICAgICBBZGQgYSBuZXcgc2V0IG9mIElTT0JveCBj
bGFzc2VzIGZvciBwYXJzaW5nIHRoZSBjb250ZW50cyBvZiBhIEZhaXJQbGF5U3RyZWFtaW5nIFBT
U0ggYm94LAorICAgICAgICBhbmQgYWRkIHN1cHBvcnQgZm9yIHRoaXMgbmV3IGJveCB0byBDRE1G
YWlyUGxheVN0cmVhbWluZy4KKworICAgICAgICBEcml2ZS1ieSBmaXg6IGFkZCBhbiBleHBsaWNp
dCBpbmNsdWRlIGZvciBNYWluVGhyZWFkLmggdG8gTGliV2ViUlRDUHJvdmlkZXJDb2NvYS5jcHAu
CisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb3VyQ0Mu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlT
dHJlYW1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFt
aW5nOjpjZW5jTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpmYWlyUGxheVN5c3RlbUlEKToKKyAg
ICAgICAgKFdlYkNvcmU6OmV4dHJhY3RTY2hlbWVBbmRLZXlJZEZyb21DZW5jKToKKyAgICAgICAg
KFdlYkNvcmU6OkNETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc0NlbmMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzYW5pdGl6
ZUNlbmMpOgorICAgICAgICAoV2ViQ29yZTo6dmFsaWRJbml0RGF0YVR5cGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNETUZhY3Rvcnk6OnBsYXRmb3JtUmVnaXN0ZXJGYWN0b3JpZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JU09GYWlyUGxheVN0
cmVhbWluZ1Bzc2hCb3guY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklTT0ZhaXJQbGF5
U3RyZWFtaW5nUHNzaEJveDo6ZmFpclBsYXlTeXN0ZW1JRCk6CisgICAgICAgIChXZWJDb3JlOjpJ
U09GYWlyUGxheVN0cmVhbWluZ0luZm9Cb3g6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OklT
T0ZhaXJQbGF5U3RyZWFtaW5nS2V5UmVxdWVzdEluZm9Cb3g6OnBhcnNlKToKKyAgICAgICAgKFdl
YkNvcmU6OklTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5QXNzZXRJZEJveDo6cGFyc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SVNPRmFpclBsYXlTdHJlYW1pbmdLZXlDb250ZXh0Qm94OjpwYXJzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJU09GYWlyUGxheVN0cmVhbWluZ0tleVZlcnNpb25MaXN0Qm94Ojpw
YXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpJU09GYWlyUGxheVN0cmVhbWluZ0tleVJlcXVlc3RC
b3g6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OklTT0ZhaXJQbGF5U3RyZWFtaW5nSW5pdERh
dGFCb3g6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OklTT0ZhaXJQbGF5U3RyZWFtaW5nUHNz
aEJveDo6cGFyc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9J
U09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3guaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyQ29jb2EuY3BwOgorCiAyMDE5
LTA0LTE3ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFj
dG9yaW5nOiBQdWxsIGFsbCBmdWxsc2NyZWVuIGNvZGUgb3V0IG9mIERvY3VtZW50IGFuZCBpbnRv
IGl0cyBvd24gaGVscGVyIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCBjYmNmZjk1MjAxMWE2ZWU0NDZi
MGZlNzE0OWZjNDQ2MDUzYTJkZDNlLi4wNjE0N2FjODFlOTg3MDYxYjE3ZjczYzdlNjE5NmZhY2Zl
YTRmZGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTE1MTcsNiArMTUxNyw3IEBACiAKICNpZiAoUExBVEZP
Uk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTUwMCkgfHwg
KFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTMw
MDAwKSB8fCAoUExBVEZPUk0oV0FUQ0hPUykgJiYgX19XQVRDSF9PU19WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSA2MDAwMCkgfHwgKFBMQVRGT1JNKEFQUExFVFYpICYmIF9fVFZfT1NfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTMwMDAwKQogI2RlZmluZSBIQVZFX0FMTE9XU19TRU5TSVRJVkVfTE9H
R0lORyAxCisjZGVmaW5lIEhBVkVfRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19JTklUREFUQSAxCiAj
ZW5kaWYKIAogI2lmIChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEzMDAwMCkgfHwgKFBMQVRGT1JNKFdBVENIT1MpICYmIF9fV0FUQ0hfT1NfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gNjAwMDApIHx8IChQTEFURk9STShBUFBMRVRWKSAmJiBfX1RW
X09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CmluZGV4IDQ5NmJiNGJhOGE0NjI2Y2NkYjVjNjMyMTAxNWQ3Y2NlMmViNzBiYmEuLmVmYTdkZjIz
ODJjOWYwMzJkODg2OTdhODJlMTZjY2NlMzQ2Njk5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dApAQCAtMjI1LDYgKzIyNSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9DRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tIEBuby11bmlmeQogcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0
ZUFWRi5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAgQG5vLXVuaWZ5CitwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWJhY2tUYXJnZXRNYWMubW0gQG5vLXVuaWZ5CiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
LmNwcCBAbm8tdW5pZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVNlbGVj
dGlvbkdyb3VwQVZGT2JqQy5tbSBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwYmEyMTBjODY5MmExZTQ4ZTU3M2Uw
NWVjZDhlYWNjYThmOWIzNmM5Li5iNmYwNTIzMmQ4ZGY0NTg1MTMxYjBkNDk1M2IyM2E0NmY5YzE1
ZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC00MDQ2LDYgKzQwNDYsNyBAQAogCQlDRDYyRkI5NjFBRjAxOEU3MDAxMkVEN0Qg
LyogR2VuZXJpY1Rhc2tRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0Q2MkZCOTQxQUYwMThFNzAwMTJFRDdEIC8qIEdlbmVyaWNUYXNrUXVldWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRDY0
MUVCMzE4MThGNUVEMDBFRTRDNDEgLyogTWVkaWFTb3VyY2VQcml2YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDY0MUVCMTE4MThGNUVEMDBFRTRD
NDEgLyogTWVkaWFTb3VyY2VQcml2YXRlLmggKi87IH07CiAJCUNENjQxRUI0MTgxOEY1RUQwMEVF
NEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291cmNlQnVm
ZmVyUHJpdmF0ZS5oICovOyB9OworCQlDRDcyMEI0RjIyNjhCNTEzMDAwNDdGREUgLyogSVNPRmFp
clBsYXlTdHJlYW1pbmdQc3NoQm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRDcyMEI0OTIyNjgyQzdGMDAwNDdGREUgLyogSVNPRmFpclBsYXlTdHJl
YW1pbmdQc3NoQm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQ0Q3RDMzNDQxQzdBMTIzRjAwMDQxMjkzIC8qIFBpeGVsQnVmZmVyQ29uZm9ybWVy
Q1YuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEN0Qz
MzQyMUM3QTEyM0YwMDA0MTI5MyAvKiBQaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmggKi87IH07CiAJ
CUNEN0QzMzQ4MUM3QTE2QkYwMDA0MTI5MyAvKiBDb3JlVmlkZW9Tb2Z0TGluay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3RDMzNDYxQzdBMTZCRjAw
MDQxMjkzIC8qIENvcmVWaWRlb1NvZnRMaW5rLmggKi87IH07CiAJCUNEN0RCQjI5MThDQTE5QzYw
MEMxMTA2NiAvKiBDU1NHcmlkTGluZU5hbWVzVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEN0RCQjI3MThDQTExRkYwMEMxMTA2NiAvKiBDU1NH
cmlkTGluZU5hbWVzVmFsdWUuaCAqLzsgfTsKQEAgLTEzNTAxLDYgKzEzNTAyLDggQEAKIAkJQ0Q2
NDFFQjExODE4RjVFRDAwRUU0QzQxIC8qIE1lZGlhU291cmNlUHJpdmF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVNvdXJjZVByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZl
clByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQnVmZmVy
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDY0MUVDNzE4MUVENjAx
MDBFRTRDNDEgLyogTWVkaWFTYW1wbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTYW1wbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q3MjBCNDcyMjY4MkM3RTAwMDQ3RkRFIC8q
IElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJU09G
YWlyUGxheVN0cmVhbWluZ1Bzc2hCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDRDcyMEI0OTIyNjgyQzdGMDAwNDdGREUgLyogSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDRDc4QTJFQzFGNzU2NDg2MDBERTM3MUIgLyogQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBDRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q3OEEyRUUxRjc1NjQ4NjAwREUzNzFCIC8q
IENETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEN0QzMzQxMUM3QTEyM0YwMDA0MTI5MyAvKiBQ
aXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTU4NzgsNiArMTU4ODEsOCBAQAogCQkJCTA3RTlFMTJEMThGNUUyNzYwMDExQTNB
NCAvKiBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVBVkYuaCAqLywKIAkJCQkwN0I0NDJE
NDE2NkM3MEIwMDA1NTZDQUQgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAgKi8sCiAJ
CQkJMDdCNDQyRDUxNjZDNzBCMDAwNTU2Q0FEIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYu
aCAqLywKKwkJCQlDRDcyMEI0NzIyNjgyQzdFMDAwNDdGREUgLyogSVNPRmFpclBsYXlTdHJlYW1p
bmdQc3NoQm94LmNwcCAqLywKKwkJCQlDRDcyMEI0OTIyNjgyQzdGMDAwNDdGREUgLyogSVNPRmFp
clBsYXlTdHJlYW1pbmdQc3NoQm94LmggKi8sCiAJCQkJMDcxRTQ5NkYxQUQ1QUI1RTAwOEE1MEI0
IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRNYWMuaCAqLywKIAkJCQkwNzFFNDk2RDFBRDVBQTBEMDA4
QTUwQjQgLyogTWVkaWFQbGF5YmFja1RhcmdldE1hYy5tbSAqLywKIAkJCQkwNzZGMEQwOTEyQjgx
OTI3MDBDMjZBQTQgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcCAqLywKQEAg
LTI5NDY4LDYgKzI5NDczLDcgQEAKIAkJCQkyRDBCNEFBQjE4REExQ0NEMDA0MzRERTEgLyogSU9T
dXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzIxRTU3RDE4M0VEMUZGMDAxQzI4OUQgLyog
SU9TdXJmYWNlUG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1RkY0OTkyMTYyRTJCRTAwNEJE
ODZGIC8qIElTT0JveC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0Q3MjBCNEYyMjY4QjUxMzAwMDQ3
RkRFIC8qIElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0Q1RkY0OUUyMTYyRTRFODAwNEJEODZGIC8qIElTT09yaWdpbmFsRm9ybWF0Qm94LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRDVGRjQ5RDIxNjJFNERCMDA0QkQ4NkYgLyogSVNPUHJvdGVjdGlvblNj
aGVtZUluZm9Cb3guaCBpbiBIZWFkZXJzICovLAogCQkJCUNENUZGNDlDMjE2MkU0Q0YwMDRCRDg2
RiAvKiBJU09Qcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXJCb3guaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm91ckNDLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb3VyQ0MuaAppbmRleCBiYWIwOGNm
Yzk2ZDJiNGZlMDk1N2IxMjlmZDM5NTYyN2Y1MjZkNDE5Li5iNWFkZjU5NWFjZTc5MjA0NGFlZWMz
NzNmMWJkNDY1MmY4MGNiYzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb3VyQ0MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b3VyQ0MuaApAQCAtMzAsNiArMzAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3Qg
Rm91ckNDIHsKKyAgICBGb3VyQ0MoKSA9IGRlZmF1bHQ7CiAgICAgRm91ckNDKHVpbnQzMl90IHZh
bHVlKSA6IHZhbHVlKHZhbHVlKSB7IH0KIAogICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CkBA
IC00NSw3ICs0Niw3IEBAIHN0cnVjdCBGb3VyQ0MgewogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb3VyQ0MmIG90aGVyKSBjb25zdCB7IHJldHVybiB2YWx1ZSA9PSBvdGhlci52YWx1ZTsgfQog
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb3VyQ0MmIG90aGVyKSBjb25zdCB7IHJldHVybiB2
YWx1ZSAhPSBvdGhlci52YWx1ZTsgfQogCi0gICAgdWludDMyX3QgdmFsdWU7CisgICAgdWludDMy
X3QgdmFsdWUgeyAwIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcAppbmRleCA3ZTZkNTlmOTdiMWI0NTEyNjQ0MjBiNGJkOTA5NTllN2NjMGFhMjY4
Li40ZmYxYjY1NjY3MmFmZDZjYzhjNGViZDBiYzYzZjFkOWI0YTI4NmJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlT
dHJlYW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAiQ0RNUmVzdHJpY3Rp
b25zLmgiCiAjaW5jbHVkZSAiQ0RNU2Vzc2lvblR5cGUuaCIKKyNpbmNsdWRlICJJU09GYWlyUGxh
eVN0cmVhbWluZ1Bzc2hCb3guaCIKICNpbmNsdWRlICJJU09TY2hlbWVJbmZvcm1hdGlvbkJveC5o
IgogI2luY2x1ZGUgIklTT1NjaGVtZVR5cGVCb3guaCIKICNpbmNsdWRlICJJU09UcmFja0VuY3J5
cHRpb25Cb3guaCIKQEAgLTc0LDYgKzc1LDE4IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgQ0RNUHJp
dmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpza2ROYW1lKCkKICAgICByZXR1cm4gc2tkOwogfQogCitj
b25zdCBBdG9taWNTdHJpbmcmIENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6Y2VuY05hbWUo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNlbmMgeyBNQUtF
X1NUQVRJQ19TVFJJTkdfSU1QTCgiY2VuYyIpIH07CisgICAgcmV0dXJuIGNlbmM7Cit9CisKK3N0
YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4mIGZhaXJQbGF5U3lzdGVtSUQoKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8dWludDhfdD4+IHN5c3RlbUlEID0gVmVjdG9yPHVp
bnQ4X3Q+KHsgMHg5NCwgMHhDRSwgMHg4NiwgMHhGQiwgMHgwNywgMHhGRiwgMHg0RiwgMHg0Mywg
MHhBRCwgMHhCOCwgMHg5MywgMHhEMiwgMHhGQSwgMHg5NiwgMHg4QywgMHhBMiB9KTsKKyAgICBy
ZXR1cm4gc3lzdGVtSUQ7Cit9CisKIHN0YXRpYyBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+IGV4
dHJhY3RTaW5mRGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKIHsKICAgICAvLyBKU09O
IG9mIHRoZSBmb3JtYXQ6ICJ7IHNpbmY6IFsgPGJhc2U2NC1lbmNvZGVkLXN0cmluZz4gXSB9IgpA
QCAtMTcxLDYgKzE4NCw1NCBAQCBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBD
RE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTaQogICAgIHJldHVybiBr
ZXlJRHM7CiB9CiAKK3N0YXRpYyBTY2hlbWVBbmRLZXlSZXN1bHQgZXh0cmFjdFNjaGVtZUFuZEtl
eUlkRnJvbUNlbmMoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgU2NoZW1lQW5k
S2V5UmVzdWx0IHJlc3VsdDsKKyAgICBhdXRvIGFycmF5QnVmZmVyID0gYnVmZmVyLnRyeUNyZWF0
ZUFycmF5QnVmZmVyKCk7CisgICAgaWYgKCFhcnJheUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShXVEZNb3ZlKGFycmF5
QnVmZmVyKSwgMCwgYnVmZmVyLnNpemUoKSk7CisgICAgdW5zaWduZWQgaW50IG9mZnNldCB7IDAg
fTsKKworICAgIHdoaWxlIChvZmZzZXQgPCBidWZmZXIuc2l6ZSgpKSB7CisgICAgICAgIGF1dG8g
cGVla1Jlc3VsdCA9IElTT0JveDo6cGVla0JveCh2aWV3LCBvZmZzZXQpOworICAgICAgICBpZiAo
IXBlZWtSZXN1bHQgfHwgcGVla1Jlc3VsdC52YWx1ZSgpLmZpcnN0ICE9IElTT1Byb3RlY3Rpb25T
eXN0ZW1TcGVjaWZpY0hlYWRlckJveDo6Ym94VHlwZU5hbWUoKSkKKyAgICAgICAgICAgIHJldHVy
biB7IH07CisKKyAgICAgICAgSVNPUHJvdGVjdGlvblN5c3RlbVNwZWNpZmljSGVhZGVyQm94IHBz
c2hCb3g7CisgICAgICAgIGlmICghcHNzaEJveC5yZWFkKHZpZXcsIG9mZnNldCkpCisgICAgICAg
ICAgICByZXR1cm4geyB9OworCisgICAgICAgIGlmIChwc3NoQm94LnN5c3RlbUlEKCkgIT0gZmFp
clBsYXlTeXN0ZW1JRCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgSVNPRmFp
clBsYXlTdHJlYW1pbmdQc3NoQm94IGZwc1Bzc2g7CisgICAgICAgIG9mZnNldCAtPSBwc3NoQm94
LnNpemUoKTsKKyAgICAgICAgaWYgKCFmcHNQc3NoLnJlYWQodmlldywgb2Zmc2V0KSkKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgRm91ckNDIHNjaGVtZSA9IGZwc1Bzc2guaW5p
dERhdGFCb3goKS5pbmZvKCkuc2NoZW1lKCk7CisgICAgICAgIGZvciAoYXV0byByZXF1ZXN0IDog
ZnBzUHNzaC5pbml0RGF0YUJveCgpLnJlcXVlc3RzKCkpCisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKHNjaGVtZSwgcmVxdWVzdC5yZXF1ZXN0SW5mbygpLmtleUlEKCkp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPcHRpb25hbDxWZWN0b3I8UmVm
PFNoYXJlZEJ1ZmZlcj4+PiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJ
RHNDZW5jKGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQoreworICAgIFZlY3RvcjxSZWY8U2hh
cmVkQnVmZmVyPj4ga2V5SURzOworICAgIGF1dG8gcmVzdWx0cyA9IGV4dHJhY3RTY2hlbWVBbmRL
ZXlJZEZyb21DZW5jKGJ1ZmZlcik7CisKKyAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IHJlc3VsdHMp
IHsKKyAgICAgICAgaWYgKHZhbGlkRmFpclBsYXlTdHJlYW1pbmdTY2hlbWVzKCkuY29udGFpbnMo
cmVzdWx0LmZpcnN0KSkKKyAgICAgICAgICAgIGtleUlEcy5hcHBlbmQoU2hhcmVkQnVmZmVyOjpj
cmVhdGUocmVzdWx0LnNlY29uZC5kYXRhKCksIHJlc3VsdC5zZWNvbmQuc2l6ZSgpKSk7CisgICAg
fQorCisgICAgcmV0dXJuIGtleUlEczsKK30KKwogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gQ0RNUHJp
dmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzYW5pdGl6ZVNpbmYoY29uc3QgU2hhcmVkQnVmZmVyJiBi
dWZmZXIpCiB7CiAgICAgLy8gQ29tbW9uIFNJTkYgQm94IEZvcm1hdApAQCAtMTg2LDYgKzI0Nywx
MyBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNh
bml0aXplU2tkKGNvbnN0IFNoYXJlZEJ1ZmZlcgogICAgIHJldHVybiBidWZmZXIuY29weSgpOwog
fQogCitSZWZQdHI8U2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNh
bml0aXplQ2VuYyhjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBVTlVTRURfUEFS
QU0oYnVmZmVyKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBidWZmZXIuY29w
eSgpOworfQorCiBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBDRE1Qcml2YXRl
RmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTa2QoY29uc3QgU2hhcmVkQnVmZmVyJiBi
dWZmZXIpCiB7CiAgICAgLy8gSW4gdGhlICdza2QnIHNjaGVtZSwgdGhlIGluaXQgZGF0YSBpcyB0
aGUga2V5IElELgpAQCAtMTk2LDcgKzI2NCwxMyBAQCBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJl
ZEJ1ZmZlcj4+PiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTawog
CiBzdGF0aWMgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmc+JiB2YWxpZEluaXREYXRhVHlwZXMo
KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21pY1N0cmluZz4+IHZh
bGlkVHlwZXMgPSBIYXNoU2V0PEF0b21pY1N0cmluZz4oeyBDRE1Qcml2YXRlRmFpclBsYXlTdHJl
YW1pbmc6OnNpbmZOYW1lKCksIENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2tkTmFtZSgp
IH0pOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21pY1N0cmluZz4+IHZh
bGlkVHlwZXMgPSBIYXNoU2V0PEF0b21pY1N0cmluZz4oeworICAgICAgICBDRE1Qcml2YXRlRmFp
clBsYXlTdHJlYW1pbmc6OnNpbmZOYW1lKCksCisgICAgICAgIENETVByaXZhdGVGYWlyUGxheVN0
cmVhbWluZzo6c2tkTmFtZSgpLAorI2lmIEhBVkUoRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19JTklU
REFUQSkKKyAgICAgICAgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpjZW5jTmFtZSgpLAor
I2VuZGlmCisgICAgfSk7CiAgICAgcmV0dXJuIHZhbGlkVHlwZXM7CiB9CiAKQEAgLTIwNyw2ICsy
ODEsOSBAQCB2b2lkIENETUZhY3Rvcnk6OnBsYXRmb3JtUmVnaXN0ZXJGYWN0b3JpZXMoVmVjdG9y
PENETUZhY3RvcnkqPiYgZmFjdG9yaWVzKQogCiAgICAgSW5pdERhdGFSZWdpc3RyeTo6c2hhcmVk
KCkucmVnaXN0ZXJJbml0RGF0YVR5cGUoQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzaW5m
TmFtZSgpLCB7IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2FuaXRpemVTaW5mLCBDRE1Q
cml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTaW5mIH0pOwogICAgIEluaXRE
YXRhUmVnaXN0cnk6OnNoYXJlZCgpLnJlZ2lzdGVySW5pdERhdGFUeXBlKENETVByaXZhdGVGYWly
UGxheVN0cmVhbWluZzo6c2tkTmFtZSgpLCB7IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6
c2FuaXRpemVTa2QsIENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc1Nr
ZCB9KTsKKyNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCisgICAgSW5p
dERhdGFSZWdpc3RyeTo6c2hhcmVkKCkucmVnaXN0ZXJJbml0RGF0YVR5cGUoQ0RNUHJpdmF0ZUZh
aXJQbGF5U3RyZWFtaW5nOjpjZW5jTmFtZSgpLCB7IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWlu
Zzo6c2FuaXRpemVDZW5jLCBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJ
RHNDZW5jIH0pOworI2VuZGlmCiB9CiAKIENETUZhY3RvcnlGYWlyUGxheVN0cmVhbWluZyYgQ0RN
RmFjdG9yeUZhaXJQbGF5U3RyZWFtaW5nOjpzaW5nbGV0b24oKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFt
aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RN
RmFpclBsYXlTdHJlYW1pbmcuaAppbmRleCAzY2Q2MTIzYTYzZTg1ZjkxOTk1NzBmZjQwOTc1NzBm
N2Q4YzgwZTU3Li5jYjVhYTAyM2I4ZWMwNWVjYmI0OGUxZWQxOWM3M2NkYzVkMjRkNzVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RN
RmFpclBsYXlTdHJlYW1pbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuaApAQCAtNzQsNiArNzQsMTAgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHNrZE5hbWUoKTsKICAgICBz
dGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+Pj4gZXh0cmFjdEtleUlEc1Nr
ZChjb25zdCBTaGFyZWRCdWZmZXImKTsKICAgICBzdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
c2FuaXRpemVTa2QoY29uc3QgU2hhcmVkQnVmZmVyJik7CisKKyAgICBzdGF0aWMgY29uc3QgQXRv
bWljU3RyaW5nJiBjZW5jTmFtZSgpOworICAgIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmPFNo
YXJlZEJ1ZmZlcj4+PiBleHRyYWN0S2V5SURzQ2VuYyhjb25zdCBTaGFyZWRCdWZmZXImKTsKKyAg
ICBzdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2FuaXRpemVDZW5jKGNvbnN0IFNoYXJlZEJ1
ZmZlciYpOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL0lTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSVNPRmFpclBsYXlTdHJl
YW1pbmdQc3NoQm94LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMzNiNzFiMWRjNjZiN2JkYzY1ODI0ODJkODRl
NGNjNTlhZmE1NTYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL0lTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5jcHAKQEAg
LTAsMCArMSwyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94LmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9EYXRhVmlldy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IFZlY3Rvcjx1
aW50OF90PiYgSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94OjpmYWlyUGxheVN5c3RlbUlEKCkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPHVpbnQ4X3Q+PiBzeXN0ZW1JRCA9
IFZlY3Rvcjx1aW50OF90Pih7IDB4OTQsIDB4Q0UsIDB4ODYsIDB4RkIsIDB4MDcsIDB4RkYsIDB4
NEYsIDB4NDMsIDB4QUQsIDB4QjgsIDB4OTMsIDB4RDIsIDB4RkEsIDB4OTYsIDB4OEMsIDB4QTIg
fSk7CisgICAgcmV0dXJuIHN5c3RlbUlEOworfQorCitib29sIElTT0ZhaXJQbGF5U3RyZWFtaW5n
SW5mb0JveDo6cGFyc2UoSlNDOjpEYXRhVmlldyYgdmlldywgdW5zaWduZWQmIG9mZnNldCkKK3sK
KyAgICBpZiAoIUlTT0Z1bGxCb3g6OnBhcnNlKHZpZXcsIG9mZnNldCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBjaGVja2VkUmVhZDx1aW50MzJfdD4obV9zY2hlbWUsIHZp
ZXcsIG9mZnNldCwgQmlnRW5kaWFuKTsKK30KKworYm9vbCBJU09GYWlyUGxheVN0cmVhbWluZ0tl
eVJlcXVlc3RJbmZvQm94OjpwYXJzZShKU0M6OkRhdGFWaWV3JiB2aWV3LCB1bnNpZ25lZCYgb2Zm
c2V0KQoreworICAgIHVuc2lnbmVkIGxvY2FsT2Zmc2V0ID0gb2Zmc2V0OworICAgIGlmICghSVNP
Qm94OjpwYXJzZSh2aWV3LCBsb2NhbE9mZnNldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChtX3NpemUgLSAobG9jYWxPZmZzZXQgLSBvZmZzZXQpIDwgMTYpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gYnVmZmVyID0gdmlldy5wb3NzaWJseVNoYXJlZEJ1ZmZl
cigpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IGtleUlEID0gYnVmZmVyLT5zbGljZShsb2NhbE9mZnNldCwgbG9jYWxPZmZzZXQgKyAxNik7Cisg
ICAgbG9jYWxPZmZzZXQgKz0gMTY7CisKKyAgICBtX2tleUlELnJlc2l6ZSgxNik7CisgICAgbWVt
Y3B5KG1fa2V5SUQuZGF0YSgpLCBrZXlJRC0+ZGF0YSgpLCAxNik7CisKKyAgICBvZmZzZXQgPSBs
b2NhbE9mZnNldDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJU09GYWlyUGxheVN0cmVh
bWluZ0tleUFzc2V0SWRCb3g6OnBhcnNlKEpTQzo6RGF0YVZpZXcmIHZpZXcsIHVuc2lnbmVkJiBv
ZmZzZXQpCit7CisgICAgdW5zaWduZWQgbG9jYWxPZmZzZXQgPSBvZmZzZXQ7CisgICAgaWYgKCFJ
U09Cb3g6OnBhcnNlKHZpZXcsIGxvY2FsT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGxvY2FsT2Zmc2V0IC0gb2Zmc2V0ID09IG1fc2l6ZSkgeworICAgICAgICBtX2Rh
dGEuY2xlYXIoKTsKKyAgICAgICAgb2Zmc2V0ID0gbG9jYWxPZmZzZXQ7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGF1dG8gYnVmZmVyID0gdmlldy5wb3NzaWJseVNoYXJlZEJ1
ZmZlcigpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
aXplX3QgZGF0YVNpemUgPSBtX3NpemUgLSAobG9jYWxPZmZzZXQgLSBvZmZzZXQpOworICAgIGF1
dG8gcGFyc2VkRGF0YSA9IGJ1ZmZlci0+c2xpY2UobG9jYWxPZmZzZXQsIGxvY2FsT2Zmc2V0ICsg
ZGF0YVNpemUpOworICAgIGxvY2FsT2Zmc2V0ICs9IGRhdGFTaXplOworCisgICAgbV9kYXRhLnJl
c2l6ZShkYXRhU2l6ZSk7CisgICAgbWVtY3B5KG1fZGF0YS5kYXRhKCksIHBhcnNlZERhdGEtPmRh
dGEoKSwgZGF0YVNpemUpOworICAgIG9mZnNldCA9IGxvY2FsT2Zmc2V0OworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5Q29udGV4dEJveDo6cGFyc2Uo
SlNDOjpEYXRhVmlldyYgdmlldywgdW5zaWduZWQmIG9mZnNldCkKK3sKKyAgICB1bnNpZ25lZCBs
b2NhbE9mZnNldCA9IG9mZnNldDsKKyAgICBpZiAoIUlTT0JveDo6cGFyc2UodmlldywgbG9jYWxP
ZmZzZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobG9jYWxPZmZzZXQgLSBv
ZmZzZXQgPT0gbV9zaXplKSB7CisgICAgICAgIG1fZGF0YS5jbGVhcigpOworICAgICAgICBvZmZz
ZXQgPSBsb2NhbE9mZnNldDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYXV0
byBidWZmZXIgPSB2aWV3LnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CisgICAgaWYgKCFidWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNpemVfdCBkYXRhU2l6ZSA9IG1fc2l6ZSAt
IChsb2NhbE9mZnNldCAtIG9mZnNldCk7CisgICAgYXV0byBwYXJzZWREYXRhID0gYnVmZmVyLT5z
bGljZShsb2NhbE9mZnNldCwgbG9jYWxPZmZzZXQgKyBkYXRhU2l6ZSk7CisgICAgbG9jYWxPZmZz
ZXQgKz0gZGF0YVNpemU7CisKKyAgICBtX2RhdGEucmVzaXplKGRhdGFTaXplKTsKKyAgICBtZW1j
cHkobV9kYXRhLmRhdGEoKSwgcGFyc2VkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgb2Zm
c2V0ID0gbG9jYWxPZmZzZXQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSVNPRmFpclBs
YXlTdHJlYW1pbmdLZXlWZXJzaW9uTGlzdEJveDo6cGFyc2UoSlNDOjpEYXRhVmlldyYgdmlldywg
dW5zaWduZWQmIG9mZnNldCkKK3sKKyAgICB1bnNpZ25lZCBsb2NhbE9mZnNldCA9IG9mZnNldDsK
KyAgICBpZiAoIUlTT0JveDo6cGFyc2UodmlldywgbG9jYWxPZmZzZXQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICB3aGlsZSAobG9jYWxPZmZzZXQgLSBvZmZzZXQgIT0gbV9zaXplKSB7
CisgICAgICAgIHVpbnQzMl90IHZlcnNpb247CisgICAgICAgIGlmICghY2hlY2tlZFJlYWQ8dWlu
dDMyX3Q+KHZlcnNpb24sIHZpZXcsIGxvY2FsT2Zmc2V0LCBCaWdFbmRpYW4pKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX3ZlcnNpb25zLmFwcGVuZCh2ZXJzaW9uKTsKKyAg
ICB9CisKKyAgICBvZmZzZXQgPSBsb2NhbE9mZnNldDsKKyAgICByZXR1cm4gdHJ1ZTsgCit9CisK
K2Jvb2wgSVNPRmFpclBsYXlTdHJlYW1pbmdLZXlSZXF1ZXN0Qm94OjpwYXJzZShKU0M6OkRhdGFW
aWV3JiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQoreworICAgIHVuc2lnbmVkIGxvY2FsT2Zmc2V0
ID0gb2Zmc2V0OworICAgIGlmICghSVNPQm94OjpwYXJzZSh2aWV3LCBsb2NhbE9mZnNldCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9yZXF1ZXN0SW5mby5yZWFkKHZpZXcs
IGxvY2FsT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgd2hpbGUgKGxvY2Fs
T2Zmc2V0IC0gb2Zmc2V0IDwgbV9zaXplKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gcGVla0Jv
eCh2aWV3LCBsb2NhbE9mZnNldCk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gbmFtZSA9IHJlc3VsdC52YWx1ZSgpLmZpcnN0
OworICAgICAgICBpZiAobmFtZSA9PSBJU09GYWlyUGxheVN0cmVhbWluZ0tleUFzc2V0SWRCb3g6
OmJveFR5cGVOYW1lKCkpIHsKKyAgICAgICAgICAgIGlmIChtX2Fzc2V0SUQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBJU09GYWlyUGxheVN0cmVhbWluZ0tl
eUFzc2V0SWRCb3ggYXNzZXRJRDsKKyAgICAgICAgICAgIGlmICghYXNzZXRJRC5yZWFkKHZpZXcs
IGxvY2FsT2Zmc2V0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgIG1fYXNzZXRJRCA9IFdURk1vdmUoYXNzZXRJRCk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChuYW1lID09IElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5
Q29udGV4dEJveDo6Ym94VHlwZU5hbWUoKSkgeworICAgICAgICAgICAgaWYgKG1fY29udGV4dCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIElTT0ZhaXJQbGF5
U3RyZWFtaW5nS2V5Q29udGV4dEJveCBjb250ZXh0OworICAgICAgICAgICAgaWYgKCFjb250ZXh0
LnJlYWQodmlldywgbG9jYWxPZmZzZXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAgICAgbV9jb250ZXh0ID0gV1RGTW92ZShjb250ZXh0KTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5hbWUgPT0gSVNPRmFpclBsYXlT
dHJlYW1pbmdLZXlWZXJzaW9uTGlzdEJveDo6Ym94VHlwZU5hbWUoKSkgeworICAgICAgICAgICAg
aWYgKG1fdmVyc2lvbkxpc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICBJU09GYWlyUGxheVN0cmVhbWluZ0tleVZlcnNpb25MaXN0Qm94IHZlcnNpb25MaXN0
OworICAgICAgICAgICAgaWYgKCF2ZXJzaW9uTGlzdC5yZWFkKHZpZXcsIGxvY2FsT2Zmc2V0KSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIG1fdmVyc2lvbkxp
c3QgPSBXVEZNb3ZlKHZlcnNpb25MaXN0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gVW5rbm93biBib3ggdHlwZTsgZXJyb3IuCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9ICAgCisgICAgCisgICAgb2Zmc2V0ID0gbG9jYWxPZmZzZXQ7CisgICAg
cmV0dXJuIHRydWU7IAorfQorCitib29sIElTT0ZhaXJQbGF5U3RyZWFtaW5nSW5pdERhdGFCb3g6
OnBhcnNlKEpTQzo6RGF0YVZpZXcmIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCit7CisgICAgdW5z
aWduZWQgbG9jYWxPZmZzZXQgPSBvZmZzZXQ7CisgICAgaWYgKCFJU09Cb3g6OnBhcnNlKHZpZXcs
IGxvY2FsT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2luZm8u
cmVhZCh2aWV3LCBsb2NhbE9mZnNldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHdo
aWxlIChsb2NhbE9mZnNldCAtIG9mZnNldCA8IG1fc2l6ZSkgeworICAgICAgICBJU09GYWlyUGxh
eVN0cmVhbWluZ0tleVJlcXVlc3RCb3ggcmVxdWVzdDsKKyAgICAgICAgaWYgKCFyZXF1ZXN0LnJl
YWQodmlldywgbG9jYWxPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIG1fcmVxdWVzdHMuYXBwZW5kKFdURk1vdmUocmVxdWVzdCkpOworICAgIH0KKworICAgIG9m
ZnNldCA9IGxvY2FsT2Zmc2V0OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElTT0ZhaXJQ
bGF5U3RyZWFtaW5nUHNzaEJveDo6cGFyc2UoSlNDOjpEYXRhVmlldyYgdmlldywgdW5zaWduZWQm
IG9mZnNldCkKK3sKKyAgICBpZiAoIUlTT1Byb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRlckJv
eDo6cGFyc2Uodmlldywgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
QmFjayB1cCB0aGUgb2Zmc2V0IGJ5IGV4YWN0bHkgdGhlIHNpemUgb2YgbV9kYXRhOgorICAgIG9m
ZnNldCAtPSBtX2RhdGEuc2l6ZSgpOworCisgICAgcmV0dXJuIG1faW5pdERhdGFCb3gucmVhZCh2
aWV3LCBvZmZzZXQpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSVNPRmFpclBsYXlT
dHJlYW1pbmdQc3NoQm94LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2E0ZWVlNzEwZDlhOTNhOTE2OWM3OTMzODA4
NDg0Y2EzODY4MjFlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JU09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3guaApAQCAt
MCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSVNP
UHJvdGVjdGlvblN5c3RlbVNwZWNpZmljSGVhZGVyQm94LmgiCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSVNP
RmFpclBsYXlTdHJlYW1pbmdJbmZvQm94IDogcHVibGljIElTT0Z1bGxCb3ggeworcHVibGljOgor
ICAgIHN0YXRpYyBGb3VyQ0MgYm94VHlwZU5hbWUoKSB7IHJldHVybiAiZnBzaSI7IH0KKworICAg
IEZvdXJDQyBzY2hlbWUoKSBjb25zdCB7IHJldHVybiBtX3NjaGVtZTsgfQorCitwcml2YXRlOgor
ICAgIGJvb2wgcGFyc2UoSlNDOjpEYXRhVmlldyYsIHVuc2lnbmVkJiBvZmZzZXQpIG92ZXJyaWRl
OworCisgICAgRm91ckNDIG1fc2NoZW1lOworfTsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSVNP
RmFpclBsYXlTdHJlYW1pbmdLZXlSZXF1ZXN0SW5mb0JveCA6IHB1YmxpYyBJU09Cb3ggeworcHVi
bGljOgorICAgIHN0YXRpYyBGb3VyQ0MgYm94VHlwZU5hbWUoKSB7IHJldHVybiAiZmtyaSI7IH0K
KworICAgIHVzaW5nIEtleUlEID0gVmVjdG9yPHVpbnQ4X3QsIDE2PjsKKyAgICBjb25zdCBLZXlJ
RCYga2V5SUQoKSBjb25zdCB7IHJldHVybiBtX2tleUlEOyB9CisKK3ByaXZhdGU6CisgICAgYm9v
bCBwYXJzZShKU0M6OkRhdGFWaWV3JiwgdW5zaWduZWQmIG9mZnNldCkgb3ZlcnJpZGU7CisKKyAg
ICBLZXlJRCBtX2tleUlEOworfTsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSVNPRmFpclBsYXlT
dHJlYW1pbmdLZXlBc3NldElkQm94IDogcHVibGljIElTT0JveCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIEZvdXJDQyBib3hUeXBlTmFtZSgpIHsgcmV0dXJuICJma2FpIjsgfQorICAgIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKK3ByaXZhdGU6
CisgICAgYm9vbCBwYXJzZShKU0M6OkRhdGFWaWV3JiwgdW5zaWduZWQmIG9mZnNldCkgb3ZlcnJp
ZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gbV9kYXRhOworfTsKKworY2xhc3MgV0VCQ09SRV9F
WFBPUlQgSVNPRmFpclBsYXlTdHJlYW1pbmdLZXlDb250ZXh0Qm94IDogcHVibGljIElTT0JveCB7
CitwdWJsaWM6CisgICAgc3RhdGljIEZvdXJDQyBib3hUeXBlTmFtZSgpIHsgcmV0dXJuICJma2N4
IjsgfQorICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBwYXJzZShKU0M6OkRhdGFWaWV3JiwgdW5zaWdu
ZWQmIG9mZnNldCkgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gbV9kYXRhOworfTsK
KworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSVNPRmFpclBsYXlTdHJlYW1pbmdLZXlWZXJzaW9uTGlz
dEJveCA6IHB1YmxpYyBJU09Cb3ggeworcHVibGljOgorICAgIHN0YXRpYyBGb3VyQ0MgYm94VHlw
ZU5hbWUoKSB7IHJldHVybiAiZmt2bCI7IH0KKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4gdmVy
c2lvbnMoKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb25zOyB9CisKK3ByaXZhdGU6CisgICAgYm9v
bCBwYXJzZShKU0M6OkRhdGFWaWV3JiwgdW5zaWduZWQmIG9mZnNldCkgb3ZlcnJpZGU7CisKKyAg
ICBWZWN0b3I8dWludDhfdD4gbV92ZXJzaW9uczsKK307CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JU
IElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5UmVxdWVzdEJveCA6IHB1YmxpYyBJU09Cb3ggeworcHVi
bGljOgorICAgIHN0YXRpYyBGb3VyQ0MgYm94VHlwZU5hbWUoKSB7IHJldHVybiAiZnBzayI7IH0K
KworICAgIGNvbnN0IElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5UmVxdWVzdEluZm9Cb3gmIHJlcXVl
c3RJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0SW5mbzsgfQorICAgIGNvbnN0IE9wdGlv
bmFsPElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5QXNzZXRJZEJveD4mIGFzc2V0SUQoKSBjb25zdCB7
IHJldHVybiBtX2Fzc2V0SUQ7IH0KKyAgICBjb25zdCBPcHRpb25hbDxJU09GYWlyUGxheVN0cmVh
bWluZ0tleUNvbnRleHRCb3g+JiBjb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9
CisgICAgY29uc3QgT3B0aW9uYWw8SVNPRmFpclBsYXlTdHJlYW1pbmdLZXlWZXJzaW9uTGlzdEJv
eD4mIHZlcnNpb25MaXN0KCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9uTGlzdDsgfQorCitwcml2
YXRlOgorICAgIGJvb2wgcGFyc2UoSlNDOjpEYXRhVmlldyYsIHVuc2lnbmVkJiBvZmZzZXQpIG92
ZXJyaWRlOworCisgICAgSVNPRmFpclBsYXlTdHJlYW1pbmdLZXlSZXF1ZXN0SW5mb0JveCBtX3Jl
cXVlc3RJbmZvOworICAgIE9wdGlvbmFsPElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5QXNzZXRJZEJv
eD4gbV9hc3NldElEOworICAgIE9wdGlvbmFsPElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5Q29udGV4
dEJveD4gbV9jb250ZXh0OworICAgIE9wdGlvbmFsPElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5VmVy
c2lvbkxpc3RCb3g+IG1fdmVyc2lvbkxpc3Q7Cit9OworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJ
U09GYWlyUGxheVN0cmVhbWluZ0luaXREYXRhQm94IDogcHVibGljIElTT0JveCB7CitwdWJsaWM6
CisgICAgc3RhdGljIEZvdXJDQyBib3hUeXBlTmFtZSgpIHsgcmV0dXJuICJmcHMgIjsgfQorCisg
ICAgY29uc3QgSVNPRmFpclBsYXlTdHJlYW1pbmdJbmZvQm94JiBpbmZvKCkgY29uc3QgeyByZXR1
cm4gbV9pbmZvOyB9CisgICAgY29uc3QgVmVjdG9yPElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5UmVx
dWVzdEJveD4mIHJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0czsgfQorCitwcml2
YXRlOgorICAgIGJvb2wgcGFyc2UoSlNDOjpEYXRhVmlldyYsIHVuc2lnbmVkJiBvZmZzZXQpIG92
ZXJyaWRlOworCisgICAgSVNPRmFpclBsYXlTdHJlYW1pbmdJbmZvQm94IG1faW5mbzsKKyAgICBW
ZWN0b3I8SVNPRmFpclBsYXlTdHJlYW1pbmdLZXlSZXF1ZXN0Qm94PiBtX3JlcXVlc3RzOworfTsK
KworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94IDogcHVi
bGljIElTT1Byb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRlckJveCB7CitwdWJsaWM6CisgICAg
c3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZmFpclBsYXlTeXN0ZW1JRCgpOworCisgICAg
Y29uc3QgSVNPRmFpclBsYXlTdHJlYW1pbmdJbml0RGF0YUJveCYgaW5pdERhdGFCb3goKSB7IHJl
dHVybiBtX2luaXREYXRhQm94OyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBwYXJzZShKU0M6OkRh
dGFWaWV3JiwgdW5zaWduZWQmIG9mZnNldCkgb3ZlcnJpZGU7CisKKyAgICBJU09GYWlyUGxheVN0
cmVhbWluZ0luaXREYXRhQm94IG1faW5pdERhdGFCb3g7Cit9OworCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUHJv
dmlkZXJDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3
ZWJydGMvTGliV2ViUlRDUHJvdmlkZXJDb2NvYS5jcHAKaW5kZXggZTc4NGMzNTViYTA0YTFlYjMz
NjBiNzc4ZmE5MzM2NDdiYTY4MTY4MC4uZDkzMDg1ZmFmNjcwOTdmYWZhNjZjYmI4MGZkN2MzOTZi
YzQ5NzkzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlckNvY29hLmNw
cApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHdlYnJ0Yy9tZWRpYS9lbmdpbmUvd2VicnRj
dmlkZW9kZWNvZGVyZmFjdG9yeS5oPgogI2luY2x1ZGUgPHdlYnJ0Yy9tZWRpYS9lbmdpbmUvd2Vi
cnRjdmlkZW9lbmNvZGVyZmFjdG9yeS5oPgogI2luY2x1ZGUgPHdlYnJ0Yy9zZGsvV2ViS2l0L1dl
YktpdFV0aWxpdGllcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8
d3RmL2Rhcndpbi9XZWFrTGlua2luZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGJiZTYwYWFkOWQ4
NGQ4NDMxZWIwN2NiNGU0ZjMxYjYzYWU3NTgzOS4uZDUxN2RmN2U0YmQ1MWVmYmY5NGVjNWVkNmNk
YzU5Njg3ZGUyMGQ4MCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5LTA0LTE4ICBKZXIgTm9ibGUgIDxqZXIubm9i
bGVAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBwYXJzaW5nIEZhaXJQbGF5
U3RyZWFtaW5nIFBTU0ggYm94ZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTcwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTktMDQtMTcgIFRpbSBIb3J0b24g
IDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPUyBTaW0gRGVidWddIFJF
R1JFU1NJT04gKHIyNDQxNTEpIFRlc3RXZWJLaXRBUEkuV2ViS2l0Lk92ZXJyaWRlVmlld3BvcnRB
cmd1bWVudHMgaXMgZmFpbGluZyAoMTk3MDI4KQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvSVNPQm94LmNwcAppbmRleCAyNjVhYTU2NWNmMGMwNTg4MTJhN2ZmYjk3MGZmZTM0
YmEzZGFiM2I3Li4wOTk4NzY0YjAwM2EzNzk2ZTlkZGQ5MTQ4ZjY5YTM0MjFlNTg4YWVjIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNwcApAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaW5jbHVkZSAiVGVzdC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Rh
dGFWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JU09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3gu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0lTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9JU09TY2hlbWVJbmZvcm1hdGlvbkJveC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSVNPU2NoZW1lVHlwZUJveC5oPgpAQCAtNzMsNCArNzQsMzkgQEAgVEVTVChJU09Cb3gsIElT
T1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94KQogICAgIEFTU0VSVF9FUShkZWZhdWx0SVYsIHRyYWNr
RW5jcnlwdGlvbkJveC0+ZGVmYXVsdENvbnN0YW50SVYoKSk7CiB9CiAKK3N0YXRpYyBjb25zdCBj
aGFyKiBiYXNlNjRFbmNvZGVkUHNzaFdpdGhBc3NldElkID0gIkFBQUFxSEJ6YzJnQUFBQUFsTTZH
K3dmL1QwT3R1SlBTK3BhTW9nQUFBSWdBQUFDSVpuQnpaQUFBQUJCbWNITnBBQUFBQUdObGJtTUFB
QUE0Wm5CemF3QUFBQmhtYTNKcEFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFCaG1hMkZwQUFBQUFB
QUFBQUFBQUFBQUFBQUE4UUFBQURobWNITnJBQUFBR0dacmNta0FBQUFBQUFBQUFBQUFBQUFBQUFB
Q0FBQUFHR1pyWVdrQUFBQUFBQUFBQUFBQUFBQUFBQUR5IjsKKworVEVTVChJU09Cb3gsIElTT0Zh
aXJQbGF5U3RyZWFtaW5nUHNzaEJveCkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcHNzaEFycmF5
OworICAgIEFTU0VSVF9UUlVFKGJhc2U2NERlY29kZShTdHJpbmdWaWV3KGJhc2U2NEVuY29kZWRQ
c3NoV2l0aEFzc2V0SWQpLCBwc3NoQXJyYXkpKTsKKyAgICBBU1NFUlRfRVEoMTY4VUwsIHBzc2hB
cnJheS5zaXplKCkpOworCisgICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKEFy
cmF5QnVmZmVyOjpjcmVhdGUocHNzaEFycmF5LmRhdGEoKSwgcHNzaEFycmF5LnNpemUoKSksIDAs
IHBzc2hBcnJheS5zaXplKCkpOworCisgICAgSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94IHBz
c2hCb3g7CisKKyAgICBBU1NFUlRfVFJVRShwc3NoQm94LnJlYWQodmlldykpOworCisgICAgYXV0
byBpbmZvQm94ID0gcHNzaEJveC5pbml0RGF0YUJveCgpLmluZm8oKTsKKyAgICBBU1NFUlRfRVEo
Rm91ckNDKCdjZW5jJyksIGluZm9Cb3guc2NoZW1lKCkpOworCisgICAgYXV0byByZXF1ZXN0cyA9
IHBzc2hCb3guaW5pdERhdGFCb3goKS5yZXF1ZXN0cygpOworICAgIEFTU0VSVF9FUSgyVUwsIHJl
cXVlc3RzLnNpemUoKSk7CisKKyAgICBWZWN0b3I8dWludDhfdCwgMTY+IGV4cGVjdGVkRmlyc3RL
ZXlJRCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSB9
OworICAgIEFTU0VSVF9FUShyZXF1ZXN0c1swXS5yZXF1ZXN0SW5mbygpLmtleUlEKCksIGV4cGVj
dGVkRmlyc3RLZXlJRCk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gZXhwZWN0ZWRGaXJzdEFzc2V0
SUQgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4RjEg
fTsKKyAgICBBU1NFUlRfVFJVRShyZXF1ZXN0c1swXS5hc3NldElEKCkpOworICAgIEFTU0VSVF9F
UShyZXF1ZXN0c1swXS5hc3NldElEKCkudmFsdWUoKS5kYXRhKCksIGV4cGVjdGVkRmlyc3RBc3Nl
dElEKTsKKworICAgIFZlY3Rvcjx1aW50OF90LCAxNj4gZXhwZWN0ZWRTZWNvbmRLZXlJRCA9IHsg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiB9OworICAgIEFT
U0VSVF9FUShyZXF1ZXN0c1sxXS5yZXF1ZXN0SW5mbygpLmtleUlEKCksIGV4cGVjdGVkU2Vjb25k
S2V5SUQpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGV4cGVjdGVkU2Vjb25kQXNzZXRJRCA9IHsg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMHhGMiB9OworICAg
IEFTU0VSVF9UUlVFKHJlcXVlc3RzWzFdLmFzc2V0SUQoKSk7CisgICAgQVNTRVJUX0VRKHJlcXVl
c3RzWzFdLmFzc2V0SUQoKS52YWx1ZSgpLmRhdGEoKSwgZXhwZWN0ZWRTZWNvbmRBc3NldElEKTsK
K30KKwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367744</attachid>
            <date>2019-04-18 13:14:07 -0700</date>
            <delta_ts>2019-04-18 13:38:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197064-20190418131359.patch</filename>
            <type>text/plain</type>
            <size>32308</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0NDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGFlZmJhZjllYTU0ZWVmNzJmZWYyY2I2
MmZjZTY5MWM2N2NjNDViOTMuLjU4YjAxMzExZjJkYTY1ODczYjg4YTc0NWE1ZTFiYTdhZDZmODE1
MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTktMDQtMTggIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHBhcnNpbmcgRmFpclBsYXlT
dHJlYW1pbmcgUFNTSCBib3hlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTktMDQtMTYgIEplciBOb2JsZSAg
PGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIEhBVkVfQVZGT1VOREFUSU9O
X1ZJREVPX09VVFBVVCBvbiBQTEFURk9STShJT1NNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU1OGIyYzMy
MzU5MTIwYjI5MmJlYWYzMzhiZGNjODc1Y2UxM2I2NC4uM2VlOWMxZTc0YmIzYmFkYThmYzhhYjE5
ZTc2MmFkZTExOTdkNmY5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE5LTA0LTE4
ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0
IGZvciBwYXJzaW5nIEZhaXJQbGF5U3RyZWFtaW5nIFBTU0ggYm94ZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcwNjQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBUEkgVGVzdHM6IElTTy5JU09GYWly
UGxheVN0cmVhbWluZ1Bzc2hCb3gKKworICAgICAgICBBZGQgYSBuZXcgc2V0IG9mIElTT0JveCBj
bGFzc2VzIGZvciBwYXJzaW5nIHRoZSBjb250ZW50cyBvZiBhIEZhaXJQbGF5U3RyZWFtaW5nIFBT
U0ggYm94LAorICAgICAgICBhbmQgYWRkIHN1cHBvcnQgZm9yIHRoaXMgbmV3IGJveCB0byBDRE1G
YWlyUGxheVN0cmVhbWluZy4KKworICAgICAgICBEcml2ZS1ieSBmaXg6IGFkZCBhbiBleHBsaWNp
dCBpbmNsdWRlIGZvciBNYWluVGhyZWFkLmggdG8gTGliV2ViUlRDUHJvdmlkZXJDb2NvYS5jcHAu
CisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb3VyQ0Mu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlT
dHJlYW1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFt
aW5nOjpjZW5jTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpmYWlyUGxheVN5c3RlbUlEKToKKyAg
ICAgICAgKFdlYkNvcmU6OmV4dHJhY3RTY2hlbWVBbmRLZXlJZEZyb21DZW5jKToKKyAgICAgICAg
KFdlYkNvcmU6OkNETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc0NlbmMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzYW5pdGl6
ZUNlbmMpOgorICAgICAgICAoV2ViQ29yZTo6dmFsaWRJbml0RGF0YVR5cGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNETUZhY3Rvcnk6OnBsYXRmb3JtUmVnaXN0ZXJGYWN0b3JpZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JU09GYWlyUGxheVN0
cmVhbWluZ1Bzc2hCb3guY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklTT0ZhaXJQbGF5
U3RyZWFtaW5nUHNzaEJveDo6ZmFpclBsYXlTeXN0ZW1JRCk6CisgICAgICAgIChXZWJDb3JlOjpJ
U09GYWlyUGxheVN0cmVhbWluZ0luZm9Cb3g6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OklT
T0ZhaXJQbGF5U3RyZWFtaW5nS2V5UmVxdWVzdEluZm9Cb3g6OnBhcnNlKToKKyAgICAgICAgKFdl
YkNvcmU6OklTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5QXNzZXRJZEJveDo6cGFyc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SVNPRmFpclBsYXlTdHJlYW1pbmdLZXlDb250ZXh0Qm94OjpwYXJzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJU09GYWlyUGxheVN0cmVhbWluZ0tleVZlcnNpb25MaXN0Qm94Ojpw
YXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpJU09GYWlyUGxheVN0cmVhbWluZ0tleVJlcXVlc3RC
b3g6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OklTT0ZhaXJQbGF5U3RyZWFtaW5nSW5pdERh
dGFCb3g6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OklTT0ZhaXJQbGF5U3RyZWFtaW5nUHNz
aEJveDo6cGFyc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9J
U09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3guaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyQ29jb2EuY3BwOgorCiAyMDE5
LTA0LTE3ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFj
dG9yaW5nOiBQdWxsIGFsbCBmdWxsc2NyZWVuIGNvZGUgb3V0IG9mIERvY3VtZW50IGFuZCBpbnRv
IGl0cyBvd24gaGVscGVyIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCBjYmNmZjk1MjAxMWE2ZWU0NDZi
MGZlNzE0OWZjNDQ2MDUzYTJkZDNlLi4wNjE0N2FjODFlOTg3MDYxYjE3ZjczYzdlNjE5NmZhY2Zl
YTRmZGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTE1MTcsNiArMTUxNyw3IEBACiAKICNpZiAoUExBVEZP
Uk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTUwMCkgfHwg
KFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTMw
MDAwKSB8fCAoUExBVEZPUk0oV0FUQ0hPUykgJiYgX19XQVRDSF9PU19WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSA2MDAwMCkgfHwgKFBMQVRGT1JNKEFQUExFVFYpICYmIF9fVFZfT1NfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTMwMDAwKQogI2RlZmluZSBIQVZFX0FMTE9XU19TRU5TSVRJVkVfTE9H
R0lORyAxCisjZGVmaW5lIEhBVkVfRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19JTklUREFUQSAxCiAj
ZW5kaWYKIAogI2lmIChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEzMDAwMCkgfHwgKFBMQVRGT1JNKFdBVENIT1MpICYmIF9fV0FUQ0hfT1NfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gNjAwMDApIHx8IChQTEFURk9STShBUFBMRVRWKSAmJiBfX1RW
X09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CmluZGV4IDQ5NmJiNGJhOGE0NjI2Y2NkYjVjNjMyMTAxNWQ3Y2NlMmViNzBiYmEuLmVmYTdkZjIz
ODJjOWYwMzJkODg2OTdhODJlMTZjY2NlMzQ2Njk5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dApAQCAtMjI1LDYgKzIyNSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9DRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tIEBuby11bmlmeQogcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0
ZUFWRi5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAgQG5vLXVuaWZ5CitwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWJhY2tUYXJnZXRNYWMubW0gQG5vLXVuaWZ5CiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
LmNwcCBAbm8tdW5pZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVNlbGVj
dGlvbkdyb3VwQVZGT2JqQy5tbSBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwYmEyMTBjODY5MmExZTQ4ZTU3M2Uw
NWVjZDhlYWNjYThmOWIzNmM5Li5iNmYwNTIzMmQ4ZGY0NTg1MTMxYjBkNDk1M2IyM2E0NmY5YzE1
ZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC00MDQ2LDYgKzQwNDYsNyBAQAogCQlDRDYyRkI5NjFBRjAxOEU3MDAxMkVEN0Qg
LyogR2VuZXJpY1Rhc2tRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0Q2MkZCOTQxQUYwMThFNzAwMTJFRDdEIC8qIEdlbmVyaWNUYXNrUXVldWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRDY0
MUVCMzE4MThGNUVEMDBFRTRDNDEgLyogTWVkaWFTb3VyY2VQcml2YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDY0MUVCMTE4MThGNUVEMDBFRTRD
NDEgLyogTWVkaWFTb3VyY2VQcml2YXRlLmggKi87IH07CiAJCUNENjQxRUI0MTgxOEY1RUQwMEVF
NEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291cmNlQnVm
ZmVyUHJpdmF0ZS5oICovOyB9OworCQlDRDcyMEI0RjIyNjhCNTEzMDAwNDdGREUgLyogSVNPRmFp
clBsYXlTdHJlYW1pbmdQc3NoQm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRDcyMEI0OTIyNjgyQzdGMDAwNDdGREUgLyogSVNPRmFpclBsYXlTdHJl
YW1pbmdQc3NoQm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQ0Q3RDMzNDQxQzdBMTIzRjAwMDQxMjkzIC8qIFBpeGVsQnVmZmVyQ29uZm9ybWVy
Q1YuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEN0Qz
MzQyMUM3QTEyM0YwMDA0MTI5MyAvKiBQaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmggKi87IH07CiAJ
CUNEN0QzMzQ4MUM3QTE2QkYwMDA0MTI5MyAvKiBDb3JlVmlkZW9Tb2Z0TGluay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3RDMzNDYxQzdBMTZCRjAw
MDQxMjkzIC8qIENvcmVWaWRlb1NvZnRMaW5rLmggKi87IH07CiAJCUNEN0RCQjI5MThDQTE5QzYw
MEMxMTA2NiAvKiBDU1NHcmlkTGluZU5hbWVzVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEN0RCQjI3MThDQTExRkYwMEMxMTA2NiAvKiBDU1NH
cmlkTGluZU5hbWVzVmFsdWUuaCAqLzsgfTsKQEAgLTEzNTAxLDYgKzEzNTAyLDggQEAKIAkJQ0Q2
NDFFQjExODE4RjVFRDAwRUU0QzQxIC8qIE1lZGlhU291cmNlUHJpdmF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVNvdXJjZVByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZl
clByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQnVmZmVy
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDY0MUVDNzE4MUVENjAx
MDBFRTRDNDEgLyogTWVkaWFTYW1wbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTYW1wbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q3MjBCNDcyMjY4MkM3RTAwMDQ3RkRFIC8q
IElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJU09G
YWlyUGxheVN0cmVhbWluZ1Bzc2hCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDRDcyMEI0OTIyNjgyQzdGMDAwNDdGREUgLyogSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDRDc4QTJFQzFGNzU2NDg2MDBERTM3MUIgLyogQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBDRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q3OEEyRUUxRjc1NjQ4NjAwREUzNzFCIC8q
IENETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEN0QzMzQxMUM3QTEyM0YwMDA0MTI5MyAvKiBQ
aXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTU4NzgsNiArMTU4ODEsOCBAQAogCQkJCTA3RTlFMTJEMThGNUUyNzYwMDExQTNB
NCAvKiBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVBVkYuaCAqLywKIAkJCQkwN0I0NDJE
NDE2NkM3MEIwMDA1NTZDQUQgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAgKi8sCiAJ
CQkJMDdCNDQyRDUxNjZDNzBCMDAwNTU2Q0FEIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYu
aCAqLywKKwkJCQlDRDcyMEI0NzIyNjgyQzdFMDAwNDdGREUgLyogSVNPRmFpclBsYXlTdHJlYW1p
bmdQc3NoQm94LmNwcCAqLywKKwkJCQlDRDcyMEI0OTIyNjgyQzdGMDAwNDdGREUgLyogSVNPRmFp
clBsYXlTdHJlYW1pbmdQc3NoQm94LmggKi8sCiAJCQkJMDcxRTQ5NkYxQUQ1QUI1RTAwOEE1MEI0
IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRNYWMuaCAqLywKIAkJCQkwNzFFNDk2RDFBRDVBQTBEMDA4
QTUwQjQgLyogTWVkaWFQbGF5YmFja1RhcmdldE1hYy5tbSAqLywKIAkJCQkwNzZGMEQwOTEyQjgx
OTI3MDBDMjZBQTQgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcCAqLywKQEAg
LTI5NDY4LDYgKzI5NDczLDcgQEAKIAkJCQkyRDBCNEFBQjE4REExQ0NEMDA0MzRERTEgLyogSU9T
dXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzIxRTU3RDE4M0VEMUZGMDAxQzI4OUQgLyog
SU9TdXJmYWNlUG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1RkY0OTkyMTYyRTJCRTAwNEJE
ODZGIC8qIElTT0JveC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0Q3MjBCNEYyMjY4QjUxMzAwMDQ3
RkRFIC8qIElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0Q1RkY0OUUyMTYyRTRFODAwNEJEODZGIC8qIElTT09yaWdpbmFsRm9ybWF0Qm94LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRDVGRjQ5RDIxNjJFNERCMDA0QkQ4NkYgLyogSVNPUHJvdGVjdGlvblNj
aGVtZUluZm9Cb3guaCBpbiBIZWFkZXJzICovLAogCQkJCUNENUZGNDlDMjE2MkU0Q0YwMDRCRDg2
RiAvKiBJU09Qcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXJCb3guaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm91ckNDLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb3VyQ0MuaAppbmRleCBiYWIwOGNm
Yzk2ZDJiNGZlMDk1N2IxMjlmZDM5NTYyN2Y1MjZkNDE5Li5iNWFkZjU5NWFjZTc5MjA0NGFlZWMz
NzNmMWJkNDY1MmY4MGNiYzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb3VyQ0MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b3VyQ0MuaApAQCAtMzAsNiArMzAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3Qg
Rm91ckNDIHsKKyAgICBGb3VyQ0MoKSA9IGRlZmF1bHQ7CiAgICAgRm91ckNDKHVpbnQzMl90IHZh
bHVlKSA6IHZhbHVlKHZhbHVlKSB7IH0KIAogICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CkBA
IC00NSw3ICs0Niw3IEBAIHN0cnVjdCBGb3VyQ0MgewogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb3VyQ0MmIG90aGVyKSBjb25zdCB7IHJldHVybiB2YWx1ZSA9PSBvdGhlci52YWx1ZTsgfQog
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb3VyQ0MmIG90aGVyKSBjb25zdCB7IHJldHVybiB2
YWx1ZSAhPSBvdGhlci52YWx1ZTsgfQogCi0gICAgdWludDMyX3QgdmFsdWU7CisgICAgdWludDMy
X3QgdmFsdWUgeyAwIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcAppbmRleCA3ZTZkNTlmOTdiMWI0NTEyNjQ0MjBiNGJkOTA5NTllN2NjMGFhMjY4
Li4zNTQ0MzA0MzRhNjZlYjVmNjZkNDJhOGIzNTI0OWI5N2NkYWQ2OTZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlT
dHJlYW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAiQ0RNUmVzdHJpY3Rp
b25zLmgiCiAjaW5jbHVkZSAiQ0RNU2Vzc2lvblR5cGUuaCIKKyNpbmNsdWRlICJJU09GYWlyUGxh
eVN0cmVhbWluZ1Bzc2hCb3guaCIKICNpbmNsdWRlICJJU09TY2hlbWVJbmZvcm1hdGlvbkJveC5o
IgogI2luY2x1ZGUgIklTT1NjaGVtZVR5cGVCb3guaCIKICNpbmNsdWRlICJJU09UcmFja0VuY3J5
cHRpb25Cb3guaCIKQEAgLTc0LDYgKzc1LDE4IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgQ0RNUHJp
dmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpza2ROYW1lKCkKICAgICByZXR1cm4gc2tkOwogfQogCitj
b25zdCBBdG9taWNTdHJpbmcmIENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6Y2VuY05hbWUo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNlbmMgeyBNQUtF
X1NUQVRJQ19TVFJJTkdfSU1QTCgiY2VuYyIpIH07CisgICAgcmV0dXJuIGNlbmM7Cit9CisKK3N0
YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4mIGZhaXJQbGF5U3lzdGVtSUQoKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8dWludDhfdD4+IHN5c3RlbUlEID0gVmVjdG9yPHVp
bnQ4X3Q+KHsgMHg5NCwgMHhDRSwgMHg4NiwgMHhGQiwgMHgwNywgMHhGRiwgMHg0RiwgMHg0Mywg
MHhBRCwgMHhCOCwgMHg5MywgMHhEMiwgMHhGQSwgMHg5NiwgMHg4QywgMHhBMiB9KTsKKyAgICBy
ZXR1cm4gc3lzdGVtSUQ7Cit9CisKIHN0YXRpYyBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+IGV4
dHJhY3RTaW5mRGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKIHsKICAgICAvLyBKU09O
IG9mIHRoZSBmb3JtYXQ6ICJ7IHNpbmY6IFsgPGJhc2U2NC1lbmNvZGVkLXN0cmluZz4gXSB9IgpA
QCAtMTcxLDYgKzE4NCw1NCBAQCBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBD
RE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTaQogICAgIHJldHVybiBr
ZXlJRHM7CiB9CiAKK3N0YXRpYyBTY2hlbWVBbmRLZXlSZXN1bHQgZXh0cmFjdFNjaGVtZUFuZEtl
eUlkRnJvbUNlbmMoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgU2NoZW1lQW5k
S2V5UmVzdWx0IHJlc3VsdDsKKyAgICBhdXRvIGFycmF5QnVmZmVyID0gYnVmZmVyLnRyeUNyZWF0
ZUFycmF5QnVmZmVyKCk7CisgICAgaWYgKCFhcnJheUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShXVEZNb3ZlKGFycmF5
QnVmZmVyKSwgMCwgYnVmZmVyLnNpemUoKSk7CisgICAgdW5zaWduZWQgb2Zmc2V0IHsgMCB9Owor
CisgICAgd2hpbGUgKG9mZnNldCA8IGJ1ZmZlci5zaXplKCkpIHsKKyAgICAgICAgYXV0byBwZWVr
UmVzdWx0ID0gSVNPQm94OjpwZWVrQm94KHZpZXcsIG9mZnNldCk7CisgICAgICAgIGlmICghcGVl
a1Jlc3VsdCB8fCBwZWVrUmVzdWx0LnZhbHVlKCkuZmlyc3QgIT0gSVNPUHJvdGVjdGlvblN5c3Rl
bVNwZWNpZmljSGVhZGVyQm94Ojpib3hUeXBlTmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgICAgICBJU09Qcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXJCb3ggcHNzaEJv
eDsKKyAgICAgICAgaWYgKCFwc3NoQm94LnJlYWQodmlldywgb2Zmc2V0KSkKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisKKyAgICAgICAgaWYgKHBzc2hCb3guc3lzdGVtSUQoKSAhPSBmYWlyUGxh
eVN5c3RlbUlEKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBJU09GYWlyUGxh
eVN0cmVhbWluZ1Bzc2hCb3ggZnBzUHNzaDsKKyAgICAgICAgb2Zmc2V0IC09IHBzc2hCb3guc2l6
ZSgpOworICAgICAgICBpZiAoIWZwc1Bzc2gucmVhZCh2aWV3LCBvZmZzZXQpKQorICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgICAgICBGb3VyQ0Mgc2NoZW1lID0gZnBzUHNzaC5pbml0RGF0
YUJveCgpLmluZm8oKS5zY2hlbWUoKTsKKyAgICAgICAgZm9yIChhdXRvIHJlcXVlc3QgOiBmcHNQ
c3NoLmluaXREYXRhQm94KCkucmVxdWVzdHMoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
c3RkOjptYWtlX3BhaXIoc2NoZW1lLCByZXF1ZXN0LnJlcXVlc3RJbmZvKCkua2V5SUQoKSkpOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09wdGlvbmFsPFZlY3RvcjxSZWY8U2hh
cmVkQnVmZmVyPj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc0Nl
bmMoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgVmVjdG9yPFJlZjxTaGFyZWRC
dWZmZXI+PiBrZXlJRHM7CisgICAgYXV0byByZXN1bHRzID0gZXh0cmFjdFNjaGVtZUFuZEtleUlk
RnJvbUNlbmMoYnVmZmVyKTsKKworICAgIGZvciAoYXV0byYgcmVzdWx0IDogcmVzdWx0cykgewor
ICAgICAgICBpZiAodmFsaWRGYWlyUGxheVN0cmVhbWluZ1NjaGVtZXMoKS5jb250YWlucyhyZXN1
bHQuZmlyc3QpKQorICAgICAgICAgICAga2V5SURzLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0
ZShyZXN1bHQuc2Vjb25kLmRhdGEoKSwgcmVzdWx0LnNlY29uZC5zaXplKCkpKTsKKyAgICB9CisK
KyAgICByZXR1cm4ga2V5SURzOworfQorCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRl
RmFpclBsYXlTdHJlYW1pbmc6OnNhbml0aXplU2luZihjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZl
cikKIHsKICAgICAvLyBDb21tb24gU0lORiBCb3ggRm9ybWF0CkBAIC0xODYsNiArMjQ3LDEzIEBA
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2FuaXRp
emVTa2QoY29uc3QgU2hhcmVkQnVmZmVyCiAgICAgcmV0dXJuIGJ1ZmZlci5jb3B5KCk7CiB9CiAK
K1JlZlB0cjxTaGFyZWRCdWZmZXI+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2FuaXRp
emVDZW5jKGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQoreworICAgIFVOVVNFRF9QQVJBTShi
dWZmZXIpOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGJ1ZmZlci5jb3B5KCk7
Cit9CisKIE9wdGlvbmFsPFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4+IENETVByaXZhdGVGYWly
UGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc1NrZChjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZl
cikKIHsKICAgICAvLyBJbiB0aGUgJ3NrZCcgc2NoZW1lLCB0aGUgaW5pdCBkYXRhIGlzIHRoZSBr
ZXkgSUQuCkBAIC0xOTYsNyArMjY0LDEzIEBAIE9wdGlvbmFsPFZlY3RvcjxSZWY8U2hhcmVkQnVm
ZmVyPj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc1NrCiAKIHN0
YXRpYyBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHZhbGlkSW5pdERhdGFUeXBlcygpCiB7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbWljU3RyaW5nPj4gdmFsaWRU
eXBlcyA9IEhhc2hTZXQ8QXRvbWljU3RyaW5nPih7IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWlu
Zzo6c2luZk5hbWUoKSwgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpza2ROYW1lKCkgfSk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbWljU3RyaW5nPj4gdmFsaWRU
eXBlcyA9IEhhc2hTZXQ8QXRvbWljU3RyaW5nPih7CisgICAgICAgIENETVByaXZhdGVGYWlyUGxh
eVN0cmVhbWluZzo6c2luZk5hbWUoKSwKKyAgICAgICAgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFt
aW5nOjpza2ROYW1lKCksCisjaWYgSEFWRShGQUlSUExBWVNUUkVBTUlOR19DRU5DX0lOSVREQVRB
KQorICAgICAgICBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmNlbmNOYW1lKCksCisjZW5k
aWYKKyAgICB9KTsKICAgICByZXR1cm4gdmFsaWRUeXBlczsKIH0KIApAQCAtMjA3LDYgKzI4MSw5
IEBAIHZvaWQgQ0RNRmFjdG9yeTo6cGxhdGZvcm1SZWdpc3RlckZhY3RvcmllcyhWZWN0b3I8Q0RN
RmFjdG9yeSo+JiBmYWN0b3JpZXMpCiAKICAgICBJbml0RGF0YVJlZ2lzdHJ5OjpzaGFyZWQoKS5y
ZWdpc3RlckluaXREYXRhVHlwZShDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNpbmZOYW1l
KCksIHsgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzYW5pdGl6ZVNpbmYsIENETVByaXZh
dGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc1NpbmYgfSk7CiAgICAgSW5pdERhdGFS
ZWdpc3RyeTo6c2hhcmVkKCkucmVnaXN0ZXJJbml0RGF0YVR5cGUoQ0RNUHJpdmF0ZUZhaXJQbGF5
U3RyZWFtaW5nOjpza2ROYW1lKCksIHsgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzYW5p
dGl6ZVNrZCwgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0S2V5SURzU2tkIH0p
OworI2lmIEhBVkUoRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19JTklUREFUQSkKKyAgICBJbml0RGF0
YVJlZ2lzdHJ5OjpzaGFyZWQoKS5yZWdpc3RlckluaXREYXRhVHlwZShDRE1Qcml2YXRlRmFpclBs
YXlTdHJlYW1pbmc6OmNlbmNOYW1lKCksIHsgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpz
YW5pdGl6ZUNlbmMsIENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc0Nl
bmMgfSk7CisjZW5kaWYKIH0KIAogQ0RNRmFjdG9yeUZhaXJQbGF5U3RyZWFtaW5nJiBDRE1GYWN0
b3J5RmFpclBsYXlTdHJlYW1pbmc6OnNpbmdsZXRvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWly
UGxheVN0cmVhbWluZy5oCmluZGV4IDNjZDYxMjNhNjNlODVmOTE5OTU3MGZmNDA5NzU3MGY3ZDhj
ODBlNTcuLmNiNWFhMDIzYjhlYzA1ZWNiYjQ4ZTFlZDE5YzczY2RjNWQyNGQ3NWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWly
UGxheVN0cmVhbWluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5oCkBAIC03NCw2ICs3NCwxMCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc2tkTmFtZSgpOwogICAgIHN0YXRp
YyBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBleHRyYWN0S2V5SURzU2tkKGNv
bnN0IFNoYXJlZEJ1ZmZlciYpOwogICAgIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5p
dGl6ZVNrZChjb25zdCBTaGFyZWRCdWZmZXImKTsKKworICAgIHN0YXRpYyBjb25zdCBBdG9taWNT
dHJpbmcmIGNlbmNOYW1lKCk7CisgICAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWY8U2hhcmVk
QnVmZmVyPj4+IGV4dHJhY3RLZXlJRHNDZW5jKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOworICAgIHN0
YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZUNlbmMoY29uc3QgU2hhcmVkQnVmZmVy
Jik7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JU09GYWlyUGxheVN0cmVhbWlu
Z1Bzc2hCb3guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NmEwZTlhMjFmNjI1NDU4ZWM2NjhkYjZhM2Y0OWZk
MmExYzgxMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94LmNwcApAQCAtMCww
ICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
U09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3guaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0RhdGFWaWV3Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBJU09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3g6OmZhaXJQbGF5U3lzdGVtSUQoKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8dWludDhfdD4+IHN5c3RlbUlEID0gVmVj
dG9yPHVpbnQ4X3Q+KHsgMHg5NCwgMHhDRSwgMHg4NiwgMHhGQiwgMHgwNywgMHhGRiwgMHg0Riwg
MHg0MywgMHhBRCwgMHhCOCwgMHg5MywgMHhEMiwgMHhGQSwgMHg5NiwgMHg4QywgMHhBMiB9KTsK
KyAgICByZXR1cm4gc3lzdGVtSUQ7Cit9CisKK2Jvb2wgSVNPRmFpclBsYXlTdHJlYW1pbmdJbmZv
Qm94OjpwYXJzZShKU0M6OkRhdGFWaWV3JiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQoreworICAg
IGlmICghSVNPRnVsbEJveDo6cGFyc2Uodmlldywgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIGNoZWNrZWRSZWFkPHVpbnQzMl90PihtX3NjaGVtZSwgdmlldywg
b2Zmc2V0LCBCaWdFbmRpYW4pOworfQorCitib29sIElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5UmVx
dWVzdEluZm9Cb3g6OnBhcnNlKEpTQzo6RGF0YVZpZXcmIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQp
Cit7CisgICAgdW5zaWduZWQgbG9jYWxPZmZzZXQgPSBvZmZzZXQ7CisgICAgaWYgKCFJU09Cb3g6
OnBhcnNlKHZpZXcsIGxvY2FsT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Q2hlY2tlZDx1aW50NjRfdCwgUmVjb3JkT3ZlcmZsb3c+IHJlbWFpbmluZyA9IG1fc2l6ZTsKKyAg
ICByZW1haW5pbmcgLT0gKGxvY2FsT2Zmc2V0IC0gb2Zmc2V0KTsKKyAgICBpZiAocmVtYWluaW5n
Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJlbWFp
bmluZyA8IDE2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGJ1ZmZlciA9IHZp
ZXcucG9zc2libHlTaGFyZWRCdWZmZXIoKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byBrZXlJRCA9IGJ1ZmZlci0+c2xpY2UobG9jYWxPZmZzZXQs
IGxvY2FsT2Zmc2V0ICsgMTYpOworICAgIGxvY2FsT2Zmc2V0ICs9IDE2OworCisgICAgbV9rZXlJ
RC5yZXNpemUoMTYpOworICAgIG1lbWNweShtX2tleUlELmRhdGEoKSwga2V5SUQtPmRhdGEoKSwg
MTYpOworCisgICAgb2Zmc2V0ID0gbG9jYWxPZmZzZXQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgSVNPRmFpclBsYXlTdHJlYW1pbmdLZXlBc3NldElkQm94OjpwYXJzZShKU0M6OkRhdGFW
aWV3JiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQoreworICAgIHVuc2lnbmVkIGxvY2FsT2Zmc2V0
ID0gb2Zmc2V0OworICAgIGlmICghSVNPQm94OjpwYXJzZSh2aWV3LCBsb2NhbE9mZnNldCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChsb2NhbE9mZnNldCAtIG9mZnNldCA9PSBt
X3NpemUpIHsKKyAgICAgICAgbV9kYXRhLmNsZWFyKCk7CisgICAgICAgIG9mZnNldCA9IGxvY2Fs
T2Zmc2V0OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRvIGJ1ZmZlciA9
IHZpZXcucG9zc2libHlTaGFyZWRCdWZmZXIoKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgdWludDY0X3QgZGF0YVNpemU7CisgICAgaWYgKCFXVEY6OnNh
ZmVTdWIobV9zaXplLCBsb2NhbE9mZnNldCAtIG9mZnNldCwgZGF0YVNpemUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHBhcnNlZERhdGEgPSBidWZmZXItPnNsaWNlKGxvY2Fs
T2Zmc2V0LCBsb2NhbE9mZnNldCArIGRhdGFTaXplKTsKKyAgICBsb2NhbE9mZnNldCArPSBkYXRh
U2l6ZTsKKworICAgIG1fZGF0YS5yZXNpemUoZGF0YVNpemUpOworICAgIG1lbWNweShtX2RhdGEu
ZGF0YSgpLCBwYXJzZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICBvZmZzZXQgPSBsb2Nh
bE9mZnNldDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJU09GYWlyUGxheVN0cmVhbWlu
Z0tleUNvbnRleHRCb3g6OnBhcnNlKEpTQzo6RGF0YVZpZXcmIHZpZXcsIHVuc2lnbmVkJiBvZmZz
ZXQpCit7CisgICAgdW5zaWduZWQgbG9jYWxPZmZzZXQgPSBvZmZzZXQ7CisgICAgaWYgKCFJU09C
b3g6OnBhcnNlKHZpZXcsIGxvY2FsT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGxvY2FsT2Zmc2V0IC0gb2Zmc2V0ID09IG1fc2l6ZSkgeworICAgICAgICBtX2RhdGEu
Y2xlYXIoKTsKKyAgICAgICAgb2Zmc2V0ID0gbG9jYWxPZmZzZXQ7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGF1dG8gYnVmZmVyID0gdmlldy5wb3NzaWJseVNoYXJlZEJ1ZmZl
cigpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50
NjRfdCBkYXRhU2l6ZTsKKyAgICBpZiAoIVdURjo6c2FmZVN1YihtX3NpemUsIGxvY2FsT2Zmc2V0
IC0gb2Zmc2V0LCBkYXRhU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
cGFyc2VkRGF0YSA9IGJ1ZmZlci0+c2xpY2UobG9jYWxPZmZzZXQsIGxvY2FsT2Zmc2V0ICsgZGF0
YVNpemUpOworICAgIGxvY2FsT2Zmc2V0ICs9IGRhdGFTaXplOworCisgICAgbV9kYXRhLnJlc2l6
ZShkYXRhU2l6ZSk7CisgICAgbWVtY3B5KG1fZGF0YS5kYXRhKCksIHBhcnNlZERhdGEtPmRhdGEo
KSwgZGF0YVNpemUpOworICAgIG9mZnNldCA9IGxvY2FsT2Zmc2V0OworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5VmVyc2lvbkxpc3RCb3g6OnBhcnNl
KEpTQzo6RGF0YVZpZXcmIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCit7CisgICAgdW5zaWduZWQg
bG9jYWxPZmZzZXQgPSBvZmZzZXQ7CisgICAgaWYgKCFJU09Cb3g6OnBhcnNlKHZpZXcsIGxvY2Fs
T2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG8geworICAgICAgICBpZiAo
bG9jYWxPZmZzZXQgLSBvZmZzZXQgPT0gbV9zaXplKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgdWludDY0X3QgcmVtYWluaW5nOworICAgICAgICBpZiAoIVdURjo6c2FmZVN1YihtX3Np
emUsIGxvY2FsT2Zmc2V0IC0gb2Zmc2V0LCByZW1haW5pbmcpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGlmIChyZW1haW5pbmcgPCBzaXplb2YodWludDMyX3QpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHVpbnQzMl90IHZlcnNpb247CisgICAg
ICAgIGlmICghY2hlY2tlZFJlYWQ8dWludDMyX3Q+KHZlcnNpb24sIHZpZXcsIGxvY2FsT2Zmc2V0
LCBCaWdFbmRpYW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX3ZlcnNp
b25zLmFwcGVuZCh2ZXJzaW9uKTsKKyAgICB9IHdoaWxlICh0cnVlKTsKKworICAgIG9mZnNldCA9
IGxvY2FsT2Zmc2V0OworICAgIHJldHVybiB0cnVlOyAKK30KKworYm9vbCBJU09GYWlyUGxheVN0
cmVhbWluZ0tleVJlcXVlc3RCb3g6OnBhcnNlKEpTQzo6RGF0YVZpZXcmIHZpZXcsIHVuc2lnbmVk
JiBvZmZzZXQpCit7CisgICAgdW5zaWduZWQgbG9jYWxPZmZzZXQgPSBvZmZzZXQ7CisgICAgaWYg
KCFJU09Cb3g6OnBhcnNlKHZpZXcsIGxvY2FsT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFtX3JlcXVlc3RJbmZvLnJlYWQodmlldywgbG9jYWxPZmZzZXQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB3aGlsZSAobG9jYWxPZmZzZXQgLSBvZmZzZXQgPCBt
X3NpemUpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBwZWVrQm94KHZpZXcsIGxvY2FsT2Zmc2V0
KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgYXV0byBuYW1lID0gcmVzdWx0LnZhbHVlKCkuZmlyc3Q7CisgICAgICAgIGlmIChuYW1l
ID09IElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5QXNzZXRJZEJveDo6Ym94VHlwZU5hbWUoKSkgewor
ICAgICAgICAgICAgaWYgKG1fYXNzZXRJRCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgICAgIElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5QXNzZXRJZEJveCBhc3NldElE
OworICAgICAgICAgICAgaWYgKCFhc3NldElELnJlYWQodmlldywgbG9jYWxPZmZzZXQpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgbV9hc3NldElEID0gV1RG
TW92ZShhc3NldElEKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG5hbWUgPT0gSVNPRmFpclBsYXlTdHJlYW1pbmdLZXlDb250ZXh0Qm94Ojpib3hUeXBl
TmFtZSgpKSB7CisgICAgICAgICAgICBpZiAobV9jb250ZXh0KQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgSVNPRmFpclBsYXlTdHJlYW1pbmdLZXlDb250ZXh0
Qm94IGNvbnRleHQ7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQucmVhZCh2aWV3LCBsb2NhbE9m
ZnNldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBtX2Nv
bnRleHQgPSBXVEZNb3ZlKGNvbnRleHQpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobmFtZSA9PSBJU09GYWlyUGxheVN0cmVhbWluZ0tleVZlcnNpb25M
aXN0Qm94Ojpib3hUeXBlTmFtZSgpKSB7CisgICAgICAgICAgICBpZiAobV92ZXJzaW9uTGlzdCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIElTT0ZhaXJQbGF5
U3RyZWFtaW5nS2V5VmVyc2lvbkxpc3RCb3ggdmVyc2lvbkxpc3Q7CisgICAgICAgICAgICBpZiAo
IXZlcnNpb25MaXN0LnJlYWQodmlldywgbG9jYWxPZmZzZXQpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgbV92ZXJzaW9uTGlzdCA9IFdURk1vdmUodmVyc2lv
bkxpc3QpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBV
bmtub3duIGJveCB0eXBlOyBlcnJvci4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gICAK
KyAgICAKKyAgICBvZmZzZXQgPSBsb2NhbE9mZnNldDsKKyAgICByZXR1cm4gdHJ1ZTsgCit9CisK
K2Jvb2wgSVNPRmFpclBsYXlTdHJlYW1pbmdJbml0RGF0YUJveDo6cGFyc2UoSlNDOjpEYXRhVmll
dyYgdmlldywgdW5zaWduZWQmIG9mZnNldCkKK3sKKyAgICB1bnNpZ25lZCBsb2NhbE9mZnNldCA9
IG9mZnNldDsKKyAgICBpZiAoIUlTT0JveDo6cGFyc2UodmlldywgbG9jYWxPZmZzZXQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1faW5mby5yZWFkKHZpZXcsIGxvY2FsT2Zm
c2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgd2hpbGUgKGxvY2FsT2Zmc2V0IC0g
b2Zmc2V0IDwgbV9zaXplKSB7CisgICAgICAgIElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5UmVxdWVz
dEJveCByZXF1ZXN0OworICAgICAgICBpZiAoIXJlcXVlc3QucmVhZCh2aWV3LCBsb2NhbE9mZnNl
dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbV9yZXF1ZXN0cy5hcHBl
bmQoV1RGTW92ZShyZXF1ZXN0KSk7CisgICAgfQorCisgICAgb2Zmc2V0ID0gbG9jYWxPZmZzZXQ7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94
OjpwYXJzZShKU0M6OkRhdGFWaWV3JiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQoreworICAgIGlm
ICghSVNPUHJvdGVjdGlvblN5c3RlbVNwZWNpZmljSGVhZGVyQm94OjpwYXJzZSh2aWV3LCBvZmZz
ZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBCYWNrIHVwIHRoZSBvZmZzZXQg
YnkgZXhhY3RseSB0aGUgc2l6ZSBvZiBtX2RhdGE6CisgICAgb2Zmc2V0IC09IG1fZGF0YS5zaXpl
KCk7CisKKyAgICByZXR1cm4gbV9pbml0RGF0YUJveC5yZWFkKHZpZXcsIG9mZnNldCk7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9JU09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JU09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3guaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zYTRlZWU3MTBkOWE5M2E5MTY5Yzc5MzM4MDg0ODRjYTM4NjgyMWU1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0lTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJU09Qcm90ZWN0aW9uU3lzdGVtU3Bl
Y2lmaWNIZWFkZXJCb3guaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJU09GYWlyUGxheVN0cmVhbWluZ0lu
Zm9Cb3ggOiBwdWJsaWMgSVNPRnVsbEJveCB7CitwdWJsaWM6CisgICAgc3RhdGljIEZvdXJDQyBi
b3hUeXBlTmFtZSgpIHsgcmV0dXJuICJmcHNpIjsgfQorCisgICAgRm91ckNDIHNjaGVtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2NoZW1lOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBwYXJzZShKU0M6
OkRhdGFWaWV3JiwgdW5zaWduZWQmIG9mZnNldCkgb3ZlcnJpZGU7CisKKyAgICBGb3VyQ0MgbV9z
Y2hlbWU7Cit9OworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJU09GYWlyUGxheVN0cmVhbWluZ0tl
eVJlcXVlc3RJbmZvQm94IDogcHVibGljIElTT0JveCB7CitwdWJsaWM6CisgICAgc3RhdGljIEZv
dXJDQyBib3hUeXBlTmFtZSgpIHsgcmV0dXJuICJma3JpIjsgfQorCisgICAgdXNpbmcgS2V5SUQg
PSBWZWN0b3I8dWludDhfdCwgMTY+OworICAgIGNvbnN0IEtleUlEJiBrZXlJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2V5SUQ7IH0KKworcHJpdmF0ZToKKyAgICBib29sIHBhcnNlKEpTQzo6RGF0YVZp
ZXcmLCB1bnNpZ25lZCYgb2Zmc2V0KSBvdmVycmlkZTsKKworICAgIEtleUlEIG1fa2V5SUQ7Cit9
OworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJU09GYWlyUGxheVN0cmVhbWluZ0tleUFzc2V0SWRC
b3ggOiBwdWJsaWMgSVNPQm94IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgRm91ckNDIGJveFR5cGVO
YW1lKCkgeyByZXR1cm4gImZrYWkiOyB9CisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGRhdGEo
KSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworcHJpdmF0ZToKKyAgICBib29sIHBhcnNlKEpT
Qzo6RGF0YVZpZXcmLCB1bnNpZ25lZCYgb2Zmc2V0KSBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1
aW50OF90PiBtX2RhdGE7Cit9OworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJU09GYWlyUGxheVN0
cmVhbWluZ0tleUNvbnRleHRCb3ggOiBwdWJsaWMgSVNPQm94IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgRm91ckNDIGJveFR5cGVOYW1lKCkgeyByZXR1cm4gImZrY3giOyB9CisgICAgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworcHJpdmF0ZToK
KyAgICBib29sIHBhcnNlKEpTQzo6RGF0YVZpZXcmLCB1bnNpZ25lZCYgb2Zmc2V0KSBvdmVycmlk
ZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBtX2RhdGE7Cit9OworCitjbGFzcyBXRUJDT1JFX0VY
UE9SVCBJU09GYWlyUGxheVN0cmVhbWluZ0tleVZlcnNpb25MaXN0Qm94IDogcHVibGljIElTT0Jv
eCB7CitwdWJsaWM6CisgICAgc3RhdGljIEZvdXJDQyBib3hUeXBlTmFtZSgpIHsgcmV0dXJuICJm
a3ZsIjsgfQorICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiB2ZXJzaW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fdmVyc2lvbnM7IH0KKworcHJpdmF0ZToKKyAgICBib29sIHBhcnNlKEpTQzo6RGF0YVZp
ZXcmLCB1bnNpZ25lZCYgb2Zmc2V0KSBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBt
X3ZlcnNpb25zOworfTsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSVNPRmFpclBsYXlTdHJlYW1p
bmdLZXlSZXF1ZXN0Qm94IDogcHVibGljIElTT0JveCB7CitwdWJsaWM6CisgICAgc3RhdGljIEZv
dXJDQyBib3hUeXBlTmFtZSgpIHsgcmV0dXJuICJmcHNrIjsgfQorCisgICAgY29uc3QgSVNPRmFp
clBsYXlTdHJlYW1pbmdLZXlSZXF1ZXN0SW5mb0JveCYgcmVxdWVzdEluZm8oKSBjb25zdCB7IHJl
dHVybiBtX3JlcXVlc3RJbmZvOyB9CisgICAgY29uc3QgT3B0aW9uYWw8SVNPRmFpclBsYXlTdHJl
YW1pbmdLZXlBc3NldElkQm94PiYgYXNzZXRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fYXNzZXRJRDsg
fQorICAgIGNvbnN0IE9wdGlvbmFsPElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5Q29udGV4dEJveD4m
IGNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICBjb25zdCBPcHRpb25h
bDxJU09GYWlyUGxheVN0cmVhbWluZ0tleVZlcnNpb25MaXN0Qm94PiYgdmVyc2lvbkxpc3QoKSBj
b25zdCB7IHJldHVybiBtX3ZlcnNpb25MaXN0OyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBwYXJz
ZShKU0M6OkRhdGFWaWV3JiwgdW5zaWduZWQmIG9mZnNldCkgb3ZlcnJpZGU7CisKKyAgICBJU09G
YWlyUGxheVN0cmVhbWluZ0tleVJlcXVlc3RJbmZvQm94IG1fcmVxdWVzdEluZm87CisgICAgT3B0
aW9uYWw8SVNPRmFpclBsYXlTdHJlYW1pbmdLZXlBc3NldElkQm94PiBtX2Fzc2V0SUQ7CisgICAg
T3B0aW9uYWw8SVNPRmFpclBsYXlTdHJlYW1pbmdLZXlDb250ZXh0Qm94PiBtX2NvbnRleHQ7Cisg
ICAgT3B0aW9uYWw8SVNPRmFpclBsYXlTdHJlYW1pbmdLZXlWZXJzaW9uTGlzdEJveD4gbV92ZXJz
aW9uTGlzdDsKK307CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIElTT0ZhaXJQbGF5U3RyZWFtaW5n
SW5pdERhdGFCb3ggOiBwdWJsaWMgSVNPQm94IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgRm91ckND
IGJveFR5cGVOYW1lKCkgeyByZXR1cm4gImZwcyAiOyB9CisKKyAgICBjb25zdCBJU09GYWlyUGxh
eVN0cmVhbWluZ0luZm9Cb3gmIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KKyAgICBj
b25zdCBWZWN0b3I8SVNPRmFpclBsYXlTdHJlYW1pbmdLZXlSZXF1ZXN0Qm94PiYgcmVxdWVzdHMo
KSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3RzOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBwYXJz
ZShKU0M6OkRhdGFWaWV3JiwgdW5zaWduZWQmIG9mZnNldCkgb3ZlcnJpZGU7CisKKyAgICBJU09G
YWlyUGxheVN0cmVhbWluZ0luZm9Cb3ggbV9pbmZvOworICAgIFZlY3RvcjxJU09GYWlyUGxheVN0
cmVhbWluZ0tleVJlcXVlc3RCb3g+IG1fcmVxdWVzdHM7Cit9OworCitjbGFzcyBXRUJDT1JFX0VY
UE9SVCBJU09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3ggOiBwdWJsaWMgSVNPUHJvdGVjdGlvblN5
c3RlbVNwZWNpZmljSGVhZGVyQm94IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBmYWlyUGxheVN5c3RlbUlEKCk7CisKKyAgICBjb25zdCBJU09GYWlyUGxheVN0
cmVhbWluZ0luaXREYXRhQm94JiBpbml0RGF0YUJveCgpIHsgcmV0dXJuIG1faW5pdERhdGFCb3g7
IH0KKworcHJpdmF0ZToKKyAgICBib29sIHBhcnNlKEpTQzo6RGF0YVZpZXcmLCB1bnNpZ25lZCYg
b2Zmc2V0KSBvdmVycmlkZTsKKworICAgIElTT0ZhaXJQbGF5U3RyZWFtaW5nSW5pdERhdGFCb3gg
bV9pbml0RGF0YUJveDsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlckNvY29hLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQcm92
aWRlckNvY29hLmNwcAppbmRleCBlNzg0YzM1NWJhMDRhMWViMzM2MGI3NzhmYTkzMzY0N2JhNjgx
NjgwLi5kOTMwODVmYWY2NzA5N2ZhZmE2NmNiYjgwZmQ3YzM5NmJjNDk3OTMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRD
UHJvdmlkZXJDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyQ29jb2EuY3BwCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSA8d2VicnRjL21lZGlhL2VuZ2luZS93ZWJydGN2aWRlb2RlY29kZXJmYWN0b3J5
Lmg+CiAjaW5jbHVkZSA8d2VicnRjL21lZGlhL2VuZ2luZS93ZWJydGN2aWRlb2VuY29kZXJmYWN0
b3J5Lmg+CiAjaW5jbHVkZSA8d2VicnRjL3Nkay9XZWJLaXQvV2ViS2l0VXRpbGl0aWVzLmg+Cisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvZGFyd2luL1dlYWtMaW5r
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkYmJlNjBhYWQ5ZDg0ZDg0MzFlYjA3Y2I0ZTRmMzFi
NjNhZTc1ODM5Li5kNTE3ZGY3ZTRiZDUxZWZiZjk0ZWM1ZWQ2Y2RjNTk2ODdkZTIwZDgwIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTktMDQtMTggIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAg
ICAgICAgQWRkIHN1cHBvcnQgZm9yIHBhcnNpbmcgRmFpclBsYXlTdHJlYW1pbmcgUFNTSCBib3hl
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzA2
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpURVNUKToKKwogMjAxOS0wNC0xNyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KIAogICAgICAgICBbaU9TIFNpbSBEZWJ1Z10gUkVHUkVTU0lPTiAocjI0NDE1MSkg
VGVzdFdlYktpdEFQSS5XZWJLaXQuT3ZlcnJpZGVWaWV3cG9ydEFyZ3VtZW50cyBpcyBmYWlsaW5n
ICgxOTcwMjgpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
SVNPQm94LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3Bw
CmluZGV4IDI2NWFhNTY1Y2YwYzA1ODgxMmE3ZmZiOTcwZmZlMzRiYTNkYWIzYjcuLjA5OTg3NjRi
MDAzYTM3OTZlOWRkZDkxNDhmNjlhMzQyMWU1ODhhZWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJUZXN0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRGF0YVZpZXcuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0lTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSVNPUHJvdGVjdGlvblNjaGVtZUluZm9Cb3guaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lTT1Nj
aGVtZUluZm9ybWF0aW9uQm94Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JU09TY2hlbWVUeXBlQm94
Lmg+CkBAIC03Myw0ICs3NCwzOSBAQCBURVNUKElTT0JveCwgSVNPUHJvdGVjdGlvblNjaGVtZUlu
Zm9Cb3gpCiAgICAgQVNTRVJUX0VRKGRlZmF1bHRJViwgdHJhY2tFbmNyeXB0aW9uQm94LT5kZWZh
dWx0Q29uc3RhbnRJVigpKTsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIqIGJhc2U2NEVuY29kZWRQ
c3NoV2l0aEFzc2V0SWQgPSAiQUFBQXFIQnpjMmdBQUFBQWxNNkcrd2YvVDBPdHVKUFMrcGFNb2dB
QUFJZ0FBQUNJWm5CelpBQUFBQkJtY0hOcEFBQUFBR05sYm1NQUFBQTRabkJ6YXdBQUFCaG1hM0pw
QUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUJobWEyRnBBQUFBQUFBQUFBQUFBQUFBQUFBQThRQUFB
RGhtY0hOckFBQUFHR1pyY21rQUFBQUFBQUFBQUFBQUFBQUFBQUFDQUFBQUdHWnJZV2tBQUFBQUFB
QUFBQUFBQUFBQUFBRHkiOworCitURVNUKElTT0JveCwgSVNPRmFpclBsYXlTdHJlYW1pbmdQc3No
Qm94KQoreworICAgIFZlY3Rvcjx1aW50OF90PiBwc3NoQXJyYXk7CisgICAgQVNTRVJUX1RSVUUo
YmFzZTY0RGVjb2RlKFN0cmluZ1ZpZXcoYmFzZTY0RW5jb2RlZFBzc2hXaXRoQXNzZXRJZCksIHBz
c2hBcnJheSkpOworICAgIEFTU0VSVF9FUSgxNjhVTCwgcHNzaEFycmF5LnNpemUoKSk7CisKKyAg
ICBhdXRvIHZpZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShw
c3NoQXJyYXkuZGF0YSgpLCBwc3NoQXJyYXkuc2l6ZSgpKSwgMCwgcHNzaEFycmF5LnNpemUoKSk7
CisKKyAgICBJU09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3ggcHNzaEJveDsKKworICAgIEFTU0VS
VF9UUlVFKHBzc2hCb3gucmVhZCh2aWV3KSk7CisKKyAgICBhdXRvIGluZm9Cb3ggPSBwc3NoQm94
LmluaXREYXRhQm94KCkuaW5mbygpOworICAgIEFTU0VSVF9FUShGb3VyQ0MoJ2NlbmMnKSwgaW5m
b0JveC5zY2hlbWUoKSk7CisKKyAgICBhdXRvIHJlcXVlc3RzID0gcHNzaEJveC5pbml0RGF0YUJv
eCgpLnJlcXVlc3RzKCk7CisgICAgQVNTRVJUX0VRKDJVTCwgcmVxdWVzdHMuc2l6ZSgpKTsKKwor
ICAgIFZlY3Rvcjx1aW50OF90LCAxNj4gZXhwZWN0ZWRGaXJzdEtleUlEID0geyAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxIH07CisgICAgQVNTRVJUX0VRKHJl
cXVlc3RzWzBdLnJlcXVlc3RJbmZvKCkua2V5SUQoKSwgZXhwZWN0ZWRGaXJzdEtleUlEKTsKKwor
ICAgIFZlY3Rvcjx1aW50OF90PiBleHBlY3RlZEZpcnN0QXNzZXRJRCA9IHsgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMHhGMSB9OworICAgIEFTU0VSVF9UUlVF
KHJlcXVlc3RzWzBdLmFzc2V0SUQoKSk7CisgICAgQVNTRVJUX0VRKHJlcXVlc3RzWzBdLmFzc2V0
SUQoKS52YWx1ZSgpLmRhdGEoKSwgZXhwZWN0ZWRGaXJzdEFzc2V0SUQpOworCisgICAgVmVjdG9y
PHVpbnQ4X3QsIDE2PiBleHBlY3RlZFNlY29uZEtleUlEID0geyAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyIH07CisgICAgQVNTRVJUX0VRKHJlcXVlc3RzWzFd
LnJlcXVlc3RJbmZvKCkua2V5SUQoKSwgZXhwZWN0ZWRTZWNvbmRLZXlJRCk7CisKKyAgICBWZWN0
b3I8dWludDhfdD4gZXhwZWN0ZWRTZWNvbmRBc3NldElEID0geyAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweEYyIH07CisgICAgQVNTRVJUX1RSVUUocmVxdWVz
dHNbMV0uYXNzZXRJRCgpKTsKKyAgICBBU1NFUlRfRVEocmVxdWVzdHNbMV0uYXNzZXRJRCgpLnZh
bHVlKCkuZGF0YSgpLCBleHBlY3RlZFNlY29uZEFzc2V0SUQpOworfQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367745</attachid>
            <date>2019-04-18 13:38:04 -0700</date>
            <delta_ts>2019-04-18 15:08:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197064-20190418133755.patch</filename>
            <type>text/plain</type>
            <size>32388</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0NDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGFlZmJhZjllYTU0ZWVmNzJmZWYyY2I2
MmZjZTY5MWM2N2NjNDViOTMuLjU4YjAxMzExZjJkYTY1ODczYjg4YTc0NWE1ZTFiYTdhZDZmODE1
MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTktMDQtMTggIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHBhcnNpbmcgRmFpclBsYXlT
dHJlYW1pbmcgUFNTSCBib3hlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NzA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTktMDQtMTYgIEplciBOb2JsZSAg
PGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIEhBVkVfQVZGT1VOREFUSU9O
X1ZJREVPX09VVFBVVCBvbiBQTEFURk9STShJT1NNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU1OGIyYzMy
MzU5MTIwYjI5MmJlYWYzMzhiZGNjODc1Y2UxM2I2NC4uM2VlOWMxZTc0YmIzYmFkYThmYzhhYjE5
ZTc2MmFkZTExOTdkNmY5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE5LTA0LTE4
ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0
IGZvciBwYXJzaW5nIEZhaXJQbGF5U3RyZWFtaW5nIFBTU0ggYm94ZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcwNjQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBUEkgVGVzdHM6IElTTy5JU09GYWly
UGxheVN0cmVhbWluZ1Bzc2hCb3gKKworICAgICAgICBBZGQgYSBuZXcgc2V0IG9mIElTT0JveCBj
bGFzc2VzIGZvciBwYXJzaW5nIHRoZSBjb250ZW50cyBvZiBhIEZhaXJQbGF5U3RyZWFtaW5nIFBT
U0ggYm94LAorICAgICAgICBhbmQgYWRkIHN1cHBvcnQgZm9yIHRoaXMgbmV3IGJveCB0byBDRE1G
YWlyUGxheVN0cmVhbWluZy4KKworICAgICAgICBEcml2ZS1ieSBmaXg6IGFkZCBhbiBleHBsaWNp
dCBpbmNsdWRlIGZvciBNYWluVGhyZWFkLmggdG8gTGliV2ViUlRDUHJvdmlkZXJDb2NvYS5jcHAu
CisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb3VyQ0Mu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlT
dHJlYW1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFt
aW5nOjpjZW5jTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpmYWlyUGxheVN5c3RlbUlEKToKKyAg
ICAgICAgKFdlYkNvcmU6OmV4dHJhY3RTY2hlbWVBbmRLZXlJZEZyb21DZW5jKToKKyAgICAgICAg
KFdlYkNvcmU6OkNETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc0NlbmMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzYW5pdGl6
ZUNlbmMpOgorICAgICAgICAoV2ViQ29yZTo6dmFsaWRJbml0RGF0YVR5cGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNETUZhY3Rvcnk6OnBsYXRmb3JtUmVnaXN0ZXJGYWN0b3JpZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JU09GYWlyUGxheVN0
cmVhbWluZ1Bzc2hCb3guY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklTT0ZhaXJQbGF5
U3RyZWFtaW5nUHNzaEJveDo6ZmFpclBsYXlTeXN0ZW1JRCk6CisgICAgICAgIChXZWJDb3JlOjpJ
U09GYWlyUGxheVN0cmVhbWluZ0luZm9Cb3g6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OklT
T0ZhaXJQbGF5U3RyZWFtaW5nS2V5UmVxdWVzdEluZm9Cb3g6OnBhcnNlKToKKyAgICAgICAgKFdl
YkNvcmU6OklTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5QXNzZXRJZEJveDo6cGFyc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SVNPRmFpclBsYXlTdHJlYW1pbmdLZXlDb250ZXh0Qm94OjpwYXJzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJU09GYWlyUGxheVN0cmVhbWluZ0tleVZlcnNpb25MaXN0Qm94Ojpw
YXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpJU09GYWlyUGxheVN0cmVhbWluZ0tleVJlcXVlc3RC
b3g6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OklTT0ZhaXJQbGF5U3RyZWFtaW5nSW5pdERh
dGFCb3g6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OklTT0ZhaXJQbGF5U3RyZWFtaW5nUHNz
aEJveDo6cGFyc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9J
U09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3guaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyQ29jb2EuY3BwOgorCiAyMDE5
LTA0LTE3ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFj
dG9yaW5nOiBQdWxsIGFsbCBmdWxsc2NyZWVuIGNvZGUgb3V0IG9mIERvY3VtZW50IGFuZCBpbnRv
IGl0cyBvd24gaGVscGVyIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCBjYmNmZjk1MjAxMWE2ZWU0NDZi
MGZlNzE0OWZjNDQ2MDUzYTJkZDNlLi4wNjE0N2FjODFlOTg3MDYxYjE3ZjczYzdlNjE5NmZhY2Zl
YTRmZGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTE1MTcsNiArMTUxNyw3IEBACiAKICNpZiAoUExBVEZP
Uk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTUwMCkgfHwg
KFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTMw
MDAwKSB8fCAoUExBVEZPUk0oV0FUQ0hPUykgJiYgX19XQVRDSF9PU19WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSA2MDAwMCkgfHwgKFBMQVRGT1JNKEFQUExFVFYpICYmIF9fVFZfT1NfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTMwMDAwKQogI2RlZmluZSBIQVZFX0FMTE9XU19TRU5TSVRJVkVfTE9H
R0lORyAxCisjZGVmaW5lIEhBVkVfRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19JTklUREFUQSAxCiAj
ZW5kaWYKIAogI2lmIChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEzMDAwMCkgfHwgKFBMQVRGT1JNKFdBVENIT1MpICYmIF9fV0FUQ0hfT1NfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gNjAwMDApIHx8IChQTEFURk9STShBUFBMRVRWKSAmJiBfX1RW
X09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEzMDAwMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CmluZGV4IDQ5NmJiNGJhOGE0NjI2Y2NkYjVjNjMyMTAxNWQ3Y2NlMmViNzBiYmEuLmVmYTdkZjIz
ODJjOWYwMzJkODg2OTdhODJlMTZjY2NlMzQ2Njk5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dApAQCAtMjI1LDYgKzIyNSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9DRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tIEBuby11bmlmeQogcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0
ZUFWRi5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAgQG5vLXVuaWZ5CitwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWJhY2tUYXJnZXRNYWMubW0gQG5vLXVuaWZ5CiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
LmNwcCBAbm8tdW5pZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVNlbGVj
dGlvbkdyb3VwQVZGT2JqQy5tbSBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwYmEyMTBjODY5MmExZTQ4ZTU3M2Uw
NWVjZDhlYWNjYThmOWIzNmM5Li5iNmYwNTIzMmQ4ZGY0NTg1MTMxYjBkNDk1M2IyM2E0NmY5YzE1
ZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC00MDQ2LDYgKzQwNDYsNyBAQAogCQlDRDYyRkI5NjFBRjAxOEU3MDAxMkVEN0Qg
LyogR2VuZXJpY1Rhc2tRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0Q2MkZCOTQxQUYwMThFNzAwMTJFRDdEIC8qIEdlbmVyaWNUYXNrUXVldWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRDY0
MUVCMzE4MThGNUVEMDBFRTRDNDEgLyogTWVkaWFTb3VyY2VQcml2YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDY0MUVCMTE4MThGNUVEMDBFRTRD
NDEgLyogTWVkaWFTb3VyY2VQcml2YXRlLmggKi87IH07CiAJCUNENjQxRUI0MTgxOEY1RUQwMEVF
NEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291cmNlQnVm
ZmVyUHJpdmF0ZS5oICovOyB9OworCQlDRDcyMEI0RjIyNjhCNTEzMDAwNDdGREUgLyogSVNPRmFp
clBsYXlTdHJlYW1pbmdQc3NoQm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRDcyMEI0OTIyNjgyQzdGMDAwNDdGREUgLyogSVNPRmFpclBsYXlTdHJl
YW1pbmdQc3NoQm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQ0Q3RDMzNDQxQzdBMTIzRjAwMDQxMjkzIC8qIFBpeGVsQnVmZmVyQ29uZm9ybWVy
Q1YuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEN0Qz
MzQyMUM3QTEyM0YwMDA0MTI5MyAvKiBQaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmggKi87IH07CiAJ
CUNEN0QzMzQ4MUM3QTE2QkYwMDA0MTI5MyAvKiBDb3JlVmlkZW9Tb2Z0TGluay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q3RDMzNDYxQzdBMTZCRjAw
MDQxMjkzIC8qIENvcmVWaWRlb1NvZnRMaW5rLmggKi87IH07CiAJCUNEN0RCQjI5MThDQTE5QzYw
MEMxMTA2NiAvKiBDU1NHcmlkTGluZU5hbWVzVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEN0RCQjI3MThDQTExRkYwMEMxMTA2NiAvKiBDU1NH
cmlkTGluZU5hbWVzVmFsdWUuaCAqLzsgfTsKQEAgLTEzNTAxLDYgKzEzNTAyLDggQEAKIAkJQ0Q2
NDFFQjExODE4RjVFRDAwRUU0QzQxIC8qIE1lZGlhU291cmNlUHJpdmF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVNvdXJjZVByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZl
clByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQnVmZmVy
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDY0MUVDNzE4MUVENjAx
MDBFRTRDNDEgLyogTWVkaWFTYW1wbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTYW1wbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Q3MjBCNDcyMjY4MkM3RTAwMDQ3RkRFIC8q
IElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJU09G
YWlyUGxheVN0cmVhbWluZ1Bzc2hCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDRDcyMEI0OTIyNjgyQzdGMDAwNDdGREUgLyogSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDRDc4QTJFQzFGNzU2NDg2MDBERTM3MUIgLyogQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBDRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q3OEEyRUUxRjc1NjQ4NjAwREUzNzFCIC8q
IENETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEN0QzMzQxMUM3QTEyM0YwMDA0MTI5MyAvKiBQ
aXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTU4NzgsNiArMTU4ODEsOCBAQAogCQkJCTA3RTlFMTJEMThGNUUyNzYwMDExQTNB
NCAvKiBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVBVkYuaCAqLywKIAkJCQkwN0I0NDJE
NDE2NkM3MEIwMDA1NTZDQUQgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAgKi8sCiAJ
CQkJMDdCNDQyRDUxNjZDNzBCMDAwNTU2Q0FEIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYu
aCAqLywKKwkJCQlDRDcyMEI0NzIyNjgyQzdFMDAwNDdGREUgLyogSVNPRmFpclBsYXlTdHJlYW1p
bmdQc3NoQm94LmNwcCAqLywKKwkJCQlDRDcyMEI0OTIyNjgyQzdGMDAwNDdGREUgLyogSVNPRmFp
clBsYXlTdHJlYW1pbmdQc3NoQm94LmggKi8sCiAJCQkJMDcxRTQ5NkYxQUQ1QUI1RTAwOEE1MEI0
IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRNYWMuaCAqLywKIAkJCQkwNzFFNDk2RDFBRDVBQTBEMDA4
QTUwQjQgLyogTWVkaWFQbGF5YmFja1RhcmdldE1hYy5tbSAqLywKIAkJCQkwNzZGMEQwOTEyQjgx
OTI3MDBDMjZBQTQgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcCAqLywKQEAg
LTI5NDY4LDYgKzI5NDczLDcgQEAKIAkJCQkyRDBCNEFBQjE4REExQ0NEMDA0MzRERTEgLyogSU9T
dXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzIxRTU3RDE4M0VEMUZGMDAxQzI4OUQgLyog
SU9TdXJmYWNlUG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1RkY0OTkyMTYyRTJCRTAwNEJE
ODZGIC8qIElTT0JveC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0Q3MjBCNEYyMjY4QjUxMzAwMDQ3
RkRFIC8qIElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0Q1RkY0OUUyMTYyRTRFODAwNEJEODZGIC8qIElTT09yaWdpbmFsRm9ybWF0Qm94LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRDVGRjQ5RDIxNjJFNERCMDA0QkQ4NkYgLyogSVNPUHJvdGVjdGlvblNj
aGVtZUluZm9Cb3guaCBpbiBIZWFkZXJzICovLAogCQkJCUNENUZGNDlDMjE2MkU0Q0YwMDRCRDg2
RiAvKiBJU09Qcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXJCb3guaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm91ckNDLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb3VyQ0MuaAppbmRleCBiYWIwOGNm
Yzk2ZDJiNGZlMDk1N2IxMjlmZDM5NTYyN2Y1MjZkNDE5Li5iNWFkZjU5NWFjZTc5MjA0NGFlZWMz
NzNmMWJkNDY1MmY4MGNiYzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb3VyQ0MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b3VyQ0MuaApAQCAtMzAsNiArMzAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3Qg
Rm91ckNDIHsKKyAgICBGb3VyQ0MoKSA9IGRlZmF1bHQ7CiAgICAgRm91ckNDKHVpbnQzMl90IHZh
bHVlKSA6IHZhbHVlKHZhbHVlKSB7IH0KIAogICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CkBA
IC00NSw3ICs0Niw3IEBAIHN0cnVjdCBGb3VyQ0MgewogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb3VyQ0MmIG90aGVyKSBjb25zdCB7IHJldHVybiB2YWx1ZSA9PSBvdGhlci52YWx1ZTsgfQog
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb3VyQ0MmIG90aGVyKSBjb25zdCB7IHJldHVybiB2
YWx1ZSAhPSBvdGhlci52YWx1ZTsgfQogCi0gICAgdWludDMyX3QgdmFsdWU7CisgICAgdWludDMy
X3QgdmFsdWUgeyAwIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcAppbmRleCA3ZTZkNTlmOTdiMWI0NTEyNjQ0MjBiNGJkOTA5NTllN2NjMGFhMjY4
Li4wYjRkZjU4ODZjZjlkNmUxMDNkOThjMjQ5ZGRjN2E3N2VjZTNkYzM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlT
dHJlYW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAiQ0RNUmVzdHJpY3Rp
b25zLmgiCiAjaW5jbHVkZSAiQ0RNU2Vzc2lvblR5cGUuaCIKKyNpbmNsdWRlICJJU09GYWlyUGxh
eVN0cmVhbWluZ1Bzc2hCb3guaCIKICNpbmNsdWRlICJJU09TY2hlbWVJbmZvcm1hdGlvbkJveC5o
IgogI2luY2x1ZGUgIklTT1NjaGVtZVR5cGVCb3guaCIKICNpbmNsdWRlICJJU09UcmFja0VuY3J5
cHRpb25Cb3guaCIKQEAgLTc0LDYgKzc1LDE4IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgQ0RNUHJp
dmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpza2ROYW1lKCkKICAgICByZXR1cm4gc2tkOwogfQogCitj
b25zdCBBdG9taWNTdHJpbmcmIENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6Y2VuY05hbWUo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNlbmMgeyBNQUtF
X1NUQVRJQ19TVFJJTkdfSU1QTCgiY2VuYyIpIH07CisgICAgcmV0dXJuIGNlbmM7Cit9CisKK3N0
YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4mIGZhaXJQbGF5U3lzdGVtSUQoKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8dWludDhfdD4+IHN5c3RlbUlEID0gVmVjdG9yPHVp
bnQ4X3Q+KHsgMHg5NCwgMHhDRSwgMHg4NiwgMHhGQiwgMHgwNywgMHhGRiwgMHg0RiwgMHg0Mywg
MHhBRCwgMHhCOCwgMHg5MywgMHhEMiwgMHhGQSwgMHg5NiwgMHg4QywgMHhBMiB9KTsKKyAgICBy
ZXR1cm4gc3lzdGVtSUQ7Cit9CisKIHN0YXRpYyBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+IGV4
dHJhY3RTaW5mRGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKIHsKICAgICAvLyBKU09O
IG9mIHRoZSBmb3JtYXQ6ICJ7IHNpbmY6IFsgPGJhc2U2NC1lbmNvZGVkLXN0cmluZz4gXSB9IgpA
QCAtMTcxLDYgKzE4NCw1NCBAQCBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBD
RE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTaQogICAgIHJldHVybiBr
ZXlJRHM7CiB9CiAKK3N0YXRpYyBTY2hlbWVBbmRLZXlSZXN1bHQgZXh0cmFjdFNjaGVtZUFuZEtl
eUlkRnJvbUNlbmMoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgYXV0byBhcnJh
eUJ1ZmZlciA9IGJ1ZmZlci50cnlDcmVhdGVBcnJheUJ1ZmZlcigpOworICAgIGlmICghYXJyYXlC
dWZmZXIpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIHZpZXcgPSBKU0M6OkRhdGFW
aWV3OjpjcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIDAsIGJ1ZmZlci5zaXplKCkpOworICAg
IHVuc2lnbmVkIG9mZnNldCB7IDAgfTsKKworICAgIFNjaGVtZUFuZEtleVJlc3VsdCByZXN1bHQ7
CisgICAgd2hpbGUgKG9mZnNldCA8IGJ1ZmZlci5zaXplKCkpIHsKKyAgICAgICAgYXV0byBwZWVr
UmVzdWx0ID0gSVNPQm94OjpwZWVrQm94KHZpZXcsIG9mZnNldCk7CisgICAgICAgIGlmICghcGVl
a1Jlc3VsdCB8fCBwZWVrUmVzdWx0LnZhbHVlKCkuZmlyc3QgIT0gSVNPUHJvdGVjdGlvblN5c3Rl
bVNwZWNpZmljSGVhZGVyQm94Ojpib3hUeXBlTmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgICAgICBJU09Qcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXJCb3ggcHNzaEJv
eDsKKyAgICAgICAgaWYgKCFwc3NoQm94LnJlYWQodmlldywgb2Zmc2V0KSkKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisKKyAgICAgICAgaWYgKHBzc2hCb3guc3lzdGVtSUQoKSAhPSBmYWlyUGxh
eVN5c3RlbUlEKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBJU09GYWlyUGxh
eVN0cmVhbWluZ1Bzc2hCb3ggZnBzUHNzaDsKKyAgICAgICAgb2Zmc2V0IC09IHBzc2hCb3guc2l6
ZSgpOworICAgICAgICBpZiAoIWZwc1Bzc2gucmVhZCh2aWV3LCBvZmZzZXQpKQorICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgICAgICBGb3VyQ0Mgc2NoZW1lID0gZnBzUHNzaC5pbml0RGF0
YUJveCgpLmluZm8oKS5zY2hlbWUoKTsKKyAgICAgICAgZm9yIChhdXRvIHJlcXVlc3QgOiBmcHNQ
c3NoLmluaXREYXRhQm94KCkucmVxdWVzdHMoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
c3RkOjptYWtlX3BhaXIoc2NoZW1lLCByZXF1ZXN0LnJlcXVlc3RJbmZvKCkua2V5SUQoKSkpOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09wdGlvbmFsPFZlY3RvcjxSZWY8U2hh
cmVkQnVmZmVyPj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc0Nl
bmMoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgVmVjdG9yPFJlZjxTaGFyZWRC
dWZmZXI+PiBrZXlJRHM7CisgICAgYXV0byByZXN1bHRzID0gZXh0cmFjdFNjaGVtZUFuZEtleUlk
RnJvbUNlbmMoYnVmZmVyKTsKKworICAgIGZvciAoYXV0byYgcmVzdWx0IDogcmVzdWx0cykgewor
ICAgICAgICBpZiAodmFsaWRGYWlyUGxheVN0cmVhbWluZ1NjaGVtZXMoKS5jb250YWlucyhyZXN1
bHQuZmlyc3QpKQorICAgICAgICAgICAga2V5SURzLmFwcGVuZChTaGFyZWRCdWZmZXI6OmNyZWF0
ZShyZXN1bHQuc2Vjb25kLmRhdGEoKSwgcmVzdWx0LnNlY29uZC5zaXplKCkpKTsKKyAgICB9CisK
KyAgICByZXR1cm4ga2V5SURzOworfQorCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRl
RmFpclBsYXlTdHJlYW1pbmc6OnNhbml0aXplU2luZihjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZl
cikKIHsKICAgICAvLyBDb21tb24gU0lORiBCb3ggRm9ybWF0CkBAIC0xODYsNiArMjQ3LDEzIEBA
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2FuaXRp
emVTa2QoY29uc3QgU2hhcmVkQnVmZmVyCiAgICAgcmV0dXJuIGJ1ZmZlci5jb3B5KCk7CiB9CiAK
K1JlZlB0cjxTaGFyZWRCdWZmZXI+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2FuaXRp
emVDZW5jKGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQoreworICAgIFVOVVNFRF9QQVJBTShi
dWZmZXIpOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGJ1ZmZlci5jb3B5KCk7
Cit9CisKIE9wdGlvbmFsPFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4+IENETVByaXZhdGVGYWly
UGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc1NrZChjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZl
cikKIHsKICAgICAvLyBJbiB0aGUgJ3NrZCcgc2NoZW1lLCB0aGUgaW5pdCBkYXRhIGlzIHRoZSBr
ZXkgSUQuCkBAIC0xOTYsNyArMjY0LDEzIEBAIE9wdGlvbmFsPFZlY3RvcjxSZWY8U2hhcmVkQnVm
ZmVyPj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc1NrCiAKIHN0
YXRpYyBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHZhbGlkSW5pdERhdGFUeXBlcygpCiB7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbWljU3RyaW5nPj4gdmFsaWRU
eXBlcyA9IEhhc2hTZXQ8QXRvbWljU3RyaW5nPih7IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWlu
Zzo6c2luZk5hbWUoKSwgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpza2ROYW1lKCkgfSk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbWljU3RyaW5nPj4gdmFsaWRU
eXBlcyA9IEhhc2hTZXQ8QXRvbWljU3RyaW5nPih7CisgICAgICAgIENETVByaXZhdGVGYWlyUGxh
eVN0cmVhbWluZzo6c2luZk5hbWUoKSwKKyAgICAgICAgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFt
aW5nOjpza2ROYW1lKCksCisjaWYgSEFWRShGQUlSUExBWVNUUkVBTUlOR19DRU5DX0lOSVREQVRB
KQorICAgICAgICBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmNlbmNOYW1lKCksCisjZW5k
aWYKKyAgICB9KTsKICAgICByZXR1cm4gdmFsaWRUeXBlczsKIH0KIApAQCAtMjA3LDYgKzI4MSw5
IEBAIHZvaWQgQ0RNRmFjdG9yeTo6cGxhdGZvcm1SZWdpc3RlckZhY3RvcmllcyhWZWN0b3I8Q0RN
RmFjdG9yeSo+JiBmYWN0b3JpZXMpCiAKICAgICBJbml0RGF0YVJlZ2lzdHJ5OjpzaGFyZWQoKS5y
ZWdpc3RlckluaXREYXRhVHlwZShDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNpbmZOYW1l
KCksIHsgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzYW5pdGl6ZVNpbmYsIENETVByaXZh
dGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc1NpbmYgfSk7CiAgICAgSW5pdERhdGFS
ZWdpc3RyeTo6c2hhcmVkKCkucmVnaXN0ZXJJbml0RGF0YVR5cGUoQ0RNUHJpdmF0ZUZhaXJQbGF5
U3RyZWFtaW5nOjpza2ROYW1lKCksIHsgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzYW5p
dGl6ZVNrZCwgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0S2V5SURzU2tkIH0p
OworI2lmIEhBVkUoRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19JTklUREFUQSkKKyAgICBJbml0RGF0
YVJlZ2lzdHJ5OjpzaGFyZWQoKS5yZWdpc3RlckluaXREYXRhVHlwZShDRE1Qcml2YXRlRmFpclBs
YXlTdHJlYW1pbmc6OmNlbmNOYW1lKCksIHsgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpz
YW5pdGl6ZUNlbmMsIENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc0Nl
bmMgfSk7CisjZW5kaWYKIH0KIAogQ0RNRmFjdG9yeUZhaXJQbGF5U3RyZWFtaW5nJiBDRE1GYWN0
b3J5RmFpclBsYXlTdHJlYW1pbmc6OnNpbmdsZXRvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWly
UGxheVN0cmVhbWluZy5oCmluZGV4IDNjZDYxMjNhNjNlODVmOTE5OTU3MGZmNDA5NzU3MGY3ZDhj
ODBlNTcuLmNiNWFhMDIzYjhlYzA1ZWNiYjQ4ZTFlZDE5YzczY2RjNWQyNGQ3NWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWly
UGxheVN0cmVhbWluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5oCkBAIC03NCw2ICs3NCwxMCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgc2tkTmFtZSgpOwogICAgIHN0YXRp
YyBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBleHRyYWN0S2V5SURzU2tkKGNv
bnN0IFNoYXJlZEJ1ZmZlciYpOwogICAgIHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5p
dGl6ZVNrZChjb25zdCBTaGFyZWRCdWZmZXImKTsKKworICAgIHN0YXRpYyBjb25zdCBBdG9taWNT
dHJpbmcmIGNlbmNOYW1lKCk7CisgICAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWY8U2hhcmVk
QnVmZmVyPj4+IGV4dHJhY3RLZXlJRHNDZW5jKGNvbnN0IFNoYXJlZEJ1ZmZlciYpOworICAgIHN0
YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZUNlbmMoY29uc3QgU2hhcmVkQnVmZmVy
Jik7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JU09GYWlyUGxheVN0cmVhbWlu
Z1Bzc2hCb3guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmMGJhYmQ5NjZiOGE0NjRiODg0N2EwNmVmNGZiNWNi
MDhkMTQ5NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94LmNwcApAQCAtMCww
ICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
U09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3guaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0RhdGFWaWV3Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBJU09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3g6OmZhaXJQbGF5U3lzdGVtSUQoKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8dWludDhfdD4+IHN5c3RlbUlEID0gVmVj
dG9yPHVpbnQ4X3Q+KHsgMHg5NCwgMHhDRSwgMHg4NiwgMHhGQiwgMHgwNywgMHhGRiwgMHg0Riwg
MHg0MywgMHhBRCwgMHhCOCwgMHg5MywgMHhEMiwgMHhGQSwgMHg5NiwgMHg4QywgMHhBMiB9KTsK
KyAgICByZXR1cm4gc3lzdGVtSUQ7Cit9CisKK2Jvb2wgSVNPRmFpclBsYXlTdHJlYW1pbmdJbmZv
Qm94OjpwYXJzZShKU0M6OkRhdGFWaWV3JiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQoreworICAg
IGlmICghSVNPRnVsbEJveDo6cGFyc2Uodmlldywgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIGNoZWNrZWRSZWFkPHVpbnQzMl90PihtX3NjaGVtZSwgdmlldywg
b2Zmc2V0LCBCaWdFbmRpYW4pOworfQorCitib29sIElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5UmVx
dWVzdEluZm9Cb3g6OnBhcnNlKEpTQzo6RGF0YVZpZXcmIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQp
Cit7CisgICAgdW5zaWduZWQgbG9jYWxPZmZzZXQgPSBvZmZzZXQ7CisgICAgaWYgKCFJU09Cb3g6
OnBhcnNlKHZpZXcsIGxvY2FsT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Q2hlY2tlZDx1aW50NjRfdCwgUmVjb3JkT3ZlcmZsb3c+IHJlbWFpbmluZyA9IG1fc2l6ZTsKKyAg
ICByZW1haW5pbmcgLT0gKGxvY2FsT2Zmc2V0IC0gb2Zmc2V0KTsKKyAgICBpZiAocmVtYWluaW5n
Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJlbWFp
bmluZyA8IG1fa2V5SUQuY2FwYWNpdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byBidWZmZXIgPSB2aWV3LnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CisgICAgaWYgKCFidWZm
ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8ga2V5SUQgPSBidWZmZXItPnNs
aWNlKGxvY2FsT2Zmc2V0LCBsb2NhbE9mZnNldCArIG1fa2V5SUQuY2FwYWNpdHkoKSk7CisgICAg
bG9jYWxPZmZzZXQgKz0gbV9rZXlJRC5jYXBhY2l0eSgpOworCisgICAgbV9rZXlJRC5yZXNpemUo
bV9rZXlJRC5jYXBhY2l0eSgpKTsKKyAgICBtZW1jcHkobV9rZXlJRC5kYXRhKCksIGtleUlELT5k
YXRhKCksIG1fa2V5SUQuY2FwYWNpdHkoKSk7CisKKyAgICBvZmZzZXQgPSBsb2NhbE9mZnNldDsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJU09GYWlyUGxheVN0cmVhbWluZ0tleUFzc2V0
SWRCb3g6OnBhcnNlKEpTQzo6RGF0YVZpZXcmIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCit7Cisg
ICAgdW5zaWduZWQgbG9jYWxPZmZzZXQgPSBvZmZzZXQ7CisgICAgaWYgKCFJU09Cb3g6OnBhcnNl
KHZpZXcsIGxvY2FsT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGxv
Y2FsT2Zmc2V0IC0gb2Zmc2V0ID09IG1fc2l6ZSkgeworICAgICAgICBtX2RhdGEuY2xlYXIoKTsK
KyAgICAgICAgb2Zmc2V0ID0gbG9jYWxPZmZzZXQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGF1dG8gYnVmZmVyID0gdmlldy5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOworICAg
IGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50NjRfdCBkYXRh
U2l6ZTsKKyAgICBpZiAoIVdURjo6c2FmZVN1YihtX3NpemUsIGxvY2FsT2Zmc2V0IC0gb2Zmc2V0
LCBkYXRhU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcGFyc2VkRGF0
YSA9IGJ1ZmZlci0+c2xpY2UobG9jYWxPZmZzZXQsIGxvY2FsT2Zmc2V0ICsgZGF0YVNpemUpOwor
ICAgIGxvY2FsT2Zmc2V0ICs9IGRhdGFTaXplOworCisgICAgbV9kYXRhLnJlc2l6ZShkYXRhU2l6
ZSk7CisgICAgbWVtY3B5KG1fZGF0YS5kYXRhKCksIHBhcnNlZERhdGEtPmRhdGEoKSwgZGF0YVNp
emUpOworICAgIG9mZnNldCA9IGxvY2FsT2Zmc2V0OworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5Q29udGV4dEJveDo6cGFyc2UoSlNDOjpEYXRhVmll
dyYgdmlldywgdW5zaWduZWQmIG9mZnNldCkKK3sKKyAgICB1bnNpZ25lZCBsb2NhbE9mZnNldCA9
IG9mZnNldDsKKyAgICBpZiAoIUlTT0JveDo6cGFyc2UodmlldywgbG9jYWxPZmZzZXQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobG9jYWxPZmZzZXQgLSBvZmZzZXQgPT0gbV9z
aXplKSB7CisgICAgICAgIG1fZGF0YS5jbGVhcigpOworICAgICAgICBvZmZzZXQgPSBsb2NhbE9m
ZnNldDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYXV0byBidWZmZXIgPSB2
aWV3LnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHVpbnQ2NF90IGRhdGFTaXplOworICAgIGlmICghV1RGOjpzYWZl
U3ViKG1fc2l6ZSwgbG9jYWxPZmZzZXQgLSBvZmZzZXQsIGRhdGFTaXplKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byBwYXJzZWREYXRhID0gYnVmZmVyLT5zbGljZShsb2NhbE9m
ZnNldCwgbG9jYWxPZmZzZXQgKyBkYXRhU2l6ZSk7CisgICAgbG9jYWxPZmZzZXQgKz0gZGF0YVNp
emU7CisKKyAgICBtX2RhdGEucmVzaXplKGRhdGFTaXplKTsKKyAgICBtZW1jcHkobV9kYXRhLmRh
dGEoKSwgcGFyc2VkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgb2Zmc2V0ID0gbG9jYWxP
ZmZzZXQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSVNPRmFpclBsYXlTdHJlYW1pbmdL
ZXlWZXJzaW9uTGlzdEJveDo6cGFyc2UoSlNDOjpEYXRhVmlldyYgdmlldywgdW5zaWduZWQmIG9m
ZnNldCkKK3sKKyAgICB1bnNpZ25lZCBsb2NhbE9mZnNldCA9IG9mZnNldDsKKyAgICBpZiAoIUlT
T0JveDo6cGFyc2UodmlldywgbG9jYWxPZmZzZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBkbyB7CisgICAgICAgIGlmIChsb2NhbE9mZnNldCAtIG9mZnNldCA9PSBtX3NpemUpCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICB1aW50NjRfdCByZW1haW5pbmc7CisgICAgICAg
IGlmICghV1RGOjpzYWZlU3ViKG1fc2l6ZSwgbG9jYWxPZmZzZXQgLSBvZmZzZXQsIHJlbWFpbmlu
ZykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHJlbWFpbmluZyA8
IHNpemVvZih1aW50MzJfdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
dWludDMyX3QgdmVyc2lvbjsKKyAgICAgICAgaWYgKCFjaGVja2VkUmVhZDx1aW50MzJfdD4odmVy
c2lvbiwgdmlldywgbG9jYWxPZmZzZXQsIEJpZ0VuZGlhbikpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIG1fdmVyc2lvbnMuYXBwZW5kKHZlcnNpb24pOworICAgIH0gd2hpbGUg
KHRydWUpOworCisgICAgb2Zmc2V0ID0gbG9jYWxPZmZzZXQ7CisgICAgcmV0dXJuIHRydWU7IAor
fQorCitib29sIElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5UmVxdWVzdEJveDo6cGFyc2UoSlNDOjpE
YXRhVmlldyYgdmlldywgdW5zaWduZWQmIG9mZnNldCkKK3sKKyAgICB1bnNpZ25lZCBsb2NhbE9m
ZnNldCA9IG9mZnNldDsKKyAgICBpZiAoIUlTT0JveDo6cGFyc2UodmlldywgbG9jYWxPZmZzZXQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fcmVxdWVzdEluZm8ucmVhZCh2
aWV3LCBsb2NhbE9mZnNldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHdoaWxlIChs
b2NhbE9mZnNldCAtIG9mZnNldCA8IG1fc2l6ZSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHBl
ZWtCb3godmlldywgbG9jYWxPZmZzZXQpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIG5hbWUgPSByZXN1bHQudmFsdWUoKS5m
aXJzdDsKKyAgICAgICAgaWYgKG5hbWUgPT0gSVNPRmFpclBsYXlTdHJlYW1pbmdLZXlBc3NldElk
Qm94Ojpib3hUeXBlTmFtZSgpKSB7CisgICAgICAgICAgICBpZiAobV9hc3NldElEKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgSVNPRmFpclBsYXlTdHJlYW1p
bmdLZXlBc3NldElkQm94IGFzc2V0SUQ7CisgICAgICAgICAgICBpZiAoIWFzc2V0SUQucmVhZCh2
aWV3LCBsb2NhbE9mZnNldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICBtX2Fzc2V0SUQgPSBXVEZNb3ZlKGFzc2V0SUQpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmFtZSA9PSBJU09GYWlyUGxheVN0cmVhbWlu
Z0tleUNvbnRleHRCb3g6OmJveFR5cGVOYW1lKCkpIHsKKyAgICAgICAgICAgIGlmIChtX2NvbnRl
eHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBJU09GYWly
UGxheVN0cmVhbWluZ0tleUNvbnRleHRCb3ggY29udGV4dDsKKyAgICAgICAgICAgIGlmICghY29u
dGV4dC5yZWFkKHZpZXcsIGxvY2FsT2Zmc2V0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgICAgIG1fY29udGV4dCA9IFdURk1vdmUoY29udGV4dCk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuYW1lID09IElTT0ZhaXJQ
bGF5U3RyZWFtaW5nS2V5VmVyc2lvbkxpc3RCb3g6OmJveFR5cGVOYW1lKCkpIHsKKyAgICAgICAg
ICAgIGlmIChtX3ZlcnNpb25MaXN0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgSVNPRmFpclBsYXlTdHJlYW1pbmdLZXlWZXJzaW9uTGlzdEJveCB2ZXJzaW9u
TGlzdDsKKyAgICAgICAgICAgIGlmICghdmVyc2lvbkxpc3QucmVhZCh2aWV3LCBsb2NhbE9mZnNl
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBtX3ZlcnNp
b25MaXN0ID0gV1RGTW92ZSh2ZXJzaW9uTGlzdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFVua25vd24gYm94IHR5cGU7IGVycm9yLgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfSAgIAorICAgIAorICAgIG9mZnNldCA9IGxvY2FsT2Zmc2V0Owor
ICAgIHJldHVybiB0cnVlOyAKK30KKworYm9vbCBJU09GYWlyUGxheVN0cmVhbWluZ0luaXREYXRh
Qm94OjpwYXJzZShKU0M6OkRhdGFWaWV3JiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQoreworICAg
IHVuc2lnbmVkIGxvY2FsT2Zmc2V0ID0gb2Zmc2V0OworICAgIGlmICghSVNPQm94OjpwYXJzZSh2
aWV3LCBsb2NhbE9mZnNldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9p
bmZvLnJlYWQodmlldywgbG9jYWxPZmZzZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICB3aGlsZSAobG9jYWxPZmZzZXQgLSBvZmZzZXQgPCBtX3NpemUpIHsKKyAgICAgICAgSVNPRmFp
clBsYXlTdHJlYW1pbmdLZXlSZXF1ZXN0Qm94IHJlcXVlc3Q7CisgICAgICAgIGlmICghcmVxdWVz
dC5yZWFkKHZpZXcsIGxvY2FsT2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBtX3JlcXVlc3RzLmFwcGVuZChXVEZNb3ZlKHJlcXVlc3QpKTsKKyAgICB9CisKKyAg
ICBvZmZzZXQgPSBsb2NhbE9mZnNldDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJU09G
YWlyUGxheVN0cmVhbWluZ1Bzc2hCb3g6OnBhcnNlKEpTQzo6RGF0YVZpZXcmIHZpZXcsIHVuc2ln
bmVkJiBvZmZzZXQpCit7CisgICAgaWYgKCFJU09Qcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFk
ZXJCb3g6OnBhcnNlKHZpZXcsIG9mZnNldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIEJhY2sgdXAgdGhlIG9mZnNldCBieSBleGFjdGx5IHRoZSBzaXplIG9mIG1fZGF0YToKKyAg
ICBvZmZzZXQgLT0gbV9kYXRhLnNpemUoKTsKKworICAgIHJldHVybiBtX2luaXREYXRhQm94LnJl
YWQodmlldywgb2Zmc2V0KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0lTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0lTT0ZhaXJQ
bGF5U3RyZWFtaW5nUHNzaEJveC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhNGVlZTcxMGQ5YTkzYTkxNjljNzkz
MzgwODQ4NGNhMzg2ODIxZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSVNPRmFpclBsYXlTdHJlYW1pbmdQc3NoQm94LmgK
QEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IklTT1Byb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRlckJveC5oIgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JU
IElTT0ZhaXJQbGF5U3RyZWFtaW5nSW5mb0JveCA6IHB1YmxpYyBJU09GdWxsQm94IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgRm91ckNDIGJveFR5cGVOYW1lKCkgeyByZXR1cm4gImZwc2kiOyB9CisK
KyAgICBGb3VyQ0Mgc2NoZW1lKCkgY29uc3QgeyByZXR1cm4gbV9zY2hlbWU7IH0KKworcHJpdmF0
ZToKKyAgICBib29sIHBhcnNlKEpTQzo6RGF0YVZpZXcmLCB1bnNpZ25lZCYgb2Zmc2V0KSBvdmVy
cmlkZTsKKworICAgIEZvdXJDQyBtX3NjaGVtZTsKK307CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JU
IElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5UmVxdWVzdEluZm9Cb3ggOiBwdWJsaWMgSVNPQm94IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgRm91ckNDIGJveFR5cGVOYW1lKCkgeyByZXR1cm4gImZrcmki
OyB9CisKKyAgICB1c2luZyBLZXlJRCA9IFZlY3Rvcjx1aW50OF90LCAxNj47CisgICAgY29uc3Qg
S2V5SUQmIGtleUlEKCkgY29uc3QgeyByZXR1cm4gbV9rZXlJRDsgfQorCitwcml2YXRlOgorICAg
IGJvb2wgcGFyc2UoSlNDOjpEYXRhVmlldyYsIHVuc2lnbmVkJiBvZmZzZXQpIG92ZXJyaWRlOwor
CisgICAgS2V5SUQgbV9rZXlJRDsKK307CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIElTT0ZhaXJQ
bGF5U3RyZWFtaW5nS2V5QXNzZXRJZEJveCA6IHB1YmxpYyBJU09Cb3ggeworcHVibGljOgorICAg
IHN0YXRpYyBGb3VyQ0MgYm94VHlwZU5hbWUoKSB7IHJldHVybiAiZmthaSI7IH0KKyAgICBjb25z
dCBWZWN0b3I8dWludDhfdD4gZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCitwcml2
YXRlOgorICAgIGJvb2wgcGFyc2UoSlNDOjpEYXRhVmlldyYsIHVuc2lnbmVkJiBvZmZzZXQpIG92
ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fZGF0YTsKK307CisKK2NsYXNzIFdFQkNP
UkVfRVhQT1JUIElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5Q29udGV4dEJveCA6IHB1YmxpYyBJU09C
b3ggeworcHVibGljOgorICAgIHN0YXRpYyBGb3VyQ0MgYm94VHlwZU5hbWUoKSB7IHJldHVybiAi
ZmtjeCI7IH0KKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4gZGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgcGFyc2UoSlNDOjpEYXRhVmlldyYsIHVu
c2lnbmVkJiBvZmZzZXQpIG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fZGF0YTsK
K307CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5VmVyc2lv
bkxpc3RCb3ggOiBwdWJsaWMgSVNPQm94IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgRm91ckNDIGJv
eFR5cGVOYW1lKCkgeyByZXR1cm4gImZrdmwiOyB9CisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
IHZlcnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9uczsgfQorCitwcml2YXRlOgorICAg
IGJvb2wgcGFyc2UoSlNDOjpEYXRhVmlldyYsIHVuc2lnbmVkJiBvZmZzZXQpIG92ZXJyaWRlOwor
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fdmVyc2lvbnM7Cit9OworCitjbGFzcyBXRUJDT1JFX0VY
UE9SVCBJU09GYWlyUGxheVN0cmVhbWluZ0tleVJlcXVlc3RCb3ggOiBwdWJsaWMgSVNPQm94IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgRm91ckNDIGJveFR5cGVOYW1lKCkgeyByZXR1cm4gImZwc2si
OyB9CisKKyAgICBjb25zdCBJU09GYWlyUGxheVN0cmVhbWluZ0tleVJlcXVlc3RJbmZvQm94JiBy
ZXF1ZXN0SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdEluZm87IH0KKyAgICBjb25zdCBP
cHRpb25hbDxJU09GYWlyUGxheVN0cmVhbWluZ0tleUFzc2V0SWRCb3g+JiBhc3NldElEKCkgY29u
c3QgeyByZXR1cm4gbV9hc3NldElEOyB9CisgICAgY29uc3QgT3B0aW9uYWw8SVNPRmFpclBsYXlT
dHJlYW1pbmdLZXlDb250ZXh0Qm94PiYgY29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4
dDsgfQorICAgIGNvbnN0IE9wdGlvbmFsPElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5VmVyc2lvbkxp
c3RCb3g+JiB2ZXJzaW9uTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbkxpc3Q7IH0KKwor
cHJpdmF0ZToKKyAgICBib29sIHBhcnNlKEpTQzo6RGF0YVZpZXcmLCB1bnNpZ25lZCYgb2Zmc2V0
KSBvdmVycmlkZTsKKworICAgIElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5UmVxdWVzdEluZm9Cb3gg
bV9yZXF1ZXN0SW5mbzsKKyAgICBPcHRpb25hbDxJU09GYWlyUGxheVN0cmVhbWluZ0tleUFzc2V0
SWRCb3g+IG1fYXNzZXRJRDsKKyAgICBPcHRpb25hbDxJU09GYWlyUGxheVN0cmVhbWluZ0tleUNv
bnRleHRCb3g+IG1fY29udGV4dDsKKyAgICBPcHRpb25hbDxJU09GYWlyUGxheVN0cmVhbWluZ0tl
eVZlcnNpb25MaXN0Qm94PiBtX3ZlcnNpb25MaXN0OworfTsKKworY2xhc3MgV0VCQ09SRV9FWFBP
UlQgSVNPRmFpclBsYXlTdHJlYW1pbmdJbml0RGF0YUJveCA6IHB1YmxpYyBJU09Cb3ggeworcHVi
bGljOgorICAgIHN0YXRpYyBGb3VyQ0MgYm94VHlwZU5hbWUoKSB7IHJldHVybiAiZnBzICI7IH0K
KworICAgIGNvbnN0IElTT0ZhaXJQbGF5U3RyZWFtaW5nSW5mb0JveCYgaW5mbygpIGNvbnN0IHsg
cmV0dXJuIG1faW5mbzsgfQorICAgIGNvbnN0IFZlY3RvcjxJU09GYWlyUGxheVN0cmVhbWluZ0tl
eVJlcXVlc3RCb3g+JiByZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdHM7IH0KKwor
cHJpdmF0ZToKKyAgICBib29sIHBhcnNlKEpTQzo6RGF0YVZpZXcmLCB1bnNpZ25lZCYgb2Zmc2V0
KSBvdmVycmlkZTsKKworICAgIElTT0ZhaXJQbGF5U3RyZWFtaW5nSW5mb0JveCBtX2luZm87Cisg
ICAgVmVjdG9yPElTT0ZhaXJQbGF5U3RyZWFtaW5nS2V5UmVxdWVzdEJveD4gbV9yZXF1ZXN0czsK
K307CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJveCA6
IHB1YmxpYyBJU09Qcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXJCb3ggeworcHVibGljOgor
ICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4mIGZhaXJQbGF5U3lzdGVtSUQoKTsKKwor
ICAgIGNvbnN0IElTT0ZhaXJQbGF5U3RyZWFtaW5nSW5pdERhdGFCb3gmIGluaXREYXRhQm94KCkg
eyByZXR1cm4gbV9pbml0RGF0YUJveDsgfQorCitwcml2YXRlOgorICAgIGJvb2wgcGFyc2UoSlND
OjpEYXRhVmlldyYsIHVuc2lnbmVkJiBvZmZzZXQpIG92ZXJyaWRlOworCisgICAgSVNPRmFpclBs
YXlTdHJlYW1pbmdJbml0RGF0YUJveCBtX2luaXREYXRhQm94OworfTsKKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJU
Q1Byb3ZpZGVyQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyQ29jb2EuY3BwCmluZGV4IGU3ODRjMzU1YmEwNGEx
ZWIzMzYwYjc3OGZhOTMzNjQ3YmE2ODE2ODAuLmQ5MzA4NWZhZjY3MDk3ZmFmYTY2Y2JiODBmZDdj
Mzk2YmM0OTc5MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlckNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUHJvdmlkZXJDb2Nv
YS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDx3ZWJydGMvbWVkaWEvZW5naW5lL3dl
YnJ0Y3ZpZGVvZGVjb2RlcmZhY3RvcnkuaD4KICNpbmNsdWRlIDx3ZWJydGMvbWVkaWEvZW5naW5l
L3dlYnJ0Y3ZpZGVvZW5jb2RlcmZhY3RvcnkuaD4KICNpbmNsdWRlIDx3ZWJydGMvc2RrL1dlYktp
dC9XZWJLaXRVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1
ZGUgPHd0Zi9kYXJ3aW4vV2Vha0xpbmtpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGRiYmU2MGFh
ZDlkODRkODQzMWViMDdjYjRlNGYzMWI2M2FlNzU4MzkuLmQ1MTdkZjdlNGJkNTFlZmJmOTRlYzVl
ZDZjZGM1OTY4N2RlMjBkODAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxOS0wNC0xOCAgSmVyIE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgcGFyc2luZyBGYWly
UGxheVN0cmVhbWluZyBQU1NIIGJveGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk3MDY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSVNPQm94LmNw
cDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE5LTA0LTE3ICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1MgU2ltIERlYnVn
XSBSRUdSRVNTSU9OIChyMjQ0MTUxKSBUZXN0V2ViS2l0QVBJLldlYktpdC5PdmVycmlkZVZpZXdw
b3J0QXJndW1lbnRzIGlzIGZhaWxpbmcgKDE5NzAyOCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9JU09Cb3guY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0lTT0JveC5jcHAKaW5kZXggMjY1YWE1NjVjZjBjMDU4ODEyYTdmZmI5NzBm
ZmUzNGJhM2RhYjNiNy4uMDk5ODc2NGIwMDNhMzc5NmU5ZGRkOTE0OGY2OWEzNDIxZTU4OGFlYyAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHAK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0lTT0JveC5jcHAKQEAgLTI3
LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlRlc3QuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9EYXRhVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSVNPRmFpclBsYXlTdHJlYW1pbmdQc3No
Qm94Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JU09Qcm90ZWN0aW9uU2NoZW1lSW5mb0JveC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSVNPU2NoZW1lSW5mb3JtYXRpb25Cb3guaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0lTT1NjaGVtZVR5cGVCb3guaD4KQEAgLTczLDQgKzc0LDM5IEBAIFRFU1QoSVNPQm94
LCBJU09Qcm90ZWN0aW9uU2NoZW1lSW5mb0JveCkKICAgICBBU1NFUlRfRVEoZGVmYXVsdElWLCB0
cmFja0VuY3J5cHRpb25Cb3gtPmRlZmF1bHRDb25zdGFudElWKCkpOwogfQogCitzdGF0aWMgY29u
c3QgY2hhciogYmFzZTY0RW5jb2RlZFBzc2hXaXRoQXNzZXRJZCA9ICJBQUFBcUhCemMyZ0FBQUFB
bE02Ryt3Zi9UME90dUpQUytwYU1vZ0FBQUlnQUFBQ0labkJ6WkFBQUFCQm1jSE5wQUFBQUFHTmxi
bU1BQUFBNFpuQnphd0FBQUJobWEzSnBBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQmhtYTJGcEFB
QUFBQUFBQUFBQUFBQUFBQUFBOFFBQUFEaG1jSE5yQUFBQUdHWnJjbWtBQUFBQUFBQUFBQUFBQUFB
QUFBQUNBQUFBR0dacllXa0FBQUFBQUFBQUFBQUFBQUFBQUFEeSI7CisKK1RFU1QoSVNPQm94LCBJ
U09GYWlyUGxheVN0cmVhbWluZ1Bzc2hCb3gpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHBzc2hB
cnJheTsKKyAgICBBU1NFUlRfVFJVRShiYXNlNjREZWNvZGUoU3RyaW5nVmlldyhiYXNlNjRFbmNv
ZGVkUHNzaFdpdGhBc3NldElkKSwgcHNzaEFycmF5KSk7CisgICAgQVNTRVJUX0VRKDE2OFVMLCBw
c3NoQXJyYXkuc2l6ZSgpKTsKKworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0
ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKHBzc2hBcnJheS5kYXRhKCksIHBzc2hBcnJheS5zaXplKCkp
LCAwLCBwc3NoQXJyYXkuc2l6ZSgpKTsKKworICAgIElTT0ZhaXJQbGF5U3RyZWFtaW5nUHNzaEJv
eCBwc3NoQm94OworCisgICAgQVNTRVJUX1RSVUUocHNzaEJveC5yZWFkKHZpZXcpKTsKKworICAg
IGF1dG8gaW5mb0JveCA9IHBzc2hCb3guaW5pdERhdGFCb3goKS5pbmZvKCk7CisgICAgQVNTRVJU
X0VRKEZvdXJDQygnY2VuYycpLCBpbmZvQm94LnNjaGVtZSgpKTsKKworICAgIGF1dG8gcmVxdWVz
dHMgPSBwc3NoQm94LmluaXREYXRhQm94KCkucmVxdWVzdHMoKTsKKyAgICBBU1NFUlRfRVEoMlVM
LCByZXF1ZXN0cy5zaXplKCkpOworCisgICAgVmVjdG9yPHVpbnQ4X3QsIDE2PiBleHBlY3RlZEZp
cnN0S2V5SUQgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDEgfTsKKyAgICBBU1NFUlRfRVEocmVxdWVzdHNbMF0ucmVxdWVzdEluZm8oKS5rZXlJRCgpLCBl
eHBlY3RlZEZpcnN0S2V5SUQpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGV4cGVjdGVkRmlyc3RB
c3NldElEID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
eEYxIH07CisgICAgQVNTRVJUX1RSVUUocmVxdWVzdHNbMF0uYXNzZXRJRCgpKTsKKyAgICBBU1NF
UlRfRVEocmVxdWVzdHNbMF0uYXNzZXRJRCgpLnZhbHVlKCkuZGF0YSgpLCBleHBlY3RlZEZpcnN0
QXNzZXRJRCk7CisKKyAgICBWZWN0b3I8dWludDhfdCwgMTY+IGV4cGVjdGVkU2Vjb25kS2V5SUQg
PSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIgfTsKKyAg
ICBBU1NFUlRfRVEocmVxdWVzdHNbMV0ucmVxdWVzdEluZm8oKS5rZXlJRCgpLCBleHBlY3RlZFNl
Y29uZEtleUlEKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBleHBlY3RlZFNlY29uZEFzc2V0SUQg
PSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4RjIgfTsK
KyAgICBBU1NFUlRfVFJVRShyZXF1ZXN0c1sxXS5hc3NldElEKCkpOworICAgIEFTU0VSVF9FUShy
ZXF1ZXN0c1sxXS5hc3NldElEKCkudmFsdWUoKS5kYXRhKCksIGV4cGVjdGVkU2Vjb25kQXNzZXRJ
RCk7Cit9CisKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>