<?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>185287</bug_id>
          
          <creation_ts>2018-05-03 19:43:05 -0700</creation_ts>
          <short_desc>DFG AI should have O(1) clobbering</short_desc>
          <delta_ts>2024-09-10 10:57:22 -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>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>owengm3001</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1420529</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-03 19:43:05 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420530</commentid>
    <comment_count>1</comment_count>
      <attachid>339509</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-03 19:43:30 -0700</bug_when>
    <thetext>Created attachment 339509
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420986</commentid>
    <comment_count>3</comment_count>
      <attachid>339620</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-04 18:50:14 -0700</bug_when>
    <thetext>Created attachment 339620
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420989</commentid>
    <comment_count>4</comment_count>
      <attachid>339623</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-04 18:53:49 -0700</bug_when>
    <thetext>Created attachment 339623
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421059</commentid>
    <comment_count>5</comment_count>
      <attachid>339650</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-05 11:15:07 -0700</bug_when>
    <thetext>Created attachment 339650
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421060</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-05 11:16:45 -0700</bug_when>
    <thetext>Attachment 339650 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1092:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 19 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>1421068</commentid>
    <comment_count>7</comment_count>
      <attachid>339650</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-05 12:28:12 -0700</bug_when>
    <thetext>Comment on attachment 339650
more

Attachment 339650 did not pass jsc-ews (mac):
Output: http://webkit-queues.webkit.org/results/7578343

New failing tests:
v8-v6/v8-deltablue.js.ftl-eager
v8-v6/v8-deltablue.js.ftl-no-cjit-b3o1
stress/v8-deltablue-strict.js.ftl-eager
microbenchmarks/deltablue-for-of.js.ftl-eager
microbenchmarks/deltablue-for-of.js.ftl-no-cjit-b3o1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421089</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-05 17:51:26 -0700</bug_when>
    <thetext>An improved version of this is starting to pass tests and be a compile time speed-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421092</commentid>
    <comment_count>9</comment_count>
      <attachid>339661</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-05 18:08:11 -0700</bug_when>
    <thetext>Created attachment 339661
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421093</commentid>
    <comment_count>10</comment_count>
      <attachid>339662</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-05 18:09:01 -0700</bug_when>
    <thetext>Created attachment 339662
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421094</commentid>
    <comment_count>11</comment_count>
      <attachid>339663</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-05 18:25:38 -0700</bug_when>
    <thetext>Created attachment 339663
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421095</commentid>
    <comment_count>12</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-05 18:27:45 -0700</bug_when>
    <thetext>Attachment 339663 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1092:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 20 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>1421146</commentid>
    <comment_count>13</comment_count>
      <attachid>339687</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-06 10:29:12 -0700</bug_when>
    <thetext>Created attachment 339687
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421147</commentid>
    <comment_count>14</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-06 10:31:07 -0700</bug_when>
    <thetext>Attachment 339687 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1092:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 21 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>1421480</commentid>
    <comment_count>15</comment_count>
      <attachid>339687</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-07 16:00:02 -0700</bug_when>
    <thetext>Comment on attachment 339687
the patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGAbstractValue.h:409
&gt; +    // FIXME: Explain this. (OOPS!!)

oops

&gt; Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.h:55
&gt; +    ALWAYS_INLINE AbstractValue&amp; forNode(Edge edge)

Why doesn&apos;t this need to fastForward as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421534</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-07 17:11:59 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #15)
&gt; Comment on attachment 339687 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=339687&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractValue.h:409
&gt; &gt; +    // FIXME: Explain this. (OOPS!!)
&gt; 
&gt; oops
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.h:55
&gt; &gt; +    ALWAYS_INLINE AbstractValue&amp; forNode(Edge edge)
&gt; 
&gt; Why doesn&apos;t this need to fastForward as well?

Because it calls forNode(NodeProjection), and that one already fastForwards:

    ALWAYS_INLINE AbstractValue&amp; forNode(NodeFlowProjection node)
    {
        return fastForward(m_abstractValues.at(node));
    }
    
    ALWAYS_INLINE AbstractValue&amp; forNode(Edge edge)
    {
        return forNode(edge.node());
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421560</commentid>
    <comment_count>17</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-07 17:42:28 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #16)
&gt; (In reply to Saam Barati from comment #15)
&gt; &gt; Comment on attachment 339687 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=339687&amp;action=review
&gt; &gt; 
&gt; &gt; r=me
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractValue.h:409
&gt; &gt; &gt; +    // FIXME: Explain this. (OOPS!!)
&gt; &gt; 
&gt; &gt; oops
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.h:55
&gt; &gt; &gt; +    ALWAYS_INLINE AbstractValue&amp; forNode(Edge edge)
&gt; &gt; 
&gt; &gt; Why doesn&apos;t this need to fastForward as well?
&gt; 
&gt; Because it calls forNode(NodeProjection), and that one already fastForwards:
&gt; 
&gt;     ALWAYS_INLINE AbstractValue&amp; forNode(NodeFlowProjection node)
&gt;     {
&gt;         return fastForward(m_abstractValues.at(node));
&gt;     }
&gt;     
&gt;     ALWAYS_INLINE AbstractValue&amp; forNode(Edge edge)
&gt;     {
&gt;         return forNode(edge.node());
&gt;     }

Makes sense, I wasn&apos;t considering this that NodeFlowProjection had an implicit constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421563</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-05-07 18:05:39 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/231471/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421564</commentid>
    <comment_count>19</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-05-07 18:06:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/40044661&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339509</attachid>
            <date>2018-05-03 19:43:30 -0700</date>
            <delta_ts>2018-05-04 18:50:14 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13544</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlci5oCShyZXZpc2lvbiAyMzEzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDEzICsxNDks
MTMgQEAgcHVibGljOgogICAgIFBoaUNoaWxkcmVuKiBwaGlDaGlsZHJlbigpIHsgcmV0dXJuIG1f
cGhpQ2hpbGRyZW4uZ2V0KCk7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBjbG9iYmVyV29y
bGQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgdm9pZCBj
bG9iYmVyV29ybGQoKTsKICAgICB2b2lkIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yQWxsVmFsdWVzKHVuc2ln
bmVkIGluZGV4SW5CbG9jaywgRnVuY3RvciYpOwogICAgIAotICAgIHZvaWQgY2xvYmJlclN0cnVj
dHVyZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVz
KCk7CiAgICAgdm9pZCBkaWRGb2xkQ2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICAKICAgICB2b2lk
IG9ic2VydmVUcmFuc2l0aW9uKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBmcm9tLCBSZWdpc3RlcmVkU3RydWN0dXJlIHRvKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHJldmlzaW9uIDIzMTMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4MCwyMyArMjI4
MCwyMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBUb1RoaXM6IHsKLSAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlKTsKICAgICAgICAgYm9vbCBzdHJp
Y3RNb2RlID0gbV9ncmFwaC5leGVjdXRhYmxlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmlz
U3RyaWN0TW9kZSgpOwogCi0gICAgICAgIFRvVGhpc1Jlc3VsdCByZXN1bHQgPSBpc1RvVGhpc0Fu
SWRlbnRpdHkobV92bSwgc3RyaWN0TW9kZSwgc291cmNlKTsKKyAgICAgICAgVG9UaGlzUmVzdWx0
IHJlc3VsdCA9IGlzVG9UaGlzQW5JZGVudGl0eShtX3ZtLCBzdHJpY3RNb2RlLCBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gVG9UaGlzUmVzdWx0OjpEeW5h
bWljKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgICAgICAgICAgY2FzZSBU
b1RoaXNSZXN1bHQ6OklkZW50aXR5OgogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7Cisg
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUb1RoaXNSZXN1bHQ6OlVu
ZGVmaW5lZDoKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVG9UaGlzUmVzdWx0
OjpHbG9iYWxUaGlzOgogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHMo
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0VHlwZShtX2dyYXBoLCBTcGVj
T2JqZWN0KTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwg
U3BlY09iamVjdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRv
VGhpc1Jlc3VsdDo6RHluYW1pYzoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMjMwNSwxMCArMjMwMywxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc3RyaWN0TW9kZSkK
LSAgICAgICAgICAgIGRlc3RpbmF0aW9uLm1ha2VIZWFwVG9wKCk7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgZGVz
dGluYXRpb24gPSBzb3VyY2U7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbi5tZXJnZShTcGVjT2Jq
ZWN0KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWVyZ2UoU3BlY09iamVjdCk7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjM0NCwxNCArMjM0MiwxMSBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKICAgICBjYXNlIFRvT2JqZWN0Ogog
ICAgIGNhc2UgQ2FsbE9iamVjdENvbnN0cnVjdG9yOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IHNvdXJjZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVl
JiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZSk7Ci0KLSAgICAgICAgaWYgKCEoc291cmNlLm1f
dHlwZSAmIH5TcGVjT2JqZWN0KSkgeworICAgICAgICBpZiAoIShmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUgJiB+U3BlY09iamVjdCkpIHsKICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUb09iamVj
dCkKICAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7Ci0gICAgICAgICAgICBk
ZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTI4
NTYsOCArMjg1MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogewot
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihSZWdpc3RlcmVkU3RydWN0
dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSkpCisgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQobm9k
ZS0+c3RydWN0dXJlKCkpKSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHMo
dHJ1ZSk7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CiAgICAgICAg
IApAQCAtMjg4OCw3ICsyODgyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAvLyBOb3RlIHRoYXQgaXQncyB0ZW1wdGluZyB0byBzaW1wbHkgc2F5
IHRoYXQgdGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBCT1RUT00gYmVjYXVzZSBvZgogICAgICAgICAv
LyB0aGUgY29udHJhZGljdGlvbi4gVGhhdCB3b3VsZCBiZSB3cm9uZywgc2luY2Ugd2UgaGF2ZW4n
dCBoaXQgYW4gaW52YWxpZGF0aW9uIHBvaW50LAogICAgICAgICAvLyB5ZXQuCi0gICAgICAgIHZh
bHVlLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKQEAgLTM0
MDAsNyArMzM5NCw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6Ci0g
ICAgICAgIGZvckFsbFZhbHVlcyhjbG9iYmVyTGltaXQsIEFic3RyYWN0VmFsdWU6Om9ic2VydmVJ
bnZhbGlkYXRpb25Qb2ludEZvcik7CiAgICAgICAgIG1fc3RhdGUuc2V0U3RydWN0dXJlQ2xvYmJl
clN0YXRlKFN0cnVjdHVyZXNBcmVXYXRjaGVkKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTM1Mzcs
MTAgKzM1MzAsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotdm9pZCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xvYmJlcldvcmxkKAotICAgIGNvbnN0IENv
ZGVPcmlnaW4mLCB1bnNpZ25lZCBjbG9iYmVyTGltaXQpCit2b2lkIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyV29ybGQoKQogewotICAgIGNsb2JiZXJTdHJ1
Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CisgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0zNTc5LDkgKzM1NzEsOSBAQCB2
b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6Y2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgY2xvYmJlckxpbWl0KQor
dm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xvYmJlclN0cnVj
dHVyZXMoKQogewotICAgIGZvckFsbFZhbHVlcyhjbG9iYmVyTGltaXQsIEFic3RyYWN0VmFsdWU6
OmNsb2JiZXJTdHJ1Y3R1cmVzRm9yKTsKKyAgICBtX3N0YXRlLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7
CiAgICAgbV9zdGF0ZS5tZXJnZUNsb2JiZXJTdGF0ZShBYnN0cmFjdEludGVycHJldGVyQ2xvYmJl
clN0YXRlOjpDbG9iYmVyZWRTdHJ1Y3R1cmVzKTsKICAgICBtX3N0YXRlLnNldFN0cnVjdHVyZUNs
b2JiZXJTdGF0ZShTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAyMzEzMzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAzLDIyICsxMDMsMTYgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIGNsb2Ji
ZXJTdHJ1Y3R1cmVzRm9yKEFic3RyYWN0VmFsdWUmIHZhbHVlKQorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBmYXN0Rm9yd2FyZFRvKEVwb2NoIGVwb2NoLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xv
YmJlclN0YXRlKQogICAgIHsKLSAgICAgICAgdmFsdWUuY2xvYmJlclN0cnVjdHVyZXMoKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKQotICAgIHsKLSAg
ICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7CisgICAgICAgIGlm
IChlcG9jaCAhPSBtX2VmZmVjdEVwb2NoKQorICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMo
KTsKKyAgICAgICAgaWYgKGNsb2JiZXJTdGF0ZSA9PSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKKyAg
ICAgICAgICAgIG1fc3RydWN0dXJlLm9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpOworICAgICAg
ICBtX2VmZmVjdEVwb2NoID0gZXBvY2g7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBvaW50Rm9yKEFi
c3RyYWN0VmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgdmFsdWUub2JzZXJ2ZUludmFsaWRh
dGlvblBvaW50KCk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb24oUmVn
aXN0ZXJlZFN0cnVjdHVyZSBmcm9tLCBSZWdpc3RlcmVkU3RydWN0dXJlIHRvKQogICAgIHsKICAg
ICAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7CkBAIC0zOTcsNiArMzkxLDEwIEBAIHN0cnVj
dCBBYnN0cmFjdFZhbHVlIHsKICAgICAvLyBlZmZlY3QgdGhhdCBtYWtlcyBub24tb2J2aW91cyBj
aGFuZ2VzIHRvIHRoZSBoZWFwLgogICAgIEFycmF5TW9kZXMgbV9hcnJheU1vZGVzOwogICAgIAor
ICAgIC8vIFRoZSBlcG9jaC4KKyAgICAvLyBGSVhNRTogRXhwbGFpbiB0aGlzLiAoT09QUyEhKQor
ICAgIEVwb2NoIG1fZWZmZWN0RXBvY2g7CisgICAgCiAgICAgLy8gVGhpcyBpcyBhIHByb3ZlbiBj
b25zdHJhaW50IG9uIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdGhhdCB0aGlzIHZhbHVlIGNhbgogICAg
IC8vIGhhdmUgbm93IG9yIGFueSB0aW1lIGluIHRoZSBmdXR1cmUsIHVubGVzcyBpdCBpcyByZWFz
c2lnbmVkLiBOb3RlIHRoYXQgdGhpcwogICAgIC8vIGltcGxpZXMgbm90aGluZyBhYm91dCB0aGUg
c3RydWN0dXJlLiBPZGRseSwgSlNWYWx1ZSgpIChpLmUuIHRoZSBlbXB0eSB2YWx1ZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0
ZS5oCShyZXZpc2lvbiAyMzEzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0
VGFpbEFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsMTggQEAgcHVi
bGljOgogICAgIHZvaWQgY3JlYXRlVmFsdWVGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbik7CiAg
ICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24pOwogICAgIEFic3Ry
YWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKSB7IHJldHVybiBmb3JOb2RlKGVkZ2Uubm9kZSgp
KTsgfQotICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+JiB2YXJpYWJsZXMoKSB7IHJldHVybiBt
X2Jsb2NrLT52YWx1ZXNBdFRhaWw7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3Vt
ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkFyZ3Vt
ZW50cygpOyB9CisgICAgdW5zaWdlbmQgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBt
X2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIEFic3RyYWN0VmFs
dWUmIG9wZXJhbmQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5v
cGVyYW5kKG9wZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3Bl
cmFuZCk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5kZXgpIHsgcmV0dXJu
IG1fYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChpbmRleCk7IH0KKyAgICBBYnN0cmFjdFZhbHVl
JiBhcmd1bWVudChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5h
cmd1bWVudChpbmRleCk7IH0KKyAgICAKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIH0KICAgICAKICAg
ICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMzEzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDYg
KzYwLDcgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0JsbwogICAgIEFT
U0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNp
Y0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CiAKICAgICBtX2Fic3Ry
YWN0VmFsdWVzLnJlc2l6ZSgpOworICAgIG1fZWZmZWN0RXBvY2ggPSBFcG9jaDo6Zmlyc3QoKTsK
ICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJhc2ljQmxvY2stPnNpemUoKTsgaSsr
KSB7CiAgICAgICAgIE5vZGVGbG93UHJvamVjdGlvbjo6Zm9yRWFjaCgKQEAgLTY4LDcgKzY5LDgg
QEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0JsbwogICAgICAgICAgICAg
fSk7CiAgICAgfQogCi0gICAgbV92YXJpYWJsZXMgPSBiYXNpY0Jsb2NrLT52YWx1ZXNBdEhlYWQ7
CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmFyaWFibGVzLnNpemUoKTsgaS0tOykKKyAgICAgICAg
dmFyaWFibGVBdChpKSA9IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVhZFtpXTsKICAgICAKICAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CiAgICAgICAgIGZvciAoTm9kZUFic3RyYWN0VmFs
dWVQYWlyJiBlbnRyeSA6IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkKSB7CkBAIC0yMDEs
MTkgKzIwMywxOSBAQCBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrCiAg
ICAgY2FzZSBUaHJlYWRlZENQUzogewogICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyAr
K2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJs
b2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICAgICAgbWVyZ2VT
dGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMuYXJndW1lbnQoYXJndW1lbnQpLCBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAgICAgICBt
ZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBhcmd1bWVudChhcmd1bWVudCksIGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRl
c3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7Ci0gICAgICAgICAg
ICBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5sb2NhbChsb2NhbCks
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpKTsKKyAgICAgICAgICAgIG1lcmdl
U3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIGxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5sb2NhbChsb2NhbCkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAog
ICAgIGNhc2UgU1NBOiB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZh
bHVlc0F0VGFpbC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdFRhaWxb
aV0ubWVyZ2UobV92YXJpYWJsZXNbaV0pOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFp
bFtpXS5tZXJnZSh2YXJpYWJsZUF0KGkpKTsKIAogICAgICAgICBmb3IgKE5vZGVBYnN0cmFjdFZh
bHVlUGFpciYgdmFsdWVBdFRhaWwgOiBibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwpIHsKICAgICAg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlQXROb2RlID0gZm9yTm9kZSh2YWx1ZUF0VGFpbC5u
b2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIzMTMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDks
NyArNDksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2Rl
Rmxvd1Byb2plY3Rpb24gbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2Fic3RyYWN0VmFs
dWVzLmF0KG5vZGUpOworICAgICAgICByZXR1cm4gZmFzdEZvcndhcmQobV9hYnN0cmFjdFZhbHVl
cy5hdChub2RlKSk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRn
ZSBlZGdlKQpAQCAtNTcsMTAgKzU3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZvck5v
ZGUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKLSAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVl
PiYgdmFyaWFibGVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhYmxlczsKLSAgICB9
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3Zhcmlh
Ymxlcy5udW1iZXJPZkFyZ3VtZW50cygpOyB9CisgICAgdW5zaWdlbmQgbnVtYmVyT2ZMb2NhbHMo
KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlcy5udW1iZXJPZkxvY2FscygpOyB9CisgICAgQWJz
dHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQgb3BlcmFuZCkgeyByZXR1cm4gZmFzdEZvcndhcmQobV92
YXJpYWJsZXMub3BlcmFuZChvcGVyYW5kKSk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxl
cy5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBp
bmRleCkgeyByZXR1cm4gZmFzdEZvcndhcmQobV92YXJpYWJsZXMubG9jYWwoaW5kZXgpKTsgfQor
ICAgIEFic3RyYWN0VmFsdWUmIGFyZ3VtZW50KHNpemVfdCBpbmRleCkgeyByZXR1cm4gZmFzdEZv
cndhcmQobV92YXJpYWJsZXMuYXJndW1lbnQoaW5kZXgpKTsgfQorICAgIEFic3RyYWN0VmFsdWUm
IHZhcmlhYmxlQXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxl
c1tpbmRleF0pOyB9CiAgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGJlZm9yZSBiZWdpbm5pbmcgQ0ZB
IHRvIGluaXRpYWxpemUgdGhlIGFic3RyYWN0IHZhbHVlcyBvZgogICAgIC8vIGFyZ3VtZW50cywg
YW5kIHRvIGluZGljYXRlIHdoaWNoIGJsb2NrcyBzaG91bGQgYmUgbGlzdGVkIGZvciBDRkEKQEAg
LTExOSw2ICsxMjIsOCBAQCBwdWJsaWM6CiAgICAgLy8gTWVyZ2VUb1N1Y2Nlc3NvcnMuCiAgICAg
Ym9vbCBtZXJnZVRvU3VjY2Vzc29ycyhCYXNpY0Jsb2NrKik7CiAgICAgCisgICAgdm9pZCBjbG9i
YmVyU3RydWN0dXJlcygpIHsgbV9lZmZlY3RFcG9jaC5idW1wKCk7IH0KKyAgICAKICAgICAvLyBN
ZXRob2RzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIEFic3RyYWN0SW50ZXJwcmV0ZXIuCiAg
ICAgdm9pZCBzZXRDbG9iYmVyU3RhdGUoQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZSBz
dGF0ZSkgeyBtX2Nsb2JiZXJTdGF0ZSA9IHN0YXRlOyB9CiAgICAgdm9pZCBtZXJnZUNsb2JiZXJT
dGF0ZShBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlIHN0YXRlKSB7IG1fY2xvYmJlclN0
YXRlID0gbWVyZ2VDbG9iYmVyU3RhdGVzKG1fY2xvYmJlclN0YXRlLCBzdGF0ZSk7IH0KQEAgLTEz
OSw2ICsxNDQsMTIgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBBYnN0cmFjdFZh
bHVlJiBmYXN0Rm9yd2FyZChBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHZh
bHVlLmZhc3RGb3J3YXJkVG8obV9lZmZlY3RFcG9jaCwgbV9zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUp
OworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorICAgIAogICAgIHZvaWQgbWVyZ2VTdGF0
ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJp
YWJsZSwgTm9kZSopOwogCiAgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9j
a3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9k
ZSogZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKQEAgLTE1NCw2ICsxNjUsNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1ZhbGlkOwogICAgIEFic3RyYWN0SW50ZXJwcmV0ZXJD
bG9iYmVyU3RhdGUgbV9jbG9iYmVyU3RhdGU7CiAgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIG1f
c3RydWN0dXJlQ2xvYmJlclN0YXRlOworICAgIEVwb2NoIG1fZWZmZWN0RXBvY2g7CiAgICAgCiAg
ICAgQnJhbmNoRGlyZWN0aW9uIG1fYnJhbmNoRGlyZWN0aW9uOyAvLyBUaGlzIGlzIG9ubHkgc2V0
IGZvciBibG9ja3MgdGhhdCBlbmQgaW4gQnJhbmNoIGFuZCB0aGF0IGV4ZWN1dGUgdG8gY29tcGxl
dGlvbiAoaS5lLiBtX2lzVmFsaWQgPT0gdHJ1ZSkuCiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339620</attachid>
            <date>2018-05-04 18:50:14 -0700</date>
            <delta_ts>2018-05-04 18:53:49 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40359</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIzMTMzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYg
KzI3NCw3IEBAIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCiBkZmcvREZHQWJzdHJhY3RIZWFw
LmNwcAogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuY3BwCiBkZmcvREZH
QWJzdHJhY3RWYWx1ZS5jcHAKK2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmNwcAog
ZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAKIGRmZy9E
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCiBkZmcvREZHQXJndW1lbnRzRWxpbWlu
YXRpb25QaGFzZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyMzEzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzE5LDYgKzMxOSw3IEBACiAJ
CTBGNEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzcxRkNB
M0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2
QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZp
b3VzU3BpbGxzLmggKi87IH07CiAJCTBGNEYxMUU4MjA5QkNEQUIwMDcwOTY1NCAvKiBDb21waWxl
clRpbWluZ1Njb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRGMTFFNjIwOUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5oICov
OyB9OworCQkwRjRGMTFFQjIwOUQ0MjY2MDA3MDk2NTQgLyogREZHQWJzdHJhY3RWYWx1ZUNsb2Ji
ZXJFcG9jaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0RjExRUEyMDlENDI2MzAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2gu
aCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgxRTJGRkRFMDAwNzUx
ODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEY4Mjg2MUUyRkZEREIwMDc1
MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0RjgyOEMxRTMxQjk3
NjAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4QTFFMzFCOTcx
MDA3NTE4NEMgLyogU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsK
QEAgLTIzMTAsNiArMjMxMSw4IEBACiAJCTBGNERFMUQwMUM0RDc2NEIwMDRENkMxMSAvKiBCM09y
aWdpbkR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmln
aW5EdW1wLmNwcDsgcGF0aCA9IGIzL0IzT3JpZ2luRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNEYxMUU2MjA5QkNEQTEwMDcwOTY1NCAvKiBDb21waWxlclRpbWluZ1Nj
b3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBpbGVyVGltaW5nU2Nv
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjExRTcyMDlCQ0RBMTAwNzA5
NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29tcGlsZXJUaW1pbmdTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNEYxMUU5MjA5RDQyNjMwMDcwOTY1NCAvKiBERkdBYnN0cmFjdFZhbHVlQ2xv
YmJlckVwb2NoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fi
c3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWVD
bG9iYmVyRXBvY2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRGMTFFQTIw
OUQ0MjYzMDA3MDk2NTQgLyogREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmg7
IHBhdGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhl
Y3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERG
R1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7
IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjgyODUxRTJGRkREQjAwNzUxODRDIC8qIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTE0LDYgKzcxMTcsOCBAQAog
CQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZh
bHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RW
YWx1ZS5oICovLAorCQkJCTBGNEYxMUU5MjA5RDQyNjMwMDcwOTY1NCAvKiBERkdBYnN0cmFjdFZh
bHVlQ2xvYmJlckVwb2NoLmNwcCAqLywKKwkJCQkwRjRGMTFFQTIwOUQ0MjYzMDA3MDk2NTQgLyog
REZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oICovLAogCQkJCTBGRDNFM0ZGMUI2MThBQUYw
MEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3Bw
ICovLAogCQkJCTBGRDNFNDAwMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCAqLywKIAkJCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVD
OUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLywKQEAgLTkwNDAsNiAr
OTA0NSw3IEBACiAJCQkJQTUxM0U1QzIxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGODE3QjZCNUFCMDBB
N0FFM0YgLyogSlNJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGOTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRGMTFF
QjIwOUQ0MjY2MDA3MDk2NTQgLyogREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjY2RjcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzZDNTE3NjExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDgxMUI4NDI5QTQwMDQxMzg1NiAvKiBK
U0ludGVybmFsUHJvbWlzZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMjMx
MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MSwyMSArNDEsMzggQEAgcHVibGljOgogICAgIEFic3Ry
YWN0SW50ZXJwcmV0ZXIoR3JhcGgmLCBBYnN0cmFjdFN0YXRlVHlwZSYpOwogICAgIH5BYnN0cmFj
dEludGVycHJldGVyKCk7CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlRmxv
d1Byb2plY3Rpb24gbm9kZSkKKyAgICBBTFdBWVNfSU5MSU5FIEFic3RyYWN0VmFsdWUmIGZvck5v
ZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zdGF0
ZS5mb3JOb2RlKG5vZGUpOwogICAgIH0KICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2Rl
KEVkZ2UgZWRnZSkKKyAgICBBTFdBWVNfSU5MSU5FIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRn
ZSBlZGdlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2RlKCkpOwogICAg
IH0KICAgICAKLSAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVzKCkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZv
ck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUsIFZhbHVlVHlwZSYmIHZhbHVlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fc3RhdGUudmFyaWFibGVzKCk7CisgICAgICAgIG1fc3RhdGUuc2V0
Rm9yTm9kZShub2RlLCBzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPih2YWx1ZSkpOwogICAgIH0KICAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+CisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldEZvck5vZGUoRWRnZSBlZGdlLCBWYWx1ZVR5cGUmJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHNldEZvck5vZGUoZWRnZS5ub2RlKCksIHN0ZDo6Zm9yd2FyZDxWYWx1ZVR5cGU+KHZhbHVl
KSk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoTm9k
ZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAgeworICAgICAgICBtX3N0YXRlLmNsZWFyRm9yTm9k
ZShub2RlKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyRm9yTm9k
ZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBjbGVhckZvck5vZGUoZWRnZS5ub2RlKCkpOwor
ICAgIH0KKwogICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2soTm9kZSogbm9kZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZXNQYXNzZWRUaHJvdWdoKQogICAgIHsKICAgICAgICAgcmV0dXJuICFmb3JOb2RlKG5v
ZGUpLmlzVHlwZSh0eXBlc1Bhc3NlZFRocm91Z2gpOwpAQCAtMTQ5LDEzICsxNjYsMTMgQEAgcHVi
bGljOgogICAgIFBoaUNoaWxkcmVuKiBwaGlDaGlsZHJlbigpIHsgcmV0dXJuIG1fcGhpQ2hpbGRy
ZW4uZ2V0KCk7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3Qg
Q29kZU9yaWdpbiYsIHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgdm9pZCBjbG9iYmVyV29y
bGQoKTsKICAgICB2b2lkIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yQWxsVmFsdWVzKHVuc2lnbmVkIGluZGV4
SW5CbG9jaywgRnVuY3RvciYpOwogICAgIAotICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXModW5z
aWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CiAgICAg
dm9pZCBkaWRGb2xkQ2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICAKICAgICB2b2lkIG9ic2VydmVU
cmFuc2l0aW9uKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgUmVnaXN0ZXJlZFN0cnVjdHVyZSBmcm9t
LCBSZWdpc3RlcmVkU3RydWN0dXJlIHRvKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlz
aW9uIDIzMTMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAogICAgIGNhc2UgSWRlbnRpdHlX
aXRoUHJvZmlsZToKICAgICBjYXNlIElkZW50aXR5OiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUpLnZhbHVlKCkp
CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICBi
cmVhazsKQEAgLTI0OSwzMyArMjQ5LDMzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUudmFyaWFi
bGVzKCkub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkub2Zmc2V0KCkpOworICAg
ICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKHZhcmlhYmxlQWNjZXNz
RGF0YS0+bG9jYWwoKS5vZmZzZXQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9j
YWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZs
dXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQogICAgICAgICAgICAg
bV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKSA9
IHZhbHVlOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZhbHVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgIFN0YWNrQWNj
ZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFj
dFZhbHVlIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5sb2Nh
bCk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUg
Y2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUo
dHlwZUZpbHRlckZvcihkYXRhLT5mb3JtYXQpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgp
KQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZhbHVlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0g
ICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCku
b3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+bG9jYWwpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCkBAIC0yOTYsMTQgKzI5NiwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBh
cmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudCBtZWFucyB0aGF0IHNvbWVvbmUgc2V0
CiAgICAgICAgIC8vIHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50
bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCiAgICAgICAgIC8vIG5vbi1jbGVhciB2
YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEluaXRp
YWxpemVFbnRyeXBvaW50QXJndW1lbnRzOiB7CiAgICAgICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJ
bmRleCA9IG5vZGUtPmVudHJ5cG9pbnRJbmRleCgpOwogICAgICAgICBjb25zdCBWZWN0b3I8Rmx1
c2hGb3JtYXQ+JiBhcmd1bWVudEZvcm1hdHMgPSBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2Vu
dHJ5cG9pbnRJbmRleF07CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1
bWVudCA8IGFyZ3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrYXJndW1lbnQpIHsKLSAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChhcmd1
bWVudCk7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuYXJndW1l
bnQoYXJndW1lbnQpOwogICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudEZvcm1hdHNbYXJndW1l
bnRdKSB7CiAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKICAgICAgICAgICAgICAgICB2
YWx1ZS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwpAQCAtMzQxLDkgKzM0MSw5IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwotICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+Y291bnQp
LnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIG1fc3RhdGUub3BlcmFuZChkYXRhLT5j
b3VudCkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
ZGF0YS0+bGltaXQgLSAxOyBpLS07KQotICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5v
cGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAg
ICAgIG1fc3RhdGUub3BlcmFuZChkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLm1ha2VIZWFwVG9w
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtNjc0LDEyICs2NzQs
MTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgIGlmIChudW1i
ZXJPZlJlbW92ZWRDaGlsZHJlbiA9PSBudW1iZXJPZkNoaWxkcmVuKSB7CiAgICAgICAgICAgICAg
ICAgLy8gUHJvcGFnYXRlIHRoZSBsYXN0IGNoaWxkLiBUaGlzIGlzIHRoZSB3YXkgdGFrZW4gaW4g
dGhlIGNvbnN0YW50IGZvbGRpbmcgcGhhc2UuCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
KSA9IGZvck5vZGUobm9kZS0+Y2hpbGRyZW4uY2hpbGQobnVtYmVyT2ZDaGlsZHJlbiAtIDEpKTsK
KyAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGRyZW4u
Y2hpbGQobnVtYmVyT2ZDaGlsZHJlbiAtIDEpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoKG51bWJlck9mUmVtb3ZlZENoaWxkcmVuICsg
MSkgPT0gbnVtYmVyT2ZDaGlsZHJlbikgewogICAgICAgICAgICAgICAgIEFTU0VSVChub25FbXB0
eUluZGV4KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5j
aGlsZHJlbi5jaGlsZChub25FbXB0eUluZGV4LnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBz
ZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGRyZW4uY2hpbGQobm9uRW1wdHlJbmRl
eC52YWx1ZSgpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC0xOTcyLDE0ICsxOTcyLDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4Q2hlY2tlZC5zYWZl
R2V0KGFyZ3VtZW50SW5kZXgpICE9IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudEluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBtX3N0
YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5v
ZGUsIG1fc3RhdGUub3BlcmFuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5k
Q29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRJbmRleCA8IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1
bWVudHMoKSAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBt
X3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50KGFyZ3VtZW50SW5kZXggKyAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBtX3N0YXRlLm51bWJlck9mQXJndW1lbnRz
KCkgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fc3Rh
dGUuYXJndW1lbnQoYXJndW1lbnRJbmRleCArIDEpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTk5Myw3ICsxOTkzLDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSByZXN1bHQ7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgbm9kZS0+
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXM7ICsraSkgewogICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgK
LSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAorICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjAwMyw3ICsyMDAzLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgaWYg
KHJlc3VsdC52YWx1ZSgpKQogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFu
dHModHJ1ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSByZXN1
bHQ7CisgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHJlc3VsdCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIxMjIsNyArMjEyMiw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYgKCEoZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlICYgfihTcGVjRnVsbE51bWJlciB8IFNwZWNCb29sZWFuIHwg
U3BlY1N0cmluZyB8IFNwZWNTeW1ib2wgfCBTcGVjQmlnSW50KSkpIHsKICAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJl
cldvcmxkKCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjE0NSw3
ICsyMTQ1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICBpZiAoIShmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+U3BlY0J5dGVjb2Rl
TnVtYmVyKSkgewogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsK
ICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNldEZvck5vZGUo
bm9kZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIApAQCAtMjc0Nyw3ICsyNzQ3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBub2JvZHkgd291bGQgY3VycmVudGx5IGJlbmVmaXQg
ZnJvbSBoYXZpbmcgdGhhdCBpbmZvcm1hdGlvbi4gQnV0IGl0J3MgYSBidWcgbm9uZXRoZWxlc3Mu
CiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHkp
CiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlclN0cnVjdHVyZXMoKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgorICAgICAg
ICBjbGVhckZvck5vZGUobm9kZSk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2hlY2tTdWJDbGFzczogewogICAgICAgICBKU1ZhbHVl
IGNvbnN0YW50ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKQEAgLTI4ODgsNyAr
Mjg4OCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgLy8gTm90ZSB0aGF0IGl0J3MgdGVtcHRpbmcgdG8gc2ltcGx5IHNheSB0aGF0IHRoZSByZXN1
bHRpbmcgdmFsdWUgaXMgQk9UVE9NIGJlY2F1c2Ugb2YKICAgICAgICAgLy8gdGhlIGNvbnRyYWRp
Y3Rpb24uIFRoYXQgd291bGQgYmUgd3JvbmcsIHNpbmNlIHdlIGhhdmVuJ3QgaGl0IGFuIGludmFs
aWRhdGlvbiBwb2ludCwKICAgICAgICAgLy8geWV0LgotICAgICAgICB2YWx1ZS5zZXQobV9ncmFw
aCwgbm9kZS0+c3RydWN0dXJlKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5z
ZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7CkBAIC0yODk2LDExICsyODk2LDEx
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdmFsdWUsIG5vZGUtPmFycmF5TW9kZSgpKTsKICAg
ICAgICAgaWYgKHZpZXcpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7CisgICAgICAgIGNsZWFyRm9yTm9k
ZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdl
UG9pbnRlcjogewotICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7CisgICAgICAgIGNsZWFy
Rm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7IAogICAgIH0KICAgICAgICAgCkBAIC0yOTg3
LDcgKzI5ODcsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFs
aWQoZmFsc2UpOwogCi0gICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgc2V0
Rm9yTm9kZShub2RlLCB2YWx1ZSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlKQogICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgYnJlYWs7CkBA
IC0zMDU4LDcgKzMwNTgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUo
bV9ncmFwaCwgYmFzZVNldCkgPT0gQ29udHJhZGljdGlvbikKICAgICAgICAgICAgIG1fc3RhdGUu
c2V0SXNWYWxpZChmYWxzZSk7CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpID0gcmVz
dWx0OworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHJlc3VsdCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgICAgIApAQCAtMzEwOCw3ICszMTA4LDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBvYnNlcnZlVHJhbnNpdGlvbnMoY2xv
YmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgbmV3U2V0KSA9PSBDb250cmFkaWN0aW9uKQog
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2Rl
LT5jaGlsZDIoKSwgIHJlc3VsdGluZ1ZhbHVlKTsKICAgICAgICAgaWYgKCEhb3JpZ2luYWxWYWx1
ZSAmJiAhcmVzdWx0aW5nVmFsdWUpCiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFs
c2UpOwogICAgICAgICBicmVhazsKQEAgLTMzNTcsNyArMzM1Nyw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwotICAgICAgICBm
b3JOb2RlKG5vZGUpID0gZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24obm9kZSwgTm9kZUZsb3dQ
cm9qZWN0aW9uOjpTaGFkb3cpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBmb3JOb2RlKE5v
ZGVGbG93UHJvamVjdGlvbihub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdykpKTsKICAg
ICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBk
ZWNpZGVkLCBidXQgaXQgbWF5IGhhdmUgYmVjb21lIGEKICAgICAgICAgLy8gY29uc3RhbnQsIGlu
IHdoaWNoIGNhc2Ugd2UnZCBsaWtlIHRvIGtub3cuCiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUp
Lm1fdmFsdWUpCkBAIC0zMzY4LDcgKzMzNjgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIE5vZGVGbG93UHJvamVjdGlvbiBzaGFkb3cobm9kZS0+
cGhpKCksIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KTsKICAgICAgICAgaWYgKHNoYWRvdy5p
c1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAgbV9zdGF0ZS5jcmVhdGVWYWx1ZUZvck5vZGUo
c2hhZG93KTsKLSAgICAgICAgICAgIGZvck5vZGUoc2hhZG93KSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgc2V0Rm9yTm9kZShzaGFkb3csIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNDAwLDggKzM0
MDAsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgotICAgICAgICBm
b3JBbGxWYWx1ZXMoY2xvYmJlckxpbWl0LCBBYnN0cmFjdFZhbHVlOjpvYnNlcnZlSW52YWxpZGF0
aW9uUG9pbnRGb3IpOwogICAgICAgICBtX3N0YXRlLnNldFN0cnVjdHVyZUNsb2JiZXJTdGF0ZShT
dHJ1Y3R1cmVzQXJlV2F0Y2hlZCk7CisgICAgICAgIG1fc3RhdGUub2JzZXJ2ZUludmFsaWRhdGlv
blBvaW50KCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDUFVJbnRyaW5zaWM6IApAQCAt
MzUzNywxMCArMzUzNyw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyV29ybGQoCi0gICAgY29u
c3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVkIGNsb2JiZXJMaW1pdCkKK3ZvaWQgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJXb3JsZCgpCiB7Ci0gICAgY2xvYmJl
clN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKKyAgICBjbG9iYmVyU3RydWN0dXJlcygpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KQEAgLTM1NzIsMTYgKzM1NzEs
MTYgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAg
ICAgICAgIGZ1bmN0b3IoZm9yTm9kZShub2RlKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZm9y
IChzaXplX3QgaSA9IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0t
OykKLSAgICAgICAgZnVuY3RvcihtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50KGkpKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1iZXJPZkxvY2FscygpOyBp
LS07KQotICAgICAgICBmdW5jdG9yKG1fc3RhdGUudmFyaWFibGVzKCkubG9jYWwoaSkpOworICAg
IGZvciAoc2l6ZV90IGkgPSBtX3N0YXRlLm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspCisgICAg
ICAgIGZ1bmN0b3IobV9zdGF0ZS5hcmd1bWVudChpKSk7CisgICAgZm9yIChzaXplX3QgaSA9IG1f
c3RhdGUubnVtYmVyT2ZMb2NhbHMoKTsgaS0tOykKKyAgICAgICAgZnVuY3RvcihtX3N0YXRlLmxv
Y2FsKGkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lk
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0dXJl
cyh1bnNpZ25lZCBjbG9iYmVyTGltaXQpCit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0dXJlcygpCiB7Ci0gICAgZm9yQWxsVmFsdWVzKGNs
b2JiZXJMaW1pdCwgQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXNGb3IpOworICAgIG1f
c3RhdGUuY2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICBtX3N0YXRlLm1lcmdlQ2xvYmJlclN0YXRl
KEFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGU6OkNsb2JiZXJlZFN0cnVjdHVyZXMpOwog
ICAgIG1fc3RhdGUuc2V0U3RydWN0dXJlQ2xvYmJlclN0YXRlKFN0cnVjdHVyZXNBcmVDbG9iYmVy
ZWQpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
VmFsdWUuY3BwCShyZXZpc2lvbiAyMzEzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTc0LDYgKzU3NCwyMCBA
QCB2b2lkIEFic3RyYWN0VmFsdWU6OmVuc3VyZUNhbkluaXRpYWxpemVXCiB9CiAjZW5kaWYKIAor
dm9pZCBBYnN0cmFjdFZhbHVlOjpmYXN0Rm9yd2FyZFRvU2xvdyhBYnN0cmFjdFZhbHVlQ2xvYmJl
ckVwb2NoIG5ld0Vwb2NoKQoreworICAgIEFTU0VSVChuZXdFcG9jaCAhPSBtX2VmZmVjdEVwb2No
KTsKKyAgICAKKyAgICBpZiAobmV3RXBvY2guY2xvYmJlckVwb2NoKCkgIT0gbV9lZmZlY3RFcG9j
aC5jbG9iYmVyRXBvY2goKSkKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICBpZiAo
bmV3RXBvY2guc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkgPT0gU3RydWN0dXJlc0FyZVdhdGNoZWQp
CisgICAgICAgIG1fc3RydWN0dXJlLm9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpOworICAgIAor
ICAgIG1fZWZmZWN0RXBvY2ggPSBuZXdFcG9jaDsKKyAgICAKKyAgICBjaGVja0NvbnNpc3RlbmN5
KCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmgJKHJldmlzaW9uIDIzMTMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVO
QUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCisjaW5jbHVkZSAiREZH
QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oIgogI2luY2x1ZGUgIkRGR0ZpbHRyYXRpb25SZXN1
bHQuaCIKICNpbmNsdWRlICJERkdGcm96ZW5WYWx1ZS5oIgogI2luY2x1ZGUgIkRGR05vZGVGbGFn
cy5oIgpAQCAtMTAzLDIwICsxMDQsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIGNsb2Ji
ZXJTdHJ1Y3R1cmVzRm9yKEFic3RyYWN0VmFsdWUmIHZhbHVlKQorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBmYXN0Rm9yd2FyZFRvKEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2ggbmV3RXBvY2gpCiAg
ICAgewotICAgICAgICB2YWx1ZS5jbG9iYmVyU3RydWN0dXJlcygpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIG9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpCi0gICAgewotICAgICAgICBtX3N0cnVj
dHVyZS5vYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKTsKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBvYnNlcnZlSW52YWxpZGF0aW9uUG9p
bnRGb3IoQWJzdHJhY3RWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAgICB2YWx1ZS5vYnNlcnZl
SW52YWxpZGF0aW9uUG9pbnQoKTsKKyAgICAgICAgaWYgKG5ld0Vwb2NoICE9IG1fZWZmZWN0RXBv
Y2gpCisgICAgICAgICAgICBmYXN0Rm9yd2FyZFRvU2xvdyhuZXdFcG9jaCk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb24oUmVnaXN0ZXJlZFN0cnVjdHVyZSBmcm9tLCBS
ZWdpc3RlcmVkU3RydWN0dXJlIHRvKQpAQCAtMzk3LDYgKzM4OCwxMCBAQCBzdHJ1Y3QgQWJzdHJh
Y3RWYWx1ZSB7CiAgICAgLy8gZWZmZWN0IHRoYXQgbWFrZXMgbm9uLW9idmlvdXMgY2hhbmdlcyB0
byB0aGUgaGVhcC4KICAgICBBcnJheU1vZGVzIG1fYXJyYXlNb2RlczsKICAgICAKKyAgICAvLyBU
aGUgZXBvY2guCisgICAgLy8gRklYTUU6IEV4cGxhaW4gdGhpcy4gKE9PUFMhISkKKyAgICBBYnN0
cmFjdFZhbHVlQ2xvYmJlckVwb2NoIG1fZWZmZWN0RXBvY2g7CisgICAgCiAgICAgLy8gVGhpcyBp
cyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdGhhdCB0aGlzIHZh
bHVlIGNhbgogICAgIC8vIGhhdmUgbm93IG9yIGFueSB0aW1lIGluIHRoZSBmdXR1cmUsIHVubGVz
cyBpdCBpcyByZWFzc2lnbmVkLiBOb3RlIHRoYXQgdGhpcwogICAgIC8vIGltcGxpZXMgbm90aGlu
ZyBhYm91dCB0aGUgc3RydWN0dXJlLiBPZGRseSwgSlNWYWx1ZSgpIChpLmUuIHRoZSBlbXB0eSB2
YWx1ZSkKQEAgLTQ1NSw2ICs0NTAsOCBAQCBwcml2YXRlOgogICAgICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgZmFzdEZvcndhcmRUb1Nsb3coQWJzdHJhY3RW
YWx1ZUNsb2JiZXJFcG9jaCk7CisgICAgCiAgICAgdm9pZCBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwog
ICAgIHZvaWQgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9j
aC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
Cit2b2lkIEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2g6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoY2xvYmJlckVwb2NoKCksICI6Iiwgc3RydWN0dXJlQ2xv
YmJlclN0YXRlKCkpOworfQorCit9IH0gLy8gbmFtZXNwYWUgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2gu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdFcG9jaC5oIgorI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2ggewor
cHVibGljOgorICAgIEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2goKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2ggZmlyc3QoU3RydWN0dXJl
Q2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWVD
bG9iYmVyRXBvY2ggcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IEVwb2NoOjpmaXJz
dCgpLnRvVW5zaWduZWQoKSA8PCBlcG9jaFNoaWZ0OworICAgICAgICBzd2l0Y2ggKGNsb2JiZXJT
dGF0ZSkgeworICAgICAgICBjYXNlIFN0cnVjdHVyZXNBcmVXYXRjaGVkOgorICAgICAgICAgICAg
cmVzdWx0Lm1fdmFsdWUgfD0gd2F0Y2hlZEZsYWc7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9i
YmVyKCkKKyAgICB7CisgICAgICAgIG1fdmFsdWUgKz0gc3RlcDsKKyAgICAgICAgbV92YWx1ZSAm
PSB+d2F0Y2hlZEZsYWc7CisgICAgfQorICAgIAorICAgIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlv
blBvaW50KCkKKyAgICB7CisgICAgICAgIG1fdmFsdWUgfD0gd2F0Y2hlZEZsYWc7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2No
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1f
dmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBYnN0cmFjdFZh
bHVlQ2xvYmJlckVwb2NoJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIHN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1
ZSAmIHdhdGNoZWRGbGFnID8gU3RydWN0dXJlc0FyZVdhdGNoZWQgOiBTdHJ1Y3R1cmVzQXJlQ2xv
YmJlcmVkOworICAgIH0KKyAgICAKKyAgICBFcG9jaCBjbG9iYmVyRXBvY2goKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIEVwb2NoOjpmcm9tVW5zaWduZWQobV92YWx1ZSA+PiBlcG9jaFNo
aWZ0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc3RlcCA9IDI7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB3YXRjaGVkRmxhZyA9IDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBlcG9jaFNoaWZ0ID0gMTsKKyAgICAKKyAgICB1bnNpZ25lZCBt
X3ZhbHVlIHsgMCB9OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0
VGFpbEFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjMxMzM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDcgKzUyLDQ1IEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9k
ZShOb2RlRmxvd1Byb2plY3Rpb24pOwogICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZs
b3dQcm9qZWN0aW9uKTsKICAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkgeyBy
ZXR1cm4gZm9yTm9kZShlZGdlLm5vZGUoKSk7IH0KLSAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVl
PiYgdmFyaWFibGVzKCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsOyB9CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXRGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlLCBWYWx1ZVR5cGUmJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGZvck5vZGUobm9kZSkgPSBzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPih2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZT4KKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0Rm9yTm9kZShFZGdlIGVkZ2UsIFZhbHVlVHlwZSYmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgc2V0Rm9yTm9kZShlZGdlLm5vZGUoKSwgc3RkOjpmb3J3YXJkPFZh
bHVlVHlwZT4odmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNs
ZWFyRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKKyAgICB7CisgICAgICAgIGZvck5v
ZGUobm9kZSkuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNs
ZWFyRm9yTm9kZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBjbGVhckZvck5vZGUoZWRnZS5u
b2RlKCkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyB9
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52
YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJh
bmQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9w
ZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7IH0K
KyAgICBBYnN0cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxvY2st
PnZhbHVlc0F0VGFpbC5sb2NhbChpbmRleCk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBhcmd1bWVu
dChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChp
bmRleCk7IH0KKyAgICAKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkKKyAgICB7CisgICAg
ICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9i
c2VydmVJbnZhbGlkYXRpb25Qb2ludCgpCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRV9GT1Jf
UExBVEZPUk0oKTsKKyAgICB9CiAgICAgCiAgICAgQmFzaWNCbG9jayogYmxvY2soKSBjb25zdCB7
IHJldHVybiBtX2Jsb2NrOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Zsb3dNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Zsb3dNYXAuaAkocmV2aXNpb24gMjMxMzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGbG93TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsMjcgKzU1LDI3IEBAIHB1YmxpYzoKICAg
ICAKICAgICBHcmFwaCYgZ3JhcGgoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoOyB9CiAgICAgCi0g
ICAgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4KQorICAgIEFMV0FZU19JTkxJTkUgVCYgYXQodW5z
aWduZWQgbm9kZUluZGV4KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbWFwW25vZGVJbmRleF07
CiAgICAgfQogICAgIAotICAgIFQmIGF0KE5vZGUqIG5vZGUpCisgICAgQUxXQVlTX0lOTElORSBU
JiBhdChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGF0KG5vZGUtPmluZGV4KCkp
OwogICAgIH0KICAgICAKLSAgICBUJiBhdFNoYWRvdyh1bnNpZ25lZCBub2RlSW5kZXgpCisgICAg
QUxXQVlTX0lOTElORSBUJiBhdFNoYWRvdyh1bnNpZ25lZCBub2RlSW5kZXgpCiAgICAgewogICAg
ICAgICByZXR1cm4gbV9zaGFkb3dNYXBbbm9kZUluZGV4XTsKICAgICB9CiAgICAgCi0gICAgVCYg
YXRTaGFkb3coTm9kZSogbm9kZSkKKyAgICBBTFdBWVNfSU5MSU5FIFQmIGF0U2hhZG93KE5vZGUq
IG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gYXRTaGFkb3cobm9kZS0+aW5kZXgoKSk7CiAg
ICAgfQogICAgIAotICAgIFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0
aW9uOjpLaW5kIGtpbmQpCisgICAgQUxXQVlTX0lOTElORSBUJiBhdCh1bnNpZ25lZCBub2RlSW5k
ZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNo
IChraW5kKSB7CiAgICAgICAgIGNhc2UgTm9kZUZsb3dQcm9qZWN0aW9uOjpQcmltYXJ5OgpAQCAt
ODcsMjMgKzg3LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8VCo+
KG51bGxwdHIpOwogICAgIH0KICAgICAKLSAgICBUJiBhdChOb2RlKiBub2RlLCBOb2RlRmxvd1By
b2plY3Rpb246OktpbmQga2luZCkKKyAgICBBTFdBWVNfSU5MSU5FIFQmIGF0KE5vZGUqIG5vZGUs
IE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGF0
KG5vZGUtPmluZGV4KCksIGtpbmQpOwogICAgIH0KICAgICAKLSAgICBUJiBhdChOb2RlRmxvd1By
b2plY3Rpb24gcHJvamVjdGlvbikKKyAgICBBTFdBWVNfSU5MSU5FIFQmIGF0KE5vZGVGbG93UHJv
amVjdGlvbiBwcm9qZWN0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGF0KHByb2plY3Rpb24u
bm9kZSgpLCBwcm9qZWN0aW9uLmtpbmQoKSk7CiAgICAgfQogICAgIAotICAgIGNvbnN0IFQmIGF0
KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4o
dGhpcyktPmF0KG5vZGVJbmRleCk7IH0KLSAgICBjb25zdCBUJiBhdChOb2RlKiBub2RlKSBjb25z
dCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZSk7IH0KLSAgICBj
b25zdCBUJiBhdFNoYWRvdyh1bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdFNoYWRvdyhub2RlSW5kZXgpOyB9Ci0gICAgY29uc3Qg
VCYgYXRTaGFkb3coTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFw
Kj4odGhpcyktPmF0U2hhZG93KG5vZGUpOyB9Ci0gICAgY29uc3QgVCYgYXQodW5zaWduZWQgbm9k
ZUluZGV4LCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGVJbmRleCwga2luZCk7IH0KLSAgICBjb25z
dCBUJiBhdChOb2RlKiBub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3Qg
eyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGUsIGtpbmQpOyB9Ci0g
ICAgY29uc3QgVCYgYXQoTm9kZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChwcm9qZWN0aW9uKTsgfQorICAgIEFM
V0FZU19JTkxJTkUgY29uc3QgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVy
biBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZUluZGV4KTsgfQorICAgIEFMV0FZ
U19JTkxJTkUgY29uc3QgVCYgYXQoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2Fz
dDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGUpOyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBU
JiBhdFNoYWRvdyh1bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
Rmxvd01hcCo+KHRoaXMpLT5hdFNoYWRvdyhub2RlSW5kZXgpOyB9CisgICAgQUxXQVlTX0lOTElO
RSBjb25zdCBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PEZsb3dNYXAqPih0aGlzKS0+YXRTaGFkb3cobm9kZSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNv
bnN0IFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtp
bmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlSW5k
ZXgsIGtpbmQpOyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUJiBhdChOb2RlKiBub2RlLCBO
b2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxG
bG93TWFwKj4odGhpcyktPmF0KG5vZGUsIGtpbmQpOyB9CisgICAgQUxXQVlTX0lOTElORSBjb25z
dCBUJiBhdChOb2RlRmxvd1Byb2plY3Rpb24gcHJvamVjdGlvbikgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KHByb2plY3Rpb24pOyB9CiAgICAgCiBwcml2YXRl
OgogICAgIEdyYXBoJiBtX2dyYXBoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDIzMTMzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsMjAgKzYwLDIyIEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0
U3RhdGU6OmJlZ2luQmFzaWNCbG8KICAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCkgPT0gYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJl
ck9mTG9jYWxzKCkpOwogCiAgICAgbV9hYnN0cmFjdFZhbHVlcy5yZXNpemUoKTsKKyAgICBtX2Vm
ZmVjdEVwb2NoID0gQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6Zmlyc3QoYmFzaWNCbG9jay0+
Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkKTsKICAgICAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJhc2ljQmxvY2stPnNpemUoKTsgaSsrKSB7CiAgICAgICAgIE5vZGVGbG93UHJv
amVjdGlvbjo6Zm9yRWFjaCgKICAgICAgICAgICAgIGJhc2ljQmxvY2stPmF0KGkpLCBbJl0gKE5v
ZGVGbG93UHJvamVjdGlvbiBub2RlUHJvamVjdGlvbikgewotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZVByb2plY3Rpb24pLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgY2xlYXJGb3JOb2Rl
KG5vZGVQcm9qZWN0aW9uKTsKICAgICAgICAgICAgIH0pOwogICAgIH0KIAotICAgIG1fdmFyaWFi
bGVzID0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOworICAgIGZvciAoc2l6ZV90IGkgPSBtX3Zh
cmlhYmxlcy5zaXplKCk7IGktLTspCisgICAgICAgIHZhcmlhYmxlQXQoaSkgPSBiYXNpY0Jsb2Nr
LT52YWx1ZXNBdEhlYWRbaV07CiAgICAgCiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkg
ewogICAgICAgICBmb3IgKE5vZGVBYnN0cmFjdFZhbHVlUGFpciYgZW50cnkgOiBiYXNpY0Jsb2Nr
LT5zc2EtPnZhbHVlc0F0SGVhZCkgewogICAgICAgICAgICAgaWYgKGVudHJ5Lm5vZGUuaXNTdGls
bFZhbGlkKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShlbnRyeS5ub2RlKSA9IGVudHJ5LnZh
bHVlOworICAgICAgICAgICAgICAgIHNldEZvck5vZGUoZW50cnkubm9kZSwgZW50cnkudmFsdWUp
OwogICAgICAgICB9CiAgICAgfQogICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBm
YWxzZTsKQEAgLTIwMSwxOSArMjAzLDE5IEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmVu
ZEJhc2ljQmxvY2sKICAgICBjYXNlIFRocmVhZGVkQ1BTOiB7CiAgICAgICAgIGZvciAoc2l6ZV90
IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9m
QXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRl
c3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7Ci0gICAg
ICAgICAgICBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVu
dChhcmd1bWVudCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsK
KyAgICAgICAgICAgIG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIGFyZ3VtZW50KGFyZ3Vt
ZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOwogICAgICAg
ICB9CiAKICAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewogICAgICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2Fs
KTsKLSAgICAgICAgICAgIG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFibGVz
LmxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAg
ICAgICAgICAgbWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbG9jYWwobG9jYWwpLCBibG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgfQogCiAgICAgY2FzZSBTU0E6IHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQotICAgICAgICAgICAgYmxvY2st
PnZhbHVlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7CisgICAgICAgICAgICBibG9j
ay0+dmFsdWVzQXRUYWlsW2ldLm1lcmdlKHZhcmlhYmxlQXQoaSkpOwogCiAgICAgICAgIGZvciAo
Tm9kZUFic3RyYWN0VmFsdWVQYWlyJiB2YWx1ZUF0VGFpbCA6IGJsb2NrLT5zc2EtPnZhbHVlc0F0
VGFpbCkgewogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWVBdE5vZGUgPSBmb3JOb2Rl
KHZhbHVlQXRUYWlsLm5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
blBsYWNlQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjMxMzM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NywyMSArNDcsNDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY3JlYXRl
VmFsdWVGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbikgeyB9CiAgICAgCi0gICAgQWJzdHJhY3RW
YWx1ZSYgZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKKyAgICBBTFdBWVNfSU5MSU5F
IEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gbV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKTsKKyAgICAgICAgcmV0dXJu
IGZhc3RGb3J3YXJkKG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSkpOwogICAgIH0KICAgICAKLSAg
ICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkKKyAgICBBTFdBWVNfSU5MSU5FIEFi
c3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZv
ck5vZGUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKLSAgICBPcGVyYW5kczxBYnN0cmFjdFZh
bHVlPiYgdmFyaWFibGVzKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHNldEZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUsIFZh
bHVlVHlwZSYmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzOworICAg
ICAgICBtX2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUpID0gc3RkOjpmb3J3YXJkPFZhbHVlVHlwZT4o
dmFsdWUpOwogICAgIH0KICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZvck5vZGUoRWRnZSBlZGdlLCBWYWx1ZVR5cGUmJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEZvck5vZGUoZWRnZS5ub2RlKCksIHN0ZDo6Zm9yd2Fy
ZDxWYWx1ZVR5cGU+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBjbGVhckZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAgeworICAgICAgICBt
X2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUpLmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgY2xl
YXJGb3JOb2RlKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGVzLm51bWJlck9mQXJndW1lbnRzKCk7
IH0KKyAgICB1bnNpZ2VuZCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFi
bGVzLm51bWJlck9mTG9jYWxzKCk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBv
cGVyYW5kKSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlcy5vcGVyYW5kKG9wZXJhbmQp
KTsgfQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
IHsgcmV0dXJuIGZhc3RGb3J3YXJkKG1fdmFyaWFibGVzLm9wZXJhbmQob3BlcmFuZCkpOyB9Cisg
ICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KSB7IHJldHVybiBmYXN0Rm9yd2Fy
ZChtX3ZhcmlhYmxlcy5sb2NhbChpbmRleCkpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgYXJndW1l
bnQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlcy5hcmd1bWVu
dChpbmRleCkpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFyaWFibGVBdChzaXplX3QgaW5kZXgp
IHsgcmV0dXJuIGZhc3RGb3J3YXJkKG1fdmFyaWFibGVzW2luZGV4XSk7IH0KKyAgICAKICAgICAv
LyBDYWxsIHRoaXMgYmVmb3JlIGJlZ2lubmluZyBDRkEgdG8gaW5pdGlhbGl6ZSB0aGUgYWJzdHJh
Y3QgdmFsdWVzIG9mCiAgICAgLy8gYXJndW1lbnRzLCBhbmQgdG8gaW5kaWNhdGUgd2hpY2ggYmxv
Y2tzIHNob3VsZCBiZSBsaXN0ZWQgZm9yIENGQQogICAgIC8vIGV4ZWN1dGlvbi4KQEAgLTExOSw2
ICsxNDQsMTAgQEAgcHVibGljOgogICAgIC8vIE1lcmdlVG9TdWNjZXNzb3JzLgogICAgIGJvb2wg
bWVyZ2VUb1N1Y2Nlc3NvcnMoQmFzaWNCbG9jayopOwogICAgIAorICAgIHZvaWQgY2xvYmJlclN0
cnVjdHVyZXMoKSB7IG1fZWZmZWN0RXBvY2guY2xvYmJlcigpOyB9CisgICAgCisgICAgdm9pZCBv
YnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKSB7IG1fZWZmZWN0RXBvY2gub2JzZXJ2ZUludmFsaWRh
dGlvblBvaW50KCk7IH0KKyAgICAKICAgICAvLyBNZXRob2RzIGludGVuZGVkIHRvIGJlIGNhbGxl
ZCBmcm9tIEFic3RyYWN0SW50ZXJwcmV0ZXIuCiAgICAgdm9pZCBzZXRDbG9iYmVyU3RhdGUoQWJz
dHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZSBzdGF0ZSkgeyBtX2Nsb2JiZXJTdGF0ZSA9IHN0
YXRlOyB9CiAgICAgdm9pZCBtZXJnZUNsb2JiZXJTdGF0ZShBYnN0cmFjdEludGVycHJldGVyQ2xv
YmJlclN0YXRlIHN0YXRlKSB7IG1fY2xvYmJlclN0YXRlID0gbWVyZ2VDbG9iYmVyU3RhdGVzKG1f
Y2xvYmJlclN0YXRlLCBzdGF0ZSk7IH0KQEAgLTEzOSw2ICsxNjgsMTIgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKKyAgICBBYnN0cmFjdFZhbHVlJiBmYXN0Rm9yd2FyZChBYnN0cmFjdFZh
bHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHZhbHVlLmZhc3RGb3J3YXJkVG8obV9lZmZlY3RF
cG9jaCk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBtZXJn
ZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBp
blZhcmlhYmxlLCBOb2RlKik7CiAKICAgICBzdGF0aWMgYm9vbCBtZXJnZVZhcmlhYmxlQmV0d2Vl
bkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNl
LCBOb2RlKiBkZXN0aW5hdGlvbk5vZGUsIE5vZGUqIHNvdXJjZU5vZGUpOwpAQCAtMTU0LDYgKzE4
OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzVmFsaWQ7CiAgICAgQWJzdHJhY3RJbnRlcnBy
ZXRlckNsb2JiZXJTdGF0ZSBtX2Nsb2JiZXJTdGF0ZTsKICAgICBTdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUgbV9zdHJ1Y3R1cmVDbG9iYmVyU3RhdGU7CisgICAgQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9j
aCBtX2VmZmVjdEVwb2NoOwogICAgIAogICAgIEJyYW5jaERpcmVjdGlvbiBtX2JyYW5jaERpcmVj
dGlvbjsgLy8gVGhpcyBpcyBvbmx5IHNldCBmb3IgYmxvY2tzIHRoYXQgZW5kIGluIEJyYW5jaCBh
bmQgdGhhdCBleGVjdXRlIHRvIGNvbXBsZXRpb24gKGkuZS4gbV9pc1ZhbGlkID09IHRydWUpLgog
fTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339623</attachid>
            <date>2018-05-04 18:53:49 -0700</date>
            <delta_ts>2018-05-05 11:15:07 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>61564</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIzMTMzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYg
KzI3NCw3IEBAIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCiBkZmcvREZHQWJzdHJhY3RIZWFw
LmNwcAogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUuY3BwCiBkZmcvREZH
QWJzdHJhY3RWYWx1ZS5jcHAKK2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmNwcAog
ZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAKIGRmZy9E
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCiBkZmcvREZHQXJndW1lbnRzRWxpbWlu
YXRpb25QaGFzZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyMzEzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzE5LDYgKzMxOSw3IEBACiAJ
CTBGNEQ4Qzc4MUZDQTNDRkEwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RDhDNzcxRkNB
M0NGMzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2
QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZp
b3VzU3BpbGxzLmggKi87IH07CiAJCTBGNEYxMUU4MjA5QkNEQUIwMDcwOTY1NCAvKiBDb21waWxl
clRpbWluZ1Njb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRGMTFFNjIwOUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5oICov
OyB9OworCQkwRjRGMTFFQjIwOUQ0MjY2MDA3MDk2NTQgLyogREZHQWJzdHJhY3RWYWx1ZUNsb2Ji
ZXJFcG9jaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0RjExRUEyMDlENDI2MzAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2gu
aCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY0RjgyODgxRTJGRkRFMDAwNzUx
ODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEY4Mjg2MUUyRkZEREIwMDc1
MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0RjgyOEMxRTMxQjk3
NjAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4QTFFMzFCOTcx
MDA3NTE4NEMgLyogU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsK
QEAgLTIzMTAsNiArMjMxMSw4IEBACiAJCTBGNERFMUQwMUM0RDc2NEIwMDRENkMxMSAvKiBCM09y
aWdpbkR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmln
aW5EdW1wLmNwcDsgcGF0aCA9IGIzL0IzT3JpZ2luRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNEYxMUU2MjA5QkNEQTEwMDcwOTY1NCAvKiBDb21waWxlclRpbWluZ1Nj
b3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBpbGVyVGltaW5nU2Nv
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjExRTcyMDlCQ0RBMTAwNzA5
NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29tcGlsZXJUaW1pbmdTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNEYxMUU5MjA5RDQyNjMwMDcwOTY1NCAvKiBERkdBYnN0cmFjdFZhbHVlQ2xv
YmJlckVwb2NoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fi
c3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWVD
bG9iYmVyRXBvY2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRGMTFFQTIw
OUQ0MjYzMDA3MDk2NTQgLyogREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmg7
IHBhdGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhl
Y3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERG
R1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7
IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjgyODUxRTJGRkREQjAwNzUxODRDIC8qIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTE0LDYgKzcxMTcsOCBAQAog
CQkJCUE3MDREOEZGMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZh
bHVlLmNwcCAqLywKIAkJCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RW
YWx1ZS5oICovLAorCQkJCTBGNEYxMUU5MjA5RDQyNjMwMDcwOTY1NCAvKiBERkdBYnN0cmFjdFZh
bHVlQ2xvYmJlckVwb2NoLmNwcCAqLywKKwkJCQkwRjRGMTFFQTIwOUQ0MjYzMDA3MDk2NTQgLyog
REZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oICovLAogCQkJCTBGRDNFM0ZGMUI2MThBQUYw
MEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3Bw
ICovLAogCQkJCTBGRDNFNDAwMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCAqLywKIAkJCQkwRjE4RDNDRDFCNTVBNkUwMDAyQzVD
OUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLywKQEAgLTkwNDAsNiAr
OTA0NSw3IEBACiAJCQkJQTUxM0U1QzIxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGODE3QjZCNUFCMDBB
N0FFM0YgLyogSlNJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGOTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRGMTFF
QjIwOUQ0MjY2MDA3MDk2NTQgLyogREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjY2RjcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzZDNTE3NjExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDgxMUI4NDI5QTQwMDQxMzg1NiAvKiBK
U0ludGVybmFsUHJvbWlzZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMjMx
MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MSwyMSArNDEsMzggQEAgcHVibGljOgogICAgIEFic3Ry
YWN0SW50ZXJwcmV0ZXIoR3JhcGgmLCBBYnN0cmFjdFN0YXRlVHlwZSYpOwogICAgIH5BYnN0cmFj
dEludGVycHJldGVyKCk7CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlRmxv
d1Byb2plY3Rpb24gbm9kZSkKKyAgICBBTFdBWVNfSU5MSU5FIEFic3RyYWN0VmFsdWUmIGZvck5v
ZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zdGF0
ZS5mb3JOb2RlKG5vZGUpOwogICAgIH0KICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2Rl
KEVkZ2UgZWRnZSkKKyAgICBBTFdBWVNfSU5MSU5FIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRn
ZSBlZGdlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2RlKCkpOwogICAg
IH0KICAgICAKLSAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVzKCkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZv
ck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUsIFZhbHVlVHlwZSYmIHZhbHVlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fc3RhdGUudmFyaWFibGVzKCk7CisgICAgICAgIG1fc3RhdGUuc2V0
Rm9yTm9kZShub2RlLCBzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPih2YWx1ZSkpOwogICAgIH0KICAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+CisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldEZvck5vZGUoRWRnZSBlZGdlLCBWYWx1ZVR5cGUmJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHNldEZvck5vZGUoZWRnZS5ub2RlKCksIHN0ZDo6Zm9yd2FyZDxWYWx1ZVR5cGU+KHZhbHVl
KSk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoTm9k
ZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAgeworICAgICAgICBtX3N0YXRlLmNsZWFyRm9yTm9k
ZShub2RlKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyRm9yTm9k
ZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBjbGVhckZvck5vZGUoZWRnZS5ub2RlKCkpOwor
ICAgIH0KKwogICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2soTm9kZSogbm9kZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZXNQYXNzZWRUaHJvdWdoKQogICAgIHsKICAgICAgICAgcmV0dXJuICFmb3JOb2RlKG5v
ZGUpLmlzVHlwZSh0eXBlc1Bhc3NlZFRocm91Z2gpOwpAQCAtMTQ5LDEzICsxNjYsMTMgQEAgcHVi
bGljOgogICAgIFBoaUNoaWxkcmVuKiBwaGlDaGlsZHJlbigpIHsgcmV0dXJuIG1fcGhpQ2hpbGRy
ZW4uZ2V0KCk7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3Qg
Q29kZU9yaWdpbiYsIHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgdm9pZCBjbG9iYmVyV29y
bGQoKTsKICAgICB2b2lkIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yQWxsVmFsdWVzKHVuc2lnbmVkIGluZGV4
SW5CbG9jaywgRnVuY3RvciYpOwogICAgIAotICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXModW5z
aWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CiAgICAg
dm9pZCBkaWRGb2xkQ2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICAKICAgICB2b2lkIG9ic2VydmVU
cmFuc2l0aW9uKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgUmVnaXN0ZXJlZFN0cnVjdHVyZSBmcm9t
LCBSZWdpc3RlcmVkU3RydWN0dXJlIHRvKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlz
aW9uIDIzMTMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAogICAgIGNhc2UgSWRlbnRpdHlX
aXRoUHJvZmlsZToKICAgICBjYXNlIElkZW50aXR5OiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUpLnZhbHVlKCkp
CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICBi
cmVhazsKQEAgLTI0OSwzMyArMjQ5LDMzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUudmFyaWFi
bGVzKCkub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkub2Zmc2V0KCkpOworICAg
ICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKHZhcmlhYmxlQWNjZXNz
RGF0YS0+bG9jYWwoKS5vZmZzZXQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9j
YWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vzc0RhdGEtPmZs
dXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQogICAgICAgICAgICAg
bV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKSA9
IHZhbHVlOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZhbHVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgIFN0YWNrQWNj
ZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFj
dFZhbHVlIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5sb2Nh
bCk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUg
Y2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUo
dHlwZUZpbHRlckZvcihkYXRhLT5mb3JtYXQpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgp
KQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZhbHVlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0g
ICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCku
b3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+bG9jYWwpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCkBAIC0yOTYsMTQgKzI5NiwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBh
cmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudCBtZWFucyB0aGF0IHNvbWVvbmUgc2V0
CiAgICAgICAgIC8vIHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFuZCBjdXJyZW50
bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCiAgICAgICAgIC8vIG5vbi1jbGVhciB2
YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEluaXRp
YWxpemVFbnRyeXBvaW50QXJndW1lbnRzOiB7CiAgICAgICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJ
bmRleCA9IG5vZGUtPmVudHJ5cG9pbnRJbmRleCgpOwogICAgICAgICBjb25zdCBWZWN0b3I8Rmx1
c2hGb3JtYXQ+JiBhcmd1bWVudEZvcm1hdHMgPSBtX2dyYXBoLm1fYXJndW1lbnRGb3JtYXRzW2Vu
dHJ5cG9pbnRJbmRleF07CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1
bWVudCA8IGFyZ3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrYXJndW1lbnQpIHsKLSAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChhcmd1
bWVudCk7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuYXJndW1l
bnQoYXJndW1lbnQpOwogICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudEZvcm1hdHNbYXJndW1l
bnRdKSB7CiAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKICAgICAgICAgICAgICAgICB2
YWx1ZS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwpAQCAtMzMyLDcgKzMzMiw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzA3MQogICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBj
bG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZvcndhcmRW
YXJhcmdzOgogICAgICAgICAgICAgYnJlYWs7CkBAIC0zNDEsOSArMzQxLDkgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NE
YXRhKCk7Ci0gICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5jb3VudCku
c2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmNv
dW50KS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBk
YXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9w
ZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOworICAgICAgICAg
ICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3Ao
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC0zNTQsNyArMzU0LDcg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQml0
TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDogewogICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09
IFVudHlwZWRVc2UpIHsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjSW50MzJPbmx5KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC01NTUsNyArNTU1LDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIFZhbHVl
QWRkOiB7CiAgICAgICAgIEFTU0VSVChub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gVW50eXBlZFVz
ZSk7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyB8IFNwZWNCeXRlY29kZU51bWJlcik7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTYxMSw3ICs2MTEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgQXRvbWljc0lzTG9ja0ZyZWU6
IHsKICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBJbnQzMlVzZSkKLSAg
ICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1p
dCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNCb29sSW50MzIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC02MzYsNyAr
NjM2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICBjYXNlIEtub3duSW50MzJVc2U6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2Ji
ZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5
KTsKQEAgLTY3NCwxMiArNjc0LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAg
ICAgICAgICAgICBpZiAobnVtYmVyT2ZSZW1vdmVkQ2hpbGRyZW4gPT0gbnVtYmVyT2ZDaGlsZHJl
bikgewogICAgICAgICAgICAgICAgIC8vIFByb3BhZ2F0ZSB0aGUgbGFzdCBjaGlsZC4gVGhpcyBp
cyB0aGUgd2F5IHRha2VuIGluIHRoZSBjb25zdGFudCBmb2xkaW5nIHBoYXNlLgotICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkcmVuLmNoaWxkKG51bWJl
ck9mQ2hpbGRyZW4gLSAxKSk7CisgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBmb3JO
b2RlKG5vZGUtPmNoaWxkcmVuLmNoaWxkKG51bWJlck9mQ2hpbGRyZW4gLSAxKSkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKChudW1iZXJP
ZlJlbW92ZWRDaGlsZHJlbiArIDEpID09IG51bWJlck9mQ2hpbGRyZW4pIHsKICAgICAgICAgICAg
ICAgICBBU1NFUlQobm9uRW1wdHlJbmRleCk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
KSA9IGZvck5vZGUobm9kZS0+Y2hpbGRyZW4uY2hpbGQobm9uRW1wdHlJbmRleC52YWx1ZSgpKSk7
CisgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkcmVu
LmNoaWxkKG5vbkVtcHR5SW5kZXgudmFsdWUoKSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzI1LDcgKzcyNSw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwor
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUobV9ncmFwaCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBkZWZhdWx0OgpAQCAtNzgzLDcgKzc4Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKTsKLSAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTgzNCw3ICs4MzQsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSwgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZCgpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNCeXRl
Y29kZU51bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTg3
Myw3ICs4NzMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNCeXRlY29kZU51bWJl
cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTk5OCw3ICs5OTgs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UsIG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSk7Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Z1bGxOdW1iZXIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEwNzgsNyArMTA3OCw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUodHlwZU9mRG91YmxlUm91bmRpbmcoZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpOwotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNGdWxsTnVtYmVyKTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKQEAgLTE2NjgsNyArMTY2OCw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc0Ns
b2JiZXJpbmcpCi0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTE3NjIsNyArMTc2Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CkBAIC0xNzg2LDcgKzE3ODYsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBBdG9taWNz
U3ViOgogICAgIGNhc2UgQXRvbWljc1hvcjogewogICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBH
ZXRCeVZhbCkKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgc3dp
dGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U2Vs
ZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKQEAg
LTE4MDYsNyArMTgwNiw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6Okdl
bmVyaWM6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBj
bG9iYmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOgpAQCAtMTgyMSw3ICsxODIxLDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIC8vIGltcGxpZXMgYW4g
aW4tYm91bmRzIGFjY2VzcykuIE5vbmUgb2YgdGhpcyBmZWVscyBsaWtlIGl0J3Mgd29ydGggaXQs
CiAgICAgICAgICAgICAgICAgLy8gc28gd2UncmUgZ29pbmcgd2l0aCBUT1AgZm9yIG5vdy4gVGhl
IHNhbWUgdGhpbmcgYXBwbGllcyB0bwogICAgICAgICAgICAgICAgIC8vIGNsb2JiZXJpbmcgdGhl
IHdvcmxkLgotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50
aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAg
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV92bS5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpOwpAQCAtMTgyOSwxOSArMTgyOSwxOSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFy
Z3VtZW50czoKICAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAg
ICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKLSAgICAgICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAg
ICAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5t
YWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyOgogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkg
ewotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNs
b2JiZXJMaW1pdCk7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAg
ICAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkuaXNTYW5lQ2hhaW4oKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0J5dGVjb2RlRG91YmxlKTsKQEAgLTE4NTIsNyArMTg1Miw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAg
ICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKLSAgICAgICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAg
ICAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5t
YWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDhBcnJheToKQEAgLTE5MDIsMjQgKzE5MDIsMjQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsK
KyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlz
T3V0T2ZCb3VuZHMoKSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsK
KyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0
b3JhZ2U6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygp
KQotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNs
b2JiZXJMaW1pdCk7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQotICAgICAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTkyOCw3ICsxOTI4LDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAg
ICAgIAogICAgIGNhc2UgQXJyYXlQdXNoOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCeXRlY29kZU51bWJlcik7CiAgICAgICAg
IGJyZWFrOwogCkBAIC0xOTUyLDcgKzE5NTIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcnJheVBvcDoK
LSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0
KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhl
YXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtMTk3MiwxNCArMTk3MiwxNCBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRJbmRleENoZWNrZWQuc2FmZUdldChhcmd1bWVudEluZGV4KSAhPSBDaGVja2Vk
U3RhdGU6OkRpZE92ZXJmbG93KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRJbmRleCA8IGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3Vt
ZW50SW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3N0YXRlLm9wZXJhbmQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRJ
bmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBtX3N0
YXRlLnZhcmlhYmxlcygpLm51bWJlck9mQXJndW1lbnRzKCkgLSAxKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChh
cmd1bWVudEluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4
IDwgbV9zdGF0ZS5udW1iZXJPZkFyZ3VtZW50cygpIC0gMSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3N0YXRlLmFyZ3VtZW50KGFyZ3VtZW50SW5kZXggKyAx
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KQEAgLTE5OTMsNyArMTk5Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMSArIG5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7IGkg
PCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKICAg
ICAgICAgICAgICAgICByZXN1bHQubWVyZ2UoCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUu
dmFyaWFibGVzKCkub3BlcmFuZCgKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KAogICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkg
KyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKQEAgLTIwMDMsNyArMjAwMyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUoKSkKICAgICAgICAgICAg
ICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpID0gcmVzdWx0OworICAgICAgICAgICAgc2V0Rm9yTm9kZShu
b2RlLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0yMDE2LDcgKzIwMTYsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFJlZ0V4cEV4ZWMpIHsKICAgICAgICAgICAg
IC8vIEV2ZW4gaWYgd2UndmUgcHJvdmVuIGtub3duIGlucHV0IHR5cGVzIGFzIFJlZ0V4cE9iamVj
dCBhbmQgU3RyaW5nLAogICAgICAgICAgICAgLy8gYWNjZXNzaW5nIGxhc3RJbmRleCBpcyBlZmZl
Y3RmdWwgaWYgaXQncyBhIGdsb2JhbCByZWdleHAuCi0gICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJl
cldvcmxkKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoSlNWYWx1ZSBnbG9iYWxPYmplY3RW
YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdmFsdWUpIHsKQEAgLTIwMzgsNyArMjAz
OCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNl
IFJlZ0V4cFRlc3Q6CiAgICAgICAgIC8vIEV2ZW4gaWYgd2UndmUgcHJvdmVuIGtub3duIGlucHV0
IHR5cGVzIGFzIFJlZ0V4cE9iamVjdCBhbmQgU3RyaW5nLAogICAgICAgICAvLyBhY2Nlc3Npbmcg
bGFzdEluZGV4IGlzIGVmZmVjdGZ1bCBpZiBpdCdzIGEgZ2xvYmFsIHJlZ2V4cC4KLSAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9v
bGVhbik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0yMDYwLDcgKzIwNjAsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAmJiBub2RlLT5jaGls
ZDMoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGRvZXNu
J3QgY2xvYmJlciB0aGUgd29ybGQuIEl0IGp1c3QgcmVhZHMgYW5kIHdyaXRlcyByZWdleHAgc3Rh
dGUuCiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX3ZtLnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0yMTA1LDcgKzIxMDUsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbDoK
ICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFy
Z3M6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBtX3N0YXRlLnNldElzVmFs
aWQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0yMTIyLDExICsyMTIyLDEx
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYg
KCEoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgfihTcGVjRnVsbE51bWJlciB8IFNw
ZWNCb29sZWFuIHwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wgfCBTcGVjQmlnSW50KSkpIHsKICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBk
aWRGb2xkQ2xvYmJlcldvcmxkKCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGlt
aXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgCiAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjSGVhcFRvcCAmIH5TcGVjT2JqZWN0KTsKICAgICAg
ICAgYnJlYWs7CkBAIC0yMTQ1LDExICsyMTQ1LDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYgKCEoZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlICYgflNwZWNCeXRlY29kZU51bWJlcikpIHsKICAgICAgICAgICAgIG1fc3RhdGUuc2V0
Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7
CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yMTcyLDcgKzIxNzIsNyBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMTkz
LDcgKzIxOTMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1f
Z3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9
CkBAIC0yMjM4LDcgKzIyMzgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IGlmICghbV9ncmFwaC5jYW5Eb0Zhc3RTcHJlYWQobm9kZSwgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC0yMjYzLDcgKzIyNjMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjMzMiw3ICsyMzMyLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsK
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNGaW5hbE9iamVjdCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTIzNTYsNyArMjM1Niw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFRvT2JqZWN0KQotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgp
OwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY09iamVjdCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI2MDUsMTQgKzI2MDUsMTQgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
LSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0
KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhl
YXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbFdpdGhU
aGlzOgogICAgIGNhc2UgR2V0QnlJZFdpdGhUaGlzOgotICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQo
KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIApAQCAtMjYzNiw3ICsyNjM2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgRGVsZXRlQnlWYWw6IHsKICAgICAgICAgLy8g
RklYTUU6IFRoaXMgY291bGQgZGVjaWRlIGlmIHRoZSBkZWxldGUgd2lsbCBiZSBzdWNjZXNzZnVs
IGJhc2VkIG9uIHRoZSBzZXQgb2Ygc3RydWN0dXJlcyB0aGF0CiAgICAgICAgIC8vIHdlIGdldCBm
cm9tIG91ciBiYXNlIHZhbHVlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU2NjExCi0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNs
b2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNzQ3
LDcgKzI3NDcsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgIC8vIG5vYm9keSB3b3VsZCBjdXJyZW50bHkgYmVuZWZpdCBmcm9tIGhhdmluZyB0aGF0
IGluZm9ybWF0aW9uLiBCdXQgaXQncyBhIGJ1ZyBub25ldGhlbGVzcy4KICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSkKICAgICAgICAgICAgIGRp
ZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7
IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIGNsZWFyRm9yTm9kZShu
b2RlKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDaGVja1N1YkNsYXNzOiB7CiAgICAgICAgIEpTVmFsdWUgY29uc3RhbnQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwpAQCAtMjc3MSw3ICsyNzcxLDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBDYWxsRE9NR2V0dGVy
RGF0YSogY2FsbERPTUdldHRlckRhdGEgPSBub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpOwogICAg
ICAgICBET01KSVQ6OkNhbGxET01HZXR0ZXJTbmlwcGV0KiBzbmlwcGV0ID0gY2FsbERPTUdldHRl
ckRhdGEtPnNuaXBwZXQ7CiAgICAgICAgIGlmICghc25pcHBldCB8fCBzbmlwcGV0LT5lZmZlY3Qu
d3JpdGVzKQotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
Y2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBpZiAo
Y2FsbERPTUdldHRlckRhdGEtPmRvbUpJVCkKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShtX2dyYXBoLCBjYWxsRE9NR2V0dGVyRGF0YS0+ZG9tSklULT5yZXN1bHRUeXBlKCkpOwog
ICAgICAgICBlbHNlCkBAIC0yNzgxLDcgKzI3ODEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBDYWxsRE9NOiB7CiAgICAgICAgIGNvbnN0IERP
TUpJVDo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBub2RlLT5zaWduYXR1cmUoKTsKICAgICAgICAg
aWYgKHNpZ25hdHVyZS0+ZWZmZWN0LndyaXRlcykKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVy
V29ybGQoKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIHNpZ25hdHVy
ZS0+cmVzdWx0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjg1MSw3ICsyODUxLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNp
b24oKSA9PSBBcnJheTo6Q29udmVydCk7Ci0gICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2Ji
ZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CiAgICAgICAgIGZpbHRlckFy
cmF5TW9kZXMobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0
UGFzc0ZpbHRlcmluZygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjg1OSw3ICsyODU5
LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBp
ZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihSZWdpc3RlcmVkU3RydWN0dXJlU2V0KG5v
ZGUtPnN0cnVjdHVyZSgpKSkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRz
KHRydWUpOwotICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOworICAgICAg
ICBjbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICAKICAgICAgICAgLy8gV2UgaGF2ZSBhIGJ1
bmNoIG9mIG9wdGlvbnMgb2YgaG93IHRvIGV4cHJlc3MgdGhlIGFic3RyYWN0IHNldCBhdCB0aGlz
IHBvaW50LiBMZXQgc2V0IFMKICAgICAgICAgLy8gYmUgdGhlIHNldCBvZiBzdHJ1Y3R1cmVzIHRo
YXQgdGhlIHZhbHVlIGhhZCBiZWZvcmUgY2xvYmJlcmluZyBhbmQgYXNzdW1lIHRoYXQgYWxsIG9m
CkBAIC0yODg4LDcgKzI4ODgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCdzIHRlbXB0aW5nIHRvIHNpbXBseSBzYXkg
dGhhdCB0aGUgcmVzdWx0aW5nIHZhbHVlIGlzIEJPVFRPTSBiZWNhdXNlIG9mCiAgICAgICAgIC8v
IHRoZSBjb250cmFkaWN0aW9uLiBUaGF0IHdvdWxkIGJlIHdyb25nLCBzaW5jZSB3ZSBoYXZlbid0
IGhpdCBhbiBpbnZhbGlkYXRpb24gcG9pbnQsCiAgICAgICAgIC8vIHlldC4KLSAgICAgICAgdmFs
dWUuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewpAQCAtMjg5
NiwxMSArMjg5NiwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3ZhbHVlLCBub2RlLT5hcnJh
eU1vZGUoKSk7CiAgICAgICAgIGlmICh2aWV3KQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3Vu
ZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOworICAgICAg
ICBjbGVhckZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENv
bnN0YW50U3RvcmFnZVBvaW50ZXI6IHsKLSAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOwor
ICAgICAgICBjbGVhckZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOyAKICAgICB9CiAgICAg
ICAgIApAQCAtMjk1OCw3ICsyOTU4LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUobV9ncmFwaCwgU3BlY09iamVjdCB8IFNwZWNPdGhlcik7CkBAIC0yOTg3LDcgKzI5ODcs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlm
ICh2YWx1ZS5pc0NsZWFyKCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2Up
OwogCi0gICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgc2V0Rm9yTm9kZShu
b2RlLCB2YWx1ZSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlKQogICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgYnJlYWs7CkBAIC0zMDU4LDcg
KzMwNTgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwg
YmFzZVNldCkgPT0gQ29udHJhZGljdGlvbikKICAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxp
ZChmYWxzZSk7CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpID0gcmVzdWx0OworICAg
ICAgICBzZXRGb3JOb2RlKG5vZGUsIHJlc3VsdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgICAgIApAQCAtMzEwOCw3ICszMTA4LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICBvYnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0
LCB0cmFuc2l0aW9ucyk7CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFu
Z2VTdHJ1Y3R1cmUobV9ncmFwaCwgbmV3U2V0KSA9PSBDb250cmFkaWN0aW9uKQogICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLT5jaGlsZDIo
KSwgIHJlc3VsdGluZ1ZhbHVlKTsKICAgICAgICAgaWYgKCEhb3JpZ2luYWxWYWx1ZSAmJiAhcmVz
dWx0aW5nVmFsdWUpCiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKQEAgLTMyMTksMTMgKzMyMTksMTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQp
OworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
Y2FzZSBQdXRCeVZhbFdpdGhUaGlzOgogICAgIGNhc2UgUHV0QnlJZFdpdGhUaGlzOgotICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAg
ICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFB1dEdldHRl
ckJ5SWQ6CkBAIC0zMjMzLDI1ICszMjMzLDI1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFB1dEdldHRlclNldHRlckJ5SWQ6CiAgICAgY2FzZSBQ
dXRHZXR0ZXJCeVZhbDoKICAgICBjYXNlIFB1dFNldHRlckJ5VmFsOiB7Ci0gICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNs
b2JiZXJXb3JsZCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIERlZmluZURh
dGFQcm9wZXJ0eToKICAgICBjYXNlIERlZmluZUFjY2Vzc29yUHJvcGVydHk6Ci0gICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAg
IGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBJbjog
ewogICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRldGVybWluZSB3aGVuIHRoZSBwcm9wZXJ0eSBk
ZWZpbml0ZWx5IGV4aXN0cyBiYXNlZCBvbiBhYnN0cmFjdAogICAgICAgICAvLyB2YWx1ZSBpbmZv
cm1hdGlvbi4KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xv
YmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNh
c2UgSGFzT3duUHJvcGVydHk6IHsKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTMyNjIsMTIgKzMyNjIsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgIH0KICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogewogICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwotICAgICAgICBjbG9iYmVyV29y
bGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVy
V29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzU3RydWN0dXJlUHJv
cGVydHk6IHsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKLSAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsK
KyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IEhhc0luZGV4ZWRQcm9wZXJ0eTogewpAQCAtMzI4MCw3ICszMjgwLDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzI4OCwxMyAr
MzI4OCwxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7Ci0gICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAg
IGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogewog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0NlbGwpOwotICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAg
ICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7CkBAIC0zMzE5LDIxICszMzE5LDIxIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIEdldER5bmFtaWNWYXI6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4u
c2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VCeXRlY29kZVRvcCgpOwogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgUHV0RHluYW1pY1ZhcjoKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBSZXNvbHZlU2NvcGU6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3Js
ZCgpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY09iamVjdCk7
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNE
ZWNsSW5FdmFsOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBj
bG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgZm9yTm9kZShu
b2RlKS5tYWtlQnl0ZWNvZGVUb3AoKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTMzNTEsMTMgKzMz
NTEsMTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgSW5zdGFuY2VPZkN1c3RvbToKLSAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJl
cldvcmxkKCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkg
PSBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbihub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OlNo
YWRvdykpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0
aW9uKG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KSkpOwogICAgICAgICAvLyBUaGUg
c3RhdGUgb2YgdGhpcyBub2RlIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGRlY2lkZWQsIGJ1dCBp
dCBtYXkgaGF2ZSBiZWNvbWUgYQogICAgICAgICAvLyBjb25zdGFudCwgaW4gd2hpY2ggY2FzZSB3
ZSdkIGxpa2UgdG8ga25vdy4KICAgICAgICAgaWYgKGZvck5vZGUobm9kZSkubV92YWx1ZSkKQEAg
LTMzNjgsNyArMzM2OCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uIHNoYWRvdyhub2RlLT5waGkoKSwgTm9kZUZs
b3dQcm9qZWN0aW9uOjpTaGFkb3cpOwogICAgICAgICBpZiAoc2hhZG93LmlzU3RpbGxWYWxpZCgp
KSB7CiAgICAgICAgICAgICBtX3N0YXRlLmNyZWF0ZVZhbHVlRm9yTm9kZShzaGFkb3cpOwotICAg
ICAgICAgICAgZm9yTm9kZShzaGFkb3cpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBzZXRGb3JOb2RlKHNoYWRvdywgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzOTAsNyArMzM5MCw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIERpcmVjdENhbGw6
CiAgICAgY2FzZSBEaXJlY3RDb25zdHJ1Y3Q6CiAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbElubGlu
ZWRDYWxsZXI6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNs
b2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zNDAwLDggKzM0MDAsOCBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgotICAgICAgICBmb3JBbGxW
YWx1ZXMoY2xvYmJlckxpbWl0LCBBYnN0cmFjdFZhbHVlOjpvYnNlcnZlSW52YWxpZGF0aW9uUG9p
bnRGb3IpOwogICAgICAgICBtX3N0YXRlLnNldFN0cnVjdHVyZUNsb2JiZXJTdGF0ZShTdHJ1Y3R1
cmVzQXJlV2F0Y2hlZCk7CisgICAgICAgIG1fc3RhdGUub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50
KCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDUFVJbnRyaW5zaWM6IApAQCAtMzQ0Nyw3
ICszNDQ3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVk
VXNlKQotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xv
YmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMzQ1NSw3ICszNDU1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQ3JlYXRlUmVzdDoKICAgICAgICAgaWYgKCFtX2dy
YXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpIHsKICAgICAgICAg
ICAgIC8vIFRoaXMgbWVhbnMgd2UncmUgYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KLSAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShtX2dyYXBoLCBTcGVjQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTM0NzcsNyArMzQ3Nyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICB9CiAKICAgICBjYXNlIFNldEZ1bmN0aW9uTmFtZTogewotICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAg
ICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNTM3LDEwICsz
NTM3LDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJXb3JsZCgKLSAgICBjb25zdCBDb2RlT3Jp
Z2luJiwgdW5zaWduZWQgY2xvYmJlckxpbWl0KQordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6Y2xvYmJlcldvcmxkKCkKIHsKLSAgICBjbG9iYmVyU3RydWN0dXJl
cyhjbG9iYmVyTGltaXQpOworICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgpAQCAtMzU3MiwxNiArMzU3MSwxNiBAQCB2b2lk
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgZnVu
Y3Rvcihmb3JOb2RlKG5vZGUpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBmb3IgKHNpemVfdCBp
ID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1iZXJPZkFyZ3VtZW50cygpOyBpLS07KQotICAgICAg
ICBmdW5jdG9yKG1fc3RhdGUudmFyaWFibGVzKCkuYXJndW1lbnQoaSkpOwotICAgIGZvciAoc2l6
ZV90IGkgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9mTG9jYWxzKCk7IGktLTspCi0gICAg
ICAgIGZ1bmN0b3IobV9zdGF0ZS52YXJpYWJsZXMoKS5sb2NhbChpKSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IG1fc3RhdGUubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKKyAgICAgICAgZnVuY3Rv
cihtX3N0YXRlLmFyZ3VtZW50KGkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS5udW1i
ZXJPZkxvY2FscygpOyBpLS07KQorICAgICAgICBmdW5jdG9yKG1fc3RhdGUubG9jYWwoaSkpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVk
IGNsb2JiZXJMaW1pdCkKK3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKCkKIHsKLSAgICBmb3JBbGxWYWx1ZXMoY2xvYmJlckxpbWl0
LCBBYnN0cmFjdFZhbHVlOjpjbG9iYmVyU3RydWN0dXJlc0Zvcik7CisgICAgbV9zdGF0ZS5jbG9i
YmVyU3RydWN0dXJlcygpOwogICAgIG1fc3RhdGUubWVyZ2VDbG9iYmVyU3RhdGUoQWJzdHJhY3RJ
bnRlcnByZXRlckNsb2JiZXJTdGF0ZTo6Q2xvYmJlcmVkU3RydWN0dXJlcyk7CiAgICAgbV9zdGF0
ZS5zZXRTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoU3RydWN0dXJlc0FyZUNsb2JiZXJlZCk7CiB9CkBA
IC0zNzI5LDcgKzM3MjgsNyBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBEb3VibGVSZXBVc2UpCiAg
ICAgICAgIHR5cGUgPSB0eXBlT2ZEb3VibGVVbmFyeU9wKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fdHlwZSk7CiAgICAgZWxzZQotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUodHlwZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMjMxMzM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTU3NCw2ICs1NzQsMjAgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjplbnN1cmVDYW5Jbml0
aWFsaXplVwogfQogI2VuZGlmCiAKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6ZmFzdEZvcndhcmRUb1Ns
b3coQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBuZXdFcG9jaCkKK3sKKyAgICBBU1NFUlQobmV3
RXBvY2ggIT0gbV9lZmZlY3RFcG9jaCk7CisgICAgCisgICAgaWYgKG5ld0Vwb2NoLmNsb2JiZXJF
cG9jaCgpICE9IG1fZWZmZWN0RXBvY2guY2xvYmJlckVwb2NoKCkpCisgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKCk7CisgICAgaWYgKG5ld0Vwb2NoLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09
IFN0cnVjdHVyZXNBcmVXYXRjaGVkKQorICAgICAgICBtX3N0cnVjdHVyZS5vYnNlcnZlSW52YWxp
ZGF0aW9uUG9pbnQoKTsKKyAgICAKKyAgICBtX2VmZmVjdEVwb2NoID0gbmV3RXBvY2g7CisgICAg
CisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAyMzEzMzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkFycmF5UHJv
ZmlsZS5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaCIKICNpbmNs
dWRlICJERkdGaWx0cmF0aW9uUmVzdWx0LmgiCiAjaW5jbHVkZSAiREZHRnJvemVuVmFsdWUuaCIK
ICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKQEAgLTEwMywyMCArMTA0LDEwIEBAIHN0cnVjdCBB
YnN0cmFjdFZhbHVlIHsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KICAgICAK
LSAgICBzdGF0aWMgdm9pZCBjbG9iYmVyU3RydWN0dXJlc0ZvcihBYnN0cmFjdFZhbHVlJiB2YWx1
ZSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdEZvcndhcmRUbyhBYnN0cmFjdFZhbHVlQ2xv
YmJlckVwb2NoIG5ld0Vwb2NoKQogICAgIHsKLSAgICAgICAgdmFsdWUuY2xvYmJlclN0cnVjdHVy
ZXMoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKQot
ICAgIHsKLSAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7Ci0g
ICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQg
b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50Rm9yKEFic3RyYWN0VmFsdWUmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgdmFsdWUub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7CisgICAgICAgIGlmIChu
ZXdFcG9jaCAhPSBtX2VmZmVjdEVwb2NoKQorICAgICAgICAgICAgZmFzdEZvcndhcmRUb1Nsb3co
bmV3RXBvY2gpOwogICAgIH0KICAgICAKICAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9uKFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgZnJvbSwgUmVnaXN0ZXJlZFN0cnVjdHVyZSB0bykKQEAgLTM5Nyw2ICsz
ODgsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIC8vIGVmZmVjdCB0aGF0IG1ha2Vz
IG5vbi1vYnZpb3VzIGNoYW5nZXMgdG8gdGhlIGhlYXAuCiAgICAgQXJyYXlNb2RlcyBtX2FycmF5
TW9kZXM7CiAgICAgCisgICAgLy8gVGhlIGVwb2NoLgorICAgIC8vIEZJWE1FOiBFeHBsYWluIHRo
aXMuIChPT1BTISEpCisgICAgQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBtX2VmZmVjdEVwb2No
OworICAgIAogICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgcG9zc2li
bGUgdmFsdWVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4KICAgICAvLyBoYXZlIG5vdyBvciBhbnkgdGlt
ZSBpbiB0aGUgZnV0dXJlLCB1bmxlc3MgaXQgaXMgcmVhc3NpZ25lZC4gTm90ZSB0aGF0IHRoaXMK
ICAgICAvLyBpbXBsaWVzIG5vdGhpbmcgYWJvdXQgdGhlIHN0cnVjdHVyZS4gT2RkbHksIEpTVmFs
dWUoKSAoaS5lLiB0aGUgZW1wdHkgdmFsdWUpCkBAIC00NTUsNiArNDUwLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGZhc3RG
b3J3YXJkVG9TbG93KEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2gpOworICAgIAogICAgIHZvaWQg
ZmlsdGVyVmFsdWVCeVR5cGUoKTsKICAgICB2b2lkIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJl
ckVwb2NoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWJzdHJhY3RW
YWx1ZUNsb2JiZXJFcG9jaC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGNsb2JiZXJFcG9j
aCgpLCAiOiIsIHN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVw
b2NoLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRXBvY2guaCIKKyNpbmNs
dWRlICJERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBYnN0cmFj
dFZhbHVlQ2xvYmJlckVwb2NoIHsKK3B1YmxpYzoKKyAgICBBYnN0cmFjdFZhbHVlQ2xvYmJlckVw
b2NoKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBBYnN0cmFjdFZhbHVlQ2xvYmJl
ckVwb2NoIGZpcnN0KFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCisgICAgewor
ICAgICAgICBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fdmFsdWUgPSBFcG9jaDo6Zmlyc3QoKS50b1Vuc2lnbmVkKCkgPDwgZXBvY2hTaGlmdDsKKyAg
ICAgICAgc3dpdGNoIChjbG9iYmVyU3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdHJ1Y3R1cmVzQXJl
V2F0Y2hlZDoKKyAgICAgICAgICAgIHJlc3VsdC5tX3ZhbHVlIHw9IHdhdGNoZWRGbGFnOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RydWN0dXJlc0FyZUNsb2JiZXJlZDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHZvaWQgY2xvYmJlcigpCisgICAgeworICAgICAgICBtX3ZhbHVlICs9IHN0
ZXA7CisgICAgICAgIG1fdmFsdWUgJj0gfndhdGNoZWRGbGFnOworICAgIH0KKyAgICAKKyAgICB2
b2lkIG9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpCisgICAgeworICAgICAgICBtX3ZhbHVlIHw9
IHdhdGNoZWRGbGFnOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQWJz
dHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIFN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSBzdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmFsdWUgJiB3YXRjaGVkRmxhZyA/IFN0cnVjdHVyZXNBcmVXYXRj
aGVkIDogU3RydWN0dXJlc0FyZUNsb2JiZXJlZDsKKyAgICB9CisgICAgCisgICAgRXBvY2ggY2xv
YmJlckVwb2NoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBFcG9jaDo6ZnJvbVVuc2ln
bmVkKG1fdmFsdWUgPj4gZXBvY2hTaGlmdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIHN0ZXAgPSAyOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgd2F0Y2hl
ZEZsYWcgPSAxOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZXBvY2hTaGlmdCA9IDE7
CisgICAgCisgICAgdW5zaWduZWQgbV92YWx1ZSB7IDAgfTsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHJldmlz
aW9uIDIzMTMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJh
Y3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw0NSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjcmVhdGVWYWx1ZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKTsKICAgICBBYnN0cmFj
dFZhbHVlJiBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbik7CiAgICAgQWJzdHJhY3RWYWx1ZSYg
Zm9yTm9kZShFZGdlIGVkZ2UpIHsgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2RlKCkpOyB9Ci0gICAg
T3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpIHsgcmV0dXJuIG1fYmxvY2stPnZh
bHVlc0F0VGFpbDsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZT4KKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0Rm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSwg
VmFsdWVUeXBlJiYgdmFsdWUpCisgICAgeworICAgICAgICBmb3JOb2RlKG5vZGUpID0gc3RkOjpm
b3J3YXJkPFZhbHVlVHlwZT4odmFsdWUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZVR5cGU+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZvck5vZGUoRWRnZSBl
ZGdlLCBWYWx1ZVR5cGUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEZvck5vZGUoZWRnZS5u
b2RlKCksIHN0ZDo6Zm9yd2FyZDxWYWx1ZVR5cGU+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUp
CisgICAgeworICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7CisgICAgfQorICAgIAorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAg
ICAgY2xlYXJGb3JOb2RlKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKCkgY29u
c3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IH0KKyAg
ICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52
YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFp
bC5vcGVyYW5kKG9wZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGlu
ZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwoaW5kZXgpOyB9CisgICAg
QWJzdHJhY3RWYWx1ZSYgYXJndW1lbnQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52
YWx1ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOyB9CisgICAgCisgICAgdm9pZCBjbG9iYmVyU3Ry
dWN0dXJlcygpCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKQorICAgIHsKKyAg
ICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgfQogICAgIAogICAgIEJhc2lj
QmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHJldmlzaW9uIDIzMTMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzgsNyArMzc4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGluZGV4ID49IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKSAt
IDEpCisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3N0YXRlLm51bWJlck9mQXJn
dW1lbnRzKCkgLSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGbG93TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbG93TWFwLmgJKHJldmlzaW9uIDIzMTMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmxvd01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDI3ICs1NSwyNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgR3JhcGgmIGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaDsgfQogICAgIAot
ICAgIFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICBBTFdBWVNfSU5MSU5FIFQmIGF0KHVu
c2lnbmVkIG5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX21hcFtub2RlSW5kZXhd
OwogICAgIH0KICAgICAKLSAgICBUJiBhdChOb2RlKiBub2RlKQorICAgIEFMV0FZU19JTkxJTkUg
VCYgYXQoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhdChub2RlLT5pbmRleCgp
KTsKICAgICB9CiAgICAgCi0gICAgVCYgYXRTaGFkb3codW5zaWduZWQgbm9kZUluZGV4KQorICAg
IEFMV0FZU19JTkxJTkUgVCYgYXRTaGFkb3codW5zaWduZWQgbm9kZUluZGV4KQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fc2hhZG93TWFwW25vZGVJbmRleF07CiAgICAgfQogICAgIAotICAgIFQm
IGF0U2hhZG93KE5vZGUqIG5vZGUpCisgICAgQUxXQVlTX0lOTElORSBUJiBhdFNoYWRvdyhOb2Rl
KiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGF0U2hhZG93KG5vZGUtPmluZGV4KCkpOwog
ICAgIH0KICAgICAKLSAgICBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVj
dGlvbjo6S2luZCBraW5kKQorICAgIEFMV0FZU19JTkxJTkUgVCYgYXQodW5zaWduZWQgbm9kZUlu
ZGV4LCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRj
aCAoa2luZCkgewogICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeToKQEAg
LTg3LDIzICs4NywyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PFQq
PihudWxscHRyKTsKICAgICB9CiAgICAgCi0gICAgVCYgYXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQ
cm9qZWN0aW9uOjpLaW5kIGtpbmQpCisgICAgQUxXQVlTX0lOTElORSBUJiBhdChOb2RlKiBub2Rl
LCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkKICAgICB7CiAgICAgICAgIHJldHVybiBh
dChub2RlLT5pbmRleCgpLCBraW5kKTsKICAgICB9CiAgICAgCi0gICAgVCYgYXQoTm9kZUZsb3dQ
cm9qZWN0aW9uIHByb2plY3Rpb24pCisgICAgQUxXQVlTX0lOTElORSBUJiBhdChOb2RlRmxvd1By
b2plY3Rpb24gcHJvamVjdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhdChwcm9qZWN0aW9u
Lm5vZGUoKSwgcHJvamVjdGlvbi5raW5kKCkpOwogICAgIH0KICAgICAKLSAgICBjb25zdCBUJiBh
dCh1bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+
KHRoaXMpLT5hdChub2RlSW5kZXgpOyB9Ci0gICAgY29uc3QgVCYgYXQoTm9kZSogbm9kZSkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGUpOyB9Ci0gICAg
Y29uc3QgVCYgYXRTaGFkb3codW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVybiBjb25z
dF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXRTaGFkb3cobm9kZUluZGV4KTsgfQotICAgIGNvbnN0
IFQmIGF0U2hhZG93KE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01h
cCo+KHRoaXMpLT5hdFNoYWRvdyhub2RlKTsgfQotICAgIGNvbnN0IFQmIGF0KHVuc2lnbmVkIG5v
ZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlSW5kZXgsIGtpbmQpOyB9Ci0gICAgY29u
c3QgVCYgYXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlLCBraW5kKTsgfQot
ICAgIGNvbnN0IFQmIGF0KE5vZGVGbG93UHJvamVjdGlvbiBwcm9qZWN0aW9uKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQocHJvamVjdGlvbik7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIGNvbnN0IFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QgeyByZXR1
cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGVJbmRleCk7IH0KKyAgICBBTFdB
WVNfSU5MSU5FIGNvbnN0IFQmIGF0KE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlKTsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3Qg
VCYgYXRTaGFkb3codW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PEZsb3dNYXAqPih0aGlzKS0+YXRTaGFkb3cobm9kZUluZGV4KTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgY29uc3QgVCYgYXRTaGFkb3coTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2Fz
dDxGbG93TWFwKj4odGhpcyktPmF0U2hhZG93KG5vZGUpOyB9CisgICAgQUxXQVlTX0lOTElORSBj
b25zdCBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBr
aW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZUlu
ZGV4LCBraW5kKTsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVCYgYXQoTm9kZSogbm9kZSwg
Tm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlLCBraW5kKTsgfQorICAgIEFMV0FZU19JTkxJTkUgY29u
c3QgVCYgYXQoTm9kZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChwcm9qZWN0aW9uKTsgfQogICAgIAogcHJpdmF0
ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMzEzMzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDIwICs2MCwyMiBAQCB2b2lkIEluUGxhY2VBYnN0cmFj
dFN0YXRlOjpiZWdpbkJhc2ljQmxvCiAgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5udW1iZXJPZkxvY2FscygpID09IGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1i
ZXJPZkxvY2FscygpKTsKIAogICAgIG1fYWJzdHJhY3RWYWx1ZXMucmVzaXplKCk7CisgICAgbV9l
ZmZlY3RFcG9jaCA9IEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2g6OmZpcnN0KGJhc2ljQmxvY2st
PmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZCk7CiAgICAgCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBiYXNpY0Jsb2NrLT5zaXplKCk7IGkrKykgewogICAgICAgICBOb2RlRmxvd1By
b2plY3Rpb246OmZvckVhY2goCiAgICAgICAgICAgICBiYXNpY0Jsb2NrLT5hdChpKSwgWyZdIChO
b2RlRmxvd1Byb2plY3Rpb24gbm9kZVByb2plY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGVQcm9qZWN0aW9uKS5jbGVhcigpOworICAgICAgICAgICAgICAgIGNsZWFyRm9yTm9k
ZShub2RlUHJvamVjdGlvbik7CiAgICAgICAgICAgICB9KTsKICAgICB9CiAKLSAgICBtX3Zhcmlh
YmxlcyA9IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVhZDsKKyAgICBmb3IgKHNpemVfdCBpID0gbV92
YXJpYWJsZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICB2YXJpYWJsZUF0KGkpID0gYmFzaWNCbG9j
ay0+dmFsdWVzQXRIZWFkW2ldOwogICAgIAogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
IHsKICAgICAgICAgZm9yIChOb2RlQWJzdHJhY3RWYWx1ZVBhaXImIGVudHJ5IDogYmFzaWNCbG9j
ay0+c3NhLT52YWx1ZXNBdEhlYWQpIHsKICAgICAgICAgICAgIGlmIChlbnRyeS5ub2RlLmlzU3Rp
bGxWYWxpZCgpKQotICAgICAgICAgICAgICAgIGZvck5vZGUoZW50cnkubm9kZSkgPSBlbnRyeS52
YWx1ZTsKKyAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKGVudHJ5Lm5vZGUsIGVudHJ5LnZhbHVl
KTsKICAgICAgICAgfQogICAgIH0KICAgICBiYXNpY0Jsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0g
ZmFsc2U7CkBAIC0yMDEsMTkgKzIwMywxOSBAQCBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpl
bmRCYXNpY0Jsb2NrCiAgICAgY2FzZSBUaHJlYWRlZENQUzogewogICAgICAgICBmb3IgKHNpemVf
dCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJP
ZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBk
ZXN0aW5hdGlvbiA9IGJsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwotICAg
ICAgICAgICAgbWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMuYXJndW1l
bnQoYXJndW1lbnQpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7
CisgICAgICAgICAgICBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBhcmd1bWVudChhcmd1
bWVudCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBibG9jay0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChsb2Nh
bCk7Ci0gICAgICAgICAgICBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxl
cy5sb2NhbChsb2NhbCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpKTsKKyAg
ICAgICAgICAgIG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIGxvY2FsKGxvY2FsKSwgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAogICAgIGNhc2UgU1NBOiB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYmxvY2stPnZhbHVlc0F0VGFpbC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGJsb2Nr
LT52YWx1ZXNBdFRhaWxbaV0ubWVyZ2UobV92YXJpYWJsZXNbaV0pOworICAgICAgICAgICAgYmxv
Y2stPnZhbHVlc0F0VGFpbFtpXS5tZXJnZSh2YXJpYWJsZUF0KGkpKTsKIAogICAgICAgICBmb3Ig
KE5vZGVBYnN0cmFjdFZhbHVlUGFpciYgdmFsdWVBdFRhaWwgOiBibG9jay0+c3NhLT52YWx1ZXNB
dFRhaWwpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlQXROb2RlID0gZm9yTm9k
ZSh2YWx1ZUF0VGFpbC5ub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIzMTMzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsMjEgKzQ3LDQ2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNyZWF0
ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24pIHsgfQogICAgIAotICAgIEFic3RyYWN0
VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAgQUxXQVlTX0lOTElO
RSBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSk7CisgICAgICAgIHJldHVy
biBmYXN0Rm9yd2FyZChtX2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUpKTsKICAgICB9CiAgICAgCi0g
ICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVkZ2UpCisgICAgQUxXQVlTX0lOTElORSBB
YnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIHJldHVybiBm
b3JOb2RlKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAgCi0gICAgT3BlcmFuZHM8QWJzdHJhY3RW
YWx1ZT4mIHZhcmlhYmxlcygpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPgorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlLCBW
YWx1ZVR5cGUmJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhYmxlczsKKyAg
ICAgICAgbV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKSA9IHN0ZDo6Zm9yd2FyZDxWYWx1ZVR5cGU+
KHZhbHVlKTsKICAgICB9CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPgor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRGb3JOb2RlKEVkZ2UgZWRnZSwgVmFsdWVUeXBlJiYg
dmFsdWUpCisgICAgeworICAgICAgICBzZXRGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndh
cmQ8VmFsdWVUeXBlPih2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgY2xlYXJGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQorICAgIHsKKyAgICAgICAg
bV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKS5jbGVhcigpOworICAgIH0KKyAgICAKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgY2xlYXJGb3JOb2RlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGNs
ZWFyRm9yTm9kZShlZGdlLm5vZGUoKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtYmVyT2ZB
cmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlcy5udW1iZXJPZkFyZ3VtZW50cygp
OyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX3Zhcmlh
Ymxlcy5udW1iZXJPZkxvY2FscygpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQg
b3BlcmFuZCkgeyByZXR1cm4gZmFzdEZvcndhcmQobV92YXJpYWJsZXMub3BlcmFuZChvcGVyYW5k
KSk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlcy5vcGVyYW5kKG9wZXJhbmQpKTsgfQor
ICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBpbmRleCkgeyByZXR1cm4gZmFzdEZvcndh
cmQobV92YXJpYWJsZXMubG9jYWwoaW5kZXgpKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIGFyZ3Vt
ZW50KHNpemVfdCBpbmRleCkgeyByZXR1cm4gZmFzdEZvcndhcmQobV92YXJpYWJsZXMuYXJndW1l
bnQoaW5kZXgpKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIHZhcmlhYmxlQXQoc2l6ZV90IGluZGV4
KSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlc1tpbmRleF0pOyB9CisgICAgCiAgICAg
Ly8gQ2FsbCB0aGlzIGJlZm9yZSBiZWdpbm5pbmcgQ0ZBIHRvIGluaXRpYWxpemUgdGhlIGFic3Ry
YWN0IHZhbHVlcyBvZgogICAgIC8vIGFyZ3VtZW50cywgYW5kIHRvIGluZGljYXRlIHdoaWNoIGJs
b2NrcyBzaG91bGQgYmUgbGlzdGVkIGZvciBDRkEKICAgICAvLyBleGVjdXRpb24uCkBAIC0xMTks
NiArMTQ0LDEwIEBAIHB1YmxpYzoKICAgICAvLyBNZXJnZVRvU3VjY2Vzc29ycy4KICAgICBib29s
IG1lcmdlVG9TdWNjZXNzb3JzKEJhc2ljQmxvY2sqKTsKICAgICAKKyAgICB2b2lkIGNsb2JiZXJT
dHJ1Y3R1cmVzKCkgeyBtX2VmZmVjdEVwb2NoLmNsb2JiZXIoKTsgfQorICAgIAorICAgIHZvaWQg
b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCkgeyBtX2VmZmVjdEVwb2NoLm9ic2VydmVJbnZhbGlk
YXRpb25Qb2ludCgpOyB9CisgICAgCiAgICAgLy8gTWV0aG9kcyBpbnRlbmRlZCB0byBiZSBjYWxs
ZWQgZnJvbSBBYnN0cmFjdEludGVycHJldGVyLgogICAgIHZvaWQgc2V0Q2xvYmJlclN0YXRlKEFi
c3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUgc3RhdGUpIHsgbV9jbG9iYmVyU3RhdGUgPSBz
dGF0ZTsgfQogICAgIHZvaWQgbWVyZ2VDbG9iYmVyU3RhdGUoQWJzdHJhY3RJbnRlcnByZXRlckNs
b2JiZXJTdGF0ZSBzdGF0ZSkgeyBtX2Nsb2JiZXJTdGF0ZSA9IG1lcmdlQ2xvYmJlclN0YXRlcyht
X2Nsb2JiZXJTdGF0ZSwgc3RhdGUpOyB9CkBAIC0xMzksNiArMTY4LDEyIEBAIHB1YmxpYzoKICAg
ICB9CiAKIHByaXZhdGU6CisgICAgQWJzdHJhY3RWYWx1ZSYgZmFzdEZvcndhcmQoQWJzdHJhY3RW
YWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICB2YWx1ZS5mYXN0Rm9yd2FyZFRvKG1fZWZmZWN0
RXBvY2gpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorICAgIAogICAgIHZvaWQgbWVy
Z2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYg
aW5WYXJpYWJsZSwgTm9kZSopOwogCiAgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdl
ZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJj
ZSwgTm9kZSogZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKQEAgLTE1NCw2ICsx
ODksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1ZhbGlkOwogICAgIEFic3RyYWN0SW50ZXJw
cmV0ZXJDbG9iYmVyU3RhdGUgbV9jbG9iYmVyU3RhdGU7CiAgICAgU3RydWN0dXJlQ2xvYmJlclN0
YXRlIG1fc3RydWN0dXJlQ2xvYmJlclN0YXRlOworICAgIEFic3RyYWN0VmFsdWVDbG9iYmVyRXBv
Y2ggbV9lZmZlY3RFcG9jaDsKICAgICAKICAgICBCcmFuY2hEaXJlY3Rpb24gbV9icmFuY2hEaXJl
Y3Rpb247IC8vIFRoaXMgaXMgb25seSBzZXQgZm9yIGJsb2NrcyB0aGF0IGVuZCBpbiBCcmFuY2gg
YW5kIHRoYXQgZXhlY3V0ZSB0byBjb21wbGV0aW9uIChpLmUuIG1faXNWYWxpZCA9PSB0cnVlKS4K
IH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339650</attachid>
            <date>2018-05-05 11:15:07 -0700</date>
            <delta_ts>2018-05-05 18:08:11 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>72030</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzEzOTYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE4LTA1LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIEFJIHNob3VsZCBoYXZlIE8oMSkgY2xvYmJlcmluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Mjg3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3Mvc2ltcGxl
LWFpLWVmZmVjdC5qczogQWRkZWQuCisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKwog
MjAxOC0wNS0wNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoIHNob3VsZCByZXR1cm4gdHJ1ZSBmb3IgdW5kZWNp
ZGVkIGFycmF5cwpJbmRleDogSlNUZXN0cy9zdHJlc3Mvc2ltcGxlLWFpLWVmZmVjdC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zaW1wbGUtYWktZWZmZWN0LmpzCShub25leGlzdGVu
dCkKKysrIEpTVGVzdHMvc3RyZXNzL3NpbXBsZS1haS1lZmZlY3QuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzOSBAQAordmFyIGRvRWZmZWN0ID0gZmFsc2U7Cit2YXIgZGlkRWZmZWN0ID0g
ZmFsc2U7CisKK2Z1bmN0aW9uIGJhcihvLCBwKQoreworICAgIGlmIChkb0VmZmVjdCkgeworICAg
ICAgICBkZWxldGUgcC5nOworICAgICAgICBwLl9fZGVmaW5lR2V0dGVyX18oImciLCAoKSA9PiB7
CisgICAgICAgICAgICBkaWRFZmZlY3QgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIDQyOwor
ICAgICAgICB9KTsKKyAgICB9Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhv
LCBwKSB7CisgICAgdmFyIHJlc3VsdCA9IG8uZiArIHAuZzsKKyAgICBiYXIobywgcCk7CisgICAg
cmV0dXJuIHJlc3VsdCArIG8uZiArIHAuZzsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIG8g
PSB7ZzogMX07CitvLmggPSAyOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsK
KyAgICB2YXIgcmVzdWx0ID0gZm9vKHtmOiAxfSwge2c6IDN9KTsKKyAgICBpZiAocmVzdWx0ICE9
IDgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBpbiBsb29wOiAiICsgcmVzdWx0
OworfQorCitkb0VmZmVjdCA9IHRydWU7Cit2YXIgcmVzdWx0ID0gZm9vKHtmOiAxfSwge2c6IDN9
KTsKK2lmIChyZXN1bHQgIT0gNDcpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVu
ZDogIiArIHJlc3VsdDsKK2lmICghZGlkRWZmZWN0KQorICAgIHRocm93ICJFcnJvcjogZGlkIG5v
dCBkbyBlZmZlY3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzEz
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTEgQEAKKzIwMTgtMDUtMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KKworICAgICAgICBERkcgQUkgc2hvdWxkIGhhdmUgTygxKSBjbG9iYmVyaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyODcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4
ZXMgYW4gb2xkIHNjYWxhYmlsaXR5IHByb2JlbSBpbiBBSS4gUHJldmlvdXNseSwgaWYgd2UgZGlk
IGNsb2JiZXJXb3JsZCgpLCB0aGVuIHdlCisgICAgICAgIHdvdWxkIHRyYXZlcnNlIGFsbCBvZiB0
aGUgc3RhdGUgYXZhaWxhYmxlIHRvIHRoZSBBSSBhdCB0aGF0IHRpbWUgYW5kIGNsb2JiZXIgaXQu
CisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZXMgY2xvYmJlcldvcmxkKCkgdG8gYmUgTygx
KS4gSXQganVzdCBkb2VzIHNvbWUgbWF0aCB0byBhIGNsb2JiZXIgZXBvY2guCisgICAgICAgIAor
ICAgICAgICBTYWRseSwgdGhpcyBpc24ndCBhIHNwZWVkLXVwIG9uIG15IGNvbXBpbGUgdGltZSBi
ZW5jaG1hcmtzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6
OmZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OnNldEZv
ck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmNsZWFyRm9y
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6dmFyaWFibGVz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyV29ybGQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpmb3JBbGxWYWx1ZXMp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyk6
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0VmFsdWU6OmZhc3RGb3J3YXJkVG9TbG93KToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZhc3RGb3J3
YXJkVG8pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1
cmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvYnNl
cnZlSW52YWxpZGF0aW9uUG9pbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6Om9ic2VydmVJbnZhbGlkYXRpb25Qb2ludEZvcik6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpkdW1wIGNvbnN0KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpBYnN0cmFjdFZhbHVlQ2xvYmJl
ckVwb2NoKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpm
aXJzdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6Y2xv
YmJlcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6b2Jz
ZXJ2ZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
Q2xvYmJlckVwb2NoOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpzdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2g6OmNsb2Ji
ZXJFcG9jaCBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpzZXRGb3JOb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpjbGVhckZvck5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6Om51bWJlck9mQXJndW1lbnRzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpudW1iZXJPZkxv
Y2FscyBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6bG9jYWwpOgor
ICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmFyZ3VtZW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3RydWN0dXJlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b2JzZXJ2ZUludmFsaWRhdGlv
blBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjp2YXJpYWJs
ZXMpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q0ZBUGhhc2U6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgICogZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRp
bmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR0Zsb3dNYXAuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01h
cDo6YXRTaGFkb3cpOgorICAgICAgICAoSlNDOjpERkc6OkZsb3dNYXA6OmF0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjphdFNoYWRvdyBjb25zdCk6CisgICAgICAgICogZGZn
L0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNl
QWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayk6CisgICAgICAgICogZGZnL0RGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3Rh
dGU6OmZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpz
ZXRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6Y2xl
YXJGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6dmFy
aWFibGVzRm9yRGVidWdnaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZTo6bnVtYmVyT2ZBcmd1bWVudHMgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxh
Y2VBYnN0cmFjdFN0YXRlOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Oklu
UGxhY2VBYnN0cmFjdFN0YXRlOjpsb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFi
c3RyYWN0U3RhdGU6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJh
Y3RTdGF0ZTo6dmFyaWFibGVBdCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0
U3RhdGU6OmNsb2JiZXJTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJz
dHJhY3RTdGF0ZTo6b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6REZH
OjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZmFzdEZvcndhcmQpOgorICAgICAgICAoSlNDOjpERkc6
OkluUGxhY2VBYnN0cmFjdFN0YXRlOjp2YXJpYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRTdGFjayk6CisKIDIw
MTgtMDUtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtl
IGl0IGVhc3kgdG8gbG9nIGNvbXBpbGUgdGltZXMgZm9yIGFsbCBvcHRpbWl6aW5nIHRpZXJzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMzEzMzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw2ICsy
NzQsNyBAQCBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAogZGZnL0RGR0Fic3RyYWN0SGVhcC5j
cHAKIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlLmNwcAogZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuY3BwCitkZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5jcHAKIGRm
Zy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCiBkZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAogZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0
aW9uUGhhc2UuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjMxMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw2ICszMTksNyBAQAogCQkw
RjREOEM3ODFGQ0EzQ0ZBMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4Qzc3MUZDQTND
RjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMx
MSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91
c1NwaWxscy5oICovOyB9OwogCQkwRjRGMTFFODIwOUJDREFCMDA3MDk2NTQgLyogQ29tcGlsZXJU
aW1pbmdTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0RjExRTYyMDlCQ0RBMTAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCAqLzsg
fTsKKwkJMEY0RjExRUIyMDlENDI2NjAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9iYmVy
RXBvY2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NEYxMUVBMjA5RDQyNjMwMDcwOTY1NCAvKiBERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmgg
Ki87IH07CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi87IH07CiAJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0
QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4
NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEY4MjhDMUUzMUI5NzYw
MDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyOEExRTMxQjk3MTAw
NzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBA
IC0yMzEwLDYgKzIzMTEsOCBAQAogCQkwRjRERTFEMDFDNEQ3NjRCMDA0RDZDMTEgLyogQjNPcmln
aW5EdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2lu
RHVtcC5jcHA7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjRGMTFFNjIwOUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29w
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21waWxlclRpbWluZ1Njb3Bl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYxMUU3MjA5QkNEQTEwMDcwOTY1
NCAvKiBDb21waWxlclRpbWluZ1Njb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENvbXBpbGVyVGltaW5nU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjRGMTFFOTIwOUQ0MjYzMDA3MDk2NTQgLyogREZHQWJzdHJhY3RWYWx1ZUNsb2Ji
ZXJFcG9jaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0
cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlQ2xv
YmJlckVwb2NoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RjExRUEyMDlE
NDI2MzAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oOyBw
YXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgcGF0
aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBw
YXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzExNCw2ICs3MTE3LDggQEAKIAkJ
CQlBNzA0RDhGRjE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaCAqLywKIAkJCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1
ZS5jcHAgKi8sCiAJCQkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFs
dWUuaCAqLywKKwkJCQkwRjRGMTFFOTIwOUQ0MjYzMDA3MDk2NTQgLyogREZHQWJzdHJhY3RWYWx1
ZUNsb2JiZXJFcG9jaC5jcHAgKi8sCisJCQkJMEY0RjExRUEyMDlENDI2MzAwNzA5NjU0IC8qIERG
R0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaCAqLywKIAkJCQkwRkQzRTNGRjFCNjE4QUFGMDBD
ODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCAq
LywKIAkJCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8sCiAJCQkJMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlG
IC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8sCkBAIC05MDQwLDYgKzkw
NDUsNyBAQAogCQkJCUE1MTNFNUMyMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0
SG9zdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjgxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjkxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RjExRUIy
MDlENDI2NjAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI2NkY3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNl
SklULmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4MTFCODQyOUE0MDA0MTM4NTYgLyogSlNJ
bnRlcm5hbFByb21pc2UuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHJldmlzaW9uIDIzMTMz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMjEgKzQxLDM4IEBAIHB1YmxpYzoKICAgICBBYnN0cmFj
dEludGVycHJldGVyKEdyYXBoJiwgQWJzdHJhY3RTdGF0ZVR5cGUmKTsKICAgICB+QWJzdHJhY3RJ
bnRlcnByZXRlcigpOwogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQ
cm9qZWN0aW9uIG5vZGUpCisgICAgQUxXQVlTX0lOTElORSBBYnN0cmFjdFZhbHVlJiBmb3JOb2Rl
KE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhdGUu
Zm9yTm9kZShub2RlKTsKICAgICB9CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShF
ZGdlIGVkZ2UpCisgICAgQUxXQVlTX0lOTElORSBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2Ug
ZWRnZSkKICAgICB7CiAgICAgICAgIHJldHVybiBmb3JOb2RlKGVkZ2Uubm9kZSgpKTsKICAgICB9
CiAgICAgCi0gICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRGb3JO
b2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlLCBWYWx1ZVR5cGUmJiB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3N0YXRlLnZhcmlhYmxlcygpOworICAgICAgICBtX3N0YXRlLnNldEZv
ck5vZGUobm9kZSwgc3RkOjpmb3J3YXJkPFZhbHVlVHlwZT4odmFsdWUpKTsKICAgICB9CiAgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPgorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXRGb3JOb2RlKEVkZ2UgZWRnZSwgVmFsdWVUeXBlJiYgdmFsdWUpCisgICAgeworICAgICAg
ICBzZXRGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPih2YWx1ZSkp
OworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2xlYXJGb3JOb2RlKE5vZGVG
bG93UHJvamVjdGlvbiBub2RlKQorICAgIHsKKyAgICAgICAgbV9zdGF0ZS5jbGVhckZvck5vZGUo
bm9kZSk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUo
RWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgY2xlYXJGb3JOb2RlKGVkZ2Uubm9kZSgpKTsKKyAg
ICB9CisKICAgICBib29sIG5lZWRzVHlwZUNoZWNrKE5vZGUqIG5vZGUsIFNwZWN1bGF0ZWRUeXBl
IHR5cGVzUGFzc2VkVGhyb3VnaCkKICAgICB7CiAgICAgICAgIHJldHVybiAhZm9yTm9kZShub2Rl
KS5pc1R5cGUodHlwZXNQYXNzZWRUaHJvdWdoKTsKQEAgLTE0OSwxMyArMTY2LDEzIEBAIHB1Ymxp
YzoKICAgICBQaGlDaGlsZHJlbiogcGhpQ2hpbGRyZW4oKSB7IHJldHVybiBtX3BoaUNoaWxkcmVu
LmdldCgpOyB9CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgY2xvYmJlcldvcmxkKGNvbnN0IENv
ZGVPcmlnaW4mLCB1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIHZvaWQgY2xvYmJlcldvcmxk
KCk7CiAgICAgdm9pZCBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckFsbFZhbHVlcyh1bnNpZ25lZCBpbmRleElu
QmxvY2ssIEZ1bmN0b3ImKTsKICAgICAKLSAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2ln
bmVkIGluZGV4SW5CbG9jayk7CisgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcygpOwogICAgIHZv
aWQgZGlkRm9sZENsb2JiZXJTdHJ1Y3R1cmVzKCk7CiAgICAgCiAgICAgdm9pZCBvYnNlcnZlVHJh
bnNpdGlvbih1bnNpZ25lZCBpbmRleEluQmxvY2ssIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgZnJvbSwg
UmVnaXN0ZXJlZFN0cnVjdHVyZSB0byk7CkBAIC0xOTAsNyArMjA3LDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIHZlcmlmeUVkZ2UoTm9kZSosIEVkZ2UpOwogICAgIHZvaWQgdmVyaWZ5RWRn
ZXMoTm9kZSopOwotICAgIHZvaWQgZXhlY3V0ZURvdWJsZVVuYXJ5T3BFZmZlY3RzKE5vZGUqLCB1
bnNpZ25lZCBjbG9iYmVyTGltaXQsIGRvdWJsZSgqZXF1aXZhbGVudEZ1bmN0aW9uKShkb3VibGUp
KTsKKyAgICB2b2lkIGV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhOb2RlKiwgZG91YmxlKCpl
cXVpdmFsZW50RnVuY3Rpb24pKGRvdWJsZSkpOwogICAgIAogICAgIENvZGVCbG9jayogbV9jb2Rl
QmxvY2s7CiAgICAgR3JhcGgmIG1fZ3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZp
c2lvbiAyMzEzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw3ICsyMzUsNyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKICAgICBjYXNlIElkZW50aXR5
V2l0aFByb2ZpbGU6CiAgICAgY2FzZSBJZGVudGl0eTogewotICAgICAgICBmb3JOb2RlKG5vZGUp
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkpOwogICAgICAgICBpZiAoZm9yTm9kZShub2RlKS52YWx1ZSgp
KQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAg
YnJlYWs7CkBAIC0yNDksMzMgKzI0OSwzMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLnZhcmlh
YmxlcygpLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsKKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJsZUFjY2Vz
c0RhdGEtPmxvY2FsKCkub2Zmc2V0KCkpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxv
Y2FsIHNob3VsZCBhbHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgdmFsdWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IodmFyaWFibGVBY2Nlc3NEYXRhLT5m
bHVzaEZvcm1hdCgpKSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKICAgICAgICAgICAg
IG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkg
PSB2YWx1ZTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCB2YWx1ZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICBTdGFja0Fj
Y2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJh
Y3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5sb2NhbCk7
CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9j
YWwpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxvY2FsIHNob3VsZCBhbHJlYWR5IGJl
IGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFsdWUuaXNUeXBl
KHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUo
KSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCB2YWx1ZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewot
ICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBQdXRTdGFjazogewotICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygp
Lm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCktPmxvY2FsKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIApAQCAtMjk2LDE0ICsyOTYsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2Yg
YXJndW1lbnRzIGhhcyBiZWVuIHNldC4gU2V0QXJndW1lbnQgbWVhbnMgdGhhdCBzb21lb25lIHNl
dAogICAgICAgICAvLyB0aGUgYXJndW1lbnQgdmFsdWVzIG91dC1vZi1iYW5kLCBhbmQgY3VycmVu
dGx5IHRoaXMgYWx3YXlzIG1lYW5zIHNldHRpbmcgdG8gYQogICAgICAgICAvLyBub24tY2xlYXIg
dmFsdWUuCi0gICAgICAgIEFTU0VSVCghbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIEFTU0VSVCghbV9zdGF0ZS5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBJbml0
aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czogewogICAgICAgICB1bnNpZ25lZCBlbnRyeXBvaW50
SW5kZXggPSBub2RlLT5lbnRyeXBvaW50SW5kZXgoKTsKICAgICAgICAgY29uc3QgVmVjdG9yPEZs
dXNoRm9ybWF0PiYgYXJndW1lbnRGb3JtYXRzID0gbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tl
bnRyeXBvaW50SW5kZXhdOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJn
dW1lbnQgPCBhcmd1bWVudEZvcm1hdHMuc2l6ZSgpOyArK2FyZ3VtZW50KSB7Ci0gICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkuYXJndW1lbnQoYXJn
dW1lbnQpOworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmFyZ3Vt
ZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRGb3JtYXRzW2FyZ3Vt
ZW50XSkgewogICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CiAgICAgICAgICAgICAgICAg
dmFsdWUuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKQEAgLTMzMiw3ICszMzIsNyBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMwNzEKICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAg
Y2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBGb3J3YXJk
VmFyYXJnczoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzQxLDkgKzM0MSw5IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwotICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+Y291bnQp
LnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIG1fc3RhdGUub3BlcmFuZChkYXRhLT5j
b3VudCkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
ZGF0YS0+bGltaXQgLSAxOyBpLS07KQotICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5v
cGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAg
ICAgIG1fc3RhdGUub3BlcmFuZChkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLm1ha2VIZWFwVG9w
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtMzU0LDcgKzM1NCw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIEJp
dExTaGlmdDoKICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9
PSBVbnR5cGVkVXNlKSB7Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0ludDMyT25seSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTU1LDcgKzU1NSw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgY2FzZSBWYWx1
ZUFkZDogewogICAgICAgICBBU1NFUlQobm9kZS0+YmluYXJ5VXNlS2luZCgpID09IFVudHlwZWRV
c2UpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVy
TGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKG1fZ3JhcGgsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC02MTEsNyArNjExLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIEF0b21pY3NJc0xvY2tGcmVl
OiB7CiAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gSW50MzJVc2UpCi0g
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGlt
aXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjQm9vbEludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNjM2LDcg
KzYzNiw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgY2FzZSBLbm93bkludDMyVXNlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25s
eSk7CkBAIC02NzQsMTIgKzY3NCwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwog
ICAgICAgICAgICAgaWYgKG51bWJlck9mUmVtb3ZlZENoaWxkcmVuID09IG51bWJlck9mQ2hpbGRy
ZW4pIHsKICAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgdGhlIGxhc3QgY2hpbGQuIFRoaXMg
aXMgdGhlIHdheSB0YWtlbiBpbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZS4KLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGlsZHJlbi5jaGlsZChudW1i
ZXJPZkNoaWxkcmVuIC0gMSkpOworICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgZm9y
Tm9kZShub2RlLT5jaGlsZHJlbi5jaGlsZChudW1iZXJPZkNoaWxkcmVuIC0gMSkpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgobnVtYmVy
T2ZSZW1vdmVkQ2hpbGRyZW4gKyAxKSA9PSBudW1iZXJPZkNoaWxkcmVuKSB7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKG5vbkVtcHR5SW5kZXgpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkcmVuLmNoaWxkKG5vbkVtcHR5SW5kZXgudmFsdWUoKSkp
OworICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgZm9yTm9kZShub2RlLT5jaGlsZHJl
bi5jaGlsZChub25FbXB0eUluZGV4LnZhbHVlKCkpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTcyNSw3ICs3MjUsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBl
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsK
KyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKG1fZ3JhcGgsIFNwZWNCeXRlY29kZU51bWJlcik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKQEAgLTc4Myw3ICs3ODMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IFVudHlwZWRVc2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7Ci0gICAg
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQp
OworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0J5dGVjb2RlTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC04MzQsNyArODM0LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUsIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29y
bGQoKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQnl0
ZWNvZGVOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC04
NzMsNyArODczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUsIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgVW50eXBlZFVzZToKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4u
c2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC05OTgsNyArOTk4
LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpOwotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNGdWxsTnVtYmVyKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMDc4LDIyICsxMDc4LDIyIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUodHlwZU9mRG91YmxlUm91bmRpbmcoZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkpOwotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNGdWxsTnVtYmVyKTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFy
aXRoU3FydDoKLSAgICAgICAgZXhlY3V0ZURvdWJsZVVuYXJ5T3BFZmZlY3RzKG5vZGUsIGNsb2Ji
ZXJMaW1pdCwgc3FydCk7CisgICAgICAgIGV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhub2Rl
LCBzcXJ0KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEFyaXRoRlJvdW5kOgotICAgICAg
ICBleGVjdXRlRG91YmxlVW5hcnlPcEVmZmVjdHMobm9kZSwgY2xvYmJlckxpbWl0LCBbXShkb3Vi
bGUgdmFsdWUpIC0+IGRvdWJsZSB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpOyB9
KTsKKyAgICAgICAgZXhlY3V0ZURvdWJsZVVuYXJ5T3BFZmZlY3RzKG5vZGUsIFtdKGRvdWJsZSB2
YWx1ZSkgLT4gZG91YmxlIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSk7IH0pOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBBcml0aFVuYXJ5OgotICAgICAgICBl
eGVjdXRlRG91YmxlVW5hcnlPcEVmZmVjdHMobm9kZSwgY2xvYmJlckxpbWl0LCBhcml0aFVuYXJ5
RnVuY3Rpb24obm9kZS0+YXJpdGhVbmFyeVR5cGUoKSkpOworICAgICAgICBleGVjdXRlRG91Ymxl
VW5hcnlPcEVmZmVjdHMobm9kZSwgYXJpdGhVbmFyeUZ1bmN0aW9uKG5vZGUtPmFyaXRoVW5hcnlU
eXBlKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIExvZ2ljYWxO
b3Q6IHsKQEAgLTE2NjgsNyArMTY2OCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc0Nsb2JiZXJpbmcpCi0gICAg
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQp
OworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE3NjIsNyArMTc2
Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
Y2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFVudHlwZWRV
c2U6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2Rl
LCAiQmFkIHVzZSBraW5kIik7CkBAIC0xNzg2LDcgKzE3ODYsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBBdG9taWNzU3ViOgogICAgIGNhc2Ug
QXRvbWljc1hvcjogewogICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBHZXRCeVZhbCkKLSAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJh
eU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0
aW9uczoKICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKQEAgLTE4MDYsNyArMTgwNiw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwor
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VIZWFwVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6U3Ry
aW5nOgpAQCAtMTgyMSw3ICsxODIxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIC8vIGltcGxpZXMgYW4gaW4tYm91bmRzIGFjY2Vz
cykuIE5vbmUgb2YgdGhpcyBmZWVscyBsaWtlIGl0J3Mgd29ydGggaXQsCiAgICAgICAgICAgICAg
ICAgLy8gc28gd2UncmUgZ29pbmcgd2l0aCBUT1AgZm9yIG5vdy4gVGhlIHNhbWUgdGhpbmcgYXBw
bGllcyB0bwogICAgICAgICAgICAgICAgIC8vIGNsb2JiZXJpbmcgdGhlIHdvcmxkLgotICAgICAg
ICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1p
dCk7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpOwpAQCAtMTgyOSwxOSArMTgyOSwxOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKICAgICAg
ICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgogICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAg
ICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewotICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Cisg
ICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3Ao
KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4o
KSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0J5dGVjb2RlRG91
YmxlKTsKQEAgLTE4NTIsNyArMTg1Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICBj
YXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKQEAgLTE5
MDIsMjQgKzE5MDIsMjQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNs
b2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyOgogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkK
LSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOworICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgICAg
ICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAg
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Cisg
ICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTkyOCw3ICsxOTI4LDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2Ug
QXJyYXlQdXNoOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBj
bG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXRUeXBlKFNwZWNCeXRlY29kZU51bWJlcik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0x
OTUyLDcgKzE5NTIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcnJheVBvcDoKLSAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xv
YmJlcldvcmxkKCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIApAQCAtMTk3MiwxNCArMTk3MiwxNCBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRJbmRl
eENoZWNrZWQuc2FmZUdldChhcmd1bWVudEluZGV4KSAhPSBDaGVja2VkU3RhdGU6OkRpZE92ZXJm
bG93KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJndW1lbnRJbmRleCA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50SW5kZXggKyAxKSAr
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
c2V0Rm9yTm9kZShub2RlLCBtX3N0YXRlLm9wZXJhbmQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRJbmRleCArIDEpICsgaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBtX3N0YXRlLnZhcmlhYmxlcygp
Lm51bWJlck9mQXJndW1lbnRzKCkgLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChhcmd1bWVudEluZGV4ICsg
MSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgbV9zdGF0ZS5udW1i
ZXJPZkFyZ3VtZW50cygpIC0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9yTm9k
ZShub2RlLCBtX3N0YXRlLmFyZ3VtZW50KGFyZ3VtZW50SW5kZXggKyAxKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE5OTMsNyAr
MTk5Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMSArIG5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7IGkgPCBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKICAgICAgICAgICAgICAgICBy
ZXN1bHQubWVyZ2UoCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3Bl
cmFuZCgKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKAogICAgICAgICAgICAg
ICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgKyBpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIwMDMs
NyArMjAwMyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUoKSkKICAgICAgICAgICAgICAgICBtX3N0YXRlLnNl
dEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpID0gcmVzdWx0OworICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCByZXN1bHQpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMDE2LDcgKzIwMTYs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFJlZ0V4cEV4ZWMpIHsKICAgICAgICAgICAgIC8vIEV2ZW4gaWYgd2Un
dmUgcHJvdmVuIGtub3duIGlucHV0IHR5cGVzIGFzIFJlZ0V4cE9iamVjdCBhbmQgU3RyaW5nLAog
ICAgICAgICAgICAgLy8gYWNjZXNzaW5nIGxhc3RJbmRleCBpcyBlZmZlY3RmdWwgaWYgaXQncyBh
IGdsb2JhbCByZWdleHAuCi0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoSlNWYWx1ZSBnbG9iYWxPYmplY3RWYWx1ZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fdmFsdWUpIHsKQEAgLTIwMzgsNyArMjAzOCw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CiAg
ICAgICAgIC8vIEV2ZW4gaWYgd2UndmUgcHJvdmVuIGtub3duIGlucHV0IHR5cGVzIGFzIFJlZ0V4
cE9iamVjdCBhbmQgU3RyaW5nLAogICAgICAgICAvLyBhY2Nlc3NpbmcgbGFzdEluZGV4IGlzIGVm
ZmVjdGZ1bCBpZiBpdCdzIGEgZ2xvYmFsIHJlZ2V4cC4KLSAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxk
KCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CiAgICAgICAg
IGJyZWFrOwogCkBAIC0yMDYwLDcgKzIwNjAsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAmJiBub2RlLT5jaGlsZDMoKS51c2VLaW5kKCkg
PT0gU3RyaW5nVXNlKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgY2xvYmJlciB0aGUg
d29ybGQuIEl0IGp1c3QgcmVhZHMgYW5kIHdyaXRlcyByZWdleHAgc3RhdGUuCiAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xv
YmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChtX2dyYXBoLCBtX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAg
IGJyZWFrOwogCkBAIC0yMTA1LDcgKzIxMDUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbDoKICAgICBjYXNlIFRhaWxD
YWxsVmFyYXJnczoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAg
IGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgCkBAIC0yMTIyLDExICsyMTIyLDExIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYgKCEoZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlICYgfihTcGVjRnVsbE51bWJlciB8IFNwZWNCb29sZWFuIHwgU3Bl
Y1N0cmluZyB8IFNwZWNTeW1ib2wgfCBTcGVjQmlnSW50KSkpIHsKICAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldv
cmxkKCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBj
bG9iYmVyV29ybGQoKTsKICAgICAgICAgCiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSht
X2dyYXBoLCBTcGVjSGVhcFRvcCAmIH5TcGVjT2JqZWN0KTsKICAgICAgICAgYnJlYWs7CkBAIC0y
MTQ1LDExICsyMTQ1LDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgaWYgKCEoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNC
eXRlY29kZU51bWJlcikpIHsKICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHMo
dHJ1ZSk7CiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBzZXRG
b3JOb2RlKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0yMTcyLDcgKzIxNzIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDZWxs
VXNlOgogICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJl
cldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMTkzLDcgKzIxOTMsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxk
KCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yMjM4LDcgKzIy
MzgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmICghbV9ncmFwaC5j
YW5Eb0Zhc3RTcHJlYWQobm9kZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKQotICAgICAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC0yMjYzLDcgKzIyNjMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjMzMiw3ICsyMzMyLDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgfQotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNGaW5hbE9iamVjdCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTIzNTYsNyArMjM1Niw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRv
T2JqZWN0KQotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
Y2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY09iamVjdCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTI2MDUsMTQgKzI2MDUsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xv
YmJlcldvcmxkKCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgogICAgIGNhc2Ug
R2V0QnlJZFdpdGhUaGlzOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIApA
QCAtMjYzNiw3ICsyNjM2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgIGNhc2UgRGVsZXRlQnlWYWw6IHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgY291
bGQgZGVjaWRlIGlmIHRoZSBkZWxldGUgd2lsbCBiZSBzdWNjZXNzZnVsIGJhc2VkIG9uIHRoZSBz
ZXQgb2Ygc3RydWN0dXJlcyB0aGF0CiAgICAgICAgIC8vIHdlIGdldCBmcm9tIG91ciBiYXNlIHZh
bHVlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NjExCi0gICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Cisg
ICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3Bl
Y0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNzQ3LDcgKzI3NDcsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIG5vYm9k
eSB3b3VsZCBjdXJyZW50bHkgYmVuZWZpdCBmcm9tIGhhdmluZyB0aGF0IGluZm9ybWF0aW9uLiBC
dXQgaXQncyBhIGJ1ZyBub25ldGhlbGVzcy4KICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gTnVr
ZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSkKICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyU3Ry
dWN0dXJlcygpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQg
aXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIGNsZWFyRm9yTm9kZShub2RlKTsgLy8gVGhlIHJl
c3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGVja1N1
YkNsYXNzOiB7CiAgICAgICAgIEpTVmFsdWUgY29uc3RhbnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS52YWx1ZSgpOwpAQCAtMjc3MSw3ICsyNzcxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBDYWxsRE9NR2V0dGVyRGF0YSogY2FsbERPTUdl
dHRlckRhdGEgPSBub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpOwogICAgICAgICBET01KSVQ6OkNh
bGxET01HZXR0ZXJTbmlwcGV0KiBzbmlwcGV0ID0gY2FsbERPTUdldHRlckRhdGEtPnNuaXBwZXQ7
CiAgICAgICAgIGlmICghc25pcHBldCB8fCBzbmlwcGV0LT5lZmZlY3Qud3JpdGVzKQotICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsK
KyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBpZiAoY2FsbERPTUdldHRlckRh
dGEtPmRvbUpJVCkKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBj
YWxsRE9NR2V0dGVyRGF0YS0+ZG9tSklULT5yZXN1bHRUeXBlKCkpOwogICAgICAgICBlbHNlCkBA
IC0yNzgxLDcgKzI3ODEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgY2FzZSBDYWxsRE9NOiB7CiAgICAgICAgIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJl
KiBzaWduYXR1cmUgPSBub2RlLT5zaWduYXR1cmUoKTsKICAgICAgICAgaWYgKHNpZ25hdHVyZS0+
ZWZmZWN0LndyaXRlcykKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIHNpZ25hdHVyZS0+cmVzdWx0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjg1MSw3ICsyODUxLDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6
Q29udmVydCk7Ci0gICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CisgICAg
ICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CiAgICAgICAgIGZpbHRlckFycmF5TW9kZXMobm9kZS0+
Y2hpbGQxKCksIG5vZGUtPmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjg1OSw3ICsyODU5LDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAodmFsdWUubV9zdHJ1
Y3R1cmUuaXNTdWJzZXRPZihSZWdpc3RlcmVkU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgp
KSkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAg
ICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyU3RydWN0
dXJlcygpOwogICAgICAgICAKICAgICAgICAgLy8gV2UgaGF2ZSBhIGJ1bmNoIG9mIG9wdGlvbnMg
b2YgaG93IHRvIGV4cHJlc3MgdGhlIGFic3RyYWN0IHNldCBhdCB0aGlzIHBvaW50LiBMZXQgc2V0
IFMKICAgICAgICAgLy8gYmUgdGhlIHNldCBvZiBzdHJ1Y3R1cmVzIHRoYXQgdGhlIHZhbHVlIGhh
ZCBiZWZvcmUgY2xvYmJlcmluZyBhbmQgYXNzdW1lIHRoYXQgYWxsIG9mCkBAIC0yODg4LDcgKzI4
ODgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IC8vIE5vdGUgdGhhdCBpdCdzIHRlbXB0aW5nIHRvIHNpbXBseSBzYXkgdGhhdCB0aGUgcmVzdWx0
aW5nIHZhbHVlIGlzIEJPVFRPTSBiZWNhdXNlIG9mCiAgICAgICAgIC8vIHRoZSBjb250cmFkaWN0
aW9uLiBUaGF0IHdvdWxkIGJlIHdyb25nLCBzaW5jZSB3ZSBoYXZlbid0IGhpdCBhbiBpbnZhbGlk
YXRpb24gcG9pbnQsCiAgICAgICAgIC8vIHlldC4KLSAgICAgICAgdmFsdWUuc2V0KG1fZ3JhcGgs
IG5vZGUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0
KG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewpAQCAtMjg5NiwxMSArMjg5NiwxMSBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3ZhbHVlLCBub2RlLT5hcnJheU1vZGUoKSk7CiAgICAg
ICAgIGlmICh2aWV3KQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOworICAgICAgICBjbGVhckZvck5vZGUo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBv
aW50ZXI6IHsKLSAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOworICAgICAgICBjbGVhckZv
ck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOyAKICAgICB9CiAgICAgICAgIApAQCAtMjk1OCw3
ICsyOTU4LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBj
bG9iYmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwg
U3BlY09iamVjdCB8IFNwZWNPdGhlcik7CkBAIC0yOTg3LDcgKzI5ODcsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFy
KCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogCi0gICAgICAgIGZv
ck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCB2YWx1ZSk7CiAg
ICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENv
bnN0YW50cyh0cnVlKTsKICAgICAgICAgYnJlYWs7CkBAIC0zMDU4LDcgKzMwNTgsNyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlmIChmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgYmFzZVNldCkgPT0gQ29u
dHJhZGljdGlvbikKICAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAg
ICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpID0gcmVzdWx0OworICAgICAgICBzZXRGb3JOb2Rl
KG5vZGUsIHJlc3VsdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAt
MzEwOCw3ICszMTA4LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICBvYnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7
CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9n
cmFwaCwgbmV3U2V0KSA9PSBDb250cmFkaWN0aW9uKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRJ
c1ZhbGlkKGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkgPSByZXN1bHRp
bmdWYWx1ZTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLT5jaGlsZDIoKSwgIHJlc3VsdGluZ1Zh
bHVlKTsKICAgICAgICAgaWYgKCEhb3JpZ2luYWxWYWx1ZSAmJiAhcmVzdWx0aW5nVmFsdWUpCiAg
ICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAgICBicmVhazsKQEAg
LTMyMTksMTMgKzMyMTksMTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9i
YmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRCeVZhbFdp
dGhUaGlzOgogICAgIGNhc2UgUHV0QnlJZFdpdGhUaGlzOgotICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29y
bGQoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFB1dEdldHRlckJ5SWQ6CkBAIC0zMjMz
LDI1ICszMjMzLDI1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICBjYXNlIFB1dEdldHRlclNldHRlckJ5SWQ6CiAgICAgY2FzZSBQdXRHZXR0ZXJCeVZhbDoK
ICAgICBjYXNlIFB1dFNldHRlckJ5VmFsOiB7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIERlZmluZURhdGFQcm9wZXJ0eToKICAg
ICBjYXNlIERlZmluZUFjY2Vzc29yUHJvcGVydHk6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgp
OwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBJbjogewogICAgICAgICAvLyBG
SVhNRTogV2UgY2FuIGRldGVybWluZSB3aGVuIHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0
cyBiYXNlZCBvbiBhYnN0cmFjdAogICAgICAgICAvLyB2YWx1ZSBpbmZvcm1hdGlvbi4KLSAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAg
ICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgSGFzT3duUHJvcGVy
dHk6IHsKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJl
ckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMyNjIsMTIg
KzMyNjIsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
IH0KICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogewogICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0Jvb2xlYW4pOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKLSAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJl
cldvcmxkKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0luZGV4ZWRQcm9w
ZXJ0eTogewpAQCAtMzI4MCw3ICszMjgwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZGVm
YXVsdDogewotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
Y2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzI4OCwxMyArMzI4OCwxMyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgp
OwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogewogICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0NlbGwpOwotICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29y
bGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVj
dHVyZVBuYW1lOiB7CkBAIC0zMzE5LDIxICszMzE5LDIxIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldER5bmFt
aWNWYXI6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2Ji
ZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBmb3JOb2RlKG5vZGUp
Lm1ha2VCeXRlY29kZVRvcCgpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUHV0RHluYW1p
Y1ZhcjoKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJl
ckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBSZXNvbHZlU2NvcGU6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY09iamVjdCk7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsOgotICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwor
ICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlQnl0ZWNv
ZGVUb3AoKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTMzNTEsMTMgKzMzNTEsMTMgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgSW5zdGFuY2VPZkN1c3RvbToKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkgPSBmb3JOb2RlKE5vZGVG
bG93UHJvamVjdGlvbihub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdykpOworICAgICAg
ICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKG5vZGUsIE5vZGVG
bG93UHJvamVjdGlvbjo6U2hhZG93KSkpOwogICAgICAgICAvLyBUaGUgc3RhdGUgb2YgdGhpcyBu
b2RlIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGRlY2lkZWQsIGJ1dCBpdCBtYXkgaGF2ZSBiZWNv
bWUgYQogICAgICAgICAvLyBjb25zdGFudCwgaW4gd2hpY2ggY2FzZSB3ZSdkIGxpa2UgdG8ga25v
dy4KICAgICAgICAgaWYgKGZvck5vZGUobm9kZSkubV92YWx1ZSkKQEAgLTMzNjgsNyArMzM2OCw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgTm9k
ZUZsb3dQcm9qZWN0aW9uIHNoYWRvdyhub2RlLT5waGkoKSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpT
aGFkb3cpOwogICAgICAgICBpZiAoc2hhZG93LmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAg
ICBtX3N0YXRlLmNyZWF0ZVZhbHVlRm9yTm9kZShzaGFkb3cpOwotICAgICAgICAgICAgZm9yTm9k
ZShzaGFkb3cpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBzZXRGb3JO
b2RlKHNoYWRvdywgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTMzOTAsNyArMzM5MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIERpcmVjdENhbGw6CiAgICAgY2FzZSBEaXJl
Y3RDb25zdHJ1Y3Q6CiAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbElubGluZWRDYWxsZXI6Ci0gICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Cisg
ICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9w
KCk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zNDAwLDggKzM0MDAsOCBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBjYXNlIEludmFsaWRhdGlvblBvaW50OgotICAgICAgICBmb3JBbGxWYWx1ZXMoY2xvYmJlckxp
bWl0LCBBYnN0cmFjdFZhbHVlOjpvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnRGb3IpOwogICAgICAg
ICBtX3N0YXRlLnNldFN0cnVjdHVyZUNsb2JiZXJTdGF0ZShTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCk7
CisgICAgICAgIG1fc3RhdGUub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7CiAgICAgICAgIGJy
ZWFrOwogCiAgICAgY2FzZSBDUFVJbnRyaW5zaWM6IApAQCAtMzQ0Nyw3ICszNDQ3LDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKQotICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAg
ICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
bV9ncmFwaCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
MzQ1NSw3ICszNDU1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgIGNhc2UgQ3JlYXRlUmVzdDoKICAgICAgICAgaWYgKCFtX2dyYXBoLmlzV2F0Y2hpbmdI
YXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpIHsKICAgICAgICAgICAgIC8vIFRoaXMgbWVh
bnMgd2UncmUgYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KLSAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBj
bG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBo
LCBTcGVjQXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM0NzcsNyAr
MzQ3Nyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9
CiAKICAgICBjYXNlIFNldEZ1bmN0aW9uTmFtZTogewotICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNTM3LDEwICszNTM3LDkgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBBYnN0cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmNsb2JiZXJXb3JsZCgKLSAgICBjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQg
Y2xvYmJlckxpbWl0KQordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6Y2xvYmJlcldvcmxkKCkKIHsKLSAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQp
OworICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3Ry
YWN0U3RhdGVUeXBlPgpAQCAtMzU3MiwxNiArMzU3MSwxNiBAQCB2b2lkIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgZnVuY3Rvcihmb3JOb2RlKG5v
ZGUpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS52YXJp
YWJsZXMoKS5udW1iZXJPZkFyZ3VtZW50cygpOyBpLS07KQotICAgICAgICBmdW5jdG9yKG1fc3Rh
dGUudmFyaWFibGVzKCkuYXJndW1lbnQoaSkpOwotICAgIGZvciAoc2l6ZV90IGkgPSBtX3N0YXRl
LnZhcmlhYmxlcygpLm51bWJlck9mTG9jYWxzKCk7IGktLTspCi0gICAgICAgIGZ1bmN0b3IobV9z
dGF0ZS52YXJpYWJsZXMoKS5sb2NhbChpKSk7CisgICAgZm9yIChzaXplX3QgaSA9IG1fc3RhdGUu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKKyAgICAgICAgZnVuY3RvcihtX3N0YXRlLmFyZ3Vt
ZW50KGkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS5udW1iZXJPZkxvY2FscygpOyBp
LS07KQorICAgICAgICBmdW5jdG9yKG1fc3RhdGUubG9jYWwoaSkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVkIGNsb2JiZXJMaW1pdCkK
K3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJTdHJ1
Y3R1cmVzKCkKIHsKLSAgICBmb3JBbGxWYWx1ZXMoY2xvYmJlckxpbWl0LCBBYnN0cmFjdFZhbHVl
OjpjbG9iYmVyU3RydWN0dXJlc0Zvcik7CisgICAgbV9zdGF0ZS5jbG9iYmVyU3RydWN0dXJlcygp
OwogICAgIG1fc3RhdGUubWVyZ2VDbG9iYmVyU3RhdGUoQWJzdHJhY3RJbnRlcnByZXRlckNsb2Ji
ZXJTdGF0ZTo6Q2xvYmJlcmVkU3RydWN0dXJlcyk7CiAgICAgbV9zdGF0ZS5zZXRTdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUoU3RydWN0dXJlc0FyZUNsb2JiZXJlZCk7CiB9CkBAIC0zNzE2LDcgKzM3MTUs
NyBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotdm9pZCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZURvdWJsZVVuYXJ5T3BFZmZlY3RzKE5vZGUqIG5v
ZGUsIHVuc2lnbmVkIGNsb2JiZXJMaW1pdCwgZG91YmxlKCplcXVpdmFsZW50RnVuY3Rpb24pKGRv
dWJsZSkpCit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRG91YmxlVW5hcnlPcEVmZmVjdHMoTm9kZSogbm9kZSwgZG91YmxlKCplcXVpdmFsZW50RnVu
Y3Rpb24pKGRvdWJsZSkpCiB7CiAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7CiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBudW1iZXIgPSBj
aGlsZC50b051bWJlckZyb21QcmltaXRpdmUoKSkgewpAQCAtMzcyOSw3ICszNzI4LDcgQEAgdm9p
ZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGlmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlKQogICAgICAgICB0eXBlID0gdHlwZU9mRG91
YmxlVW5hcnlPcChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpOwogICAgIGVsc2UKLSAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsK
KyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKHR5cGUp
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5jcHAJKHJldmlzaW9uIDIzMTMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NTYsNiArNTU2LDcgQEAg
dm9pZCBBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50UwogICAgIH0KICAgICBpZiAo
ISFtX3ZhbHVlKQogICAgICAgICBvdXQucHJpbnQoIiwgIiwgaW5Db250ZXh0KG1fdmFsdWUsIGNv
bnRleHQpKTsKKyAgICBvdXQucHJpbnQoIiwgIiwgbV9lZmZlY3RFcG9jaCk7CiAgICAgb3V0LnBy
aW50KCIpIik7CiB9CiAKQEAgLTU3NCw2ICs1NzUsMjAgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpl
bnN1cmVDYW5Jbml0aWFsaXplVwogfQogI2VuZGlmCiAKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6ZmFz
dEZvcndhcmRUb1Nsb3coQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBuZXdFcG9jaCkKK3sKKyAg
ICBBU1NFUlQobmV3RXBvY2ggIT0gbV9lZmZlY3RFcG9jaCk7CisgICAgCisgICAgaWYgKG5ld0Vw
b2NoLmNsb2JiZXJFcG9jaCgpICE9IG1fZWZmZWN0RXBvY2guY2xvYmJlckVwb2NoKCkpCisgICAg
ICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgaWYgKG5ld0Vwb2NoLnN0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZSgpID09IFN0cnVjdHVyZXNBcmVXYXRjaGVkKQorICAgICAgICBtX3N0cnVjdHVyZS5v
YnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKTsKKyAgICAKKyAgICBtX2VmZmVjdEVwb2NoID0gbmV3
RXBvY2g7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworfQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAyMzEzMzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1
ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBv
Y2guaCIKICNpbmNsdWRlICJERkdGaWx0cmF0aW9uUmVzdWx0LmgiCiAjaW5jbHVkZSAiREZHRnJv
emVuVmFsdWUuaCIKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKQEAgLTEwMywyMCArMTA0LDEw
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwog
ICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCBjbG9iYmVyU3RydWN0dXJlc0ZvcihBYnN0cmFj
dFZhbHVlJiB2YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdEZvcndhcmRUbyhBYnN0
cmFjdFZhbHVlQ2xvYmJlckVwb2NoIG5ld0Vwb2NoKQogICAgIHsKLSAgICAgICAgdmFsdWUuY2xv
YmJlclN0cnVjdHVyZXMoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBvYnNlcnZlSW52YWxpZGF0
aW9uUG9pbnQoKQotICAgIHsKLSAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZUludmFsaWRhdGlv
blBvaW50KCk7Ci0gICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICB9Ci0gICAgCi0gICAg
c3RhdGljIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBvaW50Rm9yKEFic3RyYWN0VmFsdWUmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgdmFsdWUub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7Cisg
ICAgICAgIGlmIChuZXdFcG9jaCAhPSBtX2VmZmVjdEVwb2NoKQorICAgICAgICAgICAgZmFzdEZv
cndhcmRUb1Nsb3cobmV3RXBvY2gpOwogICAgIH0KICAgICAKICAgICB2b2lkIG9ic2VydmVUcmFu
c2l0aW9uKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgZnJvbSwgUmVnaXN0ZXJlZFN0cnVjdHVyZSB0bykK
QEAgLTM5Nyw2ICszODgsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIC8vIGVmZmVj
dCB0aGF0IG1ha2VzIG5vbi1vYnZpb3VzIGNoYW5nZXMgdG8gdGhlIGhlYXAuCiAgICAgQXJyYXlN
b2RlcyBtX2FycmF5TW9kZXM7CiAgICAgCisgICAgLy8gVGhlIGVwb2NoLgorICAgIC8vIEZJWE1F
OiBFeHBsYWluIHRoaXMuIChPT1BTISEpCisgICAgQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBt
X2VmZmVjdEVwb2NoOworICAgIAogICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBv
biB0aGUgcG9zc2libGUgdmFsdWVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4KICAgICAvLyBoYXZlIG5v
dyBvciBhbnkgdGltZSBpbiB0aGUgZnV0dXJlLCB1bmxlc3MgaXQgaXMgcmVhc3NpZ25lZC4gTm90
ZSB0aGF0IHRoaXMKICAgICAvLyBpbXBsaWVzIG5vdGhpbmcgYWJvdXQgdGhlIHN0cnVjdHVyZS4g
T2RkbHksIEpTVmFsdWUoKSAoaS5lLiB0aGUgZW1wdHkgdmFsdWUpCkBAIC00NTUsNiArNDUwLDgg
QEAgcHJpdmF0ZToKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KICAgICAKKyAg
ICB2b2lkIGZhc3RGb3J3YXJkVG9TbG93KEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2gpOworICAg
IAogICAgIHZvaWQgZmlsdGVyVmFsdWVCeVR5cGUoKTsKICAgICB2b2lkIGZpbHRlckFycmF5TW9k
ZXNCeVR5cGUoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFZhbHVlQ2xvYmJlckVwb2NoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBYnN0cmFjdFZhbHVlQ2xv
YmJlckVwb2NoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KGNsb2JiZXJFcG9jaCgpLCAiOiIsIHN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKK30KKworfSB9
IC8vIG5hbWVzcGFlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2No
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlQ2xvYmJlckVwb2NoLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRXBv
Y2guaCIKKyNpbmNsdWRlICJERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCIKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitj
bGFzcyBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoIHsKK3B1YmxpYzoKKyAgICBBYnN0cmFjdFZh
bHVlQ2xvYmJlckVwb2NoKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBBYnN0cmFj
dFZhbHVlQ2xvYmJlckVwb2NoIGZpcnN0KFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3Rh
dGUpCisgICAgeworICAgICAgICBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBFcG9jaDo6Zmlyc3QoKS50b1Vuc2lnbmVkKCkgPDwgZXBv
Y2hTaGlmdDsKKyAgICAgICAgc3dpdGNoIChjbG9iYmVyU3RhdGUpIHsKKyAgICAgICAgY2FzZSBT
dHJ1Y3R1cmVzQXJlV2F0Y2hlZDoKKyAgICAgICAgICAgIHJlc3VsdC5tX3ZhbHVlIHw9IHdhdGNo
ZWRGbGFnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RydWN0dXJlc0FyZUNs
b2JiZXJlZDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xvYmJlcigpCisgICAgeworICAgICAgICBt
X3ZhbHVlICs9IHN0ZXA7CisgICAgICAgIG1fdmFsdWUgJj0gfndhdGNoZWRGbGFnOworICAgIH0K
KyAgICAKKyAgICB2b2lkIG9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpCisgICAgeworICAgICAg
ICBtX3ZhbHVlIHw9IHdhdGNoZWRGbGFnOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQor
ICAgIAorICAgIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBzdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgJiB3YXRjaGVkRmxhZyA/IFN0cnVj
dHVyZXNBcmVXYXRjaGVkIDogU3RydWN0dXJlc0FyZUNsb2JiZXJlZDsKKyAgICB9CisgICAgCisg
ICAgRXBvY2ggY2xvYmJlckVwb2NoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBFcG9j
aDo6ZnJvbVVuc2lnbmVkKG1fdmFsdWUgPj4gZXBvY2hTaGlmdCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIHN0ZXAgPSAyOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgd2F0Y2hlZEZsYWcgPSAxOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZXBv
Y2hTaGlmdCA9IDE7CisgICAgCisgICAgdW5zaWduZWQgbV92YWx1ZSB7IDAgfTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0
YXRlLmgJKHJldmlzaW9uIDIzMTMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXRUYWlsQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw0NSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjcmVhdGVWYWx1ZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKTsK
ICAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbik7CiAgICAgQWJz
dHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVkZ2UpIHsgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2Rl
KCkpOyB9Ci0gICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpIHsgcmV0dXJu
IG1fYmxvY2stPnZhbHVlc0F0VGFpbDsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHlwZT4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0Rm9yTm9kZShOb2RlRmxvd1Byb2pl
Y3Rpb24gbm9kZSwgVmFsdWVUeXBlJiYgdmFsdWUpCisgICAgeworICAgICAgICBmb3JOb2RlKG5v
ZGUpID0gc3RkOjpmb3J3YXJkPFZhbHVlVHlwZT4odmFsdWUpOworICAgIH0KKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZv
ck5vZGUoRWRnZSBlZGdlLCBWYWx1ZVR5cGUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEZv
ck5vZGUoZWRnZS5ub2RlKCksIHN0ZDo6Zm9yd2FyZDxWYWx1ZVR5cGU+KHZhbHVlKSk7CisgICAg
fQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoTm9kZUZsb3dQcm9q
ZWN0aW9uIG5vZGUpCisgICAgeworICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7CisgICAg
fQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoRWRnZSBlZGdlKQor
ICAgIHsKKyAgICAgICAgY2xlYXJGb3JOb2RlKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52
YWx1ZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgfQorICAgIHVuc2lnbmVkIG51bWJlck9m
TG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9j
YWxzKCk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVy
biBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQorICAgIEFic3RyYWN0
VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2st
PnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgbG9j
YWwoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwoaW5k
ZXgpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgYXJndW1lbnQoc2l6ZV90IGluZGV4KSB7IHJldHVy
biBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOyB9CisgICAgCisgICAgdm9p
ZCBjbG9iYmVyU3RydWN0dXJlcygpCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExB
VEZPUk0oKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQo
KQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgfQogICAg
IAogICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHJldmlz
aW9uIDIzMTMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBpZiAoIXNhZmVUb0V4ZWN1dGUobV9zdGF0ZSwgbV9ncmFwaCwgbm9kZSkpCiAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIihVTlNBRkUpICIpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGRhdGFMb2cobV9zdGF0ZS52YXJpYWJsZXMoKSwgIiAiLCBtX2ludGVycHJl
dGVyKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKG1fc3RhdGUudmFyaWFibGVzRm9yRGVidWdn
aW5nKCksICIgIiwgbV9pbnRlcnByZXRlcik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIlxuIik7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2
aXNpb24gMjMxMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw3ICszNzgsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1iZXJPZkFyZ3VtZW50cygpIC0gMSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc3RhdGUubnVtYmVyT2ZBcmd1bWVudHMoKSAt
IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dN
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dNYXAu
aAkocmV2aXNpb24gMjMxMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93
TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsMjcgKzU1LDI3IEBAIHB1YmxpYzoKICAgICAKICAgICBH
cmFwaCYgZ3JhcGgoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoOyB9CiAgICAgCi0gICAgVCYgYXQo
dW5zaWduZWQgbm9kZUluZGV4KQorICAgIEFMV0FZU19JTkxJTkUgVCYgYXQodW5zaWduZWQgbm9k
ZUluZGV4KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbWFwW25vZGVJbmRleF07CiAgICAgfQog
ICAgIAotICAgIFQmIGF0KE5vZGUqIG5vZGUpCisgICAgQUxXQVlTX0lOTElORSBUJiBhdChOb2Rl
KiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGF0KG5vZGUtPmluZGV4KCkpOwogICAgIH0K
ICAgICAKLSAgICBUJiBhdFNoYWRvdyh1bnNpZ25lZCBub2RlSW5kZXgpCisgICAgQUxXQVlTX0lO
TElORSBUJiBhdFNoYWRvdyh1bnNpZ25lZCBub2RlSW5kZXgpCiAgICAgewogICAgICAgICByZXR1
cm4gbV9zaGFkb3dNYXBbbm9kZUluZGV4XTsKICAgICB9CiAgICAgCi0gICAgVCYgYXRTaGFkb3co
Tm9kZSogbm9kZSkKKyAgICBBTFdBWVNfSU5MSU5FIFQmIGF0U2hhZG93KE5vZGUqIG5vZGUpCiAg
ICAgewogICAgICAgICByZXR1cm4gYXRTaGFkb3cobm9kZS0+aW5kZXgoKSk7CiAgICAgfQogICAg
IAotICAgIFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5k
IGtpbmQpCisgICAgQUxXQVlTX0lOTElORSBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVG
bG93UHJvamVjdGlvbjo6S2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7
CiAgICAgICAgIGNhc2UgTm9kZUZsb3dQcm9qZWN0aW9uOjpQcmltYXJ5OgpAQCAtODcsMjMgKzg3
LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8VCo+KG51bGxwdHIp
OwogICAgIH0KICAgICAKLSAgICBUJiBhdChOb2RlKiBub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246
OktpbmQga2luZCkKKyAgICBBTFdBWVNfSU5MSU5FIFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93
UHJvamVjdGlvbjo6S2luZCBraW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGF0KG5vZGUtPmlu
ZGV4KCksIGtpbmQpOwogICAgIH0KICAgICAKLSAgICBUJiBhdChOb2RlRmxvd1Byb2plY3Rpb24g
cHJvamVjdGlvbikKKyAgICBBTFdBWVNfSU5MSU5FIFQmIGF0KE5vZGVGbG93UHJvamVjdGlvbiBw
cm9qZWN0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGF0KHByb2plY3Rpb24ubm9kZSgpLCBw
cm9qZWN0aW9uLmtpbmQoKSk7CiAgICAgfQogICAgIAotICAgIGNvbnN0IFQmIGF0KHVuc2lnbmVk
IG5vZGVJbmRleCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0
KG5vZGVJbmRleCk7IH0KLSAgICBjb25zdCBUJiBhdChOb2RlKiBub2RlKSBjb25zdCB7IHJldHVy
biBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZSk7IH0KLSAgICBjb25zdCBUJiBh
dFNoYWRvdyh1bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxv
d01hcCo+KHRoaXMpLT5hdFNoYWRvdyhub2RlSW5kZXgpOyB9Ci0gICAgY29uc3QgVCYgYXRTaGFk
b3coTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcykt
PmF0U2hhZG93KG5vZGUpOyB9Ci0gICAgY29uc3QgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4LCBO
b2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxG
bG93TWFwKj4odGhpcyktPmF0KG5vZGVJbmRleCwga2luZCk7IH0KLSAgICBjb25zdCBUJiBhdChO
b2RlKiBub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGUsIGtpbmQpOyB9Ci0gICAgY29uc3Qg
VCYgYXQoTm9kZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pIGNvbnN0IHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChwcm9qZWN0aW9uKTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgY29uc3QgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9j
YXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZUluZGV4KTsgfQorICAgIEFMV0FZU19JTkxJTkUg
Y29uc3QgVCYgYXQoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFw
Kj4odGhpcyktPmF0KG5vZGUpOyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUJiBhdFNoYWRv
dyh1bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+
KHRoaXMpLT5hdFNoYWRvdyhub2RlSW5kZXgpOyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBU
JiBhdFNoYWRvdyhOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAq
Pih0aGlzKS0+YXRTaGFkb3cobm9kZSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQmIGF0
KHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlSW5kZXgsIGtpbmQp
OyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUJiBhdChOb2RlKiBub2RlLCBOb2RlRmxvd1By
b2plY3Rpb246OktpbmQga2luZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4o
dGhpcyktPmF0KG5vZGUsIGtpbmQpOyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUJiBhdChO
b2RlRmxvd1Byb2plY3Rpb24gcHJvamVjdGlvbikgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxG
bG93TWFwKj4odGhpcyktPmF0KHByb2plY3Rpb24pOyB9CiAgICAgCiBwcml2YXRlOgogICAgIEdy
YXBoJiBtX2dyYXBoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDIzMTMzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNjAsMjAgKzYwLDIyIEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmJl
Z2luQmFzaWNCbG8KICAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCkgPT0gYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCkpOwogCiAgICAgbV9hYnN0cmFjdFZhbHVlcy5yZXNpemUoKTsKKyAgICBtX2VmZmVjdEVwb2No
ID0gQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6Zmlyc3QoYmFzaWNCbG9jay0+Y2ZhU3RydWN0
dXJlQ2xvYmJlclN0YXRlQXRIZWFkKTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJhc2ljQmxvY2stPnNpemUoKTsgaSsrKSB7CiAgICAgICAgIE5vZGVGbG93UHJvamVjdGlvbjo6
Zm9yRWFjaCgKICAgICAgICAgICAgIGJhc2ljQmxvY2stPmF0KGkpLCBbJl0gKE5vZGVGbG93UHJv
amVjdGlvbiBub2RlUHJvamVjdGlvbikgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZVBy
b2plY3Rpb24pLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgY2xlYXJGb3JOb2RlKG5vZGVQcm9q
ZWN0aW9uKTsKICAgICAgICAgICAgIH0pOwogICAgIH0KIAotICAgIG1fdmFyaWFibGVzID0gYmFz
aWNCbG9jay0+dmFsdWVzQXRIZWFkOworICAgIGZvciAoc2l6ZV90IGkgPSBtX3ZhcmlhYmxlcy5z
aXplKCk7IGktLTspCisgICAgICAgIHZhcmlhYmxlQXQoaSkgPSBiYXNpY0Jsb2NrLT52YWx1ZXNB
dEhlYWRbaV07CiAgICAgCiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewogICAgICAg
ICBmb3IgKE5vZGVBYnN0cmFjdFZhbHVlUGFpciYgZW50cnkgOiBiYXNpY0Jsb2NrLT5zc2EtPnZh
bHVlc0F0SGVhZCkgewogICAgICAgICAgICAgaWYgKGVudHJ5Lm5vZGUuaXNTdGlsbFZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShlbnRyeS5ub2RlKSA9IGVudHJ5LnZhbHVlOworICAg
ICAgICAgICAgICAgIHNldEZvck5vZGUoZW50cnkubm9kZSwgZW50cnkudmFsdWUpOwogICAgICAg
ICB9CiAgICAgfQogICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKQEAg
LTIwMSwxOSArMjAzLDE5IEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxv
Y2sKICAgICBjYXNlIFRocmVhZGVkQ1BTOiB7CiAgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50
ID0gMDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRz
KCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9u
ID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7Ci0gICAgICAgICAgICBt
ZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVu
dCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAg
ICAgIG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIHRoaXMtPmFyZ3VtZW50KGFyZ3VtZW50
KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOwogICAgICAgICB9
CiAKICAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewogICAgICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKTsK
LSAgICAgICAgICAgIG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFibGVzLmxv
Y2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAg
ICAgICAgbWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgdGhpcy0+bG9jYWwobG9jYWwpLCBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBTU0E6IHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQotICAgICAgICAgICAgYmxv
Y2stPnZhbHVlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7CisgICAgICAgICAgICBi
bG9jay0+dmFsdWVzQXRUYWlsW2ldLm1lcmdlKHZhcmlhYmxlQXQoaSkpOwogCiAgICAgICAgIGZv
ciAoTm9kZUFic3RyYWN0VmFsdWVQYWlyJiB2YWx1ZUF0VGFpbCA6IGJsb2NrLT5zc2EtPnZhbHVl
c0F0VGFpbCkgewogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWVBdE5vZGUgPSBmb3JO
b2RlKHZhbHVlQXRUYWlsLm5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjMxMzM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NywyMSArNDcsNDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY3Jl
YXRlVmFsdWVGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbikgeyB9CiAgICAgCi0gICAgQWJzdHJh
Y3RWYWx1ZSYgZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKKyAgICBBTFdBWVNfSU5M
SU5FIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCiAgICAg
ewotICAgICAgICByZXR1cm4gbV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKTsKKyAgICAgICAgcmV0
dXJuIGZhc3RGb3J3YXJkKG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSkpOwogICAgIH0KICAgICAK
LSAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkKKyAgICBBTFdBWVNfSU5MSU5F
IEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGZvck5vZGUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKLSAgICBPcGVyYW5kczxBYnN0cmFj
dFZhbHVlPiYgdmFyaWFibGVzKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUs
IFZhbHVlVHlwZSYmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzOwor
ICAgICAgICBtX2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUpID0gc3RkOjpmb3J3YXJkPFZhbHVlVHlw
ZT4odmFsdWUpOwogICAgIH0KICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZvck5vZGUoRWRnZSBlZGdlLCBWYWx1ZVR5cGUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEZvck5vZGUoZWRnZS5ub2RlKCksIHN0ZDo6Zm9y
d2FyZDxWYWx1ZVR5cGU+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBjbGVhckZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAgeworICAgICAg
ICBtX2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUpLmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
Y2xlYXJGb3JOb2RlKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgT3BlcmFuZHM8QWJz
dHJhY3RWYWx1ZT4mIHZhcmlhYmxlc0ZvckRlYnVnZ2luZygpIHsgcmV0dXJuIG1fdmFyaWFibGVz
OyB9CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
dmFyaWFibGVzLm51bWJlck9mQXJndW1lbnRzKCk7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkxv
Y2FscygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGVzLm51bWJlck9mTG9jYWxzKCk7IH0KKyAg
ICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVybiBmYXN0Rm9yd2Fy
ZChtX3ZhcmlhYmxlcy5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIG9w
ZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGZhc3RGb3J3YXJkKG1fdmFy
aWFibGVzLm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6
ZV90IGluZGV4KSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlcy5sb2NhbChpbmRleCkp
OyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgYXJndW1lbnQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBm
YXN0Rm9yd2FyZChtX3ZhcmlhYmxlcy5hcmd1bWVudChpbmRleCkpOyB9CisgICAgQWJzdHJhY3RW
YWx1ZSYgdmFyaWFibGVBdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGZhc3RGb3J3YXJkKG1fdmFy
aWFibGVzW2luZGV4XSk7IH0KKyAgICAKICAgICAvLyBDYWxsIHRoaXMgYmVmb3JlIGJlZ2lubmlu
ZyBDRkEgdG8gaW5pdGlhbGl6ZSB0aGUgYWJzdHJhY3QgdmFsdWVzIG9mCiAgICAgLy8gYXJndW1l
bnRzLCBhbmQgdG8gaW5kaWNhdGUgd2hpY2ggYmxvY2tzIHNob3VsZCBiZSBsaXN0ZWQgZm9yIENG
QQogICAgIC8vIGV4ZWN1dGlvbi4KQEAgLTExOSw2ICsxNDYsMTAgQEAgcHVibGljOgogICAgIC8v
IE1lcmdlVG9TdWNjZXNzb3JzLgogICAgIGJvb2wgbWVyZ2VUb1N1Y2Nlc3NvcnMoQmFzaWNCbG9j
ayopOwogICAgIAorICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXMoKSB7IG1fZWZmZWN0RXBvY2gu
Y2xvYmJlcigpOyB9CisgICAgCisgICAgdm9pZCBvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKSB7
IG1fZWZmZWN0RXBvY2gub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7IH0KKyAgICAKICAgICAv
LyBNZXRob2RzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIEFic3RyYWN0SW50ZXJwcmV0ZXIu
CiAgICAgdm9pZCBzZXRDbG9iYmVyU3RhdGUoQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0
ZSBzdGF0ZSkgeyBtX2Nsb2JiZXJTdGF0ZSA9IHN0YXRlOyB9CiAgICAgdm9pZCBtZXJnZUNsb2Ji
ZXJTdGF0ZShBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlIHN0YXRlKSB7IG1fY2xvYmJl
clN0YXRlID0gbWVyZ2VDbG9iYmVyU3RhdGVzKG1fY2xvYmJlclN0YXRlLCBzdGF0ZSk7IH0KQEAg
LTEzOSw2ICsxNzAsMTIgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBBYnN0cmFj
dFZhbHVlJiBmYXN0Rm9yd2FyZChBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHZhbHVlLmZhc3RGb3J3YXJkVG8obV9lZmZlY3RFcG9jaCk7CisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBtZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUm
IGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKik7CiAKICAgICBz
dGF0aWMgYm9vbCBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0
aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlKiBkZXN0aW5hdGlvbk5vZGUsIE5v
ZGUqIHNvdXJjZU5vZGUpOwpAQCAtMTU0LDYgKzE5MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2lzVmFsaWQ7CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZSBtX2Nsb2JiZXJT
dGF0ZTsKICAgICBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgbV9zdHJ1Y3R1cmVDbG9iYmVyU3RhdGU7
CisgICAgQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBtX2VmZmVjdEVwb2NoOwogICAgIAogICAg
IEJyYW5jaERpcmVjdGlvbiBtX2JyYW5jaERpcmVjdGlvbjsgLy8gVGhpcyBpcyBvbmx5IHNldCBm
b3IgYmxvY2tzIHRoYXQgZW5kIGluIEJyYW5jaCBhbmQgdGhhdCBleGVjdXRlIHRvIGNvbXBsZXRp
b24gKGkuZS4gbV9pc1ZhbGlkID09IHRydWUpLgogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjMxMzM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTkzMiw3ICsxOTMyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcg
dGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8g
Y2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CShyZXZpc2lvbiAyMzEzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2ODUsNyArMTY4NSw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjb21waWxlR2V0U3RhY2soKQogICAgIHsKICAgICAgICAgU3RhY2tBY2Nlc3NE
YXRhKiBkYXRhID0gbV9ub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+bG9jYWwpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5sb2Nh
bCk7CiAgICAgICAgIAogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25j
cmV0ZShkYXRhLT5mb3JtYXQpLCBkYXRhLT5mb3JtYXQpOwogICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgZGF0YS0+Zm9ybWF0ICE9IEZsdXNoZWREb3VibGUsIGRhdGEtPmZvcm1h
dCk7IC8vIFRoaXMganVzdCBoYXBwZW5zIHRvIG5vdCBhcmlzZSBmb3IgR2V0U3RhY2tzLCByaWdo
dCBub3cuIEl0IHdvdWxkIGJlIHRyaXZpYWwgdG8gc3VwcG9ydC4K
</data>
<flag name="commit-queue"
          id="357884"
          type_id="3"
          status="-"
          setter="ews-watchlist"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339661</attachid>
            <date>2018-05-05 18:08:11 -0700</date>
            <delta_ts>2018-05-05 18:09:01 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>117533</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzEzOTYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE4LTA1LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIEFJIHNob3VsZCBoYXZlIE8oMSkgY2xvYmJlcmluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Mjg3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3Mvc2ltcGxl
LWFpLWVmZmVjdC5qczogQWRkZWQuCisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKwog
MjAxOC0wNS0wNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoIHNob3VsZCByZXR1cm4gdHJ1ZSBmb3IgdW5kZWNp
ZGVkIGFycmF5cwpJbmRleDogSlNUZXN0cy9zdHJlc3Mvc2ltcGxlLWFpLWVmZmVjdC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zaW1wbGUtYWktZWZmZWN0LmpzCShub25leGlzdGVu
dCkKKysrIEpTVGVzdHMvc3RyZXNzL3NpbXBsZS1haS1lZmZlY3QuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzOSBAQAordmFyIGRvRWZmZWN0ID0gZmFsc2U7Cit2YXIgZGlkRWZmZWN0ID0g
ZmFsc2U7CisKK2Z1bmN0aW9uIGJhcihvLCBwKQoreworICAgIGlmIChkb0VmZmVjdCkgeworICAg
ICAgICBkZWxldGUgcC5nOworICAgICAgICBwLl9fZGVmaW5lR2V0dGVyX18oImciLCAoKSA9PiB7
CisgICAgICAgICAgICBkaWRFZmZlY3QgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIDQyOwor
ICAgICAgICB9KTsKKyAgICB9Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhv
LCBwKSB7CisgICAgdmFyIHJlc3VsdCA9IG8uZiArIHAuZzsKKyAgICBiYXIobywgcCk7CisgICAg
cmV0dXJuIHJlc3VsdCArIG8uZiArIHAuZzsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIG8g
PSB7ZzogMX07CitvLmggPSAyOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsK
KyAgICB2YXIgcmVzdWx0ID0gZm9vKHtmOiAxfSwge2c6IDN9KTsKKyAgICBpZiAocmVzdWx0ICE9
IDgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBpbiBsb29wOiAiICsgcmVzdWx0
OworfQorCitkb0VmZmVjdCA9IHRydWU7Cit2YXIgcmVzdWx0ID0gZm9vKHtmOiAxfSwge2c6IDN9
KTsKK2lmIChyZXN1bHQgIT0gNDcpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVu
ZDogIiArIHJlc3VsdDsKK2lmICghZGlkRWZmZWN0KQorICAgIHRocm93ICJFcnJvcjogZGlkIG5v
dCBkbyBlZmZlY3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzEz
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTEgQEAKKzIwMTgtMDUtMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KKworICAgICAgICBERkcgQUkgc2hvdWxkIGhhdmUgTygxKSBjbG9iYmVyaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyODcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4
ZXMgYW4gb2xkIHNjYWxhYmlsaXR5IHByb2JlbSBpbiBBSS4gUHJldmlvdXNseSwgaWYgd2UgZGlk
IGNsb2JiZXJXb3JsZCgpLCB0aGVuIHdlCisgICAgICAgIHdvdWxkIHRyYXZlcnNlIGFsbCBvZiB0
aGUgc3RhdGUgYXZhaWxhYmxlIHRvIHRoZSBBSSBhdCB0aGF0IHRpbWUgYW5kIGNsb2JiZXIgaXQu
CisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZXMgY2xvYmJlcldvcmxkKCkgdG8gYmUgTygx
KS4gSXQganVzdCBkb2VzIHNvbWUgbWF0aCB0byBhIGNsb2JiZXIgZXBvY2guCisgICAgICAgIAor
ICAgICAgICBTYWRseSwgdGhpcyBpc24ndCBhIHNwZWVkLXVwIG9uIG15IGNvbXBpbGUgdGltZSBi
ZW5jaG1hcmtzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6
OmZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OnNldEZv
ck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmNsZWFyRm9y
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6dmFyaWFibGVz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyV29ybGQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpmb3JBbGxWYWx1ZXMp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyk6
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0VmFsdWU6OmZhc3RGb3J3YXJkVG9TbG93KToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZhc3RGb3J3
YXJkVG8pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1
cmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvYnNl
cnZlSW52YWxpZGF0aW9uUG9pbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6Om9ic2VydmVJbnZhbGlkYXRpb25Qb2ludEZvcik6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpkdW1wIGNvbnN0KToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpBYnN0cmFjdFZhbHVlQ2xvYmJl
ckVwb2NoKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpm
aXJzdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6Y2xv
YmJlcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6b2Jz
ZXJ2ZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
Q2xvYmJlckVwb2NoOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpzdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2g6OmNsb2Ji
ZXJFcG9jaCBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpzZXRGb3JOb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpjbGVhckZvck5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6Om51bWJlck9mQXJndW1lbnRzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpudW1iZXJPZkxv
Y2FscyBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6bG9jYWwpOgor
ICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmFyZ3VtZW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3RydWN0dXJlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b2JzZXJ2ZUludmFsaWRhdGlv
blBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjp2YXJpYWJs
ZXMpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q0ZBUGhhc2U6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgICogZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRp
bmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR0Zsb3dNYXAuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01h
cDo6YXRTaGFkb3cpOgorICAgICAgICAoSlNDOjpERkc6OkZsb3dNYXA6OmF0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjphdFNoYWRvdyBjb25zdCk6CisgICAgICAgICogZGZn
L0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNl
QWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayk6CisgICAgICAgICogZGZnL0RGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3Rh
dGU6OmZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpz
ZXRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6Y2xl
YXJGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6dmFy
aWFibGVzRm9yRGVidWdnaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZTo6bnVtYmVyT2ZBcmd1bWVudHMgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxh
Y2VBYnN0cmFjdFN0YXRlOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Oklu
UGxhY2VBYnN0cmFjdFN0YXRlOjpsb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFi
c3RyYWN0U3RhdGU6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJh
Y3RTdGF0ZTo6dmFyaWFibGVBdCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0
U3RhdGU6OmNsb2JiZXJTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJz
dHJhY3RTdGF0ZTo6b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6REZH
OjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZmFzdEZvcndhcmQpOgorICAgICAgICAoSlNDOjpERkc6
OkluUGxhY2VBYnN0cmFjdFN0YXRlOjp2YXJpYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRTdGFjayk6CisKIDIw
MTgtMDUtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtl
IGl0IGVhc3kgdG8gbG9nIGNvbXBpbGUgdGltZXMgZm9yIGFsbCBvcHRpbWl6aW5nIHRpZXJzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMzEzMzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw2ICsy
NzQsNyBAQCBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAogZGZnL0RGR0Fic3RyYWN0SGVhcC5j
cHAKIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlLmNwcAogZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuY3BwCitkZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5jcHAKIGRm
Zy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCiBkZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAogZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0
aW9uUGhhc2UuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjMxMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw2ICszMTksNyBAQAogCQkw
RjREOEM3ODFGQ0EzQ0ZBMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4Qzc3MUZDQTND
RjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMx
MSAvKiBBaXJGaXhPYnZpb3VzU3BpbGxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91
c1NwaWxscy5oICovOyB9OwogCQkwRjRGMTFFODIwOUJDREFCMDA3MDk2NTQgLyogQ29tcGlsZXJU
aW1pbmdTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0RjExRTYyMDlCQ0RBMTAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCAqLzsg
fTsKKwkJMEY0RjExRUIyMDlENDI2NjAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9iYmVy
RXBvY2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NEYxMUVBMjA5RDQyNjMwMDcwOTY1NCAvKiBERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmgg
Ki87IH07CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi87IH07CiAJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0
QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4
NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEY4MjhDMUUzMUI5NzYw
MDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyOEExRTMxQjk3MTAw
NzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBA
IC0yMzEwLDYgKzIzMTEsOCBAQAogCQkwRjRERTFEMDFDNEQ3NjRCMDA0RDZDMTEgLyogQjNPcmln
aW5EdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2lu
RHVtcC5jcHA7IHBhdGggPSBiMy9CM09yaWdpbkR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjRGMTFFNjIwOUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29w
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21waWxlclRpbWluZ1Njb3Bl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYxMUU3MjA5QkNEQTEwMDcwOTY1
NCAvKiBDb21waWxlclRpbWluZ1Njb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENvbXBpbGVyVGltaW5nU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjRGMTFFOTIwOUQ0MjYzMDA3MDk2NTQgLyogREZHQWJzdHJhY3RWYWx1ZUNsb2Ji
ZXJFcG9jaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0
cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlQ2xv
YmJlckVwb2NoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RjExRUEyMDlE
NDI2MzAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oOyBw
YXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgcGF0
aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBw
YXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzExNCw2ICs3MTE3LDggQEAKIAkJ
CQlBNzA0RDhGRjE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaCAqLywKIAkJCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1
ZS5jcHAgKi8sCiAJCQkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFs
dWUuaCAqLywKKwkJCQkwRjRGMTFFOTIwOUQ0MjYzMDA3MDk2NTQgLyogREZHQWJzdHJhY3RWYWx1
ZUNsb2JiZXJFcG9jaC5jcHAgKi8sCisJCQkJMEY0RjExRUEyMDlENDI2MzAwNzA5NjU0IC8qIERG
R0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaCAqLywKIAkJCQkwRkQzRTNGRjFCNjE4QUFGMDBD
ODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCAq
LywKIAkJCQkwRkQzRTQwMDFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmggKi8sCiAJCQkJMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlG
IC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8sCkBAIC05MDQwLDYgKzkw
NDUsNyBAQAogCQkJCUE1MTNFNUMyMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0
SG9zdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjgxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjkxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RjExRUIy
MDlENDI2NjAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI2NkY3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNl
SklULmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4MTFCODQyOUE0MDA0MTM4NTYgLyogSlNJ
bnRlcm5hbFByb21pc2UuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDIzMTMzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyAr
MjQ1LDcgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICAvLyBUaGUgZmlyc3QgbV9udW1B
cmd1bWVudHMgb2YgbV92YWx1ZXMgYXJlIGFyZ3VtZW50cywgdGhlIHJlc3QgYXJlIGxvY2Fscy4K
LSAgICBWZWN0b3I8VCwgMjQ+IG1fdmFsdWVzOworICAgIFZlY3RvcjxULCAyNCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+IG1fdmFsdWVzOwogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzOwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVyLmgJKHJldmlzaW9uIDIzMTMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMTkgKzQx
LDgwIEBAIHB1YmxpYzoKICAgICBBYnN0cmFjdEludGVycHJldGVyKEdyYXBoJiwgQWJzdHJhY3RT
dGF0ZVR5cGUmKTsKICAgICB+QWJzdHJhY3RJbnRlcnByZXRlcigpOwogICAgIAotICAgIEFic3Ry
YWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAgQUxXQVlTX0lO
TElORSBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fc3RhdGUuZm9yTm9kZShub2RlKTsKICAgICB9CiAgICAgCi0g
ICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVkZ2UpCisgICAgQUxXQVlTX0lOTElORSBB
YnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIHJldHVybiBm
b3JOb2RlKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAgCi0gICAgT3BlcmFuZHM8QWJzdHJhY3RW
YWx1ZT4mIHZhcmlhYmxlcygpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyRm9yTm9kZShO
b2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0YXRlLnZh
cmlhYmxlcygpOworICAgICAgICBtX3N0YXRlLmNsZWFyRm9yTm9kZShub2RlKTsKKyAgICB9Cisg
ICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyRm9yTm9kZShFZGdlIGVkZ2UpCisgICAg
eworICAgICAgICBjbGVhckZvck5vZGUoZWRnZS5ub2RlKCkpOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0Rm9y
Tm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQor
ICAgIHsKKyAgICAgICAgbV9zdGF0ZS5zZXRGb3JOb2RlKG5vZGUsIHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0Rm9yTm9kZShFZGdlIGVkZ2Us
IEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHNldEZvck5vZGUoZWRn
ZS5ub2RlKCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0VHlwZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUsIEFyZ3VtZW50cyYm
Li4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIG1fc3RhdGUuc2V0VHlwZUZvck5vZGUobm9k
ZSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXRUeXBlRm9yTm9kZShFZGdlIGVkZ2UsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7
CisgICAgICAgIHNldFR5cGVGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8QXJndW1l
bnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXROb25DZWxsVHlwZUZvck5v
ZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAg
ICB7CisgICAgICAgIG1fc3RhdGUuc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIHN0ZDo6Zm9y
d2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0Tm9uQ2VsbFR5
cGVGb3JOb2RlKEVkZ2UgZWRnZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8QXJn
dW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIG1ha2VCeXRlY29kZVRvcEZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAg
eworICAgICAgICBtX3N0YXRlLm1ha2VCeXRlY29kZVRvcEZvck5vZGUobm9kZSk7CisgICAgfQor
ICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYWtlQnl0ZWNvZGVUb3BGb3JOb2RlKEVkZ2Ug
ZWRnZSkKKyAgICB7CisgICAgICAgIG1ha2VCeXRlY29kZVRvcEZvck5vZGUoZWRnZS5ub2RlKCkp
OworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFrZUhlYXBUb3BGb3JOb2Rl
KE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQorICAgIHsKKyAgICAgICAgbV9zdGF0ZS5tYWtlSGVh
cFRvcEZvck5vZGUobm9kZSk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBt
YWtlSGVhcFRvcEZvck5vZGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbWFrZUhlYXBUb3BG
b3JOb2RlKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBuZWVkc1R5cGVDaGVj
ayhOb2RlKiBub2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gpCkBAIC0xNDks
MTMgKzIxMCwxMyBAQCBwdWJsaWM6CiAgICAgUGhpQ2hpbGRyZW4qIHBoaUNoaWxkcmVuKCkgeyBy
ZXR1cm4gbV9waGlDaGlsZHJlbi5nZXQoKTsgfQogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIGNs
b2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAg
ICB2b2lkIGNsb2JiZXJXb3JsZCgpOwogICAgIHZvaWQgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JBbGxWYWx1
ZXModW5zaWduZWQgaW5kZXhJbkJsb2NrLCBGdW5jdG9yJik7CiAgICAgCi0gICAgdm9pZCBjbG9i
YmVyU3RydWN0dXJlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIHZvaWQgY2xvYmJlclN0
cnVjdHVyZXMoKTsKICAgICB2b2lkIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAgIAog
ICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb24odW5zaWduZWQgaW5kZXhJbkJsb2NrLCBSZWdpc3Rl
cmVkU3RydWN0dXJlIGZyb20sIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgdG8pOwpAQCAtMTkwLDcgKzI1
MSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCB2ZXJpZnlFZGdlKE5vZGUqLCBFZGdlKTsK
ICAgICB2b2lkIHZlcmlmeUVkZ2VzKE5vZGUqKTsKLSAgICB2b2lkIGV4ZWN1dGVEb3VibGVVbmFy
eU9wRWZmZWN0cyhOb2RlKiwgdW5zaWduZWQgY2xvYmJlckxpbWl0LCBkb3VibGUoKmVxdWl2YWxl
bnRGdW5jdGlvbikoZG91YmxlKSk7CisgICAgdm9pZCBleGVjdXRlRG91YmxlVW5hcnlPcEVmZmVj
dHMoTm9kZSosIGRvdWJsZSgqZXF1aXZhbGVudEZ1bmN0aW9uKShkb3VibGUpKTsKICAgICAKICAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEdyYXBoJiBtX2dyYXBoOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkocmV2aXNpb24gMjMxMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjcsNyArMjI3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICBjYXNlIExhenlKU1ZhbHVlOjpTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAgICAgICAg
IGNhc2UgTGF6eUpTVmFsdWU6Oktub3duU3RyaW5nSW1wbDoKICAgICAgICAgY2FzZSBMYXp5SlNW
YWx1ZTo6TmV3U3RyaW5nSW1wbDoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSht
X2dyYXBoLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNw
ZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CkBAIC0yMzUsNyArMjM1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogCiAgICAgY2FzZSBJZGVudGl0eVdpdGhQcm9maWxlOgogICAgIGNhc2UgSWRlbnRpdHk6
IHsKLSAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAg
aWYgKGZvck5vZGUobm9kZSkudmFsdWUoKSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjQzLDM5ICsyNDMsMzkgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNl
IEV4dHJhY3RDYXRjaExvY2FsOgogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6IHsKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlQnl0ZWNvZGVUb3AoKTsKKyAgICAgICAgbWFrZUJ5dGVj
b2RlVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAg
CiAgICAgY2FzZSBHZXRMb2NhbDogewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0
cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKS5vZmZzZXQoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUg
PSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsK
ICAgICAgICAgLy8gVGhlIHZhbHVlIGluIHRoZSBsb2NhbCBzaG91bGQgYWxyZWFkeSBiZSBjaGVj
a2VkLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhbHVlLmlzVHlwZSh0eXBl
RmlsdGVyRm9yKHZhcmlhYmxlQWNjZXNzRGF0YS0+Zmx1c2hGb3JtYXQoKSkpKTsKICAgICAgICAg
aWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRz
KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIHNldEZvck5v
ZGUobm9kZSwgdmFsdWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLnZh
cmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZh
bHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKICAgICAgICAgLy8gVGhlIHZhbHVl
IGluIHRoZSBsb2NhbCBzaG91bGQgYWxyZWFkeSBiZSBjaGVja2VkLgogICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG5vZGUsIHZhbHVlLmlzVHlwZSh0eXBlRmlsdGVyRm9yKGRhdGEtPmZvcm1h
dCkpKTsKICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNl
dEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7Cisg
ICAgICAgIHNldEZvck5vZGUobm9kZSwgdmFsdWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMo
KS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6
IHsKLSAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNz
RGF0YSgpLT5sb2NhbCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0
ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTI5NiwyMCAr
Mjk2LDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNl
dEFyZ3VtZW50IG1lYW5zIHRoYXQgc29tZW9uZSBzZXQKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50
IHZhbHVlcyBvdXQtb2YtYmFuZCwgYW5kIGN1cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0
aW5nIHRvIGEKICAgICAgICAgLy8gbm9uLWNsZWFyIHZhbHVlLgotICAgICAgICBBU1NFUlQoIW1f
c3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAg
ICAgICBBU1NFUlQoIW1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6
IHsKICAgICAgICAgdW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gbm9kZS0+ZW50cnlwb2ludElu
ZGV4KCk7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxGbHVzaEZvcm1hdD4mIGFyZ3VtZW50Rm9ybWF0
cyA9IG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYXJndW1lbnRGb3JtYXRzLnNp
emUoKTsgKythcmd1bWVudCkgewotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBt
X3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgICAg
ICBzd2l0Y2ggKGFyZ3VtZW50Rm9ybWF0c1thcmd1bWVudF0pIHsKICAgICAgICAgICAgIGNhc2Ug
Rmx1c2hlZEludDMyOgotICAgICAgICAgICAgICAgIHZhbHVlLnNldFR5cGUoU3BlY0ludDMyT25s
eSk7CisgICAgICAgICAgICAgICAgdmFsdWUuc2V0Tm9uQ2VsbFR5cGUoU3BlY0ludDMyT25seSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFu
OgotICAgICAgICAgICAgICAgIHZhbHVlLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICAg
ICAgICAgIHZhbHVlLnNldE5vbkNlbGxUeXBlKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CiAgICAgICAgICAgICAgICAg
dmFsdWUuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7CkBAIC0zMzIsNyArMzMyLDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMDcxCiAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRm9y
d2FyZFZhcmFyZ3M6CiAgICAgICAgICAgICBicmVhazsKQEAgLTM0MSw5ICszNDEsOSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFy
YXJnc0RhdGEoKTsKLSAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEtPmNv
dW50KS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0
YS0+Y291bnQpLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBkYXRhLT5saW1pdCAtIDE7IGktLTspCi0gICAgICAgICAgICBtX3N0YXRlLnZh
cmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgp
OworICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSku
bWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC0z
NTQsOCArMzU0LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDogewogICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgbm9kZS0+Y2hpbGQyKCku
dXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBjbG9iYmVy
V29ybGQoKTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50
MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTM5MywxMSArMzkz
LDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gQml0QW5kCiAgICAgICAgICAgICAmJiAoaXNCb29sSW50MzJTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpIHx8CiAgICAgICAgICAgICAg
ICAgaXNCb29sSW50MzJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUp
KSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sSW50MzIpOwor
ICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sSW50MzIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JO
b2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IApAQCAtNDEwLDcgKzQxMCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KG1hY2hpbmVJbnQpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoU3BlY0FueUludCk7CisgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNBbnlJbnQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzSW50MzIoKSkgewpAQCAtNDE4LDcg
KzQxOCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcih2YWx1ZSkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNBbnlJbnRBc0RvdWJsZSk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0FueUludEFzRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc0ludDMyKCkpIHsKQEAgLTQyOCw3
ICs0MjgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBzZXROb25DZWxsVHlw
ZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCkBAIC00NjIsNyArNDYyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTQ4NywxMSArNDg3LDExIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbEludDMy
KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbEludDMy
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBl
Rm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTUyNSw3ICs1MjUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSh0
eXBlKTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIHR5cGUpOwogICAgICAg
ICBmb3JOb2RlKG5vZGUpLmZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihtX2dyYXBoLCBub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNTM3LDcgKzUzNyw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0FueUludCk7Cisg
ICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQW55SW50KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTU0OCwyMCArNTQ4LDIwIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNEb3VibGVJbXB1cmVOYU4pOworICAg
ICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUg
JiB+U3BlY0RvdWJsZUltcHVyZU5hTik7CiAgICAgICAgIGZvck5vZGUobm9kZSkuZml4VHlwZUZv
clJlcHJlc2VudGF0aW9uKG1fZ3JhcGgsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgVmFsdWVBZGQ6IHsKICAgICAgICAgQVNTRVJUKG5vZGUtPmJpbmFy
eVVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKG1fZ3JhcGgsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBj
bG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyB8
IFNwZWNCeXRlY29kZU51bWJlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2Ug
U3RyQ2F0OiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3Ry
aW5nKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC01ODEsNyArNTgxLDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBJbnQ1MlJlcFVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQu
aXNBbnlJbnQoKSAmJiByaWdodC5pc0FueUludCgpKSB7CkBAIC01OTEsMTQgKzU5MSwxNCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQW55SW50KTsKKyAgICAgICAgICAgIHNldE5vbkNl
bGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQW55SW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYm
IGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwganNEb3VibGVOdW1iZXIobGVmdC5hc051bWJlcigpICsgcmlnaHQu
YXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKAorICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5
cGVGb3JOb2RlKG5vZGUsIAogICAgICAgICAgICAgICAgIHR5cGVPZkRvdWJsZVN1bSgKICAgICAg
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlLCBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5tX3R5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjExLDggKzYx
MSw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
CiAgICAgY2FzZSBBdG9taWNzSXNMb2NrRnJlZTogewogICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpICE9IEludDMyVXNlKQotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNCb29sSW50MzIpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAg
ICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbEludDMyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC02MzYsMTAgKzYzNiwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAt
Njc0LDE2ICs2NzQsMTYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAg
ICAgIGlmIChudW1iZXJPZlJlbW92ZWRDaGlsZHJlbiA9PSBudW1iZXJPZkNoaWxkcmVuKSB7CiAg
ICAgICAgICAgICAgICAgLy8gUHJvcGFnYXRlIHRoZSBsYXN0IGNoaWxkLiBUaGlzIGlzIHRoZSB3
YXkgdGFrZW4gaW4gdGhlIGNvbnN0YW50IGZvbGRpbmcgcGhhc2UuCi0gICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGRyZW4uY2hpbGQobnVtYmVyT2ZDaGls
ZHJlbiAtIDEpKTsKKyAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUobm9k
ZS0+Y2hpbGRyZW4uY2hpbGQobnVtYmVyT2ZDaGlsZHJlbiAtIDEpKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoKG51bWJlck9mUmVtb3Zl
ZENoaWxkcmVuICsgMSkgPT0gbnVtYmVyT2ZDaGlsZHJlbikgewogICAgICAgICAgICAgICAgIEFT
U0VSVChub25FbXB0eUluZGV4KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9y
Tm9kZShub2RlLT5jaGlsZHJlbi5jaGlsZChub25FbXB0eUluZGV4LnZhbHVlKCkpKTsKKyAgICAg
ICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGRyZW4uY2hpbGQo
bm9uRW1wdHlJbmRleC52YWx1ZSgpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1f
dm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3Zt
LnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
ICAgIApAQCAtNzAzLDcgKzcwMyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQz
Mk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQz
Mk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CiAg
ICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzQW55SW50KCkgJiYgcmlnaHQu
aXNBbnlJbnQoKSkgewpAQCAtNzEzLDIwICs3MTMsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0FueUludCk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwg
U3BlY0FueUludCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3VibGVSZXBV
c2U6CiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYg
cmlnaHQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpz
RG91YmxlTnVtYmVyKGxlZnQuYXNOdW1iZXIoKSAtIHJpZ2h0LmFzTnVtYmVyKCkpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0VHlwZSgKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCAKICAg
ICAgICAgICAgICAgICB0eXBlT2ZEb3VibGVEaWZmZXJlbmNlKAogICAgICAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUsIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
Lm1fdHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZToK
LSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0J5
dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICAgICAg
c2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC03NTUsNyArNzU1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9k
ZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbnQ1
MlJlcFVzZToKICAgICAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc0FueUludCgpKSB7CkBA
IC03NzAsMjEgKzc3MCwyMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQW55SW50KTsK
KyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQW55SW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgICAg
IGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29u
c3RhbnQobm9kZSwganNEb3VibGVOdW1iZXIoLWNoaWxkLmFzTnVtYmVyKCkpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZSgKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCAKICAgICAg
ICAgICAgICAgICB0eXBlT2ZEb3VibGVOZWdhdGlvbigKICAgICAgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSk7Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCeXRlY29k
ZU51bWJlcik7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC04MDksNyArODA5LDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBzZXROb25D
ZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0
ICYmIGxlZnQuaXNBbnlJbnQoKSAmJiByaWdodC5pc0FueUludCgpKSB7CkBAIC04MjIsMjAgKzgy
MiwyMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQW55SW50KTsKKyAgICAgICAgICAg
IHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQW55SW50KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYm
IHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNEb3VibGVOdW1iZXIobGVmdC5hc051bWJlcigp
ICogcmlnaHQuYXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKAorICAgICAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIAogICAgICAgICAgICAgICAgIHR5cGVPZkRvdWJsZVBy
b2R1Y3QoCiAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSwgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgY2xv
YmJlcldvcmxkKCk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTg2MSwyMCArODYx
LDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAgICAgICAgICAgaWYgKGxl
ZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAg
ICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihsZWZ0LmFzTnVt
YmVyKCkgLyByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoCisgICAgICAgICAg
ICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgCiAgICAgICAgICAgICAgICAgdHlwZU9mRG91
YmxlUXVvdGllbnQoCiAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fdHlwZSwgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9k
ZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTkwMCwx
NCArOTAwLDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAg
ICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAgICAgICAgICAg
aWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkp
IHsKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihmbW9k
KGxlZnQuYXNOdW1iZXIoKSwgcmlnaHQuYXNOdW1iZXIoKSkpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSgK
KyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCAKICAgICAgICAgICAgICAg
ICB0eXBlT2ZEb3VibGVCaW5hcnlPcCgKICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtOTI3LDcgKzkyNyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBq
c051bWJlcihzdGQ6Om1pbihsZWZ0LmFzSW50MzIoKSwgcmlnaHQuYXNJbnQzMigpKSkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgRG91YmxlUmVwVXNlOgogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKQEAgLTkzNiw3ICs5MzYsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwganNEb3VibGVOdW1iZXIoYSA8IGIgPyBhIDogKGIgPD0gYSA/IGIg
OiBhICsgYikpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSgKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBl
Rm9yTm9kZShub2RlLCAKICAgICAgICAgICAgICAgICB0eXBlT2ZEb3VibGVNaW5NYXgoCiAgICAg
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTk1Niw3ICs5
NTYsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoc3RkOjptYXgobGVmdC5hc0ludDMy
KCksIHJpZ2h0LmFzSW50MzIoKSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAg
ICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJl
cigpKSB7CkBAIC05NjUsNyArOTY1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzRG91YmxlTnVt
YmVyKGEgPiBiID8gYSA6IChiID49IGEgPyBiIDogYSArIGIpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgCiAgICAgICAgICAgICAg
ICAgdHlwZU9mRG91YmxlTWluTWF4KAogICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5tX3R5cGUsIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC05ODcsMTkgKzk4NywxOSBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShu
b2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERv
dWJsZVJlcFVzZToKICAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gbnVtYmVy
ID0gY2hpbGQudG9OdW1iZXJGcm9tUHJpbWl0aXZlKCkpIHsKICAgICAgICAgICAgICAgICBzZXRD
b25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihmYWJzKCpudW1iZXIpKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUodHlwZU9mRG91YmxlQWJzKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwor
ICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIHR5cGVPZkRvdWJsZUFicyhm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKTsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNs
b2JiZXJMaW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Z1bGxO
dW1iZXIpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICBzZXROb25D
ZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Z1bGxOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0xMDE5LDEyICsxMDE5LDEyIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUodHlwZU9mRG91YmxlUG93KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9k
ZShub2RlLCB0eXBlT2ZEb3VibGVQb3coZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlLCBm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgY2FzZSBBcml0aFJhbmRvbTogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
bV9ncmFwaCwgU3BlY0RvdWJsZVJlYWwpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUo
bm9kZSwgU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTEwNzMs
MjcgKzEwNzMsMjcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICB9CiAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gRG91Ymxl
UmVwVXNlKSB7CiAgICAgICAgICAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG5vZGUtPmFyaXRoUm91
bmRpbmdNb2RlKCkpKQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
SW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwg
U3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gRG91YmxlUmVwVXNlKQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZSh0eXBlT2ZEb3VibGVSb3VuZGluZyhmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUp
KTsKKyAgICAgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgdHlwZU9mRG91
YmxlUm91bmRpbmcoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpOwot
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxp
bWl0KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRnVsbE51bWJlcik7
CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBl
Rm9yTm9kZShub2RlLCBTcGVjRnVsbE51bWJlcik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcml0aFNxcnQ6Ci0gICAgICAgIGV4ZWN1
dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhub2RlLCBjbG9iYmVyTGltaXQsIHNxcnQpOworICAgICAg
ICBleGVjdXRlRG91YmxlVW5hcnlPcEVmZmVjdHMobm9kZSwgc3FydCk7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBBcml0aEZSb3VuZDoKLSAgICAgICAgZXhlY3V0ZURvdWJsZVVuYXJ5T3BF
ZmZlY3RzKG5vZGUsIGNsb2JiZXJMaW1pdCwgW10oZG91YmxlIHZhbHVlKSAtPiBkb3VibGUgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKTsgfSk7CisgICAgICAgIGV4ZWN1dGVEb3Vi
bGVVbmFyeU9wRWZmZWN0cyhub2RlLCBbXShkb3VibGUgdmFsdWUpIC0+IGRvdWJsZSB7IHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpOyB9KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAogICAgIGNhc2UgQXJpdGhVbmFyeToKLSAgICAgICAgZXhlY3V0ZURvdWJsZVVuYXJ5T3BFZmZl
Y3RzKG5vZGUsIGNsb2JiZXJMaW1pdCwgYXJpdGhVbmFyeUZ1bmN0aW9uKG5vZGUtPmFyaXRoVW5h
cnlUeXBlKCkpKTsKKyAgICAgICAgZXhlY3V0ZURvdWJsZVVuYXJ5T3BFZmZlY3RzKG5vZGUsIGFy
aXRoVW5hcnlGdW5jdGlvbihub2RlLT5hcml0aFVuYXJ5VHlwZSgpKSk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgY2FzZSBMb2dpY2FsTm90OiB7CkBAIC0xMTA1LDcgKzExMDUs
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAg
ICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4odHJ1ZSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3Bl
Y0Jvb2xlYW4pOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNC
b29sZWFuKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpA
QCAtMTEyMiw3ICsxMTIyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKQEAgLTExMzksNTEgKzExMzksNTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9k
ZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBTdHJpbmdTbGljZTog
ewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyk7Cisg
ICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBjYXNlIFRvTG93ZXJDYXNlOiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShtX2dyYXBoLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9k
ZSwgU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTG9hZEtl
eUZyb21NYXBCdWNrZXQ6CiAgICAgY2FzZSBMb2FkVmFsdWVGcm9tTWFwQnVja2V0OgogICAgIGNh
c2UgRXh0cmFjdFZhbHVlRnJvbVdlYWtNYXBHZXQ6Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZUhlYXBUb3AoKTsKKyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgR2V0TWFwQnVja2V0OgogICAgIGNhc2UgR2V0TWFwQnVja2V0SGVh
ZDoKICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2Up
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX3ZtLmhhc2hNYXBCdWNr
ZXRNYXBTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3Zt
Lmhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU2V0T2JqZWN0VXNlKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fdm0uaGFzaE1hcEJ1Y2tl
dFNldFN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0u
aGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIEdldE1hcEJ1Y2tldE5leHQ6CiAgICAgICAgIGlmIChub2RlLT5idWNr
ZXRPd25lclR5cGUoKSA9PSBCdWNrZXRPd25lclR5cGU6Ok1hcCkKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fdm0uaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZS5nZXQo
KSk7CisgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uaGFzaE1hcEJ1Y2tldE1hcFN0
cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PmJ1Y2tldE93bmVyVHlwZSgpID09IEJ1Y2tldE93bmVyVHlwZTo6U2V0KTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fdm0uaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVy
ZS5nZXQoKSk7CisgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uaGFzaE1hcEJ1Y2tl
dFNldFN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIFNldEFkZDoKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV92bS5oYXNo
TWFwQnVja2V0U2V0U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBt
X3ZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgTWFwU2V0OgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX3Zt
Lmhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBzZXRGb3JOb2RlKG5v
ZGUsIG1fdm0uaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBXZWFrU2V0QWRkOgpAQCAtMTE5MSw3ICsxMTkxLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgV2Vha01hcEdldDoKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlQnl0ZWNvZGVUb3AoKTsK
KyAgICAgICAgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAK
ICAgICBjYXNlIElzRW1wdHk6CkBAIC0xNDQxLDcgKzE0NDEsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlmIChjb25zdGFudFdhc1NldCkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNCb29sZWFuKTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNC
b29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xNDkxLDcgKzE0OTEsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCi0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBT
cGVjU3RyaW5nSWRlbnQpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5n
SWRlbnQpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTE1MzIsNyArMTUzMiw3IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShTcGVjQm9vbGVhbik7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVj
Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTY2OCw4ICsxNjY4LDggQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKGlzQ2xvYmJlcmluZykKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAg
c2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCkBAIC0xNzA2LDcgKzE3MDYsNyBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKICAgICAgICAgICAgIGlmIChpc05vblN0cmlu
Z0NlbGxDb25zdGFudChsZWZ0KSB8fCBpc05vblN0cmluZ0NlbGxDb25zdGFudChyaWdodCkpIHsK
ICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgICAg
ICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTczNyw3ICsxNzM3
LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29s
ZWFuKTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTE3NDksMTIgKzE3NDksMTIgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShT
cGVjQm9vbGVhbik7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9v
bGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTdHJpbmdD
aGFyQ29kZUF0OgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7
CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgpAQCAt
MTc2MiwxNyArMTc2MiwxNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNTdHJpbmcp
OworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nKTsKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
bV9ncmFwaCwgbV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBzZXRGb3JOb2Rl
KG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFsOgpAQCAtMTc4Niw3ICsxNzg2LDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQXRvbWljc1N1YjoK
ICAgICBjYXNlIEF0b21pY3NYb3I6IHsKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gR2V0QnlW
YWwpCi0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIHN3aXRjaCAo
bm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVz
aW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CkBAIC0xODAy
LDEyICsxODAyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc1VuZGVmaW5lZCgpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0VHlwZShTcGVjT3RoZXIpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSku
bWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICAgICAg
bWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzKCkpIHsKQEAgLTE4MjEsNzEgKzE4MjEsNzEgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIC8vIGltcGxpZXMgYW4gaW4t
Ym91bmRzIGFjY2VzcykuIE5vbmUgb2YgdGhpcyBmZWVscyBsaWtlIGl0J3Mgd29ydGggaXQsCiAg
ICAgICAgICAgICAgICAgLy8gc28gd2UncmUgZ29pbmcgd2l0aCBUT1AgZm9yIG5vdy4gVGhlIHNh
bWUgdGhpbmcgYXBwbGllcyB0bwogICAgICAgICAgICAgICAgIC8vIGNsb2JiZXJpbmcgdGhlIHdv
cmxkLgotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRv
cCgpOworICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICAgICAgICAgIG1h
a2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgp
KTsKKyAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJl
LmdldCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RB
cmd1bWVudHM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAg
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgICAg
ICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9k
ZSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JO
b2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
bWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAg
ICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXRUeXBlKFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGVS
ZWFsKTsKKyAgICAgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Rv
dWJsZVJlYWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBB
cnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAg
ICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUo
bm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
SW50MzJPbmx5KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVj
SW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkp
OworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAg
ICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBzZXROb25D
ZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CiAgICAgICAgICAgICBpZiAobm9kZS0+
c2hvdWxkU3BlY3VsYXRlSW50MzIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JO
b2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxlSW50
NTIoKSAmJiBub2RlLT5zaG91bGRTcGVjdWxhdGVBbnlJbnQoKSkKLSAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0FueUludCk7CisgICAgICAgICAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNBbnlJbnQpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQW55SW50QXNEb3VibGUpOwor
ICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQW55SW50QXNE
b3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRnVsbERvdWJsZSk7
CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Z1bGxEb3VibGUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRnVsbERvdWJsZSk7CisgICAg
ICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Z1bGxEb3VibGUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTkwMiwyNCArMTkwMiwyNCBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFs
aWQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVy
aWM6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICAgICAgY2xv
YmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOgogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkK
LSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOworICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9y
YWdlOgogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkp
Ci0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xv
YmJlckxpbWl0KTsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTI4LDgg
KzE5MjgsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
fQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcnJheVB1c2g6Ci0gICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0VHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBjbG9iYmVyV29ybGQo
KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJl
cik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBcnJheVNsaWNlOiB7CkBAIC0xOTQyLDE4
ICsxOTQyLDE4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgc3RydWN0dXJlU2V0LmFkZChtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9i
amVjdC0+b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShBcnJheVdpdGhDb250
aWd1b3VzKSkpOwogICAgICAgICBzdHJ1Y3R1cmVTZXQuYWRkKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBl
KEFycmF5V2l0aERvdWJsZSkpKTsKIAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBo
LCBzdHJ1Y3R1cmVTZXQpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHN0cnVjdHVyZVNldCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQXJyYXlJbmRleE9mOiB7Ci0gICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFycmF5UG9wOgotICAgICAgICBjbG9iYmVyV29y
bGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBt
YWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbDoKQEAgLTE5NzIsMTQgKzE5NzIsMTQgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgaWYgKGFyZ3VtZW50
SW5kZXhDaGVja2VkLnNhZmVHZXQoYXJndW1lbnRJbmRleCkgIT0gQ2hlY2tlZFN0YXRlOjpEaWRP
dmVyZmxvdykgewogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlKSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4ICsg
MSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNldEZvck5vZGUobm9kZSwgbV9zdGF0ZS5vcGVyYW5kKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50SW5kZXggKyAxKSAr
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4IDwgbV9zdGF0ZS52YXJpYWJs
ZXMoKS5udW1iZXJPZkFyZ3VtZW50cygpIC0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlKSA9IG1fc3RhdGUudmFyaWFibGVzKCkuYXJndW1lbnQoYXJndW1lbnRJbmRl
eCArIDEpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRJbmRleCA8IG1fc3RhdGUu
bnVtYmVyT2ZBcmd1bWVudHMoKSAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldEZv
ck5vZGUobm9kZSwgbV9zdGF0ZS5hcmd1bWVudChhcmd1bWVudEluZGV4ICsgMSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xOTkz
LDcgKzE5OTMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDEgKyBub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOyBpIDwgaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgcmVzdWx0Lm1lcmdlKAotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygp
Lm9wZXJhbmQoCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZCgKICAgICAgICAg
ICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpICsgaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0y
MDAzLDExICsyMDAzLDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUoKSkKICAgICAgICAgICAgICAgICBtX3N0
YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUpID0gcmVzdWx0OworICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCByZXN1
bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZv
ck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTIwMTYsNyArMjAx
Niw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gUmVnRXhwRXhlYykgewogICAgICAgICAgICAgLy8gRXZlbiBpZiB3
ZSd2ZSBwcm92ZW4ga25vd24gaW5wdXQgdHlwZXMgYXMgUmVnRXhwT2JqZWN0IGFuZCBTdHJpbmcs
CiAgICAgICAgICAgICAvLyBhY2Nlc3NpbmcgbGFzdEluZGV4IGlzIGVmZmVjdGZ1bCBpZiBpdCdz
IGEgZ2xvYmFsIHJlZ2V4cC4KLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4u
c2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChKU1ZhbHVlIGdsb2JhbE9iamVjdFZhbHVlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV92YWx1ZSkgewpAQCAtMjAyNiwzMSArMjAyNiwzMSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQgc3RydWN0dXJlU2V0OwogICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmVTZXQuYWRkKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0
LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSkpOwogICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmVTZXQuYWRkKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5y
ZWdFeHBNYXRjaGVzQXJyYXlXaXRoR3JvdXBzU3RydWN0dXJlKCkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgc3RydWN0dXJlU2V0KTsKKyAgICAgICAg
ICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBzdHJ1Y3R1cmVTZXQpOwogICAgICAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1lcmdlKFNwZWNPdGhlcik7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY090aGVyIHwgU3BlY0Fy
cmF5KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwgU3BlY0FycmF5
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CiAgICAgICAgIC8vIEV2
ZW4gaWYgd2UndmUgcHJvdmVuIGtub3duIGlucHV0IHR5cGVzIGFzIFJlZ0V4cE9iamVjdCBhbmQg
U3RyaW5nLAogICAgICAgICAvLyBhY2Nlc3NpbmcgbGFzdEluZGV4IGlzIGVmZmVjdGZ1bCBpZiBp
dCdzIGEgZ2xvYmFsIHJlZ2V4cC4KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxU
eXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBSZWdFeHBNYXRjaEZhc3Q6CiAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDIoKS51c2VLaW5k
KCkgPT0gUmVnRXhwT2JqZWN0VXNlKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMygpLnVz
ZUtpbmQoKSA9PSBTdHJpbmdVc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9n
cmFwaCwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9k
ZSwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJl
Z0V4cE1hdGNoRmFzdEdsb2JhbDoKICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMigpLnVzZUtp
bmQoKSA9PSBTdHJpbmdVc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFw
aCwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwg
U3BlY090aGVyIHwgU3BlY0FycmF5KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICBjYXNlIFN0cmluZ1JlcGxhY2U6CkBAIC0yMDYwLDggKzIwNjAsOCBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAmJiBub2RlLT5jaGlsZDMo
KS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGRvZXNuJ3Qg
Y2xvYmJlciB0aGUgd29ybGQuIEl0IGp1c3QgcmVhZHMgYW5kIHdyaXRlcyByZWdleHAgc3RhdGUu
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFw
aCwgbV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgY2xvYmJlcldvcmxk
KCk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
OwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSnVtcDoKQEAgLTIxMDUsNyArMjEwNSw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIERpcmVj
dFRhaWxDYWxsOgogICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgogICAgIGNhc2UgVGFpbENhbGxG
b3J3YXJkVmFyYXJnczoKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIG1fc3Rh
dGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTIxMjIs
MTMgKzIxMjIsMTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICBpZiAoIShmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNGdWxs
TnVtYmVyIHwgU3BlY0Jvb2xlYW4gfCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCB8IFNwZWNCaWdJ
bnQpKSkgewogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAg
ICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNldEZvck5vZGUobm9k
ZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAKLSAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNIZWFwVG9wICYgflNwZWNPYmpl
Y3QpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSGVhcFRvcCAmIH5TcGVjT2Jq
ZWN0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMTQ1LDEyICsyMTQ1LDEyIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYgKCEoZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNCeXRlY29kZU51bWJlcikpIHsKICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBk
aWRGb2xkQ2xvYmJlcldvcmxkKCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUo
bm9kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKQEAgLTIxNzIsMTMgKzIxNzIsMTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKICAg
ICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV92bS5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdl
dCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMTg5LDI5ICsyMTg5LDI4IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGlmICgy
IDw9IHJhZGl4ICYmIHJhZGl4IDw9IDM2KSB7CiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRG
b3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxk
KCk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5t
X3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShu
b2RlLCBtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLCBtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAg
ICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV9ncmFwaC5t
X3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGNhc2UgTnVtYmVyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeENvbnN0YW50OiB7Ci0gICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTmV3
U3RyaW5nT2JqZWN0OiB7CiAgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJ
bmZvKCkgPT0gU3RyaW5nT2JqZWN0OjppbmZvKCkpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwg
bm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAK
ICAgICBjYXNlIE5ld0FycmF5OgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKLSAgICAgICAg
ICAgIG1fZ3JhcGgsCisgICAgICAgIHNldEZvck5vZGUobm9kZSwgCiAgICAgICAgICAgICBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsK
ICAgICAgICAgYnJlYWs7CiAKQEAgLTIyMjAsMTIgKzIyMTksMTAgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgLy8gV2UndmUgY29tcGlsZWQg
YXNzdW1pbmcgd2UncmUgbm90IGhhdmluZyBhIGJhZCB0aW1lLCBzbyB0byBiZSBjb25zaXN0ZW50
CiAgICAgICAgICAgICAvLyB3aXRoIFN0cnVjdHVyZVJlZ2lzdGVyYXRpb25QaGFzZSB3ZSBtdXN0
IHNheSB3ZSBwcm9kdWNlIGFuIG9yaWdpbmFsIGFycmF5CiAgICAgICAgICAgICAvLyBhbGxvY2F0
aW9uIHN0cnVjdHVyZS4KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KAotICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsCisgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIAogICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPm9y
aWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGUoQXJyYXlXaXRoQ29udGlndW91cykp
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0gICAg
ICAgICAgICAgICAgbV9ncmFwaCwKKyAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgCiAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0
aENvbnRpZ3VvdXMpKTsKICAgICAgICAgfQogCkBAIC0yMjM4LDI0ICsyMjM1LDIzIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmNhbkRvRmFzdFNwcmVh
ZChub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpCi0gICAgICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAg
ICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBk
aWRGb2xkQ2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0g
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KAotICAgICAgICAgICAgbV9ncmFwaCwgbV92bS5maXhl
ZEFycmF5U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCAKKyAgICAg
ICAgICAgIG1fdm0uZml4ZWRBcnJheVN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgotICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldCgKLSAgICAgICAgICAgIG1fZ3JhcGgsCisgICAgICAgIHNldEZvck5vZGUobm9kZSwgCiAg
ICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5k
ZXhpbmdUeXBlKCkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE5ld0FycmF5V2l0aFNp
emU6Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQXJyYXkpOwor
ICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQXJyYXkpOwogICAgICAgICBicmVhazsK
ICAgICAgICAgCiAgICAgY2FzZSBOZXdUeXBlZEFycmF5OgpAQCAtMjI2MywyMCArMjI1OSwxOSBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGNhc2Ug
SW50MzJVc2U6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgot
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxp
bWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoCi0gICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIAogICAg
ICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+
dHlwZWRBcnJheVN0cnVjdHVyZUNvbmN1cnJlbnRseSgKICAgICAgICAgICAgICAgICBub2RlLT50
eXBlZEFycmF5VHlwZSgpKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5l
d1JlZ2V4cDoKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+cmVnRXhwU3RydWN0dXJlKCkpOwor
ICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFRvVGhpczogewpAQCAtMjMyNSwyMSArMjMyMCwyMSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseShyYXJlRGF0YS0+YWxsb2Nh
dGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1p
dCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjRmluYWxPYmpl
Y3QpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9k
ZSwgU3BlY0ZpbmFsT2JqZWN0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIE5ld09iamVjdDoKICAgICAgICAgQVNTRVJUKCEhbm9kZS0+c3RydWN0dXJlKCkuZ2V0
KCkpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgVG9PYmplY3Q6CkBAIC0yMzU2LDggKzIzNTEsOCBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBUb09iamVjdCkKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZCgpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0yMzgyLDU2ICsyMzc3LDU2IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6IHsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9n
cmFwaCwgbm9kZS0+c3RydWN0dXJlU2V0KCkpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG5v
ZGUtPnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQ
dXNoV2l0aFNjb3BlOgogICAgICAgICAvLyBXZSBkb24ndCB1c2UgdGhlIG1vcmUgcHJlY2lzZSB3
aXRoU2NvcGVTdHJ1Y3R1cmUoKSBoZXJlIGJlY2F1c2UgaXQgaXMgYSBMYXp5UHJvcGVydHkgYW5k
IG1heSBub3QgeWV0IGJlIGFsbG9jYXRlZC4KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KG1fZ3JhcGgsIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUs
IFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDcmVhdGVBY3Rp
dmF0aW9uOgogICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgotICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldCgKLSAgICAgICAgICAgIG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgp
KTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCAKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVy
ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJn
dW1lbnRzOgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmRpcmVjdEFyZ3VtZW50c1N0
cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVy
ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJn
dW1lbnRzOgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnNjb3BlZEFyZ3VtZW50c1N0
cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnNjb3BlZEFyZ3VtZW50c1N0cnVjdHVy
ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQ2xvbmVkQXJn
dW1lbnRzOgogICAgICAgICBpZiAoIW1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0
Y2hwb2ludChub2RlKSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3Jh
cGgsIFNwZWNPYmplY3QpOworICAgICAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY09i
amVjdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyktPmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0Rm9y
Tm9kZShub2RlLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyktPmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIE5ld0dlbmVyYXRvckZ1bmN0aW9uOgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgK
LSAgICAgICAgICAgIG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKS0+Z2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAg
IHNldEZvck5vZGUobm9kZSwgCisgICAgICAgICAgICBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmdlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlKCkp
OwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbjoK
LSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0gICAgICAgICAgICBtX2dyYXBoLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFzeW5jR2VuZXJh
dG9yRnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgCisgICAg
ICAgICAgICBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPmFzeW5jR2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBOZXdBc3luY0Z1bmN0aW9uOgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgK
LSAgICAgICAgICAgIG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKS0+YXN5bmNGdW5jdGlvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0
Rm9yTm9kZShub2RlLCAKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXN5bmNGdW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIE5ld0Z1bmN0aW9uOiB7CiAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNGdW5jdGlv
bjo6c2VsZWN0U3RydWN0dXJlRm9yTmV3RnVuY0V4cChnbG9iYWxPYmplY3QsIG5vZGUtPmNhc3RP
cGVyYW5kPEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCkpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChtX2dyYXBoLCBzdHJ1Y3R1cmUpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHN0cnVjdHVy
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yNDQ1LDExICsyNDQwLDEx
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgc2V0VHlwZUZvck5v
ZGUobm9kZSwgU3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM6Ci0gICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3Bl
Y0ludDMyT25seSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTZXRDYWxsZWU6CkBAIC0y
NDU3LDcgKzI0NTIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldFJlc3RMZW5ndGg6Ci0gICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgY2FzZSBHZXRHZXR0ZXI6IHsKQEAgLTI0NzAsNyArMjQ2NSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNw
ZWNPYmplY3QpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTI0ODQsNyArMjQ3OSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNw
ZWNPYmplY3QpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTI0OTUsNyArMjQ5MCw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUobV9ncmFwaCwgU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9k
ZSwgU3BlY09iamVjdE90aGVyKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNraXBTY29w
ZTogewpAQCAtMjUwNCw3ICsyNDk5LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXpl
KEpTVmFsdWUoanNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShtX2dyYXBoLCBTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2Rl
LCBTcGVjT2JqZWN0T3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI1MzEsMTIg
KzI1MjYsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1f
Z3JhcGgsIFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNw
ZWNPYmplY3RPdGhlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0R2xv
YmFsVGhpczogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY09i
amVjdCk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPYmplY3QpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTI1NDUsMTQgKzI1NDAsMTQgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwg
Km1fZ3JhcGguZnJlZXplKHZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VCeXRlY29kZVRvcCgpOworICAgICAgICBtYWtlQnl0
ZWNvZGVUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldFJlZ0V4
cE9iamVjdExhc3RJbmRleDoKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwor
ICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6CkBAIC0yNTYwLDIwICsyNTU1LDIwIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czoKLSAgICAgICAgZm9yTm9kZShub2Rl
KS5tYWtlSGVhcFRvcCgpOworICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFB1dFRvQXJndW1lbnRzOgogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgR2V0QXJndW1lbnQ6Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZUhlYXBUb3AoKTsKKyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgVHJ5R2V0QnlJZDoKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGNvbnN0YW50IGZvbGQgYXQgbGVhc3QgYXMgd2VsbCBhcyB0aGUgbm9ybWFsIEdldEJ5SWQg
Y2FzZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NjQyMgotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIG1h
a2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldEJ5
SWREaXJlY3Q6CkBAIC0yNjA1LDE1ICsyNjAwLDE1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAg
IGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7Cisg
ICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgogICAgIGNhc2UgR2V0QnlJZFdpdGhUaGlzOgot
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQp
OwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGNsb2JiZXJX
b3JsZCgpOworICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogewpAQCAtMjYyMywxMiAr
MjYxOCwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcih2aWV3LT5sZW5ndGgoKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNJbnQzMk9ubHkpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3Bl
Y0ludDMyT25seSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0VmVjdG9y
TGVuZ3RoOiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKQEAgLTI2MzYsOCArMjYzMSw4IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIERlbGV0ZUJ5VmFsOiB7CiAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGRlY2lkZSBpZiB0aGUgZGVsZXRlIHdpbGwgYmUgc3Vj
Y2Vzc2Z1bCBiYXNlZCBvbiB0aGUgc2V0IG9mIHN0cnVjdHVyZXMgdGhhdAogICAgICAgICAvLyB3
ZSBnZXQgZnJvbSBvdXIgYmFzZSB2YWx1ZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NjYxMQotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jv
b2xlYW4pOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKQEAgLTI3NDcsNyArMjc0Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgLy8gbm9ib2R5IHdvdWxkIGN1cnJlbnRseSBiZW5lZml0IGZyb20g
aGF2aW5nIHRoYXQgaW5mb3JtYXRpb24uIEJ1dCBpdCdzIGEgYnVnIG5vbmV0aGVsZXNzLgogICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KQogICAg
ICAgICAgICAgZGlkRm9sZENsb2JiZXJTdHJ1Y3R1cmVzKCk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZSkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KKyAgICAgICAgY2xl
YXJGb3JOb2RlKG5vZGUpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENoZWNrU3ViQ2xhc3M6IHsKICAgICAgICAgSlNWYWx1ZSBjb25z
dGFudCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CkBAIC0yNzcxLDE4ICsyNzY2
LDE4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
Q2FsbERPTUdldHRlckRhdGEqIGNhbGxET01HZXR0ZXJEYXRhID0gbm9kZS0+Y2FsbERPTUdldHRl
ckRhdGEoKTsKICAgICAgICAgRE9NSklUOjpDYWxsRE9NR2V0dGVyU25pcHBldCogc25pcHBldCA9
IGNhbGxET01HZXR0ZXJEYXRhLT5zbmlwcGV0OwogICAgICAgICBpZiAoIXNuaXBwZXQgfHwgc25p
cHBldC0+ZWZmZWN0LndyaXRlcykKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmln
aW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsK
ICAgICAgICAgaWYgKGNhbGxET01HZXR0ZXJEYXRhLT5kb21KSVQpCi0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgY2FsbERPTUdldHRlckRhdGEtPmRvbUpJVC0+cmVz
dWx0VHlwZSgpKTsKKyAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIGNhbGxET01HZXR0
ZXJEYXRhLT5kb21KSVQtPnJlc3VsdFR5cGUoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZSkubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgICAgICBtYWtlQnl0ZWNv
ZGVUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDYWxs
RE9NOiB7CiAgICAgICAgIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBub2Rl
LT5zaWduYXR1cmUoKTsKICAgICAgICAgaWYgKHNpZ25hdHVyZS0+ZWZmZWN0LndyaXRlcykKLSAg
ICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1p
dCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBzaWduYXR1cmUtPnJl
c3VsdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0VHlwZUZvck5v
ZGUobm9kZSwgc2lnbmF0dXJlLT5yZXN1bHQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBDaGVja0FycmF5OiB7CkBAIC0yODUxLDcgKzI4NDYsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpD
b252ZXJ0KTsKLSAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKKyAgICAg
ICAgY2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICAgICAgZmlsdGVyQXJyYXlNb2Rlcyhub2RlLT5j
aGlsZDEoKSwgbm9kZS0+YXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkp
OwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yODU5LDcgKzI4NTQsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVj
dHVyZS5pc1N1YnNldE9mKFJlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkp
KSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAg
IGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1
cmVzKCk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBoYXZlIGEgYnVuY2ggb2Ygb3B0aW9ucyBv
ZiBob3cgdG8gZXhwcmVzcyB0aGUgYWJzdHJhY3Qgc2V0IGF0IHRoaXMgcG9pbnQuIExldCBzZXQg
UwogICAgICAgICAvLyBiZSB0aGUgc2V0IG9mIHN0cnVjdHVyZXMgdGhhdCB0aGUgdmFsdWUgaGFk
IGJlZm9yZSBjbG9iYmVyaW5nIGFuZCBhc3N1bWUgdGhhdCBhbGwgb2YKQEAgLTI4ODgsNyArMjg4
Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
Ly8gTm90ZSB0aGF0IGl0J3MgdGVtcHRpbmcgdG8gc2ltcGx5IHNheSB0aGF0IHRoZSByZXN1bHRp
bmcgdmFsdWUgaXMgQk9UVE9NIGJlY2F1c2Ugb2YKICAgICAgICAgLy8gdGhlIGNvbnRyYWRpY3Rp
b24uIFRoYXQgd291bGQgYmUgd3JvbmcsIHNpbmNlIHdlIGhhdmVuJ3QgaGl0IGFuIGludmFsaWRh
dGlvbiBwb2ludCwKICAgICAgICAgLy8geWV0LgotICAgICAgICB2YWx1ZS5zZXQobV9ncmFwaCwg
bm9kZS0+c3RydWN0dXJlKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQo
bV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7CkBAIC0yODk2LDExICsyODkxLDExIEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdmFsdWUsIG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICAg
ICAgaWYgKHZpZXcpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUp
OwotICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7CisgICAgICAgIGNsZWFyRm9yTm9kZShu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9p
bnRlcjogewotICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7CisgICAgICAgIGNsZWFyRm9y
Tm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7IAogICAgIH0KICAgICAgICAgCkBAIC0yOTEwLDcg
KzI5MDUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcih2aWV3LT5ieXRlT2Zmc2V0KCkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUs
IFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI5NTgsMTAgKzI5
NTMsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3Bl
Y09iamVjdCB8IFNwZWNPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNP
YmplY3QgfCBTcGVjT3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAt
Mjk4Nyw3ICsyOTgyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRJ
c1ZhbGlkKGZhbHNlKTsKIAotICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAg
IHNldEZvck5vZGUobm9kZSwgdmFsdWUpOwogICAgICAgICBpZiAodmFsdWUubV92YWx1ZSkKICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIGJyZWFr
OwpAQCAtMzAwMSw3ICsyOTk2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyktPmdldHRlclNldHRlclN0cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0
Rm9yTm9kZShub2RlLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpLT5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCkBAIC0zMDU4LDcgKzMwNTMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VT
dHJ1Y3R1cmUobV9ncmFwaCwgYmFzZVNldCkgPT0gQ29udHJhZGljdGlvbikKICAgICAgICAgICAg
IG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5v
ZGUpID0gcmVzdWx0OworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHJlc3VsdCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtMzEwOCw3ICszMTAzLDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBvYnNlcnZlVHJhbnNp
dGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7CiAgICAgICAgIGlmIChmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgbmV3U2V0KSA9PSBDb250cmFk
aWN0aW9uKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAgICAgc2V0Rm9y
Tm9kZShub2RlLT5jaGlsZDIoKSwgcmVzdWx0aW5nVmFsdWUpOwogICAgICAgICBpZiAoISFvcmln
aW5hbFZhbHVlICYmICFyZXN1bHRpbmdWYWx1ZSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNW
YWxpZChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzEyMyw3ICszMTE4LDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShtX2dyYXBoLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwg
U3BlY0NlbGxPdGhlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTMyMTksMTMg
KzMyMTQsMTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRCeVZhbFdpdGhUaGlzOgog
ICAgIGNhc2UgUHV0QnlJZFdpdGhUaGlzOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFB1dEdldHRlckJ5SWQ6CkBAIC0zMjMzLDQxICszMjI4
LDQxIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNl
IFB1dEdldHRlclNldHRlckJ5SWQ6CiAgICAgY2FzZSBQdXRHZXR0ZXJCeVZhbDoKICAgICBjYXNl
IFB1dFNldHRlckJ5VmFsOiB7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBjYXNlIERlZmluZURhdGFQcm9wZXJ0eToKICAgICBjYXNlIERl
ZmluZUFjY2Vzc29yUHJvcGVydHk6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4u
c2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBJbjogewogICAgICAgICAvLyBGSVhNRTogV2Ug
Y2FuIGRldGVybWluZSB3aGVuIHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBiYXNlZCBv
biBhYnN0cmFjdAogICAgICAgICAvLyB2YWx1ZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7
CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgSGFzT3duUHJvcGVydHk6IHsKLSAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgY2xvYmJlcldv
cmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0RW51bWVy
YWJsZUxlbmd0aDogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25s
eSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OiB7Ci0g
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7Ci0gICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIHNl
dE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGNsb2JiZXJX
b3JsZCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eTogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwotICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwor
ICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOworICAgICAg
ICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzSW5k
ZXhlZFByb3BlcnR5OiB7CkBAIC0zMjgwLDYxICszMjc1LDYxIEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4u
c2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0
RGlyZWN0UG5hbWU6IHsKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwor
ICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6
IHsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNDZWxsKTsKLSAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsK
KyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0NlbGwpOworICAgICAgICBjbG9iYmVy
V29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0RW51bWVyYXRvclN0
cnVjdHVyZVBuYW1lOiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBT
cGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3Bl
Y1N0cmluZyB8IFNwZWNPdGhlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdl
dEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KG1fZ3JhcGgsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBzZXRUeXBlRm9yTm9k
ZShub2RlLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
bV9ncmFwaCwgU3BlY1N0cmluZyk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNT
dHJpbmcpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoK
LSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBtYWtlSGVhcFRv
cEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRHbG9iYWxMZXhp
Y2FsVmFyaWFibGU6Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUJ5dGVjb2RlVG9wKCk7Cisg
ICAgICAgIG1ha2VCeXRlY29kZVRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBHZXREeW5hbWljVmFyOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VCeXRl
Y29kZVRvcCgpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgbWFrZUJ5dGVjb2Rl
VG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFB1dER5bmFtaWNW
YXI6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgUmVzb2x2ZVNjb3BlOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFw
aCwgU3BlY09iamVjdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXRUeXBl
Rm9yTm9kZShub2RlLCBTcGVjT2JqZWN0KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJl
c29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw6Ci0gICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAg
ICBtYWtlQnl0ZWNvZGVUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgUHV0R2xvYmFsVmFyaWFibGU6CkBAIC0zMzQyLDIyICszMzM3LDIyIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IE92ZXJyaWRlc0hhc0luc3RhbmNlOgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xl
YW4pOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgSW5zdGFuY2VPZjoK
ICAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3Zl
IGRvbmUgSW5zdGFuY2VPZgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xl
YW4pOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSW5zdGFuY2VPZkN1c3RvbToKLSAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgY2xvYmJlcldvcmxk
KCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkg
PSBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbihub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OlNo
YWRvdykpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0
aW9uKG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KSkpOwogICAgICAgICAvLyBUaGUg
c3RhdGUgb2YgdGhpcyBub2RlIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGRlY2lkZWQsIGJ1dCBp
dCBtYXkgaGF2ZSBiZWNvbWUgYQogICAgICAgICAvLyBjb25zdGFudCwgaW4gd2hpY2ggY2FzZSB3
ZSdkIGxpa2UgdG8ga25vdy4KICAgICAgICAgaWYgKGZvck5vZGUobm9kZSkubV92YWx1ZSkKQEAg
LTMzNjgsNyArMzM2Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uIHNoYWRvdyhub2RlLT5waGkoKSwgTm9kZUZs
b3dQcm9qZWN0aW9uOjpTaGFkb3cpOwogICAgICAgICBpZiAoc2hhZG93LmlzU3RpbGxWYWxpZCgp
KSB7CiAgICAgICAgICAgICBtX3N0YXRlLmNyZWF0ZVZhbHVlRm9yTm9kZShzaGFkb3cpOwotICAg
ICAgICAgICAgZm9yTm9kZShzaGFkb3cpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBzZXRGb3JOb2RlKHNoYWRvdywgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzOTAsOCArMzM4NSw4IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIERpcmVjdENhbGw6
CiAgICAgY2FzZSBEaXJlY3RDb25zdHJ1Y3Q6CiAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbElubGlu
ZWRDYWxsZXI6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNs
b2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKQEAgLTM0MDAsMTUgKzMzOTUs
MTUgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBi
cmVhazsKICAgICAgICAgCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKLSAgICAgICAgZm9y
QWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwgQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUludmFsaWRhdGlv
blBvaW50Rm9yKTsKICAgICAgICAgbV9zdGF0ZS5zZXRTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoU3Ry
dWN0dXJlc0FyZVdhdGNoZWQpOworICAgICAgICBtX3N0YXRlLm9ic2VydmVJbnZhbGlkYXRpb25Q
b2ludCgpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1BVSW50cmluc2ljOiAKICAgICAg
ICAgaWYgKG5vZGUtPmludHJpbnNpYygpID09IENQVVJkdHNjSW50cmluc2ljKQotICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY090aGVyKTsKKyAgICAgICAgICAg
IHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIpOwogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgQ2hlY2tUcmFwczoKQEAgLTM0NDEsMjYgKzM0MzYsMjUgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKQogICAgICAgICAgICAgICAgICAgICBkaWRGb2xk
Q2xvYmJlcldvcmxkKCk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2Rl
LCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50
eXBlZFVzZSkKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBT
cGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAg
IHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVJlc3Q6CiAgICAgICAgIGlmICghbV9n
cmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7CiAgICAgICAg
ICAgICAvLyBUaGlzIG1lYW5zIHdlJ3JlIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCi0gICAg
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQp
OwotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNBcnJheSk7
CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgIHNldFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNBcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldCgKLSAgICAgICAgICAgIG1fZ3JhcGgsCisgICAgICAgIHNldEZv
ck5vZGUobm9kZSwKICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyktPnJlc3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCkBAIC0zNDc3LDcgKzM0NzEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogCiAgICAgY2FzZSBTZXRGdW5jdGlvbk5hbWU6
IHsKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxp
bWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApA
QCAtMzUzNywxMCArMzUzMSw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyV29ybGQoCi0gICAg
Y29uc3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVkIGNsb2JiZXJMaW1pdCkKK3ZvaWQgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJXb3JsZCgpCiB7Ci0gICAgY2xv
YmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKKyAgICBjbG9iYmVyU3RydWN0dXJlcygpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KQEAgLTM1NzIsMTYgKzM1
NjUsMTYgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAgICAgICAgIGZ1bmN0b3IoZm9yTm9kZShub2RlKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
Zm9yIChzaXplX3QgaSA9IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKTsg
aS0tOykKLSAgICAgICAgZnVuY3RvcihtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50KGkpKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1iZXJPZkxvY2Fscygp
OyBpLS07KQotICAgICAgICBmdW5jdG9yKG1fc3RhdGUudmFyaWFibGVzKCkubG9jYWwoaSkpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSBtX3N0YXRlLm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspCisg
ICAgICAgIGZ1bmN0b3IobV9zdGF0ZS5hcmd1bWVudChpKSk7CisgICAgZm9yIChzaXplX3QgaSA9
IG1fc3RhdGUubnVtYmVyT2ZMb2NhbHMoKTsgaS0tOykKKyAgICAgICAgZnVuY3RvcihtX3N0YXRl
LmxvY2FsKGkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12
b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0
dXJlcyh1bnNpZ25lZCBjbG9iYmVyTGltaXQpCit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0dXJlcygpCiB7Ci0gICAgZm9yQWxsVmFsdWVz
KGNsb2JiZXJMaW1pdCwgQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXNGb3IpOworICAg
IG1fc3RhdGUuY2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICBtX3N0YXRlLm1lcmdlQ2xvYmJlclN0
YXRlKEFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGU6OkNsb2JiZXJlZFN0cnVjdHVyZXMp
OwogICAgIG1fc3RhdGUuc2V0U3RydWN0dXJlQ2xvYmJlclN0YXRlKFN0cnVjdHVyZXNBcmVDbG9i
YmVyZWQpOwogfQpAQCAtMzcxNiw3ICszNzA5LDcgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFj
dEludGVycHJldGVyPEFicwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlw
ZT4KLXZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVE
b3VibGVVbmFyeU9wRWZmZWN0cyhOb2RlKiBub2RlLCB1bnNpZ25lZCBjbG9iYmVyTGltaXQsIGRv
dWJsZSgqZXF1aXZhbGVudEZ1bmN0aW9uKShkb3VibGUpKQordm9pZCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZURvdWJsZVVuYXJ5T3BFZmZlY3RzKE5vZGUq
IG5vZGUsIGRvdWJsZSgqZXF1aXZhbGVudEZ1bmN0aW9uKShkb3VibGUpKQogewogICAgIEpTVmFs
dWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgIGlmIChzdGQ6
Om9wdGlvbmFsPGRvdWJsZT4gbnVtYmVyID0gY2hpbGQudG9OdW1iZXJGcm9tUHJpbWl0aXZlKCkp
IHsKQEAgLTM3MjksOCArMzcyMiw4IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVz
ZSkKICAgICAgICAgdHlwZSA9IHR5cGVPZkRvdWJsZVVuYXJ5T3AoZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkubV90eXBlKTsKICAgICBlbHNlCi0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmln
aW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKHR5
cGUpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICBzZXROb25DZWxsVHlwZUZvck5vZGUo
bm9kZSwgdHlwZSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24g
MjMxMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzMywxNiArMTMzLDE2IEBAIHZvaWQgQWJzdHJhY3RWYWx1
ZTo6c2V0KEdyYXBoJiBncmFwaCwgY28KICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgotICAgICAgICBzZXRUeXBlKFNwZWNC
b29sZWFuKTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGUoU3BlY0Jvb2xlYW4pOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgotICAgICAgICBzZXRUeXBlKFNw
ZWNPdGhlcik7CisgICAgICAgIHNldE5vbkNlbGxUeXBlKFNwZWNPdGhlcik7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6Ci0gICAgICAgIHNldFR5cGUoU3Bl
Y0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKLSAgICAgICAgc2V0
VHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBzZXROb25DZWxsVHlwZShTcGVjQnl0
ZWNvZGVOdW1iZXIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0
cmluZzoKICAgICAgICAgc2V0KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSk7CkBAIC01NTYsNiArNTU2LDcgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0
KFByaW50UwogICAgIH0KICAgICBpZiAoISFtX3ZhbHVlKQogICAgICAgICBvdXQucHJpbnQoIiwg
IiwgaW5Db250ZXh0KG1fdmFsdWUsIGNvbnRleHQpKTsKKyAgICBvdXQucHJpbnQoIiwgIiwgbV9l
ZmZlY3RFcG9jaCk7CiAgICAgb3V0LnByaW50KCIpIik7CiB9CiAKQEAgLTU3NCw2ICs1NzUsMjAg
QEAgdm9pZCBBYnN0cmFjdFZhbHVlOjplbnN1cmVDYW5Jbml0aWFsaXplVwogfQogI2VuZGlmCiAK
K3ZvaWQgQWJzdHJhY3RWYWx1ZTo6ZmFzdEZvcndhcmRUb1Nsb3coQWJzdHJhY3RWYWx1ZUNsb2Ji
ZXJFcG9jaCBuZXdFcG9jaCkKK3sKKyAgICBBU1NFUlQobmV3RXBvY2ggIT0gbV9lZmZlY3RFcG9j
aCk7CisgICAgCisgICAgaWYgKG5ld0Vwb2NoLmNsb2JiZXJFcG9jaCgpICE9IG1fZWZmZWN0RXBv
Y2guY2xvYmJlckVwb2NoKCkpCisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgaWYg
KG5ld0Vwb2NoLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVjdHVyZXNBcmVXYXRjaGVk
KQorICAgICAgICBtX3N0cnVjdHVyZS5vYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKTsKKyAgICAK
KyAgICBtX2VmZmVjdEVwb2NoID0gbmV3RXBvY2g7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5oCShyZXZpc2lvbiAyMzEzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkRG
R0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaCIKICNpbmNsdWRlICJERkdGaWx0cmF0aW9uUmVz
dWx0LmgiCiAjaW5jbHVkZSAiREZHRnJvemVuVmFsdWUuaCIKICNpbmNsdWRlICJERkdOb2RlRmxh
Z3MuaCIKQEAgLTEwMywyMCArMTA0LDE3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCBjbG9i
YmVyU3RydWN0dXJlc0ZvcihBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgZmFzdEZvcndhcmRUbyhBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoIG5ld0Vwb2NoKQog
ICAgIHsKLSAgICAgICAgdmFsdWUuY2xvYmJlclN0cnVjdHVyZXMoKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKQotICAgIHsKLSAgICAgICAgbV9zdHJ1
Y3R1cmUub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7Ci0gICAgICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBv
aW50Rm9yKEFic3RyYWN0VmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgdmFsdWUub2JzZXJ2
ZUludmFsaWRhdGlvblBvaW50KCk7CisgICAgICAgIGlmIChuZXdFcG9jaCA9PSBtX2VmZmVjdEVw
b2NoKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKCEobV90eXBl
ICYgU3BlY0NlbGwpKSB7CisgICAgICAgICAgICBtX2VmZmVjdEVwb2NoID0gbmV3RXBvY2g7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmYXN0Rm9yd2FyZFRvU2xv
dyhuZXdFcG9jaCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb24oUmVn
aXN0ZXJlZFN0cnVjdHVyZSBmcm9tLCBSZWdpc3RlcmVkU3RydWN0dXJlIHRvKQpAQCAtMjA2LDYg
KzIwNCwxNiBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgQWJzdHJhY3RWYWx1ZSYg
b3RoZXIpCisgICAgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNldChHcmFwaCYsIEFic3RyYWN0VmFsdWUmJiBvdGhlcikKKyAgICB7CisgICAgICAgICp0
aGlzID0gV1RGTW92ZShvdGhlcik7CisgICAgfQorICAgIAogICAgIHZvaWQgc2V0KEdyYXBoJiwg
Y29uc3QgRnJvemVuVmFsdWUmLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOwogICAgIHZvaWQgc2V0
KEdyYXBoJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBzZXQoR3JhcGgmLCBSZWdpc3RlcmVkU3Ry
dWN0dXJlKTsKQEAgLTIxNSw3ICsyMjMsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAg
dm9pZCBzZXRUeXBlKEdyYXBoJiwgU3BlY3VsYXRlZFR5cGUpOwogICAgIAogICAgIC8vIEFzIGFi
b3ZlLCBidXQgb25seSB2YWxpZCBmb3Igbm9uLWNlbGwgdHlwZXMuCi0gICAgdm9pZCBzZXRUeXBl
KFNwZWN1bGF0ZWRUeXBlIHR5cGUpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldE5vbkNlbGxU
eXBlKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
KHR5cGUgJiBTcGVjQ2VsbCkpOwogICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwpAQCAtMzk3
LDYgKzQwNSwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgLy8gZWZmZWN0IHRoYXQg
bWFrZXMgbm9uLW9idmlvdXMgY2hhbmdlcyB0byB0aGUgaGVhcC4KICAgICBBcnJheU1vZGVzIG1f
YXJyYXlNb2RlczsKICAgICAKKyAgICAvLyBUaGUgZXBvY2guCisgICAgLy8gRklYTUU6IEV4cGxh
aW4gdGhpcy4gKE9PUFMhISkKKyAgICBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoIG1fZWZmZWN0
RXBvY2g7CisgICAgCiAgICAgLy8gVGhpcyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBw
b3NzaWJsZSB2YWx1ZXMgdGhhdCB0aGlzIHZhbHVlIGNhbgogICAgIC8vIGhhdmUgbm93IG9yIGFu
eSB0aW1lIGluIHRoZSBmdXR1cmUsIHVubGVzcyBpdCBpcyByZWFzc2lnbmVkLiBOb3RlIHRoYXQg
dGhpcwogICAgIC8vIGltcGxpZXMgbm90aGluZyBhYm91dCB0aGUgc3RydWN0dXJlLiBPZGRseSwg
SlNWYWx1ZSgpIChpLmUuIHRoZSBlbXB0eSB2YWx1ZSkKQEAgLTQ1NSw2ICs0NjcsOCBAQCBwcml2
YXRlOgogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogICAgIAorICAgIHZvaWQg
ZmFzdEZvcndhcmRUb1Nsb3coQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCk7CisgICAgCiAgICAg
dm9pZCBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwogICAgIHZvaWQgZmlsdGVyQXJyYXlNb2Rlc0J5VHlw
ZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWVD
bG9iYmVyRXBvY2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBYnN0
cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEFic3RyYWN0VmFsdWVDbG9iYmVyRXBv
Y2g6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoY2xvYmJl
ckVwb2NoKCksICI6Iiwgc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworfQorCit9IH0gLy8gbmFt
ZXNwYWUgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9i
YmVyRXBvY2guaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdFcG9jaC5oIgor
I2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFi
c3RyYWN0VmFsdWVDbG9iYmVyRXBvY2ggeworcHVibGljOgorICAgIEFic3RyYWN0VmFsdWVDbG9i
YmVyRXBvY2goKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEFic3RyYWN0VmFsdWVD
bG9iYmVyRXBvY2ggZmlyc3QoU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKKyAg
ICB7CisgICAgICAgIEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2ggcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV92YWx1ZSA9IEVwb2NoOjpmaXJzdCgpLnRvVW5zaWduZWQoKSA8PCBlcG9jaFNoaWZ0
OworICAgICAgICBzd2l0Y2ggKGNsb2JiZXJTdGF0ZSkgeworICAgICAgICBjYXNlIFN0cnVjdHVy
ZXNBcmVXYXRjaGVkOgorICAgICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgfD0gd2F0Y2hlZEZsYWc7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVk
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjbG9iYmVyKCkKKyAgICB7CisgICAgICAgIG1fdmFsdWUg
Kz0gc3RlcDsKKyAgICAgICAgbV92YWx1ZSAmPSB+d2F0Y2hlZEZsYWc7CisgICAgfQorICAgIAor
ICAgIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCkKKyAgICB7CisgICAgICAgIG1fdmFs
dWUgfD0gd2F0Y2hlZEZsYWc7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisg
ICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIHN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSAmIHdhdGNoZWRGbGFnID8gU3RydWN0dXJlc0Fy
ZVdhdGNoZWQgOiBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkOworICAgIH0KKyAgICAKKyAgICBFcG9j
aCBjbG9iYmVyRXBvY2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEVwb2NoOjpmcm9t
VW5zaWduZWQobV92YWx1ZSA+PiBlcG9jaFNoaWZ0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgc3RlcCA9IDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB3
YXRjaGVkRmxhZyA9IDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBlcG9jaFNoaWZ0
ID0gMTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX3ZhbHVlIHsgMCB9OworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAko
cmV2aXNpb24gMjMxMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDg5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24pOwogICAgIEFi
c3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKTsKICAgICBBYnN0cmFjdFZh
bHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkgeyByZXR1cm4gZm9yTm9kZShlZGdlLm5vZGUoKSk7IH0K
LSAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVzKCkgeyByZXR1cm4gbV9ibG9j
ay0+dmFsdWVzQXRUYWlsOyB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyRm9y
Tm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKKyAgICB7CisgICAgICAgIGZvck5vZGUobm9k
ZSkuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyRm9y
Tm9kZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBjbGVhckZvck5vZGUoZWRnZS5ub2RlKCkp
OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHNldEZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUsIEFy
Z3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KG1fZ3JhcGgsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0Rm9yTm9kZShFZGdlIGVkZ2UsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAg
ICB7CisgICAgICAgIHNldEZvck5vZGUoZWRnZS5ub2RlKCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFR5cGVGb3JOb2RlKE5vZGVG
bG93UHJvamVjdGlvbiBub2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50
cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRUeXBlRm9yTm9kZShFZGdlIGVkZ2Us
IEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHNldFR5cGVGb3JOb2Rl
KGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXROb25DZWxsVHlwZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5v
ZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0Tm9uQ2VsbFR5cGUoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXROb25DZWxsVHlwZUZvck5vZGUoRWRnZSBlZGdlLCBBcmd1bWVudHMm
Ji4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUoZWRn
ZS5ub2RlKCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0K
KyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShOb2Rl
Rmxvd1Byb2plY3Rpb24gbm9kZSkKKyAgICB7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUJ5
dGVjb2RlVG9wKCk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYWtlQnl0
ZWNvZGVUb3BGb3JOb2RlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIG1ha2VCeXRlY29kZVRv
cEZvck5vZGUoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgbWFrZUhlYXBUb3BGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQorICAgIHsKKyAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgIH0KKyAgICAKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgbWFrZUhlYXBUb3BGb3JOb2RlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAg
ICAgIG1ha2VIZWFwVG9wRm9yTm9kZShlZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVz
QXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2Fs
cygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkxvY2Fscygp
OyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChpbnQgb3BlcmFuZCkgeyByZXR1cm4gbV9i
bG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7IH0KKyAgICBBYnN0cmFjdFZhbHVl
JiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1
ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNp
emVfdCBpbmRleCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGluZGV4KTsg
fQorICAgIEFic3RyYWN0VmFsdWUmIGFyZ3VtZW50KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9i
bG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsgfQorICAgIAorICAgIHZvaWQgY2xv
YmJlclN0cnVjdHVyZXMoKQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JN
KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCkKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIH0KICAgICAKICAg
ICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAy
MzEzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTcxLDcgKzE3MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
aWYgKCFzYWZlVG9FeGVjdXRlKG1fc3RhdGUsIG1fZ3JhcGgsIG5vZGUpKQogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIoVU5TQUZFKSAiKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKG1fc3RhdGUudmFyaWFibGVzKCksICIgIiwgbV9pbnRlcnByZXRlcik7
CisgICAgICAgICAgICAgICAgZGF0YUxvZyhtX3N0YXRlLnZhcmlhYmxlc0ZvckRlYnVnZ2luZygp
LCAiICIsIG1faW50ZXJwcmV0ZXIpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCJcbiIpOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9u
IDIzMTMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzgsNyArMzc4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgLSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49
IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKSAtIDEpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBtX3N0YXRlLm51bWJlck9mQXJndW1lbnRzKCkgLSAxKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgJKHJl
dmlzaW9uIDIzMTMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd01hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTU1LDI3ICs1NSwyNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgR3JhcGgm
IGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaDsgfQogICAgIAotICAgIFQmIGF0KHVuc2ln
bmVkIG5vZGVJbmRleCkKKyAgICBBTFdBWVNfSU5MSU5FIFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRl
eCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX21hcFtub2RlSW5kZXhdOwogICAgIH0KICAgICAK
LSAgICBUJiBhdChOb2RlKiBub2RlKQorICAgIEFMV0FZU19JTkxJTkUgVCYgYXQoTm9kZSogbm9k
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhdChub2RlLT5pbmRleCgpKTsKICAgICB9CiAgICAg
Ci0gICAgVCYgYXRTaGFkb3codW5zaWduZWQgbm9kZUluZGV4KQorICAgIEFMV0FZU19JTkxJTkUg
VCYgYXRTaGFkb3codW5zaWduZWQgbm9kZUluZGV4KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
c2hhZG93TWFwW25vZGVJbmRleF07CiAgICAgfQogICAgIAotICAgIFQmIGF0U2hhZG93KE5vZGUq
IG5vZGUpCisgICAgQUxXQVlTX0lOTElORSBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGF0U2hhZG93KG5vZGUtPmluZGV4KCkpOwogICAgIH0KICAgICAKLSAg
ICBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5k
KQorICAgIEFMV0FZU19JTkxJTkUgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlRmxvd1By
b2plY3Rpb246OktpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAg
ICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeToKQEAgLTg3LDIzICs4NywyMyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PFQqPihudWxscHRyKTsKICAg
ICB9CiAgICAgCi0gICAgVCYgYXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5k
IGtpbmQpCisgICAgQUxXQVlTX0lOTElORSBUJiBhdChOb2RlKiBub2RlLCBOb2RlRmxvd1Byb2pl
Y3Rpb246OktpbmQga2luZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhdChub2RlLT5pbmRleCgp
LCBraW5kKTsKICAgICB9CiAgICAgCi0gICAgVCYgYXQoTm9kZUZsb3dQcm9qZWN0aW9uIHByb2pl
Y3Rpb24pCisgICAgQUxXQVlTX0lOTElORSBUJiBhdChOb2RlRmxvd1Byb2plY3Rpb24gcHJvamVj
dGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhdChwcm9qZWN0aW9uLm5vZGUoKSwgcHJvamVj
dGlvbi5raW5kKCkpOwogICAgIH0KICAgICAKLSAgICBjb25zdCBUJiBhdCh1bnNpZ25lZCBub2Rl
SW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2Rl
SW5kZXgpOyB9Ci0gICAgY29uc3QgVCYgYXQoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGUpOyB9Ci0gICAgY29uc3QgVCYgYXRTaGFk
b3codW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAq
Pih0aGlzKS0+YXRTaGFkb3cobm9kZUluZGV4KTsgfQotICAgIGNvbnN0IFQmIGF0U2hhZG93KE5v
ZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdFNo
YWRvdyhub2RlKTsgfQotICAgIGNvbnN0IFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZUZs
b3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01h
cCo+KHRoaXMpLT5hdChub2RlSW5kZXgsIGtpbmQpOyB9Ci0gICAgY29uc3QgVCYgYXQoTm9kZSog
bm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlLCBraW5kKTsgfQotICAgIGNvbnN0IFQmIGF0
KE5vZGVGbG93UHJvamVjdGlvbiBwcm9qZWN0aW9uKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PEZsb3dNYXAqPih0aGlzKS0+YXQocHJvamVjdGlvbik7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNv
bnN0IFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxG
bG93TWFwKj4odGhpcyktPmF0KG5vZGVJbmRleCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0
IFQmIGF0KE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRo
aXMpLT5hdChub2RlKTsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVCYgYXRTaGFkb3codW5z
aWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlz
KS0+YXRTaGFkb3cobm9kZUluZGV4KTsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVCYgYXRT
aGFkb3coTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhp
cyktPmF0U2hhZG93KG5vZGUpOyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUJiBhdCh1bnNp
Z25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZUluZGV4LCBraW5kKTsgfQor
ICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVCYgYXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQcm9qZWN0
aW9uOjpLaW5kIGtpbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMp
LT5hdChub2RlLCBraW5kKTsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVCYgYXQoTm9kZUZs
b3dQcm9qZWN0aW9uIHByb2plY3Rpb24pIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01h
cCo+KHRoaXMpLT5hdChwcm9qZWN0aW9uKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBHcmFwaCYg
bV9ncmFwaDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMzEzMzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYwLDIwICs2MCwzMiBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpiZWdpbkJh
c2ljQmxvCiAgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpID09IGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsK
IAogICAgIG1fYWJzdHJhY3RWYWx1ZXMucmVzaXplKCk7CisKKyAgICBBYnN0cmFjdFZhbHVlQ2xv
YmJlckVwb2NoIGVwb2NoID0gQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6Zmlyc3QoYmFzaWNC
bG9jay0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkKTsKKyAgICBtX2VmZmVjdEVwb2No
ID0gZXBvY2g7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLT5z
aXplKCk7IGkrKykgewogICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb246OmZvckVhY2goCiAgICAg
ICAgICAgICBiYXNpY0Jsb2NrLT5hdChpKSwgWyZdIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZVBy
b2plY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVQcm9qZWN0aW9uKS5jbGVh
cigpOworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZh
bHVlcy5hdChub2RlUHJvamVjdGlvbik7CisgICAgICAgICAgICAgICAgdmFsdWUuY2xlYXIoKTsK
KyAgICAgICAgICAgICAgICB2YWx1ZS5tX2VmZmVjdEVwb2NoID0gZXBvY2g7CiAgICAgICAgICAg
ICB9KTsKICAgICB9CiAKLSAgICBtX3ZhcmlhYmxlcyA9IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVh
ZDsKKyAgICBmb3IgKHNpemVfdCBpID0gbV92YXJpYWJsZXMuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV92YXJpYWJsZXNbaV07CisgICAgICAgIHZhbHVl
ID0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkW2ldOworICAgICAgICB2YWx1ZS5tX2VmZmVjdEVw
b2NoID0gZXBvY2g7CisgICAgfQogICAgIAogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
IHsKICAgICAgICAgZm9yIChOb2RlQWJzdHJhY3RWYWx1ZVBhaXImIGVudHJ5IDogYmFzaWNCbG9j
ay0+c3NhLT52YWx1ZXNBdEhlYWQpIHsKLSAgICAgICAgICAgIGlmIChlbnRyeS5ub2RlLmlzU3Rp
bGxWYWxpZCgpKQotICAgICAgICAgICAgICAgIGZvck5vZGUoZW50cnkubm9kZSkgPSBlbnRyeS52
YWx1ZTsKKyAgICAgICAgICAgIGlmIChlbnRyeS5ub2RlLmlzU3RpbGxWYWxpZCgpKSB7CisgICAg
ICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX2Fic3RyYWN0VmFsdWVzLmF0KGVu
dHJ5Lm5vZGUpOworICAgICAgICAgICAgICAgIHZhbHVlID0gZW50cnkudmFsdWU7CisgICAgICAg
ICAgICAgICAgdmFsdWUubV9lZmZlY3RFcG9jaCA9IGVwb2NoOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsK
QEAgLTEyMywxMCArMTM1LDEwIEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxp
emUoKQogCiAgICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICAgICAgICAgICAg
ICBjYXNlIEZsdXNoZWRJbnQzMjoKLSAgICAgICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFs
dWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXROb25DZWxs
VHlwZShTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAgICAgICAgICAgICAgICAgZW50cnlw
b2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAg
ICAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0
Tm9uQ2VsbFR5cGUoU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgogICAgICAgICAgICAgICAgICAgICBlbnRy
eXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2Vs
bENoZWNrKTsKQEAgLTIwMSwxOSArMjEzLDE5IEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6
OmVuZEJhc2ljQmxvY2sKICAgICBjYXNlIFRocmVhZGVkQ1BTOiB7CiAgICAgICAgIGZvciAoc2l6
ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUm
IGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7Ci0g
ICAgICAgICAgICBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1
bWVudChhcmd1bWVudCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQp
KTsKKyAgICAgICAgICAgIG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIHRoaXMtPmFyZ3Vt
ZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkp
OwogICAgICAgICB9CiAKICAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewogICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxv
Y2FsKGxvY2FsKTsKLSAgICAgICAgICAgIG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1f
dmFyaWFibGVzLmxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2Nh
bCkpOworICAgICAgICAgICAgbWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgdGhpcy0+bG9j
YWwobG9jYWwpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBTU0E6IHsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQotICAg
ICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7Cisg
ICAgICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsW2ldLm1lcmdlKHZhcmlhYmxlQXQoaSkpOwog
CiAgICAgICAgIGZvciAoTm9kZUFic3RyYWN0VmFsdWVQYWlyJiB2YWx1ZUF0VGFpbCA6IGJsb2Nr
LT5zc2EtPnZhbHVlc0F0VGFpbCkgewogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWVB
dE5vZGUgPSBmb3JOb2RlKHZhbHVlQXRUYWlsLm5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24g
MjMxMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NywyMSArNDcsMTA0IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24pIHsgfQogICAg
IAotICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisg
ICAgQUxXQVlTX0lOTElORSBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlv
biBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSk7
CisgICAgICAgIHJldHVybiBmYXN0Rm9yd2FyZChtX2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUpKTsK
ICAgICB9CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVkZ2UpCisgICAg
QUxXQVlTX0lOTElORSBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkKICAgICB7CiAg
ICAgICAgIHJldHVybiBmb3JOb2RlKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAgCi0gICAgT3Bl
cmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IGNsZWFyRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3ZhcmlhYmxlczsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX2Fic3Ry
YWN0VmFsdWVzLmF0KG5vZGUpOworICAgICAgICB2YWx1ZS5jbGVhcigpOworICAgICAgICB2YWx1
ZS5tX2VmZmVjdEVwb2NoID0gbV9lZmZlY3RFcG9jaDsKICAgICB9CiAgICAgCisgICAgQUxXQVlT
X0lOTElORSB2b2lkIGNsZWFyRm9yTm9kZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBjbGVh
ckZvck5vZGUoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZvck5vZGUoTm9kZUZs
b3dQcm9qZWN0aW9uIG5vZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKTsKKyAg
ICAgICAgdmFsdWUuc2V0KG1fZ3JhcGgsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50
cykuLi4pOworICAgICAgICB2YWx1ZS5tX2VmZmVjdEVwb2NoID0gbV9lZmZlY3RFcG9jaDsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQUxXQVlTX0lO
TElORSB2b2lkIHNldEZvck5vZGUoRWRnZSBlZGdlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMp
CisgICAgeworICAgICAgICBzZXRGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8QXJn
dW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRUeXBlRm9yTm9kZShO
b2RlRmxvd1Byb2plY3Rpb24gbm9kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUp
OworICAgICAgICB2YWx1ZS5zZXRUeXBlKG1fZ3JhcGgsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+
KGFyZ3VtZW50cykuLi4pOworICAgICAgICB2YWx1ZS5tX2VmZmVjdEVwb2NoID0gbV9lZmZlY3RF
cG9jaDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHNldFR5cGVGb3JOb2RlKEVkZ2UgZWRnZSwgQXJndW1lbnRzJiYu
Li4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUoZWRnZS5ub2RlKCks
IHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IHNldE5vbkNlbGxUeXBlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSwgQXJndW1lbnRz
JiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBt
X2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUpOworICAgICAgICB2YWx1ZS5zZXROb25DZWxsVHlwZShz
dGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICAgICAgdmFsdWUubV9l
ZmZlY3RFcG9jaCA9IG1fZWZmZWN0RXBvY2g7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXROb25DZWxsVHlwZUZv
ck5vZGUoRWRnZSBlZGdlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAg
ICBzZXROb25DZWxsVHlwZUZvck5vZGUoZWRnZS5ub2RlKCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
bWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKKyAgICB7Cisg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKTsK
KyAgICAgICAgdmFsdWUubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgIHZhbHVlLm1fZWZmZWN0
RXBvY2ggPSBtX2VmZmVjdEVwb2NoOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBtYWtl
Qnl0ZWNvZGVUb3BGb3JOb2RlKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlT
X0lOTElORSB2b2lkIG1ha2VIZWFwVG9wRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkK
KyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5h
dChub2RlKTsKKyAgICAgICAgdmFsdWUubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgdmFsdWUubV9l
ZmZlY3RFcG9jaCA9IG1fZWZmZWN0RXBvY2g7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBtYWtlSGVhcFRvcEZvck5vZGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbWFr
ZUhlYXBUb3BGb3JOb2RlKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgT3BlcmFuZHM8
QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlc0ZvckRlYnVnZ2luZygpIHsgcmV0dXJuIG1fdmFyaWFi
bGVzOyB9CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFyaWFibGVzLm51bWJlck9mQXJndW1lbnRzKCk7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJP
ZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGVzLm51bWJlck9mTG9jYWxzKCk7IH0K
KyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVybiBmYXN0Rm9y
d2FyZChtX3ZhcmlhYmxlcy5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAgIEFic3RyYWN0VmFsdWUm
IG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGZhc3RGb3J3YXJkKG1f
dmFyaWFibGVzLm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwo
c2l6ZV90IGluZGV4KSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlcy5sb2NhbChpbmRl
eCkpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgYXJndW1lbnQoc2l6ZV90IGluZGV4KSB7IHJldHVy
biBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlcy5hcmd1bWVudChpbmRleCkpOyB9CisgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFyaWFibGVBdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGZhc3RGb3J3YXJkKG1f
dmFyaWFibGVzW2luZGV4XSk7IH0KKyAgICAKICAgICAvLyBDYWxsIHRoaXMgYmVmb3JlIGJlZ2lu
bmluZyBDRkEgdG8gaW5pdGlhbGl6ZSB0aGUgYWJzdHJhY3QgdmFsdWVzIG9mCiAgICAgLy8gYXJn
dW1lbnRzLCBhbmQgdG8gaW5kaWNhdGUgd2hpY2ggYmxvY2tzIHNob3VsZCBiZSBsaXN0ZWQgZm9y
IENGQQogICAgIC8vIGV4ZWN1dGlvbi4KQEAgLTExOSw2ICsyMDIsMTAgQEAgcHVibGljOgogICAg
IC8vIE1lcmdlVG9TdWNjZXNzb3JzLgogICAgIGJvb2wgbWVyZ2VUb1N1Y2Nlc3NvcnMoQmFzaWNC
bG9jayopOwogICAgIAorICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXMoKSB7IG1fZWZmZWN0RXBv
Y2guY2xvYmJlcigpOyB9CisgICAgCisgICAgdm9pZCBvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQo
KSB7IG1fZWZmZWN0RXBvY2gub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7IH0KKyAgICAKICAg
ICAvLyBNZXRob2RzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIEFic3RyYWN0SW50ZXJwcmV0
ZXIuCiAgICAgdm9pZCBzZXRDbG9iYmVyU3RhdGUoQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJT
dGF0ZSBzdGF0ZSkgeyBtX2Nsb2JiZXJTdGF0ZSA9IHN0YXRlOyB9CiAgICAgdm9pZCBtZXJnZUNs
b2JiZXJTdGF0ZShBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlIHN0YXRlKSB7IG1fY2xv
YmJlclN0YXRlID0gbWVyZ2VDbG9iYmVyU3RhdGVzKG1fY2xvYmJlclN0YXRlLCBzdGF0ZSk7IH0K
QEAgLTEzOSw2ICsyMjYsMTIgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBBTFdB
WVNfSU5MSU5FIEFic3RyYWN0VmFsdWUmIGZhc3RGb3J3YXJkKEFic3RyYWN0VmFsdWUmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgdmFsdWUuZmFzdEZvcndhcmRUbyhtX2VmZmVjdEVwb2NoKTsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKyAgICAKICAgICB2b2lkIG1lcmdlU3RhdGVBdFRh
aWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFyaWFibGUs
IE5vZGUqKTsKIAogICAgIHN0YXRpYyBib29sIG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFi
c3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGUqIGRl
c3RpbmF0aW9uTm9kZSwgTm9kZSogc291cmNlTm9kZSk7CkBAIC0xNTQsNiArMjQ3LDcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1faXNWYWxpZDsKICAgICBBYnN0cmFjdEludGVycHJldGVyQ2xvYmJl
clN0YXRlIG1fY2xvYmJlclN0YXRlOwogICAgIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBtX3N0cnVj
dHVyZUNsb2JiZXJTdGF0ZTsKKyAgICBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoIG1fZWZmZWN0
RXBvY2g7CiAgICAgCiAgICAgQnJhbmNoRGlyZWN0aW9uIG1fYnJhbmNoRGlyZWN0aW9uOyAvLyBU
aGlzIGlzIG9ubHkgc2V0IGZvciBibG9ja3MgdGhhdCBlbmQgaW4gQnJhbmNoIGFuZCB0aGF0IGV4
ZWN1dGUgdG8gY29tcGxldGlvbiAoaS5lLiBtX2lzVmFsaWQgPT0gdHJ1ZSkuCiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyMzEzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMyLDcgKzE5MzIsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBH
ZXRMb2NhbDogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFi
bGVzKCkub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CiAKICAgICAgICAgLy8gSWYgdGhl
IENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxlIGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJp
YWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2ZSBiZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0
dGVtcHQgdG8gcHJvY2VlZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIzMTMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4NSw3ICsx
Njg1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVHZXRTdGFjaygpCiAgICAgewogICAg
ICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwot
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFu
ZChkYXRhLT5sb2NhbCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5v
cGVyYW5kKGRhdGEtPmxvY2FsKTsKICAgICAgICAgCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBpc0NvbmNyZXRlKGRhdGEtPmZvcm1hdCksIGRhdGEtPmZvcm1hdCk7CiAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBkYXRhLT5mb3JtYXQgIT0gRmx1c2hlZERv
dWJsZSwgZGF0YS0+Zm9ybWF0KTsgLy8gVGhpcyBqdXN0IGhhcHBlbnMgdG8gbm90IGFyaXNlIGZv
ciBHZXRTdGFja3MsIHJpZ2h0IG5vdy4gSXQgd291bGQgYmUgdHJpdmlhbCB0byBzdXBwb3J0Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339662</attachid>
            <date>2018-05-05 18:09:01 -0700</date>
            <delta_ts>2018-05-05 18:25:38 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>117515</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzEzOTYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE4LTA1LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIEFJIHNob3VsZCBoYXZlIE8oMSkgY2xvYmJlcmluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Mjg3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3Mvc2ltcGxl
LWFpLWVmZmVjdC5qczogQWRkZWQuCisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKwog
MjAxOC0wNS0wNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoIHNob3VsZCByZXR1cm4gdHJ1ZSBmb3IgdW5kZWNp
ZGVkIGFycmF5cwpJbmRleDogSlNUZXN0cy9zdHJlc3Mvc2ltcGxlLWFpLWVmZmVjdC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zaW1wbGUtYWktZWZmZWN0LmpzCShub25leGlzdGVu
dCkKKysrIEpTVGVzdHMvc3RyZXNzL3NpbXBsZS1haS1lZmZlY3QuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzOSBAQAordmFyIGRvRWZmZWN0ID0gZmFsc2U7Cit2YXIgZGlkRWZmZWN0ID0g
ZmFsc2U7CisKK2Z1bmN0aW9uIGJhcihvLCBwKQoreworICAgIGlmIChkb0VmZmVjdCkgeworICAg
ICAgICBkZWxldGUgcC5nOworICAgICAgICBwLl9fZGVmaW5lR2V0dGVyX18oImciLCAoKSA9PiB7
CisgICAgICAgICAgICBkaWRFZmZlY3QgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIDQyOwor
ICAgICAgICB9KTsKKyAgICB9Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhv
LCBwKSB7CisgICAgdmFyIHJlc3VsdCA9IG8uZiArIHAuZzsKKyAgICBiYXIobywgcCk7CisgICAg
cmV0dXJuIHJlc3VsdCArIG8uZiArIHAuZzsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIG8g
PSB7ZzogMX07CitvLmggPSAyOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsK
KyAgICB2YXIgcmVzdWx0ID0gZm9vKHtmOiAxfSwge2c6IDN9KTsKKyAgICBpZiAocmVzdWx0ICE9
IDgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBpbiBsb29wOiAiICsgcmVzdWx0
OworfQorCitkb0VmZmVjdCA9IHRydWU7Cit2YXIgcmVzdWx0ID0gZm9vKHtmOiAxfSwge2c6IDN9
KTsKK2lmIChyZXN1bHQgIT0gNDcpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVu
ZDogIiArIHJlc3VsdDsKK2lmICghZGlkRWZmZWN0KQorICAgIHRocm93ICJFcnJvcjogZGlkIG5v
dCBkbyBlZmZlY3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzEz
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTEgQEAKKzIwMTgtMDUtMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KKworICAgICAgICBERkcgQUkgc2hvdWxkIGhhdmUgTygxKSBjbG9iYmVyaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyODcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4
ZXMgYW4gb2xkIHNjYWxhYmlsaXR5IHByb2JlbSBpbiBBSS4gUHJldmlvdXNseSwgaWYgd2UgZGlk
IGNsb2JiZXJXb3JsZCgpLCB0aGVuIHdlCisgICAgICAgIHdvdWxkIHRyYXZlcnNlIGFsbCBvZiB0
aGUgc3RhdGUgYXZhaWxhYmxlIHRvIHRoZSBBSSBhdCB0aGF0IHRpbWUgYW5kIGNsb2JiZXIgaXQu
CisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZXMgY2xvYmJlcldvcmxkKCkgdG8gYmUgTygx
KS4gSXQganVzdCBkb2VzIHNvbWUgbWF0aCB0byBhIGNsb2JiZXIgZXBvY2guCisgICAgICAgIAor
ICAgICAgICBUaGlzIGlzIGEgfjElIHNwZWVkLXVwIGZvciBjb21waWxlIHRpbWVzLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmZvck5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OnNldEZvck5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmNsZWFyRm9yTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6dmFyaWFibGVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5cGU+OjpjbG9iYmVyV29ybGQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpmb3JBbGxWYWx1ZXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0
dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZh
c3RGb3J3YXJkVG9TbG93KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZhc3RGb3J3YXJkVG8pOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1cmVzRm9yKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvYnNlcnZlSW52YWxpZGF0aW9uUG9p
bnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9ic2VydmVJ
bnZhbGlkYXRpb25Qb2ludEZvcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0
VmFsdWVDbG9iYmVyRXBvY2guY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlQ2xvYmJlckVwb2NoOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RWYWx1ZUNsb2JiZXJFcG9jaC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlQ2xvYmJlckVwb2NoOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpmaXJzdCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6Y2xvYmJlcik6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6b2JzZXJ2ZUludmFsaWRhdGlvblBv
aW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVw
b2NoOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
Q2xvYmJlckVwb2NoOjpzdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY29uc3QpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2g6OmNsb2JiZXJFcG9jaCBjb25zdCk6Cisg
ICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpzZXRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpB
dFRhaWxBYnN0cmFjdFN0YXRlOjpjbGVhckZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF0
VGFpbEFic3RyYWN0U3RhdGU6Om51bWJlck9mQXJndW1lbnRzIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6bG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6
OkF0VGFpbEFic3RyYWN0U3RhdGU6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRh
aWxBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjp2YXJpYWJsZXMpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6
OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0
YW50cyk6CisgICAgICAgICogZGZnL0RGR0Zsb3dNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpG
bG93TWFwOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01hcDo6YXRTaGFkb3cpOgorICAg
ICAgICAoSlNDOjpERkc6OkZsb3dNYXA6OmF0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpG
bG93TWFwOjphdFNoYWRvdyBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVn
aW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6
ZW5kQmFzaWNCbG9jayk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6
CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpzZXRGb3JOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6Y2xlYXJGb3JOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6dmFyaWFibGVzRm9yRGVidWdnaW5n
KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bnVtYmVyT2ZBcmd1
bWVudHMgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpu
dW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0
U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRl
Ojpsb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmFyZ3Vt
ZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6dmFyaWFibGVB
dCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmNsb2JiZXJTdHJ1
Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6b2JzZXJ2
ZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZTo6ZmFzdEZvcndhcmQpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0
YXRlOjp2YXJpYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRTdGFjayk6CisKIDIwMTgtMDUtMDMgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGl0IGVhc3kgdG8gbG9nIGNv
bXBpbGUgdGltZXMgZm9yIGFsbCBvcHRpbWl6aW5nIHRpZXJzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMzEzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw2ICsyNzQsNyBAQCBkZWJ1Z2dlci9E
ZWJ1Z2dlclNjb3BlLmNwcAogZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKIGRmZy9ERkdBYnN0cmFj
dEludGVycHJldGVyQ2xvYmJlclN0YXRlLmNwcAogZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCitk
ZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5jcHAKIGRmZy9ERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCiBkZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmNwcAogZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjMxMzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTMxOSw2ICszMTksNyBAQAogCQkwRjREOEM3ODFGQ0EzQ0ZBMDAx
RDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1w
bGVNYXJraW5nQ29uc3RyYWludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZpb3Vz
U3BpbGxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oICovOyB9Owog
CQkwRjRGMTFFODIwOUJDREFCMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjExRTYyMDlCQ0RB
MTAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCAqLzsgfTsKKwkJMEY0RjExRUIyMDlE
NDI2NjAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYxMUVBMjA5RDQyNjMwMDcw
OTY1NCAvKiBERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmggKi87IH07CiAJCTBGNEYyOUUw
MThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5
REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBo
YXNlLmggKi87IH07CiAJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNEY4MjhDMUUzMUI5NzYwMDc1MTg0QyAvKiBTdG9jaGFz
dGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyOEExRTMxQjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0
aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CkBAIC0yMzEwLDYgKzIzMTEsOCBA
QAogCQkwRjRERTFEMDFDNEQ3NjRCMDA0RDZDMTEgLyogQjNPcmlnaW5EdW1wLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5jcHA7IHBhdGggPSBi
My9CM09yaWdpbkR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGMTFF
NjIwOUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb21waWxlclRpbWluZ1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEYxMUU3MjA5QkNEQTEwMDcwOTY1NCAvKiBDb21waWxlclRpbWlu
Z1Njb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGVy
VGltaW5nU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRGMTFFOTIw
OUQ0MjYzMDA3MDk2NTQgLyogREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVw
b2NoLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RjExRUEyMDlENDI2MzAwNzA5NjU0IC8qIERG
R0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oOyBwYXRoID0gZGZnL0RGR0Fic3Ry
YWN0VmFsdWVDbG9iYmVyRXBvY2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3Vu
dEVzdGltYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNzExNCw2ICs3MTE3LDggQEAKIAkJCQlBNzA0RDhGRjE3QTBCQUE4
MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCAqLywKIAkJCQkwRjU1
QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8sCiAJCQkJMEY2
MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLywKKwkJCQkwRjRG
MTFFOTIwOUQ0MjYzMDA3MDk2NTQgLyogREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5jcHAg
Ki8sCisJCQkJMEY0RjExRUEyMDlENDI2MzAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9i
YmVyRXBvY2guaCAqLywKIAkJCQkwRkQzRTNGRjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCAqLywKIAkJCQkwRkQzRTQwMDFC
NjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmggKi8sCiAJCQkJMEYxOEQzQ0QxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8sCkBAIC05MDQwLDYgKzkwNDUsNyBAQAogCQkJCUE1MTNF
NUMyMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50
MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RjExRUIyMDlENDI2NjAwNzA5NjU0IC8q
IERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NkY3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMzNGNTA4MTFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJh
bmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJh
bmRzLmgJKHJldmlzaW9uIDIzMTMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1LDcgQEAgcHVibGljOgog
ICAgIAogcHJpdmF0ZToKICAgICAvLyBUaGUgZmlyc3QgbV9udW1Bcmd1bWVudHMgb2YgbV92YWx1
ZXMgYXJlIGFyZ3VtZW50cywgdGhlIHJlc3QgYXJlIGxvY2Fscy4KLSAgICBWZWN0b3I8VCwgMjQ+
IG1fdmFsdWVzOworICAgIFZlY3RvcjxULCAyNCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fdmFs
dWVzOwogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzOwogfTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHJldmlz
aW9uIDIzMTMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMTkgKzQxLDgwIEBAIHB1YmxpYzoKICAg
ICBBYnN0cmFjdEludGVycHJldGVyKEdyYXBoJiwgQWJzdHJhY3RTdGF0ZVR5cGUmKTsKICAgICB+
QWJzdHJhY3RJbnRlcnByZXRlcigpOwogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUo
Tm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAgQUxXQVlTX0lOTElORSBBYnN0cmFjdFZhbHVl
JiBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJu
IG1fc3RhdGUuZm9yTm9kZShub2RlKTsKICAgICB9CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYg
Zm9yTm9kZShFZGdlIGVkZ2UpCisgICAgQUxXQVlTX0lOTElORSBBYnN0cmFjdFZhbHVlJiBmb3JO
b2RlKEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIHJldHVybiBmb3JOb2RlKGVkZ2Uubm9kZSgp
KTsKICAgICB9CiAgICAgCi0gICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygp
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24g
bm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0YXRlLnZhcmlhYmxlcygpOworICAgICAg
ICBtX3N0YXRlLmNsZWFyRm9yTm9kZShub2RlKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lO
TElORSB2b2lkIGNsZWFyRm9yTm9kZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBjbGVhckZv
ck5vZGUoZWRnZS5ub2RlKCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0Rm9yTm9kZShOb2RlRmxvd1Byb2pl
Y3Rpb24gbm9kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgbV9z
dGF0ZS5zZXRGb3JOb2RlKG5vZGUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cyku
Li4pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0Rm9yTm9kZShFZGdlIGVkZ2UsIEFyZ3VtZW50cyYmLi4uIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIHNldEZvck5vZGUoZWRnZS5ub2RlKCksIHN0ZDo6Zm9y
d2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0VHlwZUZvck5v
ZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAg
ICB7CisgICAgICAgIG1fc3RhdGUuc2V0VHlwZUZvck5vZGUobm9kZSwgc3RkOjpmb3J3YXJkPEFy
Z3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRUeXBlRm9yTm9kZShFZGdl
IGVkZ2UsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHNldFR5cGVG
b3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4u
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXROb25DZWxsVHlwZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0
aW9uIG5vZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIG1fc3Rh
dGUuc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFy
Z3VtZW50cykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKEVkZ2UgZWRn
ZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5
cGVGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMp
Li4uKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIG1ha2VCeXRlY29kZVRv
cEZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAgeworICAgICAgICBtX3N0YXRl
Lm1ha2VCeXRlY29kZVRvcEZvck5vZGUobm9kZSk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBtYWtlQnl0ZWNvZGVUb3BGb3JOb2RlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAg
ICAgIG1ha2VCeXRlY29kZVRvcEZvck5vZGUoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFrZUhlYXBUb3BGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlv
biBub2RlKQorICAgIHsKKyAgICAgICAgbV9zdGF0ZS5tYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7
CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYWtlSGVhcFRvcEZvck5vZGUo
RWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKGVkZ2Uubm9kZSgp
KTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBuZWVkc1R5cGVDaGVjayhOb2RlKiBub2RlLCBTcGVj
dWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gpCkBAIC0xNDksMTMgKzIxMCwxMyBAQCBwdWJs
aWM6CiAgICAgUGhpQ2hpbGRyZW4qIHBoaUNoaWxkcmVuKCkgeyByZXR1cm4gbV9waGlDaGlsZHJl
bi5nZXQoKTsgfQogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIGNsb2JiZXJXb3JsZChjb25zdCBD
b2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICB2b2lkIGNsb2JiZXJXb3Js
ZCgpOwogICAgIHZvaWQgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JBbGxWYWx1ZXModW5zaWduZWQgaW5kZXhJ
bkJsb2NrLCBGdW5jdG9yJik7CiAgICAgCi0gICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcyh1bnNp
Z25lZCBpbmRleEluQmxvY2spOworICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICB2
b2lkIGRpZEZvbGRDbG9iYmVyU3RydWN0dXJlcygpOwogICAgIAogICAgIHZvaWQgb2JzZXJ2ZVRy
YW5zaXRpb24odW5zaWduZWQgaW5kZXhJbkJsb2NrLCBSZWdpc3RlcmVkU3RydWN0dXJlIGZyb20s
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgdG8pOwpAQCAtMTkwLDcgKzI1MSw3IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgdm9pZCB2ZXJpZnlFZGdlKE5vZGUqLCBFZGdlKTsKICAgICB2b2lkIHZlcmlmeUVk
Z2VzKE5vZGUqKTsKLSAgICB2b2lkIGV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhOb2RlKiwg
dW5zaWduZWQgY2xvYmJlckxpbWl0LCBkb3VibGUoKmVxdWl2YWxlbnRGdW5jdGlvbikoZG91Ymxl
KSk7CisgICAgdm9pZCBleGVjdXRlRG91YmxlVW5hcnlPcEVmZmVjdHMoTm9kZSosIGRvdWJsZSgq
ZXF1aXZhbGVudEZ1bmN0aW9uKShkb3VibGUpKTsKICAgICAKICAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOwogICAgIEdyYXBoJiBtX2dyYXBoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2
aXNpb24gMjMxMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNyArMjI3LDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBjYXNlIExhenlK
U1ZhbHVlOjpTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAgICAgICAgIGNhc2UgTGF6eUpTVmFsdWU6
Oktub3duU3RyaW5nSW1wbDoKICAgICAgICAgY2FzZSBMYXp5SlNWYWx1ZTo6TmV3U3RyaW5nSW1w
bDoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3RyaW5n
KTsKKyAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yMzUsNyArMjM1LDcg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogCiAgICAgY2FzZSBJ
ZGVudGl0eVdpdGhQcm9maWxlOgogICAgIGNhc2UgSWRlbnRpdHk6IHsKLSAgICAgICAgZm9yTm9k
ZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBzZXRGb3JOb2RlKG5v
ZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgaWYgKGZvck5vZGUobm9kZSku
dmFsdWUoKSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtMjQzLDM5ICsyNDMsMzkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIEV4dHJhY3RDYXRjaExvY2Fs
OgogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6IHsKLSAgICAgICAgZm9yTm9kZShub2Rl
KS5tYWtlQnl0ZWNvZGVUb3AoKTsKKyAgICAgICAgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2Nh
bDogewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0g
bV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKS5v
ZmZzZXQoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQo
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsKICAgICAgICAgLy8gVGhlIHZh
bHVlIGluIHRoZSBsb2NhbCBzaG91bGQgYWxyZWFkeSBiZSBjaGVja2VkLgogICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHZhbHVlLmlzVHlwZSh0eXBlRmlsdGVyRm9yKHZhcmlhYmxl
QWNjZXNzRGF0YS0+Zmx1c2hGb3JtYXQoKSkpKTsKICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkp
CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICBm
b3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgdmFsdWUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQo
ZGF0YS0+bG9jYWwpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVy
YW5kKGRhdGEtPmxvY2FsKTsKICAgICAgICAgLy8gVGhlIHZhbHVlIGluIHRoZSBsb2NhbCBzaG91
bGQgYWxyZWFkeSBiZSBjaGVja2VkLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUs
IHZhbHVlLmlzVHlwZSh0eXBlRmlsdGVyRm9yKGRhdGEtPmZvcm1hdCkpKTsKICAgICAgICAgaWYg
KHZhbHVlLnZhbHVlKCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIHNldEZvck5vZGUo
bm9kZSwgdmFsdWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1fc3RhdGUub3BlcmFu
ZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTI5NiwyMCArMjk2LDIwIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQg
dGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50IG1lYW5zIHRo
YXQgc29tZW9uZSBzZXQKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50IHZhbHVlcyBvdXQtb2YtYmFu
ZCwgYW5kIGN1cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFucyBzZXR0aW5nIHRvIGEKICAgICAgICAg
Ly8gbm9uLWNsZWFyIHZhbHVlLgotICAgICAgICBBU1NFUlQoIW1fc3RhdGUudmFyaWFibGVzKCku
b3BlcmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICBBU1NFUlQoIW1fc3Rh
dGUub3BlcmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgSW5pdGlhbGl6ZUVudHJ5cG9pbnRBcmd1bWVudHM6IHsKICAgICAgICAgdW5zaWdu
ZWQgZW50cnlwb2ludEluZGV4ID0gbm9kZS0+ZW50cnlwb2ludEluZGV4KCk7CiAgICAgICAgIGNv
bnN0IFZlY3RvcjxGbHVzaEZvcm1hdD4mIGFyZ3VtZW50Rm9ybWF0cyA9IG1fZ3JhcGgubV9hcmd1
bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1
bWVudCA9IDA7IGFyZ3VtZW50IDwgYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKythcmd1bWVudCkg
ewotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygp
LmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
bV9zdGF0ZS5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50
Rm9ybWF0c1thcmd1bWVudF0pIHsKICAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgotICAg
ICAgICAgICAgICAgIHZhbHVlLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAg
ICAgdmFsdWUuc2V0Tm9uQ2VsbFR5cGUoU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgotICAgICAgICAgICAgICAg
IHZhbHVlLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgICAgIHZhbHVlLnNldE5v
bkNlbGxUeXBlKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgRmx1c2hlZENlbGw6CiAgICAgICAgICAgICAgICAgdmFsdWUuc2V0VHlwZShtX2dy
YXBoLCBTcGVjQ2VsbCk7CkBAIC0zMzIsNyArMzMyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzMDcxCiAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
ICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTM0MSw5ICszNDEsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAg
ICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEtPmNvdW50KS5zZXRUeXBlKFNwZWNJ
bnQzMk9ubHkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+Y291bnQpLnNldE5vbkNl
bGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5s
aW1pdCAtIDE7IGktLTspCi0gICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQo
ZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAgbV9z
dGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC0zNTQsOCArMzU0LDggQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQml0TFNoaWZ0
OgogICAgIGNhc2UgQml0VVJTaGlmdDogewogICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IFVudHlwZWRVc2UgfHwgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IFVudHlw
ZWRVc2UpIHsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFw
aCwgU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAg
ICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTM5MywxMSArMzkzLDExIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
Qml0QW5kCiAgICAgICAgICAgICAmJiAoaXNCb29sSW50MzJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpIHx8CiAgICAgICAgICAgICAgICAgaXNCb29sSW50MzJTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKSkgewotICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sSW50MzIpOworICAgICAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
SW50MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQz
Mk9ubHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDEwLDcgKzQxMCw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KG1hY2hpbmVJbnQpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0FueUludCk7
CisgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNBbnlJbnQp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KGNoaWxkICYmIGNoaWxkLmlzSW50MzIoKSkgewpAQCAtNDE4LDcgKzQxOCw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBzZXRDb25z
dGFudChub2RlLCBqc051bWJlcih2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNBbnlJbnRB
c0RvdWJsZSk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Fu
eUludEFzRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlm
IChjaGlsZCAmJiBjaGlsZC5pc0ludDMyKCkpIHsKQEAgLTQyOCw3ICs0MjgsNyBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNJbnQzMk9ubHkpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3Bl
Y0ludDMyT25seSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00NjIsNyAr
NDYyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTQ4NywxMSArNDg3LDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGlzQm9vbGVh
blNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbEludDMyKTsKKyAgICAgICAgICAgIHNl
dE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbEludDMyKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVj
SW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTUyNSw3ICs1
MjUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSh0eXBlKTsKKyAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIHR5cGUpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLmZp
eFR5cGVGb3JSZXByZXNlbnRhdGlvbihtX2dyYXBoLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtNTM3LDcgKzUzNyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0FueUludCk7CisgICAgICAgIHNldE5vbkNlbGxU
eXBlRm9yTm9kZShub2RlLCBTcGVjQW55SW50KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTU0OCwyMCArNTQ4LDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlICYgflNwZWNEb3VibGVJbXB1cmVOYU4pOworICAgICAgICBzZXRUeXBlRm9yTm9k
ZShub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+U3BlY0RvdWJsZUltcHVy
ZU5hTik7CiAgICAgICAgIGZvck5vZGUobm9kZSkuZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKG1f
Z3JhcGgsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
VmFsdWVBZGQ6IHsKICAgICAgICAgQVNTRVJUKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBVbnR5
cGVkVXNlKTsKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xv
YmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNT
dHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAg
ICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyB8IFNwZWNCeXRlY29kZU51bWJl
cik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgU3RyQ2F0OiB7Ci0gICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgc2V0
VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCkBAIC01ODEsNyArNTgxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0lu
dDMyT25seSk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0lu
dDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZToK
ICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNBbnlJbnQoKSAmJiByaWdo
dC5pc0FueUludCgpKSB7CkBAIC01OTEsMTQgKzU5MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjQW55SW50KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2Rl
LCBTcGVjQW55SW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERvdWJsZVJl
cFVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAm
JiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwg
anNEb3VibGVOdW1iZXIobGVmdC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1iZXIoKSkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXRUeXBlKAorICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIAog
ICAgICAgICAgICAgICAgIHR5cGVPZkRvdWJsZVN1bSgKICAgICAgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5
cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjExLDggKzYxMSw4IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgY2FzZSBBdG9taWNz
SXNMb2NrRnJlZTogewogICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IElu
dDMyVXNlKQotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
Y2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sSW50
MzIpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBl
Rm9yTm9kZShub2RlLCBTcGVjQm9vbEludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBA
IC02MzYsMTAgKzYzNiwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0lu
dDMyT25seSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNjc0LDE2ICs2NzQsMTYgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgIGlmIChudW1iZXJPZlJl
bW92ZWRDaGlsZHJlbiA9PSBudW1iZXJPZkNoaWxkcmVuKSB7CiAgICAgICAgICAgICAgICAgLy8g
UHJvcGFnYXRlIHRoZSBsYXN0IGNoaWxkLiBUaGlzIGlzIHRoZSB3YXkgdGFrZW4gaW4gdGhlIGNv
bnN0YW50IGZvbGRpbmcgcGhhc2UuCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZv
ck5vZGUobm9kZS0+Y2hpbGRyZW4uY2hpbGQobnVtYmVyT2ZDaGlsZHJlbiAtIDEpKTsKKyAgICAg
ICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGRyZW4uY2hpbGQo
bnVtYmVyT2ZDaGlsZHJlbiAtIDEpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoKG51bWJlck9mUmVtb3ZlZENoaWxkcmVuICsgMSkgPT0g
bnVtYmVyT2ZDaGlsZHJlbikgewogICAgICAgICAgICAgICAgIEFTU0VSVChub25FbXB0eUluZGV4
KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGlsZHJl
bi5jaGlsZChub25FbXB0eUluZGV4LnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRGb3JO
b2RlKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGRyZW4uY2hpbGQobm9uRW1wdHlJbmRleC52YWx1
ZSgpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fdm0uc3RyaW5nU3RydWN0dXJl
LmdldCgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3ZtLnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtNzAzLDcgKzcw
Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CiAgICAgICAgICAgICBpZiAobGVm
dCAmJiByaWdodCAmJiBsZWZ0LmlzQW55SW50KCkgJiYgcmlnaHQuaXNBbnlJbnQoKSkgewpAQCAt
NzEzLDIwICs3MTMsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0FueUludCk7Cisg
ICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0FueUludCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAgICAgICBp
ZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkg
ewogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzRG91YmxlTnVtYmVyKGxlZnQu
YXNOdW1iZXIoKSAtIHJpZ2h0LmFzTnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSgKKyAgICAg
ICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCAKICAgICAgICAgICAgICAgICB0eXBl
T2ZEb3VibGVEaWZmZXJlbmNlKAogICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3R5cGUsIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAg
ICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JO
b2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC03NTUsNyArNzU1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7
CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZToKICAgICAgICAg
ICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc0FueUludCgpKSB7CkBAIC03NzAsMjEgKzc3MCwyMSBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQW55SW50KTsKKyAgICAgICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQW55SW50KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgICAgIGlmIChjaGlsZCAmJiBjaGls
ZC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNEb3Vi
bGVOdW1iZXIoLWNoaWxkLmFzTnVtYmVyKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSgKKyAgICAgICAg
ICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCAKICAgICAgICAgICAgICAgICB0eXBlT2ZE
b3VibGVOZWdhdGlvbigKICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFVudHlwZWRVc2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7Ci0gICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAg
ICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShu
b2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CkBAIC04MDksNyArODA5LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9k
ZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbnQ1
MlJlcFVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNBbnlJbnQo
KSAmJiByaWdodC5pc0FueUludCgpKSB7CkBAIC04MjIsMjAgKzgyMiwyMCBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0VHlwZShTcGVjQW55SW50KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9y
Tm9kZShub2RlLCBTcGVjQW55SW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IERvdWJsZVJlcFVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNO
dW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwganNEb3VibGVOdW1iZXIobGVmdC5hc051bWJlcigpICogcmlnaHQuYXNOdW1iZXIo
KSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKAorICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIAogICAgICAgICAgICAgICAgIHR5cGVPZkRvdWJsZVByb2R1Y3QoCiAgICAgICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBVbnR5
cGVkVXNlOgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
Y2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBo
LCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAg
ICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTg2MSwyMCArODYxLDIwIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgRG91YmxlUmVwVXNlOgogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgICAgICBzZXRD
b25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihsZWZ0LmFzTnVtYmVyKCkgLyByaWdodC5hc051
bWJlcigpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoCisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgCiAgICAgICAgICAgICAgICAgdHlwZU9mRG91YmxlUXVvdGllbnQoCiAgICAg
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSht
X2dyYXBoLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7
CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0J5dGVjb2RlTnVt
YmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTkwMCwxNCArOTAwLDE0IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQg
JiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgICAg
ICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihmbW9kKGxlZnQuYXNOdW1iZXIoKSwg
cmlnaHQuYXNOdW1iZXIoKSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSgKKyAgICAgICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCAKICAgICAgICAgICAgICAgICB0eXBlT2ZEb3VibGVCaW5h
cnlPcCgKICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
LCBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtOTI3LDcgKzkyNyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihzdGQ6Om1pbihs
ZWZ0LmFzSW50MzIoKSwgcmlnaHQuYXNJbnQzMigpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJ
bnQzMk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJ
bnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNl
OgogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJp
Z2h0LmlzTnVtYmVyKCkpIHsKQEAgLTkzNiw3ICs5MzYsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwg
anNEb3VibGVOdW1iZXIoYSA8IGIgPyBhIDogKGIgPD0gYSA/IGIgOiBhICsgYikpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0VHlwZSgKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCAKICAg
ICAgICAgICAgICAgICB0eXBlT2ZEb3VibGVNaW5NYXgoCiAgICAgICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90
eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTk1Niw3ICs5NTYsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwganNOdW1iZXIoc3RkOjptYXgobGVmdC5hc0ludDMyKCksIHJpZ2h0LmFzSW50MzIo
KSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJp
Z2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CkBAIC05NjUsNyAr
OTY1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzRG91YmxlTnVtYmVyKGEgPiBiID8gYSA6IChi
ID49IGEgPyBiIDogYSArIGIpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoCisgICAgICAgICAgICBzZXRO
b25DZWxsVHlwZUZvck5vZGUobm9kZSwgCiAgICAgICAgICAgICAgICAgdHlwZU9mRG91YmxlTWlu
TWF4KAogICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUs
IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC05ODcsMTkgKzk4NywxOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAg
ICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gbnVtYmVyID0gY2hpbGQudG9OdW1iZXJG
cm9tUHJpbWl0aXZlKCkpIHsKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Rv
dWJsZU51bWJlcihmYWJzKCpudW1iZXIpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUodHlwZU9mRG91Ymxl
QWJzKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIHR5cGVPZkRvdWJsZUFicyhmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gVW50eXBlZFVzZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKTsKLSAgICAgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Z1bGxOdW1iZXIpOworICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9k
ZSwgU3BlY0Z1bGxOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CkBAIC0xMDE5LDEyICsxMDE5LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUodHlwZU9mRG91YmxlUG93
KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
bV90eXBlKSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCB0eXBlT2ZEb3Vi
bGVQb3coZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlLCBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5tX3R5cGUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBBcml0aFJh
bmRvbTogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0RvdWJs
ZVJlYWwpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0RvdWJsZVJl
YWwpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTEwNzMsMjcgKzEwNzMsMjcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlKSB7CiAgICAgICAg
ICAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG5vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKQotICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAg
ICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gRG91YmxlUmVw
VXNlKQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSh0eXBlT2ZEb3VibGVS
b3VuZGluZyhmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgICAg
ICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgdHlwZU9mRG91YmxlUm91bmRpbmcoZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpOwotICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRnVsbE51bWJlcik7CisgICAgICAgICAgICBjbG9i
YmVyV29ybGQoKTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVj
RnVsbE51bWJlcik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAg
ICAgCiAgICAgY2FzZSBBcml0aFNxcnQ6Ci0gICAgICAgIGV4ZWN1dGVEb3VibGVVbmFyeU9wRWZm
ZWN0cyhub2RlLCBjbG9iYmVyTGltaXQsIHNxcnQpOworICAgICAgICBleGVjdXRlRG91YmxlVW5h
cnlPcEVmZmVjdHMobm9kZSwgc3FydCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBcml0
aEZSb3VuZDoKLSAgICAgICAgZXhlY3V0ZURvdWJsZVVuYXJ5T3BFZmZlY3RzKG5vZGUsIGNsb2Ji
ZXJMaW1pdCwgW10oZG91YmxlIHZhbHVlKSAtPiBkb3VibGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHZhbHVlKTsgfSk7CisgICAgICAgIGV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhu
b2RlLCBbXShkb3VibGUgdmFsdWUpIC0+IGRvdWJsZSB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4odmFsdWUpOyB9KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQXJpdGhV
bmFyeToKLSAgICAgICAgZXhlY3V0ZURvdWJsZVVuYXJ5T3BFZmZlY3RzKG5vZGUsIGNsb2JiZXJM
aW1pdCwgYXJpdGhVbmFyeUZ1bmN0aW9uKG5vZGUtPmFyaXRoVW5hcnlUeXBlKCkpKTsKKyAgICAg
ICAgZXhlY3V0ZURvdWJsZVVuYXJ5T3BFZmZlY3RzKG5vZGUsIGFyaXRoVW5hcnlGdW5jdGlvbihu
b2RlLT5hcml0aFVuYXJ5VHlwZSgpKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgY2FzZSBMb2dpY2FsTm90OiB7CkBAIC0xMTA1LDcgKzExMDUsNyBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBzZXRDb25zdGFudChub2Rl
LCBqc0Jvb2xlYW4odHJ1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAg
ICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTEyMiw3ICsxMTIyLDcg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTExMzks
NTEgKzExMzksNTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VIZWFwVG9wKCk7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBTdHJpbmdTbGljZTogewotICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyk7CisgICAgICAgIHNldFR5cGVGb3JO
b2RlKG5vZGUsIFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNl
IFRvTG93ZXJDYXNlOiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBT
cGVjU3RyaW5nKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTG9hZEtleUZyb21NYXBCdWNrZXQ6CiAg
ICAgY2FzZSBMb2FkVmFsdWVGcm9tTWFwQnVja2V0OgogICAgIGNhc2UgRXh0cmFjdFZhbHVlRnJv
bVdlYWtNYXBHZXQ6Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAg
ICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
R2V0TWFwQnVja2V0OgogICAgIGNhc2UgR2V0TWFwQnVja2V0SGVhZDoKICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCi0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX3ZtLmhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuZ2V0
KCkpOworICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3ZtLmhhc2hNYXBCdWNrZXRNYXBT
dHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU2V0T2JqZWN0VXNlKTsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fdm0uaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZS5nZXQo
KSk7CisgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uaGFzaE1hcEJ1Y2tldFNldFN0
cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdl
dE1hcEJ1Y2tldE5leHQ6CiAgICAgICAgIGlmIChub2RlLT5idWNrZXRPd25lclR5cGUoKSA9PSBC
dWNrZXRPd25lclR5cGU6Ok1hcCkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3Jh
cGgsIG1fdm0uaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICBz
ZXRGb3JOb2RlKG5vZGUsIG1fdm0uaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZS5nZXQoKSk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmJ1Y2tldE93bmVyVHlwZSgp
ID09IEJ1Y2tldE93bmVyVHlwZTo6U2V0KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KG1fZ3JhcGgsIG1fdm0uaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAg
ICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZS5nZXQo
KSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNldEFkZDoKLSAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV92bS5oYXNoTWFwQnVja2V0U2V0U3RydWN0
dXJlLmdldCgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3ZtLmhhc2hNYXBCdWNrZXRT
ZXRTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTWFwU2V0Ogot
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX3ZtLmhhc2hNYXBCdWNrZXRNYXBT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uaGFzaE1hcEJ1
Y2tldE1hcFN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBXZWFr
U2V0QWRkOgpAQCAtMTE5MSw3ICsxMTkxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgV2Vha01hcEdldDoKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlQnl0ZWNvZGVUb3AoKTsKKyAgICAgICAgbWFrZUJ5dGVj
b2RlVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElzRW1wdHk6
CkBAIC0xNDQxLDcgKzE0NDEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIGlmIChjb25zdGFudFdhc1NldCkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0xNDkxLDcgKzE0OTEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0g
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3RyaW5nSWRlbnQpOwor
ICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nSWRlbnQpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKQEAgLTE1MzIsNyArMTUzMiw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7Cisg
ICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtMTY2OCw4ICsxNjY4LDggQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzQ2xvYmJl
cmluZykKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNs
b2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7
CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JO
b2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAg
ICAgCkBAIC0xNzA2LDcgKzE3MDYsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAKICAgICAgICAgICAgIGlmIChpc05vblN0cmluZ0NlbGxDb25zdGFudChsZWZ0
KSB8fCBpc05vblN0cmluZ0NlbGxDb25zdGFudChyaWdodCkpIHsKICAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5
cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTczNyw3ICsxNzM3LDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
LSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKQEAgLTE3NDksMTIgKzE3NDksMTIgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAg
ICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgotICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNl
bGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAogICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgpAQCAtMTc2MiwxNyArMTc2MiwxNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGNhc2Ug
SW50MzJVc2U6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgot
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxp
bWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJh
ZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNTdHJpbmcpOworICAgICAgICBzZXRUeXBl
Rm9yTm9kZShub2RlLCBTcGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFN0
cmluZ0NoYXJBdDoKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV92bS5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5n
U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IEdldEJ5VmFsOgpAQCAtMTc4Niw3ICsxNzg2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NY
b3I6IHsKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gR2V0QnlWYWwpCi0gICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CkBAIC0xODAyLDEyICsxODAyLDEyIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBz
ZXRDb25zdGFudChub2RlLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjT3Ro
ZXIpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlcik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xv
YmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAg
ICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2Rl
KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
ICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKQEAg
LTE4MjEsNzEgKzE4MjEsNzEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgICAgIC8vIGltcGxpZXMgYW4gaW4tYm91bmRzIGFjY2VzcykuIE5v
bmUgb2YgdGhpcyBmZWVscyBsaWtlIGl0J3Mgd29ydGggaXQsCiAgICAgICAgICAgICAgICAgLy8g
c28gd2UncmUgZ29pbmcgd2l0aCBUT1AgZm9yIG5vdy4gVGhlIHNhbWUgdGhpbmcgYXBwbGllcyB0
bwogICAgICAgICAgICAgICAgIC8vIGNsb2JiZXJpbmcgdGhlIHdvcmxkLgotICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0g
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICAgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShu
b2RlKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KG1fZ3JhcGgsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CiAgICAgICAg
IGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAg
ICAgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsK
KyAgICAgICAgICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25s
eSk7CisgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQz
Mk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToK
ICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKLSAg
ICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVy
TGltaXQpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAg
ICAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgICAgICBtYWtlSGVhcFRv
cEZvck5vZGUobm9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmFycmF5TW9kZSgp
LmlzU2FuZUNoYWluKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAg
ICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0RvdWJsZVJlYWwpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5
U3RvcmFnZToKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRz
KCkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
Y2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsK
KyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgIG1ha2VIZWFwVG9w
Rm9yTm9kZShub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJ
bnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25s
eSk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25s
eSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAg
ICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlw
ZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9k
ZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJh
eTo6VWludDMyQXJyYXk6CiAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50
MzIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25s
eSk7CisgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQz
Mk9ubHkpOwogICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxlSW50NTIoKSAmJiBub2RlLT5zaG91
bGRTcGVjdWxhdGVBbnlJbnQoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0FueUludCk7CisgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5v
ZGUsIFNwZWNBbnlJbnQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShTcGVjQW55SW50QXNEb3VibGUpOworICAgICAgICAgICAgICAgIHNl
dE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQW55SW50QXNEb3VibGUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRnVsbERvdWJsZSk7CisgICAgICAgICAgICBzZXRO
b25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Z1bGxEb3VibGUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShTcGVjRnVsbERvdWJsZSk7CisgICAgICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgU3BlY0Z1bGxEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMTkwMiwyNCArMTkwMiwyNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBB
cnJheTo6SW50MzI6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJv
dW5kcygpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50
aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKLSAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAg
ICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToK
ICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAg
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxp
bWl0KTsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCi0gICAgICAgICAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAg
ICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTI4LDggKzE5MjgsOCBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBBcnJheVB1c2g6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
Qnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBBcnJheVNsaWNlOiB7CkBAIC0xOTQyLDE4ICsxOTQyLDE4IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgc3RydWN0dXJlU2V0
LmFkZChtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+b3JpZ2luYWxBcnJh
eVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShBcnJheVdpdGhDb250aWd1b3VzKSkpOwogICAgICAg
ICBzdHJ1Y3R1cmVTZXQuYWRkKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0
LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKEFycmF5V2l0aERvdWJsZSkp
KTsKIAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBzdHJ1Y3R1cmVTZXQpOwor
ICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHN0cnVjdHVyZVNldCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIGNhc2UgQXJyYXlJbmRleE9mOiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5v
ZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAK
ICAgICBjYXNlIEFycmF5UG9wOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9w
KCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRC
eVZhbDoKQEAgLTE5NzIsMTQgKzE5NzIsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXhDaGVja2VkLnNhZmVH
ZXQoYXJndW1lbnRJbmRleCkgIT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykgewogICAgICAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGFyZ3VtZW50SW5kZXggPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIC0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IG1fc3Rh
dGUudmFyaWFibGVzKCkub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9k
ZSwgbV9zdGF0ZS5vcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50SW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudEluZGV4IDwgbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1iZXJPZkFyZ3Vt
ZW50cygpIC0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IG1f
c3RhdGUudmFyaWFibGVzKCkuYXJndW1lbnQoYXJndW1lbnRJbmRleCArIDEpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJndW1lbnRJbmRleCA8IG1fc3RhdGUubnVtYmVyT2ZBcmd1bWVudHMo
KSAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV9zdGF0
ZS5hcmd1bWVudChhcmd1bWVudEluZGV4ICsgMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xOTkzLDcgKzE5OTMsNyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBBYnN0cmFj
dFZhbHVlIHJlc3VsdDsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDEgKyBub2RlLT5u
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOyBpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpczsgKytpKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKAot
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoCisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZCgKICAgICAgICAgICAgICAgICAgICAgICAgIHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yMDAzLDExICsyMDAzLDExIEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGlm
IChyZXN1bHQudmFsdWUoKSkKICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gcmVz
dWx0OworICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCByZXN1bHQpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhl
YXBUb3AoKTsKKyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTIwMTYsNyArMjAxNiw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
UmVnRXhwRXhlYykgewogICAgICAgICAgICAgLy8gRXZlbiBpZiB3ZSd2ZSBwcm92ZW4ga25vd24g
aW5wdXQgdHlwZXMgYXMgUmVnRXhwT2JqZWN0IGFuZCBTdHJpbmcsCiAgICAgICAgICAgICAvLyBh
Y2Nlc3NpbmcgbGFzdEluZGV4IGlzIGVmZmVjdGZ1bCBpZiBpdCdzIGEgZ2xvYmFsIHJlZ2V4cC4K
LSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChKU1ZhbHVlIGdsb2JhbE9iamVjdFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV92YWx1ZSkgewpAQCAtMjAyNiwzMSArMjAyNiwzMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmVTZXQgc3RydWN0dXJlU2V0OwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTZXQuYWRk
KG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJy
YXlTdHJ1Y3R1cmUoKSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTZXQuYWRkKG1f
Z3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlX
aXRoR3JvdXBzU3RydWN0dXJlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQobV9ncmFwaCwgc3RydWN0dXJlU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgc2V0Rm9y
Tm9kZShub2RlLCBzdHJ1Y3R1cmVTZXQpOwogICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1lcmdlKFNwZWNPdGhlcik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsKKyAgICAgICAgc2V0
VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CiAgICAgICAgIC8vIEV2ZW4gaWYgd2UndmUgcHJvdmVu
IGtub3duIGlucHV0IHR5cGVzIGFzIFJlZ0V4cE9iamVjdCBhbmQgU3RyaW5nLAogICAgICAgICAv
LyBhY2Nlc3NpbmcgbGFzdEluZGV4IGlzIGVmZmVjdGZ1bCBpZiBpdCdzIGEgZ2xvYmFsIHJlZ2V4
cC4KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxp
bWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3Q6
CiAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gUmVnRXhwT2JqZWN0
VXNlKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMygpLnVzZUtpbmQoKSA9PSBTdHJpbmdV
c2UpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY090aGVyIHwg
U3BlY0FycmF5KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwgU3Bl
Y0FycmF5KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdEdsb2Jh
bDoKICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2Up
OwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY090aGVyIHwgU3Bl
Y0FycmF5KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwgU3BlY0Fy
cmF5KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFN0cmluZ1JlcGxh
Y2U6CkBAIC0yMDYwLDggKzIwNjAsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgICAgICAmJiBub2RlLT5jaGlsZDMoKS51c2VLaW5kKCkgPT0gU3Ry
aW5nVXNlKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgY2xvYmJlciB0aGUgd29ybGQu
IEl0IGp1c3QgcmVhZHMgYW5kIHdyaXRlcyByZWdleHAgc3RhdGUuCiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxp
bWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV92bS5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldEZv
ck5vZGUobm9kZSwgbV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgSnVtcDoKQEAgLTIxMDUsNyArMjEwNSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIERpcmVjdFRhaWxDYWxsOgogICAgIGNh
c2UgVGFpbENhbGxWYXJhcmdzOgogICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKLSAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsK
KyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTIxMjIsMTMgKzIxMjIsMTMgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBpZiAoIShmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNGdWxsTnVtYmVyIHwgU3BlY0Jvb2xl
YW4gfCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCB8IFNwZWNCaWdJbnQpKSkgewogICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgIGRpZEZvbGRD
bG9iYmVyV29ybGQoKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Cisg
ICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKG1fZ3JhcGgsIFNwZWNIZWFwVG9wICYgflNwZWNPYmplY3QpOworICAgICAgICBzZXRU
eXBlRm9yTm9kZShub2RlLCBTcGVjSGVhcFRvcCAmIH5TcGVjT2JqZWN0KTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkBAIC0yMTQ1LDEyICsyMTQ1LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYgKCEoZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlICYgflNwZWNCeXRlY29kZU51bWJlcikpIHsKICAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxk
KCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIGNsb2JiZXJX
b3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0J5dGVjb2Rl
TnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIxNzIsMTMgKzIx
NzIsMTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgY2FzZSBVbnR5cGVk
VXNlOgotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xv
YmJlckxpbWl0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaCwgbV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBz
ZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkBAIC0yMTg5LDI5ICsyMTg5LDI4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGlmICgyIDw9IHJhZGl4ICYmIHJhZGl4
IDw9IDM2KSB7CiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVl
KTsKICAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7Ci0gICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX2dyYXBoLm1fdm0u
c3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBt
X2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgY2xvYmJlcldvcmxk
KCk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTnVtYmVyVG9TdHJp
bmdXaXRoVmFsaWRSYWRpeENvbnN0YW50OiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1f
Z3JhcGgsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBzZXRG
b3JOb2RlKG5vZGUsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OiB7CiAg
ICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gU3RyaW5nT2Jq
ZWN0OjppbmZvKCkpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBub2RlLT5z
dHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgbm9kZS0+c3RydWN0dXJlKCkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5
OgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKLSAgICAgICAgICAgIG1fZ3JhcGgsCisgICAg
ICAgIHNldEZvck5vZGUobm9kZSwgCiAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgYnJlYWs7CiAK
QEAgLTIyMjAsMTIgKzIyMTksMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgLy8gV2UndmUgY29tcGlsZWQgYXNzdW1pbmcgd2UncmUgbm90
IGhhdmluZyBhIGJhZCB0aW1lLCBzbyB0byBiZSBjb25zaXN0ZW50CiAgICAgICAgICAgICAvLyB3
aXRoIFN0cnVjdHVyZVJlZ2lzdGVyYXRpb25QaGFzZSB3ZSBtdXN0IHNheSB3ZSBwcm9kdWNlIGFu
IG9yaWdpbmFsIGFycmF5CiAgICAgICAgICAgICAvLyBhbGxvY2F0aW9uIHN0cnVjdHVyZS4KLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsCisg
ICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGUoQXJyYXlXaXRoQ29udGlndW91cykpOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0gICAgICAgICAgICAgICAgbV9ncmFw
aCwKKyAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgCiAgICAgICAgICAgICAgICAgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpKTsKICAg
ICAgICAgfQogCkBAIC0yMjM4LDI0ICsyMjM1LDIzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmNhbkRvRmFzdFNwcmVhZChub2RlLCBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKSkpCi0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxk
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KAotICAgICAgICAgICAgbV9ncmFwaCwgbV92bS5maXhlZEFycmF5U3RydWN0dXJlLmdl
dCgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCAKKyAgICAgICAgICAgIG1fdm0uZml4ZWRB
cnJheVN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNl
IE5ld0FycmF5QnVmZmVyOgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKLSAgICAgICAgICAg
IG1fZ3JhcGgsCisgICAgICAgIHNldEZvck5vZGUobm9kZSwgCiAgICAgICAgICAgICBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6Ci0gICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQXJyYXkpOworICAgICAgICBzZXRUeXBlRm9y
Tm9kZShub2RlLCBTcGVjQXJyYXkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBOZXdUeXBlZEFycmF5OgpAQCAtMjI2MywyMCArMjI1OSwxOSBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAg
IGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0gICAgICAgICAgICBt
X2dyYXBoLAorICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIAogICAgICAgICAgICAgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+dHlwZWRBcnJheVN0cnVjdHVy
ZUNvbmN1cnJlbnRseSgKICAgICAgICAgICAgICAgICBub2RlLT50eXBlZEFycmF5VHlwZSgpKSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE5ld1JlZ2V4cDoKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKS0+cmVnRXhwU3RydWN0dXJlKCkpOworICAgICAgICBzZXRGb3JOb2Rl
KG5vZGUsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnJl
Z0V4cFN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IFRvVGhpczogewpAQCAtMjMyNSwyMSArMjMyMCwyMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53
YXRjaHBvaW50cygpLmFkZExhemlseShyYXJlRGF0YS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBv
aW50U2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkRm9sZENsb2Ji
ZXJXb3JsZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KG1fZ3JhcGgsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9y
Tm9kZShub2RlLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjRmluYWxPYmplY3QpOworICAgICAgICBjbG9i
YmVyV29ybGQoKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0ZpbmFsT2JqZWN0
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE5ld09iamVjdDoK
ICAgICAgICAgQVNTRVJUKCEhbm9kZS0+c3RydWN0dXJlKCkuZ2V0KCkpOwotICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEZv
ck5vZGUobm9kZSwgbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgVG9PYmplY3Q6CkBAIC0yMzU2LDggKzIzNTEsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBUb09iamVjdCkKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50
aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBo
LCBTcGVjT2JqZWN0KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXRU
eXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBA
IC0yMzgyLDU2ICsyMzc3LDU2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdP
YmplY3Q6IHsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0
dXJlU2V0KCkpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG5vZGUtPnN0cnVjdHVyZVNldCgp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXNoV2l0aFNjb3BlOgogICAg
ICAgICAvLyBXZSBkb24ndCB1c2UgdGhlIG1vcmUgcHJlY2lzZSB3aXRoU2NvcGVTdHJ1Y3R1cmUo
KSBoZXJlIGJlY2F1c2UgaXQgaXMgYSBMYXp5UHJvcGVydHkgYW5kIG1heSBub3QgeWV0IGJlIGFs
bG9jYXRlZC4KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPYmpl
Y3RPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPYmplY3RPdGhlcik7
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2Ug
TWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgK
LSAgICAgICAgICAgIG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0Rm9y
Tm9kZShub2RlLCAKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOgotICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKKyAgICAg
ICAgc2V0Rm9yTm9kZShub2RlLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyktPmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgotICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPnNjb3BlZEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKKyAgICAg
ICAgc2V0Rm9yTm9kZShub2RlLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyktPnNjb3BlZEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBp
ZiAoIW1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChub2RlKSkgewot
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPYmplY3QpOwor
ICAgICAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY09iamVjdCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmNsb25l
ZEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmNsb25lZEFyZ3Vt
ZW50c1N0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE5ld0dlbmVyYXRv
ckZ1bmN0aW9uOgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKLSAgICAgICAgICAgIG1fZ3Jh
cGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+
Z2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwg
CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyktPmdlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbjoKLSAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoCi0gICAgICAgICAgICBtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFzeW5jR2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1
cmUoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgCisgICAgICAgICAgICBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFzeW5jR2VuZXJhdG9y
RnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBOZXdBc3lu
Y0Z1bmN0aW9uOgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKLSAgICAgICAgICAgIG1fZ3Jh
cGgsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+
YXN5bmNGdW5jdGlvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCAKKyAg
ICAgICAgICAgIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKS0+YXN5bmNGdW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIE5ld0Z1bmN0aW9uOiB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNGdW5jdGlvbjo6c2VsZWN0U3RydWN0dXJl
Rm9yTmV3RnVuY0V4cChnbG9iYWxPYmplY3QsIG5vZGUtPmNhc3RPcGVyYW5kPEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KCkpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBzdHJ1Y3R1
cmUpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHN0cnVjdHVyZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCkBAIC0yNDQ1LDExICsyNDQwLDExIEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFw
aCwgU3BlY0Z1bmN0aW9uKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0Z1bmN0
aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXM6Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBTZXRDYWxsZWU6CkBAIC0yNDU3LDcgKzI0NTIsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICBjYXNlIEdldFJlc3RMZW5ndGg6Ci0gICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5v
ZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBH
ZXRHZXR0ZXI6IHsKQEAgLTI0NzAsNyArMjQ2NSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPYmplY3QpOworICAgICAg
ICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0KTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKQEAgLTI0ODQsNyArMjQ3OSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPYmplY3QpOworICAgICAg
ICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0KTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKQEAgLTI0OTUsNyArMjQ5MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY09iamVjdE90aGVy
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNraXBTY29wZTogewpAQCAtMjUwNCw3ICsy
NDk5LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKEpTVmFsdWUoanNDYXN0PEpT
U2NvcGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0T3RoZXIp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI1MzEsMTIgKzI1MjYsMTIgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPYmplY3RP
dGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPYmplY3RPdGhlcik7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0R2xvYmFsVGhpczogewotICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY09iamVjdCk7CisgICAgICAgIHNl
dFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPYmplY3QpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
QEAgLTI1NDUsMTQgKzI1NDAsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKHZh
bHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VCeXRlY29kZVRvcCgpOworICAgICAgICBtYWtlQnl0ZWNvZGVUb3BGb3JOb2RlKG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0Q2xvc3VyZVZh
cjoKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldFJlZ0V4cE9iamVjdExhc3RJbmRleDoK
LSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBtYWtlSGVhcFRv
cEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTZXRSZWdFeHBPYmpl
Y3RMYXN0SW5kZXg6CkBAIC0yNTYwLDIwICsyNTU1LDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2Ug
R2V0RnJvbUFyZ3VtZW50czoKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwor
ICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKICAgICBjYXNlIFB1dFRvQXJndW1lbnRzOgogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
R2V0QXJndW1lbnQ6Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAg
ICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
VHJ5R2V0QnlJZDoKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNvbnN0YW50IGZvbGQg
YXQgbGVhc3QgYXMgd2VsbCBhcyB0aGUgbm9ybWFsIEdldEJ5SWQgY2FzZS4KICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQyMgotICAgICAgICBm
b3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldEJ5SWREaXJlY3Q6CkBAIC0yNjA1
LDE1ICsyNjAwLDE1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZUhlYXBUb3AoKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIG1ha2VIZWFwVG9w
Rm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRCeVZh
bFdpdGhUaGlzOgogICAgIGNhc2UgR2V0QnlJZFdpdGhUaGlzOgotICAgICAgICBjbG9iYmVyV29y
bGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBt
YWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgY2FzZSBHZXRBcnJheUxlbmd0aDogewpAQCAtMjYyMywxMiArMjYxOCwxMiBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBzZXRDb25zdGFu
dChub2RlLCBqc051bWJlcih2aWV3LT5sZW5ndGgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0VmVjdG9yTGVuZ3RoOiB7Ci0gICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTI2MzYsOCArMjYzMSw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICBjYXNlIERlbGV0ZUJ5VmFsOiB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGNvdWxkIGRlY2lkZSBpZiB0aGUgZGVsZXRlIHdpbGwgYmUgc3VjY2Vzc2Z1bCBiYXNlZCBvbiB0
aGUgc2V0IG9mIHN0cnVjdHVyZXMgdGhhdAogICAgICAgICAvLyB3ZSBnZXQgZnJvbSBvdXIgYmFz
ZSB2YWx1ZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjYxMQot
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQp
OwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBj
bG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNC
b29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTI3NDcsNyArMjc0
Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
Ly8gbm9ib2R5IHdvdWxkIGN1cnJlbnRseSBiZW5lZml0IGZyb20gaGF2aW5nIHRoYXQgaW5mb3Jt
YXRpb24uIEJ1dCBpdCdzIGEgYnVnIG5vbmV0aGVsZXNzLgogICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KQogICAgICAgICAgICAgZGlkRm9sZENs
b2JiZXJTdHJ1Y3R1cmVzKCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsgLy8gVGhl
IHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KKyAgICAgICAgY2xlYXJGb3JOb2RlKG5vZGUpOyAv
LyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKICAgICBjYXNl
IENoZWNrU3ViQ2xhc3M6IHsKICAgICAgICAgSlNWYWx1ZSBjb25zdGFudCA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CkBAIC0yNzcxLDE4ICsyNzY2LDE4IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQ2FsbERPTUdldHRlckRhdGEq
IGNhbGxET01HZXR0ZXJEYXRhID0gbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKTsKICAgICAgICAg
RE9NSklUOjpDYWxsRE9NR2V0dGVyU25pcHBldCogc25pcHBldCA9IGNhbGxET01HZXR0ZXJEYXRh
LT5zbmlwcGV0OwogICAgICAgICBpZiAoIXNuaXBwZXQgfHwgc25pcHBldC0+ZWZmZWN0LndyaXRl
cykKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2Ji
ZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgaWYgKGNhbGxE
T01HZXR0ZXJEYXRhLT5kb21KSVQpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
bV9ncmFwaCwgY2FsbERPTUdldHRlckRhdGEtPmRvbUpJVC0+cmVzdWx0VHlwZSgpKTsKKyAgICAg
ICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIGNhbGxET01HZXR0ZXJEYXRhLT5kb21KSVQtPnJl
c3VsdFR5cGUoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgICAgICBtYWtlQnl0ZWNvZGVUb3BGb3JOb2RlKG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDYWxsRE9NOiB7CiAgICAgICAgIGNv
bnN0IERPTUpJVDo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBub2RlLT5zaWduYXR1cmUoKTsKICAg
ICAgICAgaWYgKHNpZ25hdHVyZS0+ZWZmZWN0LndyaXRlcykKLSAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBzaWduYXR1cmUtPnJlc3VsdCk7CisgICAgICAgICAg
ICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgc2lnbmF0dXJl
LT5yZXN1bHQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDaGVja0FycmF5OiB7
CkBAIC0yODUxLDcgKzI4NDYsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQobm9k
ZS0+YXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpDb252ZXJ0KTsKLSAgICAgICAg
Y2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlclN0cnVjdHVy
ZXMoKTsKICAgICAgICAgZmlsdGVyQXJyYXlNb2Rlcyhub2RlLT5jaGlsZDEoKSwgbm9kZS0+YXJy
YXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC0yODU5LDcgKzI4NTQsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFJl
Z2lzdGVyZWRTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSkKICAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVz
KGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CiAgICAgICAgIAog
ICAgICAgICAvLyBXZSBoYXZlIGEgYnVuY2ggb2Ygb3B0aW9ucyBvZiBob3cgdG8gZXhwcmVzcyB0
aGUgYWJzdHJhY3Qgc2V0IGF0IHRoaXMgcG9pbnQuIExldCBzZXQgUwogICAgICAgICAvLyBiZSB0
aGUgc2V0IG9mIHN0cnVjdHVyZXMgdGhhdCB0aGUgdmFsdWUgaGFkIGJlZm9yZSBjbG9iYmVyaW5n
IGFuZCBhc3N1bWUgdGhhdCBhbGwgb2YKQEAgLTI4ODgsNyArMjg4Myw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gTm90ZSB0aGF0IGl0J3Mg
dGVtcHRpbmcgdG8gc2ltcGx5IHNheSB0aGF0IHRoZSByZXN1bHRpbmcgdmFsdWUgaXMgQk9UVE9N
IGJlY2F1c2Ugb2YKICAgICAgICAgLy8gdGhlIGNvbnRyYWRpY3Rpb24uIFRoYXQgd291bGQgYmUg
d3JvbmcsIHNpbmNlIHdlIGhhdmVuJ3QgaGl0IGFuIGludmFsaWRhdGlvbiBwb2ludCwKICAgICAg
ICAgLy8geWV0LgotICAgICAgICB2YWx1ZS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkp
OworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgbm9kZS0+c3Ry
dWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlOiB7CkBAIC0yODk2LDExICsyODkxLDExIEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdmFsdWUsIG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICAgICAgaWYgKHZpZXcpCiAgICAg
ICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICBmb3JOb2Rl
KG5vZGUpLmNsZWFyKCk7CisgICAgICAgIGNsZWFyRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjogewotICAgICAgICBm
b3JOb2RlKG5vZGUpLmNsZWFyKCk7CisgICAgICAgIGNsZWFyRm9yTm9kZShub2RlKTsKICAgICAg
ICAgYnJlYWs7IAogICAgIH0KICAgICAgICAgCkBAIC0yOTEwLDcgKzI5MDUsNyBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBzZXRDb25zdGFu
dChub2RlLCBqc051bWJlcih2aWV3LT5ieXRlT2Zmc2V0KCkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI5NTgsMTAgKzI5NTMsMTAgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBjYXNlIEZpbmFsT2JqZWN0
VXNlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY09iamVjdCB8IFNwZWNPdGhl
cik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjk4Nyw3ICsyOTgyLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBpZiAodmFs
dWUuaXNDbGVhcigpKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKIAot
ICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwg
dmFsdWUpOwogICAgICAgICBpZiAodmFsdWUubV92YWx1ZSkKICAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzAwMSw3ICsyOTk2
LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykt
PmdldHRlclNldHRlclN0cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5nZXR0ZXJTZXR0ZXJT
dHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0zMDU4LDcg
KzMwNTMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwg
YmFzZVNldCkgPT0gQ29udHJhZGljdGlvbikKICAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxp
ZChmYWxzZSk7CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpID0gcmVzdWx0OworICAg
ICAgICBzZXRGb3JOb2RlKG5vZGUsIHJlc3VsdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgICAgIApAQCAtMzEwOCw3ICszMTAzLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICBvYnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0
LCB0cmFuc2l0aW9ucyk7CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFu
Z2VTdHJ1Y3R1cmUobV9ncmFwaCwgbmV3U2V0KSA9PSBDb250cmFkaWN0aW9uKQogICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLT5jaGlsZDIo
KSwgcmVzdWx0aW5nVmFsdWUpOwogICAgICAgICBpZiAoISFvcmlnaW5hbFZhbHVlICYmICFyZXN1
bHRpbmdWYWx1ZSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMzEyMyw3ICszMTE4LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0NlbGxPdGhlcik7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTMyMTksMTMgKzMyMTQsMTMgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBQdXRCeVZhbFdpdGhUaGlzOgogICAgIGNhc2UgUHV0QnlJZFdp
dGhUaGlzOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIFB1dEdldHRlckJ5SWQ6CkBAIC0zMjMzLDQxICszMjI4LDQxIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFB1dEdldHRlclNldHRlckJ5
SWQ6CiAgICAgY2FzZSBQdXRHZXR0ZXJCeVZhbDoKICAgICBjYXNlIFB1dFNldHRlckJ5VmFsOiB7
Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1p
dCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIERlZmluZURhdGFQcm9wZXJ0eToKICAgICBjYXNlIERlZmluZUFjY2Vzc29yUHJvcGVy
dHk6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBJbjogewogICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRldGVybWluZSB3aGVu
IHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBiYXNlZCBvbiBhYnN0cmFjdAogICAgICAg
ICAvLyB2YWx1ZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNCb29sZWFuKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNl
bGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIGNhc2UgSGFzT3duUHJvcGVydHk6IHsKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNl
dE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewotICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OiB7Ci0gICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmln
aW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9k
ZShub2RlLCBTcGVjQm9vbGVhbik7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwotICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBjbG9iYmVyV29ybGQoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CkBA
IC0zMjgwLDYxICszMjc1LDYxIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6IHsK
LSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNC
b29sZWFuKTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFu
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsK
LSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBjbG9iYmVyV29y
bGQoKTsKKyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKLSAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNDZWxsKTsKLSAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgc2V0VHlwZUZv
ck5vZGUobm9kZSwgU3BlY0NlbGwpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0g
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3RyaW5nIHwgU3BlY090
aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyB8IFNwZWNPdGhl
cik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmlj
UG5hbWU6IHsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNTdHJp
bmcgfCBTcGVjT3RoZXIpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5n
IHwgU3BlY090aGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgVG9JbmRleFN0
cmluZzogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmlu
Zyk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgZm9yTm9kZShu
b2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRHbG9iYWxMZXhpY2FsVmFyaWFibGU6Ci0gICAg
ICAgIGZvck5vZGUobm9kZSkubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgIG1ha2VCeXRlY29k
ZVRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXREeW5hbWlj
VmFyOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVy
TGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VCeXRlY29kZVRvcCgpOworICAgICAg
ICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFB1dER5bmFtaWNWYXI6Ci0gICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNs
b2JiZXJXb3JsZCgpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUmVzb2x2ZVNjb3BlOgot
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQp
OwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY09iamVjdCk7Cisg
ICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVj
T2JqZWN0KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJlc29sdmVTY29wZUZvckhvaXN0
aW5nRnVuY0RlY2xJbkV2YWw6Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUJ5dGVjb2Rl
VG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBtYWtlQnl0ZWNvZGVUb3BG
b3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyaWFi
bGU6CkBAIC0zMzQyLDIyICszMzM3LDIyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE92ZXJyaWRlc0hhc0luc3Rh
bmNlOgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAg
ICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICAgICAgLy8gU2FkbHks
IHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgSW5zdGFuY2VPZgot
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBzZXRO
b25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgSW5zdGFuY2VPZkN1c3RvbToKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgu
bV9mb3JtID09IFNTQSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkgPSBmb3JOb2RlKE5vZGVGbG93
UHJvamVjdGlvbihub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdykpOworICAgICAgICBz
ZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKG5vZGUsIE5vZGVGbG93
UHJvamVjdGlvbjo6U2hhZG93KSkpOwogICAgICAgICAvLyBUaGUgc3RhdGUgb2YgdGhpcyBub2Rl
IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGRlY2lkZWQsIGJ1dCBpdCBtYXkgaGF2ZSBiZWNvbWUg
YQogICAgICAgICAvLyBjb25zdGFudCwgaW4gd2hpY2ggY2FzZSB3ZSdkIGxpa2UgdG8ga25vdy4K
ICAgICAgICAgaWYgKGZvck5vZGUobm9kZSkubV92YWx1ZSkKQEAgLTMzNjgsNyArMzM2Myw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgTm9kZUZs
b3dQcm9qZWN0aW9uIHNoYWRvdyhub2RlLT5waGkoKSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFk
b3cpOwogICAgICAgICBpZiAoc2hhZG93LmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAgICBt
X3N0YXRlLmNyZWF0ZVZhbHVlRm9yTm9kZShzaGFkb3cpOwotICAgICAgICAgICAgZm9yTm9kZShz
aGFkb3cpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBzZXRGb3JOb2Rl
KHNoYWRvdywgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTMzOTAsOCArMzM4NSw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIERpcmVjdENhbGw6CiAgICAgY2FzZSBEaXJlY3RD
b25zdHJ1Y3Q6CiAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbElubGluZWRDYWxsZXI6Ci0gICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7
CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIEZvcmNlT1NSRXhpdDoKQEAgLTM0MDAsMTUgKzMzOTUsMTUgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKLSAgICAgICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJM
aW1pdCwgQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50Rm9yKTsKICAgICAg
ICAgbV9zdGF0ZS5zZXRTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoU3RydWN0dXJlc0FyZVdhdGNoZWQp
OworICAgICAgICBtX3N0YXRlLm9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpOwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgQ1BVSW50cmluc2ljOiAKICAgICAgICAgaWYgKG5vZGUtPmludHJp
bnNpYygpID09IENQVVJkdHNjSW50cmluc2ljKQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUoU3BlY090aGVyKTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9y
Tm9kZShub2RlLCBTcGVjT3RoZXIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ2hlY2tU
cmFwczoKQEAgLTM0NDEsMjYgKzM0MzYsMjUgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHMo
dHJ1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlKQogICAgICAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7Ci0g
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAg
ICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKLSAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQnl0ZWNvZGVOdW1iZXIp
OworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9y
Tm9kZShub2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBjYXNlIENyZWF0ZVJlc3Q6CiAgICAgICAgIGlmICghbV9ncmFwaC5pc1dhdGNoaW5nSGF2
aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIG1lYW5z
IHdlJ3JlIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCi0gICAgICAgICAgICBjbG9iYmVyV29y
bGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNBcnJheSk7CisgICAgICAgICAgICBjbG9i
YmVyV29ybGQoKTsKKyAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNBcnJheSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dCgKLSAgICAgICAgICAgIG1fZ3JhcGgsCisgICAgICAgIHNldEZvck5vZGUobm9kZSwKICAgICAg
ICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnJl
c3RQYXJhbWV0ZXJTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBA
IC0zNDc3LDcgKzM0NzEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgfQogCiAgICAgY2FzZSBTZXRGdW5jdGlvbk5hbWU6IHsKLSAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xv
YmJlcldvcmxkKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzUzNywxMCArMzUzMSw5
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyV29ybGQoCi0gICAgY29uc3QgQ29kZU9yaWdpbiYs
IHVuc2lnbmVkIGNsb2JiZXJMaW1pdCkKK3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmNsb2JiZXJXb3JsZCgpCiB7Ci0gICAgY2xvYmJlclN0cnVjdHVyZXMoY2xv
YmJlckxpbWl0KTsKKyAgICBjbG9iYmVyU3RydWN0dXJlcygpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KQEAgLTM1NzIsMTYgKzM1NjUsMTYgQEAgdm9pZCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGZ1bmN0b3Io
Zm9yTm9kZShub2RlKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9IG1f
c3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKLSAgICAgICAgZnVu
Y3RvcihtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50KGkpKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1iZXJPZkxvY2FscygpOyBpLS07KQotICAgICAgICBm
dW5jdG9yKG1fc3RhdGUudmFyaWFibGVzKCkubG9jYWwoaSkpOworICAgIGZvciAoc2l6ZV90IGkg
PSBtX3N0YXRlLm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspCisgICAgICAgIGZ1bmN0b3IobV9z
dGF0ZS5hcmd1bWVudChpKSk7CisgICAgZm9yIChzaXplX3QgaSA9IG1fc3RhdGUubnVtYmVyT2ZM
b2NhbHMoKTsgaS0tOykKKyAgICAgICAgZnVuY3RvcihtX3N0YXRlLmxvY2FsKGkpKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBjbG9i
YmVyTGltaXQpCit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpj
bG9iYmVyU3RydWN0dXJlcygpCiB7Ci0gICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwgQWJz
dHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXNGb3IpOworICAgIG1fc3RhdGUuY2xvYmJlclN0
cnVjdHVyZXMoKTsKICAgICBtX3N0YXRlLm1lcmdlQ2xvYmJlclN0YXRlKEFic3RyYWN0SW50ZXJw
cmV0ZXJDbG9iYmVyU3RhdGU6OkNsb2JiZXJlZFN0cnVjdHVyZXMpOwogICAgIG1fc3RhdGUuc2V0
U3RydWN0dXJlQ2xvYmJlclN0YXRlKFN0cnVjdHVyZXNBcmVDbG9iYmVyZWQpOwogfQpAQCAtMzcx
Niw3ICszNzA5LDcgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVycHJldGVyPEFicwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0
cyhOb2RlKiBub2RlLCB1bnNpZ25lZCBjbG9iYmVyTGltaXQsIGRvdWJsZSgqZXF1aXZhbGVudEZ1
bmN0aW9uKShkb3VibGUpKQordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZURvdWJsZVVuYXJ5T3BFZmZlY3RzKE5vZGUqIG5vZGUsIGRvdWJsZSgqZXF1
aXZhbGVudEZ1bmN0aW9uKShkb3VibGUpKQogewogICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgIGlmIChzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
bnVtYmVyID0gY2hpbGQudG9OdW1iZXJGcm9tUHJpbWl0aXZlKCkpIHsKQEAgLTM3MjksOCArMzcy
Miw4IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSkKICAgICAgICAgdHlwZSA9
IHR5cGVPZkRvdWJsZVVuYXJ5T3AoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsKICAg
ICBlbHNlCi0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2Ji
ZXJMaW1pdCk7Ci0gICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKHR5cGUpOworICAgICAgICBjbG9i
YmVyV29ybGQoKTsKKyAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgdHlwZSk7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMjMxMzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEzMywxNiArMTMzLDE2IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFw
aCwgY28KICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpCb29sZWFuOgotICAgICAgICBzZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAg
c2V0Tm9uQ2VsbFR5cGUoU3BlY0Jvb2xlYW4pOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6Ok90aGVyOgotICAgICAgICBzZXRUeXBlKFNwZWNPdGhlcik7CisgICAgICAg
IHNldE5vbkNlbGxUeXBlKFNwZWNPdGhlcik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIElu
ZmVycmVkVHlwZTo6SW50MzI6Ci0gICAgICAgIHNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAg
ICAgIHNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKLSAgICAgICAgc2V0VHlwZShTcGVjQnl0ZWNvZGVO
dW1iZXIpOworICAgICAgICBzZXROb25DZWxsVHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOwogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKICAgICAgICAgc2V0
KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CkBAIC01NTYsNiArNTU2
LDcgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50UwogICAgIH0KICAg
ICBpZiAoISFtX3ZhbHVlKQogICAgICAgICBvdXQucHJpbnQoIiwgIiwgaW5Db250ZXh0KG1fdmFs
dWUsIGNvbnRleHQpKTsKKyAgICBvdXQucHJpbnQoIiwgIiwgbV9lZmZlY3RFcG9jaCk7CiAgICAg
b3V0LnByaW50KCIpIik7CiB9CiAKQEAgLTU3NCw2ICs1NzUsMjAgQEAgdm9pZCBBYnN0cmFjdFZh
bHVlOjplbnN1cmVDYW5Jbml0aWFsaXplVwogfQogI2VuZGlmCiAKK3ZvaWQgQWJzdHJhY3RWYWx1
ZTo6ZmFzdEZvcndhcmRUb1Nsb3coQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBuZXdFcG9jaCkK
K3sKKyAgICBBU1NFUlQobmV3RXBvY2ggIT0gbV9lZmZlY3RFcG9jaCk7CisgICAgCisgICAgaWYg
KG5ld0Vwb2NoLmNsb2JiZXJFcG9jaCgpICE9IG1fZWZmZWN0RXBvY2guY2xvYmJlckVwb2NoKCkp
CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgaWYgKG5ld0Vwb2NoLnN0cnVjdHVy
ZUNsb2JiZXJTdGF0ZSgpID09IFN0cnVjdHVyZXNBcmVXYXRjaGVkKQorICAgICAgICBtX3N0cnVj
dHVyZS5vYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKTsKKyAgICAKKyAgICBtX2VmZmVjdEVwb2No
ID0gbmV3RXBvY2g7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworfQorCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAy
MzEzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAog
I2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWVDbG9i
YmVyRXBvY2guaCIKICNpbmNsdWRlICJERkdGaWx0cmF0aW9uUmVzdWx0LmgiCiAjaW5jbHVkZSAi
REZHRnJvemVuVmFsdWUuaCIKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKQEAgLTEwMywyMCAr
MTA0LDE3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCBjbG9iYmVyU3RydWN0dXJlc0ZvcihB
YnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdEZvcndhcmRU
byhBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoIG5ld0Vwb2NoKQogICAgIHsKLSAgICAgICAgdmFs
dWUuY2xvYmJlclN0cnVjdHVyZXMoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBvYnNlcnZlSW52
YWxpZGF0aW9uUG9pbnQoKQotICAgIHsKLSAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZUludmFs
aWRhdGlvblBvaW50KCk7Ci0gICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICB9Ci0gICAg
Ci0gICAgc3RhdGljIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBvaW50Rm9yKEFic3RyYWN0VmFs
dWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgdmFsdWUub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50
KCk7CisgICAgICAgIGlmIChuZXdFcG9jaCA9PSBtX2VmZmVjdEVwb2NoKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKCEobV90eXBlICYgU3BlY0NlbGwpKSB7Cisg
ICAgICAgICAgICBtX2VmZmVjdEVwb2NoID0gbmV3RXBvY2g7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBmYXN0Rm9yd2FyZFRvU2xvdyhuZXdFcG9jaCk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb24oUmVnaXN0ZXJlZFN0cnVjdHVyZSBm
cm9tLCBSZWdpc3RlcmVkU3RydWN0dXJlIHRvKQpAQCAtMjA2LDYgKzIwNCwxNiBAQCBzdHJ1Y3Qg
QWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAg
IHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCisgICAgeworICAg
ICAgICAqdGhpcyA9IG90aGVyOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChHcmFwaCYsIEFi
c3RyYWN0VmFsdWUmJiBvdGhlcikKKyAgICB7CisgICAgICAgICp0aGlzID0gV1RGTW92ZShvdGhl
cik7CisgICAgfQorICAgIAogICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgRnJvemVuVmFsdWUm
LCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOwogICAgIHZvaWQgc2V0KEdyYXBoJiwgU3RydWN0dXJl
Kik7CiAgICAgdm9pZCBzZXQoR3JhcGgmLCBSZWdpc3RlcmVkU3RydWN0dXJlKTsKQEAgLTIxNSw3
ICsyMjMsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgdm9pZCBzZXRUeXBlKEdyYXBo
JiwgU3BlY3VsYXRlZFR5cGUpOwogICAgIAogICAgIC8vIEFzIGFib3ZlLCBidXQgb25seSB2YWxp
ZCBmb3Igbm9uLWNlbGwgdHlwZXMuCi0gICAgdm9pZCBzZXRUeXBlKFNwZWN1bGF0ZWRUeXBlIHR5
cGUpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldE5vbkNlbGxUeXBlKFNwZWN1bGF0ZWRUeXBl
IHR5cGUpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghKHR5cGUgJiBTcGVjQ2VsbCkp
OwogICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwpAQCAtMzk3LDYgKzQwNSwxMCBAQCBzdHJ1
Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgLy8gZWZmZWN0IHRoYXQgbWFrZXMgbm9uLW9idmlvdXMg
Y2hhbmdlcyB0byB0aGUgaGVhcC4KICAgICBBcnJheU1vZGVzIG1fYXJyYXlNb2RlczsKICAgICAK
KyAgICAvLyBUaGUgZXBvY2guCisgICAgLy8gRklYTUU6IEV4cGxhaW4gdGhpcy4gKE9PUFMhISkK
KyAgICBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoIG1fZWZmZWN0RXBvY2g7CisgICAgCiAgICAg
Ly8gVGhpcyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdGhh
dCB0aGlzIHZhbHVlIGNhbgogICAgIC8vIGhhdmUgbm93IG9yIGFueSB0aW1lIGluIHRoZSBmdXR1
cmUsIHVubGVzcyBpdCBpcyByZWFzc2lnbmVkLiBOb3RlIHRoYXQgdGhpcwogICAgIC8vIGltcGxp
ZXMgbm90aGluZyBhYm91dCB0aGUgc3RydWN0dXJlLiBPZGRseSwgSlNWYWx1ZSgpIChpLmUuIHRo
ZSBlbXB0eSB2YWx1ZSkKQEAgLTQ1NSw2ICs0NjcsOCBAQCBwcml2YXRlOgogICAgICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgZmFzdEZvcndhcmRUb1Nsb3co
QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCk7CisgICAgCiAgICAgdm9pZCBmaWx0ZXJWYWx1ZUJ5
VHlwZSgpOwogICAgIHZvaWQgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZUNs
b2JiZXJFcG9jaC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVw
b2NoLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCit2b2lkIEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2g6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoY2xvYmJlckVwb2NoKCksICI6Iiwgc3Ry
dWN0dXJlQ2xvYmJlclN0YXRlKCkpOworfQorCit9IH0gLy8gbmFtZXNwYWUgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWVDbG9i
YmVyRXBvY2guaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdFcG9jaC5oIgorI2luY2x1ZGUgIkRGR1N0cnVj
dHVyZUNsb2JiZXJTdGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEFic3RyYWN0VmFsdWVDbG9iYmVy
RXBvY2ggeworcHVibGljOgorICAgIEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2goKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2ggZmlyc3Qo
U3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKKyAgICB7CisgICAgICAgIEFic3Ry
YWN0VmFsdWVDbG9iYmVyRXBvY2ggcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IEVw
b2NoOjpmaXJzdCgpLnRvVW5zaWduZWQoKSA8PCBlcG9jaFNoaWZ0OworICAgICAgICBzd2l0Y2gg
KGNsb2JiZXJTdGF0ZSkgeworICAgICAgICBjYXNlIFN0cnVjdHVyZXNBcmVXYXRjaGVkOgorICAg
ICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgfD0gd2F0Y2hlZEZsYWc7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjbG9iYmVyKCkKKyAgICB7CisgICAgICAgIG1fdmFsdWUgKz0gc3RlcDsKKyAgICAgICAg
bV92YWx1ZSAmPSB+d2F0Y2hlZEZsYWc7CisgICAgfQorICAgIAorICAgIHZvaWQgb2JzZXJ2ZUlu
dmFsaWRhdGlvblBvaW50KCkKKyAgICB7CisgICAgICAgIG1fdmFsdWUgfD0gd2F0Y2hlZEZsYWc7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBYnN0cmFjdFZhbHVlQ2xv
YmJlckVwb2NoJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09
IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBB
YnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlQ2xvYmJl
clN0YXRlIHN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV92YWx1ZSAmIHdhdGNoZWRGbGFnID8gU3RydWN0dXJlc0FyZVdhdGNoZWQgOiBTdHJ1Y3R1
cmVzQXJlQ2xvYmJlcmVkOworICAgIH0KKyAgICAKKyAgICBFcG9jaCBjbG9iYmVyRXBvY2goKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEVwb2NoOjpmcm9tVW5zaWduZWQobV92YWx1ZSA+
PiBlcG9jaFNoaWZ0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc3Rl
cCA9IDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB3YXRjaGVkRmxhZyA9IDE7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBlcG9jaFNoaWZ0ID0gMTsKKyAgICAKKyAgICB1
bnNpZ25lZCBtX3ZhbHVlIHsgMCB9OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjMxMzM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDg5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZVZh
bHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24pOwogICAgIEFic3RyYWN0VmFsdWUmIGZvck5v
ZGUoTm9kZUZsb3dQcm9qZWN0aW9uKTsKICAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2Ug
ZWRnZSkgeyByZXR1cm4gZm9yTm9kZShlZGdlLm5vZGUoKSk7IH0KLSAgICBPcGVyYW5kczxBYnN0
cmFjdFZhbHVlPiYgdmFyaWFibGVzKCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsOyB9
CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyRm9yTm9kZShOb2RlRmxvd1Byb2pl
Y3Rpb24gbm9kZSkKKyAgICB7CisgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsKKyAgICB9
CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyRm9yTm9kZShFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICBjbGVhckZvck5vZGUoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IHNldEZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3Vt
ZW50cykKKyAgICB7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIHN0ZDo6Zm9y
d2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0Rm9yTm9kZShF
ZGdlIGVkZ2UsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHNldEZv
ck5vZGUoZWRnZS5ub2RlKCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4p
OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHNldFR5cGVGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2Rl
LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUobV9ncmFwaCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXRUeXBlRm9yTm9kZShFZGdlIGVkZ2UsIEFyZ3VtZW50cyYmLi4uIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6
OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisgICAgCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRO
b25DZWxsVHlwZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUsIEFyZ3VtZW50cyYmLi4u
IGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0Tm9uQ2VsbFR5cGUo
c3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRO
b25DZWxsVHlwZUZvck5vZGUoRWRnZSBlZGdlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisg
ICAgeworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUoZWRnZS5ub2RlKCksIHN0ZDo6Zm9y
d2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9k
ZSkKKyAgICB7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAg
fQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYWtlQnl0ZWNvZGVUb3BGb3JOb2RlKEVk
Z2UgZWRnZSkKKyAgICB7CisgICAgICAgIG1ha2VCeXRlY29kZVRvcEZvck5vZGUoZWRnZS5ub2Rl
KCkpOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFrZUhlYXBUb3BGb3JO
b2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5tYWtlSGVhcFRvcCgpOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFr
ZUhlYXBUb3BGb3JOb2RlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIG1ha2VIZWFwVG9wRm9y
Tm9kZShlZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mQXJn
dW1lbnRzKCk7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyB9CisgICAgQWJzdHJhY3RW
YWx1ZSYgb3BlcmFuZChpbnQgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChv
cGVyYW5kKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBpbmRleCkgeyByZXR1
cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGluZGV4KTsgfQorICAgIEFic3RyYWN0VmFs
dWUmIGFyZ3VtZW50KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWls
LmFyZ3VtZW50KGluZGV4KTsgfQorICAgIAorICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXMoKQor
ICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCkKKyAgICB7CisgICAgICAgIFVOUkVB
Q0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIH0KICAgICAKICAgICBCYXNpY0Jsb2NrKiBibG9j
aygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAyMzEzMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcx
LDcgKzE3MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKCFzYWZlVG9FeGVjdXRl
KG1fc3RhdGUsIG1fZ3JhcGgsIG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIo
VU5TQUZFKSAiKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkYXRhTG9nKG1f
c3RhdGUudmFyaWFibGVzKCksICIgIiwgbV9pbnRlcnByZXRlcik7CisgICAgICAgICAgICAgICAg
ZGF0YUxvZyhtX3N0YXRlLnZhcmlhYmxlc0ZvckRlYnVnZ2luZygpLCAiICIsIG1faW50ZXJwcmV0
ZXIpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDIzMTMzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNzgsNyArMzc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
aWYgKGluZGV4ID49IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
LSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc3RhdGUudmFyaWFibGVz
KCkubnVtYmVyT2ZBcmd1bWVudHMoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRl
eCA+PSBtX3N0YXRlLm51bWJlck9mQXJndW1lbnRzKCkgLSAxKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgJKHJldmlzaW9uIDIzMTMzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd01hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1
LDI3ICs1NSwyNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgR3JhcGgmIGdyYXBoKCkgY29uc3QgeyBy
ZXR1cm4gbV9ncmFwaDsgfQogICAgIAotICAgIFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCkKKyAg
ICBBTFdBWVNfSU5MSU5FIFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCkKICAgICB7CiAgICAgICAg
IHJldHVybiBtX21hcFtub2RlSW5kZXhdOwogICAgIH0KICAgICAKLSAgICBUJiBhdChOb2RlKiBu
b2RlKQorICAgIEFMV0FZU19JTkxJTkUgVCYgYXQoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAg
IHJldHVybiBhdChub2RlLT5pbmRleCgpKTsKICAgICB9CiAgICAgCi0gICAgVCYgYXRTaGFkb3co
dW5zaWduZWQgbm9kZUluZGV4KQorICAgIEFMV0FZU19JTkxJTkUgVCYgYXRTaGFkb3codW5zaWdu
ZWQgbm9kZUluZGV4KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc2hhZG93TWFwW25vZGVJbmRl
eF07CiAgICAgfQogICAgIAotICAgIFQmIGF0U2hhZG93KE5vZGUqIG5vZGUpCisgICAgQUxXQVlT
X0lOTElORSBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGF0
U2hhZG93KG5vZGUtPmluZGV4KCkpOwogICAgIH0KICAgICAKLSAgICBUJiBhdCh1bnNpZ25lZCBu
b2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKQorICAgIEFMV0FZU19JTkxJ
TkUgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2lu
ZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBjYXNlIE5vZGVGbG93
UHJvamVjdGlvbjo6UHJpbWFyeToKQEAgLTg3LDIzICs4NywyMyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAqYml0d2lzZV9jYXN0PFQqPihudWxscHRyKTsKICAgICB9CiAgICAgCi0gICAgVCYg
YXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpCisgICAgQUxXQVlT
X0lOTElORSBUJiBhdChOb2RlKiBub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBhdChub2RlLT5pbmRleCgpLCBraW5kKTsKICAgICB9CiAg
ICAgCi0gICAgVCYgYXQoTm9kZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pCisgICAgQUxXQVlT
X0lOTElORSBUJiBhdChOb2RlRmxvd1Byb2plY3Rpb24gcHJvamVjdGlvbikKICAgICB7CiAgICAg
ICAgIHJldHVybiBhdChwcm9qZWN0aW9uLm5vZGUoKSwgcHJvamVjdGlvbi5raW5kKCkpOwogICAg
IH0KICAgICAKLSAgICBjb25zdCBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlSW5kZXgpOyB9Ci0gICAgY29u
c3QgVCYgYXQoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4o
dGhpcyktPmF0KG5vZGUpOyB9Ci0gICAgY29uc3QgVCYgYXRTaGFkb3codW5zaWduZWQgbm9kZUlu
ZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXRTaGFkb3co
bm9kZUluZGV4KTsgfQotICAgIGNvbnN0IFQmIGF0U2hhZG93KE5vZGUqIG5vZGUpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdFNoYWRvdyhub2RlKTsgfQotICAg
IGNvbnN0IFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5k
IGtpbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2Rl
SW5kZXgsIGtpbmQpOyB9Ci0gICAgY29uc3QgVCYgYXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQcm9q
ZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRo
aXMpLT5hdChub2RlLCBraW5kKTsgfQotICAgIGNvbnN0IFQmIGF0KE5vZGVGbG93UHJvamVjdGlv
biBwcm9qZWN0aW9uKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+
YXQocHJvamVjdGlvbik7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQmIGF0KHVuc2lnbmVk
IG5vZGVJbmRleCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0
KG5vZGVJbmRleCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQmIGF0KE5vZGUqIG5vZGUp
IGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlKTsgfQor
ICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVCYgYXRTaGFkb3codW5zaWduZWQgbm9kZUluZGV4KSBj
b25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXRTaGFkb3cobm9kZUlu
ZGV4KTsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVCYgYXRTaGFkb3coTm9kZSogbm9kZSkg
Y29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0U2hhZG93KG5vZGUp
OyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgsIE5v
ZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZs
b3dNYXAqPih0aGlzKS0+YXQobm9kZUluZGV4LCBraW5kKTsgfQorICAgIEFMV0FZU19JTkxJTkUg
Y29uc3QgVCYgYXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNv
bnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlLCBraW5kKTsg
fQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVCYgYXQoTm9kZUZsb3dQcm9qZWN0aW9uIHByb2pl
Y3Rpb24pIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChwcm9q
ZWN0aW9uKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuY3BwCShyZXZpc2lvbiAyMzEzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDIwICs2MCwz
MiBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvCiAgICAgQVNTRVJU
KGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpID09IGJhc2ljQmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKIAogICAgIG1fYWJzdHJhY3RW
YWx1ZXMucmVzaXplKCk7CisKKyAgICBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoIGVwb2NoID0g
QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6Zmlyc3QoYmFzaWNCbG9jay0+Y2ZhU3RydWN0dXJl
Q2xvYmJlclN0YXRlQXRIZWFkKTsKKyAgICBtX2VmZmVjdEVwb2NoID0gZXBvY2g7CiAgICAgCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLT5zaXplKCk7IGkrKykgewogICAg
ICAgICBOb2RlRmxvd1Byb2plY3Rpb246OmZvckVhY2goCiAgICAgICAgICAgICBiYXNpY0Jsb2Nr
LT5hdChpKSwgWyZdIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZVByb2plY3Rpb24pIHsKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVQcm9qZWN0aW9uKS5jbGVhcigpOworICAgICAgICAgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5hdChub2RlUHJvamVj
dGlvbik7CisgICAgICAgICAgICAgICAgdmFsdWUuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICB2
YWx1ZS5tX2VmZmVjdEVwb2NoID0gZXBvY2g7CiAgICAgICAgICAgICB9KTsKICAgICB9CiAKLSAg
ICBtX3ZhcmlhYmxlcyA9IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVhZDsKKyAgICBmb3IgKHNpemVf
dCBpID0gbV92YXJpYWJsZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gbV92YXJpYWJsZXNbaV07CisgICAgICAgIHZhbHVlID0gYmFzaWNCbG9jay0+dmFs
dWVzQXRIZWFkW2ldOworICAgICAgICB2YWx1ZS5tX2VmZmVjdEVwb2NoID0gZXBvY2g7CisgICAg
fQogICAgIAogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKICAgICAgICAgZm9yIChO
b2RlQWJzdHJhY3RWYWx1ZVBhaXImIGVudHJ5IDogYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhl
YWQpIHsKLSAgICAgICAgICAgIGlmIChlbnRyeS5ub2RlLmlzU3RpbGxWYWxpZCgpKQotICAgICAg
ICAgICAgICAgIGZvck5vZGUoZW50cnkubm9kZSkgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAg
IGlmIChlbnRyeS5ub2RlLmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBtX2Fic3RyYWN0VmFsdWVzLmF0KGVudHJ5Lm5vZGUpOworICAgICAg
ICAgICAgICAgIHZhbHVlID0gZW50cnkudmFsdWU7CisgICAgICAgICAgICAgICAgdmFsdWUubV9l
ZmZlY3RFcG9jaCA9IGVwb2NoOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAg
IGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKQEAgLTEyMywxMCArMTM1LDEw
IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogCiAgICAgICAgICAg
ICAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQz
MjoKLSAgICAgICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGkpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5cG9p
bnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXROb25DZWxsVHlwZShTcGVjSW50MzJPbmx5
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBGbHVz
aGVkQm9vbGVhbjoKLSAgICAgICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRIZWFk
LmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgICAgICAgICBl
bnRyeXBvaW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0Tm9uQ2VsbFR5cGUoU3BlY0Jv
b2xlYW4pOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNl
IEZsdXNoZWRDZWxsOgogICAgICAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdEhl
YWQuYXJndW1lbnQoaSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbENoZWNrKTsKQEAgLTIwMSwx
OSArMjEzLDE5IEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2sKICAg
ICBjYXNlIFRocmVhZGVkQ1BTOiB7CiAgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsr
YXJndW1lbnQpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxv
Y2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7Ci0gICAgICAgICAgICBtZXJnZVN0
YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVudCksIGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgICAgIG1l
cmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIHRoaXMtPmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewogICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKLSAgICAg
ICAgICAgIG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFibGVzLmxvY2FsKGxv
Y2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICAgICAg
bWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgdGhpcy0+bG9jYWwobG9jYWwpLCBibG9jay0+
dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBTU0E6IHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQotICAgICAgICAgICAgYmxvY2stPnZh
bHVlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7CisgICAgICAgICAgICBibG9jay0+
dmFsdWVzQXRUYWlsW2ldLm1lcmdlKHZhcmlhYmxlQXQoaSkpOwogCiAgICAgICAgIGZvciAoTm9k
ZUFic3RyYWN0VmFsdWVQYWlyJiB2YWx1ZUF0VGFpbCA6IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFp
bCkgewogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWVBdE5vZGUgPSBmb3JOb2RlKHZh
bHVlQXRUYWlsLm5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjMxMzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NywyMSArNDcsMTA0IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNyZWF0ZVZh
bHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24pIHsgfQogICAgIAotICAgIEFic3RyYWN0VmFs
dWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAgQUxXQVlTX0lOTElORSBB
YnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSk7CisgICAgICAgIHJldHVybiBm
YXN0Rm9yd2FyZChtX2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUpKTsKICAgICB9CiAgICAgCi0gICAg
QWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVkZ2UpCisgICAgQUxXQVlTX0lOTElORSBBYnN0
cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIHJldHVybiBmb3JO
b2RlKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAgCi0gICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1
ZT4mIHZhcmlhYmxlcygpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyRm9yTm9kZShOb2Rl
Rmxvd1Byb2plY3Rpb24gbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhYmxlczsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUp
OworICAgICAgICB2YWx1ZS5jbGVhcigpOworICAgICAgICB2YWx1ZS5tX2VmZmVjdEVwb2NoID0g
bV9lZmZlY3RFcG9jaDsKICAgICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFy
Rm9yTm9kZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBjbGVhckZvck5vZGUoZWRnZS5ub2Rl
KCkpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUs
IEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKTsKKyAgICAgICAgdmFsdWUuc2V0KG1f
Z3JhcGgsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgICAgICB2
YWx1ZS5tX2VmZmVjdEVwb2NoID0gbV9lZmZlY3RFcG9jaDsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZvck5v
ZGUoRWRnZSBlZGdlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBz
ZXRGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMp
Li4uKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRUeXBlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24g
bm9kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBtX2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUpOworICAgICAgICB2YWx1ZS5z
ZXRUeXBlKG1fZ3JhcGgsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOwor
ICAgICAgICB2YWx1ZS5tX2VmZmVjdEVwb2NoID0gbV9lZmZlY3RFcG9jaDsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IHNldFR5cGVGb3JOb2RlKEVkZ2UgZWRnZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAg
IHsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUoZWRnZS5ub2RlKCksIHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldE5vbkNlbGxUeXBlRm9y
Tm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQor
ICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX2Fic3RyYWN0VmFsdWVzLmF0
KG5vZGUpOworICAgICAgICB2YWx1ZS5zZXROb25DZWxsVHlwZShzdGQ6OmZvcndhcmQ8QXJndW1l
bnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICAgICAgdmFsdWUubV9lZmZlY3RFcG9jaCA9IG1fZWZm
ZWN0RXBvY2g7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXROb25DZWxsVHlwZUZvck5vZGUoRWRnZSBlZGdlLCBB
cmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUoZWRnZS5ub2RlKCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4p
OworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFrZUJ5dGVjb2RlVG9wRm9y
Tm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKTsKKyAgICAgICAgdmFsdWUubWFr
ZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgIHZhbHVlLm1fZWZmZWN0RXBvY2ggPSBtX2VmZmVjdEVw
b2NoOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFrZUJ5dGVjb2RlVG9w
Rm9yTm9kZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBtYWtlQnl0ZWNvZGVUb3BGb3JOb2Rl
KGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIG1ha2VI
ZWFwVG9wRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKKyAgICB7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKTsKKyAgICAgICAg
dmFsdWUubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgdmFsdWUubV9lZmZlY3RFcG9jaCA9IG1fZWZm
ZWN0RXBvY2g7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYWtlSGVhcFRv
cEZvck5vZGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKGVk
Z2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZh
cmlhYmxlc0ZvckRlYnVnZ2luZygpIHsgcmV0dXJuIG1fdmFyaWFibGVzOyB9CisKKyAgICB1bnNp
Z25lZCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGVzLm51bWJl
ck9mQXJndW1lbnRzKCk7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsg
cmV0dXJuIG1fdmFyaWFibGVzLm51bWJlck9mTG9jYWxzKCk7IH0KKyAgICBBYnN0cmFjdFZhbHVl
JiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlcy5v
cGVyYW5kKG9wZXJhbmQpKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGZhc3RGb3J3YXJkKG1fdmFyaWFibGVzLm9wZXJhbmQo
b3BlcmFuZCkpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KSB7IHJl
dHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlcy5sb2NhbChpbmRleCkpOyB9CisgICAgQWJzdHJh
Y3RWYWx1ZSYgYXJndW1lbnQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3Zh
cmlhYmxlcy5hcmd1bWVudChpbmRleCkpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFyaWFibGVB
dChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGZhc3RGb3J3YXJkKG1fdmFyaWFibGVzW2luZGV4XSk7
IH0KKyAgICAKICAgICAvLyBDYWxsIHRoaXMgYmVmb3JlIGJlZ2lubmluZyBDRkEgdG8gaW5pdGlh
bGl6ZSB0aGUgYWJzdHJhY3QgdmFsdWVzIG9mCiAgICAgLy8gYXJndW1lbnRzLCBhbmQgdG8gaW5k
aWNhdGUgd2hpY2ggYmxvY2tzIHNob3VsZCBiZSBsaXN0ZWQgZm9yIENGQQogICAgIC8vIGV4ZWN1
dGlvbi4KQEAgLTExOSw2ICsyMDIsMTAgQEAgcHVibGljOgogICAgIC8vIE1lcmdlVG9TdWNjZXNz
b3JzLgogICAgIGJvb2wgbWVyZ2VUb1N1Y2Nlc3NvcnMoQmFzaWNCbG9jayopOwogICAgIAorICAg
IHZvaWQgY2xvYmJlclN0cnVjdHVyZXMoKSB7IG1fZWZmZWN0RXBvY2guY2xvYmJlcigpOyB9Cisg
ICAgCisgICAgdm9pZCBvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKSB7IG1fZWZmZWN0RXBvY2gu
b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7IH0KKyAgICAKICAgICAvLyBNZXRob2RzIGludGVu
ZGVkIHRvIGJlIGNhbGxlZCBmcm9tIEFic3RyYWN0SW50ZXJwcmV0ZXIuCiAgICAgdm9pZCBzZXRD
bG9iYmVyU3RhdGUoQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZSBzdGF0ZSkgeyBtX2Ns
b2JiZXJTdGF0ZSA9IHN0YXRlOyB9CiAgICAgdm9pZCBtZXJnZUNsb2JiZXJTdGF0ZShBYnN0cmFj
dEludGVycHJldGVyQ2xvYmJlclN0YXRlIHN0YXRlKSB7IG1fY2xvYmJlclN0YXRlID0gbWVyZ2VD
bG9iYmVyU3RhdGVzKG1fY2xvYmJlclN0YXRlLCBzdGF0ZSk7IH0KQEAgLTEzOSw2ICsyMjYsMTIg
QEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIEFic3RyYWN0
VmFsdWUmIGZhc3RGb3J3YXJkKEFic3RyYWN0VmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
dmFsdWUuZmFzdEZvcndhcmRUbyhtX2VmZmVjdEVwb2NoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVl
OworICAgIH0KKyAgICAKICAgICB2b2lkIG1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGUqKTsKIAogICAgIHN0
YXRpYyBib29sIG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUmIGRlc3Rp
bmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGUqIGRlc3RpbmF0aW9uTm9kZSwgTm9k
ZSogc291cmNlTm9kZSk7CkBAIC0xNTQsNiArMjQ3LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aXNWYWxpZDsKICAgICBBYnN0cmFjdEludGVycHJldGVyQ2xvYmJlclN0YXRlIG1fY2xvYmJlclN0
YXRlOwogICAgIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBtX3N0cnVjdHVyZUNsb2JiZXJTdGF0ZTsK
KyAgICBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoIG1fZWZmZWN0RXBvY2g7CiAgICAgCiAgICAg
QnJhbmNoRGlyZWN0aW9uIG1fYnJhbmNoRGlyZWN0aW9uOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGZv
ciBibG9ja3MgdGhhdCBlbmQgaW4gQnJhbmNoIGFuZCB0aGF0IGV4ZWN1dGUgdG8gY29tcGxldGlv
biAoaS5lLiBtX2lzVmFsaWQgPT0gdHJ1ZSkuCiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMzEzMzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTMyLDcgKzE5MzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2Rl
LT5sb2NhbCgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSk7CiAKICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0
aGlzIHZhcmlhYmxlIGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBj
YW5ub3QgaGF2ZSBiZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHJldmlzaW9uIDIzMTMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4NSw3ICsxNjg1LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNvbXBpbGVHZXRTdGFjaygpCiAgICAgewogICAgICAgICBTdGFja0FjY2Vzc0Rh
dGEqIGRhdGEgPSBtX25vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5sb2NhbCk7Cisg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2Fs
KTsKICAgICAgICAgCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0NvbmNy
ZXRlKGRhdGEtPmZvcm1hdCksIGRhdGEtPmZvcm1hdCk7CiAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCBkYXRhLT5mb3JtYXQgIT0gRmx1c2hlZERvdWJsZSwgZGF0YS0+Zm9ybWF0
KTsgLy8gVGhpcyBqdXN0IGhhcHBlbnMgdG8gbm90IGFyaXNlIGZvciBHZXRTdGFja3MsIHJpZ2h0
IG5vdy4gSXQgd291bGQgYmUgdHJpdmlhbCB0byBzdXBwb3J0Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339663</attachid>
            <date>2018-05-05 18:25:38 -0700</date>
            <delta_ts>2018-05-06 10:29:12 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>117459</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzEzOTkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE4LTA1LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIEFJIHNob3VsZCBoYXZlIE8oMSkgY2xvYmJlcmluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Mjg3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3Mvc2ltcGxl
LWFpLWVmZmVjdC5qczogQWRkZWQuCisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKwog
MjAxOC0wNS0wNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoIHNob3VsZCByZXR1cm4gdHJ1ZSBmb3IgdW5kZWNp
ZGVkIGFycmF5cwpJbmRleDogSlNUZXN0cy9zdHJlc3Mvc2ltcGxlLWFpLWVmZmVjdC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zaW1wbGUtYWktZWZmZWN0LmpzCShub25leGlzdGVu
dCkKKysrIEpTVGVzdHMvc3RyZXNzL3NpbXBsZS1haS1lZmZlY3QuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzOSBAQAordmFyIGRvRWZmZWN0ID0gZmFsc2U7Cit2YXIgZGlkRWZmZWN0ID0g
ZmFsc2U7CisKK2Z1bmN0aW9uIGJhcihvLCBwKQoreworICAgIGlmIChkb0VmZmVjdCkgeworICAg
ICAgICBkZWxldGUgcC5nOworICAgICAgICBwLl9fZGVmaW5lR2V0dGVyX18oImciLCAoKSA9PiB7
CisgICAgICAgICAgICBkaWRFZmZlY3QgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIDQyOwor
ICAgICAgICB9KTsKKyAgICB9Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhv
LCBwKSB7CisgICAgdmFyIHJlc3VsdCA9IG8uZiArIHAuZzsKKyAgICBiYXIobywgcCk7CisgICAg
cmV0dXJuIHJlc3VsdCArIG8uZiArIHAuZzsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIG8g
PSB7ZzogMX07CitvLmggPSAyOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsK
KyAgICB2YXIgcmVzdWx0ID0gZm9vKHtmOiAxfSwge2c6IDN9KTsKKyAgICBpZiAocmVzdWx0ICE9
IDgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBpbiBsb29wOiAiICsgcmVzdWx0
OworfQorCitkb0VmZmVjdCA9IHRydWU7Cit2YXIgcmVzdWx0ID0gZm9vKHtmOiAxfSwge2c6IDN9
KTsKK2lmIChyZXN1bHQgIT0gNDcpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVu
ZDogIiArIHJlc3VsdDsKK2lmICghZGlkRWZmZWN0KQorICAgIHRocm93ICJFcnJvcjogZGlkIG5v
dCBkbyBlZmZlY3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzEz
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTEgQEAKKzIwMTgtMDUtMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KKworICAgICAgICBERkcgQUkgc2hvdWxkIGhhdmUgTygxKSBjbG9iYmVyaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyODcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4
ZXMgYW4gb2xkIHNjYWxhYmlsaXR5IHByb2JlbSBpbiBBSS4gUHJldmlvdXNseSwgaWYgd2UgZGlk
IGNsb2JiZXJXb3JsZCgpLCB0aGVuIHdlCisgICAgICAgIHdvdWxkIHRyYXZlcnNlIGFsbCBvZiB0
aGUgc3RhdGUgYXZhaWxhYmxlIHRvIHRoZSBBSSBhdCB0aGF0IHRpbWUgYW5kIGNsb2JiZXIgaXQu
CisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZXMgY2xvYmJlcldvcmxkKCkgdG8gYmUgTygx
KS4gSXQganVzdCBkb2VzIHNvbWUgbWF0aCB0byBhIGNsb2JiZXIgZXBvY2guCisgICAgICAgIAor
ICAgICAgICBUaGlzIGlzIGEgfjElIHNwZWVkLXVwIGZvciBjb21waWxlIHRpbWVzLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmZvck5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OnNldEZvck5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmNsZWFyRm9yTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6dmFyaWFibGVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5cGU+OjpjbG9iYmVyV29ybGQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpmb3JBbGxWYWx1ZXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0
dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZh
c3RGb3J3YXJkVG9TbG93KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZhc3RGb3J3YXJkVG8pOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1cmVzRm9yKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvYnNlcnZlSW52YWxpZGF0aW9uUG9p
bnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9ic2VydmVJ
bnZhbGlkYXRpb25Qb2ludEZvcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0
VmFsdWVDbG9iYmVyRXBvY2guY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlQ2xvYmJlckVwb2NoOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RWYWx1ZUNsb2JiZXJFcG9jaC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlQ2xvYmJlckVwb2NoOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpmaXJzdCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6Y2xvYmJlcik6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6b2JzZXJ2ZUludmFsaWRhdGlvblBv
aW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVw
b2NoOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
Q2xvYmJlckVwb2NoOjpzdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY29uc3QpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2g6OmNsb2JiZXJFcG9jaCBjb25zdCk6Cisg
ICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpzZXRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpB
dFRhaWxBYnN0cmFjdFN0YXRlOjpjbGVhckZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF0
VGFpbEFic3RyYWN0U3RhdGU6Om51bWJlck9mQXJndW1lbnRzIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6bG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6
OkF0VGFpbEFic3RyYWN0U3RhdGU6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRh
aWxBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjp2YXJpYWJsZXMpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6
OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0
YW50cyk6CisgICAgICAgICogZGZnL0RGR0Zsb3dNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpG
bG93TWFwOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01hcDo6YXRTaGFkb3cpOgorICAg
ICAgICAoSlNDOjpERkc6OkZsb3dNYXA6OmF0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpG
bG93TWFwOjphdFNoYWRvdyBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVn
aW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6
ZW5kQmFzaWNCbG9jayk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6
CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpzZXRGb3JOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6Y2xlYXJGb3JOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6dmFyaWFibGVzRm9yRGVidWdnaW5n
KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bnVtYmVyT2ZBcmd1
bWVudHMgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpu
dW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0
U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRl
Ojpsb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmFyZ3Vt
ZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6dmFyaWFibGVB
dCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmNsb2JiZXJTdHJ1
Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6b2JzZXJ2
ZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZTo6ZmFzdEZvcndhcmQpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0
YXRlOjp2YXJpYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRTdGFjayk6CisKIDIwMTgtMDUtMDUgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgQ0ZBIHBoYXNlIHNob3VsZCBv
bmx5IGRvIGNsb2JiZXIgYXNzZXJ0cyBpbiBkZWJ1ZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAkocmV2aXNpb24gMjMxMzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNiArMjc0LDcgQEAgZGVidWdnZXIvRGVidWdn
ZXJTY29wZS5jcHAKIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCiBkZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlckNsb2JiZXJTdGF0ZS5jcHAKIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAorZGZnL0RG
R0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwCiBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAogZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHAKIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIzMTM5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTksNiArMzE5LDcgQEAKIAkJMEY0RDhDNzgxRkNBM0NGQTAwMUQzMkFD
IC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxs
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0REUx
Q0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLzsgfTsKIAkJMEY0
RjExRTgyMDlCQ0RBQjAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYxMUU2MjA5QkNEQTEwMDcw
OTY1NCAvKiBDb21waWxlclRpbWluZ1Njb3BlLmggKi87IH07CisJCTBGNEYxMUVCMjA5RDQyNjYw
MDcwOTY1NCAvKiBERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMTFFQTIwOUQ0MjYzMDA3MDk2NTQg
LyogREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oICovOyB9OwogCQkwRjRGMjlFMDE4QjZB
RDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThC
NkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5o
ICovOyB9OwogCQkwRjRGODI4ODFFMkZGREUwMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjRGODI4QzFFMzFCOTc2MDA3NTE4NEMgLyogU3RvY2hhc3RpY1Nw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNEY4MjhBMUUzMUI5NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovOyB9OwpAQCAtMjMxMCw2ICsyMzExLDggQEAKIAkJ
MEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNP
cmlnaW5EdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjExRTYyMDlC
Q0RBMTAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29tcGlsZXJUaW1pbmdTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjRGMTFFNzIwOUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29w
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21waWxlclRpbWlu
Z1Njb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RjExRTkyMDlENDI2
MzAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5j
cHA7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEYxMUVBMjA5RDQyNjMwMDcwOTY1NCAvKiBERkdBYnN0
cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZh
bHVlQ2xvYmJlckVwb2NoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURE
MThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGF0aWNFeGVj
dXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhdGlj
RXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVj
dXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRGODI4NTFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTcxMTQsNiArNzExNyw4IEBACiAJCQkJQTcwNEQ4RkYxN0EwQkFBODAwNkJB
NTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggKi8sCiAJCQkJMEY1NUMxOTMx
NzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovLAogCQkJCTBGNjIwMTZG
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJCQkJMEY0RjExRTky
MDlENDI2MzAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwICovLAor
CQkJCTBGNEYxMUVBMjA5RDQyNjMwMDcwOTY1NCAvKiBERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVw
b2NoLmggKi8sCiAJCQkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8sCiAJCQkJMEZEM0U0MDAxQjYxOEFB
RjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5o
ICovLAogCQkJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwICovLApAQCAtOTA0MCw2ICs5MDQ1LDcgQEAKIAkJCQlBNTEzRTVDMjE4
NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI2NkY4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJy
YXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEYxMUVCMjA5RDQyNjYwMDcwOTY1NCAvKiBERkdB
YnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkM1
MTc2MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTMzRjUwODExQjg0MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5o
CShyZXZpc2lvbiAyMzEzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bl
cmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDcgKzI0NSw3IEBAIHB1YmxpYzoKICAgICAK
IHByaXZhdGU6CiAgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFy
ZSBhcmd1bWVudHMsIHRoZSByZXN0IGFyZSBsb2NhbHMuCi0gICAgVmVjdG9yPFQsIDI0PiBtX3Zh
bHVlczsKKyAgICBWZWN0b3I8VCwgMjQsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhbHVlczsK
ICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50czsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAy
MzEzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDE5ICs0MSw4MCBAQCBwdWJsaWM6CiAgICAgQWJz
dHJhY3RJbnRlcnByZXRlcihHcmFwaCYsIEFic3RyYWN0U3RhdGVUeXBlJik7CiAgICAgfkFic3Ry
YWN0SW50ZXJwcmV0ZXIoKTsKICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVG
bG93UHJvamVjdGlvbiBub2RlKQorICAgIEFMV0FZU19JTkxJTkUgQWJzdHJhY3RWYWx1ZSYgZm9y
Tm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3N0
YXRlLmZvck5vZGUobm9kZSk7CiAgICAgfQogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIGZvck5v
ZGUoRWRnZSBlZGdlKQorICAgIEFMV0FZU19JTkxJTkUgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShF
ZGdlIGVkZ2UpCiAgICAgewogICAgICAgICByZXR1cm4gZm9yTm9kZShlZGdlLm5vZGUoKSk7CiAg
ICAgfQogICAgIAotICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+JiB2YXJpYWJsZXMoKQorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUp
CiAgICAgewotICAgICAgICByZXR1cm4gbV9zdGF0ZS52YXJpYWJsZXMoKTsKKyAgICAgICAgbV9z
dGF0ZS5jbGVhckZvck5vZGUobm9kZSk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBjbGVhckZvck5vZGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgY2xlYXJGb3JOb2Rl
KGVkZ2Uubm9kZSgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9u
IG5vZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIG1fc3RhdGUu
c2V0Rm9yTm9kZShub2RlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQUxXQVlT
X0lOTElORSB2b2lkIHNldEZvck5vZGUoRWRnZSBlZGdlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVu
dHMpCisgICAgeworICAgICAgICBzZXRGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8
QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFR5cGVGb3JOb2RlKE5v
ZGVGbG93UHJvamVjdGlvbiBub2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgewor
ICAgICAgICBtX3N0YXRlLnNldFR5cGVGb3JOb2RlKG5vZGUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0VHlwZUZvck5vZGUoRWRnZSBlZGdl
LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBzZXRUeXBlRm9yTm9k
ZShlZGdlLm5vZGUoKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBu
b2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBtX3N0YXRlLnNl
dE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldE5vbkNlbGxUeXBlRm9yTm9kZShFZGdlIGVkZ2UsIEFy
Z3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9y
Tm9kZShlZGdlLm5vZGUoKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7
CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYWtlQnl0ZWNvZGVUb3BGb3JO
b2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQorICAgIHsKKyAgICAgICAgbV9zdGF0ZS5tYWtl
Qnl0ZWNvZGVUb3BGb3JOb2RlKG5vZGUpOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBt
YWtlQnl0ZWNvZGVUb3BGb3JOb2RlKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIG1ha2VIZWFwVG9wRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9k
ZSkKKyAgICB7CisgICAgICAgIG1fc3RhdGUubWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOworICAg
IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFrZUhlYXBUb3BGb3JOb2RlKEVkZ2Ug
ZWRnZSkKKyAgICB7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShlZGdlLm5vZGUoKSk7CiAg
ICAgfQogICAgIAogICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2soTm9kZSogbm9kZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKQpAQCAtMTQ5LDEzICsyMTAsMTMgQEAgcHVibGljOgog
ICAgIFBoaUNoaWxkcmVuKiBwaGlDaGlsZHJlbigpIHsgcmV0dXJuIG1fcGhpQ2hpbGRyZW4uZ2V0
KCk7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9y
aWdpbiYsIHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgdm9pZCBjbG9iYmVyV29ybGQoKTsK
ICAgICB2b2lkIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yQWxsVmFsdWVzKHVuc2lnbmVkIGluZGV4SW5CbG9j
aywgRnVuY3RvciYpOwogICAgIAotICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQg
aW5kZXhJbkJsb2NrKTsKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CiAgICAgdm9pZCBk
aWRGb2xkQ2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICAKICAgICB2b2lkIG9ic2VydmVUcmFuc2l0
aW9uKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgUmVnaXN0ZXJlZFN0cnVjdHVyZSBmcm9tLCBSZWdp
c3RlcmVkU3RydWN0dXJlIHRvKTsKQEAgLTE5MCw3ICsyNTEsNyBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgdmVyaWZ5RWRnZShOb2RlKiwgRWRnZSk7CiAgICAgdm9pZCB2ZXJpZnlFZGdlcyhO
b2RlKik7Ci0gICAgdm9pZCBleGVjdXRlRG91YmxlVW5hcnlPcEVmZmVjdHMoTm9kZSosIHVuc2ln
bmVkIGNsb2JiZXJMaW1pdCwgZG91YmxlKCplcXVpdmFsZW50RnVuY3Rpb24pKGRvdWJsZSkpOwor
ICAgIHZvaWQgZXhlY3V0ZURvdWJsZVVuYXJ5T3BFZmZlY3RzKE5vZGUqLCBkb3VibGUoKmVxdWl2
YWxlbnRGdW5jdGlvbikoZG91YmxlKSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9j
azsKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDIzMTM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDcgKzIyNyw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgY2FzZSBMYXp5SlNWYWx1
ZTo6U2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgogICAgICAgICBjYXNlIExhenlKU1ZhbHVlOjpLbm93
blN0cmluZ0ltcGw6CiAgICAgICAgIGNhc2UgTGF6eUpTVmFsdWU6Ok5ld1N0cmluZ0ltcGw6Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyk7Cisg
ICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjM1LDcgKzIzNSw3IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAogICAgIGNhc2UgSWRlbnRp
dHlXaXRoUHJvZmlsZToKICAgICBjYXNlIElkZW50aXR5OiB7Ci0gICAgICAgIGZvck5vZGUobm9k
ZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUpLnZhbHVl
KCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAg
ICBicmVhazsKQEAgLTI0MywzOSArMjQzLDM5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDoKICAg
ICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgIG1ha2VCeXRlY29kZVRvcEZvck5vZGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsK
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3Rh
dGUudmFyaWFibGVzKCkub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkub2Zmc2V0
KCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKHZhcmlh
YmxlQWNjZXNzRGF0YS0+bG9jYWwoKS5vZmZzZXQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBp
biB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vz
c0RhdGEtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQogICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlKSA9IHZhbHVlOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZhbHVlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAg
IFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAg
ICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEt
PmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChk
YXRhLT5sb2NhbCk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFs
cmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1
ZS5pc1R5cGUodHlwZUZpbHRlckZvcihkYXRhLT5mb3JtYXQpKSk7CiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUs
IHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExv
Y2FsOiB7Ci0gICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2RlLT5sb2NhbCgp
KSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAgIG1fc3RhdGUudmFy
aWFibGVzKCkub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+bG9jYWwpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yOTYsMjAgKzI5NiwyMCBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBz
dGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudCBtZWFucyB0aGF0IHNv
bWVvbmUgc2V0CiAgICAgICAgIC8vIHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFu
ZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCiAgICAgICAgIC8vIG5v
bi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOiB7CiAgICAgICAgIHVuc2lnbmVkIGVu
dHJ5cG9pbnRJbmRleCA9IG5vZGUtPmVudHJ5cG9pbnRJbmRleCgpOwogICAgICAgICBjb25zdCBW
ZWN0b3I8Rmx1c2hGb3JtYXQ+JiBhcmd1bWVudEZvcm1hdHMgPSBtX2dyYXBoLm1fYXJndW1lbnRG
b3JtYXRzW2VudHJ5cG9pbnRJbmRleF07CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSAwOyBhcmd1bWVudCA8IGFyZ3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrYXJndW1lbnQpIHsKLSAg
ICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1
bWVudChhcmd1bWVudCk7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3Rh
dGUuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudEZvcm1h
dHNbYXJndW1lbnRdKSB7CiAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKLSAgICAgICAg
ICAgICAgICB2YWx1ZS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHZh
bHVlLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAgICAgICAgICAgICB2YWx1
ZS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgICAgICB2YWx1ZS5zZXROb25DZWxs
VHlwZShTcGVjQm9vbGVhbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIEZsdXNoZWRDZWxsOgogICAgICAgICAgICAgICAgIHZhbHVlLnNldFR5cGUobV9ncmFwaCwg
U3BlY0NlbGwpOwpAQCAtMzMyLDcgKzMzMiw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MzA3MQogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
Y2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4u
c2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0zNDEsOSArMzQxLDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgTG9h
ZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIG1f
c3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5jb3VudCkuc2V0VHlwZShTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmNvdW50KS5zZXROb25DZWxsVHlw
ZShTcGVjSW50MzJPbmx5KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQg
LSAxOyBpLS07KQotICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEt
PnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgIG1fc3RhdGUu
b3BlcmFuZChkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtMzU0LDggKzM1NCw4IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIEJpdExTaGlmdDoKICAg
ICBjYXNlIEJpdFVSU2hpZnQ6IHsKICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
KSB7Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICBz
ZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkBAIC0zOTMsMTEgKzM5MywxMSBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEJpdEFu
ZAogICAgICAgICAgICAgJiYgKGlzQm9vbEludDMyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSB8fAogICAgICAgICAgICAgICAgIGlzQm9vbEludDMyU3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkpIHsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbEludDMyKTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxU
eXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbEludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMy
T25seSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQxMCw3ICs0MTAsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAg
ICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQzMl90PihtYWNo
aW5lSW50KSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNBbnlJbnQpOworICAg
ICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQW55SW50KTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjaGls
ZCAmJiBjaGlsZC5pc0ludDMyKCkpIHsKQEAgLTQxOCw3ICs0MTgsNyBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQo
bm9kZSwganNOdW1iZXIodmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQW55SW50QXNEb3Vi
bGUpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNBbnlJbnRB
c0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoY2hp
bGQgJiYgY2hpbGQuaXNJbnQzMigpKSB7CkBAIC00MjgsNyArNDI4LDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
SW50MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQz
Mk9ubHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDYyLDcgKzQ2Miw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9k
ZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAg
ICAgCkBAIC00ODcsMTEgKzQ4NywxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xJbnQzMik7CisgICAgICAgICAgICBzZXROb25D
ZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xJbnQzMik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJ
bnQzMk9ubHkpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMy
T25seSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC01MjUsNyArNTI1LDcg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
fQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUodHlwZSk7CisgICAgICAgIHNldE5vbkNl
bGxUeXBlRm9yTm9kZShub2RlLCB0eXBlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5maXhUeXBl
Rm9yUmVwcmVzZW50YXRpb24obV9ncmFwaCwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTUzNyw3ICs1MzcsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNBbnlJbnQpOworICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0FueUludCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CkBAIC01NDgsMjAgKzU0OCwyMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSAmIH5TcGVjRG91YmxlSW1wdXJlTmFOKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9k
ZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNEb3VibGVJbXB1cmVOYU4p
OwogICAgICAgICBmb3JOb2RlKG5vZGUpLmZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihtX2dyYXBo
LCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFZhbHVl
QWRkOiB7CiAgICAgICAgIEFTU0VSVChub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gVW50eXBlZFVz
ZSk7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3RyaW5n
IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAg
IHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFN0ckNhdDogewotICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyk7CisgICAgICAgIHNldFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IApAQCAtNTgxLDcgKzU4MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9u
bHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CiAgICAg
ICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzQW55SW50KCkgJiYgcmlnaHQuaXNB
bnlJbnQoKSkgewpAQCAtNTkxLDE0ICs1OTEsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0FueUludCk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3Bl
Y0FueUludCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6
CiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmln
aHQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzRG91
YmxlTnVtYmVyKGxlZnQuYXNOdW1iZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZSgKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCAKICAgICAg
ICAgICAgICAgICB0eXBlT2ZEb3VibGVTdW0oCiAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTYxMSw4ICs2MTEsOCBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgQXRvbWljc0lzTG9j
a0ZyZWU6IHsKICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBJbnQzMlVz
ZSkKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2Ji
ZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbEludDMyKTsK
KyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5v
ZGUobm9kZSwgU3BlY0Jvb2xJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNjM2
LDEwICs2MzYsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9u
bHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTY3NCwxNiArNjc0LDE2IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBpZiAobnVtYmVyT2ZSZW1vdmVk
Q2hpbGRyZW4gPT0gbnVtYmVyT2ZDaGlsZHJlbikgewogICAgICAgICAgICAgICAgIC8vIFByb3Bh
Z2F0ZSB0aGUgbGFzdCBjaGlsZC4gVGhpcyBpcyB0aGUgd2F5IHRha2VuIGluIHRoZSBjb25zdGFu
dCBmb2xkaW5nIHBoYXNlLgotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkcmVuLmNoaWxkKG51bWJlck9mQ2hpbGRyZW4gLSAxKSk7CisgICAgICAgICAg
ICAgICAgc2V0Rm9yTm9kZShub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkcmVuLmNoaWxkKG51bWJl
ck9mQ2hpbGRyZW4gLSAxKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKChudW1iZXJPZlJlbW92ZWRDaGlsZHJlbiArIDEpID09IG51bWJl
ck9mQ2hpbGRyZW4pIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobm9uRW1wdHlJbmRleCk7Ci0g
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGRyZW4uY2hp
bGQobm9uRW1wdHlJbmRleC52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShu
b2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkcmVuLmNoaWxkKG5vbkVtcHR5SW5kZXgudmFsdWUoKSkp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTcwMyw3ICs3MDMsNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIHNl
dE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEludDUyUmVwVXNlOgogICAgICAgICAgICAgaWYgKGxlZnQgJiYg
cmlnaHQgJiYgbGVmdC5pc0FueUludCgpICYmIHJpZ2h0LmlzQW55SW50KCkpIHsKQEAgLTcxMywy
MCArNzEzLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNBbnlJbnQpOworICAgICAg
ICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNBbnlJbnQpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAgICAgICAgICAgaWYgKGxl
ZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAg
ICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihsZWZ0LmFzTnVt
YmVyKCkgLSByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoCisgICAgICAgICAg
ICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgCiAgICAgICAgICAgICAgICAgdHlwZU9mRG91
YmxlRGlmZmVyZW5jZSgKICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICBjbG9iYmVyV29y
bGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAg
ICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShu
b2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzU1
LDcgKzc1NSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAg
ICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CiAgICAgICAgICAgICBp
ZiAoY2hpbGQgJiYgY2hpbGQuaXNBbnlJbnQoKSkgewpAQCAtNzcwLDIxICs3NzAsMjEgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0FueUludCk7CisgICAgICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgU3BlY0FueUludCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNO
dW1iZXIoKSkgewogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzRG91YmxlTnVt
YmVyKC1jaGlsZC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoCisgICAgICAgICAgICBz
ZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgCiAgICAgICAgICAgICAgICAgdHlwZU9mRG91Ymxl
TmVnYXRpb24oCiAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpOwotICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAg
Y2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwg
U3BlY0J5dGVjb2RlTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwpAQCAtODA5LDcgKzgwOSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNw
ZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW50NTJSZXBV
c2U6CiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzQW55SW50KCkgJiYg
cmlnaHQuaXNBbnlJbnQoKSkgewpAQCAtODIyLDIwICs4MjIsMjAgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0FueUludCk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUo
bm9kZSwgU3BlY0FueUludCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3Vi
bGVSZXBVc2U6CiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVy
KCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5v
ZGUsIGpzRG91YmxlTnVtYmVyKGxlZnQuYXNOdW1iZXIoKSAqIHJpZ2h0LmFzTnVtYmVyKCkpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZSgKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2Rl
LCAKICAgICAgICAgICAgICAgICB0eXBlT2ZEb3VibGVQcm9kdWN0KAogICAgICAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUsIGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpLm1fdHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVW50eXBlZFVz
ZToKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2Ji
ZXJMaW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC04NjEsMjAgKzg2MSwyMCBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9k
ZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IERvdWJsZVJlcFVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNO
dW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwganNEb3VibGVOdW1iZXIobGVmdC5hc051bWJlcigpIC8gcmlnaHQuYXNOdW1iZXIo
KSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKAorICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIAogICAgICAgICAgICAgICAgIHR5cGVPZkRvdWJsZVF1b3RpZW50KAogICAgICAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUsIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLm1fdHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVW50
eXBlZFVzZToKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFw
aCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAg
ICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC05MDAsMTQgKzkwMCwxNCBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBl
Rm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxl
ZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgc2V0
Q29uc3RhbnQobm9kZSwganNEb3VibGVOdW1iZXIoZm1vZChsZWZ0LmFzTnVtYmVyKCksIHJpZ2h0
LmFzTnVtYmVyKCkpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoCisgICAgICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgCiAgICAgICAgICAgICAgICAgdHlwZU9mRG91YmxlQmluYXJ5T3Ao
CiAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9y
Tm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTky
Nyw3ICs5MjcsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoc3RkOjptaW4obGVmdC5h
c0ludDMyKCksIHJpZ2h0LmFzSW50MzIoKSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJP
bmx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAg
ICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5p
c051bWJlcigpKSB7CkBAIC05MzYsNyArOTM2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzRG91
YmxlTnVtYmVyKGEgPCBiID8gYSA6IChiIDw9IGEgPyBiIDogYSArIGIpKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoCisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgCiAgICAgICAg
ICAgICAgICAgdHlwZU9mRG91YmxlTWluTWF4KAogICAgICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUsIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC05NTYsNyArOTU2LDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5v
ZGUsIGpzTnVtYmVyKHN0ZDo6bWF4KGxlZnQuYXNJbnQzMigpLCByaWdodC5hc0ludDMyKCkpKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgewpAQCAtOTY1LDcgKzk2NSw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAg
ICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihhID4gYiA/IGEgOiAoYiA+PSBh
ID8gYiA6IGEgKyBiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKAorICAgICAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIAogICAgICAgICAgICAgICAgIHR5cGVPZkRvdWJsZU1pbk1heCgK
ICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlLCBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTg3
LDE5ICs5ODcsMTkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7Cisg
ICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAgICAg
ICBpZiAoc3RkOjpvcHRpb25hbDxkb3VibGU+IG51bWJlciA9IGNoaWxkLnRvTnVtYmVyRnJvbVBy
aW1pdGl2ZSgpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNEb3VibGVO
dW1iZXIoZmFicygqbnVtYmVyKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKHR5cGVPZkRvdWJsZUFicyhm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxU
eXBlRm9yTm9kZShub2RlLCB0eXBlT2ZEb3VibGVBYnMoZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09
IFVudHlwZWRVc2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7Ci0gICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNGdWxsTnVtYmVyKTsKKyAgICAgICAgICAgIGNs
b2JiZXJXb3JsZCgpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNw
ZWNGdWxsTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwpAQCAtMTAxOSwxMiArMTAxOSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKHR5cGVPZkRvdWJsZVBvdyhmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUsIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlw
ZSkpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgdHlwZU9mRG91YmxlUG93
KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
bV90eXBlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQXJpdGhSYW5kb206
IHsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNEb3VibGVSZWFs
KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNEb3VibGVSZWFsKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMDczLDI3ICsxMDczLDI3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSkgewogICAgICAgICAgICAg
aWYgKHByb2R1Y2VzSW50ZWdlcihub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgpKSkKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSkK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUodHlwZU9mRG91YmxlUm91bmRp
bmcoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIHR5cGVPZkRvdWJsZVJvdW5kaW5nKGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKTsKLSAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY0Z1bGxOdW1iZXIpOworICAgICAgICAgICAgY2xvYmJlcldv
cmxkKCk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Z1bGxO
dW1iZXIpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAog
ICAgIGNhc2UgQXJpdGhTcXJ0OgotICAgICAgICBleGVjdXRlRG91YmxlVW5hcnlPcEVmZmVjdHMo
bm9kZSwgY2xvYmJlckxpbWl0LCBzcXJ0KTsKKyAgICAgICAgZXhlY3V0ZURvdWJsZVVuYXJ5T3BF
ZmZlY3RzKG5vZGUsIHNxcnQpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQXJpdGhGUm91
bmQ6Ci0gICAgICAgIGV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhub2RlLCBjbG9iYmVyTGlt
aXQsIFtdKGRvdWJsZSB2YWx1ZSkgLT4gZG91YmxlIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
Pih2YWx1ZSk7IH0pOworICAgICAgICBleGVjdXRlRG91YmxlVW5hcnlPcEVmZmVjdHMobm9kZSwg
W10oZG91YmxlIHZhbHVlKSAtPiBkb3VibGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZh
bHVlKTsgfSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEFyaXRoVW5hcnk6
Ci0gICAgICAgIGV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhub2RlLCBjbG9iYmVyTGltaXQs
IGFyaXRoVW5hcnlGdW5jdGlvbihub2RlLT5hcml0aFVuYXJ5VHlwZSgpKSk7CisgICAgICAgIGV4
ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhub2RlLCBhcml0aFVuYXJ5RnVuY3Rpb24obm9kZS0+
YXJpdGhVbmFyeVR5cGUoKSkpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNh
c2UgTG9naWNhbE5vdDogewpAQCAtMTEwNSw3ICsxMTA1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNC
b29sZWFuKHRydWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAg
IHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTExMjIsNyArMTEyMiw3IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2Rl
LCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMTM5LDUxICsx
MTM5LDUxIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVh
cFRvcCgpOworICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIGNhc2UgU3RyaW5nU2xpY2U6IHsKLSAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNTdHJpbmcpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShu
b2RlLCBTcGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBUb0xv
d2VyQ2FzZTogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0
cmluZyk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIExvYWRLZXlGcm9tTWFwQnVja2V0OgogICAgIGNh
c2UgTG9hZFZhbHVlRnJvbU1hcEJ1Y2tldDoKICAgICBjYXNlIEV4dHJhY3RWYWx1ZUZyb21XZWFr
TWFwR2V0OgotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIG1h
a2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldE1h
cEJ1Y2tldDoKICAgICBjYXNlIEdldE1hcEJ1Y2tldEhlYWQ6CiAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlKQotICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaCwgbV92bS5oYXNoTWFwQnVja2V0TWFwU3RydWN0dXJlLmdldCgpKTsK
KyAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV92bS5oYXNoTWFwQnVja2V0TWFwU3RydWN0
dXJlLmdldCgpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IFNldE9iamVjdFVzZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLCBtX3ZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuZ2V0KCkpOwor
ICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3ZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1
cmUuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRNYXBC
dWNrZXROZXh0OgogICAgICAgICBpZiAobm9kZS0+YnVja2V0T3duZXJUeXBlKCkgPT0gQnVja2V0
T3duZXJUeXBlOjpNYXApCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBt
X3ZtLmhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgc2V0Rm9y
Tm9kZShub2RlLCBtX3ZtLmhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChub2RlLT5idWNrZXRPd25lclR5cGUoKSA9PSBC
dWNrZXRPd25lclR5cGU6OlNldCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dy
YXBoLCBtX3ZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAg
c2V0Rm9yTm9kZShub2RlLCBtX3ZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuZ2V0KCkpOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTZXRBZGQ6Ci0gICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fdm0uaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZS5n
ZXQoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV92bS5oYXNoTWFwQnVja2V0U2V0U3Ry
dWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1hcFNldDoKLSAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV92bS5oYXNoTWFwQnVja2V0TWFwU3RydWN0
dXJlLmdldCgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3ZtLmhhc2hNYXBCdWNrZXRN
YXBTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgV2Vha1NldEFk
ZDoKQEAgLTExOTEsNyArMTE5MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFdlYWtNYXBHZXQ6Ci0gICAgICAg
IGZvck5vZGUobm9kZSkubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgIG1ha2VCeXRlY29kZVRv
cEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBJc0VtcHR5OgpAQCAt
MTQ0MSw3ICsxNDQxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgCi0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAg
IHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtMTQ5MSw3ICsxNDkxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAg
ICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZ0lkZW50KTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0xNTMyLDcgKzE1MzIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAg
ICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTE2NjgsOCArMTY2OCw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc0Nsb2JiZXJpbmcp
Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVy
TGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShu
b2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApA
QCAtMTcwNiw3ICsxNzA2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogCiAgICAgICAgICAgICBpZiAoaXNOb25TdHJpbmdDZWxsQ29uc3RhbnQobGVmdCkgfHwg
aXNOb25TdHJpbmdDZWxsQ29uc3RhbnQocmlnaHQpKSB7CiAgICAgICAgICAgICAgICAgbV9zdGF0
ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9y
Tm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTE3MzcsNyArMTczNyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIHNldE5vbkNl
bGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCkBAIC0xNzQ5LDEyICsxNzQ5LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBz
ZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBzZXROb25DZWxsVHlw
ZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToKQEAgLTE3NjIsMTcgKzE3NjIsMTcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBjYXNlIEludDMy
VXNlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNl
IGtpbmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgc2V0VHlwZUZvck5v
ZGUobm9kZSwgU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTdHJpbmdD
aGFyQXQ6Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fdm0uc3RyaW5nU3Ry
dWN0dXJlLmdldCgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3ZtLnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRC
eVZhbDoKQEAgLTE3ODYsNyArMTc4Niw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICBjYXNlIEF0b21pY3NTdWI6CiAgICAgY2FzZSBBdG9taWNzWG9yOiB7
CiAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IEdldEJ5VmFsKQotICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAg
IGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSkgewogICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAg
ICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgpAQCAtMTgwMiwxMiArMTgwMiwxMiBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgc2V0Q29u
c3RhbnQobm9kZSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY090aGVyKTsK
KyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoK
LSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAg
ICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2Rl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CkBAIC0xODIx
LDcxICsxODIxLDcxIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgICAgICAgICAvLyBpbXBsaWVzIGFuIGluLWJvdW5kcyBhY2Nlc3MpLiBOb25lIG9m
IHRoaXMgZmVlbHMgbGlrZSBpdCdzIHdvcnRoIGl0LAogICAgICAgICAgICAgICAgIC8vIHNvIHdl
J3JlIGdvaW5nIHdpdGggVE9QIGZvciBub3cuIFRoZSBzYW1lIHRoaW5nIGFwcGxpZXMgdG8KICAg
ICAgICAgICAgICAgICAvLyBjbG9iYmVyaW5nIHRoZSB3b3JsZC4KLSAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7
CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCht
X2dyYXBoLCBtX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgc2V0
Rm9yTm9kZShub2RlLCBtX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNl
IEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUp
Lm1ha2VIZWFwVG9wKCk7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAg
ICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNPdXRPZkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAg
ICAgICAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7Ci0gICAgICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0
KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICAgICAgbWFrZUhlYXBUb3BGb3JO
b2RlKG5vZGUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc1Nh
bmVDaGFpbigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQnl0
ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2Rl
LCBTcGVjQnl0ZWNvZGVEb3VibGUpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlUmVhbCk7CisgICAgICAgICAgICAgICAg
c2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3Jh
Z2U6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQot
ICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2Ji
ZXJMaW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAg
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICBtYWtlSGVhcFRvcEZvck5v
ZGUobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIHNldE5vbkNl
bGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JO
b2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNw
ZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQzMkFycmF5OgogICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0ZUludDMyKCkp
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5
KTsKICAgICAgICAgICAgIGVsc2UgaWYgKGVuYWJsZUludDUyKCkgJiYgbm9kZS0+c2hvdWxkU3Bl
Y3VsYXRlQW55SW50KCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNBbnlJbnQpOworICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjQW55SW50KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgICAgICBzZXROb25D
ZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0FueUludEFzRG91YmxlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY0Z1bGxEb3VibGUpOworICAgICAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNGdWxsRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0Z1bGxEb3VibGUpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNGdWxsRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTE5MDIsMjQgKzE5MDIsMjQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAg
IGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OkludDMyOgogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMo
KSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBj
bG9iYmVyTGltaXQpOworICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAg
ICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQotICAgICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTkyOCw4ICsxOTI4LDggQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgICAgIAogICAgIGNh
c2UgQXJyYXlQdXNoOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxU
eXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgQXJyYXlTbGljZTogewpAQCAtMTk0MiwxOCArMTk0MiwxOCBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIHN0cnVjdHVyZVNldC5hZGQo
bV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGUoQXJyYXlXaXRoQ29udGlndW91cykpKTsKICAgICAgICAgc3Ry
dWN0dXJlU2V0LmFkZChtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+b3Jp
Z2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShBcnJheVdpdGhEb3VibGUpKSk7CiAK
LSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgc3RydWN0dXJlU2V0KTsKKyAgICAg
ICAgc2V0Rm9yTm9kZShub2RlLCBzdHJ1Y3R1cmVTZXQpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIEFycmF5SW5kZXhPZjogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAg
Y2FzZSBBcnJheVBvcDoKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwor
ICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6
CkBAIC0xOTcyLDE0ICsxOTcyLDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4Q2hlY2tlZC5zYWZlR2V0KGFy
Z3VtZW50SW5kZXgpICE9IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHsKICAgICAgICAgICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudEluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAt
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBtX3N0YXRlLnZh
cmlhYmxlcygpLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1f
c3RhdGUub3BlcmFuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRJbmRleCA8IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMo
KSAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBtX3N0YXRl
LnZhcmlhYmxlcygpLmFyZ3VtZW50KGFyZ3VtZW50SW5kZXggKyAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBtX3N0YXRlLm51bWJlck9mQXJndW1lbnRzKCkgLSAx
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fc3RhdGUuYXJn
dW1lbnQoYXJndW1lbnRJbmRleCArIDEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTk5Myw3ICsxOTkzLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSByZXN1bHQ7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgbm9kZS0+bnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAoKTsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7ICsraSkgewogICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKLSAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAorICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlLm9wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjAwMywxMSArMjAwMywxMSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBpZiAocmVz
dWx0LnZhbHVlKCkpCiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0
cnVlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IHJlc3VsdDsK
KyAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9w
KCk7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAgICAgCkBAIC0yMDE2LDcgKzIwMTYsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFJlZ0V4
cEV4ZWMpIHsKICAgICAgICAgICAgIC8vIEV2ZW4gaWYgd2UndmUgcHJvdmVuIGtub3duIGlucHV0
IHR5cGVzIGFzIFJlZ0V4cE9iamVjdCBhbmQgU3RyaW5nLAogICAgICAgICAgICAgLy8gYWNjZXNz
aW5nIGxhc3RJbmRleCBpcyBlZmZlY3RmdWwgaWYgaXQncyBhIGdsb2JhbCByZWdleHAuCi0gICAg
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQp
OworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
SlNWYWx1ZSBnbG9iYWxPYmplY3RWYWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdmFs
dWUpIHsKQEAgLTIwMjYsMzEgKzIwMjYsMzEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0
IHN0cnVjdHVyZVNldDsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlU2V0LmFkZChtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3Ry
dWN0dXJlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlU2V0LmFkZChtX2dyYXBo
LnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5V2l0aEdy
b3Vwc1N0cnVjdHVyZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KG1fZ3JhcGgsIHN0cnVjdHVyZVNldCk7CisgICAgICAgICAgICAgICAgICAgIHNldEZvck5vZGUo
bm9kZSwgc3RydWN0dXJlU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5t
ZXJnZShTcGVjT3RoZXIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKG1fZ3JhcGgsIFNwZWNPdGhlciB8IFNwZWNBcnJheSk7CisgICAgICAgIHNldFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNPdGhlciB8IFNwZWNBcnJheSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBSZWdFeHBUZXN0OgogICAgICAgICAvLyBFdmVuIGlmIHdlJ3ZlIHByb3ZlbiBrbm93
biBpbnB1dCB0eXBlcyBhcyBSZWdFeHBPYmplY3QgYW5kIFN0cmluZywKICAgICAgICAgLy8gYWNj
ZXNzaW5nIGxhc3RJbmRleCBpcyBlZmZlY3RmdWwgaWYgaXQncyBhIGdsb2JhbCByZWdleHAuCi0g
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGNs
b2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jv
b2xlYW4pOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0OgogICAg
ICAgICBBU1NFUlQobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IFJlZ0V4cE9iamVjdFVzZSk7
CiAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDMoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPdGhlciB8IFNwZWNB
cnJheSk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlciB8IFNwZWNBcnJh
eSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CiAg
ICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPdGhlciB8IFNwZWNBcnJh
eSk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlciB8IFNwZWNBcnJheSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBTdHJpbmdSZXBsYWNlOgpA
QCAtMjA2MCw4ICsyMDYwLDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQzKCkudXNlS2luZCgpID09IFN0cmluZ1Vz
ZSkgewogICAgICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IGNsb2JiZXIgdGhlIHdvcmxkLiBJdCBq
dXN0IHJlYWRzIGFuZCB3cml0ZXMgcmVnZXhwIHN0YXRlLgogICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fdm0uc3RyaW5nU3RydWN0dXJl
LmdldCgpKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXRGb3JOb2Rl
KG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIEp1bXA6CkBAIC0yMTA1LDcgKzIxMDUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbDoKICAgICBjYXNlIFRh
aWxDYWxsVmFyYXJnczoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAg
ICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0yMTIyLDEzICsyMTIyLDEzIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYgKCEoZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlICYgfihTcGVjRnVsbE51bWJlciB8IFNwZWNCb29sZWFuIHwg
U3BlY1N0cmluZyB8IFNwZWNTeW1ib2wgfCBTcGVjQmlnSW50KSkpIHsKICAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJl
cldvcmxkKCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAg
ICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShtX2dyYXBoLCBTcGVjSGVhcFRvcCAmIH5TcGVjT2JqZWN0KTsKKyAgICAgICAgc2V0VHlwZUZv
ck5vZGUobm9kZSwgU3BlY0hlYXBUb3AgJiB+U3BlY09iamVjdCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtMjE0NSwxMiArMjE0NSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlmICghKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSAmIH5TcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZv
dW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwot
ICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShtX2dyYXBoLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBjbG9iYmVyV29ybGQo
KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJl
cik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yMTcyLDEzICsyMTcyLDEz
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIENlbGxVc2U6CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZToK
LSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSku
c2V0KG1fZ3JhcGgsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgc2V0Rm9y
Tm9kZShub2RlLCBtX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtMjE4OSwyOSArMjE4OSwyOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBpZiAoMiA8PSByYWRpeCAmJiByYWRpeCA8PSAz
NikgewogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAg
ICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpOworICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV9ncmFwaC5tX3ZtLnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
Y2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFw
aC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwor
ICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0
aFZhbGlkUmFkaXhDb25zdGFudDogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBo
LCBtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgc2V0Rm9yTm9k
ZShub2RlLCBtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDogewogICAgICAg
ICBBU1NFUlQobm9kZS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IFN0cmluZ09iamVjdDo6
aW5mbygpKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0
dXJlKCkpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG5vZGUtPnN0cnVjdHVyZSgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheToKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0gICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICBz
ZXRGb3JOb2RlKG5vZGUsIAogICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0y
MjIwLDEyICsyMjE5LDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgICAgIC8vIFdlJ3ZlIGNvbXBpbGVkIGFzc3VtaW5nIHdlJ3JlIG5vdCBoYXZp
bmcgYSBiYWQgdGltZSwgc28gdG8gYmUgY29uc2lzdGVudAogICAgICAgICAgICAgLy8gd2l0aCBT
dHJ1Y3R1cmVSZWdpc3RlcmF0aW9uUGhhc2Ugd2UgbXVzdCBzYXkgd2UgcHJvZHVjZSBhbiBvcmln
aW5hbCBhcnJheQogICAgICAgICAgICAgLy8gYWxsb2NhdGlvbiBzdHJ1Y3R1cmUuCi0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldCgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLAorICAgICAg
ICAgICAgc2V0Rm9yTm9kZShub2RlLCAKICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9y
SW5kZXhpbmdUeXBlKEFycmF5V2l0aENvbnRpZ3VvdXMpKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsCisg
ICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKSk7CiAgICAgICAg
IH0KIApAQCAtMjIzOCwyNCArMjIzNSwyMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIGlmICghbV9ncmFwaC5jYW5Eb0Zhc3RTcHJlYWQobm9kZSwgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dCgKLSAgICAgICAgICAgIG1fZ3JhcGgsIG1fdm0uZml4ZWRBcnJheVN0cnVjdHVyZS5nZXQoKSk7
CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgCisgICAgICAgICAgICBtX3ZtLmZpeGVkQXJyYXlT
dHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBOZXdB
cnJheUJ1ZmZlcjoKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0gICAgICAgICAgICBtX2dy
YXBoLAorICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIAogICAgICAgICAgICAgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgotICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0FycmF5KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUo
bm9kZSwgU3BlY0FycmF5KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTmV3
VHlwZWRBcnJheToKQEAgLTIyNjMsMjAgKzIyNTksMTkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9i
YmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KAotICAgICAgICAgICAgbV9ncmFw
aCwKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCAKICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25j
dXJyZW50bHkoCiAgICAgICAgICAgICAgICAgbm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdleHA6Ci0gICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2Rl
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5yZWdFeHBT
dHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBUb1Ro
aXM6IHsKQEAgLTIzMjIsMjAgKzIzMTcsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50
cygpLmFkZExhemlseShyYXJlRGF0YS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVl
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHN0cnVjdHVyZSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgY2xv
YmJlcldvcmxkKCk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNGaW5hbE9iamVj
dCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBOZXdPYmplY3Q6
CiAgICAgICAgIEFTU0VSVCghIW5vZGUtPnN0cnVjdHVyZSgpLmdldCgpKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOworICAgICAgICBzZXRG
b3JOb2RlKG5vZGUsIG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIFRvT2JqZWN0OgpAQCAtMjM1Miw4ICsyMzQ3LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAKICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gVG9PYmplY3QpCi0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFw
aCwgU3BlY09iamVjdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0
VHlwZUZvck5vZGUobm9kZSwgU3BlY09iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApA
QCAtMjM3OCw1NiArMjM3Myw1NiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3
T2JqZWN0OiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVj
dHVyZVNldCgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBub2RlLT5zdHJ1Y3R1cmVTZXQo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgUHVzaFdpdGhTY29wZToKICAg
ICAgICAgLy8gV2UgZG9uJ3QgdXNlIHRoZSBtb3JlIHByZWNpc2Ugd2l0aFNjb3BlU3RydWN0dXJl
KCkgaGVyZSBiZWNhdXNlIGl0IGlzIGEgTGF6eVByb3BlcnR5IGFuZCBtYXkgbm90IHlldCBiZSBh
bGxvY2F0ZWQuCi0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0T3RoZXIp
OwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNl
IE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
Ci0gICAgICAgICAgICBtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEZv
ck5vZGUobm9kZSwgCisgICAgICAgICAgICBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAg
ICAgIHNldEZvck5vZGUobm9kZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0ZVNjb3BlZEFyZ3VtZW50czoKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zY29wZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAg
ICAgIHNldEZvck5vZGUobm9kZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLT5zY29wZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKICAgICAgICAg
aWYgKCFtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpIHsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjT2JqZWN0KTsK
KyAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPYmplY3QpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5jbG9u
ZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5jbG9uZWRBcmd1
bWVudHNTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBOZXdHZW5lcmF0
b3JGdW5jdGlvbjoKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0gICAgICAgICAgICBtX2dy
YXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykt
PmdlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlKCkpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUs
IAorICAgICAgICAgICAgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLT5nZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIE5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb246Ci0gICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KAotICAgICAgICAgICAgbV9ncmFwaCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hc3luY0dlbmVyYXRvckZ1bmN0aW9uU3RydWN0
dXJlKCkpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIAorICAgICAgICAgICAgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hc3luY0dlbmVyYXRv
ckZ1bmN0aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTmV3QXN5
bmNGdW5jdGlvbjoKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0gICAgICAgICAgICBtX2dy
YXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykt
PmFzeW5jRnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgCisg
ICAgICAgICAgICBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyktPmFzeW5jRnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBOZXdGdW5jdGlvbjogewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTRnVuY3Rpb246OnNlbGVjdFN0cnVjdHVy
ZUZvck5ld0Z1bmNFeHAoZ2xvYmFsT2JqZWN0LCBub2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlvbkV4
ZWN1dGFibGUqPigpKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgc3RydWN0
dXJlKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBzdHJ1Y3R1cmUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIApAQCAtMjQ0MSwxMSArMjQzNiwxMSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3Jh
cGgsIFNwZWNGdW5jdGlvbik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNGdW5j
dGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMy
T25seSk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgU2V0Q2FsbGVlOgpAQCAtMjQ1Myw3ICsyNDQ4LDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsK
ICAgICAgICAgCiAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgotICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShu
b2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2Ug
R2V0R2V0dGVyOiB7CkBAIC0yNDY2LDcgKzI0NjEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjT2JqZWN0KTsKKyAgICAg
ICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY09iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCkBAIC0yNDgwLDcgKzI0NzUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjT2JqZWN0KTsKKyAgICAg
ICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY09iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCkBAIC0yNDkxLDcgKzI0ODYsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNP
YmplY3RPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPYmplY3RPdGhl
cik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTa2lwU2NvcGU6IHsKQEAgLTI1MDAsNyAr
MjQ5NSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShKU1ZhbHVlKGpzQ2FzdDxK
U1Njb3BlKj4oY2hpbGQuYXNDZWxsKCkpLT5uZXh0KCkpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY09iamVjdE90aGVy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNTI3LDEyICsyNTIyLDEyIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0T3RoZXIpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldEdsb2JhbFRoaXM6IHsKLSAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPYmplY3QpOworICAgICAgICBz
ZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkBAIC0yNTQxLDE0ICsyNTM2LDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh2
YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShu
b2RlKS5tYWtlQnl0ZWNvZGVUb3AoKTsKKyAgICAgICAgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dENsb3N1cmVW
YXI6CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6
Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgbWFrZUhlYXBU
b3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2V0UmVnRXhwT2Jq
ZWN0TGFzdEluZGV4OgpAQCAtMjU1NiwyMCArMjU1MSwyMCBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNl
IEdldEZyb21Bcmd1bWVudHM6Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsK
KyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgY2FzZSBQdXRUb0FyZ3VtZW50czoKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IEdldEFyZ3VtZW50OgotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAg
ICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IFRyeUdldEJ5SWQ6CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjb25zdGFudCBmb2xk
IGF0IGxlYXN0IGFzIHdlbGwgYXMgdGhlIG5vcm1hbCBHZXRCeUlkIGNhc2UuCiAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0MjIKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRCeUlkRGlyZWN0OgpAQCAtMjYw
MSwxNSArMjU5NiwxNSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VIZWFwVG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBtYWtlSGVhcFRv
cEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0QnlW
YWxXaXRoVGhpczoKICAgICBjYXNlIEdldEJ5SWRXaXRoVGhpczoKLSAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9k
ZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAg
bWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6IHsKQEAgLTI2MTksMTIgKzI2MTQsMTIgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwganNOdW1iZXIodmlldy0+bGVuZ3RoKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldFZlY3Rvckxlbmd0aDogewotICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNl
bGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCkBAIC0yNjMyLDggKzI2MjcsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgY2FzZSBEZWxldGVCeVZhbDogewogICAgICAgICAvLyBGSVhNRTogVGhp
cyBjb3VsZCBkZWNpZGUgaWYgdGhlIGRlbGV0ZSB3aWxsIGJlIHN1Y2Nlc3NmdWwgYmFzZWQgb24g
dGhlIHNldCBvZiBzdHJ1Y3R1cmVzIHRoYXQKICAgICAgICAgLy8gd2UgZ2V0IGZyb20gb3VyIGJh
c2UgdmFsdWUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY2MTEK
LSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0
KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAg
Y2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVj
Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yNzQzLDcgKzI3
MzgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IC8vIG5vYm9keSB3b3VsZCBjdXJyZW50bHkgYmVuZWZpdCBmcm9tIGhhdmluZyB0aGF0IGluZm9y
bWF0aW9uLiBCdXQgaXQncyBhIGJ1ZyBub25ldGhlbGVzcy4KICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSkKICAgICAgICAgICAgIGRpZEZvbGRD
bG9iYmVyU3RydWN0dXJlcygpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRo
ZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIGNsZWFyRm9yTm9kZShub2RlKTsg
Ly8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDaGVja1N1YkNsYXNzOiB7CiAgICAgICAgIEpTVmFsdWUgY29uc3RhbnQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwpAQCAtMjc2NywxOCArMjc2MiwxOCBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIENhbGxET01HZXR0ZXJEYXRh
KiBjYWxsRE9NR2V0dGVyRGF0YSA9IG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCk7CiAgICAgICAg
IERPTUpJVDo6Q2FsbERPTUdldHRlclNuaXBwZXQqIHNuaXBwZXQgPSBjYWxsRE9NR2V0dGVyRGF0
YS0+c25pcHBldDsKICAgICAgICAgaWYgKCFzbmlwcGV0IHx8IHNuaXBwZXQtPmVmZmVjdC53cml0
ZXMpCi0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGlmIChjYWxs
RE9NR2V0dGVyRGF0YS0+ZG9tSklUKQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KG1fZ3JhcGgsIGNhbGxET01HZXR0ZXJEYXRhLT5kb21KSVQtPnJlc3VsdFR5cGUoKSk7CisgICAg
ICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBjYWxsRE9NR2V0dGVyRGF0YS0+ZG9tSklULT5y
ZXN1bHRUeXBlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VCeXRlY29kZVRvcCgpOworICAgICAgICAgICAgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ2FsbERPTTogewogICAgICAgICBj
b25zdCBET01KSVQ6OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gbm9kZS0+c2lnbmF0dXJlKCk7CiAg
ICAgICAgIGlmIChzaWduYXR1cmUtPmVmZmVjdC53cml0ZXMpCi0gICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgc2lnbmF0dXJlLT5yZXN1bHQpOworICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIHNpZ25hdHVy
ZS0+cmVzdWx0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ2hlY2tBcnJheTog
ewpAQCAtMjg0Nyw3ICsyODQyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKG5v
ZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6Q29udmVydCk7Ci0gICAgICAg
IGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1
cmVzKCk7CiAgICAgICAgIGZpbHRlckFycmF5TW9kZXMobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmFy
cmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMjg1NSw3ICsyODUwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihS
ZWdpc3RlcmVkU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSkpCiAgICAgICAgICAgICBt
X3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICBjbG9iYmVyU3RydWN0dXJl
cyhjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICAK
ICAgICAgICAgLy8gV2UgaGF2ZSBhIGJ1bmNoIG9mIG9wdGlvbnMgb2YgaG93IHRvIGV4cHJlc3Mg
dGhlIGFic3RyYWN0IHNldCBhdCB0aGlzIHBvaW50LiBMZXQgc2V0IFMKICAgICAgICAgLy8gYmUg
dGhlIHNldCBvZiBzdHJ1Y3R1cmVzIHRoYXQgdGhlIHZhbHVlIGhhZCBiZWZvcmUgY2xvYmJlcmlu
ZyBhbmQgYXNzdW1lIHRoYXQgYWxsIG9mCkBAIC0yODg0LDcgKzI4NzksNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCdz
IHRlbXB0aW5nIHRvIHNpbXBseSBzYXkgdGhhdCB0aGUgcmVzdWx0aW5nIHZhbHVlIGlzIEJPVFRP
TSBiZWNhdXNlIG9mCiAgICAgICAgIC8vIHRoZSBjb250cmFkaWN0aW9uLiBUaGF0IHdvdWxkIGJl
IHdyb25nLCBzaW5jZSB3ZSBoYXZlbid0IGhpdCBhbiBpbnZhbGlkYXRpb24gcG9pbnQsCiAgICAg
ICAgIC8vIHlldC4KLSAgICAgICAgdmFsdWUuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVyZSgp
KTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0
cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZTogewpAQCAtMjg5MiwxMSArMjg4NywxMSBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3ZhbHVlLCBub2RlLT5hcnJheU1vZGUoKSk7CiAgICAgICAgIGlmICh2aWV3KQogICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOworICAgICAgICBjbGVhckZvck5vZGUobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6IHsKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5jbGVhcigpOworICAgICAgICBjbGVhckZvck5vZGUobm9kZSk7CiAgICAg
ICAgIGJyZWFrOyAKICAgICB9CiAgICAgICAgIApAQCAtMjkwNiw3ICsyOTAxLDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwganNOdW1iZXIodmlldy0+Ynl0ZU9mZnNldCgpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25s
eSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yOTU0LDEwICsyOTQ5LDEwIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgY2FzZSBGaW5hbE9iamVj
dFVzZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPYmplY3QgfCBTcGVjT3Ro
ZXIpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0IHwgU3BlY090aGVy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTI5ODMsNyArMjk3OCw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYgKHZh
bHVlLmlzQ2xlYXIoKSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAK
LSAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUs
IHZhbHVlKTsKICAgICAgICAgaWYgKHZhbHVlLm1fdmFsdWUpCiAgICAgICAgICAgICBtX3N0YXRl
LnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICBicmVhazsKQEAgLTI5OTcsNyArMjk5
Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
LT5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+Z2V0dGVyU2V0dGVy
U3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMzA1NCw3
ICszMDQ5LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1fZ3JhcGgs
IGJhc2VTZXQpID09IENvbnRyYWRpY3Rpb24pCiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFs
aWQoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKSA9IHJlc3VsdDsKKyAg
ICAgICAgc2V0Rm9yTm9kZShub2RlLCByZXN1bHQpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTMxMDQsNyArMzA5OSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb25zKGNsb2JiZXJMaW1p
dCwgdHJhbnNpdGlvbnMpOwogICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hh
bmdlU3RydWN0dXJlKG1fZ3JhcGgsIG5ld1NldCkgPT0gQ29udHJhZGljdGlvbikKICAgICAgICAg
ICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpID0gcmVzdWx0aW5nVmFsdWU7CisgICAgICAgIHNldEZvck5vZGUobm9kZS0+Y2hpbGQy
KCksIHJlc3VsdGluZ1ZhbHVlKTsKICAgICAgICAgaWYgKCEhb3JpZ2luYWxWYWx1ZSAmJiAhcmVz
dWx0aW5nVmFsdWUpCiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKQEAgLTMxMTksNyArMzExNCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0Nl
bGxPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNDZWxsT3RoZXIpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgCkBAIC0zMjE1LDEzICszMjEwLDEzIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIGNhc2UgUHV0QnlWYWxXaXRoVGhpczoKICAgICBjYXNlIFB1dEJ5SWRX
aXRoVGhpczoKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xv
YmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBQdXRHZXR0ZXJCeUlkOgpAQCAtMzIyOSw0MSArMzIyNCw0MSBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQdXRHZXR0ZXJTZXR0ZXJC
eUlkOgogICAgIGNhc2UgUHV0R2V0dGVyQnlWYWw6CiAgICAgY2FzZSBQdXRTZXR0ZXJCeVZhbDog
ewotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGlt
aXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBEZWZpbmVEYXRhUHJvcGVydHk6CiAgICAgY2FzZSBEZWZpbmVBY2Nlc3NvclByb3Bl
cnR5OgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVy
TGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAogICAgIGNhc2UgSW46IHsKICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZXRlcm1pbmUgd2hl
biB0aGUgcHJvcGVydHkgZGVmaW5pdGVseSBleGlzdHMgYmFzZWQgb24gYWJzdHJhY3QKICAgICAg
ICAgLy8gdmFsdWUgaW5mb3JtYXRpb24uCi0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmln
aW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShTcGVjQm9vbGVhbik7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25D
ZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIEhhc093blByb3BlcnR5OiB7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBz
ZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBzZXRO
b25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogewotICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5v
ZGUobm9kZSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKLSAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewpA
QCAtMzI3Niw2MSArMzI3MSw2MSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OiB7
Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVy
TGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
Qm9vbGVhbik7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVh
bik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7Ci0g
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgY2xvYmJlcldv
cmxkKCk7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7Ci0gICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIHNldFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNDZWxsKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZTogewot
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyB8IFNwZWNP
dGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3Ro
ZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJp
Y1BuYW1lOiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3Ry
aW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmlu
ZyB8IFNwZWNPdGhlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRvSW5kZXhT
dHJpbmc6IHsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNTdHJp
bmcpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0R2xvYmFsTGV4aWNhbFZhcmlhYmxlOgotICAg
ICAgICBmb3JOb2RlKG5vZGUpLm1ha2VCeXRlY29kZVRvcCgpOworICAgICAgICBtYWtlQnl0ZWNv
ZGVUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0RHluYW1p
Y1ZhcjoKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJl
ckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlQnl0ZWNvZGVUb3AoKTsKKyAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIG1ha2VCeXRlY29kZVRvcEZvck5vZGUobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBQdXREeW5hbWljVmFyOgotICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBj
bG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJlc29sdmVTY29wZToK
LSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0
KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPYmplY3QpOwor
ICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3Bl
Y09iamVjdCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSZXNvbHZlU2NvcGVGb3JIb2lz
dGluZ0Z1bmNEZWNsSW5FdmFsOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VCeXRlY29k
ZVRvcCgpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgbWFrZUJ5dGVjb2RlVG9w
Rm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFB1dEdsb2JhbFZhcmlh
YmxlOgpAQCAtMzMzOCwyMiArMzMzMywyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBPdmVycmlkZXNIYXNJbnN0
YW5jZToKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIC8vIFNhZGx5
LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YK
LSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAK
ICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0b206Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXRO
b25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBo
Lm1fZm9ybSA9PSBTU0EpOwotICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShOb2RlRmxv
d1Byb2plY3Rpb24obm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpKTsKKyAgICAgICAg
c2V0Rm9yTm9kZShub2RlLCBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbihub2RlLCBOb2RlRmxv
d1Byb2plY3Rpb246OlNoYWRvdykpKTsKICAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9k
ZSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLCBidXQgaXQgbWF5IGhhdmUgYmVjb21l
IGEKICAgICAgICAgLy8gY29uc3RhbnQsIGluIHdoaWNoIGNhc2Ugd2UnZCBsaWtlIHRvIGtub3cu
CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUpLm1fdmFsdWUpCkBAIC0zMzY0LDcgKzMzNTksNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIE5vZGVG
bG93UHJvamVjdGlvbiBzaGFkb3cobm9kZS0+cGhpKCksIE5vZGVGbG93UHJvamVjdGlvbjo6U2hh
ZG93KTsKICAgICAgICAgaWYgKHNoYWRvdy5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAg
bV9zdGF0ZS5jcmVhdGVWYWx1ZUZvck5vZGUoc2hhZG93KTsKLSAgICAgICAgICAgIGZvck5vZGUo
c2hhZG93KSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc2V0Rm9yTm9k
ZShzaGFkb3csIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0zMzg2LDggKzMzODEsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBEaXJlY3RDYWxsOgogICAgIGNhc2UgRGlyZWN0
Q29uc3RydWN0OgogICAgIGNhc2UgRGlyZWN0VGFpbENhbGxJbmxpbmVkQ2FsbGVyOgotICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAg
ICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgp
OworICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBGb3JjZU9TUkV4aXQ6CkBAIC0zMzk2LDE1ICszMzkxLDE1IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6Ci0gICAgICAgIGZvckFsbFZhbHVlcyhjbG9iYmVy
TGltaXQsIEFic3RyYWN0VmFsdWU6Om9ic2VydmVJbnZhbGlkYXRpb25Qb2ludEZvcik7CiAgICAg
ICAgIG1fc3RhdGUuc2V0U3RydWN0dXJlQ2xvYmJlclN0YXRlKFN0cnVjdHVyZXNBcmVXYXRjaGVk
KTsKKyAgICAgICAgbV9zdGF0ZS5vYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIENQVUludHJpbnNpYzogCiAgICAgICAgIGlmIChub2RlLT5pbnRy
aW5zaWMoKSA9PSBDUFVSZHRzY0ludHJpbnNpYykKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9k
ZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXRUeXBlKFNwZWNPdGhlcik7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY090aGVyKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENoZWNr
VHJhcHM6CkBAIC0zNDM3LDI2ICszNDMyLDI1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRz
KHRydWUpOwogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSkKICAgICAgICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwot
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAg
ICAgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpCi0gICAgICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwot
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0J5dGVjb2RlTnVtYmVy
KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgY2FzZSBDcmVhdGVSZXN0OgogICAgICAgICBpZiAoIW1fZ3JhcGguaXNXYXRjaGluZ0hh
dmluZ0FCYWRUaW1lV2F0Y2hwb2ludChub2RlKSkgewogICAgICAgICAgICAgLy8gVGhpcyBtZWFu
cyB3ZSdyZSBhbHJlYWR5IGhhdmluZyBhIGJhZCB0aW1lLgotICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQXJyYXkpOworICAgICAgICAgICAgY2xv
YmJlcldvcmxkKCk7CisgICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQXJyYXkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoCi0gICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICBzZXRGb3JOb2RlKG5vZGUsCiAgICAg
ICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5y
ZXN0UGFyYW1ldGVyU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIApA
QCAtMzQ3Myw3ICszNDY3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgIH0KIAogICAgIGNhc2UgU2V0RnVuY3Rpb25OYW1lOiB7Ci0gICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNs
b2JiZXJXb3JsZCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM1MzMsMTAgKzM1Mjcs
OSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotdm9pZCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xvYmJlcldvcmxkKAotICAgIGNvbnN0IENvZGVPcmlnaW4m
LCB1bnNpZ25lZCBjbG9iYmVyTGltaXQpCit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjpjbG9iYmVyV29ybGQoKQogewotICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNs
b2JiZXJMaW1pdCk7CisgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0zNTY4LDE2ICszNTYxLDE2IEBAIHZvaWQgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBmdW5jdG9y
KGZvck5vZGUobm9kZSkpOwogICAgICAgICB9CiAgICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSBt
X3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspCi0gICAgICAgIGZ1
bmN0b3IobV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChpKSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZMb2NhbHMoKTsgaS0tOykKLSAgICAgICAg
ZnVuY3RvcihtX3N0YXRlLnZhcmlhYmxlcygpLmxvY2FsKGkpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gbV9zdGF0ZS5udW1iZXJPZkFyZ3VtZW50cygpOyBpLS07KQorICAgICAgICBmdW5jdG9yKG1f
c3RhdGUuYXJndW1lbnQoaSkpOworICAgIGZvciAoc2l6ZV90IGkgPSBtX3N0YXRlLm51bWJlck9m
TG9jYWxzKCk7IGktLTspCisgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS5sb2NhbChpKSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotdm9pZCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgY2xv
YmJlckxpbWl0KQordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
Y2xvYmJlclN0cnVjdHVyZXMoKQogewotICAgIGZvckFsbFZhbHVlcyhjbG9iYmVyTGltaXQsIEFi
c3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1cmVzRm9yKTsKKyAgICBtX3N0YXRlLmNsb2JiZXJT
dHJ1Y3R1cmVzKCk7CiAgICAgbV9zdGF0ZS5tZXJnZUNsb2JiZXJTdGF0ZShBYnN0cmFjdEludGVy
cHJldGVyQ2xvYmJlclN0YXRlOjpDbG9iYmVyZWRTdHJ1Y3R1cmVzKTsKICAgICBtX3N0YXRlLnNl
dFN0cnVjdHVyZUNsb2JiZXJTdGF0ZShTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKTsKIH0KQEAgLTM3
MTIsNyArMzcwNSw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnMK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRG91YmxlVW5hcnlPcEVmZmVj
dHMoTm9kZSogbm9kZSwgdW5zaWduZWQgY2xvYmJlckxpbWl0LCBkb3VibGUoKmVxdWl2YWxlbnRG
dW5jdGlvbikoZG91YmxlKSkKK3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhOb2RlKiBub2RlLCBkb3VibGUoKmVx
dWl2YWxlbnRGdW5jdGlvbikoZG91YmxlKSkKIHsKICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICBpZiAoc3RkOjpvcHRpb25hbDxkb3VibGU+
IG51bWJlciA9IGNoaWxkLnRvTnVtYmVyRnJvbVByaW1pdGl2ZSgpKSB7CkBAIC0zNzI1LDggKzM3
MTgsOCBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBEb3VibGVSZXBVc2UpCiAgICAgICAgIHR5cGUg
PSB0eXBlT2ZEb3VibGVVbmFyeU9wKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSk7CiAg
ICAgZWxzZQotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOwotICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSh0eXBlKTsKKyAgICAgICAgY2xv
YmJlcldvcmxkKCk7CisgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIHR5cGUpOwogfQog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDIzMTM5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMzMsMTYgKzEzMywxNiBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3Jh
cGgsIGNvCiAgICAgICAgIGNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEluZmVy
cmVkVHlwZTo6Qm9vbGVhbjoKLSAgICAgICAgc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAg
IHNldE5vbkNlbGxUeXBlKFNwZWNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpPdGhlcjoKLSAgICAgICAgc2V0VHlwZShTcGVjT3RoZXIpOworICAgICAg
ICBzZXROb25DZWxsVHlwZShTcGVjT3RoZXIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OkludDMyOgotICAgICAgICBzZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAg
ICAgICBzZXROb25DZWxsVHlwZShTcGVjSW50MzJPbmx5KTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHNldFR5cGUoU3BlY0J5dGVjb2Rl
TnVtYmVyKTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGUoU3BlY0J5dGVjb2RlTnVtYmVyKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CiAgICAgICAgIHNl
dChncmFwaCwgZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwpAQCAtNTU2LDYgKzU1
Niw3IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFMKICAgICB9CiAg
ICAgaWYgKCEhbV92YWx1ZSkKICAgICAgICAgb3V0LnByaW50KCIsICIsIGluQ29udGV4dChtX3Zh
bHVlLCBjb250ZXh0KSk7CisgICAgb3V0LnByaW50KCIsICIsIG1fZWZmZWN0RXBvY2gpOwogICAg
IG91dC5wcmludCgiKSIpOwogfQogCkBAIC01NzQsNiArNTc1LDIwIEBAIHZvaWQgQWJzdHJhY3RW
YWx1ZTo6ZW5zdXJlQ2FuSW5pdGlhbGl6ZVcKIH0KICNlbmRpZgogCit2b2lkIEFic3RyYWN0VmFs
dWU6OmZhc3RGb3J3YXJkVG9TbG93KEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2ggbmV3RXBvY2gp
Cit7CisgICAgQVNTRVJUKG5ld0Vwb2NoICE9IG1fZWZmZWN0RXBvY2gpOworICAgIAorICAgIGlm
IChuZXdFcG9jaC5jbG9iYmVyRXBvY2goKSAhPSBtX2VmZmVjdEVwb2NoLmNsb2JiZXJFcG9jaCgp
KQorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcygpOworICAgIGlmIChuZXdFcG9jaC5zdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUoKSA9PSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKKyAgICAgICAgbV9zdHJ1
Y3R1cmUub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7CisgICAgCisgICAgbV9lZmZlY3RFcG9j
aCA9IG5ld0Vwb2NoOworICAgIAorICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKK30KKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24g
MjMxMzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
ICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlQ2xv
YmJlckVwb2NoLmgiCiAjaW5jbHVkZSAiREZHRmlsdHJhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUg
IkRGR0Zyb3plblZhbHVlLmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCkBAIC0xMDMsMjAg
KzEwNCwxNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgY2xvYmJlclN0cnVjdHVyZXNGb3Io
QWJzdHJhY3RWYWx1ZSYgdmFsdWUpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RGb3J3YXJk
VG8oQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBuZXdFcG9jaCkKICAgICB7Ci0gICAgICAgIHZh
bHVlLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgb2JzZXJ2ZUlu
dmFsaWRhdGlvblBvaW50KCkKLSAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlLm9ic2VydmVJbnZh
bGlkYXRpb25Qb2ludCgpOwotICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgfQotICAg
IAotICAgIHN0YXRpYyB2b2lkIG9ic2VydmVJbnZhbGlkYXRpb25Qb2ludEZvcihBYnN0cmFjdFZh
bHVlJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHZhbHVlLm9ic2VydmVJbnZhbGlkYXRpb25Qb2lu
dCgpOworICAgICAgICBpZiAobmV3RXBvY2ggPT0gbV9lZmZlY3RFcG9jaCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICghKG1fdHlwZSAmIFNwZWNDZWxsKSkgewor
ICAgICAgICAgICAgbV9lZmZlY3RFcG9jaCA9IG5ld0Vwb2NoOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgZmFzdEZvcndhcmRUb1Nsb3cobmV3RXBvY2gpOwogICAg
IH0KICAgICAKICAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9uKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUg
ZnJvbSwgUmVnaXN0ZXJlZFN0cnVjdHVyZSB0bykKQEAgLTIwNiw2ICsyMDQsMTYgQEAgc3RydWN0
IEFic3RyYWN0VmFsdWUgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAg
ICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHsKKyAg
ICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoR3JhcGgmLCBB
YnN0cmFjdFZhbHVlJiYgb3RoZXIpCisgICAgeworICAgICAgICAqdGhpcyA9IFdURk1vdmUob3Ro
ZXIpOworICAgIH0KKyAgICAKICAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEZyb3plblZhbHVl
JiwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKICAgICB2b2lkIHNldChHcmFwaCYsIFN0cnVjdHVy
ZSopOwogICAgIHZvaWQgc2V0KEdyYXBoJiwgUmVnaXN0ZXJlZFN0cnVjdHVyZSk7CkBAIC0yMTUs
NyArMjIzLDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHZvaWQgc2V0VHlwZShHcmFw
aCYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICAKICAgICAvLyBBcyBhYm92ZSwgYnV0IG9ubHkgdmFs
aWQgZm9yIG5vbi1jZWxsIHR5cGVzLgotICAgIHZvaWQgc2V0VHlwZShTcGVjdWxhdGVkVHlwZSB0
eXBlKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXROb25DZWxsVHlwZShTcGVjdWxhdGVkVHlw
ZSB0eXBlKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISh0eXBlICYgU3BlY0NlbGwp
KTsKICAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKQEAgLTM5Nyw2ICs0MDUsMTAgQEAgc3Ry
dWN0IEFic3RyYWN0VmFsdWUgewogICAgIC8vIGVmZmVjdCB0aGF0IG1ha2VzIG5vbi1vYnZpb3Vz
IGNoYW5nZXMgdG8gdGhlIGhlYXAuCiAgICAgQXJyYXlNb2RlcyBtX2FycmF5TW9kZXM7CiAgICAg
CisgICAgLy8gVGhlIGVwb2NoLgorICAgIC8vIEZJWE1FOiBFeHBsYWluIHRoaXMuIChPT1BTISEp
CisgICAgQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBtX2VmZmVjdEVwb2NoOworICAgIAogICAg
IC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgcG9zc2libGUgdmFsdWVzIHRo
YXQgdGhpcyB2YWx1ZSBjYW4KICAgICAvLyBoYXZlIG5vdyBvciBhbnkgdGltZSBpbiB0aGUgZnV0
dXJlLCB1bmxlc3MgaXQgaXMgcmVhc3NpZ25lZC4gTm90ZSB0aGF0IHRoaXMKICAgICAvLyBpbXBs
aWVzIG5vdGhpbmcgYWJvdXQgdGhlIHN0cnVjdHVyZS4gT2RkbHksIEpTVmFsdWUoKSAoaS5lLiB0
aGUgZW1wdHkgdmFsdWUpCkBAIC00NTUsNiArNDY3LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGZhc3RGb3J3YXJkVG9TbG93
KEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2gpOworICAgIAogICAgIHZvaWQgZmlsdGVyVmFsdWVC
eVR5cGUoKTsKICAgICB2b2lkIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWVD
bG9iYmVyRXBvY2guY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJF
cG9jaC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKwordm9pZCBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGNsb2JiZXJFcG9jaCgpLCAiOiIsIHN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xv
YmJlckVwb2NoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRXBvY2guaCIKKyNpbmNsdWRlICJERkdTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBYnN0cmFjdFZhbHVlQ2xvYmJl
ckVwb2NoIHsKK3B1YmxpYzoKKyAgICBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoKCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoIGZpcnN0
KFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCisgICAgeworICAgICAgICBBYnN0
cmFjdFZhbHVlQ2xvYmJlckVwb2NoIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBF
cG9jaDo6Zmlyc3QoKS50b1Vuc2lnbmVkKCkgPDwgZXBvY2hTaGlmdDsKKyAgICAgICAgc3dpdGNo
IChjbG9iYmVyU3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDoKKyAg
ICAgICAgICAgIHJlc3VsdC5tX3ZhbHVlIHw9IHdhdGNoZWRGbGFnOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU3RydWN0dXJlc0FyZUNsb2JiZXJlZDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHZvaWQgY2xvYmJlcigpCisgICAgeworICAgICAgICBtX3ZhbHVlICs9IHN0ZXA7CisgICAgICAg
IG1fdmFsdWUgJj0gfndhdGNoZWRGbGFnOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVJ
bnZhbGlkYXRpb25Qb2ludCgpCisgICAgeworICAgICAgICBtX3ZhbHVlIHw9IHdhdGNoZWRGbGFn
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQWJzdHJhY3RWYWx1ZUNs
b2JiZXJFcG9jaCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9
PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZSBzdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdmFsdWUgJiB3YXRjaGVkRmxhZyA/IFN0cnVjdHVyZXNBcmVXYXRjaGVkIDogU3RydWN0
dXJlc0FyZUNsb2JiZXJlZDsKKyAgICB9CisgICAgCisgICAgRXBvY2ggY2xvYmJlckVwb2NoKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBFcG9jaDo6ZnJvbVVuc2lnbmVkKG1fdmFsdWUg
Pj4gZXBvY2hTaGlmdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHN0
ZXAgPSAyOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgd2F0Y2hlZEZsYWcgPSAxOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZXBvY2hTaGlmdCA9IDE7CisgICAgCisgICAg
dW5zaWduZWQgbV92YWx1ZSB7IDAgfTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIzMTM5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw4OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVW
YWx1ZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKTsKICAgICBBYnN0cmFjdFZhbHVlJiBmb3JO
b2RlKE5vZGVGbG93UHJvamVjdGlvbik7CiAgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdl
IGVkZ2UpIHsgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2RlKCkpOyB9Ci0gICAgT3BlcmFuZHM8QWJz
dHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbDsg
fQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoTm9kZUZsb3dQcm9q
ZWN0aW9uIG5vZGUpCisgICAgeworICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7CisgICAg
fQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoRWRnZSBlZGdlKQor
ICAgIHsKKyAgICAgICAgY2xlYXJGb3JOb2RlKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXRGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1
bWVudHMpCisgICAgeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBzdGQ6OmZv
cndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZvck5vZGUo
RWRnZSBlZGdlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBzZXRG
b3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4u
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRUeXBlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9k
ZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKG1fZ3JhcGgsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4p
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0VHlwZUZvck5vZGUoRWRnZSBlZGdlLCBBcmd1bWVudHMmJi4uLiBh
cmd1bWVudHMpCisgICAgeworICAgICAgICBzZXRUeXBlRm9yTm9kZShlZGdlLm5vZGUoKSwgc3Rk
Ojpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlLCBBcmd1bWVudHMmJi4u
LiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldE5vbkNlbGxUeXBl
KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKEVkZ2UgZWRnZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQor
ICAgIHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZv
cndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlT
X0lOTElORSB2b2lkIG1ha2VCeXRlY29kZVRvcEZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5v
ZGUpCisgICAgeworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VCeXRlY29kZVRvcCgpOworICAg
IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShF
ZGdlIGVkZ2UpCisgICAgeworICAgICAgICBtYWtlQnl0ZWNvZGVUb3BGb3JOb2RlKGVkZ2Uubm9k
ZSgpKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIG1ha2VIZWFwVG9wRm9y
Tm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKKyAgICB7CisgICAgICAgIGZvck5vZGUobm9k
ZSkubWFrZUhlYXBUb3AoKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIG1h
a2VIZWFwVG9wRm9yTm9kZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBtYWtlSGVhcFRvcEZv
ck5vZGUoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkFy
Z3VtZW50cygpOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVy
biBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIEFic3RyYWN0
VmFsdWUmIG9wZXJhbmQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFp
bC5vcGVyYW5kKG9wZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5kZXgpIHsgcmV0
dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChpbmRleCk7IH0KKyAgICBBYnN0cmFjdFZh
bHVlJiBhcmd1bWVudChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFp
bC5hcmd1bWVudChpbmRleCk7IH0KKyAgICAKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkK
KyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIG9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpCisgICAgeworICAgICAgICBVTlJF
QUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICB9CiAgICAgCiAgICAgQmFzaWNCbG9jayogYmxv
Y2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMjMxMzk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
MSw3ICsxNzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmICghc2FmZVRvRXhlY3V0
ZShtX3N0YXRlLCBtX2dyYXBoLCBub2RlKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
KFVOU0FGRSkgIik7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGF0YUxvZyht
X3N0YXRlLnZhcmlhYmxlcygpLCAiICIsIG1faW50ZXJwcmV0ZXIpOworICAgICAgICAgICAgICAg
IGRhdGFMb2cobV9zdGF0ZS52YXJpYWJsZXNGb3JEZWJ1Z2dpbmcoKSwgIiAiLCBtX2ludGVycHJl
dGVyKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMzEzOTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzc5LDcgKzM3OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IGlmIChpbmRleCA+PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IC0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3N0YXRlLnZhcmlhYmxl
cygpLm51bWJlck9mQXJndW1lbnRzKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gbV9zdGF0ZS5udW1iZXJPZkFyZ3VtZW50cygpIC0gMSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd01hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd01hcC5oCShyZXZpc2lvbiAyMzEzOTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
NSwyNyArNTUsMjcgQEAgcHVibGljOgogICAgIAogICAgIEdyYXBoJiBncmFwaCgpIGNvbnN0IHsg
cmV0dXJuIG1fZ3JhcGg7IH0KICAgICAKLSAgICBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgpCisg
ICAgQUxXQVlTX0lOTElORSBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgpCiAgICAgewogICAgICAg
ICByZXR1cm4gbV9tYXBbbm9kZUluZGV4XTsKICAgICB9CiAgICAgCi0gICAgVCYgYXQoTm9kZSog
bm9kZSkKKyAgICBBTFdBWVNfSU5MSU5FIFQmIGF0KE5vZGUqIG5vZGUpCiAgICAgewogICAgICAg
ICByZXR1cm4gYXQobm9kZS0+aW5kZXgoKSk7CiAgICAgfQogICAgIAotICAgIFQmIGF0U2hhZG93
KHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICBBTFdBWVNfSU5MSU5FIFQmIGF0U2hhZG93KHVuc2ln
bmVkIG5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3NoYWRvd01hcFtub2RlSW5k
ZXhdOwogICAgIH0KICAgICAKLSAgICBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKQorICAgIEFMV0FZ
U19JTkxJTkUgVCYgYXRTaGFkb3coTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBh
dFNoYWRvdyhub2RlLT5pbmRleCgpKTsKICAgICB9CiAgICAgCi0gICAgVCYgYXQodW5zaWduZWQg
bm9kZUluZGV4LCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkKKyAgICBBTFdBWVNfSU5M
SU5FIFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtp
bmQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBOb2RlRmxv
d1Byb2plY3Rpb246OlByaW1hcnk6CkBAIC04NywyMyArODcsMjMgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gKmJpdHdpc2VfY2FzdDxUKj4obnVsbHB0cik7CiAgICAgfQogICAgIAotICAgIFQm
IGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKQorICAgIEFMV0FZ
U19JTkxJTkUgVCYgYXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQp
CiAgICAgewogICAgICAgICByZXR1cm4gYXQobm9kZS0+aW5kZXgoKSwga2luZCk7CiAgICAgfQog
ICAgIAotICAgIFQmIGF0KE5vZGVGbG93UHJvamVjdGlvbiBwcm9qZWN0aW9uKQorICAgIEFMV0FZ
U19JTkxJTkUgVCYgYXQoTm9kZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pCiAgICAgewogICAg
ICAgICByZXR1cm4gYXQocHJvamVjdGlvbi5ub2RlKCksIHByb2plY3Rpb24ua2luZCgpKTsKICAg
ICB9CiAgICAgCi0gICAgY29uc3QgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZUluZGV4KTsgfQotICAgIGNv
bnN0IFQmIGF0KE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+
KHRoaXMpLT5hdChub2RlKTsgfQotICAgIGNvbnN0IFQmIGF0U2hhZG93KHVuc2lnbmVkIG5vZGVJ
bmRleCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0U2hhZG93
KG5vZGVJbmRleCk7IH0KLSAgICBjb25zdCBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXRTaGFkb3cobm9kZSk7IH0KLSAg
ICBjb25zdCBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2lu
ZCBraW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9k
ZUluZGV4LCBraW5kKTsgfQotICAgIGNvbnN0IFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93UHJv
amVjdGlvbjo6S2luZCBraW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0
aGlzKS0+YXQobm9kZSwga2luZCk7IH0KLSAgICBjb25zdCBUJiBhdChOb2RlRmxvd1Byb2plY3Rp
b24gcHJvamVjdGlvbikgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcykt
PmF0KHByb2plY3Rpb24pOyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUJiBhdCh1bnNpZ25l
ZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5h
dChub2RlSW5kZXgpOyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUJiBhdChOb2RlKiBub2Rl
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZSk7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQmIGF0U2hhZG93KHVuc2lnbmVkIG5vZGVJbmRleCkg
Y29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0U2hhZG93KG5vZGVJ
bmRleCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQmIGF0U2hhZG93KE5vZGUqIG5vZGUp
IGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdFNoYWRvdyhub2Rl
KTsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4LCBO
b2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxG
bG93TWFwKj4odGhpcyktPmF0KG5vZGVJbmRleCwga2luZCk7IH0KKyAgICBBTFdBWVNfSU5MSU5F
IGNvbnN0IFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBj
b25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZSwga2luZCk7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQmIGF0KE5vZGVGbG93UHJvamVjdGlvbiBwcm9q
ZWN0aW9uKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQocHJv
amVjdGlvbik7IH0KICAgICAKIHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0
YXRlLmNwcAkocmV2aXNpb24gMjMxMzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCwyMCArNjAs
MzIgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0JsbwogICAgIEFTU0VS
VChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Js
b2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CiAKICAgICBtX2Fic3RyYWN0
VmFsdWVzLnJlc2l6ZSgpOworCisgICAgQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBlcG9jaCA9
IEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2g6OmZpcnN0KGJhc2ljQmxvY2stPmNmYVN0cnVjdHVy
ZUNsb2JiZXJTdGF0ZUF0SGVhZCk7CisgICAgbV9lZmZlY3RFcG9jaCA9IGVwb2NoOwogICAgIAog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+c2l6ZSgpOyBpKyspIHsKICAg
ICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uOjpmb3JFYWNoKAogICAgICAgICAgICAgYmFzaWNCbG9j
ay0+YXQoaSksIFsmXSAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGVQcm9qZWN0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yTm9kZShub2RlUHJvamVjdGlvbikuY2xlYXIoKTsKKyAgICAgICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZVByb2pl
Y3Rpb24pOworICAgICAgICAgICAgICAgIHZhbHVlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAg
dmFsdWUubV9lZmZlY3RFcG9jaCA9IGVwb2NoOwogICAgICAgICAgICAgfSk7CiAgICAgfQogCi0g
ICAgbV92YXJpYWJsZXMgPSBiYXNpY0Jsb2NrLT52YWx1ZXNBdEhlYWQ7CisgICAgZm9yIChzaXpl
X3QgaSA9IG1fdmFyaWFibGVzLnNpemUoKTsgaS0tOykgeworICAgICAgICBBYnN0cmFjdFZhbHVl
JiB2YWx1ZSA9IG1fdmFyaWFibGVzW2ldOworICAgICAgICB2YWx1ZSA9IGJhc2ljQmxvY2stPnZh
bHVlc0F0SGVhZFtpXTsKKyAgICAgICAgdmFsdWUubV9lZmZlY3RFcG9jaCA9IGVwb2NoOworICAg
IH0KICAgICAKICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CiAgICAgICAgIGZvciAo
Tm9kZUFic3RyYWN0VmFsdWVQYWlyJiBlbnRyeSA6IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRI
ZWFkKSB7Ci0gICAgICAgICAgICBpZiAoZW50cnkubm9kZS5pc1N0aWxsVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKGVudHJ5Lm5vZGUpID0gZW50cnkudmFsdWU7CisgICAgICAgICAg
ICBpZiAoZW50cnkubm9kZS5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5hdChlbnRyeS5ub2RlKTsKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGVudHJ5LnZhbHVlOworICAgICAgICAgICAgICAgIHZhbHVlLm1f
ZWZmZWN0RXBvY2ggPSBlcG9jaDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAg
ICBiYXNpY0Jsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gZmFsc2U7CkBAIC0xMjMsMTAgKzEzNSwx
MCBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKIAogICAgICAgICAg
ICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50
MzI6Ci0gICAgICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVu
dChpKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgICAgICBlbnRyeXBv
aW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0Tm9uQ2VsbFR5cGUoU3BlY0ludDMyT25s
eSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgRmx1
c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVh
ZC5hcmd1bWVudChpKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgICAgICAgICAg
ZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldE5vbkNlbGxUeXBlKFNwZWNC
b29sZWFuKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBGbHVzaGVkQ2VsbDoKICAgICAgICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRI
ZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUobV9ncmFwaCwgU3BlY0NlbGxDaGVjayk7CkBAIC0yMDEs
MTkgKzIxMywxOSBAQCBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrCiAg
ICAgY2FzZSBUaHJlYWRlZENQUzogewogICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyAr
K2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJs
b2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICAgICAgbWVyZ2VT
dGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMuYXJndW1lbnQoYXJndW1lbnQpLCBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAgICAgICBt
ZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCB0aGlzLT5hcmd1bWVudChhcmd1bWVudCksIGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBibG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFs
dWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7Ci0gICAg
ICAgICAgICBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5sb2NhbChs
b2NhbCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpKTsKKyAgICAgICAgICAg
IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIHRoaXMtPmxvY2FsKGxvY2FsKSwgYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIGNhc2UgU1NBOiB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPnZhbHVlc0F0VGFpbC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGJsb2NrLT52
YWx1ZXNBdFRhaWxbaV0ubWVyZ2UobV92YXJpYWJsZXNbaV0pOworICAgICAgICAgICAgYmxvY2st
PnZhbHVlc0F0VGFpbFtpXS5tZXJnZSh2YXJpYWJsZUF0KGkpKTsKIAogICAgICAgICBmb3IgKE5v
ZGVBYnN0cmFjdFZhbHVlUGFpciYgdmFsdWVBdFRhaWwgOiBibG9jay0+c3NhLT52YWx1ZXNBdFRh
aWwpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlQXROb2RlID0gZm9yTm9kZSh2
YWx1ZUF0VGFpbC5ub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIzMTM5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsMjEgKzQ3LDEwNCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBjcmVhdGVW
YWx1ZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKSB7IH0KICAgICAKLSAgICBBYnN0cmFjdFZh
bHVlJiBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQorICAgIEFMV0FZU19JTkxJTkUg
QWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUpOworICAgICAgICByZXR1cm4g
ZmFzdEZvcndhcmQobV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKSk7CiAgICAgfQogICAgIAotICAg
IEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQorICAgIEFMV0FZU19JTkxJTkUgQWJz
dHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVkZ2UpCiAgICAgewogICAgICAgICByZXR1cm4gZm9y
Tm9kZShlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIE9wZXJhbmRzPEFic3RyYWN0VmFs
dWU+JiB2YXJpYWJsZXMoKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoTm9k
ZUZsb3dQcm9qZWN0aW9uIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbV92YXJpYWJsZXM7
CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5hdChub2Rl
KTsKKyAgICAgICAgdmFsdWUuY2xlYXIoKTsKKyAgICAgICAgdmFsdWUubV9lZmZlY3RFcG9jaCA9
IG1fZWZmZWN0RXBvY2g7CiAgICAgfQogICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVh
ckZvck5vZGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgY2xlYXJGb3JOb2RlKGVkZ2Uubm9k
ZSgpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2Rl
LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBBYnN0cmFjdFZhbHVl
JiB2YWx1ZSA9IG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSk7CisgICAgICAgIHZhbHVlLnNldCht
X2dyYXBoLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICAgICAg
dmFsdWUubV9lZmZlY3RFcG9jaCA9IG1fZWZmZWN0RXBvY2g7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRGb3JO
b2RlKEVkZ2UgZWRnZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAg
c2V0Rm9yTm9kZShlZGdlLm5vZGUoKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRz
KS4uLik7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0VHlwZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9u
IG5vZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKTsKKyAgICAgICAgdmFsdWUu
c2V0VHlwZShtX2dyYXBoLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsK
KyAgICAgICAgdmFsdWUubV9lZmZlY3RFcG9jaCA9IG1fZWZmZWN0RXBvY2g7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXRUeXBlRm9yTm9kZShFZGdlIGVkZ2UsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAg
ICB7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8QXJn
dW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXROb25DZWxsVHlwZUZv
ck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykK
KyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5h
dChub2RlKTsKKyAgICAgICAgdmFsdWUuc2V0Tm9uQ2VsbFR5cGUoc3RkOjpmb3J3YXJkPEFyZ3Vt
ZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgICAgIHZhbHVlLm1fZWZmZWN0RXBvY2ggPSBtX2Vm
ZmVjdEVwb2NoOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKEVkZ2UgZWRnZSwg
QXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVG
b3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4u
KTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIG1ha2VCeXRlY29kZVRvcEZv
ck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAgeworICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSk7CisgICAgICAgIHZhbHVlLm1h
a2VCeXRlY29kZVRvcCgpOworICAgICAgICB2YWx1ZS5tX2VmZmVjdEVwb2NoID0gbV9lZmZlY3RF
cG9jaDsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIG1ha2VCeXRlY29kZVRv
cEZvck5vZGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbWFrZUJ5dGVjb2RlVG9wRm9yTm9k
ZShlZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYWtl
SGVhcFRvcEZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAgeworICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSk7CisgICAgICAg
IHZhbHVlLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIHZhbHVlLm1fZWZmZWN0RXBvY2ggPSBtX2Vm
ZmVjdEVwb2NoOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFrZUhlYXBU
b3BGb3JOb2RlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShl
ZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+JiB2
YXJpYWJsZXNGb3JEZWJ1Z2dpbmcoKSB7IHJldHVybiBtX3ZhcmlhYmxlczsgfQorCisgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlcy5udW1i
ZXJPZkFyZ3VtZW50cygpOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7
IHJldHVybiBtX3ZhcmlhYmxlcy5udW1iZXJPZkxvY2FscygpOyB9CisgICAgQWJzdHJhY3RWYWx1
ZSYgb3BlcmFuZChpbnQgb3BlcmFuZCkgeyByZXR1cm4gZmFzdEZvcndhcmQobV92YXJpYWJsZXMu
b3BlcmFuZChvcGVyYW5kKSk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlcy5vcGVyYW5k
KG9wZXJhbmQpKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBpbmRleCkgeyBy
ZXR1cm4gZmFzdEZvcndhcmQobV92YXJpYWJsZXMubG9jYWwoaW5kZXgpKTsgfQorICAgIEFic3Ry
YWN0VmFsdWUmIGFyZ3VtZW50KHNpemVfdCBpbmRleCkgeyByZXR1cm4gZmFzdEZvcndhcmQobV92
YXJpYWJsZXMuYXJndW1lbnQoaW5kZXgpKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIHZhcmlhYmxl
QXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlc1tpbmRleF0p
OyB9CisgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGJlZm9yZSBiZWdpbm5pbmcgQ0ZBIHRvIGluaXRp
YWxpemUgdGhlIGFic3RyYWN0IHZhbHVlcyBvZgogICAgIC8vIGFyZ3VtZW50cywgYW5kIHRvIGlu
ZGljYXRlIHdoaWNoIGJsb2NrcyBzaG91bGQgYmUgbGlzdGVkIGZvciBDRkEKICAgICAvLyBleGVj
dXRpb24uCkBAIC0xMTksNiArMjAyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBNZXJnZVRvU3VjY2Vz
c29ycy4KICAgICBib29sIG1lcmdlVG9TdWNjZXNzb3JzKEJhc2ljQmxvY2sqKTsKICAgICAKKyAg
ICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkgeyBtX2VmZmVjdEVwb2NoLmNsb2JiZXIoKTsgfQor
ICAgIAorICAgIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCkgeyBtX2VmZmVjdEVwb2No
Lm9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpOyB9CisgICAgCiAgICAgLy8gTWV0aG9kcyBpbnRl
bmRlZCB0byBiZSBjYWxsZWQgZnJvbSBBYnN0cmFjdEludGVycHJldGVyLgogICAgIHZvaWQgc2V0
Q2xvYmJlclN0YXRlKEFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUgc3RhdGUpIHsgbV9j
bG9iYmVyU3RhdGUgPSBzdGF0ZTsgfQogICAgIHZvaWQgbWVyZ2VDbG9iYmVyU3RhdGUoQWJzdHJh
Y3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZSBzdGF0ZSkgeyBtX2Nsb2JiZXJTdGF0ZSA9IG1lcmdl
Q2xvYmJlclN0YXRlcyhtX2Nsb2JiZXJTdGF0ZSwgc3RhdGUpOyB9CkBAIC0xMzksNiArMjI2LDEy
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgQUxXQVlTX0lOTElORSBBYnN0cmFj
dFZhbHVlJiBmYXN0Rm9yd2FyZChBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHZhbHVlLmZhc3RGb3J3YXJkVG8obV9lZmZlY3RFcG9jaCk7CisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBtZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUm
IGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKik7CiAKICAgICBz
dGF0aWMgYm9vbCBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0
aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlKiBkZXN0aW5hdGlvbk5vZGUsIE5v
ZGUqIHNvdXJjZU5vZGUpOwpAQCAtMTU0LDYgKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2lzVmFsaWQ7CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZSBtX2Nsb2JiZXJT
dGF0ZTsKICAgICBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgbV9zdHJ1Y3R1cmVDbG9iYmVyU3RhdGU7
CisgICAgQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBtX2VmZmVjdEVwb2NoOwogICAgIAogICAg
IEJyYW5jaERpcmVjdGlvbiBtX2JyYW5jaERpcmVjdGlvbjsgLy8gVGhpcyBpcyBvbmx5IHNldCBm
b3IgYmxvY2tzIHRoYXQgZW5kIGluIEJyYW5jaCBhbmQgdGhhdCBleGVjdXRlIHRvIGNvbXBsZXRp
b24gKGkuZS4gbV9pc1ZhbGlkID09IHRydWUpLgogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjMxMzk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTkzMiw3ICsxOTMyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcg
dGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8g
Y2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CShyZXZpc2lvbiAyMzEzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2ODUsNyArMTY4NSw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjb21waWxlR2V0U3RhY2soKQogICAgIHsKICAgICAgICAgU3RhY2tBY2Nlc3NE
YXRhKiBkYXRhID0gbV9ub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoZGF0YS0+bG9jYWwpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5sb2Nh
bCk7CiAgICAgICAgIAogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25j
cmV0ZShkYXRhLT5mb3JtYXQpLCBkYXRhLT5mb3JtYXQpOwogICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgZGF0YS0+Zm9ybWF0ICE9IEZsdXNoZWREb3VibGUsIGRhdGEtPmZvcm1h
dCk7IC8vIFRoaXMganVzdCBoYXBwZW5zIHRvIG5vdCBhcmlzZSBmb3IgR2V0U3RhY2tzLCByaWdo
dCBub3cuIEl0IHdvdWxkIGJlIHRyaXZpYWwgdG8gc3VwcG9ydC4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339687</attachid>
            <date>2018-05-06 10:29:12 -0700</date>
            <delta_ts>2018-05-07 16:00:02 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>118120</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzEzOTkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE4LTA1LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIEFJIHNob3VsZCBoYXZlIE8oMSkgY2xvYmJlcmluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1Mjg3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3Mvc2ltcGxl
LWFpLWVmZmVjdC5qczogQWRkZWQuCisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKwog
MjAxOC0wNS0wNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoIHNob3VsZCByZXR1cm4gdHJ1ZSBmb3IgdW5kZWNp
ZGVkIGFycmF5cwpJbmRleDogSlNUZXN0cy9zdHJlc3Mvc2ltcGxlLWFpLWVmZmVjdC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zaW1wbGUtYWktZWZmZWN0LmpzCShub25leGlzdGVu
dCkKKysrIEpTVGVzdHMvc3RyZXNzL3NpbXBsZS1haS1lZmZlY3QuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzOSBAQAordmFyIGRvRWZmZWN0ID0gZmFsc2U7Cit2YXIgZGlkRWZmZWN0ID0g
ZmFsc2U7CisKK2Z1bmN0aW9uIGJhcihvLCBwKQoreworICAgIGlmIChkb0VmZmVjdCkgeworICAg
ICAgICBkZWxldGUgcC5nOworICAgICAgICBwLl9fZGVmaW5lR2V0dGVyX18oImciLCAoKSA9PiB7
CisgICAgICAgICAgICBkaWRFZmZlY3QgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIDQyOwor
ICAgICAgICB9KTsKKyAgICB9Cit9CisKK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbyhv
LCBwKSB7CisgICAgdmFyIHJlc3VsdCA9IG8uZiArIHAuZzsKKyAgICBiYXIobywgcCk7CisgICAg
cmV0dXJuIHJlc3VsdCArIG8uZiArIHAuZzsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIG8g
PSB7ZzogMX07CitvLmggPSAyOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsK
KyAgICB2YXIgcmVzdWx0ID0gZm9vKHtmOiAxfSwge2c6IDN9KTsKKyAgICBpZiAocmVzdWx0ICE9
IDgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBpbiBsb29wOiAiICsgcmVzdWx0
OworfQorCitkb0VmZmVjdCA9IHRydWU7Cit2YXIgcmVzdWx0ID0gZm9vKHtmOiAxfSwge2c6IDN9
KTsKK2lmIChyZXN1bHQgIT0gNDcpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVu
ZDogIiArIHJlc3VsdDsKK2lmICghZGlkRWZmZWN0KQorICAgIHRocm93ICJFcnJvcjogZGlkIG5v
dCBkbyBlZmZlY3QiOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzEz
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTEgQEAKKzIwMTgtMDUtMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KKworICAgICAgICBERkcgQUkgc2hvdWxkIGhhdmUgTygxKSBjbG9iYmVyaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyODcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4
ZXMgYW4gb2xkIHNjYWxhYmlsaXR5IHByb2JlbSBpbiBBSS4gUHJldmlvdXNseSwgaWYgd2UgZGlk
IGNsb2JiZXJXb3JsZCgpLCB0aGVuIHdlCisgICAgICAgIHdvdWxkIHRyYXZlcnNlIGFsbCBvZiB0
aGUgc3RhdGUgYXZhaWxhYmxlIHRvIHRoZSBBSSBhdCB0aGF0IHRpbWUgYW5kIGNsb2JiZXIgaXQu
CisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZXMgY2xvYmJlcldvcmxkKCkgdG8gYmUgTygx
KS4gSXQganVzdCBkb2VzIHNvbWUgbWF0aCB0byBhIGNsb2JiZXIgZXBvY2guCisgICAgICAgIAor
ICAgICAgICBUaGlzIGlzIGEgfjElIHNwZWVkLXVwIGZvciBjb21waWxlIHRpbWVzLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmZvck5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OnNldEZvck5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmNsZWFyRm9yTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6dmFyaWFibGVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5cGU+OjpjbG9iYmVyV29ybGQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpmb3JBbGxWYWx1ZXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0
dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZh
c3RGb3J3YXJkVG9TbG93KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZhc3RGb3J3YXJkVG8pOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1cmVzRm9yKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvYnNlcnZlSW52YWxpZGF0aW9uUG9p
bnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9ic2VydmVJ
bnZhbGlkYXRpb25Qb2ludEZvcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0
VmFsdWVDbG9iYmVyRXBvY2guY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlQ2xvYmJlckVwb2NoOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RWYWx1ZUNsb2JiZXJFcG9jaC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlQ2xvYmJlckVwb2NoOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpmaXJzdCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6Y2xvYmJlcik6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaDo6b2JzZXJ2ZUludmFsaWRhdGlvblBv
aW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlQ2xvYmJlckVw
b2NoOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
Q2xvYmJlckVwb2NoOjpzdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY29uc3QpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2g6OmNsb2JiZXJFcG9jaCBjb25zdCk6Cisg
ICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpzZXRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpB
dFRhaWxBYnN0cmFjdFN0YXRlOjpjbGVhckZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF0
VGFpbEFic3RyYWN0U3RhdGU6Om51bWJlck9mQXJndW1lbnRzIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpudW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b3BlcmFuZCk6CisgICAgICAgIChK
U0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6bG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6
OkF0VGFpbEFic3RyYWN0U3RhdGU6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRh
aWxBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
QXRUYWlsQWJzdHJhY3RTdGF0ZTo6b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjp2YXJpYWJsZXMpOiBEZWxldGVkLgorICAg
ICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6
OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0
YW50cyk6CisgICAgICAgICogZGZnL0RGR0Zsb3dNYXAuaDoKKyAgICAgICAgKEpTQzo6REZHOjpG
bG93TWFwOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01hcDo6YXRTaGFkb3cpOgorICAg
ICAgICAoSlNDOjpERkc6OkZsb3dNYXA6OmF0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpG
bG93TWFwOjphdFNoYWRvdyBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVn
aW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6
ZW5kQmFzaWNCbG9jayk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6
CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpzZXRGb3JOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6Y2xlYXJGb3JOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6dmFyaWFibGVzRm9yRGVidWdnaW5n
KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bnVtYmVyT2ZBcmd1
bWVudHMgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpu
dW1iZXJPZkxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0
U3RhdGU6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRl
Ojpsb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmFyZ3Vt
ZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6dmFyaWFibGVB
dCk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmNsb2JiZXJTdHJ1
Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6b2JzZXJ2
ZUludmFsaWRhdGlvblBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZTo6ZmFzdEZvcndhcmQpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0
YXRlOjp2YXJpYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRTdGFjayk6CisKIDIwMTgtMDUtMDUgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgQ0ZBIHBoYXNlIHNob3VsZCBv
bmx5IGRvIGNsb2JiZXIgYXNzZXJ0cyBpbiBkZWJ1ZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAkocmV2aXNpb24gMjMxMzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNiArMjc0LDcgQEAgZGVidWdnZXIvRGVidWdn
ZXJTY29wZS5jcHAKIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCiBkZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlckNsb2JiZXJTdGF0ZS5jcHAKIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAorZGZnL0RG
R0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwCiBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAogZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHAKIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIzMTM5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTksNiArMzE5LDcgQEAKIAkJMEY0RDhDNzgxRkNBM0NGQTAwMUQzMkFD
IC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxlTWFy
a2luZ0NvbnN0cmFpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxs
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0REUx
Q0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLzsgfTsKIAkJMEY0
RjExRTgyMDlCQ0RBQjAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYxMUU2MjA5QkNEQTEwMDcw
OTY1NCAvKiBDb21waWxlclRpbWluZ1Njb3BlLmggKi87IH07CisJCTBGNEYxMUVCMjA5RDQyNjYw
MDcwOTY1NCAvKiBERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMTFFQTIwOUQ0MjYzMDA3MDk2NTQg
LyogREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5oICovOyB9OwogCQkwRjRGMjlFMDE4QjZB
RDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOURFMThC
NkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5o
ICovOyB9OwogCQkwRjRGODI4ODFFMkZGREUwMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjRGODI4QzFFMzFCOTc2MDA3NTE4NEMgLyogU3RvY2hhc3RpY1Nw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNEY4MjhBMUUzMUI5NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovOyB9OwpAQCAtMjMxMCw2ICsyMzExLDggQEAKIAkJ
MEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNP
cmlnaW5EdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjExRTYyMDlC
Q0RBMTAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29tcGlsZXJUaW1pbmdTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjRGMTFFNzIwOUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29w
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21waWxlclRpbWlu
Z1Njb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RjExRTkyMDlENDI2
MzAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5j
cHA7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEYxMUVBMjA5RDQyNjMwMDcwOTY1NCAvKiBERkdBYnN0
cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guaDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZh
bHVlQ2xvYmJlckVwb2NoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURE
MThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGF0aWNFeGVj
dXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhdGlj
RXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVj
dXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRGODI4NTFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTcxMTQsNiArNzExNyw4IEBACiAJCQkJQTcwNEQ4RkYxN0EwQkFBODAwNkJB
NTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggKi8sCiAJCQkJMEY1NUMxOTMx
NzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovLAogCQkJCTBGNjIwMTZG
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJCQkJMEY0RjExRTky
MDlENDI2MzAwNzA5NjU0IC8qIERGR0Fic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2guY3BwICovLAor
CQkJCTBGNEYxMUVBMjA5RDQyNjMwMDcwOTY1NCAvKiBERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVw
b2NoLmggKi8sCiAJCQkJMEZEM0UzRkYxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgKi8sCiAJCQkJMEZEM0U0MDAxQjYxOEFB
RjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5o
ICovLAogCQkJCTBGMThEM0NEMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwICovLApAQCAtOTA0MCw2ICs5MDQ1LDcgQEAKIAkJCQlBNTEzRTVDMjE4
NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI2NkY4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJy
YXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEYxMUVCMjA5RDQyNjYwMDcwOTY1NCAvKiBERkdB
YnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkM1
MTc2MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTMzRjUwODExQjg0MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5o
CShyZXZpc2lvbiAyMzEzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bl
cmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDcgKzI0NSw3IEBAIHB1YmxpYzoKICAgICAK
IHByaXZhdGU6CiAgICAgLy8gVGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFy
ZSBhcmd1bWVudHMsIHRoZSByZXN0IGFyZSBsb2NhbHMuCi0gICAgVmVjdG9yPFQsIDI0PiBtX3Zh
bHVlczsKKyAgICBWZWN0b3I8VCwgMjQsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3ZhbHVlczsK
ICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50czsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAy
MzEzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDE5ICs0MSw4MCBAQCBwdWJsaWM6CiAgICAgQWJz
dHJhY3RJbnRlcnByZXRlcihHcmFwaCYsIEFic3RyYWN0U3RhdGVUeXBlJik7CiAgICAgfkFic3Ry
YWN0SW50ZXJwcmV0ZXIoKTsKICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVG
bG93UHJvamVjdGlvbiBub2RlKQorICAgIEFMV0FZU19JTkxJTkUgQWJzdHJhY3RWYWx1ZSYgZm9y
Tm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3N0
YXRlLmZvck5vZGUobm9kZSk7CiAgICAgfQogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIGZvck5v
ZGUoRWRnZSBlZGdlKQorICAgIEFMV0FZU19JTkxJTkUgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShF
ZGdlIGVkZ2UpCiAgICAgewogICAgICAgICByZXR1cm4gZm9yTm9kZShlZGdlLm5vZGUoKSk7CiAg
ICAgfQogICAgIAotICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+JiB2YXJpYWJsZXMoKQorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUp
CiAgICAgewotICAgICAgICByZXR1cm4gbV9zdGF0ZS52YXJpYWJsZXMoKTsKKyAgICAgICAgbV9z
dGF0ZS5jbGVhckZvck5vZGUobm9kZSk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBjbGVhckZvck5vZGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgY2xlYXJGb3JOb2Rl
KGVkZ2Uubm9kZSgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9u
IG5vZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIG1fc3RhdGUu
c2V0Rm9yTm9kZShub2RlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQUxXQVlT
X0lOTElORSB2b2lkIHNldEZvck5vZGUoRWRnZSBlZGdlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVu
dHMpCisgICAgeworICAgICAgICBzZXRGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8
QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFR5cGVGb3JOb2RlKE5v
ZGVGbG93UHJvamVjdGlvbiBub2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgewor
ICAgICAgICBtX3N0YXRlLnNldFR5cGVGb3JOb2RlKG5vZGUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0VHlwZUZvck5vZGUoRWRnZSBlZGdl
LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBzZXRUeXBlRm9yTm9k
ZShlZGdlLm5vZGUoKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBu
b2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBtX3N0YXRlLnNl
dE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldE5vbkNlbGxUeXBlRm9yTm9kZShFZGdlIGVkZ2UsIEFy
Z3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9y
Tm9kZShlZGdlLm5vZGUoKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7
CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYWtlQnl0ZWNvZGVUb3BGb3JO
b2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQorICAgIHsKKyAgICAgICAgbV9zdGF0ZS5tYWtl
Qnl0ZWNvZGVUb3BGb3JOb2RlKG5vZGUpOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBt
YWtlQnl0ZWNvZGVUb3BGb3JOb2RlKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIG1ha2VIZWFwVG9wRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9k
ZSkKKyAgICB7CisgICAgICAgIG1fc3RhdGUubWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOworICAg
IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFrZUhlYXBUb3BGb3JOb2RlKEVkZ2Ug
ZWRnZSkKKyAgICB7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShlZGdlLm5vZGUoKSk7CiAg
ICAgfQogICAgIAogICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2soTm9kZSogbm9kZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKQpAQCAtMTQ5LDEzICsyMTAsMTMgQEAgcHVibGljOgog
ICAgIFBoaUNoaWxkcmVuKiBwaGlDaGlsZHJlbigpIHsgcmV0dXJuIG1fcGhpQ2hpbGRyZW4uZ2V0
KCk7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9y
aWdpbiYsIHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgdm9pZCBjbG9iYmVyV29ybGQoKTsK
ICAgICB2b2lkIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yQWxsVmFsdWVzKHVuc2lnbmVkIGluZGV4SW5CbG9j
aywgRnVuY3RvciYpOwogICAgIAotICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQg
aW5kZXhJbkJsb2NrKTsKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CiAgICAgdm9pZCBk
aWRGb2xkQ2xvYmJlclN0cnVjdHVyZXMoKTsKICAgICAKICAgICB2b2lkIG9ic2VydmVUcmFuc2l0
aW9uKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgUmVnaXN0ZXJlZFN0cnVjdHVyZSBmcm9tLCBSZWdp
c3RlcmVkU3RydWN0dXJlIHRvKTsKQEAgLTE5MCw3ICsyNTEsNyBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgdmVyaWZ5RWRnZShOb2RlKiwgRWRnZSk7CiAgICAgdm9pZCB2ZXJpZnlFZGdlcyhO
b2RlKik7Ci0gICAgdm9pZCBleGVjdXRlRG91YmxlVW5hcnlPcEVmZmVjdHMoTm9kZSosIHVuc2ln
bmVkIGNsb2JiZXJMaW1pdCwgZG91YmxlKCplcXVpdmFsZW50RnVuY3Rpb24pKGRvdWJsZSkpOwor
ICAgIHZvaWQgZXhlY3V0ZURvdWJsZVVuYXJ5T3BFZmZlY3RzKE5vZGUqLCBkb3VibGUoKmVxdWl2
YWxlbnRGdW5jdGlvbikoZG91YmxlKSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9j
azsKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDIzMTM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDcgKzIyNyw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgY2FzZSBMYXp5SlNWYWx1
ZTo6U2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgogICAgICAgICBjYXNlIExhenlKU1ZhbHVlOjpLbm93
blN0cmluZ0ltcGw6CiAgICAgICAgIGNhc2UgTGF6eUpTVmFsdWU6Ok5ld1N0cmluZ0ltcGw6Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyk7Cisg
ICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjM1LDcgKzIzNSw3IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAogICAgIGNhc2UgSWRlbnRp
dHlXaXRoUHJvZmlsZToKICAgICBjYXNlIElkZW50aXR5OiB7Ci0gICAgICAgIGZvck5vZGUobm9k
ZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUpLnZhbHVl
KCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAg
ICBicmVhazsKQEAgLTI0MywzOSArMjQzLDM5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDoKICAg
ICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgIG1ha2VCeXRlY29kZVRvcEZvck5vZGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsK
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3Rh
dGUudmFyaWFibGVzKCkub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkub2Zmc2V0
KCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKHZhcmlh
YmxlQWNjZXNzRGF0YS0+bG9jYWwoKS5vZmZzZXQoKSk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBp
biB0aGUgbG9jYWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcih2YXJpYWJsZUFjY2Vz
c0RhdGEtPmZsdXNoRm9ybWF0KCkpKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQogICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlKSA9IHZhbHVlOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZhbHVlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAg
IFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAg
ICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEt
PmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChk
YXRhLT5sb2NhbCk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgc2hvdWxkIGFs
cmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YWx1
ZS5pc1R5cGUodHlwZUZpbHRlckZvcihkYXRhLT5mb3JtYXQpKSk7CiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUs
IHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExv
Y2FsOiB7Ci0gICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2RlLT5sb2NhbCgp
KSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAgIG1fc3RhdGUudmFy
aWFibGVzKCkub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+bG9jYWwpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yOTYsMjAgKzI5NiwyMCBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBz
dGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LiBTZXRBcmd1bWVudCBtZWFucyB0aGF0IHNv
bWVvbmUgc2V0CiAgICAgICAgIC8vIHRoZSBhcmd1bWVudCB2YWx1ZXMgb3V0LW9mLWJhbmQsIGFu
ZCBjdXJyZW50bHkgdGhpcyBhbHdheXMgbWVhbnMgc2V0dGluZyB0byBhCiAgICAgICAgIC8vIG5v
bi1jbGVhciB2YWx1ZS4KLSAgICAgICAgQVNTRVJUKCFtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXRlLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOiB7CiAgICAgICAgIHVuc2lnbmVkIGVu
dHJ5cG9pbnRJbmRleCA9IG5vZGUtPmVudHJ5cG9pbnRJbmRleCgpOwogICAgICAgICBjb25zdCBW
ZWN0b3I8Rmx1c2hGb3JtYXQ+JiBhcmd1bWVudEZvcm1hdHMgPSBtX2dyYXBoLm1fYXJndW1lbnRG
b3JtYXRzW2VudHJ5cG9pbnRJbmRleF07CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSAwOyBhcmd1bWVudCA8IGFyZ3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrYXJndW1lbnQpIHsKLSAg
ICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1
bWVudChhcmd1bWVudCk7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3Rh
dGUuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudEZvcm1h
dHNbYXJndW1lbnRdKSB7CiAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKLSAgICAgICAg
ICAgICAgICB2YWx1ZS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIHZh
bHVlLnNldE5vbkNlbGxUeXBlKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKLSAgICAgICAgICAgICAgICB2YWx1
ZS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgICAgICB2YWx1ZS5zZXROb25DZWxs
VHlwZShTcGVjQm9vbGVhbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIEZsdXNoZWRDZWxsOgogICAgICAgICAgICAgICAgIHZhbHVlLnNldFR5cGUobV9ncmFwaCwg
U3BlY0NlbGwpOwpAQCAtMzMyLDcgKzMzMiw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MzA3MQogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAg
Y2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4u
c2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0zNDEsOSArMzQxLDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgTG9h
ZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIG1f
c3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5jb3VudCkuc2V0VHlwZShTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmNvdW50KS5zZXROb25DZWxsVHlw
ZShTcGVjSW50MzJPbmx5KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQg
LSAxOyBpLS07KQotICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEt
PnN0YXJ0Lm9mZnNldCgpICsgaSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgIG1fc3RhdGUu
b3BlcmFuZChkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtMzU0LDggKzM1NCw4IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIEJpdExTaGlmdDoKICAg
ICBjYXNlIEJpdFVSU2hpZnQ6IHsKICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
KSB7Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICBz
ZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkBAIC0zOTMsMTEgKzM5MywxMSBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEJpdEFu
ZAogICAgICAgICAgICAgJiYgKGlzQm9vbEludDMyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSB8fAogICAgICAgICAgICAgICAgIGlzQm9vbEludDMyU3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkpIHsKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbEludDMyKTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxU
eXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbEludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMy
T25seSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQxMCw3ICs0MTAsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAg
ICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQzMl90PihtYWNo
aW5lSW50KSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNBbnlJbnQpOworICAg
ICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQW55SW50KTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjaGls
ZCAmJiBjaGlsZC5pc0ludDMyKCkpIHsKQEAgLTQxOCw3ICs0MTgsNyBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQo
bm9kZSwganNOdW1iZXIodmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQW55SW50QXNEb3Vi
bGUpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNBbnlJbnRB
c0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoY2hp
bGQgJiYgY2hpbGQuaXNJbnQzMigpKSB7CkBAIC00MjgsNyArNDI4LDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
SW50MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQz
Mk9ubHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDYyLDcgKzQ2Miw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9k
ZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAg
ICAgCkBAIC00ODcsMTEgKzQ4NywxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xJbnQzMik7CisgICAgICAgICAgICBzZXROb25D
ZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xJbnQzMik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJ
bnQzMk9ubHkpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMy
T25seSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC01MjUsNyArNTI1LDcg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
fQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUodHlwZSk7CisgICAgICAgIHNldE5vbkNl
bGxUeXBlRm9yTm9kZShub2RlLCB0eXBlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5maXhUeXBl
Rm9yUmVwcmVzZW50YXRpb24obV9ncmFwaCwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTUzNyw3ICs1MzcsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNBbnlJbnQpOworICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0FueUludCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CkBAIC01NDgsMjAgKzU0OCwyMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSAmIH5TcGVjRG91YmxlSW1wdXJlTmFOKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9k
ZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNEb3VibGVJbXB1cmVOYU4p
OwogICAgICAgICBmb3JOb2RlKG5vZGUpLmZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihtX2dyYXBo
LCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFZhbHVl
QWRkOiB7CiAgICAgICAgIEFTU0VSVChub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gVW50eXBlZFVz
ZSk7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3RyaW5n
IHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAg
IHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFN0ckNhdDogewotICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyk7CisgICAgICAgIHNldFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IApAQCAtNTgxLDcgKzU4MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9u
bHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9u
bHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CiAgICAg
ICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzQW55SW50KCkgJiYgcmlnaHQuaXNB
bnlJbnQoKSkgewpAQCAtNTkxLDE0ICs1OTEsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0FueUludCk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3Bl
Y0FueUludCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6
CiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmln
aHQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzRG91
YmxlTnVtYmVyKGxlZnQuYXNOdW1iZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZSgKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCAKICAgICAg
ICAgICAgICAgICB0eXBlT2ZEb3VibGVTdW0oCiAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTYxMSw4ICs2MTEsOCBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgQXRvbWljc0lzTG9j
a0ZyZWU6IHsKICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBJbnQzMlVz
ZSkKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2Ji
ZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbEludDMyKTsK
KyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5v
ZGUobm9kZSwgU3BlY0Jvb2xJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNjM2
LDEwICs2MzYsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9u
bHkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTY3NCwxNiArNjc0LDE2IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBpZiAobnVtYmVyT2ZSZW1vdmVk
Q2hpbGRyZW4gPT0gbnVtYmVyT2ZDaGlsZHJlbikgewogICAgICAgICAgICAgICAgIC8vIFByb3Bh
Z2F0ZSB0aGUgbGFzdCBjaGlsZC4gVGhpcyBpcyB0aGUgd2F5IHRha2VuIGluIHRoZSBjb25zdGFu
dCBmb2xkaW5nIHBoYXNlLgotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkcmVuLmNoaWxkKG51bWJlck9mQ2hpbGRyZW4gLSAxKSk7CisgICAgICAgICAg
ICAgICAgc2V0Rm9yTm9kZShub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkcmVuLmNoaWxkKG51bWJl
ck9mQ2hpbGRyZW4gLSAxKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKChudW1iZXJPZlJlbW92ZWRDaGlsZHJlbiArIDEpID09IG51bWJl
ck9mQ2hpbGRyZW4pIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobm9uRW1wdHlJbmRleCk7Ci0g
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGRyZW4uY2hp
bGQobm9uRW1wdHlJbmRleC52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShu
b2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkcmVuLmNoaWxkKG5vbkVtcHR5SW5kZXgudmFsdWUoKSkp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTcwMyw3ICs3MDMsNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIHNl
dE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEludDUyUmVwVXNlOgogICAgICAgICAgICAgaWYgKGxlZnQgJiYg
cmlnaHQgJiYgbGVmdC5pc0FueUludCgpICYmIHJpZ2h0LmlzQW55SW50KCkpIHsKQEAgLTcxMywy
MCArNzEzLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNBbnlJbnQpOworICAgICAg
ICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNBbnlJbnQpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAgICAgICAgICAgaWYgKGxl
ZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAg
ICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihsZWZ0LmFzTnVt
YmVyKCkgLSByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoCisgICAgICAgICAg
ICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgCiAgICAgICAgICAgICAgICAgdHlwZU9mRG91
YmxlRGlmZmVyZW5jZSgKICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICBjbG9iYmVyV29y
bGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAg
ICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShu
b2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzU1
LDcgKzc1NSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAg
ICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CiAgICAgICAgICAgICBp
ZiAoY2hpbGQgJiYgY2hpbGQuaXNBbnlJbnQoKSkgewpAQCAtNzcwLDIxICs3NzAsMjEgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0FueUludCk7CisgICAgICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgU3BlY0FueUludCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNO
dW1iZXIoKSkgewogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzRG91YmxlTnVt
YmVyKC1jaGlsZC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoCisgICAgICAgICAgICBz
ZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgCiAgICAgICAgICAgICAgICAgdHlwZU9mRG91Ymxl
TmVnYXRpb24oCiAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpOwotICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICAgICAg
Y2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwg
U3BlY0J5dGVjb2RlTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwpAQCAtODA5LDcgKzgwOSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNw
ZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW50NTJSZXBV
c2U6CiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzQW55SW50KCkgJiYg
cmlnaHQuaXNBbnlJbnQoKSkgewpAQCAtODIyLDIwICs4MjIsMjAgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0FueUludCk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUo
bm9kZSwgU3BlY0FueUludCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3Vi
bGVSZXBVc2U6CiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVy
KCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5v
ZGUsIGpzRG91YmxlTnVtYmVyKGxlZnQuYXNOdW1iZXIoKSAqIHJpZ2h0LmFzTnVtYmVyKCkpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZSgKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2Rl
LCAKICAgICAgICAgICAgICAgICB0eXBlT2ZEb3VibGVQcm9kdWN0KAogICAgICAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUsIGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpLm1fdHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVW50eXBlZFVz
ZToKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2Ji
ZXJMaW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3Bl
Y0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJlcik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC04NjEsMjAgKzg2MSwyMCBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9k
ZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IERvdWJsZVJlcFVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNO
dW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwganNEb3VibGVOdW1iZXIobGVmdC5hc051bWJlcigpIC8gcmlnaHQuYXNOdW1iZXIo
KSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKAorICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIAogICAgICAgICAgICAgICAgIHR5cGVPZkRvdWJsZVF1b3RpZW50KAogICAgICAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUsIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLm1fdHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVW50
eXBlZFVzZToKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFw
aCwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAg
ICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC05MDAsMTQgKzkwMCwxNCBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBl
Rm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxl
ZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgc2V0
Q29uc3RhbnQobm9kZSwganNEb3VibGVOdW1iZXIoZm1vZChsZWZ0LmFzTnVtYmVyKCksIHJpZ2h0
LmFzTnVtYmVyKCkpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoCisgICAgICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgCiAgICAgICAgICAgICAgICAgdHlwZU9mRG91YmxlQmluYXJ5T3Ao
CiAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9y
Tm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTky
Nyw3ICs5MjcsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoc3RkOjptaW4obGVmdC5h
c0ludDMyKCksIHJpZ2h0LmFzSW50MzIoKSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJP
bmx5KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJP
bmx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAg
ICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5p
c051bWJlcigpKSB7CkBAIC05MzYsNyArOTM2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzRG91
YmxlTnVtYmVyKGEgPCBiID8gYSA6IChiIDw9IGEgPyBiIDogYSArIGIpKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoCisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgCiAgICAgICAg
ICAgICAgICAgdHlwZU9mRG91YmxlTWluTWF4KAogICAgICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUsIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC05NTYsNyArOTU2LDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5v
ZGUsIGpzTnVtYmVyKHN0ZDo6bWF4KGxlZnQuYXNJbnQzMigpLCByaWdodC5hc0ludDMyKCkpKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgewpAQCAtOTY1LDcgKzk2NSw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAg
ICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihhID4gYiA/IGEgOiAoYiA+PSBh
ID8gYiA6IGEgKyBiKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKAorICAgICAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIAogICAgICAgICAgICAgICAgIHR5cGVPZkRvdWJsZU1pbk1heCgK
ICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlLCBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTg3
LDE5ICs5ODcsMTkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7Cisg
ICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAgICAg
ICBpZiAoc3RkOjpvcHRpb25hbDxkb3VibGU+IG51bWJlciA9IGNoaWxkLnRvTnVtYmVyRnJvbVBy
aW1pdGl2ZSgpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNEb3VibGVO
dW1iZXIoZmFicygqbnVtYmVyKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKHR5cGVPZkRvdWJsZUFicyhm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxU
eXBlRm9yTm9kZShub2RlLCB0eXBlT2ZEb3VibGVBYnMoZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09
IFVudHlwZWRVc2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7Ci0gICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNGdWxsTnVtYmVyKTsKKyAgICAgICAgICAgIGNs
b2JiZXJXb3JsZCgpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNw
ZWNGdWxsTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwpAQCAtMTAxOSwxMiArMTAxOSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKHR5cGVPZkRvdWJsZVBvdyhmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUsIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlw
ZSkpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgdHlwZU9mRG91YmxlUG93
KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
bV90eXBlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQXJpdGhSYW5kb206
IHsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNEb3VibGVSZWFs
KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNEb3VibGVSZWFsKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMDczLDI3ICsxMDczLDI3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSkgewogICAgICAgICAgICAg
aWYgKHByb2R1Y2VzSW50ZWdlcihub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgpKSkKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSkK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUodHlwZU9mRG91YmxlUm91bmRp
bmcoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgICAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIHR5cGVPZkRvdWJsZVJvdW5kaW5nKGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKTsKLSAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY0Z1bGxOdW1iZXIpOworICAgICAgICAgICAgY2xvYmJlcldv
cmxkKCk7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Z1bGxO
dW1iZXIpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAog
ICAgIGNhc2UgQXJpdGhTcXJ0OgotICAgICAgICBleGVjdXRlRG91YmxlVW5hcnlPcEVmZmVjdHMo
bm9kZSwgY2xvYmJlckxpbWl0LCBzcXJ0KTsKKyAgICAgICAgZXhlY3V0ZURvdWJsZVVuYXJ5T3BF
ZmZlY3RzKG5vZGUsIHNxcnQpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQXJpdGhGUm91
bmQ6Ci0gICAgICAgIGV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhub2RlLCBjbG9iYmVyTGlt
aXQsIFtdKGRvdWJsZSB2YWx1ZSkgLT4gZG91YmxlIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
Pih2YWx1ZSk7IH0pOworICAgICAgICBleGVjdXRlRG91YmxlVW5hcnlPcEVmZmVjdHMobm9kZSwg
W10oZG91YmxlIHZhbHVlKSAtPiBkb3VibGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZh
bHVlKTsgfSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEFyaXRoVW5hcnk6
Ci0gICAgICAgIGV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhub2RlLCBjbG9iYmVyTGltaXQs
IGFyaXRoVW5hcnlGdW5jdGlvbihub2RlLT5hcml0aFVuYXJ5VHlwZSgpKSk7CisgICAgICAgIGV4
ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhub2RlLCBhcml0aFVuYXJ5RnVuY3Rpb24obm9kZS0+
YXJpdGhVbmFyeVR5cGUoKSkpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNh
c2UgTG9naWNhbE5vdDogewpAQCAtMTEwNSw3ICsxMTA1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNC
b29sZWFuKHRydWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAg
IHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTExMjIsNyArMTEyMiw3IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2Rl
LCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMTM5LDUxICsx
MTM5LDUxIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVh
cFRvcCgpOworICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIGNhc2UgU3RyaW5nU2xpY2U6IHsKLSAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNTdHJpbmcpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShu
b2RlLCBTcGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBUb0xv
d2VyQ2FzZTogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0
cmluZyk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIExvYWRLZXlGcm9tTWFwQnVja2V0OgogICAgIGNh
c2UgTG9hZFZhbHVlRnJvbU1hcEJ1Y2tldDoKICAgICBjYXNlIEV4dHJhY3RWYWx1ZUZyb21XZWFr
TWFwR2V0OgotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIG1h
a2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldE1h
cEJ1Y2tldDoKICAgICBjYXNlIEdldE1hcEJ1Y2tldEhlYWQ6CiAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlKQotICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9ncmFwaCwgbV92bS5oYXNoTWFwQnVja2V0TWFwU3RydWN0dXJlLmdldCgpKTsK
KyAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV92bS5oYXNoTWFwQnVja2V0TWFwU3RydWN0
dXJlLmdldCgpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IFNldE9iamVjdFVzZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLCBtX3ZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuZ2V0KCkpOwor
ICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3ZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1
cmUuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRNYXBC
dWNrZXROZXh0OgogICAgICAgICBpZiAobm9kZS0+YnVja2V0T3duZXJUeXBlKCkgPT0gQnVja2V0
T3duZXJUeXBlOjpNYXApCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBt
X3ZtLmhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgc2V0Rm9y
Tm9kZShub2RlLCBtX3ZtLmhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChub2RlLT5idWNrZXRPd25lclR5cGUoKSA9PSBC
dWNrZXRPd25lclR5cGU6OlNldCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dy
YXBoLCBtX3ZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAg
c2V0Rm9yTm9kZShub2RlLCBtX3ZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuZ2V0KCkpOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTZXRBZGQ6Ci0gICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fdm0uaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZS5n
ZXQoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV92bS5oYXNoTWFwQnVja2V0U2V0U3Ry
dWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1hcFNldDoKLSAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV92bS5oYXNoTWFwQnVja2V0TWFwU3RydWN0
dXJlLmdldCgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3ZtLmhhc2hNYXBCdWNrZXRN
YXBTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgV2Vha1NldEFk
ZDoKQEAgLTExOTEsNyArMTE5MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFdlYWtNYXBHZXQ6Ci0gICAgICAg
IGZvck5vZGUobm9kZSkubWFrZUJ5dGVjb2RlVG9wKCk7CisgICAgICAgIG1ha2VCeXRlY29kZVRv
cEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBJc0VtcHR5OgpAQCAt
MTQ0MSw3ICsxNDQxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgCi0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAg
IHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtMTQ5MSw3ICsxNDkxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICAg
ICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZ0lkZW50KTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0xNTMyLDcgKzE1MzIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAg
ICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTE2NjgsOCArMTY2OCw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc0Nsb2JiZXJpbmcp
Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVy
TGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShu
b2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApA
QCAtMTcwNiw3ICsxNzA2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogCiAgICAgICAgICAgICBpZiAoaXNOb25TdHJpbmdDZWxsQ29uc3RhbnQobGVmdCkgfHwg
aXNOb25TdHJpbmdDZWxsQ29uc3RhbnQocmlnaHQpKSB7CiAgICAgICAgICAgICAgICAgbV9zdGF0
ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9y
Tm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTE3MzcsNyArMTczNyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIHNldE5vbkNl
bGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCkBAIC0xNzQ5LDEyICsxNzQ5LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBz
ZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBzZXROb25DZWxsVHlw
ZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToKQEAgLTE3NjIsMTcgKzE3NjIsMTcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBjYXNlIEludDMy
VXNlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNl
IGtpbmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgc2V0VHlwZUZvck5v
ZGUobm9kZSwgU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTdHJpbmdD
aGFyQXQ6Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fdm0uc3RyaW5nU3Ry
dWN0dXJlLmdldCgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3ZtLnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRC
eVZhbDoKQEAgLTE3ODYsNyArMTc4Niw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICBjYXNlIEF0b21pY3NTdWI6CiAgICAgY2FzZSBBdG9taWNzWG9yOiB7
CiAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IEdldEJ5VmFsKQotICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAg
IGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSkgewogICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAg
ICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgpAQCAtMTgwMiwxMiArMTgwMiwxMiBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgc2V0Q29u
c3RhbnQobm9kZSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY090aGVyKTsK
KyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoK
LSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAg
ICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2Rl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CkBAIC0xODIx
LDcxICsxODIxLDcxIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgICAgICAgICAvLyBpbXBsaWVzIGFuIGluLWJvdW5kcyBhY2Nlc3MpLiBOb25lIG9m
IHRoaXMgZmVlbHMgbGlrZSBpdCdzIHdvcnRoIGl0LAogICAgICAgICAgICAgICAgIC8vIHNvIHdl
J3JlIGdvaW5nIHdpdGggVE9QIGZvciBub3cuIFRoZSBzYW1lIHRoaW5nIGFwcGxpZXMgdG8KICAg
ICAgICAgICAgICAgICAvLyBjbG9iYmVyaW5nIHRoZSB3b3JsZC4KLSAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQoKTsKKyAgICAgICAgICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7
CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCht
X2dyYXBoLCBtX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgc2V0
Rm9yTm9kZShub2RlLCBtX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgogICAgICAgICBjYXNl
IEFycmF5OjpTY29wZWRBcmd1bWVudHM6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUp
Lm1ha2VIZWFwVG9wKCk7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAg
ICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNPdXRPZkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAg
ICAgICAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7Ci0gICAgICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0
KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICAgICAgbWFrZUhlYXBUb3BGb3JO
b2RlKG5vZGUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc1Nh
bmVDaGFpbigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQnl0
ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2Rl
LCBTcGVjQnl0ZWNvZGVEb3VibGUpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlUmVhbCk7CisgICAgICAgICAgICAgICAg
c2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3Jh
Z2U6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQot
ICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2Ji
ZXJMaW1pdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAg
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgICAgICBtYWtlSGVhcFRvcEZvck5v
ZGUobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgICAg
ICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIHNldE5vbkNl
bGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JO
b2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNw
ZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQzMkFycmF5OgogICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0ZUludDMyKCkp
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5
KTsKICAgICAgICAgICAgIGVsc2UgaWYgKGVuYWJsZUludDUyKCkgJiYgbm9kZS0+c2hvdWxkU3Bl
Y3VsYXRlQW55SW50KCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNBbnlJbnQpOworICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjQW55SW50KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0FueUludEFzRG91YmxlKTsKKyAgICAgICAgICAgICAgICBzZXROb25D
ZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0FueUludEFzRG91YmxlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY0Z1bGxEb3VibGUpOworICAgICAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNGdWxsRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0Z1bGxEb3VibGUpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNGdWxsRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTE5MDIsMjQgKzE5MDIsMjQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAg
IGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OkludDMyOgogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMo
KSkKLSAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBj
bG9iYmVyTGltaXQpOworICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0gICAgICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAg
ICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQotICAgICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTkyOCw4ICsxOTI4LDggQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgICAgIAogICAgIGNh
c2UgQXJyYXlQdXNoOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0J5dGVj
b2RlTnVtYmVyKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxU
eXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOwogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgQXJyYXlTbGljZTogewpAQCAtMTk0MiwxOCArMTk0MiwxOCBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIHN0cnVjdHVyZVNldC5hZGQo
bV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGUoQXJyYXlXaXRoQ29udGlndW91cykpKTsKICAgICAgICAgc3Ry
dWN0dXJlU2V0LmFkZChtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+b3Jp
Z2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShBcnJheVdpdGhEb3VibGUpKSk7CiAK
LSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgc3RydWN0dXJlU2V0KTsKKyAgICAg
ICAgc2V0Rm9yTm9kZShub2RlLCBzdHJ1Y3R1cmVTZXQpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIEFycmF5SW5kZXhPZjogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAg
Y2FzZSBBcnJheVBvcDoKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwor
ICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6
CkBAIC0xOTcyLDE0ICsxOTcyLDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgICAgIGlmIChhcmd1bWVudEluZGV4Q2hlY2tlZC5zYWZlR2V0KGFy
Z3VtZW50SW5kZXgpICE9IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHsKICAgICAgICAgICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudEluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAt
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBtX3N0YXRlLnZh
cmlhYmxlcygpLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1f
c3RhdGUub3BlcmFuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChhcmd1bWVudEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoYXJndW1lbnRJbmRleCA8IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMo
KSAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBtX3N0YXRl
LnZhcmlhYmxlcygpLmFyZ3VtZW50KGFyZ3VtZW50SW5kZXggKyAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50SW5kZXggPCBtX3N0YXRlLm51bWJlck9mQXJndW1lbnRzKCkgLSAx
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fc3RhdGUuYXJn
dW1lbnQoYXJndW1lbnRJbmRleCArIDEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTk5Myw3ICsxOTkzLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSByZXN1bHQ7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxICsgbm9kZS0+bnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAoKTsgaSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7ICsraSkgewogICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKLSAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAorICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlLm9wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjAwMywxMSArMjAwMywxMSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBpZiAocmVz
dWx0LnZhbHVlKCkpCiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0
cnVlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IHJlc3VsdDsK
KyAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9w
KCk7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAgICAgCkBAIC0yMDE2LDcgKzIwMTYsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFJlZ0V4
cEV4ZWMpIHsKICAgICAgICAgICAgIC8vIEV2ZW4gaWYgd2UndmUgcHJvdmVuIGtub3duIGlucHV0
IHR5cGVzIGFzIFJlZ0V4cE9iamVjdCBhbmQgU3RyaW5nLAogICAgICAgICAgICAgLy8gYWNjZXNz
aW5nIGxhc3RJbmRleCBpcyBlZmZlY3RmdWwgaWYgaXQncyBhIGdsb2JhbCByZWdleHAuCi0gICAg
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQp
OworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
SlNWYWx1ZSBnbG9iYWxPYmplY3RWYWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdmFs
dWUpIHsKQEAgLTIwMjYsMzEgKzIwMjYsMzEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlU2V0
IHN0cnVjdHVyZVNldDsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlU2V0LmFkZChtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3Ry
dWN0dXJlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlU2V0LmFkZChtX2dyYXBo
LnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5V2l0aEdy
b3Vwc1N0cnVjdHVyZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KG1fZ3JhcGgsIHN0cnVjdHVyZVNldCk7CisgICAgICAgICAgICAgICAgICAgIHNldEZvck5vZGUo
bm9kZSwgc3RydWN0dXJlU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5t
ZXJnZShTcGVjT3RoZXIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKG1fZ3JhcGgsIFNwZWNPdGhlciB8IFNwZWNBcnJheSk7CisgICAgICAgIHNldFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNPdGhlciB8IFNwZWNBcnJheSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBSZWdFeHBUZXN0OgogICAgICAgICAvLyBFdmVuIGlmIHdlJ3ZlIHByb3ZlbiBrbm93
biBpbnB1dCB0eXBlcyBhcyBSZWdFeHBPYmplY3QgYW5kIFN0cmluZywKICAgICAgICAgLy8gYWNj
ZXNzaW5nIGxhc3RJbmRleCBpcyBlZmZlY3RmdWwgaWYgaXQncyBhIGdsb2JhbCByZWdleHAuCi0g
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGNs
b2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jv
b2xlYW4pOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0OgogICAg
ICAgICBBU1NFUlQobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IFJlZ0V4cE9iamVjdFVzZSk7
CiAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDMoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPdGhlciB8IFNwZWNB
cnJheSk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlciB8IFNwZWNBcnJh
eSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CiAg
ICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPdGhlciB8IFNwZWNBcnJh
eSk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlciB8IFNwZWNBcnJheSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBTdHJpbmdSZXBsYWNlOgpA
QCAtMjA2MCw4ICsyMDYwLDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQzKCkudXNlS2luZCgpID09IFN0cmluZ1Vz
ZSkgewogICAgICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IGNsb2JiZXIgdGhlIHdvcmxkLiBJdCBq
dXN0IHJlYWRzIGFuZCB3cml0ZXMgcmVnZXhwIHN0YXRlLgogICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fdm0uc3RyaW5nU3RydWN0dXJl
LmdldCgpKTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXRGb3JOb2Rl
KG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIEp1bXA6CkBAIC0yMTA1LDcgKzIxMDUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbDoKICAgICBjYXNlIFRh
aWxDYWxsVmFyYXJnczoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAg
ICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0yMTIyLDEzICsyMTIyLDEzIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYgKCEoZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlICYgfihTcGVjRnVsbE51bWJlciB8IFNwZWNCb29sZWFuIHwg
U3BlY1N0cmluZyB8IFNwZWNTeW1ib2wgfCBTcGVjQmlnSW50KSkpIHsKICAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJl
cldvcmxkKCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAg
ICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShtX2dyYXBoLCBTcGVjSGVhcFRvcCAmIH5TcGVjT2JqZWN0KTsKKyAgICAgICAgc2V0VHlwZUZv
ck5vZGUobm9kZSwgU3BlY0hlYXBUb3AgJiB+U3BlY09iamVjdCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtMjE0NSwxMiArMjE0NSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGlmICghKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSAmIH5TcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZv
dW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwot
ICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShtX2dyYXBoLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBjbG9iYmVyV29ybGQo
KTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJl
cik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yMTcyLDEzICsyMTcyLDEz
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIENlbGxVc2U6CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZToK
LSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSku
c2V0KG1fZ3JhcGgsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgc2V0Rm9y
Tm9kZShub2RlLCBtX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtMjE4OSwyOSArMjE4OSwyOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBpZiAoMiA8PSByYWRpeCAmJiByYWRpeCA8PSAz
NikgewogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAg
ICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpOworICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV9ncmFwaC5tX3ZtLnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
Y2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFw
aC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOwor
ICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0
aFZhbGlkUmFkaXhDb25zdGFudDogewotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBo
LCBtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgc2V0Rm9yTm9k
ZShub2RlLCBtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDogewogICAgICAg
ICBBU1NFUlQobm9kZS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IFN0cmluZ09iamVjdDo6
aW5mbygpKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0
dXJlKCkpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG5vZGUtPnN0cnVjdHVyZSgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheToKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0gICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICBz
ZXRGb3JOb2RlKG5vZGUsIAogICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0y
MjIwLDEyICsyMjE5LDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgICAgIC8vIFdlJ3ZlIGNvbXBpbGVkIGFzc3VtaW5nIHdlJ3JlIG5vdCBoYXZp
bmcgYSBiYWQgdGltZSwgc28gdG8gYmUgY29uc2lzdGVudAogICAgICAgICAgICAgLy8gd2l0aCBT
dHJ1Y3R1cmVSZWdpc3RlcmF0aW9uUGhhc2Ugd2UgbXVzdCBzYXkgd2UgcHJvZHVjZSBhbiBvcmln
aW5hbCBhcnJheQogICAgICAgICAgICAgLy8gYWxsb2NhdGlvbiBzdHJ1Y3R1cmUuCi0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldCgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLAorICAgICAg
ICAgICAgc2V0Rm9yTm9kZShub2RlLCAKICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9y
SW5kZXhpbmdUeXBlKEFycmF5V2l0aENvbnRpZ3VvdXMpKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsCisg
ICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKSk7CiAgICAgICAg
IH0KIApAQCAtMjIzOCwyNCArMjIzNSwyMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIGlmICghbV9ncmFwaC5jYW5Eb0Zhc3RTcHJlYWQobm9kZSwgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkpKQotICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dCgKLSAgICAgICAgICAgIG1fZ3JhcGgsIG1fdm0uZml4ZWRBcnJheVN0cnVjdHVyZS5nZXQoKSk7
CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgCisgICAgICAgICAgICBtX3ZtLmZpeGVkQXJyYXlT
dHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBOZXdB
cnJheUJ1ZmZlcjoKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0gICAgICAgICAgICBtX2dy
YXBoLAorICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIAogICAgICAgICAgICAgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgotICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0FycmF5KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUo
bm9kZSwgU3BlY0FycmF5KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTmV3
VHlwZWRBcnJheToKQEAgLTIyNjMsMjAgKzIyNTksMTkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICBjbG9i
YmVyV29ybGQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KAotICAgICAgICAgICAgbV9ncmFw
aCwKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCAKICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25j
dXJyZW50bHkoCiAgICAgICAgICAgICAgICAgbm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdleHA6Ci0gICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2Rl
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5yZWdFeHBT
dHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBUb1Ro
aXM6IHsKQEAgLTIzMjIsMjAgKzIzMTcsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50
cygpLmFkZExhemlseShyYXJlRGF0YS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVl
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZEZvbGRDbG9iYmVyV29ybGQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHN0cnVjdHVyZSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAgY2xv
YmJlcldvcmxkKCk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNGaW5hbE9iamVj
dCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBOZXdPYmplY3Q6
CiAgICAgICAgIEFTU0VSVCghIW5vZGUtPnN0cnVjdHVyZSgpLmdldCgpKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOworICAgICAgICBzZXRG
b3JOb2RlKG5vZGUsIG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIFRvT2JqZWN0OgpAQCAtMjM1Miw4ICsyMzQ3LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAKICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gVG9PYmplY3QpCi0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFw
aCwgU3BlY09iamVjdCk7CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0
VHlwZUZvck5vZGUobm9kZSwgU3BlY09iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApA
QCAtMjM3OCw1NiArMjM3Myw1NiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3
T2JqZWN0OiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVj
dHVyZVNldCgpKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBub2RlLT5zdHJ1Y3R1cmVTZXQo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgUHVzaFdpdGhTY29wZToKICAg
ICAgICAgLy8gV2UgZG9uJ3QgdXNlIHRoZSBtb3JlIHByZWNpc2Ugd2l0aFNjb3BlU3RydWN0dXJl
KCkgaGVyZSBiZWNhdXNlIGl0IGlzIGEgTGF6eVByb3BlcnR5IGFuZCBtYXkgbm90IHlldCBiZSBh
bGxvY2F0ZWQuCi0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjT2Jq
ZWN0T3RoZXIpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0T3RoZXIp
OwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNl
IE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
Ci0gICAgICAgICAgICBtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEZv
ck5vZGUobm9kZSwgCisgICAgICAgICAgICBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAg
ICAgIHNldEZvck5vZGUobm9kZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0ZVNjb3BlZEFyZ3VtZW50czoKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zY29wZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAg
ICAgIHNldEZvck5vZGUobm9kZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLT5zY29wZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKICAgICAgICAg
aWYgKCFtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpIHsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjT2JqZWN0KTsK
KyAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPYmplY3QpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5jbG9u
ZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5jbG9uZWRBcmd1
bWVudHNTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBOZXdHZW5lcmF0
b3JGdW5jdGlvbjoKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0gICAgICAgICAgICBtX2dy
YXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykt
PmdlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlKCkpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUs
IAorICAgICAgICAgICAgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLT5nZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIE5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb246Ci0gICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KAotICAgICAgICAgICAgbV9ncmFwaCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hc3luY0dlbmVyYXRvckZ1bmN0aW9uU3RydWN0
dXJlKCkpOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIAorICAgICAgICAgICAgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hc3luY0dlbmVyYXRv
ckZ1bmN0aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTmV3QXN5
bmNGdW5jdGlvbjoKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0gICAgICAgICAgICBtX2dy
YXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykt
PmFzeW5jRnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgCisg
ICAgICAgICAgICBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyktPmFzeW5jRnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBOZXdGdW5jdGlvbjogewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTRnVuY3Rpb246OnNlbGVjdFN0cnVjdHVy
ZUZvck5ld0Z1bmNFeHAoZ2xvYmFsT2JqZWN0LCBub2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlvbkV4
ZWN1dGFibGUqPigpKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgc3RydWN0
dXJlKTsKKyAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBzdHJ1Y3R1cmUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIApAQCAtMjQ0MSwxMSArMjQzNiwxMSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3Jh
cGgsIFNwZWNGdW5jdGlvbik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNGdW5j
dGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOgotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMy
T25seSk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgU2V0Q2FsbGVlOgpAQCAtMjQ1Myw3ICsyNDQ4LDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsK
ICAgICAgICAgCiAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgotICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShu
b2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2Ug
R2V0R2V0dGVyOiB7CkBAIC0yNDY2LDcgKzI0NjEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjT2JqZWN0KTsKKyAgICAg
ICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY09iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCkBAIC0yNDgwLDcgKzI0NzUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjT2JqZWN0KTsKKyAgICAg
ICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY09iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCkBAIC0yNDkxLDcgKzI0ODYsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNP
YmplY3RPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPYmplY3RPdGhl
cik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTa2lwU2NvcGU6IHsKQEAgLTI1MDAsNyAr
MjQ5NSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShKU1ZhbHVlKGpzQ2FzdDxK
U1Njb3BlKj4oY2hpbGQuYXNDZWxsKCkpLT5uZXh0KCkpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY09i
amVjdE90aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY09iamVjdE90aGVy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNTI3LDEyICsyNTIyLDEyIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjT2JqZWN0
T3RoZXIpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0T3RoZXIpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldEdsb2JhbFRoaXM6IHsKLSAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPYmplY3QpOworICAgICAgICBz
ZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkBAIC0yNTQxLDE0ICsyNTM2LDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh2
YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShu
b2RlKS5tYWtlQnl0ZWNvZGVUb3AoKTsKKyAgICAgICAgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dENsb3N1cmVW
YXI6CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6
Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgbWFrZUhlYXBU
b3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2V0UmVnRXhwT2Jq
ZWN0TGFzdEluZGV4OgpAQCAtMjU1NiwyMCArMjU1MSwyMCBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNl
IEdldEZyb21Bcmd1bWVudHM6Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsK
KyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgY2FzZSBQdXRUb0FyZ3VtZW50czoKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IEdldEFyZ3VtZW50OgotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAg
ICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IFRyeUdldEJ5SWQ6CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjb25zdGFudCBmb2xk
IGF0IGxlYXN0IGFzIHdlbGwgYXMgdGhlIG5vcm1hbCBHZXRCeUlkIGNhc2UuCiAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0MjIKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRCeUlkRGlyZWN0OgpAQCAtMjYw
MSwxNSArMjU5NiwxNSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VIZWFwVG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBtYWtlSGVhcFRv
cEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0QnlW
YWxXaXRoVGhpczoKICAgICBjYXNlIEdldEJ5SWRXaXRoVGhpczoKLSAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZm9yTm9k
ZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAg
bWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6IHsKQEAgLTI2MTksMTIgKzI2MTQsMTIgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwganNOdW1iZXIodmlldy0+bGVuZ3RoKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEdldFZlY3Rvckxlbmd0aDogewotICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAgIHNldE5vbkNl
bGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCkBAIC0yNjMyLDggKzI2MjcsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgY2FzZSBEZWxldGVCeVZhbDogewogICAgICAgICAvLyBGSVhNRTogVGhp
cyBjb3VsZCBkZWNpZGUgaWYgdGhlIGRlbGV0ZSB3aWxsIGJlIHN1Y2Nlc3NmdWwgYmFzZWQgb24g
dGhlIHNldCBvZiBzdHJ1Y3R1cmVzIHRoYXQKICAgICAgICAgLy8gd2UgZ2V0IGZyb20gb3VyIGJh
c2UgdmFsdWUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY2MTEK
LSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0
KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAg
Y2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVj
Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yNzQzLDcgKzI3
MzgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IC8vIG5vYm9keSB3b3VsZCBjdXJyZW50bHkgYmVuZWZpdCBmcm9tIGhhdmluZyB0aGF0IGluZm9y
bWF0aW9uLiBCdXQgaXQncyBhIGJ1ZyBub25ldGhlbGVzcy4KICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSkKICAgICAgICAgICAgIGRpZEZvbGRD
bG9iYmVyU3RydWN0dXJlcygpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRo
ZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIGNsZWFyRm9yTm9kZShub2RlKTsg
Ly8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDaGVja1N1YkNsYXNzOiB7CiAgICAgICAgIEpTVmFsdWUgY29uc3RhbnQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwpAQCAtMjc2NywxOCArMjc2MiwxOCBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIENhbGxET01HZXR0ZXJEYXRh
KiBjYWxsRE9NR2V0dGVyRGF0YSA9IG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCk7CiAgICAgICAg
IERPTUpJVDo6Q2FsbERPTUdldHRlclNuaXBwZXQqIHNuaXBwZXQgPSBjYWxsRE9NR2V0dGVyRGF0
YS0+c25pcHBldDsKICAgICAgICAgaWYgKCFzbmlwcGV0IHx8IHNuaXBwZXQtPmVmZmVjdC53cml0
ZXMpCi0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGlmIChjYWxs
RE9NR2V0dGVyRGF0YS0+ZG9tSklUKQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KG1fZ3JhcGgsIGNhbGxET01HZXR0ZXJEYXRhLT5kb21KSVQtPnJlc3VsdFR5cGUoKSk7CisgICAg
ICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBjYWxsRE9NR2V0dGVyRGF0YS0+ZG9tSklULT5y
ZXN1bHRUeXBlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VCeXRlY29kZVRvcCgpOworICAgICAgICAgICAgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ2FsbERPTTogewogICAgICAgICBj
b25zdCBET01KSVQ6OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gbm9kZS0+c2lnbmF0dXJlKCk7CiAg
ICAgICAgIGlmIChzaWduYXR1cmUtPmVmZmVjdC53cml0ZXMpCi0gICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgc2lnbmF0dXJlLT5yZXN1bHQpOworICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIHNpZ25hdHVy
ZS0+cmVzdWx0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ2hlY2tBcnJheTog
ewpAQCAtMjg0Nyw3ICsyODQyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKG5v
ZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6Q29udmVydCk7Ci0gICAgICAg
IGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1
cmVzKCk7CiAgICAgICAgIGZpbHRlckFycmF5TW9kZXMobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmFy
cmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMjg1NSw3ICsyODUwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihS
ZWdpc3RlcmVkU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSkpCiAgICAgICAgICAgICBt
X3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICBjbG9iYmVyU3RydWN0dXJl
cyhjbG9iYmVyTGltaXQpOworICAgICAgICBjbG9iYmVyU3RydWN0dXJlcygpOwogICAgICAgICAK
ICAgICAgICAgLy8gV2UgaGF2ZSBhIGJ1bmNoIG9mIG9wdGlvbnMgb2YgaG93IHRvIGV4cHJlc3Mg
dGhlIGFic3RyYWN0IHNldCBhdCB0aGlzIHBvaW50LiBMZXQgc2V0IFMKICAgICAgICAgLy8gYmUg
dGhlIHNldCBvZiBzdHJ1Y3R1cmVzIHRoYXQgdGhlIHZhbHVlIGhhZCBiZWZvcmUgY2xvYmJlcmlu
ZyBhbmQgYXNzdW1lIHRoYXQgYWxsIG9mCkBAIC0yODg0LDcgKzI4NzksNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCdz
IHRlbXB0aW5nIHRvIHNpbXBseSBzYXkgdGhhdCB0aGUgcmVzdWx0aW5nIHZhbHVlIGlzIEJPVFRP
TSBiZWNhdXNlIG9mCiAgICAgICAgIC8vIHRoZSBjb250cmFkaWN0aW9uLiBUaGF0IHdvdWxkIGJl
IHdyb25nLCBzaW5jZSB3ZSBoYXZlbid0IGhpdCBhbiBpbnZhbGlkYXRpb24gcG9pbnQsCiAgICAg
ICAgIC8vIHlldC4KLSAgICAgICAgdmFsdWUuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVyZSgp
KTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0
cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZTogewpAQCAtMjg5MiwxMSArMjg4NywxMSBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3ZhbHVlLCBub2RlLT5hcnJheU1vZGUoKSk7CiAgICAgICAgIGlmICh2aWV3KQogICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOworICAgICAgICBjbGVhckZvck5vZGUobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6IHsKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5jbGVhcigpOworICAgICAgICBjbGVhckZvck5vZGUobm9kZSk7CiAgICAg
ICAgIGJyZWFrOyAKICAgICB9CiAgICAgICAgIApAQCAtMjkwNiw3ICsyOTAxLDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwganNOdW1iZXIodmlldy0+Ynl0ZU9mZnNldCgpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25s
eSk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yOTU0LDEwICsyOTQ5LDEwIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgY2FzZSBGaW5hbE9iamVj
dFVzZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPYmplY3QgfCBTcGVjT3Ro
ZXIpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0IHwgU3BlY090aGVy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTI5ODMsNyArMjk3OCw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYgKHZh
bHVlLmlzQ2xlYXIoKSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAK
LSAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBzZXRGb3JOb2RlKG5vZGUs
IHZhbHVlKTsKICAgICAgICAgaWYgKHZhbHVlLm1fdmFsdWUpCiAgICAgICAgICAgICBtX3N0YXRl
LnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICBicmVhazsKQEAgLTI5OTcsNyArMjk5
Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
LT5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+Z2V0dGVyU2V0dGVy
U3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMzA1NCw3
ICszMDQ5LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1fZ3JhcGgs
IGJhc2VTZXQpID09IENvbnRyYWRpY3Rpb24pCiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFs
aWQoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKSA9IHJlc3VsdDsKKyAg
ICAgICAgc2V0Rm9yTm9kZShub2RlLCByZXN1bHQpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTMxMDQsNyArMzA5OSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb25zKGNsb2JiZXJMaW1p
dCwgdHJhbnNpdGlvbnMpOwogICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hh
bmdlU3RydWN0dXJlKG1fZ3JhcGgsIG5ld1NldCkgPT0gQ29udHJhZGljdGlvbikKICAgICAgICAg
ICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpID0gcmVzdWx0aW5nVmFsdWU7CisgICAgICAgIHNldEZvck5vZGUobm9kZS0+Y2hpbGQy
KCksIHJlc3VsdGluZ1ZhbHVlKTsKICAgICAgICAgaWYgKCEhb3JpZ2luYWxWYWx1ZSAmJiAhcmVz
dWx0aW5nVmFsdWUpCiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKQEAgLTMxMTksNyArMzExNCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0Nl
bGxPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNDZWxsT3RoZXIpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgCkBAIC0zMjE1LDEzICszMjEwLDEzIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIGNhc2UgUHV0QnlWYWxXaXRoVGhpczoKICAgICBjYXNlIFB1dEJ5SWRX
aXRoVGhpczoKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xv
YmJlckxpbWl0KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBQdXRHZXR0ZXJCeUlkOgpAQCAtMzIyOSw0MSArMzIyNCw0MSBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQdXRHZXR0ZXJTZXR0ZXJC
eUlkOgogICAgIGNhc2UgUHV0R2V0dGVyQnlWYWw6CiAgICAgY2FzZSBQdXRTZXR0ZXJCeVZhbDog
ewotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGlt
aXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgY2FzZSBEZWZpbmVEYXRhUHJvcGVydHk6CiAgICAgY2FzZSBEZWZpbmVBY2Nlc3NvclByb3Bl
cnR5OgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVy
TGltaXQpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAogICAgIGNhc2UgSW46IHsKICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZXRlcm1pbmUgd2hl
biB0aGUgcHJvcGVydHkgZGVmaW5pdGVseSBleGlzdHMgYmFzZWQgb24gYWJzdHJhY3QKICAgICAg
ICAgLy8gdmFsdWUgaW5mb3JtYXRpb24uCi0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmln
aW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShTcGVjQm9vbGVhbik7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25D
ZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIEhhc093blByb3BlcnR5OiB7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBz
ZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBzZXRO
b25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogewotICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5v
ZGUobm9kZSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKLSAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewpA
QCAtMzI3Niw2MSArMzI3MSw2MSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OiB7
Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVy
TGltaXQpOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
Qm9vbGVhbik7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVh
bik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7Ci0g
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7
Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgY2xvYmJlcldv
cmxkKCk7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQ2VsbCk7Ci0gICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIHNldFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNDZWxsKTsKKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZTogewot
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyB8IFNwZWNP
dGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3Ro
ZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJp
Y1BuYW1lOiB7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3Ry
aW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmlu
ZyB8IFNwZWNPdGhlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRvSW5kZXhT
dHJpbmc6IHsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNTdHJp
bmcpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0R2xvYmFsTGV4aWNhbFZhcmlhYmxlOgotICAg
ICAgICBmb3JOb2RlKG5vZGUpLm1ha2VCeXRlY29kZVRvcCgpOworICAgICAgICBtYWtlQnl0ZWNv
ZGVUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0RHluYW1p
Y1ZhcjoKLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJl
ckxpbWl0KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlQnl0ZWNvZGVUb3AoKTsKKyAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIG1ha2VCeXRlY29kZVRvcEZvck5vZGUobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBQdXREeW5hbWljVmFyOgotICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOworICAgICAgICBj
bG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJlc29sdmVTY29wZToK
LSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0
KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNPYmplY3QpOwor
ICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3Bl
Y09iamVjdCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSZXNvbHZlU2NvcGVGb3JIb2lz
dGluZ0Z1bmNEZWNsSW5FdmFsOgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VCeXRlY29k
ZVRvcCgpOworICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgbWFrZUJ5dGVjb2RlVG9w
Rm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFB1dEdsb2JhbFZhcmlh
YmxlOgpAQCAtMzMzOCwyMiArMzMzMywyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBPdmVycmlkZXNIYXNJbnN0
YW5jZToKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIC8vIFNhZGx5
LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YK
LSAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAK
ICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0b206Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXRO
b25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBo
Lm1fZm9ybSA9PSBTU0EpOwotICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShOb2RlRmxv
d1Byb2plY3Rpb24obm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpKTsKKyAgICAgICAg
c2V0Rm9yTm9kZShub2RlLCBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbihub2RlLCBOb2RlRmxv
d1Byb2plY3Rpb246OlNoYWRvdykpKTsKICAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9k
ZSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLCBidXQgaXQgbWF5IGhhdmUgYmVjb21l
IGEKICAgICAgICAgLy8gY29uc3RhbnQsIGluIHdoaWNoIGNhc2Ugd2UnZCBsaWtlIHRvIGtub3cu
CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUpLm1fdmFsdWUpCkBAIC0zMzY0LDcgKzMzNTksNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIE5vZGVG
bG93UHJvamVjdGlvbiBzaGFkb3cobm9kZS0+cGhpKCksIE5vZGVGbG93UHJvamVjdGlvbjo6U2hh
ZG93KTsKICAgICAgICAgaWYgKHNoYWRvdy5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAg
bV9zdGF0ZS5jcmVhdGVWYWx1ZUZvck5vZGUoc2hhZG93KTsKLSAgICAgICAgICAgIGZvck5vZGUo
c2hhZG93KSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc2V0Rm9yTm9k
ZShzaGFkb3csIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0zMzg2LDggKzMzODEsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBEaXJlY3RDYWxsOgogICAgIGNhc2UgRGlyZWN0
Q29uc3RydWN0OgogICAgIGNhc2UgRGlyZWN0VGFpbENhbGxJbmxpbmVkQ2FsbGVyOgotICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAg
ICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGNsb2JiZXJXb3JsZCgp
OworICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgY2FzZSBGb3JjZU9TUkV4aXQ6CkBAIC0zMzk2LDE1ICszMzkxLDE1IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6Ci0gICAgICAgIGZvckFsbFZhbHVlcyhjbG9iYmVy
TGltaXQsIEFic3RyYWN0VmFsdWU6Om9ic2VydmVJbnZhbGlkYXRpb25Qb2ludEZvcik7CiAgICAg
ICAgIG1fc3RhdGUuc2V0U3RydWN0dXJlQ2xvYmJlclN0YXRlKFN0cnVjdHVyZXNBcmVXYXRjaGVk
KTsKKyAgICAgICAgbV9zdGF0ZS5vYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIENQVUludHJpbnNpYzogCiAgICAgICAgIGlmIChub2RlLT5pbnRy
aW5zaWMoKSA9PSBDUFVSZHRzY0ludHJpbnNpYykKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9k
ZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXRUeXBlKFNwZWNPdGhlcik7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY090aGVyKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENoZWNr
VHJhcHM6CkBAIC0zNDM3LDI2ICszNDMyLDI1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRz
KHRydWUpOwogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSkKICAgICAgICAgICAgICAgICAgICAgZGlkRm9sZENsb2JiZXJXb3JsZCgpOwot
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAg
ICAgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpCi0gICAgICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwot
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0J5dGVjb2RlTnVtYmVy
KTsKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgY2FzZSBDcmVhdGVSZXN0OgogICAgICAgICBpZiAoIW1fZ3JhcGguaXNXYXRjaGluZ0hh
dmluZ0FCYWRUaW1lV2F0Y2hwb2ludChub2RlKSkgewogICAgICAgICAgICAgLy8gVGhpcyBtZWFu
cyB3ZSdyZSBhbHJlYWR5IGhhdmluZyBhIGJhZCB0aW1lLgotICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjQXJyYXkpOworICAgICAgICAgICAgY2xv
YmJlcldvcmxkKCk7CisgICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQXJyYXkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoCi0gICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICBzZXRGb3JOb2RlKG5vZGUsCiAgICAg
ICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5y
ZXN0UGFyYW1ldGVyU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIApA
QCAtMzQ3Myw3ICszNDY3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgIH0KIAogICAgIGNhc2UgU2V0RnVuY3Rpb25OYW1lOiB7Ci0gICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIGNs
b2JiZXJXb3JsZCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM1MzMsMTAgKzM1Mjcs
OSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotdm9pZCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xvYmJlcldvcmxkKAotICAgIGNvbnN0IENvZGVPcmlnaW4m
LCB1bnNpZ25lZCBjbG9iYmVyTGltaXQpCit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjpjbG9iYmVyV29ybGQoKQogewotICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNs
b2JiZXJMaW1pdCk7CisgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0zNTY4LDE2ICszNTYxLDE2IEBAIHZvaWQgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBmdW5jdG9y
KGZvck5vZGUobm9kZSkpOwogICAgICAgICB9CiAgICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSBt
X3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspCi0gICAgICAgIGZ1
bmN0b3IobV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChpKSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZMb2NhbHMoKTsgaS0tOykKLSAgICAgICAg
ZnVuY3RvcihtX3N0YXRlLnZhcmlhYmxlcygpLmxvY2FsKGkpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gbV9zdGF0ZS5udW1iZXJPZkFyZ3VtZW50cygpOyBpLS07KQorICAgICAgICBmdW5jdG9yKG1f
c3RhdGUuYXJndW1lbnQoaSkpOworICAgIGZvciAoc2l6ZV90IGkgPSBtX3N0YXRlLm51bWJlck9m
TG9jYWxzKCk7IGktLTspCisgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS5sb2NhbChpKSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotdm9pZCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgY2xv
YmJlckxpbWl0KQordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
Y2xvYmJlclN0cnVjdHVyZXMoKQogewotICAgIGZvckFsbFZhbHVlcyhjbG9iYmVyTGltaXQsIEFi
c3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1cmVzRm9yKTsKKyAgICBtX3N0YXRlLmNsb2JiZXJT
dHJ1Y3R1cmVzKCk7CiAgICAgbV9zdGF0ZS5tZXJnZUNsb2JiZXJTdGF0ZShBYnN0cmFjdEludGVy
cHJldGVyQ2xvYmJlclN0YXRlOjpDbG9iYmVyZWRTdHJ1Y3R1cmVzKTsKICAgICBtX3N0YXRlLnNl
dFN0cnVjdHVyZUNsb2JiZXJTdGF0ZShTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKTsKIH0KQEAgLTM3
MTIsNyArMzcwNSw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnMK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRG91YmxlVW5hcnlPcEVmZmVj
dHMoTm9kZSogbm9kZSwgdW5zaWduZWQgY2xvYmJlckxpbWl0LCBkb3VibGUoKmVxdWl2YWxlbnRG
dW5jdGlvbikoZG91YmxlKSkKK3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhOb2RlKiBub2RlLCBkb3VibGUoKmVx
dWl2YWxlbnRGdW5jdGlvbikoZG91YmxlKSkKIHsKICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICBpZiAoc3RkOjpvcHRpb25hbDxkb3VibGU+
IG51bWJlciA9IGNoaWxkLnRvTnVtYmVyRnJvbVByaW1pdGl2ZSgpKSB7CkBAIC0zNzI1LDggKzM3
MTgsOCBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBEb3VibGVSZXBVc2UpCiAgICAgICAgIHR5cGUg
PSB0eXBlT2ZEb3VibGVVbmFyeU9wKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSk7CiAg
ICAgZWxzZQotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9i
YmVyTGltaXQpOwotICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSh0eXBlKTsKKyAgICAgICAgY2xv
YmJlcldvcmxkKCk7CisgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIHR5cGUpOwogfQog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDIzMTM5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMzMsMTYgKzEzMywxNiBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3Jh
cGgsIGNvCiAgICAgICAgIGNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEluZmVy
cmVkVHlwZTo6Qm9vbGVhbjoKLSAgICAgICAgc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAg
IHNldE5vbkNlbGxUeXBlKFNwZWNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpPdGhlcjoKLSAgICAgICAgc2V0VHlwZShTcGVjT3RoZXIpOworICAgICAg
ICBzZXROb25DZWxsVHlwZShTcGVjT3RoZXIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OkludDMyOgotICAgICAgICBzZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAg
ICAgICBzZXROb25DZWxsVHlwZShTcGVjSW50MzJPbmx5KTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHNldFR5cGUoU3BlY0J5dGVjb2Rl
TnVtYmVyKTsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGUoU3BlY0J5dGVjb2RlTnVtYmVyKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CiAgICAgICAgIHNl
dChncmFwaCwgZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwpAQCAtNTU2LDYgKzU1
Niw3IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFMKICAgICB9CiAg
ICAgaWYgKCEhbV92YWx1ZSkKICAgICAgICAgb3V0LnByaW50KCIsICIsIGluQ29udGV4dChtX3Zh
bHVlLCBjb250ZXh0KSk7CisgICAgb3V0LnByaW50KCIsICIsIG1fZWZmZWN0RXBvY2gpOwogICAg
IG91dC5wcmludCgiKSIpOwogfQogCkBAIC01NzQsNiArNTc1LDIwIEBAIHZvaWQgQWJzdHJhY3RW
YWx1ZTo6ZW5zdXJlQ2FuSW5pdGlhbGl6ZVcKIH0KICNlbmRpZgogCit2b2lkIEFic3RyYWN0VmFs
dWU6OmZhc3RGb3J3YXJkVG9TbG93KEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2ggbmV3RXBvY2gp
Cit7CisgICAgQVNTRVJUKG5ld0Vwb2NoICE9IG1fZWZmZWN0RXBvY2gpOworICAgIAorICAgIGlm
IChuZXdFcG9jaC5jbG9iYmVyRXBvY2goKSAhPSBtX2VmZmVjdEVwb2NoLmNsb2JiZXJFcG9jaCgp
KQorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcygpOworICAgIGlmIChuZXdFcG9jaC5zdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUoKSA9PSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKKyAgICAgICAgbV9zdHJ1
Y3R1cmUub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7CisgICAgCisgICAgbV9lZmZlY3RFcG9j
aCA9IG5ld0Vwb2NoOworICAgIAorICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKK30KKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24g
MjMxMzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
ICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlQ2xv
YmJlckVwb2NoLmgiCiAjaW5jbHVkZSAiREZHRmlsdHJhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUg
IkRGR0Zyb3plblZhbHVlLmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCkBAIC0xMDMsMjAg
KzEwNCwxNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgY2xvYmJlclN0cnVjdHVyZXNGb3Io
QWJzdHJhY3RWYWx1ZSYgdmFsdWUpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RGb3J3YXJk
VG8oQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBuZXdFcG9jaCkKICAgICB7Ci0gICAgICAgIHZh
bHVlLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgb2JzZXJ2ZUlu
dmFsaWRhdGlvblBvaW50KCkKLSAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlLm9ic2VydmVJbnZh
bGlkYXRpb25Qb2ludCgpOwotICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgfQotICAg
IAotICAgIHN0YXRpYyB2b2lkIG9ic2VydmVJbnZhbGlkYXRpb25Qb2ludEZvcihBYnN0cmFjdFZh
bHVlJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHZhbHVlLm9ic2VydmVJbnZhbGlkYXRpb25Qb2lu
dCgpOworICAgICAgICBpZiAobmV3RXBvY2ggPT0gbV9lZmZlY3RFcG9jaCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICghKG1fdHlwZSAmIFNwZWNDZWxsKSkgewor
ICAgICAgICAgICAgbV9lZmZlY3RFcG9jaCA9IG5ld0Vwb2NoOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgZmFzdEZvcndhcmRUb1Nsb3cobmV3RXBvY2gpOwogICAg
IH0KICAgICAKICAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9uKFJlZ2lzdGVyZWRTdHJ1Y3R1cmUg
ZnJvbSwgUmVnaXN0ZXJlZFN0cnVjdHVyZSB0bykKQEAgLTIwNiw2ICsyMDQsMTYgQEAgc3RydWN0
IEFic3RyYWN0VmFsdWUgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAg
ICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHsKKyAg
ICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoR3JhcGgmLCBB
YnN0cmFjdFZhbHVlJiYgb3RoZXIpCisgICAgeworICAgICAgICAqdGhpcyA9IFdURk1vdmUob3Ro
ZXIpOworICAgIH0KKyAgICAKICAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEZyb3plblZhbHVl
JiwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKICAgICB2b2lkIHNldChHcmFwaCYsIFN0cnVjdHVy
ZSopOwogICAgIHZvaWQgc2V0KEdyYXBoJiwgUmVnaXN0ZXJlZFN0cnVjdHVyZSk7CkBAIC0yMTUs
NyArMjIzLDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHZvaWQgc2V0VHlwZShHcmFw
aCYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICAKICAgICAvLyBBcyBhYm92ZSwgYnV0IG9ubHkgdmFs
aWQgZm9yIG5vbi1jZWxsIHR5cGVzLgotICAgIHZvaWQgc2V0VHlwZShTcGVjdWxhdGVkVHlwZSB0
eXBlKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXROb25DZWxsVHlwZShTcGVjdWxhdGVkVHlw
ZSB0eXBlKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISh0eXBlICYgU3BlY0NlbGwp
KTsKICAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKQEAgLTM5Nyw2ICs0MDUsMTAgQEAgc3Ry
dWN0IEFic3RyYWN0VmFsdWUgewogICAgIC8vIGVmZmVjdCB0aGF0IG1ha2VzIG5vbi1vYnZpb3Vz
IGNoYW5nZXMgdG8gdGhlIGhlYXAuCiAgICAgQXJyYXlNb2RlcyBtX2FycmF5TW9kZXM7CiAgICAg
CisgICAgLy8gVGhlIGVwb2NoLgorICAgIC8vIEZJWE1FOiBFeHBsYWluIHRoaXMuIChPT1BTISEp
CisgICAgQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBtX2VmZmVjdEVwb2NoOworICAgIAogICAg
IC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgcG9zc2libGUgdmFsdWVzIHRo
YXQgdGhpcyB2YWx1ZSBjYW4KICAgICAvLyBoYXZlIG5vdyBvciBhbnkgdGltZSBpbiB0aGUgZnV0
dXJlLCB1bmxlc3MgaXQgaXMgcmVhc3NpZ25lZC4gTm90ZSB0aGF0IHRoaXMKICAgICAvLyBpbXBs
aWVzIG5vdGhpbmcgYWJvdXQgdGhlIHN0cnVjdHVyZS4gT2RkbHksIEpTVmFsdWUoKSAoaS5lLiB0
aGUgZW1wdHkgdmFsdWUpCkBAIC00NTUsNiArNDY3LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGZhc3RGb3J3YXJkVG9TbG93
KEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2gpOworICAgIAogICAgIHZvaWQgZmlsdGVyVmFsdWVC
eVR5cGUoKTsKICAgICB2b2lkIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWVD
bG9iYmVyRXBvY2guY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZUNsb2JiZXJF
cG9jaC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKwordm9pZCBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGNsb2JiZXJFcG9jaCgpLCAiOiIsIHN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlQ2xv
YmJlckVwb2NoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRXBvY2guaCIKKyNpbmNsdWRlICJERkdTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBBYnN0cmFjdFZhbHVlQ2xvYmJl
ckVwb2NoIHsKK3B1YmxpYzoKKyAgICBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoKCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBBYnN0cmFjdFZhbHVlQ2xvYmJlckVwb2NoIGZpcnN0
KFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCisgICAgeworICAgICAgICBBYnN0
cmFjdFZhbHVlQ2xvYmJlckVwb2NoIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBF
cG9jaDo6Zmlyc3QoKS50b1Vuc2lnbmVkKCkgPDwgZXBvY2hTaGlmdDsKKyAgICAgICAgc3dpdGNo
IChjbG9iYmVyU3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDoKKyAg
ICAgICAgICAgIHJlc3VsdC5tX3ZhbHVlIHw9IHdhdGNoZWRGbGFnOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU3RydWN0dXJlc0FyZUNsb2JiZXJlZDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHZvaWQgY2xvYmJlcigpCisgICAgeworICAgICAgICBtX3ZhbHVlICs9IHN0ZXA7CisgICAgICAg
IG1fdmFsdWUgJj0gfndhdGNoZWRGbGFnOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVJ
bnZhbGlkYXRpb25Qb2ludCgpCisgICAgeworICAgICAgICBtX3ZhbHVlIHw9IHdhdGNoZWRGbGFn
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQWJzdHJhY3RWYWx1ZUNs
b2JiZXJFcG9jaCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9
PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
QWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZSBzdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdmFsdWUgJiB3YXRjaGVkRmxhZyA/IFN0cnVjdHVyZXNBcmVXYXRjaGVkIDogU3RydWN0
dXJlc0FyZUNsb2JiZXJlZDsKKyAgICB9CisgICAgCisgICAgRXBvY2ggY2xvYmJlckVwb2NoKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBFcG9jaDo6ZnJvbVVuc2lnbmVkKG1fdmFsdWUg
Pj4gZXBvY2hTaGlmdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHN0
ZXAgPSAyOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgd2F0Y2hlZEZsYWcgPSAxOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZXBvY2hTaGlmdCA9IDE7CisgICAgCisgICAg
dW5zaWduZWQgbV92YWx1ZSB7IDAgfTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIzMTM5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw4OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVW
YWx1ZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKTsKICAgICBBYnN0cmFjdFZhbHVlJiBmb3JO
b2RlKE5vZGVGbG93UHJvamVjdGlvbik7CiAgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdl
IGVkZ2UpIHsgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2RlKCkpOyB9Ci0gICAgT3BlcmFuZHM8QWJz
dHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbDsg
fQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoTm9kZUZsb3dQcm9q
ZWN0aW9uIG5vZGUpCisgICAgeworICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7CisgICAg
fQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoRWRnZSBlZGdlKQor
ICAgIHsKKyAgICAgICAgY2xlYXJGb3JOb2RlKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXRGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1
bWVudHMpCisgICAgeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBzdGQ6OmZv
cndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZvck5vZGUo
RWRnZSBlZGdlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBzZXRG
b3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4u
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRUeXBlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9k
ZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKG1fZ3JhcGgsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4p
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0VHlwZUZvck5vZGUoRWRnZSBlZGdlLCBBcmd1bWVudHMmJi4uLiBh
cmd1bWVudHMpCisgICAgeworICAgICAgICBzZXRUeXBlRm9yTm9kZShlZGdlLm5vZGUoKSwgc3Rk
Ojpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlLCBBcmd1bWVudHMmJi4u
LiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldE5vbkNlbGxUeXBl
KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKEVkZ2UgZWRnZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQor
ICAgIHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZv
cndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlT
X0lOTElORSB2b2lkIG1ha2VCeXRlY29kZVRvcEZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5v
ZGUpCisgICAgeworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VCeXRlY29kZVRvcCgpOworICAg
IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFrZUJ5dGVjb2RlVG9wRm9yTm9kZShF
ZGdlIGVkZ2UpCisgICAgeworICAgICAgICBtYWtlQnl0ZWNvZGVUb3BGb3JOb2RlKGVkZ2Uubm9k
ZSgpKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIG1ha2VIZWFwVG9wRm9y
Tm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKKyAgICB7CisgICAgICAgIGZvck5vZGUobm9k
ZSkubWFrZUhlYXBUb3AoKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIG1h
a2VIZWFwVG9wRm9yTm9kZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBtYWtlSGVhcFRvcEZv
ck5vZGUoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkFy
Z3VtZW50cygpOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVy
biBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgfQorICAgIEFic3RyYWN0
VmFsdWUmIG9wZXJhbmQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFp
bC5vcGVyYW5kKG9wZXJhbmQpOyB9CisgICAgQWJzdHJhY3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBsb2NhbChzaXplX3QgaW5kZXgpIHsgcmV0
dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChpbmRleCk7IH0KKyAgICBBYnN0cmFjdFZh
bHVlJiBhcmd1bWVudChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFp
bC5hcmd1bWVudChpbmRleCk7IH0KKyAgICAKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkK
KyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIG9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpCisgICAgeworICAgICAgICBVTlJF
QUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICB9CiAgICAgCiAgICAgQmFzaWNCbG9jayogYmxv
Y2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMjMxMzk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
MSw3ICsxNzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmICghc2FmZVRvRXhlY3V0
ZShtX3N0YXRlLCBtX2dyYXBoLCBub2RlKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
KFVOU0FGRSkgIik7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGF0YUxvZyht
X3N0YXRlLnZhcmlhYmxlcygpLCAiICIsIG1faW50ZXJwcmV0ZXIpOworICAgICAgICAgICAgICAg
IGRhdGFMb2cobV9zdGF0ZS52YXJpYWJsZXNGb3JEZWJ1Z2dpbmcoKSwgIiAiLCBtX2ludGVycHJl
dGVyKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMzEzOTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzc5LDcgKzM3OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IGlmIChpbmRleCA+PSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IC0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3N0YXRlLnZhcmlhYmxl
cygpLm51bWJlck9mQXJndW1lbnRzKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gbV9zdGF0ZS5udW1iZXJPZkFyZ3VtZW50cygpIC0gMSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd01hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd01hcC5oCShyZXZpc2lvbiAyMzEzOTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
NSwyNyArNTUsMjcgQEAgcHVibGljOgogICAgIAogICAgIEdyYXBoJiBncmFwaCgpIGNvbnN0IHsg
cmV0dXJuIG1fZ3JhcGg7IH0KICAgICAKLSAgICBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgpCisg
ICAgQUxXQVlTX0lOTElORSBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgpCiAgICAgewogICAgICAg
ICByZXR1cm4gbV9tYXBbbm9kZUluZGV4XTsKICAgICB9CiAgICAgCi0gICAgVCYgYXQoTm9kZSog
bm9kZSkKKyAgICBBTFdBWVNfSU5MSU5FIFQmIGF0KE5vZGUqIG5vZGUpCiAgICAgewogICAgICAg
ICByZXR1cm4gYXQobm9kZS0+aW5kZXgoKSk7CiAgICAgfQogICAgIAotICAgIFQmIGF0U2hhZG93
KHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICBBTFdBWVNfSU5MSU5FIFQmIGF0U2hhZG93KHVuc2ln
bmVkIG5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3NoYWRvd01hcFtub2RlSW5k
ZXhdOwogICAgIH0KICAgICAKLSAgICBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKQorICAgIEFMV0FZ
U19JTkxJTkUgVCYgYXRTaGFkb3coTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBh
dFNoYWRvdyhub2RlLT5pbmRleCgpKTsKICAgICB9CiAgICAgCi0gICAgVCYgYXQodW5zaWduZWQg
bm9kZUluZGV4LCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkKKyAgICBBTFdBWVNfSU5M
SU5FIFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtp
bmQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBOb2RlRmxv
d1Byb2plY3Rpb246OlByaW1hcnk6CkBAIC04NywyMyArODcsMjMgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gKmJpdHdpc2VfY2FzdDxUKj4obnVsbHB0cik7CiAgICAgfQogICAgIAotICAgIFQm
IGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKQorICAgIEFMV0FZ
U19JTkxJTkUgVCYgYXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQp
CiAgICAgewogICAgICAgICByZXR1cm4gYXQobm9kZS0+aW5kZXgoKSwga2luZCk7CiAgICAgfQog
ICAgIAotICAgIFQmIGF0KE5vZGVGbG93UHJvamVjdGlvbiBwcm9qZWN0aW9uKQorICAgIEFMV0FZ
U19JTkxJTkUgVCYgYXQoTm9kZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pCiAgICAgewogICAg
ICAgICByZXR1cm4gYXQocHJvamVjdGlvbi5ub2RlKCksIHByb2plY3Rpb24ua2luZCgpKTsKICAg
ICB9CiAgICAgCi0gICAgY29uc3QgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZUluZGV4KTsgfQotICAgIGNv
bnN0IFQmIGF0KE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+
KHRoaXMpLT5hdChub2RlKTsgfQotICAgIGNvbnN0IFQmIGF0U2hhZG93KHVuc2lnbmVkIG5vZGVJ
bmRleCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0U2hhZG93
KG5vZGVJbmRleCk7IH0KLSAgICBjb25zdCBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXRTaGFkb3cobm9kZSk7IH0KLSAg
ICBjb25zdCBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2lu
ZCBraW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9k
ZUluZGV4LCBraW5kKTsgfQotICAgIGNvbnN0IFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93UHJv
amVjdGlvbjo6S2luZCBraW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0
aGlzKS0+YXQobm9kZSwga2luZCk7IH0KLSAgICBjb25zdCBUJiBhdChOb2RlRmxvd1Byb2plY3Rp
b24gcHJvamVjdGlvbikgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcykt
PmF0KHByb2plY3Rpb24pOyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUJiBhdCh1bnNpZ25l
ZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5h
dChub2RlSW5kZXgpOyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUJiBhdChOb2RlKiBub2Rl
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZSk7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQmIGF0U2hhZG93KHVuc2lnbmVkIG5vZGVJbmRleCkg
Y29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0U2hhZG93KG5vZGVJ
bmRleCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQmIGF0U2hhZG93KE5vZGUqIG5vZGUp
IGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdFNoYWRvdyhub2Rl
KTsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4LCBO
b2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxG
bG93TWFwKj4odGhpcyktPmF0KG5vZGVJbmRleCwga2luZCk7IH0KKyAgICBBTFdBWVNfSU5MSU5F
IGNvbnN0IFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBj
b25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZSwga2luZCk7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQmIGF0KE5vZGVGbG93UHJvamVjdGlvbiBwcm9q
ZWN0aW9uKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQocHJv
amVjdGlvbik7IH0KICAgICAKIHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0
YXRlLmNwcAkocmV2aXNpb24gMjMxMzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCwyMCArNjAs
MzIgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0JsbwogICAgIEFTU0VS
VChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Js
b2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CiAKICAgICBtX2Fic3RyYWN0
VmFsdWVzLnJlc2l6ZSgpOworCisgICAgQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBlcG9jaCA9
IEFic3RyYWN0VmFsdWVDbG9iYmVyRXBvY2g6OmZpcnN0KGJhc2ljQmxvY2stPmNmYVN0cnVjdHVy
ZUNsb2JiZXJTdGF0ZUF0SGVhZCk7CisgICAgbV9lZmZlY3RFcG9jaCA9IGVwb2NoOwogICAgIAog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+c2l6ZSgpOyBpKyspIHsKICAg
ICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uOjpmb3JFYWNoKAogICAgICAgICAgICAgYmFzaWNCbG9j
ay0+YXQoaSksIFsmXSAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGVQcm9qZWN0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yTm9kZShub2RlUHJvamVjdGlvbikuY2xlYXIoKTsKKyAgICAgICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZVByb2pl
Y3Rpb24pOworICAgICAgICAgICAgICAgIHZhbHVlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAg
dmFsdWUubV9lZmZlY3RFcG9jaCA9IGVwb2NoOwogICAgICAgICAgICAgfSk7CiAgICAgfQogCi0g
ICAgbV92YXJpYWJsZXMgPSBiYXNpY0Jsb2NrLT52YWx1ZXNBdEhlYWQ7CisgICAgZm9yIChzaXpl
X3QgaSA9IG1fdmFyaWFibGVzLnNpemUoKTsgaS0tOykgeworICAgICAgICBBYnN0cmFjdFZhbHVl
JiB2YWx1ZSA9IG1fdmFyaWFibGVzW2ldOworICAgICAgICB2YWx1ZSA9IGJhc2ljQmxvY2stPnZh
bHVlc0F0SGVhZFtpXTsKKyAgICAgICAgdmFsdWUubV9lZmZlY3RFcG9jaCA9IGVwb2NoOworICAg
IH0KICAgICAKICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CiAgICAgICAgIGZvciAo
Tm9kZUFic3RyYWN0VmFsdWVQYWlyJiBlbnRyeSA6IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRI
ZWFkKSB7Ci0gICAgICAgICAgICBpZiAoZW50cnkubm9kZS5pc1N0aWxsVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKGVudHJ5Lm5vZGUpID0gZW50cnkudmFsdWU7CisgICAgICAgICAg
ICBpZiAoZW50cnkubm9kZS5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5hdChlbnRyeS5ub2RlKTsKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGVudHJ5LnZhbHVlOworICAgICAgICAgICAgICAgIHZhbHVlLm1f
ZWZmZWN0RXBvY2ggPSBlcG9jaDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAg
ICBiYXNpY0Jsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gZmFsc2U7CkBAIC0xMjMsMTAgKzEzNSwx
MCBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKIAogICAgICAgICAg
ICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50
MzI6Ci0gICAgICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5hcmd1bWVu
dChpKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgICAgICBlbnRyeXBv
aW50LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0Tm9uQ2VsbFR5cGUoU3BlY0ludDMyT25s
eSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgRmx1
c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVh
ZC5hcmd1bWVudChpKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgICAgICAgICAg
ZW50cnlwb2ludC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldE5vbkNlbGxUeXBlKFNwZWNC
b29sZWFuKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBGbHVzaGVkQ2VsbDoKICAgICAgICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRI
ZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUobV9ncmFwaCwgU3BlY0NlbGxDaGVjayk7CkBAIC0yMDEs
MTkgKzIxMywxOSBAQCBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrCiAg
ICAgY2FzZSBUaHJlYWRlZENQUzogewogICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyAr
K2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJs
b2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICAgICAgbWVyZ2VT
dGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMuYXJndW1lbnQoYXJndW1lbnQpLCBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAgICAgICBt
ZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCB0aGlzLT5hcmd1bWVudChhcmd1bWVudCksIGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBibG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFs
dWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7Ci0gICAg
ICAgICAgICBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5sb2NhbChs
b2NhbCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpKTsKKyAgICAgICAgICAg
IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIHRoaXMtPmxvY2FsKGxvY2FsKSwgYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIGNhc2UgU1NBOiB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPnZhbHVlc0F0VGFpbC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGJsb2NrLT52
YWx1ZXNBdFRhaWxbaV0ubWVyZ2UobV92YXJpYWJsZXNbaV0pOworICAgICAgICAgICAgYmxvY2st
PnZhbHVlc0F0VGFpbFtpXS5tZXJnZSh2YXJpYWJsZUF0KGkpKTsKIAogICAgICAgICBmb3IgKE5v
ZGVBYnN0cmFjdFZhbHVlUGFpciYgdmFsdWVBdFRhaWwgOiBibG9jay0+c3NhLT52YWx1ZXNBdFRh
aWwpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlQXROb2RlID0gZm9yTm9kZSh2
YWx1ZUF0VGFpbC5ub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIzMTM5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsMjEgKzQ3LDEwNCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBjcmVhdGVW
YWx1ZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKSB7IH0KICAgICAKLSAgICBBYnN0cmFjdFZh
bHVlJiBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQorICAgIEFMV0FZU19JTkxJTkUg
QWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUpOworICAgICAgICByZXR1cm4g
ZmFzdEZvcndhcmQobV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKSk7CiAgICAgfQogICAgIAotICAg
IEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQorICAgIEFMV0FZU19JTkxJTkUgQWJz
dHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVkZ2UpCiAgICAgewogICAgICAgICByZXR1cm4gZm9y
Tm9kZShlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAotICAgIE9wZXJhbmRzPEFic3RyYWN0VmFs
dWU+JiB2YXJpYWJsZXMoKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckZvck5vZGUoTm9k
ZUZsb3dQcm9qZWN0aW9uIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbV92YXJpYWJsZXM7
CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5hdChub2Rl
KTsKKyAgICAgICAgdmFsdWUuY2xlYXIoKTsKKyAgICAgICAgdmFsdWUubV9lZmZlY3RFcG9jaCA9
IG1fZWZmZWN0RXBvY2g7CiAgICAgfQogICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVh
ckZvck5vZGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgY2xlYXJGb3JOb2RlKGVkZ2Uubm9k
ZSgpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2Rl
LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBBYnN0cmFjdFZhbHVl
JiB2YWx1ZSA9IG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSk7CisgICAgICAgIHZhbHVlLnNldCht
X2dyYXBoLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICAgICAg
dmFsdWUubV9lZmZlY3RFcG9jaCA9IG1fZWZmZWN0RXBvY2g7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRGb3JO
b2RlKEVkZ2UgZWRnZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAg
c2V0Rm9yTm9kZShlZGdlLm5vZGUoKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRz
KS4uLik7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0VHlwZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9u
IG5vZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKTsKKyAgICAgICAgdmFsdWUu
c2V0VHlwZShtX2dyYXBoLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsK
KyAgICAgICAgdmFsdWUubV9lZmZlY3RFcG9jaCA9IG1fZWZmZWN0RXBvY2g7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXRUeXBlRm9yTm9kZShFZGdlIGVkZ2UsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAg
ICB7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8QXJn
dW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXROb25DZWxsVHlwZUZv
ck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykK
KyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9hYnN0cmFjdFZhbHVlcy5h
dChub2RlKTsKKyAgICAgICAgdmFsdWUuc2V0Tm9uQ2VsbFR5cGUoc3RkOjpmb3J3YXJkPEFyZ3Vt
ZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAgICAgIHZhbHVlLm1fZWZmZWN0RXBvY2ggPSBtX2Vm
ZmVjdEVwb2NoOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKEVkZ2UgZWRnZSwg
QXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVG
b3JOb2RlKGVkZ2Uubm9kZSgpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4u
KTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIG1ha2VCeXRlY29kZVRvcEZv
ck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAgeworICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSk7CisgICAgICAgIHZhbHVlLm1h
a2VCeXRlY29kZVRvcCgpOworICAgICAgICB2YWx1ZS5tX2VmZmVjdEVwb2NoID0gbV9lZmZlY3RF
cG9jaDsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIG1ha2VCeXRlY29kZVRv
cEZvck5vZGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbWFrZUJ5dGVjb2RlVG9wRm9yTm9k
ZShlZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYWtl
SGVhcFRvcEZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCisgICAgeworICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSk7CisgICAgICAg
IHZhbHVlLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIHZhbHVlLm1fZWZmZWN0RXBvY2ggPSBtX2Vm
ZmVjdEVwb2NoOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFrZUhlYXBU
b3BGb3JOb2RlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShl
ZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+JiB2
YXJpYWJsZXNGb3JEZWJ1Z2dpbmcoKSB7IHJldHVybiBtX3ZhcmlhYmxlczsgfQorCisgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlcy5udW1i
ZXJPZkFyZ3VtZW50cygpOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7
IHJldHVybiBtX3ZhcmlhYmxlcy5udW1iZXJPZkxvY2FscygpOyB9CisgICAgQWJzdHJhY3RWYWx1
ZSYgb3BlcmFuZChpbnQgb3BlcmFuZCkgeyByZXR1cm4gZmFzdEZvcndhcmQobV92YXJpYWJsZXMu
b3BlcmFuZChvcGVyYW5kKSk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlcy5vcGVyYW5k
KG9wZXJhbmQpKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVfdCBpbmRleCkgeyBy
ZXR1cm4gZmFzdEZvcndhcmQobV92YXJpYWJsZXMubG9jYWwoaW5kZXgpKTsgfQorICAgIEFic3Ry
YWN0VmFsdWUmIGFyZ3VtZW50KHNpemVfdCBpbmRleCkgeyByZXR1cm4gZmFzdEZvcndhcmQobV92
YXJpYWJsZXMuYXJndW1lbnQoaW5kZXgpKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIHZhcmlhYmxl
QXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBmYXN0Rm9yd2FyZChtX3ZhcmlhYmxlc1tpbmRleF0p
OyB9CisgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGJlZm9yZSBiZWdpbm5pbmcgQ0ZBIHRvIGluaXRp
YWxpemUgdGhlIGFic3RyYWN0IHZhbHVlcyBvZgogICAgIC8vIGFyZ3VtZW50cywgYW5kIHRvIGlu
ZGljYXRlIHdoaWNoIGJsb2NrcyBzaG91bGQgYmUgbGlzdGVkIGZvciBDRkEKICAgICAvLyBleGVj
dXRpb24uCkBAIC0xMTksNiArMjAyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBNZXJnZVRvU3VjY2Vz
c29ycy4KICAgICBib29sIG1lcmdlVG9TdWNjZXNzb3JzKEJhc2ljQmxvY2sqKTsKICAgICAKKyAg
ICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkgeyBtX2VmZmVjdEVwb2NoLmNsb2JiZXIoKTsgfQor
ICAgIAorICAgIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCkgeyBtX2VmZmVjdEVwb2No
Lm9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpOyB9CisgICAgCiAgICAgLy8gTWV0aG9kcyBpbnRl
bmRlZCB0byBiZSBjYWxsZWQgZnJvbSBBYnN0cmFjdEludGVycHJldGVyLgogICAgIHZvaWQgc2V0
Q2xvYmJlclN0YXRlKEFic3RyYWN0SW50ZXJwcmV0ZXJDbG9iYmVyU3RhdGUgc3RhdGUpIHsgbV9j
bG9iYmVyU3RhdGUgPSBzdGF0ZTsgfQogICAgIHZvaWQgbWVyZ2VDbG9iYmVyU3RhdGUoQWJzdHJh
Y3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZSBzdGF0ZSkgeyBtX2Nsb2JiZXJTdGF0ZSA9IG1lcmdl
Q2xvYmJlclN0YXRlcyhtX2Nsb2JiZXJTdGF0ZSwgc3RhdGUpOyB9CkBAIC0xMzksNiArMjI2LDEy
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgQUxXQVlTX0lOTElORSBBYnN0cmFj
dFZhbHVlJiBmYXN0Rm9yd2FyZChBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHZhbHVlLmZhc3RGb3J3YXJkVG8obV9lZmZlY3RFcG9jaCk7CisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBtZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUm
IGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKik7CiAKICAgICBz
dGF0aWMgYm9vbCBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0
aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlKiBkZXN0aW5hdGlvbk5vZGUsIE5v
ZGUqIHNvdXJjZU5vZGUpOwpAQCAtMTU0LDYgKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2lzVmFsaWQ7CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlckNsb2JiZXJTdGF0ZSBtX2Nsb2JiZXJT
dGF0ZTsKICAgICBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgbV9zdHJ1Y3R1cmVDbG9iYmVyU3RhdGU7
CisgICAgQWJzdHJhY3RWYWx1ZUNsb2JiZXJFcG9jaCBtX2VmZmVjdEVwb2NoOwogICAgIAogICAg
IEJyYW5jaERpcmVjdGlvbiBtX2JyYW5jaERpcmVjdGlvbjsgLy8gVGhpcyBpcyBvbmx5IHNldCBm
b3IgYmxvY2tzIHRoYXQgZW5kIGluIEJyYW5jaCBhbmQgdGhhdCBleGVjdXRlIHRvIGNvbXBsZXRp
b24gKGkuZS4gbV9pc1ZhbGlkID09IHRydWUpLgogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24g
MjMxMzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyMiw3ICsxODIyLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0TG9jYWw6
IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9z
dGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMg
dHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAg
ICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRv
IHByb2NlZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIzMTM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MzIs
NyArMTkzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICB9CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOworICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKIAog
ICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IGZv
dW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNzaWdu
ZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjMxMzk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjg1LDcgKzE2ODUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUdldFN0
YWNrKCkKICAgICB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52
YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOwogICAgICAgICAKICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ29uY3JldGUoZGF0YS0+Zm9ybWF0KSwgZGF0
YS0+Zm9ybWF0KTsKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGRhdGEtPmZv
cm1hdCAhPSBGbHVzaGVkRG91YmxlLCBkYXRhLT5mb3JtYXQpOyAvLyBUaGlzIGp1c3QgaGFwcGVu
cyB0byBub3QgYXJpc2UgZm9yIEdldFN0YWNrcywgcmlnaHQgbm93LiBJdCB3b3VsZCBiZSB0cml2
aWFsIHRvIHN1cHBvcnQuCg==
</data>
<flag name="review"
          id="357920"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>