<?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>136027</bug_id>
          
          <creation_ts>2014-08-17 11:47:37 -0700</creation_ts>
          <short_desc>Web Inspector: put feature flags for Inspector domains in the protocol specification</short_desc>
          <delta_ts>2022-03-01 02:48:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Brian Burg">burg</assigned_to>
          <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1029670</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-17 11:47:37 -0700</bug_when>
    <thetext>They are currently hardcoded into the generator. :|</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029671</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-08-17 11:47:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/18044046&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029678</commentid>
    <comment_count>2</comment_count>
      <attachid>236735</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-17 13:45:11 -0700</bug_when>
    <thetext>Created attachment 236735
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029800</commentid>
    <comment_count>3</comment_count>
      <attachid>236735</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-18 11:03:18 -0700</bug_when>
    <thetext>Comment on attachment 236735
Patch

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

&gt; Source/JavaScriptCore/inspector/scripts/tests/expected/events-with-optional-parameters.json-result:363
&gt;  }
&gt;  
&gt; -#if ENABLE(SQL_DATABASE)
&gt;  namespace Database {
&gt;  /* Database error. */

It looks like these tests are regressing.

&gt; Source/WebCore/inspector/protocol/Database.json:3
&gt; +    &quot;feature_guard&quot;: &quot;ENABLE(SQL_DATABASE)&quot;,

Maybe this should be &quot;webkit_feature_guard&quot;, or an entire &quot;webkit&quot; object:

    &quot;webkit&quot;: {
        &quot;feature_guard&quot;: &quot;ENABLE(SQL_DATABASE)&quot;
    }

I like the fact that that json files are relatively pure right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029964</commentid>
    <comment_count>4</comment_count>
      <attachid>236735</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-08-18 23:44:56 -0700</bug_when>
    <thetext>Comment on attachment 236735
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Add &apos;feature_guard&apos; settings to wrap domains with ENABLE macros.

featureGuard! Death to the underscore.

&gt;&gt; Source/WebCore/inspector/protocol/Database.json:3
&gt;&gt; +    &quot;feature_guard&quot;: &quot;ENABLE(SQL_DATABASE)&quot;,
&gt; 
&gt; Maybe this should be &quot;webkit_feature_guard&quot;, or an entire &quot;webkit&quot; object:
&gt; 
&gt;     &quot;webkit&quot;: {
&gt;         &quot;feature_guard&quot;: &quot;ENABLE(SQL_DATABASE)&quot;
&gt;     }
&gt; 
&gt; I like the fact that that json files are relatively pure right now.

I think it is fine to have it be at the top level with no WebKit qualification. It is in the WebKit project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031007</commentid>
    <comment_count>5</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-24 17:46:12 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 236735 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236735&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/inspector/scripts/tests/expected/events-with-optional-parameters.json-result:363
&gt; &gt;  }
&gt; &gt;  
&gt; &gt; -#if ENABLE(SQL_DATABASE)
&gt; &gt;  namespace Database {
&gt; &gt;  /* Database error. */
&gt; 
&gt; It looks like these tests are regressing.

They are rebaselined, before the &apos;Database&apos; domain would always include the guards, but now they don&apos;t because the feature guard isn&apos;t included in all of those tests. I don&apos;t think we need to test it in all those different test cases since the guards are always emitted in the generated files.

&gt; &gt; Source/WebCore/inspector/protocol/Database.json:3
&gt; &gt; +    &quot;feature_guard&quot;: &quot;ENABLE(SQL_DATABASE)&quot;,
&gt; 
&gt; Maybe this should be &quot;webkit_feature_guard&quot;, or an entire &quot;webkit&quot; object:
&gt; 
&gt;     &quot;webkit&quot;: {
&gt;         &quot;feature_guard&quot;: &quot;ENABLE(SQL_DATABASE)&quot;
&gt;     }
&gt; 
&gt; I like the fact that that json files are relatively pure right now.

I am ambivalent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031010</commentid>
    <comment_count>6</comment_count>
      <attachid>237054</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-24 18:02:33 -0700</bug_when>
    <thetext>Created attachment 237054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031198</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-25 11:58:11 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 236735 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236735&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/inspector/scripts/tests/expected/events-with-optional-parameters.json-result:363
&gt; &gt; &gt;  }
&gt; &gt; &gt;  
&gt; &gt; &gt; -#if ENABLE(SQL_DATABASE)
&gt; &gt; &gt;  namespace Database {
&gt; &gt; &gt;  /* Database error. */
&gt; &gt; 
&gt; &gt; It looks like these tests are regressing.
&gt; 
&gt; They are rebaselined, before the &apos;Database&apos; domain would always include the guards, but now they don&apos;t because the feature guard isn&apos;t included in all of those tests. I don&apos;t think we need to test it in all those different test cases since the guards are always emitted in the generated files.

Oh, hah. Got it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031476</commentid>
    <comment_count>8</comment_count>
      <attachid>237054</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-08-26 14:11:08 -0700</bug_when>
    <thetext>Comment on attachment 237054
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Add &apos;feature_guard&apos; settings to wrap domains with ENABLE macros.

featureGuard</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031502</commentid>
    <comment_count>9</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-26 15:38:46 -0700</bug_when>
    <thetext>Committed r172980: &lt;http://trac.webkit.org/changeset/172980&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236735</attachid>
            <date>2014-08-17 13:45:11 -0700</date>
            <delta_ts>2014-08-24 18:02:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136027-20140817134414.patch</filename>
            <type>text/plain</type>
            <size>40385</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNjg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
ODNmODRhZTNhYzVjZjg4YTAzNGUzZjY2ODI2MDkzMTA2YmE5MDVhLi42N2Y5YWI1OTVjYzMyN2Fj
NzIzMDRhODQxOGNhNTJiMzU0NzA2OWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNyBAQAorMjAxNC0wOC0xNyAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcHV0IGZlYXR1cmUgZmxhZ3MgZm9yIElu
c3BlY3RvciBkb21haW5zIGluIHRoZSBwcm90b2NvbCBzcGVjaWZpY2F0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYwMjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhlIGhhcmRjb2Rl
ZCBtYXAgb2YgZG9tYWlucyB0byBmZWF0dXJlIGd1YXJkcywgYW5kIGluc3RlYWQgcGFyc2UgaXQg
ZnJvbSB0aGUgc3BlY2lmaWNhdGlvbi4KKworICAgICAgICBUZXN0OiBpbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorCisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHk6CisgICAgICAgIChH
ZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5OgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfZG9t
YWluKToKKyAgICAgICAgKERvbWFpbi5fX2luaXRfXyk6CisgICAgICAgIChEb21haW5zKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVh
dHVyZS1ndWFyZHMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQ6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0Ogor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQ6CisKIDIwMTQtMDgtMTUgIEJyaWFuIEouIEJ1cmcg
IDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3Jp
dGUgQ29kZUdlbmVyYXRvckluc3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDEwMGQwMzY1YjRiNDJhMTk5YzY5ZGVkMzRmYmIxZjdlNGRmZTkyZGYuLjg4ZWNk
YjQ2MjNhM2M5ZGY1YjdlMTg1ZjlmNmQ3YTg2M2JlNjYwNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAxNC0wOC0xNyAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5l
ZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcHV0IGZlYXR1cmUgZmxhZ3MgZm9yIEluc3Bl
Y3RvciBkb21haW5zIGluIHRoZSBwcm90b2NvbCBzcGVjaWZpY2F0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYwMjcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgJ2ZlYXR1cmVfZ3VhcmQnIHNl
dHRpbmdzIHRvIHdyYXAgZG9tYWlucyB3aXRoIEVOQUJMRSBtYWNyb3MuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBObyBiZWhhdmlvciB3YXMgY2hhbmdlZC4KKworICAgICAgICAqIGluc3BlY3Rv
ci9wcm90b2NvbC9EYXRhYmFzZS5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9wcm90b2NvbC9J
bmRleGVkREIuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvUmVwbGF5Lmpzb246
CisKIDIwMTQtMDgtMTUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBEbyBub3QgdXNlIEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0KCkgdG8gZmxhZyBmdWxsIHJlcGFp
bnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CmluZGV4IGM2M2VmYWI0OWYzYmZhNzJlN2QyM2U0
YTE1ZDQ2YzMwMWM0YzBlYWEuLjAzNzg0ZThhMjUyYmU1N2Y4NTY0N2MxY2Q2MjNiM2VhOGJhOTMx
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKQEAgLTQ3LDEzICs0Nyw2IEBAIF9QUklNSVRJ
VkVfVE9fQ1BQX05BTUVfTUFQID0gewogICAgICdhbnknOiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZScKIH0KIAotIyBGSVhNRTogVGhpcyBzaG91bGQgYmUgY29udmVydGVkIGludG8gYSBwcm9w
ZXJ0eSBvbiB0aGUgZG9tYWluIGluIEpTT04uCi1fRE9NQUlOX1RPX0NQUF9HVUFSRF9NQVAgPSB7
Ci0gICAgJ0RhdGFiYXNlJzogIkVOQUJMRShTUUxfREFUQUJBU0UpIiwKLSAgICAnSW5kZXhlZERC
JzogIkVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSIsCi0gICAgJ1JlcGxheSc6ICJFTkFCTEUoV0VC
X1JFUExBWSkiLAotfQotCiBfQUxXQVlTX1VQUEVSQ0FTRURfRU5VTV9WQUxVRV9TVUJTVFJJTkdT
ID0gc2V0KFsnQVBJJywgJ0NTUycsICdET00nLCAnSFRNTCcsICdYSFInLCAnWE1MJ10pCiAKICMg
VGhlc2Ugb2JqZWN0cyBhcmUgYnVpbHQgbWFudWFsbHkgYnkgY3JlYXRpbmcgYW5kIHNldHRpbmcg
SW5zcGVjdG9yVmFsdWVzLgpAQCAtMjA5LDcgKzIwMiw3IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAg
ICAjIE1pc2NlbGxhbmVvdXMgdGV4dCBtYW5pcHVsYXRpb24gcm91dGluZXMuCiAgICAgQHN0YXRp
Y21ldGhvZAogICAgIGRlZiB3cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIHRleHQp
OgotICAgICAgICBndWFyZCA9IF9ET01BSU5fVE9fQ1BQX0dVQVJEX01BUC5nZXQoZG9tYWluLmRv
bWFpbl9uYW1lKQorICAgICAgICBndWFyZCA9IGRvbWFpbi5mZWF0dXJlX2d1YXJkCiAgICAgICAg
IGlmIGd1YXJkIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgbGluZXMgPSBbCiAgICAgICAgICAg
ICAgICAgJyNpZiAlcycgJSBndWFyZCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQppbmRleCA0YWMwMmZiY2Jl
YTE1NWI3YmNlM2ZhMmYxYTQ2NjEwMDk2YjJiMWUzLi5mM2E3MmMzM2IxNjU3M2FlYzJlM2M3N2Ew
YTQ5OTM3MDEyMDNlMzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5CkBAIC0zMjYsNyArMzI2LDcgQEAg
Y2xhc3MgUHJvdG9jb2w6CiAgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1h
bGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZXZlbnRzIGlzIG5vdCBhbiBhcnJheSIpCiAg
ICAgICAgICAgICBldmVudHMuZXh0ZW5kKFtzZWxmLnBhcnNlX2V2ZW50KGV2ZW50KSBmb3IgZXZl
bnQgaW4ganNvblsnZXZlbnRzJ11dKQogCi0gICAgICAgIHNlbGYuZG9tYWlucy5hcHBlbmQoRG9t
YWluKGpzb25bJ2RvbWFpbiddLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiksIGlzU3VwcGxl
bWVudGFsLCB0eXBlcywgY29tbWFuZHMsIGV2ZW50cykpCisgICAgICAgIHNlbGYuZG9tYWlucy5h
cHBlbmQoRG9tYWluKGpzb25bJ2RvbWFpbiddLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiks
IGpzb24uZ2V0KCJmZWF0dXJlX2d1YXJkIiksIGlzU3VwcGxlbWVudGFsLCB0eXBlcywgY29tbWFu
ZHMsIGV2ZW50cykpCiAKICAgICBkZWYgcGFyc2VfdHlwZV9kZWNsYXJhdGlvbihzZWxmLCBqc29u
KToKICAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWydpZCcsICd0eXBlJ10s
IGpzb24sICJ0eXBlIikKQEAgLTQ3Nyw5ICs0NzcsMTAgQEAgY2xhc3MgUHJvdG9jb2w6CiAKIAog
Y2xhc3MgRG9tYWluOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkb21haW5fbmFtZSwgZGVzY3Jp
cHRpb24sIGlzU3VwcGxlbWVudGFsLCB0eXBlX2RlY2xhcmF0aW9ucywgY29tbWFuZHMsIGV2ZW50
cyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFpbl9uYW1lLCBkZXNjcmlwdGlvbiwgZmVh
dHVyZV9ndWFyZCwgaXNTdXBwbGVtZW50YWwsIHR5cGVfZGVjbGFyYXRpb25zLCBjb21tYW5kcywg
ZXZlbnRzKToKICAgICAgICAgc2VsZi5kb21haW5fbmFtZSA9IGRvbWFpbl9uYW1lCiAgICAgICAg
IHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAgICBzZWxmLmZlYXR1cmVfZ3Vh
cmQgPSBmZWF0dXJlX2d1YXJkCiAgICAgICAgIHNlbGYuaXNfc3VwcGxlbWVudGFsID0gaXNTdXBw
bGVtZW50YWwKICAgICAgICAgc2VsZi50eXBlX2RlY2xhcmF0aW9ucyA9IHR5cGVfZGVjbGFyYXRp
b25zCiAgICAgICAgIHNlbGYuY29tbWFuZHMgPSBjb21tYW5kcwpAQCAtNTAwLDcgKzUwMSw3IEBA
IGNsYXNzIERvbWFpbjoKIAogCiBjbGFzcyBEb21haW5zOgotICAgIEdMT0JBTCA9IERvbWFpbigi
IiwgIlRoZSBnbG9iYWwgZG9tYWluLCBpbiB3aGljaCBwcmltaXRpdmUgdHlwZXMgYXJlIGltcGxp
Y2l0bHkgZGVjbGFyZWQuIiwgVHJ1ZSwgW10sIFtdLCBbXSkKKyAgICBHTE9CQUwgPSBEb21haW4o
IiIsICJUaGUgZ2xvYmFsIGRvbWFpbiwgaW4gd2hpY2ggcHJpbWl0aXZlIHR5cGVzIGFyZSBpbXBs
aWNpdGx5IGRlY2xhcmVkLiIsIE5vbmUsIFRydWUsIFtdLCBbXSwgW10pCiAKIAogY2xhc3MgVHlw
ZURlY2xhcmF0aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CmluZGV4
IGEwOTQyYzM3Yjg2YTNkNGFhZGE5Nzg2OWM3NWZhNDQwMTIxODk2NzMuLmZkMTk5ZmFjM2VhZjlm
YTFkZGI3MDNhM2QyNzNiMDc3NGU3NDJmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbi1yZXN1bHQKQEAgLTgzLDcgKzgzLDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIGNs
YXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoK
ICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3NjcmVlbkNvbG9yJyB3aGlsZSBnZW5lcmF0
aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcy4KQEAg
LTExNiw5ICsxMTUsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+SW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07Ci0jZW5kaWYgLy8gRU5B
QkxFKFNRTF9EQVRBQkFTRSkKIAotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiBjbGFzcyBJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6
SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKQEAgLTEzMiw3ICsxMjksNiBAQCBwcml2YXRl
OgogICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CiAgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIG1fYWdlbnQ7CiB9OwotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKIH0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgogCkBAIC0xODMsMTEgKzE3OSw4IEBAIHByaXZhdGU6CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQogCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIFBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogewogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKQEAgLTQwMSw3ICszOTQsNiBAQCB2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcAogICAgICAgICByZXR1cm47CiAgICAgfQogfQotI2VuZGlmIC8vIEVOQUJMRShT
UUxfREFUQUJBU0UpCiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgogCkBAIC01NTYsMjIgKzU0
OCwxOCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIG5hbWVzcGFjZSBUeXBlQnVpbGRlciB7CiAK
IC8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiBuYW1l
c3BhY2UgRGF0YWJhc2UgewogY2xhc3MgRXJyb3I7CiBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7
CiB9IC8vIERhdGFiYXNlCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKIC8vIEVuZCBv
ZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KIAogCiAvLyBUeXBlZGVmcy4KLSNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8qIFVuaXF1ZSBpZGVudGlmaWVyIG9m
IERhdGFiYXNlIG9iamVjdC4gKi8KIHR5cGVkZWYgaW50IERhdGFiYXNlSWQ7CiB9IC8vIERhdGFi
YXNlCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKIC8vIEVuZCBvZiB0eXBlZGVmcy4K
IAogU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CkBAIC01ODEsNyAr
NTY5LDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRW
YWx1ZShUIGVudW1WYWx1ZSkKICAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0
YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7CiB9CiAKLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8qICAqLwogZW51bSBjbGFzcyBQcmltYXJ5Q29sb3Jz
IHsKQEAgLTY1OCw3ICs2NDUsNiBAQCBwdWJsaWM6CiB9OwogCiB9IC8vIERhdGFiYXNlCi0jZW5k
aWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IGNkZmIz
NWY4ZmU2YjMxMWYwMjZkMTJmODc0YjFmODI4NTA0ODBmNWIuLjdjN2RkMTlkYjIxYjc0OTRlOTMw
OTc5NWJmMWRmNjBjY2EzM2U4OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNh
bGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtODAsNyArODAsNiBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLSNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgewogcHVibGljOgogICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAn
c2NyZWVuQ29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzLgpAQCAtMTAxLDkgKzEwMCw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OwogfTsKLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCi0jaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwpAQCAtMTE1
LDcgKzExMiw2IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKIH07Ci0jZW5kaWYgLy8gRU5BQkxFKFNR
TF9EQVRBQkFTRSkKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCiAKQEAgLTE2NiwxMSArMTYy
LDggQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLSNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQogSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5J
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotI2VuZGlmIC8v
IEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwpAQCAtMzA4LDcgKzMw
MSw2IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkCiAgICAgfQogICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKIH0K
LSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKIApAQCAtNDYzLDIyICs0NTUsMTggQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiBuYW1lc3Bh
Y2UgVHlwZUJ1aWxkZXIgewogCiAvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLSNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQogbmFtZXNwYWNlIERhdGFiYXNlIHsKIGNsYXNzIEVycm9yOwogZW51bSBj
bGFzcyBQcmltYXJ5Q29sb3JzOwogfSAvLyBEYXRhYmFzZQotI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCiAvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCiAKIAogLy8gVHlwZWRl
ZnMuCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAvKiBV
bmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCiB0eXBlZGVmIGludCBEYXRh
YmFzZUlkOwogfSAvLyBEYXRhYmFzZQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAv
LyBFbmQgb2YgdHlwZWRlZnMuCiAKIFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpOwpAQCAtNDg4LDcgKzQ3Niw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiAgICAgcmV0dXJuIGdldFRlc3RF
bnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwogfQogCi0jaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAvKiAgKi8KIGVudW0g
Y2xhc3MgUHJpbWFyeUNvbG9ycyB7CkBAIC01NjUsNyArNTUyLDYgQEAgcHVibGljOgogfTsKIAog
fSAvLyBEYXRhYmFzZQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKIAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMt
d2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IDk4ZWFjNmIxYjllZjQ1
YWZjMmNlYWQ2YWNhZTY3NzYzNTgxMWUwYWYuLjU3ZjJmNjc2ZmFhYmU2NTE4NmVmZWM1YzZiYjY1
ZTY1MDhiZTAxNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0
CkBAIC0xODMsNyArMTgzLDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIAogCi0jaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQpAQCAt
MTkyLDcgKzE5MSw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKIH07Ci0jZW5kaWYgLy8gRU5BQkxF
KFNRTF9EQVRBQkFTRSkKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCiAKQEAgLTI0MSw3ICsy
MzksNiBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCiB2b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpk
aWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90
ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgdGltZXN0YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFz
ZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogY29uc3Qg
cHJpbnRDb2xvcikKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CkBAIC0yODUsNyArMjgyLDYgQEAgdm9pZCBJbnNw
ZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKFBhc3NSZWYKIAogICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KLSNlbmRpZiAv
LyBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKIApAQCAt
MzQxLDIzICszMzcsMTkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiBuYW1lc3BhY2UgVHlwZUJ1
aWxkZXIgewogCiAvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLSNpZiBFTkFCTEUoU1FMX0RBVEFC
QVNFKQogbmFtZXNwYWNlIERhdGFiYXNlIHsKIGNsYXNzIEVycm9yOwogfSAvLyBEYXRhYmFzZQot
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuCiAKIAogLy8gVHlwZWRlZnMuCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIG5hbWVz
cGFjZSBEYXRhYmFzZSB7CiAvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3Qu
ICovCiB0eXBlZGVmIFN0cmluZyBEYXRhYmFzZUlkOwogCiB0eXBlZGVmIFN0cmluZyBQcmltYXJ5
Q29sb3JzOwogfSAvLyBEYXRhYmFzZQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAv
LyBFbmQgb2YgdHlwZWRlZnMuCiAKIFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpOwpAQCAtMzY3LDcgKzM1OSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiAgICAgcmV0dXJuIGdldFRlc3RF
bnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwogfQogCi0jaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAvKiBEYXRhYmFzZSBl
cnJvci4gKi8KIGNsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
QmFzZSB7CkBAIC00MzgsNyArNDI5LDYgQEAgcHVibGljOgogfTsKIAogfSAvLyBEYXRhYmFzZQot
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGMwZGU3Y2M2NmNk
MDU3MWFiNDNmOGM5NzA1Yzc5NGQ5ZjMzYWRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRv
bWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDUyMyBAQAor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
Ly8gTmV0d29yazEuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazEu
bG9hZFJlc291cmNlIiwgW10sIFtdKTsKKworLy8gTmV0d29yazMuCitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyTmV0d29yazNEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yazMiKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiLCBbXSk7
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFy
ZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZu
ZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNs
dWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgUExBVEZPUk0oV0VCX0NPTU1B
TkRTKQorY2xhc3MgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewor
cHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcqKSA9IDA7
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIoKTsKK307CisjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQorCisj
aWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQorY2xhc3MgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2YXRl
OgorICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIG1fYWdlbnQ7Cit9OworI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisj
ZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJk
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisjaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQorSW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpIHsgfQorI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKKworI2lmIFBM
QVRGT1JNKFdFQl9DT01NQU5EUykKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRl
cmFsKCJOZXR3b3JrMSIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIGlmICht
ZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpCisgICAgICAgIGxvYWRSZXNvdXJjZShjYWxsSWQsICpt
ZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJOZXR3b3JrMSIgKyAnLicgKyBtZXRob2QgKyAi
JyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
KQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJl
c291cmNlKCZlcnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0o
V0VCX0NPTU1BTkRTKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
c19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgi
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCisKKyNpZiBQTEFURk9STShXRUJfRVZFTlRTKQorY2xhc3MgSW5zcGVjdG9yTmV0
d29yazNGcm9udGVuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIEluc3BlY3Rvck5ldHdvcmsz
RnJvbnRlbmREaXNwYXRjaGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyB9CisgICAgdm9pZCByZXNvdXJjZUxvYWRlZCgpOworcHJpdmF0ZToKKyAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwor
fTsKKyNlbmRpZiAvLyBQTEFURk9STShXRUJfRVZFTlRTKQorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5l
ZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworI2lmIFBMQVRGT1JNKFdFQl9FVkVOVFMpCit2b2lkIEluc3Bl
Y3Rvck5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCit7CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2Qi
KSwgQVNDSUlMaXRlcmFsKCJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCIpKTsKKworICAgIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShXRUJfRVZFTlRTKQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRl
ZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clR5cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFj
ZSBUeXBlQnVpbGRlciB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorI2lmIFBMQVRGT1JN
KFdFQl9UWVBFUykKK25hbWVzcGFjZSBOZXR3b3JrMiB7CitjbGFzcyBOZXR3b3JrRXJyb3I7Cit9
IC8vIE5ldHdvcmsyCisjZW5kaWYgLy8gUExBVEZPUk0oV0VCX1RZUEVTKQorLy8gRW5kIG9mIGZv
cndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZh
bHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVt
Q29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKyNpZiBQTEFURk9S
TShXRUJfVFlQRVMpCituYW1lc3BhY2UgTmV0d29yazIgeworY2xhc3MgTmV0d29ya0Vycm9yIDog
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51
bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwg
MCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1l
c3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Cisg
ICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypOZXR3b3JrRXJy
b3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAg
IH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHBy
b3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cihBU0NJSUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5l
dHdvcmtFcnJvcj4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPE5ldHdvcmtFcnJvcj4qPigmbV9yZXN1bHQpOworICAgICAgICB9
CisKKyAgICAgICAgUGFzc1JlZlB0cjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPE5ldHdvcmtFcnJvcj4oKnRoaXMpLnJlbGVhc2Uo
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKKyAgICAgKiBSZWZQdHI8TmV0d29ya0Vycm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6
OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENv
ZGUoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307CisKK30gLy8g
TmV0d29yazIKKyNlbmRpZiAvLyBQTEFURk9STShXRUJfVFlQRVMpCisKKworCit9IC8vIG5hbWVz
cGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMu
aCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewor
CitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKK307
CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1
cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBU
eXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggOTYwNjg4Y2NiMTRk
OTdhNmVlODdlZTEyYjNmM2I2MDBlN2I0MWFjOC4uMjE5ZjMwNDI1NGMxYjViNmE4YTYwMjBjODIx
ZDMxNWJjOTVmNTkxYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAg
LTM0Nyw3ICszNDcsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIG5hbWVzcGFjZSBUeXBlQnVp
bGRlciB7CiAKIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCiBuYW1lc3BhY2UgRGF0YWJhc2UgewogY2xhc3MgRHVtbXlPYmplY3Q7CiBjbGFzcyBFcnJv
cjsKQEAgLTM1NSw3ICszNTQsNiBAQCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxp
Y3RzOwogY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7CiBjbGFzcyBQYXJhbWV0ZXJCdW5k
bGU7CiB9IC8vIERhdGFiYXNlCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAogbmFt
ZXNwYWNlIFRlc3QgewogY2xhc3MgSGFwcHlOYW1lOwpAQCAtMzczLDcgKzM3MSw2IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFs
dWUpCiAgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+
KGVudW1WYWx1ZSkpOwogfQogCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIG5hbWVzcGFjZSBE
YXRhYmFzZSB7CiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KIGNsYXNzIEVycm9yIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CkBAIC03MjEsNyArNzE4LDYgQEAgcHVibGlj
OgogfTsKIAogfSAvLyBEYXRhYmFzZQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAK
IG5hbWVzcGFjZSBUZXN0IHsKIGNsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJl
LWd1YXJkcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjcxZGQ3MTEyYmQ0NWYzNzQ0Y2VlZGFjMzQ3MGM2MmQxMjgwYTQxNTAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KQEAgLTAsMCArMSwzNiBAQAorWwor
eworICAgICJkb21haW4iOiAiTmV0d29yazEiLAorICAgICJmZWF0dXJlX2d1YXJkIjogIlBMQVRG
T1JNKFdFQl9DT01NQU5EUykiLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3Bl
Y3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBd
Cit9LAoreworICAgICJkb21haW4iOiAiTmV0d29yazIiLAorICAgICJmZWF0dXJlX2d1YXJkIjog
IlBMQVRGT1JNKFdFQl9UWVBFUykiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3Nh
Z2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVn
ZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMyIsCisgICAgImZlYXR1
cmVfZ3VhcmQiOiAiUExBVEZPUk0oV0VCX0VWRU5UUykiLAorICAgICJldmVudHMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgorICAgICAgICB9CisgICAg
XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0Rh
dGFiYXNlLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2Uu
anNvbgppbmRleCBlNmNlMjI4ZTFjNjRkNzU4ZmIxMDgwM2MxZjFmNzUxZWQ5MjBiZWY3Li45NTJj
MjM4NjlmMzQ1NGNjZjk2MTE2ODg0YzNiMzFhZTJiNTI1YjJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2UuanNvbgorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2UuanNvbgpAQCAtMSw1ICsxLDYgQEAKIHsK
ICAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAiZmVhdHVyZV9ndWFyZCI6ICJFTkFCTEUo
U1FMX0RBVEFCQVNFKSIsCiAgICAgInR5cGVzIjogWwogICAgICAgICB7CiAgICAgICAgICAgICAi
aWQiOiAiRGF0YWJhc2VJZCIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvSW5kZXhlZERCLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9j
b2wvSW5kZXhlZERCLmpzb24KaW5kZXggNzUzZDlkMmIzYzFmMTI1NzhkOGQ2N2NhMTkxNGEwNGEw
NzA4ODMyNi4uMmE2YTJlOTYwYjFhYTNkMzg0NzgzZTU0Njg2N2M4NWMyNTcxMDlkYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29uCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgpAQCAt
MSw1ICsxLDYgQEAKIHsKICAgICAiZG9tYWluIjogIkluZGV4ZWREQiIsCisgICAgImZlYXR1cmVf
Z3VhcmQiOiAiRU5BQkxFKElOREVYRURfREFUQUJBU0UpIiwKICAgICAidHlwZXMiOiBbCiAgICAg
ICAgIHsKICAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXMiLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1JlcGxheS5qc29uIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1JlcGxheS5qc29uCmluZGV4IGJlMjY5
ODhjOGIwN2M0ZGJhOTdjOTYzYzNjOGQ0NTZlZDA3Njc5MzQuLjc3NTkyYjgwNzZlZTU4MTQ0ZDVk
MjM3Y2UzNDhjOTM4M2FhYTI4ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9SZXBsYXkuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJv
dG9jb2wvUmVwbGF5Lmpzb24KQEAgLTEsNiArMSw3IEBACiB7CiAgICAgImRvbWFpbiI6ICJSZXBs
YXkiLAogICAgICJkZXNjcmlwdGlvbiI6ICJDb250cm9scyB3ZWIgcmVwbGF5LCBhbmQgbWFuYWdl
cyByZWNvcmRpbmcgc2Vzc2lvbnMgYW5kIHNlZ21lbnRzLiIsCisgICAgImZlYXR1cmVfZ3VhcmQi
OiAiRU5BQkxFKFdFQl9SRVBMQVkpIiwKICAgICAidHlwZXMiOiBbCiAgICAgICAgIHsKICAgICAg
ICAgICAgICJpZCI6ICJTZXNzaW9uSWRlbnRpZmllciIsICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
cmVwbGF5IHNlc3Npb24gaWRlbnRpZmllci4iLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237054</attachid>
            <date>2014-08-24 18:02:33 -0700</date>
            <delta_ts>2022-03-01 02:48:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136027-20140824180218.patch</filename>
            <type>text/plain</type>
            <size>40535</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
N2Q5NzVkYWUyYWU4NDZjOTNiMzI4MjU0ZDRmNjcxOTU1ZjU1YmI3Li5hNTVmN2I2YWQ4OWUzMmYx
YjBkZTQ0Mjk4NjNhMTc3NDQ3MTFiMWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwyOSBAQAogMjAxNC0wOC0yNCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CiAKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcHV0IGZlYXR1cmUgZmxhZ3MgZm9yIElu
c3BlY3RvciBkb21haW5zIGluIHRoZSBwcm90b2NvbCBzcGVjaWZpY2F0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYwMjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhlIGhhcmRjb2Rl
ZCBtYXAgb2YgZG9tYWlucyB0byBmZWF0dXJlIGd1YXJkcywgYW5kIGluc3RlYWQgcGFyc2UgaXQg
ZnJvbSB0aGUgc3BlY2lmaWNhdGlvbi4KKworICAgICAgICBUZXN0OiBpbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorCisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHk6CisgICAgICAgIChH
ZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5OgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfZG9t
YWluKToKKyAgICAgICAgKERvbWFpbi5fX2luaXRfXyk6CisgICAgICAgIChEb21haW5zKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVh
dHVyZS1ndWFyZHMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQ6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0Ogor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQ6CisKKzIwMTQtMDgtMjQgIEJyaWFuIEouIEJ1cmcg
IDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgorCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbmFt
ZSBET00uUkdCQSBhbmQgcmVtb3ZlIHdvcmthcm91bmRzIGluIHRoZSBiaW5kaW5ncyBnZW5lcmF0
b3IKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjAy
NQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggMzdiZmZmODJkMzhlMDkyMzBjODIwMGFlOGFkY2MzY2JhNjU0N2Ix
OC4uNjQ1ZDdlMDZhZTI3MDNhZjdmZDFmOTIzYmZmY2Y4NWY4MGY1YmMwOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSw1ICsxLDIwIEBACiAyMDE0LTA4LTI0ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNo
aW5ndG9uLmVkdT4KIAorICAgICAgICBXZWIgSW5zcGVjdG9yOiBwdXQgZmVhdHVyZSBmbGFncyBm
b3IgSW5zcGVjdG9yIGRvbWFpbnMgaW4gdGhlIHByb3RvY29sIHNwZWNpZmljYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjAyNworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCAnZmVhdHVyZV9n
dWFyZCcgc2V0dGluZ3MgdG8gd3JhcCBkb21haW5zIHdpdGggRU5BQkxFIG1hY3Jvcy4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIE5vIGJlaGF2aW9yIHdhcyBjaGFuZ2VkLgorCisgICAgICAgICog
aW5zcGVjdG9yL3Byb3RvY29sL0RhdGFiYXNlLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL3By
b3RvY29sL0luZGV4ZWREQi5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9wcm90b2NvbC9SZXBs
YXkuanNvbjoKKworMjAxNC0wOC0yNCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVuYW1lIERPTS5SR0JBIGFuZCByZW1v
dmUgd29ya2Fyb3VuZHMgaW4gdGhlIGJpbmRpbmdzIGdlbmVyYXRvcgogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDI1CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRvci5weQppbmRleCBjNjNlZmFiNDlmM2JmYTcyZTdkMjNlNGExNWQ0NmMzMDFjNGMwZWFhLi4w
Mzc4NGU4YTI1MmJlNTdmODU2NDdjMWNkNjIzYjNlYThiYTkzMTRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdG9yLnB5CkBAIC00NywxMyArNDcsNiBAQCBfUFJJTUlUSVZFX1RPX0NQUF9OQU1FX01BUCA9
IHsKICAgICAnYW55JzogJ0luc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUnCiB9CiAKLSMgRklYTUU6
IFRoaXMgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGEgcHJvcGVydHkgb24gdGhlIGRvbWFpbiBp
biBKU09OLgotX0RPTUFJTl9UT19DUFBfR1VBUkRfTUFQID0gewotICAgICdEYXRhYmFzZSc6ICJF
TkFCTEUoU1FMX0RBVEFCQVNFKSIsCi0gICAgJ0luZGV4ZWREQic6ICJFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkiLAotICAgICdSZXBsYXknOiAiRU5BQkxFKFdFQl9SRVBMQVkpIiwKLX0KLQogX0FM
V0FZU19VUFBFUkNBU0VEX0VOVU1fVkFMVUVfU1VCU1RSSU5HUyA9IHNldChbJ0FQSScsICdDU1Mn
LCAnRE9NJywgJ0hUTUwnLCAnWEhSJywgJ1hNTCddKQogCiAjIFRoZXNlIG9iamVjdHMgYXJlIGJ1
aWx0IG1hbnVhbGx5IGJ5IGNyZWF0aW5nIGFuZCBzZXR0aW5nIEluc3BlY3RvclZhbHVlcy4KQEAg
LTIwOSw3ICsyMDIsNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgIyBNaXNjZWxsYW5lb3VzIHRl
eHQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgd3Jh
cF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCB0ZXh0KToKLSAgICAgICAgZ3VhcmQgPSBf
RE9NQUlOX1RPX0NQUF9HVUFSRF9NQVAuZ2V0KGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAg
Z3VhcmQgPSBkb21haW4uZmVhdHVyZV9ndWFyZAogICAgICAgICBpZiBndWFyZCBpcyBub3QgTm9u
ZToKICAgICAgICAgICAgIGxpbmVzID0gWwogICAgICAgICAgICAgICAgICcjaWYgJXMnICUgZ3Vh
cmQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9tb2RlbHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9tb2RlbHMucHkKaW5kZXggMzg5N2Q2NzYwNDliNjAzNGMxMGQ5YzVlYWFiMTYy
ODA4NTYyYzdhNS4uZWRmZGFlYjRhYjViMTg3MWQwZWYwMDY4ODUyMDRhMDgwMDc5NDQ5MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
bW9kZWxzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL21vZGVscy5weQpAQCAtMzE4LDcgKzMxOCw3IEBAIGNsYXNzIFByb3RvY29sOgogICAg
ICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNp
ZmljYXRpb246IGV2ZW50cyBpcyBub3QgYW4gYXJyYXkiKQogICAgICAgICAgICAgZXZlbnRzLmV4
dGVuZChbc2VsZi5wYXJzZV9ldmVudChldmVudCkgZm9yIGV2ZW50IGluIGpzb25bJ2V2ZW50cydd
XSkKIAotICAgICAgICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihqc29uWydkb21haW4nXSwg
anNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBpc1N1cHBsZW1lbnRhbCwgdHlwZXMsIGNvbW1h
bmRzLCBldmVudHMpKQorICAgICAgICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihqc29uWydk
b21haW4nXSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBqc29uLmdldCgiZmVhdHVyZUd1
YXJkIiksIGlzU3VwcGxlbWVudGFsLCB0eXBlcywgY29tbWFuZHMsIGV2ZW50cykpCiAKICAgICBk
ZWYgcGFyc2VfdHlwZV9kZWNsYXJhdGlvbihzZWxmLCBqc29uKToKICAgICAgICAgY2hlY2tfZm9y
X3JlcXVpcmVkX3Byb3BlcnRpZXMoWydpZCcsICd0eXBlJ10sIGpzb24sICJ0eXBlIikKQEAgLTQ2
OSw5ICs0NjksMTAgQEAgY2xhc3MgUHJvdG9jb2w6CiAKIAogY2xhc3MgRG9tYWluOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBkb21haW5fbmFtZSwgZGVzY3JpcHRpb24sIGlzU3VwcGxlbWVudGFs
LCB0eXBlX2RlY2xhcmF0aW9ucywgY29tbWFuZHMsIGV2ZW50cyk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGRvbWFpbl9uYW1lLCBkZXNjcmlwdGlvbiwgZmVhdHVyZV9ndWFyZCwgaXNTdXBwbGVt
ZW50YWwsIHR5cGVfZGVjbGFyYXRpb25zLCBjb21tYW5kcywgZXZlbnRzKToKICAgICAgICAgc2Vs
Zi5kb21haW5fbmFtZSA9IGRvbWFpbl9uYW1lCiAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBk
ZXNjcmlwdGlvbgorICAgICAgICBzZWxmLmZlYXR1cmVfZ3VhcmQgPSBmZWF0dXJlX2d1YXJkCiAg
ICAgICAgIHNlbGYuaXNfc3VwcGxlbWVudGFsID0gaXNTdXBwbGVtZW50YWwKICAgICAgICAgc2Vs
Zi50eXBlX2RlY2xhcmF0aW9ucyA9IHR5cGVfZGVjbGFyYXRpb25zCiAgICAgICAgIHNlbGYuY29t
bWFuZHMgPSBjb21tYW5kcwpAQCAtNDkyLDcgKzQ5Myw3IEBAIGNsYXNzIERvbWFpbjoKIAogCiBj
bGFzcyBEb21haW5zOgotICAgIEdMT0JBTCA9IERvbWFpbigiIiwgIlRoZSBnbG9iYWwgZG9tYWlu
LCBpbiB3aGljaCBwcmltaXRpdmUgdHlwZXMgYXJlIGltcGxpY2l0bHkgZGVjbGFyZWQuIiwgVHJ1
ZSwgW10sIFtdLCBbXSkKKyAgICBHTE9CQUwgPSBEb21haW4oIiIsICJUaGUgZ2xvYmFsIGRvbWFp
biwgaW4gd2hpY2ggcHJpbWl0aXZlIHR5cGVzIGFyZSBpbXBsaWNpdGx5IGRlY2xhcmVkLiIsIE5v
bmUsIFRydWUsIFtdLCBbXSwgW10pCiAKIAogY2xhc3MgVHlwZURlY2xhcmF0aW9uOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdp
dGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CmluZGV4IGEwOTQyYzM3Yjg2YTNkNGFhZGE5
Nzg2OWM3NWZhNDQwMTIxODk2NzMuLmZkMTk5ZmFjM2VhZjlmYTFkZGI3MDNhM2QyNzNiMDc3NGU3
NDJmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKQEAgLTgzLDcg
KzgzLDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwogCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBw
YXJhbWV0ZXIgJ3NjcmVlbkNvbG9yJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcy4KQEAgLTExNiw5ICsxMTUsNyBAQCBwdWJs
aWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKTsKIH07Ci0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAot
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKQEAgLTEzMiw3ICsxMjksNiBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CiB9OwotI2Vu
ZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgog
CkBAIC0xODMsMTEgKzE3OSw4IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Ci0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KSB7IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCi0jaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKIFBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4g
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQp
KTsKQEAgLTQwMSw3ICszOTQsNiBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogfQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKIH0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgogCkBAIC01NTYsMjIgKzU0OCwxOCBAQCBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIG5hbWVzcGFjZSBUeXBlQnVpbGRlciB7CiAKIC8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiBuYW1lc3BhY2UgRGF0YWJhc2UgewogY2xh
c3MgRXJyb3I7CiBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7CiB9IC8vIERhdGFiYXNlCi0jZW5k
aWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKIC8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9u
cy4KIAogCiAvLyBUeXBlZGVmcy4KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogbmFtZXNwYWNl
IERhdGFiYXNlIHsKIC8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8K
IHR5cGVkZWYgaW50IERhdGFiYXNlSWQ7CiB9IC8vIERhdGFiYXNlCi0jZW5kaWYgLy8gRU5BQkxF
KFNRTF9EQVRBQkFTRSkKIC8vIEVuZCBvZiB0eXBlZGVmcy4KIAogU3RyaW5nIGdldFRlc3RFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CkBAIC01ODEsNyArNTY5LDYgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKICAg
ICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZh
bHVlKSk7CiB9CiAKLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogbmFtZXNwYWNlIERhdGFiYXNl
IHsKIC8qICAqLwogZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKQEAgLTY1OCw3ICs2NDUsNiBA
QCBwdWJsaWM6CiB9OwogCiB9IC8vIERhdGFiYXNlCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRB
QkFTRSkKIAogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IGNkZmIzNWY4ZmU2YjMxMWYwMjZkMTJmODc0
YjFmODI4NTA0ODBmNWIuLjdjN2RkMTlkYjIxYjc0OTRlOTMwOTc5NWJmMWRmNjBjY2EzM2U4OWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1l
dGVycy5qc29uLXJlc3VsdApAQCAtODAsNyArODAsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQogY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVi
bGljOgogICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAnc2NyZWVuQ29sb3InIHdoaWxlIGdl
bmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgpAQCAt
MTAxLDkgKzEwMCw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5JbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKLSNlbmRpZiAvLyBFTkFC
TEUoU1FMX0RBVEFCQVNFKQogCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIGNsYXNzIEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwpAQCAtMTE1LDcgKzExMiw2IEBAIHByaXZhdGU6
CiAgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKICAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogbV9hZ2VudDsKIH07Ci0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAogfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCiAKQEAgLTE2NiwxMSArMTYyLDggQEAgcHJpdmF0ZToKIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CiAKLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOwpAQCAtMzA4LDcgKzMwMSw2IEBAIHZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgY2FsbElkCiAgICAgfQogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoU1FM
X0RBVEFCQVNFKQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKIApAQCAtNDYzLDIyICs0NTUs
MTggQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewogCiAv
LyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogbmFtZXNw
YWNlIERhdGFiYXNlIHsKIGNsYXNzIEVycm9yOwogZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwog
fSAvLyBEYXRhYmFzZQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAvLyBFbmQgb2Yg
Zm9yd2FyZCBkZWNsYXJhdGlvbnMuCiAKIAogLy8gVHlwZWRlZnMuCi0jaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBE
YXRhYmFzZSBvYmplY3QuICovCiB0eXBlZGVmIGludCBEYXRhYmFzZUlkOwogfSAvLyBEYXRhYmFz
ZQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAK
IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwpAQCAtNDg4LDcgKzQ3
Niw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFs
dWUoVCBlbnVtVmFsdWUpCiAgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0
aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwogfQogCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
IG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAvKiAgKi8KIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7
CkBAIC01NjUsNyArNTUyLDYgQEAgcHVibGljOgogfTsKIAogfSAvLyBEYXRhYmFzZQotI2VuZGlm
IC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24tcmVzdWx0CmluZGV4IDk4ZWFjNmIxYjllZjQ1YWZjMmNlYWQ2YWNhZTY3NzYzNTgx
MWUwYWYuLjU3ZjJmNjc2ZmFhYmU2NTE4NmVmZWM1YzZiYjY1ZTY1MDhiZTAxNzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMt
d2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0xODMsNyArMTgzLDYgQEAg
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIAogCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIGNs
YXNzIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBJ
bnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQpAQCAtMTkyLDcgKzE5MSw2IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsKIH07Ci0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAogfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCiAKQEAgLTI0MSw3ICsyMzksNiBAQCBwcml2YXRlOgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiB2b2lkIElu
c3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJh
bWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSogY29u
c3QgdGltZXN0YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBj
b25zdCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29u
c3Qgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcikKIHsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CkBAIC0yODUsNyArMjgyLDYgQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5k
RGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWYKIAogICAg
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKIApAQCAtMzQxLDIzICszMzcsMTkgQEAgbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewogCiAvLyBGb3J3YXJk
IGRlY2xhcmF0aW9ucy4KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogbmFtZXNwYWNlIERhdGFi
YXNlIHsKIGNsYXNzIEVycm9yOwogfSAvLyBEYXRhYmFzZQotI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCiAvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCiAKIAogLy8gVHlwZWRl
ZnMuCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAvKiBV
bmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCiB0eXBlZGVmIFN0cmluZyBE
YXRhYmFzZUlkOwogCiB0eXBlZGVmIFN0cmluZyBQcmltYXJ5Q29sb3JzOwogfSAvLyBEYXRhYmFz
ZQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAK
IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwpAQCAtMzY3LDcgKzM1
OSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFs
dWUoVCBlbnVtVmFsdWUpCiAgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0
aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwogfQogCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
IG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KIGNsYXNzIEVycm9y
IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CkBAIC00MzgsNyArNDI5
LDYgQEAgcHVibGljOgogfTsKIAogfSAvLyBEYXRhYmFzZQotI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCiAKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGMwZGU3Y2M2NmNkMDU3MWFiNDNmOGM5NzA1Yzc5NGQ5
ZjMzYWRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDUyMyBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gTmV0d29yazEuCitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlIiwgW10sIFtd
KTsKKworLy8gTmV0d29yazMuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29yazNEaXNw
YXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJ
bnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yazMiKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
dmVudCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiLCBbXSk7CisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
X2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOworCisjaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQorY2xhc3MgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcqKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB+SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307Cisj
ZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQorCisjaWYgUExBVEZPUk0oV0VCX0NPTU1B
TkRTKQorY2xhc3MgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcios
IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2
YXRlOgorICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2YXRlOgorICAgIEluc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciosIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cit9OworI2Vu
ZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5o
PgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisjaWYgUExBVEZPUk0o
V0VCX0NPTU1BTkRTKQorSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
On5JbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorI2VuZGlm
IC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKKworI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykK
K1Bhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKwor
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAg
ICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMSIpLCB0aGlz
KTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJj
ZSIpCisgICAgICAgIGxvYWRSZXNvdXJjZShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICBl
bHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmco
IiciKSArICJOZXR3b3JrMSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5n
IGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKCZlcnJvcik7CisKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFz
ZSgpLCBlcnJvcik7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3Vh
cmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lm
bmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNp
bmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKKyNpZiBQTEFU
Rk9STShXRUJfRVZFTlRTKQorY2xhc3MgSW5zcGVjdG9yTmV0d29yazNGcm9udGVuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIEluc3BlY3Rvck5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CisgICAg
dm9pZCByZXNvdXJjZUxvYWRlZCgpOworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworfTsKKyNlbmRpZiAvLyBQTEFURk9S
TShXRUJfRVZFTlRTKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
I2lmIFBMQVRGT1JNKFdFQl9FVkVOVFMpCit2b2lkIEluc3BlY3Rvck5ldHdvcmszRnJvbnRlbmRE
aXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJOZXR3
b3JrMy5yZXNvdXJjZUxvYWRlZCIpKTsKKworICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30K
KyNlbmRpZiAvLyBQTEFURk9STShXRUJfRVZFTlRTKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxk
ZXJzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKKy8v
IEZvcndhcmQgZGVjbGFyYXRpb25zLgorI2lmIFBMQVRGT1JNKFdFQl9UWVBFUykKK25hbWVzcGFj
ZSBOZXR3b3JrMiB7CitjbGFzcyBOZXR3b3JrRXJyb3I7Cit9IC8vIE5ldHdvcmsyCisjZW5kaWYg
Ly8gUExBVEZPUk0oV0VCX1RZUEVTKQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgor
CisKKworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1W
YWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0
PGludD4oZW51bVZhbHVlKSk7Cit9CisKKyNpZiBQTEFURk9STShXRUJfVFlQRVMpCituYW1lc3Bh
Y2UgTmV0d29yazIgeworY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9
IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypOZXR3b3JrRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNs
YXNzIE5ldHdvcmtFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVy
dHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9z
ZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImNvZGUi
KSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAg
ICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5ldHdvcmtFcnJvcj4mICgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
TmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5u
b3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPE5l
dHdvcmtFcnJvcj4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0
cjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
UmVmUHRyPE5ldHdvcmtFcnJvcj4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8
TmV0d29ya0Vycm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAg
IC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAgKi8KKyAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVj
dEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307CisKK30gLy8gTmV0d29yazIKKyNlbmRpZiAvLyBQ
TEFURk9STShXRUJfVFlQRVMpCisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gpCisjIyMgRW5k
IEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKK307CisKK1N0cmluZyBnZXRUZXN0RW51
bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1
ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0
LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggODZiZThlZmI1ODExMmFiODM0MGU3MjE0OThjOWRjOGU3
NWU3MzIxNi4uMmQwNDhlYTFkZjc2ZmVkM2JlOTQ3YWJhYjJiMTE3YmI5NWQ5M2MxOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAgLTI3OSw3ICsyNzksNiBAQCBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIG5hbWVzcGFjZSBUeXBlQnVpbGRlciB7CiAKIC8vIEZvcndhcmQg
ZGVjbGFyYXRpb25zLgotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiBuYW1lc3BhY2UgRGF0YWJh
c2UgewogY2xhc3MgRHVtbXlPYmplY3Q7CiBjbGFzcyBFcnJvcjsKQEAgLTI4Nyw3ICsyODYsNiBA
QCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwogY2xhc3MgT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGU7CiBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CiB9IC8vIERhdGFiYXNlCi0j
ZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAogbmFtZXNwYWNlIFRlc3QgewogY2xhc3Mg
UGFyYW1ldGVyQnVuZGxlOwpAQCAtMzA0LDcgKzMwMiw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiAgICAgcmV0dXJu
IGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwog
fQogCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAvKiBE
YXRhYmFzZSBlcnJvci4gKi8KIGNsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0QmFzZSB7CkBAIC02NTIsNyArNjQ5LDYgQEAgcHVibGljOgogfTsKIAogfSAvLyBE
YXRhYmFzZQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKIG5hbWVzcGFjZSBUZXN0
IHsKIGNsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdEJhc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRv
bWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3Y2Y4ZTU4MmY2NWFl
NmZjNjE1NjkyODgyY2IwZjY1NzQ2MDEwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24KQEAgLTAsMCArMSwzNiBAQAorWworeworICAgICJkb21haW4i
OiAiTmV0d29yazEiLAorICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX0NPTU1BTkRT
KSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJs
b2FkUmVzb3VyY2UiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3Vy
Y2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91
dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRv
bWFpbiI6ICJOZXR3b3JrMiIsCisgICAgImZlYXR1cmVHdWFyZCI6ICJQTEFURk9STShXRUJfVFlQ
RVMpIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJOZXR3
b3JrRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBl
IjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9LAor
eworICAgICJkb21haW4iOiAiTmV0d29yazMiLAorICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZP
Uk0oV0VCX0VWRU5UUykiLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJB
IHJlc291cmNlIHdhcyBsb2FkZWQuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RhdGFiYXNlLmpzb24gYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2UuanNvbgppbmRleCBlNmNlMjI4
ZTFjNjRkNzU4ZmIxMDgwM2MxZjFmNzUxZWQ5MjBiZWY3Li42NjJjNzVlYWUyMmEyN2MzZmIxMzIy
YTBkYWU3MDI5ODM4YmFlN2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvRGF0YWJhc2UuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJv
dG9jb2wvRGF0YWJhc2UuanNvbgpAQCAtMSw1ICsxLDYgQEAKIHsKICAgICAiZG9tYWluIjogIkRh
dGFiYXNlIiwKKyAgICAiZmVhdHVyZUd1YXJkIjogIkVOQUJMRShTUUxfREFUQUJBU0UpIiwKICAg
ICAidHlwZXMiOiBbCiAgICAgICAgIHsKICAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIu
anNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgpp
bmRleCA3NTNkOWQyYjNjMWYxMjU3OGQ4ZDY3Y2ExOTE0YTA0YTA3MDg4MzI2Li45NGJiMTgyYjgw
MTEyYzk1NjEwMjYwMGVkOGZjOGQ2ZTY1MGU4MjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5kZXhlZERCLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29uCkBAIC0xLDUgKzEsNiBAQAogewogICAg
ICJkb21haW4iOiAiSW5kZXhlZERCIiwKKyAgICAiZmVhdHVyZUd1YXJkIjogIkVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKSIsCiAgICAgInR5cGVzIjogWwogICAgICAgICB7CiAgICAgICAgICAgICAi
aWQiOiAiRGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzIiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9wcm90b2NvbC9SZXBsYXkuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9wcm90b2NvbC9SZXBsYXkuanNvbgppbmRleCBiZTI2OTg4YzhiMDdjNGRiYTk3Yzk2M2Mz
YzhkNDU2ZWQwNzY3OTM0Li43ZDhmNTY1YTEyMGYyNDk0NWU1NmEzYzg0OGYzNmY5MWQzZmRkNzE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUmVwbGF5Lmpz
b24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1JlcGxheS5qc29uCkBA
IC0xLDYgKzEsNyBAQAogewogICAgICJkb21haW4iOiAiUmVwbGF5IiwKICAgICAiZGVzY3JpcHRp
b24iOiAiQ29udHJvbHMgd2ViIHJlcGxheSwgYW5kIG1hbmFnZXMgcmVjb3JkaW5nIHNlc3Npb25z
IGFuZCBzZWdtZW50cy4iLAorICAgICJmZWF0dXJlR3VhcmQiOiAiRU5BQkxFKFdFQl9SRVBMQVkp
IiwKICAgICAidHlwZXMiOiBbCiAgICAgICAgIHsKICAgICAgICAgICAgICJpZCI6ICJTZXNzaW9u
SWRlbnRpZmllciIsICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgcmVwbGF5IHNlc3Npb24gaWRlbnRp
Zmllci4iLAo=
</data>
<flag name="review"
          id="261761"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>