<?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>144527</bug_id>
          
          <creation_ts>2015-05-02 11:35:59 -0700</creation_ts>
          <short_desc>DFG::LICMPhase shouldn&apos;t hoist type checks unless it knows that the check will succeed at the loop pre-header</short_desc>
          <delta_ts>2016-05-19 14:46:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1091115</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-02 11:35:59 -0700</bug_when>
    <thetext>If a node has a type check - even something like a CheckStructure - then we should
only hoist the node if we know that it will execute on every loop iteration or if we know
that the type check will always succeed at the loop pre-header through some other means
(like looking at prediction propagation results). Otherwise, we might make a mistake like
this:

var o = ...; // sometimes null and sometimes an object with structure S1.
for (...) {
    if (o)
        ... = o.f; // CheckStructure and GetByOffset, which we will currently hoist.
}

When we encounter such code, we&apos;ll hoist the CheckStructure and GetByOffset and then we
will have a recompile. We&apos;ll then end up thinking that the get_by_id needs to be
polymorphic, which is false.

We can counter this by either having a control flow equivalence check, or by consulting
prediction propagation to see if the check would always succeed. Prediction propagation
would not be enough for things like:

var p = ...; // some boolean predicate
var o = {};
if (p)
    o.f = 42;
for (...) {
    if (p)
        ... = o.f;
}

Prediction propagation can&apos;t tell us anything about the structure, and the CheckStructure
will appear to be hoistable because the loop doesn&apos;t clobber structures. The cell check
in the CheckStructure will be hoistable though, since prediction propagation can tell us
that o is always SpecFinalObject. In cases like this, control flow equivalence is the
only effective guard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193884</commentid>
    <comment_count>1</comment_count>
      <attachid>279138</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-17 11:16:36 -0700</bug_when>
    <thetext>Created attachment 279138
it begins!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193940</commentid>
    <comment_count>2</comment_count>
      <attachid>279152</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-17 12:59:35 -0700</bug_when>
    <thetext>Created attachment 279152
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194449</commentid>
    <comment_count>3</comment_count>
      <attachid>279298</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-18 15:20:50 -0700</bug_when>
    <thetext>Created attachment 279298
almost done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194465</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-18 15:44:35 -0700</bug_when>
    <thetext>Not landing this yet because it&apos;s a massive regression on imaging-gaussian-blur.  Basically we need to be somewhat careful about what we consider to be too unsafe to hoist.  Perhaps on the first compilation we should just allow everything to be hoisted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194470</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-18 15:49:55 -0700</bug_when>
    <thetext>I think that if nothing that was hoisted has ever exited then we should allow ourselves to hoist without worrying.

If anything that was hoisted has exited then we should be more careful about hoisting.

So, I think that we want something in the exit profile that:
1) Makes sure that hoisted exits don&apos;t contribute to the normal exit counting.
2) Makes sure that we know if hoisted exits had ever happened.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194641</commentid>
    <comment_count>6</comment_count>
      <attachid>279348</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-18 22:19:17 -0700</bug_when>
    <thetext>Created attachment 279348
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194787</commentid>
    <comment_count>7</comment_count>
      <attachid>279394</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-19 09:46:46 -0700</bug_when>
    <thetext>Created attachment 279394
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194791</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-19 09:49:31 -0700</bug_when>
    <thetext>Attachment 279394 did not pass style-queue:


ERROR: Source/WTF/wtf/BackwardsGraph.h:174:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGMayExit.cpp:118:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOSRExit.cpp:106:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGControlEquivalenceAnalysis.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 5 in 41 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194794</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-19 09:57:01 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Attachment 279394 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/WTF/wtf/BackwardsGraph.h:174:  Place brace on its own line for
&gt; function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:35:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGMayExit.cpp:118:  Place brace on its own
&gt; line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/ftl/FTLOSRExit.cpp:106:  Wrong number of spaces
&gt; before statement. (expected: 8)  [whitespace/indent] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGControlEquivalenceAnalysis.h:31: 
&gt; Alphabetical sorting problem.  [build/include_order] [4]
&gt; Total errors found: 5 in 41 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

I fixed the style errors that were real style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194950</commentid>
    <comment_count>10</comment_count>
      <attachid>279394</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-19 14:16:59 -0700</bug_when>
    <thetext>Comment on attachment 279394
the patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        This adds a control flow equivalence analysis (called ControlEquivalenceAnalysis) based on
&gt; +        dominator analysis over the backwards CFG. LICM now uses it to become more conservative

Worth having a sentence or two here explaining control flow equivalence for posterity.

&gt; Source/JavaScriptCore/dfg/DFGBackwardsDominators.h:43
&gt; +        : WTF::Dominators&lt;BackwardsCFG&gt;(graph.ensureBackwardsCFG())

Nice!
Pretty sweet that we can just do this with other graphs too.

&gt; Source/WTF/wtf/BackwardsGraph.h:204
&gt; +    template&lt;typename T&gt;
&gt; +    Map&lt;T&gt; newMap() { return Map&lt;T&gt;(m_graph); }

Nit: Some of these can probably be private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194952</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-19 14:18:47 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 279394 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=279394&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:9
&gt; &gt; +        This adds a control flow equivalence analysis (called ControlEquivalenceAnalysis) based on
&gt; &gt; +        dominator analysis over the backwards CFG. LICM now uses it to become more conservative
&gt; 
&gt; Worth having a sentence or two here explaining control flow equivalence for
&gt; posterity.

Will do.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGBackwardsDominators.h:43
&gt; &gt; +        : WTF::Dominators&lt;BackwardsCFG&gt;(graph.ensureBackwardsCFG())
&gt; 
&gt; Nice!
&gt; Pretty sweet that we can just do this with other graphs too.
&gt; 
&gt; &gt; Source/WTF/wtf/BackwardsGraph.h:204
&gt; &gt; +    template&lt;typename T&gt;
&gt; &gt; +    Map&lt;T&gt; newMap() { return Map&lt;T&gt;(m_graph); }
&gt; 
&gt; Nit: Some of these can probably be private.

Actually newMap() is part of the API that a Graph must provide to Dominators, so it has to be public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194957</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-19 14:24:58 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/201182</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194962</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-05-19 14:32:51 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Landed in http://trac.webkit.org/changeset/201182

It broke the build everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194975</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-19 14:41:54 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Landed in http://trac.webkit.org/changeset/201182
&gt; 
&gt; It broke the build everywhere.

Fix coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194978</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-19 14:46:38 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; Landed in http://trac.webkit.org/changeset/201182
&gt; &gt; 
&gt; &gt; It broke the build everywhere.
&gt; 
&gt; Fix coming.

This was caused by an idiotic last-minute change where I hoisted a string constant into a constant variable.  I forgot to rebuild and retest.

I landed a speculative fix as soon as I realized my mistake: http://trac.webkit.org/changeset/201184

Then I landed a proper fix once my build caught up and actually compiled the code: http://trac.webkit.org/changeset/201185

If this does not fix it then I&apos;m ready to roll it out.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279138</attachid>
            <date>2016-05-17 11:16:36 -0700</date>
            <delta_ts>2016-05-17 12:59:35 -0700</delta_ts>
            <desc>it begins!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22859</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzQ0ZHLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNDRkcuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzQ0ZHLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0JhY2t3YXJkc0NGR19oCisjZGVmaW5l
IERGR0JhY2t3YXJkc0NGR19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0NGRy5oIgorI2luY2x1ZGUgPHd0Zi9CYWNrd2FyZHNHcmFwaC5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEJhY2t3YXJkc0NGRyA6IHB1YmxpYyBCYWNrd2Fy
ZHNHcmFwaDxDRkc+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYWNrd2FyZHNDRkcpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEJhY2t3YXJkc0NGRyhH
cmFwaCYgZ3JhcGgpCisgICAgICAgIDogQmFja3dhcmRzR3JhcGg8Q0ZHPigqZ3JhcGgubV9jZmcp
CisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQmFja3dhcmRzQ0ZHX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNEb21pbmF0b3JzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNEb21pbmF0
b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3
YXJkc0RvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQmFja3dh
cmRzRG9taW5hdG9yc19oCisjZGVmaW5lIERGR0JhY2t3YXJkc0RvbWluYXRvcnNfaAorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYWNrd2FyZHNDRkcuaCIKKyNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEJhY2t3YXJkc0RvbWluYXRvcnMg
OiBwdWJsaWMgV1RGOjpEb21pbmF0b3JzPEJhY2t3YXJkc0NGRz4geworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKERvbWluYXRvcnMpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIERvbWluYXRvcnMoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFdURjo6RG9taW5h
dG9yczxCYWNrd2FyZHNDRkc+KGdyYXBoLmVuc3VyZUJhY2t3YXJkc0NGRygpKQorICAgIHsKKyAg
ICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0RvbWluYXRvcnNfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAyMDEwMTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsMTUgKzI1NSw2
IEBAIGVudW0gY2xhc3MgUGxhblN0YWdlIHsKICAgICBBZnRlckZpeHVwCiB9OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotYm9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBVIHJp
Z2h0KQotewotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbGVmdCA9IHJpZ2h0OwotICAgIHJldHVybiB0cnVlOwotfQotCiAvLyBJZiBwb3NzaWJsZSwg
dGhpcyB3aWxsIGFjcXVpcmUgYSBsb2NrIHRvIG1ha2Ugc3VyZSB0aGF0IGlmIG11bHRpcGxlIHRo
cmVhZHMKIC8vIHN0YXJ0IGNyYXNoaW5nIGF0IHRoZSBzYW1lIHRpbWUsIHlvdSBnZXQgY29oZXJl
bnQgZHVtcCBvdXRwdXQuIFVzZSB0aGlzIG9ubHkKIC8vIHdoZW4geW91J3JlIGZvcmNpbmcgYSBj
cmFzaCB3aXRoIGRpYWdub3N0aWNzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29udHJvbEVxdWl2YWxlbmNlQW5h
bHlzaXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ29udHJvbEVxdWl2YWxl
bmNlQW5hbHlzaXNfaAorI2RlZmluZSBERkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpc19oCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKKyNpbmNs
dWRlICJERkdCYWNrd2FyZHNEb21pbmF0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNp
cyhHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogbV9kb21pbmF0b3JzKGdyYXBoLmVuc3VyZURvbWlu
YXRvcnMoKSkKKyAgICAgICAgLCBtX2JhY2t3YXJkc0RvbWluYXRvcnMoZ3JhcGguZW5zdXJlQmFj
a3dhcmRzRG9taW5hdG9ycygpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyByZXR1
cm5zIHRydWUgaWZmOgorICAgIC8vIC0gSWYgYiBleGVjdXRlcyB0aGVuIGEgbXVzdCBoYXZlIGV4
ZWN1dGVkIChhIGRvbWluYXRlcyBiKS4KKyAgICAvLyAtIElmIGEgZXhlY3V0ZXMgdGhlbiBiIHdp
bGwgZXhlY3V0ZSwgbm90IGNvdW50aW5nIGV4aXRzIChiIGJhY2t3YXJkcy1kb21pbmF0ZXMgYSku
CisgICAgYm9vbCBhcmVFcXVpdmFsZW50KEJhc2ljQmxvY2sqIGEsIEJhc2ljQmxvY2sqIGIpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9kb21pbmF0b3JzLmRvbWluYXRlcyhhLCBiKQorICAgICAg
ICAgICAgJiYgbV9iYWNrd2FyZHNEb21pbmF0b3JzLmRvbWluYXRlcyhiLCBhKTsKKyAgICB9Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDIwMTAxOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiwxMCArMzIsMTMgQEAKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJ
VFR5cGUuaCIKKyNpbmNsdWRlICJERkdCYWNrd2FyZHNEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAi
REZHQmFja3dhcmRzQ0ZHLmgiCiAjaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlzdC5oIgorI2luY2x1
ZGUgIkRGR0NGRy5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKICNpbmNsdWRlICJERkdD
bG9iYmVyc0V4aXRTdGF0ZS5oIgotI2luY2x1ZGUgIkRGR0NGRy5oIgorI2luY2x1ZGUgIkRGR0Nv
bnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgiCiAjaW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgog
I2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdNYXlFeGl0LmgiCkBAIC03NTMs
NiArNzU2LDkgQEAgdm9pZCBHcmFwaDo6aW52YWxpZGF0ZUNGRygpCiAgICAgbV9kb21pbmF0b3Jz
ID0gbnVsbHB0cjsKICAgICBtX25hdHVyYWxMb29wcyA9IG51bGxwdHI7CiAgICAgbV9wcmVQb3N0
TnVtYmVyaW5nID0gbnVsbHB0cjsKKyAgICBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzID0g
bnVsbHB0cjsKKyAgICBtX2JhY2t3YXJkc0RvbWluYXRvcnMgPSBudWxscHRyOworICAgIG1fYmFj
a3dhcmRzQ0ZHID0gbnVsbHB0cjsKIH0KIAogdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2Fs
KEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9jaywgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEsIE5vZGUqIG5ld0dldExvY2FsKQpAQCAtMTQy
NiwyMyArMTQzMiw0NyBAQCB2b2lkIEdyYXBoOjpoYW5kbGVBc3NlcnRpb25GYWlsdXJlKAogICAg
IGNyYXNoKCp0aGlzLCB0b0NTdHJpbmcoIldoaWxlIGhhbmRsaW5nIGJsb2NrICIsIHBvaW50ZXJE
dW1wKGJsb2NrKSwgIlxuXG4iKSwgZmlsZSwgbGluZSwgZnVuY3Rpb24sIGFzc2VydGlvbik7CiB9
CiAKLXZvaWQgR3JhcGg6OmVuc3VyZURvbWluYXRvcnMoKQorRG9taW5hdG9ycyYgR3JhcGg6OmVu
c3VyZURvbWluYXRvcnMoKQogewogICAgIGlmICghbV9kb21pbmF0b3JzKQogICAgICAgICBtX2Rv
bWluYXRvcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPERvbWluYXRvcnM+KCp0aGlzKTsKKyAgICByZXR1
cm4gKm1fZG9taW5hdG9yczsKIH0KIAotdm9pZCBHcmFwaDo6ZW5zdXJlUHJlUG9zdE51bWJlcmlu
ZygpCitQcmVQb3N0TnVtYmVyaW5nJiBHcmFwaDo6ZW5zdXJlUHJlUG9zdE51bWJlcmluZygpCiB7
CiAgICAgaWYgKCFtX3ByZVBvc3ROdW1iZXJpbmcpCiAgICAgICAgIG1fcHJlUG9zdE51bWJlcmlu
ZyA9IHN0ZDo6bWFrZV91bmlxdWU8UHJlUG9zdE51bWJlcmluZz4oKnRoaXMpOworICAgIHJldHVy
biAqbV9wcmVQb3N0TnVtYmVyaW5nOwogfQogCi12b2lkIEdyYXBoOjplbnN1cmVOYXR1cmFsTG9v
cHMoKQorTmF0dXJhbExvb3BzJiBHcmFwaDo6ZW5zdXJlTmF0dXJhbExvb3BzKCkKIHsKICAgICBl
bnN1cmVEb21pbmF0b3JzKCk7CiAgICAgaWYgKCFtX25hdHVyYWxMb29wcykKICAgICAgICAgbV9u
YXR1cmFsTG9vcHMgPSBzdGQ6Om1ha2VfdW5pcXVlPE5hdHVyYWxMb29wcz4oKnRoaXMpOworICAg
IHJldHVybiAqbV9uYXR1cmFsTG9vcHM7Cit9CisKK0JhY2t3YXJkc0NGRyYgR3JhcGg6OmVuc3Vy
ZUJhY2t3YXJkc0NGRygpCit7CisgICAgaWYgKCFtX2JhY2t3YXJkc0NGRykKKyAgICAgICAgbV9i
YWNrd2FyZHNDRkcgPSBzdGQ6Om1ha2VfdW5pcXVlPEJhY2t3YXJkc0NGRz4oKnRoaXMpOworICAg
IHJldHVybiAqbV9iYWNrd2FyZHNDRkc7Cit9CisKK0JhY2t3YXJkc0RvbWluYXRvcnMmIEdyYXBo
OjplbnN1cmVCYWNrd2FyZHNEb21pbmF0b3JzKCkKK3sKKyAgICBpZiAoIW1fYmFja3dhcmRzRG9t
aW5hdG9ycykKKyAgICAgICAgbV9iYWNrd2FyZHNEb21pbmF0b3JzID0gc3RkOjptYWtlX3VuaXF1
ZTxCYWNrd2FyZHNEb21pbmF0b3JzPigqdGhpcyk7CisgICAgcmV0dXJuICptX2JhY2t3YXJkc0Rv
bWluYXRvcnM7Cit9CisKK0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzJiBHcmFwaDo6ZW5zdXJl
Q29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMoKQoreworICAgIHJldHVybiAoIW1fY29udHJvbEVx
dWl2YWxlbmNlQW5hbHlzaXMpCisgICAgICAgIG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMg
PSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzPigqdGhpcyk7Cisg
ICAgcmV0dXJuICptX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzOwogfQogCiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9y
KE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZp
c2lvbiAyMDEwMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDEwIEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIAogbmFtZXNw
YWNlIERGRyB7CiAKK2NsYXNzIEJhY2t3YXJkc0NGRzsKK2NsYXNzIEJhY2t3YXJkc0RvbWluYXRv
cnM7CiBjbGFzcyBDRkc7CitjbGFzcyBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKIGNsYXNz
IERvbWluYXRvcnM7CiBjbGFzcyBOYXR1cmFsTG9vcHM7CiBjbGFzcyBQcmVQb3N0TnVtYmVyaW5n
OwpAQCAtODAwLDkgKzgwMywxMiBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyRW5h
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzRGVidWdnZXJFbmFibGVkOyB9CiAKLSAgICB2b2lk
IGVuc3VyZURvbWluYXRvcnMoKTsKLSAgICB2b2lkIGVuc3VyZVByZVBvc3ROdW1iZXJpbmcoKTsK
LSAgICB2b2lkIGVuc3VyZU5hdHVyYWxMb29wcygpOworICAgIERvbWluYXRvcnMmIGVuc3VyZURv
bWluYXRvcnMoKTsKKyAgICBQcmVQb3N0TnVtYmVyaW5nJiBlbnN1cmVQcmVQb3N0TnVtYmVyaW5n
KCk7CisgICAgTmF0dXJhbExvb3BzJiBlbnN1cmVOYXR1cmFsTG9vcHMoKTsKKyAgICBCYWNrd2Fy
ZHNDRkcmIGVuc3VyZUJhY2t3YXJkc0NGRygpOworICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGVu
c3VyZUJhY2t3YXJkc0RvbWluYXRvcnMoKTsKKyAgICBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNp
cyYgZW5zdXJlQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMoKTsKIAogICAgIC8vIFRoaXMgZnVu
Y3Rpb24gb25seSBtYWtlcyBzZW5zZSB0byBjYWxsIGFmdGVyIGJ5dGVjb2RlIHBhcnNpbmcKICAg
ICAvLyBiZWNhdXNlIGl0IHF1ZXJpZXMgdGhlIG1faGFzRXhjZXB0aW9uSGFuZGxlcnMgYm9vbGVh
biB3aG9zZSB2YWx1ZQpAQCAtODc5LDYgKzg4NSw5IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UHJlUG9zdE51bWJlcmluZz4gbV9wcmVQb3N0TnVtYmVyaW5nOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxOYXR1cmFsTG9vcHM+IG1fbmF0dXJhbExvb3BzOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxDRkc+IG1fY2ZnOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNDRkc+IG1fYmFja3dh
cmRzQ0ZHOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNEb21pbmF0b3JzPiBtX2JhY2t3
YXJkc0RvbWluYXRvcnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xFcXVpdmFsZW5jZUFu
YWx5c2lzPiBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzOwogICAgIHVuc2lnbmVkIG1fbG9j
YWxWYXJzOwogICAgIHVuc2lnbmVkIG1fbmV4dE1hY2hpbmVMb2NhbDsKICAgICB1bnNpZ25lZCBt
X3BhcmFtZXRlclNsb3RzOwpJbmRleDogU291cmNlL1dURi93dGYvQmFja3dhcmRzR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWNrd2FyZHNHcmFwaC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dURi93dGYvQmFja3dhcmRzR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDI5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFdURl9CYWNrd2FyZHNHcmFwaF9oCisjZGVmaW5lIFdURl9CYWNrd2FyZHNH
cmFwaF9oCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9HcmFw
aE5vZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgorY2xhc3MgQmFja3dhcmRzR3Jh
cGggeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhY2t3YXJkc0NGRyk7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAgICBjbGFzcyBOb2RlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIE5vZGUodHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9kZSA9IHR5cGVuYW1lIEdy
YXBoOjpOb2RlKCkpCisgICAgICAgICAgICA6IG1fbm9kZShub2RlKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBzdGF0aWMgTm9kZSByb290KCkKKyAgICAgICAgeworICAgICAgICAg
ICAgTm9kZSByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQubV9ub2RlID0gMDsKKyAgICAgICAg
ICAgIHJlc3VsdC5tX2lzUm9vdCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE5vZGUmIG90aGVyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9ub2RlID09IG90aGVyLm1fbm9k
ZQorICAgICAgICAgICAgICAgICYmIG1faXNSb290ID09IG90aGVyLm1faXNSb290OworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE5vZGUmIG90aGVyKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAg
IH0KKworICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRo
aXMgIT0gTm9kZSgpOyB9CisKKyAgICAgICAgYm9vbCBpc1Jvb3QoKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9pc1Jvb3Q7CisgICAgICAgIH0KKworICAgICAgICB0eXBl
bmFtZSBHcmFwaDo6Tm9kZSBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBtX25vZGU7CisgICAgICAgIGJv
b2wgbV9pc1Jvb3QgeyBmYWxzZSB9OworICAgIH07CisKKyAgICBjbGFzcyBTZXQgeworICAgIHB1
YmxpYzoKKyAgICAgICAgU2V0KCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBib29sIGFkZChjb25zdCBOb2RlJiBub2RlKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobm9kZS5pc1Jvb3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hlY2tBbmRTZXQobV9o
YXNSb290LCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBtX3NldC5hZGQobm9kZS5ub2RlKCkp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCByZW1vdmUoY29uc3QgTm9kZSYgbm9kZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUuaXNSb290KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGNoZWNrQW5kU2V0KG1faGFzUm9vdCwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJu
IG1fc2V0LnJlbW92ZShub2RlLm5vZGUoKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGNv
bnRhaW5zKGNvbnN0IE5vZGUmIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2Rl
LmlzUm9vdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2hhc1Jvb3Q7CisgICAgICAgICAg
ICByZXR1cm4gbV9zZXQuY29udGFpbnMobm9kZS5ub2RlKCkpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIG91dC5wcmludCgie2hhc1Jvb3QgPSAiLCBtX2hhc1Jvb3QsICIsIHNldCA9ICIsIG1fc2V0
LCAifSIpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVu
YW1lIEdyYXBoOjpTZXQgbV9zZXQ7CisgICAgICAgIGJvb2wgbV9oYXNSb290IHsgZmFsc2UgfTsK
KyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBNYXAgeworICAg
IHB1YmxpYzoKKyAgICAgICAgTWFwKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAgIDogbV9tYXAo
Z3JhcGgubmV3TWFwKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xl
YXIoKQorICAgICAgICB7CisgICAgICAgICAgICBtX21hcC5jbGVhcigpOworICAgICAgICAgICAg
bV9yb290ID0gVCgpOworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX21hcC5zaXplKCkgKyAxOyB9CisKKyAgICAgICAgVCYgb3BlcmF0b3JbXShzaXpl
X3QgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghaW5kZXgpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fcm9vdDsKKyAgICAgICAgICAgIHJldHVybiBtX21hcFtpbmRleCAtIDFd
OworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoKmNvbnN0X2Nhc3Q8TWFwKj4o
dGhpcykpW2luZGV4XTsKKyAgICAgICAgfQorCisgICAgICAgIFQmIG9wZXJhdG9yW10oY29uc3Qg
Tm9kZSYgbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUuaXNSb290KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fcm9vdDsKKyAgICAgICAgICAgIHJldHVybiBtX21hcFtu
b2RlLm5vZGUoKV07CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBUJiBvcGVyYXRvcltdKGNv
bnN0IE5vZGUmIG5vZGUpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoKmNv
bnN0X2Nhc3Q8TWFwKj4odGhpcykpW25vZGVdOworICAgICAgICB9CisgICAgICAgIAorICAgIHBy
aXZhdGU6CisgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpNYXA8VD4gbV9tYXA7CisgICAgICAgIFQg
bV9yb290OworICAgIH07CisKKyAgICB0eXBlZGVmIFZlY3RvcjxOb2RlLCA0PiBMaXN0OworCisg
ICAgQmFja3dhcmRzR3JhcGgoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgp
CisgICAgeworICAgICAgICBHcmFwaFdvcmtsaXN0PHR5cGVuYW1lIEdyYXBoOjpOb2RlLCB0eXBl
bmFtZSBHcmFwaDo6U2V0PiB3b3JrbGlzdDsKKworICAgICAgICBhdXRvIGFkZFJvb3RTdWNjZXNz
b3IgPSBbJl0gKHR5cGVuYW1lIEdyYXBoOjpOb2RlIG5vZGUpIHsKKyAgICAgICAgICAgIGlmICh3
b3JrbGlzdC5wdXNoKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgbV9yb290U3VjY2Vzc29yTGlz
dC5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICAgICAgbV9yb290U3VjY2Vzc29yU2V0LnNldChu
b2RlKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9kZSA9
IHdvcmtsaXN0LnBvcCgpKQorICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoQWxsKGdy
YXBoLnByZWRlY2Vzc29ycyhub2RlKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdyYXBoLm51bU5vZGVzKCk7ICsraSkgewor
ICAgICAgICAgICAgaWYgKHR5cGVuYW1lIEdyYXBoOjpOb2RlIG5vZGUgPSBncmFwaC5ub2RlKGkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFncmFwaC5zdWNjZXNzb3JzKG5vZGUpLnNpemUoKSkK
KyAgICAgICAgICAgICAgICAgICAgYWRkUm9vdFN1Y2Nlc3Nvcihub2RlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlcmUgd2lsbCBiZSBz
b21lIG5vZGVzIGluIHRoZSBncmFwaCB0aGF0IGFyZW4ndCBrbm93biB0byB0aGUgd29ya2xpc3Qu
IFdlCisgICAgICAgIC8vIGNvdWxkIGFkZCBhbnkgb3IgYWxsIG9mIHRoZW0gdG8gdGhlIHJvb3Qg
c3VjY2Vzc29ycyBsaXN0LiBBZGRpbmcgYWxsIG9mIHRoZW0gd291bGQgYmUgYSBiYWQKKyAgICAg
ICAgLy8gcGVzc2ltaXNhdGlvbi4gSWRlYWxseSB3ZSB3b3VsZCBwaWNrIHRoZSBvbmVzIHRoYXQg
aGF2ZSBiYWNrd2FyZCBlZGdlcyBidXQgbm8gZm9yd2FyZAorICAgICAgICAvLyBlZGdlcy4gVGhh
dCB3b3VsZCByZXF1aXJlIHRoaW5raW5nLCBzbyB3ZSBqdXN0IHVzZSBhIHJvdWdoIGhldXJpc3Rp
YzogYWRkIHRoZSBoaWdoZXN0CisgICAgICAgIC8vIG51bWJlcmVkIG5vZGVzIGZpcnN0LCB3aGlj
aCBpcyB0b3RhbGx5IGZpbmUgaWYgdGhlIGlucHV0IHByb2dyYW0gaXMgYWxyZWFkeSBzb3J0ZWQg
bmljZWx5LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5udW1Ob2RlcygpOyBpLS07
KSB7CisgICAgICAgICAgICBpZiAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9kZSA9IGdyYXBoLm5v
ZGUoaSkpCisgICAgICAgICAgICAgICAgYWRkUm9vdFN1Y2Nlc3Nvcihub2RlKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIE5vZGU6OnJvb3QoKTsgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4gTWFw
PFQ+KG1fZ3JhcGgpOyB9CisKKyAgICBMaXN0IHN1Y2Nlc3NvcnMoY29uc3QgTm9kZSYgbm9kZSkK
KyAgICB7CisgICAgICAgIGlmIChub2RlLmlzUm9vdCgpKQorICAgICAgICAgICAgcmV0dXJuIG1f
cm9vdFN1Y2Nlc3Nvckxpc3Q7CisgICAgICAgIExpc3QgcmVzdWx0OworICAgICAgICBmb3IgKHR5
cGVuYW1lIEdyYXBoOjpOb2RlIHByZWRlY2Vzc29yIDogbV9ncmFwaC5wcmVkZWNlc3NvcnMobm9k
ZS5ub2RlKCkpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgTGlzdCBwcmVkZWNlc3NvcnMoY29uc3Qg
Tm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLmlzUm9vdCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgICAgICBMaXN0IHJlc3VsdDsKKyAgICAgICAgCisgICAgICAg
IGlmIChtX3Jvb3RTdWNjZXNzb3JTZXQuY29udGFpbnMobm9kZS5ub2RlKCkpKQorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChOb2RlOjpyb290KCkpOworCisgICAgICAgIGZvciAodHlwZW5hbWUg
R3JhcGg6Ok5vZGUgc3VjY2Vzc29yIDogbV9ncmFwaC5zdWNjZXNzb3JzKG5vZGUubm9kZSgpKSkK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3VjY2Vzc29yKTsKKworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGluZGV4KGNvbnN0IE5vZGUmIG5vZGUpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAobm9kZS5pc1Jvb3QoKSkKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gbV9ncmFwaC5pbmRleChub2RlLm5vZGUoKSkgKyAxOworICAg
IH0KKworICAgIE5vZGUgbm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghaW5kZXgpCisgICAgICAgICAgICByZXR1cm4gTm9kZTo6cm9vdCgpOworICAgICAgICBy
ZXR1cm4gbV9ncmFwaC5ub2RlKGluZGV4IC0gMSk7CisgICAgfQorCisgICAgdW5zaWduZWQgbm9k
ZU5vZGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2dyYXBoLnNpemUoKSArIDE7
CisgICAgfQorCisgICAgQ1N0cmluZyBkdW1wKE5vZGUgbm9kZSkgY29uc3QKKyAgICB7CisgICAg
ICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAg
ICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS5pc1Jvb3QoKSkK
KyAgICAgICAgICAgIG91dC5wcmludCgicm9vdCIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBvdXQucHJpbnQobV9ncmFwaC5kdW1wKG5vZGUubm9kZSgpKSk7CisgICAgICAgIHJldHVybiBv
dXQudG9DU3RyaW5nKCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTm9kZXMo
KTsgKytpKSB7CisgICAgICAgICAgICBOb2RlIG5vZGUgPSB0aGlzLT5ub2RlKGkpOworICAgICAg
ICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
b3V0LnByaW50KGR1bXAobm9kZSksICI6XG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAg
IFByZWRzOiAiKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgICAg
IGZvciAoTm9kZSBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycyhub2RlKSkKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIGR1bXAocHJlZGVjZXNzb3IpKTsKKyAgICAgICAgICAgIG91
dC5wcmludCgiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgIFN1Y2NzOiAiKTsKKyAg
ICAgICAgICAgIGNvbW1hID0gQ29tbWFQcmludGVyKCk7CisgICAgICAgICAgICBmb3IgKE5vZGUg
c3VjY2Vzc29yIDogc3VjY2Vzc29ycyhub2RlKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIGR1bXAoc3VjY2Vzc29yKSk7CisgICAgICAgICAgICBvdXQucHJpbnQoIlxuIik7Cisg
ICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgTGlz
dCBtX3Jvb3RTdWNjZXNzb3JzOworICAgIHR5cGVuYW1lIEdyYXBoOjpTZXQgbV9yb290U3VjY2Vz
c29yU2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6QmFja3dhcmRz
R3JhcGg7CisKKyNlbmRpZiAvLyBXVEZfQmFja3dhcmRzR3JhcGhfaAorCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9Eb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRG9taW5h
dG9ycy5oCShyZXZpc2lvbiAyMDEwMTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0b3JzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIAogICAgICAgICAv
LyBQbGFpbiBzdGFjay1iYXNlZCB3b3JrbGlzdCBiZWNhdXNlIHdlIGFyZSBndWFyYW50ZWVkIHRv
IHNlZSBlYWNoIGJsb2NrIGV4YWN0bHkgb25jZSBhbnl3YXkuCiAgICAgICAgIFZlY3RvcjxHcmFw
aE5vZGVXaXRoT3JkZXI8dHlwZW5hbWUgR3JhcGg6Ok5vZGU+PiB3b3JrbGlzdDsKLSAgICAgICAg
d29ya2xpc3QuYXBwZW5kKEdyYXBoTm9kZVdpdGhPcmRlcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZT4o
bV9ncmFwaC5ub2RlKDApLCBHcmFwaFZpc2l0T3JkZXI6OlByZSkpOworICAgICAgICB3b3JrbGlz
dC5hcHBlbmQoR3JhcGhOb2RlV2l0aE9yZGVyPHR5cGVuYW1lIEdyYXBoOjpOb2RlPihtX2dyYXBo
LnJvb3QoKSwgR3JhcGhWaXNpdE9yZGVyOjpQcmUpKTsKICAgICAgICAgd2hpbGUgKCF3b3JrbGlz
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEdyYXBoTm9kZVdpdGhPcmRlcjx0eXBlbmFtZSBH
cmFwaDo6Tm9kZT4gaXRlbSA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CiAgICAgICAgICAgICBzd2l0
Y2ggKGl0ZW0ub3JkZXIpIHsKQEAgLTM0Nyw3ICszNDcsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgLy8gb2Ygbm90IG5vdGljaW5nIEEtPkMgdW50aWwgd2UncmUgZG9uZSBwcm9jZXNzaW5nIEIu
CiAKICAgICAgICAgICAgIEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8dHlwZW5hbWUgR3JhcGg6
Ok5vZGUsIHVuc2lnbmVkLCB0eXBlbmFtZSBHcmFwaDo6U2V0PiB3b3JrbGlzdDsKLSAgICAgICAg
ICAgIHdvcmtsaXN0LnB1c2gobV9ncmFwaC5ub2RlKDApLCAwKTsKKyAgICAgICAgICAgIHdvcmts
aXN0LnB1c2gobV9ncmFwaC5yb290KCksIDApOwogICAgICAgICAKICAgICAgICAgICAgIHdoaWxl
IChHcmFwaE5vZGVXaXRoPHR5cGVuYW1lIEdyYXBoOjpOb2RlLCB1bnNpZ25lZD4gaXRlbSA9IHdv
cmtsaXN0LnBvcCgpKSB7CiAgICAgICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxv
Y2sgPSBpdGVtLm5vZGU7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkocmV2aXNpb24gMjAxMDE4
KQorKysgU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDcgKzU2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pbXBsKG1fYXJnLCBzdGQ6OmZv
cndhcmQ8UGFzc2VkQXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CiAgICAgfQogCi1wcml2
YXRlOgorcHJvdGVjdGVkOgogICAgIFJlc3VsdFR5cGUgKCptX2ltcGwpKHZvaWQqIGFyZywgQXJn
dW1lbnRUeXBlcy4uLik7CiAgICAgdm9pZCAqbV9hcmc7CiB9OwpAQCAtNzAsNiArNzAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMu
Li4pPihpbXBsRnVuY3Rpb24sIHRoaXMpCiAgICAgICAgICwgbV9mdW5jdG9yKHN0ZDo6Zm9yd2Fy
ZDxQYXNzZWRGdW5jdG9yPihmdW5jdG9yKSkKICAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fYXJnID09IHRoaXMpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJh
cy5oCShyZXZpc2lvbiAyMDEwMTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjk5LDYgKzI5OSwxNSBAQCBSZXN1bHRUeXBlIGNhbGxTdGF0ZWxl
c3NMYW1iZGEoQXJndW1lbnRUCiAgICAgcmV0dXJuICgqYml0d2lzZV9jYXN0PEZ1bmMqPihkYXRh
KSkoc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOwogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorYm9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBV
IHJpZ2h0KQoreworICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgbGVmdCA9IHJpZ2h0OworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIAogLy8gVGhpcyB2ZXJzaW9uIG9mIHBsYWNlbWVudCBuZXcgb21pdHMgYSAwIGNoZWNr
Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279152</attachid>
            <date>2016-05-17 12:59:35 -0700</date>
            <delta_ts>2016-05-18 15:20:50 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>47321</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDEwMzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTk5OSw2ICsxOTk5LDEwIEBACiAJCURDNjA1QjYwMUNF
MjZFQTcwMDU5MzcxOCAvKiBQcm9maWxlclVJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gREM2MDVCNUMxQ0UyNkU5ODAwNTkzNzE4IC8qIFByb2ZpbGVy
VUlELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
REM3OTk3ODMxQ0RFOUZBMDAwNEQ0QTA5IC8qIFRhZ1JlZ2lzdGVyc01vZGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNzk5NzgyMUNERTlGOUUwMDRE
NEEwOSAvKiBUYWdSZWdpc3RlcnNNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJREM3OTk3ODQxQ0RFOUZBMjAwNEQ0QTA5IC8qIFRhZ1JlZ2lz
dGVyc01vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gREM3OTk3ODExQ0RFOUY5RTAwNEQ0QTA5IC8qIFRhZ1JlZ2lzdGVyc01vZGUuY3BwICovOyB9
OworCQlEQ0VFMjIwOTFDRUI5ODk1MDAwQzIzOTYgLyogREZHQmFja3dhcmRzQ0ZHLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQ0VFMjIwNjFDRUI5ODkw
MDAwQzIzOTYgLyogREZHQmFja3dhcmRzQ0ZHLmggKi87IH07CisJCURDRUUyMjBBMUNFQjk4OTUw
MDBDMjM5NiAvKiBERkdCYWNrd2FyZHNEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQ0VFMjIwNzFDRUI5ODkwMDAwQzIzOTYgLyogREZH
QmFja3dhcmRzRG9taW5hdG9ycy5oICovOyB9OworCQlEQ0VFMjIwQjFDRUI5ODk1MDAwQzIzOTYg
LyogREZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDRUUyMjA4MUNFQjk4OTAwMDBDMjM5NiAvKiBERkdD
b250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oICovOyB9OworCQlEQ0VFMjIwRDFDRUJBRjc1MDAw
QzIzOTYgLyogREZHTnVsbEFic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDRUUyMjBDMUNFQkFGNzMwMDBDMjM5NiAvKiBERkdOdWxs
QWJzdHJhY3RTdGF0ZS5oICovOyB9OwogCQlEQ0YzRDU2OTFDRDI5NDZEMDAzRDVDNjUgLyogTGF6
eUNsYXNzU3RydWN0dXJlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IERDRjNENTY0MUNEMjk0NjgwMDNENUM2NSAvKiBMYXp5Q2xhc3NTdHJ1Y3R1cmUu
Y3BwICovOyB9OwogCQlEQ0YzRDU2QTFDRDI5NDcwMDAzRDVDNjUgLyogTGF6eUNsYXNzU3RydWN0
dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQ0Yz
RDU2NTFDRDI5NDY4MDAzRDVDNjUgLyogTGF6eUNsYXNzU3RydWN0dXJlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRENGM0Q1NkIxQ0QyOTQ3MjAw
M0Q1QzY1IC8qIExhenlDbGFzc1N0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDRjNENTY2MUNEMjk0NjgwMDNENUM2NSAvKiBM
YXp5Q2xhc3NTdHJ1Y3R1cmVJbmxpbmVzLmggKi87IH07CkBAIC00MjE4LDYgKzQyMjIsMTAgQEAK
IAkJREM2MDVCNUMxQ0UyNkU5ODAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyVUlELmg7IHBhdGggPSBwcm9maWxlci9Qcm9m
aWxlclVJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzc5OTc4MTFDREU5RjlF
MDA0RDRBMDkgLyogVGFnUmVnaXN0ZXJzTW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUYWdSZWdpc3RlcnNNb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJREM3OTk3ODIxQ0RFOUY5RTAwNEQ0QTA5IC8qIFRhZ1JlZ2lzdGVyc01vZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGFnUmVnaXN0ZXJzTW9kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQ0VFMjIwNjFDRUI5ODkwMDAwQzIzOTYgLyogREZH
QmFja3dhcmRzQ0ZHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JhY2t3
YXJkc0NGRy5oOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc0NGRy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlEQ0VFMjIwNzFDRUI5ODkwMDAwQzIzOTYgLyogREZHQmFja3dhcmRzRG9t
aW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYWNrd2FyZHNE
b21pbmF0b3JzLmg7IHBhdGggPSBkZmcvREZHQmFja3dhcmRzRG9taW5hdG9ycy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlEQ0VFMjIwODFDRUI5ODkwMDAwQzIzOTYgLyogREZHQ29u
dHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaDsgcGF0aCA9IGRmZy9ERkdDb250cm9s
RXF1aXZhbGVuY2VBbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQ0VF
MjIwQzFDRUJBRjczMDAwQzIzOTYgLyogREZHTnVsbEFic3RyYWN0U3RhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTnVsbEFic3RyYWN0U3RhdGUuaDsgcGF0aCA9IGRm
Zy9ERkdOdWxsQWJzdHJhY3RTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
Q0YzRDU2NDFDRDI5NDY4MDAzRDVDNjUgLyogTGF6eUNsYXNzU3RydWN0dXJlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhenlDbGFzc1N0cnVjdHVyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURDRjNENTY1MUNEMjk0NjgwMDNENUM2NSAvKiBM
YXp5Q2xhc3NTdHJ1Y3R1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF6
eUNsYXNzU3RydWN0dXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURDRjNENTY2
MUNEMjk0NjgwMDNENUM2NSAvKiBMYXp5Q2xhc3NTdHJ1Y3R1cmVJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhenlDbGFzc1N0cnVjdHVyZUlubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxMzQsNiArNjE0Miw4IEBACiAJCQkJMEY2NjZF
QzMxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oICovLAogCQkJCTBGMkI5Q0Q2
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwICovLAogCQkJCTBGMkI5
Q0Q3MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCAqLywKKwkJCQlEQ0VF
MjIwNjFDRUI5ODkwMDAwQzIzOTYgLyogREZHQmFja3dhcmRzQ0ZHLmggKi8sCisJCQkJRENFRTIy
MDcxQ0VCOTg5MDAwMEMyMzk2IC8qIERGR0JhY2t3YXJkc0RvbWluYXRvcnMuaCAqLywKIAkJCQkw
RjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAgKi8sCiAJCQkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuaCAqLywKIAkJCQlBN0Q4OUNFMzE3QTBCOENDMDA3NzNBRDggLyogREZHQmFz
aWNCbG9jay5jcHAgKi8sCkBAIC02MTgwLDYgKzYxOTAsNyBAQAogCQkJCTBGM0IzQTE4MTUzRTY4
RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovLAogCQkJCTBGRUQ2N0I3
MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovLAogCQkJ
CTBGRUQ2N0I4MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAq
LywKKwkJCQlEQ0VFMjIwODFDRUI5ODkwMDAwQzIzOTYgLyogREZHQ29udHJvbEVxdWl2YWxlbmNl
QW5hbHlzaXMuaCAqLywKIAkJCQkwRkJFMEY2QjE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNkMxNkMxREIwMTAwODJDNUU4IC8qIERG
R0NQU1JldGhyZWFkaW5nUGhhc2UuaCAqLywKIAkJCQlBN0Q4OUNFNjE3QTBCOENDMDA3NzNBRDgg
LyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgKi8sCkBAIC02MjkxLDYgKzYzMDIs
NyBAQAogCQkJCTBGNUQwODVDMUI4Q0Y5OUQwMDExNDNCNCAvKiBERkdOb2RlT3JpZ2luLmNwcCAq
LywKIAkJCQkwRjMwMEI3NzE4QUIwNTExMDBBNkQ3MkUgLyogREZHTm9kZU9yaWdpbi5oICovLAog
CQkJCTBGQTU4MUI5MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlVHlwZS5oICovLAorCQkJCURD
RUUyMjBDMUNFQkFGNzMwMDBDMjM5NiAvKiBERkdOdWxsQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJ
CTBGMkI5Q0RBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcCAqLywKIAkJCQkwRjJCOUNEQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5oICovLAogCQkJCTBGMkI5Q0RDMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCAqLywKQEAgLTY5NTgsNiArNjk3MCw3
IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJ
MEZGQTU0OTgxNkI4ODM1MzAwQjNBOTgyIC8qIEE2NERPcGNvZGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCURDRUUyMjBBMUNFQjk4OTUwMDBDMjM5NiAvKiBERkdCYWNrd2FyZHNEb21pbmF0b3JzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFz
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjND
MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDAyLDYgKzcwMTUs
NyBAQAogCQkJCUJDMThDM0U1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBUElDYXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRTNBMDZCRTFDMTEwNDEyMDAzOTBGREQgLyogSklUTGVmdFNoaWZ0R2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJn
TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRENFRTIyMDkxQ0VCOTg5NTAwMEMyMzk2IC8qIERG
R0JhY2t3YXJkc0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTQxQUE5MDkxMTAwRDMz
QjMzIC8qIEFyZ3VtZW50c01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNkIxQ0I5MTg2MTI0
NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFBMDA5
QzExODMxQTI2RTAwQ0Y4NzExIC8qIEFSTTY0QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTc5MTYsNiArNzkzMCw3IEBACiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2Zp
bGVyQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NC
MDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIz
ODc5MDFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlEQ0VFMjIwRDFDRUJBRjc1MDAwQzIzOTYgLyogREZHTnVsbEFic3RyYWN0U3Rh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9m
aWxlckNvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtODA2MCw2ICs4MDc1LDcgQEAKIAkJCQkxNDE0NDhDRDEzQTE3ODM3MDBGNUJBMUEgLyogVGlu
eUJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjg0RDQzODFDMDAxNjFDMDA4MUQ2
NjMgLyogQWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU5ODk4MTdDODZDNTgw
MEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRENFRTIy
MEIxQ0VCOTg5NTAwMEMyMzk2IC8qIERGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJENERFOTE5ODMyREFDMDA3RDRCMTkgLyogVG9UaGlzU3RhdHVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tl
ZFJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHJldmlz
aW9uIDIwMTAzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJh
Y3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw2ICs0MCw4IEBAIHB1YmxpYzoKICAgICAKICAg
ICB+QXRUYWlsQWJzdHJhY3RTdGF0ZSgpOwogICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgCiAgICAgdm9pZCBpbml0aWFsaXplVG8o
QmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc0NGRy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzQ0ZHLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc0NGRy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCYWNrd2FyZHNDRkdfaAorI2RlZmluZSBERkdC
YWNrd2FyZHNDRkdfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDRkcu
aCIKKyNpbmNsdWRlIDx3dGYvQmFja3dhcmRzR3JhcGguaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBCYWNrd2FyZHNDRkcgOiBwdWJsaWMgQmFja3dhcmRzR3Jh
cGg8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFja3dhcmRzQ0ZHKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBCYWNrd2FyZHNDRkcoR3JhcGgm
IGdyYXBoKQorICAgICAgICA6IEJhY2t3YXJkc0dyYXBoPENGRz4oKmdyYXBoLm1fY2ZnKQorICAg
IHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0JhY2t3YXJkc0NGR19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzRG9taW5hdG9ycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzRG9taW5hdG9ycy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNE
b21pbmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0JhY2t3YXJkc0Rv
bWluYXRvcnNfaAorI2RlZmluZSBERkdCYWNrd2FyZHNEb21pbmF0b3JzX2gKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFja3dhcmRzQ0ZHLmgiCisjaW5jbHVkZSA8d3Rm
L0RvbWluYXRvcnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIEJhY2t3YXJkc0RvbWluYXRvcnMgOiBwdWJsaWMgV1RGOjpEb21pbmF0b3JzPEJhY2t3YXJk
c0NGRz4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhY2t3YXJkc0RvbWluYXRvcnMpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEJhY2t3YXJkc0RvbWlu
YXRvcnMoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFdURjo6RG9taW5hdG9yczxCYWNrd2FyZHND
Rkc+KGdyYXBoLmVuc3VyZUJhY2t3YXJkc0NGRygpKQorICAgIHsKKyAgICB9Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR0RvbWluYXRvcnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCShyZXZpc2lvbiAyMDEwMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsMTUgKzI1NSw2IEBAIGVudW0gY2xhc3Mg
UGxhblN0YWdlIHsKICAgICBBZnRlckZpeHVwCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPgotYm9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQotewotICAgIGlm
IChsZWZ0ID09IHJpZ2h0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbGVmdCA9IHJpZ2h0
OwotICAgIHJldHVybiB0cnVlOwotfQotCiAvLyBJZiBwb3NzaWJsZSwgdGhpcyB3aWxsIGFjcXVp
cmUgYSBsb2NrIHRvIG1ha2Ugc3VyZSB0aGF0IGlmIG11bHRpcGxlIHRocmVhZHMKIC8vIHN0YXJ0
IGNyYXNoaW5nIGF0IHRoZSBzYW1lIHRpbWUsIHlvdSBnZXQgY29oZXJlbnQgZHVtcCBvdXRwdXQu
IFVzZSB0aGlzIG9ubHkKIC8vIHdoZW4geW91J3JlIGZvcmNpbmcgYSBjcmFzaCB3aXRoIGRpYWdu
b3N0aWNzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb250cm9sRXF1aXZh
bGVuY2VBbmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXNfaAor
I2RlZmluZSBERkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpc19oCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJERkdCYWNrd2Fy
ZHNEb21pbmF0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyhHcmFwaCYgZ3JhcGgp
CisgICAgICAgIDogbV9kb21pbmF0b3JzKGdyYXBoLmVuc3VyZURvbWluYXRvcnMoKSkKKyAgICAg
ICAgLCBtX2JhY2t3YXJkc0RvbWluYXRvcnMoZ3JhcGguZW5zdXJlQmFja3dhcmRzRG9taW5hdG9y
cygpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWZmOgor
ICAgIC8vCisgICAgLy8gLSBJZiBiIGV4ZWN1dGVzIHRoZW4gYSBtdXN0IGhhdmUgZXhlY3V0ZWQg
YmVmb3JlIGl0IChhIGRvbWluYXRlcyBiKS4KKyAgICAvLyAtIElmIGEgZXhlY3V0ZXMgdGhlbiBi
IHdpbGwgZXhlY3V0ZSBhZnRlciBpdCAoYiBiYWNrd2FyZHMtZG9taW5hdGVzIGEpLgorICAgIC8v
CisgICAgLy8gTm90ZSB0aGF0IGxpa2UgRG9taW5hdG9ycyBhbmQgQmFja3dhcmRzRG9taW5hdG9y
cywgdGhpcyBhbmFseXNpcyBpZ25vcmVzIE9TUjoKKyAgICAvLworICAgIC8vIC0gVGhpcyBtYXkg
cmV0dXJuIHRydWUgZXZlbiBpZiB3ZSBPU1IgZW50ZXIgaW4gYmV0ZWVuIGEgYW5kIGIuIE9TUiBl
bnRyeSB3b3VsZCBtZWFuIHRoYXQgYgorICAgIC8vICAgY291bGQgZXhlY3V0ZSBldmVuIGlmIGEg
aGFkIG5vdCBleGVjdXRlZC4gVGhpcyBpcyBpbXBvc3NpYmxlIGluIERGRyBTU0EgYnV0IGl0J3Mg
cG9zc2libGUKKyAgICAvLyAgIGluIERGRyBDUFMuCisgICAgLy8gLSBUaGlzIG1heSByZXR1cm4g
dHJ1ZSBldmVuIGlmIHdlIE9TUiBleGl0IGluIGJldHdlZW4gYSBhbmQgYi4gT1NSIGV4aXQgd291
bGQgbWVhbiB0aGF0IGEKKyAgICAvLyAgIGNvdWxkIGV4ZWN1dGUgZXZlbiB0aG91Z2ggYiB3aWxs
IG5vdCBleGVjdXRlLiBUaGlzIGlzIHBvc3NpYmxlIGluIGFsbCBmb3JtcyBvZiBERkcgSVIuCisg
ICAgLy8KKyAgICAvLyBJbiBERkcgU1NBIHlvdSBvbmx5IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhl
IGRlZmluaXRpb24gYmVpbmcgd2Vha2VkIGJ5IGV4aXRzLiBUaGlzIGlzIHVzdWFsbHkKKyAgICAv
LyBPSywgc2luY2Ugd2UgdXNlIHRoaXMgYW5hbHlzaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb3N0IG9m
IG1vdmluZyBleGl0cyBmcm9tIG9uZSBibG9jayB0bworICAgIC8vIGFub3RoZXIuIElmIHdlIG1v
dmUgYW4gZXhpdCBmcm9tIGIgdG8gYSBhbmQgYSBlcXVpdmFsZW50bHkgZG9taW5hdGVzIGIgdGhl
biBhdCB3b3JzdCB3ZSBoYXZlCisgICAgLy8gbWFkZSB0aGUgZXhpdCBoYXBwZW4gc29vbmVyLiBJ
ZiB3ZSBtb3ZlIGFuIGV4aXQgZnJvbSBiIHRvIGEgYW5kIGEgZG9taW5hdGVzIGIgYnV0IG5vdAor
ICAgIC8vIGVxdWl2YWxlbnRseSB0aGVuIHdlJ3ZlIGRvbmUgc29tZXRoaW5nIG11Y2ggd29yc2U6
IHRoZSBwcm9ncmFtIG1heSBub3cgZXhpdCBldmVuIGlmIGl0IHdvdWxkCisgICAgLy8gbm90IGhh
dmUgZXZlciBleGl0ZWQgYmVmb3JlLgorICAgIGJvb2wgZG9taW5hdGVzRXF1aXZhbGVudGx5KEJh
c2ljQmxvY2sqIGEsIEJhc2ljQmxvY2sqIGIpCisgICAgeworICAgICAgICByZXR1cm4gbV9kb21p
bmF0b3JzLmRvbWluYXRlcyhhLCBiKQorICAgICAgICAgICAgJiYgbV9iYWNrd2FyZHNEb21pbmF0
b3JzLmRvbWluYXRlcyhiLCBhKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyByZXR1cm5zIHRy
dWUgaWZmIHRoZSBleGVjdXRpb24gb2YgYSBpbXBsaWVzIHRoYXQgYiBhbHNvIGV4ZWN1dGVzIGFu
ZCB2aWNlLXZlcnNhLgorICAgIGJvb2wgYXJlRXF1aXZhbGVudChCYXNpY0Jsb2NrKiBhLCBCYXNp
Y0Jsb2NrKiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRvbWluYXRlc0VxdWl2YWxlbnRseShh
LCBiKQorICAgICAgICAgICAgfHwgZG9taW5hdGVzRXF1aXZhbGVudGx5KGIsIGEpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBEb21pbmF0b3JzJiBtX2RvbWluYXRvcnM7CisgICAgQmFja3dhcmRz
RG9taW5hdG9ycyYgbV9iYWNrd2FyZHNEb21pbmF0b3JzOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdD
b250cm9sRXF1aXZhbGVuY2VBbmFseXNpc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyMDEwMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEzIEBACiAj
aW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCisjaW5jbHVkZSAi
REZHQmFja3dhcmRzRG9taW5hdG9ycy5oIgorI2luY2x1ZGUgIkRGR0JhY2t3YXJkc0NGRy5oIgog
I2luY2x1ZGUgIkRGR0Jsb2NrV29ya2xpc3QuaCIKKyNpbmNsdWRlICJERkdDRkcuaCIKICNpbmNs
dWRlICJERkdDbG9iYmVyU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIK
LSNpbmNsdWRlICJERkdDRkcuaCIKKyNpbmNsdWRlICJERkdDb250cm9sRXF1aXZhbGVuY2VBbmFs
eXNpcy5oIgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJERkdKSVRDb2Rl
LmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgpAQCAtNzUzLDYgKzc1Niw5IEBAIHZvaWQgR3Jh
cGg6OmludmFsaWRhdGVDRkcoKQogICAgIG1fZG9taW5hdG9ycyA9IG51bGxwdHI7CiAgICAgbV9u
YXR1cmFsTG9vcHMgPSBudWxscHRyOwogICAgIG1fcHJlUG9zdE51bWJlcmluZyA9IG51bGxwdHI7
CisgICAgbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyA9IG51bGxwdHI7CisgICAgbV9iYWNr
d2FyZHNEb21pbmF0b3JzID0gbnVsbHB0cjsKKyAgICBtX2JhY2t3YXJkc0NGRyA9IG51bGxwdHI7
CiB9CiAKIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywg
dW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVB
Y2Nlc3NEYXRhLCBOb2RlKiBuZXdHZXRMb2NhbCkKQEAgLTE0MjYsMjMgKzE0MzIsNDcgQEAgdm9p
ZCBHcmFwaDo6aGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSgKICAgICBjcmFzaCgqdGhpcywgdG9DU3Ry
aW5nKCJXaGlsZSBoYW5kbGluZyBibG9jayAiLCBwb2ludGVyRHVtcChibG9jayksICJcblxuIiks
IGZpbGUsIGxpbmUsIGZ1bmN0aW9uLCBhc3NlcnRpb24pOwogfQogCi12b2lkIEdyYXBoOjplbnN1
cmVEb21pbmF0b3JzKCkKK0RvbWluYXRvcnMmIEdyYXBoOjplbnN1cmVEb21pbmF0b3JzKCkKIHsK
ICAgICBpZiAoIW1fZG9taW5hdG9ycykKICAgICAgICAgbV9kb21pbmF0b3JzID0gc3RkOjptYWtl
X3VuaXF1ZTxEb21pbmF0b3JzPigqdGhpcyk7CisgICAgcmV0dXJuICptX2RvbWluYXRvcnM7CiB9
CiAKLXZvaWQgR3JhcGg6OmVuc3VyZVByZVBvc3ROdW1iZXJpbmcoKQorUHJlUG9zdE51bWJlcmlu
ZyYgR3JhcGg6OmVuc3VyZVByZVBvc3ROdW1iZXJpbmcoKQogewogICAgIGlmICghbV9wcmVQb3N0
TnVtYmVyaW5nKQogICAgICAgICBtX3ByZVBvc3ROdW1iZXJpbmcgPSBzdGQ6Om1ha2VfdW5pcXVl
PFByZVBvc3ROdW1iZXJpbmc+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fcHJlUG9zdE51bWJlcmlu
ZzsKIH0KIAotdm9pZCBHcmFwaDo6ZW5zdXJlTmF0dXJhbExvb3BzKCkKK05hdHVyYWxMb29wcyYg
R3JhcGg6OmVuc3VyZU5hdHVyYWxMb29wcygpCiB7CiAgICAgZW5zdXJlRG9taW5hdG9ycygpOwog
ICAgIGlmICghbV9uYXR1cmFsTG9vcHMpCiAgICAgICAgIG1fbmF0dXJhbExvb3BzID0gc3RkOjpt
YWtlX3VuaXF1ZTxOYXR1cmFsTG9vcHM+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fbmF0dXJhbExv
b3BzOworfQorCitCYWNrd2FyZHNDRkcmIEdyYXBoOjplbnN1cmVCYWNrd2FyZHNDRkcoKQorewor
ICAgIGlmICghbV9iYWNrd2FyZHNDRkcpCisgICAgICAgIG1fYmFja3dhcmRzQ0ZHID0gc3RkOjpt
YWtlX3VuaXF1ZTxCYWNrd2FyZHNDRkc+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fYmFja3dhcmRz
Q0ZHOworfQorCitCYWNrd2FyZHNEb21pbmF0b3JzJiBHcmFwaDo6ZW5zdXJlQmFja3dhcmRzRG9t
aW5hdG9ycygpCit7CisgICAgaWYgKCFtX2JhY2t3YXJkc0RvbWluYXRvcnMpCisgICAgICAgIG1f
YmFja3dhcmRzRG9taW5hdG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8QmFja3dhcmRzRG9taW5hdG9y
cz4oKnRoaXMpOworICAgIHJldHVybiAqbV9iYWNrd2FyZHNEb21pbmF0b3JzOworfQorCitDb250
cm9sRXF1aXZhbGVuY2VBbmFseXNpcyYgR3JhcGg6OmVuc3VyZUNvbnRyb2xFcXVpdmFsZW5jZUFu
YWx5c2lzKCkKK3sKKyAgICBpZiAoIW1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMpCisgICAg
ICAgIG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRy
b2xFcXVpdmFsZW5jZUFuYWx5c2lzPigqdGhpcyk7CisgICAgcmV0dXJuICptX2NvbnRyb2xFcXVp
dmFsZW5jZUFuYWx5c2lzOwogfQogCiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBo
OjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyMDEwMzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2
LDEwIEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIAogbmFtZXNwYWNlIERGRyB7CiAKK2NsYXNzIEJhY2t3
YXJkc0NGRzsKK2NsYXNzIEJhY2t3YXJkc0RvbWluYXRvcnM7CiBjbGFzcyBDRkc7CitjbGFzcyBD
b250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKIGNsYXNzIERvbWluYXRvcnM7CiBjbGFzcyBOYXR1
cmFsTG9vcHM7CiBjbGFzcyBQcmVQb3N0TnVtYmVyaW5nOwpAQCAtODAwLDkgKzgwMywxMiBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzRGVidWdnZXJFbmFibGVkOyB9CiAKLSAgICB2b2lkIGVuc3VyZURvbWluYXRvcnMoKTsKLSAg
ICB2b2lkIGVuc3VyZVByZVBvc3ROdW1iZXJpbmcoKTsKLSAgICB2b2lkIGVuc3VyZU5hdHVyYWxM
b29wcygpOworICAgIERvbWluYXRvcnMmIGVuc3VyZURvbWluYXRvcnMoKTsKKyAgICBQcmVQb3N0
TnVtYmVyaW5nJiBlbnN1cmVQcmVQb3N0TnVtYmVyaW5nKCk7CisgICAgTmF0dXJhbExvb3BzJiBl
bnN1cmVOYXR1cmFsTG9vcHMoKTsKKyAgICBCYWNrd2FyZHNDRkcmIGVuc3VyZUJhY2t3YXJkc0NG
RygpOworICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGVuc3VyZUJhY2t3YXJkc0RvbWluYXRvcnMo
KTsKKyAgICBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyYgZW5zdXJlQ29udHJvbEVxdWl2YWxl
bmNlQW5hbHlzaXMoKTsKIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBtYWtlcyBzZW5zZSB0
byBjYWxsIGFmdGVyIGJ5dGVjb2RlIHBhcnNpbmcKICAgICAvLyBiZWNhdXNlIGl0IHF1ZXJpZXMg
dGhlIG1faGFzRXhjZXB0aW9uSGFuZGxlcnMgYm9vbGVhbiB3aG9zZSB2YWx1ZQpAQCAtODc5LDYg
Kzg4NSw5IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJlUG9zdE51bWJlcmluZz4g
bV9wcmVQb3N0TnVtYmVyaW5nOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxOYXR1cmFsTG9vcHM+IG1f
bmF0dXJhbExvb3BzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDRkc+IG1fY2ZnOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxCYWNrd2FyZHNDRkc+IG1fYmFja3dhcmRzQ0ZHOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxCYWNrd2FyZHNEb21pbmF0b3JzPiBtX2JhY2t3YXJkc0RvbWluYXRvcnM7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzPiBtX2NvbnRyb2xFcXVpdmFs
ZW5jZUFuYWx5c2lzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1f
bmV4dE1hY2hpbmVMb2NhbDsKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuaAkocmV2aXNpb24gMjAxMDM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
blBsYWNlQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw2ICs0Miw4IEBAIHB1Ymxp
YzoKICAgICAKICAgICB+SW5QbGFjZUFic3RyYWN0U3RhdGUoKTsKICAgICAKKyAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAogICAgIHZvaWQg
Y3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqKSB7IH0KICAgICAKICAgICBBYnN0cmFjdFZhbHVlJiBm
b3JOb2RlKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01h
eUV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5
RXhpdC5jcHAJKHJldmlzaW9uIDIwMTAzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNjAgKzI4LDE4IEBACiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCIK
ICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJE
RkdOdWxsQWJzdHJhY3RTdGF0ZS5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCi1jbGFzcyBFZGdlTWF5
RXhpdCB7Ci1wdWJsaWM6Ci0gICAgRWRnZU1heUV4aXQoKQotICAgICAgICA6IG1fcmVzdWx0KGZh
bHNlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBvcGVyYXRvcigpKE5vZGUqLCBFZGdl
IGVkZ2UpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgY2FsbCBt
YXlIYXZlVHlwZUNoZWNrKGVkZ2UudXNlS2luZCgpKSBpbnN0ZWFkLgotICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NTQ1Ci0gICAgICAgIGlmIChl
ZGdlLndpbGxIYXZlQ2hlY2soKSkgewotICAgICAgICAgICAgbV9yZXN1bHQgPSB0cnVlOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChlZGdlLnVzZUtp
bmQoKSkgewotICAgICAgICAvLyBUaGVzZSBhcmUgc2hhZHkgYmVjYXVzZSBub2RlcyB0aGF0IGhh
dmUgdGhlc2UgdXNlIGtpbmRzIHdpbGwgdHlwaWNhbGx5IGV4aXQgZm9yCi0gICAgICAgIC8vIHVu
cmVsYXRlZCByZWFzb25zLiBGb3IgZXhhbXBsZSBDb21wYXJlRXEgZG9lc24ndCB1c3VhbGx5IGV4
aXQsIGJ1dCBpZiBpdCB1c2VzIE9iamVjdFVzZQotICAgICAgICAvLyB0aGVuIGl0IHdpbGwuCi0g
ICAgICAgIGNhc2UgT2JqZWN0VXNlOgotICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6Ci0g
ICAgICAgICAgICBtX3Jlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICAvLyBUaGVzZSBhcmUgc2hhZHkgYmVjYXVzZSB0aGV5IGNoZWNrIHRoZSBz
dHJ1Y3R1cmUgZXZlbiBpZiB0aGUgdHlwZSBvZiB0aGUgY2hpbGQgbm9kZQotICAgICAgICAvLyBw
YXNzZXMgdGhlIFN0cmluZ09iamVjdCB0eXBlIGZpbHRlci4KLSAgICAgICAgY2FzZSBTdHJpbmdP
YmplY3RVc2U6Ci0gICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6Ci0gICAgICAg
ICAgICBtX3Jlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCByZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdDsgfQotICAgIAot
cHJpdmF0ZToKLSAgICBib29sIG1fcmVzdWx0OwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCi0KLUV4aXRNb2RlIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQordGVtcGxh
dGU8dHlwZW5hbWUgU3RhdGVUeXBlPgorRXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBTdGF0ZVR5cGUmIHN0YXRlKQogewogICAgIEV4aXRNb2RlIHJlc3VsdCA9
IERvZXNOb3RFeGl0OwogICAgIApAQCAtMTU0LDE1ICsxMTIsNjggQEAgRXhpdE1vZGUgbWF5RXhp
dChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZAogICAgICAgICAvLyBJZiBpbiBkb3VidCwgcmV0dXJu
IHRydWUuCiAgICAgICAgIHJldHVybiBFeGl0czsKICAgICB9Ci0KLSAgICBFZGdlTWF5RXhpdCBm
dW5jdG9yOwotICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCBmdW5jdG9y
KTsKLSAgICBpZiAoZnVuY3Rvci5yZXN1bHQoKSkKLSAgICAgICAgcmVzdWx0ID0gRXhpdHM7CiAg
ICAgCisgICAgZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICBub2RlLAorICAgICAgICBbJl0g
KEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZSkgeworICAgICAgICAgICAgICAg
IC8vIElnbm9yZSB0aGUgQ2hlY2sgZmxhZyBvbiB0aGUgZWRnZS4gVGhpcyBpcyBpbXBvcnRhbnQg
YmVjYXVzZSB0aGF0IGZsYWcgYW5zd2VycworICAgICAgICAgICAgICAgIC8vIHRoZSBxdWVzdGlv
bjogIndvdWxkIHRoaXMgZWRnZSBoYXZlIGhhZCBhIGNoZWNrIGlmIGl0IGV4ZWN1dGVkIHdoZXJl
dmVyIGl0CisgICAgICAgICAgICAgICAgLy8gY3VycmVudGx5IHJlc2lkZXMgaW4gY29udHJvbCBm
bG93PyIgQnV0IHdoZW4gYSBzdGF0ZSBpcyBwYXNzZWQsIHdlIHdhbnQgdG8gYXNrIGEKKyAgICAg
ICAgICAgICAgICAvLyBkaWZmZXJlbnQgcXVlc3Rpb246ICJ3b3VsZCB0aGlzIGVkZ2UgaGF2ZSBh
IGNoZWNrIGlmIGl0IGV4ZWN1dGVkIHdoZXJldmVyIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBz
dGF0ZSBpcz8iIFVzaW5nIHRoZSBDaGVjayBmbGFnIGZvciB0aGlzIHB1cnBvc2Ugd291bGRuJ3Qg
ZXZlbiBiZSBjb25zZXJ2YXRpdmVseQorICAgICAgICAgICAgICAgIC8vIGNvcnJlY3QuIEl0IHdv
dWxkIGJlIHdyb25nIGluIGJvdGggZGlyZWN0aW9ucy4KKyAgICAgICAgICAgICAgICBpZiAobWF5
SGF2ZVR5cGVDaGVjayhlZGdlLnVzZUtpbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKHN0
YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkp
KSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeGl0czsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGNhbGwgbWF5SGF2ZVR5
cGVDaGVjayhlZGdlLnVzZUtpbmQoKSkgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NTQ1CisgICAgICAgICAgICAg
ICAgaWYgKGVkZ2Uud2lsbEhhdmVDaGVjaygpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IEV4aXRzOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKGVkZ2Uu
dXNlS2luZCgpKSB7CisgICAgICAgICAgICAvLyBUaGVzZSBhcmUgc2hhZHkgYmVjYXVzZSBub2Rl
cyB0aGF0IGhhdmUgdGhlc2UgdXNlIGtpbmRzIHdpbGwgdHlwaWNhbGx5IGV4aXQgZm9yCisgICAg
ICAgICAgICAvLyB1bnJlbGF0ZWQgcmVhc29ucy4gRm9yIGV4YW1wbGUgQ29tcGFyZUVxIGRvZXNu
J3QgdXN1YWxseSBleGl0LCBidXQgaWYgaXQgdXNlcworICAgICAgICAgICAgLy8gT2JqZWN0VXNl
IHRoZW4gaXQgd2lsbC4KKyAgICAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgorICAgICAgICAgICAg
Y2FzZSBPYmplY3RPck90aGVyVXNlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IEV4aXRzOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
VGhlc2UgYXJlIHNoYWR5IGJlY2F1c2UgdGhleSBjaGVjayB0aGUgc3RydWN0dXJlIGV2ZW4gaWYg
dGhlIHR5cGUgb2YgdGhlIGNoaWxkIG5vZGUKKyAgICAgICAgICAgIC8vIHBhc3NlcyB0aGUgU3Ry
aW5nT2JqZWN0IHR5cGUgZmlsdGVyLgorICAgICAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6
CisgICAgICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IEV4aXRzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKworRXhpdE1vZGUgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUpCit7CisgICAgTnVsbEFic3RyYWN0U3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIG1heUV4
aXRJbXBsKGdyYXBoLCBub2RlLCBzdGF0ZSk7Cit9CisKK0V4aXRNb2RlIG1heUV4aXQoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlLCBBdFRhaWxBYnN0cmFjdFN0YXRlJiBzdGF0ZSkKK3sKKyAgICBy
ZXR1cm4gbWF5RXhpdEltcGwoZ3JhcGgsIG5vZGUsIHN0YXRlKTsKK30KKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTWF5RXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTWF5RXhpdC5oCShyZXZpc2lvbiAyMDEwMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01heUV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgQXRUYWlsQWJzdHJh
Y3RTdGF0ZTsKIGNsYXNzIEdyYXBoOwogc3RydWN0IE5vZGU7CiAKQEAgLTc0LDYgKzc1LDExIEBA
IGVudW0gRXhpdE1vZGUgewogCiBFeGl0TW9kZSBtYXlFeGl0KEdyYXBoJiwgTm9kZSopOwogCisv
LyBMaWtlIG1heUV4aXQoKSwgYnV0IGluc3RlYWQgb2YgdXNpbmcgdGhlIENoZWNrOiBmbGFnIHRv
IGRldGVybWluZSBpZiBzb21ldGhpbmcgZXhpdHMsIGl0CisvLyBldmFsdWF0ZXMgd2hldGhlciBp
dCB3aWxsIGV4aXQgYmFzZWQgb24gdGhlIHRhaWwgc3RhdGUuIFRoaXMgaXMgdXNlZnVsIGZvciBM
SUNNLiBUaGlzICptYXkqIGFsc28KKy8vIHVzZSB0aGUgQXRUYWlsQWJzdHJhY3RTdGF0ZSB0byBy
ZXR1cm4gbW9yZSBwcmVjaXNlIGFuc3dlcnMgZm9yIG90aGVyIG5vZGVzLgorRXhpdE1vZGUgbWF5
RXhpdChHcmFwaCYsIE5vZGUqLCBBdFRhaWxBYnN0cmFjdFN0YXRlJik7CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR051bGxBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOdWxsQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOdWxsQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdOdWxsQWJzdHJhY3RTdGF0ZV9oCisjZGVmaW5lIERG
R051bGxBYnN0cmFjdFN0YXRlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEVkZ2U7CitzdHJ1Y3QgQWJzdHJhY3RWYWx1
ZTsKK3N0cnVjdCBOb2RlOworCisvLyBVc2UgdGhpcyBhcyBhIHN0dWIgZm9yIHRoaW5ncyB0aGF0
IGNhbiBvcHRpb25hbGx5IHRha2Ugc29tZSBraW5kIG9mIGFic3RyYWN0IHN0YXRlIGJ1dCB5b3Ug
d2lzaAorLy8gdG8gbm90IHBhc3MgYW55IGFic3RyYWN0IHN0YXRlLiBUaGlzIHdvcmtzIGlmIHRo
ZSB0ZW1wbGF0aXplZCBjb2RlIGFsc28gZG9lcyBhIGNoZWNrICh1c2luZyB0aGUKKy8vIG9wZXJh
dG9yIGJvb2wpIHRvIHNlZSBpZiB0aGUgc3RhdGUgaXMgdmFsaWQuCitjbGFzcyBOdWxsQWJzdHJh
Y3RTdGF0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTnVs
bEFic3RyYWN0U3RhdGUoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2Rl
KE5vZGUqKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QWJzdHJhY3RWYWx1ZSo+KHN0YXRpY19jYXN0PGlu
dHB0cl90PigweDEyMzQpKTsKKyAgICB9CisgICAgCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9k
ZShFZGdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZvck5vZGUobnVsbHB0cik7CisgICAgfQor
ICAgIAorICAgIC8vIEl0J3MgdmFsaWQgdG8gYWRkIG1vcmUgc3R1YiBtZXRob2RzIGhlcmUgYXMg
bmVlZGVkLgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdOdWxsQWJzdHJhY3RTdGF0ZV9oCisKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjAxMDM3
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMzAxLDYgKzMwMSw3IEBACiAJCUNENTQ5N0FEMTU4NTdEMDMwMEI1QkMzMCAvKiBN
ZWRpYVRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENENTQ5N0FCMTU4NTdEMDMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuaCAqLzsgfTsKIAkJQ0U0NjUx
NkUxOURCMUZCNDAwM0VDQTA1IC8qIE5TTWFwVGFibGVTUEkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFNDY1MTZEMTlEQjFGQjQwMDNFQ0EwNSAvKiBO
U01hcFRhYmxlU1BJLmggKi87IH07CiAJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENT
UEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFNzNF
MDI0MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCAqLzsgfTsKKwkJRENFRTIyMDUxQ0VCOTg2
OTAwMEMyMzk2IC8qIEJhY2t3YXJkc0dyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBEQ0VFMjIwNDFDRUI5ODY5MDAwQzIzOTYgLyogQmFja3dhcmRz
R3JhcGguaCAqLzsgfTsKIAkJREU1QTA5RkMxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0
b1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU1
QTA5RkIxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oICovOyB9OwogCQlFMTU1
NTZGNTE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU1NTZGMzE4QTBDQzE4
MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAgKi87IH07CiAJCUUxNTU1NkY2
MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4
RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oICovOyB9OwpAQCAtNjIyLDYgKzYyMyw3IEBA
CiAJCUNENTQ5N0FCMTU4NTdEMDMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFUaW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNFNDY1MTZEMTlEQjFGQjQwMDNFQ0EwNSAvKiBOU01hcFRhYmxlU1BJLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5TTWFwVGFibGVTUEkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0U3M0UwMjQxOURDQjdBQjAwNTgwRDVDIC8qIFhQQ1NQSS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYUENTUEkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRENFRTIyMDQxQ0VCOTg2OTAwMEMyMzk2IC8qIEJhY2t3YXJkc0dyYXBo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2t3YXJkc0dyYXBoLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURFNUEwOUZCMUJBMzY5OTIwMDNENDQyNCAvKiBD
b21tb25DcnlwdG9TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9u
Q3J5cHRvU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTU1NkYzMThBMEND
MTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlw
dG9ncmFwaGljVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NjMs
NiArNzY1LDcgQEAKIAkJCQlBOEE0NzI1RDE1MUE4MjVBMDA0MTIzRkYgLyogQXRvbWljcy5oICov
LAogCQkJCTE0Njk0MTlBMTZFQUIxMEEwMDI0RTE0NiAvKiBBdXRvZHJhaW5lZFBvb2wuaCAqLywK
IAkJCQkxNDY5NDE5QjE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sTWFjLm1tICov
LAorCQkJCURDRUUyMjA0MUNFQjk4NjkwMDBDMjM5NiAvKiBCYWNrd2FyZHNHcmFwaC5oICovLAog
CQkJCTBGQjE0RTE4MTgwRkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLywKIAkJCQkwRkIxNEUxQTE4
MTBFMURBMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggKi8sCiAJCQkJQThBNDcyNUYxNTFBODI1
QTAwNDEyM0ZGIC8qIEJpdG1hcC5oICovLApAQCAtMTE1NSw2ICsxMTU4LDcgQEAKIAkJCQlBOEE0
NzM5MTE1MUE4MjVCMDA0MTIzRkYgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUVCOTVFMUYwMTYxQTcyNDEwMDg5QTJGNSAvKiBCeXRlT3JkZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3M0FEMTUxQTgyNUIwMDQxMjNGRiAvKiBjYWNoZWQtcG93ZXJzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlEQ0VFMjIwNTFDRUI5ODY5MDAwQzIzOTYgLyogQmFja3dhcmRz
R3JhcGguaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDVFMTUxQTgyNUIwMDQxMjNGRiAvKiBD
aGFyYWN0ZXJOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTQxNTFBODI1QjAwNDEy
M0ZGIC8qIENoZWNrZWRBcml0aG1ldGljLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5NTE1
MUE4MjVCMDA0MTIzRkYgLyogQ2hlY2tlZEJvb2xlYW4uaCBpbiBIZWFkZXJzICovLApJbmRleDog
U291cmNlL1dURi93dGYvQmFja3dhcmRzR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9CYWNrd2FyZHNHcmFwaC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvQmFj
a3dhcmRzR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdURl9CYWNrd2Fy
ZHNHcmFwaF9oCisjZGVmaW5lIFdURl9CYWNrd2FyZHNHcmFwaF9oCisKKyNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEdyYXBoPgorY2xhc3MgQmFja3dhcmRzR3JhcGggeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEJhY2t3YXJkc0dyYXBoKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKworICAgIGNsYXNzIE5vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgTm9kZSh0eXBl
bmFtZSBHcmFwaDo6Tm9kZSBub2RlID0gdHlwZW5hbWUgR3JhcGg6Ok5vZGUoKSkKKyAgICAgICAg
ICAgIDogbV9ub2RlKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRp
YyBOb2RlIHJvb3QoKQorICAgICAgICB7CisgICAgICAgICAgICBOb2RlIHJlc3VsdDsKKyAgICAg
ICAgICAgIHJlc3VsdC5tX25vZGUgPSAwOworICAgICAgICAgICAgcmVzdWx0Lm1faXNSb290ID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgTm9kZSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX25vZGUgPT0gb3RoZXIubV9ub2RlCisgICAgICAgICAgICAgICAgJiYg
bV9pc1Jvb3QgPT0gb3RoZXIubV9pc1Jvb3Q7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgTm9kZSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAqdGhpcyAhPSBOb2RlKCk7IH0KKworICAg
ICAgICBib29sIGlzUm9vdCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2lzUm9vdDsKKyAgICAgICAgfQorCisgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIG5vZGUo
KSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVu
YW1lIEdyYXBoOjpOb2RlIG1fbm9kZTsKKyAgICAgICAgYm9vbCBtX2lzUm9vdCB7IGZhbHNlIH07
CisgICAgfTsKKworICAgIGNsYXNzIFNldCB7CisgICAgcHVibGljOgorICAgICAgICBTZXQoKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgYWRkKGNvbnN0IE5v
ZGUmIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlLmlzUm9vdCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBjaGVja0FuZFNldChtX2hhc1Jvb3QsIHRydWUpOworICAgICAg
ICAgICAgcmV0dXJuIG1fc2V0LmFkZChub2RlLm5vZGUoKSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHJlbW92ZShjb25zdCBOb2RlJiBub2RlKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobm9kZS5pc1Jvb3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hlY2tBbmRTZXQobV9o
YXNSb290LCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gbV9zZXQucmVtb3ZlKG5vZGUubm9k
ZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgTm9kZSYgbm9k
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUuaXNSb290KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1faGFzUm9vdDsKKyAgICAgICAgICAgIHJldHVybiBtX3NldC5jb250YWlu
cyhub2RlLm5vZGUoKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgb3V0LnByaW50KCJ7aGFzUm9v
dCA9ICIsIG1faGFzUm9vdCwgIiwgc2V0ID0gIiwgbV9zZXQsICJ9Iik7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZW5hbWUgR3JhcGg6OlNldCBtX3NldDsK
KyAgICAgICAgYm9vbCBtX2hhc1Jvb3QgeyBmYWxzZSB9OworICAgIH07CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIGNsYXNzIE1hcCB7CisgICAgcHVibGljOgorICAgICAgICBNYXAo
R3JhcGgmIGdyYXBoKQorICAgICAgICAgICAgOiBtX21hcChncmFwaC50ZW1wbGF0ZSBuZXdNYXA8
VD4oKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVhcigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fbWFwLmNsZWFyKCk7CisgICAgICAgICAgICBtX3Jvb3QgPSBU
KCk7CisgICAgICAgIH0KKworICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLnNpemUoKSArIDE7IH0KKworICAgICAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFpbmRleCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9yb290OworICAgICAgICAgICAgcmV0dXJuIG1fbWFwW2luZGV4IC0gMV07CisgICAgICAg
IH0KKworICAgICAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICgqY29uc3RfY2FzdDxNYXAqPih0aGlzKSlbaW5k
ZXhdOworICAgICAgICB9CisKKyAgICAgICAgVCYgb3BlcmF0b3JbXShjb25zdCBOb2RlJiBub2Rl
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZS5pc1Jvb3QoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9yb290OworICAgICAgICAgICAgcmV0dXJuIG1fbWFwW25vZGUubm9kZSgp
XTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oY29uc3QgTm9kZSYg
bm9kZSkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICgqY29uc3RfY2FzdDxN
YXAqPih0aGlzKSlbbm9kZV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgdHlwZW5hbWUgR3JhcGg6OnRlbXBsYXRlIE1hcDxUPiBtX21hcDsKKyAgICAgICAgVCBt
X3Jvb3Q7CisgICAgfTsKKworICAgIHR5cGVkZWYgVmVjdG9yPE5vZGUsIDQ+IExpc3Q7CisKKyAg
ICBCYWNrd2FyZHNHcmFwaChHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogbV9ncmFwaChncmFwaCkK
KyAgICB7CisgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PHR5cGVuYW1lIEdyYXBoOjpOb2RlLCB0
eXBlbmFtZSBHcmFwaDo6U2V0PiB3b3JrbGlzdDsKKworICAgICAgICBhdXRvIGFkZFJvb3RTdWNj
ZXNzb3IgPSBbJl0gKHR5cGVuYW1lIEdyYXBoOjpOb2RlIG5vZGUpIHsKKyAgICAgICAgICAgIGlm
ICh3b3JrbGlzdC5wdXNoKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgbV9yb290U3VjY2Vzc29y
TGlzdC5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICAgICAgbV9yb290U3VjY2Vzc29yU2V0LmFk
ZChub2RlKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9k
ZSA9IHdvcmtsaXN0LnBvcCgpKQorICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoQWxs
KGdyYXBoLnByZWRlY2Vzc29ycyhub2RlKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdyYXBoLm51bU5vZGVzKCk7ICsraSkg
eworICAgICAgICAgICAgaWYgKHR5cGVuYW1lIEdyYXBoOjpOb2RlIG5vZGUgPSBncmFwaC5ub2Rl
KGkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFncmFwaC5zdWNjZXNzb3JzKG5vZGUpLnNpemUo
KSkKKyAgICAgICAgICAgICAgICAgICAgYWRkUm9vdFN1Y2Nlc3Nvcihub2RlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlcmUgd2lsbCBi
ZSBzb21lIG5vZGVzIGluIHRoZSBncmFwaCB0aGF0IGFyZW4ndCBrbm93biB0byB0aGUgd29ya2xp
c3QuIFdlCisgICAgICAgIC8vIGNvdWxkIGFkZCBhbnkgb3IgYWxsIG9mIHRoZW0gdG8gdGhlIHJv
b3Qgc3VjY2Vzc29ycyBsaXN0LiBBZGRpbmcgYWxsIG9mIHRoZW0gd291bGQgYmUgYSBiYWQKKyAg
ICAgICAgLy8gcGVzc2ltaXNhdGlvbi4gSWRlYWxseSB3ZSB3b3VsZCBwaWNrIHRoZSBvbmVzIHRo
YXQgaGF2ZSBiYWNrd2FyZCBlZGdlcyBidXQgbm8gZm9yd2FyZAorICAgICAgICAvLyBlZGdlcy4g
VGhhdCB3b3VsZCByZXF1aXJlIHRoaW5raW5nLCBzbyB3ZSBqdXN0IHVzZSBhIHJvdWdoIGhldXJp
c3RpYzogYWRkIHRoZSBoaWdoZXN0CisgICAgICAgIC8vIG51bWJlcmVkIG5vZGVzIGZpcnN0LCB3
aGljaCBpcyB0b3RhbGx5IGZpbmUgaWYgdGhlIGlucHV0IHByb2dyYW0gaXMgYWxyZWFkeSBzb3J0
ZWQgbmljZWx5LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5udW1Ob2RlcygpOyBp
LS07KSB7CisgICAgICAgICAgICBpZiAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9kZSA9IGdyYXBo
Lm5vZGUoaSkpCisgICAgICAgICAgICAgICAgYWRkUm9vdFN1Y2Nlc3Nvcihub2RlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIE5vZGU6OnJvb3QoKTsgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4g
TWFwPFQ+KG1fZ3JhcGgpOyB9CisKKyAgICBMaXN0IHN1Y2Nlc3NvcnMoY29uc3QgTm9kZSYgbm9k
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChub2RlLmlzUm9vdCgpKQorICAgICAgICAgICAg
cmV0dXJuIG1fcm9vdFN1Y2Nlc3Nvckxpc3Q7CisgICAgICAgIExpc3QgcmVzdWx0OworICAgICAg
ICBmb3IgKHR5cGVuYW1lIEdyYXBoOjpOb2RlIHByZWRlY2Vzc29yIDogbV9ncmFwaC5wcmVkZWNl
c3NvcnMobm9kZS5ub2RlKCkpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwcmVkZWNlc3Nv
cik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgTGlzdCBwcmVkZWNlc3Nv
cnMoY29uc3QgTm9kZSYgbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChub2RlLmlzUm9v
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBMaXN0IHJlc3VsdDsKKyAg
ICAgICAgCisgICAgICAgIGlmIChtX3Jvb3RTdWNjZXNzb3JTZXQuY29udGFpbnMobm9kZS5ub2Rl
KCkpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChOb2RlOjpyb290KCkpOworCisgICAgICAg
IGZvciAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgc3VjY2Vzc29yIDogbV9ncmFwaC5zdWNjZXNzb3Jz
KG5vZGUubm9kZSgpKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3VjY2Vzc29yKTsKKwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGluZGV4KGNvbnN0
IE5vZGUmIG5vZGUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobm9kZS5pc1Jvb3QoKSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9ncmFwaC5pbmRleChub2RlLm5v
ZGUoKSkgKyAxOworICAgIH0KKworICAgIE5vZGUgbm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghaW5kZXgpCisgICAgICAgICAgICByZXR1cm4gTm9kZTo6cm9v
dCgpOworICAgICAgICByZXR1cm4gbV9ncmFwaC5ub2RlKGluZGV4IC0gMSk7CisgICAgfQorCisg
ICAgdW5zaWduZWQgbnVtTm9kZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZ3Jh
cGgubnVtTm9kZXMoKSArIDE7CisgICAgfQorCisgICAgQ1N0cmluZyBkdW1wKE5vZGUgbm9kZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgaWYg
KCFub2RlKQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICAgICAgZWxzZSBp
ZiAobm9kZS5pc1Jvb3QoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgicm9vdCIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQobV9ncmFwaC5kdW1wKG5vZGUubm9kZSgpKSk7
CisgICAgICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7CisgICAgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtTm9kZXMoKTsgKytpKSB7CisgICAgICAgICAgICBOb2RlIG5vZGUgPSB0aGlz
LT5ub2RlKGkpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgb3V0LnByaW50KGR1bXAobm9kZSksICI6XG4iKTsKKyAgICAgICAg
ICAgIG91dC5wcmludCgiICAgIFByZWRzOiAiKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBj
b21tYTsKKyAgICAgICAgICAgIGZvciAoTm9kZSBwcmVkZWNlc3NvciA6IHByZWRlY2Vzc29ycyhu
b2RlKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGR1bXAocHJlZGVjZXNzb3Ip
KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgi
ICAgIFN1Y2NzOiAiKTsKKyAgICAgICAgICAgIGNvbW1hID0gQ29tbWFQcmludGVyKCk7CisgICAg
ICAgICAgICBmb3IgKE5vZGUgc3VjY2Vzc29yIDogc3VjY2Vzc29ycyhub2RlKSkKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIGR1bXAoc3VjY2Vzc29yKSk7CisgICAgICAgICAgICBv
dXQucHJpbnQoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGgm
IG1fZ3JhcGg7CisgICAgTGlzdCBtX3Jvb3RTdWNjZXNzb3JMaXN0OworICAgIHR5cGVuYW1lIEdy
YXBoOjpTZXQgbV9yb290U3VjY2Vzc29yU2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6QmFja3dhcmRzR3JhcGg7CisKKyNlbmRpZiAvLyBXVEZfQmFja3dhcmRzR3Jh
cGhfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oCShyZXZpc2lvbiAyMDEwMzcpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9Eb21pbmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEs
NiArNDEsNyBAQCBjbGFzcyBEb21pbmF0b3JzIHsKIHB1YmxpYzoKICAgICBEb21pbmF0b3JzKEdy
YXBoJiBncmFwaCwgYm9vbCBzZWxmQ2hlY2sgPSBmYWxzZSkKICAgICAgICAgOiBtX2dyYXBoKGdy
YXBoKQorICAgICAgICAsIG1fZGF0YShncmFwaC50ZW1wbGF0ZSBuZXdNYXA8QmxvY2tEYXRhPigp
KQogICAgIHsKICAgICAgICAgTGVuZ2F1ZXJUYXJqYW4gbGVuZ2F1ZXJUYXJqYW4obV9ncmFwaCk7
CiAgICAgICAgIGxlbmdhdWVyVGFyamFuLmNvbXB1dGUoKTsKQEAgLTY3LDcgKzY4LDcgQEAgcHVi
bGljOgogICAgIAogICAgICAgICAvLyBQbGFpbiBzdGFjay1iYXNlZCB3b3JrbGlzdCBiZWNhdXNl
IHdlIGFyZSBndWFyYW50ZWVkIHRvIHNlZSBlYWNoIGJsb2NrIGV4YWN0bHkgb25jZSBhbnl3YXku
CiAgICAgICAgIFZlY3RvcjxHcmFwaE5vZGVXaXRoT3JkZXI8dHlwZW5hbWUgR3JhcGg6Ok5vZGU+
PiB3b3JrbGlzdDsKLSAgICAgICAgd29ya2xpc3QuYXBwZW5kKEdyYXBoTm9kZVdpdGhPcmRlcjx0
eXBlbmFtZSBHcmFwaDo6Tm9kZT4obV9ncmFwaC5ub2RlKDApLCBHcmFwaFZpc2l0T3JkZXI6OlBy
ZSkpOworICAgICAgICB3b3JrbGlzdC5hcHBlbmQoR3JhcGhOb2RlV2l0aE9yZGVyPHR5cGVuYW1l
IEdyYXBoOjpOb2RlPihtX2dyYXBoLnJvb3QoKSwgR3JhcGhWaXNpdE9yZGVyOjpQcmUpKTsKICAg
ICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEdyYXBoTm9k
ZVdpdGhPcmRlcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZT4gaXRlbSA9IHdvcmtsaXN0LnRha2VMYXN0
KCk7CiAgICAgICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIpIHsKQEAgLTI3OSwxMCArMjgwLDEw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChtX2RhdGFbYmxvY2tJbmRleF0ucHJlTnVtYmVy
ID09IFVJTlRfTUFYKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBvdXQucHJpbnQoIiAgICBCbG9jayAjIiwgYmxvY2tJbmRleCwgIjogaWRvbSA9
ICIsIHBvaW50ZXJEdW1wKG1fZGF0YVtibG9ja0luZGV4XS5pZG9tUGFyZW50KSwgIiwgaWRvbUtp
ZHMgPSBbIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICBCbG9jayAjIiwgYmxvY2tJbmRl
eCwgIjogaWRvbSA9ICIsIG1fZ3JhcGguZHVtcChtX2RhdGFbYmxvY2tJbmRleF0uaWRvbVBhcmVu
dCksICIsIGlkb21LaWRzID0gWyIpOwogICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGF0YVtibG9ja0luZGV4XS5p
ZG9tS2lkcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICpt
X2RhdGFbYmxvY2tJbmRleF0uaWRvbUtpZHNbaV0pOworICAgICAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgbV9ncmFwaC5kdW1wKG1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkc1tpXSkpOwog
ICAgICAgICAgICAgb3V0LnByaW50KCJdLCBwcmUvcG9zdCA9ICIsIG1fZGF0YVtibG9ja0luZGV4
XS5wcmVOdW1iZXIsICIvIiwgbV9kYXRhW2Jsb2NrSW5kZXhdLnBvc3ROdW1iZXIsICJcbiIpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMzQ3LDcgKzM0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAvLyBvZiBub3Qgbm90aWNpbmcgQS0+QyB1bnRpbCB3ZSdyZSBkb25lIHByb2Nlc3NpbmcgQi4K
IAogICAgICAgICAgICAgRXh0ZW5kZWRHcmFwaE5vZGVXb3JrbGlzdDx0eXBlbmFtZSBHcmFwaDo6
Tm9kZSwgdW5zaWduZWQsIHR5cGVuYW1lIEdyYXBoOjpTZXQ+IHdvcmtsaXN0OwotICAgICAgICAg
ICAgd29ya2xpc3QucHVzaChtX2dyYXBoLm5vZGUoMCksIDApOworICAgICAgICAgICAgd29ya2xp
c3QucHVzaChtX2dyYXBoLnJvb3QoKSwgMCk7CiAgICAgICAgIAogICAgICAgICAgICAgd2hpbGUg
KEdyYXBoTm9kZVdpdGg8dHlwZW5hbWUgR3JhcGg6Ok5vZGUsIHVuc2lnbmVkPiBpdGVtID0gd29y
a2xpc3QucG9wKCkpIHsKICAgICAgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9j
ayA9IGl0ZW0ubm9kZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0dyYXBoTm9kZVdvcmtsaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAkocmV2aXNp
b24gMjAxMDM3KQorKysgU291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBzdHJ1Y3QgR3JhcGhOb2RlV2l0aCB7CiAgICAgewog
ICAgIH0KIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBub2Rl
OyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbm9kZTsg
fQogICAgIAogICAgIE5vZGUgbm9kZTsKICAgICBUIGRhdGE7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRy
YXMuaAkocmV2aXNpb24gMjAxMDM3KQorKysgU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5OSw2ICsyOTksMTUgQEAgUmVzdWx0VHlwZSBjYWxsU3RhdGVs
ZXNzTGFtYmRhKEFyZ3VtZW50VAogICAgIHJldHVybiAoKmJpdHdpc2VfY2FzdDxGdW5jKj4oZGF0
YSkpKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2Jvb2wgY2hlY2tBbmRTZXQoVCYgbGVmdCwg
VSByaWdodCkKK3sKKyAgICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGxlZnQgPSByaWdodDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV1RGCiAKIC8vIFRoaXMgdmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9taXRzIGEgMCBjaGVj
ay4KQEAgLTQwOSwxNyArNDE4LDE4IEBAIEFMV0FZU19JTkxJTkUgY29uc3RleHByIHR5cGVuYW1l
IHJlbW92ZV8KIAogdXNpbmcgV1RGOjpLQjsKIHVzaW5nIFdURjo6TUI7Ci11c2luZyBXVEY6Omlz
Q29tcGlsYXRpb25UaHJlYWQ7Cit1c2luZyBXVEY6OmFwcHJveGltYXRlQmluYXJ5U2VhcmNoOwor
dXNpbmcgV1RGOjpiaW5hcnlTZWFyY2g7Cit1c2luZyBXVEY6OmJpdHdpc2VfY2FzdDsKK3VzaW5n
IFdURjo6Y2FsbFN0YXRlbGVzc0xhbWJkYTsKK3VzaW5nIFdURjo6Y2hlY2tBbmRTZXQ7CiB1c2lu
ZyBXVEY6Omluc2VydEludG9Cb3VuZGVkVmVjdG9yOwordXNpbmcgV1RGOjppc0NvbXBpbGF0aW9u
VGhyZWFkOwogdXNpbmcgV1RGOjppc1BvaW50ZXJBbGlnbmVkOwordXNpbmcgV1RGOjppc1N0YXRl
bGVzc0xhbWJkYTsKIHVzaW5nIFdURjo6aXM4Qnl0ZUFsaWduZWQ7Ci11c2luZyBXVEY6OmJpbmFy
eVNlYXJjaDsKLXVzaW5nIFdURjo6dHJ5QmluYXJ5U2VhcmNoOwotdXNpbmcgV1RGOjphcHByb3hp
bWF0ZUJpbmFyeVNlYXJjaDsKLXVzaW5nIFdURjo6Yml0d2lzZV9jYXN0OwogdXNpbmcgV1RGOjpz
YWZlQ2FzdDsKLXVzaW5nIFdURjo6aXNTdGF0ZWxlc3NMYW1iZGE7Ci11c2luZyBXVEY6OmNhbGxT
dGF0ZWxlc3NMYW1iZGE7Cit1c2luZyBXVEY6OnRyeUJpbmFyeVNlYXJjaDsKIAogI2lmIENPTVBJ
TEVSX1NVUFBPUlRTKENYWF9VU0VSX0xJVEVSQUxTKQogLy8gV2Ugbm9ybWFsbHkgZG9uJ3Qgd2Fu
dCB0byBicmluZyBpbiBlbnRpcmUgc3RkIG5hbWVzcGFjZXMsIGJ1dCBsaXRlcmFscyBhcmUgYW4g
ZXhjZXB0aW9uLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279298</attachid>
            <date>2016-05-18 15:20:50 -0700</date>
            <delta_ts>2016-05-18 22:19:17 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54323</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDEwMzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTk5OSw2ICsxOTk5LDEwIEBACiAJCURDNjA1QjYwMUNF
MjZFQTcwMDU5MzcxOCAvKiBQcm9maWxlclVJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gREM2MDVCNUMxQ0UyNkU5ODAwNTkzNzE4IC8qIFByb2ZpbGVy
VUlELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
REM3OTk3ODMxQ0RFOUZBMDAwNEQ0QTA5IC8qIFRhZ1JlZ2lzdGVyc01vZGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDNzk5NzgyMUNERTlGOUUwMDRE
NEEwOSAvKiBUYWdSZWdpc3RlcnNNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJREM3OTk3ODQxQ0RFOUZBMjAwNEQ0QTA5IC8qIFRhZ1JlZ2lz
dGVyc01vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gREM3OTk3ODExQ0RFOUY5RTAwNEQ0QTA5IC8qIFRhZ1JlZ2lzdGVyc01vZGUuY3BwICovOyB9
OworCQlEQ0VFMjIwOTFDRUI5ODk1MDAwQzIzOTYgLyogREZHQmFja3dhcmRzQ0ZHLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQ0VFMjIwNjFDRUI5ODkw
MDAwQzIzOTYgLyogREZHQmFja3dhcmRzQ0ZHLmggKi87IH07CisJCURDRUUyMjBBMUNFQjk4OTUw
MDBDMjM5NiAvKiBERkdCYWNrd2FyZHNEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQ0VFMjIwNzFDRUI5ODkwMDAwQzIzOTYgLyogREZH
QmFja3dhcmRzRG9taW5hdG9ycy5oICovOyB9OworCQlEQ0VFMjIwQjFDRUI5ODk1MDAwQzIzOTYg
LyogREZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDRUUyMjA4MUNFQjk4OTAwMDBDMjM5NiAvKiBERkdD
b250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oICovOyB9OworCQlEQ0VFMjIwRDFDRUJBRjc1MDAw
QzIzOTYgLyogREZHTnVsbEFic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDRUUyMjBDMUNFQkFGNzMwMDBDMjM5NiAvKiBERkdOdWxs
QWJzdHJhY3RTdGF0ZS5oICovOyB9OwogCQlEQ0YzRDU2OTFDRDI5NDZEMDAzRDVDNjUgLyogTGF6
eUNsYXNzU3RydWN0dXJlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IERDRjNENTY0MUNEMjk0NjgwMDNENUM2NSAvKiBMYXp5Q2xhc3NTdHJ1Y3R1cmUu
Y3BwICovOyB9OwogCQlEQ0YzRDU2QTFDRDI5NDcwMDAzRDVDNjUgLyogTGF6eUNsYXNzU3RydWN0
dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQ0Yz
RDU2NTFDRDI5NDY4MDAzRDVDNjUgLyogTGF6eUNsYXNzU3RydWN0dXJlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRENGM0Q1NkIxQ0QyOTQ3MjAw
M0Q1QzY1IC8qIExhenlDbGFzc1N0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDRjNENTY2MUNEMjk0NjgwMDNENUM2NSAvKiBM
YXp5Q2xhc3NTdHJ1Y3R1cmVJbmxpbmVzLmggKi87IH07CkBAIC00MjE4LDYgKzQyMjIsMTAgQEAK
IAkJREM2MDVCNUMxQ0UyNkU5ODAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyVUlELmg7IHBhdGggPSBwcm9maWxlci9Qcm9m
aWxlclVJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzc5OTc4MTFDREU5RjlF
MDA0RDRBMDkgLyogVGFnUmVnaXN0ZXJzTW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUYWdSZWdpc3RlcnNNb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJREM3OTk3ODIxQ0RFOUY5RTAwNEQ0QTA5IC8qIFRhZ1JlZ2lzdGVyc01vZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGFnUmVnaXN0ZXJzTW9kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQ0VFMjIwNjFDRUI5ODkwMDAwQzIzOTYgLyogREZH
QmFja3dhcmRzQ0ZHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JhY2t3
YXJkc0NGRy5oOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc0NGRy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlEQ0VFMjIwNzFDRUI5ODkwMDAwQzIzOTYgLyogREZHQmFja3dhcmRzRG9t
aW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYWNrd2FyZHNE
b21pbmF0b3JzLmg7IHBhdGggPSBkZmcvREZHQmFja3dhcmRzRG9taW5hdG9ycy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlEQ0VFMjIwODFDRUI5ODkwMDAwQzIzOTYgLyogREZHQ29u
dHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaDsgcGF0aCA9IGRmZy9ERkdDb250cm9s
RXF1aXZhbGVuY2VBbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQ0VF
MjIwQzFDRUJBRjczMDAwQzIzOTYgLyogREZHTnVsbEFic3RyYWN0U3RhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTnVsbEFic3RyYWN0U3RhdGUuaDsgcGF0aCA9IGRm
Zy9ERkdOdWxsQWJzdHJhY3RTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
Q0YzRDU2NDFDRDI5NDY4MDAzRDVDNjUgLyogTGF6eUNsYXNzU3RydWN0dXJlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhenlDbGFzc1N0cnVjdHVyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURDRjNENTY1MUNEMjk0NjgwMDNENUM2NSAvKiBM
YXp5Q2xhc3NTdHJ1Y3R1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF6
eUNsYXNzU3RydWN0dXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURDRjNENTY2
MUNEMjk0NjgwMDNENUM2NSAvKiBMYXp5Q2xhc3NTdHJ1Y3R1cmVJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhenlDbGFzc1N0cnVjdHVyZUlubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxMzQsNiArNjE0Miw4IEBACiAJCQkJMEY2NjZF
QzMxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oICovLAogCQkJCTBGMkI5Q0Q2
MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwICovLAogCQkJCTBGMkI5
Q0Q3MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCAqLywKKwkJCQlEQ0VF
MjIwNjFDRUI5ODkwMDAwQzIzOTYgLyogREZHQmFja3dhcmRzQ0ZHLmggKi8sCisJCQkJRENFRTIy
MDcxQ0VCOTg5MDAwMEMyMzk2IC8qIERGR0JhY2t3YXJkc0RvbWluYXRvcnMuaCAqLywKIAkJCQkw
RjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAgKi8sCiAJCQkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuaCAqLywKIAkJCQlBN0Q4OUNFMzE3QTBCOENDMDA3NzNBRDggLyogREZHQmFz
aWNCbG9jay5jcHAgKi8sCkBAIC02MTgwLDYgKzYxOTAsNyBAQAogCQkJCTBGM0IzQTE4MTUzRTY4
RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovLAogCQkJCTBGRUQ2N0I3
MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovLAogCQkJ
CTBGRUQ2N0I4MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAq
LywKKwkJCQlEQ0VFMjIwODFDRUI5ODkwMDAwQzIzOTYgLyogREZHQ29udHJvbEVxdWl2YWxlbmNl
QW5hbHlzaXMuaCAqLywKIAkJCQkwRkJFMEY2QjE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNkMxNkMxREIwMTAwODJDNUU4IC8qIERG
R0NQU1JldGhyZWFkaW5nUGhhc2UuaCAqLywKIAkJCQlBN0Q4OUNFNjE3QTBCOENDMDA3NzNBRDgg
LyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgKi8sCkBAIC02MjkxLDYgKzYzMDIs
NyBAQAogCQkJCTBGNUQwODVDMUI4Q0Y5OUQwMDExNDNCNCAvKiBERkdOb2RlT3JpZ2luLmNwcCAq
LywKIAkJCQkwRjMwMEI3NzE4QUIwNTExMDBBNkQ3MkUgLyogREZHTm9kZU9yaWdpbi5oICovLAog
CQkJCTBGQTU4MUI5MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlVHlwZS5oICovLAorCQkJCURD
RUUyMjBDMUNFQkFGNzMwMDBDMjM5NiAvKiBERkdOdWxsQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJ
CTBGMkI5Q0RBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1Bo
YXNlLmNwcCAqLywKIAkJCQkwRjJCOUNEQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5oICovLAogCQkJCTBGMkI5Q0RDMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCAqLywKQEAgLTY5NTgsNiArNjk3MCw3
IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJ
MEZGQTU0OTgxNkI4ODM1MzAwQjNBOTgyIC8qIEE2NERPcGNvZGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCURDRUUyMjBBMUNFQjk4OTUwMDBDMjM5NiAvKiBERkdCYWNrd2FyZHNEb21pbmF0b3JzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFz
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjND
MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDAyLDYgKzcwMTUs
NyBAQAogCQkJCUJDMThDM0U1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBUElDYXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRTNBMDZCRTFDMTEwNDEyMDAzOTBGREQgLyogSklUTGVmdFNoaWZ0R2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJn
TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRENFRTIyMDkxQ0VCOTg5NTAwMEMyMzk2IC8qIERG
R0JhY2t3YXJkc0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTQxQUE5MDkxMTAwRDMz
QjMzIC8qIEFyZ3VtZW50c01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNkIxQ0I5MTg2MTI0
NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFBMDA5
QzExODMxQTI2RTAwQ0Y4NzExIC8qIEFSTTY0QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTc5MTYsNiArNzkzMCw3IEBACiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2Zp
bGVyQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NC
MDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIz
ODc5MDFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlEQ0VFMjIwRDFDRUJBRjc1MDAwQzIzOTYgLyogREZHTnVsbEFic3RyYWN0U3Rh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9m
aWxlckNvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtODA2MCw2ICs4MDc1LDcgQEAKIAkJCQkxNDE0NDhDRDEzQTE3ODM3MDBGNUJBMUEgLyogVGlu
eUJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjg0RDQzODFDMDAxNjFDMDA4MUQ2
NjMgLyogQWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU5ODk4MTdDODZDNTgw
MEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRENFRTIy
MEIxQ0VCOTg5NTAwMEMyMzk2IC8qIERGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJENERFOTE5ODMyREFDMDA3RDRCMTkgLyogVG9UaGlzU3RhdHVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tl
ZFJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHJldmlz
aW9uIDIwMTAzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJh
Y3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw2ICs0MCw4IEBAIHB1YmxpYzoKICAgICAKICAg
ICB+QXRUYWlsQWJzdHJhY3RTdGF0ZSgpOwogICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgCiAgICAgdm9pZCBpbml0aWFsaXplVG8o
QmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc0NGRy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzQ0ZHLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc0NGRy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCYWNrd2FyZHNDRkdfaAorI2RlZmluZSBERkdC
YWNrd2FyZHNDRkdfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDRkcu
aCIKKyNpbmNsdWRlIDx3dGYvQmFja3dhcmRzR3JhcGguaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBCYWNrd2FyZHNDRkcgOiBwdWJsaWMgQmFja3dhcmRzR3Jh
cGg8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFja3dhcmRzQ0ZHKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBCYWNrd2FyZHNDRkcoR3JhcGgm
IGdyYXBoKQorICAgICAgICA6IEJhY2t3YXJkc0dyYXBoPENGRz4oKmdyYXBoLm1fY2ZnKQorICAg
IHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0JhY2t3YXJkc0NGR19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzRG9taW5hdG9ycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzRG9taW5hdG9ycy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNE
b21pbmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0JhY2t3YXJkc0Rv
bWluYXRvcnNfaAorI2RlZmluZSBERkdCYWNrd2FyZHNEb21pbmF0b3JzX2gKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFja3dhcmRzQ0ZHLmgiCisjaW5jbHVkZSA8d3Rm
L0RvbWluYXRvcnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIEJhY2t3YXJkc0RvbWluYXRvcnMgOiBwdWJsaWMgV1RGOjpEb21pbmF0b3JzPEJhY2t3YXJk
c0NGRz4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhY2t3YXJkc0RvbWluYXRvcnMpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEJhY2t3YXJkc0RvbWlu
YXRvcnMoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFdURjo6RG9taW5hdG9yczxCYWNrd2FyZHND
Rkc+KGdyYXBoLmVuc3VyZUJhY2t3YXJkc0NGRygpKQorICAgIHsKKyAgICB9Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR0RvbWluYXRvcnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCShyZXZpc2lvbiAyMDEwMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsMTUgKzI1NSw2IEBAIGVudW0gY2xhc3Mg
UGxhblN0YWdlIHsKICAgICBBZnRlckZpeHVwCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPgotYm9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQotewotICAgIGlm
IChsZWZ0ID09IHJpZ2h0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbGVmdCA9IHJpZ2h0
OwotICAgIHJldHVybiB0cnVlOwotfQotCiAvLyBJZiBwb3NzaWJsZSwgdGhpcyB3aWxsIGFjcXVp
cmUgYSBsb2NrIHRvIG1ha2Ugc3VyZSB0aGF0IGlmIG11bHRpcGxlIHRocmVhZHMKIC8vIHN0YXJ0
IGNyYXNoaW5nIGF0IHRoZSBzYW1lIHRpbWUsIHlvdSBnZXQgY29oZXJlbnQgZHVtcCBvdXRwdXQu
IFVzZSB0aGlzIG9ubHkKIC8vIHdoZW4geW91J3JlIGZvcmNpbmcgYSBjcmFzaCB3aXRoIGRpYWdu
b3N0aWNzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb250cm9sRXF1aXZh
bGVuY2VBbmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXNfaAor
I2RlZmluZSBERkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpc19oCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJERkdCYWNrd2Fy
ZHNEb21pbmF0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyhHcmFwaCYgZ3JhcGgp
CisgICAgICAgIDogbV9kb21pbmF0b3JzKGdyYXBoLmVuc3VyZURvbWluYXRvcnMoKSkKKyAgICAg
ICAgLCBtX2JhY2t3YXJkc0RvbWluYXRvcnMoZ3JhcGguZW5zdXJlQmFja3dhcmRzRG9taW5hdG9y
cygpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWZmOgor
ICAgIC8vCisgICAgLy8gLSBJZiBiIGV4ZWN1dGVzIHRoZW4gYSBtdXN0IGhhdmUgZXhlY3V0ZWQg
YmVmb3JlIGl0IChhIGRvbWluYXRlcyBiKS4KKyAgICAvLyAtIElmIGEgZXhlY3V0ZXMgdGhlbiBi
IHdpbGwgZXhlY3V0ZSBhZnRlciBpdCAoYiBiYWNrd2FyZHMtZG9taW5hdGVzIGEpLgorICAgIC8v
CisgICAgLy8gTm90ZSB0aGF0IGxpa2UgRG9taW5hdG9ycyBhbmQgQmFja3dhcmRzRG9taW5hdG9y
cywgdGhpcyBhbmFseXNpcyBpZ25vcmVzIE9TUjoKKyAgICAvLworICAgIC8vIC0gVGhpcyBtYXkg
cmV0dXJuIHRydWUgZXZlbiBpZiB3ZSBPU1IgZW50ZXIgaW4gYmV0ZWVuIGEgYW5kIGIuIE9TUiBl
bnRyeSB3b3VsZCBtZWFuIHRoYXQgYgorICAgIC8vICAgY291bGQgZXhlY3V0ZSBldmVuIGlmIGEg
aGFkIG5vdCBleGVjdXRlZC4gVGhpcyBpcyBpbXBvc3NpYmxlIGluIERGRyBTU0EgYnV0IGl0J3Mg
cG9zc2libGUKKyAgICAvLyAgIGluIERGRyBDUFMuCisgICAgLy8gLSBUaGlzIG1heSByZXR1cm4g
dHJ1ZSBldmVuIGlmIHdlIE9TUiBleGl0IGluIGJldHdlZW4gYSBhbmQgYi4gT1NSIGV4aXQgd291
bGQgbWVhbiB0aGF0IGEKKyAgICAvLyAgIGNvdWxkIGV4ZWN1dGUgZXZlbiB0aG91Z2ggYiB3aWxs
IG5vdCBleGVjdXRlLiBUaGlzIGlzIHBvc3NpYmxlIGluIGFsbCBmb3JtcyBvZiBERkcgSVIuCisg
ICAgLy8KKyAgICAvLyBJbiBERkcgU1NBIHlvdSBvbmx5IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhl
IGRlZmluaXRpb24gYmVpbmcgd2Vha2VkIGJ5IGV4aXRzLiBUaGlzIGlzIHVzdWFsbHkKKyAgICAv
LyBPSywgc2luY2Ugd2UgdXNlIHRoaXMgYW5hbHlzaXMgdG8gZGV0ZXJtaW5lIHRoZSBjb3N0IG9m
IG1vdmluZyBleGl0cyBmcm9tIG9uZSBibG9jayB0bworICAgIC8vIGFub3RoZXIuIElmIHdlIG1v
dmUgYW4gZXhpdCBmcm9tIGIgdG8gYSBhbmQgYSBlcXVpdmFsZW50bHkgZG9taW5hdGVzIGIgdGhl
biBhdCB3b3JzdCB3ZSBoYXZlCisgICAgLy8gbWFkZSB0aGUgZXhpdCBoYXBwZW4gc29vbmVyLiBJ
ZiB3ZSBtb3ZlIGFuIGV4aXQgZnJvbSBiIHRvIGEgYW5kIGEgZG9taW5hdGVzIGIgYnV0IG5vdAor
ICAgIC8vIGVxdWl2YWxlbnRseSB0aGVuIHdlJ3ZlIGRvbmUgc29tZXRoaW5nIG11Y2ggd29yc2U6
IHRoZSBwcm9ncmFtIG1heSBub3cgZXhpdCBldmVuIGlmIGl0IHdvdWxkCisgICAgLy8gbm90IGhh
dmUgZXZlciBleGl0ZWQgYmVmb3JlLgorICAgIGJvb2wgZG9taW5hdGVzRXF1aXZhbGVudGx5KEJh
c2ljQmxvY2sqIGEsIEJhc2ljQmxvY2sqIGIpCisgICAgeworICAgICAgICByZXR1cm4gbV9kb21p
bmF0b3JzLmRvbWluYXRlcyhhLCBiKQorICAgICAgICAgICAgJiYgbV9iYWNrd2FyZHNEb21pbmF0
b3JzLmRvbWluYXRlcyhiLCBhKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyByZXR1cm5zIHRy
dWUgaWZmIHRoZSBleGVjdXRpb24gb2YgYSBpbXBsaWVzIHRoYXQgYiBhbHNvIGV4ZWN1dGVzIGFu
ZCB2aWNlLXZlcnNhLgorICAgIGJvb2wgYXJlRXF1aXZhbGVudChCYXNpY0Jsb2NrKiBhLCBCYXNp
Y0Jsb2NrKiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRvbWluYXRlc0VxdWl2YWxlbnRseShh
LCBiKQorICAgICAgICAgICAgfHwgZG9taW5hdGVzRXF1aXZhbGVudGx5KGIsIGEpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBEb21pbmF0b3JzJiBtX2RvbWluYXRvcnM7CisgICAgQmFja3dhcmRz
RG9taW5hdG9ycyYgbV9iYWNrd2FyZHNEb21pbmF0b3JzOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdD
b250cm9sRXF1aXZhbGVuY2VBbmFseXNpc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyMDEwMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEzIEBACiAj
aW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCisjaW5jbHVkZSAi
REZHQmFja3dhcmRzRG9taW5hdG9ycy5oIgorI2luY2x1ZGUgIkRGR0JhY2t3YXJkc0NGRy5oIgog
I2luY2x1ZGUgIkRGR0Jsb2NrV29ya2xpc3QuaCIKKyNpbmNsdWRlICJERkdDRkcuaCIKICNpbmNs
dWRlICJERkdDbG9iYmVyU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIK
LSNpbmNsdWRlICJERkdDRkcuaCIKKyNpbmNsdWRlICJERkdDb250cm9sRXF1aXZhbGVuY2VBbmFs
eXNpcy5oIgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJERkdKSVRDb2Rl
LmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgpAQCAtNDE5LDYgKzQyMiwxOCBAQCB2b2lkIEdy
YXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgICAgIG91dC5wcmludChwcmVm
aXgsICIgIERvbWluYW5jZSBGcm9udGllcjogIiwgbV9kb21pbmF0b3JzLT5kb21pbmFuY2VGcm9u
dGllck9mKGJsb2NrKSwgIlxuIik7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIEl0ZXJh
dGVkIERvbWluYW5jZSBGcm9udGllcjogIiwgbV9kb21pbmF0b3JzLT5pdGVyYXRlZERvbWluYW5j
ZUZyb250aWVyT2YoQmxvY2tMaXN0KDEsIGJsb2NrKSksICJcbiIpOwogICAgIH0KKyAgICBpZiAo
bV9iYWNrd2FyZHNEb21pbmF0b3JzICYmIHRlcm1pbmFsc0FyZVZhbGlkKCkpIHsKKyAgICAgICAg
b3V0LnByaW50KHByZWZpeCwgIiAgQmFja3dhcmRzIGRvbWluYXRlcyBieTogIiwgbV9iYWNrd2Fy
ZHNEb21pbmF0b3JzLT5kb21pbmF0b3JzT2YoYmxvY2spLCAiXG4iKTsKKyAgICAgICAgb3V0LnBy
aW50KHByZWZpeCwgIiAgQmFja3dhcmRzIGRvbWluYXRlczogIiwgbV9iYWNrd2FyZHNEb21pbmF0
b3JzLT5ibG9ja3NEb21pbmF0ZWRCeShibG9jayksICJcbiIpOworICAgIH0KKyAgICBpZiAobV9j
b250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyAmJiB0ZXJtaW5hbHNBcmVWYWxpZCgpKSB7CisgICAg
ICAgIG91dC5wcmludChwcmVmaXgsICIgIENvbnRyb2wgZXF1aXZhbGVudCB0bzoiKTsKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBvdGhlckJsb2NrIDogYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkg
eworICAgICAgICAgICAgaWYgKG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMtPmFyZUVxdWl2
YWxlbnQoYmxvY2ssIG90aGVyQmxvY2spKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiICIs
ICpvdGhlckJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAg
fQogICAgIGlmIChtX3ByZVBvc3ROdW1iZXJpbmcpCiAgICAgICAgIG91dC5wcmludChwcmVmaXgs
ICIgIFByZS9Qb3N0IE51bWJlcmluZzogIiwgbV9wcmVQb3N0TnVtYmVyaW5nLT5wcmVOdW1iZXIo
YmxvY2spLCAiLyIsIG1fcHJlUG9zdE51bWJlcmluZy0+cG9zdE51bWJlcihibG9jayksICJcbiIp
OwogICAgIGlmIChtX25hdHVyYWxMb29wcykgewpAQCAtNzUzLDYgKzc2OCw5IEBAIHZvaWQgR3Jh
cGg6OmludmFsaWRhdGVDRkcoKQogICAgIG1fZG9taW5hdG9ycyA9IG51bGxwdHI7CiAgICAgbV9u
YXR1cmFsTG9vcHMgPSBudWxscHRyOwogICAgIG1fcHJlUG9zdE51bWJlcmluZyA9IG51bGxwdHI7
CisgICAgbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyA9IG51bGxwdHI7CisgICAgbV9iYWNr
d2FyZHNEb21pbmF0b3JzID0gbnVsbHB0cjsKKyAgICBtX2JhY2t3YXJkc0NGRyA9IG51bGxwdHI7
CiB9CiAKIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywg
dW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVB
Y2Nlc3NEYXRhLCBOb2RlKiBuZXdHZXRMb2NhbCkKQEAgLTE0MjYsMjMgKzE0NDQsNDcgQEAgdm9p
ZCBHcmFwaDo6aGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSgKICAgICBjcmFzaCgqdGhpcywgdG9DU3Ry
aW5nKCJXaGlsZSBoYW5kbGluZyBibG9jayAiLCBwb2ludGVyRHVtcChibG9jayksICJcblxuIiks
IGZpbGUsIGxpbmUsIGZ1bmN0aW9uLCBhc3NlcnRpb24pOwogfQogCi12b2lkIEdyYXBoOjplbnN1
cmVEb21pbmF0b3JzKCkKK0RvbWluYXRvcnMmIEdyYXBoOjplbnN1cmVEb21pbmF0b3JzKCkKIHsK
ICAgICBpZiAoIW1fZG9taW5hdG9ycykKICAgICAgICAgbV9kb21pbmF0b3JzID0gc3RkOjptYWtl
X3VuaXF1ZTxEb21pbmF0b3JzPigqdGhpcyk7CisgICAgcmV0dXJuICptX2RvbWluYXRvcnM7CiB9
CiAKLXZvaWQgR3JhcGg6OmVuc3VyZVByZVBvc3ROdW1iZXJpbmcoKQorUHJlUG9zdE51bWJlcmlu
ZyYgR3JhcGg6OmVuc3VyZVByZVBvc3ROdW1iZXJpbmcoKQogewogICAgIGlmICghbV9wcmVQb3N0
TnVtYmVyaW5nKQogICAgICAgICBtX3ByZVBvc3ROdW1iZXJpbmcgPSBzdGQ6Om1ha2VfdW5pcXVl
PFByZVBvc3ROdW1iZXJpbmc+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fcHJlUG9zdE51bWJlcmlu
ZzsKIH0KIAotdm9pZCBHcmFwaDo6ZW5zdXJlTmF0dXJhbExvb3BzKCkKK05hdHVyYWxMb29wcyYg
R3JhcGg6OmVuc3VyZU5hdHVyYWxMb29wcygpCiB7CiAgICAgZW5zdXJlRG9taW5hdG9ycygpOwog
ICAgIGlmICghbV9uYXR1cmFsTG9vcHMpCiAgICAgICAgIG1fbmF0dXJhbExvb3BzID0gc3RkOjpt
YWtlX3VuaXF1ZTxOYXR1cmFsTG9vcHM+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fbmF0dXJhbExv
b3BzOworfQorCitCYWNrd2FyZHNDRkcmIEdyYXBoOjplbnN1cmVCYWNrd2FyZHNDRkcoKQorewor
ICAgIGlmICghbV9iYWNrd2FyZHNDRkcpCisgICAgICAgIG1fYmFja3dhcmRzQ0ZHID0gc3RkOjpt
YWtlX3VuaXF1ZTxCYWNrd2FyZHNDRkc+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fYmFja3dhcmRz
Q0ZHOworfQorCitCYWNrd2FyZHNEb21pbmF0b3JzJiBHcmFwaDo6ZW5zdXJlQmFja3dhcmRzRG9t
aW5hdG9ycygpCit7CisgICAgaWYgKCFtX2JhY2t3YXJkc0RvbWluYXRvcnMpCisgICAgICAgIG1f
YmFja3dhcmRzRG9taW5hdG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8QmFja3dhcmRzRG9taW5hdG9y
cz4oKnRoaXMpOworICAgIHJldHVybiAqbV9iYWNrd2FyZHNEb21pbmF0b3JzOworfQorCitDb250
cm9sRXF1aXZhbGVuY2VBbmFseXNpcyYgR3JhcGg6OmVuc3VyZUNvbnRyb2xFcXVpdmFsZW5jZUFu
YWx5c2lzKCkKK3sKKyAgICBpZiAoIW1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMpCisgICAg
ICAgIG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRy
b2xFcXVpdmFsZW5jZUFuYWx5c2lzPigqdGhpcyk7CisgICAgcmV0dXJuICptX2NvbnRyb2xFcXVp
dmFsZW5jZUFuYWx5c2lzOwogfQogCiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBo
OjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyMDEwMzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2
LDEwIEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIAogbmFtZXNwYWNlIERGRyB7CiAKK2NsYXNzIEJhY2t3
YXJkc0NGRzsKK2NsYXNzIEJhY2t3YXJkc0RvbWluYXRvcnM7CiBjbGFzcyBDRkc7CitjbGFzcyBD
b250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKIGNsYXNzIERvbWluYXRvcnM7CiBjbGFzcyBOYXR1
cmFsTG9vcHM7CiBjbGFzcyBQcmVQb3N0TnVtYmVyaW5nOwpAQCAtODAwLDkgKzgwMywxMiBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzRGVidWdnZXJFbmFibGVkOyB9CiAKLSAgICB2b2lkIGVuc3VyZURvbWluYXRvcnMoKTsKLSAg
ICB2b2lkIGVuc3VyZVByZVBvc3ROdW1iZXJpbmcoKTsKLSAgICB2b2lkIGVuc3VyZU5hdHVyYWxM
b29wcygpOworICAgIERvbWluYXRvcnMmIGVuc3VyZURvbWluYXRvcnMoKTsKKyAgICBQcmVQb3N0
TnVtYmVyaW5nJiBlbnN1cmVQcmVQb3N0TnVtYmVyaW5nKCk7CisgICAgTmF0dXJhbExvb3BzJiBl
bnN1cmVOYXR1cmFsTG9vcHMoKTsKKyAgICBCYWNrd2FyZHNDRkcmIGVuc3VyZUJhY2t3YXJkc0NG
RygpOworICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGVuc3VyZUJhY2t3YXJkc0RvbWluYXRvcnMo
KTsKKyAgICBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyYgZW5zdXJlQ29udHJvbEVxdWl2YWxl
bmNlQW5hbHlzaXMoKTsKIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBtYWtlcyBzZW5zZSB0
byBjYWxsIGFmdGVyIGJ5dGVjb2RlIHBhcnNpbmcKICAgICAvLyBiZWNhdXNlIGl0IHF1ZXJpZXMg
dGhlIG1faGFzRXhjZXB0aW9uSGFuZGxlcnMgYm9vbGVhbiB3aG9zZSB2YWx1ZQpAQCAtODc5LDYg
Kzg4NSw5IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJlUG9zdE51bWJlcmluZz4g
bV9wcmVQb3N0TnVtYmVyaW5nOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxOYXR1cmFsTG9vcHM+IG1f
bmF0dXJhbExvb3BzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDRkc+IG1fY2ZnOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxCYWNrd2FyZHNDRkc+IG1fYmFja3dhcmRzQ0ZHOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxCYWNrd2FyZHNEb21pbmF0b3JzPiBtX2JhY2t3YXJkc0RvbWluYXRvcnM7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzPiBtX2NvbnRyb2xFcXVpdmFs
ZW5jZUFuYWx5c2lzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1f
bmV4dE1hY2hpbmVMb2NhbDsKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuaAkocmV2aXNpb24gMjAxMDM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
blBsYWNlQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw2ICs0Miw4IEBAIHB1Ymxp
YzoKICAgICAKICAgICB+SW5QbGFjZUFic3RyYWN0U3RhdGUoKTsKICAgICAKKyAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAogICAgIHZvaWQg
Y3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqKSB7IH0KICAgICAKICAgICBBYnN0cmFjdFZhbHVlJiBm
b3JOb2RlKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJ
Q01QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
SUNNUGhhc2UuY3BwCShyZXZpc2lvbiAyMDEwMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0xJQ01QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw5ICszMywxMSBAQAog
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlclNl
dC5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdDb250cm9sRXF1
aXZhbGVuY2VBbmFseXNpcy5oIgogI2luY2x1ZGUgIkRGR0VkZ2VEb21pbmF0ZXMuaCIKICNpbmNs
dWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUg
IkRGR01heUV4aXQuaCIKICNpbmNsdWRlICJERkdOYXR1cmFsTG9vcHMuaCIKICNpbmNsdWRlICJE
RkdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1NhZmVUb0V4ZWN1dGUuaCIKQEAgLTc0LDYgKzc2LDcg
QEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7
CiAgICAgICAgIG1fZ3JhcGguZW5zdXJlTmF0dXJhbExvb3BzKCk7CisgICAgICAgIG1fZ3JhcGgu
ZW5zdXJlQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMoKTsKIAogICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIExJQ006XG4iKTsKQEAgLTMx
NSw2ICszMTgsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgICAgICAKKyAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSwgbV9zdGF0
ZSkKKyAgICAgICAgICAgICYmICFtX2dyYXBoLm1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMt
PmRvbWluYXRlc0VxdWl2YWxlbnRseShkYXRhLnByZUhlYWRlciwgZnJvbUJsb2NrKSkgeworICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAg
ICAgICAgICAgICAgICAiICAgIE5vdCBob2lzdGluZyAiLCBub2RlLCAiIGJlY2F1c2UgaXQgbWF5
IGV4aXQgYW5kIHRoZSBwcmUtaGVhZGVyICgiLAorICAgICAgICAgICAgICAgICAgICAqZGF0YS5w
cmVIZWFkZXIsICIpIGlzIG5vdCBjb250cm9sIGVxdWl2YWxlbnQgdG8gdGhlIG5vZGUncyBvcmln
aW5hbCBibG9jayAoIiwKKyAgICAgICAgICAgICAgICAgICAgKmZyb21CbG9jaywgIilcbiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIAogICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygKICAgICAg
ICAgICAgICAgICAiICAgIEhvaXN0aW5nICIsIG5vZGUsICIgZnJvbSAiLCAqZnJvbUJsb2NrLCAi
IHRvICIsICpkYXRhLnByZUhlYWRlciwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMjAxMDM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2MCArMjgsMTggQEAK
IAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHQXRUYWlsQWJzdHJhY3RTdGF0
ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1
ZGUgIkRGR051bGxBYnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKLWNsYXNzIEVk
Z2VNYXlFeGl0IHsKLXB1YmxpYzoKLSAgICBFZGdlTWF5RXhpdCgpCi0gICAgICAgIDogbV9yZXN1
bHQoZmFsc2UpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoTm9kZSos
IEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBj
YWxsIG1heUhhdmVUeXBlQ2hlY2soZWRnZS51c2VLaW5kKCkpIGluc3RlYWQuCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg1NDUKLSAgICAgICAg
aWYgKGVkZ2Uud2lsbEhhdmVDaGVjaygpKSB7Ci0gICAgICAgICAgICBtX3Jlc3VsdCA9IHRydWU7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGVkZ2Uu
dXNlS2luZCgpKSB7Ci0gICAgICAgIC8vIFRoZXNlIGFyZSBzaGFkeSBiZWNhdXNlIG5vZGVzIHRo
YXQgaGF2ZSB0aGVzZSB1c2Uga2luZHMgd2lsbCB0eXBpY2FsbHkgZXhpdCBmb3IKLSAgICAgICAg
Ly8gdW5yZWxhdGVkIHJlYXNvbnMuIEZvciBleGFtcGxlIENvbXBhcmVFcSBkb2Vzbid0IHVzdWFs
bHkgZXhpdCwgYnV0IGlmIGl0IHVzZXMgT2JqZWN0VXNlCi0gICAgICAgIC8vIHRoZW4gaXQgd2ls
bC4KLSAgICAgICAgY2FzZSBPYmplY3RVc2U6Ci0gICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVz
ZToKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgCi0gICAgICAgIC8vIFRoZXNlIGFyZSBzaGFkeSBiZWNhdXNlIHRoZXkgY2hlY2sg
dGhlIHN0cnVjdHVyZSBldmVuIGlmIHRoZSB0eXBlIG9mIHRoZSBjaGlsZCBub2RlCi0gICAgICAg
IC8vIHBhc3NlcyB0aGUgU3RyaW5nT2JqZWN0IHR5cGUgZmlsdGVyLgotICAgICAgICBjYXNlIFN0
cmluZ09iamVjdFVzZToKLSAgICAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToKLSAg
ICAgICAgICAgIG1fcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICBib29sIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9Ci0g
ICAgCi1wcml2YXRlOgotICAgIGJvb2wgbV9yZXN1bHQ7Ci19OwotCi19IC8vIGFub255bW91cyBu
YW1lc3BhY2UKLQotRXhpdE1vZGUgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBTdGF0ZVR5cGU+CitFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiB7CiAgICAgRXhpdE1vZGUgcmVz
dWx0ID0gRG9lc05vdEV4aXQ7CiAgICAgCkBAIC0xNTQsMTUgKzExMiw2OCBAQCBFeGl0TW9kZSBt
YXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kCiAgICAgICAgIC8vIElmIGluIGRvdWJ0LCBy
ZXR1cm4gdHJ1ZS4KICAgICAgICAgcmV0dXJuIEV4aXRzOwogICAgIH0KLQotICAgIEVkZ2VNYXlF
eGl0IGZ1bmN0b3I7Ci0gICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIGZ1
bmN0b3IpOwotICAgIGlmIChmdW5jdG9yLnJlc3VsdCgpKQotICAgICAgICByZXN1bHQgPSBFeGl0
czsKICAgICAKKyAgICBncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgIG5vZGUsCisgICAgICAg
IFsmXSAoRWRnZSYgZWRnZSkgeworICAgICAgICAgICAgaWYgKHN0YXRlKSB7CisgICAgICAgICAg
ICAgICAgLy8gSWdub3JlIHRoZSBDaGVjayBmbGFnIG9uIHRoZSBlZGdlLiBUaGlzIGlzIGltcG9y
dGFudCBiZWNhdXNlIHRoYXQgZmxhZyBhbnN3ZXJzCisgICAgICAgICAgICAgICAgLy8gdGhlIHF1
ZXN0aW9uOiAid291bGQgdGhpcyBlZGdlIGhhdmUgaGFkIGEgY2hlY2sgaWYgaXQgZXhlY3V0ZWQg
d2hlcmV2ZXIgaXQKKyAgICAgICAgICAgICAgICAvLyBjdXJyZW50bHkgcmVzaWRlcyBpbiBjb250
cm9sIGZsb3c/IiBCdXQgd2hlbiBhIHN0YXRlIGlzIHBhc3NlZCwgd2Ugd2FudCB0byBhc2sgYQor
ICAgICAgICAgICAgICAgIC8vIGRpZmZlcmVudCBxdWVzdGlvbjogIndvdWxkIHRoaXMgZWRnZSBo
YXZlIGEgY2hlY2sgaWYgaXQgZXhlY3V0ZWQgd2hlcmV2ZXIgdGhpcworICAgICAgICAgICAgICAg
IC8vIHN0YXRlIGlzPyIgVXNpbmcgdGhlIENoZWNrIGZsYWcgZm9yIHRoaXMgcHVycG9zZSB3b3Vs
ZG4ndCBldmVuIGJlIGNvbnNlcnZhdGl2ZWx5CisgICAgICAgICAgICAgICAgLy8gY29ycmVjdC4g
SXQgd291bGQgYmUgd3JvbmcgaW4gYm90aCBkaXJlY3Rpb25zLgorICAgICAgICAgICAgICAgIGlm
IChtYXlIYXZlVHlwZUNoZWNrKGVkZ2UudXNlS2luZCgpKQorICAgICAgICAgICAgICAgICAgICAm
JiAoc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+dHlwZUZpbHRlckZvcihlZGdlLnVzZUtp
bmQoKSkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEV4aXRzOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgY2FsbCBtYXlI
YXZlVHlwZUNoZWNrKGVkZ2UudXNlS2luZCgpKSBpbnN0ZWFkLgorICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg1NDUKKyAgICAgICAg
ICAgICAgICBpZiAoZWRnZS53aWxsSGF2ZUNoZWNrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gRXhpdHM7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAo
ZWRnZS51c2VLaW5kKCkpIHsKKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBzaGFkeSBiZWNhdXNl
IG5vZGVzIHRoYXQgaGF2ZSB0aGVzZSB1c2Uga2luZHMgd2lsbCB0eXBpY2FsbHkgZXhpdCBmb3IK
KyAgICAgICAgICAgIC8vIHVucmVsYXRlZCByZWFzb25zLiBGb3IgZXhhbXBsZSBDb21wYXJlRXEg
ZG9lc24ndCB1c3VhbGx5IGV4aXQsIGJ1dCBpZiBpdCB1c2VzCisgICAgICAgICAgICAvLyBPYmpl
Y3RVc2UgdGhlbiBpdCB3aWxsLgorICAgICAgICAgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAg
ICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gRXhp
dHM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBUaGVzZSBhcmUgc2hhZHkgYmVjYXVzZSB0aGV5IGNoZWNrIHRoZSBzdHJ1Y3R1cmUgZXZl
biBpZiB0aGUgdHlwZSBvZiB0aGUgY2hpbGQgbm9kZQorICAgICAgICAgICAgLy8gcGFzc2VzIHRo
ZSBTdHJpbmdPYmplY3QgdHlwZSBmaWx0ZXIuCisgICAgICAgICAgICBjYXNlIFN0cmluZ09iamVj
dFVzZToKKyAgICAgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gRXhpdHM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK30g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitFeGl0TW9kZSBtYXlFeGl0KEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSkKK3sKKyAgICBOdWxsQWJzdHJhY3RTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4g
bWF5RXhpdEltcGwoZ3JhcGgsIG5vZGUsIHN0YXRlKTsKK30KKworRXhpdE1vZGUgbWF5RXhpdChH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEF0VGFpbEFic3RyYWN0U3RhdGUmIHN0YXRlKQorewor
ICAgIHJldHVybiBtYXlFeGl0SW1wbChncmFwaCwgbm9kZSwgc3RhdGUpOworfQorCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNYXlFeGl0LmgJKHJldmlzaW9uIDIwMTAzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMw
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitjbGFzcyBBdFRhaWxB
YnN0cmFjdFN0YXRlOwogY2xhc3MgR3JhcGg7CiBzdHJ1Y3QgTm9kZTsKIApAQCAtNzQsNiArNzUs
MTEgQEAgZW51bSBFeGl0TW9kZSB7CiAKIEV4aXRNb2RlIG1heUV4aXQoR3JhcGgmLCBOb2RlKik7
CiAKKy8vIExpa2UgbWF5RXhpdCgpLCBidXQgaW5zdGVhZCBvZiB1c2luZyB0aGUgQ2hlY2s6IGZs
YWcgdG8gZGV0ZXJtaW5lIGlmIHNvbWV0aGluZyBleGl0cywgaXQKKy8vIGV2YWx1YXRlcyB3aGV0
aGVyIGl0IHdpbGwgZXhpdCBiYXNlZCBvbiB0aGUgdGFpbCBzdGF0ZS4gVGhpcyBpcyB1c2VmdWwg
Zm9yIExJQ00uIFRoaXMgKm1heSogYWxzbworLy8gdXNlIHRoZSBBdFRhaWxBYnN0cmFjdFN0YXRl
IHRvIHJldHVybiBtb3JlIHByZWNpc2UgYW5zd2VycyBmb3Igb3RoZXIgbm9kZXMuCitFeGl0TW9k
ZSBtYXlFeGl0KEdyYXBoJiwgTm9kZSosIEF0VGFpbEFic3RyYWN0U3RhdGUmKTsKKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTnVsbEFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR051bGxBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR051bGxBYnN0cmFjdFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR051bGxBYnN0cmFjdFN0YXRlX2gKKyNkZWZp
bmUgREZHTnVsbEFic3RyYWN0U3RhdGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgRWRnZTsKK3N0cnVjdCBBYnN0cmFj
dFZhbHVlOworc3RydWN0IE5vZGU7CisKKy8vIFVzZSB0aGlzIGFzIGEgc3R1YiBmb3IgdGhpbmdz
IHRoYXQgY2FuIG9wdGlvbmFsbHkgdGFrZSBzb21lIGtpbmQgb2YgYWJzdHJhY3Qgc3RhdGUgYnV0
IHlvdSB3aXNoCisvLyB0byBub3QgcGFzcyBhbnkgYWJzdHJhY3Qgc3RhdGUuIFRoaXMgd29ya3Mg
aWYgdGhlIHRlbXBsYXRpemVkIGNvZGUgYWxzbyBkb2VzIGEgY2hlY2sgKHVzaW5nIHRoZQorLy8g
b3BlcmF0b3IgYm9vbCkgdG8gc2VlIGlmIHRoZSBzdGF0ZSBpcyB2YWxpZC4KK2NsYXNzIE51bGxB
YnN0cmFjdFN0YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBOdWxsQWJzdHJhY3RTdGF0ZSgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIEFic3RyYWN0VmFsdWUmIGZv
ck5vZGUoTm9kZSopCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxBYnN0cmFjdFZhbHVlKj4oc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KDB4MTIzNCkpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdFZhbHVlJiBm
b3JOb2RlKEVkZ2UpCisgICAgeworICAgICAgICByZXR1cm4gZm9yTm9kZShudWxscHRyKTsKKyAg
ICB9CisgICAgCisgICAgLy8gSXQncyB2YWxpZCB0byBhZGQgbW9yZSBzdHViIG1ldGhvZHMgaGVy
ZSBhcyBuZWVkZWQuCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR051bGxBYnN0cmFjdFN0YXRlX2gKKwpJ
bmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDEwMzcpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDEsNiArMzAxLDcgQEAKIAkJQ0Q1NDk3QUQxNTg1N0QwMzAwQjVCQzMw
IC8qIE1lZGlhVGltZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0Q1NDk3QUIxNTg1N0QwMzAwQjVCQzMwIC8qIE1lZGlhVGltZS5oICovOyB9OwogCQlD
RTQ2NTE2RTE5REIxRkI0MDAzRUNBMDUgLyogTlNNYXBUYWJsZVNQSS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0U0NjUxNkQxOURCMUZCNDAwM0VDQTA1
IC8qIE5TTWFwVGFibGVTUEkuaCAqLzsgfTsKIAkJQ0U3M0UwMjUxOURDQjdBQjAwNTgwRDVDIC8q
IFhQQ1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0U3M0UwMjQxOURDQjdBQjAwNTgwRDVDIC8qIFhQQ1NQSS5oICovOyB9OworCQlEQ0VFMjIwNTFD
RUI5ODY5MDAwQzIzOTYgLyogQmFja3dhcmRzR3JhcGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDRUUyMjA0MUNFQjk4NjkwMDBDMjM5NiAvKiBCYWNr
d2FyZHNHcmFwaC5oICovOyB9OwogCQlERTVBMDlGQzFCQTM2OTkyMDAzRDQ0MjQgLyogQ29tbW9u
Q3J5cHRvU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBERTVBMDlGQjFCQTM2OTkyMDAzRDQ0MjQgLyogQ29tbW9uQ3J5cHRvU1BJLmggKi87IH07CiAJ
CUUxNTU1NkY1MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTU1NkYzMThB
MENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcCAqLzsgfTsKIAkJRTE1
NTU2RjYxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTU1NkY0MThBMENDMTgw
MDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggKi87IH07CkBAIC02MjIsNiArNjIz
LDcgQEAKIAkJQ0Q1NDk3QUIxNTg1N0QwMzAwQjVCQzMwIC8qIE1lZGlhVGltZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0U0NjUxNkQxOURCMUZCNDAwM0VDQTA1IC8qIE5TTWFwVGFibGVTUEkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNNYXBUYWJsZVNQSS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDRTczRTAyNDE5RENCN0FCMDA1ODBENUMgLyogWFBDU1BJ
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhQQ1NQSS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlEQ0VFMjIwNDFDRUI5ODY5MDAwQzIzOTYgLyogQmFja3dhcmRz
R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFja3dhcmRzR3JhcGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREU1QTA5RkIxQkEzNjk5MjAwM0Q0NDI0
IC8qIENvbW1vbkNyeXB0b1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b21tb25DcnlwdG9TUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1NTU2RjMx
OEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTU1NkY0MThBMENDMTgwMDZGNDhGQiAvKiBD
cnlwdG9ncmFwaGljVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTc2Myw2ICs3NjUsNyBAQAogCQkJCUE4QTQ3MjVEMTUxQTgyNUEwMDQxMjNGRiAvKiBBdG9taWNz
LmggKi8sCiAJCQkJMTQ2OTQxOUExNkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFpbmVkUG9vbC5o
ICovLAogCQkJCTE0Njk0MTlCMTZFQUIxMEEwMDI0RTE0NiAvKiBBdXRvZHJhaW5lZFBvb2xNYWMu
bW0gKi8sCisJCQkJRENFRTIyMDQxQ0VCOTg2OTAwMEMyMzk2IC8qIEJhY2t3YXJkc0dyYXBoLmgg
Ki8sCiAJCQkJMEZCMTRFMTgxODBGQTIxODAwOUI2QjREIC8qIEJhZy5oICovLAogCQkJCTBGQjE0
RTFBMTgxMEUxREEwMDlCNkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLywKIAkJCQlBOEE0NzI1RjE1
MUE4MjVBMDA0MTIzRkYgLyogQml0bWFwLmggKi8sCkBAIC0xMTU1LDYgKzExNTgsNyBAQAogCQkJ
CUE4QTQ3MzkxMTUxQTgyNUIwMDQxMjNGRiAvKiBCdW1wUG9pbnRlckFsbG9jYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRUI5NUUxRjAxNjFBNzI0MTAwODlBMkY1IC8qIEJ5dGVPcmRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQUQxNTFBODI1QjAwNDEyM0ZGIC8qIGNhY2hlZC1wb3dl
cnMuaCBpbiBIZWFkZXJzICovLAorCQkJCURDRUUyMjA1MUNFQjk4NjkwMDBDMjM5NiAvKiBCYWNr
d2FyZHNHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NUUxNTFBODI1QjAwNDEyM0ZG
IC8qIENoYXJhY3Rlck5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5NDE1MUE4MjVC
MDA0MTIzRkYgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
Mzk1MTUxQTgyNUIwMDQxMjNGRiAvKiBDaGVja2VkQm9vbGVhbi5oIGluIEhlYWRlcnMgKi8sCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWNrd2FyZHNHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0JhY2t3YXJkc0dyYXBoLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0
Zi9CYWNrd2FyZHNHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX0Jh
Y2t3YXJkc0dyYXBoX2gKKyNkZWZpbmUgV1RGX0JhY2t3YXJkc0dyYXBoX2gKKworI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+Cisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgR3JhcGg+CitjbGFzcyBCYWNrd2FyZHNHcmFwaCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQmFja3dhcmRzR3JhcGgpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorCisgICAgY2xhc3MgTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBOb2Rl
KHR5cGVuYW1lIEdyYXBoOjpOb2RlIG5vZGUgPSB0eXBlbmFtZSBHcmFwaDo6Tm9kZSgpKQorICAg
ICAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
c3RhdGljIE5vZGUgcm9vdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5vZGUgcmVzdWx0Owor
ICAgICAgICAgICAgcmVzdWx0Lm1fbm9kZSA9IDA7CisgICAgICAgICAgICByZXN1bHQubV9pc1Jv
b3QgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBOb2RlJiBvdGhlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fbm9kZSA9PSBvdGhlci5tX25vZGUKKyAgICAgICAgICAgICAg
ICAmJiBtX2lzUm9vdCA9PSBvdGhlci5tX2lzUm9vdDsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBOb2RlJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IE5vZGUoKTsgfQor
CisgICAgICAgIGJvb2wgaXNSb290KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1faXNSb290OworICAgICAgICB9CisKKyAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUg
bm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
dHlwZW5hbWUgR3JhcGg6Ok5vZGUgbV9ub2RlOworICAgICAgICBib29sIG1faXNSb290IHsgZmFs
c2UgfTsKKyAgICB9OworCisgICAgY2xhc3MgU2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNl
dCgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBhZGQoY29u
c3QgTm9kZSYgbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUuaXNSb290KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrQW5kU2V0KG1faGFzUm9vdCwgdHJ1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gbV9zZXQuYWRkKG5vZGUubm9kZSgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgcmVtb3ZlKGNvbnN0IE5vZGUmIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChub2RlLmlzUm9vdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBjaGVja0FuZFNl
dChtX2hhc1Jvb3QsIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBtX3NldC5yZW1vdmUobm9k
ZS5ub2RlKCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBOb2Rl
JiBub2RlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZS5pc1Jvb3QoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9oYXNSb290OworICAgICAgICAgICAgcmV0dXJuIG1fc2V0LmNv
bnRhaW5zKG5vZGUubm9kZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9oYXNSb290
KQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiI3Rlcm1pbmFsICIpOworICAgICAgICAgICAg
b3V0LnByaW50KG1fc2V0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICB0eXBlbmFtZSBHcmFwaDo6U2V0IG1fc2V0OworICAgICAgICBib29sIG1faGFzUm9vdCB7
IGZhbHNlIH07CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3Mg
TWFwIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE1hcChHcmFwaCYgZ3JhcGgpCisgICAgICAgICAg
ICA6IG1fbWFwKGdyYXBoLnRlbXBsYXRlIG5ld01hcDxUPigpKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9tYXAu
Y2xlYXIoKTsKKyAgICAgICAgICAgIG1fcm9vdCA9IFQoKTsKKyAgICAgICAgfQorCisgICAgICAg
IHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpICsgMTsgfQorCisgICAg
ICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoIWluZGV4KQorICAgICAgICAgICAgICAgIHJldHVybiBtX3Jvb3Q7CisgICAgICAgICAgICBy
ZXR1cm4gbV9tYXBbaW5kZXggLSAxXTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFQmIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gKCpjb25zdF9jYXN0PE1hcCo+KHRoaXMpKVtpbmRleF07CisgICAgICAgIH0KKworICAgICAg
ICBUJiBvcGVyYXRvcltdKGNvbnN0IE5vZGUmIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChub2RlLmlzUm9vdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3Jvb3Q7CisgICAg
ICAgICAgICByZXR1cm4gbV9tYXBbbm9kZS5ub2RlKCldOworICAgICAgICB9CisKKyAgICAgICAg
Y29uc3QgVCYgb3BlcmF0b3JbXShjb25zdCBOb2RlJiBub2RlKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gKCpjb25zdF9jYXN0PE1hcCo+KHRoaXMpKVtub2RlXTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlbmFtZSBHcmFwaDo6dGVt
cGxhdGUgTWFwPFQ+IG1fbWFwOworICAgICAgICBUIG1fcm9vdDsKKyAgICB9OworCisgICAgdHlw
ZWRlZiBWZWN0b3I8Tm9kZSwgND4gTGlzdDsKKworICAgIEJhY2t3YXJkc0dyYXBoKEdyYXBoJiBn
cmFwaCkKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgIHsKKyAgICAgICAgR3JhcGhOb2Rl
V29ya2xpc3Q8dHlwZW5hbWUgR3JhcGg6Ok5vZGUsIHR5cGVuYW1lIEdyYXBoOjpTZXQ+IHdvcmts
aXN0OworCisgICAgICAgIGF1dG8gYWRkUm9vdFN1Y2Nlc3NvciA9IFsmXSAodHlwZW5hbWUgR3Jh
cGg6Ok5vZGUgbm9kZSkgeworICAgICAgICAgICAgaWYgKHdvcmtsaXN0LnB1c2gobm9kZSkpIHsK
KyAgICAgICAgICAgICAgICBtX3Jvb3RTdWNjZXNzb3JMaXN0LmFwcGVuZChub2RlKTsKKyAgICAg
ICAgICAgICAgICBtX3Jvb3RTdWNjZXNzb3JTZXQuYWRkKG5vZGUpOworICAgICAgICAgICAgICAg
IHdoaWxlICh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBub2RlID0gd29ya2xpc3QucG9wKCkpCisgICAg
ICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2hBbGwoZ3JhcGgucHJlZGVjZXNzb3JzKG5vZGUp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZ3JhcGgubnVtTm9kZXMoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAodHlwZW5h
bWUgR3JhcGg6Ok5vZGUgbm9kZSA9IGdyYXBoLm5vZGUoaSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWdyYXBoLnN1Y2Nlc3NvcnMobm9kZSkuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBh
ZGRSb290U3VjY2Vzc29yKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gQXQgdGhpcyBwb2ludCB0aGVyZSB3aWxsIGJlIHNvbWUgbm9kZXMgaW4gdGhlIGdyYXBo
IHRoYXQgYXJlbid0IGtub3duIHRvIHRoZSB3b3JrbGlzdC4gV2UKKyAgICAgICAgLy8gY291bGQg
YWRkIGFueSBvciBhbGwgb2YgdGhlbSB0byB0aGUgcm9vdCBzdWNjZXNzb3JzIGxpc3QuIEFkZGlu
ZyBhbGwgb2YgdGhlbSB3b3VsZCBiZSBhIGJhZAorICAgICAgICAvLyBwZXNzaW1pc2F0aW9uLiBJ
ZGVhbGx5IHdlIHdvdWxkIHBpY2sgdGhlIG9uZXMgdGhhdCBoYXZlIGJhY2t3YXJkIGVkZ2VzIGJ1
dCBubyBmb3J3YXJkCisgICAgICAgIC8vIGVkZ2VzLiBUaGF0IHdvdWxkIHJlcXVpcmUgdGhpbmtp
bmcsIHNvIHdlIGp1c3QgdXNlIGEgcm91Z2ggaGV1cmlzdGljOiBhZGQgdGhlIGhpZ2hlc3QKKyAg
ICAgICAgLy8gbnVtYmVyZWQgbm9kZXMgZmlyc3QsIHdoaWNoIGlzIHRvdGFsbHkgZmluZSBpZiB0
aGUgaW5wdXQgcHJvZ3JhbSBpcyBhbHJlYWR5IHNvcnRlZCBuaWNlbHkuCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGdyYXBoLm51bU5vZGVzKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmICh0
eXBlbmFtZSBHcmFwaDo6Tm9kZSBub2RlID0gZ3JhcGgubm9kZShpKSkKKyAgICAgICAgICAgICAg
ICBhZGRSb290U3VjY2Vzc29yKG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgTm9kZSBy
b290KCkgeyByZXR1cm4gTm9kZTo6cm9vdCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIE1hcDxUPiBuZXdNYXAoKSB7IHJldHVybiBNYXA8VD4obV9ncmFwaCk7IH0KKworICAg
IExpc3Qgc3VjY2Vzc29ycyhjb25zdCBOb2RlJiBub2RlKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG5vZGUuaXNSb290KCkpCisgICAgICAgICAgICByZXR1cm4gbV9yb290U3VjY2Vzc29yTGlz
dDsKKyAgICAgICAgTGlzdCByZXN1bHQ7CisgICAgICAgIGZvciAodHlwZW5hbWUgR3JhcGg6Ok5v
ZGUgcHJlZGVjZXNzb3IgOiBtX2dyYXBoLnByZWRlY2Vzc29ycyhub2RlLm5vZGUoKSkpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBMaXN0IHByZWRlY2Vzc29ycyhjb25zdCBOb2RlJiBub2RlKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKG5vZGUuaXNSb290KCkpCisgICAgICAgICAgICByZXR1cm4g
eyB9OworCisgICAgICAgIExpc3QgcmVzdWx0OworICAgICAgICAKKyAgICAgICAgaWYgKG1fcm9v
dFN1Y2Nlc3NvclNldC5jb250YWlucyhub2RlLm5vZGUoKSkpCisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKE5vZGU6OnJvb3QoKSk7CisKKyAgICAgICAgZm9yICh0eXBlbmFtZSBHcmFwaDo6Tm9k
ZSBzdWNjZXNzb3IgOiBtX2dyYXBoLnN1Y2Nlc3NvcnMobm9kZS5ub2RlKCkpKQorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChzdWNjZXNzb3IpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgaW5kZXgoY29uc3QgTm9kZSYgbm9kZSkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChub2RlLmlzUm9vdCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBtX2dyYXBoLmluZGV4KG5vZGUubm9kZSgpKSArIDE7CisgICAgfQorCisgICAg
Tm9kZSBub2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpbmRl
eCkKKyAgICAgICAgICAgIHJldHVybiBOb2RlOjpyb290KCk7CisgICAgICAgIHJldHVybiBtX2dy
YXBoLm5vZGUoaW5kZXggLSAxKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1Ob2RlcygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ncmFwaC5udW1Ob2RlcygpICsgMTsKKyAgICB9
CisKKyAgICBDU3RyaW5nIGR1bXAoTm9kZSBub2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgU3Ry
aW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICBvdXQu
cHJpbnQoIjxudWxsPiIpOworICAgICAgICBlbHNlIGlmIChub2RlLmlzUm9vdCgpKQorICAgICAg
ICAgICAgb3V0LnByaW50KCJyb290Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5w
cmludChtX2dyYXBoLmR1bXAobm9kZS5ub2RlKCkpKTsKKyAgICAgICAgcmV0dXJuIG91dC50b0NT
dHJpbmcoKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Ob2RlcygpOyArK2kp
IHsKKyAgICAgICAgICAgIE5vZGUgbm9kZSA9IHRoaXMtPm5vZGUoaSk7CisgICAgICAgICAgICBp
ZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBvdXQucHJp
bnQoZHVtcChub2RlKSwgIjpcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgUHJlZHM6
ICIpOworICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgZm9yIChO
b2RlIHByZWRlY2Vzc29yIDogcHJlZGVjZXNzb3JzKG5vZGUpKQorICAgICAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgZHVtcChwcmVkZWNlc3NvcikpOworICAgICAgICAgICAgb3V0LnByaW50
KCJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgU3VjY3M6ICIpOworICAgICAgICAg
ICAgY29tbWEgPSBDb21tYVByaW50ZXIoKTsKKyAgICAgICAgICAgIGZvciAoTm9kZSBzdWNjZXNz
b3IgOiBzdWNjZXNzb3JzKG5vZGUpKQorICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwg
ZHVtcChzdWNjZXNzb3IpKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAg
fQorICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBMaXN0IG1fcm9v
dFN1Y2Nlc3Nvckxpc3Q7CisgICAgdHlwZW5hbWUgR3JhcGg6OlNldCBtX3Jvb3RTdWNjZXNzb3JT
ZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpCYWNrd2FyZHNHcmFw
aDsKKworI2VuZGlmIC8vIFdURl9CYWNrd2FyZHNHcmFwaF9oCisKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0RvbWluYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0b3Jz
LmgJKHJldmlzaW9uIDIwMTAzNykKKysrIFNvdXJjZS9XVEYvd3RmL0RvbWluYXRvcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIERvbWluYXRv
cnMgewogcHVibGljOgogICAgIERvbWluYXRvcnMoR3JhcGgmIGdyYXBoLCBib29sIHNlbGZDaGVj
ayA9IGZhbHNlKQogICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgbV9kYXRhKGdy
YXBoLnRlbXBsYXRlIG5ld01hcDxCbG9ja0RhdGE+KCkpCiAgICAgewogICAgICAgICBMZW5nYXVl
clRhcmphbiBsZW5nYXVlclRhcmphbihtX2dyYXBoKTsKICAgICAgICAgbGVuZ2F1ZXJUYXJqYW4u
Y29tcHV0ZSgpOwpAQCAtNjcsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgICAgIC8vIFBs
YWluIHN0YWNrLWJhc2VkIHdvcmtsaXN0IGJlY2F1c2Ugd2UgYXJlIGd1YXJhbnRlZWQgdG8gc2Vl
IGVhY2ggYmxvY2sgZXhhY3RseSBvbmNlIGFueXdheS4KICAgICAgICAgVmVjdG9yPEdyYXBoTm9k
ZVdpdGhPcmRlcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZT4+IHdvcmtsaXN0OwotICAgICAgICB3b3Jr
bGlzdC5hcHBlbmQoR3JhcGhOb2RlV2l0aE9yZGVyPHR5cGVuYW1lIEdyYXBoOjpOb2RlPihtX2dy
YXBoLm5vZGUoMCksIEdyYXBoVmlzaXRPcmRlcjo6UHJlKSk7CisgICAgICAgIHdvcmtsaXN0LmFw
cGVuZChHcmFwaE5vZGVXaXRoT3JkZXI8dHlwZW5hbWUgR3JhcGg6Ok5vZGU+KG1fZ3JhcGgucm9v
dCgpLCBHcmFwaFZpc2l0T3JkZXI6OlByZSkpOwogICAgICAgICB3aGlsZSAoIXdvcmtsaXN0Lmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgR3JhcGhOb2RlV2l0aE9yZGVyPHR5cGVuYW1lIEdyYXBo
OjpOb2RlPiBpdGVtID0gd29ya2xpc3QudGFrZUxhc3QoKTsKICAgICAgICAgICAgIHN3aXRjaCAo
aXRlbS5vcmRlcikgewpAQCAtMjc5LDEwICsyODAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAg
aWYgKG1fZGF0YVtibG9ja0luZGV4XS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG91dC5wcmludCgiICAg
IEJsb2NrICMiLCBibG9ja0luZGV4LCAiOiBpZG9tID0gIiwgcG9pbnRlckR1bXAobV9kYXRhW2Js
b2NrSW5kZXhdLmlkb21QYXJlbnQpLCAiLCBpZG9tS2lkcyA9IFsiKTsKKyAgICAgICAgICAgIG91
dC5wcmludCgiICAgIEJsb2NrICMiLCBibG9ja0luZGV4LCAiOiBpZG9tID0gIiwgbV9ncmFwaC5k
dW1wKG1fZGF0YVtibG9ja0luZGV4XS5pZG9tUGFyZW50KSwgIiwgaWRvbUtpZHMgPSBbIik7CiAg
ICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9kYXRhW2Jsb2NrSW5kZXhdLmlkb21LaWRzLnNpemUoKTsgKytpKQotICAg
ICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgKm1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lk
c1tpXSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtX2dyYXBoLmR1bXAobV9k
YXRhW2Jsb2NrSW5kZXhdLmlkb21LaWRzW2ldKSk7CiAgICAgICAgICAgICBvdXQucHJpbnQoIl0s
IHByZS9wb3N0ID0gIiwgbV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciwgIi8iLCBtX2RhdGFb
YmxvY2tJbmRleF0ucG9zdE51bWJlciwgIlxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDcs
NyArMzQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIG9mIG5vdCBub3RpY2luZyBBLT5D
IHVudGlsIHdlJ3JlIGRvbmUgcHJvY2Vzc2luZyBCLgogCiAgICAgICAgICAgICBFeHRlbmRlZEdy
YXBoTm9kZVdvcmtsaXN0PHR5cGVuYW1lIEdyYXBoOjpOb2RlLCB1bnNpZ25lZCwgdHlwZW5hbWUg
R3JhcGg6OlNldD4gd29ya2xpc3Q7Ci0gICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG1fZ3JhcGgu
bm9kZSgwKSwgMCk7CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG1fZ3JhcGgucm9vdCgpLCAw
KTsKICAgICAgICAgCiAgICAgICAgICAgICB3aGlsZSAoR3JhcGhOb2RlV2l0aDx0eXBlbmFtZSBH
cmFwaDo6Tm9kZSwgdW5zaWduZWQ+IGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkgewogICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gaXRlbS5ub2RlOwpJbmRleDogU291
cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCShyZXZpc2lvbiAyMDEwMzcpCisrKyBTb3VyY2UvV1RG
L3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBA
IHN0cnVjdCBHcmFwaE5vZGVXaXRoIHsKICAgICB7CiAgICAgfQogCi0gICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG5vZGU7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISFub2RlOyB9CiAgICAgCiAgICAgTm9kZSBub2RlOwog
ICAgIFQgZGF0YTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyMDEwMzcpCisr
KyBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDYg
KzI5OSwxNSBAQCBSZXN1bHRUeXBlIGNhbGxTdGF0ZWxlc3NMYW1iZGEoQXJndW1lbnRUCiAgICAg
cmV0dXJuICgqYml0d2lzZV9jYXN0PEZ1bmMqPihkYXRhKSkoc3RkOjpmb3J3YXJkPEFyZ3VtZW50
VHlwZXM+KGFyZ3VtZW50cykuLi4pOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPgorYm9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQoreworICAgIGlmIChsZWZ0
ID09IHJpZ2h0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbGVmdCA9IHJpZ2h0OworICAg
IHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogLy8gVGhpcyB2ZXJzaW9u
IG9mIHBsYWNlbWVudCBuZXcgb21pdHMgYSAwIGNoZWNrLgpAQCAtNDA5LDE3ICs0MTgsMTggQEAg
QUxXQVlTX0lOTElORSBjb25zdGV4cHIgdHlwZW5hbWUgcmVtb3ZlXwogCiB1c2luZyBXVEY6OktC
OwogdXNpbmcgV1RGOjpNQjsKLXVzaW5nIFdURjo6aXNDb21waWxhdGlvblRocmVhZDsKK3VzaW5n
IFdURjo6YXBwcm94aW1hdGVCaW5hcnlTZWFyY2g7Cit1c2luZyBXVEY6OmJpbmFyeVNlYXJjaDsK
K3VzaW5nIFdURjo6Yml0d2lzZV9jYXN0OwordXNpbmcgV1RGOjpjYWxsU3RhdGVsZXNzTGFtYmRh
OwordXNpbmcgV1RGOjpjaGVja0FuZFNldDsKIHVzaW5nIFdURjo6aW5zZXJ0SW50b0JvdW5kZWRW
ZWN0b3I7Cit1c2luZyBXVEY6OmlzQ29tcGlsYXRpb25UaHJlYWQ7CiB1c2luZyBXVEY6OmlzUG9p
bnRlckFsaWduZWQ7Cit1c2luZyBXVEY6OmlzU3RhdGVsZXNzTGFtYmRhOwogdXNpbmcgV1RGOjpp
czhCeXRlQWxpZ25lZDsKLXVzaW5nIFdURjo6YmluYXJ5U2VhcmNoOwotdXNpbmcgV1RGOjp0cnlC
aW5hcnlTZWFyY2g7Ci11c2luZyBXVEY6OmFwcHJveGltYXRlQmluYXJ5U2VhcmNoOwotdXNpbmcg
V1RGOjpiaXR3aXNlX2Nhc3Q7CiB1c2luZyBXVEY6OnNhZmVDYXN0OwotdXNpbmcgV1RGOjppc1N0
YXRlbGVzc0xhbWJkYTsKLXVzaW5nIFdURjo6Y2FsbFN0YXRlbGVzc0xhbWJkYTsKK3VzaW5nIFdU
Rjo6dHJ5QmluYXJ5U2VhcmNoOwogCiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoQ1hYX1VTRVJfTElU
RVJBTFMpCiAvLyBXZSBub3JtYWxseSBkb24ndCB3YW50IHRvIGJyaW5nIGluIGVudGlyZSBzdGQg
bmFtZXNwYWNlcywgYnV0IGxpdGVyYWxzIGFyZSBhbiBleGNlcHRpb24uCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9saWNtLWRyYWdvbnMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9saWNtLWRyYWdvbnMtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9saWNtLWRyYWdvbnMK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93
bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbGljbS1kcmFnb25zLW92ZXJmbG93LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy1v
dmVyZmxvdy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2xpY20tZHJhZ29ucy1vdmVyZmxvdy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2xpY20tZHJhZ29ucy1vdmVyZmxvdworCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9saWNtLWRyYWdvbnMtb3ZlcmZsb3cuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy1vdmVyZmxvdy5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9saWNtLWRyYWdvbnMtb3ZlcmZsb3cu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9saWNtLWRyYWdvbnMtb3ZlcmZsb3cuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9s
aWNtLWRyYWdvbnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xp
Y20tZHJhZ29ucy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9s
aWNtLWRyYWdvbnMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9saWNtLWRyYWdvbnMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvbGljbS1kcmFnb25zLW92ZXJmbG93LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2xpY20tZHJhZ29ucy1vdmVyZmxvdy5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2xp
Y20tZHJhZ29ucy1vdmVyZmxvdy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACitm
dW5jdGlvbiBmb28ocCwgYSwgYikgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgICAgIGlmIChwKQorICAgICAgICAgICAgcmVz
dWx0ICs9IGEgKyBiOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgKz0gYSAtIGI7
CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBy
ZXN1bHQgPSAwOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgIHJlc3Vs
dCArPSBmb28odHJ1ZSwgMSwgMik7CisgICAgcmVzdWx0ICs9IGZvbyhmYWxzZSwgMjAwMDAwMDAw
MCwgMjAwMDAwMDAwMCk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkKKyAg
ICByZXN1bHQgKz0gZm9vKGZhbHNlLCAyMDAwMDAwMDAwLCAyMDAwMDAwMDAwKTsKKworZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQorICAgIHJlc3VsdCArPSBmb28odHJ1ZSwgMSwgMik7
CisKK2lmIChyZXN1bHQgIT0gMzMwMDAwMDApCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
bGljbS1kcmFnb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2xpY20tZHJhZ29ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2xpY20tZHJhZ29ucy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMxIEBACitmdW5jdGlvbiBmb28ocCwgbykgeworICAgIHZhciByZXN1bHQgPSAwOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgICAgIGlmIChwKQorICAg
ICAgICAgICAgcmVzdWx0ICs9IG8uZjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0
Kys7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3Zh
ciBvID0ge2Y6NDJ9OwordmFyIHAgPSB7fTsKKwordmFyIHJlc3VsdCA9IDA7CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgcmVzdWx0ICs9IGZvbyh0cnVlLCBvKTsKKyAg
ICByZXN1bHQgKz0gZm9vKGZhbHNlLCBwKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKQorICAgIHJlc3VsdCArPSBmb28oZmFsc2UsIHApOworCitmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyArK2kpCisgICAgcmVzdWx0ICs9IGZvbyh0cnVlLCBvKTsKKworaWYgKHJlc3Vs
dCAhPSA0NzMwMDAwMDApCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279348</attachid>
            <date>2016-05-18 22:19:17 -0700</date>
            <delta_ts>2016-05-19 09:46:46 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79872</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAxMTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBA
CisyMDE2LTA1LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHOjpMSUNNUGhhc2Ugc2hvdWxkbid0IGhvaXN0IHR5cGUgY2hlY2tzIHVubGVzcyBpdCBrbm93
cyB0aGF0IHRoZSBjaGVjayB3aWxsIHN1Y2NlZWQgYXQgdGhlIGxvb3AgcHJlLWhlYWRlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NTI3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlz
IGFkZHMgYSBjb250cm9sIGZsb3cgZXF1aXZhbGVuY2UgYW5hbHlzaXMgKGNhbGxlZCBDb250cm9s
RXF1aXZhbGVuY2VBbmFseXNpcykgYmFzZWQgb24KKyAgICAgICAgZG9taW5hdG9yIGFuYWx5c2lz
IG92ZXIgdGhlIGJhY2t3YXJkcyBDRkcuIExJQ00gbm93IHVzZXMgaXQgdG8gYmVjb21lIG1vcmUg
Y29uc2VydmF0aXZlCisgICAgICAgIGFib3V0IGhvaXN0aW5nIGNoZWNrcywgaWYgdGhpcyBoYXMg
Y2F1c2VkIHByb2JsZW1zIGluIHRoZSBwYXN0LiBJZiB3ZSBob2lzdCBzb21ldGhpbmcgdGhhdAor
ICAgICAgICBtYXkgZXhpdCBmcm9tIGEgYmxvY2sgdGhhdCB3YXMgbm90IGNvbnRyb2wgZXF1aXZh
bGVudCB0byB0aGUgcHJlLWhlYWRlciB0aGVuIGl0J3MgcG9zc2libGUKKyAgICAgICAgdGhhdCB0
aGUgbm9kZSdzIHNwZWN1bGF0aW9uIHdpbGwgZmFpbCBldmVuIHRob3VnaCBpdCB3b3VsZG4ndCBo
YXZlIGlmIGl0IHdhc24ndCBob2lzdGVkLiBTbywKKyAgICAgICAgd2UgZmxhZyB0aGVzZSBub2Rl
cycgb3JpZ2lucyBhcyBiZWluZyAid2FzSG9pc3RlZCIgYW5kIHdlIHRyYWNrIGFsbCBvZiB0aGVp
ciBleGl0cyBhcworICAgICAgICAiSG9pc3RpbmdGYWlsZWQiLiBMSUNNIHdpbGwgdHVybiBvZmYg
c3VjaCBzcGVjdWxhdGl2ZSBob2lzdGluZyBpZiB0aGUgQ29kZUJsb2NrIGZyb20gd2hpY2gKKyAg
ICAgICAgd2UgYXJlIGhvaXN0aW5nIGhhZCB0aGUgSG9pc3RpbmdGYWlsZWQgZXhpdCBraW5kLgor
ICAgICAgICAKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgZGVsaWJlcmF0ZWx5IHN0aWxsIGFsbG93
cyB1cyB0byBob2lzdCB0aGluZ3MgdGhhdCBtYXkgZXhpdCBldmVuIGlmIHRoZXkgYXJlCisgICAg
ICAgIG5vdCBjb250cm9sIGVxdWl2YWxlbnQgdG8gdGhlIHByZS1oZWFkZXIuIFRoaXMgaXMgbmVj
ZXNzYXJ5IGJlY2F1c2UgdGhlIHByb2ZpdGFiaWxpdHkgb2YKKyAgICAgICAgaG9pc3RpbmcgaXMg
c28gaHVnZSBpbiBhbGwgb2YgdGhlIGNhc2VzIHRoYXQgd2UncmUgYXdhcmUgb2YgdGhhdCBpdCdz
IHdvcnRoIGdpdmluZyBpdCBhCisgICAgICAgIHNob3QuCisgICAgICAgIAorICAgICAgICBUaGlz
IGlzIG5ldXRyYWwgb24gbWFjcm9iZW5jaG1hcmtzIHNpbmNlIG5vbmUgb2YgdGhlIGJlbmNobWFy
a3Mgd2UgdHJhY2sgaGF2ZSBhIGhvaXN0YWJsZQorICAgICAgICBvcGVyYXRpb24gdGhhdCB3b3Vs
ZCBleGl0IG9ubHkgaWYgaG9pc3RlZC4gSSBhZGRlZCBtaWNyb2JlbmNobWFya3MgdG8gaWxsdXN0
cmF0ZSB0aGUgcHJvYmxlbQorICAgICAgICBhbmQgdHdvIG9mIHRoZW0gc3BlZWQgdXAgYnkgfjQw
JSB3aGlsZSBvbmUgb2YgdGhlbSBpcyBuZXV0cmFsIChJbnQ1MiBzYXZlcyB1cyBmcm9tIGhhdmlu
ZworICAgICAgICBwcm9ibGVtcyBvbiB0aGF0IHByb2dyYW0gZXZlbiB0aG91Z2ggTElDTSBwcmV2
aW91c2x5IGRpZCB0aGUgd3JvbmcgdGhpbmcpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9FeGl0S2luZC5j
cHA6CisgICAgICAgIChKU0M6OmV4aXRLaW5kVG9TdHJpbmcpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0V4aXRLaW5kLmg6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplVG8pOgorICAg
ICAgICAqIGRmZy9ERkdCYWNrd2FyZHNDRkcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzQ0ZHOjpCYWNrd2FyZHNDRkcpOgorICAgICAgICAqIGRmZy9ERkdCYWNrd2FyZHNE
b21pbmF0b3JzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc0RvbWluYXRv
cnM6OkJhY2t3YXJkc0RvbWluYXRvcnMpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjaGVja0FuZFNldCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RG
R0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
OkNvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzOjpDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6Q29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM6OmRvbWluYXRl
c0VxdWl2YWxlbnRseSk6CisgICAgICAgIChKU0M6OkRGRzo6Q29udHJvbEVxdWl2YWxlbmNlQW5h
bHlzaXM6OmFyZUVxdWl2YWxlbnQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpk
dW1wQmxvY2tIZWFkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppbnZhbGlkYXRlQ0ZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6aGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmVuc3VyZURvbWluYXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjplbnN1cmVQcmVQb3N0TnVtYmVyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
ZW5zdXJlTmF0dXJhbExvb3BzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZW5zdXJlQmFj
a3dhcmRzQ0ZHKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZW5zdXJlQmFja3dhcmRzRG9t
aW5hdG9ycyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmVuc3VyZUNvbnRyb2xFcXVpdmFs
ZW5jZUFuYWx5c2lzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZUZvcik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6Omhhc0RlYnVnZ2VyRW5hYmxlZCk6CisgICAgICAgICogZGZnL0RGR0lu
UGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0
U3RhdGU6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFj
dFN0YXRlOjpjcmVhdGVWYWx1ZUZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VB
YnN0cmFjdFN0YXRlOjpmb3JOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTElDTVBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpMSUNNUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6
TElDTVBoYXNlOjphdHRlbXB0SG9pc3QpOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjptYXlFeGl0KToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5o
OgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR05vZGVPcmlnaW4u
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVPcmlnaW46OmR1bXApOgorICAgICAgICAqIGRm
Zy9ERkdOb2RlT3JpZ2luLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZU9yaWdpbjo6dGFrZVZh
bGlkRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZU9yaWdpbjo6d2l0aFdhc0hvaXN0ZWQp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVPcmlnaW46OmZvckluc2VydGluZ0FmdGVyKToKKyAg
ICAgICAgKiBkZmcvREZHTnVsbEFic3RyYWN0U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6TnVsbEFic3RyYWN0U3RhdGU6Ok51bGxBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOdWxsQWJzdHJhY3RTdGF0ZTo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6
OkRGRzo6TnVsbEFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JF
eGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAg
KiBkZmcvREZHT1NSRXhpdEJhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNl
Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFeGl0QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpPU1JFeGl0
QmFzZSk6CisgICAgICAgICogZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6CisgICAgICAgICog
ZnRsL0ZUTE9TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9y
OjpwcmVwYXJlT1NSRXhpdEhhbmRsZSk6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6T1NS
RXhpdCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKwogMjAxNi0wNS0xOCAgU2FhbSBi
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBGdW5jdGlvbiB3aXRoIGRlZmF1
bHQgcGFyYW1ldGVyIHZhbHVlcyB0aGF0IGFyZSBhcnJvdyBmdW5jdGlvbnMgdGhhdCBjYXB0dXJl
IHRoaXMgaXNuJ3Qgd29ya2luZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIwMTAzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xOTk5LDYgKzE5OTks
MTAgQEAKIAkJREM2MDVCNjAxQ0UyNkVBNzAwNTkzNzE4IC8qIFByb2ZpbGVyVUlELmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzYwNUI1QzFDRTI2RTk4
MDA1OTM3MTggLyogUHJvZmlsZXJVSUQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlEQzc5OTc4MzFDREU5RkEwMDA0RDRBMDkgLyogVGFnUmVnaXN0
ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
REM3OTk3ODIxQ0RFOUY5RTAwNEQ0QTA5IC8qIFRhZ1JlZ2lzdGVyc01vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEQzc5OTc4NDFDREU5RkEy
MDA0RDRBMDkgLyogVGFnUmVnaXN0ZXJzTW9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzc5OTc4MTFDREU5RjlFMDA0RDRBMDkgLyogVGFnUmVn
aXN0ZXJzTW9kZS5jcHAgKi87IH07CisJCURDRUUyMjA5MUNFQjk4OTUwMDBDMjM5NiAvKiBERkdC
YWNrd2FyZHNDRkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IERDRUUyMjA2MUNFQjk4OTAwMDBDMjM5NiAvKiBERkdCYWNrd2FyZHNDRkcuaCAqLzsgfTsK
KwkJRENFRTIyMEExQ0VCOTg5NTAwMEMyMzk2IC8qIERGR0JhY2t3YXJkc0RvbWluYXRvcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDRUUyMjA3MUNF
Qjk4OTAwMDBDMjM5NiAvKiBERkdCYWNrd2FyZHNEb21pbmF0b3JzLmggKi87IH07CisJCURDRUUy
MjBCMUNFQjk4OTUwMDBDMjM5NiAvKiBERkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRENFRTIyMDgxQ0VC
OTg5MDAwMEMyMzk2IC8qIERGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmggKi87IH07CisJ
CURDRUUyMjBEMUNFQkFGNzUwMDBDMjM5NiAvKiBERkdOdWxsQWJzdHJhY3RTdGF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRENFRTIyMEMxQ0VCQUY3
MzAwMEMyMzk2IC8qIERGR051bGxBYnN0cmFjdFN0YXRlLmggKi87IH07CiAJCURDRjNENTY5MUNE
Mjk0NkQwMDNENUM2NSAvKiBMYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRENGM0Q1NjQxQ0QyOTQ2ODAwM0Q1QzY1IC8q
IExhenlDbGFzc1N0cnVjdHVyZS5jcHAgKi87IH07CiAJCURDRjNENTZBMUNEMjk0NzAwMDNENUM2
NSAvKiBMYXp5Q2xhc3NTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IERDRjNENTY1MUNEMjk0NjgwMDNENUM2NSAvKiBMYXp5Q2xhc3NTdHJ1
Y3R1cmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlEQ0YzRDU2QjFDRDI5NDcyMDAzRDVDNjUgLyogTGF6eUNsYXNzU3RydWN0dXJlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRENGM0Q1NjYx
Q0QyOTQ2ODAwM0Q1QzY1IC8qIExhenlDbGFzc1N0cnVjdHVyZUlubGluZXMuaCAqLzsgfTsKQEAg
LTQyMTgsNiArNDIyMiwxMCBAQAogCQlEQzYwNUI1QzFDRTI2RTk4MDA1OTM3MTggLyogUHJvZmls
ZXJVSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJVSUQuaDsg
cGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyVUlELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCURDNzk5NzgxMUNERTlGOUUwMDRENEEwOSAvKiBUYWdSZWdpc3RlcnNNb2RlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhZ1JlZ2lzdGVyc01vZGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzc5OTc4MjFDREU5RjlFMDA0RDRBMDkgLyog
VGFnUmVnaXN0ZXJzTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUYWdS
ZWdpc3RlcnNNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURDRUUyMjA2MUNF
Qjk4OTAwMDBDMjM5NiAvKiBERkdCYWNrd2FyZHNDRkcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQmFja3dhcmRzQ0ZHLmg7IHBhdGggPSBkZmcvREZHQmFja3dhcmRzQ0ZH
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURDRUUyMjA3MUNFQjk4OTAwMDBDMjM5
NiAvKiBERkdCYWNrd2FyZHNEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0JhY2t3YXJkc0RvbWluYXRvcnMuaDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNE
b21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURDRUUyMjA4MUNFQjk4
OTAwMDBDMjM5NiAvKiBERkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oOyBw
YXRoID0gZGZnL0RGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCURDRUUyMjBDMUNFQkFGNzMwMDBDMjM5NiAvKiBERkdOdWxsQWJzdHJh
Y3RTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOdWxsQWJzdHJh
Y3RTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR051bGxBYnN0cmFjdFN0YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCURDRjNENTY0MUNEMjk0NjgwMDNENUM2NSAvKiBMYXp5Q2xhc3NT
dHJ1Y3R1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF6eUNs
YXNzU3RydWN0dXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRENGM0Q1NjUx
Q0QyOTQ2ODAwM0Q1QzY1IC8qIExhenlDbGFzc1N0cnVjdHVyZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMYXp5Q2xhc3NTdHJ1Y3R1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRENGM0Q1NjYxQ0QyOTQ2ODAwM0Q1QzY1IC8qIExhenlDbGFzc1N0cnVjdHVy
ZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF6eUNsYXNzU3Ry
dWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjEzNCw2ICs2
MTQyLDggQEAKIAkJCQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5
LmggKi8sCiAJCQkJMEYyQjlDRDYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1h
cC5jcHAgKi8sCiAJCQkJMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0
eU1hcC5oICovLAorCQkJCURDRUUyMjA2MUNFQjk4OTAwMDBDMjM5NiAvKiBERkdCYWNrd2FyZHND
RkcuaCAqLywKKwkJCQlEQ0VFMjIwNzFDRUI5ODkwMDAwQzIzOTYgLyogREZHQmFja3dhcmRzRG9t
aW5hdG9ycy5oICovLAogCQkJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIg
LyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovLAogCQkJCUE3RDg5Q0UzMTdBMEI4
Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLywKQEAgLTYxODAsNiArNjE5MCw3IEBA
CiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmggKi8sCiAJCQkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi8sCiAJCQkJMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0
YW50SG9pc3RpbmdQaGFzZS5oICovLAorCQkJCURDRUUyMjA4MUNFQjk4OTAwMDBDMjM5NiAvKiBE
RkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oICovLAogCQkJCTBGQkUwRjZCMTZDMURCMDEw
MDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2QzE2
QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oICovLAogCQkJCUE3RDg5
Q0U2MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAq
LywKQEAgLTYyOTEsNiArNjMwMiw3IEBACiAJCQkJMEY1RDA4NUMxQjhDRjk5RDAwMTE0M0I0IC8q
IERGR05vZGVPcmlnaW4uY3BwICovLAogCQkJCTBGMzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBE
RkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJMEZBNTgxQjkxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05v
ZGVUeXBlLmggKi8sCisJCQkJRENFRTIyMEMxQ0VCQUY3MzAwMEMyMzk2IC8qIERGR051bGxBYnN0
cmFjdFN0YXRlLmggKi8sCiAJCQkJMEYyQjlDREExOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovLAogCQkJCTBGMkI5Q0RCMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmggKi8sCiAJCQkJMEYyQjlD
REMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwICov
LApAQCAtNjk1OCw2ICs2OTcwLDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
CiAJCQlmaWxlcyA9ICgKIAkJCQkwRkZBNTQ5ODE2Qjg4MzUzMDBCM0E5ODIgLyogQTY0RE9wY29k
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRENFRTIyMEExQ0VCOTg5NTAwMEMyMzk2IC8qIERGR0Jh
Y2t3YXJkc0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUZFNTFDMTkyMkEzQkMw
MDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTMwRjNB
ODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVycyAq
LywKQEAgLTcwMDIsNiArNzAxNSw3IEBACiAJCQkJQkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8q
IEFQSUNhc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFM0EwNkJFMUMxMTA0MTIwMDM5MEZERCAv
KiBKSVRMZWZ0U2hpZnRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRjYwNTE0MEUy
MDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlEQ0VFMjIwOTFD
RUI5ODk1MDAwQzIzOTYgLyogREZHQmFja3dhcmRzQ0ZHLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkUwNTAxNDFBQTkwOTExMDBEMzNCMzMgLyogQXJndW1lbnRzTW9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2QjFDQjkxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMUEwMDlDMTE4MzFBMjZFMDBDRjg3MTEgLyogQVJNNjRBc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtNzkxNiw2ICs3OTMwLDcgQEAKIAkJCQkwRkY3MjlCOTE2NkFE
MzYwMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjM4NzkwMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJs
b2NrT3JkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCURDRUUyMjBEMUNFQkFGNzUwMDBDMjM5NiAv
KiBERkdOdWxsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDYwLDYgKzgwNzUsNyBAQAogCQkJCTE0MTQ0OENEMTNB
MTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2
ODRENDM4MUMwMDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1NTk4OTgxN0M4NkM1ODAwQTFFNTQzIC8qIFRvTmF0aXZlRnJvbVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlEQ0VFMjIwQjFDRUI5ODk1MDAwQzIzOTYgLyogREZHQ29udHJvbEVxdWl2
YWxlbmNlQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REU5MTk4MzJEQUMwMDdE
NEIxOSAvKiBUb1RoaXNTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTUyQUJEMUI0ODdB
NzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QjY3MDYxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oIGluIEhlYWRlcnMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAJ
KHJldmlzaW9uIDIwMTAzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0
S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Niw2ICs3Niw4IEBAIGNvbnN0IGNoYXIqIGV4
aXRLaW5kVG9TdHJpbmcoRXhpdEtpbmQga2kKICAgICAgICAgcmV0dXJuICJWYXJhcmdzT3ZlcmZs
b3ciOwogICAgIGNhc2UgVERaRmFpbHVyZToKICAgICAgICAgcmV0dXJuICJURFpGYWlsdXJlIjsK
KyAgICBjYXNlIEhvaXN0aW5nRmFpbGVkOgorICAgICAgICByZXR1cm4gIkhvaXN0aW5nRmFpbGVk
IjsKICAgICBjYXNlIFVuY291bnRhYmxlOgogICAgICAgICByZXR1cm4gIlVuY291bnRhYmxlIjsK
ICAgICBjYXNlIFVuY291bnRhYmxlSW52YWxpZGF0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgJKHJldmlzaW9uIDIwMTAzNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAs
NiArNTAsNyBAQCBlbnVtIEV4aXRLaW5kIDogdWludDhfdCB7CiAgICAgTm90U3RyaW5nT2JqZWN0
LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBzaG91bGRuJ3QgaGF2ZSBhdHRlbXB0ZWQgdG8gb3B0
aW1pemUgc3RyaW5nIG9iamVjdCBhY2Nlc3MuCiAgICAgVmFyYXJnc092ZXJmbG93LCAvLyBXZSBl
eGl0ZWQgYmVjYXVzZSBhIHZhcmFyZ3MgY2FsbCBwYXNzZWQgbW9yZSBhcmd1bWVudHMgdGhhbiB3
ZSBleHBlY3RlZC4KICAgICBURFpGYWlsdXJlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSB3ZXJl
IGluIHRoZSBURFogYW5kIGFjY2Vzc2VkIHRoZSB2YXJpYWJsZS4KKyAgICBIb2lzdGluZ0ZhaWxl
ZCwgLy8gU29tZXRoaW5nIHRoYXQgd2FzIGhvaXN0ZWQgZXhpdGVkLiBTbywgYXNzdW1lIHRoYXQg
aG9pc3RpbmcgaXMgYSBiYWQgaWRlYS4KICAgICBVbmNvdW50YWJsZSwgLy8gV2UgZXhpdGVkIGZv
ciBub25lIG9mIHRoZSBhYm92ZSByZWFzb25zLCBhbmQgd2Ugc2hvdWxkIG5vdCBjb3VudCBpdC4g
TW9zdCB1c2VzIG9mIHRoaXMgc2hvdWxkIGJlIHZpZXdlZCBhcyBhIEZJWE1FLgogICAgIFVuY291
bnRhYmxlSW52YWxpZGF0aW9uLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB0aGUgY29kZSBibG9jayB3
YXMgaW52YWxpZGF0ZWQ7IHRoaXMgbWVhbnMgdGhhdCB3ZSd2ZSBhbHJlYWR5IGNvdW50ZWQgdGhl
IHJlYXNvbnMgd2h5IHRoZSBjb2RlIGJsb2NrIHdhcyBpbnZhbGlkYXRlZC4KICAgICBXYXRjaGRv
Z1RpbWVyRmlyZWQsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIG5lZWQgdG8gc2VydmljZSB0aGUg
d2F0Y2hkb2cgdGltZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFp
bEFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjAxMDM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQwLDYgKzQwLDggQEAgcHVibGljOgogICAgIAogICAgIH5BdFRhaWxBYnN0cmFjdFN0YXRlKCk7
CiAgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKyAgICAKICAgICB2b2lkIGluaXRpYWxpemVUbyhCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7
CiAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFja3dhcmRzQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYWNrd2FyZHNDRkcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFja3dhcmRzQ0ZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0JhY2t3YXJkc0NGR19oCisjZGVmaW5lIERGR0JhY2t3YXJkc0NGR19oCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NGRy5oIgorI2luY2x1ZGUgPHd0Zi9CYWNrd2Fy
ZHNHcmFwaC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEJh
Y2t3YXJkc0NGRyA6IHB1YmxpYyBCYWNrd2FyZHNHcmFwaDxDRkc+IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShCYWNrd2FyZHNDRkcpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIEJhY2t3YXJkc0NGRyhHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogQmFja3dh
cmRzR3JhcGg8Q0ZHPigqZ3JhcGgubV9jZmcpCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHQmFja3dhcmRzQ0ZHX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYWNrd2FyZHNEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYWNrd2FyZHNEb21pbmF0b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc0RvbWluYXRvcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHQmFja3dhcmRzRG9taW5hdG9yc19oCisjZGVmaW5lIERGR0Jh
Y2t3YXJkc0RvbWluYXRvcnNfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdCYWNrd2FyZHNDRkcuaCIKKyNpbmNsdWRlIDx3dGYvRG9taW5hdG9ycy5oPgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQmFja3dhcmRzRG9taW5hdG9ycyA6
IHB1YmxpYyBXVEY6OkRvbWluYXRvcnM8QmFja3dhcmRzQ0ZHPiB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQmFja3dhcmRzRG9taW5hdG9ycyk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgQmFja3dhcmRzRG9taW5hdG9ycyhHcmFwaCYgZ3JhcGgpCisgICAg
ICAgIDogV1RGOjpEb21pbmF0b3JzPEJhY2t3YXJkc0NGRz4oZ3JhcGguZW5zdXJlQmFja3dhcmRz
Q0ZHKCkpCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRG9taW5hdG9yc19oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDIwMTAzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1NSwxNSArMjU1LDYgQEAgZW51bSBjbGFzcyBQbGFuU3RhZ2UgewogICAgIEFmdGVyRml4
dXAKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1ib29sIGNoZWNrQW5k
U2V0KFQmIGxlZnQsIFUgcmlnaHQpCi17Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBsZWZ0ID0gcmlnaHQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
IC8vIElmIHBvc3NpYmxlLCB0aGlzIHdpbGwgYWNxdWlyZSBhIGxvY2sgdG8gbWFrZSBzdXJlIHRo
YXQgaWYgbXVsdGlwbGUgdGhyZWFkcwogLy8gc3RhcnQgY3Jhc2hpbmcgYXQgdGhlIHNhbWUgdGlt
ZSwgeW91IGdldCBjb2hlcmVudCBkdW1wIG91dHB1dC4gVXNlIHRoaXMgb25seQogLy8gd2hlbiB5
b3UncmUgZm9yY2luZyBhIGNyYXNoIHdpdGggZGlhZ25vc3RpY3MuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb250cm9sRXF1aXZhbGVuY2VBbmFs
eXNpcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb250
cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpc19oCisjZGVmaW5lIERGR0NvbnRyb2xFcXVpdmFs
ZW5jZUFuYWx5c2lzX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRG9t
aW5hdG9ycy5oIgorI2luY2x1ZGUgIkRGR0JhY2t3YXJkc0RvbWluYXRvcnMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBDb250cm9sRXF1aXZhbGVuY2VBbmFs
eXNpcyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlz
aXMpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIENvbnRyb2xF
cXVpdmFsZW5jZUFuYWx5c2lzKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBtX2RvbWluYXRvcnMo
Z3JhcGguZW5zdXJlRG9taW5hdG9ycygpKQorICAgICAgICAsIG1fYmFja3dhcmRzRG9taW5hdG9y
cyhncmFwaC5lbnN1cmVCYWNrd2FyZHNEb21pbmF0b3JzKCkpCisgICAgeworICAgIH0KKyAgICAK
KyAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBpZmY6CisgICAgLy8KKyAgICAvLyAtIElmIGIgZXhl
Y3V0ZXMgdGhlbiBhIG11c3QgaGF2ZSBleGVjdXRlZCBiZWZvcmUgaXQgKGEgZG9taW5hdGVzIGIp
LgorICAgIC8vIC0gSWYgYSBleGVjdXRlcyB0aGVuIGIgd2lsbCBleGVjdXRlIGFmdGVyIGl0IChi
IGJhY2t3YXJkcy1kb21pbmF0ZXMgYSkuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgbGlrZSBE
b21pbmF0b3JzIGFuZCBCYWNrd2FyZHNEb21pbmF0b3JzLCB0aGlzIGFuYWx5c2lzIGlnbm9yZXMg
T1NSOgorICAgIC8vCisgICAgLy8gLSBUaGlzIG1heSByZXR1cm4gdHJ1ZSBldmVuIGlmIHdlIE9T
UiBlbnRlciBpbiBiZXRlZW4gYSBhbmQgYi4gT1NSIGVudHJ5IHdvdWxkIG1lYW4gdGhhdCBiCisg
ICAgLy8gICBjb3VsZCBleGVjdXRlIGV2ZW4gaWYgYSBoYWQgbm90IGV4ZWN1dGVkLiBUaGlzIGlz
IGltcG9zc2libGUgaW4gREZHIFNTQSBidXQgaXQncyBwb3NzaWJsZQorICAgIC8vICAgaW4gREZH
IENQUy4KKyAgICAvLyAtIFRoaXMgbWF5IHJldHVybiB0cnVlIGV2ZW4gaWYgd2UgT1NSIGV4aXQg
aW4gYmV0d2VlbiBhIGFuZCBiLiBPU1IgZXhpdCB3b3VsZCBtZWFuIHRoYXQgYQorICAgIC8vICAg
Y291bGQgZXhlY3V0ZSBldmVuIHRob3VnaCBiIHdpbGwgbm90IGV4ZWN1dGUuIFRoaXMgaXMgcG9z
c2libGUgaW4gYWxsIGZvcm1zIG9mIERGRyBJUi4KKyAgICAvLworICAgIC8vIEluIERGRyBTU0Eg
eW91IG9ubHkgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgZGVmaW5pdGlvbiBiZWluZyB3ZWFrZWQg
YnkgZXhpdHMuIFRoaXMgaXMgdXN1YWxseQorICAgIC8vIE9LLCBzaW5jZSB3ZSB1c2UgdGhpcyBh
bmFseXNpcyB0byBkZXRlcm1pbmUgdGhlIGNvc3Qgb2YgbW92aW5nIGV4aXRzIGZyb20gb25lIGJs
b2NrIHRvCisgICAgLy8gYW5vdGhlci4gSWYgd2UgbW92ZSBhbiBleGl0IGZyb20gYiB0byBhIGFu
ZCBhIGVxdWl2YWxlbnRseSBkb21pbmF0ZXMgYiB0aGVuIGF0IHdvcnN0IHdlIGhhdmUKKyAgICAv
LyBtYWRlIHRoZSBleGl0IGhhcHBlbiBzb29uZXIuIElmIHdlIG1vdmUgYW4gZXhpdCBmcm9tIGIg
dG8gYSBhbmQgYSBkb21pbmF0ZXMgYiBidXQgbm90CisgICAgLy8gZXF1aXZhbGVudGx5IHRoZW4g
d2UndmUgZG9uZSBzb21ldGhpbmcgbXVjaCB3b3JzZTogdGhlIHByb2dyYW0gbWF5IG5vdyBleGl0
IGV2ZW4gaWYgaXQgd291bGQKKyAgICAvLyBub3QgaGF2ZSBldmVyIGV4aXRlZCBiZWZvcmUuCisg
ICAgYm9vbCBkb21pbmF0ZXNFcXVpdmFsZW50bHkoQmFzaWNCbG9jayogYSwgQmFzaWNCbG9jayog
YikKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RvbWluYXRvcnMuZG9taW5hdGVzKGEsIGIpCisg
ICAgICAgICAgICAmJiBtX2JhY2t3YXJkc0RvbWluYXRvcnMuZG9taW5hdGVzKGIsIGEpOworICAg
IH0KKyAgICAKKyAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBpZmYgdGhlIGV4ZWN1dGlvbiBvZiBh
IGltcGxpZXMgdGhhdCBiIGFsc28gZXhlY3V0ZXMgYW5kIHZpY2UtdmVyc2EuCisgICAgYm9vbCBh
cmVFcXVpdmFsZW50KEJhc2ljQmxvY2sqIGEsIEJhc2ljQmxvY2sqIGIpCisgICAgeworICAgICAg
ICByZXR1cm4gZG9taW5hdGVzRXF1aXZhbGVudGx5KGEsIGIpCisgICAgICAgICAgICB8fCBkb21p
bmF0ZXNFcXVpdmFsZW50bHkoYiwgYSk7CisgICAgfQorCitwcml2YXRlOgorICAgIERvbWluYXRv
cnMmIG1fZG9taW5hdG9yczsKKyAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBtX2JhY2t3YXJkc0Rv
bWluYXRvcnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9u
IDIwMTAzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTMgQEAKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrV2l0aEpJVFR5cGUuaCIKKyNpbmNsdWRlICJERkdCYWNrd2FyZHNEb21pbmF0b3JzLmgi
CisjaW5jbHVkZSAiREZHQmFja3dhcmRzQ0ZHLmgiCiAjaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlz
dC5oIgorI2luY2x1ZGUgIkRGR0NGRy5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKICNp
bmNsdWRlICJERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgotI2luY2x1ZGUgIkRGR0NGRy5oIgorI2lu
Y2x1ZGUgIkRGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgiCiAjaW5jbHVkZSAiREZHRG9t
aW5hdG9ycy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdNYXlFeGl0
LmgiCkBAIC0zNzUsNiArMzc4LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0
LCBjb25zdAogICAgIH0KICAgICBpZiAoIW5vZGUtPm9yaWdpbi5leGl0T0spCiAgICAgICAgIG91
dC5wcmludChjb21tYSwgIkV4aXRJbnZhbGlkIik7CisgICAgaWYgKG5vZGUtPm9yaWdpbi53YXNI
b2lzdGVkKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXYXNIb2lzdGVkIik7CiAgICAgb3V0
LnByaW50KCIpIik7CiAKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlz
KSAmJiBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKQEAgLTQxOSw2ICs0MjQsMTgg
QEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAgICAgICBvdXQu
cHJpbnQocHJlZml4LCAiICBEb21pbmFuY2UgRnJvbnRpZXI6ICIsIG1fZG9taW5hdG9ycy0+ZG9t
aW5hbmNlRnJvbnRpZXJPZihibG9jayksICJcbiIpOwogICAgICAgICBvdXQucHJpbnQocHJlZml4
LCAiICBJdGVyYXRlZCBEb21pbmFuY2UgRnJvbnRpZXI6ICIsIG1fZG9taW5hdG9ycy0+aXRlcmF0
ZWREb21pbmFuY2VGcm9udGllck9mKEJsb2NrTGlzdCgxLCBibG9jaykpLCAiXG4iKTsKICAgICB9
CisgICAgaWYgKG1fYmFja3dhcmRzRG9taW5hdG9ycyAmJiB0ZXJtaW5hbHNBcmVWYWxpZCgpKSB7
CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIEJhY2t3YXJkcyBkb21pbmF0ZXMgYnk6ICIs
IG1fYmFja3dhcmRzRG9taW5hdG9ycy0+ZG9taW5hdG9yc09mKGJsb2NrKSwgIlxuIik7CisgICAg
ICAgIG91dC5wcmludChwcmVmaXgsICIgIEJhY2t3YXJkcyBkb21pbmF0ZXM6ICIsIG1fYmFja3dh
cmRzRG9taW5hdG9ycy0+YmxvY2tzRG9taW5hdGVkQnkoYmxvY2spLCAiXG4iKTsKKyAgICB9Cisg
ICAgaWYgKG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgJiYgdGVybWluYWxzQXJlVmFsaWQo
KSkgeworICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBDb250cm9sIGVxdWl2YWxlbnQgdG86
Iik7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogb3RoZXJCbG9jayA6IGJsb2Nrc0luTmF0dXJh
bE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lz
LT5hcmVFcXVpdmFsZW50KGJsb2NrLCBvdGhlckJsb2NrKSkKKyAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoIiAiLCAqb3RoZXJCbG9jayk7CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KCJc
biIpOworICAgIH0KICAgICBpZiAobV9wcmVQb3N0TnVtYmVyaW5nKQogICAgICAgICBvdXQucHJp
bnQocHJlZml4LCAiICBQcmUvUG9zdCBOdW1iZXJpbmc6ICIsIG1fcHJlUG9zdE51bWJlcmluZy0+
cHJlTnVtYmVyKGJsb2NrKSwgIi8iLCBtX3ByZVBvc3ROdW1iZXJpbmctPnBvc3ROdW1iZXIoYmxv
Y2spLCAiXG4iKTsKICAgICBpZiAobV9uYXR1cmFsTG9vcHMpIHsKQEAgLTc1Myw2ICs3NzAsOSBA
QCB2b2lkIEdyYXBoOjppbnZhbGlkYXRlQ0ZHKCkKICAgICBtX2RvbWluYXRvcnMgPSBudWxscHRy
OwogICAgIG1fbmF0dXJhbExvb3BzID0gbnVsbHB0cjsKICAgICBtX3ByZVBvc3ROdW1iZXJpbmcg
PSBudWxscHRyOworICAgIG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgPSBudWxscHRyOwor
ICAgIG1fYmFja3dhcmRzRG9taW5hdG9ycyA9IG51bGxwdHI7CisgICAgbV9iYWNrd2FyZHNDRkcg
PSBudWxscHRyOwogfQogCiB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9j
ayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSwgTm9kZSogbmV3R2V0TG9jYWwpCkBAIC0xNDI2LDIzICsxNDQ2
LDQ3IEBAIHZvaWQgR3JhcGg6OmhhbmRsZUFzc2VydGlvbkZhaWx1cmUoCiAgICAgY3Jhc2goKnRo
aXMsIHRvQ1N0cmluZygiV2hpbGUgaGFuZGxpbmcgYmxvY2sgIiwgcG9pbnRlckR1bXAoYmxvY2sp
LCAiXG5cbiIpLCBmaWxlLCBsaW5lLCBmdW5jdGlvbiwgYXNzZXJ0aW9uKTsKIH0KIAotdm9pZCBH
cmFwaDo6ZW5zdXJlRG9taW5hdG9ycygpCitEb21pbmF0b3JzJiBHcmFwaDo6ZW5zdXJlRG9taW5h
dG9ycygpCiB7CiAgICAgaWYgKCFtX2RvbWluYXRvcnMpCiAgICAgICAgIG1fZG9taW5hdG9ycyA9
IHN0ZDo6bWFrZV91bmlxdWU8RG9taW5hdG9ycz4oKnRoaXMpOworICAgIHJldHVybiAqbV9kb21p
bmF0b3JzOwogfQogCi12b2lkIEdyYXBoOjplbnN1cmVQcmVQb3N0TnVtYmVyaW5nKCkKK1ByZVBv
c3ROdW1iZXJpbmcmIEdyYXBoOjplbnN1cmVQcmVQb3N0TnVtYmVyaW5nKCkKIHsKICAgICBpZiAo
IW1fcHJlUG9zdE51bWJlcmluZykKICAgICAgICAgbV9wcmVQb3N0TnVtYmVyaW5nID0gc3RkOjpt
YWtlX3VuaXF1ZTxQcmVQb3N0TnVtYmVyaW5nPigqdGhpcyk7CisgICAgcmV0dXJuICptX3ByZVBv
c3ROdW1iZXJpbmc7CiB9CiAKLXZvaWQgR3JhcGg6OmVuc3VyZU5hdHVyYWxMb29wcygpCitOYXR1
cmFsTG9vcHMmIEdyYXBoOjplbnN1cmVOYXR1cmFsTG9vcHMoKQogewogICAgIGVuc3VyZURvbWlu
YXRvcnMoKTsKICAgICBpZiAoIW1fbmF0dXJhbExvb3BzKQogICAgICAgICBtX25hdHVyYWxMb29w
cyA9IHN0ZDo6bWFrZV91bmlxdWU8TmF0dXJhbExvb3BzPigqdGhpcyk7CisgICAgcmV0dXJuICpt
X25hdHVyYWxMb29wczsKK30KKworQmFja3dhcmRzQ0ZHJiBHcmFwaDo6ZW5zdXJlQmFja3dhcmRz
Q0ZHKCkKK3sKKyAgICBpZiAoIW1fYmFja3dhcmRzQ0ZHKQorICAgICAgICBtX2JhY2t3YXJkc0NG
RyA9IHN0ZDo6bWFrZV91bmlxdWU8QmFja3dhcmRzQ0ZHPigqdGhpcyk7CisgICAgcmV0dXJuICpt
X2JhY2t3YXJkc0NGRzsKK30KKworQmFja3dhcmRzRG9taW5hdG9ycyYgR3JhcGg6OmVuc3VyZUJh
Y2t3YXJkc0RvbWluYXRvcnMoKQoreworICAgIGlmICghbV9iYWNrd2FyZHNEb21pbmF0b3JzKQor
ICAgICAgICBtX2JhY2t3YXJkc0RvbWluYXRvcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPEJhY2t3YXJk
c0RvbWluYXRvcnM+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fYmFja3dhcmRzRG9taW5hdG9yczsK
K30KKworQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMmIEdyYXBoOjplbnN1cmVDb250cm9sRXF1
aXZhbGVuY2VBbmFseXNpcygpCit7CisgICAgaWYgKCFtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5
c2lzKQorICAgICAgICBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzID0gc3RkOjptYWtlX3Vu
aXF1ZTxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4oKnRoaXMpOworICAgIHJldHVybiAqbV9j
b250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKIH0KIAogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjAxMDM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw3ICs1NiwxMCBAQCBjbGFzcyBFeGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBERkcgewogCitj
bGFzcyBCYWNrd2FyZHNDRkc7CitjbGFzcyBCYWNrd2FyZHNEb21pbmF0b3JzOwogY2xhc3MgQ0ZH
OworY2xhc3MgQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM7CiBjbGFzcyBEb21pbmF0b3JzOwog
Y2xhc3MgTmF0dXJhbExvb3BzOwogY2xhc3MgUHJlUG9zdE51bWJlcmluZzsKQEAgLTgwMCw5ICs4
MDMsMTIgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNEZWJ1Z2dlckVuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2hhc0RlYnVnZ2VyRW5hYmxlZDsgfQogCi0gICAgdm9pZCBlbnN1cmVEb21pbmF0
b3JzKCk7Ci0gICAgdm9pZCBlbnN1cmVQcmVQb3N0TnVtYmVyaW5nKCk7Ci0gICAgdm9pZCBlbnN1
cmVOYXR1cmFsTG9vcHMoKTsKKyAgICBEb21pbmF0b3JzJiBlbnN1cmVEb21pbmF0b3JzKCk7Cisg
ICAgUHJlUG9zdE51bWJlcmluZyYgZW5zdXJlUHJlUG9zdE51bWJlcmluZygpOworICAgIE5hdHVy
YWxMb29wcyYgZW5zdXJlTmF0dXJhbExvb3BzKCk7CisgICAgQmFja3dhcmRzQ0ZHJiBlbnN1cmVC
YWNrd2FyZHNDRkcoKTsKKyAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBlbnN1cmVCYWNrd2FyZHNE
b21pbmF0b3JzKCk7CisgICAgQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMmIGVuc3VyZUNvbnRy
b2xFcXVpdmFsZW5jZUFuYWx5c2lzKCk7CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgbWFr
ZXMgc2Vuc2UgdG8gY2FsbCBhZnRlciBieXRlY29kZSBwYXJzaW5nCiAgICAgLy8gYmVjYXVzZSBp
dCBxdWVyaWVzIHRoZSBtX2hhc0V4Y2VwdGlvbkhhbmRsZXJzIGJvb2xlYW4gd2hvc2UgdmFsdWUK
QEAgLTg3OSw2ICs4ODUsOSBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByZVBvc3RO
dW1iZXJpbmc+IG1fcHJlUG9zdE51bWJlcmluZzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TmF0dXJh
bExvb3BzPiBtX25hdHVyYWxMb29wczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0ZHPiBtX2NmZzsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3YXJkc0NGRzsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNrd2FyZHNEb21pbmF0b3Jz
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4gbV9jb250
cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKICAgICB1bnNpZ25lZCBtX2xvY2FsVmFyczsKICAgICB1
bnNpZ25lZCBtX25leHRNYWNoaW5lTG9jYWw7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIwMTAzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNiArNDIs
OCBAQCBwdWJsaWM6CiAgICAgCiAgICAgfkluUGxhY2VBYnN0cmFjdFN0YXRlKCk7CiAgICAgCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAK
ICAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlKikgeyB9CiAgICAgCiAgICAgQWJzdHJh
Y3RWYWx1ZSYgZm9yTm9kZShOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNpb24gMjAxMDM3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsOSAr
MzMsMTEgQEAKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkRG
R0Nsb2JiZXJTZXQuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZH
Q29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaCIKICNpbmNsdWRlICJERkdFZGdlRG9taW5hdGVz
LmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIK
KyNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiREZHTmF0dXJhbExvb3BzLmgiCiAj
aW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJERkdTYWZlVG9FeGVjdXRlLmgiCkBAIC03
NCw2ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGguZW5zdXJlRG9t
aW5hdG9ycygpOwogICAgICAgICBtX2dyYXBoLmVuc3VyZU5hdHVyYWxMb29wcygpOworICAgICAg
ICBtX2dyYXBoLmVuc3VyZUNvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKCk7CiAKICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBMSUNNOlxu
Iik7CkBAIC0yNjAsNDMgKzI2Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHdlIGNvdWxkIHN0
aWxsIGhvaXN0IGp1c3QgdGhlIGNoZWNrcy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDUyNQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6
IElmIGEgbm9kZSBoYXMgYSB0eXBlIGNoZWNrIC0gZXZlbiBzb21ldGhpbmcgbGlrZSBhIENoZWNr
U3RydWN0dXJlIC0gdGhlbiB3ZSBzaG91bGQKLSAgICAgICAgLy8gb25seSBob2lzdCB0aGUgbm9k
ZSBpZiB3ZSBrbm93IHRoYXQgaXQgd2lsbCBleGVjdXRlIG9uIGV2ZXJ5IGxvb3AgaXRlcmF0aW9u
IG9yIGlmIHdlIGtub3cKLSAgICAgICAgLy8gdGhhdCB0aGUgdHlwZSBjaGVjayB3aWxsIGFsd2F5
cyBzdWNjZWVkIGF0IHRoZSBsb29wIHByZS1oZWFkZXIgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5z
Ci0gICAgICAgIC8vIChsaWtlIGxvb2tpbmcgYXQgcHJlZGljdGlvbiBwcm9wYWdhdGlvbiByZXN1
bHRzKS4gT3RoZXJ3aXNlLCB3ZSBtaWdodCBtYWtlIGEgbWlzdGFrZSBsaWtlCi0gICAgICAgIC8v
IHRoaXM6Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIHZhciBvID0gLi4uOyAvLyBzb21ldGltZXMg
bnVsbCBhbmQgc29tZXRpbWVzIGFuIG9iamVjdCB3aXRoIHN0cnVjdHVyZSBTMS4KLSAgICAgICAg
Ly8gZm9yICguLi4pIHsKLSAgICAgICAgLy8gICAgIGlmIChvKQotICAgICAgICAvLyAgICAgICAg
IC4uLiA9IG8uZjsgLy8gQ2hlY2tTdHJ1Y3R1cmUgYW5kIEdldEJ5T2Zmc2V0LCB3aGljaCB3ZSB3
aWxsIGN1cnJlbnRseSBob2lzdC4KLSAgICAgICAgLy8gfQotICAgICAgICAvLwotICAgICAgICAv
LyBXaGVuIHdlIGVuY291bnRlciBzdWNoIGNvZGUsIHdlJ2xsIGhvaXN0IHRoZSBDaGVja1N0cnVj
dHVyZSBhbmQgR2V0QnlPZmZzZXQgYW5kIHRoZW4gd2UKLSAgICAgICAgLy8gd2lsbCBoYXZlIGEg
cmVjb21waWxlLiBXZSdsbCB0aGVuIGVuZCB1cCB0aGlua2luZyB0aGF0IHRoZSBnZXRfYnlfaWQg
bmVlZHMgdG8gYmUKLSAgICAgICAgLy8gcG9seW1vcnBoaWMsIHdoaWNoIGlzIGZhbHNlLgotICAg
ICAgICAvLwotICAgICAgICAvLyBXZSBjYW4gY291bnRlciB0aGlzIGJ5IGVpdGhlciBoYXZpbmcg
YSBjb250cm9sIGZsb3cgZXF1aXZhbGVuY2UgY2hlY2ssIG9yIGJ5IGNvbnN1bHRpbmcKLSAgICAg
ICAgLy8gcHJlZGljdGlvbiBwcm9wYWdhdGlvbiB0byBzZWUgaWYgdGhlIGNoZWNrIHdvdWxkIGFs
d2F5cyBzdWNjZWVkLiBQcmVkaWN0aW9uIHByb3BhZ2F0aW9uCi0gICAgICAgIC8vIHdvdWxkIG5v
dCBiZSBlbm91Z2ggZm9yIHRoaW5ncyBsaWtlOgotICAgICAgICAvLwotICAgICAgICAvLyB2YXIg
cCA9IC4uLjsgLy8gc29tZSBib29sZWFuIHByZWRpY2F0ZQotICAgICAgICAvLyB2YXIgbyA9IHt9
OwotICAgICAgICAvLyBpZiAocCkKLSAgICAgICAgLy8gICAgIG8uZiA9IDQyOwotICAgICAgICAv
LyBmb3IgKC4uLikgewotICAgICAgICAvLyAgICAgaWYgKHApCi0gICAgICAgIC8vICAgICAgICAg
Li4uID0gby5mOwotICAgICAgICAvLyB9Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFByZWRpY3Rp
b24gcHJvcGFnYXRpb24gY2FuJ3QgdGVsbCB1cyBhbnl0aGluZyBhYm91dCB0aGUgc3RydWN0dXJl
LCBhbmQgdGhlIENoZWNrU3RydWN0dXJlCi0gICAgICAgIC8vIHdpbGwgYXBwZWFyIHRvIGJlIGhv
aXN0YWJsZSBiZWNhdXNlIHRoZSBsb29wIGRvZXNuJ3QgY2xvYmJlciBzdHJ1Y3R1cmVzLiBUaGUg
Y2VsbCBjaGVjawotICAgICAgICAvLyBpbiB0aGUgQ2hlY2tTdHJ1Y3R1cmUgd2lsbCBiZSBob2lz
dGFibGUgdGhvdWdoLCBzaW5jZSBwcmVkaWN0aW9uIHByb3BhZ2F0aW9uIGNhbiB0ZWxsIHVzCi0g
ICAgICAgIC8vIHRoYXQgbyBpcyBhbHdheXMgU3BlY0ZpbmFsT2JqZWN0LiBJbiBjYXNlcyBsaWtl
IHRoaXMsIGNvbnRyb2wgZmxvdyBlcXVpdmFsZW5jZSBpcyB0aGUKLSAgICAgICAgLy8gb25seSBl
ZmZlY3RpdmUgZ3VhcmQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ1MjcKLSAgICAgICAgCiAgICAgICAgIGlmIChyZWFk
c092ZXJsYXAobV9ncmFwaCwgbm9kZSwgZGF0YS53cml0ZXMpKSB7CiAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2coCkBAIC0zMTUsNiArMjgxLDIyIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAg
CisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBub2RlLT5vcmlnaW47CisKKyAg
ICAgICAgYm9vbCBhZGRzQmxpbmRTcGVjdWxhdGlvbiA9IG1heUV4aXQobV9ncmFwaCwgbm9kZSwg
bV9zdGF0ZSkKKyAgICAgICAgICAgICYmICFtX2dyYXBoLm1fY29udHJvbEVxdWl2YWxlbmNlQW5h
bHlzaXMtPmRvbWluYXRlc0VxdWl2YWxlbnRseShkYXRhLnByZUhlYWRlciwgZnJvbUJsb2NrKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChhZGRzQmxpbmRTcGVjdWxhdGlvbgorICAgICAgICAgICAg
JiYgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihvcmlnaW5hbE9yaWdpbi5zZW1hbnRpYykt
Pmhhc0V4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUoSG9pc3RpbmdGYWlsZWQpKSkgeworICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAg
ICAgICAgICAgICAiICAgIE5vdCBob2lzdGluZyAiLCBub2RlLCAiIGJlY2F1c2UgaXQgbWF5IGV4
aXQgYW5kIHRoZSBwcmUtaGVhZGVyICgiLAorICAgICAgICAgICAgICAgICAgICAqZGF0YS5wcmVI
ZWFkZXIsICIpIGlzIG5vdCBjb250cm9sIGVxdWl2YWxlbnQgdG8gdGhlIG5vZGUncyBvcmlnaW5h
bCBibG9jayAoIiwKKyAgICAgICAgICAgICAgICAgICAgKmZyb21CbG9jaywgIikgYW5kIGhvaXN0
aW5nIGhhZCBwcmV2aW91c2x5IGZhaWxlZC5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAiICAgIEhvaXN0aW5n
ICIsIG5vZGUsICIgZnJvbSAiLCAqZnJvbUJsb2NrLCAiIHRvICIsICpkYXRhLnByZUhlYWRlciwK
QEAgLTMyNiw4ICszMDgsOSBAQCBwcml2YXRlOgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NTQ0CiAgICAgICAgIGRhdGEucHJlSGVhZGVyLT5p
bnNlcnRCZWZvcmVUZXJtaW5hbChub2RlKTsKICAgICAgICAgbm9kZS0+b3duZXIgPSBkYXRhLnBy
ZUhlYWRlcjsKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW5hbE9yaWdpbiA9IG5vZGUtPm9yaWdp
bjsKLSAgICAgICAgbm9kZS0+b3JpZ2luID0gZGF0YS5wcmVIZWFkZXItPnRlcm1pbmFsKCktPm9y
aWdpbi53aXRoU2VtYW50aWMobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgTm9kZU9y
aWdpbiB0ZXJtaW5hbE9yaWdpbiA9IGRhdGEucHJlSGVhZGVyLT50ZXJtaW5hbCgpLT5vcmlnaW47
CisgICAgICAgIG5vZGUtPm9yaWdpbiA9IHRlcm1pbmFsT3JpZ2luLndpdGhTZW1hbnRpYyhub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBub2RlLT5vcmlnaW4ud2FzSG9pc3RlZCB8PSBh
ZGRzQmxpbmRTcGVjdWxhdGlvbjsKICAgICAgICAgCiAgICAgICAgIC8vIE1vZGlmeSB0aGUgc3Rh
dGVzIGF0IHRoZSBlbmQgb2YgdGhlIHByZUhlYWRlciBvZiB0aGUgbG9vcCB3ZSBob2lzdGVkIHRv
LAogICAgICAgICAvLyBhbmQgYWxsIHByZS1oZWFkZXJzIGluc2lkZSB0aGUgbG9vcC4gVGhpcyBp
c24ndCBhIHN0YWJpbGl0eSBib3R0bGVuZWNrIHJpZ2h0IG5vdwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCShyZXZpc2lvbiAyMDEwMzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4
LDYwICsyOCwxOCBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdBdFRh
aWxBYnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdO
b2RlLmgiCisjaW5jbHVkZSAiREZHTnVsbEFic3RyYWN0U3RhdGUuaCIKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogbmFtZXNwYWNl
IHsKIAotY2xhc3MgRWRnZU1heUV4aXQgewotcHVibGljOgotICAgIEVkZ2VNYXlFeGl0KCkKLSAg
ICAgICAgOiBtX3Jlc3VsdChmYWxzZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgb3Bl
cmF0b3IoKShOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IE1heWJl
IHRoaXMgc2hvdWxkIGNhbGwgbWF5SGF2ZVR5cGVDaGVjayhlZGdlLnVzZUtpbmQoKSkgaW5zdGVh
ZC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
ODU0NQotICAgICAgICBpZiAoZWRnZS53aWxsSGF2ZUNoZWNrKCkpIHsKLSAgICAgICAgICAgIG1f
cmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKLSAgICAgICAgLy8gVGhlc2UgYXJlIHNoYWR5IGJl
Y2F1c2Ugbm9kZXMgdGhhdCBoYXZlIHRoZXNlIHVzZSBraW5kcyB3aWxsIHR5cGljYWxseSBleGl0
IGZvcgotICAgICAgICAvLyB1bnJlbGF0ZWQgcmVhc29ucy4gRm9yIGV4YW1wbGUgQ29tcGFyZUVx
IGRvZXNuJ3QgdXN1YWxseSBleGl0LCBidXQgaWYgaXQgdXNlcyBPYmplY3RVc2UKLSAgICAgICAg
Ly8gdGhlbiBpdCB3aWxsLgotICAgICAgICBjYXNlIE9iamVjdFVzZToKLSAgICAgICAgY2FzZSBP
YmplY3RPck90aGVyVXNlOgotICAgICAgICAgICAgbV9yZXN1bHQgPSB0cnVlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gVGhlc2UgYXJlIHNoYWR5IGJlY2F1
c2UgdGhleSBjaGVjayB0aGUgc3RydWN0dXJlIGV2ZW4gaWYgdGhlIHR5cGUgb2YgdGhlIGNoaWxk
IG5vZGUKLSAgICAgICAgLy8gcGFzc2VzIHRoZSBTdHJpbmdPYmplY3QgdHlwZSBmaWx0ZXIuCi0g
ICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgotICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5n
T2JqZWN0VXNlOgotICAgICAgICAgICAgbV9yZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGJvb2wgcmVzdWx0KCkgY29uc3QgeyByZXR1cm4g
bV9yZXN1bHQ7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgYm9vbCBtX3Jlc3VsdDsKLX07Ci0KLX0g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1FeGl0TW9kZSBtYXlFeGl0KEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFN0YXRlVHlwZT4KK0V4aXRNb2RlIG1heUV4
aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKIHsKICAg
ICBFeGl0TW9kZSByZXN1bHQgPSBEb2VzTm90RXhpdDsKICAgICAKQEAgLTE1NCwxNSArMTEyLDY4
IEBAIEV4aXRNb2RlIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2QKICAgICAgICAgLy8g
SWYgaW4gZG91YnQsIHJldHVybiB0cnVlLgogICAgICAgICByZXR1cm4gRXhpdHM7CiAgICAgfQot
Ci0gICAgRWRnZU1heUV4aXQgZnVuY3RvcjsKLSAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihn
cmFwaCwgbm9kZSwgZnVuY3Rvcik7Ci0gICAgaWYgKGZ1bmN0b3IucmVzdWx0KCkpCi0gICAgICAg
IHJlc3VsdCA9IEV4aXRzOwogICAgIAorICAgIGdyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAg
bm9kZSwKKyAgICAgICAgWyZdIChFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUp
IHsKKyAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhlIENoZWNrIGZsYWcgb24gdGhlIGVkZ2Uu
IFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhhdCBmbGFnIGFuc3dlcnMKKyAgICAgICAgICAg
ICAgICAvLyB0aGUgcXVlc3Rpb246ICJ3b3VsZCB0aGlzIGVkZ2UgaGF2ZSBoYWQgYSBjaGVjayBp
ZiBpdCBleGVjdXRlZCB3aGVyZXZlciBpdAorICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRseSBy
ZXNpZGVzIGluIGNvbnRyb2wgZmxvdz8iIEJ1dCB3aGVuIGEgc3RhdGUgaXMgcGFzc2VkLCB3ZSB3
YW50IHRvIGFzayBhCisgICAgICAgICAgICAgICAgLy8gZGlmZmVyZW50IHF1ZXN0aW9uOiAid291
bGQgdGhpcyBlZGdlIGhhdmUgYSBjaGVjayBpZiBpdCBleGVjdXRlZCB3aGVyZXZlciB0aGlzCisg
ICAgICAgICAgICAgICAgLy8gc3RhdGUgaXM/IiBVc2luZyB0aGUgQ2hlY2sgZmxhZyBmb3IgdGhp
cyBwdXJwb3NlIHdvdWxkbid0IGV2ZW4gYmUgY29uc2VydmF0aXZlbHkKKyAgICAgICAgICAgICAg
ICAvLyBjb3JyZWN0LiBJdCB3b3VsZCBiZSB3cm9uZyBpbiBib3RoIGRpcmVjdGlvbnMuCisgICAg
ICAgICAgICAgICAgaWYgKG1heUhhdmVUeXBlQ2hlY2soZWRnZS51c2VLaW5kKCkpCisgICAgICAg
ICAgICAgICAgICAgICYmIChzdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVy
Rm9yKGVkZ2UudXNlS2luZCgpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRXhp
dHM7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNo
b3VsZCBjYWxsIG1heUhhdmVUeXBlQ2hlY2soZWRnZS51c2VLaW5kKCkpIGluc3RlYWQuCisgICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
ODU0NQorICAgICAgICAgICAgICAgIGlmIChlZGdlLndpbGxIYXZlQ2hlY2soKSkgeworICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBFeGl0czsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgeworICAgICAgICAgICAgLy8gVGhlc2UgYXJl
IHNoYWR5IGJlY2F1c2Ugbm9kZXMgdGhhdCBoYXZlIHRoZXNlIHVzZSBraW5kcyB3aWxsIHR5cGlj
YWxseSBleGl0IGZvcgorICAgICAgICAgICAgLy8gdW5yZWxhdGVkIHJlYXNvbnMuIEZvciBleGFt
cGxlIENvbXBhcmVFcSBkb2Vzbid0IHVzdWFsbHkgZXhpdCwgYnV0IGlmIGl0IHVzZXMKKyAgICAg
ICAgICAgIC8vIE9iamVjdFVzZSB0aGVuIGl0IHdpbGwuCisgICAgICAgICAgICBjYXNlIE9iamVj
dFVzZToKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBFeGl0czsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBzaGFkeSBiZWNhdXNlIHRoZXkgY2hlY2sgdGhl
IHN0cnVjdHVyZSBldmVuIGlmIHRoZSB0eXBlIG9mIHRoZSBjaGlsZCBub2RlCisgICAgICAgICAg
ICAvLyBwYXNzZXMgdGhlIFN0cmluZ09iamVjdCB0eXBlIGZpbHRlci4KKyAgICAgICAgICAgIGNh
c2UgU3RyaW5nT2JqZWN0VXNlOgorICAgICAgICAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVj
dFVzZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBFeGl0czsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0V4aXRNb2RlIG1heUV4aXQo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQoreworICAgIE51bGxBYnN0cmFjdFN0YXRlIHN0YXRl
OworICAgIHJldHVybiBtYXlFeGl0SW1wbChncmFwaCwgbm9kZSwgc3RhdGUpOworfQorCitFeGl0
TW9kZSBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQXRUYWlsQWJzdHJhY3RTdGF0
ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIG1heUV4aXRJbXBsKGdyYXBoLCBub2RlLCBzdGF0ZSk7
Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuaAkocmV2aXNpb24gMjAxMDM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
K2NsYXNzIEF0VGFpbEFic3RyYWN0U3RhdGU7CiBjbGFzcyBHcmFwaDsKIHN0cnVjdCBOb2RlOwog
CkBAIC03NCw2ICs3NSwxMSBAQCBlbnVtIEV4aXRNb2RlIHsKIAogRXhpdE1vZGUgbWF5RXhpdChH
cmFwaCYsIE5vZGUqKTsKIAorLy8gTGlrZSBtYXlFeGl0KCksIGJ1dCBpbnN0ZWFkIG9mIHVzaW5n
IHRoZSBDaGVjazogZmxhZyB0byBkZXRlcm1pbmUgaWYgc29tZXRoaW5nIGV4aXRzLCBpdAorLy8g
ZXZhbHVhdGVzIHdoZXRoZXIgaXQgd2lsbCBleGl0IGJhc2VkIG9uIHRoZSB0YWlsIHN0YXRlLiBU
aGlzIGlzIHVzZWZ1bCBmb3IgTElDTS4gVGhpcyAqbWF5KiBhbHNvCisvLyB1c2UgdGhlIEF0VGFp
bEFic3RyYWN0U3RhdGUgdG8gcmV0dXJuIG1vcmUgcHJlY2lzZSBhbnN3ZXJzIGZvciBvdGhlciBu
b2Rlcy4KK0V4aXRNb2RlIG1heUV4aXQoR3JhcGgmLCBOb2RlKiwgQXRUYWlsQWJzdHJhY3RTdGF0
ZSYpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDIwMTAzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjk5
LDcgKzIyOTksNyBAQCBzdHJ1Y3QgTm9kZSB7CiAKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9v
cCA6IDEwOyAvLyByZWFsIHR5cGUgaXMgTm9kZVR5cGUKLSAgICB1bnNpZ25lZCBtX2ZsYWdzIDog
MjI7CisgICAgdW5zaWduZWQgbV9mbGFncyA6IDIwOwogICAgIC8vIFRoZSB2aXJ0dWFsIHJlZ2lz
dGVyIG51bWJlciAoc3BpbGwgbG9jYXRpb24pIGFzc29jaWF0ZWQgd2l0aCB0aGlzIC4KICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV92aXJ0dWFsUmVnaXN0ZXI7CiAgICAgLy8gVGhlIG51bWJlciBvZiB1
c2VzIG9mIHRoZSByZXN1bHQgb2YgdGhpcyBvcGVyYXRpb24gKCsxIGZvciAnbXVzdCBnZW5lcmF0
ZScgbm9kZXMsIHdoaWNoIGhhdmUgc2lkZS1lZmZlY3RzKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMjAxMDM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Miw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBOb2Rl
T3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJ7
c2VtYW50aWM6ICIsIHNlbWFudGljLCAiLCBmb3JFeGl0OiAiLCBmb3JFeGl0LCAiLCBleGl0T0s6
ICIsIGV4aXRPSywgIn0iKTsKKyAgICBvdXQucHJpbnQoIntzZW1hbnRpYzogIiwgc2VtYW50aWMs
ICIsIGZvckV4aXQ6ICIsIGZvckV4aXQsICIsIGV4aXRPSzogIiwgZXhpdE9LLCAiLCB3YXNIb2lz
dGVkOiAiLCB3YXNIb2lzdGVkLCAifSIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uaAkocmV2aXNp
b24gMjAxMDM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsNiArOTIsMTMgQEAgc3RydWN0IE5vZGVPcmlnaW4gewog
ICAgICAgICByZXR1cm4gd2l0aEV4aXRPSyhleGl0T0sgJiBzdGQ6OmV4Y2hhbmdlKGNhbkV4aXQs
IGZhbHNlKSk7CiAgICAgfQogICAgIAorICAgIE5vZGVPcmlnaW4gd2l0aFdhc0hvaXN0ZWQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgTm9kZU9yaWdpbiByZXN1bHQgPSAqdGhpczsKKyAgICAgICAg
cmVzdWx0Lndhc0hvaXN0ZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKICAgICBOb2RlT3JpZ2luIGZvckluc2VydGluZ0FmdGVyKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIE5vZGVPcmlnaW4gcmVzdWx0ID0gKnRoaXM7
CkBAIC0xMjEsNiArMTI4LDggQEAgc3RydWN0IE5vZGVPcmlnaW4gewogICAgIENvZGVPcmlnaW4g
Zm9yRXhpdDsKICAgICAvLyBXaGV0aGVyIG9yIG5vdCBpdCBpcyBsZWdhbCB0byBleGl0IGhlcmUu
CiAgICAgYm9vbCBleGl0T0sgeyBmYWxzZSB9OworICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBu
b2RlIGhhcyBiZWVuIGhvaXN0ZWQuCisgICAgYm9vbCB3YXNIb2lzdGVkIHsgZmFsc2UgfTsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTnVsbEFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR051bGxBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR051bGxBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR051bGxBYnN0cmFjdFN0YXRlX2gKKyNkZWZpbmUgREZHTnVs
bEFic3RyYWN0U3RhdGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgRWRnZTsKK3N0cnVjdCBBYnN0cmFjdFZhbHVlOwor
c3RydWN0IE5vZGU7CisKKy8vIFVzZSB0aGlzIGFzIGEgc3R1YiBmb3IgdGhpbmdzIHRoYXQgY2Fu
IG9wdGlvbmFsbHkgdGFrZSBzb21lIGtpbmQgb2YgYWJzdHJhY3Qgc3RhdGUgYnV0IHlvdSB3aXNo
CisvLyB0byBub3QgcGFzcyBhbnkgYWJzdHJhY3Qgc3RhdGUuIFRoaXMgd29ya3MgaWYgdGhlIHRl
bXBsYXRpemVkIGNvZGUgYWxzbyBkb2VzIGEgY2hlY2sgKHVzaW5nIHRoZQorLy8gb3BlcmF0b3Ig
Ym9vbCkgdG8gc2VlIGlmIHRoZSBzdGF0ZSBpcyB2YWxpZC4KK2NsYXNzIE51bGxBYnN0cmFjdFN0
YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBOdWxsQWJz
dHJhY3RTdGF0ZSgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9k
ZSopCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gKmJpdHdpc2VfY2FzdDxBYnN0cmFjdFZhbHVlKj4oc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KDB4MTIzNCkpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVk
Z2UpCisgICAgeworICAgICAgICByZXR1cm4gZm9yTm9kZShudWxscHRyKTsKKyAgICB9CisgICAg
CisgICAgLy8gSXQncyB2YWxpZCB0byBhZGQgbW9yZSBzdHViIG1ldGhvZHMgaGVyZSBhcyBuZWVk
ZWQuCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR051bGxBYnN0cmFjdFN0YXRlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAyMDEwMzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIE9T
UkV4aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVK
SVQqIGppdCwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCi0g
ICAgOiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1fb3JpZ2luLmZvckV4aXQsIGppdC0+bV9vcmln
aW4uc2VtYW50aWMpCisgICAgOiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1fb3JpZ2luLmZvckV4
aXQsIGppdC0+bV9vcmlnaW4uc2VtYW50aWMsIGppdC0+bV9vcmlnaW4ud2FzSG9pc3RlZCkKICAg
ICAsIG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUo
dmFsdWVQcm9maWxlKQogICAgICwgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KDApCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAkocmV2aXNpb24gMjAx
MDM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQxLDggKzQxLDE0IEBAIHZvaWQgT1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRk
aW5nQXNGcmVxdWUKICAgICBDb2RlQmxvY2sqIHNvdXJjZVByb2ZpbGVkQ29kZUJsb2NrID0KICAg
ICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygKICAg
ICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBwcm9maWxlZENvZGVCbG9jayk7
Ci0gICAgaWYgKHNvdXJjZVByb2ZpbGVkQ29kZUJsb2NrKQotICAgICAgICBzb3VyY2VQcm9maWxl
ZENvZGVCbG9jay0+YWRkRnJlcXVlbnRFeGl0U2l0ZShGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9y
aWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCwgaml0VHlwZSkpOworICAg
IGlmIChzb3VyY2VQcm9maWxlZENvZGVCbG9jaykgeworICAgICAgICBGcmVxdWVudEV4aXRTaXRl
IHNpdGU7CisgICAgICAgIGlmIChtX3dhc0hvaXN0ZWQpCisgICAgICAgICAgICBzaXRlID0gRnJl
cXVlbnRFeGl0U2l0ZShIb2lzdGluZ0ZhaWxlZCwgaml0VHlwZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHNpdGUgPSBGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdpbkZvckV4aXRQcm9m
aWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCwgaml0VHlwZSk7CisgICAgICAgIHNvdXJjZVByb2Zp
bGVkQ29kZUJsb2NrLT5hZGRGcmVxdWVudEV4aXRTaXRlKHNpdGUpOworICAgIH0KIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdEJhc2UuaAkocmV2aXNpb24gMjAxMDM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCwxMCBA
QCBzdHJ1Y3QgTm9kZTsKIC8vIGFuZCB0aGUgRlRMLgogCiBzdHJ1Y3QgT1NSRXhpdEJhc2Ugewot
ICAgIE9TUkV4aXRCYXNlKEV4aXRLaW5kIGtpbmQsIENvZGVPcmlnaW4gb3JpZ2luLCBDb2RlT3Jp
Z2luIG9yaWdpbkZvclByb2ZpbGUpCisgICAgT1NSRXhpdEJhc2UoRXhpdEtpbmQga2luZCwgQ29k
ZU9yaWdpbiBvcmlnaW4sIENvZGVPcmlnaW4gb3JpZ2luRm9yUHJvZmlsZSwgYm9vbCB3YXNIb2lz
dGVkKQogICAgICAgICA6IG1fa2luZChraW5kKQogICAgICAgICAsIG1fY291bnQoMCkKKyAgICAg
ICAgLCBtX3dhc0hvaXN0ZWQod2FzSG9pc3RlZCkKICAgICAgICAgLCBtX2NvZGVPcmlnaW4ob3Jp
Z2luKQogICAgICAgICAsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKG9yaWdpbkZvclByb2Zp
bGUpCiAgICAgewpAQCAtNTIsNiArNTMsNyBAQCBzdHJ1Y3QgT1NSRXhpdEJhc2UgewogICAgIAog
ICAgIEV4aXRLaW5kIG1fa2luZDsKICAgICB1aW50MzJfdCBtX2NvdW50OworICAgIGJvb2wgbV93
YXNIb2lzdGVkOwogICAgIAogICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIENvZGVP
cmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJl
dmlzaW9uIDIwMTAzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9
PSBUaHJlYWRlZENQUyk7Ci0KKyAgICAgICAgCiAgICAgICAgIGNsZWFyVmFyaWFibGVWb3Rlcygp
OwogICAgICAgICBpZGVudGlmeVJlZHVuZGFudFN0cnVjdHVyZUNoZWNrcygpOwogICAgICAgICBk
aXNhYmxlSG9pc3RpbmdGb3JWYXJpYWJsZXNXaXRoSW5zdWZmaWNpZW50Vm90ZXM8U3RydWN0dXJl
VHlwZUNoZWNrPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
Y3BwCShyZXZpc2lvbiAyMDEwMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIFJlZlB0cjxPU1JFeGl0
SGFuZGxlPiBPU1JFeGl0RGVzY3JpcHRvcjoKIHsKICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXRl
LmppdENvZGUtPm9zckV4aXQuc2l6ZSgpOwogICAgIE9TUkV4aXQmIGV4aXQgPSBzdGF0ZS5qaXRD
b2RlLT5vc3JFeGl0LmFsbG9jKAotICAgICAgICB0aGlzLCBleGl0S2luZCwgbm9kZU9yaWdpbi5m
b3JFeGl0LCBub2RlT3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgdGhpcywgZXhpdEtpbmQsIG5v
ZGVPcmlnaW4uZm9yRXhpdCwgbm9kZU9yaWdpbi5zZW1hbnRpYywgbm9kZU9yaWdpbi53YXNIb2lz
dGVkKTsKICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYobmV3IE9T
UkV4aXRIYW5kbGUoaW5kZXgsIGV4aXQpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvZmZzZXQ7
IGkgPCBwYXJhbXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGV4aXQubV92YWx1ZVJlcHMuYXBwZW5k
KHBhcmFtc1tpXSk7CkBAIC0xMDEsOSArMTAxLDkgQEAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IE9T
UkV4aXREZXNjcmlwdG9yOgogfQogCiBPU1JFeGl0OjpPU1JFeGl0KAotICAgIE9TUkV4aXREZXNj
cmlwdG9yKiBkZXNjcmlwdG9yLAotICAgIEV4aXRLaW5kIGV4aXRLaW5kLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIENvZGVPcmlnaW4gY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKQotICAgIDogT1NS
RXhpdEJhc2UoZXhpdEtpbmQsIGNvZGVPcmlnaW4sIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSkK
KyAgICBPU1JFeGl0RGVzY3JpcHRvciogZGVzY3JpcHRvciwgRXhpdEtpbmQgZXhpdEtpbmQsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW5Gb3JFeGl0UHJv
ZmlsZSwgYm9vbCB3YXNIb2lzdGVkKQorICAgIDogT1NSRXhpdEJhc2UoZXhpdEtpbmQsIGNvZGVP
cmlnaW4sIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgd2FzSG9pc3RlZCkKICAgICAsIG1fZGVz
Y3JpcHRvcihkZXNjcmlwdG9yKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmgJKHJldmlzaW9uIDIwMTAzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMTAgKzExNyw3IEBAIHByaXZh
dGU6CiB9OwogCiBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlIHsKLSAg
ICBPU1JFeGl0KAotICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciosIEV4aXRLaW5kLAotICAgICAg
ICBDb2RlT3JpZ2luLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZQotICAgICAg
ICApOworICAgIE9TUkV4aXQoT1NSRXhpdERlc2NyaXB0b3IqLCBFeGl0S2luZCwgQ29kZU9yaWdp
biwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIGJvb2wgd2FzSG9pc3RlZCk7
CiAKICAgICBPU1JFeGl0RGVzY3JpcHRvciogbV9kZXNjcmlwdG9yOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBtX2NvZGU7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjAxMDM3KQorKysgU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2MSBAQAorMjAxNi0wNS0xOCAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRzo6TElDTVBoYXNl
IHNob3VsZG4ndCBob2lzdCB0eXBlIGNoZWNrcyB1bmxlc3MgaXQga25vd3MgdGhhdCB0aGUgY2hl
Y2sgd2lsbCBzdWNjZWVkIGF0IHRoZSBsb29wIHByZS1oZWFkZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDUyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIGFuIGFkYXB0
b3IgZm9yIGdyYXBocyBjYWxsZWQgQmFja3dhcmRzR3JhcGguIFRoZSBXVEYgZ3JhcGggZnJhbWV3
b3JrIGlzIGJhc2VkIG9uCisgICAgICAgIHBhc3NpbmcgYXJvdW5kIGEgR3JhcGggdGVtcGxhdGUg
YXJndW1lbnQgdGhhdCBmb2xsb3dzIHRoZSBwcm90b2NvbCBzaGFyZWQgYnkgREZHOjpDRkcsCisg
ICAgICAgIEIzOjpDRkcsIGFuZCBBaXI6OkNGRy4gVGhlc2UgZ3JhcGhzIGFsd2F5cyBoYXZlIGEg
c2luZ2xlIHJvb3Qgbm9kZSBidXQgbWF5IGhhdmUgbWFueSBsZWFmCisgICAgICAgIG5vZGVzLiBU
aGlzIG5ldyBCYWNrd2FyZHNHcmFwaCBhZGFwdG9yIHJldmVyc2VzIHRoZSBncmFwaCBieSBjcmVh
dGluZyBhIHN5bnRoZXRpYyByZXR1cm4KKyAgICAgICAgbm9kZSB0aGF0IGl0IHVzZXMgYXMgdGhl
IHJvb3QgaW4gdGhlIGludmVydGVkIGdyYXBoLiBUaGlzIGN1cnJlbnRseSBtYXkgcmVzb3J0IHRv
IHNvbWUKKyAgICAgICAgaGV1cmlzdGljcyBpbiBwcm9ncmFtcyB0aGF0IGhhdmUgYW4gaW5maW5p
dGUgbG9vcCwgYnV0IG90aGVyIHRoYW4gdGhhdCwgaXQnbGwgd29yayB3ZWxsIGluCisgICAgICAg
IHRoZSBnZW5lcmFsIGNhc2UuCisgICAgICAgIAorICAgICAgICBUaGlzIGFsbG93cyB1cyB0byBz
YXkgRG9taW5hdG9yczxCYWNrd2FyZHNHcmFwaDxzb21lIGdyYXBoIHR5cGU+PiBhcyBhIHdheSBv
ZiBjb21wdXRpbmcKKyAgICAgICAgYmFja3dhcmRzIGRvbWluYXRvcnMsIHdoaWNoIHRoZW4gYWxs
b3dzIHVzIHRvIGVhc2lseSBhbnN3ZXIgY29udHJvbCBmbG93IGVxdWl2YWxlbmNlCisgICAgICAg
IHF1ZXJpZXMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQmFja3dhcmRzR3JhcGguaDog
QWRkZWQuCisgICAgICAgIChXVEY6OkJhY2t3YXJkc0dyYXBoOjpOb2RlOjpOb2RlKToKKyAgICAg
ICAgKFdURjo6QmFja3dhcmRzR3JhcGg6Ok5vZGU6OnJvb3QpOgorICAgICAgICAoV1RGOjpCYWNr
d2FyZHNHcmFwaDo6Tm9kZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkJhY2t3YXJkc0dy
YXBoOjpOb2RlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6QmFja3dhcmRzR3JhcGg6Ok5v
ZGU6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6Tm9kZTo6
aXNSb290KToKKyAgICAgICAgKFdURjo6QmFja3dhcmRzR3JhcGg6Ok5vZGU6Om5vZGUpOgorICAg
ICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6U2V0OjpTZXQpOgorICAgICAgICAoV1RGOjpCYWNr
d2FyZHNHcmFwaDo6U2V0OjphZGQpOgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6U2V0
OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6U2V0Ojpjb250YWlucyk6
CisgICAgICAgIChXVEY6OkJhY2t3YXJkc0dyYXBoOjpTZXQ6OmR1bXApOgorICAgICAgICAoV1RG
OjpCYWNrd2FyZHNHcmFwaDo6TWFwOjpNYXApOgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNHcmFw
aDo6TWFwOjpjbGVhcik6CisgICAgICAgIChXVEY6OkJhY2t3YXJkc0dyYXBoOjpNYXA6OnNpemUp
OgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6TWFwOjpvcGVyYXRvcltdKToKKyAgICAg
ICAgKFdURjo6QmFja3dhcmRzR3JhcGg6OkJhY2t3YXJkc0dyYXBoKToKKyAgICAgICAgKFdURjo6
QmFja3dhcmRzR3JhcGg6OnJvb3QpOgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6bmV3
TWFwKToKKyAgICAgICAgKFdURjo6QmFja3dhcmRzR3JhcGg6OnN1Y2Nlc3NvcnMpOgorICAgICAg
ICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6cHJlZGVjZXNzb3JzKToKKyAgICAgICAgKFdURjo6QmFj
a3dhcmRzR3JhcGg6OmluZGV4KToKKyAgICAgICAgKFdURjo6QmFja3dhcmRzR3JhcGg6Om5vZGUp
OgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6bnVtTm9kZXMpOgorICAgICAgICAoV1RG
OjpCYWNrd2FyZHNHcmFwaDo6ZHVtcCk6CisgICAgICAgICogd3RmL0RvbWluYXRvcnMuaDoKKyAg
ICAgICAgKFdURjo6RG9taW5hdG9yczo6RG9taW5hdG9ycyk6CisgICAgICAgIChXVEY6OkRvbWlu
YXRvcnM6OmR1bXApOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpMZW5nYXVlclRhcmphbjo6
Y29tcHV0ZURlcHRoRmlyc3RQcmVOdW1iZXJpbmcpOgorICAgICAgICAqIHd0Zi9HcmFwaE5vZGVX
b3JrbGlzdC5oOgorICAgICAgICAoV1RGOjpHcmFwaE5vZGVXaXRoOjpHcmFwaE5vZGVXaXRoKToK
KyAgICAgICAgKFdURjo6R3JhcGhOb2RlV2l0aDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgICog
d3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RGOjpjYWxsU3RhdGVsZXNzTGFtYmRhKToK
KyAgICAgICAgKFdURjo6Y2hlY2tBbmRTZXQpOgorCiAyMDE2LTA1LTE3ICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgRE9NUHJvbWlzZSBzaG91
bGQgb25seSByZXN0cmljdCB0aGUgcmVzb2x1dGlvbiB0eXBlCkluZGV4OiBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwMTAzNykKKysrIFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMwMSw2
ICszMDEsNyBAQAogCQlDRDU0OTdBRDE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDU0OTdBQjE1ODU3
RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggKi87IH07CiAJCUNFNDY1MTZFMTlEQjFGQjQwMDNF
Q0EwNSAvKiBOU01hcFRhYmxlU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRTQ2NTE2RDE5REIxRkI0MDAzRUNBMDUgLyogTlNNYXBUYWJsZVNQSS5o
ICovOyB9OwogCQlDRTczRTAyNTE5RENCN0FCMDA1ODBENUMgLyogWFBDU1BJLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTczRTAyNDE5RENCN0FCMDA1
ODBENUMgLyogWFBDU1BJLmggKi87IH07CisJCURDRUUyMjA1MUNFQjk4NjkwMDBDMjM5NiAvKiBC
YWNrd2FyZHNHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRENFRTIyMDQxQ0VCOTg2OTAwMEMyMzk2IC8qIEJhY2t3YXJkc0dyYXBoLmggKi87IH07
CiAJCURFNUEwOUZDMUJBMzY5OTIwMDNENDQyNCAvKiBDb21tb25DcnlwdG9TUEkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFNUEwOUZCMUJBMzY5OTIw
MDNENDQyNCAvKiBDb21tb25DcnlwdG9TUEkuaCAqLzsgfTsKIAkJRTE1NTU2RjUxOEEwQ0MxODAw
NkY0OEZCIC8qIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1NTU2RjMxOEEwQ0MxODAwNkY0OEZCIC8qIENy
eXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwICovOyB9OwogCQlFMTU1NTZGNjE4QTBDQzE4MDA2RjQ4
RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1NTU2RjQxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0b2dy
YXBoaWNVdGlsaXRpZXMuaCAqLzsgfTsKQEAgLTYyMiw2ICs2MjMsNyBAQAogCQlDRDU0OTdBQjE1
ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1lZGlhVGltZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTQ2NTE2
RDE5REIxRkI0MDAzRUNBMDUgLyogTlNNYXBUYWJsZVNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOU01hcFRhYmxlU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNFNzNFMDI0MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gWFBDU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CURDRUUyMjA0MUNFQjk4NjkwMDBDMjM5NiAvKiBCYWNrd2FyZHNHcmFwaC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCYWNrd2FyZHNHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlERTVBMDlGQjFCQTM2OTkyMDAzRDQ0MjQgLyogQ29tbW9uQ3J5cHRvU1BJ
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vbkNyeXB0b1NQSS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU1NTZGMzE4QTBDQzE4MDA2RjQ4RkIgLyog
Q3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTE1NTU2RjQxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0b2dyYXBoaWNVdGlsaXRp
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvZ3JhcGhpY1V0aWxp
dGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYzLDYgKzc2NSw3IEBACiAJ
CQkJQThBNDcyNUQxNTFBODI1QTAwNDEyM0ZGIC8qIEF0b21pY3MuaCAqLywKIAkJCQkxNDY5NDE5
QTE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sLmggKi8sCiAJCQkJMTQ2OTQxOUIx
NkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFpbmVkUG9vbE1hYy5tbSAqLywKKwkJCQlEQ0VFMjIw
NDFDRUI5ODY5MDAwQzIzOTYgLyogQmFja3dhcmRzR3JhcGguaCAqLywKIAkJCQkwRkIxNEUxODE4
MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggKi8sCiAJCQkJMEZCMTRFMUExODEwRTFEQTAwOUI2QjRE
IC8qIEJhZ1RvSGFzaE1hcC5oICovLAogCQkJCUE4QTQ3MjVGMTUxQTgyNUEwMDQxMjNGRiAvKiBC
aXRtYXAuaCAqLywKQEAgLTExNTUsNiArMTE1OCw3IEBACiAJCQkJQThBNDczOTExNTFBODI1QjAw
NDEyM0ZGIC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFQjk1
RTFGMDE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzNBRDE1MUE4MjVCMDA0MTIzRkYgLyogY2FjaGVkLXBvd2Vycy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRENFRTIyMDUxQ0VCOTg2OTAwMEMyMzk2IC8qIEJhY2t3YXJkc0dyYXBoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzQ1RTE1MUE4MjVCMDA0MTIzRkYgLyogQ2hhcmFjdGVyTmFtZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzk0MTUxQTgyNUIwMDQxMjNGRiAvKiBDaGVja2Vk
QXJpdGhtZXRpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTUxNTFBODI1QjAwNDEyM0ZG
IC8qIENoZWNrZWRCb29sZWFuLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0JhY2t3YXJkc0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFja3dhcmRz
R3JhcGguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0JhY2t3YXJkc0dyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfQmFja3dhcmRzR3JhcGhfaAorI2Rl
ZmluZSBXVEZfQmFja3dhcmRzR3JhcGhfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4K
K2NsYXNzIEJhY2t3YXJkc0dyYXBoIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYWNrd2Fy
ZHNHcmFwaCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAgICBj
bGFzcyBOb2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5vZGUodHlwZW5hbWUgR3JhcGg6Ok5v
ZGUgbm9kZSA9IHR5cGVuYW1lIEdyYXBoOjpOb2RlKCkpCisgICAgICAgICAgICA6IG1fbm9kZShu
b2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgTm9kZSByb290KCkK
KyAgICAgICAgeworICAgICAgICAgICAgTm9kZSByZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQu
bV9ub2RlID0gMDsKKyAgICAgICAgICAgIHJlc3VsdC5tX2lzUm9vdCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IE5vZGUmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9ub2RlID09IG90aGVyLm1fbm9kZQorICAgICAgICAgICAgICAgICYmIG1faXNSb290ID09IG90
aGVyLm1faXNSb290OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IE5vZGUmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gTm9kZSgpOyB9CisKKyAgICAgICAgYm9vbCBpc1Jv
b3QoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pc1Jvb3Q7CisgICAg
ICAgIH0KKworICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBub2RlKCkgY29uc3QgeyByZXR1
cm4gbV9ub2RlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9k
ZSBtX25vZGU7CisgICAgICAgIGJvb2wgbV9pc1Jvb3QgeyBmYWxzZSB9OworICAgIH07CisKKyAg
ICBjbGFzcyBTZXQgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2V0KCkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGFkZChjb25zdCBOb2RlJiBub2RlKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobm9kZS5pc1Jvb3QoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY2hlY2tBbmRTZXQobV9oYXNSb290LCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBt
X3NldC5hZGQobm9kZS5ub2RlKCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCByZW1vdmUo
Y29uc3QgTm9kZSYgbm9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUuaXNSb290
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrQW5kU2V0KG1faGFzUm9vdCwgZmFsc2Up
OworICAgICAgICAgICAgcmV0dXJuIG1fc2V0LnJlbW92ZShub2RlLm5vZGUoKSk7CisgICAgICAg
IH0KKworICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IE5vZGUmIG5vZGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChub2RlLmlzUm9vdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBt
X2hhc1Jvb3Q7CisgICAgICAgICAgICByZXR1cm4gbV9zZXQuY29udGFpbnMobm9kZS5ub2RlKCkp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2hhc1Jvb3QpCisgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIjcmV0dXJuICIpOworICAgICAgICAgICAgb3V0LnByaW50KG1fc2V0KTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlbmFtZSBHcmFwaDo6
U2V0IG1fc2V0OworICAgICAgICBib29sIG1faGFzUm9vdCB7IGZhbHNlIH07CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgTWFwIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIE1hcChHcmFwaCYgZ3JhcGgpCisgICAgICAgICAgICA6IG1fbWFwKGdyYXBoLnRlbXBs
YXRlIG5ld01hcDxUPigpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNs
ZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9tYXAuY2xlYXIoKTsKKyAgICAgICAgICAg
IG1fcm9vdCA9IFQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuc2l6ZSgpICsgMTsgfQorCisgICAgICAgIFQmIG9wZXJhdG9yW10oc2l6
ZV90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWluZGV4KQorICAgICAgICAg
ICAgICAgIHJldHVybiBtX3Jvb3Q7CisgICAgICAgICAgICByZXR1cm4gbV9tYXBbaW5kZXggLSAx
XTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKCpjb25zdF9jYXN0PE1hcCo+
KHRoaXMpKVtpbmRleF07CisgICAgICAgIH0KKworICAgICAgICBUJiBvcGVyYXRvcltdKGNvbnN0
IE5vZGUmIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlLmlzUm9vdCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBtX3Jvb3Q7CisgICAgICAgICAgICByZXR1cm4gbV9tYXBb
bm9kZS5ub2RlKCldOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXShj
b25zdCBOb2RlJiBub2RlKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKCpj
b25zdF9jYXN0PE1hcCo+KHRoaXMpKVtub2RlXTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBw
cml2YXRlOgorICAgICAgICB0eXBlbmFtZSBHcmFwaDo6dGVtcGxhdGUgTWFwPFQ+IG1fbWFwOwor
ICAgICAgICBUIG1fcm9vdDsKKyAgICB9OworCisgICAgdHlwZWRlZiBWZWN0b3I8Tm9kZSwgND4g
TGlzdDsKKworICAgIEJhY2t3YXJkc0dyYXBoKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBtX2dy
YXBoKGdyYXBoKQorICAgIHsKKyAgICAgICAgR3JhcGhOb2RlV29ya2xpc3Q8dHlwZW5hbWUgR3Jh
cGg6Ok5vZGUsIHR5cGVuYW1lIEdyYXBoOjpTZXQ+IHdvcmtsaXN0OworCisgICAgICAgIGF1dG8g
YWRkUm9vdFN1Y2Nlc3NvciA9IFsmXSAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9kZSkgeworICAg
ICAgICAgICAgaWYgKHdvcmtsaXN0LnB1c2gobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBtX3Jv
b3RTdWNjZXNzb3JMaXN0LmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgICAgICBtX3Jvb3RTdWNj
ZXNzb3JTZXQuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgIHdoaWxlICh0eXBlbmFtZSBHcmFw
aDo6Tm9kZSBub2RlID0gd29ya2xpc3QucG9wKCkpCisgICAgICAgICAgICAgICAgICAgIHdvcmts
aXN0LnB1c2hBbGwoZ3JhcGgucHJlZGVjZXNzb3JzKG5vZGUpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ3JhcGgubnVtTm9k
ZXMoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9kZSA9
IGdyYXBoLm5vZGUoaSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWdyYXBoLnN1Y2Nlc3NvcnMo
bm9kZSkuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBhZGRSb290U3VjY2Vzc29yKG5vZGUp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0
aGVyZSB3aWxsIGJlIHNvbWUgbm9kZXMgaW4gdGhlIGdyYXBoIHRoYXQgYXJlbid0IGtub3duIHRv
IHRoZSB3b3JrbGlzdC4gV2UKKyAgICAgICAgLy8gY291bGQgYWRkIGFueSBvciBhbGwgb2YgdGhl
bSB0byB0aGUgcm9vdCBzdWNjZXNzb3JzIGxpc3QuIEFkZGluZyBhbGwgb2YgdGhlbSB3b3VsZCBi
ZSBhIGJhZAorICAgICAgICAvLyBwZXNzaW1pc2F0aW9uLiBJZGVhbGx5IHdlIHdvdWxkIHBpY2sg
dGhlIG9uZXMgdGhhdCBoYXZlIGJhY2t3YXJkIGVkZ2VzIGJ1dCBubyBmb3J3YXJkCisgICAgICAg
IC8vIGVkZ2VzLiBUaGF0IHdvdWxkIHJlcXVpcmUgdGhpbmtpbmcsIHNvIHdlIGp1c3QgdXNlIGEg
cm91Z2ggaGV1cmlzdGljOiBhZGQgdGhlIGhpZ2hlc3QKKyAgICAgICAgLy8gbnVtYmVyZWQgbm9k
ZXMgZmlyc3QsIHdoaWNoIGlzIHRvdGFsbHkgZmluZSBpZiB0aGUgaW5wdXQgcHJvZ3JhbSBpcyBh
bHJlYWR5IHNvcnRlZCBuaWNlbHkuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGdyYXBoLm51
bU5vZGVzKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmICh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBu
b2RlID0gZ3JhcGgubm9kZShpKSkKKyAgICAgICAgICAgICAgICBhZGRSb290U3VjY2Vzc29yKG5v
ZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgTm9kZSByb290KCkgeyByZXR1cm4gTm9kZTo6
cm9vdCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIE1hcDxUPiBuZXdNYXAo
KSB7IHJldHVybiBNYXA8VD4obV9ncmFwaCk7IH0KKworICAgIExpc3Qgc3VjY2Vzc29ycyhjb25z
dCBOb2RlJiBub2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG5vZGUuaXNSb290KCkpCisg
ICAgICAgICAgICByZXR1cm4gbV9yb290U3VjY2Vzc29yTGlzdDsKKyAgICAgICAgTGlzdCByZXN1
bHQ7CisgICAgICAgIGZvciAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgcHJlZGVjZXNzb3IgOiBtX2dy
YXBoLnByZWRlY2Vzc29ycyhub2RlLm5vZGUoKSkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHByZWRlY2Vzc29yKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBMaXN0
IHByZWRlY2Vzc29ycyhjb25zdCBOb2RlJiBub2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KG5vZGUuaXNSb290KCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIExpc3Qg
cmVzdWx0OworICAgICAgICAKKyAgICAgICAgaWYgKG1fcm9vdFN1Y2Nlc3NvclNldC5jb250YWlu
cyhub2RlLm5vZGUoKSkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKE5vZGU6OnJvb3QoKSk7
CisKKyAgICAgICAgZm9yICh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBzdWNjZXNzb3IgOiBtX2dyYXBo
LnN1Y2Nlc3NvcnMobm9kZS5ub2RlKCkpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdWNj
ZXNzb3IpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5zaWduZWQg
aW5kZXgoY29uc3QgTm9kZSYgbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChub2RlLmlz
Um9vdCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2dyYXBoLmlu
ZGV4KG5vZGUubm9kZSgpKSArIDE7CisgICAgfQorCisgICAgTm9kZSBub2RlKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpbmRleCkKKyAgICAgICAgICAgIHJldHVy
biBOb2RlOjpyb290KCk7CisgICAgICAgIHJldHVybiBtX2dyYXBoLm5vZGUoaW5kZXggLSAxKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1Ob2RlcygpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9ncmFwaC5udW1Ob2RlcygpICsgMTsKKyAgICB9CisKKyAgICBDU3RyaW5nIGR1bXAo
Tm9kZSBub2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0Owor
ICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAg
ICAgICBlbHNlIGlmIChub2RlLmlzUm9vdCgpKQorICAgICAgICAgICAgb3V0LnByaW50KCJyb290
Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChtX2dyYXBoLmR1bXAobm9k
ZS5ub2RlKCkpKTsKKyAgICAgICAgcmV0dXJuIG91dC50b0NTdHJpbmcoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1Ob2RlcygpOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGUg
bm9kZSA9IHRoaXMtPm5vZGUoaSk7CisgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBvdXQucHJpbnQoZHVtcChub2RlKSwgIjpcbiIp
OworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgUHJlZHM6ICIpOworICAgICAgICAgICAgQ29t
bWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgZm9yIChOb2RlIHByZWRlY2Vzc29yIDogcHJl
ZGVjZXNzb3JzKG5vZGUpKQorICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgZHVtcChw
cmVkZWNlc3NvcikpOworICAgICAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICAgICAg
b3V0LnByaW50KCIgICAgU3VjY3M6ICIpOworICAgICAgICAgICAgY29tbWEgPSBDb21tYVByaW50
ZXIoKTsKKyAgICAgICAgICAgIGZvciAoTm9kZSBzdWNjZXNzb3IgOiBzdWNjZXNzb3JzKG5vZGUp
KQorICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgZHVtcChzdWNjZXNzb3IpKTsKKyAg
ICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToK
KyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBMaXN0IG1fcm9vdFN1Y2Nlc3Nvckxpc3Q7CisgICAg
dHlwZW5hbWUgR3JhcGg6OlNldCBtX3Jvb3RTdWNjZXNzb3JTZXQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwordXNpbmcgV1RGOjpCYWNrd2FyZHNHcmFwaDsKKworI2VuZGlmIC8vIFdURl9C
YWNrd2FyZHNHcmFwaF9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDEw
MzcpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
Miw2ICsyLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgQVNDSUlDVHlwZS5oCiAgICAgQXNzZXJ0
aW9ucy5oCiAgICAgQXRvbWljcy5oCisgICAgQmFja3dhcmRzR3JhcGguaAogICAgIEJhZy5oCiAg
ICAgQmFnVG9IYXNoTWFwLmgKICAgICBCaXRWZWN0b3IuaApJbmRleDogU291cmNlL1dURi93dGYv
RG9taW5hdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RvbWluYXRvcnMuaAko
cmV2aXNpb24gMjAxMDM3KQorKysgU291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgRG9taW5hdG9ycyB7
CiBwdWJsaWM6CiAgICAgRG9taW5hdG9ycyhHcmFwaCYgZ3JhcGgsIGJvb2wgc2VsZkNoZWNrID0g
ZmFsc2UpCiAgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2RhdGEoZ3JhcGgu
dGVtcGxhdGUgbmV3TWFwPEJsb2NrRGF0YT4oKSkKICAgICB7CiAgICAgICAgIExlbmdhdWVyVGFy
amFuIGxlbmdhdWVyVGFyamFuKG1fZ3JhcGgpOwogICAgICAgICBsZW5nYXVlclRhcmphbi5jb21w
dXRlKCk7CkBAIC02Nyw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAKICAgICAgICAgLy8gUGxhaW4g
c3RhY2stYmFzZWQgd29ya2xpc3QgYmVjYXVzZSB3ZSBhcmUgZ3VhcmFudGVlZCB0byBzZWUgZWFj
aCBibG9jayBleGFjdGx5IG9uY2UgYW55d2F5LgogICAgICAgICBWZWN0b3I8R3JhcGhOb2RlV2l0
aE9yZGVyPHR5cGVuYW1lIEdyYXBoOjpOb2RlPj4gd29ya2xpc3Q7Ci0gICAgICAgIHdvcmtsaXN0
LmFwcGVuZChHcmFwaE5vZGVXaXRoT3JkZXI8dHlwZW5hbWUgR3JhcGg6Ok5vZGU+KG1fZ3JhcGgu
bm9kZSgwKSwgR3JhcGhWaXNpdE9yZGVyOjpQcmUpKTsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5k
KEdyYXBoTm9kZVdpdGhPcmRlcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZT4obV9ncmFwaC5yb290KCks
IEdyYXBoVmlzaXRPcmRlcjo6UHJlKSk7CiAgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBHcmFwaE5vZGVXaXRoT3JkZXI8dHlwZW5hbWUgR3JhcGg6Ok5v
ZGU+IGl0ZW0gPSB3b3JrbGlzdC50YWtlTGFzdCgpOwogICAgICAgICAgICAgc3dpdGNoIChpdGVt
Lm9yZGVyKSB7CkBAIC0yNzksMTAgKzI4MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAo
bV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciA9PSBVSU5UX01BWCkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgb3V0LnByaW50KCIgICAgQmxv
Y2sgIyIsIGJsb2NrSW5kZXgsICI6IGlkb20gPSAiLCBwb2ludGVyRHVtcChtX2RhdGFbYmxvY2tJ
bmRleF0uaWRvbVBhcmVudCksICIsIGlkb21LaWRzID0gWyIpOworICAgICAgICAgICAgb3V0LnBy
aW50KCIgICAgQmxvY2sgIyIsIGJsb2NrSW5kZXgsICI6IGlkb20gPSAiLCBtX2dyYXBoLmR1bXAo
bV9kYXRhW2Jsb2NrSW5kZXhdLmlkb21QYXJlbnQpLCAiLCBpZG9tS2lkcyA9IFsiKTsKICAgICAg
ICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2RhdGFbYmxvY2tJbmRleF0uaWRvbUtpZHMuc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbV9kYXRhW2Jsb2NrSW5kZXhdLmlkb21LaWRzW2ld
KTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG1fZ3JhcGguZHVtcChtX2RhdGFb
YmxvY2tJbmRleF0uaWRvbUtpZHNbaV0pKTsKICAgICAgICAgICAgIG91dC5wcmludCgiXSwgcHJl
L3Bvc3QgPSAiLCBtX2RhdGFbYmxvY2tJbmRleF0ucHJlTnVtYmVyLCAiLyIsIG1fZGF0YVtibG9j
a0luZGV4XS5wb3N0TnVtYmVyLCAiXG4iKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM0Nyw3ICsz
NDgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gb2Ygbm90IG5vdGljaW5nIEEtPkMgdW50
aWwgd2UncmUgZG9uZSBwcm9jZXNzaW5nIEIuCiAKICAgICAgICAgICAgIEV4dGVuZGVkR3JhcGhO
b2RlV29ya2xpc3Q8dHlwZW5hbWUgR3JhcGg6Ok5vZGUsIHVuc2lnbmVkLCB0eXBlbmFtZSBHcmFw
aDo6U2V0PiB3b3JrbGlzdDsKLSAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gobV9ncmFwaC5ub2Rl
KDApLCAwKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gobV9ncmFwaC5yb290KCksIDApOwog
ICAgICAgICAKICAgICAgICAgICAgIHdoaWxlIChHcmFwaE5vZGVXaXRoPHR5cGVuYW1lIEdyYXBo
OjpOb2RlLCB1bnNpZ25lZD4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBpdGVtLm5vZGU7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0dyYXBoTm9kZVdvcmtsaXN0LmgJKHJldmlzaW9uIDIwMTAzNykKKysrIFNvdXJjZS9XVEYvd3Rm
L0dyYXBoTm9kZVdvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgc3Ry
dWN0IEdyYXBoTm9kZVdpdGggewogICAgIHsKICAgICB9CiAKLSAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbm9kZTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiAhIW5vZGU7IH0KICAgICAKICAgICBOb2RlIG5vZGU7CiAgICAg
VCBkYXRhOwpJbmRleDogU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDIwMTAzNykKKysrIFNv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTksNiArMjk5
LDE1IEBAIFJlc3VsdFR5cGUgY2FsbFN0YXRlbGVzc0xhbWJkYShBcmd1bWVudFQKICAgICByZXR1
cm4gKCpiaXR3aXNlX2Nhc3Q8RnVuYyo+KGRhdGEpKShzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBl
cz4oYXJndW1lbnRzKS4uLik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
Citib29sIGNoZWNrQW5kU2V0KFQmIGxlZnQsIFUgcmlnaHQpCit7CisgICAgaWYgKGxlZnQgPT0g
cmlnaHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBsZWZ0ID0gcmlnaHQ7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAvLyBUaGlzIHZlcnNpb24gb2Yg
cGxhY2VtZW50IG5ldyBvbWl0cyBhIDAgY2hlY2suCkBAIC00MDksMTcgKzQxOCwxOCBAQCBBTFdB
WVNfSU5MSU5FIGNvbnN0ZXhwciB0eXBlbmFtZSByZW1vdmVfCiAKIHVzaW5nIFdURjo6S0I7CiB1
c2luZyBXVEY6Ok1COwotdXNpbmcgV1RGOjppc0NvbXBpbGF0aW9uVGhyZWFkOwordXNpbmcgV1RG
OjphcHByb3hpbWF0ZUJpbmFyeVNlYXJjaDsKK3VzaW5nIFdURjo6YmluYXJ5U2VhcmNoOwordXNp
bmcgV1RGOjpiaXR3aXNlX2Nhc3Q7Cit1c2luZyBXVEY6OmNhbGxTdGF0ZWxlc3NMYW1iZGE7Cit1
c2luZyBXVEY6OmNoZWNrQW5kU2V0OwogdXNpbmcgV1RGOjppbnNlcnRJbnRvQm91bmRlZFZlY3Rv
cjsKK3VzaW5nIFdURjo6aXNDb21waWxhdGlvblRocmVhZDsKIHVzaW5nIFdURjo6aXNQb2ludGVy
QWxpZ25lZDsKK3VzaW5nIFdURjo6aXNTdGF0ZWxlc3NMYW1iZGE7CiB1c2luZyBXVEY6OmlzOEJ5
dGVBbGlnbmVkOwotdXNpbmcgV1RGOjpiaW5hcnlTZWFyY2g7Ci11c2luZyBXVEY6OnRyeUJpbmFy
eVNlYXJjaDsKLXVzaW5nIFdURjo6YXBwcm94aW1hdGVCaW5hcnlTZWFyY2g7Ci11c2luZyBXVEY6
OmJpdHdpc2VfY2FzdDsKIHVzaW5nIFdURjo6c2FmZUNhc3Q7Ci11c2luZyBXVEY6OmlzU3RhdGVs
ZXNzTGFtYmRhOwotdXNpbmcgV1RGOjpjYWxsU3RhdGVsZXNzTGFtYmRhOwordXNpbmcgV1RGOjp0
cnlCaW5hcnlTZWFyY2g7CiAKICNpZiBDT01QSUxFUl9TVVBQT1JUUyhDWFhfVVNFUl9MSVRFUkFM
UykKIC8vIFdlIG5vcm1hbGx5IGRvbid0IHdhbnQgdG8gYnJpbmcgaW4gZW50aXJlIHN0ZCBuYW1l
c3BhY2VzLCBidXQgbGl0ZXJhbHMgYXJlIGFuIGV4Y2VwdGlvbi4KSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIwMTAzNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI1IEBACisyMDE2LTA1LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgREZHOjpMSUNNUGhhc2Ugc2hvdWxkbid0IGhvaXN0IHR5cGUgY2hlY2tzIHVubGVz
cyBpdCBrbm93cyB0aGF0IHRoZSBjaGVjayB3aWxsIHN1Y2NlZWQgYXQgdGhlIGxvb3AgcHJlLWhl
YWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0
NTI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBBZGQgdGVzdHMgZm9yIExJQ00gaG9pc3RpbmcgdGhpbmdzIHRoYXQgd291bGQgb25seSBl
eGl0IGlmIGhvaXN0ZWQuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL2xpY20tZHJhZ29ucy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvbGljbS1kcmFnb25zLW91dC1v
Zi1ib3VuZHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2xpY20t
ZHJhZ29ucy1vdXQtb2YtYm91bmRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mv
bGljbS1kcmFnb25zLW92ZXJmbG93LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMv
cmVncmVzcy9saWNtLWRyYWdvbnMtb3ZlcmZsb3cuaHRtbDogQWRkZWQuCisgICAgICAgICoganMv
cmVncmVzcy9saWNtLWRyYWdvbnMuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvbGljbS1kcmFnb25zLW91dC1vZi1ib3VuZHMuanM6IEFkZGVkLgorICAgICAg
ICAoZm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9saWNtLWRyYWdvbnMt
b3ZlcmZsb3cuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9saWNtLWRyYWdvbnMuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwog
MjAxNi0wNS0xNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAg
ICAgIGNvbnNvbGUgbmFtZXNwYWNlIGJyZWFrcyBwdXR0aW5nIHByb3BlcnRpZXMgb24gY29uc29s
ZS5fX3Byb3RvX18KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbGljbS1kcmFnb25zLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJh
Z29ucy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2xpY20tZHJhZ29ucy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBA
QAorSlNSZWdyZXNzL2xpY20tZHJhZ29ucworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9saWNt
LWRyYWdvbnMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9saWNtLWRyYWdvbnMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy1vdXQt
b2YtYm91bmRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitK
U1JlZ3Jlc3MvbGljbS1kcmFnb25zLW91dC1vZi1ib3VuZHMKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvbGljbS1kcmFnb25zLW91dC1vZi1ib3VuZHMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy1vdXQtb2YtYm91bmRzLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy1vdXQtb2YtYm91
bmRzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbGljbS1kcmFnb25zLW91dC1vZi1ib3Vu
ZHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9saWNtLWRyYWdvbnMtb3ZlcmZsb3ctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbGljbS1kcmFnb25zLW92ZXJmbG93LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbGljbS1kcmFnb25zLW92
ZXJmbG93LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1Jl
Z3Jlc3MvbGljbS1kcmFnb25zLW92ZXJmbG93CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xp
Y20tZHJhZ29ucy1vdmVyZmxvdy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvbGljbS1kcmFnb25zLW92ZXJmbG93Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy1vdmVyZmxvdy5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL2xpY20tZHJhZ29ucy1vdmVyZmxvdy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbGljbS1kcmFnb25zLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL2xpY20tZHJhZ29ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9saWNt
LWRyYWdvbnMtb3V0LW9mLWJvdW5kcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9saWNtLWRyYWdvbnMtb3V0LW9mLWJvdW5kcy5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2xpY20tZHJhZ29u
cy1vdXQtb2YtYm91bmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKK2Z1bmN0
aW9uIGZvbyhwLCBvLCBpKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaiA9
IDA7IGogPCAxMDAwOyArK2opIHsKKyAgICAgICAgaWYgKHApCisgICAgICAgICAgICByZXN1bHQg
Kz0gb1tpXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgfQorICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBvID0gWzQyXTsKKwor
dmFyIHJlc3VsdCA9IDA7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAg
cmVzdWx0ICs9IGZvbyh0cnVlLCBvLCAwKTsKKyAgICByZXN1bHQgKz0gZm9vKGZhbHNlLCBvLCAx
KTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQorICAgIHJlc3VsdCArPSBm
b28oZmFsc2UsIG8sIDEpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDIwMDAwOyArK2kpCisgICAg
cmVzdWx0ICs9IGZvbyh0cnVlLCBvLCAwKTsKKworaWYgKHJlc3VsdCAhPSA4OTMwMDAwMDApCisg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbGljbS1kcmFnb25zLW92ZXJmbG93LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2xpY20tZHJhZ29u
cy1vdmVyZmxvdy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2xpY20tZHJhZ29ucy1vdmVyZmxvdy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI4IEBACitmdW5jdGlvbiBmb28ocCwgYSwgYikgeworICAgIHZhciByZXN1bHQgPSAwOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgICAgIGlmIChwKQorICAg
ICAgICAgICAgcmVzdWx0ICs9IGEgKyBiOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1
bHQgKz0gYSAtIGI7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZv
byk7CisKK3ZhciByZXN1bHQgPSAwOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkg
eworICAgIHJlc3VsdCArPSBmb28odHJ1ZSwgMSwgMik7CisgICAgcmVzdWx0ICs9IGZvbyhmYWxz
ZSwgMjAwMDAwMDAwMCwgMjAwMDAwMDAwMCk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkKKyAgICByZXN1bHQgKz0gZm9vKGZhbHNlLCAyMDAwMDAwMDAwLCAyMDAwMDAwMDAw
KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQorICAgIHJlc3VsdCArPSBmb28o
dHJ1ZSwgMSwgMik7CisKK2lmIChyZXN1bHQgIT0gMzMwMDAwMDApCisgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvbGljbS1kcmFnb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2xpY20tZHJhZ29ucy5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2xpY20tZHJhZ29ucy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACitmdW5jdGlvbiBmb28ocCwgbykgeworICAgIHZhciBy
ZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgICAg
IGlmIChwKQorICAgICAgICAgICAgcmVzdWx0ICs9IG8uZjsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmVzdWx0Kys7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5l
KGZvbyk7CisKK3ZhciBvID0ge2Y6NDJ9OwordmFyIHAgPSB7fTsKKwordmFyIHJlc3VsdCA9IDA7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgcmVzdWx0ICs9IGZvbyh0
cnVlLCBvKTsKKyAgICByZXN1bHQgKz0gZm9vKGZhbHNlLCBwKTsKK30KKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDsgKytpKQorICAgIHJlc3VsdCArPSBmb28oZmFsc2UsIHApOworCitmb3Ig
KHZhciBpID0gMDsgaSA8IDMwMDAwOyArK2kpCisgICAgcmVzdWx0ICs9IGZvbyh0cnVlLCBvKTsK
KworaWYgKHJlc3VsdCAhPSAxMzEzMDAwMDAwKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dDogIiArIHJlc3VsdDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279394</attachid>
            <date>2016-05-19 09:46:46 -0700</date>
            <delta_ts>2016-05-19 14:16:59 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79869</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAxMTY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBA
CisyMDE2LTA1LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHOjpMSUNNUGhhc2Ugc2hvdWxkbid0IGhvaXN0IHR5cGUgY2hlY2tzIHVubGVzcyBpdCBrbm93
cyB0aGF0IHRoZSBjaGVjayB3aWxsIHN1Y2NlZWQgYXQgdGhlIGxvb3AgcHJlLWhlYWRlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NTI3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlz
IGFkZHMgYSBjb250cm9sIGZsb3cgZXF1aXZhbGVuY2UgYW5hbHlzaXMgKGNhbGxlZCBDb250cm9s
RXF1aXZhbGVuY2VBbmFseXNpcykgYmFzZWQgb24KKyAgICAgICAgZG9taW5hdG9yIGFuYWx5c2lz
IG92ZXIgdGhlIGJhY2t3YXJkcyBDRkcuIExJQ00gbm93IHVzZXMgaXQgdG8gYmVjb21lIG1vcmUg
Y29uc2VydmF0aXZlCisgICAgICAgIGFib3V0IGhvaXN0aW5nIGNoZWNrcywgaWYgdGhpcyBoYXMg
Y2F1c2VkIHByb2JsZW1zIGluIHRoZSBwYXN0LiBJZiB3ZSBob2lzdCBzb21ldGhpbmcgdGhhdAor
ICAgICAgICBtYXkgZXhpdCBmcm9tIGEgYmxvY2sgdGhhdCB3YXMgbm90IGNvbnRyb2wgZXF1aXZh
bGVudCB0byB0aGUgcHJlLWhlYWRlciB0aGVuIGl0J3MgcG9zc2libGUKKyAgICAgICAgdGhhdCB0
aGUgbm9kZSdzIHNwZWN1bGF0aW9uIHdpbGwgZmFpbCBldmVuIHRob3VnaCBpdCB3b3VsZG4ndCBo
YXZlIGlmIGl0IHdhc24ndCBob2lzdGVkLiBTbywKKyAgICAgICAgd2UgZmxhZyB0aGVzZSBub2Rl
cycgb3JpZ2lucyBhcyBiZWluZyAid2FzSG9pc3RlZCIgYW5kIHdlIHRyYWNrIGFsbCBvZiB0aGVp
ciBleGl0cyBhcworICAgICAgICAiSG9pc3RpbmdGYWlsZWQiLiBMSUNNIHdpbGwgdHVybiBvZmYg
c3VjaCBzcGVjdWxhdGl2ZSBob2lzdGluZyBpZiB0aGUgQ29kZUJsb2NrIGZyb20gd2hpY2gKKyAg
ICAgICAgd2UgYXJlIGhvaXN0aW5nIGhhZCB0aGUgSG9pc3RpbmdGYWlsZWQgZXhpdCBraW5kLgor
ICAgICAgICAKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgZGVsaWJlcmF0ZWx5IHN0aWxsIGFsbG93
cyB1cyB0byBob2lzdCB0aGluZ3MgdGhhdCBtYXkgZXhpdCBldmVuIGlmIHRoZXkgYXJlCisgICAg
ICAgIG5vdCBjb250cm9sIGVxdWl2YWxlbnQgdG8gdGhlIHByZS1oZWFkZXIuIFRoaXMgaXMgbmVj
ZXNzYXJ5IGJlY2F1c2UgdGhlIHByb2ZpdGFiaWxpdHkgb2YKKyAgICAgICAgaG9pc3RpbmcgaXMg
c28gaHVnZSBpbiBhbGwgb2YgdGhlIGNhc2VzIHRoYXQgd2UncmUgYXdhcmUgb2YgdGhhdCBpdCdz
IHdvcnRoIGdpdmluZyBpdCBhCisgICAgICAgIHNob3QuCisgICAgICAgIAorICAgICAgICBUaGlz
IGlzIG5ldXRyYWwgb24gbWFjcm9iZW5jaG1hcmtzIHNpbmNlIG5vbmUgb2YgdGhlIGJlbmNobWFy
a3Mgd2UgdHJhY2sgaGF2ZSBhIGhvaXN0YWJsZQorICAgICAgICBvcGVyYXRpb24gdGhhdCB3b3Vs
ZCBleGl0IG9ubHkgaWYgaG9pc3RlZC4gSSBhZGRlZCBtaWNyb2JlbmNobWFya3MgdG8gaWxsdXN0
cmF0ZSB0aGUgcHJvYmxlbQorICAgICAgICBhbmQgdHdvIG9mIHRoZW0gc3BlZWQgdXAgYnkgfjQw
JSB3aGlsZSBvbmUgb2YgdGhlbSBpcyBuZXV0cmFsIChJbnQ1MiBzYXZlcyB1cyBmcm9tIGhhdmlu
ZworICAgICAgICBwcm9ibGVtcyBvbiB0aGF0IHByb2dyYW0gZXZlbiB0aG91Z2ggTElDTSBwcmV2
aW91c2x5IGRpZCB0aGUgd3JvbmcgdGhpbmcpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9FeGl0S2luZC5j
cHA6CisgICAgICAgIChKU0M6OmV4aXRLaW5kVG9TdHJpbmcpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0V4aXRLaW5kLmg6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplVG8pOgorICAg
ICAgICAqIGRmZy9ERkdCYWNrd2FyZHNDRkcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzQ0ZHOjpCYWNrd2FyZHNDRkcpOgorICAgICAgICAqIGRmZy9ERkdCYWNrd2FyZHNE
b21pbmF0b3JzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc0RvbWluYXRv
cnM6OkJhY2t3YXJkc0RvbWluYXRvcnMpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjaGVja0FuZFNldCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RG
R0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
OkNvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzOjpDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6Q29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM6OmRvbWluYXRl
c0VxdWl2YWxlbnRseSk6CisgICAgICAgIChKU0M6OkRGRzo6Q29udHJvbEVxdWl2YWxlbmNlQW5h
bHlzaXM6OmFyZUVxdWl2YWxlbnQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpk
dW1wQmxvY2tIZWFkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppbnZhbGlkYXRlQ0ZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6aGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmVuc3VyZURvbWluYXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjplbnN1cmVQcmVQb3N0TnVtYmVyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
ZW5zdXJlTmF0dXJhbExvb3BzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZW5zdXJlQmFj
a3dhcmRzQ0ZHKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZW5zdXJlQmFja3dhcmRzRG9t
aW5hdG9ycyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmVuc3VyZUNvbnRyb2xFcXVpdmFs
ZW5jZUFuYWx5c2lzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZUZvcik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6Omhhc0RlYnVnZ2VyRW5hYmxlZCk6CisgICAgICAgICogZGZnL0RGR0lu
UGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0
U3RhdGU6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFj
dFN0YXRlOjpjcmVhdGVWYWx1ZUZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VB
YnN0cmFjdFN0YXRlOjpmb3JOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTElDTVBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpMSUNNUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6
TElDTVBoYXNlOjphdHRlbXB0SG9pc3QpOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjptYXlFeGl0KToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5o
OgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR05vZGVPcmlnaW4u
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVPcmlnaW46OmR1bXApOgorICAgICAgICAqIGRm
Zy9ERkdOb2RlT3JpZ2luLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZU9yaWdpbjo6dGFrZVZh
bGlkRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZU9yaWdpbjo6d2l0aFdhc0hvaXN0ZWQp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVPcmlnaW46OmZvckluc2VydGluZ0FmdGVyKToKKyAg
ICAgICAgKiBkZmcvREZHTnVsbEFic3RyYWN0U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6TnVsbEFic3RyYWN0U3RhdGU6Ok51bGxBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOdWxsQWJzdHJhY3RTdGF0ZTo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6
OkRGRzo6TnVsbEFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JF
eGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAg
KiBkZmcvREZHT1NSRXhpdEJhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNl
Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFeGl0QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpPU1JFeGl0
QmFzZSk6CisgICAgICAgICogZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6CisgICAgICAgICog
ZnRsL0ZUTE9TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9y
OjpwcmVwYXJlT1NSRXhpdEhhbmRsZSk6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6T1NS
RXhpdCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKwogMjAxNi0wNS0xOSAgQ3NhYmEg
T3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtBUk1dIFJlbW92ZSBy
ZWRlZmluZWQgbWFjcm8gYWZ0ZXIgcjIwMDYwNgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIwMTE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xOTk4
LDYgKzE5OTgsMTAgQEAKIAkJREM2MDVCNjAxQ0UyNkVBNzAwNTkzNzE4IC8qIFByb2ZpbGVyVUlE
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzYwNUI1
QzFDRTI2RTk4MDA1OTM3MTggLyogUHJvZmlsZXJVSUQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEQzc5OTc4MzFDREU5RkEwMDA0RDRBMDkgLyog
VGFnUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gREM3OTk3ODIxQ0RFOUY5RTAwNEQ0QTA5IC8qIFRhZ1JlZ2lzdGVyc01vZGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEQzc5OTc4
NDFDREU5RkEyMDA0RDRBMDkgLyogVGFnUmVnaXN0ZXJzTW9kZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzc5OTc4MTFDREU5RjlFMDA0RDRBMDkg
LyogVGFnUmVnaXN0ZXJzTW9kZS5jcHAgKi87IH07CisJCURDRUUyMjA5MUNFQjk4OTUwMDBDMjM5
NiAvKiBERkdCYWNrd2FyZHNDRkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IERDRUUyMjA2MUNFQjk4OTAwMDBDMjM5NiAvKiBERkdCYWNrd2FyZHNDRkcu
aCAqLzsgfTsKKwkJRENFRTIyMEExQ0VCOTg5NTAwMEMyMzk2IC8qIERGR0JhY2t3YXJkc0RvbWlu
YXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERD
RUUyMjA3MUNFQjk4OTAwMDBDMjM5NiAvKiBERkdCYWNrd2FyZHNEb21pbmF0b3JzLmggKi87IH07
CisJCURDRUUyMjBCMUNFQjk4OTUwMDBDMjM5NiAvKiBERkdDb250cm9sRXF1aXZhbGVuY2VBbmFs
eXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRENF
RTIyMDgxQ0VCOTg5MDAwMEMyMzk2IC8qIERGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgg
Ki87IH07CisJCURDRUUyMjBEMUNFQkFGNzUwMDBDMjM5NiAvKiBERkdOdWxsQWJzdHJhY3RTdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRENFRTIy
MEMxQ0VCQUY3MzAwMEMyMzk2IC8qIERGR051bGxBYnN0cmFjdFN0YXRlLmggKi87IH07CiAJCURD
RjNENTY5MUNEMjk0NkQwMDNENUM2NSAvKiBMYXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRENGM0Q1NjQxQ0QyOTQ2ODAw
M0Q1QzY1IC8qIExhenlDbGFzc1N0cnVjdHVyZS5jcHAgKi87IH07CiAJCURDRjNENTZBMUNEMjk0
NzAwMDNENUM2NSAvKiBMYXp5Q2xhc3NTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDRjNENTY1MUNEMjk0NjgwMDNENUM2NSAvKiBMYXp5
Q2xhc3NTdHJ1Y3R1cmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlEQ0YzRDU2QjFDRDI5NDcyMDAzRDVDNjUgLyogTGF6eUNsYXNzU3RydWN0dXJl
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RENGM0Q1NjYxQ0QyOTQ2ODAwM0Q1QzY1IC8qIExhenlDbGFzc1N0cnVjdHVyZUlubGluZXMuaCAq
LzsgfTsKQEAgLTQyMTYsNiArNDIyMCwxMCBAQAogCQlEQzYwNUI1QzFDRTI2RTk4MDA1OTM3MTgg
LyogUHJvZmlsZXJVSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmls
ZXJVSUQuaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyVUlELmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCURDNzk5NzgxMUNERTlGOUUwMDRENEEwOSAvKiBUYWdSZWdpc3RlcnNNb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhZ1JlZ2lzdGVyc01v
ZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzc5OTc4MjFDREU5RjlFMDA0
RDRBMDkgLyogVGFnUmVnaXN0ZXJzTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUYWdSZWdpc3RlcnNNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURD
RUUyMjA2MUNFQjk4OTAwMDBDMjM5NiAvKiBERkdCYWNrd2FyZHNDRkcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFja3dhcmRzQ0ZHLmg7IHBhdGggPSBkZmcvREZHQmFj
a3dhcmRzQ0ZHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURDRUUyMjA3MUNFQjk4
OTAwMDBDMjM5NiAvKiBERkdCYWNrd2FyZHNEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0JhY2t3YXJkc0RvbWluYXRvcnMuaDsgcGF0aCA9IGRmZy9ERkdC
YWNrd2FyZHNEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURDRUUy
MjA4MUNFQjk4OTAwMDBDMjM5NiAvKiBERkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb250cm9sRXF1aXZhbGVuY2VBbmFs
eXNpcy5oOyBwYXRoID0gZGZnL0RGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURDRUUyMjBDMUNFQkFGNzMwMDBDMjM5NiAvKiBERkdO
dWxsQWJzdHJhY3RTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdO
dWxsQWJzdHJhY3RTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR051bGxBYnN0cmFjdFN0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURDRjNENTY0MUNEMjk0NjgwMDNENUM2NSAvKiBM
YXp5Q2xhc3NTdHJ1Y3R1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTGF6eUNsYXNzU3RydWN0dXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RENGM0Q1NjUxQ0QyOTQ2ODAwM0Q1QzY1IC8qIExhenlDbGFzc1N0cnVjdHVyZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXp5Q2xhc3NTdHJ1Y3R1cmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRENGM0Q1NjYxQ0QyOTQ2ODAwM0Q1QzY1IC8qIExhenlDbGFz
c1N0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF6
eUNsYXNzU3RydWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjEzMSw2ICs2MTM5LDggQEAKIAkJCQkwRjY2NkVDMzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZh
aWxhYmlsaXR5LmggKi8sCiAJCQkJMEYyQjlDRDYxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWls
YWJpbGl0eU1hcC5jcHAgKi8sCiAJCQkJMEYyQjlDRDcxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2
YWlsYWJpbGl0eU1hcC5oICovLAorCQkJCURDRUUyMjA2MUNFQjk4OTAwMDBDMjM5NiAvKiBERkdC
YWNrd2FyZHNDRkcuaCAqLywKKwkJCQlEQ0VFMjIwNzFDRUI5ODkwMDAwQzIzOTYgLyogREZHQmFj
a3dhcmRzRG9taW5hdG9ycy5oICovLAogCQkJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBE
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjcxNENBMjE2RUE5MkVE
MDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovLAogCQkJCUE3RDg5
Q0UzMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLywKQEAgLTYxNzcsNiAr
NjE4Nyw3IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0
YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8sCiAJCQkJMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8q
IERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oICovLAorCQkJCURDRUUyMjA4MUNFQjk4OTAwMDBD
MjM5NiAvKiBERkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oICovLAogCQkJCTBGQkUwRjZC
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCAqLywKIAkJCQkw
RkJFMEY2QzE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oICovLAog
CQkJCUE3RDg5Q0U2MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlLmNwcCAqLywKQEAgLTYyODgsNiArNjI5OSw3IEBACiAJCQkJMEY1RDA4NUMxQjhDRjk5RDAw
MTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovLAogCQkJCTBGMzAwQjc3MThBQjA1MTEwMEE2
RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJMEZBNTgxQjkxNTBFOTUyQTAwQjlBMkQ5
IC8qIERGR05vZGVUeXBlLmggKi8sCisJCQkJRENFRTIyMEMxQ0VCQUY3MzAwMEMyMzk2IC8qIERG
R051bGxBYnN0cmFjdFN0YXRlLmggKi8sCiAJCQkJMEYyQjlDREExOUQwQkE3RDAwQjFEMUI1IC8q
IERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovLAogCQkJCTBGMkI5Q0RCMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmggKi8sCiAJ
CQkJMEYyQjlDREMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEuY3BwICovLApAQCAtNjk1NSw2ICs2OTY3LDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQkwRkZBNTQ5ODE2Qjg4MzUzMDBCM0E5ODIgLyog
QTY0RE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRENFRTIyMEExQ0VCOTg5NTAwMEMyMzk2
IC8qIERGR0JhY2t3YXJkc0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUZFNTFD
MTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTMwRjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4g
SGVhZGVycyAqLywKQEAgLTY5OTksNiArNzAxMiw3IEBACiAJCQkJQkMxOEMzRTUwRTE2RjVDRDAw
QjM0NDYwIC8qIEFQSUNhc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFM0EwNkJFMUMxMTA0MTIw
MDM5MEZERCAvKiBKSVRMZWZ0U2hpZnRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
RjYwNTE0MEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlE
Q0VFMjIwOTFDRUI5ODk1MDAwQzIzOTYgLyogREZHQmFja3dhcmRzQ0ZHLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkUwNTAxNDFBQTkwOTExMDBEMzNCMzMgLyogQXJndW1lbnRzTW9kZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY2QjFDQjkxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUEwMDlDMTE4MzFBMjZFMDBDRjg3MTEgLyogQVJNNjRB
c3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzkxMiw2ICs3OTI2LDcgQEAKIAkJCQkwRkY3
MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVu
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjM4NzkwMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJP
cHRpbWl6ZUJsb2NrT3JkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCURDRUUyMjBEMUNFQkFGNzUw
MDBDMjM5NiAvKiBERkdOdWxsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
NzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9u
S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1
cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDU2LDYgKzgwNzEsNyBAQAogCQkJCTE0
MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI2ODRENDM4MUMwMDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY1NTk4OTgxN0M4NkM1ODAwQTFFNTQzIC8qIFRvTmF0aXZlRnJvbVZhbHVl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlEQ0VFMjIwQjFDRUI5ODk1MDAwQzIzOTYgLyogREZHQ29u
dHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REU5MTk4
MzJEQUMwMDdENEIxOSAvKiBUb1RoaXNTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTUy
QUJEMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY3MDYxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtp
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0
S2luZC5jcHAJKHJldmlzaW9uIDIwMTE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGl0S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Niw2ICs3Niw4IEBAIGNvbnN0
IGNoYXIqIGV4aXRLaW5kVG9TdHJpbmcoRXhpdEtpbmQga2kKICAgICAgICAgcmV0dXJuICJWYXJh
cmdzT3ZlcmZsb3ciOwogICAgIGNhc2UgVERaRmFpbHVyZToKICAgICAgICAgcmV0dXJuICJURFpG
YWlsdXJlIjsKKyAgICBjYXNlIEhvaXN0aW5nRmFpbGVkOgorICAgICAgICByZXR1cm4gIkhvaXN0
aW5nRmFpbGVkIjsKICAgICBjYXNlIFVuY291bnRhYmxlOgogICAgICAgICByZXR1cm4gIlVuY291
bnRhYmxlIjsKICAgICBjYXNlIFVuY291bnRhYmxlSW52YWxpZGF0aW9uOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgJKHJldmlzaW9uIDIwMTE2NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTAsNiArNTAsNyBAQCBlbnVtIEV4aXRLaW5kIDogdWludDhfdCB7CiAgICAgTm90U3Ry
aW5nT2JqZWN0LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBzaG91bGRuJ3QgaGF2ZSBhdHRlbXB0
ZWQgdG8gb3B0aW1pemUgc3RyaW5nIG9iamVjdCBhY2Nlc3MuCiAgICAgVmFyYXJnc092ZXJmbG93
LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhIHZhcmFyZ3MgY2FsbCBwYXNzZWQgbW9yZSBhcmd1bWVu
dHMgdGhhbiB3ZSBleHBlY3RlZC4KICAgICBURFpGYWlsdXJlLCAvLyBXZSBleGl0ZWQgYmVjYXVz
ZSB3ZSB3ZXJlIGluIHRoZSBURFogYW5kIGFjY2Vzc2VkIHRoZSB2YXJpYWJsZS4KKyAgICBIb2lz
dGluZ0ZhaWxlZCwgLy8gU29tZXRoaW5nIHRoYXQgd2FzIGhvaXN0ZWQgZXhpdGVkLiBTbywgYXNz
dW1lIHRoYXQgaG9pc3RpbmcgaXMgYSBiYWQgaWRlYS4KICAgICBVbmNvdW50YWJsZSwgLy8gV2Ug
ZXhpdGVkIGZvciBub25lIG9mIHRoZSBhYm92ZSByZWFzb25zLCBhbmQgd2Ugc2hvdWxkIG5vdCBj
b3VudCBpdC4gTW9zdCB1c2VzIG9mIHRoaXMgc2hvdWxkIGJlIHZpZXdlZCBhcyBhIEZJWE1FLgog
ICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB0aGUgY29k
ZSBibG9jayB3YXMgaW52YWxpZGF0ZWQ7IHRoaXMgbWVhbnMgdGhhdCB3ZSd2ZSBhbHJlYWR5IGNv
dW50ZWQgdGhlIHJlYXNvbnMgd2h5IHRoZSBjb2RlIGJsb2NrIHdhcyBpbnZhbGlkYXRlZC4KICAg
ICBXYXRjaGRvZ1RpbWVyRmlyZWQsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIG5lZWQgdG8gc2Vy
dmljZSB0aGUgd2F0Y2hkb2cgdGltZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjAxMTY3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQwLDYgKzQwLDggQEAgcHVibGljOgogICAgIAogICAgIH5BdFRhaWxBYnN0cmFj
dFN0YXRlKCk7CiAgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKyAgICAKICAgICB2b2lkIGluaXRpYWxpemVUbyhCYXNpY0Jsb2NrKiBibG9j
aykKICAgICB7CiAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFja3dhcmRzQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNDRkcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzQ0ZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR0JhY2t3YXJkc0NGR19oCisjZGVmaW5lIERGR0JhY2t3YXJkc0NGR19oCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NGRy5oIgorI2luY2x1ZGUgPHd0
Zi9CYWNrd2FyZHNHcmFwaC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEJhY2t3YXJkc0NGRyA6IHB1YmxpYyBCYWNrd2FyZHNHcmFwaDxDRkc+IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShCYWNrd2FyZHNDRkcpOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIEJhY2t3YXJkc0NGRyhHcmFwaCYgZ3JhcGgpCisgICAgICAg
IDogQmFja3dhcmRzR3JhcGg8Q0ZHPigqZ3JhcGgubV9jZmcpCisgICAgeworICAgIH0KK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHQmFja3dhcmRzQ0ZHX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYWNrd2FyZHNEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNEb21pbmF0b3JzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc0RvbWluYXRvcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQmFja3dhcmRzRG9taW5hdG9yc19oCisjZGVm
aW5lIERGR0JhY2t3YXJkc0RvbWluYXRvcnNfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJERkdCYWNrd2FyZHNDRkcuaCIKKyNpbmNsdWRlIDx3dGYvRG9taW5hdG9ycy5oPgor
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQmFja3dhcmRzRG9t
aW5hdG9ycyA6IHB1YmxpYyBXVEY6OkRvbWluYXRvcnM8QmFja3dhcmRzQ0ZHPiB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQmFja3dhcmRzRG9taW5hdG9ycyk7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQmFja3dhcmRzRG9taW5hdG9ycyhHcmFwaCYgZ3Jh
cGgpCisgICAgICAgIDogV1RGOjpEb21pbmF0b3JzPEJhY2t3YXJkc0NGRz4oZ3JhcGguZW5zdXJl
QmFja3dhcmRzQ0ZHKCkpCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRG9taW5h
dG9yc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9u
IDIwMTE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1NSwxNSArMjU1LDYgQEAgZW51bSBjbGFzcyBQbGFuU3RhZ2UgewogICAg
IEFmdGVyRml4dXAKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1ib29s
IGNoZWNrQW5kU2V0KFQmIGxlZnQsIFUgcmlnaHQpCi17Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBsZWZ0ID0gcmlnaHQ7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KIC8vIElmIHBvc3NpYmxlLCB0aGlzIHdpbGwgYWNxdWlyZSBhIGxvY2sgdG8gbWFr
ZSBzdXJlIHRoYXQgaWYgbXVsdGlwbGUgdGhyZWFkcwogLy8gc3RhcnQgY3Jhc2hpbmcgYXQgdGhl
IHNhbWUgdGltZSwgeW91IGdldCBjb2hlcmVudCBkdW1wIG91dHB1dC4gVXNlIHRoaXMgb25seQog
Ly8gd2hlbiB5b3UncmUgZm9yY2luZyBhIGNyYXNoIHdpdGggZGlhZ25vc3RpY3MuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb250cm9sRXF1aXZh
bGVuY2VBbmFseXNpcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpc19oCisjZGVmaW5lIERGR0NvbnRy
b2xFcXVpdmFsZW5jZUFuYWx5c2lzX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHRG9taW5hdG9ycy5oIgorI2luY2x1ZGUgIkRGR0JhY2t3YXJkc0RvbWluYXRvcnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBDb250cm9sRXF1aXZh
bGVuY2VBbmFseXNpcyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29udHJvbEVxdWl2YWxl
bmNlQW5hbHlzaXMpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBtX2Rv
bWluYXRvcnMoZ3JhcGguZW5zdXJlRG9taW5hdG9ycygpKQorICAgICAgICAsIG1fYmFja3dhcmRz
RG9taW5hdG9ycyhncmFwaC5lbnN1cmVCYWNrd2FyZHNEb21pbmF0b3JzKCkpCisgICAgeworICAg
IH0KKyAgICAKKyAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBpZmY6CisgICAgLy8KKyAgICAvLyAt
IElmIGIgZXhlY3V0ZXMgdGhlbiBhIG11c3QgaGF2ZSBleGVjdXRlZCBiZWZvcmUgaXQgKGEgZG9t
aW5hdGVzIGIpLgorICAgIC8vIC0gSWYgYSBleGVjdXRlcyB0aGVuIGIgd2lsbCBleGVjdXRlIGFm
dGVyIGl0IChiIGJhY2t3YXJkcy1kb21pbmF0ZXMgYSkuCisgICAgLy8KKyAgICAvLyBOb3RlIHRo
YXQgbGlrZSBEb21pbmF0b3JzIGFuZCBCYWNrd2FyZHNEb21pbmF0b3JzLCB0aGlzIGFuYWx5c2lz
IGlnbm9yZXMgT1NSOgorICAgIC8vCisgICAgLy8gLSBUaGlzIG1heSByZXR1cm4gdHJ1ZSBldmVu
IGlmIHdlIE9TUiBlbnRlciBpbiBiZXRlZW4gYSBhbmQgYi4gT1NSIGVudHJ5IHdvdWxkIG1lYW4g
dGhhdCBiCisgICAgLy8gICBjb3VsZCBleGVjdXRlIGV2ZW4gaWYgYSBoYWQgbm90IGV4ZWN1dGVk
LiBUaGlzIGlzIGltcG9zc2libGUgaW4gREZHIFNTQSBidXQgaXQncyBwb3NzaWJsZQorICAgIC8v
ICAgaW4gREZHIENQUy4KKyAgICAvLyAtIFRoaXMgbWF5IHJldHVybiB0cnVlIGV2ZW4gaWYgd2Ug
T1NSIGV4aXQgaW4gYmV0d2VlbiBhIGFuZCBiLiBPU1IgZXhpdCB3b3VsZCBtZWFuIHRoYXQgYQor
ICAgIC8vICAgY291bGQgZXhlY3V0ZSBldmVuIHRob3VnaCBiIHdpbGwgbm90IGV4ZWN1dGUuIFRo
aXMgaXMgcG9zc2libGUgaW4gYWxsIGZvcm1zIG9mIERGRyBJUi4KKyAgICAvLworICAgIC8vIElu
IERGRyBTU0EgeW91IG9ubHkgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgZGVmaW5pdGlvbiBiZWlu
ZyB3ZWFrZWQgYnkgZXhpdHMuIFRoaXMgaXMgdXN1YWxseQorICAgIC8vIE9LLCBzaW5jZSB3ZSB1
c2UgdGhpcyBhbmFseXNpcyB0byBkZXRlcm1pbmUgdGhlIGNvc3Qgb2YgbW92aW5nIGV4aXRzIGZy
b20gb25lIGJsb2NrIHRvCisgICAgLy8gYW5vdGhlci4gSWYgd2UgbW92ZSBhbiBleGl0IGZyb20g
YiB0byBhIGFuZCBhIGVxdWl2YWxlbnRseSBkb21pbmF0ZXMgYiB0aGVuIGF0IHdvcnN0IHdlIGhh
dmUKKyAgICAvLyBtYWRlIHRoZSBleGl0IGhhcHBlbiBzb29uZXIuIElmIHdlIG1vdmUgYW4gZXhp
dCBmcm9tIGIgdG8gYSBhbmQgYSBkb21pbmF0ZXMgYiBidXQgbm90CisgICAgLy8gZXF1aXZhbGVu
dGx5IHRoZW4gd2UndmUgZG9uZSBzb21ldGhpbmcgbXVjaCB3b3JzZTogdGhlIHByb2dyYW0gbWF5
IG5vdyBleGl0IGV2ZW4gaWYgaXQgd291bGQKKyAgICAvLyBub3QgaGF2ZSBldmVyIGV4aXRlZCBi
ZWZvcmUuCisgICAgYm9vbCBkb21pbmF0ZXNFcXVpdmFsZW50bHkoQmFzaWNCbG9jayogYSwgQmFz
aWNCbG9jayogYikKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RvbWluYXRvcnMuZG9taW5hdGVz
KGEsIGIpCisgICAgICAgICAgICAmJiBtX2JhY2t3YXJkc0RvbWluYXRvcnMuZG9taW5hdGVzKGIs
IGEpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBpZmYgdGhlIGV4ZWN1
dGlvbiBvZiBhIGltcGxpZXMgdGhhdCBiIGFsc28gZXhlY3V0ZXMgYW5kIHZpY2UtdmVyc2EuCisg
ICAgYm9vbCBhcmVFcXVpdmFsZW50KEJhc2ljQmxvY2sqIGEsIEJhc2ljQmxvY2sqIGIpCisgICAg
eworICAgICAgICByZXR1cm4gZG9taW5hdGVzRXF1aXZhbGVudGx5KGEsIGIpCisgICAgICAgICAg
ICB8fCBkb21pbmF0ZXNFcXVpdmFsZW50bHkoYiwgYSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IERvbWluYXRvcnMmIG1fZG9taW5hdG9yczsKKyAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBtX2Jh
Y2t3YXJkc0RvbWluYXRvcnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NvbnRyb2xFcXVpdmFsZW5j
ZUFuYWx5c2lzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHJldmlzaW9uIDIwMTE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTMgQEAKICNpbmNsdWRlICJCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKKyNpbmNsdWRlICJERkdCYWNrd2FyZHNEb21p
bmF0b3JzLmgiCisjaW5jbHVkZSAiREZHQmFja3dhcmRzQ0ZHLmgiCiAjaW5jbHVkZSAiREZHQmxv
Y2tXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkRGR0NGRy5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJT
ZXQuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgotI2luY2x1ZGUgIkRGR0NG
Ry5oIgorI2luY2x1ZGUgIkRGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgiCiAjaW5jbHVk
ZSAiREZHRG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJE
RkdNYXlFeGl0LmgiCkBAIC0zNzUsNiArMzc4LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBjb25zdAogICAgIH0KICAgICBpZiAoIW5vZGUtPm9yaWdpbi5leGl0T0spCiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgIkV4aXRJbnZhbGlkIik7CisgICAgaWYgKG5vZGUtPm9y
aWdpbi53YXNIb2lzdGVkKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXYXNIb2lzdGVkIik7
CiAgICAgb3V0LnByaW50KCIpIik7CiAKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NE
YXRhKCp0aGlzKSAmJiBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKQEAgLTQxOSw2
ICs0MjQsMTggQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAg
ICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmFuY2UgRnJvbnRpZXI6ICIsIG1fZG9taW5h
dG9ycy0+ZG9taW5hbmNlRnJvbnRpZXJPZihibG9jayksICJcbiIpOwogICAgICAgICBvdXQucHJp
bnQocHJlZml4LCAiICBJdGVyYXRlZCBEb21pbmFuY2UgRnJvbnRpZXI6ICIsIG1fZG9taW5hdG9y
cy0+aXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKEJsb2NrTGlzdCgxLCBibG9jaykpLCAiXG4i
KTsKICAgICB9CisgICAgaWYgKG1fYmFja3dhcmRzRG9taW5hdG9ycyAmJiB0ZXJtaW5hbHNBcmVW
YWxpZCgpKSB7CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIEJhY2t3YXJkcyBkb21pbmF0
ZXMgYnk6ICIsIG1fYmFja3dhcmRzRG9taW5hdG9ycy0+ZG9taW5hdG9yc09mKGJsb2NrKSwgIlxu
Iik7CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIEJhY2t3YXJkcyBkb21pbmF0ZXM6ICIs
IG1fYmFja3dhcmRzRG9taW5hdG9ycy0+YmxvY2tzRG9taW5hdGVkQnkoYmxvY2spLCAiXG4iKTsK
KyAgICB9CisgICAgaWYgKG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgJiYgdGVybWluYWxz
QXJlVmFsaWQoKSkgeworICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBDb250cm9sIGVxdWl2
YWxlbnQgdG86Iik7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogb3RoZXJCbG9jayA6IGJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChtX2NvbnRyb2xFcXVpdmFsZW5j
ZUFuYWx5c2lzLT5hcmVFcXVpdmFsZW50KGJsb2NrLCBvdGhlckJsb2NrKSkKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoIiAiLCAqb3RoZXJCbG9jayk7CisgICAgICAgIH0KKyAgICAgICAgb3V0
LnByaW50KCJcbiIpOworICAgIH0KICAgICBpZiAobV9wcmVQb3N0TnVtYmVyaW5nKQogICAgICAg
ICBvdXQucHJpbnQocHJlZml4LCAiICBQcmUvUG9zdCBOdW1iZXJpbmc6ICIsIG1fcHJlUG9zdE51
bWJlcmluZy0+cHJlTnVtYmVyKGJsb2NrKSwgIi8iLCBtX3ByZVBvc3ROdW1iZXJpbmctPnBvc3RO
dW1iZXIoYmxvY2spLCAiXG4iKTsKICAgICBpZiAobV9uYXR1cmFsTG9vcHMpIHsKQEAgLTc1Myw2
ICs3NzAsOSBAQCB2b2lkIEdyYXBoOjppbnZhbGlkYXRlQ0ZHKCkKICAgICBtX2RvbWluYXRvcnMg
PSBudWxscHRyOwogICAgIG1fbmF0dXJhbExvb3BzID0gbnVsbHB0cjsKICAgICBtX3ByZVBvc3RO
dW1iZXJpbmcgPSBudWxscHRyOworICAgIG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgPSBu
dWxscHRyOworICAgIG1fYmFja3dhcmRzRG9taW5hdG9ycyA9IG51bGxwdHI7CisgICAgbV9iYWNr
d2FyZHNDRkcgPSBudWxscHRyOwogfQogCiB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwo
QmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSwgTm9kZSogbmV3R2V0TG9jYWwpCkBAIC0xNDI2
LDIzICsxNDQ2LDQ3IEBAIHZvaWQgR3JhcGg6OmhhbmRsZUFzc2VydGlvbkZhaWx1cmUoCiAgICAg
Y3Jhc2goKnRoaXMsIHRvQ1N0cmluZygiV2hpbGUgaGFuZGxpbmcgYmxvY2sgIiwgcG9pbnRlckR1
bXAoYmxvY2spLCAiXG5cbiIpLCBmaWxlLCBsaW5lLCBmdW5jdGlvbiwgYXNzZXJ0aW9uKTsKIH0K
IAotdm9pZCBHcmFwaDo6ZW5zdXJlRG9taW5hdG9ycygpCitEb21pbmF0b3JzJiBHcmFwaDo6ZW5z
dXJlRG9taW5hdG9ycygpCiB7CiAgICAgaWYgKCFtX2RvbWluYXRvcnMpCiAgICAgICAgIG1fZG9t
aW5hdG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8RG9taW5hdG9ycz4oKnRoaXMpOworICAgIHJldHVy
biAqbV9kb21pbmF0b3JzOwogfQogCi12b2lkIEdyYXBoOjplbnN1cmVQcmVQb3N0TnVtYmVyaW5n
KCkKK1ByZVBvc3ROdW1iZXJpbmcmIEdyYXBoOjplbnN1cmVQcmVQb3N0TnVtYmVyaW5nKCkKIHsK
ICAgICBpZiAoIW1fcHJlUG9zdE51bWJlcmluZykKICAgICAgICAgbV9wcmVQb3N0TnVtYmVyaW5n
ID0gc3RkOjptYWtlX3VuaXF1ZTxQcmVQb3N0TnVtYmVyaW5nPigqdGhpcyk7CisgICAgcmV0dXJu
ICptX3ByZVBvc3ROdW1iZXJpbmc7CiB9CiAKLXZvaWQgR3JhcGg6OmVuc3VyZU5hdHVyYWxMb29w
cygpCitOYXR1cmFsTG9vcHMmIEdyYXBoOjplbnN1cmVOYXR1cmFsTG9vcHMoKQogewogICAgIGVu
c3VyZURvbWluYXRvcnMoKTsKICAgICBpZiAoIW1fbmF0dXJhbExvb3BzKQogICAgICAgICBtX25h
dHVyYWxMb29wcyA9IHN0ZDo6bWFrZV91bmlxdWU8TmF0dXJhbExvb3BzPigqdGhpcyk7CisgICAg
cmV0dXJuICptX25hdHVyYWxMb29wczsKK30KKworQmFja3dhcmRzQ0ZHJiBHcmFwaDo6ZW5zdXJl
QmFja3dhcmRzQ0ZHKCkKK3sKKyAgICBpZiAoIW1fYmFja3dhcmRzQ0ZHKQorICAgICAgICBtX2Jh
Y2t3YXJkc0NGRyA9IHN0ZDo6bWFrZV91bmlxdWU8QmFja3dhcmRzQ0ZHPigqdGhpcyk7CisgICAg
cmV0dXJuICptX2JhY2t3YXJkc0NGRzsKK30KKworQmFja3dhcmRzRG9taW5hdG9ycyYgR3JhcGg6
OmVuc3VyZUJhY2t3YXJkc0RvbWluYXRvcnMoKQoreworICAgIGlmICghbV9iYWNrd2FyZHNEb21p
bmF0b3JzKQorICAgICAgICBtX2JhY2t3YXJkc0RvbWluYXRvcnMgPSBzdGQ6Om1ha2VfdW5pcXVl
PEJhY2t3YXJkc0RvbWluYXRvcnM+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fYmFja3dhcmRzRG9t
aW5hdG9yczsKK30KKworQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMmIEdyYXBoOjplbnN1cmVD
b250cm9sRXF1aXZhbGVuY2VBbmFseXNpcygpCit7CisgICAgaWYgKCFtX2NvbnRyb2xFcXVpdmFs
ZW5jZUFuYWx5c2lzKQorICAgICAgICBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzID0gc3Rk
OjptYWtlX3VuaXF1ZTxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4oKnRoaXMpOworICAgIHJl
dHVybiAqbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKIH0KIAogTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZSBHcmFwaDo6bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihOb2Rl
KiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MjAxMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1NiwxMCBAQCBjbGFzcyBFeGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBE
RkcgewogCitjbGFzcyBCYWNrd2FyZHNDRkc7CitjbGFzcyBCYWNrd2FyZHNEb21pbmF0b3JzOwog
Y2xhc3MgQ0ZHOworY2xhc3MgQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM7CiBjbGFzcyBEb21p
bmF0b3JzOwogY2xhc3MgTmF0dXJhbExvb3BzOwogY2xhc3MgUHJlUG9zdE51bWJlcmluZzsKQEAg
LTgwMCw5ICs4MDMsMTIgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNEZWJ1Z2dlckVuYWJsZWQo
KSBjb25zdCB7IHJldHVybiBtX2hhc0RlYnVnZ2VyRW5hYmxlZDsgfQogCi0gICAgdm9pZCBlbnN1
cmVEb21pbmF0b3JzKCk7Ci0gICAgdm9pZCBlbnN1cmVQcmVQb3N0TnVtYmVyaW5nKCk7Ci0gICAg
dm9pZCBlbnN1cmVOYXR1cmFsTG9vcHMoKTsKKyAgICBEb21pbmF0b3JzJiBlbnN1cmVEb21pbmF0
b3JzKCk7CisgICAgUHJlUG9zdE51bWJlcmluZyYgZW5zdXJlUHJlUG9zdE51bWJlcmluZygpOwor
ICAgIE5hdHVyYWxMb29wcyYgZW5zdXJlTmF0dXJhbExvb3BzKCk7CisgICAgQmFja3dhcmRzQ0ZH
JiBlbnN1cmVCYWNrd2FyZHNDRkcoKTsKKyAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBlbnN1cmVC
YWNrd2FyZHNEb21pbmF0b3JzKCk7CisgICAgQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMmIGVu
c3VyZUNvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKCk7CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9u
IG9ubHkgbWFrZXMgc2Vuc2UgdG8gY2FsbCBhZnRlciBieXRlY29kZSBwYXJzaW5nCiAgICAgLy8g
YmVjYXVzZSBpdCBxdWVyaWVzIHRoZSBtX2hhc0V4Y2VwdGlvbkhhbmRsZXJzIGJvb2xlYW4gd2hv
c2UgdmFsdWUKQEAgLTg3OSw2ICs4ODUsOSBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFByZVBvc3ROdW1iZXJpbmc+IG1fcHJlUG9zdE51bWJlcmluZzsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8TmF0dXJhbExvb3BzPiBtX25hdHVyYWxMb29wczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0ZH
PiBtX2NmZzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3YXJkc0NG
RzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNrd2FyZHNE
b21pbmF0b3JzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNp
cz4gbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKICAgICB1bnNpZ25lZCBtX2xvY2FsVmFy
czsKICAgICB1bnNpZ25lZCBtX25leHRNYWNoaW5lTG9jYWw7CiAgICAgdW5zaWduZWQgbV9wYXJh
bWV0ZXJTbG90czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIwMTE2NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDIsNiArNDIsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgfkluUGxhY2VBYnN0cmFjdFN0YXRlKCk7
CiAgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKyAgICAKICAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlKikgeyB9CiAgICAgCiAg
ICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNpb24gMjAxMTY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzMsOSArMzMsMTEgQEAKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5j
bHVkZSAiREZHQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaCIKICNpbmNsdWRlICJERkdFZGdl
RG9taW5hdGVzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRp
b25TZXQuaCIKKyNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiREZHTmF0dXJhbExv
b3BzLmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJERkdTYWZlVG9FeGVjdXRl
LmgiCkBAIC03NCw2ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgu
ZW5zdXJlRG9taW5hdG9ycygpOwogICAgICAgICBtX2dyYXBoLmVuc3VyZU5hdHVyYWxMb29wcygp
OworICAgICAgICBtX2dyYXBoLmVuc3VyZUNvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKCk7CiAK
ICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9y
ZSBMSUNNOlxuIik7CkBAIC0yNjAsNDMgKzI2Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHdl
IGNvdWxkIHN0aWxsIGhvaXN0IGp1c3QgdGhlIGNoZWNrcy4KICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDUyNQogICAgICAgICAKLSAgICAgICAg
Ly8gRklYTUU6IElmIGEgbm9kZSBoYXMgYSB0eXBlIGNoZWNrIC0gZXZlbiBzb21ldGhpbmcgbGlr
ZSBhIENoZWNrU3RydWN0dXJlIC0gdGhlbiB3ZSBzaG91bGQKLSAgICAgICAgLy8gb25seSBob2lz
dCB0aGUgbm9kZSBpZiB3ZSBrbm93IHRoYXQgaXQgd2lsbCBleGVjdXRlIG9uIGV2ZXJ5IGxvb3Ag
aXRlcmF0aW9uIG9yIGlmIHdlIGtub3cKLSAgICAgICAgLy8gdGhhdCB0aGUgdHlwZSBjaGVjayB3
aWxsIGFsd2F5cyBzdWNjZWVkIGF0IHRoZSBsb29wIHByZS1oZWFkZXIgdGhyb3VnaCBzb21lIG90
aGVyIG1lYW5zCi0gICAgICAgIC8vIChsaWtlIGxvb2tpbmcgYXQgcHJlZGljdGlvbiBwcm9wYWdh
dGlvbiByZXN1bHRzKS4gT3RoZXJ3aXNlLCB3ZSBtaWdodCBtYWtlIGEgbWlzdGFrZSBsaWtlCi0g
ICAgICAgIC8vIHRoaXM6Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIHZhciBvID0gLi4uOyAvLyBz
b21ldGltZXMgbnVsbCBhbmQgc29tZXRpbWVzIGFuIG9iamVjdCB3aXRoIHN0cnVjdHVyZSBTMS4K
LSAgICAgICAgLy8gZm9yICguLi4pIHsKLSAgICAgICAgLy8gICAgIGlmIChvKQotICAgICAgICAv
LyAgICAgICAgIC4uLiA9IG8uZjsgLy8gQ2hlY2tTdHJ1Y3R1cmUgYW5kIEdldEJ5T2Zmc2V0LCB3
aGljaCB3ZSB3aWxsIGN1cnJlbnRseSBob2lzdC4KLSAgICAgICAgLy8gfQotICAgICAgICAvLwot
ICAgICAgICAvLyBXaGVuIHdlIGVuY291bnRlciBzdWNoIGNvZGUsIHdlJ2xsIGhvaXN0IHRoZSBD
aGVja1N0cnVjdHVyZSBhbmQgR2V0QnlPZmZzZXQgYW5kIHRoZW4gd2UKLSAgICAgICAgLy8gd2ls
bCBoYXZlIGEgcmVjb21waWxlLiBXZSdsbCB0aGVuIGVuZCB1cCB0aGlua2luZyB0aGF0IHRoZSBn
ZXRfYnlfaWQgbmVlZHMgdG8gYmUKLSAgICAgICAgLy8gcG9seW1vcnBoaWMsIHdoaWNoIGlzIGZh
bHNlLgotICAgICAgICAvLwotICAgICAgICAvLyBXZSBjYW4gY291bnRlciB0aGlzIGJ5IGVpdGhl
ciBoYXZpbmcgYSBjb250cm9sIGZsb3cgZXF1aXZhbGVuY2UgY2hlY2ssIG9yIGJ5IGNvbnN1bHRp
bmcKLSAgICAgICAgLy8gcHJlZGljdGlvbiBwcm9wYWdhdGlvbiB0byBzZWUgaWYgdGhlIGNoZWNr
IHdvdWxkIGFsd2F5cyBzdWNjZWVkLiBQcmVkaWN0aW9uIHByb3BhZ2F0aW9uCi0gICAgICAgIC8v
IHdvdWxkIG5vdCBiZSBlbm91Z2ggZm9yIHRoaW5ncyBsaWtlOgotICAgICAgICAvLwotICAgICAg
ICAvLyB2YXIgcCA9IC4uLjsgLy8gc29tZSBib29sZWFuIHByZWRpY2F0ZQotICAgICAgICAvLyB2
YXIgbyA9IHt9OwotICAgICAgICAvLyBpZiAocCkKLSAgICAgICAgLy8gICAgIG8uZiA9IDQyOwot
ICAgICAgICAvLyBmb3IgKC4uLikgewotICAgICAgICAvLyAgICAgaWYgKHApCi0gICAgICAgIC8v
ICAgICAgICAgLi4uID0gby5mOwotICAgICAgICAvLyB9Ci0gICAgICAgIC8vCi0gICAgICAgIC8v
IFByZWRpY3Rpb24gcHJvcGFnYXRpb24gY2FuJ3QgdGVsbCB1cyBhbnl0aGluZyBhYm91dCB0aGUg
c3RydWN0dXJlLCBhbmQgdGhlIENoZWNrU3RydWN0dXJlCi0gICAgICAgIC8vIHdpbGwgYXBwZWFy
IHRvIGJlIGhvaXN0YWJsZSBiZWNhdXNlIHRoZSBsb29wIGRvZXNuJ3QgY2xvYmJlciBzdHJ1Y3R1
cmVzLiBUaGUgY2VsbCBjaGVjawotICAgICAgICAvLyBpbiB0aGUgQ2hlY2tTdHJ1Y3R1cmUgd2ls
bCBiZSBob2lzdGFibGUgdGhvdWdoLCBzaW5jZSBwcmVkaWN0aW9uIHByb3BhZ2F0aW9uIGNhbiB0
ZWxsIHVzCi0gICAgICAgIC8vIHRoYXQgbyBpcyBhbHdheXMgU3BlY0ZpbmFsT2JqZWN0LiBJbiBj
YXNlcyBsaWtlIHRoaXMsIGNvbnRyb2wgZmxvdyBlcXVpdmFsZW5jZSBpcyB0aGUKLSAgICAgICAg
Ly8gb25seSBlZmZlY3RpdmUgZ3VhcmQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ1MjcKLSAgICAgICAgCiAgICAgICAg
IGlmIChyZWFkc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgZGF0YS53cml0ZXMpKSB7CiAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2coCkBAIC0zMTUsNiAr
MjgxLDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICAgICAgCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luYWxPcmlnaW4gPSBub2RlLT5vcmln
aW47CisKKyAgICAgICAgYm9vbCBhZGRzQmxpbmRTcGVjdWxhdGlvbiA9IG1heUV4aXQobV9ncmFw
aCwgbm9kZSwgbV9zdGF0ZSkKKyAgICAgICAgICAgICYmICFtX2dyYXBoLm1fY29udHJvbEVxdWl2
YWxlbmNlQW5hbHlzaXMtPmRvbWluYXRlc0VxdWl2YWxlbnRseShkYXRhLnByZUhlYWRlciwgZnJv
bUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhZGRzQmxpbmRTcGVjdWxhdGlvbgorICAg
ICAgICAgICAgJiYgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihvcmlnaW5hbE9yaWdpbi5z
ZW1hbnRpYyktPmhhc0V4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUoSG9pc3RpbmdGYWlsZWQpKSkg
eworICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAor
ICAgICAgICAgICAgICAgICAgICAiICAgIE5vdCBob2lzdGluZyAiLCBub2RlLCAiIGJlY2F1c2Ug
aXQgbWF5IGV4aXQgYW5kIHRoZSBwcmUtaGVhZGVyICgiLAorICAgICAgICAgICAgICAgICAgICAq
ZGF0YS5wcmVIZWFkZXIsICIpIGlzIG5vdCBjb250cm9sIGVxdWl2YWxlbnQgdG8gdGhlIG5vZGUn
cyBvcmlnaW5hbCBibG9jayAoIiwKKyAgICAgICAgICAgICAgICAgICAgKmZyb21CbG9jaywgIikg
YW5kIGhvaXN0aW5nIGhhZCBwcmV2aW91c2x5IGZhaWxlZC5cbiIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBp
ZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAiICAg
IEhvaXN0aW5nICIsIG5vZGUsICIgZnJvbSAiLCAqZnJvbUJsb2NrLCAiIHRvICIsICpkYXRhLnBy
ZUhlYWRlciwKQEAgLTMyNiw4ICszMDgsOSBAQCBwcml2YXRlOgogICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NTQ0CiAgICAgICAgIGRhdGEucHJl
SGVhZGVyLT5pbnNlcnRCZWZvcmVUZXJtaW5hbChub2RlKTsKICAgICAgICAgbm9kZS0+b3duZXIg
PSBkYXRhLnByZUhlYWRlcjsKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW5hbE9yaWdpbiA9IG5v
ZGUtPm9yaWdpbjsKLSAgICAgICAgbm9kZS0+b3JpZ2luID0gZGF0YS5wcmVIZWFkZXItPnRlcm1p
bmFsKCktPm9yaWdpbi53aXRoU2VtYW50aWMobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAg
ICAgTm9kZU9yaWdpbiB0ZXJtaW5hbE9yaWdpbiA9IGRhdGEucHJlSGVhZGVyLT50ZXJtaW5hbCgp
LT5vcmlnaW47CisgICAgICAgIG5vZGUtPm9yaWdpbiA9IHRlcm1pbmFsT3JpZ2luLndpdGhTZW1h
bnRpYyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBub2RlLT5vcmlnaW4ud2FzSG9p
c3RlZCB8PSBhZGRzQmxpbmRTcGVjdWxhdGlvbjsKICAgICAgICAgCiAgICAgICAgIC8vIE1vZGlm
eSB0aGUgc3RhdGVzIGF0IHRoZSBlbmQgb2YgdGhlIHByZUhlYWRlciBvZiB0aGUgbG9vcCB3ZSBo
b2lzdGVkIHRvLAogICAgICAgICAvLyBhbmQgYWxsIHByZS1oZWFkZXJzIGluc2lkZSB0aGUgbG9v
cC4gVGhpcyBpc24ndCBhIHN0YWJpbGl0eSBib3R0bGVuZWNrIHJpZ2h0IG5vdwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCShyZXZpc2lvbiAyMDExNjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI4LDYwICsyOCwxOCBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRl
ICJERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNs
dWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHTnVsbEFic3RyYWN0U3RhdGUuaCIKICNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
bmFtZXNwYWNlIHsKIAotY2xhc3MgRWRnZU1heUV4aXQgewotcHVibGljOgotICAgIEVkZ2VNYXlF
eGl0KCkKLSAgICAgICAgOiBtX3Jlc3VsdChmYWxzZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgb3BlcmF0b3IoKShOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IE1heWJlIHRoaXMgc2hvdWxkIGNhbGwgbWF5SGF2ZVR5cGVDaGVjayhlZGdlLnVzZUtpbmQo
KSkgaW5zdGVhZC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0ODU0NQotICAgICAgICBpZiAoZWRnZS53aWxsSGF2ZUNoZWNrKCkpIHsKLSAgICAg
ICAgICAgIG1fcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKLSAgICAgICAgLy8gVGhlc2UgYXJl
IHNoYWR5IGJlY2F1c2Ugbm9kZXMgdGhhdCBoYXZlIHRoZXNlIHVzZSBraW5kcyB3aWxsIHR5cGlj
YWxseSBleGl0IGZvcgotICAgICAgICAvLyB1bnJlbGF0ZWQgcmVhc29ucy4gRm9yIGV4YW1wbGUg
Q29tcGFyZUVxIGRvZXNuJ3QgdXN1YWxseSBleGl0LCBidXQgaWYgaXQgdXNlcyBPYmplY3RVc2UK
LSAgICAgICAgLy8gdGhlbiBpdCB3aWxsLgotICAgICAgICBjYXNlIE9iamVjdFVzZToKLSAgICAg
ICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgotICAgICAgICAgICAgbV9yZXN1bHQgPSB0cnVlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gVGhlc2UgYXJlIHNo
YWR5IGJlY2F1c2UgdGhleSBjaGVjayB0aGUgc3RydWN0dXJlIGV2ZW4gaWYgdGhlIHR5cGUgb2Yg
dGhlIGNoaWxkIG5vZGUKLSAgICAgICAgLy8gcGFzc2VzIHRoZSBTdHJpbmdPYmplY3QgdHlwZSBm
aWx0ZXIuCi0gICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgotICAgICAgICBjYXNlIFN0cmlu
Z09yU3RyaW5nT2JqZWN0VXNlOgotICAgICAgICAgICAgbV9yZXN1bHQgPSB0cnVlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGJvb2wgcmVzdWx0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZXN1bHQ7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgYm9vbCBtX3Jlc3VsdDsK
LX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1FeGl0TW9kZSBtYXlFeGl0KEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFN0YXRlVHlwZT4KK0V4aXRN
b2RlIG1heUV4aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0
ZSkKIHsKICAgICBFeGl0TW9kZSByZXN1bHQgPSBEb2VzTm90RXhpdDsKICAgICAKQEAgLTE1NCwx
NSArMTEyLDY4IEBAIEV4aXRNb2RlIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2QKICAg
ICAgICAgLy8gSWYgaW4gZG91YnQsIHJldHVybiB0cnVlLgogICAgICAgICByZXR1cm4gRXhpdHM7
CiAgICAgfQotCi0gICAgRWRnZU1heUV4aXQgZnVuY3RvcjsKLSAgICBERkdfTk9ERV9ET19UT19D
SElMRFJFTihncmFwaCwgbm9kZSwgZnVuY3Rvcik7Ci0gICAgaWYgKGZ1bmN0b3IucmVzdWx0KCkp
Ci0gICAgICAgIHJlc3VsdCA9IEV4aXRzOwogICAgIAorICAgIGdyYXBoLmRvVG9DaGlsZHJlbigK
KyAgICAgICAgbm9kZSwKKyAgICAgICAgWyZdIChFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICBp
ZiAoc3RhdGUpIHsKKyAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhlIENoZWNrIGZsYWcgb24g
dGhlIGVkZ2UuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhhdCBmbGFnIGFuc3dlcnMKKyAg
ICAgICAgICAgICAgICAvLyB0aGUgcXVlc3Rpb246ICJ3b3VsZCB0aGlzIGVkZ2UgaGF2ZSBoYWQg
YSBjaGVjayBpZiBpdCBleGVjdXRlZCB3aGVyZXZlciBpdAorICAgICAgICAgICAgICAgIC8vIGN1
cnJlbnRseSByZXNpZGVzIGluIGNvbnRyb2wgZmxvdz8iIEJ1dCB3aGVuIGEgc3RhdGUgaXMgcGFz
c2VkLCB3ZSB3YW50IHRvIGFzayBhCisgICAgICAgICAgICAgICAgLy8gZGlmZmVyZW50IHF1ZXN0
aW9uOiAid291bGQgdGhpcyBlZGdlIGhhdmUgYSBjaGVjayBpZiBpdCBleGVjdXRlZCB3aGVyZXZl
ciB0aGlzCisgICAgICAgICAgICAgICAgLy8gc3RhdGUgaXM/IiBVc2luZyB0aGUgQ2hlY2sgZmxh
ZyBmb3IgdGhpcyBwdXJwb3NlIHdvdWxkbid0IGV2ZW4gYmUgY29uc2VydmF0aXZlbHkKKyAgICAg
ICAgICAgICAgICAvLyBjb3JyZWN0LiBJdCB3b3VsZCBiZSB3cm9uZyBpbiBib3RoIGRpcmVjdGlv
bnMuCisgICAgICAgICAgICAgICAgaWYgKG1heUhhdmVUeXBlQ2hlY2soZWRnZS51c2VLaW5kKCkp
CisgICAgICAgICAgICAgICAgICAgICYmIChzdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50
eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gRXhpdHM7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYXli
ZSB0aGlzIHNob3VsZCBjYWxsIG1heUhhdmVUeXBlQ2hlY2soZWRnZS51c2VLaW5kKCkpIGluc3Rl
YWQuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0ODU0NQorICAgICAgICAgICAgICAgIGlmIChlZGdlLndpbGxIYXZlQ2hlY2soKSkg
eworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBFeGl0czsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgeworICAgICAgICAgICAgLy8g
VGhlc2UgYXJlIHNoYWR5IGJlY2F1c2Ugbm9kZXMgdGhhdCBoYXZlIHRoZXNlIHVzZSBraW5kcyB3
aWxsIHR5cGljYWxseSBleGl0IGZvcgorICAgICAgICAgICAgLy8gdW5yZWxhdGVkIHJlYXNvbnMu
IEZvciBleGFtcGxlIENvbXBhcmVFcSBkb2Vzbid0IHVzdWFsbHkgZXhpdCwgYnV0IGlmIGl0IHVz
ZXMKKyAgICAgICAgICAgIC8vIE9iamVjdFVzZSB0aGVuIGl0IHdpbGwuCisgICAgICAgICAgICBj
YXNlIE9iamVjdFVzZToKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBFeGl0czsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBzaGFkeSBiZWNhdXNlIHRoZXkg
Y2hlY2sgdGhlIHN0cnVjdHVyZSBldmVuIGlmIHRoZSB0eXBlIG9mIHRoZSBjaGlsZCBub2RlCisg
ICAgICAgICAgICAvLyBwYXNzZXMgdGhlIFN0cmluZ09iamVjdCB0eXBlIGZpbHRlci4KKyAgICAg
ICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgorICAgICAgICAgICAgY2FzZSBTdHJpbmdPclN0
cmluZ09iamVjdFVzZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBFeGl0czsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0V4aXRNb2Rl
IG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQoreworICAgIE51bGxBYnN0cmFjdFN0
YXRlIHN0YXRlOworICAgIHJldHVybiBtYXlFeGl0SW1wbChncmFwaCwgbm9kZSwgc3RhdGUpOwor
fQorCitFeGl0TW9kZSBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQXRUYWlsQWJz
dHJhY3RTdGF0ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIG1heUV4aXRJbXBsKGdyYXBoLCBub2Rl
LCBzdGF0ZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogbmFtZXNwYWNlIFdU
RiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuaAkocmV2aXNpb24g
MjAxMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKK2NsYXNzIEF0VGFpbEFic3RyYWN0U3RhdGU7CiBjbGFzcyBHcmFwaDsKIHN0cnVj
dCBOb2RlOwogCkBAIC03NCw2ICs3NSwxMSBAQCBlbnVtIEV4aXRNb2RlIHsKIAogRXhpdE1vZGUg
bWF5RXhpdChHcmFwaCYsIE5vZGUqKTsKIAorLy8gTGlrZSBtYXlFeGl0KCksIGJ1dCBpbnN0ZWFk
IG9mIHVzaW5nIHRoZSBDaGVjazogZmxhZyB0byBkZXRlcm1pbmUgaWYgc29tZXRoaW5nIGV4aXRz
LCBpdAorLy8gZXZhbHVhdGVzIHdoZXRoZXIgaXQgd2lsbCBleGl0IGJhc2VkIG9uIHRoZSB0YWls
IHN0YXRlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgTElDTS4gVGhpcyAqbWF5KiBhbHNvCisvLyB1c2Ug
dGhlIEF0VGFpbEFic3RyYWN0U3RhdGUgdG8gcmV0dXJuIG1vcmUgcHJlY2lzZSBhbnN3ZXJzIGZv
ciBvdGhlciBub2Rlcy4KK0V4aXRNb2RlIG1heUV4aXQoR3JhcGgmLCBOb2RlKiwgQXRUYWlsQWJz
dHJhY3RTdGF0ZSYpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBX
VEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDIwMTE2
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjk5LDcgKzIyOTksNyBAQCBzdHJ1Y3QgTm9kZSB7CiAKIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9vcCA6IDEwOyAvLyByZWFsIHR5cGUgaXMgTm9kZVR5cGUKLSAgICB1bnNpZ25lZCBt
X2ZsYWdzIDogMjI7CisgICAgdW5zaWduZWQgbV9mbGFncyA6IDIwOwogICAgIC8vIFRoZSB2aXJ0
dWFsIHJlZ2lzdGVyIG51bWJlciAoc3BpbGwgbG9jYXRpb24pIGFzc29jaWF0ZWQgd2l0aCB0aGlz
IC4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV92aXJ0dWFsUmVnaXN0ZXI7CiAgICAgLy8gVGhlIG51
bWJlciBvZiB1c2VzIG9mIHRoZSByZXN1bHQgb2YgdGhpcyBvcGVyYXRpb24gKCsxIGZvciAnbXVz
dCBnZW5lcmF0ZScgbm9kZXMsIHdoaWNoIGhhdmUgc2lkZS1lZmZlY3RzKS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMjAxMTY3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
dm9pZCBOb2RlT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0
LnByaW50KCJ7c2VtYW50aWM6ICIsIHNlbWFudGljLCAiLCBmb3JFeGl0OiAiLCBmb3JFeGl0LCAi
LCBleGl0T0s6ICIsIGV4aXRPSywgIn0iKTsKKyAgICBvdXQucHJpbnQoIntzZW1hbnRpYzogIiwg
c2VtYW50aWMsICIsIGZvckV4aXQ6ICIsIGZvckV4aXQsICIsIGV4aXRPSzogIiwgZXhpdE9LLCAi
LCB3YXNIb2lzdGVkOiAiLCB3YXNIb2lzdGVkLCAifSIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4u
aAkocmV2aXNpb24gMjAxMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
T3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTIsNiArOTIsMTMgQEAgc3RydWN0IE5vZGVP
cmlnaW4gewogICAgICAgICByZXR1cm4gd2l0aEV4aXRPSyhleGl0T0sgJiBzdGQ6OmV4Y2hhbmdl
KGNhbkV4aXQsIGZhbHNlKSk7CiAgICAgfQogICAgIAorICAgIE5vZGVPcmlnaW4gd2l0aFdhc0hv
aXN0ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgTm9kZU9yaWdpbiByZXN1bHQgPSAqdGhpczsK
KyAgICAgICAgcmVzdWx0Lndhc0hvaXN0ZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKICAgICBOb2RlT3JpZ2luIGZvckluc2VydGluZ0FmdGVyKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIE5vZGVPcmlnaW4gcmVzdWx0
ID0gKnRoaXM7CkBAIC0xMjEsNiArMTI4LDggQEAgc3RydWN0IE5vZGVPcmlnaW4gewogICAgIENv
ZGVPcmlnaW4gZm9yRXhpdDsKICAgICAvLyBXaGV0aGVyIG9yIG5vdCBpdCBpcyBsZWdhbCB0byBl
eGl0IGhlcmUuCiAgICAgYm9vbCBleGl0T0sgeyBmYWxzZSB9OworICAgIC8vIFdoZXRoZXIgb3Ig
bm90IHRoZSBub2RlIGhhcyBiZWVuIGhvaXN0ZWQuCisgICAgYm9vbCB3YXNIb2lzdGVkIHsgZmFs
c2UgfTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTnVsbEFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR051bGxBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR051bGxBYnN0cmFjdFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR051bGxBYnN0cmFjdFN0YXRlX2gKKyNkZWZp
bmUgREZHTnVsbEFic3RyYWN0U3RhdGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgRWRnZTsKK3N0cnVjdCBBYnN0cmFj
dFZhbHVlOworc3RydWN0IE5vZGU7CisKKy8vIFVzZSB0aGlzIGFzIGEgc3R1YiBmb3IgdGhpbmdz
IHRoYXQgY2FuIG9wdGlvbmFsbHkgdGFrZSBzb21lIGtpbmQgb2YgYWJzdHJhY3Qgc3RhdGUgYnV0
IHlvdSB3aXNoCisvLyB0byBub3QgcGFzcyBhbnkgYWJzdHJhY3Qgc3RhdGUuIFRoaXMgd29ya3Mg
aWYgdGhlIHRlbXBsYXRpemVkIGNvZGUgYWxzbyBkb2VzIGEgY2hlY2sgKHVzaW5nIHRoZQorLy8g
b3BlcmF0b3IgYm9vbCkgdG8gc2VlIGlmIHRoZSBzdGF0ZSBpcyB2YWxpZC4KK2NsYXNzIE51bGxB
YnN0cmFjdFN0YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBOdWxsQWJzdHJhY3RTdGF0ZSgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIEFic3RyYWN0VmFsdWUmIGZv
ck5vZGUoTm9kZSopCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxBYnN0cmFjdFZhbHVlKj4oc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KDB4MTIzNCkpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdFZhbHVlJiBm
b3JOb2RlKEVkZ2UpCisgICAgeworICAgICAgICByZXR1cm4gZm9yTm9kZShudWxscHRyKTsKKyAg
ICB9CisgICAgCisgICAgLy8gSXQncyB2YWxpZCB0byBhZGQgbW9yZSBzdHViIG1ldGhvZHMgaGVy
ZSBhcyBuZWVkZWQuCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR051bGxBYnN0cmFjdFN0YXRlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAy
MDExNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKIE9TUkV4aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1Zh
bHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgU3Bl
Y3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5
SW5kZXgpCi0gICAgOiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1fb3JpZ2luLmZvckV4aXQsIGpp
dC0+bV9vcmlnaW4uc2VtYW50aWMpCisgICAgOiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1fb3Jp
Z2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4uc2VtYW50aWMsIGppdC0+bV9vcmlnaW4ud2FzSG9p
c3RlZCkKICAgICAsIG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1
ZVByb2ZpbGUodmFsdWVQcm9maWxlKQogICAgICwgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KDApCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAkocmV2
aXNpb24gMjAxMTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDggKzQxLDE0IEBAIHZvaWQgT1NSRXhpdEJhc2U6OmNv
bnNpZGVyQWRkaW5nQXNGcmVxdWUKICAgICBDb2RlQmxvY2sqIHNvdXJjZVByb2ZpbGVkQ29kZUJs
b2NrID0KICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jaygKICAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBwcm9maWxlZENv
ZGVCbG9jayk7Ci0gICAgaWYgKHNvdXJjZVByb2ZpbGVkQ29kZUJsb2NrKQotICAgICAgICBzb3Vy
Y2VQcm9maWxlZENvZGVCbG9jay0+YWRkRnJlcXVlbnRFeGl0U2l0ZShGcmVxdWVudEV4aXRTaXRl
KG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCwgaml0VHlw
ZSkpOworICAgIGlmIChzb3VyY2VQcm9maWxlZENvZGVCbG9jaykgeworICAgICAgICBGcmVxdWVu
dEV4aXRTaXRlIHNpdGU7CisgICAgICAgIGlmIChtX3dhc0hvaXN0ZWQpCisgICAgICAgICAgICBz
aXRlID0gRnJlcXVlbnRFeGl0U2l0ZShIb2lzdGluZ0ZhaWxlZCwgaml0VHlwZSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNpdGUgPSBGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdpbkZv
ckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCwgaml0VHlwZSk7CisgICAgICAgIHNv
dXJjZVByb2ZpbGVkQ29kZUJsb2NrLT5hZGRGcmVxdWVudEV4aXRTaXRlKHNpdGUpOworICAgIH0K
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkocmV2aXNpb24gMjAxMTY3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5
ICs0MCwxMCBAQCBzdHJ1Y3QgTm9kZTsKIC8vIGFuZCB0aGUgRlRMLgogCiBzdHJ1Y3QgT1NSRXhp
dEJhc2UgewotICAgIE9TUkV4aXRCYXNlKEV4aXRLaW5kIGtpbmQsIENvZGVPcmlnaW4gb3JpZ2lu
LCBDb2RlT3JpZ2luIG9yaWdpbkZvclByb2ZpbGUpCisgICAgT1NSRXhpdEJhc2UoRXhpdEtpbmQg
a2luZCwgQ29kZU9yaWdpbiBvcmlnaW4sIENvZGVPcmlnaW4gb3JpZ2luRm9yUHJvZmlsZSwgYm9v
bCB3YXNIb2lzdGVkKQogICAgICAgICA6IG1fa2luZChraW5kKQogICAgICAgICAsIG1fY291bnQo
MCkKKyAgICAgICAgLCBtX3dhc0hvaXN0ZWQod2FzSG9pc3RlZCkKICAgICAgICAgLCBtX2NvZGVP
cmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKG9yaWdp
bkZvclByb2ZpbGUpCiAgICAgewpAQCAtNTIsNiArNTMsNyBAQCBzdHJ1Y3QgT1NSRXhpdEJhc2Ug
ewogICAgIAogICAgIEV4aXRLaW5kIG1fa2luZDsKICAgICB1aW50MzJfdCBtX2NvdW50OworICAg
IGJvb2wgbV93YXNIb2lzdGVkOwogICAgIAogICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwog
ICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAJKHJldmlzaW9uIDIwMTE2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcg
QEAgcHVibGljOgogICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBo
Lm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7Ci0KKyAgICAgICAgCiAgICAgICAgIGNsZWFyVmFyaWFi
bGVWb3RlcygpOwogICAgICAgICBpZGVudGlmeVJlZHVuZGFudFN0cnVjdHVyZUNoZWNrcygpOwog
ICAgICAgICBkaXNhYmxlSG9pc3RpbmdGb3JWYXJpYWJsZXNXaXRoSW5zdWZmaWNpZW50Vm90ZXM8
U3RydWN0dXJlVHlwZUNoZWNrPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXQuY3BwCShyZXZpc2lvbiAyMDExNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIFJlZlB0
cjxPU1JFeGl0SGFuZGxlPiBPU1JFeGl0RGVzY3JpcHRvcjoKIHsKICAgICB1bnNpZ25lZCBpbmRl
eCA9IHN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpOwogICAgIE9TUkV4aXQmIGV4aXQgPSBz
dGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFsbG9jKAotICAgICAgICB0aGlzLCBleGl0S2luZCwgbm9k
ZU9yaWdpbi5mb3JFeGl0LCBub2RlT3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgdGhpcywgZXhp
dEtpbmQsIG5vZGVPcmlnaW4uZm9yRXhpdCwgbm9kZU9yaWdpbi5zZW1hbnRpYywgbm9kZU9yaWdp
bi53YXNIb2lzdGVkKTsKICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0gYWRvcHRS
ZWYobmV3IE9TUkV4aXRIYW5kbGUoaW5kZXgsIGV4aXQpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBvZmZzZXQ7IGkgPCBwYXJhbXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGV4aXQubV92YWx1ZVJl
cHMuYXBwZW5kKHBhcmFtc1tpXSk7CkBAIC0xMDEsOSArMTAxLDkgQEAgUmVmUHRyPE9TUkV4aXRI
YW5kbGU+IE9TUkV4aXREZXNjcmlwdG9yOgogfQogCiBPU1JFeGl0OjpPU1JFeGl0KAotICAgIE9T
UkV4aXREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAotICAgIEV4aXRLaW5kIGV4aXRLaW5kLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIENvZGVPcmlnaW4gY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKQot
ICAgIDogT1NSRXhpdEJhc2UoZXhpdEtpbmQsIGNvZGVPcmlnaW4sIGNvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZSkKKyAgICBPU1JFeGl0RGVzY3JpcHRvciogZGVzY3JpcHRvciwgRXhpdEtpbmQgZXhp
dEtpbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW5G
b3JFeGl0UHJvZmlsZSwgYm9vbCB3YXNIb2lzdGVkKQorICAgIDogT1NSRXhpdEJhc2UoZXhpdEtp
bmQsIGNvZGVPcmlnaW4sIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgd2FzSG9pc3RlZCkKICAg
ICAsIG1fZGVzY3JpcHRvcihkZXNjcmlwdG9yKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9uIDIwMTE2NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMTAgKzExNyw3
IEBAIHByaXZhdGU6CiB9OwogCiBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRC
YXNlIHsKLSAgICBPU1JFeGl0KAotICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciosIEV4aXRLaW5k
LAotICAgICAgICBDb2RlT3JpZ2luLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmls
ZQotICAgICAgICApOworICAgIE9TUkV4aXQoT1NSRXhpdERlc2NyaXB0b3IqLCBFeGl0S2luZCwg
Q29kZU9yaWdpbiwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIGJvb2wgd2Fz
SG9pc3RlZCk7CiAKICAgICBPU1JFeGl0RGVzY3JpcHRvciogbV9kZXNjcmlwdG9yOwogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjAxMTY3KQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2MSBAQAorMjAx
Ni0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRzo6
TElDTVBoYXNlIHNob3VsZG4ndCBob2lzdCB0eXBlIGNoZWNrcyB1bmxlc3MgaXQga25vd3MgdGhh
dCB0aGUgY2hlY2sgd2lsbCBzdWNjZWVkIGF0IHRoZSBsb29wIHByZS1oZWFkZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDUyNworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRz
IGFuIGFkYXB0b3IgZm9yIGdyYXBocyBjYWxsZWQgQmFja3dhcmRzR3JhcGguIFRoZSBXVEYgZ3Jh
cGggZnJhbWV3b3JrIGlzIGJhc2VkIG9uCisgICAgICAgIHBhc3NpbmcgYXJvdW5kIGEgR3JhcGgg
dGVtcGxhdGUgYXJndW1lbnQgdGhhdCBmb2xsb3dzIHRoZSBwcm90b2NvbCBzaGFyZWQgYnkgREZH
OjpDRkcsCisgICAgICAgIEIzOjpDRkcsIGFuZCBBaXI6OkNGRy4gVGhlc2UgZ3JhcGhzIGFsd2F5
cyBoYXZlIGEgc2luZ2xlIHJvb3Qgbm9kZSBidXQgbWF5IGhhdmUgbWFueSBsZWFmCisgICAgICAg
IG5vZGVzLiBUaGlzIG5ldyBCYWNrd2FyZHNHcmFwaCBhZGFwdG9yIHJldmVyc2VzIHRoZSBncmFw
aCBieSBjcmVhdGluZyBhIHN5bnRoZXRpYyByZXR1cm4KKyAgICAgICAgbm9kZSB0aGF0IGl0IHVz
ZXMgYXMgdGhlIHJvb3QgaW4gdGhlIGludmVydGVkIGdyYXBoLiBUaGlzIGN1cnJlbnRseSBtYXkg
cmVzb3J0IHRvIHNvbWUKKyAgICAgICAgaGV1cmlzdGljcyBpbiBwcm9ncmFtcyB0aGF0IGhhdmUg
YW4gaW5maW5pdGUgbG9vcCwgYnV0IG90aGVyIHRoYW4gdGhhdCwgaXQnbGwgd29yayB3ZWxsIGlu
CisgICAgICAgIHRoZSBnZW5lcmFsIGNhc2UuCisgICAgICAgIAorICAgICAgICBUaGlzIGFsbG93
cyB1cyB0byBzYXkgRG9taW5hdG9yczxCYWNrd2FyZHNHcmFwaDxzb21lIGdyYXBoIHR5cGU+PiBh
cyBhIHdheSBvZiBjb21wdXRpbmcKKyAgICAgICAgYmFja3dhcmRzIGRvbWluYXRvcnMsIHdoaWNo
IHRoZW4gYWxsb3dzIHVzIHRvIGVhc2lseSBhbnN3ZXIgY29udHJvbCBmbG93IGVxdWl2YWxlbmNl
CisgICAgICAgIHF1ZXJpZXMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQmFja3dhcmRz
R3JhcGguaDogQWRkZWQuCisgICAgICAgIChXVEY6OkJhY2t3YXJkc0dyYXBoOjpOb2RlOjpOb2Rl
KToKKyAgICAgICAgKFdURjo6QmFja3dhcmRzR3JhcGg6Ok5vZGU6OnJvb3QpOgorICAgICAgICAo
V1RGOjpCYWNrd2FyZHNHcmFwaDo6Tm9kZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkJh
Y2t3YXJkc0dyYXBoOjpOb2RlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6QmFja3dhcmRz
R3JhcGg6Ok5vZGU6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNHcmFw
aDo6Tm9kZTo6aXNSb290KToKKyAgICAgICAgKFdURjo6QmFja3dhcmRzR3JhcGg6Ok5vZGU6Om5v
ZGUpOgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6U2V0OjpTZXQpOgorICAgICAgICAo
V1RGOjpCYWNrd2FyZHNHcmFwaDo6U2V0OjphZGQpOgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNH
cmFwaDo6U2V0OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6U2V0Ojpj
b250YWlucyk6CisgICAgICAgIChXVEY6OkJhY2t3YXJkc0dyYXBoOjpTZXQ6OmR1bXApOgorICAg
ICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6TWFwOjpNYXApOgorICAgICAgICAoV1RGOjpCYWNr
d2FyZHNHcmFwaDo6TWFwOjpjbGVhcik6CisgICAgICAgIChXVEY6OkJhY2t3YXJkc0dyYXBoOjpN
YXA6OnNpemUpOgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6TWFwOjpvcGVyYXRvcltd
KToKKyAgICAgICAgKFdURjo6QmFja3dhcmRzR3JhcGg6OkJhY2t3YXJkc0dyYXBoKToKKyAgICAg
ICAgKFdURjo6QmFja3dhcmRzR3JhcGg6OnJvb3QpOgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNH
cmFwaDo6bmV3TWFwKToKKyAgICAgICAgKFdURjo6QmFja3dhcmRzR3JhcGg6OnN1Y2Nlc3NvcnMp
OgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6cHJlZGVjZXNzb3JzKToKKyAgICAgICAg
KFdURjo6QmFja3dhcmRzR3JhcGg6OmluZGV4KToKKyAgICAgICAgKFdURjo6QmFja3dhcmRzR3Jh
cGg6Om5vZGUpOgorICAgICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6bnVtTm9kZXMpOgorICAg
ICAgICAoV1RGOjpCYWNrd2FyZHNHcmFwaDo6ZHVtcCk6CisgICAgICAgICogd3RmL0RvbWluYXRv
cnMuaDoKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6RG9taW5hdG9ycyk6CisgICAgICAgIChX
VEY6OkRvbWluYXRvcnM6OmR1bXApOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpMZW5nYXVl
clRhcmphbjo6Y29tcHV0ZURlcHRoRmlyc3RQcmVOdW1iZXJpbmcpOgorICAgICAgICAqIHd0Zi9H
cmFwaE5vZGVXb3JrbGlzdC5oOgorICAgICAgICAoV1RGOjpHcmFwaE5vZGVXaXRoOjpHcmFwaE5v
ZGVXaXRoKToKKyAgICAgICAgKFdURjo6R3JhcGhOb2RlV2l0aDo6b3BlcmF0b3IgYm9vbCk6Cisg
ICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RGOjpjYWxsU3RhdGVsZXNz
TGFtYmRhKToKKyAgICAgICAgKFdURjo6Y2hlY2tBbmRTZXQpOgorCiAyMDE2LTA1LTE4ICBTYWFt
IGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFN0cmluZ0J1aWxkZXI6OmFw
cGVuZFF1b3RlZEpTT05TdHJpbmcgZG9lc24ndCBwcm9wZXJseSBwcm90ZWN0IGFnYWluc3QgdGhl
IG1hdGggaXQncyBkb2luZy4gTWFrZSB0aGUgbWF0aCBmaXQgdGhlIGFzc2VydGlvbi4KSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjAxMTY3
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMzAxLDYgKzMwMSw3IEBACiAJCUNENTQ5N0FEMTU4NTdEMDMwMEI1QkMzMCAvKiBN
ZWRpYVRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENENTQ5N0FCMTU4NTdEMDMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuaCAqLzsgfTsKIAkJQ0U0NjUx
NkUxOURCMUZCNDAwM0VDQTA1IC8qIE5TTWFwVGFibGVTUEkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFNDY1MTZEMTlEQjFGQjQwMDNFQ0EwNSAvKiBO
U01hcFRhYmxlU1BJLmggKi87IH07CiAJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENT
UEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFNzNF
MDI0MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCAqLzsgfTsKKwkJRENFRTIyMDUxQ0VCOTg2
OTAwMEMyMzk2IC8qIEJhY2t3YXJkc0dyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBEQ0VFMjIwNDFDRUI5ODY5MDAwQzIzOTYgLyogQmFja3dhcmRz
R3JhcGguaCAqLzsgfTsKIAkJRENFRTIxRkIxQ0VBNzUzODAwMEMyMzk2IC8qIENGQnVuZGxlU1BJ
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQ0VFMjFG
QTFDRUE3NTM4MDAwQzIzOTYgLyogQ0ZCdW5kbGVTUEkuaCAqLzsgfTsKIAkJRENFRTIyMDAxQ0VB
NzU1MTAwMEMyMzk2IC8qIEJsb2NrT2JqQ0V4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDRUUyMUZDMUNFQTc1NTEwMDBDMjM5NiAvKiBC
bG9ja09iakNFeGNlcHRpb25zLmggKi87IH07CiAJCURDRUUyMjAxMUNFQTc1NTEwMDBDMjM5NiAv
KiBCbG9ja09iakNFeGNlcHRpb25zLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRENFRTIxRkQxQ0VBNzU1MTAwMEMyMzk2IC8qIEJsb2NrT2JqQ0V4Y2Vw
dGlvbnMubW0gKi87IH07CkBAIC02MjcsNiArNjI4LDcgQEAKIAkJQ0Q1NDk3QUIxNTg1N0QwMzAw
QjVCQzMwIC8qIE1lZGlhVGltZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZWRpYVRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0U0NjUxNkQxOURCMUZC
NDAwM0VDQTA1IC8qIE5TTWFwVGFibGVTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTlNNYXBUYWJsZVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTcz
RTAyNDE5RENCN0FCMDA1ODBENUMgLyogWFBDU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFhQQ1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQ0VFMjIw
NDFDRUI5ODY5MDAwQzIzOTYgLyogQmFja3dhcmRzR3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQmFja3dhcmRzR3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRENFRTIxRkExQ0VBNzUzODAwMEMyMzk2IC8qIENGQnVuZGxlU1BJLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENGQnVuZGxlU1BJLmg7IHBhdGggPSBjZi9DRkJ1bmRs
ZVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQ0VFMjFGQzFDRUE3NTUxMDAw
QzIzOTYgLyogQmxvY2tPYmpDRXhjZXB0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCbG9ja09iakNFeGNlcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCURDRUUyMUZEMUNFQTc1NTEwMDBDMjM5NiAvKiBCbG9ja09iakNFeGNlcHRpb25zLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQmxvY2tPYmpDRXhjZXB0aW9u
cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc3Myw2ICs3NzUsNyBAQAogCQkJ
CUE4QTQ3MjVEMTUxQTgyNUEwMDQxMjNGRiAvKiBBdG9taWNzLmggKi8sCiAJCQkJMTQ2OTQxOUEx
NkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFpbmVkUG9vbC5oICovLAogCQkJCTE0Njk0MTlCMTZF
QUIxMEEwMDI0RTE0NiAvKiBBdXRvZHJhaW5lZFBvb2xNYWMubW0gKi8sCisJCQkJRENFRTIyMDQx
Q0VCOTg2OTAwMEMyMzk2IC8qIEJhY2t3YXJkc0dyYXBoLmggKi8sCiAJCQkJMEZCMTRFMTgxODBG
QTIxODAwOUI2QjREIC8qIEJhZy5oICovLAogCQkJCTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0RCAv
KiBCYWdUb0hhc2hNYXAuaCAqLywKIAkJCQlBOEE0NzI1RjE1MUE4MjVBMDA0MTIzRkYgLyogQml0
bWFwLmggKi8sCkBAIC0xMTc5LDYgKzExODIsNyBAQAogCQkJCUE4QTQ3MzkxMTUxQTgyNUIwMDQx
MjNGRiAvKiBCdW1wUG9pbnRlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRUI5NUUx
RjAxNjFBNzI0MTAwODlBMkY1IC8qIEJ5dGVPcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDczQUQxNTFBODI1QjAwNDEyM0ZGIC8qIGNhY2hlZC1wb3dlcnMuaCBpbiBIZWFkZXJzICovLAor
CQkJCURDRUUyMjA1MUNFQjk4NjkwMDBDMjM5NiAvKiBCYWNrd2FyZHNHcmFwaC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDc0NUUxNTFBODI1QjAwNDEyM0ZGIC8qIENoYXJhY3Rlck5hbWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5NDE1MUE4MjVCMDA0MTIzRkYgLyogQ2hlY2tlZEFy
aXRobWV0aWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzk1MTUxQTgyNUIwMDQxMjNGRiAv
KiBDaGVja2VkQm9vbGVhbi5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9C
YWNrd2FyZHNHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhY2t3YXJkc0dy
YXBoLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWNrd2FyZHNHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX0JhY2t3YXJkc0dyYXBoX2gKKyNkZWZp
bmUgV1RGX0JhY2t3YXJkc0dyYXBoX2gKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Cisj
aW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+Citj
bGFzcyBCYWNrd2FyZHNHcmFwaCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFja3dhcmRz
R3JhcGgpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgY2xh
c3MgTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBOb2RlKHR5cGVuYW1lIEdyYXBoOjpOb2Rl
IG5vZGUgPSB0eXBlbmFtZSBHcmFwaDo6Tm9kZSgpKQorICAgICAgICAgICAgOiBtX25vZGUobm9k
ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIE5vZGUgcm9vdCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIE5vZGUgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0Lm1f
bm9kZSA9IDA7CisgICAgICAgICAgICByZXN1bHQubV9pc1Jvb3QgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBOb2RlJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1f
bm9kZSA9PSBvdGhlci5tX25vZGUKKyAgICAgICAgICAgICAgICAmJiBtX2lzUm9vdCA9PSBvdGhl
ci5tX2lzUm9vdDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBO
b2RlJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IE5vZGUoKTsgfQorCisgICAgICAgIGJvb2wgaXNSb290
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faXNSb290OworICAgICAg
ICB9CisKKyAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbm9kZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUg
bV9ub2RlOworICAgICAgICBib29sIG1faXNSb290IHsgZmFsc2UgfTsKKyAgICB9OworCisgICAg
Y2xhc3MgU2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNldCgpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBhZGQoY29uc3QgTm9kZSYgbm9kZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG5vZGUuaXNSb290KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGNoZWNrQW5kU2V0KG1faGFzUm9vdCwgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gbV9z
ZXQuYWRkKG5vZGUubm9kZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmVtb3ZlKGNv
bnN0IE5vZGUmIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlLmlzUm9vdCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBjaGVja0FuZFNldChtX2hhc1Jvb3QsIGZhbHNlKTsK
KyAgICAgICAgICAgIHJldHVybiBtX3NldC5yZW1vdmUobm9kZS5ub2RlKCkpOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBOb2RlJiBub2RlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobm9kZS5pc1Jvb3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9o
YXNSb290OworICAgICAgICAgICAgcmV0dXJuIG1fc2V0LmNvbnRhaW5zKG5vZGUubm9kZSgpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9oYXNSb290KQorICAgICAgICAgICAgICAgIG91
dC5wcmludCgiI3JldHVybiAiKTsKKyAgICAgICAgICAgIG91dC5wcmludChtX3NldCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZW5hbWUgR3JhcGg6OlNl
dCBtX3NldDsKKyAgICAgICAgYm9vbCBtX2hhc1Jvb3QgeyBmYWxzZSB9OworICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNsYXNzIE1hcCB7CisgICAgcHVibGljOgorICAg
ICAgICBNYXAoR3JhcGgmIGdyYXBoKQorICAgICAgICAgICAgOiBtX21hcChncmFwaC50ZW1wbGF0
ZSBuZXdNYXA8VD4oKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVh
cigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fbWFwLmNsZWFyKCk7CisgICAgICAgICAgICBt
X3Jvb3QgPSBUKCk7CisgICAgICAgIH0KKworICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFwLnNpemUoKSArIDE7IH0KKworICAgICAgICBUJiBvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFpbmRleCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9yb290OworICAgICAgICAgICAgcmV0dXJuIG1fbWFwW2luZGV4IC0gMV07
CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICgqY29uc3RfY2FzdDxNYXAqPih0
aGlzKSlbaW5kZXhdOworICAgICAgICB9CisKKyAgICAgICAgVCYgb3BlcmF0b3JbXShjb25zdCBO
b2RlJiBub2RlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9kZS5pc1Jvb3QoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9yb290OworICAgICAgICAgICAgcmV0dXJuIG1fbWFwW25v
ZGUubm9kZSgpXTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oY29u
c3QgTm9kZSYgbm9kZSkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICgqY29u
c3RfY2FzdDxNYXAqPih0aGlzKSlbbm9kZV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJp
dmF0ZToKKyAgICAgICAgdHlwZW5hbWUgR3JhcGg6OnRlbXBsYXRlIE1hcDxUPiBtX21hcDsKKyAg
ICAgICAgVCBtX3Jvb3Q7CisgICAgfTsKKworICAgIHR5cGVkZWYgVmVjdG9yPE5vZGUsIDQ+IExp
c3Q7CisKKyAgICBCYWNrd2FyZHNHcmFwaChHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogbV9ncmFw
aChncmFwaCkKKyAgICB7CisgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PHR5cGVuYW1lIEdyYXBo
OjpOb2RlLCB0eXBlbmFtZSBHcmFwaDo6U2V0PiB3b3JrbGlzdDsKKworICAgICAgICBhdXRvIGFk
ZFJvb3RTdWNjZXNzb3IgPSBbJl0gKHR5cGVuYW1lIEdyYXBoOjpOb2RlIG5vZGUpIHsKKyAgICAg
ICAgICAgIGlmICh3b3JrbGlzdC5wdXNoKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgbV9yb290
U3VjY2Vzc29yTGlzdC5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICAgICAgbV9yb290U3VjY2Vz
c29yU2V0LmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHlwZW5hbWUgR3JhcGg6
Ok5vZGUgbm9kZSA9IHdvcmtsaXN0LnBvcCgpKQorICAgICAgICAgICAgICAgICAgICB3b3JrbGlz
dC5wdXNoQWxsKGdyYXBoLnByZWRlY2Vzc29ycyhub2RlKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdyYXBoLm51bU5vZGVz
KCk7ICsraSkgeworICAgICAgICAgICAgaWYgKHR5cGVuYW1lIEdyYXBoOjpOb2RlIG5vZGUgPSBn
cmFwaC5ub2RlKGkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFncmFwaC5zdWNjZXNzb3JzKG5v
ZGUpLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkUm9vdFN1Y2Nlc3Nvcihub2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhl
cmUgd2lsbCBiZSBzb21lIG5vZGVzIGluIHRoZSBncmFwaCB0aGF0IGFyZW4ndCBrbm93biB0byB0
aGUgd29ya2xpc3QuIFdlCisgICAgICAgIC8vIGNvdWxkIGFkZCBhbnkgb3IgYWxsIG9mIHRoZW0g
dG8gdGhlIHJvb3Qgc3VjY2Vzc29ycyBsaXN0LiBBZGRpbmcgYWxsIG9mIHRoZW0gd291bGQgYmUg
YSBiYWQKKyAgICAgICAgLy8gcGVzc2ltaXNhdGlvbi4gSWRlYWxseSB3ZSB3b3VsZCBwaWNrIHRo
ZSBvbmVzIHRoYXQgaGF2ZSBiYWNrd2FyZCBlZGdlcyBidXQgbm8gZm9yd2FyZAorICAgICAgICAv
LyBlZGdlcy4gVGhhdCB3b3VsZCByZXF1aXJlIHRoaW5raW5nLCBzbyB3ZSBqdXN0IHVzZSBhIHJv
dWdoIGhldXJpc3RpYzogYWRkIHRoZSBoaWdoZXN0CisgICAgICAgIC8vIG51bWJlcmVkIG5vZGVz
IGZpcnN0LCB3aGljaCBpcyB0b3RhbGx5IGZpbmUgaWYgdGhlIGlucHV0IHByb2dyYW0gaXMgYWxy
ZWFkeSBzb3J0ZWQgbmljZWx5LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5udW1O
b2RlcygpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9k
ZSA9IGdyYXBoLm5vZGUoaSkpCisgICAgICAgICAgICAgICAgYWRkUm9vdFN1Y2Nlc3Nvcihub2Rl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIE5vZGU6OnJv
b3QoKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBNYXA8VD4gbmV3TWFwKCkg
eyByZXR1cm4gTWFwPFQ+KG1fZ3JhcGgpOyB9CisKKyAgICBMaXN0IHN1Y2Nlc3NvcnMoY29uc3Qg
Tm9kZSYgbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChub2RlLmlzUm9vdCgpKQorICAg
ICAgICAgICAgcmV0dXJuIG1fcm9vdFN1Y2Nlc3Nvckxpc3Q7CisgICAgICAgIExpc3QgcmVzdWx0
OworICAgICAgICBmb3IgKHR5cGVuYW1lIEdyYXBoOjpOb2RlIHByZWRlY2Vzc29yIDogbV9ncmFw
aC5wcmVkZWNlc3NvcnMobm9kZS5ub2RlKCkpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChw
cmVkZWNlc3Nvcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgTGlzdCBw
cmVkZWNlc3NvcnMoY29uc3QgTm9kZSYgbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChu
b2RlLmlzUm9vdCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBMaXN0IHJl
c3VsdDsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3Jvb3RTdWNjZXNzb3JTZXQuY29udGFpbnMo
bm9kZS5ub2RlKCkpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChOb2RlOjpyb290KCkpOwor
CisgICAgICAgIGZvciAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgc3VjY2Vzc29yIDogbV9ncmFwaC5z
dWNjZXNzb3JzKG5vZGUubm9kZSgpKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3VjY2Vz
c29yKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGlu
ZGV4KGNvbnN0IE5vZGUmIG5vZGUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobm9kZS5pc1Jv
b3QoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9ncmFwaC5pbmRl
eChub2RlLm5vZGUoKSkgKyAxOworICAgIH0KKworICAgIE5vZGUgbm9kZSh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaW5kZXgpCisgICAgICAgICAgICByZXR1cm4g
Tm9kZTo6cm9vdCgpOworICAgICAgICByZXR1cm4gbV9ncmFwaC5ub2RlKGluZGV4IC0gMSk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgbnVtTm9kZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZ3JhcGgubnVtTm9kZXMoKSArIDE7CisgICAgfQorCisgICAgQ1N0cmluZyBkdW1wKE5v
ZGUgbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAg
ICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICAg
ICAgZWxzZSBpZiAobm9kZS5pc1Jvb3QoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgicm9vdCIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQobV9ncmFwaC5kdW1wKG5vZGUu
bm9kZSgpKSk7CisgICAgICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7CisgICAgfQorCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtTm9kZXMoKTsgKytpKSB7CisgICAgICAgICAgICBOb2RlIG5v
ZGUgPSB0aGlzLT5ub2RlKGkpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgb3V0LnByaW50KGR1bXAobm9kZSksICI6XG4iKTsK
KyAgICAgICAgICAgIG91dC5wcmludCgiICAgIFByZWRzOiAiKTsKKyAgICAgICAgICAgIENvbW1h
UHJpbnRlciBjb21tYTsKKyAgICAgICAgICAgIGZvciAoTm9kZSBwcmVkZWNlc3NvciA6IHByZWRl
Y2Vzc29ycyhub2RlKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGR1bXAocHJl
ZGVjZXNzb3IpKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgICAgIG91
dC5wcmludCgiICAgIFN1Y2NzOiAiKTsKKyAgICAgICAgICAgIGNvbW1hID0gQ29tbWFQcmludGVy
KCk7CisgICAgICAgICAgICBmb3IgKE5vZGUgc3VjY2Vzc29yIDogc3VjY2Vzc29ycyhub2RlKSkK
KyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGR1bXAoc3VjY2Vzc29yKSk7CisgICAg
ICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgTGlzdCBtX3Jvb3RTdWNjZXNzb3JMaXN0OworICAgIHR5
cGVuYW1lIEdyYXBoOjpTZXQgbV9yb290U3VjY2Vzc29yU2V0OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKK3VzaW5nIFdURjo6QmFja3dhcmRzR3JhcGg7CisKKyNlbmRpZiAvLyBXVEZfQmFj
a3dhcmRzR3JhcGhfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjAxMTY3
KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIs
NiArMiw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIEFTQ0lJQ1R5cGUuaAogICAgIEFzc2VydGlv
bnMuaAogICAgIEF0b21pY3MuaAorICAgIEJhY2t3YXJkc0dyYXBoLmgKICAgICBCYWcuaAogICAg
IEJhZ1RvSGFzaE1hcC5oCiAgICAgQml0VmVjdG9yLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Rv
bWluYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0b3JzLmgJKHJl
dmlzaW9uIDIwMTE2NykKKysrIFNvdXJjZS9XVEYvd3RmL0RvbWluYXRvcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIERvbWluYXRvcnMgewog
cHVibGljOgogICAgIERvbWluYXRvcnMoR3JhcGgmIGdyYXBoLCBib29sIHNlbGZDaGVjayA9IGZh
bHNlKQogICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgbV9kYXRhKGdyYXBoLnRl
bXBsYXRlIG5ld01hcDxCbG9ja0RhdGE+KCkpCiAgICAgewogICAgICAgICBMZW5nYXVlclRhcmph
biBsZW5nYXVlclRhcmphbihtX2dyYXBoKTsKICAgICAgICAgbGVuZ2F1ZXJUYXJqYW4uY29tcHV0
ZSgpOwpAQCAtNjcsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgICAgIC8vIFBsYWluIHN0
YWNrLWJhc2VkIHdvcmtsaXN0IGJlY2F1c2Ugd2UgYXJlIGd1YXJhbnRlZWQgdG8gc2VlIGVhY2gg
YmxvY2sgZXhhY3RseSBvbmNlIGFueXdheS4KICAgICAgICAgVmVjdG9yPEdyYXBoTm9kZVdpdGhP
cmRlcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZT4+IHdvcmtsaXN0OwotICAgICAgICB3b3JrbGlzdC5h
cHBlbmQoR3JhcGhOb2RlV2l0aE9yZGVyPHR5cGVuYW1lIEdyYXBoOjpOb2RlPihtX2dyYXBoLm5v
ZGUoMCksIEdyYXBoVmlzaXRPcmRlcjo6UHJlKSk7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChH
cmFwaE5vZGVXaXRoT3JkZXI8dHlwZW5hbWUgR3JhcGg6Ok5vZGU+KG1fZ3JhcGgucm9vdCgpLCBH
cmFwaFZpc2l0T3JkZXI6OlByZSkpOwogICAgICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHko
KSkgewogICAgICAgICAgICAgR3JhcGhOb2RlV2l0aE9yZGVyPHR5cGVuYW1lIEdyYXBoOjpOb2Rl
PiBpdGVtID0gd29ya2xpc3QudGFrZUxhc3QoKTsKICAgICAgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgewpAQCAtMjc5LDEwICsyODAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKG1f
ZGF0YVtibG9ja0luZGV4XS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG91dC5wcmludCgiICAgIEJsb2Nr
ICMiLCBibG9ja0luZGV4LCAiOiBpZG9tID0gIiwgcG9pbnRlckR1bXAobV9kYXRhW2Jsb2NrSW5k
ZXhdLmlkb21QYXJlbnQpLCAiLCBpZG9tS2lkcyA9IFsiKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiICAgIEJsb2NrICMiLCBibG9ja0luZGV4LCAiOiBpZG9tID0gIiwgbV9ncmFwaC5kdW1wKG1f
ZGF0YVtibG9ja0luZGV4XS5pZG9tUGFyZW50KSwgIiwgaWRvbUtpZHMgPSBbIik7CiAgICAgICAg
ICAgICBDb21tYVByaW50ZXIgY29tbWE7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9kYXRhW2Jsb2NrSW5kZXhdLmlkb21LaWRzLnNpemUoKTsgKytpKQotICAgICAgICAg
ICAgICAgIG91dC5wcmludChjb21tYSwgKm1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkc1tpXSk7
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtX2dyYXBoLmR1bXAobV9kYXRhW2Js
b2NrSW5kZXhdLmlkb21LaWRzW2ldKSk7CiAgICAgICAgICAgICBvdXQucHJpbnQoIl0sIHByZS9w
b3N0ID0gIiwgbV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciwgIi8iLCBtX2RhdGFbYmxvY2tJ
bmRleF0ucG9zdE51bWJlciwgIlxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDcsNyArMzQ4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIG9mIG5vdCBub3RpY2luZyBBLT5DIHVudGls
IHdlJ3JlIGRvbmUgcHJvY2Vzc2luZyBCLgogCiAgICAgICAgICAgICBFeHRlbmRlZEdyYXBoTm9k
ZVdvcmtsaXN0PHR5cGVuYW1lIEdyYXBoOjpOb2RlLCB1bnNpZ25lZCwgdHlwZW5hbWUgR3JhcGg6
OlNldD4gd29ya2xpc3Q7Ci0gICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG1fZ3JhcGgubm9kZSgw
KSwgMCk7CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG1fZ3JhcGgucm9vdCgpLCAwKTsKICAg
ICAgICAgCiAgICAgICAgICAgICB3aGlsZSAoR3JhcGhOb2RlV2l0aDx0eXBlbmFtZSBHcmFwaDo6
Tm9kZSwgdW5zaWduZWQ+IGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkgewogICAgICAgICAgICAgICAg
IHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gaXRlbS5ub2RlOwpJbmRleDogU291cmNlL1dU
Ri93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9H
cmFwaE5vZGVXb3JrbGlzdC5oCShyZXZpc2lvbiAyMDExNjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9H
cmFwaE5vZGVXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHN0cnVj
dCBHcmFwaE5vZGVXaXRoIHsKICAgICB7CiAgICAgfQogCi0gICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuIG5vZGU7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gISFub2RlOyB9CiAgICAgCiAgICAgTm9kZSBub2RlOwogICAgIFQg
ZGF0YTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyMDExNjcpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDYgKzI5OSwx
NSBAQCBSZXN1bHRUeXBlIGNhbGxTdGF0ZWxlc3NMYW1iZGEoQXJndW1lbnRUCiAgICAgcmV0dXJu
ICgqYml0d2lzZV9jYXN0PEZ1bmMqPihkYXRhKSkoc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+
KGFyZ3VtZW50cykuLi4pOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgor
Ym9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQoreworICAgIGlmIChsZWZ0ID09IHJp
Z2h0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbGVmdCA9IHJpZ2h0OworICAgIHJldHVy
biB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogLy8gVGhpcyB2ZXJzaW9uIG9mIHBs
YWNlbWVudCBuZXcgb21pdHMgYSAwIGNoZWNrLgpAQCAtNDA5LDE3ICs0MTgsMTggQEAgQUxXQVlT
X0lOTElORSBjb25zdGV4cHIgdHlwZW5hbWUgcmVtb3ZlXwogCiB1c2luZyBXVEY6OktCOwogdXNp
bmcgV1RGOjpNQjsKLXVzaW5nIFdURjo6aXNDb21waWxhdGlvblRocmVhZDsKK3VzaW5nIFdURjo6
YXBwcm94aW1hdGVCaW5hcnlTZWFyY2g7Cit1c2luZyBXVEY6OmJpbmFyeVNlYXJjaDsKK3VzaW5n
IFdURjo6Yml0d2lzZV9jYXN0OwordXNpbmcgV1RGOjpjYWxsU3RhdGVsZXNzTGFtYmRhOwordXNp
bmcgV1RGOjpjaGVja0FuZFNldDsKIHVzaW5nIFdURjo6aW5zZXJ0SW50b0JvdW5kZWRWZWN0b3I7
Cit1c2luZyBXVEY6OmlzQ29tcGlsYXRpb25UaHJlYWQ7CiB1c2luZyBXVEY6OmlzUG9pbnRlckFs
aWduZWQ7Cit1c2luZyBXVEY6OmlzU3RhdGVsZXNzTGFtYmRhOwogdXNpbmcgV1RGOjppczhCeXRl
QWxpZ25lZDsKLXVzaW5nIFdURjo6YmluYXJ5U2VhcmNoOwotdXNpbmcgV1RGOjp0cnlCaW5hcnlT
ZWFyY2g7Ci11c2luZyBXVEY6OmFwcHJveGltYXRlQmluYXJ5U2VhcmNoOwotdXNpbmcgV1RGOjpi
aXR3aXNlX2Nhc3Q7CiB1c2luZyBXVEY6OnNhZmVDYXN0OwotdXNpbmcgV1RGOjppc1N0YXRlbGVz
c0xhbWJkYTsKLXVzaW5nIFdURjo6Y2FsbFN0YXRlbGVzc0xhbWJkYTsKK3VzaW5nIFdURjo6dHJ5
QmluYXJ5U2VhcmNoOwogCiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoQ1hYX1VTRVJfTElURVJBTFMp
CiAvLyBXZSBub3JtYWxseSBkb24ndCB3YW50IHRvIGJyaW5nIGluIGVudGlyZSBzdGQgbmFtZXNw
YWNlcywgYnV0IGxpdGVyYWxzIGFyZSBhbiBleGNlcHRpb24uCkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MDExNjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyNSBAQAorMjAxNi0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisg
ICAgICAgIERGRzo6TElDTVBoYXNlIHNob3VsZG4ndCBob2lzdCB0eXBlIGNoZWNrcyB1bmxlc3Mg
aXQga25vd3MgdGhhdCB0aGUgY2hlY2sgd2lsbCBzdWNjZWVkIGF0IHRoZSBsb29wIHByZS1oZWFk
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDUy
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgQWRkIHRlc3RzIGZvciBMSUNNIGhvaXN0aW5nIHRoaW5ncyB0aGF0IHdvdWxkIG9ubHkgZXhp
dCBpZiBob2lzdGVkLgorCisgICAgICAgICoganMvcmVncmVzcy9saWNtLWRyYWdvbnMtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2xpY20tZHJhZ29ucy1vdXQtb2Yt
Ym91bmRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9saWNtLWRy
YWdvbnMtb3V0LW9mLWJvdW5kcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2xp
Y20tZHJhZ29ucy1vdmVyZmxvdy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3Jl
Z3Jlc3MvbGljbS1kcmFnb25zLW92ZXJmbG93Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3Jl
Z3Jlc3MvbGljbS1kcmFnb25zLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2xpY20tZHJhZ29ucy1vdXQtb2YtYm91bmRzLmpzOiBBZGRlZC4KKyAgICAgICAg
KGZvbyk6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbGljbS1kcmFnb25zLW92
ZXJmbG93LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgICoganMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvbGljbS1kcmFnb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisKIDIw
MTYtMDUtMTggIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFN0
eWxlIHJlc29sdXRpb24gZm9yIGV4cGxpY2l0bHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgaXMgaW5l
ZmZpY2llbnQKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbGljbS1kcmFnb25zLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29u
cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xp
Y20tZHJhZ29ucy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAor
SlNSZWdyZXNzL2xpY20tZHJhZ29ucworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9saWNtLWRy
YWdvbnMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9saWNtLWRyYWdvbnMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy1vdXQtb2Yt
Ym91bmRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1Jl
Z3Jlc3MvbGljbS1kcmFnb25zLW91dC1vZi1ib3VuZHMKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvbGljbS1kcmFnb25zLW91dC1vZi1ib3VuZHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy1vdXQtb2YtYm91bmRzLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy1vdXQtb2YtYm91bmRz
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbGljbS1kcmFnb25zLW91dC1vZi1ib3VuZHMu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3Qu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9saWNtLWRyYWdvbnMtb3ZlcmZsb3ctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvbGljbS1kcmFnb25zLW92ZXJmbG93LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbGljbS1kcmFnb25zLW92ZXJm
bG93LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jl
c3MvbGljbS1kcmFnb25zLW92ZXJmbG93CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xpY20t
ZHJhZ29ucy1vdmVyZmxvdy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvbGljbS1kcmFnb25zLW92ZXJmbG93Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy1vdmVyZmxvdy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL2xpY20tZHJhZ29ucy1vdmVyZmxvdy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbGljbS1kcmFnb25zLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2xpY20tZHJhZ29ucy5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL2xpY20tZHJhZ29ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9saWNtLWRy
YWdvbnMtb3V0LW9mLWJvdW5kcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9saWNtLWRyYWdvbnMtb3V0LW9mLWJvdW5kcy5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2xpY20tZHJhZ29ucy1v
dXQtb2YtYm91bmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKK2Z1bmN0aW9u
IGZvbyhwLCBvLCBpKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaiA9IDA7
IGogPCAxMDAwOyArK2opIHsKKyAgICAgICAgaWYgKHApCisgICAgICAgICAgICByZXN1bHQgKz0g
b1tpXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBvID0gWzQyXTsKKwordmFy
IHJlc3VsdCA9IDA7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgcmVz
dWx0ICs9IGZvbyh0cnVlLCBvLCAwKTsKKyAgICByZXN1bHQgKz0gZm9vKGZhbHNlLCBvLCAxKTsK
K30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQorICAgIHJlc3VsdCArPSBmb28o
ZmFsc2UsIG8sIDEpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDIwMDAwOyArK2kpCisgICAgcmVz
dWx0ICs9IGZvbyh0cnVlLCBvLCAwKTsKKworaWYgKHJlc3VsdCAhPSA4OTMwMDAwMDApCisgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbGljbS1kcmFnb25zLW92ZXJmbG93LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2xpY20tZHJhZ29ucy1v
dmVyZmxvdy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2xpY20tZHJhZ29ucy1vdmVyZmxvdy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI4IEBACitmdW5jdGlvbiBmb28ocCwgYSwgYikgeworICAgIHZhciByZXN1bHQgPSAwOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgICAgIGlmIChwKQorICAgICAg
ICAgICAgcmVzdWx0ICs9IGEgKyBiOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQg
Kz0gYSAtIGI7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7
CisKK3ZhciByZXN1bHQgPSAwOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkgewor
ICAgIHJlc3VsdCArPSBmb28odHJ1ZSwgMSwgMik7CisgICAgcmVzdWx0ICs9IGZvbyhmYWxzZSwg
MjAwMDAwMDAwMCwgMjAwMDAwMDAwMCk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7
ICsraSkKKyAgICByZXN1bHQgKz0gZm9vKGZhbHNlLCAyMDAwMDAwMDAwLCAyMDAwMDAwMDAwKTsK
KworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQorICAgIHJlc3VsdCArPSBmb28odHJ1
ZSwgMSwgMik7CisKK2lmIChyZXN1bHQgIT0gMzMwMDAwMDApCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvbGljbS1kcmFnb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2xpY20tZHJhZ29ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2xpY20tZHJhZ29ucy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDMxIEBACitmdW5jdGlvbiBmb28ocCwgbykgeworICAgIHZhciByZXN1
bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgICAgIGlm
IChwKQorICAgICAgICAgICAgcmVzdWx0ICs9IG8uZjsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVzdWx0Kys7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZv
byk7CisKK3ZhciBvID0ge2Y6NDJ9OwordmFyIHAgPSB7fTsKKwordmFyIHJlc3VsdCA9IDA7CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgcmVzdWx0ICs9IGZvbyh0cnVl
LCBvKTsKKyAgICByZXN1bHQgKz0gZm9vKGZhbHNlLCBwKTsKK30KKworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKQorICAgIHJlc3VsdCArPSBmb28oZmFsc2UsIHApOworCitmb3IgKHZh
ciBpID0gMDsgaSA8IDMwMDAwOyArK2kpCisgICAgcmVzdWx0ICs9IGZvbyh0cnVlLCBvKTsKKwor
aWYgKHJlc3VsdCAhPSAxMzEzMDAwMDAwKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDog
IiArIHJlc3VsdDsK
</data>
<flag name="review"
          id="303446"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>