<?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>80779</bug_id>
          
          <creation_ts>2012-03-10 22:09:39 -0800</creation_ts>
          <short_desc>All DFG nodes should have a mutable set of flags</short_desc>
          <delta_ts>2012-03-12 02:50:55 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>80819</blocked>
    
    <blocked>80824</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>575639</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-10 22:09:39 -0800</bug_when>
    <thetext>Currently some nodes have a mutable set of arithmetic use flags, and all nodes have a mostly-immutable set of flags baked into their opcode.

Instead, the opcode should be a 16-bit quantity that does not include any flags, and separately, there should be a 16-bit flags that combines the current flags-that-are-in-the-opcode and the arithmetic flags.

This will facilitate richer backward flow analyses and should make manipulating the DFG IR generally easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575640</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-10 22:19:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/11026218&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575642</commentid>
    <comment_count>2</comment_count>
      <attachid>131205</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-10 22:32:35 -0800</bug_when>
    <thetext>Created attachment 131205
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575644</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-10 22:35:04 -0800</bug_when>
    <thetext>Attachment 131205 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGNode.h:114:  The parameter name &quot;flags&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 17 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>575645</commentid>
    <comment_count>4</comment_count>
      <attachid>131205</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-10 22:40:52 -0800</bug_when>
    <thetext>Comment on attachment 131205
the patch

Attachment 131205 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/11936304</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575646</commentid>
    <comment_count>5</comment_count>
      <attachid>131205</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-10 22:41:57 -0800</bug_when>
    <thetext>Comment on attachment 131205
the patch

Attachment 131205 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11939311</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575647</commentid>
    <comment_count>6</comment_count>
      <attachid>131206</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-10 22:45:24 -0800</bug_when>
    <thetext>Created attachment 131206
the patch

Ooops, forgot about 32_64.  This patch fixes that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575900</commentid>
    <comment_count>7</comment_count>
      <attachid>131273</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-11 19:45:57 -0700</bug_when>
    <thetext>Created attachment 131273
the patch

Just rebased it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575959</commentid>
    <comment_count>8</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-11 23:09:17 -0700</bug_when>
    <thetext>There is an awful lot of static_cast&lt;NodeType&gt;(node.op) in this patch.  It would be really good to make op private (&amp; probably should be called m_op), and change op() to be an accessor function returning a NodeType.  Would probably be nice to do the same for flags.  What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575960</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-11 23:14:13 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; There is an awful lot of static_cast&lt;NodeType&gt;(node.op) in this patch.  It would be really good to make op private (&amp; probably should be called m_op), and change op() to be an accessor function returning a NodeType.  Would probably be nice to do the same for flags.  What do you think?

I&apos;m with you!

I had avoided doing that because I had already racked up 50kb of changes.  I feared that privatizing Node::op will introduce even more changes.

I want to make that change and would be happy to do it in this patch.  But how would you feel about that being a follow-on patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575995</commentid>
    <comment_count>10</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-12 01:36:14 -0700</bug_when>
    <thetext>&gt; I want to make that change and would be happy to do it in this patch.  But how would you feel about that being a follow-on patch?

That works for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576033</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-12 02:50:55 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/110419</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131205</attachid>
            <date>2012-03-10 22:32:35 -0800</date>
            <delta_ts>2012-03-10 22:45:24 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>mutableflags_patch_1.diff</filename>
            <type>text/plain</type>
            <size>54708</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEwMzg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMSBA
QAorMjAxMi0wMy0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFsbCBERkcgbm9kZXMgc2hvdWxkIGhhdmUgYSBtdXRhYmxlIHNldCBvZiBmbGFncworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA3NzkKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzExMDI2MjE4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgR290IHJpZCBvZiBOb2RlSWQsIGFuZCBwbGFjZWQg
YWxsIG9mIHRoZSBmbGFncyB0aGF0IGRpc3Rpbmd1aXNoZWQgTm9kZUlkCisgICAgICAgIGZyb20g
Tm9kZVR5cGUgaW50byBhIHNlcGFyYXRlIE5vZGU6OmZsYWdzIGZpZWxkLiBDb21iaW5lZCB3aGF0
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIEFyaXRoTm9kZUZsYWdzIGludG8gTm9kZTo6ZmxhZ3Mu
CisgICAgICAgIAorICAgICAgICBJbiB0aGUgcHJvY2VzcyBvZiBkZWJ1Z2dpbmcsIEkgZm91bmQg
dGhhdCB0aGUgZGVidWcgc3VwcG9ydCBpbiB0aGUgdmlydHVhbAorICAgICAgICByZWdpc3RlciBh
bGxvY2F0b3Igd2FzIGxhY2tpbmcsIHNvIEkgaW1wcm92ZWQgaXQuIEkgYWxzbyByZWFsaXplZCB0
aGF0IHRoZQorICAgICAgICB2aXJ0dWFsIHJlZ2lzdGVyIGFsbG9jYXRvciB3YXMgYXNzdW1pbmcg
dGhhdCB0aGUgbm9kZXMgaW4gYSBiYXNpYyBibG9jayB3ZXJlCisgICAgICAgIGNvbnRpZ3VvdXMs
IHdoaWNoIGlzIG5vIGxvbmdlciB0aGUgY2FzZS4gU28gSSBmaXhlZCB0aGF0LiBUaGUgZml4IGFs
c28gbWFkZQorICAgICAgICBpdCBuYXR1cmFsIHRvIGhhdmUgbW9yZSBleHRyZW1lIGFzc2VydGlv
bnMsIHNvIEkgYWRkZWQgdGhlbS4gSSBzdXNwZWN0IHRoaXMKKyAgICAgICAgd2lsbCBtYWtlIGl0
IGVhc2llciB0byBjYXRjaCB2aXJ0dWFsIHJlZ2lzdGVyIGFsbG9jYXRpb24gYnVncyBpbiB0aGUg
ZnV0dXJlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBtb3N0bHkgcGVyZm9ybWFuY2UgbmV1
dHJhbDsgaWYgYW55dGhpbmcgaXQgbG9va3MgbGlrZSBhIHNsaWdodAorICAgICAgICBzcGVlZC11
cC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxp
c3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIGRmZy9ERkdBcml0aE5vZGVGbGFn
c0luZmVyZW5jZVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcml0aE5vZGVGbGFnc0lu
ZmVyZW5jZVBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZFRvR3JhcGgpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjptYWtlU2FmZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1ha2VEaXZTYWZlKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NGQVBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAgICAgICAgKiBk
ZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjplbmRJbmRl
eEZvclB1cmVDU0UpOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwdXJlQ1NFKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y2xvYmJlcnNXb3JsZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Q1NFUGhhc2U6OmltcHVyZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6
OnNldFJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6ZWxpbWluYXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAg
ICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtQmxvY2tDU0UpOgorICAgICAgICAoQ1NFUGhh
c2UpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6Om9wTmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAo
REZHKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjphcml0aE5vZGVGbGFnc0FzU3RyaW5nKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpub2RlVXNl
ZEFzTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKToK
KyAgICAgICAgKEpTQzo6REZHOjpub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKToKKyAgICAgICAg
KEpTQzo6REZHOjpub2RlTWF5T3ZlcmZsb3cpOgorICAgICAgICAoSlNDOjpERkc6Om5vZGVDYW5T
cGVjdWxhdGVJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpkZWZhdWx0RmxhZ3MpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6c2V0T3BBbmREZWZhdWx0RmxhZ3MpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Om11c3RHZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJpdGhOb2Rl
RmxhZ3MpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldEFyaXRoTm9kZUZsYWcpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Om1lcmdlQXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Omhhc1Jlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSW50
MzJSZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc051bWJlclJlc3VsdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSlNSZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0Jvb2xlYW5SZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzSnVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNCcmFuY2gpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmlzVGVybWluYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMSk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpjaGlsZDMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmZpcnN0Q2hpbGQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Om51bUNoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlOjp2b3RlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHU2NvcmVC
b2FyZC5oOgorICAgICAgICAoU2NvcmVCb2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6U2NvcmVC
b2FyZDo6flNjb3JlQm9hcmQpOgorICAgICAgICAoSlNDOjpERkc6OlNjb3JlQm9hcmQ6OmFzc2Vy
dENsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTY29yZUJvYXJkOjp1c2UpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OnVzZUNoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZTo6cnVuKToKKwogMjAxMi0w
My0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIExMSW50IHNo
b3VsZCBzdXBwb3J0IEpTVkFMVUU2NApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMTEwMzQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBAIFNFVChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0RyaXZlci5jcHAKICAgICBkZmcvREZHR3JhcGguY3BwCiAg
ICAgZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorICAgIGRmZy9ERkdOb2RlLmNwcAogICAgIGRmZy9E
RkdPU1JFbnRyeS5jcHAKICAgICBkZmcvREZHT1NSRXhpdC5jcHAKICAgICBkZmcvREZHT1NSRXhp
dENvbXBpbGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHJldmlzaW9uIDExMDM0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNiArMTY5LDcgQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlUmVmZXJlbmNlQmxv
Yi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVVc2UuaCBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTEwMzQ2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcgQEAgU09V
UkNFUyArPSBcCiAgICAgZGZnL0RGR0RyaXZlci5jcHAgXAogICAgIGRmZy9ERkdHcmFwaC5jcHAg
XAogICAgIGRmZy9ERkdKSVRDb21waWxlci5jcHAgXAorICAgIGRmZy9ERkdOb2RlLmNwcCBcCiAg
ICAgZGZnL0RGR09wZXJhdGlvbnMuY3BwIFwKICAgICBkZmcvREZHT1NSRW50cnkuY3BwIFwKICAg
ICBkZmcvREZHT1NSRXhpdC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDExMDM0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3
IEBACiAJCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJE
MTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8q
IENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTZENzI2
MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZl
Y3Rvci5jcHAgKi87IH07CisJCTBGMUQwODYxMTUwQzVBODYwMDc0RDEwOSAvKiBERkdOb2RlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUQwODVG
MTUwQzVBODAwMDc0RDEwOSAvKiBERkdOb2RlLmNwcCAqLzsgfTsKIAkJMEYyMUMyNjgxNEJFNUY2
ODAwQURDNjRCIC8qIEpJVERyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyMUMyNjYxNEJFNUY1RTAwQURDNjRCIC8qIEpJVERyaXZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdD
MTRCRTcyNzYwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3QTE0QkU3MjczMDBBREM2NEIgLyog
RXhlY3V0aW9uSGFybmVzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03ODMsNiArNzg0
LDcgQEAKIAkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBD
b21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9u
U2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5
QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYx
RDA4NUYxNTBDNUE4MDAwNzREMTA5IC8qIERGR05vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHTm9kZS5jcHA7IHBhdGggPSBkZmcvREZHTm9kZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjFDMjY2MTRCRTVGNUUwMEFEQzY0QiAvKiBK
SVREcml2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURHJpdmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAv
KiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvZGVTcGVjaWFsaXphdGlvbktpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyMUMyN0ExNEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0aW9uSGFybmVzcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjUwNCw2ICsyNTA2LDcgQEAKIAkJODZFQzlEQjMxMzI4REY0
NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJMEYxRDA4NUYxNTBDNUE4MDAwNzREMTA5IC8qIERGR05vZGUuY3BwICovLAogCQkJ
CTBGRkZDOTQ5MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdBcml0aE5vZGVGbGFnc0luZmVyZW5jZVBo
YXNlLmNwcCAqLywKIAkJCQkwRkZGQzk0QTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQXJpdGhOb2Rl
RmxhZ3NJbmZlcmVuY2VQaGFzZS5oICovLAogCQkJCTBGNjIwMTZEMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKQEAgLTM3MTUsNiArMzcxOCw3IEBACiAJCQkJMEZC
NTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NkExRDUxNTAwMUNGNDAwMjk5MkIxIC8qIEV4ZWN1dGlv
bkNvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEE0MzM3QkIxNTA2MjE4ODAwOTkxQzk1
IC8qIERGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEYxRDA4NjExNTBDNUE4NjAwNzREMTA5IC8qIERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyaXRoTm9kZUZsYWdzSW5mZXJl
bmNlUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5jcHAJKHJldmlzaW9uIDExMDM0NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDExICs4MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGlm
ICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
LSAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwotICAgICAgICBBcml0aE5vZGVGbGFncyBm
bGFncyA9IDA7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS5oYXNBcml0aE5vZGVGbGFncygp
KQotICAgICAgICAgICAgZmxhZ3MgPSBub2RlLnJhd0FyaXRoTm9kZUZsYWdzKCk7CisgICAgICAg
IE5vZGVUeXBlIG9wID0gc3RhdGljX2Nhc3Q8Tm9kZVR5cGU+KG5vZGUub3ApOworICAgICAgICBO
b2RlRmxhZ3MgZmxhZ3MgPSBub2RlLmZsYWdzOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2coIiAgICVzIEAldTogJXMg
IiwgR3JhcGg6Om9wTmFtZShvcCksIG1fY29tcGlsZUluZGV4LCBhcml0aE5vZGVGbGFnc0FzU3Ry
aW5nKGZsYWdzKSk7CkBAIC0xNzgsNyArMTc1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8
IE5vZGVOZWVkc05lZ1plcm87Ci0gICAgICAgICAgICBpZiAob3AgJiBOb2RlSGFzVmFyQXJncykg
eworICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykgewogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hp
bGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgr
KykKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgubV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF1dLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMTAzNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcyLDcg
KzU3Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKIAotICAgICAgICBpZiAob3AgJiBO
b2RlTXVzdEdlbmVyYXRlKQorICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0
R2VuZXJhdGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CiAgICAgICAg
IHJldHVybiByZXN1bHRJbmRleDsKICAgICB9CkBAIC01ODUsNyArNTg1LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHRJ
bmRleCk7CiAKLSAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkKKyAgICAgICAgaWYg
KGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQogICAgICAgICAgICAgbV9ncmFw
aC5yZWYocmVzdWx0SW5kZXgpOwogICAgICAgICByZXR1cm4gcmVzdWx0SW5kZXg7CiAgICAgfQpA
QCAtNTk2LDcgKzU5Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKIAotICAgICAgICBp
ZiAob3AgJiBOb2RlTXVzdEdlbmVyYXRlKQorICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAm
IE5vZGVNdXN0R2VuZXJhdGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7
CiAgICAgICAgIHJldHVybiByZXN1bHRJbmRleDsKICAgICB9CkBAIC02MTAsNyArNjEwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIG1fbnVtUGFzc2VkVmFyQXJncyA9IDA7CiAgICAg
ICAgIAotICAgICAgICBpZiAob3AgJiBOb2RlTXVzdEdlbmVyYXRlKQorICAgICAgICBpZiAoZGVm
YXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJl
ZihyZXN1bHRJbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHRJbmRleDsKICAgICB9CkBAIC02
OTksNyArNjk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAg
ICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygi
TWFraW5nICVzIEAldSBzYWZlIGF0IGJjIyV1IGJlY2F1c2Ugc2xvdy1jYXNlIGNvdW50ZXIgaXMg
YXQgJXUgYW5kIGV4aXQgcHJvZmlsZXMgc2F5ICVkLCAlZFxuIiwgR3JhcGg6Om9wTmFtZShtX2dy
YXBoW25vZGVJbmRleF0ub3ApLCBub2RlSW5kZXgsIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0
KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9m
aWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdyksIG1faW5saW5lU3RhY2tU
b3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVy
bykpOworICAgICAgICBkYXRhTG9nKCJNYWtpbmcgJXMgQCV1IHNhZmUgYXQgYmMjJXUgYmVjYXVz
ZSBzbG93LWNhc2UgY291bnRlciBpcyBhdCAldSBhbmQgZXhpdCBwcm9maWxlcyBzYXkgJWQsICVk
XG4iLCBHcmFwaDo6b3BOYW1lKHN0YXRpY19jYXN0PE5vZGVUeXBlPihtX2dyYXBoW25vZGVJbmRl
eF0ub3ApKSwgbm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJ
bmRleCktPm1fY291bnRlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0
U2l0ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQ
cm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKTsKICNlbmRp
ZgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChtX2dyYXBoW25vZGVJbmRleF0ub3ApIHsKQEAg
LTc1Miw3ICs3NTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsK
ICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAgICBkYXRhTG9n
KCJNYWtpbmcgJXMgQCV1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzcGVjaWFsIGZhc3QtY2FzZSBj
b3VudGVyIGlzIGF0ICV1IGFuZCBleGl0IHByb2ZpbGVzIHNheSAlZCwgJWRcbiIsIEdyYXBoOjpv
cE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCwg
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5zcGVjaWFsRmFzdENhc2VQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIsIG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93
KSwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgTmVnYXRpdmVaZXJvKSk7CisgICAgICAgIGRhdGFMb2coIk1ha2luZyAlcyBAJXUgc2Fm
ZSBhdCBiYyMldSBiZWNhdXNlIHNwZWNpYWwgZmFzdC1jYXNlIGNvdW50ZXIgaXMgYXQgJXUgYW5k
IGV4aXQgcHJvZmlsZXMgc2F5ICVkLCAlZFxuIiwgR3JhcGg6Om9wTmFtZShzdGF0aWNfY2FzdDxO
b2RlVHlwZT4obV9ncmFwaFtub2RlSW5kZXhdLm9wKSksIG5vZGVJbmRleCwgbV9jdXJyZW50SW5k
ZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+c3BlY2lhbEZhc3RDYXNlUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyLCBtX2lubGlu
ZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVy
ZmxvdyksIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJy
ZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICAvLyBG
SVhNRTogSXQgbWlnaHQgYmUgcG9zc2libGUgdG8gbWFrZSB0aGlzIG1vcmUgZ3JhbnVsYXIuIFRo
ZSBERkcgY2VydGFpbmx5IGNhbgpAQCAtMTI2Nyw3ICsxMjY3LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlTWluTWF4KGJvb2wgdQogICAgIH0KICAgICAKICAgICBpZiAoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPT0gMykgeyAvLyBNYXRoLm1pbih4LCB5KQotICAgICAgICBzZXQo
cmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChvcCwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBnZXQo
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSksIGdldChyZWdpc3Rlck9mZnNl
dCArIGFyZ3VtZW50VG9PcGVyYW5kKDIpKSkpOworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwg
YWRkVG9HcmFwaChvcCwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkp
LCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgyKSkpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMTI5NSw3ICsxMjk1LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBpZiAoIU1hY3JvQXNzZW1i
bGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRBYnMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYWRkVG9HcmFwaChBcml0aEFicywg
T3BJbmZvKE5vZGVVc2VCb3R0b20pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3Bl
cmFuZCgxKSkpOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYWRkVG9HcmFwaChBcml0
aEFicywgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKICAgICAg
ICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJy
ZW50SW5kZXgsIE92ZXJmbG93KSkKICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJn
ZUFyaXRoTm9kZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7CiAgICAgICAgIHNldChyZXN1bHRPcGVy
YW5kLCBub2RlSW5kZXgpOwpAQCAtMTU2MiwxMSArMTU2MiwxMSBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2ZJbnQz
MkNvbnN0YW50KG9wMikgJiAweDFmKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhZGRU
b0dyYXBoKEJpdFVSU2hpZnQsIG9wMSwgb3AyKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTYWZlKGFkZFRvR3JhcGgoVUludDMyVG9OdW1i
ZXIsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG1ha2VTYWZlKGFkZFRvR3JhcGgoVUludDMyVG9OdW1iZXIsIG9wMSkpOwogICAgICAg
ICAgICAgfSAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ2Fubm90IG9wdGltaXplIGF0IHRo
aXMgc3RhZ2U7IHNoaWZ0ICYgcG90ZW50aWFsbHkgcmVib3ggYXMgYSBkb3VibGUuCiAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChCaXRVUlNoaWZ0LCBvcDEsIG9wMik7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbWFrZVNhZmUoYWRkVG9HcmFwaChVSW50MzJUb051bWJlciwg
T3BJbmZvKE5vZGVVc2VCb3R0b20pLCByZXN1bHQpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBtYWtlU2FmZShhZGRUb0dyYXBoKFVJbnQzMlRvTnVtYmVyLCByZXN1bHQpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBy
ZXN1bHQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdXJzaGlmdCk7CkBAIC0xNTc3LDcg
KzE1NzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgIGNhc2Ugb3BfcHJlX2luYzogewogICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9
IGdldChzcmNEc3QpOwotICAgICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFw
aChBcml0aEFkZCwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcCwgb25lKCkpKSk7CisgICAgICAg
ICAgICBzZXQoc3JjRHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgb25lKCkp
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wcmVfaW5jKTsKICAgICAgICAgfQogCkBA
IC0xNTg3LDE0ICsxNTg3LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgIT0gc3JjRHN0KTsgLy8gUmVxdWlyZWQg
Zm9yIGFzc3VtcHRpb25zIHdlIG1ha2UgZHVyaW5nIE9TUi4KICAgICAgICAgICAgIE5vZGVJbmRl
eCBvcCA9IGdldChzcmNEc3QpOwogICAgICAgICAgICAgc2V0KHJlc3VsdCwgb3ApOwotICAgICAg
ICAgICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgT3BJbmZvKE5v
ZGVVc2VCb3R0b20pLCBvcCwgb25lKCkpKSk7CisgICAgICAgICAgICBzZXQoc3JjRHN0LCBtYWtl
U2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9wb3N0X2luYyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3ByZV9k
ZWM6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXQoc3JjRHN0KTsKLSAg
ICAgICAgICAgIHNldChzcmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIE9wSW5m
byhOb2RlVXNlQm90dG9tKSwgb3AsIG9uZSgpKSkpOworICAgICAgICAgICAgc2V0KHNyY0RzdCwg
bWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1Yiwgb3AsIG9uZSgpKSkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfcHJlX2RlYyk7CiAgICAgICAgIH0KIApAQCAtMTYwMyw3ICsxNjAzLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
dW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAg
ICAgICAgIE5vZGVJbmRleCBvcCA9IGdldChzcmNEc3QpOwogICAgICAgICAgICAgc2V0KHJlc3Vs
dCwgb3ApOwotICAgICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0
aFN1YiwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcCwgb25lKCkpKSk7CisgICAgICAgICAgICBz
ZXQoc3JjRHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBvcCwgb25lKCkpKSk7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9wb3N0X2RlYyk7CiAgICAgICAgIH0KIApAQCAtMTYx
MywyMiArMTYxMywyMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW29wMV0uaGFzTnVt
YmVyUmVzdWx0KCkgJiYgbV9ncmFwaFtvcDJdLmhhc051bWJlclJlc3VsdCgpKQotICAgICAgICAg
ICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRU
b0dyYXBoKEFyaXRoQWRkLCBPcEluZm8oTm9kZVVzZUJvdHRvbSksIG9wMSwgb3AyKSkpOworICAg
ICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2Fm
ZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNh
ZmUoYWRkVG9HcmFwaChWYWx1ZUFkZCwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcDEsIG9wMikp
KTsKKyAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
bWFrZVNhZmUoYWRkVG9HcmFwaChWYWx1ZUFkZCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9hZGQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9zdWI6IHsK
ICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIE9wSW5mbyhOb2RlVXNl
Qm90dG9tKSwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1Yiwgb3AxLCBvcDIpKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdWIpOwogICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBvcF9uZWdhdGU6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE5lZ2F0ZSwgT3BJ
bmZvKE5vZGVVc2VCb3R0b20pLCBvcDEpKSk7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE5lZ2F0ZSwgb3Ax
KSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmVnYXRlKTsKICAgICAgICAgfQogCkBA
IC0xNjM2LDIxICsxNjM2LDIxIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgIC8vIE11bHRpcGx5IHJlcXVpcmVzIHRoYXQgdGhlIGlucHV0cyBh
cmUgbm90IHRydW5jYXRlZCwgdW5mb3J0dW5hdGVseS4KICAgICAgICAgICAgIE5vZGVJbmRleCBv
cDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBO
b2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFk
ZFRvR3JhcGgoQXJpdGhNdWwsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIpKSk7Cisg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUo
YWRkVG9HcmFwaChBcml0aE11bCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9tdWwpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9tb2Q6IHsKICAgICAgICAg
ICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhNb2QsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwg
b3AxLCBvcDIpKSk7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE1vZCwgb3AxLCBvcDIpKSk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9tb2QpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9k
aXY6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIG1ha2VEaXZTYWZlKGFkZFRvR3JhcGgoQXJpdGhEaXYsIE9wSW5m
byhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICBzZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZURpdlNhZmUoYWRkVG9HcmFwaChBcml0aERpdiwg
b3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9kaXYpOwogICAgICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZp
c2lvbiAxMTAzNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKCFtX2dyYXBoW25vZGVJbmRleF0uc2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0g
ICAgICAgICAgICBkYXRhTG9nKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFw
aFtub2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAg
ICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShzdGF0aWNfY2FzdDxOb2RlVHlwZT4obV9ncmFwaFtu
b2RlSW5kZXhdLm9wKSksIG5vZGVJbmRleCk7CiAgICAgICAgICAgICBtX3N0YXRlLmR1bXAoV1RG
OjpkYXRhRmlsZSgpKTsKICAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMTAz
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHVuc2lnbmVkIGVu
ZEluZGV4Rm9yUHVyZUNTRSgpCiAgICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2xh
c3RTZWVuW21fZ3JhcGhbbV9jb21waWxlSW5kZXhdLm9wICYgTm9kZUlkTWFza107CisgICAgICAg
IHVuc2lnbmVkIHJlc3VsdCA9IG1fbGFzdFNlZW5bbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ub3Bd
OwogICAgICAgICBpZiAocmVzdWx0ID09IFVJTlRfTUFYKQogICAgICAgICAgICAgcmVzdWx0ID0g
MDsKICAgICAgICAgZWxzZQpAQCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKG5vZGUub3AgIT0gb3RoZXJOb2RlLm9wKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS5hcml0aE5vZGVGbGFnc0ZvckNvbXBh
cmUoKSAhPSBvdGhlck5vZGUuYXJpdGhOb2RlRmxhZ3NGb3JDb21wYXJlKCkpCisgICAgICAgICAg
ICBpZiAobm9kZS5hcml0aE5vZGVGbGFncygpICE9IG90aGVyTm9kZS5hcml0aE5vZGVGbGFncygp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBO
b2RlSW5kZXggb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQxKCkpOwpA
QCAtMTQ3LDkgKzE0Nyw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGVJ
bmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2Rl
SW5kZXhdOwotICAgICAgICBpZiAobm9kZS5vcCAmIE5vZGVDbG9iYmVyc1dvcmxkKQorICAgICAg
ICBpZiAobm9kZS5mbGFncyAmIE5vZGVDbG9iYmVyc1dvcmxkKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGlmICghKG5vZGUub3AgJiBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAg
ICAgaWYgKCEobm9kZS5mbGFncyAmIE5vZGVNaWdodENsb2JiZXIpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICAgICAgY2FzZSBWYWx1
ZUFkZDoKQEAgLTE4Miw3ICsxODIsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBOb2RlJiBv
dGhlck5vZGUgPSBtX2dyYXBoW2luZGV4XTsKICAgICAgICAgICAgIGlmIChub2RlLm9wID09IG90
aGVyTm9kZS5vcAotICAgICAgICAgICAgICAgICYmIG5vZGUuYXJpdGhOb2RlRmxhZ3NGb3JDb21w
YXJlKCkgPT0gb3RoZXJOb2RlLmFyaXRoTm9kZUZsYWdzRm9yQ29tcGFyZSgpKSB7CisgICAgICAg
ICAgICAgICAgJiYgbm9kZS5hcml0aE5vZGVGbGFncygpID09IG90aGVyTm9kZS5hcml0aE5vZGVG
bGFncygpKSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IG90aGVyQ2hpbGQgPSBjYW5vbmlj
YWxpemUob3RoZXJOb2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBpZiAob3RoZXJDaGls
ZCA9PSBOb05vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKQEAgLTUwNiw3
ICs1MDYsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIG5vZGUub3AgPSBQaGFudG9tOwor
ICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgICAgICBub2Rl
LnNldFJlZkNvdW50KDEpOwogICAgICAgICAKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3
aWxsIGVsaW1pbmF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCkBAIC01MjIsMTQgKzUy
MiwxNCBAQCBwcml2YXRlOgogICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBpbGVJ
bmRleF07CiAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgIEFT
U0VSVChub2RlLm11c3RHZW5lcmF0ZSgpKTsKLSAgICAgICAgbm9kZS5vcCA9IFBoYW50b207Cisg
ICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9kZSYgbm9kZSkKICAgICB7CiAgICAgICAgIGJvb2wg
c2hvdWxkR2VuZXJhdGUgPSBub2RlLnNob3VsZEdlbmVyYXRlKCk7CiAKLSAgICAgICAgaWYgKG5v
ZGUub3AgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICBpZiAobm9kZS5mbGFncyAmIE5vZGVI
YXNWYXJBcmdzKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5m
aXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxk
cmVuKCk7IGNoaWxkSWR4KyspCiAgICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbiht
X2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAg
ICAgIH0gZWxzZSB7CkBAIC01NDIsNyArNTQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICBkYXRhTG9nKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0ub3ApLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGRhdGFMb2coIiAg
ICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShzdGF0aWNfY2FzdDxOb2RlVHlwZT4obV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0ub3ApKSwgbV9jb21waWxlSW5kZXgpOwogI2VuZGlmCiAgICAgICAgIAog
ICAgICAgICAvLyBOT1RFOiB0aGVyZSBhcmUgc29tZSBub2RlcyB0aGF0IHdlIGRlbGliZXJhdGVs
eSBkb24ndCBDU0UgZXZlbiB0aG91Z2ggd2UKQEAgLTY2OSw3ICs2NjksNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fbGFzdFNl
ZW5bbm9kZS5vcCAmIE5vZGVJZE1hc2tdID0gbV9pbmRleEluQmxvY2s7CisgICAgICAgIG1fbGFz
dFNlZW5bbm9kZS5vcF0gPSBtX2luZGV4SW5CbG9jazsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2coIlxuIik7CiAjZW5kaWYKQEAgLTY3
OCw3ICs2NzgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxv
Y2smIGJsb2NrKQogICAgIHsKICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSAmYmxvY2s7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBMYXN0Tm9kZUlkOyArK2kpCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBMYXN0Tm9kZVR5cGU7ICsraSkKICAgICAgICAgICAgIG1f
bGFzdFNlZW5baV0gPSBVSU5UX01BWDsKIAogICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0g
MDsgbV9pbmRleEluQmxvY2sgPCBibG9jay5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKQEAg
LTY5MSw3ICs2OTEsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsK
ICAgICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsKICAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4g
bV9yZXBsYWNlbWVudHM7Ci0gICAgRml4ZWRBcnJheTx1bnNpZ25lZCwgTGFzdE5vZGVJZD4gbV9s
YXN0U2VlbjsKKyAgICBGaXhlZEFycmF5PHVuc2lnbmVkLCBMYXN0Tm9kZVR5cGU+IG1fbGFzdFNl
ZW47CiB9OwogCiB2b2lkIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDExMDM0NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7CiAKIGNvbnN0IGNoYXIg
KkdyYXBoOjpvcE5hbWUoTm9kZVR5cGUgb3ApCiB7Ci0gICAgcmV0dXJuIGRmZ09wTmFtZXNbb3Ag
JiBOb2RlSWRNYXNrXTsKKyAgICByZXR1cm4gZGZnT3BOYW1lc1tvcF07CiB9CiAKIGNvbnN0IGNo
YXIqIEdyYXBoOjpuYW1lT2ZWYXJpYWJsZUFjY2Vzc0RhdGEoVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEpCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBHcmFwaDo6ZHVtcENv
ZGVPcmlnaW4oTm9kZUluZGV4IG5vZAogdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUlu
ZGV4KQogewogICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgIE5vZGVUeXBlIG9w
ID0gbm9kZS5vcDsKKyAgICBOb2RlVHlwZSBvcCA9IHN0YXRpY19jYXN0PE5vZGVUeXBlPihub2Rl
Lm9wKTsKIAogICAgIHVuc2lnbmVkIHJlZkNvdW50ID0gbm9kZS5yZWZDb3VudCgpOwogICAgIGJv
b2wgc2tpcHBlZCA9ICFyZWZDb3VudDsKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEdyYXBoOjpk
dW1wKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgICAgIGRhdGFMb2coIi0iKTsKICAgICBkYXRh
TG9nKCI+XHQlcygiLCBvcE5hbWUob3ApKTsKICAgICBib29sIGhhc1ByaW50ZWQgPSBmYWxzZTsK
LSAgICBpZiAob3AgJiBOb2RlSGFzVmFyQXJncykgeworICAgIGlmIChub2RlLmZsYWdzICYgTm9k
ZUhhc1ZhckFyZ3MpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmly
c3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJl
bigpOyBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICBpZiAoaGFzUHJpbnRlZCkKICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIsICIpOwpAQCAtMTc1LDggKzE3NSw4IEBAIHZvaWQgR3JhcGg6OmR1
bXAoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICAgICAgaGFzUHJpbnRlZCA9ICEhbm9kZS5jaGls
ZDEoKTsKICAgICB9CiAKLSAgICBpZiAobm9kZS5oYXNBcml0aE5vZGVGbGFncygpKSB7Ci0gICAg
ICAgIGRhdGFMb2coIiVzJXMiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBhcml0aE5vZGVGbGFn
c0FzU3RyaW5nKG5vZGUucmF3QXJpdGhOb2RlRmxhZ3MoKSkpOworICAgIGlmIChub2RlLmFyaXRo
Tm9kZUZsYWdzKCkpIHsKKyAgICAgICAgZGF0YUxvZygiJXMlcyIsIGhhc1ByaW50ZWQgPyAiLCAi
IDogIiIsIGFyaXRoTm9kZUZsYWdzQXNTdHJpbmcobm9kZS5hcml0aE5vZGVGbGFncygpKSk7CiAg
ICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAobm9kZS5oYXNWYXJOdW1i
ZXIoKSkgewpAQCAtMjk0LDcgKzI5NCw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoKQogLy8gRklYTUU6
IENvbnZlcnQgdGhpcyB0byBiZSBpdGVyYXRpdmUsIG5vdCByZWN1cnNpdmUuCiAjZGVmaW5lIERP
X1RPX0NISUxEUkVOKG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgICAgIE5vZGUmIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChfbm9kZS5vcCAmIE5vZGVIYXNW
YXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChf
bm9kZS5mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLmZpcnN0Q2hp
bGQoKTsgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2Rl
LmZpcnN0Q2hpbGQoKSArIF9ub2RlLm51bUNoaWxkcmVuKCk7ICBcCiAgICAgICAgICAgICAgICAg
IF9jaGlsZElkeCsrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjb25zdCBj
aGFyKiBhcml0aE5vZGVGbGFnc0FzU3RyaW5nKE5vZGVGbGFncyBmbGFncykKK3sKKyAgICBmbGFn
cyAmPSBOb2RlQXJpdGhNYXNrOworICAgIAorICAgIGlmICghZmxhZ3MpCisgICAgICAgIHJldHVy
biAiPGVtcHR5PiI7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IHNpemUgPSA2NDsKKyAgICBzdGF0
aWMgY2hhciBkZXNjcmlwdGlvbltzaXplXTsKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRlcjxjaGFy
PiBwdHIoZGVzY3JpcHRpb24sIHNpemUpOworICAgIAorICAgIGJvb2wgaGFzUHJpbnRlZCA9IGZh
bHNlOworICAgIAorICAgIGlmIChmbGFncyAmIE5vZGVVc2VkQXNOdW1iZXIpIHsKKyAgICAgICAg
cHRyLnN0cmNhdCgiVXNlZEFzTnVtIik7CisgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOworICAg
IH0KKyAgICAKKyAgICBpZiAoZmxhZ3MgJiBOb2RlTmVlZHNOZWdaZXJvKSB7CisgICAgICAgIGlm
IChoYXNQcmludGVkKQorICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOworICAgICAgICBwdHIu
c3RyY2F0KCJOZWVkc05lZ1plcm8iKTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAg
fQorICAgIAorICAgIGlmIChmbGFncyAmIE5vZGVNYXlPdmVyZmxvdykgeworICAgICAgICBpZiAo
aGFzUHJpbnRlZCkKKyAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKKyAgICAgICAgcHRyLnN0
cmNhdCgiTWF5T3ZlcmZsb3ciKTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgfQor
ICAgIAorICAgIGlmIChmbGFncyAmIE5vZGVNYXlOZWdaZXJvKSB7CisgICAgICAgIGlmIChoYXNQ
cmludGVkKQorICAgICAgICAgICAgcHRyLnN0cmNhdCgifCIpOworICAgICAgICBwdHIuc3RyY2F0
KCJNYXlOZWdaZXJvIik7CisgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOworICAgIH0KKyAgICAK
KyAgICAqcHRyKysgPSAwOworICAgIAorICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDExMDM0NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nywz
NiArNTcsNTAgQEAgc3RydWN0IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhIHsKICAgICB9CiB9Owog
Ci10eXBlZGVmIHVuc2lnbmVkIEFyaXRoTm9kZUZsYWdzOwotI2RlZmluZSBOb2RlVXNlQm90dG9t
ICAgICAgMHgwMAotI2RlZmluZSBOb2RlVXNlZEFzTnVtYmVyICAgMHgwMQotI2RlZmluZSBOb2Rl
TmVlZHNOZWdaZXJvICAgMHgwMgotI2RlZmluZSBOb2RlVXNlZEFzTWFzayAgICAgMHgwMwotI2Rl
ZmluZSBOb2RlTWF5T3ZlcmZsb3cgICAgMHgwNAotI2RlZmluZSBOb2RlTWF5TmVnWmVybyAgICAg
MHgwOAotI2RlZmluZSBOb2RlQmVoYXZpb3JNYXNrICAgMHgwYworLy8gRW50cmllcyBpbiB0aGUg
Tm9kZVR5cGUgZW51bSAoYmVsb3cpIGFyZSBjb21wb3NlZCBvZiBhbiBpZCwgYSByZXN1bHQgdHlw
ZSAocG9zc2libHkgbm9uZSkKKy8vIGFuZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpdmUgZmxh
Z3MgKG11c3QgZ2VuZXJhdGUsIGlzIGNvbnN0YW50LCBldGMpLgorI2RlZmluZSBOb2RlUmVzdWx0
TWFzayAgICAgICAweEYKKyNkZWZpbmUgTm9kZVJlc3VsdEpTICAgICAgICAgMHgxCisjZGVmaW5l
IE5vZGVSZXN1bHROdW1iZXIgICAgIDB4MgorI2RlZmluZSBOb2RlUmVzdWx0SW50MzIgICAgICAw
eDMKKyNkZWZpbmUgTm9kZVJlc3VsdEJvb2xlYW4gICAgMHg0CisjZGVmaW5lIE5vZGVSZXN1bHRT
dG9yYWdlICAgIDB4NQorI2RlZmluZSBOb2RlTXVzdEdlbmVyYXRlICAgIDB4MTAgLy8gc2V0IG9u
IG5vZGVzIHRoYXQgaGF2ZSBzaWRlIGVmZmVjdHMsIGFuZCBtYXkgbm90IHRyaXZpYWxseSBiZSBy
ZW1vdmVkIGJ5IERDRS4KKyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAgICAweDIwCisjZGVmaW5l
IE5vZGVDbG9iYmVyc1dvcmxkICAgMHg0MAorI2RlZmluZSBOb2RlTWlnaHRDbG9iYmVyICAgIDB4
ODAKKyNkZWZpbmUgTm9kZUFyaXRoTWFzayAgICAgIDB4RjAwCisjZGVmaW5lIE5vZGVVc2VCb3R0
b20gICAgICAweDAwMAorI2RlZmluZSBOb2RlVXNlZEFzTnVtYmVyICAgMHgxMDAKKyNkZWZpbmUg
Tm9kZU5lZWRzTmVnWmVybyAgIDB4MjAwCisjZGVmaW5lIE5vZGVVc2VkQXNNYXNrICAgICAweDMw
MAorI2RlZmluZSBOb2RlTWF5T3ZlcmZsb3cgICAgMHg0MDAKKyNkZWZpbmUgTm9kZU1heU5lZ1pl
cm8gICAgIDB4ODAwCisjZGVmaW5lIE5vZGVCZWhhdmlvck1hc2sgICAweGMwMAorCit0eXBlZGVm
IHVpbnQxNl90IE5vZGVGbGFnczsKIAotc3RhdGljIGlubGluZSBib29sIG5vZGVVc2VkQXNOdW1i
ZXIoQXJpdGhOb2RlRmxhZ3MgZmxhZ3MpCitzdGF0aWMgaW5saW5lIGJvb2wgbm9kZVVzZWRBc051
bWJlcihOb2RlRmxhZ3MgZmxhZ3MpCiB7CiAgICAgcmV0dXJuICEhKGZsYWdzICYgTm9kZVVzZWRB
c051bWJlcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2Vy
KEFyaXRoTm9kZUZsYWdzIGZsYWdzKQorc3RhdGljIGlubGluZSBib29sIG5vZGVDYW5UcnVuY2F0
ZUludGVnZXIoTm9kZUZsYWdzIGZsYWdzKQogewogICAgIHJldHVybiAhbm9kZVVzZWRBc051bWJl
cihmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuSWdub3JlTmVnYXRpdmVa
ZXJvKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQorc3RhdGljIGlubGluZSBib29sIG5vZGVDYW5JZ25v
cmVOZWdhdGl2ZVplcm8oTm9kZUZsYWdzIGZsYWdzKQogewogICAgIHJldHVybiAhKGZsYWdzICYg
Tm9kZU5lZWRzTmVnWmVybyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBub2RlTWF5T3ZlcmZs
b3coQXJpdGhOb2RlRmxhZ3MgZmxhZ3MpCitzdGF0aWMgaW5saW5lIGJvb2wgbm9kZU1heU92ZXJm
bG93KE5vZGVGbGFncyBmbGFncykKIHsKICAgICByZXR1cm4gISEoZmxhZ3MgJiBOb2RlTWF5T3Zl
cmZsb3cpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIo
QXJpdGhOb2RlRmxhZ3MgZmxhZ3MpCitzdGF0aWMgaW5saW5lIGJvb2wgbm9kZUNhblNwZWN1bGF0
ZUludGVnZXIoTm9kZUZsYWdzIGZsYWdzKQogewogICAgIGlmIChmbGFncyAmIE5vZGVNYXlPdmVy
ZmxvdykKICAgICAgICAgcmV0dXJuICFub2RlVXNlZEFzTnVtYmVyKGZsYWdzKTsKQEAgLTk3LDY3
ICsxMTEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbm9kZUNhblNwZWN1bGF0ZUludGVnCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2RlRmxh
Z3NBc1N0cmluZyhBcml0aE5vZGVGbGFncyBmbGFncykKLXsKLSAgICBpZiAoIWZsYWdzKQotICAg
ICAgICByZXR1cm4gIjxlbXB0eT4iOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBzaXplID0gNjQ7
Ci0gICAgc3RhdGljIGNoYXIgZGVzY3JpcHRpb25bc2l6ZV07Ci0gICAgQm91bmRzQ2hlY2tlZFBv
aW50ZXI8Y2hhcj4gcHRyKGRlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAKLSAgICBib29sIGhhc1By
aW50ZWQgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoZmxhZ3MgJiBOb2RlVXNlZEFzTnVtYmVyKSB7
Ci0gICAgICAgIHB0ci5zdHJjYXQoIlVzZWRBc051bSIpOwotICAgICAgICBoYXNQcmludGVkID0g
dHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGZsYWdzICYgTm9kZU5lZWRzTmVnWmVybykgewot
ICAgICAgICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAg
ICAgICAgcHRyLnN0cmNhdCgiTmVlZHNOZWdaZXJvIik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0
cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5T3ZlcmZsb3cpIHsKLSAg
ICAgICAgaWYgKGhhc1ByaW50ZWQpCi0gICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAg
ICAgIHB0ci5zdHJjYXQoIk1heU92ZXJmbG93Iik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVl
OwotICAgIH0KLSAgICAKLSAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5TmVnWmVybykgewotICAgICAg
ICBpZiAoaGFzUHJpbnRlZCkKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAg
cHRyLnN0cmNhdCgiTWF5TmVnWmVybyIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgCi0gICAgKnB0cisrID0gMDsKLSAgICAKLSAgICByZXR1cm4gZGVzY3JpcHRpb247
Ci19Ci0KLS8vIEVudHJpZXMgaW4gdGhlIE5vZGVUeXBlIGVudW0gKGJlbG93KSBhcmUgY29tcG9z
ZWQgb2YgYW4gaWQsIGEgcmVzdWx0IHR5cGUgKHBvc3NpYmx5IG5vbmUpCi0vLyBhbmQgc29tZSBh
ZGRpdGlvbmFsIGluZm9ybWF0aXZlIGZsYWdzIChtdXN0IGdlbmVyYXRlLCBpcyBjb25zdGFudCwg
ZXRjKS4KLSNkZWZpbmUgTm9kZUlkTWFzayAgICAgICAgICAgMHhGRkYKLSNkZWZpbmUgTm9kZVJl
c3VsdE1hc2sgICAgICAweEYwMDAKLSNkZWZpbmUgTm9kZU11c3RHZW5lcmF0ZSAgIDB4MTAwMDAg
Ly8gc2V0IG9uIG5vZGVzIHRoYXQgaGF2ZSBzaWRlIGVmZmVjdHMsIGFuZCBtYXkgbm90IHRyaXZp
YWxseSBiZSByZW1vdmVkIGJ5IERDRS4KLSNkZWZpbmUgTm9kZUlzQ29uc3RhbnQgICAgIDB4MjAw
MDAKLSNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgIDB4NDAwMDAKLSNkZWZpbmUgTm9kZUlzQnJh
bmNoICAgICAgIDB4ODAwMDAKLSNkZWZpbmUgTm9kZUlzVGVybWluYWwgICAgMHgxMDAwMDAKLSNk
ZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAgMHgyMDAwMDAKLSNkZWZpbmUgTm9kZUNsb2JiZXJzV29y
bGQgMHg0MDAwMDAKLSNkZWZpbmUgTm9kZU1pZ2h0Q2xvYmJlciAgMHg4MDAwMDAKLQotLy8gVGhl
c2UgdmFsdWVzIHJlY29yZCB0aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG5vZGUgKGFzIGNoZWNrZWQg
YnkgTm9kZVJlc3VsdE1hc2ssIGFib3ZlKSwgMCBmb3Igbm8gcmVzdWx0LgotI2RlZmluZSBOb2Rl
UmVzdWx0SlMgICAgICAgIDB4MTAwMAotI2RlZmluZSBOb2RlUmVzdWx0TnVtYmVyICAgIDB4MjAw
MAotI2RlZmluZSBOb2RlUmVzdWx0SW50MzIgICAgIDB4MzAwMAotI2RlZmluZSBOb2RlUmVzdWx0
Qm9vbGVhbiAgIDB4NDAwMAotI2RlZmluZSBOb2RlUmVzdWx0U3RvcmFnZSAgIDB4NTAwMAorY29u
c3QgY2hhciogYXJpdGhOb2RlRmxhZ3NBc1N0cmluZyhOb2RlRmxhZ3MgZmxhZ3MpOwogCiAvLyBU
aGlzIG1hY3JvIGRlZmluZXMgYSBzZXQgb2YgaW5mb3JtYXRpb24gYWJvdXQgYWxsIGtub3duIG5v
ZGUgdHlwZXMsIHVzZWQgdG8gcG9wdWxhdGUgTm9kZUlkLCBOb2RlVHlwZSBiZWxvdy4KICNkZWZp
bmUgRk9SX0VBQ0hfREZHX09QKG1hY3JvKSBcCkBAIC0zMDQsMTEgKzI1OCwxMSBAQCBzdGF0aWMg
aW5saW5lIGNvbnN0IGNoYXIqIGFyaXRoTm9kZUZsYWdzCiAgICAgbWFjcm8oTmV3RnVuY3Rpb25F
eHByZXNzaW9uLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCiAgICAgLyogQmxvY2sgdGVybWluYWxz
LiAqL1wKLSAgICBtYWNybyhKdW1wLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwg
fCBOb2RlSXNKdW1wKSBcCi0gICAgbWFjcm8oQnJhbmNoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUlzVGVybWluYWwgfCBOb2RlSXNCcmFuY2gpIFwKLSAgICBtYWNybyhSZXR1cm4sIE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlSXNUZXJtaW5hbCkgXAotICAgIG1hY3JvKFRocm93LCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUlzVGVybWluYWwpIFwKLSAgICBtYWNybyhUaHJvd1JlZmVyZW5jZUVycm9y
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwpIFwKKyAgICBtYWNybyhKdW1wLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQnJhbmNoLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CisgICAgbWFjcm8oUmV0dXJuLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVGhyb3cs
IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhUaHJvd1JlZmVyZW5jZUVycm9yLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIFRoaXMgaXMgYSBwc2V1ZG8tdGVybWluYWwu
IEl0IG1lYW5zIHRoYXQgZXhlY3V0aW9uIHNob3VsZCBmYWxsIG91dCBvZiBERkcgYXQgKi9cCiAg
ICAgLyogdGhpcyBwb2ludCwgYnV0IGV4ZWN1dGlvbiBkb2VzIGNvbnRpbnVlIGluIHRoZSBiYXNp
YyBibG9jayAtIGp1c3QgaW4gYSAqL1wKQEAgLTMxNywyMCArMjcxLDI1IEBAIHN0YXRpYyBpbmxp
bmUgY29uc3QgY2hhciogYXJpdGhOb2RlRmxhZ3MKIAogLy8gVGhpcyBlbnVtIGdlbmVyYXRlcyBh
IG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMsCiAvLyBhbmQg
aXMgdXNlZCBieSB0aGUgc3Vic2VxdWVudCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBpZCAoYXMgYWNj
ZXNzZWQgdmlhIHRoZSBOb2RlSWRNYXNrKS4KLWVudW0gTm9kZUlkIHsKLSNkZWZpbmUgREZHX09Q
X0VOVU0ob3Bjb2RlLCBmbGFncykgb3Bjb2RlIyNfaWQsCitlbnVtIE5vZGVUeXBlIHsKKyNkZWZp
bmUgREZHX09QX0VOVU0ob3Bjb2RlLCBmbGFncykgb3Bjb2RlLAogICAgIEZPUl9FQUNIX0RGR19P
UChERkdfT1BfRU5VTSkKICN1bmRlZiBERkdfT1BfRU5VTQotICAgIExhc3ROb2RlSWQKKyAgICBM
YXN0Tm9kZVR5cGUKIH07CiAKLS8vIEVudHJpZXMgaW4gdGhpcyBlbnVtIGRlc2NyaWJlIGFsbCBO
b2RlIHR5cGVzLgotLy8gVGhlIGVudW0gdmFsdWUgY29udGFpbnMgYSBtb25vdG9uaWNhbGx5IGlu
Y3JlYXNpbmcgaWQsIGEgcmVzdWx0IHR5cGUsIGFuZCBhZGRpdGlvbmFsIGZsYWdzLgotZW51bSBO
b2RlVHlwZSB7Ci0jZGVmaW5lIERGR19PUF9FTlVNKG9wY29kZSwgZmxhZ3MpIG9wY29kZSA9IG9w
Y29kZSMjX2lkIHwgKGZsYWdzKSwKKy8vIFNwZWNpZmllcyB0aGUgZGVmYXVsdCBmbGFncyBmb3Ig
ZWFjaCBub2RlLgoraW5saW5lIE5vZGVGbGFncyBkZWZhdWx0RmxhZ3MoTm9kZVR5cGUgb3ApCit7
CisgICAgc3dpdGNoIChvcCkgeworI2RlZmluZSBERkdfT1BfRU5VTShvcGNvZGUsIGZsYWdzKSBj
YXNlIG9wY29kZTogcmV0dXJuIGZsYWdzOwogICAgIEZPUl9FQUNIX0RGR19PUChERkdfT1BfRU5V
TSkKICN1bmRlZiBERkdfT1BfRU5VTQotfTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQogCiAvLyBUaGlzIHR5
cGUgdXNlZCBpbiBwYXNzaW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVj
dG9yOwogLy8gZGlzdGluZ3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBp
bmRleCBpbnRvIGEgQ29kZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0gCkBAIC0zNTMsMzQgKzMxMiwz
MiBAQCBzdHJ1Y3QgTm9kZSB7CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8g
MyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4
IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKLSAgICAgICAgOiBv
cChvcCkKLSAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisgICAgICAgIDogY29kZU9y
aWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKE5vZGVSZWZlcmVuY2VCbG9iOjpG
aXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3Rl
cihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAg
ICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAgewotICAgICAgICBBU1NFUlQoIShv
cCAmIE5vZGVIYXNWYXJBcmdzKSk7Ci0gICAgICAgIEFTU0VSVCghaGFzQXJpdGhOb2RlRmxhZ3Mo
KSk7CisgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKKyAgICAgICAgQVNTRVJUKCEo
ZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5v
ZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCBhbiBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9k
ZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBOb2RlSW5k
ZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXgg
Y2hpbGQzID0gTm9Ob2RlKQotICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGNvZGVPcmlnaW4o
Y29kZU9yaWdpbikKKyAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwg
Y2hpbGRyZW4oTm9kZVJlZmVyZW5jZUJsb2I6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQz
KQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAg
ICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbS5tX3ZhbHVlKQog
ICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKICAgICB7Ci0gICAgICAgIEFTU0VS
VCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mo
b3ApOworICAgICAgICBBU1NFUlQoIShmbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgfQog
CiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBp
bW1lZGlhdGUgdmFsdWVzLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2Rl
LCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQot
ICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAg
ICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oTm9kZVJlZmVy
ZW5jZUJsb2I6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmly
dHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3Vu
dCgwKQpAQCAtMzg4LDEzICszNDUsMTMgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fb3BJ
bmZvMihzYWZlQ2FzdDx1bnNpZ25lZD4oaW1tMi5tX3ZhbHVlKSkKICAgICAgICAgLCBtX3ByZWRp
Y3Rpb24oUHJlZGljdE5vbmUpCiAgICAgewotICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNW
YXJBcmdzKSk7CisgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKKyAgICAgICAgQVNT
RVJUKCEoZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAgIH0KICAgICAKICAgICAvLyBDb25z
dHJ1Y3QgYSBub2RlIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YgY2hpbGRyZW4gYW5kIHR3byBp
bW1lZGlhdGUgdmFsdWVzLgogICAgIE5vZGUoVmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIHVuc2lnbmVkIGZpcnN0
Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVuKQotICAgICAgICA6IG9wKG9wKQotICAgICAgICAs
IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4p
CiAgICAgICAgICwgY2hpbGRyZW4oTm9kZVJlZmVyZW5jZUJsb2I6OlZhcmlhYmxlLCBmaXJzdENo
aWxkLCBudW1DaGlsZHJlbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKQEAgLTQwMiwxMiArMzU5LDE5
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX29wSW5mbzIoc2FmZUNhc3Q8dW5zaWduZWQ+
KGltbTIubV92YWx1ZSkpCiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAgICBzZXRPcEFu
ZERlZmF1bHRGbGFncyhvcCk7CisgICAgICAgIEFTU0VSVChmbGFncyAmIE5vZGVIYXNWYXJBcmdz
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRPcEFuZERlZmF1bHRGbGFncyhOb2RlVHlwZSBv
cCkKKyAgICB7CisgICAgICAgIHRoaXMtPm9wID0gb3A7CisgICAgICAgIGZsYWdzID0gZGVmYXVs
dEZsYWdzKG9wKTsKICAgICB9CiAKICAgICBib29sIG11c3RHZW5lcmF0ZSgpCiAgICAgewotICAg
ICAgICByZXR1cm4gb3AgJiBOb2RlTXVzdEdlbmVyYXRlOworICAgICAgICByZXR1cm4gZmxhZ3Mg
JiBOb2RlTXVzdEdlbmVyYXRlOwogICAgIH0KIAogICAgIGJvb2wgaXNDb25zdGFudCgpCkBAIC01
NDYsNDQgKzUxMCwzMiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgQXJpdGhOb2RlRmxhZ3MgcmF3QXJpdGhOb2RlRmxhZ3MoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGhhc0FyaXRoTm9kZUZsYWdzKCkpOwotICAgICAgICByZXR1cm4gbV9vcEluZm87Ci0gICAg
fQotICAgIAogICAgIC8vIFRoaXMgY29ycmVjdHMgdGhlIGFyaXRobWV0aWMgbm9kZSBmbGFncywg
c28gdGhhdCBpcnJlbGV2YW50IGJpdHMgYXJlCiAgICAgLy8gaWdub3JlZC4gSW4gcGFydGljdWxh
ciwgYW55dGhpbmcgb3RoZXIgdGhhbiBBcml0aE11bCBkb2VzIG5vdCBuZWVkCiAgICAgLy8gdG8g
a25vdyBpZiBpdCBjYW4gc3BlY3VsYXRlIG9uIG5lZ2F0aXZlIHplcm8uCi0gICAgQXJpdGhOb2Rl
RmxhZ3MgYXJpdGhOb2RlRmxhZ3MoKQorICAgIE5vZGVGbGFncyBhcml0aE5vZGVGbGFncygpCiAg
ICAgewotICAgICAgICBBcml0aE5vZGVGbGFncyByZXN1bHQgPSByYXdBcml0aE5vZGVGbGFncygp
OworICAgICAgICBOb2RlRmxhZ3MgcmVzdWx0ID0gZmxhZ3MgJiBOb2RlQXJpdGhNYXNrOwogICAg
ICAgICBpZiAob3AgPT0gQXJpdGhNdWwpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICByZXR1cm4gcmVzdWx0ICYgfk5vZGVOZWVkc05lZ1plcm87CiAgICAgfQogICAgIAotICAg
IEFyaXRoTm9kZUZsYWdzIGFyaXRoTm9kZUZsYWdzRm9yQ29tcGFyZSgpCisgICAgdm9pZCBzZXRB
cml0aE5vZGVGbGFnKE5vZGVGbGFncyBuZXdGbGFncykKICAgICB7Ci0gICAgICAgIGlmIChoYXNB
cml0aE5vZGVGbGFncygpKQotICAgICAgICAgICAgcmV0dXJuIGFyaXRoTm9kZUZsYWdzKCk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldEFyaXRoTm9kZUZsYWco
QXJpdGhOb2RlRmxhZ3MgZmxhZ3MpCi0gICAgewotICAgICAgICBBU1NFUlQoaGFzQXJpdGhOb2Rl
RmxhZ3MoKSk7Ci0gICAgICAgIG1fb3BJbmZvID0gZmxhZ3M7CisgICAgICAgIEFTU0VSVCghKG5l
d0ZsYWdzICYgfk5vZGVBcml0aE1hc2spKTsKKyAgICAgICAgCisgICAgICAgIGZsYWdzICY9IH5O
b2RlQXJpdGhNYXNrOworICAgICAgICBmbGFncyB8PSBuZXdGbGFnczsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBtZXJnZUFyaXRoTm9kZUZsYWdzKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQorICAgIGJv
b2wgbWVyZ2VBcml0aE5vZGVGbGFncyhOb2RlRmxhZ3MgbmV3RmxhZ3MpCiAgICAgewotICAgICAg
ICBpZiAoIWhhc0FyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIEFyaXRoTm9kZUZsYWdzIG5ld0ZsYWdzID0gbV9vcEluZm8gfCBmbGFnczsKLSAgICAg
ICAgaWYgKG5ld0ZsYWdzID09IG1fb3BJbmZvKQorICAgICAgICBBU1NFUlQoIShuZXdGbGFncyAm
IH5Ob2RlQXJpdGhNYXNrKSk7CisgICAgICAgIG5ld0ZsYWdzID0gZmxhZ3MgfCBuZXdGbGFnczsK
KyAgICAgICAgaWYgKG5ld0ZsYWdzID09IGZsYWdzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBtX29wSW5mbyA9IG5ld0ZsYWdzOworICAgICAgICBmbGFncyA9IG5ld0ZsYWdz
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC02MzksNDIgKzU5MSw1MSBA
QCBzdHJ1Y3QgTm9kZSB7CiAKICAgICBib29sIGhhc1Jlc3VsdCgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gb3AgJiBOb2RlUmVzdWx0TWFzazsKKyAgICAgICAgcmV0dXJuIGZsYWdzICYgTm9kZVJl
c3VsdE1hc2s7CiAgICAgfQogCiAgICAgYm9vbCBoYXNJbnQzMlJlc3VsdCgpCiAgICAgewotICAg
ICAgICByZXR1cm4gKG9wICYgTm9kZVJlc3VsdE1hc2spID09IE5vZGVSZXN1bHRJbnQzMjsKKyAg
ICAgICAgcmV0dXJuIChmbGFncyAmIE5vZGVSZXN1bHRNYXNrKSA9PSBOb2RlUmVzdWx0SW50MzI7
CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzTnVtYmVyUmVzdWx0KCkKICAgICB7Ci0gICAgICAg
IHJldHVybiAob3AgJiBOb2RlUmVzdWx0TWFzaykgPT0gTm9kZVJlc3VsdE51bWJlcjsKKyAgICAg
ICAgcmV0dXJuIChmbGFncyAmIE5vZGVSZXN1bHRNYXNrKSA9PSBOb2RlUmVzdWx0TnVtYmVyOwog
ICAgIH0KICAgICAKICAgICBib29sIGhhc0pTUmVzdWx0KCkKICAgICB7Ci0gICAgICAgIHJldHVy
biAob3AgJiBOb2RlUmVzdWx0TWFzaykgPT0gTm9kZVJlc3VsdEpTOworICAgICAgICByZXR1cm4g
KGZsYWdzICYgTm9kZVJlc3VsdE1hc2spID09IE5vZGVSZXN1bHRKUzsKICAgICB9CiAgICAgCiAg
ICAgYm9vbCBoYXNCb29sZWFuUmVzdWx0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiAob3AgJiBO
b2RlUmVzdWx0TWFzaykgPT0gTm9kZVJlc3VsdEJvb2xlYW47CisgICAgICAgIHJldHVybiAoZmxh
Z3MgJiBOb2RlUmVzdWx0TWFzaykgPT0gTm9kZVJlc3VsdEJvb2xlYW47CiAgICAgfQogCiAgICAg
Ym9vbCBpc0p1bXAoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wICYgTm9kZUlzSnVtcDsKKyAg
ICAgICAgcmV0dXJuIG9wID09IEp1bXA7CiAgICAgfQogCiAgICAgYm9vbCBpc0JyYW5jaCgpCiAg
ICAgewotICAgICAgICByZXR1cm4gb3AgJiBOb2RlSXNCcmFuY2g7CisgICAgICAgIHJldHVybiBv
cCA9PSBCcmFuY2g7CiAgICAgfQogCiAgICAgYm9vbCBpc1Rlcm1pbmFsKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBvcCAmIE5vZGVJc1Rlcm1pbmFsOworICAgICAgICBzd2l0Y2ggKG9wKSB7Cisg
ICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgUmV0
dXJuOgorICAgICAgICBjYXNlIFRocm93OgorICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJy
b3I6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHVuc2lnbmVkIHRha2Vu
Qnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkKQEAgLTg3MSw3ICs4MzIsNyBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgCiAgICAgTm9kZVVzZSBjaGlsZDEoKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KCEob3AgJiBOb2RlSGFzVmFyQXJncykpOworICAgICAgICBBU1NFUlQoIShmbGFncyAmIE5vZGVI
YXNWYXJBcmdzKSk7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDEoKTsKICAgICB9CiAg
ICAgCkBAIC04ODUsMjUgKzg0NiwyNSBAQCBzdHJ1Y3QgTm9kZSB7CiAKICAgICBOb2RlVXNlIGNo
aWxkMigpCiAgICAgewotICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7Cisg
ICAgICAgIEFTU0VSVCghKGZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgcmV0dXJu
IGNoaWxkcmVuLmNoaWxkMigpOwogICAgIH0KIAogICAgIE5vZGVVc2UgY2hpbGQzKCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgQVNTRVJU
KCEoZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hp
bGQzKCk7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQoKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3MpOworICAgICAgICBBU1NFUlQoZmxhZ3Mg
JiBOb2RlSGFzVmFyQXJncyk7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5maXJzdENoaWxkKCk7
CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuKCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChvcCAmIE5vZGVIYXNWYXJBcmdzKTsKKyAgICAgICAgQVNTRVJUKGZsYWdzICYgTm9k
ZUhhc1ZhckFyZ3MpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4ubnVtQ2hpbGRyZW4oKTsKICAg
ICB9CiAgICAgCkBAIC0xMDY5LDggKzEwMzAsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGZw
cmludGYob3V0LCAiLCBAJXUiLCBjaGlsZDMoKS5pbmRleCgpKTsKICAgICB9CiAgICAgCi0gICAg
Ly8gVGhpcyBlbnVtIHZhbHVlIGRlc2NyaWJlcyB0aGUgdHlwZSBvZiB0aGUgbm9kZS4KLSAgICBO
b2RlVHlwZSBvcDsKKyAgICB1aW50MTZfdCBvcDsgLy8gcmVhbCB0eXBlIGlzIE5vZGVUeXBlCisg
ICAgTm9kZUZsYWdzIGZsYWdzOwogICAgIC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFu
ZGxpbmcgaW5mb3JtYXRpb24gKGN1cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGlu
ZGV4KS4KICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAgLy8gUmVmZXJlbmNlcyB0byB1
cCB0byAzIGNoaWxkcmVuLCBvciBsaW5rcyB0byBhIHZhcmlhYmxlIGxlbmd0aCBzZXQgb2YgY2hp
bGRyZW4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTEwMzQ2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBwcml2YXRlOgogICAgICAgICBp
ZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Ci0gICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKKyAgICAgICAgTm9kZVR5cGUgb3AgPSBz
dGF0aWNfY2FzdDxOb2RlVHlwZT4obm9kZS5vcCk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2coIiAgICVzIEAldTogIiwgR3JhcGg6
Om9wTmFtZShvcCksIG1fY29tcGlsZUluZGV4KTsKQEAgLTQ2OCw2ICs0NjgsMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAgICAgICAgY2FzZSBOb3A6CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAjZWxz
ZQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CkBAIC01MTYsNyArNTIwLDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHZvdGUoTm9kZSYgbm9kZSwgVmFyaWFibGVBY2Nl
c3NEYXRhOjpCYWxsb3QgYmFsbG90KQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUub3AgJiBOb2Rl
SGFzVmFyQXJncykgeworICAgICAgICBpZiAobm9kZS5mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSB7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7
IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxk
SWR4KyspCiAgICAgICAgICAgICAgICAgdm90ZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdLCBiYWxsb3QpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjI0LDcgKzYyOCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOworICAg
ICAgICBOb2RlVHlwZSBvcCA9IHN0YXRpY19jYXN0PE5vZGVUeXBlPihub2RlLm9wKTsKIAogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygi
ICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BOYW1lKG9wKSwgbV9jb21waWxlSW5kZXgpOwpAQCAtNjgw
LDEzICs2ODQsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBub2RlLm9wID0gR2V0Rmxv
YXQ2NEFycmF5TGVuZ3RoOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihtX2NvbXBpbGVJbmRl
eCk7IC8vIE5vIGxvbmdlciBNdXN0R2VuZXJhdGUKKyAgICAgICAgICAgIC8vIE5vIGxvbmdlciBN
dXN0R2VuZXJhdGUKKyAgICAgICAgICAgIEFTU0VSVChub2RlLmZsYWdzICYgTm9kZU11c3RHZW5l
cmF0ZSk7CisgICAgICAgICAgICBub2RlLmZsYWdzICY9IH5Ob2RlTXVzdEdlbmVyYXRlOworICAg
ICAgICAgICAgbV9ncmFwaC5kZXJlZihtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsK
ICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgYmFzZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldLnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmICghKGJhc2VQcmVkaWN0aW9u
ICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJlZGljdGlvbikgewotICAgICAgICAgICAgICAgIG5v
ZGUub3AgPSBOb3A7CisgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhO
b3ApOwogICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsK
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDIobm9kZSk7CiAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQzKG5vZGUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgJKHJldmlzaW9uIDExMDM0NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OCwxNCArNTgsMjcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0jaWYg
REZHX0VOQUJMRShDT05TSVNURU5DWV9DSEVDSykKICAgICB+U2NvcmVCb2FyZCgpCiAgICAgewot
ICAgICAgICAvLyBGb3IgZXZlcnkgZW50cnkgaW4gdGhlIHVzZWQgbGlzdCB0aGUgdXNlIGNvdW50
IG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyIHNob3VsZCBiZSB6ZXJvLgotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZnJlZS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIEFTU0VSVCgh
bV91c2VkW2ldIHx8IG1fdXNlZFtpXSA9PSBtYXgoKSk7CisgICAgICAgIGFzc2VydENsZWFyKCk7
CiAgICAgfQorICAgIAorICAgIHZvaWQgYXNzZXJ0Q2xlYXIoKQorICAgIHsKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgICAgIC8vIEZvciBldmVyeSBlbnRyeSBpbiB0aGUgdXNlZCBsaXN0IHRo
ZSB1c2UgY291bnQgb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXIgc2hvdWxkIGJlIHplcm8sIG9yIG1h
eCwgZHVlIHRvIGl0IGJlaW5nIGEgcHJlc2VydmVkIGxvY2FsLgorICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdXNlZC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIEFTU0VSVCghbV91
c2VkW2ldIHx8IG1fdXNlZFtpXSA9PSBtYXgoKSk7CisgICAgICAgIC8vIEZvciBldmVyeSBlbnRy
eSBpbiB0aGUgZnJlZSBsaXN0LCB0aGUgdXNlIGNvdW50IHNob3VsZCBiZSB6ZXJvLgorICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJlZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IEFTU0VSVCghbV91c2VkW21fZnJlZVtpXV0pOworICAgICAgICAvLyBUaGVyZSBtdXN0IG5vdCBi
ZSBkdXBsaWNhdGVzIGluIHRoZSBmcmVlIGxpc3QuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9mcmVlLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0g
aSArIDE7IGogPCBtX2ZyZWUuc2l6ZSgpOyArK2opCisgICAgICAgICAgICAgICAgQVNTRVJUKG1f
ZnJlZVtpXSAhPSBtX2ZyZWVbal0pOworICAgICAgICB9CiAjZW5kaWYKKyAgICB9CiAKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYWxsb2NhdGUoKQogICAgIHsKQEAgLTk5LDYgKzExMiw5IEBAIHB1Ymxp
YzoKICAgICAgICAgdWludDMyX3QgaW5kZXggPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwogICAg
ICAgICBBU1NFUlQobV91c2VkW2luZGV4XSAhPSBtYXgoKSk7CiAgICAgICAgIGlmIChub2RlLnJl
ZkNvdW50KCkgPT0gKyttX3VzZWRbaW5kZXhdKSB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZygiIEZyZWVpbmcgdmlydHVhbCBy
ZWdpc3RlciAldS4iLCBpbmRleCk7CisjZW5kaWYKICAgICAgICAgICAgIC8vIElmIHRoZSB1c2Ug
Y291bnQgaW4gdGhlIHNjb3JlYm9hcmQgcmVhY2hlcyB0aGUgdXNlIGNvdW50IGZvciB0aGUgbm9k
ZSwKICAgICAgICAgICAgIC8vIHRoZW4gdGhpcyB3YXMgaXRzIGxhc3QgdXNlOyB0aGUgdmlydHVh
bCByZWdpc3RlciBpcyBub3cgZnJlZS4KICAgICAgICAgICAgIC8vIENsZWFyIHRoZSB1c2UgY291
bnQgJiBhZGQgdG8gdGhlIGZyZWUgbGlzdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTEwMzQ2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc0NCw3ICsxNzQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJy
YW5jaChOb2RlJiBubwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiB7Ci0gICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOworICAgIE5vZGVUeXBlIG9wID0gc3RhdGlj
X2Nhc3Q8Tm9kZVR5cGU+KG5vZGUub3ApOwogCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2Ug
SlNDb25zdGFudDoKQEAgLTM1NTIsNiArMzU1MiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBOb3A6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBMYXN0Tm9kZVR5cGU6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTEwMzQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDcgKzgzLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2Rl
SQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbihOb2RlJiBub2RlKQogewotICAg
IGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICBpZiAobm9kZS5mbGFncyAmIE5v
ZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZp
cnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRy
ZW4oKTsgY2hpbGRJZHgrKykKICAgICAgICAgICAgIHVzZShtX2ppdC5ncmFwaCgpLm1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdKTsKICAgICB9IGVsc2UgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2Nh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTEwMzQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwzOCArNDgsNjIgQEAgcHVibGljOgogICAgICAgICBkYXRhTG9nKCJcbiIpOwogI2Vu
ZGlmCiAgICAgICAgIFNjb3JlQm9hcmQgc2NvcmVCb2FyZChtX2dyYXBoLCBtX2dyYXBoLm1fcHJl
c2VydmVkVmFycyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaV07CisgICAgICAg
IHNjb3JlQm9hcmQuYXNzZXJ0Q2xlYXIoKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCisgICAgICAgIGJvb2wgbmVlZHNOZXdMaW5lID0gZmFsc2U7CisjZW5kaWYK
KyAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6
ZSgpOyArK2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICAgICAgaWYgKG5lZWRzTmV3TGluZSkKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICBAJXU6Iiwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBuZWVkc05ld0xpbmUgPSB0cnVl
OworI2VuZGlmCisgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4
XTsKICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSB8fCBu
b2RlLm9wID09IFBoaSB8fCBub2RlLm9wID09IEZsdXNoKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpIHx8IG5vZGUu
b3AgPT0gUGhpIHx8IG5vZGUub3AgPT0gRmx1c2gpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZm
ZWN0aXZlbHkgcGhpIG5vZGVzIGluIHRoZSBncmFwaCwgcmVmZXJlbmNpbmcKLSAgICAgICAgICAg
IC8vIHJlc3VsdHMgZnJvbSBwcmlvciBibG9ja3MuCi0gICAgICAgICAgICBpZiAobm9kZS5vcCAh
PSBHZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIC8vIEZpcnN0LCBjYWxsIHVzZSBvbiBhbGwg
b2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCi0gICAgICAgICAgICAgICAgLy8g
YWxsb2NhdGUgYSBWaXJ0dWFsUmVnaXN0ZXIgZm9yIHRoaXMgbm9kZS4gV2UgZG8gc28gaW4gdGhp
cwotICAgICAgICAgICAgICAgIC8vIG9yZGVyIHNvIHRoYXQgaWYgYSBjaGlsZCBpcyBvbiBpdHMg
bGFzdCB1c2UsIGFuZCBhCi0gICAgICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlzIGZy
ZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICAgICAgaWYg
KG5vZGUub3AgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJz
dENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzY29yZUJvYXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzY29y
ZUJvYXJkLnVzZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2Fy
ZC51c2Uobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNl
KG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgICAgIC8vIEdldExvY2FsIG5vZGVzIGFyZSBl
ZmZlY3RpdmVseSBwaGkgbm9kZXMgaW4gdGhlIGdyYXBoLCByZWZlcmVuY2luZworICAgICAgICAg
ICAgICAgIC8vIHJlc3VsdHMgZnJvbSBwcmlvciBibG9ja3MuCisgICAgICAgICAgICAgICAgaWYg
KG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QsIGNh
bGwgdXNlIG9uIGFsbCBvZiB0aGUgY3VycmVudCBub2RlJ3MgY2hpbGRyZW4sIHRoZW4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gYWxsb2NhdGUgYSBWaXJ0dWFsUmVnaXN0ZXIgZm9yIHRoaXMgbm9k
ZS4gV2UgZG8gc28gaW4gdGhpcworICAgICAgICAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0
IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQorICAgICAgICAgICAgICAgICAg
ICAvLyBWaXJ0dWFsUmVnaXN0ZXIgaXMgZnJlZWQsIHRoZW4gaXQgbWF5IGJlIHJldXNlZCBmb3Ig
bm9kZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuZmxhZ3MgJiBOb2RlSGFzVmFyQXJn
cykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1D
aGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3Jl
Qm9hcmQudXNlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51
c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVz
ZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNl
KG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLmhhc1Jl
c3VsdCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgbm9k
ZS5zZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcmVCb2FyZC5hbGxvY2F0ZSgpKTsKLSAgICAgICAgICAg
IC8vICdtdXN0R2VuZXJhdGUnIG5vZGVzIGhhdmUgdGhlaXIgdXNlQ291bnQgYXJ0aWZpY2lhbGx5
IGVsZXZhdGVkLAotICAgICAgICAgICAgLy8gY2FsbCB1c2Ugbm93IHRvIGFjY291bnQgZm9yIHRo
aXMuCi0gICAgICAgICAgICBpZiAobm9kZS5tdXN0R2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAg
ICBzY29yZUJvYXJkLnVzZShpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyID0gc2NvcmVCb2FyZC5hbGxvY2F0ZSgpOworI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgQXNzaWdu
aW5nIHZpcnR1YWwgcmVnaXN0ZXIgJXUgdG8gbm9kZSAldS4iLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdmlydHVhbFJlZ2lzdGVyLCBub2RlSW5kZXgpOworI2VuZGlmCisgICAgICAgICAgICAg
ICAgbm9kZS5zZXRWaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICAvLyAnbXVzdEdlbmVyYXRlJyBub2RlcyBoYXZlIHRoZWlyIHVzZUNvdW50IGFydGlmaWNp
YWxseSBlbGV2YXRlZCwKKyAgICAgICAgICAgICAgICAvLyBjYWxsIHVzZSBub3cgdG8gYWNjb3Vu
dCBmb3IgdGhpcy4KKyAgICAgICAgICAgICAgICBpZiAobm9kZS5tdXN0R2VuZXJhdGUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZUluZGV4KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHNjb3JlQm9hcmQuYXNzZXJ0Q2xlYXIoKTsKICAgICAgICAgfQorI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgaWYgKG5lZWRz
TmV3TGluZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CisjZW5kaWYKIAogICAgICAgICAv
LyAnbV9udW1DYWxsZWVSZWdpc3RlcnMnIGlzIHRoZSBudW1iZXIgb2YgbG9jYWxzIGFuZCB0ZW1w
b3JhcmllcyBhbGxvY2F0ZWQKICAgICAgICAgLy8gZm9yIHRoZSBmdW5jdGlvbiAoYW5kIGNoZWNr
ZWQgZm9yIG9uIGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBhbmQK
</data>
<flag name="commit-queue"
          id="134436"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131206</attachid>
            <date>2012-03-10 22:45:24 -0800</date>
            <delta_ts>2012-03-11 19:45:57 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>mutableflags_patch_2.diff</filename>
            <type>text/plain</type>
            <size>55942</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEwMzg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBA
QAorMjAxMi0wMy0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFsbCBERkcgbm9kZXMgc2hvdWxkIGhhdmUgYSBtdXRhYmxlIHNldCBvZiBmbGFncworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA3NzkKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzExMDI2MjE4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgR290IHJpZCBvZiBOb2RlSWQsIGFuZCBwbGFjZWQg
YWxsIG9mIHRoZSBmbGFncyB0aGF0IGRpc3Rpbmd1aXNoZWQgTm9kZUlkCisgICAgICAgIGZyb20g
Tm9kZVR5cGUgaW50byBhIHNlcGFyYXRlIE5vZGU6OmZsYWdzIGZpZWxkLiBDb21iaW5lZCB3aGF0
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIEFyaXRoTm9kZUZsYWdzIGludG8gTm9kZTo6ZmxhZ3Mu
CisgICAgICAgIAorICAgICAgICBJbiB0aGUgcHJvY2VzcyBvZiBkZWJ1Z2dpbmcsIEkgZm91bmQg
dGhhdCB0aGUgZGVidWcgc3VwcG9ydCBpbiB0aGUgdmlydHVhbAorICAgICAgICByZWdpc3RlciBh
bGxvY2F0b3Igd2FzIGxhY2tpbmcsIHNvIEkgaW1wcm92ZWQgaXQuIEkgYWxzbyByZWFsaXplZCB0
aGF0IHRoZQorICAgICAgICB2aXJ0dWFsIHJlZ2lzdGVyIGFsbG9jYXRvciB3YXMgYXNzdW1pbmcg
dGhhdCB0aGUgbm9kZXMgaW4gYSBiYXNpYyBibG9jayB3ZXJlCisgICAgICAgIGNvbnRpZ3VvdXMs
IHdoaWNoIGlzIG5vIGxvbmdlciB0aGUgY2FzZS4gU28gSSBmaXhlZCB0aGF0LiBUaGUgZml4IGFs
c28gbWFkZQorICAgICAgICBpdCBuYXR1cmFsIHRvIGhhdmUgbW9yZSBleHRyZW1lIGFzc2VydGlv
bnMsIHNvIEkgYWRkZWQgdGhlbS4gSSBzdXNwZWN0IHRoaXMKKyAgICAgICAgd2lsbCBtYWtlIGl0
IGVhc2llciB0byBjYXRjaCB2aXJ0dWFsIHJlZ2lzdGVyIGFsbG9jYXRpb24gYnVncyBpbiB0aGUg
ZnV0dXJlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBtb3N0bHkgcGVyZm9ybWFuY2UgbmV1
dHJhbDsgaWYgYW55dGhpbmcgaXQgbG9va3MgbGlrZSBhIHNsaWdodAorICAgICAgICBzcGVlZC11
cC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBsZWF2ZSBzb21lIHdvcmsgZm9y
IGZ1dHVyZSByZWZhY3RvcmluZ3M7IGZvciBleGFtcGxlLCBOb2RlOjpvcAorICAgICAgICBpcyB1
bmVuY2Fwc3VsYXRlZC4gVGhpcyB3YXMgYWxyZWFkeSB0aGUgY2FzZSwgdGhvdWdoIG5vdyBpdCBm
ZWVscyBldmVuIG1vcmUKKyAgICAgICAgbGlrZSBpdCBzaG91bGQgYmUuIEkgYXZvaWRlZCBkb2lu
ZyB0aGF0IGJlY2F1c2UgdGhpcyBwYXRjaCBoYXMgYWxyZWFkeSBncm93bgorICAgICAgICB3YXkg
YmlnZ2VyIHRoYW4gSSB3YW50ZWQuCisgICAgICAgIAorICAgICAgICBGaW5hbGx5LCB0aGlzIHBh
dGNoIGNyZWF0ZXMgYSBERkdOb2RlLmNwcCBmaWxlIGFuZCBtYWtlcyBhIHNsaWdodCBlZmZvcnQg
dG8KKyAgICAgICAgbW92ZSBzb21lIHVubmVjZXNzYXJpbHkgaW5saW5lIHN0dWZmIG91dCBvZiBE
RkdOb2RlLmguCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcvREZHQXJpdGhO
b2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJpdGhOb2Rl
RmxhZ3NJbmZlcmVuY2VQaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dy
YXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZVNhZmUpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjptYWtlRGl2U2FmZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAg
ICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6
ZW5kSW5kZXhGb3JQdXJlQ1NFKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cHVyZUNT
RSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNsb2JiZXJzV29ybGQpOgorICAgICAg
ICAoSlNDOjpERkc6OkNTRVBoYXNlOjppbXB1cmVDU0UpOgorICAgICAgICAoSlNDOjpERkc6OkNT
RVBoYXNlOjpzZXRSZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmVs
aW1pbmF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKToKKyAgICAgICAg
KENTRVBoYXNlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAg
ICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR05vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6YXJpdGhOb2RlRmxhZ3NBc1N0cmluZyk6CisgICAg
ICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
bm9kZVVzZWRBc051bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUNhblRydW5jYXRlSW50
ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6bm9kZU1heU92ZXJmbG93KToKKyAgICAgICAgKEpTQzo6REZHOjpu
b2RlQ2FuU3BlY3VsYXRlSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6ZGVmYXVsdEZsYWdz
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpOb2RlKToKKyAgICAgICAgKE5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldE9wQW5kRGVmYXVsdEZsYWdzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjptdXN0R2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmFy
aXRoTm9kZUZsYWdzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzZXRBcml0aE5vZGVGbGFn
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjptZXJnZUFyaXRoTm9kZUZsYWdzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNSZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Omhhc0ludDMyUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNOdW1iZXJSZXN1
bHQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0pTUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNCb29sZWFuUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojppc0p1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzQnJhbmNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjppc1Rlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
aGlsZDEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMik6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6Y2hpbGQzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpmaXJzdENoaWxk
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpudW1DaGlsZHJlbik6CisgICAgICAgICogZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKEpTQzo6REZH
OjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6dm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RG
R1Njb3JlQm9hcmQuaDoKKyAgICAgICAgKFNjb3JlQm9hcmQpOgorICAgICAgICAoSlNDOjpERkc6
OlNjb3JlQm9hcmQ6On5TY29yZUJvYXJkKToKKyAgICAgICAgKEpTQzo6REZHOjpTY29yZUJvYXJk
Ojphc3NlcnRDbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6U2NvcmVCb2FyZDo6dXNlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdWaXJ0dWFs
UmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZTo6cnVuKToKKwogMjAxMi0wMy0xMCAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIExMSW50IHNob3VsZCBzdXBwb3J0IEpTVkFM
VUU2NApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTEw
MzQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC02OCw2ICs2OCw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZn
L0RGR0RyaXZlci5jcHAKICAgICBkZmcvREZHR3JhcGguY3BwCiAgICAgZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAorICAgIGRmZy9ERkdOb2RlLmNwcAogICAgIGRmZy9ERkdPU1JFbnRyeS5jcHAKICAg
ICBkZmcvREZHT1NSRXhpdC5jcHAKICAgICBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEx
MDM0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjksNiArMTY5LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlUmVmZXJlbmNlQmxvYi5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVVc2UuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQkocmV2aXNpb24gMTEwMzQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZGZn
L0RGR0RyaXZlci5jcHAgXAogICAgIGRmZy9ERkdHcmFwaC5jcHAgXAogICAgIGRmZy9ERkdKSVRD
b21waWxlci5jcHAgXAorICAgIGRmZy9ERkdOb2RlLmNwcCBcCiAgICAgZGZnL0RGR09wZXJhdGlv
bnMuY3BwIFwKICAgICBkZmcvREZHT1NSRW50cnkuY3BwIFwKICAgICBkZmcvREZHT1NSRXhpdC5j
cHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExMDM0NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBACiAJCTBGMEZDNDVBMTRC
RDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExM
SW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQx
NEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAv
KiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CisJ
CTBGMUQwODYxMTUwQzVBODYwMDc0RDEwOSAvKiBERkdOb2RlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUQwODVGMTUwQzVBODAwMDc0RDEwOSAv
KiBERkdOb2RlLmNwcCAqLzsgfTsKIAkJMEYyMUMyNjgxNEJFNUY2ODAwQURDNjRCIC8qIEpJVERy
aXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
MUMyNjYxNEJFNUY1RTAwQURDNjRCIC8qIEpJVERyaXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdDMTRCRTcyNzYwMEFEQzY0QiAv
KiBFeGVjdXRpb25IYXJuZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjIxQzI3QTE0QkU3MjczMDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFD
MjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3OTE0QkU3MjczMDBB
REM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03ODMsNiArNzg0LDcgQEAKIAkJMEYwRkM0NTgx
NEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRW
ZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0VmVjdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRDA4NUYxNTBDNUE4MDAwNzRE
MTA5IC8qIERGR05vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHTm9kZS5jcHA7IHBhdGggPSBkZmcvREZHTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjFDMjY2MTRCRTVGNUUwMEFEQzY0QiAvKiBKSVREcml2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVTcGVjaWFsaXph
dGlvbktpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMUMyN0ExNEJFNzI3
MzAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXhlY3V0aW9uSGFybmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjUwNCw2ICsyNTA2LDcgQEAKIAkJODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEYxRDA4NUYx
NTBDNUE4MDAwNzREMTA5IC8qIERGR05vZGUuY3BwICovLAogCQkJCTBGRkZDOTQ5MTRFRjkwOTUw
MEM3MjUzMiAvKiBERkdBcml0aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlLmNwcCAqLywKIAkJCQkw
RkZGQzk0QTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFz
ZS5oICovLAogCQkJCTBGNjIwMTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRl
LmNwcCAqLywKQEAgLTM3MTUsNiArMzcxOCw3IEBACiAJCQkJMEZCNTQ2N0QxNEY1Q0ZENjAwMkMy
OTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY1NkExRDUxNTAwMUNGNDAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEE0MzM3QkIxNTA2MjE4ODAwOTkxQzk1IC8qIERGR1JlZHVuZGFudFBo
aUVsaW1pbmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxRDA4NjExNTBDNUE4
NjAwNzREMTA5IC8qIERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZl
cmVuY2VQaGFzZS5jcHAJKHJldmlzaW9uIDExMDM0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDExICs4MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5l
cmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZVR5cGUg
b3AgPSBub2RlLm9wOwotICAgICAgICBBcml0aE5vZGVGbGFncyBmbGFncyA9IDA7Ci0gICAgICAg
IAotICAgICAgICBpZiAobm9kZS5oYXNBcml0aE5vZGVGbGFncygpKQotICAgICAgICAgICAgZmxh
Z3MgPSBub2RlLnJhd0FyaXRoTm9kZUZsYWdzKCk7CisgICAgICAgIE5vZGVUeXBlIG9wID0gc3Rh
dGljX2Nhc3Q8Tm9kZVR5cGU+KG5vZGUub3ApOworICAgICAgICBOb2RlRmxhZ3MgZmxhZ3MgPSBu
b2RlLmZsYWdzOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCiAgICAgICAgIGRhdGFMb2coIiAgICVzIEAldTogJXMgIiwgR3JhcGg6Om9wTmFtZShv
cCksIG1fY29tcGlsZUluZGV4LCBhcml0aE5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSk7CkBAIC0x
NzgsNyArMTc1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm87
Ci0gICAgICAgICAgICBpZiAob3AgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgaWYg
KG5vZGUuZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykgewogICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0
Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKICAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF1dLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAxMTAzNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcyLDcgKzU3Miw3IEBAIHByaXZhdGU6
CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kKHJlc3VsdEluZGV4KTsKIAotICAgICAgICBpZiAob3AgJiBOb2RlTXVzdEdlbmVyYXRlKQor
ICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCiAgICAgICAg
ICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHRJbmRl
eDsKICAgICB9CkBAIC01ODUsNyArNTg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHRJbmRleCk7CiAKLSAgICAgICAg
aWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkKKyAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkg
JiBOb2RlTXVzdEdlbmVyYXRlKQogICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0SW5kZXgp
OwogICAgICAgICByZXR1cm4gcmVzdWx0SW5kZXg7CiAgICAgfQpAQCAtNTk2LDcgKzU5Niw3IEBA
IHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKIAotICAgICAgICBpZiAob3AgJiBOb2RlTXVzdEdl
bmVyYXRlKQorICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUp
CiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHRJbmRleDsKICAgICB9CkBAIC02MTAsNyArNjEwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgICAgIG1fbnVtUGFzc2VkVmFyQXJncyA9IDA7CiAgICAgICAgIAotICAgICAgICBpZiAo
b3AgJiBOb2RlTXVzdEdlbmVyYXRlKQorICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5v
ZGVNdXN0R2VuZXJhdGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CiAg
ICAgICAgIHJldHVybiByZXN1bHRJbmRleDsKICAgICB9CkBAIC02OTksNyArNjk5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgIAogI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiTWFraW5nICVzIEAldSBzYWZl
IGF0IGJjIyV1IGJlY2F1c2Ugc2xvdy1jYXNlIGNvdW50ZXIgaXMgYXQgJXUgYW5kIGV4aXQgcHJv
ZmlsZXMgc2F5ICVkLCAlZFxuIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3Ap
LCBub2RlSW5kZXgsIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+
bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBPdmVyZmxvdyksIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUu
aGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpOworICAgICAgICBkYXRh
TG9nKCJNYWtpbmcgJXMgQCV1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzbG93LWNhc2UgY291bnRl
ciBpcyBhdCAldSBhbmQgZXhpdCBwcm9maWxlcyBzYXkgJWQsICVkXG4iLCBHcmFwaDo6b3BOYW1l
KHN0YXRpY19jYXN0PE5vZGVUeXBlPihtX2dyYXBoW25vZGVJbmRleF0ub3ApKSwgbm9kZUluZGV4
LCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJl
Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlciwg
bV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRl
eCwgT3ZlcmZsb3cpLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKTsKICNlbmRpZgogICAgICAgICAKICAgICAg
ICAgc3dpdGNoIChtX2dyYXBoW25vZGVJbmRleF0ub3ApIHsKQEAgLTc1Miw3ICs3NTIsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgCiAjaWYgREZH
X0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCJNYWtpbmcgJXMgQCV1IHNh
ZmUgYXQgYmMjJXUgYmVjYXVzZSBzcGVjaWFsIGZhc3QtY2FzZSBjb3VudGVyIGlzIGF0ICV1IGFu
ZCBleGl0IHByb2ZpbGVzIHNheSAlZCwgJWRcbiIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2Rl
SW5kZXhdLm9wKSwgbm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLT5zcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
bV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2Zp
bGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KSwgbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVnYXRpdmVaZXJv
KSk7CisgICAgICAgIGRhdGFMb2coIk1ha2luZyAlcyBAJXUgc2FmZSBhdCBiYyMldSBiZWNhdXNl
IHNwZWNpYWwgZmFzdC1jYXNlIGNvdW50ZXIgaXMgYXQgJXUgYW5kIGV4aXQgcHJvZmlsZXMgc2F5
ICVkLCAlZFxuIiwgR3JhcGg6Om9wTmFtZShzdGF0aWNfY2FzdDxOb2RlVHlwZT4obV9ncmFwaFtu
b2RlSW5kZXhdLm9wKSksIG5vZGVJbmRleCwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+c3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQ
cm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdyksIG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZl
WmVybykpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUg
cG9zc2libGUgdG8gbWFrZSB0aGlzIG1vcmUgZ3JhbnVsYXIuIFRoZSBERkcgY2VydGFpbmx5IGNh
bgpAQCAtMTI2Nyw3ICsxMjY3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4
KGJvb2wgdQogICAgIH0KICAgICAKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PT0gMykgeyAvLyBNYXRoLm1pbih4LCB5KQotICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRk
VG9HcmFwaChvcCwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBh
cmd1bWVudFRvT3BlcmFuZCgxKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVy
YW5kKDIpKSkpOworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChvcCwgZ2V0
KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpLCBnZXQocmVnaXN0ZXJPZmZz
ZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgyKSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIApAQCAtMTI5NSw3ICsxMjk1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW50cmluc2ljKGJvbwogICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0
aW5nUG9pbnRBYnMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gYWRkVG9HcmFwaChBcml0aEFicywgT3BJbmZvKE5vZGVVc2VCb3R0
b20pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOworICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYWRkVG9HcmFwaChBcml0aEFicywgZ2V0KHJlZ2lzdGVy
T2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKICAgICAgICAgaWYgKG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93
KSkKICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZsYWdzKE5v
ZGVNYXlPdmVyZmxvdyk7CiAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBub2RlSW5kZXgpOwpA
QCAtMTU2MiwxMSArMTU2MiwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG9wMikgJiAw
eDFmKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKEJpdFVSU2hpZnQs
IG9wMSwgb3AyKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG1ha2VTYWZlKGFkZFRvR3JhcGgoVUludDMyVG9OdW1iZXIsIE9wSW5mbyhOb2RlVXNl
Qm90dG9tKSwgb3AxKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTYWZlKGFk
ZFRvR3JhcGgoVUludDMyVG9OdW1iZXIsIG9wMSkpOwogICAgICAgICAgICAgfSAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgLy8gQ2Fubm90IG9wdGltaXplIGF0IHRoaXMgc3RhZ2U7IHNoaWZ0ICYg
cG90ZW50aWFsbHkgcmVib3ggYXMgYSBkb3VibGUuCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
YWRkVG9HcmFwaChCaXRVUlNoaWZ0LCBvcDEsIG9wMik7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gbWFrZVNhZmUoYWRkVG9HcmFwaChVSW50MzJUb051bWJlciwgT3BJbmZvKE5vZGVVc2VCb3R0
b20pLCByZXN1bHQpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtYWtlU2FmZShhZGRUb0dy
YXBoKFVJbnQzMlRvTnVtYmVyLCByZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHQpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfdXJzaGlmdCk7CkBAIC0xNTc3LDcgKzE1NzcsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHJlX2lu
YzogewogICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldChzcmNEc3QpOwotICAg
ICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgT3BJbmZv
KE5vZGVVc2VCb3R0b20pLCBvcCwgb25lKCkpKSk7CisgICAgICAgICAgICBzZXQoc3JjRHN0LCBt
YWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9wcmVfaW5jKTsKICAgICAgICAgfQogCkBAIC0xNTg3LDE0ICsxNTg3LDE0
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IEFTU0VSVChyZXN1bHQgIT0gc3JjRHN0KTsgLy8gUmVxdWlyZWQgZm9yIGFzc3VtcHRpb25zIHdl
IG1ha2UgZHVyaW5nIE9TUi4KICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldChzcmNEc3Qp
OwogICAgICAgICAgICAgc2V0KHJlc3VsdCwgb3ApOwotICAgICAgICAgICAgc2V0KHNyY0RzdCwg
bWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcCwg
b25lKCkpKSk7CisgICAgICAgICAgICBzZXQoc3JjRHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFy
aXRoQWRkLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wb3N0X2lu
Yyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3ByZV9kZWM6IHsKICAgICAgICAgICAg
IHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXQoc3JjRHN0KTsKLSAgICAgICAgICAgIHNldChzcmNE
c3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwg
b3AsIG9uZSgpKSkpOworICAgICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFw
aChBcml0aFN1Yiwgb3AsIG9uZSgpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHJl
X2RlYyk7CiAgICAgICAgIH0KIApAQCAtMTYwMyw3ICsxNjAzLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGVJbmRleCBv
cCA9IGdldChzcmNEc3QpOwogICAgICAgICAgICAgc2V0KHJlc3VsdCwgb3ApOwotICAgICAgICAg
ICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1YiwgT3BJbmZvKE5vZGVV
c2VCb3R0b20pLCBvcCwgb25lKCkpKSk7CisgICAgICAgICAgICBzZXQoc3JjRHN0LCBtYWtlU2Fm
ZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9wb3N0X2RlYyk7CiAgICAgICAgIH0KIApAQCAtMTYxMywyMiArMTYxMywyMiBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2Rl
SW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAg
ICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW29wMV0uaGFzTnVtYmVyUmVzdWx0KCkgJiYgbV9n
cmFwaFtvcDJdLmhhc051bWJlclJlc3VsdCgpKQotICAgICAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBP
cEluZm8oTm9kZVVzZUJvdHRvbSksIG9wMSwgb3AyKSkpOworICAgICAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRo
QWRkLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChWYWx1
ZUFkZCwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcDEsIG9wMikpKTsKKyAgICAgICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFw
aChWYWx1ZUFkZCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9hZGQp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9zdWI6IHsKICAgICAgICAgICAgIE5vZGVJ
bmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VT
YWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIp
KSk7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFr
ZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1Yiwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9zdWIpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9uZWdhdGU6IHsK
ICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE5lZ2F0ZSwgT3BJbmZvKE5vZGVVc2VCb3R0b20p
LCBvcDEpKSk7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE5lZ2F0ZSwgb3AxKSkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfbmVnYXRlKTsKICAgICAgICAgfQogCkBAIC0xNjM2LDIxICsxNjM2LDIx
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IC8vIE11bHRpcGx5IHJlcXVpcmVzIHRoYXQgdGhlIGlucHV0cyBhcmUgbm90IHRydW5jYXRlZCwg
dW5mb3J0dW5hdGVseS4KICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhNdWws
IE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE11
bCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9tdWwpOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBvcF9tb2Q6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2Rl
SW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRv
R3JhcGgoQXJpdGhNb2QsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIpKSk7CisgICAg
ICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRk
VG9HcmFwaChBcml0aE1vZCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9tb2QpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9kaXY6IHsKICAgICAgICAgICAg
IE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IG1ha2VEaXZTYWZlKGFkZFRvR3JhcGgoQXJpdGhEaXYsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwg
b3AxLCBvcDIpKSk7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgbWFrZURpdlNhZmUoYWRkVG9HcmFwaChBcml0aERpdiwgb3AxLCBvcDIpKSk7CiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9kaXYpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxMTAzNDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGVJ
bmRleF0uc2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9n
KCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwg
bm9kZUluZGV4KTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICVzIEAldTogIiwgR3JhcGg6
Om9wTmFtZShzdGF0aWNfY2FzdDxOb2RlVHlwZT4obV9ncmFwaFtub2RlSW5kZXhdLm9wKSksIG5v
ZGVJbmRleCk7CiAgICAgICAgICAgICBtX3N0YXRlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKICAg
ICAgICAgICAgIGRhdGFMb2coIlxuIik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMTAzNDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyAr
NzAsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHVuc2lnbmVkIGVuZEluZGV4Rm9yUHVyZUNTRSgp
CiAgICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2xhc3RTZWVuW21fZ3JhcGhbbV9j
b21waWxlSW5kZXhdLm9wICYgTm9kZUlkTWFza107CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fbGFzdFNlZW5bbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ub3BdOwogICAgICAgICBpZiAocmVz
dWx0ID09IFVJTlRfTUFYKQogICAgICAgICAgICAgcmVzdWx0ID0gMDsKICAgICAgICAgZWxzZQpA
QCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG5vZGUub3AgIT0gb3Ro
ZXJOb2RlLm9wKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAobm9kZS5hcml0aE5vZGVGbGFnc0ZvckNvbXBhcmUoKSAhPSBvdGhlck5vZGUu
YXJpdGhOb2RlRmxhZ3NGb3JDb21wYXJlKCkpCisgICAgICAgICAgICBpZiAobm9kZS5hcml0aE5v
ZGVGbGFncygpICE9IG90aGVyTm9kZS5hcml0aE5vZGVGbGFncygpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlSW5kZXggb3RoZXJDaGls
ZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQxKCkpOwpAQCAtMTQ3LDkgKzE0Nyw5IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGVJbmRleCBub2RlSW5kZXgpCiAg
ICAgewogICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBp
ZiAobm9kZS5vcCAmIE5vZGVDbG9iYmVyc1dvcmxkKQorICAgICAgICBpZiAobm9kZS5mbGFncyAm
IE5vZGVDbG9iYmVyc1dvcmxkKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlm
ICghKG5vZGUub3AgJiBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAgICAgaWYgKCEobm9kZS5mbGFn
cyAmIE5vZGVNaWdodENsb2JiZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKQEAgLTE4Miw3ICsx
ODIsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBOb2RlJiBvdGhlck5vZGUgPSBtX2dyYXBo
W2luZGV4XTsKICAgICAgICAgICAgIGlmIChub2RlLm9wID09IG90aGVyTm9kZS5vcAotICAgICAg
ICAgICAgICAgICYmIG5vZGUuYXJpdGhOb2RlRmxhZ3NGb3JDb21wYXJlKCkgPT0gb3RoZXJOb2Rl
LmFyaXRoTm9kZUZsYWdzRm9yQ29tcGFyZSgpKSB7CisgICAgICAgICAgICAgICAgJiYgbm9kZS5h
cml0aE5vZGVGbGFncygpID09IG90aGVyTm9kZS5hcml0aE5vZGVGbGFncygpKSB7CiAgICAgICAg
ICAgICAgICAgTm9kZUluZGV4IG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNo
aWxkMSgpKTsKICAgICAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKQEAgLTUwNiw3ICs1MDYsNyBAQCBwcml2YXRl
OgogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBp
bGVJbmRleF07Ci0gICAgICAgIG5vZGUub3AgPSBQaGFudG9tOworICAgICAgICBub2RlLnNldE9w
QW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgICAgICBub2RlLnNldFJlZkNvdW50KDEpOwog
ICAgICAgICAKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3aWxsIGVsaW1pbmF0ZSBhbGwg
cmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCkBAIC01MjIsMTQgKzUyMiwxNCBAQCBwcml2YXRlOgog
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAgICAgICAgIEFT
U0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgIEFTU0VSVChub2RlLm11c3RHZW5l
cmF0ZSgpKTsKLSAgICAgICAgbm9kZS5vcCA9IFBoYW50b207CisgICAgICAgIG5vZGUuc2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcGVyZm9ybU5v
ZGVDU0UoTm9kZSYgbm9kZSkKICAgICB7CiAgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBu
b2RlLnNob3VsZEdlbmVyYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFy
QXJncykgeworICAgICAgICBpZiAobm9kZS5mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxk
SWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4Kysp
CiAgICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC01
NDIsNyArNTQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9n
KCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ub3Ap
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGRhdGFMb2coIiAgICVzIEAldTogIiwgR3JhcGg6
Om9wTmFtZShzdGF0aWNfY2FzdDxOb2RlVHlwZT4obV9ncmFwaFttX2NvbXBpbGVJbmRleF0ub3Ap
KSwgbV9jb21waWxlSW5kZXgpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICAvLyBOT1RFOiB0
aGVyZSBhcmUgc29tZSBub2RlcyB0aGF0IHdlIGRlbGliZXJhdGVseSBkb24ndCBDU0UgZXZlbiB0
aG91Z2ggd2UKQEAgLTY2OSw3ICs2NjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fbGFzdFNlZW5bbm9kZS5vcCAmIE5vZGVJ
ZE1hc2tdID0gbV9pbmRleEluQmxvY2s7CisgICAgICAgIG1fbGFzdFNlZW5bbm9kZS5vcF0gPSBt
X2luZGV4SW5CbG9jazsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CiAgICAgICAgIGRhdGFMb2coIlxuIik7CiAjZW5kaWYKQEAgLTY3OCw3ICs2NzgsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2smIGJsb2NrKQogICAgIHsK
ICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSAmYmxvY2s7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBMYXN0Tm9kZUlkOyArK2kpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBMYXN0Tm9kZVR5cGU7ICsraSkKICAgICAgICAgICAgIG1fbGFzdFNlZW5baV0gPSBVSU5U
X01BWDsKIAogICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sg
PCBibG9jay5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKQEAgLTY5MSw3ICs2OTEsNyBAQCBw
cml2YXRlOgogICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKICAgICB1bnNpZ25lZCBtX2lu
ZGV4SW5CbG9jazsKICAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV9yZXBsYWNlbWVudHM7Ci0g
ICAgRml4ZWRBcnJheTx1bnNpZ25lZCwgTGFzdE5vZGVJZD4gbV9sYXN0U2VlbjsKKyAgICBGaXhl
ZEFycmF5PHVuc2lnbmVkLCBMYXN0Tm9kZVR5cGU+IG1fbGFzdFNlZW47CiB9OwogCiB2b2lkIHBl
cmZvcm1DU0UoR3JhcGgmIGdyYXBoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDExMDM0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7CiAKIGNvbnN0IGNoYXIgKkdyYXBoOjpvcE5hbWUoTm9k
ZVR5cGUgb3ApCiB7Ci0gICAgcmV0dXJuIGRmZ09wTmFtZXNbb3AgJiBOb2RlSWRNYXNrXTsKKyAg
ICByZXR1cm4gZGZnT3BOYW1lc1tvcF07CiB9CiAKIGNvbnN0IGNoYXIqIEdyYXBoOjpuYW1lT2ZW
YXJpYWJsZUFjY2Vzc0RhdGEoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEp
CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oTm9kZUluZGV4
IG5vZAogdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4KQogewogICAgIE5vZGUm
IG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKKyAgICBO
b2RlVHlwZSBvcCA9IHN0YXRpY19jYXN0PE5vZGVUeXBlPihub2RlLm9wKTsKIAogICAgIHVuc2ln
bmVkIHJlZkNvdW50ID0gbm9kZS5yZWZDb3VudCgpOwogICAgIGJvb2wgc2tpcHBlZCA9ICFyZWZD
b3VudDsKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2Rl
SW5kZXgpCiAgICAgICAgIGRhdGFMb2coIi0iKTsKICAgICBkYXRhTG9nKCI+XHQlcygiLCBvcE5h
bWUob3ApKTsKICAgICBib29sIGhhc1ByaW50ZWQgPSBmYWxzZTsKLSAgICBpZiAob3AgJiBOb2Rl
SGFzVmFyQXJncykgeworICAgIGlmIChub2RlLmZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElk
eCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7
CiAgICAgICAgICAgICBpZiAoaGFzUHJpbnRlZCkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIs
ICIpOwpAQCAtMTc1LDggKzE3NSw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJ
bmRleCkKICAgICAgICAgaGFzUHJpbnRlZCA9ICEhbm9kZS5jaGlsZDEoKTsKICAgICB9CiAKLSAg
ICBpZiAobm9kZS5oYXNBcml0aE5vZGVGbGFncygpKSB7Ci0gICAgICAgIGRhdGFMb2coIiVzJXMi
LCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBhcml0aE5vZGVGbGFnc0FzU3RyaW5nKG5vZGUucmF3
QXJpdGhOb2RlRmxhZ3MoKSkpOworICAgIGlmIChub2RlLmFyaXRoTm9kZUZsYWdzKCkpIHsKKyAg
ICAgICAgZGF0YUxvZygiJXMlcyIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGFyaXRoTm9kZUZs
YWdzQXNTdHJpbmcobm9kZS5hcml0aE5vZGVGbGFncygpKSk7CiAgICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOwogICAgIH0KICAgICBpZiAobm9kZS5oYXNWYXJOdW1iZXIoKSkgewpAQCAtMjk0LDcg
KzI5NCw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoKQogLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBi
ZSBpdGVyYXRpdmUsIG5vdCByZWN1cnNpdmUuCiAjZGVmaW5lIERPX1RPX0NISUxEUkVOKG5vZGUs
IHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIE5v
ZGUmIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIGlmIChfbm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfbm9kZS5mbGFncyAmIE5vZGVI
YXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLmZpcnN0Q2hpbGQoKTsgICAgICAgICAgICAg
ICBcCiAgICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLmZpcnN0Q2hpbGQoKSArIF9u
b2RlLm51bUNoaWxkcmVuKCk7ICBcCiAgICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjb25zdCBjaGFyKiBhcml0aE5vZGVGbGFn
c0FzU3RyaW5nKE5vZGVGbGFncyBmbGFncykKK3sKKyAgICBmbGFncyAmPSBOb2RlQXJpdGhNYXNr
OworICAgIAorICAgIGlmICghZmxhZ3MpCisgICAgICAgIHJldHVybiAiPGVtcHR5PiI7CisKKyAg
ICBzdGF0aWMgY29uc3QgaW50IHNpemUgPSA2NDsKKyAgICBzdGF0aWMgY2hhciBkZXNjcmlwdGlv
bltzaXplXTsKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRlcjxjaGFyPiBwdHIoZGVzY3JpcHRpb24s
IHNpemUpOworICAgIAorICAgIGJvb2wgaGFzUHJpbnRlZCA9IGZhbHNlOworICAgIAorICAgIGlm
IChmbGFncyAmIE5vZGVVc2VkQXNOdW1iZXIpIHsKKyAgICAgICAgcHRyLnN0cmNhdCgiVXNlZEFz
TnVtIik7CisgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAo
ZmxhZ3MgJiBOb2RlTmVlZHNOZWdaZXJvKSB7CisgICAgICAgIGlmIChoYXNQcmludGVkKQorICAg
ICAgICAgICAgcHRyLnN0cmNhdCgifCIpOworICAgICAgICBwdHIuc3RyY2F0KCJOZWVkc05lZ1pl
cm8iKTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChm
bGFncyAmIE5vZGVNYXlPdmVyZmxvdykgeworICAgICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAg
ICAgICAgIHB0ci5zdHJjYXQoInwiKTsKKyAgICAgICAgcHRyLnN0cmNhdCgiTWF5T3ZlcmZsb3ci
KTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChmbGFn
cyAmIE5vZGVNYXlOZWdaZXJvKSB7CisgICAgICAgIGlmIChoYXNQcmludGVkKQorICAgICAgICAg
ICAgcHRyLnN0cmNhdCgifCIpOworICAgICAgICBwdHIuc3RyY2F0KCJNYXlOZWdaZXJvIik7Cisg
ICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICAqcHRyKysgPSAwOwor
ICAgIAorICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDExMDM0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NywzNiArNTcsNTAgQEAgc3RydWN0
IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhIHsKICAgICB9CiB9OwogCi10eXBlZGVmIHVuc2lnbmVk
IEFyaXRoTm9kZUZsYWdzOwotI2RlZmluZSBOb2RlVXNlQm90dG9tICAgICAgMHgwMAotI2RlZmlu
ZSBOb2RlVXNlZEFzTnVtYmVyICAgMHgwMQotI2RlZmluZSBOb2RlTmVlZHNOZWdaZXJvICAgMHgw
MgotI2RlZmluZSBOb2RlVXNlZEFzTWFzayAgICAgMHgwMwotI2RlZmluZSBOb2RlTWF5T3ZlcmZs
b3cgICAgMHgwNAotI2RlZmluZSBOb2RlTWF5TmVnWmVybyAgICAgMHgwOAotI2RlZmluZSBOb2Rl
QmVoYXZpb3JNYXNrICAgMHgwYworLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51bSAoYmVs
b3cpIGFyZSBjb21wb3NlZCBvZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkgbm9uZSkK
Ky8vIGFuZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2VuZXJhdGUs
IGlzIGNvbnN0YW50LCBldGMpLgorI2RlZmluZSBOb2RlUmVzdWx0TWFzayAgICAgICAweEYKKyNk
ZWZpbmUgTm9kZVJlc3VsdEpTICAgICAgICAgMHgxCisjZGVmaW5lIE5vZGVSZXN1bHROdW1iZXIg
ICAgIDB4MgorI2RlZmluZSBOb2RlUmVzdWx0SW50MzIgICAgICAweDMKKyNkZWZpbmUgTm9kZVJl
c3VsdEJvb2xlYW4gICAgMHg0CisjZGVmaW5lIE5vZGVSZXN1bHRTdG9yYWdlICAgIDB4NQorI2Rl
ZmluZSBOb2RlTXVzdEdlbmVyYXRlICAgIDB4MTAgLy8gc2V0IG9uIG5vZGVzIHRoYXQgaGF2ZSBz
aWRlIGVmZmVjdHMsIGFuZCBtYXkgbm90IHRyaXZpYWxseSBiZSByZW1vdmVkIGJ5IERDRS4KKyNk
ZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAgICAweDIwCisjZGVmaW5lIE5vZGVDbG9iYmVyc1dvcmxk
ICAgMHg0MAorI2RlZmluZSBOb2RlTWlnaHRDbG9iYmVyICAgIDB4ODAKKyNkZWZpbmUgTm9kZUFy
aXRoTWFzayAgICAgIDB4RjAwCisjZGVmaW5lIE5vZGVVc2VCb3R0b20gICAgICAweDAwMAorI2Rl
ZmluZSBOb2RlVXNlZEFzTnVtYmVyICAgMHgxMDAKKyNkZWZpbmUgTm9kZU5lZWRzTmVnWmVybyAg
IDB4MjAwCisjZGVmaW5lIE5vZGVVc2VkQXNNYXNrICAgICAweDMwMAorI2RlZmluZSBOb2RlTWF5
T3ZlcmZsb3cgICAgMHg0MDAKKyNkZWZpbmUgTm9kZU1heU5lZ1plcm8gICAgIDB4ODAwCisjZGVm
aW5lIE5vZGVCZWhhdmlvck1hc2sgICAweGMwMAorCit0eXBlZGVmIHVpbnQxNl90IE5vZGVGbGFn
czsKIAotc3RhdGljIGlubGluZSBib29sIG5vZGVVc2VkQXNOdW1iZXIoQXJpdGhOb2RlRmxhZ3Mg
ZmxhZ3MpCitzdGF0aWMgaW5saW5lIGJvb2wgbm9kZVVzZWRBc051bWJlcihOb2RlRmxhZ3MgZmxh
Z3MpCiB7CiAgICAgcmV0dXJuICEhKGZsYWdzICYgTm9kZVVzZWRBc051bWJlcik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKEFyaXRoTm9kZUZsYWdzIGZs
YWdzKQorc3RhdGljIGlubGluZSBib29sIG5vZGVDYW5UcnVuY2F0ZUludGVnZXIoTm9kZUZsYWdz
IGZsYWdzKQogewogICAgIHJldHVybiAhbm9kZVVzZWRBc051bWJlcihmbGFncyk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKEFyaXRoTm9kZUZsYWdz
IGZsYWdzKQorc3RhdGljIGlubGluZSBib29sIG5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8oTm9k
ZUZsYWdzIGZsYWdzKQogewogICAgIHJldHVybiAhKGZsYWdzICYgTm9kZU5lZWRzTmVnWmVybyk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBub2RlTWF5T3ZlcmZsb3coQXJpdGhOb2RlRmxhZ3Mg
ZmxhZ3MpCitzdGF0aWMgaW5saW5lIGJvb2wgbm9kZU1heU92ZXJmbG93KE5vZGVGbGFncyBmbGFn
cykKIHsKICAgICByZXR1cm4gISEoZmxhZ3MgJiBOb2RlTWF5T3ZlcmZsb3cpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIoQXJpdGhOb2RlRmxhZ3MgZmxh
Z3MpCitzdGF0aWMgaW5saW5lIGJvb2wgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIoTm9kZUZsYWdz
IGZsYWdzKQogewogICAgIGlmIChmbGFncyAmIE5vZGVNYXlPdmVyZmxvdykKICAgICAgICAgcmV0
dXJuICFub2RlVXNlZEFzTnVtYmVyKGZsYWdzKTsKQEAgLTk3LDY3ICsxMTEsNyBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgbm9kZUNhblNwZWN1bGF0ZUludGVnCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2RlRmxhZ3NBc1N0cmluZyhBcml0aE5v
ZGVGbGFncyBmbGFncykKLXsKLSAgICBpZiAoIWZsYWdzKQotICAgICAgICByZXR1cm4gIjxlbXB0
eT4iOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBzaXplID0gNjQ7Ci0gICAgc3RhdGljIGNoYXIg
ZGVzY3JpcHRpb25bc2l6ZV07Ci0gICAgQm91bmRzQ2hlY2tlZFBvaW50ZXI8Y2hhcj4gcHRyKGRl
c2NyaXB0aW9uLCBzaXplKTsKLSAgICAKLSAgICBib29sIGhhc1ByaW50ZWQgPSBmYWxzZTsKLSAg
ICAKLSAgICBpZiAoZmxhZ3MgJiBOb2RlVXNlZEFzTnVtYmVyKSB7Ci0gICAgICAgIHB0ci5zdHJj
YXQoIlVzZWRBc051bSIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKGZsYWdzICYgTm9kZU5lZWRzTmVnWmVybykgewotICAgICAgICBpZiAoaGFzUHJp
bnRlZCkKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRyLnN0cmNhdCgi
TmVlZHNOZWdaZXJvIik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICAK
LSAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5T3ZlcmZsb3cpIHsKLSAgICAgICAgaWYgKGhhc1ByaW50
ZWQpCi0gICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgIHB0ci5zdHJjYXQoIk1h
eU92ZXJmbG93Iik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICBpZiAoZmxhZ3MgJiBOb2RlTWF5TmVnWmVybykgewotICAgICAgICBpZiAoaGFzUHJpbnRlZCkK
LSAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRyLnN0cmNhdCgiTWF5TmVn
WmVybyIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgKnB0
cisrID0gMDsKLSAgICAKLSAgICByZXR1cm4gZGVzY3JpcHRpb247Ci19Ci0KLS8vIEVudHJpZXMg
aW4gdGhlIE5vZGVUeXBlIGVudW0gKGJlbG93KSBhcmUgY29tcG9zZWQgb2YgYW4gaWQsIGEgcmVz
dWx0IHR5cGUgKHBvc3NpYmx5IG5vbmUpCi0vLyBhbmQgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0
aXZlIGZsYWdzIChtdXN0IGdlbmVyYXRlLCBpcyBjb25zdGFudCwgZXRjKS4KLSNkZWZpbmUgTm9k
ZUlkTWFzayAgICAgICAgICAgMHhGRkYKLSNkZWZpbmUgTm9kZVJlc3VsdE1hc2sgICAgICAweEYw
MDAKLSNkZWZpbmUgTm9kZU11c3RHZW5lcmF0ZSAgIDB4MTAwMDAgLy8gc2V0IG9uIG5vZGVzIHRo
YXQgaGF2ZSBzaWRlIGVmZmVjdHMsIGFuZCBtYXkgbm90IHRyaXZpYWxseSBiZSByZW1vdmVkIGJ5
IERDRS4KLSNkZWZpbmUgTm9kZUlzQ29uc3RhbnQgICAgIDB4MjAwMDAKLSNkZWZpbmUgTm9kZUlz
SnVtcCAgICAgICAgIDB4NDAwMDAKLSNkZWZpbmUgTm9kZUlzQnJhbmNoICAgICAgIDB4ODAwMDAK
LSNkZWZpbmUgTm9kZUlzVGVybWluYWwgICAgMHgxMDAwMDAKLSNkZWZpbmUgTm9kZUhhc1ZhckFy
Z3MgICAgMHgyMDAwMDAKLSNkZWZpbmUgTm9kZUNsb2JiZXJzV29ybGQgMHg0MDAwMDAKLSNkZWZp
bmUgTm9kZU1pZ2h0Q2xvYmJlciAgMHg4MDAwMDAKLQotLy8gVGhlc2UgdmFsdWVzIHJlY29yZCB0
aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG5vZGUgKGFzIGNoZWNrZWQgYnkgTm9kZVJlc3VsdE1hc2ss
IGFib3ZlKSwgMCBmb3Igbm8gcmVzdWx0LgotI2RlZmluZSBOb2RlUmVzdWx0SlMgICAgICAgIDB4
MTAwMAotI2RlZmluZSBOb2RlUmVzdWx0TnVtYmVyICAgIDB4MjAwMAotI2RlZmluZSBOb2RlUmVz
dWx0SW50MzIgICAgIDB4MzAwMAotI2RlZmluZSBOb2RlUmVzdWx0Qm9vbGVhbiAgIDB4NDAwMAot
I2RlZmluZSBOb2RlUmVzdWx0U3RvcmFnZSAgIDB4NTAwMAorY29uc3QgY2hhciogYXJpdGhOb2Rl
RmxhZ3NBc1N0cmluZyhOb2RlRmxhZ3MpOwogCiAvLyBUaGlzIG1hY3JvIGRlZmluZXMgYSBzZXQg
b2YgaW5mb3JtYXRpb24gYWJvdXQgYWxsIGtub3duIG5vZGUgdHlwZXMsIHVzZWQgdG8gcG9wdWxh
dGUgTm9kZUlkLCBOb2RlVHlwZSBiZWxvdy4KICNkZWZpbmUgRk9SX0VBQ0hfREZHX09QKG1hY3Jv
KSBcCkBAIC0zMDQsMTEgKzI1OCwxMSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGFyaXRo
Tm9kZUZsYWdzCiAgICAgbWFjcm8oTmV3RnVuY3Rpb25FeHByZXNzaW9uLCBOb2RlUmVzdWx0SlMp
IFwKICAgICBcCiAgICAgLyogQmxvY2sgdGVybWluYWxzLiAqL1wKLSAgICBtYWNybyhKdW1wLCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwgfCBOb2RlSXNKdW1wKSBcCi0gICAgbWFj
cm8oQnJhbmNoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwgfCBOb2RlSXNCcmFu
Y2gpIFwKLSAgICBtYWNybyhSZXR1cm4sIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSXNUZXJtaW5h
bCkgXAotICAgIG1hY3JvKFRocm93LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwp
IFwKLSAgICBtYWNybyhUaHJvd1JlZmVyZW5jZUVycm9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUlzVGVybWluYWwpIFwKKyAgICBtYWNybyhKdW1wLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oQnJhbmNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUmV0dXJuLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVGhyb3csIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhUaHJvd1JlZmVyZW5jZUVycm9yLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAog
ICAgIC8qIFRoaXMgaXMgYSBwc2V1ZG8tdGVybWluYWwuIEl0IG1lYW5zIHRoYXQgZXhlY3V0aW9u
IHNob3VsZCBmYWxsIG91dCBvZiBERkcgYXQgKi9cCiAgICAgLyogdGhpcyBwb2ludCwgYnV0IGV4
ZWN1dGlvbiBkb2VzIGNvbnRpbnVlIGluIHRoZSBiYXNpYyBibG9jayAtIGp1c3QgaW4gYSAqL1wK
QEAgLTMxNywyMCArMjcxLDI1IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2Rl
RmxhZ3MKIAogLy8gVGhpcyBlbnVtIGdlbmVyYXRlcyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2lu
ZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMsCiAvLyBhbmQgaXMgdXNlZCBieSB0aGUgc3Vic2VxdWVu
dCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBpZCAoYXMgYWNjZXNzZWQgdmlhIHRoZSBOb2RlSWRNYXNr
KS4KLWVudW0gTm9kZUlkIHsKLSNkZWZpbmUgREZHX09QX0VOVU0ob3Bjb2RlLCBmbGFncykgb3Bj
b2RlIyNfaWQsCitlbnVtIE5vZGVUeXBlIHsKKyNkZWZpbmUgREZHX09QX0VOVU0ob3Bjb2RlLCBm
bGFncykgb3Bjb2RlLAogICAgIEZPUl9FQUNIX0RGR19PUChERkdfT1BfRU5VTSkKICN1bmRlZiBE
RkdfT1BfRU5VTQotICAgIExhc3ROb2RlSWQKKyAgICBMYXN0Tm9kZVR5cGUKIH07CiAKLS8vIEVu
dHJpZXMgaW4gdGhpcyBlbnVtIGRlc2NyaWJlIGFsbCBOb2RlIHR5cGVzLgotLy8gVGhlIGVudW0g
dmFsdWUgY29udGFpbnMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgaWQsIGEgcmVzdWx0IHR5
cGUsIGFuZCBhZGRpdGlvbmFsIGZsYWdzLgotZW51bSBOb2RlVHlwZSB7Ci0jZGVmaW5lIERGR19P
UF9FTlVNKG9wY29kZSwgZmxhZ3MpIG9wY29kZSA9IG9wY29kZSMjX2lkIHwgKGZsYWdzKSwKKy8v
IFNwZWNpZmllcyB0aGUgZGVmYXVsdCBmbGFncyBmb3IgZWFjaCBub2RlLgoraW5saW5lIE5vZGVG
bGFncyBkZWZhdWx0RmxhZ3MoTm9kZVR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworI2Rl
ZmluZSBERkdfT1BfRU5VTShvcGNvZGUsIGZsYWdzKSBjYXNlIG9wY29kZTogcmV0dXJuIGZsYWdz
OwogICAgIEZPUl9FQUNIX0RGR19PUChERkdfT1BfRU5VTSkKICN1bmRlZiBERkdfT1BfRU5VTQot
fTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQogCiAvLyBUaGlzIHR5cGUgdXNlZCBpbiBwYXNzaW5nIGFuIGlt
bWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9yOwogLy8gZGlzdGluZ3Vpc2hlcyBh
biBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRleCBpbnRvIGEgQ29kZUJsb2NrIGRh
dGEgc3RydWN0dXJlIC0gCkBAIC0zNTMsMzQgKzMxMiwzMiBAQCBzdHJ1Y3QgTm9kZSB7CiAKICAg
ICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRl
IHZhbHVlLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9k
ZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUlu
ZGV4IGNoaWxkMyA9IE5vTm9kZSkKLSAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBjb2RlT3Jp
Z2luKGNvZGVPcmlnaW4pCisgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAg
ICAsIGNoaWxkcmVuKE5vZGVSZWZlcmVuY2VCbG9iOjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNo
aWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGlj
dE5vbmUpCiAgICAgewotICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7Ci0g
ICAgICAgIEFTU0VSVCghaGFzQXJpdGhOb2RlRmxhZ3MoKSk7CisgICAgICAgIHNldE9wQW5kRGVm
YXVsdEZsYWdzKG9wKTsKKyAgICAgICAgQVNTRVJUKCEoZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykp
OwogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVu
IGFuZCBhbiBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQotICAgICAg
ICA6IG9wKG9wKQotICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgOiBj
b2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oTm9kZVJlZmVyZW5jZUJs
b2I6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJl
Z2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQog
ICAgICAgICAsIG1fb3BJbmZvKGltbS5tX3ZhbHVlKQogICAgICAgICAsIG1fcHJlZGljdGlvbihQ
cmVkaWN0Tm9uZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3Mp
KTsKKyAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOworICAgICAgICBBU1NFUlQoIShm
bGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9k
ZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgogICAgIE5v
ZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5m
byBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQotICAgICAgICA6IG9wKG9wKQotICAgICAg
ICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmln
aW4pCiAgICAgICAgICwgY2hpbGRyZW4oTm9kZVJlZmVyZW5jZUJsb2I6OkZpeGVkLCBjaGlsZDEs
IGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQpAQCAtMzg4LDEzICszNDUsMTMg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fb3BJbmZvMihzYWZlQ2FzdDx1bnNpZ25lZD4o
aW1tMi5tX3ZhbHVlKSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAg
ewotICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIHNldE9w
QW5kRGVmYXVsdEZsYWdzKG9wKTsKKyAgICAgICAgQVNTRVJUKCEoZmxhZ3MgJiBOb2RlSGFzVmFy
QXJncykpOwogICAgIH0KICAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggYSB2YXJp
YWJsZSBudW1iZXIgb2YgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgogICAgIE5v
ZGUoVmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8g
aW1tMSwgT3BJbmZvIGltbTIsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxk
cmVuKQotICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikK
KyAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oTm9k
ZVJlZmVyZW5jZUJsb2I6OlZhcmlhYmxlLCBmaXJzdENoaWxkLCBudW1DaGlsZHJlbikKICAgICAg
ICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAs
IG1fcmVmQ291bnQoMCkKQEAgLTQwMiwxMiArMzU5LDE5IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgLCBtX29wSW5mbzIoc2FmZUNhc3Q8dW5zaWduZWQ+KGltbTIubV92YWx1ZSkpCiAgICAgICAg
ICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9wICYg
Tm9kZUhhc1ZhckFyZ3MpOworICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CisgICAg
ICAgIEFTU0VSVChmbGFncyAmIE5vZGVIYXNWYXJBcmdzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzZXRPcEFuZERlZmF1bHRGbGFncyhOb2RlVHlwZSBvcCkKKyAgICB7CisgICAgICAgIHRoaXMt
Pm9wID0gb3A7CisgICAgICAgIGZsYWdzID0gZGVmYXVsdEZsYWdzKG9wKTsKICAgICB9CiAKICAg
ICBib29sIG11c3RHZW5lcmF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AgJiBOb2RlTXVz
dEdlbmVyYXRlOworICAgICAgICByZXR1cm4gZmxhZ3MgJiBOb2RlTXVzdEdlbmVyYXRlOwogICAg
IH0KIAogICAgIGJvb2wgaXNDb25zdGFudCgpCkBAIC01NDYsNDQgKzUxMCwzMiBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQXJpdGhOb2RlRmxhZ3MgcmF3QXJp
dGhOb2RlRmxhZ3MoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc0FyaXRoTm9kZUZsYWdzKCkp
OwotICAgICAgICByZXR1cm4gbV9vcEluZm87Ci0gICAgfQotICAgIAogICAgIC8vIFRoaXMgY29y
cmVjdHMgdGhlIGFyaXRobWV0aWMgbm9kZSBmbGFncywgc28gdGhhdCBpcnJlbGV2YW50IGJpdHMg
YXJlCiAgICAgLy8gaWdub3JlZC4gSW4gcGFydGljdWxhciwgYW55dGhpbmcgb3RoZXIgdGhhbiBB
cml0aE11bCBkb2VzIG5vdCBuZWVkCiAgICAgLy8gdG8ga25vdyBpZiBpdCBjYW4gc3BlY3VsYXRl
IG9uIG5lZ2F0aXZlIHplcm8uCi0gICAgQXJpdGhOb2RlRmxhZ3MgYXJpdGhOb2RlRmxhZ3MoKQor
ICAgIE5vZGVGbGFncyBhcml0aE5vZGVGbGFncygpCiAgICAgewotICAgICAgICBBcml0aE5vZGVG
bGFncyByZXN1bHQgPSByYXdBcml0aE5vZGVGbGFncygpOworICAgICAgICBOb2RlRmxhZ3MgcmVz
dWx0ID0gZmxhZ3MgJiBOb2RlQXJpdGhNYXNrOwogICAgICAgICBpZiAob3AgPT0gQXJpdGhNdWwp
CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gcmVzdWx0ICYgfk5v
ZGVOZWVkc05lZ1plcm87CiAgICAgfQogICAgIAotICAgIEFyaXRoTm9kZUZsYWdzIGFyaXRoTm9k
ZUZsYWdzRm9yQ29tcGFyZSgpCisgICAgdm9pZCBzZXRBcml0aE5vZGVGbGFnKE5vZGVGbGFncyBu
ZXdGbGFncykKICAgICB7Ci0gICAgICAgIGlmIChoYXNBcml0aE5vZGVGbGFncygpKQotICAgICAg
ICAgICAgcmV0dXJuIGFyaXRoTm9kZUZsYWdzKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIHNldEFyaXRoTm9kZUZsYWcoQXJpdGhOb2RlRmxhZ3MgZmxhZ3MpCi0g
ICAgewotICAgICAgICBBU1NFUlQoaGFzQXJpdGhOb2RlRmxhZ3MoKSk7Ci0gICAgICAgIG1fb3BJ
bmZvID0gZmxhZ3M7CisgICAgICAgIEFTU0VSVCghKG5ld0ZsYWdzICYgfk5vZGVBcml0aE1hc2sp
KTsKKyAgICAgICAgCisgICAgICAgIGZsYWdzICY9IH5Ob2RlQXJpdGhNYXNrOworICAgICAgICBm
bGFncyB8PSBuZXdGbGFnczsKICAgICB9CiAgICAgCi0gICAgYm9vbCBtZXJnZUFyaXRoTm9kZUZs
YWdzKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQorICAgIGJvb2wgbWVyZ2VBcml0aE5vZGVGbGFncyhO
b2RlRmxhZ3MgbmV3RmxhZ3MpCiAgICAgewotICAgICAgICBpZiAoIWhhc0FyaXRoTm9kZUZsYWdz
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEFyaXRoTm9kZUZsYWdzIG5l
d0ZsYWdzID0gbV9vcEluZm8gfCBmbGFnczsKLSAgICAgICAgaWYgKG5ld0ZsYWdzID09IG1fb3BJ
bmZvKQorICAgICAgICBBU1NFUlQoIShuZXdGbGFncyAmIH5Ob2RlQXJpdGhNYXNrKSk7CisgICAg
ICAgIG5ld0ZsYWdzID0gZmxhZ3MgfCBuZXdGbGFnczsKKyAgICAgICAgaWYgKG5ld0ZsYWdzID09
IGZsYWdzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX29wSW5mbyA9IG5l
d0ZsYWdzOworICAgICAgICBmbGFncyA9IG5ld0ZsYWdzOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgCkBAIC02MzksNDIgKzU5MSw1MSBAQCBzdHJ1Y3QgTm9kZSB7CiAKICAgICBi
b29sIGhhc1Jlc3VsdCgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AgJiBOb2RlUmVzdWx0TWFz
azsKKyAgICAgICAgcmV0dXJuIGZsYWdzICYgTm9kZVJlc3VsdE1hc2s7CiAgICAgfQogCiAgICAg
Ym9vbCBoYXNJbnQzMlJlc3VsdCgpCiAgICAgewotICAgICAgICByZXR1cm4gKG9wICYgTm9kZVJl
c3VsdE1hc2spID09IE5vZGVSZXN1bHRJbnQzMjsKKyAgICAgICAgcmV0dXJuIChmbGFncyAmIE5v
ZGVSZXN1bHRNYXNrKSA9PSBOb2RlUmVzdWx0SW50MzI7CiAgICAgfQogICAgIAogICAgIGJvb2wg
aGFzTnVtYmVyUmVzdWx0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiAob3AgJiBOb2RlUmVzdWx0
TWFzaykgPT0gTm9kZVJlc3VsdE51bWJlcjsKKyAgICAgICAgcmV0dXJuIChmbGFncyAmIE5vZGVS
ZXN1bHRNYXNrKSA9PSBOb2RlUmVzdWx0TnVtYmVyOwogICAgIH0KICAgICAKICAgICBib29sIGhh
c0pTUmVzdWx0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiAob3AgJiBOb2RlUmVzdWx0TWFzaykg
PT0gTm9kZVJlc3VsdEpTOworICAgICAgICByZXR1cm4gKGZsYWdzICYgTm9kZVJlc3VsdE1hc2sp
ID09IE5vZGVSZXN1bHRKUzsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNCb29sZWFuUmVzdWx0
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiAob3AgJiBOb2RlUmVzdWx0TWFzaykgPT0gTm9kZVJl
c3VsdEJvb2xlYW47CisgICAgICAgIHJldHVybiAoZmxhZ3MgJiBOb2RlUmVzdWx0TWFzaykgPT0g
Tm9kZVJlc3VsdEJvb2xlYW47CiAgICAgfQogCiAgICAgYm9vbCBpc0p1bXAoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9wICYgTm9kZUlzSnVtcDsKKyAgICAgICAgcmV0dXJuIG9wID09IEp1bXA7
CiAgICAgfQogCiAgICAgYm9vbCBpc0JyYW5jaCgpCiAgICAgewotICAgICAgICByZXR1cm4gb3Ag
JiBOb2RlSXNCcmFuY2g7CisgICAgICAgIHJldHVybiBvcCA9PSBCcmFuY2g7CiAgICAgfQogCiAg
ICAgYm9vbCBpc1Rlcm1pbmFsKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCAmIE5vZGVJc1Rl
cm1pbmFsOworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgSnVtcDoKKyAgICAg
ICAgY2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNlIFRocm93
OgorICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIHVuc2lnbmVkIHRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJz
aW5nKCkKQEAgLTg3MSw3ICs4MzIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgTm9kZVVz
ZSBjaGlsZDEoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykp
OworICAgICAgICBBU1NFUlQoIShmbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHJl
dHVybiBjaGlsZHJlbi5jaGlsZDEoKTsKICAgICB9CiAgICAgCkBAIC04ODUsMjUgKzg0NiwyNSBA
QCBzdHJ1Y3QgTm9kZSB7CiAKICAgICBOb2RlVXNlIGNoaWxkMigpCiAgICAgewotICAgICAgICBB
U1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIEFTU0VSVCghKGZsYWdzICYg
Tm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMigpOwogICAg
IH0KIAogICAgIE5vZGVVc2UgY2hpbGQzKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghKG9wICYg
Tm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgQVNTRVJUKCEoZmxhZ3MgJiBOb2RlSGFzVmFyQXJn
cykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQzKCk7CiAgICAgfQogICAgIAogICAg
IHVuc2lnbmVkIGZpcnN0Q2hpbGQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhh
c1ZhckFyZ3MpOworICAgICAgICBBU1NFUlQoZmxhZ3MgJiBOb2RlSGFzVmFyQXJncyk7CiAgICAg
ICAgIHJldHVybiBjaGlsZHJlbi5maXJzdENoaWxkKCk7CiAgICAgfQogICAgIAogICAgIHVuc2ln
bmVkIG51bUNoaWxkcmVuKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJB
cmdzKTsKKyAgICAgICAgQVNTRVJUKGZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpOwogICAgICAgICBy
ZXR1cm4gY2hpbGRyZW4ubnVtQ2hpbGRyZW4oKTsKICAgICB9CiAgICAgCkBAIC0xMDY5LDggKzEw
MzAsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGZwcmludGYob3V0LCAiLCBAJXUiLCBjaGls
ZDMoKS5pbmRleCgpKTsKICAgICB9CiAgICAgCi0gICAgLy8gVGhpcyBlbnVtIHZhbHVlIGRlc2Ny
aWJlcyB0aGUgdHlwZSBvZiB0aGUgbm9kZS4KLSAgICBOb2RlVHlwZSBvcDsKKyAgICB1aW50MTZf
dCBvcDsgLy8gcmVhbCB0eXBlIGlzIE5vZGVUeXBlCisgICAgTm9kZUZsYWdzIGZsYWdzOwogICAg
IC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24gKGN1cnJl
bnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW47CiAgICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0byAzIGNoaWxkcmVuLCBvciBsaW5r
cyB0byBhIHZhcmlhYmxlIGxlbmd0aCBzZXQgb2YgY2hpbGRyZW4uCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTEwMzQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NSw3ICsxMDUsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUo
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIE5vZGVUeXBlIG9wID0g
bm9kZS5vcDsKKyAgICAgICAgTm9kZVR5cGUgb3AgPSBzdGF0aWNfY2FzdDxOb2RlVHlwZT4obm9k
ZS5vcCk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAg
ICAgIGRhdGFMb2coIiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShvcCksIG1fY29tcGlsZUlu
ZGV4KTsKQEAgLTQ2OCw2ICs0NjgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJbmxpbmVT
dGFydDoKICAgICAgICAgY2FzZSBOb3A6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAjZWxzZQogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgYnJlYWs7CkBAIC01MTYsNyArNTIwLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIHZvdGUoTm9kZSYgbm9kZSwgVmFyaWFibGVBY2Nlc3NEYXRhOjpCYWxsb3QgYmFsbG90KQog
ICAgIHsKLSAgICAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICBp
ZiAobm9kZS5mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENo
aWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAgICAgICAgICAgICAgICAg
dm90ZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBiYWxsb3QpOwogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtNjI0LDcgKzYyOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAg
ICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOworICAgICAgICBOb2RlVHlwZSBvcCA9IHN0YXRp
Y19jYXN0PE5vZGVUeXBlPihub2RlLm9wKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygiICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BO
YW1lKG9wKSwgbV9jb21waWxlSW5kZXgpOwpAQCAtNjgwLDEzICs2ODQsMTYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBub2RlLm9wID0gR2V0RmxvYXQ2NEFycmF5TGVuZ3RoOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgbV9ncmFwaC5kZXJlZihtX2NvbXBpbGVJbmRleCk7IC8vIE5vIGxvbmdlciBNdXN0R2Vu
ZXJhdGUKKyAgICAgICAgICAgIC8vIE5vIGxvbmdlciBNdXN0R2VuZXJhdGUKKyAgICAgICAgICAg
IEFTU0VSVChub2RlLmZsYWdzICYgTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICBub2Rl
LmZsYWdzICY9IH5Ob2RlTXVzdEdlbmVyYXRlOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZiht
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKICAgICAgICAgICAgIFByZWRpY3RlZFR5
cGUgYmFzZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsK
ICAgICAgICAgICAgIGlmICghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNl
UHJlZGljdGlvbikgewotICAgICAgICAgICAgICAgIG5vZGUub3AgPSBOb3A7CisgICAgICAgICAg
ICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOwogICAgICAgICAgICAgICAgIG1f
Z3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsKICAgICAgICAgICAgICAgICBtX2dyYXBo
LmNsZWFyQW5kRGVyZWZDaGlsZDIobm9kZSk7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVh
ckFuZERlcmVmQ2hpbGQzKG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY29yZUJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY29yZUJvYXJkLmgJKHJldmlzaW9uIDExMDM0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2NvcmVCb2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxNCArNTgsMjcgQEAg
cHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0jaWYgREZHX0VOQUJMRShDT05TSVNURU5DWV9D
SEVDSykKICAgICB+U2NvcmVCb2FyZCgpCiAgICAgewotICAgICAgICAvLyBGb3IgZXZlcnkgZW50
cnkgaW4gdGhlIHVzZWQgbGlzdCB0aGUgdXNlIGNvdW50IG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVy
IHNob3VsZCBiZSB6ZXJvLgotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJlZS5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgIEFTU0VSVCghbV91c2VkW2ldIHx8IG1fdXNlZFtpXSA9
PSBtYXgoKSk7CisgICAgICAgIGFzc2VydENsZWFyKCk7CiAgICAgfQorICAgIAorICAgIHZvaWQg
YXNzZXJ0Q2xlYXIoKQorICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIC8vIEZv
ciBldmVyeSBlbnRyeSBpbiB0aGUgdXNlZCBsaXN0IHRoZSB1c2UgY291bnQgb2YgdGhlIHZpcnR1
YWwgcmVnaXN0ZXIgc2hvdWxkIGJlIHplcm8sIG9yIG1heCwgZHVlIHRvIGl0IGJlaW5nIGEgcHJl
c2VydmVkIGxvY2FsLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdXNlZC5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIEFTU0VSVCghbV91c2VkW2ldIHx8IG1fdXNlZFtpXSA9PSBt
YXgoKSk7CisgICAgICAgIC8vIEZvciBldmVyeSBlbnRyeSBpbiB0aGUgZnJlZSBsaXN0LCB0aGUg
dXNlIGNvdW50IHNob3VsZCBiZSB6ZXJvLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZnJlZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIEFTU0VSVCghbV91c2VkW21fZnJlZVtp
XV0pOworICAgICAgICAvLyBUaGVyZSBtdXN0IG5vdCBiZSBkdXBsaWNhdGVzIGluIHRoZSBmcmVl
IGxpc3QuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmVlLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2ZyZWUuc2l6ZSgp
OyArK2opCisgICAgICAgICAgICAgICAgQVNTRVJUKG1fZnJlZVtpXSAhPSBtX2ZyZWVbal0pOwor
ICAgICAgICB9CiAjZW5kaWYKKyAgICB9CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYWxsb2NhdGUo
KQogICAgIHsKQEAgLTk5LDYgKzExMiw5IEBAIHB1YmxpYzoKICAgICAgICAgdWludDMyX3QgaW5k
ZXggPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBBU1NFUlQobV91c2VkW2luZGV4
XSAhPSBtYXgoKSk7CiAgICAgICAgIGlmIChub2RlLnJlZkNvdW50KCkgPT0gKyttX3VzZWRbaW5k
ZXhdKSB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAg
ICAgICAgZGF0YUxvZygiIEZyZWVpbmcgdmlydHVhbCByZWdpc3RlciAldS4iLCBpbmRleCk7Cisj
ZW5kaWYKICAgICAgICAgICAgIC8vIElmIHRoZSB1c2UgY291bnQgaW4gdGhlIHNjb3JlYm9hcmQg
cmVhY2hlcyB0aGUgdXNlIGNvdW50IGZvciB0aGUgbm9kZSwKICAgICAgICAgICAgIC8vIHRoZW4g
dGhpcyB3YXMgaXRzIGxhc3QgdXNlOyB0aGUgdmlydHVhbCByZWdpc3RlciBpcyBub3cgZnJlZS4K
ICAgICAgICAgICAgIC8vIENsZWFyIHRoZSB1c2UgY291bnQgJiBhZGQgdG8gdGhlIGZyZWUgbGlz
dC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTEwMzQ2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0
MCw3ICsxNjQwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiB7Ci0gICAgTm9kZVR5
cGUgb3AgPSBub2RlLm9wOworICAgIE5vZGVUeXBlIG9wID0gc3RhdGljX2Nhc3Q8Tm9kZVR5cGU+
KG5vZGUub3ApOwogCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgSlNDb25zdGFudDoKQEAg
LTM1NzgsNiArMzU3OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKIAogICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAgICAgY2FzZSBOb3A6CisgICAgY2FzZSBMYXN0
Tm9kZVR5cGU6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDExMDM0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NDQsNyAr
MTc0NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogewotICAgIE5vZGVUeXBlIG9w
ID0gbm9kZS5vcDsKKyAgICBOb2RlVHlwZSBvcCA9IHN0YXRpY19jYXN0PE5vZGVUeXBlPihub2Rl
Lm9wKTsKIAogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CkBAIC0zNTUy
LDYgKzM1NTIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIGNhc2UgTm9wOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDExMDM0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUkKIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6dXNlQ2hpbGRyZW4oTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAobm9kZS5vcCAmIE5vZGVI
YXNWYXJBcmdzKSB7CisgICAgaWYgKG5vZGUuZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4
IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAg
ICAgICAgICAgICB1c2UobV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7
CiAgICAgfSBlbHNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDExMDM0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lz
dGVyQWxsb2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMzggKzQ4LDYyIEBA
IHB1YmxpYzoKICAgICAgICAgZGF0YUxvZygiXG4iKTsKICNlbmRpZgogICAgICAgICBTY29yZUJv
YXJkIHNjb3JlQm9hcmQobV9ncmFwaCwgbV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGguc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2ldOworICAgICAgICBzY29yZUJvYXJkLmFzc2VydENs
ZWFyKCk7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAg
ICBib29sIG5lZWRzTmV3TGluZSA9IGZhbHNlOworI2VuZGlmCisgICAgICAgIGZvciAoc2l6ZV90
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsr
YmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXhJ
bkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2sp
IHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4
SW5CbG9jayk7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAg
ICAgICAgICAgICAgIGlmIChuZWVkc05ld0xpbmUpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgQCV1OiIsIG5vZGVJbmRleCk7
CisgICAgICAgICAgICAgICAgbmVlZHNOZXdMaW5lID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CiAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkgfHwgbm9kZS5vcCA9PSBQaGkgfHwgbm9k
ZS5vcCA9PSBGbHVzaCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSB8fCBub2RlLm9wID09IFBoaSB8fCBub2RlLm9w
ID09IEZsdXNoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gR2V0TG9jYWwgbm9kZXMgYXJlIGVmZmVjdGl2ZWx5IHBoaSBub2RlcyBp
biB0aGUgZ3JhcGgsIHJlZmVyZW5jaW5nCi0gICAgICAgICAgICAvLyByZXN1bHRzIGZyb20gcHJp
b3IgYmxvY2tzLgotICAgICAgICAgICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGaXJzdCwgY2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUn
cyBjaGlsZHJlbiwgdGhlbgotICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJl
Z2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKLSAgICAgICAgICAgICAgICAv
LyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQotICAg
ICAgICAgICAgICAgIC8vIFZpcnR1YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUg
cmV1c2VkIGZvciBub2RlLgotICAgICAgICAgICAgICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1Zh
ckFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1D
aGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2Fy
ZC51c2UobV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGls
ZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQyKCkp
OwotICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMygpKTsKKyAg
ICAgICAgICAgICAgICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVz
IGluIHRoZSBncmFwaCwgcmVmZXJlbmNpbmcKKyAgICAgICAgICAgICAgICAvLyByZXN1bHRzIGZy
b20gcHJpb3IgYmxvY2tzLgorICAgICAgICAgICAgICAgIGlmIChub2RlLm9wICE9IEdldExvY2Fs
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0LCBjYWxsIHVzZSBvbiBhbGwgb2YgdGhl
IGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCisgICAgICAgICAgICAgICAgICAgIC8vIGFs
bG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRoaXMK
KyAgICAgICAgICAgICAgICAgICAgLy8gb3JkZXIgc28gdGhhdCBpZiBhIGNoaWxkIGlzIG9uIGl0
cyBsYXN0IHVzZSwgYW5kIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVy
IGlzIGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCisgICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLmZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hp
bGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgr
KykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShtX2dyYXBoLm1f
dmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMygpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFub2RlLmhhc1Jlc3VsdCgpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIG5vZGUuc2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3JlQm9hcmQuYWxsb2NhdGUoKSk7Ci0gICAgICAgICAgICAvLyAnbXVzdEdlbmVyYXRlJyBu
b2RlcyBoYXZlIHRoZWlyIHVzZUNvdW50IGFydGlmaWNpYWxseSBlbGV2YXRlZCwKLSAgICAgICAg
ICAgIC8vIGNhbGwgdXNlIG5vdyB0byBhY2NvdW50IGZvciB0aGlzLgotICAgICAgICAgICAgaWYg
KG5vZGUubXVzdEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UoaSk7
CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHNjb3Jl
Qm9hcmQuYWxsb2NhdGUoKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiIEFzc2lnbmluZyB2aXJ0dWFsIHJlZ2lzdGVy
ICV1IHRvIG5vZGUgJXUuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3Rl
ciwgbm9kZUluZGV4KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIG5vZGUuc2V0VmlydHVhbFJl
Z2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgLy8gJ211c3RHZW5lcmF0
ZScgbm9kZXMgaGF2ZSB0aGVpciB1c2VDb3VudCBhcnRpZmljaWFsbHkgZWxldmF0ZWQsCisgICAg
ICAgICAgICAgICAgLy8gY2FsbCB1c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUubXVzdEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIHNj
b3JlQm9hcmQudXNlKG5vZGVJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzY29y
ZUJvYXJkLmFzc2VydENsZWFyKCk7CiAgICAgICAgIH0KKyNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGlmIChuZWVkc05ld0xpbmUpCisgICAgICAgICAg
ICBkYXRhTG9nKCJcbiIpOworI2VuZGlmCiAKICAgICAgICAgLy8gJ21fbnVtQ2FsbGVlUmVnaXN0
ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxvY2FscyBhbmQgdGVtcG9yYXJpZXMgYWxsb2NhdGVkCiAg
ICAgICAgIC8vIGZvciB0aGUgZnVuY3Rpb24gKGFuZCBjaGVja2VkIGZvciBvbiBlbnRyeSkuIFNp
bmNlIHdlIHBlcmZvcm0gYSBuZXcgYW5kCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131273</attachid>
            <date>2012-03-11 19:45:57 -0700</date>
            <delta_ts>2012-03-12 01:37:04 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>mutableflags_patch_3.diff</filename>
            <type>text/plain</type>
            <size>55942</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEwNDAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBA
QAorMjAxMi0wMy0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFsbCBERkcgbm9kZXMgc2hvdWxkIGhhdmUgYSBtdXRhYmxlIHNldCBvZiBmbGFncworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA3NzkKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzExMDI2MjE4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgR290IHJpZCBvZiBOb2RlSWQsIGFuZCBwbGFjZWQg
YWxsIG9mIHRoZSBmbGFncyB0aGF0IGRpc3Rpbmd1aXNoZWQgTm9kZUlkCisgICAgICAgIGZyb20g
Tm9kZVR5cGUgaW50byBhIHNlcGFyYXRlIE5vZGU6OmZsYWdzIGZpZWxkLiBDb21iaW5lZCB3aGF0
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIEFyaXRoTm9kZUZsYWdzIGludG8gTm9kZTo6ZmxhZ3Mu
CisgICAgICAgIAorICAgICAgICBJbiB0aGUgcHJvY2VzcyBvZiBkZWJ1Z2dpbmcsIEkgZm91bmQg
dGhhdCB0aGUgZGVidWcgc3VwcG9ydCBpbiB0aGUgdmlydHVhbAorICAgICAgICByZWdpc3RlciBh
bGxvY2F0b3Igd2FzIGxhY2tpbmcsIHNvIEkgaW1wcm92ZWQgaXQuIEkgYWxzbyByZWFsaXplZCB0
aGF0IHRoZQorICAgICAgICB2aXJ0dWFsIHJlZ2lzdGVyIGFsbG9jYXRvciB3YXMgYXNzdW1pbmcg
dGhhdCB0aGUgbm9kZXMgaW4gYSBiYXNpYyBibG9jayB3ZXJlCisgICAgICAgIGNvbnRpZ3VvdXMs
IHdoaWNoIGlzIG5vIGxvbmdlciB0aGUgY2FzZS4gU28gSSBmaXhlZCB0aGF0LiBUaGUgZml4IGFs
c28gbWFkZQorICAgICAgICBpdCBuYXR1cmFsIHRvIGhhdmUgbW9yZSBleHRyZW1lIGFzc2VydGlv
bnMsIHNvIEkgYWRkZWQgdGhlbS4gSSBzdXNwZWN0IHRoaXMKKyAgICAgICAgd2lsbCBtYWtlIGl0
IGVhc2llciB0byBjYXRjaCB2aXJ0dWFsIHJlZ2lzdGVyIGFsbG9jYXRpb24gYnVncyBpbiB0aGUg
ZnV0dXJlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBtb3N0bHkgcGVyZm9ybWFuY2UgbmV1
dHJhbDsgaWYgYW55dGhpbmcgaXQgbG9va3MgbGlrZSBhIHNsaWdodAorICAgICAgICBzcGVlZC11
cC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBsZWF2ZSBzb21lIHdvcmsgZm9y
IGZ1dHVyZSByZWZhY3RvcmluZ3M7IGZvciBleGFtcGxlLCBOb2RlOjpvcAorICAgICAgICBpcyB1
bmVuY2Fwc3VsYXRlZC4gVGhpcyB3YXMgYWxyZWFkeSB0aGUgY2FzZSwgdGhvdWdoIG5vdyBpdCBm
ZWVscyBldmVuIG1vcmUKKyAgICAgICAgbGlrZSBpdCBzaG91bGQgYmUuIEkgYXZvaWRlZCBkb2lu
ZyB0aGF0IGJlY2F1c2UgdGhpcyBwYXRjaCBoYXMgYWxyZWFkeSBncm93bgorICAgICAgICB3YXkg
YmlnZ2VyIHRoYW4gSSB3YW50ZWQuCisgICAgICAgIAorICAgICAgICBGaW5hbGx5LCB0aGlzIHBh
dGNoIGNyZWF0ZXMgYSBERkdOb2RlLmNwcCBmaWxlIGFuZCBtYWtlcyBhIHNsaWdodCBlZmZvcnQg
dG8KKyAgICAgICAgbW92ZSBzb21lIHVubmVjZXNzYXJpbHkgaW5saW5lIHN0dWZmIG91dCBvZiBE
RkdOb2RlLmguCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcvREZHQXJpdGhO
b2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJpdGhOb2Rl
RmxhZ3NJbmZlcmVuY2VQaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dy
YXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZVNhZmUpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjptYWtlRGl2U2FmZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAg
ICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6
ZW5kSW5kZXhGb3JQdXJlQ1NFKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cHVyZUNT
RSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNsb2JiZXJzV29ybGQpOgorICAgICAg
ICAoSlNDOjpERkc6OkNTRVBoYXNlOjppbXB1cmVDU0UpOgorICAgICAgICAoSlNDOjpERkc6OkNT
RVBoYXNlOjpzZXRSZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmVs
aW1pbmF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybUJsb2NrQ1NFKToKKyAgICAgICAg
KENTRVBoYXNlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAg
ICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR05vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6YXJpdGhOb2RlRmxhZ3NBc1N0cmluZyk6CisgICAg
ICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
bm9kZVVzZWRBc051bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUNhblRydW5jYXRlSW50
ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6bm9kZU1heU92ZXJmbG93KToKKyAgICAgICAgKEpTQzo6REZHOjpu
b2RlQ2FuU3BlY3VsYXRlSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6ZGVmYXVsdEZsYWdz
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpOb2RlKToKKyAgICAgICAgKE5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldE9wQW5kRGVmYXVsdEZsYWdzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjptdXN0R2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmFy
aXRoTm9kZUZsYWdzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzZXRBcml0aE5vZGVGbGFn
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjptZXJnZUFyaXRoTm9kZUZsYWdzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNSZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Omhhc0ludDMyUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNOdW1iZXJSZXN1
bHQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0pTUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNCb29sZWFuUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojppc0p1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzQnJhbmNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjppc1Rlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
aGlsZDEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMik6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6Y2hpbGQzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpmaXJzdENoaWxk
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpudW1DaGlsZHJlbik6CisgICAgICAgICogZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKEpTQzo6REZH
OjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6dm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RG
R1Njb3JlQm9hcmQuaDoKKyAgICAgICAgKFNjb3JlQm9hcmQpOgorICAgICAgICAoSlNDOjpERkc6
OlNjb3JlQm9hcmQ6On5TY29yZUJvYXJkKToKKyAgICAgICAgKEpTQzo6REZHOjpTY29yZUJvYXJk
Ojphc3NlcnRDbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6U2NvcmVCb2FyZDo6dXNlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdWaXJ0dWFs
UmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZTo6cnVuKToKKwogMjAxMi0wMy0xMCAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIExMSW50IHNob3VsZCBzdXBwb3J0IEpTVkFM
VUU2NApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTEw
NDAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC02OCw2ICs2OCw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZn
L0RGR0RyaXZlci5jcHAKICAgICBkZmcvREZHR3JhcGguY3BwCiAgICAgZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAorICAgIGRmZy9ERkdOb2RlLmNwcAogICAgIGRmZy9ERkdPU1JFbnRyeS5jcHAKICAg
ICBkZmcvREZHT1NSRXhpdC5jcHAKICAgICBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEx
MDQwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjksNiArMTY5LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlUmVmZXJlbmNlQmxvYi5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVVc2UuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQkocmV2aXNpb24gMTEwNDAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZGZn
L0RGR0RyaXZlci5jcHAgXAogICAgIGRmZy9ERkdHcmFwaC5jcHAgXAogICAgIGRmZy9ERkdKSVRD
b21waWxlci5jcHAgXAorICAgIGRmZy9ERkdOb2RlLmNwcCBcCiAgICAgZGZnL0RGR09wZXJhdGlv
bnMuY3BwIFwKICAgICBkZmcvREZHT1NSRW50cnkuY3BwIFwKICAgICBkZmcvREZHT1NSRXhpdC5j
cHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExMDQwMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBACiAJCTBGMEZDNDVBMTRC
RDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExM
SW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQx
NEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAv
KiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CisJ
CTBGMUQwODYxMTUwQzVBODYwMDc0RDEwOSAvKiBERkdOb2RlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUQwODVGMTUwQzVBODAwMDc0RDEwOSAv
KiBERkdOb2RlLmNwcCAqLzsgfTsKIAkJMEYyMUMyNjgxNEJFNUY2ODAwQURDNjRCIC8qIEpJVERy
aXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
MUMyNjYxNEJFNUY1RTAwQURDNjRCIC8qIEpJVERyaXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdDMTRCRTcyNzYwMEFEQzY0QiAv
KiBFeGVjdXRpb25IYXJuZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjIxQzI3QTE0QkU3MjczMDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFD
MjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3OTE0QkU3MjczMDBB
REM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03ODMsNiArNzg0LDcgQEAKIAkJMEYwRkM0NTgx
NEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRW
ZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0VmVjdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxRDA4NUYxNTBDNUE4MDAwNzRE
MTA5IC8qIERGR05vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHTm9kZS5jcHA7IHBhdGggPSBkZmcvREZHTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjFDMjY2MTRCRTVGNUUwMEFEQzY0QiAvKiBKSVREcml2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVTcGVjaWFsaXph
dGlvbktpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMUMyN0ExNEJFNzI3
MzAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXhlY3V0aW9uSGFybmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjUwNCw2ICsyNTA2LDcgQEAKIAkJODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEYxRDA4NUYx
NTBDNUE4MDAwNzREMTA5IC8qIERGR05vZGUuY3BwICovLAogCQkJCTBGRkZDOTQ5MTRFRjkwOTUw
MEM3MjUzMiAvKiBERkdBcml0aE5vZGVGbGFnc0luZmVyZW5jZVBoYXNlLmNwcCAqLywKIAkJCQkw
RkZGQzk0QTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFz
ZS5oICovLAogCQkJCTBGNjIwMTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRl
LmNwcCAqLywKQEAgLTM3MTUsNiArMzcxOCw3IEBACiAJCQkJMEZCNTQ2N0QxNEY1Q0ZENjAwMkMy
OTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY1NkExRDUxNTAwMUNGNDAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEE0MzM3QkIxNTA2MjE4ODAwOTkxQzk1IC8qIERGR1JlZHVuZGFudFBo
aUVsaW1pbmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxRDA4NjExNTBDNUE4
NjAwNzREMTA5IC8qIERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyaXRoTm9kZUZsYWdzSW5mZXJlbmNlUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZl
cmVuY2VQaGFzZS5jcHAJKHJldmlzaW9uIDExMDQwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJpdGhOb2RlRmxhZ3NJbmZlcmVuY2VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDExICs4MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5l
cmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgTm9kZVR5cGUg
b3AgPSBub2RlLm9wOwotICAgICAgICBBcml0aE5vZGVGbGFncyBmbGFncyA9IDA7Ci0gICAgICAg
IAotICAgICAgICBpZiAobm9kZS5oYXNBcml0aE5vZGVGbGFncygpKQotICAgICAgICAgICAgZmxh
Z3MgPSBub2RlLnJhd0FyaXRoTm9kZUZsYWdzKCk7CisgICAgICAgIE5vZGVUeXBlIG9wID0gc3Rh
dGljX2Nhc3Q8Tm9kZVR5cGU+KG5vZGUub3ApOworICAgICAgICBOb2RlRmxhZ3MgZmxhZ3MgPSBu
b2RlLmZsYWdzOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCiAgICAgICAgIGRhdGFMb2coIiAgICVzIEAldTogJXMgIiwgR3JhcGg6Om9wTmFtZShv
cCksIG1fY29tcGlsZUluZGV4LCBhcml0aE5vZGVGbGFnc0FzU3RyaW5nKGZsYWdzKSk7CkBAIC0x
NzgsNyArMTc1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm87
Ci0gICAgICAgICAgICBpZiAob3AgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgaWYg
KG5vZGUuZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykgewogICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0
Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKICAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF1dLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAxMTA0MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcyLDcgKzU3Miw3IEBAIHByaXZhdGU6
CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kKHJlc3VsdEluZGV4KTsKIAotICAgICAgICBpZiAob3AgJiBOb2RlTXVzdEdlbmVyYXRlKQor
ICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCiAgICAgICAg
ICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CiAgICAgICAgIHJldHVybiByZXN1bHRJbmRl
eDsKICAgICB9CkBAIC01ODUsNyArNTg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHRJbmRleCk7CiAKLSAgICAgICAg
aWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkKKyAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkg
JiBOb2RlTXVzdEdlbmVyYXRlKQogICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0SW5kZXgp
OwogICAgICAgICByZXR1cm4gcmVzdWx0SW5kZXg7CiAgICAgfQpAQCAtNTk2LDcgKzU5Niw3IEBA
IHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kKHJlc3VsdEluZGV4KTsKIAotICAgICAgICBpZiAob3AgJiBOb2RlTXVzdEdl
bmVyYXRlKQorICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUp
CiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHRJbmRleDsKICAgICB9CkBAIC02MTAsNyArNjEwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgICAgIG1fbnVtUGFzc2VkVmFyQXJncyA9IDA7CiAgICAgICAgIAotICAgICAgICBpZiAo
b3AgJiBOb2RlTXVzdEdlbmVyYXRlKQorICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5v
ZGVNdXN0R2VuZXJhdGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CiAg
ICAgICAgIHJldHVybiByZXN1bHRJbmRleDsKICAgICB9CkBAIC02OTksNyArNjk5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgIAogI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygiTWFraW5nICVzIEAldSBzYWZl
IGF0IGJjIyV1IGJlY2F1c2Ugc2xvdy1jYXNlIGNvdW50ZXIgaXMgYXQgJXUgYW5kIGV4aXQgcHJv
ZmlsZXMgc2F5ICVkLCAlZFxuIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3Ap
LCBub2RlSW5kZXgsIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+
bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBPdmVyZmxvdyksIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUu
aGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpOworICAgICAgICBkYXRh
TG9nKCJNYWtpbmcgJXMgQCV1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzbG93LWNhc2UgY291bnRl
ciBpcyBhdCAldSBhbmQgZXhpdCBwcm9maWxlcyBzYXkgJWQsICVkXG4iLCBHcmFwaDo6b3BOYW1l
KHN0YXRpY19jYXN0PE5vZGVUeXBlPihtX2dyYXBoW25vZGVJbmRleF0ub3ApKSwgbm9kZUluZGV4
LCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJl
Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlciwg
bV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRl
eCwgT3ZlcmZsb3cpLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKTsKICNlbmRpZgogICAgICAgICAKICAgICAg
ICAgc3dpdGNoIChtX2dyYXBoW25vZGVJbmRleF0ub3ApIHsKQEAgLTc1Miw3ICs3NTIsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgCiAjaWYgREZH
X0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAgICBkYXRhTG9nKCJNYWtpbmcgJXMgQCV1IHNh
ZmUgYXQgYmMjJXUgYmVjYXVzZSBzcGVjaWFsIGZhc3QtY2FzZSBjb3VudGVyIGlzIGF0ICV1IGFu
ZCBleGl0IHByb2ZpbGVzIHNheSAlZCwgJWRcbiIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2Rl
SW5kZXhdLm9wKSwgbm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLT5zcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
bV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2Zp
bGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KSwgbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVnYXRpdmVaZXJv
KSk7CisgICAgICAgIGRhdGFMb2coIk1ha2luZyAlcyBAJXUgc2FmZSBhdCBiYyMldSBiZWNhdXNl
IHNwZWNpYWwgZmFzdC1jYXNlIGNvdW50ZXIgaXMgYXQgJXUgYW5kIGV4aXQgcHJvZmlsZXMgc2F5
ICVkLCAlZFxuIiwgR3JhcGg6Om9wTmFtZShzdGF0aWNfY2FzdDxOb2RlVHlwZT4obV9ncmFwaFtu
b2RlSW5kZXhdLm9wKSksIG5vZGVJbmRleCwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+c3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQ
cm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdyksIG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZl
WmVybykpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUg
cG9zc2libGUgdG8gbWFrZSB0aGlzIG1vcmUgZ3JhbnVsYXIuIFRoZSBERkcgY2VydGFpbmx5IGNh
bgpAQCAtMTI2Nyw3ICsxMjY3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4
KGJvb2wgdQogICAgIH0KICAgICAKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PT0gMykgeyAvLyBNYXRoLm1pbih4LCB5KQotICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRk
VG9HcmFwaChvcCwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBh
cmd1bWVudFRvT3BlcmFuZCgxKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVy
YW5kKDIpKSkpOworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChvcCwgZ2V0
KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpLCBnZXQocmVnaXN0ZXJPZmZz
ZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgyKSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIApAQCAtMTI5NSw3ICsxMjk1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW50cmluc2ljKGJvbwogICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0
aW5nUG9pbnRBYnMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gYWRkVG9HcmFwaChBcml0aEFicywgT3BJbmZvKE5vZGVVc2VCb3R0
b20pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOworICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYWRkVG9HcmFwaChBcml0aEFicywgZ2V0KHJlZ2lzdGVy
T2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKICAgICAgICAgaWYgKG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93
KSkKICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZsYWdzKE5v
ZGVNYXlPdmVyZmxvdyk7CiAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBub2RlSW5kZXgpOwpA
QCAtMTU2MiwxMSArMTU2MiwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG9wMikgJiAw
eDFmKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKEJpdFVSU2hpZnQs
IG9wMSwgb3AyKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG1ha2VTYWZlKGFkZFRvR3JhcGgoVUludDMyVG9OdW1iZXIsIE9wSW5mbyhOb2RlVXNl
Qm90dG9tKSwgb3AxKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTYWZlKGFk
ZFRvR3JhcGgoVUludDMyVG9OdW1iZXIsIG9wMSkpOwogICAgICAgICAgICAgfSAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgLy8gQ2Fubm90IG9wdGltaXplIGF0IHRoaXMgc3RhZ2U7IHNoaWZ0ICYg
cG90ZW50aWFsbHkgcmVib3ggYXMgYSBkb3VibGUuCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
YWRkVG9HcmFwaChCaXRVUlNoaWZ0LCBvcDEsIG9wMik7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gbWFrZVNhZmUoYWRkVG9HcmFwaChVSW50MzJUb051bWJlciwgT3BJbmZvKE5vZGVVc2VCb3R0
b20pLCByZXN1bHQpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtYWtlU2FmZShhZGRUb0dy
YXBoKFVJbnQzMlRvTnVtYmVyLCByZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHQpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfdXJzaGlmdCk7CkBAIC0xNTc3LDcgKzE1NzcsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHJlX2lu
YzogewogICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldChzcmNEc3QpOwotICAg
ICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgT3BJbmZv
KE5vZGVVc2VCb3R0b20pLCBvcCwgb25lKCkpKSk7CisgICAgICAgICAgICBzZXQoc3JjRHN0LCBt
YWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9wcmVfaW5jKTsKICAgICAgICAgfQogCkBAIC0xNTg3LDE0ICsxNTg3LDE0
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IEFTU0VSVChyZXN1bHQgIT0gc3JjRHN0KTsgLy8gUmVxdWlyZWQgZm9yIGFzc3VtcHRpb25zIHdl
IG1ha2UgZHVyaW5nIE9TUi4KICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldChzcmNEc3Qp
OwogICAgICAgICAgICAgc2V0KHJlc3VsdCwgb3ApOwotICAgICAgICAgICAgc2V0KHNyY0RzdCwg
bWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcCwg
b25lKCkpKSk7CisgICAgICAgICAgICBzZXQoc3JjRHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFy
aXRoQWRkLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wb3N0X2lu
Yyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3ByZV9kZWM6IHsKICAgICAgICAgICAg
IHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXQoc3JjRHN0KTsKLSAgICAgICAgICAgIHNldChzcmNE
c3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwg
b3AsIG9uZSgpKSkpOworICAgICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFw
aChBcml0aFN1Yiwgb3AsIG9uZSgpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHJl
X2RlYyk7CiAgICAgICAgIH0KIApAQCAtMTYwMyw3ICsxNjAzLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGVJbmRleCBv
cCA9IGdldChzcmNEc3QpOwogICAgICAgICAgICAgc2V0KHJlc3VsdCwgb3ApOwotICAgICAgICAg
ICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1YiwgT3BJbmZvKE5vZGVV
c2VCb3R0b20pLCBvcCwgb25lKCkpKSk7CisgICAgICAgICAgICBzZXQoc3JjRHN0LCBtYWtlU2Fm
ZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9wb3N0X2RlYyk7CiAgICAgICAgIH0KIApAQCAtMTYxMywyMiArMTYxMywyMiBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2Rl
SW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAg
ICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW29wMV0uaGFzTnVtYmVyUmVzdWx0KCkgJiYgbV9n
cmFwaFtvcDJdLmhhc051bWJlclJlc3VsdCgpKQotICAgICAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBP
cEluZm8oTm9kZVVzZUJvdHRvbSksIG9wMSwgb3AyKSkpOworICAgICAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRo
QWRkLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChWYWx1
ZUFkZCwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcDEsIG9wMikpKTsKKyAgICAgICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFw
aChWYWx1ZUFkZCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9hZGQp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9zdWI6IHsKICAgICAgICAgICAgIE5vZGVJ
bmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VT
YWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIp
KSk7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFr
ZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1Yiwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9zdWIpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9uZWdhdGU6IHsK
ICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE5lZ2F0ZSwgT3BJbmZvKE5vZGVVc2VCb3R0b20p
LCBvcDEpKSk7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE5lZ2F0ZSwgb3AxKSkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfbmVnYXRlKTsKICAgICAgICAgfQogCkBAIC0xNjM2LDIxICsxNjM2LDIx
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IC8vIE11bHRpcGx5IHJlcXVpcmVzIHRoYXQgdGhlIGlucHV0cyBhcmUgbm90IHRydW5jYXRlZCwg
dW5mb3J0dW5hdGVseS4KICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhNdWws
IE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE11
bCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9tdWwpOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBvcF9tb2Q6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2Rl
SW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRv
R3JhcGgoQXJpdGhNb2QsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIpKSk7CisgICAg
ICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZVNhZmUoYWRk
VG9HcmFwaChBcml0aE1vZCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9tb2QpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9kaXY6IHsKICAgICAgICAgICAg
IE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IG1ha2VEaXZTYWZlKGFkZFRvR3JhcGgoQXJpdGhEaXYsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwg
b3AxLCBvcDIpKSk7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgbWFrZURpdlNhZmUoYWRkVG9HcmFwaChBcml0aERpdiwgb3AxLCBvcDIpKSk7CiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9kaXYpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxMTA0MDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGVJ
bmRleF0uc2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9n
KCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwg
bm9kZUluZGV4KTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICVzIEAldTogIiwgR3JhcGg6
Om9wTmFtZShzdGF0aWNfY2FzdDxOb2RlVHlwZT4obV9ncmFwaFtub2RlSW5kZXhdLm9wKSksIG5v
ZGVJbmRleCk7CiAgICAgICAgICAgICBtX3N0YXRlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKICAg
ICAgICAgICAgIGRhdGFMb2coIlxuIik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMTA0MDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyAr
NzAsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHVuc2lnbmVkIGVuZEluZGV4Rm9yUHVyZUNTRSgp
CiAgICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2xhc3RTZWVuW21fZ3JhcGhbbV9j
b21waWxlSW5kZXhdLm9wICYgTm9kZUlkTWFza107CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fbGFzdFNlZW5bbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ub3BdOwogICAgICAgICBpZiAocmVz
dWx0ID09IFVJTlRfTUFYKQogICAgICAgICAgICAgcmVzdWx0ID0gMDsKICAgICAgICAgZWxzZQpA
QCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG5vZGUub3AgIT0gb3Ro
ZXJOb2RlLm9wKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAobm9kZS5hcml0aE5vZGVGbGFnc0ZvckNvbXBhcmUoKSAhPSBvdGhlck5vZGUu
YXJpdGhOb2RlRmxhZ3NGb3JDb21wYXJlKCkpCisgICAgICAgICAgICBpZiAobm9kZS5hcml0aE5v
ZGVGbGFncygpICE9IG90aGVyTm9kZS5hcml0aE5vZGVGbGFncygpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlSW5kZXggb3RoZXJDaGls
ZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQxKCkpOwpAQCAtMTQ3LDkgKzE0Nyw5IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBjbG9iYmVyc1dvcmxkKE5vZGVJbmRleCBub2RlSW5kZXgpCiAg
ICAgewogICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICBp
ZiAobm9kZS5vcCAmIE5vZGVDbG9iYmVyc1dvcmxkKQorICAgICAgICBpZiAobm9kZS5mbGFncyAm
IE5vZGVDbG9iYmVyc1dvcmxkKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlm
ICghKG5vZGUub3AgJiBOb2RlTWlnaHRDbG9iYmVyKSkKKyAgICAgICAgaWYgKCEobm9kZS5mbGFn
cyAmIE5vZGVNaWdodENsb2JiZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKQEAgLTE4Miw3ICsx
ODIsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBOb2RlJiBvdGhlck5vZGUgPSBtX2dyYXBo
W2luZGV4XTsKICAgICAgICAgICAgIGlmIChub2RlLm9wID09IG90aGVyTm9kZS5vcAotICAgICAg
ICAgICAgICAgICYmIG5vZGUuYXJpdGhOb2RlRmxhZ3NGb3JDb21wYXJlKCkgPT0gb3RoZXJOb2Rl
LmFyaXRoTm9kZUZsYWdzRm9yQ29tcGFyZSgpKSB7CisgICAgICAgICAgICAgICAgJiYgbm9kZS5h
cml0aE5vZGVGbGFncygpID09IG90aGVyTm9kZS5hcml0aE5vZGVGbGFncygpKSB7CiAgICAgICAg
ICAgICAgICAgTm9kZUluZGV4IG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNo
aWxkMSgpKTsKICAgICAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKQEAgLTUwNiw3ICs1MDYsNyBAQCBwcml2YXRl
OgogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBp
bGVJbmRleF07Ci0gICAgICAgIG5vZGUub3AgPSBQaGFudG9tOworICAgICAgICBub2RlLnNldE9w
QW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgICAgICBub2RlLnNldFJlZkNvdW50KDEpOwog
ICAgICAgICAKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3aWxsIGVsaW1pbmF0ZSBhbGwg
cmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCkBAIC01MjIsMTQgKzUyMiwxNCBAQCBwcml2YXRlOgog
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAgICAgICAgIEFT
U0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgIEFTU0VSVChub2RlLm11c3RHZW5l
cmF0ZSgpKTsKLSAgICAgICAgbm9kZS5vcCA9IFBoYW50b207CisgICAgICAgIG5vZGUuc2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcGVyZm9ybU5v
ZGVDU0UoTm9kZSYgbm9kZSkKICAgICB7CiAgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBu
b2RlLnNob3VsZEdlbmVyYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFy
QXJncykgeworICAgICAgICBpZiAobm9kZS5mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxk
SWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4Kysp
CiAgICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC01
NDIsNyArNTQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9n
KCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ub3Ap
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGRhdGFMb2coIiAgICVzIEAldTogIiwgR3JhcGg6
Om9wTmFtZShzdGF0aWNfY2FzdDxOb2RlVHlwZT4obV9ncmFwaFttX2NvbXBpbGVJbmRleF0ub3Ap
KSwgbV9jb21waWxlSW5kZXgpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICAvLyBOT1RFOiB0
aGVyZSBhcmUgc29tZSBub2RlcyB0aGF0IHdlIGRlbGliZXJhdGVseSBkb24ndCBDU0UgZXZlbiB0
aG91Z2ggd2UKQEAgLTY2OSw3ICs2NjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fbGFzdFNlZW5bbm9kZS5vcCAmIE5vZGVJ
ZE1hc2tdID0gbV9pbmRleEluQmxvY2s7CisgICAgICAgIG1fbGFzdFNlZW5bbm9kZS5vcF0gPSBt
X2luZGV4SW5CbG9jazsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CiAgICAgICAgIGRhdGFMb2coIlxuIik7CiAjZW5kaWYKQEAgLTY3OCw3ICs2NzgsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2smIGJsb2NrKQogICAgIHsK
ICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSAmYmxvY2s7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBMYXN0Tm9kZUlkOyArK2kpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBMYXN0Tm9kZVR5cGU7ICsraSkKICAgICAgICAgICAgIG1fbGFzdFNlZW5baV0gPSBVSU5U
X01BWDsKIAogICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sg
PCBibG9jay5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKQEAgLTY5MSw3ICs2OTEsNyBAQCBw
cml2YXRlOgogICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKICAgICB1bnNpZ25lZCBtX2lu
ZGV4SW5CbG9jazsKICAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV9yZXBsYWNlbWVudHM7Ci0g
ICAgRml4ZWRBcnJheTx1bnNpZ25lZCwgTGFzdE5vZGVJZD4gbV9sYXN0U2VlbjsKKyAgICBGaXhl
ZEFycmF5PHVuc2lnbmVkLCBMYXN0Tm9kZVR5cGU+IG1fbGFzdFNlZW47CiB9OwogCiB2b2lkIHBl
cmZvcm1DU0UoR3JhcGgmIGdyYXBoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDExMDQwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7CiAKIGNvbnN0IGNoYXIgKkdyYXBoOjpvcE5hbWUoTm9k
ZVR5cGUgb3ApCiB7Ci0gICAgcmV0dXJuIGRmZ09wTmFtZXNbb3AgJiBOb2RlSWRNYXNrXTsKKyAg
ICByZXR1cm4gZGZnT3BOYW1lc1tvcF07CiB9CiAKIGNvbnN0IGNoYXIqIEdyYXBoOjpuYW1lT2ZW
YXJpYWJsZUFjY2Vzc0RhdGEoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEp
CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oTm9kZUluZGV4
IG5vZAogdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4KQogewogICAgIE5vZGUm
IG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKKyAgICBO
b2RlVHlwZSBvcCA9IHN0YXRpY19jYXN0PE5vZGVUeXBlPihub2RlLm9wKTsKIAogICAgIHVuc2ln
bmVkIHJlZkNvdW50ID0gbm9kZS5yZWZDb3VudCgpOwogICAgIGJvb2wgc2tpcHBlZCA9ICFyZWZD
b3VudDsKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2Rl
SW5kZXgpCiAgICAgICAgIGRhdGFMb2coIi0iKTsKICAgICBkYXRhTG9nKCI+XHQlcygiLCBvcE5h
bWUob3ApKTsKICAgICBib29sIGhhc1ByaW50ZWQgPSBmYWxzZTsKLSAgICBpZiAob3AgJiBOb2Rl
SGFzVmFyQXJncykgeworICAgIGlmIChub2RlLmZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElk
eCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7
CiAgICAgICAgICAgICBpZiAoaGFzUHJpbnRlZCkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIs
ICIpOwpAQCAtMTc1LDggKzE3NSw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJ
bmRleCkKICAgICAgICAgaGFzUHJpbnRlZCA9ICEhbm9kZS5jaGlsZDEoKTsKICAgICB9CiAKLSAg
ICBpZiAobm9kZS5oYXNBcml0aE5vZGVGbGFncygpKSB7Ci0gICAgICAgIGRhdGFMb2coIiVzJXMi
LCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBhcml0aE5vZGVGbGFnc0FzU3RyaW5nKG5vZGUucmF3
QXJpdGhOb2RlRmxhZ3MoKSkpOworICAgIGlmIChub2RlLmFyaXRoTm9kZUZsYWdzKCkpIHsKKyAg
ICAgICAgZGF0YUxvZygiJXMlcyIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGFyaXRoTm9kZUZs
YWdzQXNTdHJpbmcobm9kZS5hcml0aE5vZGVGbGFncygpKSk7CiAgICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOwogICAgIH0KICAgICBpZiAobm9kZS5oYXNWYXJOdW1iZXIoKSkgewpAQCAtMjk0LDcg
KzI5NCw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoKQogLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBi
ZSBpdGVyYXRpdmUsIG5vdCByZWN1cnNpdmUuCiAjZGVmaW5lIERPX1RPX0NISUxEUkVOKG5vZGUs
IHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIE5v
ZGUmIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIGlmIChfbm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfbm9kZS5mbGFncyAmIE5vZGVI
YXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLmZpcnN0Q2hpbGQoKTsgICAgICAgICAgICAg
ICBcCiAgICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLmZpcnN0Q2hpbGQoKSArIF9u
b2RlLm51bUNoaWxkcmVuKCk7ICBcCiAgICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjb25zdCBjaGFyKiBhcml0aE5vZGVGbGFn
c0FzU3RyaW5nKE5vZGVGbGFncyBmbGFncykKK3sKKyAgICBmbGFncyAmPSBOb2RlQXJpdGhNYXNr
OworICAgIAorICAgIGlmICghZmxhZ3MpCisgICAgICAgIHJldHVybiAiPGVtcHR5PiI7CisKKyAg
ICBzdGF0aWMgY29uc3QgaW50IHNpemUgPSA2NDsKKyAgICBzdGF0aWMgY2hhciBkZXNjcmlwdGlv
bltzaXplXTsKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRlcjxjaGFyPiBwdHIoZGVzY3JpcHRpb24s
IHNpemUpOworICAgIAorICAgIGJvb2wgaGFzUHJpbnRlZCA9IGZhbHNlOworICAgIAorICAgIGlm
IChmbGFncyAmIE5vZGVVc2VkQXNOdW1iZXIpIHsKKyAgICAgICAgcHRyLnN0cmNhdCgiVXNlZEFz
TnVtIik7CisgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAo
ZmxhZ3MgJiBOb2RlTmVlZHNOZWdaZXJvKSB7CisgICAgICAgIGlmIChoYXNQcmludGVkKQorICAg
ICAgICAgICAgcHRyLnN0cmNhdCgifCIpOworICAgICAgICBwdHIuc3RyY2F0KCJOZWVkc05lZ1pl
cm8iKTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChm
bGFncyAmIE5vZGVNYXlPdmVyZmxvdykgeworICAgICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAg
ICAgICAgIHB0ci5zdHJjYXQoInwiKTsKKyAgICAgICAgcHRyLnN0cmNhdCgiTWF5T3ZlcmZsb3ci
KTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChmbGFn
cyAmIE5vZGVNYXlOZWdaZXJvKSB7CisgICAgICAgIGlmIChoYXNQcmludGVkKQorICAgICAgICAg
ICAgcHRyLnN0cmNhdCgifCIpOworICAgICAgICBwdHIuc3RyY2F0KCJNYXlOZWdaZXJvIik7Cisg
ICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICAqcHRyKysgPSAwOwor
ICAgIAorICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDExMDQwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NywzNiArNTcsNTAgQEAgc3RydWN0
IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhIHsKICAgICB9CiB9OwogCi10eXBlZGVmIHVuc2lnbmVk
IEFyaXRoTm9kZUZsYWdzOwotI2RlZmluZSBOb2RlVXNlQm90dG9tICAgICAgMHgwMAotI2RlZmlu
ZSBOb2RlVXNlZEFzTnVtYmVyICAgMHgwMQotI2RlZmluZSBOb2RlTmVlZHNOZWdaZXJvICAgMHgw
MgotI2RlZmluZSBOb2RlVXNlZEFzTWFzayAgICAgMHgwMwotI2RlZmluZSBOb2RlTWF5T3ZlcmZs
b3cgICAgMHgwNAotI2RlZmluZSBOb2RlTWF5TmVnWmVybyAgICAgMHgwOAotI2RlZmluZSBOb2Rl
QmVoYXZpb3JNYXNrICAgMHgwYworLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51bSAoYmVs
b3cpIGFyZSBjb21wb3NlZCBvZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkgbm9uZSkK
Ky8vIGFuZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2VuZXJhdGUs
IGlzIGNvbnN0YW50LCBldGMpLgorI2RlZmluZSBOb2RlUmVzdWx0TWFzayAgICAgICAweEYKKyNk
ZWZpbmUgTm9kZVJlc3VsdEpTICAgICAgICAgMHgxCisjZGVmaW5lIE5vZGVSZXN1bHROdW1iZXIg
ICAgIDB4MgorI2RlZmluZSBOb2RlUmVzdWx0SW50MzIgICAgICAweDMKKyNkZWZpbmUgTm9kZVJl
c3VsdEJvb2xlYW4gICAgMHg0CisjZGVmaW5lIE5vZGVSZXN1bHRTdG9yYWdlICAgIDB4NQorI2Rl
ZmluZSBOb2RlTXVzdEdlbmVyYXRlICAgIDB4MTAgLy8gc2V0IG9uIG5vZGVzIHRoYXQgaGF2ZSBz
aWRlIGVmZmVjdHMsIGFuZCBtYXkgbm90IHRyaXZpYWxseSBiZSByZW1vdmVkIGJ5IERDRS4KKyNk
ZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAgICAweDIwCisjZGVmaW5lIE5vZGVDbG9iYmVyc1dvcmxk
ICAgMHg0MAorI2RlZmluZSBOb2RlTWlnaHRDbG9iYmVyICAgIDB4ODAKKyNkZWZpbmUgTm9kZUFy
aXRoTWFzayAgICAgIDB4RjAwCisjZGVmaW5lIE5vZGVVc2VCb3R0b20gICAgICAweDAwMAorI2Rl
ZmluZSBOb2RlVXNlZEFzTnVtYmVyICAgMHgxMDAKKyNkZWZpbmUgTm9kZU5lZWRzTmVnWmVybyAg
IDB4MjAwCisjZGVmaW5lIE5vZGVVc2VkQXNNYXNrICAgICAweDMwMAorI2RlZmluZSBOb2RlTWF5
T3ZlcmZsb3cgICAgMHg0MDAKKyNkZWZpbmUgTm9kZU1heU5lZ1plcm8gICAgIDB4ODAwCisjZGVm
aW5lIE5vZGVCZWhhdmlvck1hc2sgICAweGMwMAorCit0eXBlZGVmIHVpbnQxNl90IE5vZGVGbGFn
czsKIAotc3RhdGljIGlubGluZSBib29sIG5vZGVVc2VkQXNOdW1iZXIoQXJpdGhOb2RlRmxhZ3Mg
ZmxhZ3MpCitzdGF0aWMgaW5saW5lIGJvb2wgbm9kZVVzZWRBc051bWJlcihOb2RlRmxhZ3MgZmxh
Z3MpCiB7CiAgICAgcmV0dXJuICEhKGZsYWdzICYgTm9kZVVzZWRBc051bWJlcik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKEFyaXRoTm9kZUZsYWdzIGZs
YWdzKQorc3RhdGljIGlubGluZSBib29sIG5vZGVDYW5UcnVuY2F0ZUludGVnZXIoTm9kZUZsYWdz
IGZsYWdzKQogewogICAgIHJldHVybiAhbm9kZVVzZWRBc051bWJlcihmbGFncyk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKEFyaXRoTm9kZUZsYWdz
IGZsYWdzKQorc3RhdGljIGlubGluZSBib29sIG5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8oTm9k
ZUZsYWdzIGZsYWdzKQogewogICAgIHJldHVybiAhKGZsYWdzICYgTm9kZU5lZWRzTmVnWmVybyk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBub2RlTWF5T3ZlcmZsb3coQXJpdGhOb2RlRmxhZ3Mg
ZmxhZ3MpCitzdGF0aWMgaW5saW5lIGJvb2wgbm9kZU1heU92ZXJmbG93KE5vZGVGbGFncyBmbGFn
cykKIHsKICAgICByZXR1cm4gISEoZmxhZ3MgJiBOb2RlTWF5T3ZlcmZsb3cpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIoQXJpdGhOb2RlRmxhZ3MgZmxh
Z3MpCitzdGF0aWMgaW5saW5lIGJvb2wgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIoTm9kZUZsYWdz
IGZsYWdzKQogewogICAgIGlmIChmbGFncyAmIE5vZGVNYXlPdmVyZmxvdykKICAgICAgICAgcmV0
dXJuICFub2RlVXNlZEFzTnVtYmVyKGZsYWdzKTsKQEAgLTk3LDY3ICsxMTEsNyBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgbm9kZUNhblNwZWN1bGF0ZUludGVnCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2RlRmxhZ3NBc1N0cmluZyhBcml0aE5v
ZGVGbGFncyBmbGFncykKLXsKLSAgICBpZiAoIWZsYWdzKQotICAgICAgICByZXR1cm4gIjxlbXB0
eT4iOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBzaXplID0gNjQ7Ci0gICAgc3RhdGljIGNoYXIg
ZGVzY3JpcHRpb25bc2l6ZV07Ci0gICAgQm91bmRzQ2hlY2tlZFBvaW50ZXI8Y2hhcj4gcHRyKGRl
c2NyaXB0aW9uLCBzaXplKTsKLSAgICAKLSAgICBib29sIGhhc1ByaW50ZWQgPSBmYWxzZTsKLSAg
ICAKLSAgICBpZiAoZmxhZ3MgJiBOb2RlVXNlZEFzTnVtYmVyKSB7Ci0gICAgICAgIHB0ci5zdHJj
YXQoIlVzZWRBc051bSIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKGZsYWdzICYgTm9kZU5lZWRzTmVnWmVybykgewotICAgICAgICBpZiAoaGFzUHJp
bnRlZCkKLSAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRyLnN0cmNhdCgi
TmVlZHNOZWdaZXJvIik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICAK
LSAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5T3ZlcmZsb3cpIHsKLSAgICAgICAgaWYgKGhhc1ByaW50
ZWQpCi0gICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Ci0gICAgICAgIHB0ci5zdHJjYXQoIk1h
eU92ZXJmbG93Iik7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICBpZiAoZmxhZ3MgJiBOb2RlTWF5TmVnWmVybykgewotICAgICAgICBpZiAoaGFzUHJpbnRlZCkK
LSAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKLSAgICAgICAgcHRyLnN0cmNhdCgiTWF5TmVn
WmVybyIpOwotICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgKnB0
cisrID0gMDsKLSAgICAKLSAgICByZXR1cm4gZGVzY3JpcHRpb247Ci19Ci0KLS8vIEVudHJpZXMg
aW4gdGhlIE5vZGVUeXBlIGVudW0gKGJlbG93KSBhcmUgY29tcG9zZWQgb2YgYW4gaWQsIGEgcmVz
dWx0IHR5cGUgKHBvc3NpYmx5IG5vbmUpCi0vLyBhbmQgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0
aXZlIGZsYWdzIChtdXN0IGdlbmVyYXRlLCBpcyBjb25zdGFudCwgZXRjKS4KLSNkZWZpbmUgTm9k
ZUlkTWFzayAgICAgICAgICAgMHhGRkYKLSNkZWZpbmUgTm9kZVJlc3VsdE1hc2sgICAgICAweEYw
MDAKLSNkZWZpbmUgTm9kZU11c3RHZW5lcmF0ZSAgIDB4MTAwMDAgLy8gc2V0IG9uIG5vZGVzIHRo
YXQgaGF2ZSBzaWRlIGVmZmVjdHMsIGFuZCBtYXkgbm90IHRyaXZpYWxseSBiZSByZW1vdmVkIGJ5
IERDRS4KLSNkZWZpbmUgTm9kZUlzQ29uc3RhbnQgICAgIDB4MjAwMDAKLSNkZWZpbmUgTm9kZUlz
SnVtcCAgICAgICAgIDB4NDAwMDAKLSNkZWZpbmUgTm9kZUlzQnJhbmNoICAgICAgIDB4ODAwMDAK
LSNkZWZpbmUgTm9kZUlzVGVybWluYWwgICAgMHgxMDAwMDAKLSNkZWZpbmUgTm9kZUhhc1ZhckFy
Z3MgICAgMHgyMDAwMDAKLSNkZWZpbmUgTm9kZUNsb2JiZXJzV29ybGQgMHg0MDAwMDAKLSNkZWZp
bmUgTm9kZU1pZ2h0Q2xvYmJlciAgMHg4MDAwMDAKLQotLy8gVGhlc2UgdmFsdWVzIHJlY29yZCB0
aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG5vZGUgKGFzIGNoZWNrZWQgYnkgTm9kZVJlc3VsdE1hc2ss
IGFib3ZlKSwgMCBmb3Igbm8gcmVzdWx0LgotI2RlZmluZSBOb2RlUmVzdWx0SlMgICAgICAgIDB4
MTAwMAotI2RlZmluZSBOb2RlUmVzdWx0TnVtYmVyICAgIDB4MjAwMAotI2RlZmluZSBOb2RlUmVz
dWx0SW50MzIgICAgIDB4MzAwMAotI2RlZmluZSBOb2RlUmVzdWx0Qm9vbGVhbiAgIDB4NDAwMAot
I2RlZmluZSBOb2RlUmVzdWx0U3RvcmFnZSAgIDB4NTAwMAorY29uc3QgY2hhciogYXJpdGhOb2Rl
RmxhZ3NBc1N0cmluZyhOb2RlRmxhZ3MpOwogCiAvLyBUaGlzIG1hY3JvIGRlZmluZXMgYSBzZXQg
b2YgaW5mb3JtYXRpb24gYWJvdXQgYWxsIGtub3duIG5vZGUgdHlwZXMsIHVzZWQgdG8gcG9wdWxh
dGUgTm9kZUlkLCBOb2RlVHlwZSBiZWxvdy4KICNkZWZpbmUgRk9SX0VBQ0hfREZHX09QKG1hY3Jv
KSBcCkBAIC0zMDQsMTEgKzI1OCwxMSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGFyaXRo
Tm9kZUZsYWdzCiAgICAgbWFjcm8oTmV3RnVuY3Rpb25FeHByZXNzaW9uLCBOb2RlUmVzdWx0SlMp
IFwKICAgICBcCiAgICAgLyogQmxvY2sgdGVybWluYWxzLiAqL1wKLSAgICBtYWNybyhKdW1wLCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwgfCBOb2RlSXNKdW1wKSBcCi0gICAgbWFj
cm8oQnJhbmNoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwgfCBOb2RlSXNCcmFu
Y2gpIFwKLSAgICBtYWNybyhSZXR1cm4sIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSXNUZXJtaW5h
bCkgXAotICAgIG1hY3JvKFRocm93LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwp
IFwKLSAgICBtYWNybyhUaHJvd1JlZmVyZW5jZUVycm9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUlzVGVybWluYWwpIFwKKyAgICBtYWNybyhKdW1wLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oQnJhbmNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUmV0dXJuLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVGhyb3csIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhUaHJvd1JlZmVyZW5jZUVycm9yLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAog
ICAgIC8qIFRoaXMgaXMgYSBwc2V1ZG8tdGVybWluYWwuIEl0IG1lYW5zIHRoYXQgZXhlY3V0aW9u
IHNob3VsZCBmYWxsIG91dCBvZiBERkcgYXQgKi9cCiAgICAgLyogdGhpcyBwb2ludCwgYnV0IGV4
ZWN1dGlvbiBkb2VzIGNvbnRpbnVlIGluIHRoZSBiYXNpYyBibG9jayAtIGp1c3QgaW4gYSAqL1wK
QEAgLTMxNywyMCArMjcxLDI1IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2Rl
RmxhZ3MKIAogLy8gVGhpcyBlbnVtIGdlbmVyYXRlcyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2lu
ZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMsCiAvLyBhbmQgaXMgdXNlZCBieSB0aGUgc3Vic2VxdWVu
dCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBpZCAoYXMgYWNjZXNzZWQgdmlhIHRoZSBOb2RlSWRNYXNr
KS4KLWVudW0gTm9kZUlkIHsKLSNkZWZpbmUgREZHX09QX0VOVU0ob3Bjb2RlLCBmbGFncykgb3Bj
b2RlIyNfaWQsCitlbnVtIE5vZGVUeXBlIHsKKyNkZWZpbmUgREZHX09QX0VOVU0ob3Bjb2RlLCBm
bGFncykgb3Bjb2RlLAogICAgIEZPUl9FQUNIX0RGR19PUChERkdfT1BfRU5VTSkKICN1bmRlZiBE
RkdfT1BfRU5VTQotICAgIExhc3ROb2RlSWQKKyAgICBMYXN0Tm9kZVR5cGUKIH07CiAKLS8vIEVu
dHJpZXMgaW4gdGhpcyBlbnVtIGRlc2NyaWJlIGFsbCBOb2RlIHR5cGVzLgotLy8gVGhlIGVudW0g
dmFsdWUgY29udGFpbnMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgaWQsIGEgcmVzdWx0IHR5
cGUsIGFuZCBhZGRpdGlvbmFsIGZsYWdzLgotZW51bSBOb2RlVHlwZSB7Ci0jZGVmaW5lIERGR19P
UF9FTlVNKG9wY29kZSwgZmxhZ3MpIG9wY29kZSA9IG9wY29kZSMjX2lkIHwgKGZsYWdzKSwKKy8v
IFNwZWNpZmllcyB0aGUgZGVmYXVsdCBmbGFncyBmb3IgZWFjaCBub2RlLgoraW5saW5lIE5vZGVG
bGFncyBkZWZhdWx0RmxhZ3MoTm9kZVR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworI2Rl
ZmluZSBERkdfT1BfRU5VTShvcGNvZGUsIGZsYWdzKSBjYXNlIG9wY29kZTogcmV0dXJuIGZsYWdz
OwogICAgIEZPUl9FQUNIX0RGR19PUChERkdfT1BfRU5VTSkKICN1bmRlZiBERkdfT1BfRU5VTQot
fTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQogCiAvLyBUaGlzIHR5cGUgdXNlZCBpbiBwYXNzaW5nIGFuIGlt
bWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9yOwogLy8gZGlzdGluZ3Vpc2hlcyBh
biBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRleCBpbnRvIGEgQ29kZUJsb2NrIGRh
dGEgc3RydWN0dXJlIC0gCkBAIC0zNTMsMzQgKzMxMiwzMiBAQCBzdHJ1Y3QgTm9kZSB7CiAKICAg
ICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRl
IHZhbHVlLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9k
ZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUlu
ZGV4IGNoaWxkMyA9IE5vTm9kZSkKLSAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBjb2RlT3Jp
Z2luKGNvZGVPcmlnaW4pCisgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAg
ICAsIGNoaWxkcmVuKE5vZGVSZWZlcmVuY2VCbG9iOjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNo
aWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGlj
dE5vbmUpCiAgICAgewotICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7Ci0g
ICAgICAgIEFTU0VSVCghaGFzQXJpdGhOb2RlRmxhZ3MoKSk7CisgICAgICAgIHNldE9wQW5kRGVm
YXVsdEZsYWdzKG9wKTsKKyAgICAgICAgQVNTRVJUKCEoZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykp
OwogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVu
IGFuZCBhbiBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQotICAgICAg
ICA6IG9wKG9wKQotICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgOiBj
b2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oTm9kZVJlZmVyZW5jZUJs
b2I6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJl
Z2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQog
ICAgICAgICAsIG1fb3BJbmZvKGltbS5tX3ZhbHVlKQogICAgICAgICAsIG1fcHJlZGljdGlvbihQ
cmVkaWN0Tm9uZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3Mp
KTsKKyAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOworICAgICAgICBBU1NFUlQoIShm
bGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9k
ZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgogICAgIE5v
ZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5m
byBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQotICAgICAgICA6IG9wKG9wKQotICAgICAg
ICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmln
aW4pCiAgICAgICAgICwgY2hpbGRyZW4oTm9kZVJlZmVyZW5jZUJsb2I6OkZpeGVkLCBjaGlsZDEs
IGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQpAQCAtMzg4LDEzICszNDUsMTMg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fb3BJbmZvMihzYWZlQ2FzdDx1bnNpZ25lZD4o
aW1tMi5tX3ZhbHVlKSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAg
ewotICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIHNldE9w
QW5kRGVmYXVsdEZsYWdzKG9wKTsKKyAgICAgICAgQVNTRVJUKCEoZmxhZ3MgJiBOb2RlSGFzVmFy
QXJncykpOwogICAgIH0KICAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggYSB2YXJp
YWJsZSBudW1iZXIgb2YgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgogICAgIE5v
ZGUoVmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8g
aW1tMSwgT3BJbmZvIGltbTIsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxk
cmVuKQotICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikK
KyAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oTm9k
ZVJlZmVyZW5jZUJsb2I6OlZhcmlhYmxlLCBmaXJzdENoaWxkLCBudW1DaGlsZHJlbikKICAgICAg
ICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAs
IG1fcmVmQ291bnQoMCkKQEAgLTQwMiwxMiArMzU5LDE5IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgLCBtX29wSW5mbzIoc2FmZUNhc3Q8dW5zaWduZWQ+KGltbTIubV92YWx1ZSkpCiAgICAgICAg
ICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9wICYg
Tm9kZUhhc1ZhckFyZ3MpOworICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CisgICAg
ICAgIEFTU0VSVChmbGFncyAmIE5vZGVIYXNWYXJBcmdzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzZXRPcEFuZERlZmF1bHRGbGFncyhOb2RlVHlwZSBvcCkKKyAgICB7CisgICAgICAgIHRoaXMt
Pm9wID0gb3A7CisgICAgICAgIGZsYWdzID0gZGVmYXVsdEZsYWdzKG9wKTsKICAgICB9CiAKICAg
ICBib29sIG11c3RHZW5lcmF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AgJiBOb2RlTXVz
dEdlbmVyYXRlOworICAgICAgICByZXR1cm4gZmxhZ3MgJiBOb2RlTXVzdEdlbmVyYXRlOwogICAg
IH0KIAogICAgIGJvb2wgaXNDb25zdGFudCgpCkBAIC01NDYsNDQgKzUxMCwzMiBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQXJpdGhOb2RlRmxhZ3MgcmF3QXJp
dGhOb2RlRmxhZ3MoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc0FyaXRoTm9kZUZsYWdzKCkp
OwotICAgICAgICByZXR1cm4gbV9vcEluZm87Ci0gICAgfQotICAgIAogICAgIC8vIFRoaXMgY29y
cmVjdHMgdGhlIGFyaXRobWV0aWMgbm9kZSBmbGFncywgc28gdGhhdCBpcnJlbGV2YW50IGJpdHMg
YXJlCiAgICAgLy8gaWdub3JlZC4gSW4gcGFydGljdWxhciwgYW55dGhpbmcgb3RoZXIgdGhhbiBB
cml0aE11bCBkb2VzIG5vdCBuZWVkCiAgICAgLy8gdG8ga25vdyBpZiBpdCBjYW4gc3BlY3VsYXRl
IG9uIG5lZ2F0aXZlIHplcm8uCi0gICAgQXJpdGhOb2RlRmxhZ3MgYXJpdGhOb2RlRmxhZ3MoKQor
ICAgIE5vZGVGbGFncyBhcml0aE5vZGVGbGFncygpCiAgICAgewotICAgICAgICBBcml0aE5vZGVG
bGFncyByZXN1bHQgPSByYXdBcml0aE5vZGVGbGFncygpOworICAgICAgICBOb2RlRmxhZ3MgcmVz
dWx0ID0gZmxhZ3MgJiBOb2RlQXJpdGhNYXNrOwogICAgICAgICBpZiAob3AgPT0gQXJpdGhNdWwp
CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gcmVzdWx0ICYgfk5v
ZGVOZWVkc05lZ1plcm87CiAgICAgfQogICAgIAotICAgIEFyaXRoTm9kZUZsYWdzIGFyaXRoTm9k
ZUZsYWdzRm9yQ29tcGFyZSgpCisgICAgdm9pZCBzZXRBcml0aE5vZGVGbGFnKE5vZGVGbGFncyBu
ZXdGbGFncykKICAgICB7Ci0gICAgICAgIGlmIChoYXNBcml0aE5vZGVGbGFncygpKQotICAgICAg
ICAgICAgcmV0dXJuIGFyaXRoTm9kZUZsYWdzKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIHNldEFyaXRoTm9kZUZsYWcoQXJpdGhOb2RlRmxhZ3MgZmxhZ3MpCi0g
ICAgewotICAgICAgICBBU1NFUlQoaGFzQXJpdGhOb2RlRmxhZ3MoKSk7Ci0gICAgICAgIG1fb3BJ
bmZvID0gZmxhZ3M7CisgICAgICAgIEFTU0VSVCghKG5ld0ZsYWdzICYgfk5vZGVBcml0aE1hc2sp
KTsKKyAgICAgICAgCisgICAgICAgIGZsYWdzICY9IH5Ob2RlQXJpdGhNYXNrOworICAgICAgICBm
bGFncyB8PSBuZXdGbGFnczsKICAgICB9CiAgICAgCi0gICAgYm9vbCBtZXJnZUFyaXRoTm9kZUZs
YWdzKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQorICAgIGJvb2wgbWVyZ2VBcml0aE5vZGVGbGFncyhO
b2RlRmxhZ3MgbmV3RmxhZ3MpCiAgICAgewotICAgICAgICBpZiAoIWhhc0FyaXRoTm9kZUZsYWdz
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEFyaXRoTm9kZUZsYWdzIG5l
d0ZsYWdzID0gbV9vcEluZm8gfCBmbGFnczsKLSAgICAgICAgaWYgKG5ld0ZsYWdzID09IG1fb3BJ
bmZvKQorICAgICAgICBBU1NFUlQoIShuZXdGbGFncyAmIH5Ob2RlQXJpdGhNYXNrKSk7CisgICAg
ICAgIG5ld0ZsYWdzID0gZmxhZ3MgfCBuZXdGbGFnczsKKyAgICAgICAgaWYgKG5ld0ZsYWdzID09
IGZsYWdzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX29wSW5mbyA9IG5l
d0ZsYWdzOworICAgICAgICBmbGFncyA9IG5ld0ZsYWdzOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgCkBAIC02MzksNDIgKzU5MSw1MSBAQCBzdHJ1Y3QgTm9kZSB7CiAKICAgICBi
b29sIGhhc1Jlc3VsdCgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AgJiBOb2RlUmVzdWx0TWFz
azsKKyAgICAgICAgcmV0dXJuIGZsYWdzICYgTm9kZVJlc3VsdE1hc2s7CiAgICAgfQogCiAgICAg
Ym9vbCBoYXNJbnQzMlJlc3VsdCgpCiAgICAgewotICAgICAgICByZXR1cm4gKG9wICYgTm9kZVJl
c3VsdE1hc2spID09IE5vZGVSZXN1bHRJbnQzMjsKKyAgICAgICAgcmV0dXJuIChmbGFncyAmIE5v
ZGVSZXN1bHRNYXNrKSA9PSBOb2RlUmVzdWx0SW50MzI7CiAgICAgfQogICAgIAogICAgIGJvb2wg
aGFzTnVtYmVyUmVzdWx0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiAob3AgJiBOb2RlUmVzdWx0
TWFzaykgPT0gTm9kZVJlc3VsdE51bWJlcjsKKyAgICAgICAgcmV0dXJuIChmbGFncyAmIE5vZGVS
ZXN1bHRNYXNrKSA9PSBOb2RlUmVzdWx0TnVtYmVyOwogICAgIH0KICAgICAKICAgICBib29sIGhh
c0pTUmVzdWx0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiAob3AgJiBOb2RlUmVzdWx0TWFzaykg
PT0gTm9kZVJlc3VsdEpTOworICAgICAgICByZXR1cm4gKGZsYWdzICYgTm9kZVJlc3VsdE1hc2sp
ID09IE5vZGVSZXN1bHRKUzsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNCb29sZWFuUmVzdWx0
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiAob3AgJiBOb2RlUmVzdWx0TWFzaykgPT0gTm9kZVJl
c3VsdEJvb2xlYW47CisgICAgICAgIHJldHVybiAoZmxhZ3MgJiBOb2RlUmVzdWx0TWFzaykgPT0g
Tm9kZVJlc3VsdEJvb2xlYW47CiAgICAgfQogCiAgICAgYm9vbCBpc0p1bXAoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9wICYgTm9kZUlzSnVtcDsKKyAgICAgICAgcmV0dXJuIG9wID09IEp1bXA7
CiAgICAgfQogCiAgICAgYm9vbCBpc0JyYW5jaCgpCiAgICAgewotICAgICAgICByZXR1cm4gb3Ag
JiBOb2RlSXNCcmFuY2g7CisgICAgICAgIHJldHVybiBvcCA9PSBCcmFuY2g7CiAgICAgfQogCiAg
ICAgYm9vbCBpc1Rlcm1pbmFsKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCAmIE5vZGVJc1Rl
cm1pbmFsOworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgSnVtcDoKKyAgICAg
ICAgY2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNlIFRocm93
OgorICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIHVuc2lnbmVkIHRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJz
aW5nKCkKQEAgLTg3MSw3ICs4MzIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgTm9kZVVz
ZSBjaGlsZDEoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykp
OworICAgICAgICBBU1NFUlQoIShmbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHJl
dHVybiBjaGlsZHJlbi5jaGlsZDEoKTsKICAgICB9CiAgICAgCkBAIC04ODUsMjUgKzg0NiwyNSBA
QCBzdHJ1Y3QgTm9kZSB7CiAKICAgICBOb2RlVXNlIGNoaWxkMigpCiAgICAgewotICAgICAgICBB
U1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIEFTU0VSVCghKGZsYWdzICYg
Tm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMigpOwogICAg
IH0KIAogICAgIE5vZGVVc2UgY2hpbGQzKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghKG9wICYg
Tm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgQVNTRVJUKCEoZmxhZ3MgJiBOb2RlSGFzVmFyQXJn
cykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQzKCk7CiAgICAgfQogICAgIAogICAg
IHVuc2lnbmVkIGZpcnN0Q2hpbGQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhh
c1ZhckFyZ3MpOworICAgICAgICBBU1NFUlQoZmxhZ3MgJiBOb2RlSGFzVmFyQXJncyk7CiAgICAg
ICAgIHJldHVybiBjaGlsZHJlbi5maXJzdENoaWxkKCk7CiAgICAgfQogICAgIAogICAgIHVuc2ln
bmVkIG51bUNoaWxkcmVuKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJB
cmdzKTsKKyAgICAgICAgQVNTRVJUKGZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpOwogICAgICAgICBy
ZXR1cm4gY2hpbGRyZW4ubnVtQ2hpbGRyZW4oKTsKICAgICB9CiAgICAgCkBAIC0xMDY5LDggKzEw
MzAsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGZwcmludGYob3V0LCAiLCBAJXUiLCBjaGls
ZDMoKS5pbmRleCgpKTsKICAgICB9CiAgICAgCi0gICAgLy8gVGhpcyBlbnVtIHZhbHVlIGRlc2Ny
aWJlcyB0aGUgdHlwZSBvZiB0aGUgbm9kZS4KLSAgICBOb2RlVHlwZSBvcDsKKyAgICB1aW50MTZf
dCBvcDsgLy8gcmVhbCB0eXBlIGlzIE5vZGVUeXBlCisgICAgTm9kZUZsYWdzIGZsYWdzOwogICAg
IC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24gKGN1cnJl
bnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW47CiAgICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0byAzIGNoaWxkcmVuLCBvciBsaW5r
cyB0byBhIHZhcmlhYmxlIGxlbmd0aCBzZXQgb2YgY2hpbGRyZW4uCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTEwNDAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NSw3ICsxMDUsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUo
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIE5vZGVUeXBlIG9wID0g
bm9kZS5vcDsKKyAgICAgICAgTm9kZVR5cGUgb3AgPSBzdGF0aWNfY2FzdDxOb2RlVHlwZT4obm9k
ZS5vcCk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAg
ICAgIGRhdGFMb2coIiAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShvcCksIG1fY29tcGlsZUlu
ZGV4KTsKQEAgLTQ2OCw2ICs0NjgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJbmxpbmVT
dGFydDoKICAgICAgICAgY2FzZSBOb3A6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAjZWxzZQogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgYnJlYWs7CkBAIC01MTYsNyArNTIwLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIHZvdGUoTm9kZSYgbm9kZSwgVmFyaWFibGVBY2Nlc3NEYXRhOjpCYWxsb3QgYmFsbG90KQog
ICAgIHsKLSAgICAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICBp
ZiAobm9kZS5mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENo
aWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAgICAgICAgICAgICAgICAg
dm90ZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBiYWxsb3QpOwogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtNjI0LDcgKzYyOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICgh
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAg
ICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOworICAgICAgICBOb2RlVHlwZSBvcCA9IHN0YXRp
Y19jYXN0PE5vZGVUeXBlPihub2RlLm9wKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygiICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BO
YW1lKG9wKSwgbV9jb21waWxlSW5kZXgpOwpAQCAtNjgwLDEzICs2ODQsMTYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBub2RlLm9wID0gR2V0RmxvYXQ2NEFycmF5TGVuZ3RoOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgbV9ncmFwaC5kZXJlZihtX2NvbXBpbGVJbmRleCk7IC8vIE5vIGxvbmdlciBNdXN0R2Vu
ZXJhdGUKKyAgICAgICAgICAgIC8vIE5vIGxvbmdlciBNdXN0R2VuZXJhdGUKKyAgICAgICAgICAg
IEFTU0VSVChub2RlLmZsYWdzICYgTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICBub2Rl
LmZsYWdzICY9IH5Ob2RlTXVzdEdlbmVyYXRlOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZiht
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKICAgICAgICAgICAgIFByZWRpY3RlZFR5
cGUgYmFzZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsK
ICAgICAgICAgICAgIGlmICghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNl
UHJlZGljdGlvbikgewotICAgICAgICAgICAgICAgIG5vZGUub3AgPSBOb3A7CisgICAgICAgICAg
ICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOwogICAgICAgICAgICAgICAgIG1f
Z3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsKICAgICAgICAgICAgICAgICBtX2dyYXBo
LmNsZWFyQW5kRGVyZWZDaGlsZDIobm9kZSk7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVh
ckFuZERlcmVmQ2hpbGQzKG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY29yZUJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTY29yZUJvYXJkLmgJKHJldmlzaW9uIDExMDQwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2NvcmVCb2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxNCArNTgsMjcgQEAg
cHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0jaWYgREZHX0VOQUJMRShDT05TSVNURU5DWV9D
SEVDSykKICAgICB+U2NvcmVCb2FyZCgpCiAgICAgewotICAgICAgICAvLyBGb3IgZXZlcnkgZW50
cnkgaW4gdGhlIHVzZWQgbGlzdCB0aGUgdXNlIGNvdW50IG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVy
IHNob3VsZCBiZSB6ZXJvLgotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJlZS5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgIEFTU0VSVCghbV91c2VkW2ldIHx8IG1fdXNlZFtpXSA9
PSBtYXgoKSk7CisgICAgICAgIGFzc2VydENsZWFyKCk7CiAgICAgfQorICAgIAorICAgIHZvaWQg
YXNzZXJ0Q2xlYXIoKQorICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIC8vIEZv
ciBldmVyeSBlbnRyeSBpbiB0aGUgdXNlZCBsaXN0IHRoZSB1c2UgY291bnQgb2YgdGhlIHZpcnR1
YWwgcmVnaXN0ZXIgc2hvdWxkIGJlIHplcm8sIG9yIG1heCwgZHVlIHRvIGl0IGJlaW5nIGEgcHJl
c2VydmVkIGxvY2FsLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdXNlZC5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIEFTU0VSVCghbV91c2VkW2ldIHx8IG1fdXNlZFtpXSA9PSBt
YXgoKSk7CisgICAgICAgIC8vIEZvciBldmVyeSBlbnRyeSBpbiB0aGUgZnJlZSBsaXN0LCB0aGUg
dXNlIGNvdW50IHNob3VsZCBiZSB6ZXJvLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZnJlZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIEFTU0VSVCghbV91c2VkW21fZnJlZVtp
XV0pOworICAgICAgICAvLyBUaGVyZSBtdXN0IG5vdCBiZSBkdXBsaWNhdGVzIGluIHRoZSBmcmVl
IGxpc3QuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmVlLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2ZyZWUuc2l6ZSgp
OyArK2opCisgICAgICAgICAgICAgICAgQVNTRVJUKG1fZnJlZVtpXSAhPSBtX2ZyZWVbal0pOwor
ICAgICAgICB9CiAjZW5kaWYKKyAgICB9CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYWxsb2NhdGUo
KQogICAgIHsKQEAgLTk5LDYgKzExMiw5IEBAIHB1YmxpYzoKICAgICAgICAgdWludDMyX3QgaW5k
ZXggPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBBU1NFUlQobV91c2VkW2luZGV4
XSAhPSBtYXgoKSk7CiAgICAgICAgIGlmIChub2RlLnJlZkNvdW50KCkgPT0gKyttX3VzZWRbaW5k
ZXhdKSB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAg
ICAgICAgZGF0YUxvZygiIEZyZWVpbmcgdmlydHVhbCByZWdpc3RlciAldS4iLCBpbmRleCk7Cisj
ZW5kaWYKICAgICAgICAgICAgIC8vIElmIHRoZSB1c2UgY291bnQgaW4gdGhlIHNjb3JlYm9hcmQg
cmVhY2hlcyB0aGUgdXNlIGNvdW50IGZvciB0aGUgbm9kZSwKICAgICAgICAgICAgIC8vIHRoZW4g
dGhpcyB3YXMgaXRzIGxhc3QgdXNlOyB0aGUgdmlydHVhbCByZWdpc3RlciBpcyBub3cgZnJlZS4K
ICAgICAgICAgICAgIC8vIENsZWFyIHRoZSB1c2UgY291bnQgJiBhZGQgdG8gdGhlIGZyZWUgbGlz
dC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTEwNDAxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0
MCw3ICsxNjQwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiB7Ci0gICAgTm9kZVR5
cGUgb3AgPSBub2RlLm9wOworICAgIE5vZGVUeXBlIG9wID0gc3RhdGljX2Nhc3Q8Tm9kZVR5cGU+
KG5vZGUub3ApOwogCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgSlNDb25zdGFudDoKQEAg
LTM1NzgsNiArMzU3OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKIAogICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAgICAgY2FzZSBOb3A6CisgICAgY2FzZSBMYXN0
Tm9kZVR5cGU6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDExMDQwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NDQsNyAr
MTc0NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogewotICAgIE5vZGVUeXBlIG9w
ID0gbm9kZS5vcDsKKyAgICBOb2RlVHlwZSBvcCA9IHN0YXRpY19jYXN0PE5vZGVUeXBlPihub2Rl
Lm9wKTsKIAogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CkBAIC0zNTUy
LDYgKzM1NTIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIGNhc2UgTm9wOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDExMDQwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUkKIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6dXNlQ2hpbGRyZW4oTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAobm9kZS5vcCAmIE5vZGVI
YXNWYXJBcmdzKSB7CisgICAgaWYgKG5vZGUuZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4
IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAg
ICAgICAgICAgICB1c2UobV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7
CiAgICAgfSBlbHNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDExMDQwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lz
dGVyQWxsb2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMzggKzQ4LDYyIEBA
IHB1YmxpYzoKICAgICAgICAgZGF0YUxvZygiXG4iKTsKICNlbmRpZgogICAgICAgICBTY29yZUJv
YXJkIHNjb3JlQm9hcmQobV9ncmFwaCwgbV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGguc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2ldOworICAgICAgICBzY29yZUJvYXJkLmFzc2VydENs
ZWFyKCk7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAg
ICBib29sIG5lZWRzTmV3TGluZSA9IGZhbHNlOworI2VuZGlmCisgICAgICAgIGZvciAoc2l6ZV90
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsr
YmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXhJ
bkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2sp
IHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4
SW5CbG9jayk7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAg
ICAgICAgICAgICAgIGlmIChuZWVkc05ld0xpbmUpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgQCV1OiIsIG5vZGVJbmRleCk7
CisgICAgICAgICAgICAgICAgbmVlZHNOZXdMaW5lID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CiAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkgfHwgbm9kZS5vcCA9PSBQaGkgfHwgbm9k
ZS5vcCA9PSBGbHVzaCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSB8fCBub2RlLm9wID09IFBoaSB8fCBub2RlLm9w
ID09IEZsdXNoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gR2V0TG9jYWwgbm9kZXMgYXJlIGVmZmVjdGl2ZWx5IHBoaSBub2RlcyBp
biB0aGUgZ3JhcGgsIHJlZmVyZW5jaW5nCi0gICAgICAgICAgICAvLyByZXN1bHRzIGZyb20gcHJp
b3IgYmxvY2tzLgotICAgICAgICAgICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGaXJzdCwgY2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUn
cyBjaGlsZHJlbiwgdGhlbgotICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJl
Z2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKLSAgICAgICAgICAgICAgICAv
LyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQotICAg
ICAgICAgICAgICAgIC8vIFZpcnR1YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUg
cmV1c2VkIGZvciBub2RlLgotICAgICAgICAgICAgICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1Zh
ckFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1D
aGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2Fy
ZC51c2UobV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGls
ZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQyKCkp
OwotICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMygpKTsKKyAg
ICAgICAgICAgICAgICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVz
IGluIHRoZSBncmFwaCwgcmVmZXJlbmNpbmcKKyAgICAgICAgICAgICAgICAvLyByZXN1bHRzIGZy
b20gcHJpb3IgYmxvY2tzLgorICAgICAgICAgICAgICAgIGlmIChub2RlLm9wICE9IEdldExvY2Fs
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0LCBjYWxsIHVzZSBvbiBhbGwgb2YgdGhl
IGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCisgICAgICAgICAgICAgICAgICAgIC8vIGFs
bG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRoaXMK
KyAgICAgICAgICAgICAgICAgICAgLy8gb3JkZXIgc28gdGhhdCBpZiBhIGNoaWxkIGlzIG9uIGl0
cyBsYXN0IHVzZSwgYW5kIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVy
IGlzIGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCisgICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLmZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hp
bGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgr
KykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShtX2dyYXBoLm1f
dmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMygpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFub2RlLmhhc1Jlc3VsdCgpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIG5vZGUuc2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3JlQm9hcmQuYWxsb2NhdGUoKSk7Ci0gICAgICAgICAgICAvLyAnbXVzdEdlbmVyYXRlJyBu
b2RlcyBoYXZlIHRoZWlyIHVzZUNvdW50IGFydGlmaWNpYWxseSBlbGV2YXRlZCwKLSAgICAgICAg
ICAgIC8vIGNhbGwgdXNlIG5vdyB0byBhY2NvdW50IGZvciB0aGlzLgotICAgICAgICAgICAgaWYg
KG5vZGUubXVzdEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UoaSk7
CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHNjb3Jl
Qm9hcmQuYWxsb2NhdGUoKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiIEFzc2lnbmluZyB2aXJ0dWFsIHJlZ2lzdGVy
ICV1IHRvIG5vZGUgJXUuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3Rl
ciwgbm9kZUluZGV4KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIG5vZGUuc2V0VmlydHVhbFJl
Z2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgLy8gJ211c3RHZW5lcmF0
ZScgbm9kZXMgaGF2ZSB0aGVpciB1c2VDb3VudCBhcnRpZmljaWFsbHkgZWxldmF0ZWQsCisgICAg
ICAgICAgICAgICAgLy8gY2FsbCB1c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUubXVzdEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIHNj
b3JlQm9hcmQudXNlKG5vZGVJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzY29y
ZUJvYXJkLmFzc2VydENsZWFyKCk7CiAgICAgICAgIH0KKyNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIGlmIChuZWVkc05ld0xpbmUpCisgICAgICAgICAg
ICBkYXRhTG9nKCJcbiIpOworI2VuZGlmCiAKICAgICAgICAgLy8gJ21fbnVtQ2FsbGVlUmVnaXN0
ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxvY2FscyBhbmQgdGVtcG9yYXJpZXMgYWxsb2NhdGVkCiAg
ICAgICAgIC8vIGZvciB0aGUgZnVuY3Rpb24gKGFuZCBjaGVja2VkIGZvciBvbiBlbnRyeSkuIFNp
bmNlIHdlIHBlcmZvcm0gYSBuZXcgYW5kCg==
</data>
<flag name="review"
          id="134534"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>